@fusion.dev/helix-headless 0.142.1 → 0.143.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.
Files changed (217) hide show
  1. package/custom-elements.json +16710 -707
  2. package/dist/accordion/item/accordion-item.d.ts +38 -2
  3. package/dist/accordion/item/accordion-item.js +38 -6
  4. package/dist/accordion/root/accordion-root.d.ts +23 -1
  5. package/dist/accordion/root/accordion-root.js +39 -3
  6. package/dist/announcement/root/announcement-root.d.ts +11 -7
  7. package/dist/announcement/root/announcement-root.js +1 -1
  8. package/dist/app-header/root/app-header-root.d.ts +21 -0
  9. package/dist/app-header/root/app-header-root.js +31 -5
  10. package/dist/area-chart/root/area-chart-root.js +16 -5
  11. package/dist/avatar/group/avatar-group.d.ts +24 -3
  12. package/dist/avatar/group/avatar-group.js +34 -2
  13. package/dist/avatar/root/avatar-root.d.ts +3 -1
  14. package/dist/avatar/root/avatar-root.js +8 -1
  15. package/dist/badge/root/badge-root.d.ts +8 -0
  16. package/dist/bar-chart/root/bar-chart-root.d.ts +19 -3
  17. package/dist/bar-chart/root/bar-chart-root.js +43 -13
  18. package/dist/blockquote/root/blockquote-root.d.ts +12 -7
  19. package/dist/blockquote/root/blockquote-root.js +6 -4
  20. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +9 -3
  21. package/dist/breadcrumbs/root/breadcrumbs-root.js +9 -1
  22. package/dist/button/root/button-root.d.ts +37 -0
  23. package/dist/button/root/button-root.js +44 -0
  24. package/dist/callout/root/callout-root.d.ts +14 -5
  25. package/dist/callout/root/callout-root.js +11 -3
  26. package/dist/canvas/root/canvas-root.d.ts +1 -0
  27. package/dist/canvas/root/canvas-root.js +10 -1
  28. package/dist/carousel/root/carousel-root.d.ts +47 -5
  29. package/dist/carousel/root/carousel-root.js +53 -21
  30. package/dist/chat/composer/chat-composer.d.ts +13 -11
  31. package/dist/chat/composer/chat-composer.js +6 -12
  32. package/dist/chat/message/chat-message.js +8 -1
  33. package/dist/chat/root/chat-root.d.ts +1 -0
  34. package/dist/chat/root/chat-root.js +2 -1
  35. package/dist/checkbox/root/checkbox-root.d.ts +7 -0
  36. package/dist/checkbox/root/checkbox-root.js +7 -3
  37. package/dist/checkbox-group/root/checkbox-group-root.d.ts +65 -32
  38. package/dist/checkbox-group/root/checkbox-group-root.js +85 -37
  39. package/dist/code/root/code-root.d.ts +1 -1
  40. package/dist/code-block/root/code-block-root.d.ts +19 -0
  41. package/dist/code-block/root/code-block-root.js +21 -1
  42. package/dist/color-input/root/color-input-root.d.ts +26 -1
  43. package/dist/color-input/root/color-input-root.js +32 -3
  44. package/dist/color-picker/root/color-picker-root.d.ts +37 -7
  45. package/dist/color-picker/root/color-picker-root.js +83 -6
  46. package/dist/combobox/root/combobox-root.d.ts +90 -2
  47. package/dist/combobox/root/combobox-root.js +160 -19
  48. package/dist/command/root/command-root.d.ts +17 -6
  49. package/dist/command/root/command-root.js +12 -1
  50. package/dist/copy-button/root/copy-button-root.d.ts +21 -6
  51. package/dist/copy-button/root/copy-button-root.js +11 -1
  52. package/dist/data-table/root/data-table-root.d.ts +164 -10
  53. package/dist/data-table/root/data-table-root.js +488 -57
  54. package/dist/date-input/root/date-input-root.d.ts +53 -8
  55. package/dist/date-input/root/date-input-root.js +70 -18
  56. package/dist/date-picker/root/date-picker-root.d.ts +84 -17
  57. package/dist/date-picker/root/date-picker-root.js +125 -20
  58. package/dist/dialog/root/dialog-root.d.ts +38 -10
  59. package/dist/dialog/root/dialog-root.js +55 -2
  60. package/dist/donut-chart/root/donut-chart-root.d.ts +39 -15
  61. package/dist/donut-chart/root/donut-chart-root.js +30 -10
  62. package/dist/drawer/root/drawer-root.d.ts +32 -7
  63. package/dist/drawer/root/drawer-root.js +50 -5
  64. package/dist/drilldown/item/drilldown-item.d.ts +16 -13
  65. package/dist/drilldown/item/drilldown-item.js +6 -2
  66. package/dist/drilldown/root/drilldown-root.d.ts +21 -5
  67. package/dist/drilldown/root/drilldown-root.js +26 -10
  68. package/dist/element-events.generated.js +35 -9
  69. package/dist/file-input/root/file-input-root.d.ts +18 -1
  70. package/dist/file-input/root/file-input-root.js +34 -8
  71. package/dist/filter-input/menu/filter-menu.d.ts +9 -0
  72. package/dist/filter-input/menu/filter-menu.js +8 -0
  73. package/dist/filter-input/root/filter-input-root.d.ts +5 -2
  74. package/dist/filter-input/root/filter-input-root.js +22 -7
  75. package/dist/format-date/root/format-date-root.d.ts +11 -3
  76. package/dist/format-date/root/format-date-root.js +26 -5
  77. package/dist/graph/root/graph-root.d.ts +24 -3
  78. package/dist/graph/root/graph-root.js +66 -12
  79. package/dist/heatmap/root/buckets.d.ts +2 -1
  80. package/dist/heatmap/root/buckets.js +5 -1
  81. package/dist/heatmap/root/heatmap-root.d.ts +27 -6
  82. package/dist/heatmap/root/heatmap-root.js +23 -6
  83. package/dist/icon/root/icon-root.d.ts +24 -3
  84. package/dist/icon/root/icon-root.js +34 -1
  85. package/dist/icon-button/root/icon-button-root.d.ts +1 -1
  86. package/dist/image/root/image-root.d.ts +9 -2
  87. package/dist/image/root/image-root.js +8 -2
  88. package/dist/input/root/input-root.d.ts +51 -9
  89. package/dist/input/root/input-root.js +46 -5
  90. package/dist/kbd/root/kbd-root.d.ts +12 -4
  91. package/dist/kbd/root/kbd-root.js +10 -11
  92. package/dist/legend/root/legend-root.d.ts +7 -0
  93. package/dist/legend/root/legend-root.js +7 -2
  94. package/dist/lightbox/item/lightbox-item.d.ts +2 -1
  95. package/dist/lightbox/root/lightbox-root.d.ts +16 -5
  96. package/dist/lightbox/root/lightbox-root.js +24 -3
  97. package/dist/line-chart/root/line-chart-root.d.ts +19 -2
  98. package/dist/line-chart/root/line-chart-root.js +40 -13
  99. package/dist/list/item/list-item.d.ts +11 -5
  100. package/dist/list/item/list-item.js +5 -6
  101. package/dist/listbox/root/listbox-root.d.ts +111 -2
  102. package/dist/listbox/root/listbox-root.js +144 -16
  103. package/dist/map/root/map-root.d.ts +19 -4
  104. package/dist/map/root/map-root.js +36 -7
  105. package/dist/megamenu/root/megamenu-root.d.ts +10 -1
  106. package/dist/megamenu/root/megamenu-root.js +10 -1
  107. package/dist/menu/item/menu-item.d.ts +41 -12
  108. package/dist/menu/item/menu-item.js +46 -3
  109. package/dist/menu/root/menu-root.d.ts +32 -2
  110. package/dist/menu/root/menu-root.js +48 -8
  111. package/dist/meter/root/meter-root.d.ts +6 -0
  112. package/dist/meter/root/meter-root.js +18 -2
  113. package/dist/navigation/root/navigation-root.d.ts +10 -2
  114. package/dist/navigation/root/navigation-root.js +13 -2
  115. package/dist/notifications/group/notification-group.d.ts +1 -0
  116. package/dist/notifications/notification/notification.d.ts +12 -0
  117. package/dist/notifications/notification/notification.js +31 -2
  118. package/dist/notifications/root/notifications-root.d.ts +7 -0
  119. package/dist/notifications/root/notifications-root.js +17 -2
  120. package/dist/number-input/root/number-input-root.d.ts +62 -7
  121. package/dist/number-input/root/number-input-root.js +68 -16
  122. package/dist/object-inspector/root/object-inspector-root.d.ts +48 -5
  123. package/dist/object-inspector/root/object-inspector-root.js +91 -11
  124. package/dist/option/root/option-root.d.ts +4 -1
  125. package/dist/option/root/option-root.js +1 -0
  126. package/dist/outline/root/outline-root.d.ts +13 -2
  127. package/dist/outline/root/outline-root.js +4 -2
  128. package/dist/pagination/root/pagination-root.d.ts +19 -1
  129. package/dist/pagination/root/pagination-root.js +49 -9
  130. package/dist/pagination/size/pagination-size.d.ts +13 -3
  131. package/dist/pagination/size/pagination-size.js +7 -0
  132. package/dist/pin-input/root/pin-input-root.d.ts +16 -0
  133. package/dist/pin-input/root/pin-input-root.js +19 -5
  134. package/dist/popover/root/popover-root.d.ts +19 -2
  135. package/dist/popover/root/popover-root.js +22 -1
  136. package/dist/progress/root/progress-root.d.ts +16 -1
  137. package/dist/progress/root/progress-root.js +31 -7
  138. package/dist/qr-code/root/qr-code-root.d.ts +19 -0
  139. package/dist/qr-code/root/qr-code-root.js +29 -1
  140. package/dist/radio/group/radio-group.d.ts +41 -0
  141. package/dist/radio/group/radio-group.js +50 -14
  142. package/dist/radio/root/radio-root.d.ts +8 -5
  143. package/dist/radio/root/radio-root.js +1 -2
  144. package/dist/rating/root/rating-root.d.ts +24 -1
  145. package/dist/rating/root/rating-root.js +24 -7
  146. package/dist/scatter-chart/root/scatter-chart-root.js +15 -7
  147. package/dist/select/root/select-root.d.ts +69 -3
  148. package/dist/select/root/select-root.js +92 -8
  149. package/dist/skeleton/root/skeleton-root.d.ts +14 -3
  150. package/dist/skeleton/root/skeleton-root.js +17 -3
  151. package/dist/skip-link/root/skip-link-root.d.ts +10 -0
  152. package/dist/skip-link/root/skip-link-root.js +15 -1
  153. package/dist/slider/root/slider-root.d.ts +20 -2
  154. package/dist/slider/root/slider-root.js +41 -3
  155. package/dist/sparkline/root/sparkline-root.d.ts +9 -10
  156. package/dist/speed-dial/item/speed-dial-item.d.ts +11 -5
  157. package/dist/speed-dial/item/speed-dial-item.js +7 -2
  158. package/dist/speed-dial/root/speed-dial-root.d.ts +15 -4
  159. package/dist/speed-dial/root/speed-dial-root.js +19 -5
  160. package/dist/splitter/root/splitter-root.d.ts +28 -6
  161. package/dist/splitter/root/splitter-root.js +35 -1
  162. package/dist/stat/root/stat-root.d.ts +7 -1
  163. package/dist/stat/root/stat-root.js +14 -1
  164. package/dist/steps/root/steps-root.js +1 -1
  165. package/dist/switch/root/switch-root.d.ts +2 -0
  166. package/dist/switch/root/switch-root.js +1 -0
  167. package/dist/table/cell/table-cell.d.ts +24 -4
  168. package/dist/table/cell/table-cell.js +21 -1
  169. package/dist/table/column/table-column.d.ts +32 -6
  170. package/dist/table/column/table-column.js +36 -6
  171. package/dist/table/root/table-root.d.ts +94 -3
  172. package/dist/table/root/table-root.js +128 -5
  173. package/dist/table/row/table-row.d.ts +7 -0
  174. package/dist/table/row/table-row.js +9 -1
  175. package/dist/tabs/root/tabs-root.d.ts +6 -1
  176. package/dist/tabs/root/tabs-root.js +6 -2
  177. package/dist/tag/root/tag-root.d.ts +23 -1
  178. package/dist/tag/root/tag-root.js +16 -2
  179. package/dist/textarea/root/textarea-root.d.ts +4 -0
  180. package/dist/textarea/root/textarea-root.js +1 -1
  181. package/dist/time-input/root/time-input-root.d.ts +28 -2
  182. package/dist/time-input/root/time-input-root.js +46 -10
  183. package/dist/time-picker/root/time-picker-root.d.ts +101 -18
  184. package/dist/time-picker/root/time-picker-root.js +115 -16
  185. package/dist/toast/root/toast-root.d.ts +64 -1
  186. package/dist/toast/root/toast-root.js +147 -2
  187. package/dist/toggle/group/toggle-group.d.ts +38 -1
  188. package/dist/toggle/group/toggle-group.js +34 -8
  189. package/dist/toggle/root/toggle-root.d.ts +14 -10
  190. package/dist/toggle/root/toggle-root.js +3 -3
  191. package/dist/toolbar/root/toolbar-root.d.ts +55 -15
  192. package/dist/toolbar/root/toolbar-root.js +99 -16
  193. package/dist/tooltip/root/tooltip-root.d.ts +37 -4
  194. package/dist/tooltip/root/tooltip-root.js +48 -0
  195. package/dist/tour/root/tour-root.d.ts +34 -5
  196. package/dist/tour/root/tour-root.js +51 -14
  197. package/dist/tour/stop/tour-stop.d.ts +18 -1
  198. package/dist/tour/stop/tour-stop.js +25 -5
  199. package/dist/tree/item/tree-item.d.ts +21 -5
  200. package/dist/tree/item/tree-item.js +14 -4
  201. package/dist/tree/root/tree-root.d.ts +29 -5
  202. package/dist/tree/root/tree-root.js +64 -8
  203. package/dist/trend/root/trend-root.d.ts +23 -1
  204. package/dist/trend/root/trend-root.js +28 -7
  205. package/dist/video/root/keys.d.ts +5 -0
  206. package/dist/video/root/keys.js +13 -1
  207. package/dist/video/root/video-root.d.ts +19 -0
  208. package/dist/video/root/video-root.js +48 -4
  209. package/dist/video-playlist/menu/video-playlist-menu.d.ts +20 -2
  210. package/dist/video-playlist/menu/video-playlist-menu.js +27 -5
  211. package/dist/video-playlist/root/video-playlist-root.js +6 -3
  212. package/dist/virtual-list/root/virtual-list-root.d.ts +52 -4
  213. package/dist/virtual-list/root/virtual-list-root.js +103 -21
  214. package/lint.json +1 -1
  215. package/package.json +5 -5
  216. package/types/jsx.d.ts +4348 -965
  217. package/types/vue.d.ts +972 -232
package/types/vue.d.ts CHANGED
@@ -165,6 +165,7 @@ import type {
165
165
  HelixHeadlessVirtualList,
166
166
  HelixBeforeCloseEvent,
167
167
  HelixBeforeOpenEvent,
168
+ ToggleEvent,
168
169
  HelixDismissEvent,
169
170
  HelixScrolledEvent,
170
171
  HelixBeforeMoveEvent,
@@ -180,9 +181,11 @@ import type {
180
181
  HelixRelabelEvent,
181
182
  HelixRemoveEvent,
182
183
  HelixSelectEvent,
184
+ HelixActivateEvent,
183
185
  HelixSendEvent,
184
186
  HelixBeforePinEvent,
185
187
  HelixHistoryEvent,
188
+ HelixPinEvent,
186
189
  HelixBeforeChangeEvent,
187
190
  HelixBeforeToggleEvent,
188
191
  HelixCopyEvent,
@@ -190,11 +193,14 @@ import type {
190
193
  HelixSampleStartEvent,
191
194
  HelixCreateEvent,
192
195
  HelixFilterEvent,
196
+ HelixFilteredEvent,
193
197
  HelixNavigateEvent,
194
198
  HelixReorderEvent,
199
+ HelixReorderedEvent,
200
+ HelixSelectedEvent,
195
201
  HelixSortEvent,
202
+ HelixSortedEvent,
196
203
  HelixFacetEvent,
197
- HelixActivateEvent,
198
204
  HelixBeforeActivateEvent,
199
205
  HelixGraphFilterEvent,
200
206
  HelixGraphLayoutEvent,
@@ -216,6 +222,8 @@ import type {
216
222
  HelixCompleteEvent,
217
223
  HelixBeforeCollapseEvent,
218
224
  HelixBeforeResizeEvent,
225
+ HelixCollapseEvent,
226
+ HelixResizedEvent,
219
227
  HelixTourAskEvent,
220
228
  HelixNextEvent,
221
229
  HelixPreviousEvent,
@@ -270,6 +278,9 @@ export type HelixHeadlessAccordionItemHelixBeforeCloseElementEvent =
270
278
  /** `helix-before-open` event type */
271
279
  export type HelixHeadlessAccordionItemHelixBeforeOpenElementEvent =
272
280
  HelixHeadlessAccordionItemElementEvent<HelixBeforeOpenEvent>;
281
+ /** `toggle` event type */
282
+ export type HelixHeadlessAccordionItemToggleElementEvent =
283
+ HelixHeadlessAccordionItemElementEvent<ToggleEvent>;
273
284
 
274
285
  export type HelixHeadlessAccordionItemVueProps = {
275
286
  /** Where the chevron sits, or `none` for no chevron.
@@ -290,6 +301,19 @@ indicator is found once at the edge rather than shifting with the text.
290
301
  `none` is for a row that carries its own affordance and would otherwise
291
302
  have two. */
292
303
  chevronPlacement?: (HelixHeadlessAccordionItem["chevronPlacement"]) | undefined;
304
+ /** Whether the section is disabled, so its trigger cannot be pressed or
305
+ reached with the arrow keys. A script can still open and close it. */
306
+ disabled?: (HelixHeadlessAccordionItem["disabled"]) | undefined;
307
+ /** The level of the heading around the trigger, from 1 to 6.
308
+
309
+ Unset takes the accordion's `heading-level`, and 3 where that is unset
310
+ too. */
311
+ "heading-level"?: (HelixHeadlessAccordionItem["headingLevel"] | `${number}`) | undefined;
312
+ /** The level of the heading around the trigger, from 1 to 6.
313
+
314
+ Unset takes the accordion's `heading-level`, and 3 where that is unset
315
+ too. */
316
+ headingLevel?: (HelixHeadlessAccordionItem["headingLevel"]) | undefined;
293
317
  /** A group name. Opening an item closes the other items with the same name,
294
318
  as `<details name>` does.
295
319
 
@@ -334,16 +358,29 @@ export type HelixHeadlessAccordionItemVueEvents = {
334
358
  /** The section is about to open. Cancelable: cancel it to keep it closed. */
335
359
  "helix-before-open": HelixHeadlessAccordionItemHelixBeforeOpenElementEvent;
336
360
  /** The section opened or closed. The event carries `newState` and `oldState`. */
337
- toggle: HelixHeadlessAccordionItemElementEvent;
361
+ toggle: HelixHeadlessAccordionItemToggleElementEvent;
338
362
  };
339
363
 
340
364
  export type HelixHeadlessAccordionVueProps = {
365
+ /** The level of the heading around each trigger, from 1 to 6.
366
+
367
+ Unset is 3. An item's own `heading-level` wins over this. */
368
+ "heading-level"?: (HelixHeadlessAccordion["headingLevel"] | `${number}`) | undefined;
369
+ /** The level of the heading around each trigger, from 1 to 6.
370
+
371
+ Unset is 3. An item's own `heading-level` wins over this. */
372
+ headingLevel?: (HelixHeadlessAccordion["headingLevel"]) | undefined;
341
373
  /** How many sections may be open at once.
342
374
 
343
375
  Absent is `multiple`, so nothing closes unexpectedly and the default costs
344
376
  no attribute on the host. `single` keeps exactly one open and refuses to
345
377
  close the last; `single-collapsible` keeps at most one and lets it close.
346
378
 
379
+ Held however a section opens: a press, `open` set from a script,
380
+ `toggleOpen()`, or `default-open` in the markup. Opening one closes the
381
+ others, and on first render only the first section written open stays
382
+ open. Under `single` the first section opens when none is written open.
383
+
347
384
  A union rather than a mode plus a `collapsible` boolean, which would make
348
385
  `collapsible` alongside `multiple` expressible and meaningless. */
349
386
  mode?: (HelixHeadlessAccordion["mode"]) | undefined;
@@ -373,9 +410,8 @@ to match `Tag` while differing from it in both directions: it carried
373
410
  components saying what a thing means, in three vocabularies, one of which
374
411
  described itself as a fourth.
375
412
 
376
- `accent` is the second emphasis, a rotation off the brand seed rather than a
377
- color of its own, so it stays in relation when somebody rethemes. `primary`
378
- is the seed itself.
413
+ `accent` is the second emphasis, the second color a theme names, and the
414
+ brand itself until one is named. `primary` is the brand.
379
415
 
380
416
  **`surface` was never a color and has moved to `separation`**, which is the
381
417
  axis that owns where a box sits relative to the page. It said the band rode
@@ -444,6 +480,9 @@ the wordmark and the actions happen to measure.
444
480
  takes a search field or a breadcrumb trail as readily as a `Navigation`, so
445
481
  the property carries the part's name, `content`. */
446
482
  contentAlign?: (HelixHeadlessAppHeader["contentAlign"]) | undefined;
483
+ /** The id of the element whose scrolling lifts the bar, for an app shell that
484
+ scrolls a container instead of the window. Unset is the window. */
485
+ scroller?: (HelixHeadlessAppHeader["scroller"]) | undefined;
447
486
  };
448
487
 
449
488
  export type HelixHeadlessAppHeaderVueEvents = {
@@ -500,6 +539,12 @@ shadow root reads a table in that root rather than one in the document. A
500
539
  Absent falls back to the table's own caption, which is usually the right
501
540
  words and is already written. */
502
541
  label?: (HelixHeadlessAreaChart["label"]) | undefined;
542
+ /** The locale the chart's own numbers are written in: its axis, its
543
+ percentages and its totals, such as `de` for `1.240` and `32 %`.
544
+
545
+ Absent uses the runtime's own. The table's cells are shown as the table
546
+ writes them, whatever this says. */
547
+ locale?: (HelixHeadlessAreaChart["locale"]) | undefined;
503
548
  };
504
549
 
505
550
  export type HelixHeadlessAreaChartVueEvents = {};
@@ -524,6 +569,16 @@ everyone, assigning a matching property rather than an attribute.
524
569
  takes no default**: `max = 0` would stamp `max="0"` onto every host that
525
570
  never asked for a limit, including on the server. */
526
571
  max?: (HelixHeadlessAvatarGroup["max"]) | undefined;
572
+ /** What a screen reader is told the count is, with `{count}` for the number.
573
+
574
+ The count shows "+3", which reads as "plus three" and says nothing about
575
+ what was counted. */
576
+ "overflow-label"?: (HelixHeadlessAvatarGroup["overflowLabel"]) | undefined;
577
+ /** What a screen reader is told the count is, with `{count}` for the number.
578
+
579
+ The count shows "+3", which reads as "plus three" and says nothing about
580
+ what was counted. */
581
+ overflowLabel?: (HelixHeadlessAvatarGroup["overflowLabel"]) | undefined;
527
582
  };
528
583
 
529
584
  export type HelixHeadlessAvatarGroupVueEvents = {};
@@ -544,7 +599,9 @@ Used for the label and the initials. */
544
599
  Falls back to the slot, or to initials, if it fails. */
545
600
  src?: (HelixHeadlessAvatar["src"]) | undefined;
546
601
  /** The image's state: `loading` while it is on its way, `loaded` once it
547
- arrives, or `error` when it fails and the initials replace it.
602
+ arrives, or `error` when it fails and the initials replace it. An avatar
603
+ with no `src` has no image to wait for, and reports `error` as well, since
604
+ the initials are what it shows.
548
605
 
549
606
  Read-only to a consumer: it is a report rather than a setting, and the same
550
607
  report `Image` gives, for the same reason. `load` and `error` fire once, so
@@ -608,6 +665,10 @@ of many thin bars, where the eye has stopped counting.
608
665
  Furniture rather than data, so the rules are inside the `aria-hidden` plot
609
666
  and reach no reader through the table. */
610
667
  gridlines?: (HelixHeadlessBarChart["gridlines"]) | undefined;
668
+ /** The word the summary puts before each series' highest reading. */
669
+ "highest-label"?: (HelixHeadlessBarChart["highestLabel"]) | undefined;
670
+ /** The word the summary puts before each series' highest reading. */
671
+ highestLabel?: (HelixHeadlessBarChart["highestLabel"]) | undefined;
611
672
  /** The names of the series to draw as lines. The other series are drawn as
612
673
  columns.
613
674
 
@@ -639,8 +700,8 @@ names are words rather than dates: a row of long names either overlaps or
639
700
  turns on its side, and neither is as readable as putting them down the left
640
701
  where they read normally.
641
702
 
642
- `orientation` and not `orientation`, which `Trend` uses in the same group for
643
- which way a number moved. */
703
+ Named `orientation` because `direction` is taken: `Trend` uses it in the
704
+ same group for which way a number moved. */
644
705
  orientation?: (HelixHeadlessBarChart["orientation"]) | undefined;
645
706
  /** The names of the series measured against a second scale of their own.
646
707
 
@@ -689,6 +750,12 @@ shadow root reads a table in that root rather than one in the document. A
689
750
  Absent falls back to the table's own caption, which is usually the right
690
751
  words and is already written. */
691
752
  label?: (HelixHeadlessBarChart["label"]) | undefined;
753
+ /** The locale the chart's own numbers are written in: its axis, its
754
+ percentages and its totals, such as `de` for `1.240` and `32 %`.
755
+
756
+ Absent uses the runtime's own. The table's cells are shown as the table
757
+ writes them, whatever this says. */
758
+ locale?: (HelixHeadlessBarChart["locale"]) | undefined;
692
759
  };
693
760
 
694
761
  export type HelixHeadlessBarChartVueEvents = {};
@@ -731,7 +798,11 @@ The consumer's decision. */
731
798
 
732
799
  export type HelixHeadlessBreadcrumbVueEvents = {};
733
800
 
734
- export type HelixHeadlessBreadcrumbsVueProps = {};
801
+ export type HelixHeadlessBreadcrumbsVueProps = {
802
+ /** The landmark's name, read by screen readers. An `aria-label` on the host
803
+ wins over it. */
804
+ label?: (HelixHeadlessBreadcrumbs["label"]) | undefined;
805
+ };
735
806
 
736
807
  export type HelixHeadlessBreadcrumbsVueEvents = {};
737
808
 
@@ -944,6 +1015,16 @@ callout reports a status, or `neutral` for an aside that reports none, and
944
1015
  never a brand role, so it takes five of the seven values. One word per axis
945
1016
  is the whole of the registry, which is why there is no `severity` beside it. */
946
1017
  tone?: (HelixHeadlessCallout["tone"]) | undefined;
1018
+ /** What a screen reader is told the tone is, such as "Fehler".
1019
+
1020
+ Absent is the English for the tone: "Error", "Information", "Note",
1021
+ "Success" or "Warning". */
1022
+ "tone-label"?: (HelixHeadlessCallout["toneLabel"]) | undefined;
1023
+ /** What a screen reader is told the tone is, such as "Fehler".
1024
+
1025
+ Absent is the English for the tone: "Error", "Information", "Note",
1026
+ "Success" or "Warning". */
1027
+ toneLabel?: (HelixHeadlessCallout["toneLabel"]) | undefined;
947
1028
  };
948
1029
 
949
1030
  export type HelixHeadlessCalloutVueEvents = {};
@@ -1521,6 +1602,9 @@ export type HelixHeadlessCarouselElementEvent<E = Event> = TypedEvent<
1521
1602
  HelixHeadlessCarousel,
1522
1603
  E
1523
1604
  >;
1605
+ /** `helix-activate` event type */
1606
+ export type HelixHeadlessCarouselHelixActivateElementEvent =
1607
+ HelixHeadlessCarouselElementEvent<HelixActivateEvent>;
1524
1608
  /** `helix-select` event type */
1525
1609
  export type HelixHeadlessCarouselHelixSelectElementEvent =
1526
1610
  HelixHeadlessCarouselElementEvent<HelixSelectEvent>;
@@ -1753,6 +1837,8 @@ case is the absent attribute, and the styles read it that way. */
1753
1837
  };
1754
1838
 
1755
1839
  export type HelixHeadlessCarouselVueEvents = {
1840
+ /** Fired after the slide in view changes, with the new index as a string in `detail.value`. */
1841
+ "helix-activate": HelixHeadlessCarouselHelixActivateElementEvent;
1756
1842
  /** Fired before the slide in view changes, with the requested index. Cancelable: cancel it to keep the current slide. Nothing moves, and a drag returns to the slide the index still holds. See `handleScroll`. */
1757
1843
  "helix-select": HelixHeadlessCarouselHelixSelectElementEvent;
1758
1844
  };
@@ -1797,13 +1883,16 @@ has to mean a new line and nothing else. */
1797
1883
  submitOn?: (HelixHeadlessChatComposer["submitOn"]) | undefined;
1798
1884
  /** The text the user has written.
1799
1885
 
1800
- Read it, or set it to seed a draft. */
1886
+ It follows typing, so reading it gives the draft. Set it to seed a draft or
1887
+ to replace the one in the field, and set it to `''` to clear it. */
1801
1888
  value?: (HelixHeadlessChatComposer["value"]) | undefined;
1802
1889
  };
1803
1890
 
1804
1891
  export type HelixHeadlessChatComposerVueEvents = {
1805
1892
  /** Fired when the user sends their turn, and cancelable. */
1806
1893
  "helix-send": HelixHeadlessChatComposerHelixSendElementEvent;
1894
+ /** The user changed the text. Read it from `value`, for a typing indicator or a saved draft. Sent on the composer and does not bubble. */
1895
+ input: HelixHeadlessChatComposerElementEvent;
1807
1896
  };
1808
1897
 
1809
1898
  /** `HelixHeadlessChatMessage` component event */
@@ -1871,6 +1960,9 @@ export type HelixHeadlessChatHelixBeforePinElementEvent =
1871
1960
  /** `helix-history` event type */
1872
1961
  export type HelixHeadlessChatHelixHistoryElementEvent =
1873
1962
  HelixHeadlessChatElementEvent<HelixHistoryEvent>;
1963
+ /** `helix-pin` event type */
1964
+ export type HelixHeadlessChatHelixPinElementEvent =
1965
+ HelixHeadlessChatElementEvent<HelixPinEvent>;
1874
1966
  /** `helix-send` event type */
1875
1967
  export type HelixHeadlessChatHelixSendElementEvent =
1876
1968
  HelixHeadlessChatElementEvent<HelixSendEvent>;
@@ -1958,6 +2050,8 @@ export type HelixHeadlessChatVueEvents = {
1958
2050
  "helix-before-pin": HelixHeadlessChatHelixBeforePinElementEvent;
1959
2051
  /** Fired when the user reaches the oldest turn while `history` is `more`. It reports the position and cannot be canceled. */
1960
2052
  "helix-history": HelixHeadlessChatHelixHistoryElementEvent;
2053
+ /** Fired after the transcript is pinned or unpinned, with `true` or `false` in `detail.value`. */
2054
+ "helix-pin": HelixHeadlessChatHelixPinElementEvent;
1961
2055
  /** Fired when the user sends a turn from the composer or retries a failed one. It is fired inside and handled here, so you can listen for it on the conversation. Cancelable: canceling it sends nothing and leaves the decision to you. */
1962
2056
  "helix-send": HelixHeadlessChatHelixSendElementEvent;
1963
2057
  };
@@ -1972,12 +2066,13 @@ export type HelixHeadlessCheckboxGroupHelixBeforeChangeElementEvent =
1972
2066
  HelixHeadlessCheckboxGroupElementEvent<HelixBeforeChangeEvent>;
1973
2067
 
1974
2068
  export type HelixHeadlessCheckboxGroupVueProps = {
1975
- /** The checked values, comma separated. */
2069
+ /** The checked values, comma separated.
2070
+
2071
+ Read from the boxes once they are known, so a box a script ticks directly
2072
+ is in it at once. Written, it is pushed onto the boxes. */
1976
2073
  value?: (HelixHeadlessCheckboxGroup["value"]) | undefined;
1977
2074
  /** */
1978
- "aria-label"?: (HelixHeadlessCheckboxGroup["namedBy"]) | undefined;
1979
- /** */
1980
- namedBy?: (HelixHeadlessCheckboxGroup["namedBy"]) | undefined;
2075
+ "aria-label"?: unknown;
1981
2076
  /** The validation message shown under the control. It replaces the
1982
2077
  browser's message. */
1983
2078
  feedback?: (HelixHeadlessCheckboxGroup["feedback"]) | undefined;
@@ -2055,7 +2150,11 @@ export type HelixHeadlessCheckboxHelixBeforeToggleElementEvent =
2055
2150
  export type HelixHeadlessCheckboxVueProps = {
2056
2151
  /** Shows the box as neither checked nor unchecked.
2057
2152
 
2058
- Presentation only. It never submits, and the first change resolves it. */
2153
+ Presentation only. It never submits, and the first change resolves it.
2154
+
2155
+ Not reflected, as no state is: the element resolves it itself, and a
2156
+ reflected one removed the attribute the consumer wrote. A stylesheet
2157
+ reads it as `:state(indeterminate)`. */
2059
2158
  indeterminate?: (HelixHeadlessCheckbox["indeterminate"]) | undefined;
2060
2159
  /** The value submitted when the box is checked. */
2061
2160
  value?: (HelixHeadlessCheckbox["value"]) | undefined;
@@ -2073,9 +2172,7 @@ stylesheets. */
2073
2172
  /** Whether the control starts checked. A form reset returns it to this state. */
2074
2173
  defaultChecked?: (HelixHeadlessCheckbox["defaultChecked"]) | undefined;
2075
2174
  /** */
2076
- "aria-label"?: (HelixHeadlessCheckbox["namedBy"]) | undefined;
2077
- /** */
2078
- namedBy?: (HelixHeadlessCheckbox["namedBy"]) | undefined;
2175
+ "aria-label"?: unknown;
2079
2176
  /** The validation message shown under the control. It replaces the
2080
2177
  browser's message. */
2081
2178
  feedback?: (HelixHeadlessCheckbox["feedback"]) | undefined;
@@ -2142,6 +2239,14 @@ export type HelixHeadlessCheckboxVueEvents = {
2142
2239
  };
2143
2240
 
2144
2241
  export type HelixHeadlessCodeBlockVueProps = {
2242
+ /** The copy button's name and tooltip text after a copy. */
2243
+ "copied-label"?: (HelixHeadlessCodeBlock["copiedLabel"]) | undefined;
2244
+ /** The copy button's name and tooltip text after a copy. */
2245
+ copiedLabel?: (HelixHeadlessCodeBlock["copiedLabel"]) | undefined;
2246
+ /** The copy button's name and tooltip text before a copy. */
2247
+ "copy-label"?: (HelixHeadlessCodeBlock["copyLabel"]) | undefined;
2248
+ /** The copy button's name and tooltip text before a copy. */
2249
+ copyLabel?: (HelixHeadlessCodeBlock["copyLabel"]) | undefined;
2145
2250
  /** Whether the content is a unified diff, drawn as the lines it changed.
2146
2251
 
2147
2252
  Reflected, because the stylesheet paints a diff differently from code, and
@@ -2220,6 +2325,9 @@ export type HelixHeadlessColorInputHelixBeforeCloseElementEvent =
2220
2325
  /** `helix-before-open` event type */
2221
2326
  export type HelixHeadlessColorInputHelixBeforeOpenElementEvent =
2222
2327
  HelixHeadlessColorInputElementEvent<HelixBeforeOpenEvent>;
2328
+ /** `toggle` event type */
2329
+ export type HelixHeadlessColorInputToggleElementEvent =
2330
+ HelixHeadlessColorInputElementEvent<ToggleEvent>;
2223
2331
 
2224
2332
  export type HelixHeadlessColorInputVueProps = {
2225
2333
  /** Whether the color carries an alpha channel. */
@@ -2247,6 +2355,16 @@ value spelled out. */
2247
2355
  noFormat?: (HelixHeadlessColorInput["noFormat"]) | undefined;
2248
2356
  /** The text the field shows before a color is entered. */
2249
2357
  placeholder?: (HelixHeadlessColorInput["placeholder"]) | undefined;
2358
+ /** Whether the color is locked. A read-only field still submits its value.
2359
+
2360
+ The field can be read and copied from, and the panel does not open, as on
2361
+ Date Input and Time Input. */
2362
+ readonly?: (HelixHeadlessColorInput["readOnly"]) | undefined;
2363
+ /** Whether the color is locked. A read-only field still submits its value.
2364
+
2365
+ The field can be read and copied from, and the panel does not open, as on
2366
+ Date Input and Time Input. */
2367
+ readOnly?: (HelixHeadlessColorInput["readOnly"]) | undefined;
2250
2368
  /** Colors offered under the picker, as a comma-separated list. */
2251
2369
  swatches?: (HelixHeadlessColorInput["swatches"]) | undefined;
2252
2370
  /** Accessible name for the control that opens the panel. */
@@ -2314,9 +2432,7 @@ same statement in markup, and `default-value` is how markup seeds a value
2314
2432
  a reset should return to. */
2315
2433
  value?: (HelixHeadlessColorInput["value"]) | undefined;
2316
2434
  /** */
2317
- "aria-label"?: (HelixHeadlessColorInput["namedBy"]) | undefined;
2318
- /** */
2319
- namedBy?: (HelixHeadlessColorInput["namedBy"]) | undefined;
2435
+ "aria-label"?: unknown;
2320
2436
  /** The validation message shown under the control. It replaces the
2321
2437
  browser's message. */
2322
2438
  feedback?: (HelixHeadlessColorInput["feedback"]) | undefined;
@@ -2385,7 +2501,7 @@ export type HelixHeadlessColorInputVueEvents = {
2385
2501
  /** Fired as the value changes. */
2386
2502
  input: HelixHeadlessColorInputElementEvent;
2387
2503
  /** The panel opened or closed. The event carries `newState` and `oldState`. */
2388
- toggle: HelixHeadlessColorInputElementEvent;
2504
+ toggle: HelixHeadlessColorInputToggleElementEvent;
2389
2505
  };
2390
2506
 
2391
2507
  /** `HelixHeadlessColorPicker` component event */
@@ -2419,6 +2535,10 @@ point.** The field holds a color, so a browser offering to fill it with a
2419
2535
  saved address is competing for the same keystrokes as the square and the
2420
2536
  ramps. A consumer who wants autofill can still ask. */
2421
2537
  autocomplete?: (HelixHeadlessColorPicker["autocomplete"]) | undefined;
2538
+ /** The message shown when the value is text that is not a color. */
2539
+ "bad-input-message"?: (HelixHeadlessColorPicker["badInputMessage"]) | undefined;
2540
+ /** The message shown when the value is text that is not a color. */
2541
+ badInputMessage?: (HelixHeadlessColorPicker["badInputMessage"]) | undefined;
2422
2542
  /** What the square's vertical ramp is called.
2423
2543
 
2424
2544
  **Every word the picker speaks is a property**, so a page in another
@@ -2575,13 +2695,11 @@ a panel composed *into* a field that already has all three, so taking it
2575
2695
  would give one control two of each. What is left is the validity call and
2576
2696
  the anchor the browser points its bubble at.
2577
2697
 
2578
- **Emptiness is the only fault reported, and bad input deliberately is
2579
- not.** The value row is typed into a character at a time and every
2580
- keystroke reaches `requestValue`, so `#0`, `#00` and `#00f` would each be a
2581
- reported fault on the way to `#00ff00`. Date Picker and Time Picker can
2582
- report bad input because their value moves only on a commit. Color Input
2583
- reports it for this family instead, once, against the field the reader
2584
- typed into. */
2698
+ **Text that is not a color is bad input**, so a form does not submit
2699
+ `#00` from a half-typed value. The picker draws no message of its own, so
2700
+ reporting it as each keystroke arrives shows nothing until the form asks;
2701
+ Color Input shows its own message against the field the reader typed
2702
+ into. */
2585
2703
  required?: (HelixHeadlessColorPicker["required"]) | undefined;
2586
2704
  /** What the square's horizontal ramp is called. */
2587
2705
  "saturation-label"?: (HelixHeadlessColorPicker["saturationLabel"]) | undefined;
@@ -2683,6 +2801,9 @@ export type HelixHeadlessComboboxHelixCreateElementEvent =
2683
2801
  /** `helix-filter` event type */
2684
2802
  export type HelixHeadlessComboboxHelixFilterElementEvent =
2685
2803
  HelixHeadlessComboboxElementEvent<HelixFilterEvent>;
2804
+ /** `toggle` event type */
2805
+ export type HelixHeadlessComboboxToggleElementEvent =
2806
+ HelixHeadlessComboboxElementEvent<ToggleEvent>;
2686
2807
 
2687
2808
  export type HelixHeadlessComboboxVueProps = {
2688
2809
  /** What the browser may autofill in the text field, as a platform token.
@@ -2697,7 +2818,8 @@ keystrokes as the listbox. A consumer who wants autofill can still ask. */
2697
2818
  The row appears while what is typed matches no option's words exactly, so
2698
2819
  it is offered next to near misses too: a reader typing "Ruby on Rails" with
2699
2820
  "Ruby" in the list wants the one they are typing, not the one they are
2700
- halfway through. */
2821
+ halfway through. The arrow keys reach it after the last option, and Enter
2822
+ on it adds what was typed. */
2701
2823
  creatable?: (HelixHeadlessCombobox["creatable"]) | undefined;
2702
2824
  /** The text of the create row, shown before the typed words it adds. */
2703
2825
  "create-label"?: (HelixHeadlessCombobox["createLabel"]) | undefined;
@@ -2740,6 +2862,16 @@ element is responsible for. */
2740
2862
  multiple?: (HelixHeadlessCombobox["multiple"]) | undefined;
2741
2863
  /** Text shown while nothing has been chosen. */
2742
2864
  placeholder?: (HelixHeadlessCombobox["placeholder"]) | undefined;
2865
+ /** Whether the choice is locked. A read-only combobox still submits its value.
2866
+
2867
+ The field can be read and focused, the list does not open, and the tags of
2868
+ a `multiple` combobox cannot be dismissed. */
2869
+ readonly?: (HelixHeadlessCombobox["readOnly"]) | undefined;
2870
+ /** Whether the choice is locked. A read-only combobox still submits its value.
2871
+
2872
+ The field can be read and focused, the list does not open, and the tags of
2873
+ a `multiple` combobox cannot be dismissed. */
2874
+ readOnly?: (HelixHeadlessCombobox["readOnly"]) | undefined;
2743
2875
  /** The name of the control that removes one chosen option, with `{name}`
2744
2876
  filled in.
2745
2877
 
@@ -2804,9 +2936,7 @@ same statement in markup, and `default-value` is how markup seeds a value
2804
2936
  a reset should return to. */
2805
2937
  value?: (HelixHeadlessCombobox["value"]) | undefined;
2806
2938
  /** */
2807
- "aria-label"?: (HelixHeadlessCombobox["namedBy"]) | undefined;
2808
- /** */
2809
- namedBy?: (HelixHeadlessCombobox["namedBy"]) | undefined;
2939
+ "aria-label"?: unknown;
2810
2940
  /** The validation message shown under the control. It replaces the
2811
2941
  browser's message. */
2812
2942
  feedback?: (HelixHeadlessCombobox["feedback"]) | undefined;
@@ -2886,7 +3016,7 @@ export type HelixHeadlessComboboxVueEvents = {
2886
3016
  /** Fired after the value changes. */
2887
3017
  input: HelixHeadlessComboboxElementEvent;
2888
3018
  /** Fired when the panel opens or closes, with `newState` and `oldState`. */
2889
- toggle: HelixHeadlessComboboxElementEvent;
3019
+ toggle: HelixHeadlessComboboxToggleElementEvent;
2890
3020
  };
2891
3021
 
2892
3022
  /** `HelixHeadlessCommand` component event */
@@ -2900,9 +3030,15 @@ export type HelixHeadlessCommandHelixBeforeCloseElementEvent =
2900
3030
  /** `helix-before-open` event type */
2901
3031
  export type HelixHeadlessCommandHelixBeforeOpenElementEvent =
2902
3032
  HelixHeadlessCommandElementEvent<HelixBeforeOpenEvent>;
3033
+ /** `helix-filter` event type */
3034
+ export type HelixHeadlessCommandHelixFilterElementEvent =
3035
+ HelixHeadlessCommandElementEvent<HelixFilterEvent>;
2903
3036
  /** `helix-select` event type */
2904
3037
  export type HelixHeadlessCommandHelixSelectElementEvent =
2905
3038
  HelixHeadlessCommandElementEvent<HelixSelectEvent>;
3039
+ /** `toggle` event type */
3040
+ export type HelixHeadlessCommandToggleElementEvent =
3041
+ HelixHeadlessCommandElementEvent<ToggleEvent>;
2906
3042
 
2907
3043
  export type HelixHeadlessCommandVueProps = {
2908
3044
  /** The text shown when the filter matches no commands. */
@@ -2917,6 +3053,15 @@ with: one key, said once. */
2917
3053
  hotkey?: (HelixHeadlessCommand["hotkey"]) | undefined;
2918
3054
  /** Accessible name for the overlay, which has no visible heading. */
2919
3055
  label?: (HelixHeadlessCommand["label"]) | undefined;
3056
+ /** Whether the commands are still loading, for a palette that asks a server
3057
+ for them as the user types.
3058
+
3059
+ Passed to the list, which shows `loading-text` and tells screen readers. */
3060
+ loading?: (HelixHeadlessCommand["loading"]) | undefined;
3061
+ /** The text shown while the commands load. */
3062
+ "loading-text"?: (HelixHeadlessCommand["loadingText"]) | undefined;
3063
+ /** The text shown while the commands load. */
3064
+ loadingText?: (HelixHeadlessCommand["loadingText"]) | undefined;
2920
3065
  /** The text shown in the filter field before anything is typed. */
2921
3066
  placeholder?: (HelixHeadlessCommand["placeholder"]) | undefined;
2922
3067
  /** Whether the element starts open. Ignored once `open` is written. */
@@ -2943,10 +3088,12 @@ export type HelixHeadlessCommandVueEvents = {
2943
3088
  "helix-before-close": HelixHeadlessCommandHelixBeforeCloseElementEvent;
2944
3089
  /** The palette is about to open. Cancelable: cancel it to keep it closed. */
2945
3090
  "helix-before-open": HelixHeadlessCommandHelixBeforeOpenElementEvent;
3091
+ /** Fired as the user types, with the text the list is filtered by. Cancelable: cancel it to leave the list unfiltered and filter the commands yourself, for example on a server while `loading` is set. */
3092
+ "helix-filter": HelixHeadlessCommandHelixFilterElementEvent;
2946
3093
  /** A command was chosen. Cancelable: cancel it to keep the palette open. */
2947
3094
  "helix-select": HelixHeadlessCommandHelixSelectElementEvent;
2948
3095
  /** The palette opened or closed. The event carries `newState` and `oldState`. */
2949
- toggle: HelixHeadlessCommandElementEvent;
3096
+ toggle: HelixHeadlessCommandToggleElementEvent;
2950
3097
  };
2951
3098
 
2952
3099
  /** `HelixHeadlessCopyButton` component event */
@@ -2977,13 +3124,11 @@ world is called Copy. A consumer with a better word still sets it. */
2977
3124
  label?: (HelixHeadlessCopyButton["label"]) | undefined;
2978
3125
  /** The text copied to the clipboard.
2979
3126
 
2980
- **Narrows `Button.value`, which is the submit value, and the two agree.**
2981
- A copy button is `type="button"` and never submits, so the inherited
2982
- meaning has nothing to act on; where a consumer changes the type, what it
2983
- submits is what it copies, which is the reading anybody would expect of one
2984
- property called `value`. Declared here rather than inherited because the
2985
- clipboard is what this component is about and its own page should say so. */
3127
+ It replaces `Button.value`, the submit value: a copy button never submits,
3128
+ whatever its `type`. Declared here so its own page says what it holds. */
2986
3129
  value?: (HelixHeadlessCopyButton["value"]) | undefined;
3130
+ /** */
3131
+ "aria-label"?: unknown;
2987
3132
  /** What to send when the button is activated, and what to send it to.
2988
3133
 
2989
3134
  The platform's invoker attributes, forwarded onto the inner `<button>`
@@ -3142,21 +3287,36 @@ export type HelixHeadlessDataTableElementEvent<E = Event> = TypedEvent<
3142
3287
  HelixHeadlessDataTable,
3143
3288
  E
3144
3289
  >;
3290
+ /** `helix-activate` event type */
3291
+ export type HelixHeadlessDataTableHelixActivateElementEvent =
3292
+ HelixHeadlessDataTableElementEvent<HelixActivateEvent>;
3145
3293
  /** `helix-filter` event type */
3146
3294
  export type HelixHeadlessDataTableHelixFilterElementEvent =
3147
3295
  HelixHeadlessDataTableElementEvent<HelixFilterEvent>;
3296
+ /** `helix-filtered` event type */
3297
+ export type HelixHeadlessDataTableHelixFilteredElementEvent =
3298
+ HelixHeadlessDataTableElementEvent<HelixFilteredEvent>;
3148
3299
  /** `helix-navigate` event type */
3149
3300
  export type HelixHeadlessDataTableHelixNavigateElementEvent =
3150
3301
  HelixHeadlessDataTableElementEvent<HelixNavigateEvent>;
3151
3302
  /** `helix-reorder` event type */
3152
3303
  export type HelixHeadlessDataTableHelixReorderElementEvent =
3153
3304
  HelixHeadlessDataTableElementEvent<HelixReorderEvent>;
3305
+ /** `helix-reordered` event type */
3306
+ export type HelixHeadlessDataTableHelixReorderedElementEvent =
3307
+ HelixHeadlessDataTableElementEvent<HelixReorderedEvent>;
3154
3308
  /** `helix-select` event type */
3155
3309
  export type HelixHeadlessDataTableHelixSelectElementEvent =
3156
3310
  HelixHeadlessDataTableElementEvent<HelixSelectEvent>;
3311
+ /** `helix-selected` event type */
3312
+ export type HelixHeadlessDataTableHelixSelectedElementEvent =
3313
+ HelixHeadlessDataTableElementEvent<HelixSelectedEvent>;
3157
3314
  /** `helix-sort` event type */
3158
3315
  export type HelixHeadlessDataTableHelixSortElementEvent =
3159
3316
  HelixHeadlessDataTableElementEvent<HelixSortEvent>;
3317
+ /** `helix-sorted` event type */
3318
+ export type HelixHeadlessDataTableHelixSortedElementEvent =
3319
+ HelixHeadlessDataTableElementEvent<HelixSortedEvent>;
3160
3320
 
3161
3321
  export type HelixHeadlessDataTableVueProps = {
3162
3322
  /** The word for an ascending sort, in `sorted-label`. */
@@ -3207,6 +3367,12 @@ One query rather than a predicate per column, which is what a reader means
3207
3367
  by a search box above a table. It matches on each column's ordering value,
3208
3368
  so search and sort cannot disagree about what a column holds. */
3209
3369
  filter?: (HelixHeadlessDataTable["filter"]) | undefined;
3370
+ /** The built-in pagination's name for a gap in its run of pages. `{page}` is
3371
+ replaced with the page it jumps to. */
3372
+ "gap-label"?: (HelixHeadlessDataTable["gapLabel"]) | undefined;
3373
+ /** The built-in pagination's name for a gap in its run of pages. `{page}` is
3374
+ replaced with the page it jumps to. */
3375
+ gapLabel?: (HelixHeadlessDataTable["gapLabel"]) | undefined;
3210
3376
  /** The grid's name, read by screen readers. */
3211
3377
  label?: (HelixHeadlessDataTable["label"]) | undefined;
3212
3378
  /** Where filtering, sorting, and paging happen. `client` does them in the
@@ -3219,6 +3385,10 @@ the client cannot hold the data, so this is not an optimization, it is the
3219
3385
  only mode that works, and it is here from the start because adding it later
3220
3386
  inverts the data flow. */
3221
3387
  mode?: (HelixHeadlessDataTable["mode"]) | undefined;
3388
+ /** The built-in pagination's name for the button that moves forward a page. */
3389
+ "next-label"?: (HelixHeadlessDataTable["nextLabel"]) | undefined;
3390
+ /** The built-in pagination's name for the button that moves forward a page. */
3391
+ nextLabel?: (HelixHeadlessDataTable["nextLabel"]) | undefined;
3222
3392
  /** The column order, as field names separated by spaces.
3223
3393
 
3224
3394
  A reader's move fires `helix-reorder` first, and refusing it leaves the
@@ -3233,6 +3403,12 @@ Clamped on the way out, so what this reports is the page it drew: a
3233
3403
  bookmarked link to page 99 of a result that has since shrunk reads back as
3234
3404
  the last page rather than as 99. */
3235
3405
  page?: (HelixHeadlessDataTable["page"]) | undefined;
3406
+ /** The built-in pagination's name for one page. `{page}` and `{pages}` are
3407
+ replaced with the page number and the page count. */
3408
+ "page-label"?: (HelixHeadlessDataTable["pageLabel"]) | undefined;
3409
+ /** The built-in pagination's name for one page. `{page}` and `{pages}` are
3410
+ replaced with the page number and the page count. */
3411
+ pageLabel?: (HelixHeadlessDataTable["pageLabel"]) | undefined;
3236
3412
  /** The number of rows on a page. `0` shows every row, with no paging.
3237
3413
 
3238
3414
  **It announces nothing, and that is not an omission.** Nothing in this
@@ -3256,11 +3432,29 @@ change pages shows a reader the first twenty rows and no way to know there
3256
3432
  are more. Off for a consumer supplying their own through the `footer` slot,
3257
3433
  which is why the slot replaces this rather than sitting beside it. */
3258
3434
  paginated?: (HelixHeadlessDataTable["paginated"]) | undefined;
3435
+ /** The name of the built-in pagination's navigation landmark. */
3436
+ "pagination-label"?: (HelixHeadlessDataTable["paginationLabel"]) | undefined;
3437
+ /** The name of the built-in pagination's navigation landmark. */
3438
+ paginationLabel?: (HelixHeadlessDataTable["paginationLabel"]) | undefined;
3439
+ /** The built-in pagination's name for the button that moves back a page. */
3440
+ "previous-label"?: (HelixHeadlessDataTable["previousLabel"]) | undefined;
3441
+ /** The built-in pagination's name for the button that moves back a page. */
3442
+ previousLabel?: (HelixHeadlessDataTable["previousLabel"]) | undefined;
3259
3443
  /** Lets users reorder the columns.
3260
3444
 
3261
3445
  Each heading with a `field` gets a grip, dragged along the header or moved a
3262
3446
  place at a time with the arrow keys once it has focus. */
3263
3447
  reorderable?: (HelixHeadlessDataTable["reorderable"]) | undefined;
3448
+ /** What screen readers hear when a search leaves one row. `{count}` is the count. */
3449
+ "result-label"?: (HelixHeadlessDataTable["resultLabel"]) | undefined;
3450
+ /** What screen readers hear when a search leaves one row. `{count}` is the count. */
3451
+ resultLabel?: (HelixHeadlessDataTable["resultLabel"]) | undefined;
3452
+ /** What screen readers hear when a search leaves any other number of rows.
3453
+ `{count}` is the count. */
3454
+ "results-label"?: (HelixHeadlessDataTable["resultsLabel"]) | undefined;
3455
+ /** What screen readers hear when a search leaves any other number of rows.
3456
+ `{count}` is the count. */
3457
+ resultsLabel?: (HelixHeadlessDataTable["resultsLabel"]) | undefined;
3264
3458
  /** The field that identifies each row.
3265
3459
 
3266
3460
  **Needed before selection exists, not after.** Lit keys the rendered rows by
@@ -3292,6 +3486,10 @@ the element, so a React page could not tell the table which field a row is. */
3292
3486
  Wants `row-key`: a selection is a set of identities, and without one the rows
3293
3487
  are known by their place in the result, which a sort changes. */
3294
3488
  selectable?: (HelixHeadlessDataTable["selectable"]) | undefined;
3489
+ /** The name of the checkbox in the heading that selects every row. */
3490
+ "select-all-label"?: (HelixHeadlessDataTable["selectAllLabel"]) | undefined;
3491
+ /** The name of the checkbox in the heading that selects every row. */
3492
+ selectAllLabel?: (HelixHeadlessDataTable["selectAllLabel"]) | undefined;
3295
3493
  /** The keys of the selected rows, separated by commas.
3296
3494
 
3297
3495
  A string rather than an array, so it is an attribute a server writes and a
@@ -3306,11 +3504,18 @@ rows are chosen. */
3306
3504
  /** What screen readers hear when the chosen rows change. `{count}` is how many
3307
3505
  rows are chosen. */
3308
3506
  selectedLabel?: (HelixHeadlessDataTable["selectedLabel"]) | undefined;
3507
+ /** The name of a row's checkbox. `{row}` is replaced with the row's value in
3508
+ the first column that has a field, or with its key. */
3509
+ "select-row-label"?: (HelixHeadlessDataTable["selectRowLabel"]) | undefined;
3510
+ /** The name of a row's checkbox. `{row}` is replaced with the row's value in
3511
+ the first column that has a field, or with its key. */
3512
+ selectRowLabel?: (HelixHeadlessDataTable["selectRowLabel"]) | undefined;
3309
3513
  /** The sort order, as `field:direction`.
3310
3514
 
3311
- Set it and this element defers: a reader's click fires `helix-sort` and
3312
- changes nothing until a new value arrives. `default-sort` seeds an order this
3313
- element then owns. */
3515
+ A reader's click on a sortable heading fires `helix-sort` first, and
3516
+ refusing it leaves the order as it was. To own the order yourself, refuse
3517
+ the event and set this to the order you chose. `default-sort` seeds an
3518
+ order this element then owns. */
3314
3519
  sort?: (HelixHeadlessDataTable["sort"]) | undefined;
3315
3520
  /** What screen readers hear when the table is sorted. `{column}` is the
3316
3521
  column's heading and `{order}` is `ascending-label` or `descending-label`. */
@@ -3375,16 +3580,26 @@ holds and reordering it under them is a mutation they did not ask for. */
3375
3580
  };
3376
3581
 
3377
3582
  export type HelixHeadlessDataTableVueEvents = {
3583
+ /** Fired after the page changes, with the new page as a string in `detail.value`. */
3584
+ "helix-activate": HelixHeadlessDataTableHelixActivateElementEvent;
3378
3585
  /** The search query is about to change. Cancelable: cancel it to keep the current query. */
3379
3586
  "helix-filter": HelixHeadlessDataTableHelixFilterElementEvent;
3587
+ /** Fired after the search query changes, with the new query. */
3588
+ "helix-filtered": HelixHeadlessDataTableHelixFilteredElementEvent;
3380
3589
  /** Another page was requested. Cancelable: cancel it to stay on the current page. */
3381
3590
  "helix-navigate": HelixHeadlessDataTableHelixNavigateElementEvent;
3382
- /** The columns were moved. The event carries every field in the new order. Cancelable: cancel it to keep the current order. */
3591
+ /** The columns are about to move. The event carries every field in the new order. Cancelable: cancel it to keep the current order. */
3383
3592
  "helix-reorder": HelixHeadlessDataTableHelixReorderElementEvent;
3384
- /** The selection changed. The event carries every selected key, separated by commas. Cancelable: cancel it to keep the current selection. */
3593
+ /** Fired after the columns move, with every field in the new order. */
3594
+ "helix-reordered": HelixHeadlessDataTableHelixReorderedElementEvent;
3595
+ /** The selection is about to change. The event carries every selected key, separated by commas. Cancelable: cancel it to keep the current selection. */
3385
3596
  "helix-select": HelixHeadlessDataTableHelixSelectElementEvent;
3597
+ /** Fired after the selection changes, with every selected key, separated by commas. */
3598
+ "helix-selected": HelixHeadlessDataTableHelixSelectedElementEvent;
3386
3599
  /** A different sort order was requested. Cancelable: cancel it to keep the current order. */
3387
3600
  "helix-sort": HelixHeadlessDataTableHelixSortElementEvent;
3601
+ /** Fired after the sort order changes, with the new order. */
3602
+ "helix-sorted": HelixHeadlessDataTableHelixSortedElementEvent;
3388
3603
  };
3389
3604
 
3390
3605
  /** `HelixHeadlessDateInput` component event */
@@ -3401,6 +3616,9 @@ export type HelixHeadlessDateInputHelixBeforeCloseElementEvent =
3401
3616
  /** `helix-before-open` event type */
3402
3617
  export type HelixHeadlessDateInputHelixBeforeOpenElementEvent =
3403
3618
  HelixHeadlessDateInputElementEvent<HelixBeforeOpenEvent>;
3619
+ /** `toggle` event type */
3620
+ export type HelixHeadlessDateInputToggleElementEvent =
3621
+ HelixHeadlessDateInputElementEvent<ToggleEvent>;
3404
3622
 
3405
3623
  export type HelixHeadlessDateInputVueProps = {
3406
3624
  /** What the browser may autofill here, as one of the platform's own tokens.
@@ -3409,6 +3627,10 @@ Empty leaves the attribute off, which is the browser's default and is what
3409
3627
  lets autofill work at all: hardcoding `off` here means a birthday or a
3410
3628
  postal code can never be filled in for a reader. */
3411
3629
  autocomplete?: (HelixHeadlessDateInput["autocomplete"]) | undefined;
3630
+ /** The name of the calendar's grid of days, read by screen readers. */
3631
+ "calendar-label"?: (HelixHeadlessDateInput["calendarLabel"]) | undefined;
3632
+ /** The name of the calendar's grid of days, read by screen readers. */
3633
+ calendarLabel?: (HelixHeadlessDateInput["calendarLabel"]) | undefined;
3412
3634
  /** How a date is written in the field: `short` through `full`, or ISO.
3413
3635
 
3414
3636
  **The field renders when it is idle and holds the value when it is being
@@ -3455,21 +3677,29 @@ rather than reading it, or where the ISO form is itself the point.
3455
3677
  The value is always `YYYY-MM-DD` regardless, because that is what a form
3456
3678
  submits and what `min` and `max` compare against. */
3457
3679
  dateStyle?: (HelixHeadlessDateInput["dateStyle"]) | undefined;
3458
- /** Dates that cannot be chosen, as a comma-separated `YYYY-MM-DD` list. */
3680
+ /** Dates that cannot be chosen, as `YYYY-MM-DD`, separated by commas or
3681
+ spaces. */
3459
3682
  "disable-dates"?: (HelixHeadlessDateInput["disableDates"]) | undefined;
3460
- /** Dates that cannot be chosen, as a comma-separated `YYYY-MM-DD` list. */
3683
+ /** Dates that cannot be chosen, as `YYYY-MM-DD`, separated by commas or
3684
+ spaces. */
3461
3685
  disableDates?: (HelixHeadlessDateInput["disableDates"]) | undefined;
3462
3686
  /** Days of the week that cannot be chosen, from `0` for Sunday to `6` for
3463
- Saturday. */
3687
+ Saturday, separated by commas or spaces. */
3464
3688
  "disable-days"?: (HelixHeadlessDateInput["disableDays"]) | undefined;
3465
3689
  /** Days of the week that cannot be chosen, from `0` for Sunday to `6` for
3466
- Saturday. */
3690
+ Saturday, separated by commas or spaces. */
3467
3691
  disableDays?: (HelixHeadlessDateInput["disableDays"]) | undefined;
3468
3692
  /** The day in the calendar's first column, from `0` for Sunday to `6` for
3469
- Saturday. */
3693
+ Saturday.
3694
+
3695
+ Absent follows `locale`, where the engine knows the week of that language,
3696
+ and is Sunday otherwise. */
3470
3697
  "first-day-of-week"?: (HelixHeadlessDateInput["firstDayOfWeek"] | `${number}`) | undefined;
3471
3698
  /** The day in the calendar's first column, from `0` for Sunday to `6` for
3472
- Saturday. */
3699
+ Saturday.
3700
+
3701
+ Absent follows `locale`, where the engine knows the week of that language,
3702
+ and is Sunday otherwise. */
3473
3703
  firstDayOfWeek?: (HelixHeadlessDateInput["firstDayOfWeek"]) | undefined;
3474
3704
  /** The language tag for the names of months and days in the calendar. */
3475
3705
  locale?: (HelixHeadlessDateInput["locale"]) | undefined;
@@ -3490,8 +3720,16 @@ an end in April otherwise means paging between them and losing sight of the
3490
3720
  first. The panel is sized by its content, so this widens it, and where the
3491
3721
  window has no room for that width it shows one month until there is. */
3492
3722
  months?: (HelixHeadlessDateInput["months"]) | undefined;
3723
+ /** The name of the calendar's control that moves to the next month. */
3724
+ "next-label"?: (HelixHeadlessDateInput["nextLabel"]) | undefined;
3725
+ /** The name of the calendar's control that moves to the next month. */
3726
+ nextLabel?: (HelixHeadlessDateInput["nextLabel"]) | undefined;
3493
3727
  /** The text the field shows before a date is entered. */
3494
3728
  placeholder?: (HelixHeadlessDateInput["placeholder"]) | undefined;
3729
+ /** The name of the calendar's control that moves to the previous month. */
3730
+ "previous-label"?: (HelixHeadlessDateInput["previousLabel"]) | undefined;
3731
+ /** The name of the calendar's control that moves to the previous month. */
3732
+ previousLabel?: (HelixHeadlessDateInput["previousLabel"]) | undefined;
3495
3733
  /** The message shown when a range holds more than two dates.
3496
3734
 
3497
3735
  **Every sentence a control raises in the browser's bubble is a property**,
@@ -3535,10 +3773,18 @@ so the field and the grid agree about which dates exist. Counted from `min`
3535
3773
  where there is one and from 1 January 1970 where there is not, which is the
3536
3774
  platform's base. */
3537
3775
  step?: (HelixHeadlessDateInput["step"]) | undefined;
3776
+ /** The message shown when a date is not on `step`. */
3777
+ "step-mismatch-message"?: (HelixHeadlessDateInput["stepMismatchMessage"]) | undefined;
3778
+ /** The message shown when a date is not on `step`. */
3779
+ stepMismatchMessage?: (HelixHeadlessDateInput["stepMismatchMessage"]) | undefined;
3538
3780
  /** The name of the button that opens the calendar, read by screen readers. */
3539
3781
  "trigger-label"?: (HelixHeadlessDateInput["triggerLabel"]) | undefined;
3540
3782
  /** The name of the button that opens the calendar, read by screen readers. */
3541
3783
  triggerLabel?: (HelixHeadlessDateInput["triggerLabel"]) | undefined;
3784
+ /** The message shown when `disable-dates` or `disable-days` bars a date. */
3785
+ "unavailable-message"?: (HelixHeadlessDateInput["unavailableMessage"]) | undefined;
3786
+ /** The message shown when `disable-dates` or `disable-days` bars a date. */
3787
+ unavailableMessage?: (HelixHeadlessDateInput["unavailableMessage"]) | undefined;
3542
3788
  /** Whether the value is locked. A read-only control still submits its value.
3543
3789
 
3544
3790
  **Enforced by refusing every request in one place**, which is the seam this
@@ -3624,9 +3870,7 @@ same statement in markup, and `default-value` is how markup seeds a value
3624
3870
  a reset should return to. */
3625
3871
  value?: (HelixHeadlessDateInput["value"]) | undefined;
3626
3872
  /** */
3627
- "aria-label"?: (HelixHeadlessDateInput["namedBy"]) | undefined;
3628
- /** */
3629
- namedBy?: (HelixHeadlessDateInput["namedBy"]) | undefined;
3873
+ "aria-label"?: unknown;
3630
3874
  /** The validation message shown under the control. It replaces the
3631
3875
  browser's message. */
3632
3876
  feedback?: (HelixHeadlessDateInput["feedback"]) | undefined;
@@ -3709,7 +3953,7 @@ export type HelixHeadlessDateInputVueEvents = {
3709
3953
  /** Fired after the value changes. */
3710
3954
  input: HelixHeadlessDateInputElementEvent;
3711
3955
  /** Fired when the calendar opens or closes, with `newState` and `oldState`. */
3712
- toggle: HelixHeadlessDateInputElementEvent;
3956
+ toggle: HelixHeadlessDateInputToggleElementEvent;
3713
3957
  };
3714
3958
 
3715
3959
  /** `HelixHeadlessDatePicker` component event */
@@ -3741,17 +3985,27 @@ speaks it. Absent is the control's own sentence, in English. */
3741
3985
  "default-month"?: (HelixHeadlessDatePicker["defaultMonth"]) | undefined;
3742
3986
  /** The month to open on when `month` is not set. */
3743
3987
  defaultMonth?: (HelixHeadlessDatePicker["defaultMonth"]) | undefined;
3744
- /** Dates that cannot be chosen, comma separated, as `YYYY-MM-DD`. */
3988
+ /** Dates that cannot be chosen, as `YYYY-MM-DD`, separated by commas or
3989
+ spaces. */
3745
3990
  "disable-dates"?: (HelixHeadlessDatePicker["disableDates"]) | undefined;
3746
- /** Dates that cannot be chosen, comma separated, as `YYYY-MM-DD`. */
3991
+ /** Dates that cannot be chosen, as `YYYY-MM-DD`, separated by commas or
3992
+ spaces. */
3747
3993
  disableDates?: (HelixHeadlessDatePicker["disableDates"]) | undefined;
3748
- /** Days of the week that cannot be chosen, comma separated, `0` to `6`. */
3994
+ /** Days of the week that cannot be chosen, `0` for Sunday to `6` for
3995
+ Saturday, separated by commas or spaces. */
3749
3996
  "disable-days"?: (HelixHeadlessDatePicker["disableDays"]) | undefined;
3750
- /** Days of the week that cannot be chosen, comma separated, `0` to `6`. */
3997
+ /** Days of the week that cannot be chosen, `0` for Sunday to `6` for
3998
+ Saturday, separated by commas or spaces. */
3751
3999
  disableDays?: (HelixHeadlessDatePicker["disableDays"]) | undefined;
3752
- /** First column of the week, `0` for Sunday through `6` for Saturday. */
4000
+ /** First column of the week, `0` for Sunday through `6` for Saturday.
4001
+
4002
+ Absent follows `locale`, where the engine knows the week of that language
4003
+ (Firefox does not), and is Sunday otherwise. */
3753
4004
  "first-day-of-week"?: (HelixHeadlessDatePicker["firstDayOfWeek"] | `${number}`) | undefined;
3754
- /** First column of the week, `0` for Sunday through `6` for Saturday. */
4005
+ /** First column of the week, `0` for Sunday through `6` for Saturday.
4006
+
4007
+ Absent follows `locale`, where the engine knows the week of that language
4008
+ (Firefox does not), and is Sunday otherwise. */
3755
4009
  firstDayOfWeek?: (HelixHeadlessDatePicker["firstDayOfWeek"]) | undefined;
3756
4010
  /** Whether the current selection fails validation. */
3757
4011
  invalid?: (HelixHeadlessDatePicker["invalid"]) | undefined;
@@ -3794,6 +4048,18 @@ would otherwise still announce its controls in English. `attribute:`
3794
4048
  spelled out, since Lit lowercases a camelCase name rather than dash-casing
3795
4049
  it. */
3796
4050
  previousLabel?: (HelixHeadlessDatePicker["previousLabel"]) | undefined;
4051
+ /** The validation message for a date after `max`. `{max}` is replaced with
4052
+ `max`, written as a date in `locale`. */
4053
+ "range-overflow-message"?: (HelixHeadlessDatePicker["rangeOverflowMessage"]) | undefined;
4054
+ /** The validation message for a date after `max`. `{max}` is replaced with
4055
+ `max`, written as a date in `locale`. */
4056
+ rangeOverflowMessage?: (HelixHeadlessDatePicker["rangeOverflowMessage"]) | undefined;
4057
+ /** The validation message for a date before `min`. `{min}` is replaced with
4058
+ `min`, written as a date in `locale`. */
4059
+ "range-underflow-message"?: (HelixHeadlessDatePicker["rangeUnderflowMessage"]) | undefined;
4060
+ /** The validation message for a date before `min`. `{min}` is replaced with
4061
+ `min`, written as a date in `locale`. */
4062
+ rangeUnderflowMessage?: (HelixHeadlessDatePicker["rangeUnderflowMessage"]) | undefined;
3797
4063
  /** Blocks changes to the dates. The value is still submitted with the form.
3798
4064
 
3799
4065
  **Enforced by refusing every request in one place**, which is the seam this
@@ -3832,6 +4098,16 @@ One is every date and needs no rule, which is why anything below one is
3832
4098
  treated as one rather than as an error: a step of zero would block every
3833
4099
  date including the one already chosen. */
3834
4100
  step?: (HelixHeadlessDatePicker["step"]) | undefined;
4101
+ /** The validation message for a date that `step` skips. */
4102
+ "step-mismatch-message"?: (HelixHeadlessDatePicker["stepMismatchMessage"]) | undefined;
4103
+ /** The validation message for a date that `step` skips. */
4104
+ stepMismatchMessage?: (HelixHeadlessDatePicker["stepMismatchMessage"]) | undefined;
4105
+ /** The validation message for a date that `disable-dates` or `disable-days`
4106
+ bars. */
4107
+ "unavailable-message"?: (HelixHeadlessDatePicker["unavailableMessage"]) | undefined;
4108
+ /** The validation message for a date that `disable-dates` or `disable-days`
4109
+ bars. */
4110
+ unavailableMessage?: (HelixHeadlessDatePicker["unavailableMessage"]) | undefined;
3835
4111
  /** The validation message for a required date picker with no date chosen. */
3836
4112
  "value-missing-message"?: (HelixHeadlessDatePicker["valueMissingMessage"]) | undefined;
3837
4113
  /** The validation message for a required date picker with no date chosen. */
@@ -3941,6 +4217,9 @@ export type HelixHeadlessDialogHelixBeforeCloseElementEvent =
3941
4217
  /** `helix-before-open` event type */
3942
4218
  export type HelixHeadlessDialogHelixBeforeOpenElementEvent =
3943
4219
  HelixHeadlessDialogElementEvent<HelixBeforeOpenEvent>;
4220
+ /** `toggle` event type */
4221
+ export type HelixHeadlessDialogToggleElementEvent =
4222
+ HelixHeadlessDialogElementEvent<ToggleEvent>;
3944
4223
 
3945
4224
  export type HelixHeadlessDialogVueProps = {
3946
4225
  /** Which close requests the browser handles on its own.
@@ -3965,7 +4244,8 @@ the property this component exists to keep.
3965
4244
  Absent by default, which is the platform's `auto` and this library's rule
3966
4245
  that a resting value is an attribute's absence. */
3967
4246
  closedBy?: (HelixHeadlessDialog["closedBy"]) | undefined;
3968
- /** Accessible name for the dialog. */
4247
+ /** Accessible name for the dialog. When it is empty, the heading in the
4248
+ `header` slot names the dialog. */
3969
4249
  label?: (HelixHeadlessDialog["label"]) | undefined;
3970
4250
  /** Stops Escape and a press on the backdrop from closing the dialog.
3971
4251
 
@@ -4015,7 +4295,7 @@ export type HelixHeadlessDialogVueEvents = {
4015
4295
  /** Fired before it opens, and cancelable. */
4016
4296
  "helix-before-open": HelixHeadlessDialogHelixBeforeOpenElementEvent;
4017
4297
  /** Sent when the dialog opens or closes, with `newState` and `oldState`. */
4018
- toggle: HelixHeadlessDialogElementEvent;
4298
+ toggle: HelixHeadlessDialogToggleElementEvent;
4019
4299
  };
4020
4300
 
4021
4301
  export type HelixHeadlessDividerVueProps = {
@@ -4101,6 +4381,12 @@ shadow root reads a table in that root rather than one in the document. A
4101
4381
  Absent falls back to the table's own caption, which is usually the right
4102
4382
  words and is already written. */
4103
4383
  label?: (HelixHeadlessDonutChart["label"]) | undefined;
4384
+ /** The locale the chart's own numbers are written in: its axis, its
4385
+ percentages and its totals, such as `de` for `1.240` and `32 %`.
4386
+
4387
+ Absent uses the runtime's own. The table's cells are shown as the table
4388
+ writes them, whatever this says. */
4389
+ locale?: (HelixHeadlessDonutChart["locale"]) | undefined;
4104
4390
  };
4105
4391
 
4106
4392
  export type HelixHeadlessDonutChartVueEvents = {};
@@ -4116,6 +4402,9 @@ export type HelixHeadlessDrawerHelixBeforeCloseElementEvent =
4116
4402
  /** `helix-before-open` event type */
4117
4403
  export type HelixHeadlessDrawerHelixBeforeOpenElementEvent =
4118
4404
  HelixHeadlessDrawerElementEvent<HelixBeforeOpenEvent>;
4405
+ /** `toggle` event type */
4406
+ export type HelixHeadlessDrawerToggleElementEvent =
4407
+ HelixHeadlessDrawerElementEvent<ToggleEvent>;
4119
4408
 
4120
4409
  export type HelixHeadlessDrawerVueProps = {
4121
4410
  /** Which close requests the browser handles on its own.
@@ -4140,7 +4429,8 @@ the property this component exists to keep.
4140
4429
  Absent by default, which is the platform's `auto` and this library's rule
4141
4430
  that a resting value is an attribute's absence. */
4142
4431
  closedBy?: (HelixHeadlessDrawer["closedBy"]) | undefined;
4143
- /** Accessible name for the panel. */
4432
+ /** Accessible name for the panel. When it is empty, the heading in the
4433
+ `header` slot names the panel. */
4144
4434
  label?: (HelixHeadlessDrawer["label"]) | undefined;
4145
4435
  /** Whether the drawer blocks the page behind it.
4146
4436
 
@@ -4203,7 +4493,7 @@ export type HelixHeadlessDrawerVueEvents = {
4203
4493
  /** Fired before the panel opens, and cancelable. Canceling it keeps the panel closed. */
4204
4494
  "helix-before-open": HelixHeadlessDrawerHelixBeforeOpenElementEvent;
4205
4495
  /** Sent when the drawer opens or closes, with `newState` and `oldState`. */
4206
- toggle: HelixHeadlessDrawerElementEvent;
4496
+ toggle: HelixHeadlessDrawerToggleElementEvent;
4207
4497
  };
4208
4498
 
4209
4499
  /** `HelixHeadlessDrilldownItem` component event */
@@ -4257,7 +4547,11 @@ export type HelixHeadlessDrilldownHelixSelectElementEvent =
4257
4547
  HelixHeadlessDrilldownElementEvent<HelixSelectEvent>;
4258
4548
 
4259
4549
  export type HelixHeadlessDrilldownVueProps = {
4260
- /** The region's name, read by screen readers. */
4550
+ /** The name of the top page's menu, read by screen readers. A page below it is
4551
+ named by its title.
4552
+
4553
+ An `aria-label` or `aria-labelledby` on the host names the top page too,
4554
+ and wins over this. */
4261
4555
  label?: (HelixHeadlessDrilldown["label"]) | undefined;
4262
4556
  /** The text of the back button. */
4263
4557
  "back-label"?: (HelixHeadlessDrilldown["backLabel"]) | undefined;
@@ -4311,7 +4605,10 @@ export type HelixHeadlessFileInputHelixBeforeChangeElementEvent =
4311
4605
  HelixHeadlessFileInputElementEvent<HelixBeforeChangeEvent>;
4312
4606
 
4313
4607
  export type HelixHeadlessFileInputVueProps = {
4314
- /** Which files the picker offers, as a native `accept` list. */
4608
+ /** Which files the picker offers and a drop takes, as a native `accept` list.
4609
+
4610
+ A dropped file the list does not name is left out, because the picker's
4611
+ filter is the only check the platform makes and a drop never meets it. */
4315
4612
  accept?: (HelixHeadlessFileInput["accept"]) | undefined;
4316
4613
  /** Which camera or microphone a mobile picker should offer, if any. */
4317
4614
  capture?: (HelixHeadlessFileInput["capture"]) | undefined;
@@ -4340,9 +4637,7 @@ removes rather than as "Remove" said once per file. A label with no
4340
4637
  /** The trigger's text when nothing is slotted into it. */
4341
4638
  triggerLabel?: (HelixHeadlessFileInput["triggerLabel"]) | undefined;
4342
4639
  /** */
4343
- "aria-label"?: (HelixHeadlessFileInput["namedBy"]) | undefined;
4344
- /** */
4345
- namedBy?: (HelixHeadlessFileInput["namedBy"]) | undefined;
4640
+ "aria-label"?: unknown;
4346
4641
  /** The validation message shown under the control. It replaces the
4347
4642
  browser's message. */
4348
4643
  feedback?: (HelixHeadlessFileInput["feedback"]) | undefined;
@@ -4599,6 +4894,9 @@ export type HelixHeadlessFilterInputHelixFacetElementEvent =
4599
4894
  /** `helix-select` event type */
4600
4895
  export type HelixHeadlessFilterInputHelixSelectElementEvent =
4601
4896
  HelixHeadlessFilterInputElementEvent<HelixSelectEvent>;
4897
+ /** `toggle` event type */
4898
+ export type HelixHeadlessFilterInputToggleElementEvent =
4899
+ HelixHeadlessFilterInputElementEvent<ToggleEvent>;
4602
4900
 
4603
4901
  export type HelixHeadlessFilterInputVueProps = {
4604
4902
  /** Shows a button that empties the field.
@@ -4663,9 +4961,7 @@ same statement in markup, and `default-value` is how markup seeds a value
4663
4961
  a reset should return to. */
4664
4962
  value?: (HelixHeadlessFilterInput["value"]) | undefined;
4665
4963
  /** */
4666
- "aria-label"?: (HelixHeadlessFilterInput["namedBy"]) | undefined;
4667
- /** */
4668
- namedBy?: (HelixHeadlessFilterInput["namedBy"]) | undefined;
4964
+ "aria-label"?: unknown;
4669
4965
  /** The validation message shown under the control. It replaces the
4670
4966
  browser's message. */
4671
4967
  feedback?: (HelixHeadlessFilterInput["feedback"]) | undefined;
@@ -4740,7 +5036,7 @@ export type HelixHeadlessFilterInputVueEvents = {
4740
5036
  /** Fired when the text changes. */
4741
5037
  input: HelixHeadlessFilterInputElementEvent;
4742
5038
  /** Fired when the suggestions panel opens or closes, with `newState` and `oldState`. */
4743
- toggle: HelixHeadlessFilterInputElementEvent;
5039
+ toggle: HelixHeadlessFilterInputToggleElementEvent;
4744
5040
  };
4745
5041
 
4746
5042
  export type HelixHeadlessFormatDateVueProps = {
@@ -5201,6 +5497,12 @@ shadow root reads a table in that root rather than one in the document. A
5201
5497
  Absent falls back to the table's own caption, which is usually the right
5202
5498
  words and is already written. */
5203
5499
  label?: (HelixHeadlessHeatmap["label"]) | undefined;
5500
+ /** The locale the chart's own numbers are written in: its axis, its
5501
+ percentages and its totals, such as `de` for `1.240` and `32 %`.
5502
+
5503
+ Absent uses the runtime's own. The table's cells are shown as the table
5504
+ writes them, whatever this says. */
5505
+ locale?: (HelixHeadlessHeatmap["locale"]) | undefined;
5204
5506
  };
5205
5507
 
5206
5508
  export type HelixHeadlessHeatmapVueEvents = {
@@ -5381,6 +5683,12 @@ invoker without an id in the same tree needs. */
5381
5683
 
5382
5684
  export type HelixHeadlessIconButtonVueEvents = {};
5383
5685
 
5686
+ /** `HelixHeadlessIcon` component event */
5687
+ export type HelixHeadlessIconElementEvent<E = Event> = TypedEvent<
5688
+ HelixHeadlessIcon,
5689
+ E
5690
+ >;
5691
+
5384
5692
  export type HelixHeadlessIconVueProps = {
5385
5693
  /** The icon's name, read by screen readers. Set it for an icon that is not
5386
5694
  decorative. */
@@ -5416,7 +5724,10 @@ for. Set both and this wins, the value being the more specific statement. */
5416
5724
  icon?: (HelixHeadlessIcon["icon"]) | undefined;
5417
5725
  };
5418
5726
 
5419
- export type HelixHeadlessIconVueEvents = {};
5727
+ export type HelixHeadlessIconVueEvents = {
5728
+ /** `name` matches no icon in the set, so nothing is drawn. */
5729
+ error: HelixHeadlessIconElementEvent;
5730
+ };
5420
5731
 
5421
5732
  /** `HelixHeadlessImage` component event */
5422
5733
  export type HelixHeadlessImageElementEvent<E = Event> = TypedEvent<
@@ -5428,7 +5739,9 @@ export type HelixHeadlessImageVueProps = {
5428
5739
  /** A text description of the image, read by screen readers.
5429
5740
 
5430
5741
  Empty is a real answer and means decoration. Omitting the attribute is not
5431
- the same thing: a reader with nothing to read announces the file name. */
5742
+ the same thing: the inner image is then written with no `alt` either, as a
5743
+ native one would be, so a screen reader announces the file name and an
5744
+ accessibility checker reports the missing description. */
5432
5745
  alt?: (HelixHeadlessImage["alt"]) | undefined;
5433
5746
  /** How the image is fetched across origins. It decides whether a canvas can
5434
5747
  read the image. */
@@ -5515,6 +5828,9 @@ export type HelixHeadlessInputHelixBeforeChangeElementEvent =
5515
5828
  HelixHeadlessInputElementEvent<HelixBeforeChangeEvent>;
5516
5829
 
5517
5830
  export type HelixHeadlessInputVueProps = {
5831
+ /** Whether a phone capitalizes as the reader types: `off`, `sentences`,
5832
+ `words` or `characters`, as the platform's `autocapitalize`. */
5833
+ autocapitalize?: (HelixHeadlessInput["autocapitalize"]) | undefined;
5518
5834
  /** What the browser may autofill in the field, as an HTML `autocomplete`
5519
5835
  token.
5520
5836
 
@@ -5532,10 +5848,29 @@ is broken. */
5532
5848
  "clear-label"?: (HelixHeadlessInput["clearLabel"]) | undefined;
5533
5849
  /** The accessible name of the clear button, which shows only an icon. */
5534
5850
  clearLabel?: (HelixHeadlessInput["clearLabel"]) | undefined;
5851
+ /** The key the on-screen keyboard shows for Enter, as the platform's
5852
+ `enterkeyhint`: `search`, `send`, `go`, `next`, `previous`, `done` or
5853
+ `enter`. */
5854
+ enterkeyhint?: (HelixHeadlessInput["enterKeyHint"]) | undefined;
5855
+ /** The key the on-screen keyboard shows for Enter, as the platform's
5856
+ `enterkeyhint`: `search`, `send`, `go`, `next`, `previous`, `done` or
5857
+ `enter`. */
5858
+ enterKeyHint?: (HelixHeadlessInput["enterKeyHint"]) | undefined;
5859
+ /** The keyboard a phone offers, as the platform's `inputmode`, such as
5860
+ `numeric` for a code typed as text. */
5861
+ inputmode?: (HelixHeadlessInput["inputMode"]) | undefined;
5862
+ /** The keyboard a phone offers, as the platform's `inputmode`, such as
5863
+ `numeric` for a code typed as text. */
5864
+ inputMode?: (HelixHeadlessInput["inputMode"]) | undefined;
5865
+ /** The greatest value, for `type="number"`. Number Input adds steppers and
5866
+ keys to the same bounds. */
5867
+ max?: (HelixHeadlessInput["max"]) | undefined;
5535
5868
  /** Most characters the value may have. */
5536
5869
  maxlength?: (HelixHeadlessInput["maxLength"] | `${number}`) | undefined;
5537
5870
  /** Most characters the value may have. */
5538
5871
  maxLength?: (HelixHeadlessInput["maxLength"]) | undefined;
5872
+ /** The least value, for `type="number"`. */
5873
+ min?: (HelixHeadlessInput["min"]) | undefined;
5539
5874
  /** Fewest characters the value may have. */
5540
5875
  minlength?: (HelixHeadlessInput["minLength"] | `${number}`) | undefined;
5541
5876
  /** Fewest characters the value may have. */
@@ -5587,6 +5922,9 @@ The state is `aria-pressed`, not this. */
5587
5922
 
5588
5923
  The state is `aria-pressed`, not this. */
5589
5924
  revealLabel?: (HelixHeadlessInput["revealLabel"]) | undefined;
5925
+ /** The step a valid value is a multiple of, counted from `min`, for
5926
+ `type="number"`. */
5927
+ step?: (HelixHeadlessInput["step"]) | undefined;
5590
5928
  /** The kind of text the field accepts. It sets the on-screen keyboard and the
5591
5929
  validation.
5592
5930
 
@@ -5612,9 +5950,7 @@ same statement in markup, and `default-value` is how markup seeds a value
5612
5950
  a reset should return to. */
5613
5951
  value?: (HelixHeadlessInput["value"]) | undefined;
5614
5952
  /** */
5615
- "aria-label"?: (HelixHeadlessInput["namedBy"]) | undefined;
5616
- /** */
5617
- namedBy?: (HelixHeadlessInput["namedBy"]) | undefined;
5953
+ "aria-label"?: unknown;
5618
5954
  /** The validation message shown under the control. It replaces the
5619
5955
  browser's message. */
5620
5956
  feedback?: (HelixHeadlessInput["feedback"]) | undefined;
@@ -5706,11 +6042,16 @@ export type HelixHeadlessKbdHelixShortcutElementEvent =
5706
6042
  HelixHeadlessKbdElementEvent<HelixShortcutEvent>;
5707
6043
 
5708
6044
  export type HelixHeadlessKbdVueProps = {
5709
- /** The key or chord to show, such as `mod+k`, `shift+?`, or `/`.
6045
+ /** The key or chord to show, such as `mod+k`, `?`, or `/`.
5710
6046
 
5711
6047
  `mod` is the platform's own command modifier, which is the reason to write
5712
6048
  a chord here rather than a glyph: it is the one token whose right answer
5713
- differs per reader. */
6049
+ differs per reader.
6050
+
6051
+ A symbol such as `?` or `!` is written as itself, without `shift`. It is
6052
+ matched whether or not Shift was held to type it, since that depends on
6053
+ the keyboard layout. Bound to the document, a chord that types a character
6054
+ is not taken from a field a reader is typing in. */
5714
6055
  keys?: (HelixHeadlessKbd["keys"]) | undefined;
5715
6056
  /** Where the chord is listened for. `control` listens inside the control the
5716
6057
  key sits in, and `document` listens on the whole page.
@@ -5757,6 +6098,11 @@ shadow root reads a table in that root rather than one in the document.
5757
6098
  **In React this arrives as a property and not as an attribute**, the way
5758
6099
  `Tooltip.for` does, so it does not reflect and nothing styles on it. */
5759
6100
  for?: (HelixHeadlessLegend["for"]) | undefined;
6101
+ /** The name of the list, which a screen reader announces before its entries.
6102
+
6103
+ Absent names the list after the table's caption, so a page with several
6104
+ charts has a legend list for each that says which chart it keys. */
6105
+ label?: (HelixHeadlessLegend["label"]) | undefined;
5760
6106
  };
5761
6107
 
5762
6108
  export type HelixHeadlessLegendVueEvents = {};
@@ -5766,7 +6112,8 @@ export type HelixHeadlessLightboxItemVueProps = {
5766
6112
 
5767
6113
  Written by the root, which is the only thing that sees the set. */
5768
6114
  current?: (HelixHeadlessLightboxItem["current"]) | undefined;
5769
- /** The item's name, used in the status text that says which item is shown. */
6115
+ /** The item's name. It names the item's group, and fills `{label}` in the
6116
+ lightbox's `status-label`. */
5770
6117
  label?: (HelixHeadlessLightboxItem["label"]) | undefined;
5771
6118
  /** The item's identifier. The root compares its `active` value against it. */
5772
6119
  value?: (HelixHeadlessLightboxItem["value"]) | undefined;
@@ -5791,6 +6138,9 @@ export type HelixHeadlessLightboxHelixBeforeCloseElementEvent =
5791
6138
  /** `helix-before-open` event type */
5792
6139
  export type HelixHeadlessLightboxHelixBeforeOpenElementEvent =
5793
6140
  HelixHeadlessLightboxElementEvent<HelixBeforeOpenEvent>;
6141
+ /** `toggle` event type */
6142
+ export type HelixHeadlessLightboxToggleElementEvent =
6143
+ HelixHeadlessLightboxElementEvent<ToggleEvent>;
5794
6144
 
5795
6145
  export type HelixHeadlessLightboxVueProps = {
5796
6146
  /** How long the user can be idle before the header and footer hide, in
@@ -5811,15 +6161,15 @@ keep the chrome up is the consumer's to decide with this. */
5811
6161
  label?: (HelixHeadlessLightbox["label"]) | undefined;
5812
6162
  /** Whether moving past the last item returns to the first. */
5813
6163
  loop?: (HelixHeadlessLightbox["loop"]) | undefined;
5814
- /** The status text that says which item is shown, with `{index}` and `{count}`
5815
- filled in.
6164
+ /** The status text that says which item is shown, with `{index}`, `{count}`
6165
+ and the item's `{label}` filled in.
5816
6166
 
5817
6167
  Announced rather than only drawn, because the picture changing under a
5818
6168
  reader who cannot see it is otherwise silent. A consumer who has their own
5819
6169
  counter in the chrome can empty this and say it themselves. */
5820
6170
  "status-label"?: (HelixHeadlessLightbox["statusLabel"]) | undefined;
5821
- /** The status text that says which item is shown, with `{index}` and `{count}`
5822
- filled in.
6171
+ /** The status text that says which item is shown, with `{index}`, `{count}`
6172
+ and the item's `{label}` filled in.
5823
6173
 
5824
6174
  Announced rather than only drawn, because the picture changing under a
5825
6175
  reader who cannot see it is otherwise silent. A consumer who has their own
@@ -5873,7 +6223,7 @@ export type HelixHeadlessLightboxVueEvents = {
5873
6223
  /** Fired before the viewer opens. Cancelable. */
5874
6224
  "helix-before-open": HelixHeadlessLightboxHelixBeforeOpenElementEvent;
5875
6225
  /** Fired when the viewer opens or closes, with `newState` and `oldState`. */
5876
- toggle: HelixHeadlessLightboxElementEvent;
6226
+ toggle: HelixHeadlessLightboxToggleElementEvent;
5877
6227
  };
5878
6228
 
5879
6229
  export type HelixHeadlessLineChartVueProps = {
@@ -5984,6 +6334,12 @@ shadow root reads a table in that root rather than one in the document. A
5984
6334
  Absent falls back to the table's own caption, which is usually the right
5985
6335
  words and is already written. */
5986
6336
  label?: (HelixHeadlessLineChart["label"]) | undefined;
6337
+ /** The locale the chart's own numbers are written in: its axis, its
6338
+ percentages and its totals, such as `de` for `1.240` and `32 %`.
6339
+
6340
+ Absent uses the runtime's own. The table's cells are shown as the table
6341
+ writes them, whatever this says. */
6342
+ locale?: (HelixHeadlessLineChart["locale"]) | undefined;
5987
6343
  };
5988
6344
 
5989
6345
  export type HelixHeadlessLineChartVueEvents = {};
@@ -6104,6 +6460,13 @@ own search boxes would be three copies of one field. */
6104
6460
  "filter-label"?: (HelixHeadlessListbox["filterLabel"]) | undefined;
6105
6461
  /** Placeholder text for the filter field. */
6106
6462
  filterLabel?: (HelixHeadlessListbox["filterLabel"]) | undefined;
6463
+ /** Stops the arrow keys from choosing each option they move to. Enter, Space
6464
+ or a click chooses the highlighted option.
6465
+
6466
+ By default a single-choice list chooses as the arrows move, as a radio
6467
+ group does. Select and Time Input set this on the list in their panel, so
6468
+ a reader can move through the options before closing the panel on one. */
6469
+ manual?: (HelixHeadlessListbox["manual"]) | undefined;
6107
6470
  /** Whether more than one option can be chosen. */
6108
6471
  multiple?: (HelixHeadlessListbox["multiple"]) | undefined;
6109
6472
  /** Whether the rows are still loading.
@@ -6128,9 +6491,7 @@ same statement in markup, and `default-value` is how markup seeds a value
6128
6491
  a reset should return to. */
6129
6492
  value?: (HelixHeadlessListbox["value"]) | undefined;
6130
6493
  /** */
6131
- "aria-label"?: (HelixHeadlessListbox["namedBy"]) | undefined;
6132
- /** */
6133
- namedBy?: (HelixHeadlessListbox["namedBy"]) | undefined;
6494
+ "aria-label"?: unknown;
6134
6495
  /** The validation message shown under the control. It replaces the
6135
6496
  browser's message. */
6136
6497
  feedback?: (HelixHeadlessListbox["feedback"]) | undefined;
@@ -6530,6 +6891,12 @@ export type HelixHeadlessMapElementEvent<E = Event> = TypedEvent<
6530
6891
  /** `helix-activate` event type */
6531
6892
  export type HelixHeadlessMapHelixActivateElementEvent =
6532
6893
  HelixHeadlessMapElementEvent<HelixActivateEvent>;
6894
+ /** `helix-before-change` event type */
6895
+ export type HelixHeadlessMapHelixBeforeChangeElementEvent =
6896
+ HelixHeadlessMapElementEvent<HelixBeforeChangeEvent>;
6897
+ /** `helix-before-toggle` event type */
6898
+ export type HelixHeadlessMapHelixBeforeToggleElementEvent =
6899
+ HelixHeadlessMapElementEvent<HelixBeforeToggleEvent>;
6533
6900
  /** `helix-map-cluster` event type */
6534
6901
  export type HelixHeadlessMapHelixMapClusterElementEvent =
6535
6902
  HelixHeadlessMapElementEvent<HelixMapClusterEvent>;
@@ -6833,8 +7200,14 @@ elsewhere. Absent is the family's own. */
6833
7200
  };
6834
7201
 
6835
7202
  export type HelixHeadlessMapVueEvents = {
7203
+ /** The layers menu changed the map type, which `map-type` now holds. */
7204
+ change: HelixHeadlessMapElementEvent;
6836
7205
  /** A marker was pressed. The value is the marker's `name`, or its `label` if it has no name. A cluster sends `helix-map-cluster` instead. */
6837
7206
  "helix-activate": HelixHeadlessMapHelixActivateElementEvent;
7207
+ /** A map type was chosen in the layers menu, with its name: `standard`, `hybrid`, or `satellite`. Cancelable: cancel it to keep the current type. */
7208
+ "helix-before-change": HelixHeadlessMapHelixBeforeChangeElementEvent;
7209
+ /** A layer's tile in the layers menu was pressed. Sent from the layer, with `checked` true when it is to be shown. Cancelable: cancel it to keep the layer as it is. */
7210
+ "helix-before-toggle": HelixHeadlessMapHelixBeforeToggleElementEvent;
6838
7211
  /** A cluster was pressed. Sent from the marker that shows the cluster, with the names of its places. */
6839
7212
  "helix-map-cluster": HelixHeadlessMapHelixMapClusterElementEvent;
6840
7213
  /** A pan button or arrow key was pressed. Move your map in response. */
@@ -6937,6 +7310,9 @@ export type HelixHeadlessMegamenuHelixBeforeCloseElementEvent =
6937
7310
  /** `helix-before-open` event type */
6938
7311
  export type HelixHeadlessMegamenuHelixBeforeOpenElementEvent =
6939
7312
  HelixHeadlessMegamenuElementEvent<HelixBeforeOpenEvent>;
7313
+ /** `toggle` event type */
7314
+ export type HelixHeadlessMegamenuToggleElementEvent =
7315
+ HelixHeadlessMegamenuElementEvent<ToggleEvent>;
6940
7316
 
6941
7317
  export type HelixHeadlessMegamenuVueProps = {
6942
7318
  /** The page width, in pixels, below which a card panel is shown as a band. At
@@ -7053,7 +7429,7 @@ export type HelixHeadlessMegamenuVueEvents = {
7053
7429
  /** The panel is about to open. Cancelable. */
7054
7430
  "helix-before-open": HelixHeadlessMegamenuHelixBeforeOpenElementEvent;
7055
7431
  /** The panel opened or closed. Carries `newState` and `oldState`. */
7056
- toggle: HelixHeadlessMegamenuElementEvent;
7432
+ toggle: HelixHeadlessMegamenuToggleElementEvent;
7057
7433
  };
7058
7434
 
7059
7435
  /** `HelixHeadlessMenuItem` component event */
@@ -7061,6 +7437,9 @@ export type HelixHeadlessMenuItemElementEvent<E = Event> = TypedEvent<
7061
7437
  HelixHeadlessMenuItem,
7062
7438
  E
7063
7439
  >;
7440
+ /** `helix-before-toggle` event type */
7441
+ export type HelixHeadlessMenuItemHelixBeforeToggleElementEvent =
7442
+ HelixHeadlessMenuItemElementEvent<HelixBeforeToggleEvent>;
7064
7443
  /** `helix-select` event type */
7065
7444
  export type HelixHeadlessMenuItemHelixSelectElementEvent =
7066
7445
  HelixHeadlessMenuItemElementEvent<HelixSelectEvent>;
@@ -7074,9 +7453,15 @@ was never tickable look identical from here. Announcing only the ticked one
7074
7453
  as a checkbox tells a reader its siblings are commands, which is the one
7075
7454
  thing they are not.
7076
7455
 
7077
- `checked` implies it, so a row that is on never has to say both. */
7456
+ `checked` implies it, so a row that is on never has to say both.
7457
+
7458
+ Choosing the row checks or unchecks it, after a `helix-before-toggle` that
7459
+ you can cancel. */
7078
7460
  checkable?: (HelixHeadlessMenuItem["checkable"]) | undefined;
7079
- /** Whether the row is checked. */
7461
+ /** Whether the row is checked.
7462
+
7463
+ The row changes it when it is chosen. Not reflected: the attribute is the
7464
+ state you start the row in, and `:state(checked)` carries the current one. */
7080
7465
  checked?: (HelixHeadlessMenuItem["checked"]) | undefined;
7081
7466
  /** Whether the row is disabled, so it cannot be chosen. */
7082
7467
  disabled?: (HelixHeadlessMenuItem["disabled"]) | undefined;
@@ -7088,11 +7473,11 @@ about who may name a file on somebody's disk rather than a gap here. */
7088
7473
  download?: (HelixHeadlessMenuItem["download"]) | undefined;
7089
7474
  /** Whether only one row in its set can be checked at a time.
7090
7475
 
7091
- Announcement and nothing else, the way `checkable` is: this element applies
7092
- no choice and polices no group, so what it does is tell a reader which kind
7093
- of set they are in. `menuitemcheckbox` says every row here is independent,
7094
- which for a run of comparisons, or the values of a filter that compares
7095
- against one, is the opposite of true.
7476
+ The set is the run of `exclusive` rows next to this one, up to the first
7477
+ element that is not one, such as a divider. Choosing a row in it checks
7478
+ that row and unchecks the others. Choosing the row that is checked leaves
7479
+ it checked. `menuitemradio` tells a reader which kind of set they are in,
7480
+ where `menuitemcheckbox` says every row is independent.
7096
7481
 
7097
7482
  Meaningless without `checkable`, since a row that cannot be ticked is not
7098
7483
  one of a set of anything. */
@@ -7140,6 +7525,8 @@ Three levels deep, the topmost row holds the slot the middle one lives in. */
7140
7525
  };
7141
7526
 
7142
7527
  export type HelixHeadlessMenuItemVueEvents = {
7528
+ /** A choice row is about to be checked or unchecked, carrying the state asked for. Cancelable: cancel it to keep the row as it is. */
7529
+ "helix-before-toggle": HelixHeadlessMenuItemHelixBeforeToggleElementEvent;
7143
7530
  /** The row was chosen. Cancelable: cancel it to keep the menu open. */
7144
7531
  "helix-select": HelixHeadlessMenuItemHelixSelectElementEvent;
7145
7532
  };
@@ -7158,13 +7545,20 @@ export type HelixHeadlessMenuHelixBeforeOpenElementEvent =
7158
7545
  /** `helix-select` event type */
7159
7546
  export type HelixHeadlessMenuHelixSelectElementEvent =
7160
7547
  HelixHeadlessMenuElementEvent<HelixSelectEvent>;
7548
+ /** `toggle` event type */
7549
+ export type HelixHeadlessMenuToggleElementEvent =
7550
+ HelixHeadlessMenuElementEvent<ToggleEvent>;
7161
7551
 
7162
7552
  export type HelixHeadlessMenuVueProps = {
7163
7553
  /** The text of the row that returns from a submenu. */
7164
7554
  "back-label"?: (HelixHeadlessMenu["backLabel"]) | undefined;
7165
7555
  /** The text of the row that returns from a submenu. */
7166
7556
  backLabel?: (HelixHeadlessMenu["backLabel"]) | undefined;
7167
- /** Accessible name for the surface. */
7557
+ /** Accessible name for the surface.
7558
+
7559
+ Empty by default, which names the surface by its trigger, so a menu opened
7560
+ from "Actions" is announced as "Actions". An `aria-label` or
7561
+ `aria-labelledby` on the host names it too, and wins over both. */
7168
7562
  label?: (HelixHeadlessMenu["label"]) | undefined;
7169
7563
  /** Space between the trigger and the surface, in pixels. */
7170
7564
  offset?: (HelixHeadlessMenu["offset"]) | undefined;
@@ -7213,7 +7607,7 @@ export type HelixHeadlessMenuVueEvents = {
7213
7607
  /** An item was chosen. Cancelable: cancel it to keep the menu open. */
7214
7608
  "helix-select": HelixHeadlessMenuHelixSelectElementEvent;
7215
7609
  /** The menu opened or closed. The event carries `newState` and `oldState`. */
7216
- toggle: HelixHeadlessMenuElementEvent;
7610
+ toggle: HelixHeadlessMenuToggleElementEvent;
7217
7611
  };
7218
7612
 
7219
7613
  export type HelixHeadlessMeterVueProps = {
@@ -7251,6 +7645,10 @@ Absent leaves the range unbanded. */
7251
7645
  high?: (HelixHeadlessMeter["high"]) | undefined;
7252
7646
  /** Accessible name for the reading. */
7253
7647
  label?: (HelixHeadlessMeter["label"]) | undefined;
7648
+ /** The locale the percentage is written in, such as `fr` for `72 %`.
7649
+
7650
+ Absent uses the runtime's own. */
7651
+ locale?: (HelixHeadlessMeter["locale"]) | undefined;
7254
7652
  /** Top of the low band.
7255
7653
 
7256
7654
  Absent leaves the range unbanded. */
@@ -7315,7 +7713,11 @@ fair summary of a task and a poor one of a quantity. */
7315
7713
  export type HelixHeadlessMeterVueEvents = {};
7316
7714
 
7317
7715
  export type HelixHeadlessNavigationVueProps = {
7318
- /** The landmark's name, read by screen readers. */
7716
+ /** The landmark's name, read by screen readers.
7717
+
7718
+ An `aria-label` or `aria-labelledby` on the host names the landmark too,
7719
+ and wins over this, so a footer navigation written the usual way is not a
7720
+ second "Main". */
7319
7721
  label?: (HelixHeadlessNavigation["label"]) | undefined;
7320
7722
  /** Stacks the destinations in a column, for a sidebar, where unset is a row
7321
7723
  for a header or a footer. The marker follows the current destination down
@@ -7336,6 +7738,9 @@ export type HelixHeadlessNotificationGroupHelixBeforeCloseElementEvent =
7336
7738
  /** `helix-before-open` event type */
7337
7739
  export type HelixHeadlessNotificationGroupHelixBeforeOpenElementEvent =
7338
7740
  HelixHeadlessNotificationGroupElementEvent<HelixBeforeOpenEvent>;
7741
+ /** `toggle` event type */
7742
+ export type HelixHeadlessNotificationGroupToggleElementEvent =
7743
+ HelixHeadlessNotificationGroupElementEvent<ToggleEvent>;
7339
7744
 
7340
7745
  export type HelixHeadlessNotificationGroupVueProps = {
7341
7746
  /** Whether the group can be collapsed to its first row.
@@ -7380,6 +7785,8 @@ export type HelixHeadlessNotificationGroupVueEvents = {
7380
7785
  "helix-before-close": HelixHeadlessNotificationGroupHelixBeforeCloseElementEvent;
7381
7786
  /** Fired before the group expands. Cancelable: cancel it to keep the group collapsed. */
7382
7787
  "helix-before-open": HelixHeadlessNotificationGroupHelixBeforeOpenElementEvent;
7788
+ /** The group expanded or collapsed. The event carries `newState` and `oldState`. */
7789
+ toggle: HelixHeadlessNotificationGroupToggleElementEvent;
7383
7790
  };
7384
7791
 
7385
7792
  /** `HelixHeadlessNotification` component event */
@@ -7424,6 +7831,16 @@ as a hydration mismatch, and which a copy of the serialized element
7424
7831
  re-parses as a declaration. `:state(read)` is what the stylesheet reads.
7425
7832
  `hydration.dom.spec.ts` holds it. */
7426
7833
  read?: (HelixHeadlessNotification["read"]) | undefined;
7834
+ /** What a screen reader hears before an unread notification's text.
7835
+
7836
+ The unread mark is drawn, so a reader who cannot see it hears this word in
7837
+ its place. Translate it with the rest of your interface. */
7838
+ "unread-label"?: (HelixHeadlessNotification["unreadLabel"]) | undefined;
7839
+ /** What a screen reader hears before an unread notification's text.
7840
+
7841
+ The unread mark is drawn, so a reader who cannot see it hears this word in
7842
+ its place. Translate it with the rest of your interface. */
7843
+ unreadLabel?: (HelixHeadlessNotification["unreadLabel"]) | undefined;
7427
7844
  /** Whether the element shows a control that dismisses it. */
7428
7845
  dismissible?: (HelixHeadlessNotification["dismissible"]) | undefined;
7429
7846
  /** The dismiss control's label, read by screen readers.
@@ -7548,6 +7965,13 @@ Ten steps, which is the convention every spinner on the platform follows,
7548
7965
  and a property because ten of a step of `0.01` is a hundredth and rarely
7549
7966
  what a reader wants from a whole key. */
7550
7967
  largeStep?: (HelixHeadlessNumberInput["largeStep"]) | undefined;
7968
+ /** The locale a typed number is read in, such as `de-DE`. Empty reads it in
7969
+ the browser's language.
7970
+
7971
+ Where the locale writes a decimal comma, `1,5` is read as one and a half,
7972
+ which is what the decimal keypad on a phone in that locale types. A dot is
7973
+ read as a decimal point in every locale. */
7974
+ locale?: (HelixHeadlessNumberInput["locale"]) | undefined;
7551
7975
  /** The largest value allowed.
7552
7976
 
7553
7977
  Absent has no ceiling. */
@@ -7585,8 +8009,29 @@ been asked for. Where it earns its place is a value a reader tunes rather
7585
8009
  than states: a duration, a weight, a count they are looking for rather than
7586
8010
  one they already know. */
7587
8011
  scrub?: (HelixHeadlessNumberInput["scrub"]) | undefined;
7588
- /** How far one step moves. */
8012
+ /** How far one step moves. A value off the step grid, counted from `min`, is
8013
+ invalid, as it is in a native number field. */
7589
8014
  step?: (HelixHeadlessNumberInput["step"]) | undefined;
8015
+ /** The message the browser shows when the number is off the step grid, with
8016
+ `{below}` and `{above}` filled in with the nearest valid values. */
8017
+ "step-mismatch-message"?: (HelixHeadlessNumberInput["stepMismatchMessage"]) | undefined;
8018
+ /** The message the browser shows when the number is off the step grid, with
8019
+ `{below}` and `{above}` filled in with the nearest valid values. */
8020
+ stepMismatchMessage?: (HelixHeadlessNumberInput["stepMismatchMessage"]) | undefined;
8021
+ /** What a screen reader says for the value, with `{value}` filled in, such as
8022
+ `{value} kilograms`.
8023
+
8024
+ A unit slotted into `end` is drawn beside the number and is not part of
8025
+ what the spinbutton announces, so it goes here too. Empty announces the
8026
+ number alone. */
8027
+ "value-text"?: (HelixHeadlessNumberInput["valueText"]) | undefined;
8028
+ /** What a screen reader says for the value, with `{value}` filled in, such as
8029
+ `{value} kilograms`.
8030
+
8031
+ A unit slotted into `end` is drawn beside the number and is not part of
8032
+ what the spinbutton announces, so it goes here too. Empty announces the
8033
+ number alone. */
8034
+ valueText?: (HelixHeadlessNumberInput["valueText"]) | undefined;
7590
8035
  /** The value the control starts with. A form reset returns it to this value. */
7591
8036
  "default-value"?: (HelixHeadlessNumberInput["defaultValue"]) | undefined;
7592
8037
  /** The value the control starts with. A form reset returns it to this value. */
@@ -7599,9 +8044,7 @@ same statement in markup, and `default-value` is how markup seeds a value
7599
8044
  a reset should return to. */
7600
8045
  value?: (HelixHeadlessNumberInput["value"]) | undefined;
7601
8046
  /** */
7602
- "aria-label"?: (HelixHeadlessNumberInput["namedBy"]) | undefined;
7603
- /** */
7604
- namedBy?: (HelixHeadlessNumberInput["namedBy"]) | undefined;
8047
+ "aria-label"?: unknown;
7605
8048
  /** The validation message shown under the control. It replaces the
7606
8049
  browser's message. */
7607
8050
  feedback?: (HelixHeadlessNumberInput["feedback"]) | undefined;
@@ -7719,6 +8162,22 @@ Read once the document exists, and again whenever this changes. Text that
7719
8162
  does not parse leaves the inspector empty rather than throwing, since a
7720
8163
  page's markup should not take the page down over a comma. */
7721
8164
  for?: (HelixHeadlessObjectInspector["for"]) | undefined;
8165
+ /** How an array of one entry counts it. `{count}` is replaced with the count. */
8166
+ "item-label"?: (HelixHeadlessObjectInspector["itemLabel"]) | undefined;
8167
+ /** How an array of one entry counts it. `{count}` is replaced with the count. */
8168
+ itemLabel?: (HelixHeadlessObjectInspector["itemLabel"]) | undefined;
8169
+ /** How an array of any other number of entries counts them. `{count}` is replaced with the count. */
8170
+ "items-label"?: (HelixHeadlessObjectInspector["itemsLabel"]) | undefined;
8171
+ /** How an array of any other number of entries counts them. `{count}` is replaced with the count. */
8172
+ itemsLabel?: (HelixHeadlessObjectInspector["itemsLabel"]) | undefined;
8173
+ /** How an object of one key counts it. `{count}` is replaced with the count. */
8174
+ "key-label"?: (HelixHeadlessObjectInspector["keyLabel"]) | undefined;
8175
+ /** How an object of one key counts it. `{count}` is replaced with the count. */
8176
+ keyLabel?: (HelixHeadlessObjectInspector["keyLabel"]) | undefined;
8177
+ /** How an object of any other number of keys counts them. `{count}` is replaced with the count. */
8178
+ "keys-label"?: (HelixHeadlessObjectInspector["keysLabel"]) | undefined;
8179
+ /** How an object of any other number of keys counts them. `{count}` is replaced with the count. */
8180
+ keysLabel?: (HelixHeadlessObjectInspector["keysLabel"]) | undefined;
7722
8181
  /** Accessible name for the tree, and the text of the header where there is one. */
7723
8182
  label?: (HelixHeadlessObjectInspector["label"]) | undefined;
7724
8183
  /** Hides the copy button.
@@ -7745,6 +8204,12 @@ who set the property. This button is positioned out of the flow and takes no
7745
8204
  room, so nothing selects on it, and reflection exists so that a selector can
7746
8205
  reach a value. */
7747
8206
  noCopy?: (HelixHeadlessObjectInspector["noCopy"]) | undefined;
8207
+ /** The tree's accessible name when `label` is empty and the host names it
8208
+ with neither `aria-label` nor `aria-labelledby`. */
8209
+ "tree-label"?: (HelixHeadlessObjectInspector["treeLabel"]) | undefined;
8210
+ /** The tree's accessible name when `label` is empty and the host names it
8211
+ with neither `aria-label` nor `aria-labelledby`. */
8212
+ treeLabel?: (HelixHeadlessObjectInspector["treeLabel"]) | undefined;
7748
8213
  /** Whether to draw only the rows in view.
7749
8214
 
7750
8215
  For a value of thousands of entries. Reflected, because the box it scrolls
@@ -7781,11 +8246,15 @@ export type HelixHeadlessOptionHelixSelectElementEvent =
7781
8246
  export type HelixHeadlessOptionVueProps = {
7782
8247
  /** Whether this is the option the keyboard is on.
7783
8248
 
7784
- Written by the listbox. */
8249
+ Written by the listbox, which writes it once a reader moves the highlight.
8250
+ It shows as `:state(active)`, and as a `data-active` attribute for the
8251
+ stylesheets written before the state existed. */
7785
8252
  "data-active"?: (HelixHeadlessOption["active"]) | undefined;
7786
8253
  /** Whether this is the option the keyboard is on.
7787
8254
 
7788
- Written by the listbox. */
8255
+ Written by the listbox, which writes it once a reader moves the highlight.
8256
+ It shows as `:state(active)`, and as a `data-active` attribute for the
8257
+ stylesheets written before the state existed. */
7789
8258
  active?: (HelixHeadlessOption["active"]) | undefined;
7790
8259
  /** A second destination for the row, opened when you choose it with the
7791
8260
  modifier key held.
@@ -7943,6 +8412,9 @@ export type HelixHeadlessPaginationElementEvent<E = Event> = TypedEvent<
7943
8412
  HelixHeadlessPagination,
7944
8413
  E
7945
8414
  >;
8415
+ /** `helix-activate` event type */
8416
+ export type HelixHeadlessPaginationHelixActivateElementEvent =
8417
+ HelixHeadlessPaginationElementEvent<HelixActivateEvent>;
7946
8418
  /** `helix-navigate` event type */
7947
8419
  export type HelixHeadlessPaginationHelixNavigateElementEvent =
7948
8420
  HelixHeadlessPaginationElementEvent<HelixNavigateEvent>;
@@ -8090,7 +8562,9 @@ to a reader, and takes its own. */
8090
8562
  };
8091
8563
 
8092
8564
  export type HelixHeadlessPaginationVueEvents = {
8093
- /** Fired before the page changes, and cancelable. Canceling it is the only way to stop a page change. */
8565
+ /** Fired after the page changes, with the new page as a string in `detail.value`. In `href` mode it comes a task after the click, once the page has moved. */
8566
+ "helix-activate": HelixHeadlessPaginationHelixActivateElementEvent;
8567
+ /** Fired before the page changes, and cancelable. Canceling it is the only way to stop a page change. `detail.page` is the page asked for, as a number, and `detail.value` is the same page as a string. */
8094
8568
  "helix-navigate": HelixHeadlessPaginationHelixNavigateElementEvent;
8095
8569
  };
8096
8570
 
@@ -8129,8 +8603,12 @@ Reading gives the real one; writing declares it the consumer's, and
8129
8603
  };
8130
8604
 
8131
8605
  export type HelixHeadlessPaginationSizeVueEvents = {
8606
+ /** Fired after the size changes. */
8607
+ change: HelixHeadlessPaginationSizeElementEvent;
8132
8608
  /** Fired before the size changes, and cancelable. Canceling it is the only way to stop a size change. */
8133
8609
  "helix-before-change": HelixHeadlessPaginationSizeHelixBeforeChangeElementEvent;
8610
+ /** Fired after the size changes, with `change`. */
8611
+ input: HelixHeadlessPaginationSizeElementEvent;
8134
8612
  };
8135
8613
 
8136
8614
  export type HelixHeadlessPaginationSummaryVueProps = {
@@ -8246,9 +8724,7 @@ same statement in markup, and `default-value` is how markup seeds a value
8246
8724
  a reset should return to. */
8247
8725
  value?: (HelixHeadlessPinInput["value"]) | undefined;
8248
8726
  /** */
8249
- "aria-label"?: (HelixHeadlessPinInput["namedBy"]) | undefined;
8250
- /** */
8251
- namedBy?: (HelixHeadlessPinInput["namedBy"]) | undefined;
8727
+ "aria-label"?: unknown;
8252
8728
  /** The validation message shown under the control. It replaces the
8253
8729
  browser's message. */
8254
8730
  feedback?: (HelixHeadlessPinInput["feedback"]) | undefined;
@@ -8327,6 +8803,9 @@ export type HelixHeadlessPopoverHelixBeforeCloseElementEvent =
8327
8803
  /** `helix-before-open` event type */
8328
8804
  export type HelixHeadlessPopoverHelixBeforeOpenElementEvent =
8329
8805
  HelixHeadlessPopoverElementEvent<HelixBeforeOpenEvent>;
8806
+ /** `toggle` event type */
8807
+ export type HelixHeadlessPopoverToggleElementEvent =
8808
+ HelixHeadlessPopoverElementEvent<ToggleEvent>;
8330
8809
 
8331
8810
  export type HelixHeadlessPopoverVueProps = {
8332
8811
  /** The panel's name, read by screen readers. */
@@ -8362,7 +8841,7 @@ export type HelixHeadlessPopoverVueEvents = {
8362
8841
  /** Fired before it opens, and cancelable. */
8363
8842
  "helix-before-open": HelixHeadlessPopoverHelixBeforeOpenElementEvent;
8364
8843
  /** Fired after the panel opens or closes, with `newState` and `oldState`. */
8365
- toggle: HelixHeadlessPopoverElementEvent;
8844
+ toggle: HelixHeadlessPopoverToggleElementEvent;
8366
8845
  };
8367
8846
 
8368
8847
  export type HelixHeadlessProgressVueProps = {
@@ -8381,8 +8860,17 @@ place in the layout when the answer arrives and it becomes determinate. */
8381
8860
  indeterminate?: (HelixHeadlessProgress["indeterminate"]) | undefined;
8382
8861
  /** Accessible name for what is in progress. */
8383
8862
  label?: (HelixHeadlessProgress["label"]) | undefined;
8863
+ /** The locale the percentage is written in, such as `fr` for `72 %`.
8864
+
8865
+ Absent uses the runtime's own. */
8866
+ locale?: (HelixHeadlessProgress["locale"]) | undefined;
8384
8867
  /** The total the work is measured against. */
8385
8868
  max?: (HelixHeadlessProgress["max"]) | undefined;
8869
+ /** Where the work starts, in the same units as `max`. Defaults to zero.
8870
+
8871
+ For a measure that does not start at nothing, such as a migration from
8872
+ version 12 to version 20, where 12 is the empty bar. */
8873
+ min?: (HelixHeadlessProgress["min"]) | undefined;
8386
8874
  /** Whether the value is drawn as a bar or as a ring.
8387
8875
 
8388
8876
  **On this tier because it changes the markup**, which is the headless tier's to
@@ -8419,7 +8907,7 @@ saying "uploading" while the bar runs. */
8419
8907
  showValue?: (HelixHeadlessProgress["showValue"]) | undefined;
8420
8908
  /** What has been done so far, in the same units as `max`.
8421
8909
 
8422
- Clamped between zero and `max` for both the fill and the announcement, so
8910
+ Clamped between `min` and `max` for both the fill and the announcement, so
8423
8911
  the two can never disagree about what is on screen. */
8424
8912
  value?: (HelixHeadlessProgress["value"]) | undefined;
8425
8913
  /** Text that describes the value when the number alone is not enough, such as
@@ -8442,6 +8930,12 @@ report progress. */
8442
8930
 
8443
8931
  export type HelixHeadlessProgressVueEvents = {};
8444
8932
 
8933
+ /** `HelixHeadlessQrCode` component event */
8934
+ export type HelixHeadlessQrCodeElementEvent<E = Event> = TypedEvent<
8935
+ HelixHeadlessQrCode,
8936
+ E
8937
+ >;
8938
+
8445
8939
  export type HelixHeadlessQrCodeVueProps = {
8446
8940
  /** The error correction level, which sets how much of the code can be lost
8447
8941
  and still scan.
@@ -8475,7 +8969,10 @@ which is what makes it read as dots rather than as a softened square code. */
8475
8969
  value?: (HelixHeadlessQrCode["value"]) | undefined;
8476
8970
  };
8477
8971
 
8478
- export type HelixHeadlessQrCodeVueEvents = {};
8972
+ export type HelixHeadlessQrCodeVueEvents = {
8973
+ /** The value is too long for a code at the correction level, so no code is drawn. */
8974
+ error: HelixHeadlessQrCodeElementEvent;
8975
+ };
8479
8976
 
8480
8977
  export type HelixHeadlessQuoteVueProps = {
8481
8978
  /** URL identifying where the quotation came from. */
@@ -8518,9 +9015,7 @@ same statement in markup, and `default-value` is how markup seeds a value
8518
9015
  a reset should return to. */
8519
9016
  value?: (HelixHeadlessRadioGroup["value"]) | undefined;
8520
9017
  /** */
8521
- "aria-label"?: (HelixHeadlessRadioGroup["namedBy"]) | undefined;
8522
- /** */
8523
- namedBy?: (HelixHeadlessRadioGroup["namedBy"]) | undefined;
9018
+ "aria-label"?: unknown;
8524
9019
  /** The validation message shown under the control. It replaces the
8525
9020
  browser's message. */
8526
9021
  feedback?: (HelixHeadlessRadioGroup["feedback"]) | undefined;
@@ -8575,6 +9070,16 @@ imperatively later, and nothing is hydrating by then.
8575
9070
 
8576
9071
  Here rather than on each control. */
8577
9072
  name?: (HelixHeadlessRadioGroup["name"]) | undefined;
9073
+ /** Whether the group holds a tab stop of its own.
9074
+
9075
+ A toolbar is one tab stop, so a toolbar the group sits in sets this to
9076
+ `false` while its stop is on another control, and every radio, the chosen
9077
+ one too, is then out of the tab order. The arrow keys inside the group
9078
+ work as before once focus is in it.
9079
+
9080
+ No attribute: it is coordination between elements, and a consumer has no
9081
+ reason to set it. */
9082
+ focusable?: (HelixHeadlessRadioGroup["focusable"]) | undefined;
8578
9083
  };
8579
9084
 
8580
9085
  export type HelixHeadlessRadioGroupVueEvents = {
@@ -8635,11 +9140,14 @@ name is the fault `TreeItem` avoids by mirroring to `data-selected`.
8635
9140
  Splitting them means moving what every stylesheet selects on, which is a
8636
9141
  change of its own rather than a property being added. */
8637
9142
  defaultSelected?: (HelixHeadlessRadio["defaultSelected"]) | undefined;
8638
- /** Whether the radio holds the group's tab stop while nothing is chosen.
9143
+ /** Whether the radio holds the group's tab stop. Unset, the chosen radio
9144
+ holds it.
8639
9145
 
8640
9146
  The stop rides on the selection, and an unanswered group has no selection,
8641
9147
  so without this every choice is `tabindex="-1"` and the keyboard cannot
8642
- enter the set at all.
9148
+ enter the set at all. The group writes `true` for the chosen radio, or for
9149
+ the first that can be chosen while nothing is, and `false` for every radio,
9150
+ the chosen one too, while a toolbar the group sits in holds the stop.
8643
9151
 
8644
9152
  **Written by the group, with no attribute, and it reaches the control
8645
9153
  rather than the host.** A `tabindex` on the host is two faults at once: it
@@ -8710,6 +9218,18 @@ read as `max`, which collapses the scale to its top score rather than
8710
9218
  leaving a rating with nothing to press. A property that silently accepts
8711
9219
  nonsense is the fault this pays off, so neither case is quietly ignored. */
8712
9220
  min?: (HelixHeadlessRating["min"]) | undefined;
9221
+ /** The name of each mark a reader can choose, with `{score}` and `{max}`
9222
+ filled in. Set it to translate "3 out of 5".
9223
+
9224
+ Also what a read-only rating says for its score where `value-text` is
9225
+ empty. */
9226
+ "option-label"?: (HelixHeadlessRating["optionLabel"]) | undefined;
9227
+ /** The name of each mark a reader can choose, with `{score}` and `{max}`
9228
+ filled in. Set it to translate "3 out of 5".
9229
+
9230
+ Also what a read-only rating says for its score where `value-text` is
9231
+ empty. */
9232
+ optionLabel?: (HelixHeadlessRating["optionLabel"]) | undefined;
8713
9233
  /** Shows the score without letting users change it.
8714
9234
 
8715
9235
  A readout is not a control that has been switched off. It takes no focus,
@@ -8773,9 +9293,7 @@ same statement in markup, and `default-value` is how markup seeds a value
8773
9293
  a reset should return to. */
8774
9294
  value?: (HelixHeadlessRating["value"]) | undefined;
8775
9295
  /** */
8776
- "aria-label"?: (HelixHeadlessRating["namedBy"]) | undefined;
8777
- /** */
8778
- namedBy?: (HelixHeadlessRating["namedBy"]) | undefined;
9296
+ "aria-label"?: unknown;
8779
9297
  /** The validation message shown under the control. It replaces the
8780
9298
  browser's message. */
8781
9299
  feedback?: (HelixHeadlessRating["feedback"]) | undefined;
@@ -8877,6 +9395,12 @@ shadow root reads a table in that root rather than one in the document. A
8877
9395
  Absent falls back to the table's own caption, which is usually the right
8878
9396
  words and is already written. */
8879
9397
  label?: (HelixHeadlessScatterChart["label"]) | undefined;
9398
+ /** The locale the chart's own numbers are written in: its axis, its
9399
+ percentages and its totals, such as `de` for `1.240` and `32 %`.
9400
+
9401
+ Absent uses the runtime's own. The table's cells are shown as the table
9402
+ writes them, whatever this says. */
9403
+ locale?: (HelixHeadlessScatterChart["locale"]) | undefined;
8880
9404
  };
8881
9405
 
8882
9406
  export type HelixHeadlessScatterChartVueEvents = {};
@@ -8904,6 +9428,12 @@ export type HelixHeadlessSelectHelixBeforeCloseElementEvent =
8904
9428
  /** `helix-before-open` event type */
8905
9429
  export type HelixHeadlessSelectHelixBeforeOpenElementEvent =
8906
9430
  HelixHeadlessSelectElementEvent<HelixBeforeOpenEvent>;
9431
+ /** `helix-filter` event type */
9432
+ export type HelixHeadlessSelectHelixFilterElementEvent =
9433
+ HelixHeadlessSelectElementEvent<HelixFilterEvent>;
9434
+ /** `toggle` event type */
9435
+ export type HelixHeadlessSelectToggleElementEvent =
9436
+ HelixHeadlessSelectElementEvent<ToggleEvent>;
8907
9437
 
8908
9438
  export type HelixHeadlessSelectVueProps = {
8909
9439
  /** The text shown when no options match the filter. */
@@ -8958,9 +9488,7 @@ same statement in markup, and `default-value` is how markup seeds a value
8958
9488
  a reset should return to. */
8959
9489
  value?: (HelixHeadlessSelect["value"]) | undefined;
8960
9490
  /** */
8961
- "aria-label"?: (HelixHeadlessSelect["namedBy"]) | undefined;
8962
- /** */
8963
- namedBy?: (HelixHeadlessSelect["namedBy"]) | undefined;
9491
+ "aria-label"?: unknown;
8964
9492
  /** The validation message shown under the control. It replaces the
8965
9493
  browser's message. */
8966
9494
  feedback?: (HelixHeadlessSelect["feedback"]) | undefined;
@@ -9033,13 +9561,21 @@ export type HelixHeadlessSelectVueEvents = {
9033
9561
  "helix-before-close": HelixHeadlessSelectHelixBeforeCloseElementEvent;
9034
9562
  /** Fired before the list opens. Cancelable: canceling it keeps the list closed and leaves the decision to you. */
9035
9563
  "helix-before-open": HelixHeadlessSelectHelixBeforeOpenElementEvent;
9564
+ /** Fired as the user types in the filter field of a `filterable` select, with the text the list is filtered by. Cancelable: cancel it to leave the list unfiltered and filter the options yourself. */
9565
+ "helix-filter": HelixHeadlessSelectHelixFilterElementEvent;
9036
9566
  /** Fired after the value changes. */
9037
9567
  input: HelixHeadlessSelectElementEvent;
9038
9568
  /** Fired after the list opens or closes, with `newState` and `oldState`. */
9039
- toggle: HelixHeadlessSelectElementEvent;
9569
+ toggle: HelixHeadlessSelectToggleElementEvent;
9040
9570
  };
9041
9571
 
9042
- export type HelixHeadlessSkeletonVueProps = {};
9572
+ export type HelixHeadlessSkeletonVueProps = {
9573
+ /** What is loading, read out as the placeholder's name, such as "Loading
9574
+ profile".
9575
+
9576
+ Absent hides the placeholder from screen readers. */
9577
+ label?: (HelixHeadlessSkeleton["label"]) | undefined;
9578
+ };
9043
9579
 
9044
9580
  export type HelixHeadlessSkeletonVueEvents = {};
9045
9581
 
@@ -9135,6 +9671,12 @@ the two, since a range has no single number. */
9135
9671
  showValue?: (HelixHeadlessSlider["showValue"]) | undefined;
9136
9672
  /** How far one press of an arrow key moves the thumb. */
9137
9673
  step?: (HelixHeadlessSlider["step"]) | undefined;
9674
+ /** What a screen reader says for a thumb's value, with `{value}` filled in,
9675
+ such as `{value} degrees`. Empty announces the number alone. */
9676
+ "value-text"?: (HelixHeadlessSlider["valueText"]) | undefined;
9677
+ /** What a screen reader says for a thumb's value, with `{value}` filled in,
9678
+ such as `{value} degrees`. Empty announces the number alone. */
9679
+ valueText?: (HelixHeadlessSlider["valueText"]) | undefined;
9138
9680
  /** The value the control starts with. A form reset returns it to this value. */
9139
9681
  "default-value"?: (HelixHeadlessSlider["defaultValue"]) | undefined;
9140
9682
  /** The value the control starts with. A form reset returns it to this value. */
@@ -9147,9 +9689,7 @@ same statement in markup, and `default-value` is how markup seeds a value
9147
9689
  a reset should return to. */
9148
9690
  value?: (HelixHeadlessSlider["value"]) | undefined;
9149
9691
  /** */
9150
- "aria-label"?: (HelixHeadlessSlider["namedBy"]) | undefined;
9151
- /** */
9152
- namedBy?: (HelixHeadlessSlider["namedBy"]) | undefined;
9692
+ "aria-label"?: unknown;
9153
9693
  /** The validation message shown under the control. It replaces the
9154
9694
  browser's message. */
9155
9695
  feedback?: (HelixHeadlessSlider["feedback"]) | undefined;
@@ -9261,8 +9801,8 @@ than announced without a name. */
9261
9801
  label?: (HelixHeadlessSparkline["label"]) | undefined;
9262
9802
  /** What the readings are drawn as.
9263
9803
 
9264
- Absent is a line, `area` is a line with the region beneath it washed, and
9265
- `bar` is a column per reading.
9804
+ Absent is `area`, a line with the region beneath it washed. `line` is the
9805
+ bare stroke, and `bar` is a column per reading.
9266
9806
 
9267
9807
  **A bar plot measures from zero and the other two measure from the data's
9268
9808
  own range**, which is the one way the plots are not interchangeable. A line
@@ -9289,10 +9829,10 @@ is markup, the same reason `curve` lives here. */
9289
9829
  plot?: (HelixHeadlessSparkline["plot"]) | undefined;
9290
9830
  /** The numbers, separated by whitespace or by commas.
9291
9831
 
9292
- Both separators, so `values="1240 1318"` and an array assigned to the
9293
- property both work: assigning `[1240, 1318]` stringifies to `1240,1318`,
9294
- and a string is what survives React's hydration where an array property
9295
- does not. */
9832
+ An array assigned to the property works too, which is what React 19 does
9833
+ with `values={[1240, 1318]}`. The attribute is the form to prefer, because
9834
+ a string is what survives React's hydration where an array property does
9835
+ not. */
9296
9836
  values?: (HelixHeadlessSparkline["values"]) | undefined;
9297
9837
  };
9298
9838
 
@@ -9333,6 +9873,9 @@ export type HelixHeadlessSpeedDialHelixBeforeOpenElementEvent =
9333
9873
  /** `helix-select` event type */
9334
9874
  export type HelixHeadlessSpeedDialHelixSelectElementEvent =
9335
9875
  HelixHeadlessSpeedDialElementEvent<HelixSelectEvent>;
9876
+ /** `toggle` event type */
9877
+ export type HelixHeadlessSpeedDialToggleElementEvent =
9878
+ HelixHeadlessSpeedDialElementEvent<ToggleEvent>;
9336
9879
 
9337
9880
  export type HelixHeadlessSpeedDialVueProps = {
9338
9881
  /** Accessible name for the trigger and the set of actions it opens. */
@@ -9372,7 +9915,7 @@ export type HelixHeadlessSpeedDialVueEvents = {
9372
9915
  /** An action was chosen. The action sends the event, and the dial closes after it. Cancelable: cancel it to keep the dial open. */
9373
9916
  "helix-select": HelixHeadlessSpeedDialHelixSelectElementEvent;
9374
9917
  /** The dial opened or closed. The event carries `newState` and `oldState`. */
9375
- toggle: HelixHeadlessSpeedDialElementEvent;
9918
+ toggle: HelixHeadlessSpeedDialToggleElementEvent;
9376
9919
  };
9377
9920
 
9378
9921
  /** `HelixHeadlessSplitter` component event */
@@ -9386,6 +9929,12 @@ export type HelixHeadlessSplitterHelixBeforeCollapseElementEvent =
9386
9929
  /** `helix-before-resize` event type */
9387
9930
  export type HelixHeadlessSplitterHelixBeforeResizeElementEvent =
9388
9931
  HelixHeadlessSplitterElementEvent<HelixBeforeResizeEvent>;
9932
+ /** `helix-collapse` event type */
9933
+ export type HelixHeadlessSplitterHelixCollapseElementEvent =
9934
+ HelixHeadlessSplitterElementEvent<HelixCollapseEvent>;
9935
+ /** `helix-resized` event type */
9936
+ export type HelixHeadlessSplitterHelixResizedElementEvent =
9937
+ HelixHeadlessSplitterElementEvent<HelixResizedEvent>;
9389
9938
 
9390
9939
  export type HelixHeadlessSplitterVueProps = {
9391
9940
  /** Which pane is shut, if either.
@@ -9440,7 +9989,10 @@ consumer's to set. */
9440
9989
  "default-position"?: (HelixHeadlessSplitter["defaultPosition"] | `${number}`) | undefined;
9441
9990
  /** Where the divider starts, when `position` is not set. */
9442
9991
  defaultPosition?: (HelixHeadlessSplitter["defaultPosition"]) | undefined;
9443
- /** The divider's name, read by screen readers. */
9992
+ /** The divider's name, read by screen readers.
9993
+
9994
+ An `aria-label` or `aria-labelledby` on the host names the divider too,
9995
+ and wins over this. */
9444
9996
  label?: (HelixHeadlessSplitter["label"]) | undefined;
9445
9997
  /** How close the divider can come to the end, in the same units as `min`. */
9446
9998
  max?: (HelixHeadlessSplitter["max"]) | undefined;
@@ -9502,6 +10054,10 @@ export type HelixHeadlessSplitterVueEvents = {
9502
10054
  "helix-before-collapse": HelixHeadlessSplitterHelixBeforeCollapseElementEvent;
9503
10055
  /** Fired before the divider settles, and only when the gesture moved it. A press that moved nothing, a drag that came back, an arrow key with no room left, and a corner that moved only the other divider do not fire it. Cancelable: canceling it leaves the position to you and keeps the rest of the gesture, so a collapse the gesture reached still fires `helix-before-collapse`, which you can also cancel. A dragged divider stays where it was dropped until you set your own `position`. */
9504
10056
  "helix-before-resize": HelixHeadlessSplitterHelixBeforeResizeElementEvent;
10057
+ /** Fired after a pane shuts or reopens, with the side that is shut, or empty where both are open. */
10058
+ "helix-collapse": HelixHeadlessSplitterHelixCollapseElementEvent;
10059
+ /** Fired after the divider settles somewhere new, with the new position. */
10060
+ "helix-resized": HelixHeadlessSplitterHelixResizedElementEvent;
9505
10061
  };
9506
10062
 
9507
10063
  export type HelixHeadlessStatGroupVueProps = {
@@ -9526,6 +10082,11 @@ A property rather than a `Flex` around it, because the unit has to stay on
9526
10082
  the value's baseline whichever way the pair goes, and only this element
9527
10083
  knows which of its children the unit belongs to.
9528
10084
 
10085
+ **`Trend` has a `direction` too, and there it means which way a number
10086
+ moved:** `up`, `down` or `neutral`. A Stat and a Trend are often written
10087
+ side by side, so watch for the mix-up. On a Stat those three words are not
10088
+ layouts, and the pair stays the column.
10089
+
9529
10090
  **Optional rather than defaulted to `column`, which is not a style
9530
10091
  preference.** A reflecting property with a default writes its attribute onto
9531
10092
  the host the moment the element upgrades, and the host is markup the
@@ -9661,9 +10222,7 @@ stylesheets. */
9661
10222
  /** Whether the control starts checked. A form reset returns it to this state. */
9662
10223
  defaultChecked?: (HelixHeadlessSwitch["defaultChecked"]) | undefined;
9663
10224
  /** */
9664
- "aria-label"?: (HelixHeadlessSwitch["namedBy"]) | undefined;
9665
- /** */
9666
- namedBy?: (HelixHeadlessSwitch["namedBy"]) | undefined;
10225
+ "aria-label"?: unknown;
9667
10226
  /** The validation message shown under the control. It replaces the
9668
10227
  browser's message. */
9669
10228
  feedback?: (HelixHeadlessSwitch["feedback"]) | undefined;
@@ -9730,7 +10289,8 @@ export type HelixHeadlessSwitchVueEvents = {
9730
10289
  };
9731
10290
 
9732
10291
  export type HelixHeadlessTableCellVueProps = {
9733
- /** Whether the cell is the header cell of its column. */
10292
+ /** Whether the cell is a header: of its row in a row of values, and of its
10293
+ column in a row of headers alone. */
9734
10294
  header?: (HelixHeadlessTableCell["header"]) | undefined;
9735
10295
  };
9736
10296
 
@@ -9914,7 +10474,20 @@ export type HelixHeadlessTableColumnVueEvents = {
9914
10474
  "helix-before-resize": HelixHeadlessTableColumnHelixBeforeResizeElementEvent;
9915
10475
  };
9916
10476
 
10477
+ /** `HelixHeadlessTable` component event */
10478
+ export type HelixHeadlessTableElementEvent<E = Event> = TypedEvent<
10479
+ HelixHeadlessTable,
10480
+ E
10481
+ >;
10482
+ /** `helix-sort` event type */
10483
+ export type HelixHeadlessTableHelixSortElementEvent =
10484
+ HelixHeadlessTableElementEvent<HelixSortEvent>;
10485
+
9917
10486
  export type HelixHeadlessTableVueProps = {
10487
+ /** The word for an ascending sort, in `sorted-label`. */
10488
+ "ascending-label"?: (HelixHeadlessTable["ascendingLabel"]) | undefined;
10489
+ /** The word for an ascending sort, in `sorted-label`. */
10490
+ ascendingLabel?: (HelixHeadlessTable["ascendingLabel"]) | undefined;
9918
10491
  /** The column widths as one track list, written once on the table.
9919
10492
 
9920
10493
  With `TableColumn` children, each track sizes the column in its place, a
@@ -9944,8 +10517,37 @@ and a list here would be a second way to say what that says. This table's
9944
10517
  cells are markup, and a table written as rows of cells with no column
9945
10518
  declared in it has nowhere else to be sized from. */
9946
10519
  columns?: (HelixHeadlessTable["columns"]) | undefined;
9947
- /** Accessible name for the table. */
10520
+ /** The starting sort order, used until `sort` is set. */
10521
+ "default-sort"?: (HelixHeadlessTable["defaultSort"]) | undefined;
10522
+ /** The starting sort order, used until `sort` is set. */
10523
+ defaultSort?: (HelixHeadlessTable["defaultSort"]) | undefined;
10524
+ /** The word for a descending sort, in `sorted-label`. */
10525
+ "descending-label"?: (HelixHeadlessTable["descendingLabel"]) | undefined;
10526
+ /** The word for a descending sort, in `sorted-label`. */
10527
+ descendingLabel?: (HelixHeadlessTable["descendingLabel"]) | undefined;
10528
+ /** Accessible name for the table.
10529
+
10530
+ An `aria-label` or `aria-labelledby` on the host names the table too, and
10531
+ wins over this. */
9948
10532
  label?: (HelixHeadlessTable["label"]) | undefined;
10533
+ /** The sort order, as `field:direction`, where `field` is a sortable column's
10534
+ `field`.
10535
+
10536
+ The rows are compared by the text of their cells in that column, numbers by
10537
+ their value. A reader's click on a sortable heading fires `helix-sort`
10538
+ first, and refusing it leaves the order as it was. `default-sort` seeds an
10539
+ order this element then owns. */
10540
+ sort?: (HelixHeadlessTable["sort"]) | undefined;
10541
+ /** What screen readers hear when the table is sorted. `{column}` is the
10542
+ column's heading and `{order}` is `ascending-label` or `descending-label`. */
10543
+ "sorted-label"?: (HelixHeadlessTable["sortedLabel"]) | undefined;
10544
+ /** What screen readers hear when the table is sorted. `{column}` is the
10545
+ column's heading and `{order}` is `ascending-label` or `descending-label`. */
10546
+ sortedLabel?: (HelixHeadlessTable["sortedLabel"]) | undefined;
10547
+ /** What screen readers hear when the table stops being sorted. */
10548
+ "unsorted-label"?: (HelixHeadlessTable["unsortedLabel"]) | undefined;
10549
+ /** What screen readers hear when the table stops being sorted. */
10550
+ unsortedLabel?: (HelixHeadlessTable["unsortedLabel"]) | undefined;
9949
10551
  /** The text shown and announced when there are no rows and none are loading. */
9950
10552
  "empty-text"?: (HelixHeadlessTable["emptyText"]) | undefined;
9951
10553
  /** The text shown and announced when there are no rows and none are loading. */
@@ -9962,7 +10564,10 @@ say that without the component knowing what a row looks like. */
9962
10564
  loadingText?: (HelixHeadlessTable["loadingText"]) | undefined;
9963
10565
  };
9964
10566
 
9965
- export type HelixHeadlessTableVueEvents = {};
10567
+ export type HelixHeadlessTableVueEvents = {
10568
+ /** A different sort order was requested, as `field:direction`, or empty for the order the rows were written in. Cancelable: cancel it to keep the current order. */
10569
+ "helix-sort": HelixHeadlessTableHelixSortElementEvent;
10570
+ };
9966
10571
 
9967
10572
  export type HelixHeadlessTableRowVueProps = {};
9968
10573
 
@@ -10005,7 +10610,10 @@ export type HelixHeadlessTabsHelixSelectElementEvent =
10005
10610
  HelixHeadlessTabsElementEvent<HelixSelectEvent>;
10006
10611
 
10007
10612
  export type HelixHeadlessTabsVueProps = {
10008
- /** The tab list's name, read by screen readers. */
10613
+ /** The tab list's name, read by screen readers.
10614
+
10615
+ An `aria-label` or `aria-labelledby` on the host names the tab list too,
10616
+ and wins over this. */
10009
10617
  label?: (HelixHeadlessTabs["label"]) | undefined;
10010
10618
  /** Stops the arrow keys from selecting each tab they move to. By default,
10011
10619
  arrowing to a tab also selects it.
@@ -10216,9 +10824,7 @@ same statement in markup, and `default-value` is how markup seeds a value
10216
10824
  a reset should return to. */
10217
10825
  value?: (HelixHeadlessTextarea["value"]) | undefined;
10218
10826
  /** */
10219
- "aria-label"?: (HelixHeadlessTextarea["namedBy"]) | undefined;
10220
- /** */
10221
- namedBy?: (HelixHeadlessTextarea["namedBy"]) | undefined;
10827
+ "aria-label"?: unknown;
10222
10828
  /** The validation message shown under the control. It replaces the
10223
10829
  browser's message. */
10224
10830
  feedback?: (HelixHeadlessTextarea["feedback"]) | undefined;
@@ -10314,6 +10920,9 @@ export type HelixHeadlessTimeInputHelixBeforeCloseElementEvent =
10314
10920
  /** `helix-before-open` event type */
10315
10921
  export type HelixHeadlessTimeInputHelixBeforeOpenElementEvent =
10316
10922
  HelixHeadlessTimeInputElementEvent<HelixBeforeOpenEvent>;
10923
+ /** `toggle` event type */
10924
+ export type HelixHeadlessTimeInputToggleElementEvent =
10925
+ HelixHeadlessTimeInputElementEvent<ToggleEvent>;
10317
10926
 
10318
10927
  export type HelixHeadlessTimeInputVueProps = {
10319
10928
  /** What the browser may autofill here, as one of the platform's own tokens.
@@ -10321,6 +10930,16 @@ export type HelixHeadlessTimeInputVueProps = {
10321
10930
  Empty leaves the attribute off, which is the browser's default and is what
10322
10931
  lets autofill work at all. */
10323
10932
  autocomplete?: (HelixHeadlessTimeInput["autocomplete"]) | undefined;
10933
+ /** Times that cannot be chosen, as `HH:mm`, separated by commas or spaces.
10934
+
10935
+ Handed to the list, which offers them as unavailable, and checked against
10936
+ a typed time, which is then invalid. */
10937
+ "disable-times"?: (HelixHeadlessTimeInput["disableTimes"]) | undefined;
10938
+ /** Times that cannot be chosen, as `HH:mm`, separated by commas or spaces.
10939
+
10940
+ Handed to the list, which offers them as unavailable, and checked against
10941
+ a typed time, which is then invalid. */
10942
+ disableTimes?: (HelixHeadlessTimeInput["disableTimes"]) | undefined;
10324
10943
  /** Language tag the times are written in.
10325
10944
 
10326
10945
  Absent uses the runtime's own. */
@@ -10394,6 +11013,10 @@ never something this element would refuse to read back. */
10394
11013
  "trigger-label"?: (HelixHeadlessTimeInput["triggerLabel"]) | undefined;
10395
11014
  /** The name of the button that opens the list, read by screen readers. */
10396
11015
  triggerLabel?: (HelixHeadlessTimeInput["triggerLabel"]) | undefined;
11016
+ /** The message shown when `disable-times` bars a time. */
11017
+ "unavailable-message"?: (HelixHeadlessTimeInput["unavailableMessage"]) | undefined;
11018
+ /** The message shown when `disable-times` bars a time. */
11019
+ unavailableMessage?: (HelixHeadlessTimeInput["unavailableMessage"]) | undefined;
10397
11020
  /** Whether the panel shows one list of times or a column for each part of the
10398
11021
  time.
10399
11022
 
@@ -10494,9 +11117,7 @@ same statement in markup, and `default-value` is how markup seeds a value
10494
11117
  a reset should return to. */
10495
11118
  value?: (HelixHeadlessTimeInput["value"]) | undefined;
10496
11119
  /** */
10497
- "aria-label"?: (HelixHeadlessTimeInput["namedBy"]) | undefined;
10498
- /** */
10499
- namedBy?: (HelixHeadlessTimeInput["namedBy"]) | undefined;
11120
+ "aria-label"?: unknown;
10500
11121
  /** The validation message shown under the control. It replaces the
10501
11122
  browser's message. */
10502
11123
  feedback?: (HelixHeadlessTimeInput["feedback"]) | undefined;
@@ -10576,7 +11197,7 @@ export type HelixHeadlessTimeInputVueEvents = {
10576
11197
  /** Fired after the value changes. */
10577
11198
  input: HelixHeadlessTimeInputElementEvent;
10578
11199
  /** Fired after the list opens or closes, with `newState` and `oldState`. */
10579
- toggle: HelixHeadlessTimeInputElementEvent;
11200
+ toggle: HelixHeadlessTimeInputToggleElementEvent;
10580
11201
  };
10581
11202
 
10582
11203
  /** `HelixHeadlessTimePicker` component event */
@@ -10601,7 +11222,7 @@ speaks it. Absent is the control's own sentence, in English. */
10601
11222
  named for the validity flag it reports, so a form in another language
10602
11223
  speaks it. Absent is the control's own sentence, in English. */
10603
11224
  badInputMessage?: (HelixHeadlessTimePicker["badInputMessage"]) | undefined;
10604
- /** Times that cannot be chosen, comma separated, as `HH:mm`.
11225
+ /** Times that cannot be chosen, as `HH:mm`, separated by commas or spaces.
10605
11226
 
10606
11227
  The counterpart to Date Picker's `disable-dates`, and it exists for the same
10607
11228
  shape of problem: `min` and `max` take away a span, and what a booking
@@ -10612,7 +11233,7 @@ A time not on the step is simply never offered, so it is not an error to
10612
11233
  name one, and naming every time in the list is how the empty state is
10613
11234
  reached honestly rather than by handing over an empty range. */
10614
11235
  "disable-times"?: (HelixHeadlessTimePicker["disableTimes"]) | undefined;
10615
- /** Times that cannot be chosen, comma separated, as `HH:mm`.
11236
+ /** Times that cannot be chosen, as `HH:mm`, separated by commas or spaces.
10616
11237
 
10617
11238
  The counterpart to Date Picker's `disable-dates`, and it exists for the same
10618
11239
  shape of problem: `min` and `max` take away a span, and what a booking
@@ -10623,6 +11244,10 @@ A time not on the step is simply never offered, so it is not an error to
10623
11244
  name one, and naming every time in the list is how the empty state is
10624
11245
  reached honestly rather than by handing over an empty range. */
10625
11246
  disableTimes?: (HelixHeadlessTimePicker["disableTimes"]) | undefined;
11247
+ /** What the wheel of hours is called, read by screen readers. */
11248
+ "hour-label"?: (HelixHeadlessTimePicker["hourLabel"]) | undefined;
11249
+ /** What the wheel of hours is called, read by screen readers. */
11250
+ hourLabel?: (HelixHeadlessTimePicker["hourLabel"]) | undefined;
10626
11251
  /** Whether the current selection fails validation.
10627
11252
 
10628
11253
  A flag rather than a message, the same split Date Picker draws. A flat
@@ -10631,16 +11256,34 @@ the label, the hint and the feedback, and a second message inside the panel
10631
11256
  would be the same error said twice. What is left for the picker is the one
10632
11257
  thing the field cannot draw from outside, the mark on the answer itself. */
10633
11258
  invalid?: (HelixHeadlessTimePicker["invalid"]) | undefined;
10634
- /** Accessible name for the list, which has no visible one of its own. */
11259
+ /** Accessible name for the list, which has no visible one of its own.
11260
+
11261
+ An `aria-label` or `aria-labelledby` on the host names the list instead. */
10635
11262
  label?: (HelixHeadlessTimePicker["label"]) | undefined;
10636
11263
  /** Language tag the times are written in.
10637
11264
 
10638
11265
  Absent uses the runtime's own. */
10639
11266
  locale?: (HelixHeadlessTimePicker["locale"]) | undefined;
11267
+ /** Stops the arrow keys in the list from choosing each time they move to.
11268
+ Enter, Space or a click chooses.
11269
+
11270
+ Time Input sets it, so a reader moves through the list before the panel
11271
+ closes on a time. */
11272
+ manual?: (HelixHeadlessTimePicker["manual"]) | undefined;
10640
11273
  /** Latest time offered, as `HH:mm`. */
10641
11274
  max?: (HelixHeadlessTimePicker["max"]) | undefined;
11275
+ /** What the wheel of the half of the day is called, read by screen readers.
11276
+ Its two options are written as the locale writes them, such as AM and PM. */
11277
+ "meridiem-label"?: (HelixHeadlessTimePicker["meridiemLabel"]) | undefined;
11278
+ /** What the wheel of the half of the day is called, read by screen readers.
11279
+ Its two options are written as the locale writes them, such as AM and PM. */
11280
+ meridiemLabel?: (HelixHeadlessTimePicker["meridiemLabel"]) | undefined;
10642
11281
  /** Earliest time offered, as `HH:mm`. */
10643
11282
  min?: (HelixHeadlessTimePicker["min"]) | undefined;
11283
+ /** What the wheel of minutes is called, read by screen readers. */
11284
+ "minute-label"?: (HelixHeadlessTimePicker["minuteLabel"]) | undefined;
11285
+ /** What the wheel of minutes is called, read by screen readers. */
11286
+ minuteLabel?: (HelixHeadlessTimePicker["minuteLabel"]) | undefined;
10644
11287
  /** How many times can be held at once.
10645
11288
 
10646
11289
  Absent is one. `range` holds a start and an end with everything between
@@ -10659,6 +11302,18 @@ and a wheel has exactly one value by construction. Rather than draw
10659
11302
  something that cannot say what it holds, `wheels` renders as a list
10660
11303
  whenever a mode is set. */
10661
11304
  mode?: (HelixHeadlessTimePicker["mode"]) | undefined;
11305
+ /** The validation message for a time after `max`. `{max}` is replaced with
11306
+ `max`, written in `locale`. */
11307
+ "range-overflow-message"?: (HelixHeadlessTimePicker["rangeOverflowMessage"]) | undefined;
11308
+ /** The validation message for a time after `max`. `{max}` is replaced with
11309
+ `max`, written in `locale`. */
11310
+ rangeOverflowMessage?: (HelixHeadlessTimePicker["rangeOverflowMessage"]) | undefined;
11311
+ /** The validation message for a time before `min`. `{min}` is replaced with
11312
+ `min`, written in `locale`. */
11313
+ "range-underflow-message"?: (HelixHeadlessTimePicker["rangeUnderflowMessage"]) | undefined;
11314
+ /** The validation message for a time before `min`. `{min}` is replaced with
11315
+ `min`, written in `locale`. */
11316
+ rangeUnderflowMessage?: (HelixHeadlessTimePicker["rangeUnderflowMessage"]) | undefined;
10662
11317
  /** Blocks changes to the time. The value is still submitted with the form.
10663
11318
 
10664
11319
  **Enforced by refusing every request in one place**, which is the seam this
@@ -10691,6 +11346,14 @@ Fifteen, which is four rows an hour and ninety-six in a day: enough that a
10691
11346
  reader scrolls rather than hunts, and few enough that the list is a list.
10692
11347
  Anything under five is a thousand rows and wants a field instead. */
10693
11348
  step?: (HelixHeadlessTimePicker["step"]) | undefined;
11349
+ /** The validation message for a time that `step` skips. */
11350
+ "step-mismatch-message"?: (HelixHeadlessTimePicker["stepMismatchMessage"]) | undefined;
11351
+ /** The validation message for a time that `step` skips. */
11352
+ stepMismatchMessage?: (HelixHeadlessTimePicker["stepMismatchMessage"]) | undefined;
11353
+ /** The validation message for a time that `disable-times` bars. */
11354
+ "unavailable-message"?: (HelixHeadlessTimePicker["unavailableMessage"]) | undefined;
11355
+ /** The validation message for a time that `disable-times` bars. */
11356
+ unavailableMessage?: (HelixHeadlessTimePicker["unavailableMessage"]) | undefined;
10694
11357
  /** The validation message for a required time picker with no time chosen. */
10695
11358
  "value-missing-message"?: (HelixHeadlessTimePicker["valueMissingMessage"]) | undefined;
10696
11359
  /** The validation message for a required time picker with no time chosen. */
@@ -10954,9 +11617,7 @@ same statement in markup, and `default-value` is how markup seeds a value
10954
11617
  a reset should return to. */
10955
11618
  value?: (HelixHeadlessToggleGroup["value"]) | undefined;
10956
11619
  /** */
10957
- "aria-label"?: (HelixHeadlessToggleGroup["namedBy"]) | undefined;
10958
- /** */
10959
- namedBy?: (HelixHeadlessToggleGroup["namedBy"]) | undefined;
11620
+ "aria-label"?: unknown;
10960
11621
  /** The validation message shown under the control. It replaces the
10961
11622
  browser's message. */
10962
11623
  feedback?: (HelixHeadlessToggleGroup["feedback"]) | undefined;
@@ -11011,12 +11672,22 @@ imperatively later, and nothing is hydrating by then.
11011
11672
 
11012
11673
  Here rather than on each control. */
11013
11674
  name?: (HelixHeadlessToggleGroup["name"]) | undefined;
11675
+ /** Whether the group holds a tab stop of its own.
11676
+
11677
+ A toolbar is one tab stop, so a toolbar the group sits in sets this to
11678
+ `false` while its stop is on another control, and every item, the chosen
11679
+ one too, is then out of the tab order. The arrow keys inside the group
11680
+ work as before once focus is in it.
11681
+
11682
+ No attribute: it is coordination between elements, and a consumer has no
11683
+ reason to set it. */
11684
+ focusable?: (HelixHeadlessToggleGroup["focusable"]) | undefined;
11014
11685
  };
11015
11686
 
11016
11687
  export type HelixHeadlessToggleGroupVueEvents = {
11017
11688
  /** Fired after the value changes. */
11018
11689
  change: HelixHeadlessToggleGroupElementEvent;
11019
- /** Fired before the choice changes. Cancelable: call `preventDefault()` to keep the current choice. It is the only way to block a change. */
11690
+ /** Fired before the choice changes. Cancelable: call `preventDefault()` to keep the current choice. */
11020
11691
  "helix-before-change": HelixHeadlessToggleGroupHelixBeforeChangeElementEvent;
11021
11692
  /** Fired when an item is chosen. The item sends it, and you listen for it on the group. Cancelable: call `preventDefault()` to keep the current choice. */
11022
11693
  "helix-select": HelixHeadlessToggleGroupHelixSelectElementEvent;
@@ -11071,13 +11742,15 @@ name is the fault `TreeItem` avoids by mirroring to `data-selected`.
11071
11742
  Splitting them means moving what every stylesheet selects on, which is a
11072
11743
  change of its own rather than a property being added. */
11073
11744
  defaultSelected?: (HelixHeadlessToggle["defaultSelected"]) | undefined;
11074
- /** Whether the item holds the group's tab stop while nothing is chosen.
11745
+ /** Whether the item holds the group's tab stop. Unset, the chosen item holds
11746
+ it.
11075
11747
 
11076
- The stop normally rides on the selection, and an unanswered group has no
11077
- selection, so without this the keyboard cannot reach it. Written by the
11078
- group, with no attribute: it is coordination between elements, and
11079
- `tabindex` on a host the consumer rendered is the change a React consumer's
11080
- hydration reports and does not patch up. */
11748
+ Written by the group on every item: `true` for the chosen item, or for the
11749
+ first item that can be chosen while there is no selection to carry the
11750
+ stop, and `false` for every item, the chosen one too, while a toolbar the
11751
+ group sits in holds the stop. No attribute: it is coordination between
11752
+ elements, and `tabindex` on a host the consumer rendered is the change a
11753
+ React consumer's hydration reports and does not patch up. */
11081
11754
  focusable?: (HelixHeadlessToggle["focusable"]) | undefined;
11082
11755
  };
11083
11756
 
@@ -11087,7 +11760,10 @@ export type HelixHeadlessToggleVueEvents = {
11087
11760
  };
11088
11761
 
11089
11762
  export type HelixHeadlessToolbarVueProps = {
11090
- /** The toolbar's name, read by screen readers. */
11763
+ /** The toolbar's name, read by screen readers.
11764
+
11765
+ An `aria-label` or `aria-labelledby` on the host names the toolbar too,
11766
+ and wins over this. */
11091
11767
  label?: (HelixHeadlessToolbar["label"]) | undefined;
11092
11768
  /** The direction the arrow keys move focus in. */
11093
11769
  orientation?: (HelixHeadlessToolbar["orientation"]) | undefined;
@@ -11106,6 +11782,9 @@ export type HelixHeadlessTooltipHelixBeforeCloseElementEvent =
11106
11782
  /** `helix-before-open` event type */
11107
11783
  export type HelixHeadlessTooltipHelixBeforeOpenElementEvent =
11108
11784
  HelixHeadlessTooltipElementEvent<HelixBeforeOpenEvent>;
11785
+ /** `toggle` event type */
11786
+ export type HelixHeadlessTooltipToggleElementEvent =
11787
+ HelixHeadlessTooltipElementEvent<ToggleEvent>;
11109
11788
 
11110
11789
  export type HelixHeadlessTooltipVueProps = {
11111
11790
  /** The text shown in the bubble.
@@ -11212,7 +11891,7 @@ export type HelixHeadlessTooltipVueEvents = {
11212
11891
  /** The bubble is about to show. Cancelable: cancel it to keep it hidden. */
11213
11892
  "helix-before-open": HelixHeadlessTooltipHelixBeforeOpenElementEvent;
11214
11893
  /** The bubble opened or closed. The event carries `newState` and `oldState`. */
11215
- toggle: HelixHeadlessTooltipElementEvent;
11894
+ toggle: HelixHeadlessTooltipToggleElementEvent;
11216
11895
  };
11217
11896
 
11218
11897
  /** `HelixHeadlessTour` component event */
@@ -11220,18 +11899,27 @@ export type HelixHeadlessTourElementEvent<E = Event> = TypedEvent<
11220
11899
  HelixHeadlessTour,
11221
11900
  E
11222
11901
  >;
11902
+ /** `helix-activate` event type */
11903
+ export type HelixHeadlessTourHelixActivateElementEvent =
11904
+ HelixHeadlessTourElementEvent<HelixActivateEvent>;
11223
11905
  /** `helix-before-activate` event type */
11224
11906
  export type HelixHeadlessTourHelixBeforeActivateElementEvent =
11225
11907
  HelixHeadlessTourElementEvent<HelixBeforeActivateEvent>;
11226
11908
  /** `helix-before-close` event type */
11227
11909
  export type HelixHeadlessTourHelixBeforeCloseElementEvent =
11228
11910
  HelixHeadlessTourElementEvent<HelixBeforeCloseEvent>;
11911
+ /** `helix-before-open` event type */
11912
+ export type HelixHeadlessTourHelixBeforeOpenElementEvent =
11913
+ HelixHeadlessTourElementEvent<HelixBeforeOpenEvent>;
11229
11914
  /** `helix-complete` event type */
11230
11915
  export type HelixHeadlessTourHelixCompleteElementEvent =
11231
11916
  HelixHeadlessTourElementEvent<HelixCompleteEvent>;
11232
11917
  /** `helix-tour-ask` event type */
11233
11918
  export type HelixHeadlessTourHelixTourAskElementEvent =
11234
11919
  HelixHeadlessTourElementEvent<HelixTourAskEvent>;
11920
+ /** `toggle` event type */
11921
+ export type HelixHeadlessTourToggleElementEvent =
11922
+ HelixHeadlessTourElementEvent<ToggleEvent>;
11235
11923
 
11236
11924
  export type HelixHeadlessTourVueProps = {
11237
11925
  /** Label for the control that goes back, passed to every stop. */
@@ -11263,8 +11951,6 @@ The shape is `Carousel`'s, which is the nearest thing in the library: a
11263
11951
  "next-label"?: (HelixHeadlessTour["nextLabel"]) | undefined;
11264
11952
  /** Label for the control that goes on. */
11265
11953
  nextLabel?: (HelixHeadlessTour["nextLabel"]) | undefined;
11266
- /** Whether the tour is running. */
11267
- open?: (HelixHeadlessTour["open"]) | undefined;
11268
11954
  /** Label for the control that leaves the tour. */
11269
11955
  "skip-label"?: (HelixHeadlessTour["skipLabel"]) | undefined;
11270
11956
  /** Label for the control that leaves the tour. */
@@ -11273,17 +11959,40 @@ The shape is `Carousel`'s, which is the nearest thing in the library: a
11273
11959
  "spotlight-padding"?: (HelixHeadlessTour["spotlightPadding"] | `${number}`) | undefined;
11274
11960
  /** The space around the target inside the spotlight, in pixels. */
11275
11961
  spotlightPadding?: (HelixHeadlessTour["spotlightPadding"]) | undefined;
11962
+ /** Whether the element starts open. Ignored once `open` is written. */
11963
+ "default-open"?: (HelixHeadlessTour["defaultOpen"]) | undefined;
11964
+ /** Whether the element starts open. Ignored once `open` is written. */
11965
+ defaultOpen?: (HelixHeadlessTour["defaultOpen"]) | undefined;
11966
+ /** Whether the element is open.
11967
+
11968
+ One property, not two, so `dialog.open` answers the question anyone
11969
+ asking it meant. Writing always applies; `<helix-dialog open>` is the
11970
+ same statement in markup.
11971
+
11972
+ **Not reflected, and that is required rather than tidy.** Reflection
11973
+ writes the resolved state back as an attribute, so an element that opened
11974
+ itself would put `open` on its own host: cloned, serialized for
11975
+ hydration, or diffed by a framework, it comes back holding whatever the
11976
+ last reader did rather than what the author wrote. `:state(open)` carries
11977
+ the resolved state for stylesheets, which is what the mirror is for. */
11978
+ open?: (HelixHeadlessTour["open"]) | undefined;
11276
11979
  };
11277
11980
 
11278
11981
  export type HelixHeadlessTourVueEvents = {
11982
+ /** Fired after the current stop changes, with the new index. */
11983
+ "helix-activate": HelixHeadlessTourHelixActivateElementEvent;
11279
11984
  /** Fired before the current stop changes, with the new index. Cancelable: call `preventDefault()` to stay on the current stop. */
11280
11985
  "helix-before-activate": HelixHeadlessTourHelixBeforeActivateElementEvent;
11281
11986
  /** Fired before the user ends the tour early. Cancelable: call `preventDefault()` to keep the tour open. */
11282
11987
  "helix-before-close": HelixHeadlessTourHelixBeforeCloseElementEvent;
11988
+ /** Fired before `requestOpen(true)` starts the tour. Cancelable: call `preventDefault()` to keep it closed. */
11989
+ "helix-before-open": HelixHeadlessTourHelixBeforeOpenElementEvent;
11283
11990
  /** Fired when the last stop is finished. */
11284
11991
  "helix-complete": HelixHeadlessTourHelixCompleteElementEvent;
11285
11992
  /** Fired when a stop's control is pressed to move the tour. The stop sends it, and the tour handles it. */
11286
11993
  "helix-tour-ask": HelixHeadlessTourHelixTourAskElementEvent;
11994
+ /** Sent when the tour starts or ends, with `newState` and `oldState`. */
11995
+ toggle: HelixHeadlessTourToggleElementEvent;
11287
11996
  };
11288
11997
 
11289
11998
  /** `HelixHeadlessTourStop` component event */
@@ -11349,6 +12058,9 @@ export type HelixHeadlessTreeItemHelixBeforeOpenElementEvent =
11349
12058
  /** `helix-select` event type */
11350
12059
  export type HelixHeadlessTreeItemHelixSelectElementEvent =
11351
12060
  HelixHeadlessTreeItemElementEvent<HelixSelectEvent>;
12061
+ /** `toggle` event type */
12062
+ export type HelixHeadlessTreeItemToggleElementEvent =
12063
+ HelixHeadlessTreeItemElementEvent<ToggleEvent>;
11352
12064
 
11353
12065
  export type HelixHeadlessTreeItemVueProps = {
11354
12066
  /** The URL this node links to. Setting it makes the row a link.
@@ -11427,7 +12139,7 @@ export type HelixHeadlessTreeItemVueEvents = {
11427
12139
  /** Fired when the item is chosen, and cancelable. Canceling it changes nothing. */
11428
12140
  "helix-select": HelixHeadlessTreeItemHelixSelectElementEvent;
11429
12141
  /** Sent when the branch opens or closes, with `newState` and `oldState`. */
11430
- toggle: HelixHeadlessTreeItemElementEvent;
12142
+ toggle: HelixHeadlessTreeItemToggleElementEvent;
11431
12143
  };
11432
12144
 
11433
12145
  /** `HelixHeadlessTree` component event */
@@ -11446,7 +12158,10 @@ export type HelixHeadlessTreeHelixSelectElementEvent =
11446
12158
  HelixHeadlessTreeElementEvent<HelixSelectEvent>;
11447
12159
 
11448
12160
  export type HelixHeadlessTreeVueProps = {
11449
- /** Accessible name for the tree. */
12161
+ /** Accessible name for the tree.
12162
+
12163
+ An `aria-label` or `aria-labelledby` on the host names the tree too, and
12164
+ wins over this. */
11450
12165
  label?: (HelixHeadlessTree["label"]) | undefined;
11451
12166
  /** What a deeper level means: `peer` for no change, `subordinate` for a lower
11452
12167
  rank, or `heading` for a parent that heads the items under it.
@@ -11526,6 +12241,10 @@ export type HelixHeadlessTreeVueEvents = {
11526
12241
  };
11527
12242
 
11528
12243
  export type HelixHeadlessTrendVueProps = {
12244
+ /** The word read out after the direction when the move is an improvement. */
12245
+ "better-label"?: (HelixHeadlessTrend["betterLabel"]) | undefined;
12246
+ /** The word read out after the direction when the move is an improvement. */
12247
+ betterLabel?: (HelixHeadlessTrend["betterLabel"]) | undefined;
11529
12248
  /** Which way the measurement moved.
11530
12249
 
11531
12250
  Absent is neutral, so a trend with nothing to report draws a bar rather
@@ -11535,6 +12254,10 @@ attribute onto the host the moment the element upgrades, and the host is
11535
12254
  markup the consumer rendered, which React compares against what it rendered
11536
12255
  and reports as a hydration mismatch. */
11537
12256
  direction?: (HelixHeadlessTrend["direction"]) | undefined;
12257
+ /** The word read out for a move down. */
12258
+ "down-label"?: (HelixHeadlessTrend["downLabel"]) | undefined;
12259
+ /** The word read out for a move down. */
12260
+ downLabel?: (HelixHeadlessTrend["downLabel"]) | undefined;
11538
12261
  /** Which direction counts as an improvement for this metric.
11539
12262
 
11540
12263
  Absent states the movement without judging it, which is the honest default:
@@ -11542,6 +12265,20 @@ revenue up is good news and latency up is bad news, and only the consumer
11542
12265
  knows which one this is. Set it once per metric and it holds while the
11543
12266
  direction changes underneath. */
11544
12267
  good?: (HelixHeadlessTrend["good"]) | undefined;
12268
+ /** The word read out for no move, or for a direction that is not one of the
12269
+ three. */
12270
+ "unchanged-label"?: (HelixHeadlessTrend["unchangedLabel"]) | undefined;
12271
+ /** The word read out for no move, or for a direction that is not one of the
12272
+ three. */
12273
+ unchangedLabel?: (HelixHeadlessTrend["unchangedLabel"]) | undefined;
12274
+ /** The word read out for a move up. */
12275
+ "up-label"?: (HelixHeadlessTrend["upLabel"]) | undefined;
12276
+ /** The word read out for a move up. */
12277
+ upLabel?: (HelixHeadlessTrend["upLabel"]) | undefined;
12278
+ /** The word read out after the direction when the move is a setback. */
12279
+ "worse-label"?: (HelixHeadlessTrend["worseLabel"]) | undefined;
12280
+ /** The word read out after the direction when the move is a setback. */
12281
+ worseLabel?: (HelixHeadlessTrend["worseLabel"]) | undefined;
11545
12282
  };
11546
12283
 
11547
12284
  export type HelixHeadlessTrendVueEvents = {};
@@ -12025,7 +12762,10 @@ right whenever the rows really are one height and is the cheaper of the two. */
12025
12762
  /** The id of the script element that holds the rows as JSON. */
12026
12763
  for?: (HelixHeadlessVirtualList["for"]) | undefined;
12027
12764
  /** The list's name, read by screen readers, because only some of its rows
12028
- are rendered at a time. */
12765
+ are rendered at a time.
12766
+
12767
+ An `aria-label` or `aria-labelledby` on the host names the list too, and
12768
+ wins over this. */
12029
12769
  label?: (HelixHeadlessVirtualList["label"]) | undefined;
12030
12770
  /** Places rows by their measured height. Without it, every row is placed by
12031
12771
  `estimate`.
@@ -12169,25 +12909,25 @@ export type CustomCssProperties = {
12169
12909
  // Note: Some tooling expects this augmentation under "@vue/runtime-core", while
12170
12910
  // other docs/examples use "vue". We emit both for compatibility.
12171
12911
  export interface WcToolkitVueGlobalComponents {
12172
- /** Holds its own open state. Used alone, outside an accordion, it works as a disclosure. Content stays mounted when the item is closed, so it can animate and its text is present in server-rendered HTML. Closed content has both 'hidden' and 'inert'. 'hidden' collapses it when no stylesheet is loaded. 'inert' keeps it out of the tab order and the accessibility tree after the styled tier's 'display' overrides 'hidden'. */
12912
+ /** Holds its own open state. Used alone, outside an accordion, it works as a disclosure. The trigger sits inside a heading, so a screen reader lists the section with the page's headings. The level is the item's 'heading-level', then the accordion's, then 3. Content stays mounted when the item is closed, so it can animate and its text is present in server-rendered HTML. Closed content has both 'hidden' and 'inert'. 'hidden' collapses it when no stylesheet is loaded. 'inert' keeps it out of the tab order and the accessibility tree after the styled tier's 'display' overrides 'hidden'. */
12173
12913
  "helix-headless-accordion-item": DefineCustomElement<
12174
12914
  HelixHeadlessAccordionItem,
12175
12915
  HelixHeadlessAccordionItemVueProps,
12176
12916
  HelixHeadlessAccordionItemVueEvents
12177
12917
  >;
12178
- /** Holds the mode. Each item coordinates itself: when you click an item, it finds the nearest accordion, reads the mode, and closes the other items. The accordion does not listen for items opening. 'helix-before-open' does not bubble and is not composed, because overlays nest and an inner overlay's events must stay separate from the outer one's. Items are found when they are clicked, so there is no registry to keep up to date. An item added after render coordinates on its first click. Items are matched with 'instanceof HelixHeadlessAccordionItem', so the headless tier does not depend on the styled tier's tag names. The keyboard listener belongs to the controller and is attached on connect, so it does not run on the server. */
12918
+ /** Holds the mode. Each item coordinates itself: when you click an item, it finds the nearest accordion, reads the mode, and closes the other items. The accordion does not listen for items opening. 'helix-before-open' does not bubble and is not composed, because overlays nest and an inner overlay's events must stay separate from the outer one's. Items are found when they are clicked, so there is no registry to keep up to date. An item added after render coordinates on its first click. Items are matched with 'instanceof HelixHeadlessAccordionItem', so the headless tier does not depend on the styled tier's tag names. The keyboard listener belongs to the controller and is attached on connect, so it does not run on the server. Each trigger sits inside a heading, level 3 unless 'heading-level' says otherwise, so the sections are in a screen reader's list of headings. Set the level that fits the page's outline. */
12179
12919
  "helix-headless-accordion": DefineCustomElement<
12180
12920
  HelixHeadlessAccordion,
12181
12921
  HelixHeadlessAccordionVueProps,
12182
12922
  HelixHeadlessAccordionVueEvents
12183
12923
  >;
12184
- /** An announcement is a banner above the page header with news about the whole site or session, such as a trial ending, a degraded service, or a change of terms. For a passage inside a document, use 'Callout', which stays where it is placed and cannot be dismissed. The announcement is always a polite live region, whatever its 'tone'. 'role="alert"' is assertive and interrupts a screen reader, so an announcement served with the page would interrupt on every page load. The live region is its own part. When the announcement appears after the page has loaded, the message is written into the region one frame later, so screen readers read it reliably. When the announcement is in the served HTML, the region is filled at once and nothing is read out. The dismiss button fires 'helix-dismiss', and the announcement stays in the document, so remove it in your listener. The event is cancelable, and 'dismiss()' returns 'false' when a listener calls 'preventDefault()'. */
12924
+ /** An announcement is a banner above the page header with news about the whole site or session, such as a trial ending, a degraded service, or a change of terms. For a passage inside a document, use 'Callout', which stays where it is placed and cannot be dismissed. The announcement is always a polite live region, whatever its 'tone'. 'role="alert"' is assertive and interrupts a screen reader, so an announcement served with the page would interrupt on every page load. The live region is its own part. When the announcement appears after the page has loaded, the message is written into the region one frame later, so screen readers read it reliably, and the region is emptied seven seconds later, so the message is not in the page twice. When the announcement is in the served HTML, the region stays empty and nothing is read out. The dismiss button fires 'helix-dismiss', and the announcement stays in the document, so remove it in your listener. The event is cancelable, and 'dismiss()' returns 'false' when a listener calls 'preventDefault()'. When your listener removes an announcement whose dismiss button has focus, focus moves to the dismiss button of the announcement beside it. With no other announcement beside it, move focus yourself, for example to the page's main heading. */
12185
12925
  "helix-headless-announcement": DefineCustomElement<
12186
12926
  HelixHeadlessAnnouncement,
12187
12927
  HelixHeadlessAnnouncementVueProps,
12188
12928
  HelixHeadlessAnnouncementVueEvents
12189
12929
  >;
12190
- /** Tracks whether the page has scrolled and sets the custom state 'scrolled', so the styled tier can lift the bar without a scroll handler of its own. The state is read when the element connects. A fresh load starts at the top, which matches the server markup, and a reload partway down the page is corrected on hydration. The element uses a custom state because an attribute such as 'data-scrolled', written onto its own host, is one the server did not send. A hydrating framework would report a mismatch whenever the page reloads far enough down. 'ElementInternals.states' is not in the DOM, so hydration has nothing to compare. Select the state with ':state(scrolled)'. */
12930
+ /** Tracks whether the page has scrolled and sets the custom state 'scrolled', so the styled tier can lift the bar without a scroll handler of its own. The state is read when the element connects. A fresh load starts at the top, which matches the server markup, and a reload partway down the page is corrected on hydration. The element uses a custom state because an attribute such as 'data-scrolled', written onto its own host, is one the server did not send. A hydrating framework would report a mismatch whenever the page reloads far enough down. 'ElementInternals.states' is not in the DOM, so hydration has nothing to compare. Select the state with ':state(scrolled)'. The page is the window unless 'scroller' names the element that scrolls, for an app shell whose content scrolls inside a container. */
12191
12931
  "helix-headless-app-header": DefineCustomElement<
12192
12932
  HelixHeadlessAppHeader,
12193
12933
  HelixHeadlessAppHeaderVueProps,
@@ -12199,7 +12939,7 @@ export interface WcToolkitVueGlobalComponents {
12199
12939
  HelixHeadlessAreaChartVueProps,
12200
12940
  HelixHeadlessAreaChartVueEvents
12201
12941
  >;
12202
- /** A part of 'Avatar' that arranges avatars. The group computes the overflow count from 'max' and renders the "+3" itself. There is no slot for it, because the number has to match which avatars are hidden. Avatars past 'max' stay in the DOM and are hidden. Changing 'max' re-renders nothing, and the accessible name is still built from all of them. */
12942
+ /** A part of 'Avatar' that arranges avatars. The group computes the overflow count from 'max' and renders the "+3" itself. There is no slot for it, because the number has to match which avatars are hidden. Avatars past 'max' stay in the DOM and are hidden. The group writes 'hidden' on each of them, so they are hidden on the headless tier as well, and the count is read out as 'overflow-label', such as "3 more", so a screen reader hears that there are more people than the ones it can reach. */
12203
12943
  "helix-headless-avatar-group": DefineCustomElement<
12204
12944
  HelixHeadlessAvatarGroup,
12205
12945
  HelixHeadlessAvatarGroupVueProps,
@@ -12211,19 +12951,19 @@ export interface WcToolkitVueGlobalComponents {
12211
12951
  HelixHeadlessAvatarVueProps,
12212
12952
  HelixHeadlessAvatarVueEvents
12213
12953
  >;
12214
- /** Badge wraps the element it decorates and pins an indicator to its corner, so the wrapped element keeps its place in the layout. What the indicator shows depends on 'value': - A 'value' of zero shows no indicator. - No 'value' shows a dot. - Any other value shows the value. Above 'max', the indicator shows '{max}+', so its width stays the same as the count grows. A count is announced from its own text, and 'label' replaces that with a fuller name, such as '4 unread'. A dot needs a 'label'. Without one, the dot is a colored circle that screen readers do not announce. */
12954
+ /** Badge wraps the element it decorates and pins an indicator to its corner, so the wrapped element keeps its place in the layout. What the indicator shows depends on 'value': - A 'value' of zero shows no indicator. - No 'value' shows a dot. - Any other value shows the value. Above 'max', the indicator shows '{max}+', so its width stays the same as the count grows. A count is announced from its own text, and 'label' replaces that with a fuller name, such as '4 unread'. A dot needs a 'label'. Without one, the dot is a colored circle that screen readers do not announce. **The count is not part of the wrapped control's name.** It is a status of its own, read when it changes and when a reader moves to it, so focusing a button inside a badge announces the button's name alone. Where the count belongs in that name, write it into the control's own label, such as 'aria-label="Inbox, 8 unread"' on a button that reads "Inbox". The badge cannot add it: a reference from the control to the count would point into the badge's shadow root, which the platform does not allow. */
12215
12955
  "helix-headless-badge": DefineCustomElement<
12216
12956
  HelixHeadlessBadge,
12217
12957
  HelixHeadlessBadgeVueProps,
12218
12958
  HelixHeadlessBadgeVueEvents
12219
12959
  >;
12220
- /** Every bar is measured from zero, and no property changes the baseline, because a bar's length is its value. To show the differences between values, use a line chart. The labels are HTML beside the drawing. An '<svg>' that fills its box scales the text inside it: the same 'font-size' renders at 10px in a narrow chart and 43px in a wide one, and SVG has no setting that keeps text at one size the way 'vector-effect' does for strokes. The table is the accessible representation, and the drawing is 'aria-hidden', so screen reader users get the numbers themselves. The component writes the custom properties below with numbers it computes, and the stylesheet that draws the chart reads them. Do not set them yourself. */
12960
+ /** Every bar is measured from zero, and no property changes the baseline, because a bar's length is its value. To show the differences between values, use a line chart. The labels are HTML beside the drawing. An '<svg>' that fills its box scales the text inside it: the same 'font-size' renders at 10px in a narrow chart and 43px in a wide one, and SVG has no setting that keeps text at one size the way 'vector-effect' does for strokes. The table is the accessible representation, and the drawing is 'aria-hidden', so screen reader users get the numbers themselves. The 'summary' part names the chart, from 'label' or the table's caption, and gives each series' highest reading. The component writes the custom properties below with numbers it computes, and the stylesheet that draws the chart reads them. Do not set them yourself. */
12221
12961
  "helix-headless-bar-chart": DefineCustomElement<
12222
12962
  HelixHeadlessBarChart,
12223
12963
  HelixHeadlessBarChartVueProps,
12224
12964
  HelixHeadlessBarChartVueEvents
12225
12965
  >;
12226
- /** Renders a '<blockquote>' with a '<footer>' for the attribution, the structure the HTML spec describes. The attribution sits outside the quoted text because it is about the quotation. For a quotation inside a sentence, use 'Quote'. */
12966
+ /** Renders a '<figure>' holding the '<blockquote>' and a '<figcaption>' for the attribution, the structure the HTML spec describes. The attribution sits outside the quotation because it is about the quotation, and it names the figure, so a screen reader reads the source as the figure's caption. The figure keeps the browser's default margins on this tier. Set '::part(figure) { margin: 0 }' where they are unwanted. For a quotation inside a sentence, use 'Quote'. */
12227
12967
  "helix-headless-blockquote": DefineCustomElement<
12228
12968
  HelixHeadlessBlockquote,
12229
12969
  HelixHeadlessBlockquoteVueProps,
@@ -12235,7 +12975,7 @@ export interface WcToolkitVueGlobalComponents {
12235
12975
  HelixHeadlessBreadcrumbVueProps,
12236
12976
  HelixHeadlessBreadcrumbVueEvents
12237
12977
  >;
12238
- /** The host is the navigation landmark, so an 'aria-label' on it names the trail. When a page has more than one navigation landmark, screen reader users choose between them by name. The '<ol>' has an explicit 'role="list"', because Safari removes list semantics from a list with 'list-style: none', and the trail always hides its markers. The items are slotted directly, so they are '<ol>' children in the flat tree, and each item sets 'role="listitem"' on itself. The trail does not measure itself, and you write its overflow in markup: put the crumb that holds the folded items where the gap should appear. */
12978
+ /** The host is the navigation landmark, named "Breadcrumb" by default. An 'aria-label' on the host names the trail instead, and so does 'label'. When a page has more than one navigation landmark, screen reader users choose between them by name. The '<ol>' has an explicit 'role="list"', because Safari removes list semantics from a list with 'list-style: none', and the trail always hides its markers. The items are slotted directly, so they are '<ol>' children in the flat tree, and each item sets 'role="listitem"' on itself. The trail does not measure itself, and you write its overflow in markup: put the crumb that holds the folded items where the gap should appear. */
12239
12979
  "helix-headless-breadcrumbs": DefineCustomElement<
12240
12980
  HelixHeadlessBreadcrumbs,
12241
12981
  HelixHeadlessBreadcrumbsVueProps,
@@ -12247,13 +12987,13 @@ export interface WcToolkitVueGlobalComponents {
12247
12987
  HelixHeadlessButtonGroupVueProps,
12248
12988
  HelixHeadlessButtonGroupVueEvents
12249
12989
  >;
12250
- /** Renders a real '<button>', so activation, focus, and other browser behavior come from the platform. **It never renders an anchor.** A router renders its own '<a>' to intercept a click, and it cannot render one inside the button's shadow root. For a link that looks like a button, use the base layer recipe on your own anchor: '<Link data-button="solid">' draws the same control. 'delegatesFocus' moves focus to the inner control. It is serialized into the server markup, so the button is reachable by keyboard before any JavaScript loads. The inner control is always 'type="button"', because a '<button type="submit">' inside a shadow root cannot submit a form outside it. To submit, the button calls 'requestSubmit()' on its form, which runs validation, unlike 'submit()'. */
12990
+ /** Renders a real '<button>', so activation, focus, and other browser behavior come from the platform. **It never renders an anchor.** A router renders its own '<a>' to intercept a click, and it cannot render one inside the button's shadow root. For a link that looks like a button, use the base layer recipe on your own anchor: '<Link data-button="solid">' draws the same control. 'delegatesFocus' moves focus to the inner control. It is serialized into the server markup, so the button is reachable by keyboard before any JavaScript loads. The inner control is always 'type="button"', because a '<button type="submit">' inside a shadow root cannot submit a form outside it. To submit, the button calls 'requestSubmit()' on its form, which runs validation, unlike 'submit()'. A 'submit' listener reads 'event.submitter' as 'null', because the platform accepts only a native submit button there. The button's 'name' and 'value' are in the form data, so read them from 'new FormData(form)' to tell two submit buttons apart. As the first submit button in its form, it is the form's default button: Enter in a text field of the form presses it, as it presses a native one. */
12251
12991
  "helix-headless-button": DefineCustomElement<
12252
12992
  HelixHeadlessButton,
12253
12993
  HelixHeadlessButtonVueProps,
12254
12994
  HelixHeadlessButtonVueEvents
12255
12995
  >;
12256
- /** 'tone' is on the headless tier because it carries meaning. It picks the icon and the icon's accessible name, so a screen reader announces "Error" for an error callout whether or not the color is seen. The icon is the fallback content of a slot. Slot your own icon to replace it, and the default disappears with no extra check. A callout sets a passage apart inside a document and is read where it sits. For page-level chrome above the masthead that is a live region and can be dismissed, use 'Announcement'. */
12996
+ /** 'tone' is on the headless tier because it carries meaning. It picks the icon and the icon region's accessible name, so a screen reader announces "Error" for an error callout whether or not the color is seen. Set 'tone-label' to say the name in another language. The icon is the fallback content of a slot. Slot your own icon to replace it, and the default disappears with no extra check. The tone's name stays on the region around it. A callout sets a passage apart inside a document and is read where it sits. For page-level chrome above the masthead that is a live region and can be dismissed, use 'Announcement'. */
12257
12997
  "helix-headless-callout": DefineCustomElement<
12258
12998
  HelixHeadlessCallout,
12259
12999
  HelixHeadlessCalloutVueProps,
@@ -12283,7 +13023,7 @@ export interface WcToolkitVueGlobalComponents {
12283
13023
  HelixHeadlessCardVueProps,
12284
13024
  HelixHeadlessCardVueEvents
12285
13025
  >;
12286
- /** The track is a scroll container with scroll snapping, so dragging, trackpad swipes, and the browser's momentum scrolling all work. The controls scroll the track. Slides are your own elements, and the carousel writes nothing onto them. It renders a pane for each slide with 'role="group"', 'aria-roledescription="slide"', and a name that gives the slide's position in the set, and assigns the slide into it. A screen reader announces the position, and a slide that is a link stays a link. See 'assign'. **Rotation stops on focus and on hover, and stays stopped** until the user starts it again, as the APG requires. The rotation control is labeled with the action it performs and is first in the tab order. */
13026
+ /** The track is a scroll container with scroll snapping, so dragging, trackpad swipes, and the browser's momentum scrolling all work. The controls scroll the track. Slides are your own elements, and the carousel writes nothing onto them. It renders a pane for each slide with 'role="group"', 'aria-roledescription="slide"', and a name that gives the slide's position in the set, and assigns the slide into it. A screen reader announces the position, and a slide that is a link stays a link. See 'assign'. **Rotation stops on focus and on hover, and stays stopped** until the user starts it again, as the APG requires. The rotation control is labeled with the action it performs and is first in the tab order. Rotation goes on from the last slide to the first, with or without 'loop', which is about the reader's own moves. A move the reader makes is announced, the slide's position read from a polite live region. While the carousel rotates the region is off, so a screen reader is not interrupted every few seconds. The indicators are one tab stop. The arrow keys along the track move between them, Up and Down on a vertical carousel, and Home and End go to the first and the last. Without 'loop', Previous on the first slide and Next on the last are marked 'aria-disabled'. */
12287
13027
  "helix-headless-carousel": DefineCustomElement<
12288
13028
  HelixHeadlessCarousel,
12289
13029
  HelixHeadlessCarouselVueProps,
@@ -12307,7 +13047,7 @@ export interface WcToolkitVueGlobalComponents {
12307
13047
  HelixHeadlessChatVueProps,
12308
13048
  HelixHeadlessChatVueEvents
12309
13049
  >;
12310
- /** The host is the group. It has 'role="group"' through internals, and 'label' names it. Without a name, screen readers announce the checkboxes as separate controls. **Each checkbox submits its own value.** Checkboxes are already form-associated, and a native group is several inputs that share a name, so the group adds no form value of its own. It adds the grouping, a shared 'name' that you write once, and one place to read and write the whole set. 'value' is the checked values, separated by commas, in the order the checkboxes are written. Setting it checks exactly those values and unchecks the rest. **The group shows the message you set in 'feedback'.** It is form-associated only for validity and never calls 'setFormValue', so the browser does not generate a message for it. */
13050
+ /** The host is the group. It has 'role="group"' through internals, and 'label' names it. Without a name, screen readers announce the checkboxes as separate controls. **Each checkbox submits its own value.** Checkboxes are already form-associated, and a native group is several inputs that share a name, so the group adds no form value of its own. It adds the grouping, a shared 'name' that you write once, and one place to read and write the whole set. 'value' is the checked values, separated by commas, in the order the checkboxes are written, read from the boxes themselves. Setting it checks exactly those values and unchecks the rest. A checkbox is a member wherever it sits inside the group, in a row or a grid cell of your own, unless another group inside this one holds it. A field of another kind inside the group, such as an "Other" text field, sends its own 'input' and 'change' past the group. **The group shows the message you set in 'feedback'.** It is form-associated only for validity and never calls 'setFormValue', so the browser does not generate a message for it. */
12311
13051
  "helix-headless-checkbox-group": DefineCustomElement<
12312
13052
  HelixHeadlessCheckboxGroup,
12313
13053
  HelixHeadlessCheckboxGroupVueProps,
@@ -12331,19 +13071,19 @@ export interface WcToolkitVueGlobalComponents {
12331
13071
  HelixHeadlessCodeVueProps,
12332
13072
  HelixHeadlessCodeVueEvents
12333
13073
  >;
12334
- /** A text field with a button that opens 'ColorPicker' in an overlay. 'ColorPicker' provides the square, the ramps, the eyedropper, and the syntax toggle, and you can also use it on its own, flat on the page. Color Input adds the field, the overlay, and the form value, the same arrangement Date Input has with 'DatePicker'. You can type or paste a color into the field without opening the picker. Color Input is a custom control, unlike '<input type="color">', so you can style the panel to match your interface. The field reads every color syntax, including '#f00', '#ff0000', 'rgb(255 0 0)', 'rgba(255,0,0,.5)', 'rgb(255 0 0 / 50%)', and 'hsl(0 100% 50%)'. It writes colors in the syntax that 'format' names. The field shows the value without reformatting it, because half-typed input does not survive a round trip through a formatter. Date Input does the same with dates. The component sets '--color-input-swatch', so do not set it yourself. It holds the resolved color, so the styled tier can paint the swatch without parsing the value. */
13074
+ /** A text field with a button that opens 'ColorPicker' in an overlay. 'ColorPicker' provides the square, the ramps, the eyedropper, and the syntax toggle, and you can also use it on its own, flat on the page. Color Input adds the field, the overlay, and the form value, the same arrangement Date Input has with 'DatePicker'. You can type or paste a color into the field without opening the picker. Color Input is a custom control, unlike '<input type="color">', so you can style the panel to match your interface. The field reads every color syntax, including '#f00', '#ff0000', 'rgb(255 0 0)', 'rgba(255,0,0,.5)', 'rgb(255 0 0 / 50%)', and 'hsl(0 100% 50%)'. It writes colors in the syntax that 'format' names. The field shows the value without reformatting it, because half-typed input does not survive a round trip through a formatter. Date Input does the same with dates. Typing sends 'input' on each keystroke and 'change' when you leave the field, as a text field does, so the message about a color it cannot read waits until you are done. Dragging in the panel sends 'input' as the color moves and 'change' when it settles. The component sets '--color-input-swatch', so do not set it yourself. It holds the resolved color, so the styled tier can paint the swatch without parsing the value. */
12335
13075
  "helix-headless-color-input": DefineCustomElement<
12336
13076
  HelixHeadlessColorInput,
12337
13077
  HelixHeadlessColorInputVueProps,
12338
13078
  HelixHeadlessColorInputVueEvents
12339
13079
  >;
12340
- /** The picker on its own, with no field around it, for a settings pane or a toolbar. Color Input shows this element in a panel behind a text field. The saturation and brightness square is two '<input type="range">' elements, laid over the square and made invisible, and the handle is drawn from their values. The keyboard behavior, the announcements, and the touch targets come from the platform, and there is no 'role="application"'. The picker works in HSB and derives the value from it. A value set from outside is read into the model once. Black is 'brightness: 0', which has no hue or saturation, so a model read back from the value would turn red into gray after you drag to the bottom of the square and back. */
13080
+ /** The picker on its own, with no field around it, for a settings pane or a toolbar. Color Input shows this element in a panel behind a text field. The saturation and brightness square is two '<input type="range">' elements, laid over the square and made invisible, and the handle is drawn from their values. The keyboard behavior, the announcements, and the touch targets come from the platform, and there is no 'role="application"'. The picker works in HSB and derives the value from it. A value set from outside is read into the model once. Black is 'brightness: 0', which has no hue or saturation, so a model read back from the value would turn red into gray after you drag to the bottom of the square and back. The square is one tab stop. In it, the up and down arrows move brightness and the left and right arrows move saturation, and PageUp and PageDown move brightness by ten. The picker sends 'input' as the color moves and 'change' when a drag, a key, a typed value or a preset settles it, as '<input type="color">' does. */
12341
13081
  "helix-headless-color-picker": DefineCustomElement<
12342
13082
  HelixHeadlessColorPicker,
12343
13083
  HelixHeadlessColorPickerVueProps,
12344
13084
  HelixHeadlessColorPickerVueEvents
12345
13085
  >;
12346
- /** The list is a 'Listbox', which handles filtering, the empty state, the highlight, 'aria-activedescendant', and scrolling an option into view. This element handles the field, the panel, and the communication between them. The typed text and the value are separate. The text is a filter: it narrows the list and is then discarded. The value is the option you choose, and the field then shows that option's text. The filter clears on close, so a reopened combobox starts from the whole list. Focus stays in the text field. The arrow keys move through the list with the listbox's public 'navigate' method. 'role="combobox"' is on the input itself. With 'multiple', each chosen option is a tag in the field with its own remove control. The panel stays open and the filter clears after each choice, so the next choice starts from the whole list. With 'creatable', the combobox offers a create row and fires 'helix-create'. It does not add the option. The options are your light DOM, and your framework would re-render over an element the combobox inserted, so add the option in your event handler. */
13086
+ /** The list is a 'Listbox', which handles filtering, the empty state, the highlight, 'aria-activedescendant', and scrolling an option into view. This element handles the field, the panel, and the communication between them. The typed text and the value are separate. The text is a filter: it narrows the list and is then discarded. The value is the option you choose, and the field then shows that option's text. The filter clears on close, so a reopened combobox starts from the whole list. Focus stays in the text field. The arrow keys move through the list with the listbox's public 'navigate' method. 'role="combobox"' is on the input itself. ArrowDown and ArrowUp open the list on the chosen option, and Enter chooses the highlighted one. Space, Home, End and letters edit the text, and Enter in a closed field is left to the form. Emptying the field and leaving it clears a single choice; Escape puts the chosen words back. With 'multiple', each chosen option is a tag in the field with its own remove control. The panel stays open and the filter clears after each choice, so the next choice starts from the whole list. With 'creatable', the combobox offers a create row and fires 'helix-create'. It does not add the option. The options are your light DOM, and your framework would re-render over an element the combobox inserted, so add the option in your event handler. */
12347
13087
  "helix-headless-combobox": DefineCustomElement<
12348
13088
  HelixHeadlessCombobox,
12349
13089
  HelixHeadlessComboboxVueProps,
@@ -12355,25 +13095,25 @@ export interface WcToolkitVueGlobalComponents {
12355
13095
  HelixHeadlessCommandVueProps,
12356
13096
  HelixHeadlessCommandVueEvents
12357
13097
  >;
12358
- /** Copies text to the clipboard and confirms the copy. The platform gives no feedback for a clipboard write, so without a confirmation a press that copies looks the same as one that fails. The confirmation and the event wait for the write to finish. The browser can refuse a clipboard write, for example on an insecure origin, in a document that is not focused, or after a gesture that does not qualify. A refused write leaves the button unchanged. */
13098
+ /** Copies text to the clipboard and confirms the copy. The platform gives no feedback for a clipboard write, so without a confirmation a press that copies looks the same as one that fails. The confirmation and the event wait for the write to finish. The browser can refuse a clipboard write, for example on an insecure origin, in a document that is not focused, or after a gesture that does not qualify. A refused write leaves the button unchanged. It replaces Button's render and its press, so it never submits a form or sends a command: 'type', 'command', 'commandfor' and the 'form*' overrides have no effect, and the 'start' and 'end' slots and the 'text' part are not rendered. An 'aria-label' on the element names it before a copy, in place of 'label'. */
12359
13099
  "helix-headless-copy-button": DefineCustomElement<
12360
13100
  HelixHeadlessCopyButton,
12361
13101
  HelixHeadlessCopyButtonVueProps,
12362
13102
  HelixHeadlessCopyButtonVueEvents
12363
13103
  >;
12364
- /** Declare the columns as 'TableColumn' children and pass the rows as an array. The schema stays readable in the HTML, and the rows can be windowed, which ten thousand row elements cannot be. '''html <helix-headless-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-headless-table-column field="name" sortable>Name</helix-headless-table-column> <helix-headless-table-column field="size" text-align="end" sortable .cell=${bytes}>Size</helix-headless-table-column> </helix-headless-data-table> ''' For a short table written out by hand, use 'Table', which takes rows as markup. Sort and filter apply to the whole set, including the rows on other pages. **The cell values do not server-render.** The headings and the row elements do. Reading a cell needs the columns, and Lit SSR does not pass the column children to this element, so a crawler sees an empty table of the right shape. Use 'Table' when the served HTML has to carry the values. 'selectable' adds a column of checkboxes, keyed on 'row-key': - A row is selected by its key, so the selection survives a sort, a filter, and a page change. - 'selected' holds the chosen keys, comma separated, the same shape 'Listbox' uses for a multiple choice. As with 'sort', writing it applies the selection, and 'default-selected' holds what the markup declared. - The checkbox in the heading selects every row in the result, across pages, and shows a dash while only some are chosen. To act on a single row, such as opening it, put a link or a button in a cell. People can resize and reorder the columns. 'resizable' on a column puts a separator on its edge. 'reorderable' on the table puts a grip on each heading that has a 'field', moved by dragging or with the arrow keys. The new order is written to 'order' as a list of fields. Your markup is not rewritten: the table assigns the headings to its header in that order. 'csv()' returns the result as text: every row that passes the filter, in the order and the columns on screen. Saving the file is up to you. 'DataTable' has no 'columns' attribute. Each 'TableColumn' is part of the schema, so you size a column with its own 'width'. 'Table' has 'columns' because its cells are markup you write and it can have no columns at all. Written on 'DataTable', 'columns' has no effect, so watch for it when you move a table from 'Table' to 'DataTable'. */
13104
+ /** Declare the columns as 'TableColumn' children and pass the rows as an array. The schema stays readable in the HTML, and the rows can be windowed, which ten thousand row elements cannot be. '''html <helix-headless-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-headless-table-column field="name" sortable>Name</helix-headless-table-column> <helix-headless-table-column field="size" text-align="end" sortable .cell=${bytes}>Size</helix-headless-table-column> </helix-headless-data-table> ''' For a short table written out by hand, use 'Table', which takes rows as markup. Sort and filter apply to the whole set, including the rows on other pages. **The cell values do not server-render.** The headings and the row elements do. Reading a cell needs the columns, and Lit SSR does not pass the column children to this element, so a crawler sees an empty table of the right shape. Use 'Table' when the served HTML has to carry the values. 'selectable' adds a column of checkboxes, keyed on 'row-key': - A row is selected by its key, so the selection survives a sort, a filter, and a page change. - 'selected' holds the chosen keys, comma separated, the same shape 'Listbox' uses for a multiple choice. As with 'sort', writing it applies the selection, and 'default-selected' holds what the markup declared. - The checkbox in the heading selects every row in the result, across pages, and shows a dash while only some are chosen. To act on a single row, such as opening it, put a link or a button in a cell. The grid is one tab stop, and the arrow keys move between its cells, the headings included: - The arrow keys move one cell, and Home and End to the ends of the row. - Control with Home or End moves to the first or the last cell of the grid. - Page Up and Page Down move by the rows that fit in view. - Enter or F2 moves into the cell's controls, and Escape moves back to the cell. Tab moves between the controls of one cell. - Enter or Space on a sortable heading sorts by it, and Space on a row of a 'selectable' table selects it. The controls inside the cells leave the tab order, so Tab moves past the whole grid. A windowed table keeps the row holding focus drawn while the rest scroll away. People can resize and reorder the columns. 'resizable' on a column puts a separator on its edge. 'reorderable' on the table puts a grip on each heading that has a 'field', moved by dragging or with the arrow keys. The new order is written to 'order' as a list of fields. Your markup is not rewritten: the table assigns the headings to its header in that order. 'csv()' returns the result as text: every row that passes the filter, in the order and the columns on screen. Saving the file is up to you. 'DataTable' has no 'columns' attribute. Each 'TableColumn' is part of the schema, so you size a column with its own 'width'. 'Table' has 'columns' because its cells are markup you write and it can have no columns at all. Written on 'DataTable', 'columns' has no effect, so watch for it when you move a table from 'Table' to 'DataTable'. */
12365
13105
  "helix-headless-data-table": DefineCustomElement<
12366
13106
  HelixHeadlessDataTable,
12367
13107
  HelixHeadlessDataTableVueProps,
12368
13108
  HelixHeadlessDataTableVueEvents
12369
13109
  >;
12370
- /** The calendar is 'DatePicker', which handles months, ranges, disabled days, the first day of the week, and the grid's keyboard behavior. The date input adds the field, the overlay, and the connection between them. You can type a date as well as pick one. The native '<input type="date">' gives a picker and locale formatting but allows almost no styling, so the field is a text field. */
13110
+ /** The calendar is 'DatePicker', which handles months, ranges, disabled days, the first day of the week, and the grid's keyboard behavior. The date input adds the field, the overlay, and the connection between them. You can type a date as well as pick one. The native '<input type="date">' gives a picker and locale formatting but allows almost no styling, so the field is a text field. Typing sends 'input' on each keystroke and 'change' when you leave the field, as a text field does. A date picked from the calendar sends both. The trigger opens the calendar with focus on the selected day, and Escape closes it and returns focus to the field. Focusing the field opens the calendar too, and Tab out of the field closes it again. */
12371
13111
  "helix-headless-date-input": DefineCustomElement<
12372
13112
  HelixHeadlessDateInput,
12373
13113
  HelixHeadlessDateInputVueProps,
12374
13114
  HelixHeadlessDateInputVueEvents
12375
13115
  >;
12376
- /** A grid of days that follows the APG date grid pattern: - The grid is one tab stop. Only the focused cell is in the tab sequence. - Arrow keys move by day and by week. - 'PageUp' and 'PageDown' move by month. - 'Home' and 'End' move to the start and end of the week. **Dates are 'YYYY-MM-DD' strings, and every calculation is in UTC**, because a local-time 'Date' shifts across a time zone or daylight-saving boundary. 'month' sets which month the grid shows, separately from 'value', so paging selects nothing and you can control the view. When unset, it follows the first selected date, then the current month. 'mode' sets how many dates are held. Unset holds one, 'range' holds two and marks the dates between them, and 'multiple' toggles each date. All three read and write the same comma-separated 'value'. */
13116
+ /** A grid of days that follows the APG date grid pattern: - The grid is one tab stop. Only the focused cell is in the tab sequence. - Arrow keys move by day and by week. - 'PageUp' and 'PageDown' move by month. - 'Home' and 'End' move to the start and end of the week. **Dates are 'YYYY-MM-DD' strings, and every calculation is in UTC**, because a local-time 'Date' shifts across a time zone or daylight-saving boundary. 'month' sets which month the grid shows, separately from 'value', so paging selects nothing and you can control the view. When unset, it follows the first selected date, then the current month. 'mode' sets how many dates are held. Unset holds one, 'range' holds two and marks the dates between them, and 'multiple' toggles each date. All three read and write the same comma-separated 'value'. The month heading is a live region, so a screen reader hears the new month when Previous or Next is pressed. Neither moves past 'min' or 'max', and the keys stop at them too. A value outside the bounds, on a barred day, or off 'step' reports 'rangeUnderflow', 'rangeOverflow', 'badInput' or 'stepMismatch', so a form does not submit it. */
12377
13117
  "helix-headless-date-picker": DefineCustomElement<
12378
13118
  HelixHeadlessDatePicker,
12379
13119
  HelixHeadlessDatePickerVueProps,
@@ -12391,7 +13131,7 @@ export interface WcToolkitVueGlobalComponents {
12391
13131
  HelixHeadlessDescriptionListVueProps,
12392
13132
  HelixHeadlessDescriptionListVueEvents
12393
13133
  >;
12394
- /** Renders a native '<dialog>' opened with 'showModal()'. The platform provides: - the top layer, so the dialog is above everything whatever the 'z-index' - a backdrop - closing with Escape - an inert page behind the dialog, unreachable by pointer, keyboard, or virtual cursor 'open' calls 'showModal()', and every way the dialog closes goes through 'requestOpen'. A native dialog closes three ways: the property, Escape, and a '<form method="dialog">' submit. Routing all three through 'requestOpen' keeps your state in step, so the dialog never closes while your state still says it is open, which would leave it impossible to reopen. */
13134
+ /** Renders a native '<dialog>' opened with 'showModal()'. The platform provides: - the top layer, so the dialog is above everything whatever the 'z-index' - a backdrop - closing with Escape - an inert page behind the dialog, unreachable by pointer, keyboard, or virtual cursor 'open' calls 'showModal()', and every way the dialog closes goes through 'requestOpen'. A native dialog closes three ways: the property, Escape, and a '<form method="dialog">' submit. Routing all three through 'requestOpen' keeps your state in step, so the dialog never closes while your state still says it is open, which would leave it impossible to reopen. The dialog's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names. While it is open, the page behind it does not scroll. */
12395
13135
  "helix-headless-dialog": DefineCustomElement<
12396
13136
  HelixHeadlessDialog,
12397
13137
  HelixHeadlessDialogVueProps,
@@ -12403,13 +13143,13 @@ export interface WcToolkitVueGlobalComponents {
12403
13143
  HelixHeadlessDividerVueProps,
12404
13144
  HelixHeadlessDividerVueEvents
12405
13145
  >;
12406
- /** A donut chart divides one whole into parts, so the component reads one column. **The first column of numbers is the series, and each row is a slice.** Other Helix charts take one column per series. **Negative values are skipped.** An arc cannot show a negative number, so those rows are left out and the total is the sum of the remaining rows. */
13146
+ /** A donut chart divides one whole into parts, so the component reads one column. **The first column of numbers is the series, and each row is a slice.** Other Helix charts take one column per series. **Negative values are skipped.** An arc cannot show a negative number, so those rows are left out and the total is the sum of the remaining rows. The ring is 'aria-hidden'. The 'summary' part names the chart, from 'label' or the table's caption, and gives each slice's share, and the table beside the chart has every amount. */
12407
13147
  "helix-headless-donut-chart": DefineCustomElement<
12408
13148
  HelixHeadlessDonutChart,
12409
13149
  HelixHeadlessDonutChartVueProps,
12410
13150
  HelixHeadlessDonutChartVueEvents
12411
13151
  >;
12412
- /** Uses 'MixinControllerOpen', so 'open', 'defaultOpen', and the 'helix-before-open' and 'helix-before-close' events work the same way as on an accordion item. The drawer is modal by default, which means three things: - focus is trapped inside - Escape and a press outside close it - the page behind is covered Content stays mounted when the drawer is closed, so it is in the server markup and can animate. A closed '<dialog>' is already out of the tab order and the accessibility tree, so the drawer does not write 'inert'. The 'role', 'aria-modal', and the scrim also come from the '<dialog>' element. 'drawer-root.ssr.spec.ts' checks that the panel has no hand-written 'inert' or 'role'. Open the drawer declaratively with the platform's invoker attributes: '''html <helix-headless-button commandfor="nav" command="--toggle">Menu</helix-headless-button> <helix-headless-drawer id="nav">…</helix-headless-drawer> ''' */
13152
+ /** Uses 'MixinControllerOpen', so 'open', 'defaultOpen', and the 'helix-before-open' and 'helix-before-close' events work the same way as on an accordion item. The drawer is modal by default, which means four things: - focus is trapped inside - Escape and a press outside close it - the page behind is covered - the page behind does not scroll A drawer with 'modal="false"' leaves the page usable and still closes on Escape. The panel's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names. Content stays mounted when the drawer is closed, so it is in the server markup and can animate. A closed '<dialog>' is already out of the tab order and the accessibility tree, so the drawer does not write 'inert'. The 'role', 'aria-modal', and the scrim also come from the '<dialog>' element. 'drawer-root.ssr.spec.ts' checks that the panel has no hand-written 'inert' or 'role'. Open the drawer declaratively with the platform's invoker attributes: '''html <helix-headless-button commandfor="nav" command="--toggle">Menu</helix-headless-button> <helix-headless-drawer id="nav">…</helix-headless-drawer> ''' */
12413
13153
  "helix-headless-drawer": DefineCustomElement<
12414
13154
  HelixHeadlessDrawer,
12415
13155
  HelixHeadlessDrawerVueProps,
@@ -12421,7 +13161,7 @@ export interface WcToolkitVueGlobalComponents {
12421
13161
  HelixHeadlessDrilldownItemVueProps,
12422
13162
  HelixHeadlessDrilldownItemVueEvents
12423
13163
  >;
12424
- /** One panel whose content changes as you move between pages. Use it where there is no room for a second column, such as on a phone, or on a touch screen with no hover to open one. It is a region that stays where you put it, such as inside a drawer, a sidebar, or a settings panel. A 'Menu' opens from a trigger and closes when you are done. 'Menu' can drill into pages too, through the same controller. Rows are places to go and commands to run. Nothing here is form-associated and nothing is submitted. To choose a value, use a 'Listbox'. A row that opens a page contains that page, so the stack holds one reference and reads the rest from the DOM. The behavior lives in 'DrilldownController', which 'Menu' shares. */
13164
+ /** One panel whose content changes as you move between pages. Use it where there is no room for a second column, such as on a phone, or on a touch screen with no hover to open one. It is a region that stays where you put it, such as inside a drawer, a sidebar, or a settings panel. A 'Menu' opens from a trigger and closes when you are done. 'Menu' can drill into pages too, through the same controller. Rows are places to go and commands to run. Nothing here is form-associated and nothing is submitted. To choose a value, use a 'Listbox'. A row that opens a page contains that page, so the stack holds one reference and reads the rest from the DOM. The behavior lives in 'DrilldownController', which 'Menu' shares. The rows of the page showing are a 'menu', named by 'label' on the top page and by the page's title below it. The back button and the title sit above the menu. Disabled rows stay reachable with the arrow keys, and typing a letter moves to the next row whose name starts with it. */
12425
13165
  "helix-headless-drilldown": DefineCustomElement<
12426
13166
  HelixHeadlessDrilldown,
12427
13167
  HelixHeadlessDrilldownVueProps,
@@ -12469,7 +13209,7 @@ export interface WcToolkitVueGlobalComponents {
12469
13209
  HelixHeadlessFilterInputVueProps,
12470
13210
  HelixHeadlessFilterInputVueEvents
12471
13211
  >;
12472
- /** Formats a date with 'Intl' where it is shown, so you do not write the same 'Intl' call and options in your own code. **'elapsed' shows compact relative time for a feed**, such as "42m", "3h", or "1d". After six days it shows a date. In en-US, 'Intl.NumberFormat' narrow renders both 'minute' and 'month' as 'm', so a compact "3m" could mean three minutes or three months. 'elapsedTime' in 'helix/core' does the measurement. **The text refreshes on one timer shared by the page.** Each element schedules an update for when its current reading expires, and an element showing a date schedules none, so a long feed left open costs almost nothing. **The output is always '<time datetime>'**, so screen readers, copy and paste, and scripts parsing the page get the exact instant, whatever the visible text says. */
13212
+ /** Formats a date with 'Intl' where it is shown, so you do not write the same 'Intl' call and options in your own code. **'elapsed' shows compact relative time for a feed**, such as "42m", "3h", or "1d". After six days it shows a date. In en-US, 'Intl.NumberFormat' narrow renders both 'minute' and 'month' as 'm', so a compact "3m" could mean three minutes or three months. 'elapsedTime' in 'helix/core' does the measurement. **The text refreshes on one timer shared by the page.** Each element schedules an update for when its current reading expires, and an element showing a date schedules none, so a long feed left open costs almost nothing. **The output is always '<time datetime>'**, so copy and paste and scripts parsing the page get the exact instant, whatever the visible text says. A screen reader reads the text, so an 'elapsed' reading is named in full, such as "3 hours ago", and carries the whole date as its title. **A date with no time, such as '2026-08-04', is that day everywhere.** It is formatted in UTC unless 'time-zone' says otherwise, as Date Input and Date Picker format their dates, so a reader west of UTC sees August 4 and not August 3. */
12473
13213
  "helix-headless-format-date": DefineCustomElement<
12474
13214
  HelixHeadlessFormatDate,
12475
13215
  HelixHeadlessFormatDateVueProps,
@@ -12493,7 +13233,7 @@ export interface WcToolkitVueGlobalComponents {
12493
13233
  HelixHeadlessIconButtonVueProps,
12494
13234
  HelixHeadlessIconButtonVueEvents
12495
13235
  >;
12496
- /** The icons are Phosphor, drawn on a 256 box at stroke-width 16. Each glyph renders its full inner markup, because most icons are several elements, each with its own stroke and fill. The markup is generated at build time from SVG files in this repository and never comes from user input, so rendering it with 'unsafeSVG' is safe. The '<svg>' carries 'fill="currentColor"'. The generator keeps only the inner markup, and Phosphor sets its fill on the root tag that the generator discards. Without it, the 65 solid glyphs fall back to black and disappear on a dark background. Shapes that set their own 'fill' or 'stroke' are unaffected. A name with no match renders nothing. An icon is decorative by default and hidden from assistive technology. Set 'label' only when the icon is the only carrier of meaning, such as in a button with no text. */
13236
+ /** The icons are Phosphor, drawn on a 256 box at stroke-width 16. Each glyph renders its full inner markup, because most icons are several elements, each with its own stroke and fill. The markup is generated at build time from SVG files in this repository and never comes from user input, so rendering it with 'unsafeSVG' is safe. The '<svg>' carries 'fill="currentColor"'. The generator keeps only the inner markup, and Phosphor sets its fill on the root tag that the generator discards. Without it, the 65 solid glyphs fall back to black and disappear on a dark background. Shapes that set their own 'fill' or 'stroke' are unaffected. A name with no match renders nothing, and the element fires 'error', so a typo in a name can be heard. An icon is decorative by default and hidden from assistive technology. Set 'label' only when the icon is the only carrier of meaning, such as in a button with no text. An 'aria-label' on the element works too: the element is then an image with that name. */
12497
13237
  "helix-headless-icon": DefineCustomElement<
12498
13238
  HelixHeadlessIcon,
12499
13239
  HelixHeadlessIconVueProps,
@@ -12529,19 +13269,19 @@ export interface WcToolkitVueGlobalComponents {
12529
13269
  HelixHeadlessLightboxItemVueProps,
12530
13270
  HelixHeadlessLightboxItemVueEvents
12531
13271
  >;
12532
- /** The frame around content you open, such as a picture, a video frame, or a chart. The lightbox draws no content of its own. It provides the frame, the keyboard behavior, and text that states the current position in the set. The modal behavior comes from a native '<dialog>' opened with 'showModal()', which provides the top layer, a backdrop, Escape to close, and 'inert' on the rest of the document. Every way of closing goes through 'requestOpen', as in 'Dialog' and 'Drawer'. A lightbox shows one item at a time and has no scrolling track, so 'active' holds the current item, as in 'Tabs'. The arrow keys change the item while focus stays in the dialog. The chrome hides when there is no input, through 'IdleController', and comes back on a pointer move or a focus. 'fullscreen' uses 'FullscreenController', as 'Video' does. */
13272
+ /** The frame around content you open, such as a picture, a video frame, or a chart. The lightbox draws no content of its own. It provides the frame, the keyboard behavior, and text that states the current position in the set. The modal behavior comes from a native '<dialog>' opened with 'showModal()', which provides the top layer, a backdrop, Escape to close, and 'inert' on the rest of the document. Every way of closing goes through 'requestOpen', as in 'Dialog' and 'Drawer'. A lightbox shows one item at a time and has no scrolling track, so 'active' holds the current item, as in 'Tabs'. The arrow keys change the item while focus stays in the dialog. The chrome hides when there is no input, through 'IdleController', and comes back on a pointer move, a key press, or a focus. It stays while focus is on a control in the header or the footer, so a keyboard reader is never left on a control that has gone. 'fullscreen' uses 'FullscreenController', as 'Video' does. While the viewer is open, the page behind it does not scroll. */
12533
13273
  "helix-headless-lightbox": DefineCustomElement<
12534
13274
  HelixHeadlessLightbox,
12535
13275
  HelixHeadlessLightboxVueProps,
12536
13276
  HelixHeadlessLightboxVueEvents
12537
13277
  >;
12538
- /** A line chart shows the shape of each series: where the readings went. The scale covers the range of the data. Including zero in the range of a series that moves between 980 and 1020 would flatten the line into a rule across the top of the box. 'BarChart' always starts at zero, because a bar's length is its value. Set 'zero' when the distance from zero is the point. Every series shares one scale, as in the bar chart. 'area' fills each series down to the floor on its own, so the fills overlap. For a total made of parts, use 'Area Chart', which stacks the series so the top edge is the total and each band is a share. The labels are HTML beside the drawing, as in 'BarChart'. Text inside an '<svg>' that fills its box scales with the box, so the same 'font-size' can render at 10px in a narrow chart and 43px in a wide one. The table is the accessible representation, and the drawing is 'aria-hidden'. Screen reader users get the numbers. */
13278
+ /** A line chart shows the shape of each series: where the readings went. The scale covers the range of the data. Including zero in the range of a series that moves between 980 and 1020 would flatten the line into a rule across the top of the box. 'BarChart' always starts at zero, because a bar's length is its value. Set 'zero' when the distance from zero is the point. Every series shares one scale, as in the bar chart. 'area' fills each series down to the floor on its own, so the fills overlap. For a total made of parts, use 'Area Chart', which stacks the series so the top edge is the total and each band is a share. The labels are HTML beside the drawing, as in 'BarChart'. Text inside an '<svg>' that fills its box scales with the box, so the same 'font-size' can render at 10px in a narrow chart and 43px in a wide one. The table is the accessible representation, and the drawing is 'aria-hidden'. Screen reader users get the numbers. The 'summary' part names the chart, from 'label' or the table's caption, and gives each series' latest reading. */
12539
13279
  "helix-headless-line-chart": DefineCustomElement<
12540
13280
  HelixHeadlessLineChart,
12541
13281
  HelixHeadlessLineChartVueProps,
12542
13282
  HelixHeadlessLineChartVueEvents
12543
13283
  >;
12544
- /** Provides layout and semantics. The row is a target only when you set 'href'. **'href' makes the whole row a link.** The component wraps its own layout in an '<a part="row">', as 'Tree.Item' does. An anchor of your own cannot wrap slots it does not own. With the anchor, the whole row is a target, Enter follows it, middle click opens a new tab, the status bar shows the destination, and all of it works before JavaScript runs. Client-side routing needs your own handling. A router cannot render its anchor inside the shadow root, so to navigate without a page load, intercept the click: the anchor is in 'composedPath()'. Handle only a plain primary click, so native gestures keep working. **For a row that holds controls and is not a destination, use 'data-list-item'.** With 'href' unset, the row is not a link. */
13284
+ /** Provides layout and semantics. The row is a target only when you set 'href'. **'href' makes the row a link.** The component wraps the leading content, the label, and the description in an '<a part="link">' inside the row, as 'Tree.Item' does. An anchor of your own cannot wrap slots it does not own. With the anchor, the row is a target, Enter follows it, middle click opens a new tab, the status bar shows the destination, and all of it works before JavaScript runs. **The 'end' slot sits beside the link, outside it**, so a button or a menu there is a control of its own: a click on it does not follow the link, and its name is not part of the link's. Client-side routing needs your own handling. A router cannot render its anchor inside the shadow root, so to navigate without a page load, intercept the click: the anchor is in 'composedPath()'. Handle only a plain primary click, so native gestures keep working. **For a row that holds controls and is not a destination, use 'data-list-item'.** With 'href' unset, the row is not a link. */
12545
13285
  "helix-headless-list-item": DefineCustomElement<
12546
13286
  HelixHeadlessListItem,
12547
13287
  HelixHeadlessListItemVueProps,
@@ -12553,7 +13293,7 @@ export interface WcToolkitVueGlobalComponents {
12553
13293
  HelixHeadlessListVueProps,
12554
13294
  HelixHeadlessListVueEvents
12555
13295
  >;
12556
- /** The listbox is the control, and options are its items. A Select is a listbox with a trigger in front of it, a Combobox is a listbox with a text input, and a command palette is a listbox in a dialog. They differ only in what opens the list and what filters it. With 'multiple' set, 'value' is a comma-separated string, like 'Checkbox.Group''s, because 'MixinControllerValue' holds a string. The form receives one entry per selected option, as a native '<select multiple>' sends it, so your server does not split on commas. Selected and active are separate. The selected option is the value. The active option is where the keyboard is: the arrow keys move it, and 'aria-activedescendant' points to it while focus stays on the list. */
13296
+ /** The listbox is the control, and options are its items. A Select is a listbox with a trigger in front of it, a Combobox is a listbox with a text input, and a command palette is a listbox in a dialog. They differ only in what opens the list and what filters it. With 'multiple' set, 'value' is a comma-separated string, like 'Checkbox.Group''s, because 'MixinControllerValue' holds a string. The form receives one entry per selected option, as a native '<select multiple>' sends it, so your server does not split on commas. Selected and active are separate. The selected option is the value. The active option is where the keyboard is: the arrow keys move it, and 'aria-activedescendant' points to it while focus stays on the list. The arrow keys, Home, End, PageUp and PageDown move the highlight, and typed letters move it to the next option whose words start with them. In a single-choice list the highlight is the choice unless 'manual' is set; then Enter, Space or a click chooses. With 'multiple', Space toggles the highlighted option, Shift with an arrow adds the option it moves to, and Control+A or Command+A chooses every option, or none where all are chosen. In a filter field, Space, Home, End and letters edit the text. */
12557
13297
  "helix-headless-listbox": DefineCustomElement<
12558
13298
  HelixHeadlessListbox,
12559
13299
  HelixHeadlessListboxVueProps,
@@ -12613,7 +13353,7 @@ export interface WcToolkitVueGlobalComponents {
12613
13353
  HelixHeadlessMapRasterVueProps,
12614
13354
  HelixHeadlessMapRasterVueEvents
12615
13355
  >;
12616
- /** Wraps a map drawn by MapLibre, Leaflet, or another renderer. The frame adds a name for the map, a column of controls, and a strip for the map credit. Helix does not draw the map itself. The controls are one column, and 'controls' names which ones: 'fullscreen', 'layers', 'tilt', 'zoom', and 'compass', top to bottom. 'zoom compass fullscreen' by default. The compass's needle points north as the map turns, and pressing it turns the map to face north. Add 'pan' and 'rotate' for buttons around the compass that move and turn the map. Dragging is otherwise the only way a pointer moves the map, so add them where the map has to be usable without dragging, as WCAG 2.2 asks at level AA. The arrow keys pan the map and Shift with Left or Right turns it either way. The pan and zoom buttons and the arrow keys send 'helix-map-pan' and 'helix-map-zoom'. Move your map in response, or connect it with 'connectMap' from '@fusion.dev/helix-map', which does this for you. Add 'tilt' to 'controls' for the 3D button, which a map with 3D buildings or terrain needs. It is a toggle. Pressed, it tilts the map 50 degrees, and 'connectMap' raises the buildings and the ground. Pressed again, it makes the map flat, and lays them flat too. Shift with Up or Down tilts the map in steps. Turning and tilting send 'helix-map-rotate' and 'helix-map-tilt', which 'connectMap' answers on MapLibre. Leaflet draws maps flat and does not rotate. Add 'layers' to 'controls' for a layers button. It opens a menu with a tile for each layer, which sets the layer's 'hidden' attribute. Layers with the same 'group', such as a route and its dotted legs, share one tile. Imagery, a 'helix-map-raster' with 'ground', is a map type and not a tile. The menu opens with a card for each type, Standard, Hybrid, and Satellite, with a picture of the map in it, and 'map-type' says which is chosen. Standard hides the imagery, Hybrid draws it under the roads and names, and Satellite draws it alone. 'connectMap' does not draw a hidden layer, so a layer you write with 'hidden' starts turned off. Markers, routes, areas, live positions, and points layers go inside the frame as child elements. */
13356
+ /** Wraps a map drawn by MapLibre, Leaflet, or another renderer. The frame adds a name for the map, a column of controls, and a strip for the map credit. Helix does not draw the map itself. The controls are one column, and 'controls' names which ones: 'fullscreen', 'layers', 'tilt', 'zoom', and 'compass', top to bottom. 'zoom compass fullscreen' by default. The compass's needle points north as the map turns, and pressing it turns the map to face north. Add 'pan' and 'rotate' for buttons around the compass that move and turn the map. Dragging is otherwise the only way a pointer moves the map, so add them where the map has to be usable without dragging, as WCAG 2.2 asks at level AA. The arrow keys pan the map and Shift with Left or Right turns it either way. The pan and zoom buttons and the arrow keys send 'helix-map-pan' and 'helix-map-zoom'. Move your map in response, or connect it with 'connectMap' from '@fusion.dev/helix-map', which does this for you. Add 'tilt' to 'controls' for the 3D button, which a map with 3D buildings or terrain needs. It is a toggle. Pressed, it tilts the map 50 degrees, and 'connectMap' raises the buildings and the ground. Pressed again, it makes the map flat, and lays them flat too. Shift with Up or Down tilts the map in steps. Turning and tilting send 'helix-map-rotate' and 'helix-map-tilt', which 'connectMap' answers on MapLibre. Leaflet draws maps flat and does not rotate. Add 'layers' to 'controls' for a layers button. It opens a menu with a tile for each layer, which sets the layer's 'hidden' attribute. Layers with the same 'group', such as a route and its dotted legs, share one tile. A tile sends 'helix-before-toggle' from the layer first, so you can store the choice or refuse it. Imagery, a 'helix-map-raster' with 'ground', is a map type and not a tile. The menu opens with a card for each type, Standard, Hybrid, and Satellite, with a picture of the map in it, and 'map-type' says which is chosen. Standard hides the imagery, Hybrid draws it under the roads and names, and Satellite draws it alone. Choosing one sends 'helix-before-change' with its name, and 'change' once 'map-type' holds it. 'connectMap' does not draw a hidden layer, so a layer you write with 'hidden' starts turned off. Markers, routes, areas, live positions, and points layers go inside the frame as child elements. */
12617
13357
  "helix-headless-map": DefineCustomElement<
12618
13358
  HelixHeadlessMap,
12619
13359
  HelixHeadlessMapVueProps,
@@ -12637,13 +13377,13 @@ export interface WcToolkitVueGlobalComponents {
12637
13377
  HelixHeadlessMegamenuVueProps,
12638
13378
  HelixHeadlessMegamenuVueEvents
12639
13379
  >;
12640
- /** One element covers three kinds of row, and what you give it decides which: - Content in the 'submenu' slot makes the row open a submenu page. - 'checked' makes the row a choice. - With neither, the row is a command. The role follows the kind. A row with 'checked' is 'menuitemcheckbox' with 'aria-checked', and 'exclusive' makes it 'menuitemradio', for a set where only one can be on. A row that opens a page keeps 'menuitem' and sets 'aria-haspopup'. The menu sets whether the row's page is showing as a property, never as an attribute. An attribute written onto your element after it upgrades causes a hydration mismatch. */
13380
+ /** One element covers three kinds of row, and what you give it decides which: - Content in the 'submenu' slot makes the row open a submenu page. - 'checked' makes the row a choice. - With neither, the row is a command. The role follows the kind. A row with 'checked' is 'menuitemcheckbox' with 'aria-checked', and 'exclusive' makes it 'menuitemradio', for a set where only one can be on. A row that opens a page keeps 'menuitem' and sets 'aria-haspopup'. Choosing a choice row checks or unchecks it before 'helix-select' is sent, so a listener reads the new 'checked'. An 'exclusive' row turns on and turns off the 'exclusive' rows next to it. Cancel 'helix-before-toggle' to keep a row as it is and set 'checked' yourself. The menu sets whether the row's page is showing as a property, never as an attribute. An attribute written onto your element after it upgrades causes a hydration mismatch. */
12641
13381
  "helix-headless-menu-item": DefineCustomElement<
12642
13382
  HelixHeadlessMenuItem,
12643
13383
  HelixHeadlessMenuItemVueProps,
12644
13384
  HelixHeadlessMenuItemVueEvents
12645
13385
  >;
12646
- /** The trigger is slotted and stays your own element, as with the tooltip. The menu renders its surface in the top layer with the popover API, so an ancestor with 'overflow: hidden' does not clip it and it needs no 'z-index'. Submenus drill down. A submenu replaces the panel's content, and a back row returns to the previous page. One panel avoids the diagonal pointer path that side-by-side panels need, stays inside a narrow window, and works on touch screens, which have no hover. The root holds which page is open, because only one page shows at a time. It sets this on items as a property, never as an attribute. An attribute written onto your element after it upgrades causes a hydration mismatch. */
13386
+ /** The trigger is slotted and stays your own element, as with the tooltip. The menu renders its surface in the top layer with the popover API, so an ancestor with 'overflow: hidden' does not clip it and it needs no 'z-index'. Slot a 'helix-button' or 'helix-icon-button' as the trigger, and the menu tells it that it opens a menu and whether the menu is open. A plain '<button>' can only be told by writing attributes onto your markup, which the menu does not do, so give it 'aria-haspopup="menu"' and set its 'aria-expanded' from the 'toggle' event. Submenus drill down. A submenu replaces the panel's content, and a back row returns to the previous page. One panel avoids the diagonal pointer path that side-by-side panels need, stays inside a narrow window, and works on touch screens, which have no hover. The root holds which page is open, because only one page shows at a time. It sets this on items as a property, never as an attribute. An attribute written onto your element after it upgrades causes a hydration mismatch. */
12647
13387
  "helix-headless-menu": DefineCustomElement<
12648
13388
  HelixHeadlessMenu,
12649
13389
  HelixHeadlessMenuVueProps,
@@ -12655,7 +13395,7 @@ export interface WcToolkitVueGlobalComponents {
12655
13395
  HelixHeadlessMeterVueProps,
12656
13396
  HelixHeadlessMeterVueEvents
12657
13397
  >;
12658
- /** Renders a real '<nav>', the landmark that screen reader users jump to. Navigation is its own component, separate from 'AppHeader', so you can use it in a header, a footer, or a sidebar. **It renders no links.** Bring your own, mark the current one with 'aria-current="page"', and style them with the 'data-navigation-item' recipe. A router renders its own anchors and cannot render them inside the component's shadow root. The component moves a marker to the current item. It finds the current item by reading 'aria-current', so the attribute that screen readers announce also places the marker. Set 'orientation="vertical"' to stack the destinations in a column, for a sidebar. */
13398
+ /** Renders a real '<nav>', the landmark that screen reader users jump to. Navigation is its own component, separate from 'AppHeader', so you can use it in a header, a footer, or a sidebar. **It renders no links.** Bring your own, mark the current one with 'aria-current="page"', and style them with the 'data-navigation-item' recipe. A router renders its own anchors and cannot render them inside the component's shadow root. The component moves a marker to the current item. It finds the current item by reading 'aria-current', so the attribute that screen readers announce also places the marker. Any value but 'false' counts, so a sidebar of sections on one page can mark the section in view with 'aria-current="location"'. Where several are marked, 'page' wins. Set 'orientation="vertical"' to stack the destinations in a column, for a sidebar. */
12659
13399
  "helix-headless-navigation": DefineCustomElement<
12660
13400
  HelixHeadlessNavigation,
12661
13401
  HelixHeadlessNavigationVueProps,
@@ -12679,13 +13419,13 @@ export interface WcToolkitVueGlobalComponents {
12679
13419
  HelixHeadlessNotificationsVueProps,
12680
13420
  HelixHeadlessNotificationsVueEvents
12681
13421
  >;
12682
- /** A separate family from 'Input''s 'type="number"'. It renders two buttons, binds four keys 'Input' does not, and handles clamping and stepping. The field is 'type="text"' with 'inputmode="decimal"'. Tested in a real browser, 'type="number"' fails in three ways: - Typing '12e' gives a '.value' of '""', so the element cannot see what you typed. A 'type="text"' field keeps '"12e"'. - The mouse wheel over a focused field changes the value, for example from 5 to 4, when you only meant to scroll the page. - 'selectionStart' is 'null', so the caret cannot be managed. 'inputmode="decimal"' keeps the numeric keypad on phones. Validity still comes from the platform: 'min', 'max', and 'step' are mirrored onto the host's own 'setValidity'. Stepping is separate from typing, so a number is not corrected while you type it. */
13422
+ /** A separate family from 'Input''s 'type="number"'. It renders two buttons, binds four keys 'Input' does not, and handles clamping and stepping. The field is 'type="text"' with 'inputmode="decimal"'. Tested in a real browser, 'type="number"' fails in three ways: - Typing '12e' gives a '.value' of '""', so the element cannot see what you typed. A 'type="text"' field keeps '"12e"'. - The mouse wheel over a focused field changes the value, for example from 5 to 4, when you only meant to scroll the page. - 'selectionStart' is 'null', so the caret cannot be managed. 'inputmode="decimal"' keeps the numeric keypad on phones. Validity follows the platform's rules: 'min', 'max', and 'step' are checked and reported through the host's own 'setValidity', under the platform's flag names. Stepping is separate from typing, so a number is not corrected while you type it. */
12683
13423
  "helix-headless-number-input": DefineCustomElement<
12684
13424
  HelixHeadlessNumberInput,
12685
13425
  HelixHeadlessNumberInputVueProps,
12686
13426
  HelixHeadlessNumberInputVueEvents
12687
13427
  >;
12688
- /** Object Inspector shows a structured value, such as an API response, a config, or a raw record, as a read-only tree with each entry's type visible. Pass the object to 'value', or name a '<script type="application/json">' by id with 'for', the same source 'VirtualList' and the charts read. JSON text works with server rendering and with React hydration, which skips object properties. 'value' wins when both are set. The tree is one tab stop. Up and Down move between rows, Right opens a branch or moves into it, Left closes it or moves to its parent, and Home and End move to the first and last rows. Focus stays on the tree, and 'aria-activedescendant' marks the active row. Each row carries its real level, position, and set size, including in a windowed tree. The copy button copies the active row, a branch as JSON and a string as its text. So do Command+C and Control+C while the tree has focus and no text is selected. The button sits beside the tree, because assistive technology cannot reliably reach a button inside a tree item. 'windowed' draws only the rows in view, for values with thousands of entries. The box needs a height for windowing to work. The styled tier sets one, and in the headless tier you set it yourself. */
13428
+ /** Object Inspector shows a structured value, such as an API response, a config, or a raw record, as a read-only tree with each entry's type visible. Pass the object to 'value', or name a '<script type="application/json">' by id with 'for', the same source 'VirtualList' and the charts read. JSON text works with server rendering and with React hydration, which skips object properties. 'value' wins when both are set. The tree is one tab stop. Up and Down move between rows, Right opens a branch or moves into it, Left closes it or moves to its parent, and Home and End move to the first and last rows. Typing moves to the next row whose key starts with what was typed, and '*' opens every branch beside the active row. Focus stays on the tree, and 'aria-activedescendant' marks the active row. Each row carries its real level, position, and set size, including in a windowed tree. A new 'value' keeps the branches a reader opened or closed, and the active row, where the new value still has them. A branch the old value did not have opens to 'default-depth'. The copy button copies the active row, a branch as JSON and a string as its text. So do Command+C and Control+C while the tree has focus and no text is selected. The button sits beside the tree, because assistive technology cannot reliably reach a button inside a tree item. 'windowed' draws only the rows in view, for values with thousands of entries. The box needs a height for windowing to work. The styled tier sets one, and in the headless tier you set it yourself. */
12689
13429
  "helix-headless-object-inspector": DefineCustomElement<
12690
13430
  HelixHeadlessObjectInspector,
12691
13431
  HelixHeadlessObjectInspectorVueProps,
@@ -12703,7 +13443,7 @@ export interface WcToolkitVueGlobalComponents {
12703
13443
  HelixHeadlessOptionVueProps,
12704
13444
  HelixHeadlessOptionVueEvents
12705
13445
  >;
12706
- /** Outline is a table of contents for a document. 'Navigation' does the same job for a site. The links are your own anchors. A router renders its own '<a>' and cannot render one inside the outline's shadow root, and the hrefs are fragments on the same page. The current section is decided by the headings' positions. An 'IntersectionObserver' with a band near the top fails both ways: when headings are far apart, none is in the band and no section is marked, and when they are close together, several are in the band at once. */
13446
+ /** Outline is a table of contents for a document. 'Navigation' does the same job for a site. The links are your own anchors. A router renders its own '<a>' and cannot render one inside the outline's shadow root, and the hrefs are fragments on the same page. Write the anchors flat, with 'data-level' for their depth, or nested in lists, '<ul><li><a>'. A screen reader hears a nested list's levels; it hears 'data-level' as a flat run of links. The current section is decided by the headings' positions. An 'IntersectionObserver' with a band near the top fails both ways: when headings are far apart, none is in the band and no section is marked, and when they are close together, several are in the band at once. */
12707
13447
  "helix-headless-outline": DefineCustomElement<
12708
13448
  HelixHeadlessOutline,
12709
13449
  HelixHeadlessOutlineVueProps,
@@ -12715,7 +13455,7 @@ export interface WcToolkitVueGlobalComponents {
12715
13455
  HelixHeadlessPaginationVueProps,
12716
13456
  HelixHeadlessPaginationVueEvents
12717
13457
  >;
12718
- /** A separate element that you place beside 'Pagination', like 'Pagination.Summary', so you choose the direction and order of your footer. It uses 'Select', so it matches a table's filter dropdowns in the same footer, both open and closed. The caret is 'Select''s, so it follows 'currentColor', and the label is a real '<label for>' pointing at the trigger's id. The label sits on the same row as the select. 'Select''s host is a column, and an outer-tree rule overrides a ':host' rule, so the row layout needs no property on 'Select' and nothing added to your markup. An empty 'sizes' renders nothing and does not fall back to the built-in list. 'Pagination' does the same with a single page, and both report it through 'ElementInternals.states'. 'value' is the current size, and 'default-value' is the size from the markup. Changing it dispatches 'helix-before-change'. Re-querying and returning to page one is up to you, because only you know whether the current position should be kept. */
13458
+ /** A separate element that you place beside 'Pagination', like 'Pagination.Summary', so you choose the direction and order of your footer. It uses 'Select', so it matches a table's filter dropdowns in the same footer, both open and closed. The caret is 'Select''s, so it follows 'currentColor', and the label is a real '<label for>' pointing at the trigger's id. The label sits on the same row as the select. 'Select''s host is a column, and an outer-tree rule overrides a ':host' rule, so the row layout needs no property on 'Select' and nothing added to your markup. An empty 'sizes' renders nothing and does not fall back to the built-in list. 'Pagination' does the same with a single page, and both report it through 'ElementInternals.states'. 'value' is the current size, and 'default-value' is the size from the markup. Changing it dispatches 'helix-before-change', and then 'input' and 'change' once the size has moved, as a native '<select>' sends them together. Re-querying and returning to page one is up to you, because only you know whether the current position should be kept. */
12719
13459
  "helix-headless-pagination-size": DefineCustomElement<
12720
13460
  HelixHeadlessPaginationSize,
12721
13461
  HelixHeadlessPaginationSizeVueProps,
@@ -12733,7 +13473,7 @@ export interface WcToolkitVueGlobalComponents {
12733
13473
  HelixHeadlessPinInputVueProps,
12734
13474
  HelixHeadlessPinInputVueEvents
12735
13475
  >;
12736
- /** Popover is the general overlay that the specific ones build on. 'Menu' holds commands, 'Select' holds options, and 'Tooltip' holds a description. Popover holds any content you put in it, so it has no keyboard handling of its own. The trigger is slotted and stays your own element. The popover writes nothing onto it, including 'aria-expanded', 'id', and 'tabindex', because changing your markup after upgrade causes a React hydration mismatch. The panel is in the top layer through the popover API, so it needs no 'z-index', and an ancestor with 'overflow: hidden', 'transform', 'filter', or 'contain' does not clip or move it. It opens on click and from a command. 'command="--show"' and the related commands work as they do on 'Dialog' and 'Drawer', so a button anywhere on the page can open the popover with no script. */
13476
+ /** Popover is the general overlay that the specific ones build on. 'Menu' holds commands, 'Select' holds options, and 'Tooltip' holds a description. Popover holds any content you put in it, so it has no keyboard handling of its own. The trigger is slotted and stays your own element. The popover writes nothing onto it, including 'aria-expanded', 'id', and 'tabindex', because changing your markup after upgrade causes a React hydration mismatch. The panel is in the top layer through the popover API, so it needs no 'z-index', and an ancestor with 'overflow: hidden', 'transform', 'filter', or 'contain' does not clip or move it. It opens on click and from a command. 'command="--show"' and the related commands work as they do on 'Dialog' and 'Drawer', so a button anywhere on the page can open the popover with no script. It closes on Escape, on a press outside it, and when focus moves out of the trigger and the panel to somewhere else on the page. It does not trap focus. An 'aria-labelledby' on the host names the panel in place of 'label'. */
12737
13477
  "helix-headless-popover": DefineCustomElement<
12738
13478
  HelixHeadlessPopover,
12739
13479
  HelixHeadlessPopoverVueProps,
@@ -12745,7 +13485,7 @@ export interface WcToolkitVueGlobalComponents {
12745
13485
  HelixHeadlessProgressVueProps,
12746
13486
  HelixHeadlessProgressVueEvents
12747
13487
  >;
12748
- /** The code is drawn as one '<path>'. Runs of adjacent dark modules are joined, so a row of eight is one horizontal move. A code of useful length has about a thousand modules, and an element for each would be a thousand nodes for one image. The element has 'role="img"' and an accessible name. Set the name to what the code is for. When you pass no name, the value is the name. Most codes hold a URL, and a URL read aloud gives the destination. The quiet zone of four modules is required by the specification, and a scanner rejects a code cropped to its edge. It is drawn inside the 'viewBox', so it stays at any size, including a size set in CSS. 'correction' sets how much of the code can be lost. At 'H' a code can lose thirty percent and still scan, so a mark in the center slot is safe. At 'L' the same mark makes the code unscannable. The default is 'M', and 'H' when the 'logo' slot is filled. */
13488
+ /** The code is drawn as one '<path>'. Runs of adjacent dark modules are joined, so a row of eight is one horizontal move. A code of useful length has about a thousand modules, and an element for each would be a thousand nodes for one image. The element has 'role="img"' and an accessible name. Set the name to what the code is for. When you pass no name, the value is the name. Most codes hold a URL, and a URL read aloud gives the destination. The quiet zone of four modules is required by the specification, and a scanner rejects a code cropped to its edge. It is drawn inside the 'viewBox', so it stays at any size, including a size set in CSS. 'correction' sets how much of the code can be lost. At 'H' a code can lose thirty percent and still scan, so a mark in the center slot is safe. At 'L' the same mark makes the code unscannable. The default is 'M', and 'H' when the 'logo' slot is filled. A higher level holds fewer characters, so a value that fits at 'M' can be too long once a logo raises the level to 'H'. A value too long for the level draws no code, and the element fires 'error'. */
12749
13489
  "helix-headless-qr-code": DefineCustomElement<
12750
13490
  HelixHeadlessQrCode,
12751
13491
  HelixHeadlessQrCodeVueProps,
@@ -12787,13 +13527,13 @@ export interface WcToolkitVueGlobalComponents {
12787
13527
  HelixHeadlessScrollAreaVueProps,
12788
13528
  HelixHeadlessScrollAreaVueEvents
12789
13529
  >;
12790
- /** A trigger that opens a 'Listbox'. The list is the same element you can use on its own, with the same keyboard behavior, filtering, and multi-select rules. Select adds a trigger that shows what is chosen, a floating surface, and a place for focus to return to when the list closes. Your options stay in your light DOM and are slotted through into the listbox, so the listbox looks through slots to find them. 'Select' owns the value, passes it down to the listbox, and takes changes back, so the value lives in one place. */
13530
+ /** A trigger that opens a 'Listbox'. The list is the same element you can use on its own, with the same keyboard behavior, filtering, and multi-select rules. Select adds a trigger that shows what is chosen, a floating surface, and a place for focus to return to when the list closes. Your options stay in your light DOM and are slotted through into the listbox, so the listbox looks through slots to find them. 'Select' owns the value, passes it down to the listbox, and takes changes back, so the value lives in one place. In the open list the arrow keys, Home, End, PageUp, PageDown and typed letters move the highlight, and Enter, Space or a click chooses it and closes the list. Tab closes the list and moves on. On the closed trigger, ArrowDown, Enter and Space open the list on the chosen option, ArrowUp opens it on the chosen or last option, Home and End open it on the first or last, and typed letters choose the option whose words start with them, as a native '<select>' does. */
12791
13531
  "helix-headless-select": DefineCustomElement<
12792
13532
  HelixHeadlessSelect,
12793
13533
  HelixHeadlessSelectVueProps,
12794
13534
  HelixHeadlessSelectVueEvents
12795
13535
  >;
12796
- /** Sets 'aria-busy' and a polite live region, so a screen reader announces that the region is loading. Both are set through 'ElementInternals', which writes no attributes. There is no 'shape' property. Whether a placeholder is a line, a block, or a circle is presentation, which belongs to the styled tier. */
13536
+ /** A skeleton is hidden from screen readers unless it has a 'label'. An empty placeholder has nothing to say, and a page of them would be a page of unnamed shapes. Tell a screen reader that a region is loading on the region itself: set 'aria-busy="true"' on it while it loads, and put a 'Loader' or a status message in it. Set 'label' on one skeleton to have it read out by name, such as "Loading profile", when a reader reaches it. The role and the name are set through 'ElementInternals', which writes no attributes. There is no 'shape' property. Whether a placeholder is a line, a block, or a circle is presentation, which belongs to the styled tier. */
12797
13537
  "helix-headless-skeleton": DefineCustomElement<
12798
13538
  HelixHeadlessSkeleton,
12799
13539
  HelixHeadlessSkeletonVueProps,
@@ -12811,7 +13551,7 @@ export interface WcToolkitVueGlobalComponents {
12811
13551
  HelixHeadlessSliderVueProps,
12812
13552
  HelixHeadlessSliderVueEvents
12813
13553
  >;
12814
- /** Takes its numbers from the 'values' attribute. The other charts read a table, but a table behind a small trend line would be read aloud row by row. Set 'values' to the data and 'label' to the one sentence a screen reader announces. This follows the library's rule that a content property is the fallback for its slot, as with 'Tooltip''s 'content' and 'Avatar''s 'name'. Use 'for' when a sparkline has a real table behind it. 'for' wins when both are set. Without a 'label' the sparkline is decorative and 'aria-hidden', for example beside a stat that already says "Sessions, 1,102". With a 'label' it is an image named by that sentence. Place it beside a 'Stat', because a change beside a figure is a second fact, as 'Stat''s own spec says. 'Trend' is composed the same way. The component writes the properties listed below, and the stylesheet that draws the sparkline reads them. Do not set them yourself. They carry numbers the component computes and CSS cannot, so a stylesheet can draw the sparkline without measuring anything. */
13554
+ /** Takes its numbers from the 'values' attribute. The other charts read a table, but a table behind a small trend line would be read aloud row by row. Set 'values' to the data and 'label' to the one sentence a screen reader announces. Use 'for' when a sparkline has a real table behind it. 'for' wins when both are set. Without a 'label' the sparkline is decorative and 'aria-hidden', for example beside a stat that already says "Sessions, 1,102". With a 'label' it is an image named by that sentence. Place it beside a 'Stat', because a change beside a figure is a second fact, as 'Stat''s own spec says. 'Trend' is composed the same way. The component writes the properties listed below, and the stylesheet that draws the sparkline reads them. Do not set them yourself. They carry numbers the component computes and CSS cannot, so a stylesheet can draw the sparkline without measuring anything. */
12815
13555
  "helix-headless-sparkline": DefineCustomElement<
12816
13556
  HelixHeadlessSparkline,
12817
13557
  HelixHeadlessSparklineVueProps,
@@ -12823,13 +13563,13 @@ export interface WcToolkitVueGlobalComponents {
12823
13563
  HelixHeadlessSpeedDialItemVueProps,
12824
13564
  HelixHeadlessSpeedDialItemVueEvents
12825
13565
  >;
12826
- /** A speed dial is a menu. Its items are commands, so it uses 'role="menu"' and 'menuitem', and it is built from the same pieces as 'Menu': - 'KeyboardNavigationController' for the arrow keys - 'PopoverController' for the panel - 'MixinControllerOpen' for open and closed It is a separate component because a speed dial has no submenus, headers, checkable items, or type-ahead. You slot the trigger. The usual floating action button is 'IconButton' with 'shape="circle"' and 'raised'. There is no 'helix-fab', because 'IconButton' already has 'emphasis', 'tone', 'label', and a size. Position the button with 'data-dock' in the base layer. All four arrow keys move through the actions, because a speed dial has no nested levels to reserve the horizontal pair for. This is the default behavior of the keyboard controller. */
13566
+ /** A speed dial is a menu. Its items are commands, so it uses 'role="menu"' and 'menuitem', and it is built from the same pieces as 'Menu': - 'KeyboardNavigationController' for the arrow keys - 'PopoverController' for the panel - 'MixinControllerOpen' for open and closed It is a separate component because a speed dial has no submenus, headers, or checkable items. You slot the trigger. The usual floating action button is 'IconButton' with 'shape="circle"' and 'raised'. There is no 'helix-fab', because 'IconButton' already has 'emphasis', 'tone', 'label', and a size. Position the button with 'data-dock' in the base layer. All four arrow keys move through the actions, because a speed dial has no nested levels to reserve the horizontal pair for. This is the default behavior of the keyboard controller. Typing a letter moves to the next action whose name starts with it. The actions are one tab stop, and Tab closes the dial and moves on. */
12827
13567
  "helix-headless-speed-dial": DefineCustomElement<
12828
13568
  HelixHeadlessSpeedDial,
12829
13569
  HelixHeadlessSpeedDialVueProps,
12830
13570
  HelixHeadlessSpeedDialVueEvents
12831
13571
  >;
12832
- /** A splitter has one axis. Nest splitters to get two axes and three-pane or four-pane layouts. When a splitter is slotted into a pane of another at a right angle, a corner handle appears where the dividers cross. It shows the 'move' cursor, responds to both arrow axes, and a drag moves both dividers at once. The corner is added at 'firstUpdated' and is not in the server markup. Before it appears, both dividers work on their own. The divider has 'role="separator"' and 'aria-valuenow'. Drag it with a pointer or move it with the arrow keys, and press 'Home' or 'End' to move it to its bounds. A drag in progress is tracked as a state, so both dividers a corner moves stay lit for as long as they move. By default, 'min' and 'max' let the divider reach either edge, so you can drag a pane fully closed. Set them to limit the range. A pane can be collapsed, which is a separate state from a divider at the edge. 'collapsed' names the shut pane, 'start' or 'end', and the pane opens back to the position where the collapsing gesture began. A drag records that position on press, and every other way of collapsing records it in 'settle'. 'collapsed-size' keeps a sliver of the pane visible, such as a tab strip. Collapsing overrides 'min' and 'max'. */
13572
+ /** A splitter has one axis. Nest splitters to get two axes and three-pane or four-pane layouts. When a splitter is slotted into a pane of another at a right angle, a corner handle appears where the dividers cross. It shows the 'move' cursor, responds to both arrow axes, and a drag moves both dividers at once. The corner is added at 'firstUpdated' and is not in the server markup. Before it appears, both dividers work on their own. The divider has 'role="separator"' and 'aria-valuenow', and 'aria-controls' names the start pane. Drag it with a pointer or move it with the arrow keys, press 'Home' or 'End' to move it to its bounds, and press 'Enter' to collapse the start pane and open it again. A drag in progress is tracked as a state, so both dividers a corner moves stay lit for as long as they move. By default, 'min' and 'max' let the divider reach either edge, so you can drag a pane fully closed. Set them to limit the range. A pane can be collapsed, which is a separate state from a divider at the edge. 'collapsed' names the shut pane, 'start' or 'end', and the pane opens back to the position where the collapsing gesture began. A drag records that position on press, and every other way of collapsing records it in 'settle'. 'collapsed-size' keeps a sliver of the pane visible, such as a tab strip. Collapsing overrides 'min' and 'max'. */
12833
13573
  "helix-headless-splitter": DefineCustomElement<
12834
13574
  HelixHeadlessSplitter,
12835
13575
  HelixHeadlessSplitterVueProps,
@@ -12865,19 +13605,19 @@ export interface WcToolkitVueGlobalComponents {
12865
13605
  HelixHeadlessSwitchVueProps,
12866
13606
  HelixHeadlessSwitchVueEvents
12867
13607
  >;
12868
- /** Sets its own role, because a grid of elements has no table structure for assistive technology otherwise. 'header' makes the cell a 'columnheader', so a screen reader announces the heading with the value, for example "Attribute, appearance". The role is on the host so the cell stays a child of its row in the flat tree, which keeps the table structure intact. */
13608
+ /** Sets its own role, because a grid of elements has no table structure for assistive technology otherwise. 'header' makes the cell a header, so a screen reader announces it with the values it heads: - In a row that holds a cell without 'header', it is a 'rowheader' and names its row, for example "web-app" in a row of a service's values. - In a row of 'header' cells alone, it is a 'columnheader', which is what a table with no 'TableColumn' heads its columns with. The role is on the host so the cell stays a child of its row in the flat tree, which keeps the table structure intact. */
12869
13609
  "helix-headless-table-cell": DefineCustomElement<
12870
13610
  HelixHeadlessTableCell,
12871
13611
  HelixHeadlessTableCellVueProps,
12872
13612
  HelixHeadlessTableCellVueEvents
12873
13613
  >;
12874
- /** Each column provides both its heading and its grid track. Adding a column adds a track, and removing one removes it. 'Table''s 'columns' is applied one track at a time to the columns declared under it: - A heading name in the list affects only its own column's width. - A list longer or shorter than the columns is trimmed or shared. - A column's own 'width' overrides the track in its place. This protects the table from a track list that contains the headings by mistake, which is invalid CSS that the grid ignores silently, drawing the whole table as one column. Every per-column setting goes on the column, so 'DataTable' needs no column configuration object: - 'field' names the key the cell reads. - 'sortable' lets people sort by the column. - 'text-align' sets which edge the values line up against. - 'cell' takes a function for anything 'field' alone cannot express. The same element works in both 'Table' and 'DataTable'. It is identified by a flag, so the two roots share nothing else. The column 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 below it. 'hidden' takes the column out of the grid, both its heading and its track, so the other columns keep their widths and every row keeps its cells under their headings. 'hidden="until-found"' keeps the track and leaves the heading drawn, as it does on every Helix element. 'DataTable' leaves out the cells under a hidden column. In a 'Table' the cells are markup you wrote, so hide them with the column: a row with more cells than the table has tracks wraps onto the next line. A heading that does something holds a control. A column header is not focusable, so a sortable heading contains a '<button>', which is the pattern for a sortable table and the only way to reach the sort by keyboard. A resizable column has a 'separator' on its end edge, moved by dragging or with the arrow keys. In a table with reorderable columns, each column has a grip that the table moves. */
13614
+ /** Each column provides both its heading and its grid track. Adding a column adds a track, and removing one removes it. 'Table''s 'columns' is applied one track at a time to the columns declared under it: - A heading name in the list affects only its own column's width. - A list longer or shorter than the columns is trimmed or shared. - A column's own 'width' overrides the track in its place. This protects the table from a track list that contains the headings by mistake, which is invalid CSS that the grid ignores silently, drawing the whole table as one column. Every per-column setting goes on the column, so 'DataTable' needs no column configuration object: - 'field' names the key the cell reads. - 'sortable' lets people sort by the column. - 'text-align' sets which edge the values line up against. - 'cell' takes a function for anything 'field' alone cannot express. The same element works in both 'Table' and 'DataTable'. It is identified by a flag, so the two roots share nothing else. The column 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 below it. 'hidden' takes the column out of the grid, both its heading and its track, so the other columns keep their widths and every row keeps its cells under their headings. 'hidden="until-found"' keeps the track and leaves the heading drawn, as it does on every Helix element. 'DataTable' leaves out the cells under a hidden column. In a 'Table' the cells are markup you wrote, so hide them with the column: a row with more cells than the table has tracks wraps onto the next line. A heading that does something holds a control. In a 'Table' a column header is not focusable, so a sortable heading contains a '<button>', which is the pattern for a sortable table and the only way to reach the sort by keyboard. In a 'DataTable' the heading is a cell of the grid, reached with the arrow keys, and its controls with Enter or F2. A resizable column has a 'separator' on its end edge, moved by dragging or with the arrow keys. In a table with reorderable columns, each column has a grip that the table moves. */
12875
13615
  "helix-headless-table-column": DefineCustomElement<
12876
13616
  HelixHeadlessTableColumn,
12877
13617
  HelixHeadlessTableColumnVueProps,
12878
13618
  HelixHeadlessTableColumnVueEvents
12879
13619
  >;
12880
- /** Lays out the rows on a CSS grid, so every column lines up across rows and each row stays a real element that can be styled, hidden, or made interactive. A '<table>' layout aligns columns but limits almost everything else. A grid of elements has no table structure for assistive technology, so the roles are set explicitly: 'table', 'row', 'cell', and 'columnheader'. Rows are 'display: contents', so their cells become items of the one grid. The CSS custom properties listed for this component are written by it and read by the stylesheet that draws it. Do not set them. Each holds a number the component computes and CSS cannot, so the stylesheet can draw the table without measuring anything. */
13620
+ /** Lays out the rows on a CSS grid, so every column lines up across rows and each row stays a real element that can be styled, hidden, or made interactive. A '<table>' layout aligns columns but limits almost everything else. A grid of elements has no table structure for assistive technology, so the roles are set explicitly: 'table', 'row', 'cell', 'columnheader', and 'rowheader' for a 'header' cell in a row of values. Rows are 'display: contents', so their cells become items of the one grid. A column with 'sortable' and a 'field' sorts the rows by the text of its cells, numbers by their value. Your markup is not reordered: the table draws the rows in the sorted order. 'helix-sort' asks first, so you can refuse it and reorder the rows yourself. The CSS custom properties listed for this component are written by it and read by the stylesheet that draws it. Do not set them. Each holds a number the component computes and CSS cannot, so the stylesheet can draw the table without measuring anything. */
12881
13621
  "helix-headless-table": DefineCustomElement<
12882
13622
  HelixHeadlessTable,
12883
13623
  HelixHeadlessTableVueProps,
@@ -12907,7 +13647,7 @@ export interface WcToolkitVueGlobalComponents {
12907
13647
  HelixHeadlessTabVueProps,
12908
13648
  HelixHeadlessTabVueEvents
12909
13649
  >;
12910
- /** A label that people can optionally remove. 'dismissible' is the difference from a badge: a badge shows a state that people cannot change, and a tag names something they can remove. The remove button sends 'helix-dismiss'. The tag does not remove itself, because your code owns the list it is in, so remove it in your handler. A listener can cancel 'helix-dismiss', and 'dismiss()' then returns 'false'. */
13650
+ /** A label that people can optionally remove. 'dismissible' is the difference from a badge: a badge shows a state that people cannot change, and a tag names something they can remove. The remove button sends 'helix-dismiss'. The tag does not remove itself, because your code owns the list it is in, so remove it in your handler. A listener can cancel 'helix-dismiss', and 'dismiss()' then returns 'false'. When the handler removes a tag whose remove button has focus, focus moves to the next tag's remove button, or to the previous one's after the last tag. The remove button is named for its tag, such as "Remove Apple", so a list of buttons says which tag each one removes. Write '{label}' in 'dismiss-label' to put the tag's words somewhere else, such as 'dismiss-label="{label} entfernen"'. */
12911
13651
  "helix-headless-tag": DefineCustomElement<
12912
13652
  HelixHeadlessTag,
12913
13653
  HelixHeadlessTagVueProps,
@@ -12919,7 +13659,7 @@ export interface WcToolkitVueGlobalComponents {
12919
13659
  HelixHeadlessTextareaVueProps,
12920
13660
  HelixHeadlessTextareaVueEvents
12921
13661
  >;
12922
- /** The list is a 'TimePicker', which you can also use on its own, for example in a settings pane. This element adds the field, the overlay, and the form association, the same arrangement Date Input has with 'DatePicker' and Color Input has with 'ColorPicker'. You can type a time or pick one. The list offers times at a step, and the field lets you enter any time, such as '09:07'. The value is always 'HH:mm' on a 24-hour clock, because that is what the form submits, what 'min' and 'max' compare against, and what sorts correctly as a string. While idle, the field shows the time in the user's locale format. Once the caret is in the field, it shows the value itself, because a formatted time such as '2:30 PM' cannot be typed back and 'Intl' has no parser for it. */
13662
+ /** The list is a 'TimePicker', which you can also use on its own, for example in a settings pane. This element adds the field, the overlay, and the form association, the same arrangement Date Input has with 'DatePicker' and Color Input has with 'ColorPicker'. You can type a time or pick one. The list offers times at a step, and the field lets you enter any time, such as '09:07'. The value is always 'HH:mm' on a 24-hour clock, because that is what the form submits, what 'min' and 'max' compare against, and what sorts correctly as a string. While idle, the field shows the time in the user's locale format. Once the caret is in the field, it shows the value itself, because a formatted time such as '2:30 PM' cannot be typed back and 'Intl' has no parser for it. Typing sends 'input' on each keystroke and 'change' when you leave the field. In the list, the arrow keys, typed digits and PageUp and PageDown move through the times, and Enter, Space or a click chooses one and closes the panel. With 'variant="wheels"' each wheel moves the time as you turn it, the panel stays open, and Enter or Escape closes it. */
12923
13663
  "helix-headless-time-input": DefineCustomElement<
12924
13664
  HelixHeadlessTimeInput,
12925
13665
  HelixHeadlessTimeInputVueProps,
@@ -12949,7 +13689,7 @@ export interface WcToolkitVueGlobalComponents {
12949
13689
  HelixHeadlessToastItemVueProps,
12950
13690
  HelixHeadlessToastItemVueEvents
12951
13691
  >;
12952
- /** The region and its items are one family because a live region must be in the document before a message is added to it. Assistive technology often does not announce a region that arrives already holding its message. 'Radio.Group' is part of its family for the same reason. **The region is polite, never assertive.** 'role="alert"' interrupts whatever a screen reader is reading. For something that cannot wait, use a 'Dialog', which stops the page for every user. **The region never creates or removes items.** You render items and remove them. An item requests closing with a cancelable 'helix-dismiss' event. A dismissed item hides itself and stays in the DOM, so your framework's state and the DOM stay in sync. It hides on its own unless you set 'open', which makes the state yours. There is no 'toast.show()'. For a 'toast()' function, write a small one over your app's state, which also lets you render the same messages on the server, in a test, or more than once. */
13692
+ /** The region and its items are one family because a live region must be in the document before a message is added to it. Assistive technology often does not announce a region that arrives already holding its message. 'Radio.Group' is part of its family for the same reason. **The region is polite, never assertive.** 'role="alert"' interrupts whatever a screen reader is reading. For something that cannot wait, use a 'Dialog', which stops the page for every user. **The region never creates or removes items.** You render items and remove them. An item requests closing with a cancelable 'helix-dismiss' event. A dismissed item hides itself and stays in the DOM, so your framework's state and the DOM stay in sync. It hides on its own unless you set 'open', which makes the state yours. There is no 'toast.show()'. For a 'toast()' function, write a small one over your app's state, which also lets you render the same messages on the server, in a test, or more than once. **The stack is in the top layer.** The 'region' part is a 'popover="manual"' shown while a message is showing, and shown again above a modal dialog that opened after it. Position the 'region' part, which is the box in the top layer. While a modal 'Dialog', 'Drawer' or 'Lightbox' is open, the browser makes everything outside it inert, the stack included, so a message stays visible and its actions cannot be pressed. Where the browser has 'ariaNotify', a message that arrives then is announced through it. For a message with an action, render a second region inside the dialog. When a message with focus inside it is dismissed, focus moves to the next message, then the one before it, then back to where it was before it entered the stack. */
12953
13693
  "helix-headless-toast": DefineCustomElement<
12954
13694
  HelixHeadlessToast,
12955
13695
  HelixHeadlessToastVueProps,
@@ -12967,43 +13707,43 @@ export interface WcToolkitVueGlobalComponents {
12967
13707
  HelixHeadlessToggleVueProps,
12968
13708
  HelixHeadlessToggleVueEvents
12969
13709
  >;
12970
- /** A toolbar holds a mix of controls, such as buttons, toggles, and menus. A button group holds one kind, so the two are separate components. The toolbar is one tab stop, and the arrow keys move between its controls, so three toolbars take three presses of Tab to pass. Any element the browser can focus counts as a control, including your own elements. */
13710
+ /** A toolbar holds a mix of controls, such as buttons, toggles, and menus. A button group holds one kind, so the two are separate components. The toolbar is one tab stop, and the arrow keys move between its controls, so three toolbars take three presses of Tab to pass. Any element the browser can focus counts as a control, including your own elements. A child that takes no focus, such as a divider, is skipped. A menu is reached at its trigger. A nested composite, such as a toggle group, is one stop on the toolbar's axis: the toolbar's arrows move past it, and the arrows across the toolbar move inside it. A composite with a 'focusable' property, as Toggle Group has, gives up its own tab stop while the toolbar's is elsewhere, so Tab stops once in the toolbar. A composite without one keeps its own tab stop. */
12971
13711
  "helix-headless-toolbar": DefineCustomElement<
12972
13712
  HelixHeadlessToolbar,
12973
13713
  HelixHeadlessToolbarVueProps,
12974
13714
  HelixHeadlessToolbarVueEvents
12975
13715
  >;
12976
- /** The trigger is slotted and stays your own element. The bubble renders in the top layer through the popover API, so an ancestor with 'overflow: hidden' does not clip it and no 'z-index' is needed. 'FloatingController' positions it and flips it to another side when the preferred side does not fit. Wrapping the trigger is the convenient form. Use it where the trigger already has an accessible name, because the tooltip cannot describe a slotted trigger: an IDREF cannot cross a shadow boundary. To add a description, place the tooltip beside the trigger and name the trigger with 'for': '''html <helix-headless-button id="save" aria-describedby="save-tip">Save</helix-headless-button> <helix-headless-tooltip id="save-tip" for="save" content="Save your work"></helix-headless-tooltip> ''' Write the 'aria-describedby' yourself, pointing at the tooltip host. Setting it at runtime causes a hydration mismatch that React does not fix. With 'for', the tooltip warns once on first open if the attribute is missing. The tooltip shows on hover and on focus. It hides on pointer leave, on blur, on Escape, and when the trigger is activated. */
13716
+ /** The trigger is slotted and stays your own element. The bubble renders in the top layer through the popover API, so an ancestor with 'overflow: hidden' does not clip it and no 'z-index' is needed. 'FloatingController' positions it and flips it to another side when the preferred side does not fit. Wrapping the trigger is the convenient form. Use it where the trigger already has an accessible name, because the tooltip cannot describe a slotted trigger: an IDREF cannot cross a shadow boundary. To add a description, place the tooltip beside the trigger and name the trigger with 'for': '''html <helix-headless-button id="save" aria-describedby="save-tip">Save</helix-headless-button> <helix-headless-tooltip id="save-tip" for="save" content="Save your work"></helix-headless-tooltip> ''' Write the 'aria-describedby' yourself, pointing at the tooltip host. Setting it at runtime causes a hydration mismatch that React does not fix. With 'for', the tooltip warns once on first open if the attribute is missing. The tooltip shows on hover and on focus. It hides on pointer leave, on blur, on Escape, and when the trigger is activated. The pointer can move from the trigger onto the bubble and the bubble stays. Once one tooltip is showing, moving to another trigger shows its tooltip with no 'delay', and the first one hides. The same holds for 300 milliseconds after a tooltip hides. */
12977
13717
  "helix-headless-tooltip": DefineCustomElement<
12978
13718
  HelixHeadlessTooltip,
12979
13719
  HelixHeadlessTooltipVueProps,
12980
13720
  HelixHeadlessTooltipVueEvents
12981
13721
  >;
12982
- /** The root holds the order of the stops: which stop is current, what Next and Back do, and when the tour is finished. Each stop holds its target, and you write all the text. **The spotlight is a shadow.** The scrim is a box the size of the current target with a very large 'box-shadow' spread, and the shadow paints the darkness. A 'clip-path' on a full-screen scrim breaks as soon as an element between the scrim and the viewport is transformed. The root measures the target's position in the browser. Nothing is measured on the server, because a tour starts only on request. */
13722
+ /** The root holds the order of the stops: which stop is current, what Next and Back do, and when the tour is finished. Each stop holds its target, and you write all the text. **The spotlight is a shadow.** The scrim is a box the size of the current target with a very large 'box-shadow' spread, and the shadow paints the darkness. A 'clip-path' on a full-screen scrim breaks as soon as an element between the scrim and the viewport is transformed. The root measures the target's position in the browser. Nothing is measured on the server, because a tour starts only on request. 'open', 'default-open', 'helix-before-open', 'helix-before-close' and 'toggle' work as they do on 'Dialog'. Setting 'open' starts the run, and 'skip()' and 'requestOpen(false)' end it early. **Focus follows the run.** Opening moves focus to the first stop's panel, and moving on from a control in a stop moves it to the next one. Ending the tour puts focus back on the element that had it when the tour opened, unless you have moved it somewhere else on the page. A stop does not trap focus, so you can still 'Tab' out to the element it describes. */
12983
13723
  "helix-headless-tour": DefineCustomElement<
12984
13724
  HelixHeadlessTour,
12985
13725
  HelixHeadlessTourVueProps,
12986
13726
  HelixHeadlessTourVueEvents
12987
13727
  >;
12988
- /** A stop names its target with 'for' and holds the content you put in it. The stop handles three things: - **Placement.** The panel is anchored to the target by the same floating positioning as the other Helix overlays. - **Stacking.** The panel is a popover, so it is in the top layer and shows above dialogs, scrolling regions, and other stacking contexts. - **Visibility.** The stop shows when it is 'current', which the root sets. Put any content in the stop, such as a 'Card', or a heading and a line of text. There are no fixed title or body parts. **The buttons are slot fallback.** With nothing in the 'actions' slot, you get Back, Next, and Skip, already wired. Slot your own 'actions' and drive them with 'next()', 'back()', and 'skip()' on the root. **'for' is an id, as with 'Tooltip'**, so you can point at a target elsewhere on the page from markup. It resolves against the stop's root node, so a stop inside a shadow tree points at a target in that tree. */
13728
+ /** A stop names its target with 'for' and holds the content you put in it. The stop handles three things: - **Placement.** The panel is anchored to the target by the same floating positioning as the other Helix overlays. - **Stacking.** The panel is a popover, so it is in the top layer and shows above dialogs, scrolling regions, and other stacking contexts. - **Visibility.** The stop shows when it is 'current', which the root sets. Put any content in the stop, such as a 'Card', or a heading and a line of text. There are no fixed title or body parts. **The buttons are slot fallback.** With nothing in the 'actions' slot, you get Back, Next, and Skip, already wired. Slot your own 'actions' and drive them with 'next()', 'back()', and 'skip()' on the root. **'for' is an id, as with 'Tooltip'**, so you can point at a target elsewhere on the page from markup. It resolves against the stop's root node, so a stop inside a shadow tree points at a target in that tree. The panel is a 'group', named by the first heading in the stop's content, and only while the stop is shown. 'focus()' moves focus to the panel, which is what the tour does when it opens or moves on. */
12989
13729
  "helix-headless-tour-stop": DefineCustomElement<
12990
13730
  HelixHeadlessTourStop,
12991
13731
  HelixHeadlessTourStopVueProps,
12992
13732
  HelixHeadlessTourStopVueEvents
12993
13733
  >;
12994
- /** 'open' comes from 'MixinControllerOpen', the same state a disclosure holds, so you can respond to a branch opening and control the state yourself. The row renders 'aria-expanded'. Each item is an element because it holds state: whether it is open, selected, and focused. An item is a branch when something is slotted into 'children'. This is detected on the client, so server-rendered markup shows a leaf and the twisty appears on hydration. **'href' makes the whole row a link**, rendered as an '<a>'. Enter, middle click, and the status bar then work anywhere on the row. */
13734
+ /** 'open' comes from 'MixinControllerOpen', the same state a disclosure holds, so you can respond to a branch opening and control the state yourself. The row renders 'aria-expanded'. Each item is an element because it holds state: whether it is open, selected, and focused. An item is a branch when something is slotted into 'children'. This is detected on the client, so server-rendered markup shows a leaf and the twisty appears on hydration. **'href' makes the whole row a link**, rendered as an '<a>'. Enter, middle click, and the status bar then work anywhere on the row. Pressing a branch, or Enter or Space on it, opens or closes it. A branch with a 'value' is chosen as well and sends 'helix-select', unless the tree has 'nesting="heading"', where a branch names the list under it. */
12995
13735
  "helix-headless-tree-item": DefineCustomElement<
12996
13736
  HelixHeadlessTreeItem,
12997
13737
  HelixHeadlessTreeItemVueProps,
12998
13738
  HelixHeadlessTreeItemVueEvents
12999
13739
  >;
13000
- /** The tree is a single tab stop, and arrow keys move focus between items, as the tree pattern requires, so Tab moves past a long sidebar in one press. The tree moves the tab stop to the focused item, so the browser's focus order stays intact. Items are found with 'instanceof', never by tag name, so the headless tier does not depend on the styled one. */
13740
+ /** The tree is a single tab stop, and arrow keys move focus between items, as the tree pattern requires, so Tab moves past a long sidebar in one press. The tree moves the tab stop to the focused item, so the browser's focus order stays intact. Items are found with 'instanceof', never by tag name, so the headless tier does not depend on the styled one. Typing a letter moves to the next visible item whose name starts with it, and '*' opens every branch beside the focused item. */
13001
13741
  "helix-headless-tree": DefineCustomElement<
13002
13742
  HelixHeadlessTree,
13003
13743
  HelixHeadlessTreeVueProps,
13004
13744
  HelixHeadlessTreeVueEvents
13005
13745
  >;
13006
- /** A trend has three parts: a direction of up, down, or neutral, the metric that moved, and a label for the period it moved over. The arrow shows the direction and its color shows whether the change is good. Direction and judgment are separate properties because they are separate facts. 'good' is unset by default, so a trend with no judgment is gray. For churn, latency, error rate, cost, and bounce rate, up is bad. Set the metric's polarity once with 'good', and the component picks the color from the direction. The direction is also written as a word, so a screen reader reads it. The styled tier hides 'part="direction"' visually and keeps it in the accessibility tree. The metric and the label are bare slots. An element that assigned its own slot on connect would add an attribute to its host after upgrade, which the React server markup did not have. */
13746
+ /** A trend has three parts: a direction of up, down, or neutral, the metric that moved, and a label for the period it moved over. The arrow shows the direction and its color shows whether the change is good. Direction and judgment are separate properties because they are separate facts. 'good' is unset by default, so a trend with no judgment is gray. For churn, latency, error rate, cost, and bounce rate, up is bad. Set the metric's polarity once with 'good', and the component picks the color from the direction. The direction is also written as a word, so a screen reader reads it. The styled tier hides 'part="direction"' visually and keeps it in the accessibility tree. The words are properties, 'up-label' through 'worse-label', so a page in another language can set its own. The metric and the label are bare slots. An element that assigned its own slot on connect would add an attribute to its host after upgrade, which the React server markup did not have. */
13007
13747
  "helix-headless-trend": DefineCustomElement<
13008
13748
  HelixHeadlessTrend,
13009
13749
  HelixHeadlessTrendVueProps,
@@ -13033,7 +13773,7 @@ export interface WcToolkitVueGlobalComponents {
13033
13773
  HelixHeadlessVideoVueProps,
13034
13774
  HelixHeadlessVideoVueEvents
13035
13775
  >;
13036
- /** The items arrive as data: - 'for' names a '<script type="application/json">' that holds an array of objects. - A '<template>' child defines one row. Elements with 'data-field="name"' are filled with that field of the item. Both are markup. React hydration skips every property it would have to set imperatively, so an 'items' property would be lost, and light-DOM children would all exist before anything could window them. The JSON text is one node whatever the row count. For assistive technology the list exposes the rendered window with 'aria-setsize'. Charts that use the same 'for="<id>"' shape render an accessible '<table>', and ten thousand rows in one is the cost this component avoids. The viewport scrolls on this tier. It carries 'data-scroller', and 'core' ships '[data-scroller] { overflow: auto }' into every shadow root, so 'scrollTop' works with no stylesheet. You still need to set a block size. */
13776
+ /** The items arrive as data: - 'for' names a '<script type="application/json">' that holds an array of objects. - A '<template>' child defines one row. Elements with 'data-field="name"' are filled with that field of the item. Both are markup. React hydration skips every property it would have to set imperatively, so an 'items' property would be lost, and light-DOM children would all exist before anything could window them. The JSON text is one node whatever the row count. For assistive technology the list exposes the rendered window with 'aria-setsize'. Charts that use the same 'for="<id>"' shape render an accessible '<table>', and ten thousand rows in one is the cost this component avoids. The list follows the source: editing the script's text, or replacing the script under the same id, draws the new rows. A row that stays in view keeps its element as the list scrolls, and the row holding focus stays drawn when it scrolls out, so a link or a button in a row keeps focus. The viewport scrolls on this tier. It carries 'data-scroller', and 'core' ships '[data-scroller] { overflow: auto }' into every shadow root, so 'scrollTop' works with no stylesheet. You still need to set a block size. */
13037
13777
  "helix-headless-virtual-list": DefineCustomElement<
13038
13778
  HelixHeadlessVirtualList,
13039
13779
  HelixHeadlessVirtualListVueProps,