@fusion.dev/helix-headless 0.148.0 → 0.149.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 (240) hide show
  1. package/custom-elements.json +6966 -1798
  2. package/dist/announcement/root/announcement-root.d.ts +5 -0
  3. package/dist/announcement/root/announcement-root.js +5 -2
  4. package/dist/area-chart/root/area-chart-root.d.ts +11 -0
  5. package/dist/area-chart/root/area-chart-root.js +20 -7
  6. package/dist/avatar/group/avatar-group.d.ts +10 -2
  7. package/dist/avatar/group/avatar-group.js +10 -5
  8. package/dist/badge/count.d.ts +6 -1
  9. package/dist/badge/count.js +3 -3
  10. package/dist/badge/root/badge-root.d.ts +6 -2
  11. package/dist/badge/root/badge-root.js +3 -3
  12. package/dist/bar-chart/root/bar-chart-root.d.ts +13 -1
  13. package/dist/bar-chart/root/bar-chart-root.js +17 -4
  14. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +8 -1
  15. package/dist/breadcrumbs/root/breadcrumbs-root.js +5 -2
  16. package/dist/button/root/button-root.d.ts +10 -1
  17. package/dist/button/root/button-root.js +3 -2
  18. package/dist/button-group/root/button-group-root.d.ts +3 -0
  19. package/dist/button-group/root/button-group-root.js +2 -2
  20. package/dist/callout/root/callout-root.d.ts +16 -2
  21. package/dist/callout/root/callout-root.js +16 -4
  22. package/dist/canvas/describe.d.ts +10 -0
  23. package/dist/canvas/describe.js +9 -0
  24. package/dist/canvas/neighbor.d.ts +17 -0
  25. package/dist/canvas/neighbor.js +1 -0
  26. package/dist/canvas/node/canvas-node.js +3 -2
  27. package/dist/canvas/root/canvas-root.d.ts +65 -8
  28. package/dist/canvas/root/canvas-root.js +115 -49
  29. package/dist/carousel/root/carousel-root.d.ts +5 -0
  30. package/dist/carousel/root/carousel-root.js +16 -5
  31. package/dist/chat/composer/chat-composer.d.ts +5 -0
  32. package/dist/chat/composer/chat-composer.js +4 -1
  33. package/dist/chat/message/chat-message.d.ts +9 -5
  34. package/dist/chat/message/chat-message.js +8 -4
  35. package/dist/chat/naming.js +2 -2
  36. package/dist/chat/root/chat-root.d.ts +27 -1
  37. package/dist/chat/root/chat-root.js +37 -9
  38. package/dist/checkbox/root/checkbox-root.d.ts +11 -0
  39. package/dist/checkbox/root/checkbox-root.js +8 -2
  40. package/dist/checkbox-group/root/checkbox-group-root.d.ts +11 -0
  41. package/dist/checkbox-group/root/checkbox-group-root.js +11 -3
  42. package/dist/code-block/root/code-block-root.d.ts +12 -2
  43. package/dist/code-block/root/code-block-root.js +12 -2
  44. package/dist/color-input/root/color-input-root.d.ts +13 -0
  45. package/dist/color-input/root/color-input-root.js +18 -5
  46. package/dist/color-picker/root/color-picker-root.d.ts +19 -3
  47. package/dist/color-picker/root/color-picker-root.js +47 -13
  48. package/dist/combobox/root/combobox-root.d.ts +36 -7
  49. package/dist/combobox/root/combobox-root.js +37 -12
  50. package/dist/command/root/command-root.d.ts +15 -6
  51. package/dist/command/root/command-root.js +9 -4
  52. package/dist/copy-button/root/copy-button-root.d.ts +5 -0
  53. package/dist/copy-button/root/copy-button-root.js +7 -2
  54. package/dist/data-table/root/data-table-root.d.ts +171 -29
  55. package/dist/data-table/root/data-table-root.js +268 -118
  56. package/dist/date-input/root/date-input-root.d.ts +32 -9
  57. package/dist/date-input/root/date-input-root.js +66 -44
  58. package/dist/date-picker/root/date-picker-root.d.ts +38 -15
  59. package/dist/date-picker/root/date-picker-root.js +52 -33
  60. package/dist/dialog/root/dialog-root.d.ts +12 -1
  61. package/dist/dialog/root/dialog-root.js +11 -4
  62. package/dist/donut-chart/root/donut-chart-root.d.ts +5 -0
  63. package/dist/donut-chart/root/donut-chart-root.js +8 -5
  64. package/dist/drawer/root/drawer-root.d.ts +12 -1
  65. package/dist/drawer/root/drawer-root.js +9 -2
  66. package/dist/drilldown/root/drilldown-root.d.ts +5 -0
  67. package/dist/drilldown/root/drilldown-root.js +4 -1
  68. package/dist/element-events.generated.js +25 -3
  69. package/dist/file-input/root/file-input-root.d.ts +18 -3
  70. package/dist/file-input/root/file-input-root.js +34 -17
  71. package/dist/filter-input/chip/filter-chip.d.ts +13 -0
  72. package/dist/filter-input/chip/filter-chip.js +6 -1
  73. package/dist/filter-input/menu/filter-menu.d.ts +5 -0
  74. package/dist/filter-input/menu/filter-menu.js +3 -1
  75. package/dist/filter-input/root/filter-input-root.d.ts +20 -3
  76. package/dist/filter-input/root/filter-input-root.js +8 -4
  77. package/dist/format-date/root/format-date-root.d.ts +20 -2
  78. package/dist/format-date/root/format-date-root.js +5 -2
  79. package/dist/graph/root/graph-model.d.ts +11 -0
  80. package/dist/graph/root/graph-model.js +4 -0
  81. package/dist/graph/root/graph-root.d.ts +78 -9
  82. package/dist/graph/root/graph-root.js +124 -27
  83. package/dist/heatmap/root/heatmap-root.d.ts +25 -4
  84. package/dist/heatmap/root/heatmap-root.js +27 -7
  85. package/dist/icon-button/root/icon-button-root.d.ts +5 -0
  86. package/dist/icon-button/root/icon-button-root.js +1 -0
  87. package/dist/input/root/input-root.d.ts +5 -0
  88. package/dist/input/root/input-root.js +4 -1
  89. package/dist/lightbox/root/lightbox-root.d.ts +14 -4
  90. package/dist/lightbox/root/lightbox-root.js +25 -7
  91. package/dist/line-chart/root/line-chart-root.d.ts +5 -0
  92. package/dist/line-chart/root/line-chart-root.js +4 -2
  93. package/dist/list/item/list-item.d.ts +32 -0
  94. package/dist/list/item/list-item.js +34 -7
  95. package/dist/list/root/list-root.d.ts +87 -0
  96. package/dist/list/root/list-root.js +112 -2
  97. package/dist/listbox/reorder/index.d.ts +1 -0
  98. package/dist/listbox/reorder/index.js +4 -0
  99. package/dist/listbox/reorder/listbox-reorder.d.ts +83 -0
  100. package/dist/listbox/reorder/listbox-reorder.js +151 -0
  101. package/dist/listbox/root/listbox-root.d.ts +68 -11
  102. package/dist/listbox/root/listbox-root.js +41 -9
  103. package/dist/loader/root/loader-root.d.ts +5 -0
  104. package/dist/loader/root/loader-root.js +3 -1
  105. package/dist/map/area/map-area.d.ts +5 -0
  106. package/dist/map/area/map-area.js +3 -1
  107. package/dist/map/buildings/map-buildings.d.ts +5 -0
  108. package/dist/map/buildings/map-buildings.js +3 -1
  109. package/dist/map/contours/map-contours.d.ts +5 -0
  110. package/dist/map/contours/map-contours.js +3 -1
  111. package/dist/map/landcover/map-landcover.d.ts +5 -0
  112. package/dist/map/landcover/map-landcover.js +3 -1
  113. package/dist/map/marker/map-marker.d.ts +16 -1
  114. package/dist/map/marker/map-marker.js +13 -5
  115. package/dist/map/points/map-points.d.ts +5 -0
  116. package/dist/map/points/map-points.js +6 -4
  117. package/dist/map/position/map-position.d.ts +5 -0
  118. package/dist/map/position/map-position.js +3 -1
  119. package/dist/map/raster/map-raster.d.ts +5 -0
  120. package/dist/map/raster/map-raster.js +3 -1
  121. package/dist/map/root/map-root.d.ts +33 -14
  122. package/dist/map/root/map-root.js +59 -22
  123. package/dist/map/route/map-route.d.ts +5 -0
  124. package/dist/map/route/map-route.js +3 -1
  125. package/dist/map/terrain/map-terrain.d.ts +5 -0
  126. package/dist/map/terrain/map-terrain.js +3 -1
  127. package/dist/menu/root/menu-root.d.ts +5 -0
  128. package/dist/menu/root/menu-root.js +3 -1
  129. package/dist/meter/root/meter-root.d.ts +16 -3
  130. package/dist/meter/root/meter-root.js +12 -5
  131. package/dist/navigation/root/navigation-root.d.ts +5 -0
  132. package/dist/navigation/root/navigation-root.js +3 -1
  133. package/dist/notifications/notification/notification.d.ts +5 -0
  134. package/dist/notifications/notification/notification.js +3 -1
  135. package/dist/notifications/root/notifications-root.d.ts +8 -0
  136. package/dist/notifications/root/notifications-root.js +10 -2
  137. package/dist/number-input/root/number-input-root.d.ts +21 -8
  138. package/dist/number-input/root/number-input-root.js +26 -11
  139. package/dist/object-inspector/root/object-inspector-root.d.ts +51 -12
  140. package/dist/object-inspector/root/object-inspector-root.js +21 -20
  141. package/dist/outline/root/outline-root.d.ts +5 -0
  142. package/dist/outline/root/outline-root.js +3 -1
  143. package/dist/pagination/root/pagination-root.d.ts +7 -1
  144. package/dist/pagination/root/pagination-root.js +16 -7
  145. package/dist/pagination/size/pagination-size.d.ts +7 -3
  146. package/dist/pagination/size/pagination-size.js +4 -2
  147. package/dist/pagination/summary/pagination-summary.d.ts +8 -6
  148. package/dist/pagination/summary/pagination-summary.js +4 -9
  149. package/dist/pin-input/code.d.ts +6 -6
  150. package/dist/pin-input/code.js +1 -5
  151. package/dist/pin-input/root/pin-input-root.d.ts +9 -3
  152. package/dist/pin-input/root/pin-input-root.js +6 -2
  153. package/dist/popover/root/popover-root.d.ts +12 -2
  154. package/dist/popover/root/popover-root.js +10 -4
  155. package/dist/progress/root/progress-root.d.ts +7 -2
  156. package/dist/progress/root/progress-root.js +5 -2
  157. package/dist/qr-code/name.d.ts +3 -2
  158. package/dist/qr-code/name.js +2 -2
  159. package/dist/qr-code/root/qr-code-root.d.ts +12 -2
  160. package/dist/qr-code/root/qr-code-root.js +9 -2
  161. package/dist/radio/group/radio-group.d.ts +11 -0
  162. package/dist/radio/group/radio-group.js +8 -2
  163. package/dist/rating/root/rating-root.d.ts +12 -1
  164. package/dist/rating/root/rating-root.js +10 -3
  165. package/dist/scatter-chart/root/scatter-chart-root.d.ts +20 -2
  166. package/dist/scatter-chart/root/scatter-chart-root.js +20 -5
  167. package/dist/select/root/select-root.d.ts +11 -0
  168. package/dist/select/root/select-root.js +13 -3
  169. package/dist/skip-link/root/skip-link-root.d.ts +5 -0
  170. package/dist/skip-link/root/skip-link-root.js +3 -1
  171. package/dist/slider/root/slider-root.d.ts +7 -2
  172. package/dist/slider/root/slider-root.js +11 -5
  173. package/dist/sparkline/readings.d.ts +15 -5
  174. package/dist/sparkline/readings.js +3 -3
  175. package/dist/sparkline/root/sparkline-root.d.ts +9 -4
  176. package/dist/sparkline/root/sparkline-root.js +9 -3
  177. package/dist/speed-dial/root/speed-dial-root.d.ts +5 -0
  178. package/dist/speed-dial/root/speed-dial-root.js +4 -1
  179. package/dist/splitter/root/splitter-root.d.ts +6 -1
  180. package/dist/splitter/root/splitter-root.js +9 -4
  181. package/dist/steps/root/steps-root.d.ts +9 -2
  182. package/dist/steps/root/steps-root.js +6 -3
  183. package/dist/steps/step/step.d.ts +12 -0
  184. package/dist/steps/step/step.js +11 -2
  185. package/dist/switch/root/switch-root.d.ts +11 -0
  186. package/dist/switch/root/switch-root.js +8 -2
  187. package/dist/table/column/table-column.d.ts +11 -4
  188. package/dist/table/column/table-column.js +15 -10
  189. package/dist/table/grid-controller.d.ts +8 -3
  190. package/dist/table/grid-controller.js +17 -11
  191. package/dist/table/root/table-root.d.ts +107 -5
  192. package/dist/table/root/table-root.js +122 -20
  193. package/dist/table/row/table-row.d.ts +42 -0
  194. package/dist/table/row/table-row.js +40 -1
  195. package/dist/tabs/root/tabs-root.d.ts +5 -0
  196. package/dist/tabs/root/tabs-root.js +3 -1
  197. package/dist/tag/group/tag-group.d.ts +5 -0
  198. package/dist/tag/group/tag-group.js +3 -1
  199. package/dist/tag/root/tag-root.d.ts +14 -1
  200. package/dist/tag/root/tag-root.js +11 -8
  201. package/dist/textarea/root/textarea-root.d.ts +5 -0
  202. package/dist/textarea/root/textarea-root.js +3 -1
  203. package/dist/time-input/root/time-input-root.d.ts +14 -7
  204. package/dist/time-input/root/time-input-root.js +43 -32
  205. package/dist/time-picker/root/time-picker-root.d.ts +15 -7
  206. package/dist/time-picker/root/time-picker-root.js +25 -12
  207. package/dist/toast/item/toast-item.d.ts +7 -0
  208. package/dist/toast/item/toast-item.js +1 -0
  209. package/dist/toast/root/toast-root.d.ts +9 -1
  210. package/dist/toast/root/toast-root.js +5 -4
  211. package/dist/toolbar/root/toolbar-root.d.ts +5 -0
  212. package/dist/toolbar/root/toolbar-root.js +5 -2
  213. package/dist/tooltip/root/tooltip-root.d.ts +27 -17
  214. package/dist/tour/root/tour-root.d.ts +8 -2
  215. package/dist/tour/root/tour-root.js +4 -2
  216. package/dist/tour/stop/tour-stop.d.ts +5 -0
  217. package/dist/tour/stop/tour-stop.js +6 -1
  218. package/dist/tree/grip.d.ts +5 -0
  219. package/dist/tree/grip.js +1 -0
  220. package/dist/tree/item/tree-item.d.ts +24 -0
  221. package/dist/tree/item/tree-item.js +27 -5
  222. package/dist/tree/root/tree-root.d.ts +66 -1
  223. package/dist/tree/root/tree-root.js +77 -5
  224. package/dist/trend/root/trend-root.d.ts +20 -4
  225. package/dist/trend/root/trend-root.js +20 -5
  226. package/dist/video/root/video-root.d.ts +12 -3
  227. package/dist/video/root/video-root.js +41 -14
  228. package/dist/video-playlist/menu/video-playlist-menu.d.ts +5 -0
  229. package/dist/video-playlist/menu/video-playlist-menu.js +3 -1
  230. package/dist/video-playlist/root/video-playlist-root.d.ts +5 -0
  231. package/dist/video-playlist/root/video-playlist-root.js +3 -1
  232. package/dist/virtual-list/root/virtual-list-root.d.ts +19 -3
  233. package/dist/virtual-list/root/virtual-list-root.js +5 -2
  234. package/lint.json +1 -1
  235. package/package.json +7 -6
  236. package/types/jsx.d.ts +4014 -1862
  237. package/types/vue.d.ts +1266 -624
  238. package/types/words.d.ts +3280 -0
  239. package/dist/toast/hotkey.d.ts +0 -22
  240. package/dist/toast/hotkey.js +0 -23
package/types/vue.d.ts CHANGED
@@ -204,6 +204,7 @@ import type {
204
204
  HelixFilterEvent,
205
205
  HelixLoadMoreEvent,
206
206
  HelixCopyErrorEvent,
207
+ HelixBeforeReorderEvent,
207
208
  HelixExpandEvent,
208
209
  HelixFilteredEvent,
209
210
  HelixNavigateEvent,
@@ -498,14 +499,22 @@ axes, which is the test the registry answers to. */
498
499
  `attribute` is spelled out because Lit lowercases a property name to
499
500
  derive one rather than dash-casing it, so this would otherwise be
500
501
  reachable only as `dismisslabel`, which nobody would guess and no linter
501
- would catch. */
502
+ would catch.
503
+
504
+ A word property: register it for a locale under the host's key. A family
505
+ that names the control otherwise, such as Tag's `Remove {label}`,
506
+ declares its own English with `@words` above the override. */
502
507
  "dismiss-label"?: (HelixHeadlessAnnouncement["dismissLabel"]) | undefined;
503
508
  /** The dismiss control's label, read by screen readers.
504
509
 
505
510
  `attribute` is spelled out because Lit lowercases a property name to
506
511
  derive one rather than dash-casing it, so this would otherwise be
507
512
  reachable only as `dismisslabel`, which nobody would guess and no linter
508
- would catch. */
513
+ would catch.
514
+
515
+ A word property: register it for a locale under the host's key. A family
516
+ that names the control otherwise, such as Tag's `Remove {label}`,
517
+ declares its own English with `@words` above the override. */
509
518
  dismissLabel?: (HelixHeadlessAnnouncement["dismissLabel"]) | undefined;
510
519
  };
511
520
 
@@ -600,6 +609,14 @@ the total.
600
609
  Absent stacks the amounts, so the top edge is the total. Set, every reading
601
610
  fills the height and the bands are shares of it. */
602
611
  share?: (HelixHeadlessAreaChart["share"]) | undefined;
612
+ /** The summary's sentence. `{reading}` is the latest reading's name,
613
+ `{totalLabel}` the name for the sum, `{total}` the sum, written in the
614
+ locale, and `{shares}` each part's share, listed as the locale lists. */
615
+ "summary-label"?: (HelixHeadlessAreaChart["summaryLabel"]) | undefined;
616
+ /** The summary's sentence. `{reading}` is the latest reading's name,
617
+ `{totalLabel}` the name for the sum, `{total}` the sum, written in the
618
+ locale, and `{shares}` each part's share, listed as the locale lists. */
619
+ summaryLabel?: (HelixHeadlessAreaChart["summaryLabel"]) | undefined;
603
620
  /** The name for the sum of the parts, shown in the tooltip and the summary. */
604
621
  "total-label"?: (HelixHeadlessAreaChart["totalLabel"]) | undefined;
605
622
  /** The name for the sum of the parts, shown in the tooltip and the summary. */
@@ -621,8 +638,8 @@ words and is already written. */
621
638
  /** The locale the chart's own numbers are written in: its axis, its
622
639
  percentages and its totals, such as `de` for `1.240` and `32 %`.
623
640
 
624
- Absent uses the runtime's own. The table's cells are shown as the table
625
- writes them, whatever this says. */
641
+ Absent reads the nearest `lang`, then the runtime's own. The table's
642
+ cells are shown as the table writes them, whatever this says. */
626
643
  locale?: (HelixHeadlessAreaChart["locale"]) | undefined;
627
644
  /** Where a reading the keys moved to stands among the readings, said after
628
645
  it. `{position}` and `{count}` are replaced with the numbers, written in
@@ -664,14 +681,20 @@ everyone, assigning a matching property rather than an attribute.
664
681
  takes no default**: `max = 0` would stamp `max="0"` onto every host that
665
682
  never asked for a limit, including on the server. */
666
683
  max?: (HelixHeadlessAvatarGroup["max"]) | undefined;
667
- /** What a screen reader is told the count is, with `{count}` for the number
668
- and `{names}` for the people it stands for, by each avatar's `name`.
684
+ /** What a screen reader is told the count is, with `{count}` for the number,
685
+ written in the locale, and `{names}` for the people it stands for, by each
686
+ avatar's `name`, listed as the locale lists. A language that needs plural
687
+ forms writes them: `{count, plural, one {# osoba więcej: {names}} few
688
+ {# osoby więcej: {names}} other {# osób więcej: {names}}}`.
669
689
 
670
690
  The count shows "+3", which reads as "plus three" and says nothing about
671
691
  what was counted, nor who. */
672
692
  "overflow-label"?: (HelixHeadlessAvatarGroup["overflowLabel"]) | undefined;
673
- /** What a screen reader is told the count is, with `{count}` for the number
674
- and `{names}` for the people it stands for, by each avatar's `name`.
693
+ /** What a screen reader is told the count is, with `{count}` for the number,
694
+ written in the locale, and `{names}` for the people it stands for, by each
695
+ avatar's `name`, listed as the locale lists. A language that needs plural
696
+ forms writes them: `{count, plural, one {# osoba więcej: {names}} few
697
+ {# osoby więcej: {names}} other {# osób więcej: {names}}}`.
675
698
 
676
699
  The count shows "+3", which reads as "plus three" and says nothing about
677
700
  what was counted, nor who. */
@@ -763,11 +786,15 @@ shown as it is either way. */
763
786
 
764
787
  Required for a dot, which has no text to read. `{count}` is replaced with
765
788
  what the badge shows, so `label="{count} unread"` reads "8 unread" and
766
- stays current as `value` changes, with no label of yours to keep in step. */
789
+ stays current as `value` changes, with no label of yours to keep in step.
790
+ A language with plural forms writes them, `{count, plural, one {{count}
791
+ nieprzeczytana} few {{count} nieprzeczytane} other {{count}
792
+ nieprzeczytanych}}`, picked by the count in `locale`. */
767
793
  label?: (HelixHeadlessBadge["label"]) | undefined;
768
- /** The locale a count is written in under `format-options`, such as `de`.
794
+ /** The locale a count is written in under `format-options`, and whose plural
795
+ rules `label` picks a form by, such as `de`.
769
796
 
770
- Absent uses the runtime's own. */
797
+ Absent reads the nearest `lang`, then the runtime's own. */
771
798
  locale?: (HelixHeadlessBadge["locale"]) | undefined;
772
799
  /** The largest number the badge shows.
773
800
 
@@ -811,9 +838,11 @@ of many thin bars, where the eye has stopped counting.
811
838
  Furniture rather than data, so the rules are inside the `aria-hidden` plot
812
839
  and reach no reader through the table. */
813
840
  gridlines?: (HelixHeadlessBarChart["gridlines"]) | undefined;
814
- /** The word the summary puts before each series' highest reading. */
841
+ /** The name the summary gives each series' highest reading, `{highestLabel}`
842
+ in `summary-label`. */
815
843
  "highest-label"?: (HelixHeadlessBarChart["highestLabel"]) | undefined;
816
- /** The word the summary puts before each series' highest reading. */
844
+ /** The name the summary gives each series' highest reading, `{highestLabel}`
845
+ in `summary-label`. */
817
846
  highestLabel?: (HelixHeadlessBarChart["highestLabel"]) | undefined;
818
847
  /** The names of the series to draw as lines. The other series are drawn as
819
848
  columns.
@@ -891,6 +920,14 @@ the other. The scale fits the stacks. A series
891
920
  in `lines` is still a line, measured on its own reading; columns on the
892
921
  second scale stack among themselves. */
893
922
  stacked?: (HelixHeadlessBarChart["stacked"]) | undefined;
923
+ /** The summary's sentence. `{highestLabel}` is `highest-label`, and
924
+ `{readings}` each series' highest reading: the series, the category and
925
+ the reading as the table writes it. */
926
+ "summary-label"?: (HelixHeadlessBarChart["summaryLabel"]) | undefined;
927
+ /** The summary's sentence. `{highestLabel}` is `highest-label`, and
928
+ `{readings}` each series' highest reading: the series, the category and
929
+ the reading as the table writes it. */
930
+ summaryLabel?: (HelixHeadlessBarChart["summaryLabel"]) | undefined;
894
931
  /** The id of the table to read.
895
932
 
896
933
  Names a table in the same tree, so a chart inside another component's
@@ -908,8 +945,8 @@ words and is already written. */
908
945
  /** The locale the chart's own numbers are written in: its axis, its
909
946
  percentages and its totals, such as `de` for `1.240` and `32 %`.
910
947
 
911
- Absent uses the runtime's own. The table's cells are shown as the table
912
- writes them, whatever this says. */
948
+ Absent reads the nearest `lang`, then the runtime's own. The table's
949
+ cells are shown as the table writes them, whatever this says. */
913
950
  locale?: (HelixHeadlessBarChart["locale"]) | undefined;
914
951
  /** Where a reading the keys moved to stands among the readings, said after
915
952
  it. `{position}` and `{count}` are replaced with the numbers, written in
@@ -982,10 +1019,14 @@ export type HelixHeadlessBreadcrumbVueEvents = {};
982
1019
 
983
1020
  export type HelixHeadlessBreadcrumbsVueProps = {
984
1021
  /** The name of the button that shows a folded trail's hidden crumbs. `{count}`
985
- is replaced by how many it shows. Translate it with the page. */
1022
+ is how many it shows, written in the locale, and a language with plural
1023
+ forms writes them: `{count, plural, one {# weiteren zeigen} other {#
1024
+ weitere zeigen}}`. */
986
1025
  "expand-label"?: (HelixHeadlessBreadcrumbs["expandLabel"]) | undefined;
987
1026
  /** The name of the button that shows a folded trail's hidden crumbs. `{count}`
988
- is replaced by how many it shows. Translate it with the page. */
1027
+ is how many it shows, written in the locale, and a language with plural
1028
+ forms writes them: `{count, plural, one {# weiteren zeigen} other {#
1029
+ weitere zeigen}}`. */
989
1030
  expandLabel?: (HelixHeadlessBreadcrumbs["expandLabel"]) | undefined;
990
1031
  /** The landmark's name, read by screen readers. An `aria-label` on the host
991
1032
  wins over it. */
@@ -1139,7 +1180,11 @@ not text.
1139
1180
 
1140
1181
  Lives here rather than only on `IconButton` so the two share one render.
1141
1182
  An icon-only button without it is a control a screen reader announces as
1142
- "button" and nothing else. */
1183
+ "button" and nothing else.
1184
+
1185
+ Undefaulted, so a subclass's own default, such as Copy Button's `Copy`, is
1186
+ the first value its element receives and so the English its words fall
1187
+ back to. */
1143
1188
  label?: (HelixHeadlessButton["label"]) | undefined;
1144
1189
  /** Whether the action the button started is still running.
1145
1190
 
@@ -1275,14 +1320,28 @@ is the whole of the registry, which is why there is no `severity` beside it. */
1275
1320
  tone?: (HelixHeadlessCallout["tone"]) | undefined;
1276
1321
  /** What a screen reader is told the tone is, such as "Fehler".
1277
1322
 
1278
- Absent is the English for the tone: "Error", "Information", "Note",
1279
- "Success" or "Warning". */
1323
+ Absent is the tone's words in `tone-labels`, "Error", "Information",
1324
+ "Note", "Success" or "Warning" in English. */
1280
1325
  "tone-label"?: (HelixHeadlessCallout["toneLabel"]) | undefined;
1281
1326
  /** What a screen reader is told the tone is, such as "Fehler".
1282
1327
 
1283
- Absent is the English for the tone: "Error", "Information", "Note",
1284
- "Success" or "Warning". */
1328
+ Absent is the tone's words in `tone-labels`, "Error", "Information",
1329
+ "Note", "Success" or "Warning" in English. */
1285
1330
  toneLabel?: (HelixHeadlessCallout["toneLabel"]) | undefined;
1331
+ /** What a screen reader is told each tone is, by the tone's name, written as
1332
+ JSON in the attribute: `tone-labels='{"danger":"Fehler"}'`. A tone left
1333
+ out keeps its English, and `tone-label` wins over both.
1334
+
1335
+ `danger` is said as "Error", the word a reader understands, and
1336
+ `neutral` as "Note", for what the passage is. */
1337
+ "tone-labels"?: (HelixHeadlessCallout["toneLabels"]) | undefined;
1338
+ /** What a screen reader is told each tone is, by the tone's name, written as
1339
+ JSON in the attribute: `tone-labels='{"danger":"Fehler"}'`. A tone left
1340
+ out keeps its English, and `tone-label` wins over both.
1341
+
1342
+ `danger` is said as "Error", the word a reader understands, and
1343
+ `neutral` as "Note", for what the passage is. */
1344
+ toneLabels?: (HelixHeadlessCallout["toneLabels"]) | undefined;
1286
1345
  /** Whether the element shows a control that dismisses it. */
1287
1346
  dismissible?: (HelixHeadlessCallout["dismissible"]) | undefined;
1288
1347
  /** The dismiss control's label, read by screen readers.
@@ -1290,14 +1349,22 @@ Absent is the English for the tone: "Error", "Information", "Note",
1290
1349
  `attribute` is spelled out because Lit lowercases a property name to
1291
1350
  derive one rather than dash-casing it, so this would otherwise be
1292
1351
  reachable only as `dismisslabel`, which nobody would guess and no linter
1293
- would catch. */
1352
+ would catch.
1353
+
1354
+ A word property: register it for a locale under the host's key. A family
1355
+ that names the control otherwise, such as Tag's `Remove {label}`,
1356
+ declares its own English with `@words` above the override. */
1294
1357
  "dismiss-label"?: (HelixHeadlessCallout["dismissLabel"]) | undefined;
1295
1358
  /** The dismiss control's label, read by screen readers.
1296
1359
 
1297
1360
  `attribute` is spelled out because Lit lowercases a property name to
1298
1361
  derive one rather than dash-casing it, so this would otherwise be
1299
1362
  reachable only as `dismisslabel`, which nobody would guess and no linter
1300
- would catch. */
1363
+ would catch.
1364
+
1365
+ A word property: register it for a locale under the host's key. A family
1366
+ that names the control otherwise, such as Tag's `Remove {label}`,
1367
+ declares its own English with `@words` above the override. */
1301
1368
  dismissLabel?: (HelixHeadlessCallout["dismissLabel"]) | undefined;
1302
1369
  };
1303
1370
 
@@ -1497,6 +1564,12 @@ export type HelixHeadlessCanvasHelixSelectElementEvent =
1497
1564
  HelixHeadlessCanvasElementEvent<HelixSelectEvent>;
1498
1565
 
1499
1566
  export type HelixHeadlessCanvasVueProps = {
1567
+ /** The hint shown when the board, waiting to be pressed with
1568
+ `gestures="activate"`, is scrolled or swiped over. */
1569
+ "activate-hint-label"?: (HelixHeadlessCanvas["activateHintLabel"]) | undefined;
1570
+ /** The hint shown when the board, waiting to be pressed with
1571
+ `gestures="activate"`, is scrolled or swiped over. */
1572
+ activateHintLabel?: (HelixHeadlessCanvas["activateHintLabel"]) | undefined;
1500
1573
  /** The text read with a card to say where its connections come from, with `{cards}`. */
1501
1574
  "comes-from-label"?: (HelixHeadlessCanvas["comesFromLabel"]) | undefined;
1502
1575
  /** The text read with a card to say where its connections come from, with `{cards}`. */
@@ -1527,6 +1600,16 @@ this, so a reader hears the ends first and what the line says after. */
1527
1600
  Its own label, where it has one, is its description rather than part of
1528
1601
  this, so a reader hears the ends first and what the line says after. */
1529
1602
  connectionLabel?: (HelixHeadlessCanvas["connectionLabel"]) | undefined;
1603
+ /** The name of the group of controls, read by screen readers, which names
1604
+ what the controls drive rather than the mechanism. */
1605
+ "controls-label"?: (HelixHeadlessCanvas["controlsLabel"]) | undefined;
1606
+ /** The name of the group of controls, read by screen readers, which names
1607
+ what the controls drive rather than the mechanism. */
1608
+ controlsLabel?: (HelixHeadlessCanvas["controlsLabel"]) | undefined;
1609
+ /** The board's name where `label` is empty. */
1610
+ "fallback-label"?: (HelixHeadlessCanvas["fallbackLabel"]) | undefined;
1611
+ /** The board's name where `label` is empty. */
1612
+ fallbackLabel?: (HelixHeadlessCanvas["fallbackLabel"]) | undefined;
1530
1613
  /** The accessible name for the board. Required.
1531
1614
 
1532
1615
  A document has no name of its own in the format, and "Canvas" names the
@@ -1550,6 +1633,12 @@ as the list.
1550
1633
  The list is joined the way the page's language joins one, "Second and
1551
1634
  Third", rather than with a comma this component chose. */
1552
1635
  leadsToLabel?: (HelixHeadlessCanvas["leadsToLabel"]) | undefined;
1636
+ /** The text read with a card that has connections both ways. `{leadsTo}` is
1637
+ `leads-to-label` and `{comesFrom}` is `comes-from-label`, each filled in. */
1638
+ "linked-label"?: (HelixHeadlessCanvas["linkedLabel"]) | undefined;
1639
+ /** The text read with a card that has connections both ways. `{leadsTo}` is
1640
+ `leads-to-label` and `{comesFrom}` is `comes-from-label`, each filled in. */
1641
+ linkedLabel?: (HelixHeadlessCanvas["linkedLabel"]) | undefined;
1553
1642
  /** What screen readers hear after a key moves a card, with `{name}` for the
1554
1643
  card and `{x}` and `{y}` for where it now is, in the document's units.
1555
1644
 
@@ -1645,7 +1734,8 @@ A card is an article and a connection a button, and neither has a selected
1645
1734
  state for `aria-selected` to carry, so the state is said in words. */
1646
1735
  selectedLabel?: (HelixHeadlessCanvas["selectedLabel"]) | undefined;
1647
1736
  /** What screen readers hear after the selection grows or shrinks, with
1648
- `{count}` for how many cards and connections are selected: by Space, a
1737
+ `{count}` for how many cards and connections are selected, written in the
1738
+ locale, where a language that needs plural forms writes them: by Space, a
1649
1739
  click with Shift, Command or Control, Command or Control with A, a box
1650
1740
  drawn across the board, or Escape.
1651
1741
 
@@ -1653,7 +1743,8 @@ A selection of one made by arriving on a card or clicking it is not said,
1653
1743
  since the card is. */
1654
1744
  "selection-label"?: (HelixHeadlessCanvas["selectionLabel"]) | undefined;
1655
1745
  /** What screen readers hear after the selection grows or shrinks, with
1656
- `{count}` for how many cards and connections are selected: by Space, a
1746
+ `{count}` for how many cards and connections are selected, written in the
1747
+ locale, where a language that needs plural forms writes them: by Space, a
1657
1748
  click with Shift, Command or Control, Command or Control with A, a box
1658
1749
  drawn across the board, or Escape.
1659
1750
 
@@ -1691,18 +1782,26 @@ red is "blocked" on one board and "urgent" on the next. A reader who can
1691
1782
  see the board is told by the color; this is how a reader who cannot is
1692
1783
  told the same. A tone left out is not read. */
1693
1784
  toneLabels?: (HelixHeadlessCanvas["toneLabels"]) | undefined;
1785
+ /** The hint shown when one finger swipes over the board with `gestures="cooperative"`. */
1786
+ "two-finger-hint-label"?: (HelixHeadlessCanvas["twoFingerHintLabel"]) | undefined;
1787
+ /** The hint shown when one finger swipes over the board with `gestures="cooperative"`. */
1788
+ twoFingerHintLabel?: (HelixHeadlessCanvas["twoFingerHintLabel"]) | undefined;
1789
+ /** The line shown while the board, with `gestures="activate"`, has the gestures. */
1790
+ "using-label"?: (HelixHeadlessCanvas["usingLabel"]) | undefined;
1791
+ /** The line shown while the board, with `gestures="activate"`, has the gestures. */
1792
+ usingLabel?: (HelixHeadlessCanvas["usingLabel"]) | undefined;
1793
+ /** The hint shown when the wheel scrolls past the board with
1794
+ `gestures="cooperative"`. `{key}` is ⌘ on a Mac and Ctrl elsewhere. */
1795
+ "wheel-hint-label"?: (HelixHeadlessCanvas["wheelHintLabel"]) | undefined;
1796
+ /** The hint shown when the wheel scrolls past the board with
1797
+ `gestures="cooperative"`. `{key}` is ⌘ on a Mac and Ctrl elsewhere. */
1798
+ wheelHintLabel?: (HelixHeadlessCanvas["wheelHintLabel"]) | undefined;
1694
1799
  /** What screen readers hear after a zoom button or key, with `{zoom}` for the
1695
- zoom as a percentage, written the way the page's language writes one. */
1800
+ zoom as a percentage, written the way the element's locale writes one. */
1696
1801
  "zoomed-label"?: (HelixHeadlessCanvas["zoomedLabel"]) | undefined;
1697
1802
  /** What screen readers hear after a zoom button or key, with `{zoom}` for the
1698
- zoom as a percentage, written the way the page's language writes one. */
1803
+ zoom as a percentage, written the way the element's locale writes one. */
1699
1804
  zoomedLabel?: (HelixHeadlessCanvas["zoomedLabel"]) | undefined;
1700
- /** The hint shown when a surface waiting to be pressed is scrolled or
1701
- swiped over, with `gestures="activate"`. Absent is the family's own. */
1702
- "activate-hint-label"?: (HelixHeadlessCanvas["activateHintLabel"]) | undefined;
1703
- /** The hint shown when a surface waiting to be pressed is scrolled or
1704
- swiped over, with `gestures="activate"`. Absent is the family's own. */
1705
- activateHintLabel?: (HelixHeadlessCanvas["activateHintLabel"]) | undefined;
1706
1805
  /** Which controls to show, as a list such as `pan zoom fullscreen`, or
1707
1806
  `none`. A family can add words of its own.
1708
1807
 
@@ -1725,20 +1824,6 @@ of the frame. The
1725
1824
  stylesheet lays the cluster out by which buttons are in it rather than by
1726
1825
  this attribute, so the two defaults need no rule each. */
1727
1826
  controls?: (HelixHeadlessCanvas["controls"]) | undefined;
1728
- /** The name of the group of controls, read by screen readers.
1729
-
1730
- Absent is the family's own name for it, "Map controls" or "Board
1731
- controls", which names what the controls drive rather than the
1732
- mechanism. Written here to say it in another language, which every other
1733
- string this surface speaks already allowed and this one did not. */
1734
- "controls-label"?: (HelixHeadlessCanvas["controlsLabel"]) | undefined;
1735
- /** The name of the group of controls, read by screen readers.
1736
-
1737
- Absent is the family's own name for it, "Map controls" or "Board
1738
- controls", which names what the controls drive rather than the
1739
- mechanism. Written here to say it in another language, which every other
1740
- string this surface speaks already allowed and this one did not. */
1741
- controlsLabel?: (HelixHeadlessCanvas["controlsLabel"]) | undefined;
1742
1827
  /** Which corner the controls sit in.
1743
1828
 
1744
1829
  **Configurable because there is no safe default**, which is a collision
@@ -1841,26 +1926,6 @@ at any zoom, and a consumer who wants their own units multiplies by them. */
1841
1926
  "pan-up-label"?: (HelixHeadlessCanvas["panUpLabel"]) | undefined;
1842
1927
  /** The pan up button's label. */
1843
1928
  panUpLabel?: (HelixHeadlessCanvas["panUpLabel"]) | undefined;
1844
- /** The hint shown when one finger swipes over a surface with
1845
- `gestures="cooperative"`. Absent is the family's own. */
1846
- "two-finger-hint-label"?: (HelixHeadlessCanvas["twoFingerHintLabel"]) | undefined;
1847
- /** The hint shown when one finger swipes over a surface with
1848
- `gestures="cooperative"`. Absent is the family's own. */
1849
- twoFingerHintLabel?: (HelixHeadlessCanvas["twoFingerHintLabel"]) | undefined;
1850
- /** The line shown while a surface with `gestures="activate"` has the
1851
- gestures. Absent is the family's own. */
1852
- "using-label"?: (HelixHeadlessCanvas["usingLabel"]) | undefined;
1853
- /** The line shown while a surface with `gestures="activate"` has the
1854
- gestures. Absent is the family's own. */
1855
- usingLabel?: (HelixHeadlessCanvas["usingLabel"]) | undefined;
1856
- /** The hint shown when the wheel scrolls past a surface with
1857
- `gestures="cooperative"`, with `{key}`, which is ⌘ on a Mac and Ctrl
1858
- elsewhere. Absent is the family's own. */
1859
- "wheel-hint-label"?: (HelixHeadlessCanvas["wheelHintLabel"]) | undefined;
1860
- /** The hint shown when the wheel scrolls past a surface with
1861
- `gestures="cooperative"`, with `{key}`, which is ⌘ on a Mac and Ctrl
1862
- elsewhere. Absent is the family's own. */
1863
- wheelHintLabel?: (HelixHeadlessCanvas["wheelHintLabel"]) | undefined;
1864
1929
  /** The zoom in button's label. */
1865
1930
  "zoom-in-label"?: (HelixHeadlessCanvas["zoomInLabel"]) | undefined;
1866
1931
  /** The zoom in button's label. */
@@ -2347,9 +2412,8 @@ nothing for `them`. */
2347
2412
  "failed-label"?: (HelixHeadlessChatMessage["failedLabel"]) | undefined;
2348
2413
  /** Label for a message that did not send. */
2349
2414
  failedLabel?: (HelixHeadlessChatMessage["failedLabel"]) | undefined;
2350
- /** Locale for the timestamp.
2351
-
2352
- Empty is the runtime's own. */
2415
+ /** The locale the timestamp and the words are in, as a BCP 47 tag such as
2416
+ `de`. Empty reads the nearest `lang`, then the browser's language. */
2353
2417
  locale?: (HelixHeadlessChatMessage["locale"]) | undefined;
2354
2418
  /** Label for the retry button on a failed message. */
2355
2419
  "retry-label"?: (HelixHeadlessChatMessage["retryLabel"]) | undefined;
@@ -2426,6 +2490,24 @@ set.
2426
2490
  attribute could not say that: it is true by being there, whatever it holds,
2427
2491
  so a default of true had no attribute that turned it off. */
2428
2492
  defaultPinned?: (HelixHeadlessChat["defaultPinned"]) | undefined;
2493
+ /** What a turn from `turns` that did not send says, and what a screen reader
2494
+ hears before its words. A turn you write as a child says its own
2495
+ `failed-label`. */
2496
+ "failed-label"?: (HelixHeadlessChat["failedLabel"]) | undefined;
2497
+ /** What a turn from `turns` that did not send says, and what a screen reader
2498
+ hears before its words. A turn you write as a child says its own
2499
+ `failed-label`. */
2500
+ failedLabel?: (HelixHeadlessChat["failedLabel"]) | undefined;
2501
+ /** What a screen reader hears for a turn that did not send. `{failed}` is the
2502
+ turn's `failed-label` and `{text}` is its words. */
2503
+ "failed-turn-label"?: (HelixHeadlessChat["failedTurnLabel"]) | undefined;
2504
+ /** What a screen reader hears for a turn that did not send. `{failed}` is the
2505
+ turn's `failed-label` and `{text}` is its words. */
2506
+ failedTurnLabel?: (HelixHeadlessChat["failedTurnLabel"]) | undefined;
2507
+ /** The conversation's name, read by screen readers, where `label` is empty. */
2508
+ "fallback-label"?: (HelixHeadlessChat["fallbackLabel"]) | undefined;
2509
+ /** The conversation's name, read by screen readers, where `label` is empty. */
2510
+ fallbackLabel?: (HelixHeadlessChat["fallbackLabel"]) | undefined;
2429
2511
  /** Whether there are older turns to load, and whether they are loading.
2430
2512
 
2431
2513
  `more` makes reaching the top fire `helix-history`, once per arrival;
@@ -2553,6 +2635,14 @@ Read from the boxes once they are known, so a box a script ticks directly
2553
2635
  is in it at once. Written, it is pushed onto the boxes. A box whose value
2554
2636
  holds a comma cannot be named here: use `values`. */
2555
2637
  value?: (HelixHeadlessCheckboxGroup["value"]) | undefined;
2638
+ /** The message reported when the field is required and no box is ticked.
2639
+ Absent, or empty, is this sentence, or the words registered for the page's
2640
+ locale. */
2641
+ "value-missing-message"?: (HelixHeadlessCheckboxGroup["valueMissingMessage"]) | undefined;
2642
+ /** The message reported when the field is required and no box is ticked.
2643
+ Absent, or empty, is this sentence, or the words registered for the page's
2644
+ locale. */
2645
+ valueMissingMessage?: (HelixHeadlessCheckboxGroup["valueMissingMessage"]) | undefined;
2556
2646
  /** */
2557
2647
  "aria-label"?: unknown;
2558
2648
  /** The validation message shown under the control. It replaces the
@@ -2565,24 +2655,6 @@ browser's message. */
2565
2655
  label?: (HelixHeadlessCheckboxGroup["label"]) | undefined;
2566
2656
  /** Whether the field needs a value before the form can submit. */
2567
2657
  required?: (HelixHeadlessCheckboxGroup["required"]) | undefined;
2568
- /** The message shown when the field is required and empty.
2569
-
2570
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2571
- set and the browser's own on a text field, which the browser writes in
2572
- the reader's language. Every other word a control speaks is a property,
2573
- and this one was the English a form in another language still spoke in
2574
- the bubble it raises on submit: `feedback` replaces the message under
2575
- the field and does not reach that one. */
2576
- "value-missing-message"?: (HelixHeadlessCheckboxGroup["valueMissingMessage"]) | undefined;
2577
- /** The message shown when the field is required and empty.
2578
-
2579
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2580
- set and the browser's own on a text field, which the browser writes in
2581
- the reader's language. Every other word a control speaks is a property,
2582
- and this one was the English a form in another language still spoke in
2583
- the bubble it raises on submit: `feedback` replaces the message under
2584
- the field and does not reach that one. */
2585
- valueMissingMessage?: (HelixHeadlessCheckboxGroup["valueMissingMessage"]) | undefined;
2586
2658
  /** Whether the control is disabled and cannot be used.
2587
2659
 
2588
2660
  Reflected, because the styled tier selects on it, and mirrored to
@@ -2645,6 +2717,14 @@ reads it as `:state(indeterminate)`. */
2645
2717
  indeterminate?: (HelixHeadlessCheckbox["indeterminate"]) | undefined;
2646
2718
  /** The value submitted when the box is checked. */
2647
2719
  value?: (HelixHeadlessCheckbox["value"]) | undefined;
2720
+ /** The message reported when the field is required and the box is not ticked.
2721
+ Absent, or empty, is this sentence, or the words registered for the page's
2722
+ locale. */
2723
+ "value-missing-message"?: (HelixHeadlessCheckbox["valueMissingMessage"]) | undefined;
2724
+ /** The message reported when the field is required and the box is not ticked.
2725
+ Absent, or empty, is this sentence, or the words registered for the page's
2726
+ locale. */
2727
+ valueMissingMessage?: (HelixHeadlessCheckbox["valueMissingMessage"]) | undefined;
2648
2728
  /** Whether the control is checked.
2649
2729
 
2650
2730
  One property rather than two. Writing always applies;
@@ -2696,24 +2776,6 @@ browser's message. */
2696
2776
  label?: (HelixHeadlessCheckbox["label"]) | undefined;
2697
2777
  /** Whether the field needs a value before the form can submit. */
2698
2778
  required?: (HelixHeadlessCheckbox["required"]) | undefined;
2699
- /** The message shown when the field is required and empty.
2700
-
2701
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2702
- set and the browser's own on a text field, which the browser writes in
2703
- the reader's language. Every other word a control speaks is a property,
2704
- and this one was the English a form in another language still spoke in
2705
- the bubble it raises on submit: `feedback` replaces the message under
2706
- the field and does not reach that one. */
2707
- "value-missing-message"?: (HelixHeadlessCheckbox["valueMissingMessage"]) | undefined;
2708
- /** The message shown when the field is required and empty.
2709
-
2710
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2711
- set and the browser's own on a text field, which the browser writes in
2712
- the reader's language. Every other word a control speaks is a property,
2713
- and this one was the English a form in another language still spoke in
2714
- the bubble it raises on submit: `feedback` replaces the message under
2715
- the field and does not reach that one. */
2716
- valueMissingMessage?: (HelixHeadlessCheckbox["valueMissingMessage"]) | undefined;
2717
2779
  /** Whether the control is disabled and cannot be used.
2718
2780
 
2719
2781
  Reflected, because the styled tier selects on it, and mirrored to
@@ -2763,15 +2825,21 @@ export type HelixHeadlessCodeBlockVueProps = {
2763
2825
  /** The copy button's name and tooltip text before a copy.
2764
2826
 
2765
2827
  Where the block has a name, the button says it too, such as "Copy code,
2766
- app.ts", so each copy button on a page with several blocks is told apart.
2767
- In a diff, that is each file's own name. */
2828
+ app.ts", as `copy-name-label` puts it, so each copy button on a page with
2829
+ several blocks is told apart. In a diff, that is each file's own name. */
2768
2830
  "copy-label"?: (HelixHeadlessCodeBlock["copyLabel"]) | undefined;
2769
2831
  /** The copy button's name and tooltip text before a copy.
2770
2832
 
2771
2833
  Where the block has a name, the button says it too, such as "Copy code,
2772
- app.ts", so each copy button on a page with several blocks is told apart.
2773
- In a diff, that is each file's own name. */
2834
+ app.ts", as `copy-name-label` puts it, so each copy button on a page with
2835
+ several blocks is told apart. In a diff, that is each file's own name. */
2774
2836
  copyLabel?: (HelixHeadlessCodeBlock["copyLabel"]) | undefined;
2837
+ /** The copy button's name and tooltip text before a copy, where the block
2838
+ has a name. `{copy}` is `copy-label` and `{name}` the block's name. */
2839
+ "copy-name-label"?: (HelixHeadlessCodeBlock["copyNameLabel"]) | undefined;
2840
+ /** The copy button's name and tooltip text before a copy, where the block
2841
+ has a name. `{copy}` is `copy-label` and `{name}` the block's name. */
2842
+ copyNameLabel?: (HelixHeadlessCodeBlock["copyNameLabel"]) | undefined;
2775
2843
  /** Whether the content is a unified diff, drawn as the lines it changed.
2776
2844
 
2777
2845
  Reflected, because the stylesheet paints a diff differently from code, and
@@ -2967,6 +3035,14 @@ Date Input and Time Input. */
2967
3035
  readOnly?: (HelixHeadlessColorInput["readOnly"]) | undefined;
2968
3036
  /** Colors offered under the picker, as a comma-separated list. */
2969
3037
  swatches?: (HelixHeadlessColorInput["swatches"]) | undefined;
3038
+ /** What the swatch says in `variant="swatch"`, after the field's label, once
3039
+ there is a color. `{name}` is the color's name, such as "vibrant red", and
3040
+ `{value}` the value as written. */
3041
+ "swatch-label"?: (HelixHeadlessColorInput["swatchLabel"]) | undefined;
3042
+ /** What the swatch says in `variant="swatch"`, after the field's label, once
3043
+ there is a color. `{name}` is the color's name, such as "vibrant red", and
3044
+ `{value}` the value as written. */
3045
+ swatchLabel?: (HelixHeadlessColorInput["swatchLabel"]) | undefined;
2970
3046
  /** Accessible name for the control that opens the panel. */
2971
3047
  "trigger-label"?: (HelixHeadlessColorInput["triggerLabel"]) | undefined;
2972
3048
  /** Accessible name for the control that opens the panel. */
@@ -3052,18 +3128,22 @@ browser's message. */
3052
3128
  required?: (HelixHeadlessColorInput["required"]) | undefined;
3053
3129
  /** The message shown when the field is required and empty.
3054
3130
 
3055
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
3056
- set and the browser's own on a text field, which the browser writes in
3057
- the reader's language. Every other word a control speaks is a property,
3131
+ **Absent, or empty, is the control's own sentence**, "Choose one to
3132
+ continue." on a set and the browser's own on a text field, which the
3133
+ browser writes in the reader's language. A family with a sentence of its
3134
+ own declares it as this property's English, a word property a page
3135
+ registers for its locale under the family's key. Every other word a control speaks is a property,
3058
3136
  and this one was the English a form in another language still spoke in
3059
3137
  the bubble it raises on submit: `feedback` replaces the message under
3060
3138
  the field and does not reach that one. */
3061
3139
  "value-missing-message"?: (HelixHeadlessColorInput["valueMissingMessage"]) | undefined;
3062
3140
  /** The message shown when the field is required and empty.
3063
3141
 
3064
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
3065
- set and the browser's own on a text field, which the browser writes in
3066
- the reader's language. Every other word a control speaks is a property,
3142
+ **Absent, or empty, is the control's own sentence**, "Choose one to
3143
+ continue." on a set and the browser's own on a text field, which the
3144
+ browser writes in the reader's language. A family with a sentence of its
3145
+ own declares it as this property's English, a word property a page
3146
+ registers for its locale under the family's key. Every other word a control speaks is a property,
3067
3147
  and this one was the English a form in another language still spoke in
3068
3148
  the bubble it raises on submit: `feedback` replaces the message under
3069
3149
  the field and does not reach that one. */
@@ -3366,6 +3446,22 @@ into. */
3366
3446
  "saturation-label"?: (HelixHeadlessColorPicker["saturationLabel"]) | undefined;
3367
3447
  /** What the square's horizontal ramp is called. */
3368
3448
  saturationLabel?: (HelixHeadlessColorPicker["saturationLabel"]) | undefined;
3449
+ /** What a screen reader hears for the square's place, the color's two
3450
+ numbers and its name, on whichever of its two inputs it is on.
3451
+ `{first}` is `saturation` or `brightness`, the input's own channel, which
3452
+ is said first, so each order is its whole sentence. `{saturation}` and
3453
+ `{brightness}` are shares from 0 to 1, written as percentages with
3454
+ `number, percent`, `{saturationLabel}` and `{brightnessLabel}` the
3455
+ channels' names, and `{name}` the color's, such as "vibrant red". */
3456
+ "square-text"?: (HelixHeadlessColorPicker["squareText"]) | undefined;
3457
+ /** What a screen reader hears for the square's place, the color's two
3458
+ numbers and its name, on whichever of its two inputs it is on.
3459
+ `{first}` is `saturation` or `brightness`, the input's own channel, which
3460
+ is said first, so each order is its whole sentence. `{saturation}` and
3461
+ `{brightness}` are shares from 0 to 1, written as percentages with
3462
+ `number, percent`, `{saturationLabel}` and `{brightnessLabel}` the
3463
+ channels' names, and `{name}` the color's, such as "vibrant red". */
3464
+ squareText?: (HelixHeadlessColorPicker["squareText"]) | undefined;
3369
3465
  /** Colors offered under the picker, as a comma-separated list. */
3370
3466
  swatches?: (HelixHeadlessColorPicker["swatches"]) | undefined;
3371
3467
  /** What the group holding the eyedropper and the syntax toggle is called. */
@@ -3380,13 +3476,15 @@ into. */
3380
3476
 
3381
3477
  **Every sentence a control raises in the browser's bubble is a property**,
3382
3478
  named for the validity flag it reports, so a form in another language
3383
- speaks it. Absent is the control's own sentence, in English. */
3479
+ speaks it. Unset is the sentence registered for the page's language, then
3480
+ the English. */
3384
3481
  "value-missing-message"?: (HelixHeadlessColorPicker["valueMissingMessage"]) | undefined;
3385
3482
  /** The message shown when a color is required and none is chosen.
3386
3483
 
3387
3484
  **Every sentence a control raises in the browser's bubble is a property**,
3388
3485
  named for the validity flag it reports, so a form in another language
3389
- speaks it. Absent is the control's own sentence, in English. */
3486
+ speaks it. Unset is the sentence registered for the page's language, then
3487
+ the English. */
3390
3488
  valueMissingMessage?: (HelixHeadlessColorPicker["valueMissingMessage"]) | undefined;
3391
3489
  /** Draws the hue as a wheel around the square, in place of the hue ramp, as
3392
3490
  React Aria's ColorWheel sits round its ColorArea.
@@ -3535,9 +3633,15 @@ it is offered next to near misses too: a reader typing "Ruby on Rails" with
3535
3633
  halfway through. The arrow keys reach it after the last option, and Enter
3536
3634
  on it adds what was typed. */
3537
3635
  creatable?: (HelixHeadlessCombobox["creatable"]) | undefined;
3538
- /** The text of the create row, shown before the typed words it adds. */
3636
+ /** The text of the create row. `{value}` is what was typed.
3637
+
3638
+ A sentence without `{value}`, such as `Create`, is followed by what was
3639
+ typed in quotes, as before `{value}` existed. */
3539
3640
  "create-label"?: (HelixHeadlessCombobox["createLabel"]) | undefined;
3540
- /** The text of the create row, shown before the typed words it adds. */
3641
+ /** The text of the create row. `{value}` is what was typed.
3642
+
3643
+ A sentence without `{value}`, such as `Create`, is followed by what was
3644
+ typed in quotes, as before `{value}` existed. */
3541
3645
  createLabel?: (HelixHeadlessCombobox["createLabel"]) | undefined;
3542
3646
  /** Text shown when the filter hides every option. */
3543
3647
  "empty-text"?: (HelixHeadlessCombobox["emptyText"]) | undefined;
@@ -3582,6 +3686,10 @@ message belongs. */
3582
3686
  "loading-text"?: (HelixHeadlessCombobox["loadingText"]) | undefined;
3583
3687
  /** Text the list shows while the options load. */
3584
3688
  loadingText?: (HelixHeadlessCombobox["loadingText"]) | undefined;
3689
+ /** The locale the words, plural forms, and numbers are in, as a BCP 47 tag
3690
+ such as `pl`. Empty reads the nearest `lang`, then the browser's
3691
+ language. */
3692
+ locale?: (HelixHeadlessCombobox["locale"]) | undefined;
3585
3693
  /** Whether more than one option can be chosen.
3586
3694
 
3587
3695
  The list already does the work: `value` comes apart on commas, a press
@@ -3640,19 +3748,21 @@ filled in.
3640
3748
  **The name goes in**, so a row of them is heard as which one each
3641
3749
  removes rather than as "Remove" said once per chosen option. */
3642
3750
  removeLabel?: (HelixHeadlessCombobox["removeLabel"]) | undefined;
3643
- /** What a screen reader hears when typing leaves one option. `{count}` is
3644
- the count. */
3751
+ /** What a screen reader hears when typing leaves one option, where
3752
+ `results-label` should not say it. `{count}` is the count. */
3645
3753
  "result-label"?: (HelixHeadlessCombobox["resultLabel"]) | undefined;
3646
- /** What a screen reader hears when typing leaves one option. `{count}` is
3647
- the count. */
3754
+ /** What a screen reader hears when typing leaves one option, where
3755
+ `results-label` should not say it. `{count}` is the count. */
3648
3756
  resultLabel?: (HelixHeadlessCombobox["resultLabel"]) | undefined;
3649
- /** What a screen reader hears when typing leaves any other number of
3650
- options. `{count}` is the count, and `Intl.PluralRules` picks between the
3651
- two. */
3757
+ /** What a screen reader hears when typing narrows the list. `{count}` is how
3758
+ many options are left, written in the locale, and each language writes
3759
+ the forms it has: `{count, plural, one {# wynik} few {# wyniki} many
3760
+ {# wyników} other {# wyniku}}`. */
3652
3761
  "results-label"?: (HelixHeadlessCombobox["resultsLabel"]) | undefined;
3653
- /** What a screen reader hears when typing leaves any other number of
3654
- options. `{count}` is the count, and `Intl.PluralRules` picks between the
3655
- two. */
3762
+ /** What a screen reader hears when typing narrows the list. `{count}` is how
3763
+ many options are left, written in the locale, and each language writes
3764
+ the forms it has: `{count, plural, one {# wynik} few {# wyniki} many
3765
+ {# wyników} other {# wyniku}}`. */
3656
3766
  resultsLabel?: (HelixHeadlessCombobox["resultsLabel"]) | undefined;
3657
3767
  /** What VoiceOver hears for a chosen option, as the highlight reaches it and
3658
3768
  once it is chosen, on Apple devices. `{name}` is the option's words. */
@@ -3667,6 +3777,14 @@ element already sets on the input it renders, and two things of one name
3667
3777
  meaning different things on the same control is a question a consumer
3668
3778
  should not have to ask. */
3669
3779
  suggest?: (HelixHeadlessCombobox["suggest"]) | undefined;
3780
+ /** The message reported when the field is required and nothing is chosen.
3781
+ Absent, or empty, is this sentence, or the words registered for the page's
3782
+ locale. */
3783
+ "value-missing-message"?: (HelixHeadlessCombobox["valueMissingMessage"]) | undefined;
3784
+ /** The message reported when the field is required and nothing is chosen.
3785
+ Absent, or empty, is this sentence, or the words registered for the page's
3786
+ locale. */
3787
+ valueMissingMessage?: (HelixHeadlessCombobox["valueMissingMessage"]) | undefined;
3670
3788
  /** Whether the element starts open. Ignored once `open` is written. */
3671
3789
  "default-open"?: (HelixHeadlessCombobox["defaultOpen"]) | undefined;
3672
3790
  /** Whether the element starts open. Ignored once `open` is written. */
@@ -3700,6 +3818,12 @@ as `+3`, does not say what it does. */
3700
3818
  "max-tags"?: (HelixHeadlessCombobox["maxTags"] | `${number}`) | undefined;
3701
3819
  /** How many tokens to show before the rest become a count. */
3702
3820
  maxTags?: (HelixHeadlessCombobox["maxTags"]) | undefined;
3821
+ /** The count of the tokens past `max-tags`, as it is shown, with `{count}`
3822
+ for the number, written in the element's locale. */
3823
+ "rest-text"?: (HelixHeadlessCombobox["restText"]) | undefined;
3824
+ /** The count of the tokens past `max-tags`, as it is shown, with `{count}`
3825
+ for the number, written in the element's locale. */
3826
+ restText?: (HelixHeadlessCombobox["restText"]) | undefined;
3703
3827
  /** The value the control starts with. A form reset returns it to this value,
3704
3828
  and to the `value` attribute where this one is not written, as a native
3705
3829
  control resets to the `value` it declares. */
@@ -3727,24 +3851,6 @@ browser's message. */
3727
3851
  label?: (HelixHeadlessCombobox["label"]) | undefined;
3728
3852
  /** Whether the field needs a value before the form can submit. */
3729
3853
  required?: (HelixHeadlessCombobox["required"]) | undefined;
3730
- /** The message shown when the field is required and empty.
3731
-
3732
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
3733
- set and the browser's own on a text field, which the browser writes in
3734
- the reader's language. Every other word a control speaks is a property,
3735
- and this one was the English a form in another language still spoke in
3736
- the bubble it raises on submit: `feedback` replaces the message under
3737
- the field and does not reach that one. */
3738
- "value-missing-message"?: (HelixHeadlessCombobox["valueMissingMessage"]) | undefined;
3739
- /** The message shown when the field is required and empty.
3740
-
3741
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
3742
- set and the browser's own on a text field, which the browser writes in
3743
- the reader's language. Every other word a control speaks is a property,
3744
- and this one was the English a form in another language still spoke in
3745
- the bubble it raises on submit: `feedback` replaces the message under
3746
- the field and does not reach that one. */
3747
- valueMissingMessage?: (HelixHeadlessCombobox["valueMissingMessage"]) | undefined;
3748
3854
  /** Whether the control is disabled and cannot be used.
3749
3855
 
3750
3856
  Reflected, because the styled tier selects on it, and mirrored to
@@ -3875,19 +3981,21 @@ some. Absent, `empty-text` shows. See Listbox's `no-results-text`. */
3875
3981
  noResultsText?: (HelixHeadlessCommand["noResultsText"]) | undefined;
3876
3982
  /** The text shown in the filter field before anything is typed. */
3877
3983
  placeholder?: (HelixHeadlessCommand["placeholder"]) | undefined;
3878
- /** What a screen reader hears when typing leaves one command. `{count}` is
3879
- the count. */
3984
+ /** What a screen reader hears when typing leaves one command, where
3985
+ `results-label` should not say it. `{count}` is the count. */
3880
3986
  "result-label"?: (HelixHeadlessCommand["resultLabel"]) | undefined;
3881
- /** What a screen reader hears when typing leaves one command. `{count}` is
3882
- the count. */
3987
+ /** What a screen reader hears when typing leaves one command, where
3988
+ `results-label` should not say it. `{count}` is the count. */
3883
3989
  resultLabel?: (HelixHeadlessCommand["resultLabel"]) | undefined;
3884
- /** What a screen reader hears when typing leaves any other number of
3885
- commands. `{count}` is the count, and `Intl.PluralRules` picks between the
3886
- two. */
3990
+ /** What a screen reader hears when typing narrows the commands. `{count}` is
3991
+ how many are left, written in the locale, and each language writes the
3992
+ forms it has: `{count, plural, one {# polecenie} few {# polecenia} many
3993
+ {# poleceń} other {# polecenia}}`. */
3887
3994
  "results-label"?: (HelixHeadlessCommand["resultsLabel"]) | undefined;
3888
- /** What a screen reader hears when typing leaves any other number of
3889
- commands. `{count}` is the count, and `Intl.PluralRules` picks between the
3890
- two. */
3995
+ /** What a screen reader hears when typing narrows the commands. `{count}` is
3996
+ how many are left, written in the locale, and each language writes the
3997
+ forms it has: `{count, plural, one {# polecenie} few {# polecenia} many
3998
+ {# poleceń} other {# polecenia}}`. */
3891
3999
  resultsLabel?: (HelixHeadlessCommand["resultsLabel"]) | undefined;
3892
4000
  /** Whether the element starts open. Ignored once `open` is written. */
3893
4001
  "default-open"?: (HelixHeadlessCommand["defaultOpen"]) | undefined;
@@ -4059,6 +4167,9 @@ export type HelixHeadlessDataTableElementEvent<E = Event> = TypedEvent<
4059
4167
  /** `helix-activate` event type */
4060
4168
  export type HelixHeadlessDataTableHelixActivateElementEvent =
4061
4169
  HelixHeadlessDataTableElementEvent<HelixActivateEvent>;
4170
+ /** `helix-before-reorder` event type */
4171
+ export type HelixHeadlessDataTableHelixBeforeReorderElementEvent =
4172
+ HelixHeadlessDataTableElementEvent<HelixBeforeReorderEvent>;
4062
4173
  /** `helix-expand` event type */
4063
4174
  export type HelixHeadlessDataTableHelixExpandElementEvent =
4064
4175
  HelixHeadlessDataTableElementEvent<HelixExpandEvent>;
@@ -4094,10 +4205,16 @@ export type HelixHeadlessDataTableHelixSortedElementEvent =
4094
4205
  HelixHeadlessDataTableElementEvent<HelixSortedEvent>;
4095
4206
 
4096
4207
  export type HelixHeadlessDataTableVueProps = {
4097
- /** The word for an ascending sort, in `sorted-label`. */
4208
+ /** The word for an ascending sort, in a `sorted-label` that writes `{order}`. */
4098
4209
  "ascending-label"?: (HelixHeadlessDataTable["ascendingLabel"]) | undefined;
4099
- /** The word for an ascending sort, in `sorted-label`. */
4210
+ /** The word for an ascending sort, in a `sorted-label` that writes `{order}`. */
4100
4211
  ascendingLabel?: (HelixHeadlessDataTable["ascendingLabel"]) | undefined;
4212
+ /** What screen readers hear when a held row is put back, or a move is
4213
+ refused, with `reorderable-rows`. */
4214
+ "canceled-label"?: (HelixHeadlessDataTable["canceledLabel"]) | undefined;
4215
+ /** What screen readers hear when a held row is put back, or a move is
4216
+ refused, with `reorderable-rows`. */
4217
+ canceledLabel?: (HelixHeadlessDataTable["canceledLabel"]) | undefined;
4101
4218
  /** The field that holds a row's child rows, as an array. Set it, and `row-key`,
4102
4219
  and the grid becomes a tree grid.
4103
4220
 
@@ -4142,10 +4259,14 @@ is set. */
4142
4259
  "default-sort"?: (HelixHeadlessDataTable["defaultSort"]) | undefined;
4143
4260
  /** The starting sort order, used until `sort` is set. */
4144
4261
  defaultSort?: (HelixHeadlessDataTable["defaultSort"]) | undefined;
4145
- /** The word for a descending sort, in `sorted-label`. */
4262
+ /** The word for a descending sort, in a `sorted-label` that writes `{order}`. */
4146
4263
  "descending-label"?: (HelixHeadlessDataTable["descendingLabel"]) | undefined;
4147
- /** The word for a descending sort, in `sorted-label`. */
4264
+ /** The word for a descending sort, in a `sorted-label` that writes `{order}`. */
4148
4265
  descendingLabel?: (HelixHeadlessDataTable["descendingLabel"]) | undefined;
4266
+ /** What screen readers hear when a row is dropped, with `reorderable-rows`. */
4267
+ "dropped-label"?: (HelixHeadlessDataTable["droppedLabel"]) | undefined;
4268
+ /** What screen readers hear when a row is dropped, with `reorderable-rows`. */
4269
+ droppedLabel?: (HelixHeadlessDataTable["droppedLabel"]) | undefined;
4149
4270
  /** The estimated height of a row before it is drawn, in pixels.
4150
4271
 
4151
4272
  Only read while `windowed`, and a starting guess rather than a claim: a
@@ -4187,6 +4308,10 @@ when there are no more rows to load. */
4187
4308
  "load-more-label"?: (HelixHeadlessDataTable["loadMoreLabel"]) | undefined;
4188
4309
  /** The words on the button in the `more` row. */
4189
4310
  loadMoreLabel?: (HelixHeadlessDataTable["loadMoreLabel"]) | undefined;
4311
+ /** The locale the words, plural forms, and numbers are in, as a BCP 47 tag
4312
+ such as `pl`. Empty reads the nearest `lang`, then the browser's
4313
+ language. The built-in pagination speaks it too. */
4314
+ locale?: (HelixHeadlessDataTable["locale"]) | undefined;
4190
4315
  /** Where filtering, sorting, and paging happen. `client` does them in the
4191
4316
  table, and `server` leaves them to your code.
4192
4317
 
@@ -4197,6 +4322,20 @@ the client cannot hold the data, so this is not an optimization, it is the
4197
4322
  only mode that works, and it is here from the start because adding it later
4198
4323
  inverts the data flow. */
4199
4324
  mode?: (HelixHeadlessDataTable["mode"]) | undefined;
4325
+ /** What screen readers hear each time a key moves a held row, with
4326
+ `reorderable-rows`. `{name}` is the row's name, `{position}` the place it
4327
+ would go, counting from 1, and `{count}` the number of rows on the page. */
4328
+ "moved-label"?: (HelixHeadlessDataTable["movedLabel"]) | undefined;
4329
+ /** What screen readers hear each time a key moves a held row, with
4330
+ `reorderable-rows`. `{name}` is the row's name, `{position}` the place it
4331
+ would go, counting from 1, and `{count}` the number of rows on the page. */
4332
+ movedLabel?: (HelixHeadlessDataTable["movedLabel"]) | undefined;
4333
+ /** The name of a row's grip, with `reorderable-rows`. `{row}` is replaced with
4334
+ the row's name. */
4335
+ "move-row-label"?: (HelixHeadlessDataTable["moveRowLabel"]) | undefined;
4336
+ /** The name of a row's grip, with `reorderable-rows`. `{row}` is replaced with
4337
+ the row's name. */
4338
+ moveRowLabel?: (HelixHeadlessDataTable["moveRowLabel"]) | undefined;
4200
4339
  /** The built-in pagination's name for the button that moves forward a page. */
4201
4340
  "next-label"?: (HelixHeadlessDataTable["nextLabel"]) | undefined;
4202
4341
  /** The built-in pagination's name for the button that moves forward a page. */
@@ -4248,6 +4387,12 @@ which is why the slot replaces this rather than sitting beside it. */
4248
4387
  "pagination-label"?: (HelixHeadlessDataTable["paginationLabel"]) | undefined;
4249
4388
  /** The name of the built-in pagination's navigation landmark. */
4250
4389
  paginationLabel?: (HelixHeadlessDataTable["paginationLabel"]) | undefined;
4390
+ /** What screen readers hear when a key or a click picks up a row, with
4391
+ `reorderable-rows`. `{name}` is the row's name. */
4392
+ "picked-up-label"?: (HelixHeadlessDataTable["pickedUpLabel"]) | undefined;
4393
+ /** What screen readers hear when a key or a click picks up a row, with
4394
+ `reorderable-rows`. `{name}` is the row's name. */
4395
+ pickedUpLabel?: (HelixHeadlessDataTable["pickedUpLabel"]) | undefined;
4251
4396
  /** The built-in pagination's name for the button that moves back a page. */
4252
4397
  "previous-label"?: (HelixHeadlessDataTable["previousLabel"]) | undefined;
4253
4398
  /** The built-in pagination's name for the button that moves back a page. */
@@ -4257,16 +4402,32 @@ which is why the slot replaces this rather than sitting beside it. */
4257
4402
  Each heading with a `field` gets a grip, dragged along the header or moved a
4258
4403
  place at a time with the arrow keys once it has focus. */
4259
4404
  reorderable?: (HelixHeadlessDataTable["reorderable"]) | undefined;
4260
- /** What screen readers hear when a search leaves one row. `{count}` is the count. */
4405
+ /** Lets people move rows, by a grip that leads each row. The table moves no
4406
+ row itself: set `rows` to the order `helix-reorder` carries. */
4407
+ "reorderable-rows"?: (HelixHeadlessDataTable["reorderableRows"]) | undefined;
4408
+ /** Lets people move rows, by a grip that leads each row. The table moves no
4409
+ row itself: set `rows` to the order `helix-reorder` carries. */
4410
+ reorderableRows?: (HelixHeadlessDataTable["reorderableRows"]) | undefined;
4411
+ /** What screen readers hear when a search leaves one row, where
4412
+ `results-label` should not say it. `{count}` is the count. */
4261
4413
  "result-label"?: (HelixHeadlessDataTable["resultLabel"]) | undefined;
4262
- /** What screen readers hear when a search leaves one row. `{count}` is the count. */
4414
+ /** What screen readers hear when a search leaves one row, where
4415
+ `results-label` should not say it. `{count}` is the count. */
4263
4416
  resultLabel?: (HelixHeadlessDataTable["resultLabel"]) | undefined;
4264
- /** What screen readers hear when a search leaves any other number of rows.
4265
- `{count}` is the count. */
4417
+ /** What screen readers hear when a search narrows the rows. `{count}` is how
4418
+ many rows are left, written in the locale, and each language writes the
4419
+ forms it has: `{count, plural, one {# wiersz} few {# wiersze} many
4420
+ {# wierszy} other {# wiersza}}`. */
4266
4421
  "results-label"?: (HelixHeadlessDataTable["resultsLabel"]) | undefined;
4267
- /** What screen readers hear when a search leaves any other number of rows.
4268
- `{count}` is the count. */
4422
+ /** What screen readers hear when a search narrows the rows. `{count}` is how
4423
+ many rows are left, written in the locale, and each language writes the
4424
+ forms it has: `{count, plural, one {# wiersz} few {# wiersze} many
4425
+ {# wierszy} other {# wiersza}}`. */
4269
4426
  resultsLabel?: (HelixHeadlessDataTable["resultsLabel"]) | undefined;
4427
+ /** The name of the heading over the row grips, with `reorderable-rows`. */
4428
+ "row-grips-label"?: (HelixHeadlessDataTable["rowGripsLabel"]) | undefined;
4429
+ /** The name of the heading over the row grips, with `reorderable-rows`. */
4430
+ rowGripsLabel?: (HelixHeadlessDataTable["rowGripsLabel"]) | undefined;
4270
4431
  /** The field that identifies each row.
4271
4432
 
4272
4433
  **Needed before selection exists, not after.** Lit keys the rendered rows by
@@ -4311,10 +4472,14 @@ price of the shape. A reader's choice fires `helix-select` first, and
4311
4472
  refusing it leaves the selection as it was. */
4312
4473
  selected?: (HelixHeadlessDataTable["selected"]) | undefined;
4313
4474
  /** What screen readers hear when the chosen rows change. `{count}` is how many
4314
- rows are chosen. */
4475
+ rows are chosen, written in the locale, and a language that needs plural
4476
+ forms writes them: `{count, plural, one {# wybrany} few {# wybrane} many
4477
+ {# wybranych} other {# wybranego}}`. */
4315
4478
  "selected-label"?: (HelixHeadlessDataTable["selectedLabel"]) | undefined;
4316
4479
  /** What screen readers hear when the chosen rows change. `{count}` is how many
4317
- rows are chosen. */
4480
+ rows are chosen, written in the locale, and a language that needs plural
4481
+ forms writes them: `{count, plural, one {# wybrany} few {# wybrane} many
4482
+ {# wybranych} other {# wybranego}}`. */
4318
4483
  selectedLabel?: (HelixHeadlessDataTable["selectedLabel"]) | undefined;
4319
4484
  /** The name of a row's checkbox. `{row}` is replaced with the row's value in
4320
4485
  the first column that has a field, or with its key. */
@@ -4330,10 +4495,14 @@ the event and set this to the order you chose. `default-sort` seeds an
4330
4495
  order this element then owns. */
4331
4496
  sort?: (HelixHeadlessDataTable["sort"]) | undefined;
4332
4497
  /** What screen readers hear when the table is sorted. `{column}` is the
4333
- column's heading and `{order}` is `ascending-label` or `descending-label`. */
4498
+ column's heading and `{direction}` is `ascending` or `descending`, so each
4499
+ order has its whole sentence. `{order}` is the deprecated
4500
+ `ascending-label` or `descending-label`. */
4334
4501
  "sorted-label"?: (HelixHeadlessDataTable["sortedLabel"]) | undefined;
4335
4502
  /** What screen readers hear when the table is sorted. `{column}` is the
4336
- column's heading and `{order}` is `ascending-label` or `descending-label`. */
4503
+ column's heading and `{direction}` is `ascending` or `descending`, so each
4504
+ order has its whole sentence. `{order}` is the deprecated
4505
+ `ascending-label` or `descending-label`. */
4337
4506
  sortedLabel?: (HelixHeadlessDataTable["sortedLabel"]) | undefined;
4338
4507
  /** The number of rows in the whole result, for when the table cannot count
4339
4508
  them.
@@ -4394,6 +4563,8 @@ holds and reordering it under them is a mutation they did not ask for. */
4394
4563
  export type HelixHeadlessDataTableVueEvents = {
4395
4564
  /** Fired after the page changes, with the new page as a string in `detail.value`. */
4396
4565
  "helix-activate": HelixHeadlessDataTableHelixActivateElementEvent;
4566
+ /** A row is about to move, with `reorderable-rows`. The event carries every row's key in the new order. Cancelable: cancel it to keep the row where it is. */
4567
+ "helix-before-reorder": HelixHeadlessDataTableHelixBeforeReorderElementEvent;
4397
4568
  /** Fired after a row opens or closes, with every open row's key, separated by commas, which `expanded` also holds. */
4398
4569
  "helix-expand": HelixHeadlessDataTableHelixExpandElementEvent;
4399
4570
  /** The search query is about to change. Cancelable: cancel it to keep the current query. */
@@ -4404,7 +4575,7 @@ export type HelixHeadlessDataTableVueEvents = {
4404
4575
  "helix-load-more": HelixHeadlessDataTableHelixLoadMoreElementEvent;
4405
4576
  /** Another page was requested. Cancelable: cancel it to stay on the current page. */
4406
4577
  "helix-navigate": HelixHeadlessDataTableHelixNavigateElementEvent;
4407
- /** The columns are about to move. The event carries every field in the new order. Cancelable: cancel it to keep the current order. */
4578
+ /** The columns are about to move, with `kind` set to `column` and every field in the new order. Cancelable: cancel it to keep the current order. For a row, with `kind` set to `row`, it follows `helix-before-reorder`, and you set `rows` to the order in `keys`. */
4408
4579
  "helix-reorder": HelixHeadlessDataTableHelixReorderElementEvent;
4409
4580
  /** Fired after the columns move, with every field in the new order. */
4410
4581
  "helix-reordered": HelixHeadlessDataTableHelixReorderedElementEvent;
@@ -4443,6 +4614,15 @@ Empty leaves the attribute off, which is the browser's default and is what
4443
4614
  lets autofill work at all: hardcoding `off` here means a birthday or a
4444
4615
  postal code can never be filled in for a reader. */
4445
4616
  autocomplete?: (HelixHeadlessDateInput["autocomplete"]) | undefined;
4617
+ /** The calendar the written date and the calendar's days are in: `gregory`,
4618
+ `buddhist`, `japanese`, `roc`, or `iso8601`.
4619
+
4620
+ Absent is the locale's own where it is one of the five, and `gregory` for
4621
+ every other, as Date Picker's `calendar` is. The value is `YYYY-MM-DD` in
4622
+ every calendar, and a focused field is ISO in every calendar. In
4623
+ `segmented`, the segments are the Gregorian day, month, and year, in the
4624
+ order the locale writes them, or ISO order for `iso8601`. */
4625
+ calendar?: (HelixHeadlessDateInput["calendar"]) | undefined;
4446
4626
  /** The name of the calendar's grid of days, read by screen readers. */
4447
4627
  "calendar-label"?: (HelixHeadlessDateInput["calendarLabel"]) | undefined;
4448
4628
  /** The name of the calendar's grid of days, read by screen readers. */
@@ -4581,14 +4761,14 @@ window has no room for that width it shows one month until there is. */
4581
4761
  /** The message shown when a range holds more than two dates.
4582
4762
 
4583
4763
  **Every sentence a control raises in the browser's bubble is a property**,
4584
- so a form in another language speaks it. Absent is the control's own
4585
- sentence, in English. */
4764
+ so a form in another language speaks it. Unset is the sentence registered
4765
+ for the page's language, then the English. */
4586
4766
  "range-length-message"?: (HelixHeadlessDateInput["rangeLengthMessage"]) | undefined;
4587
4767
  /** The message shown when a range holds more than two dates.
4588
4768
 
4589
4769
  **Every sentence a control raises in the browser's bubble is a property**,
4590
- so a form in another language speaks it. Absent is the control's own
4591
- sentence, in English. */
4770
+ so a form in another language speaks it. Unset is the sentence registered
4771
+ for the page's language, then the English. */
4592
4772
  rangeLengthMessage?: (HelixHeadlessDateInput["rangeLengthMessage"]) | undefined;
4593
4773
  /** The message shown when a date is after `max`. `{max}` is replaced with
4594
4774
  `max`, written the way the field writes dates. */
@@ -4639,12 +4819,28 @@ platform's base. */
4639
4819
  /** The name of the calendar's heading where it shows a page of years, with
4640
4820
  `{heading}` filled in. */
4641
4821
  yearViewLabel?: (HelixHeadlessDateInput["yearViewLabel"]) | undefined;
4822
+ /** What a row of segments reports when the field is required and every
4823
+ segment is empty, where `value-missing-message` is not set. `{kind}` is
4824
+ `date` or `time`. */
4825
+ "empty-message"?: (HelixHeadlessDateInput["emptyMessage"]) | undefined;
4826
+ /** What a row of segments reports when the field is required and every
4827
+ segment is empty, where `value-missing-message` is not set. `{kind}` is
4828
+ `date` or `time`. */
4829
+ emptyMessage?: (HelixHeadlessDateInput["emptyMessage"]) | undefined;
4642
4830
  /** What a screen reader hears for a segment with nothing in it, which a
4643
4831
  sighted reader sees as dashes. */
4644
4832
  "empty-segment-label"?: (HelixHeadlessDateInput["emptySegmentLabel"]) | undefined;
4645
4833
  /** What a screen reader hears for a segment with nothing in it, which a
4646
4834
  sighted reader sees as dashes. */
4647
4835
  emptySegmentLabel?: (HelixHeadlessDateInput["emptySegmentLabel"]) | undefined;
4836
+ /** What a row of segments reports while some segments are set and others
4837
+ are not, where `bad-input-message` is not set. `{kind}` is `date` or
4838
+ `time`. */
4839
+ "incomplete-message"?: (HelixHeadlessDateInput["incompleteMessage"]) | undefined;
4840
+ /** What a row of segments reports while some segments are set and others
4841
+ are not, where `bad-input-message` is not set. `{kind}` is `date` or
4842
+ `time`. */
4843
+ incompleteMessage?: (HelixHeadlessDateInput["incompleteMessage"]) | undefined;
4648
4844
  /** Whether the field is a row of segments, one for each part of the date or
4649
4845
  time, in place of a line of text.
4650
4846
 
@@ -4726,6 +4922,12 @@ as `+3`, does not say what it does. */
4726
4922
  "max-tags"?: (HelixHeadlessDateInput["maxTags"] | `${number}`) | undefined;
4727
4923
  /** How many tokens to show before the rest become a count. */
4728
4924
  maxTags?: (HelixHeadlessDateInput["maxTags"]) | undefined;
4925
+ /** The count of the tokens past `max-tags`, as it is shown, with `{count}`
4926
+ for the number, written in the element's locale. */
4927
+ "rest-text"?: (HelixHeadlessDateInput["restText"]) | undefined;
4928
+ /** The count of the tokens past `max-tags`, as it is shown, with `{count}`
4929
+ for the number, written in the element's locale. */
4930
+ restText?: (HelixHeadlessDateInput["restText"]) | undefined;
4729
4931
  /** The value the control starts with. A form reset returns it to this value,
4730
4932
  and to the `value` attribute where this one is not written, as a native
4731
4933
  control resets to the `value` it declares. */
@@ -4755,18 +4957,22 @@ browser's message. */
4755
4957
  required?: (HelixHeadlessDateInput["required"]) | undefined;
4756
4958
  /** The message shown when the field is required and empty.
4757
4959
 
4758
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
4759
- set and the browser's own on a text field, which the browser writes in
4760
- the reader's language. Every other word a control speaks is a property,
4960
+ **Absent, or empty, is the control's own sentence**, "Choose one to
4961
+ continue." on a set and the browser's own on a text field, which the
4962
+ browser writes in the reader's language. A family with a sentence of its
4963
+ own declares it as this property's English, a word property a page
4964
+ registers for its locale under the family's key. Every other word a control speaks is a property,
4761
4965
  and this one was the English a form in another language still spoke in
4762
4966
  the bubble it raises on submit: `feedback` replaces the message under
4763
4967
  the field and does not reach that one. */
4764
4968
  "value-missing-message"?: (HelixHeadlessDateInput["valueMissingMessage"]) | undefined;
4765
4969
  /** The message shown when the field is required and empty.
4766
4970
 
4767
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
4768
- set and the browser's own on a text field, which the browser writes in
4769
- the reader's language. Every other word a control speaks is a property,
4971
+ **Absent, or empty, is the control's own sentence**, "Choose one to
4972
+ continue." on a set and the browser's own on a text field, which the
4973
+ browser writes in the reader's language. A family with a sentence of its
4974
+ own declares it as this property's English, a word property a page
4975
+ registers for its locale under the family's key. Every other word a control speaks is a property,
4770
4976
  and this one was the English a form in another language still spoke in
4771
4977
  the bubble it raises on submit: `feedback` replaces the message under
4772
4978
  the field and does not reach that one. */
@@ -4853,14 +5059,28 @@ export type HelixHeadlessDatePickerVueProps = {
4853
5059
 
4854
5060
  **Every sentence a control raises in the browser's bubble is a property**,
4855
5061
  named for the validity flag it reports, so a form in another language
4856
- speaks it. Absent is the control's own sentence, in English. */
5062
+ speaks it. Unset is the sentence registered for the page's language, then
5063
+ the English. `{mode}` is `single`, `range` or `multiple`, so each can have
5064
+ its own sentence. */
4857
5065
  "bad-input-message"?: (HelixHeadlessDatePicker["badInputMessage"]) | undefined;
4858
5066
  /** The validation message for a value that is not a date.
4859
5067
 
4860
5068
  **Every sentence a control raises in the browser's bubble is a property**,
4861
5069
  named for the validity flag it reports, so a form in another language
4862
- speaks it. Absent is the control's own sentence, in English. */
5070
+ speaks it. Unset is the sentence registered for the page's language, then
5071
+ the English. `{mode}` is `single`, `range` or `multiple`, so each can have
5072
+ its own sentence. */
4863
5073
  badInputMessage?: (HelixHeadlessDatePicker["badInputMessage"]) | undefined;
5074
+ /** The calendar the heading, the days, and the months are written in:
5075
+ `gregory`, `buddhist`, `japanese`, `roc`, or `iso8601`, the five whose
5076
+ months are the Gregorian months.
5077
+
5078
+ Absent is the locale's own where it is one of the five, such as
5079
+ `buddhist` for `th-TH` or `japanese` for `ja-JP-u-ca-japanese`, and
5080
+ `gregory` for every other, such as `persian` for `fa-IR`, so the heading
5081
+ names the Gregorian month the grid shows. The value is `YYYY-MM-DD` in
5082
+ every calendar. */
5083
+ calendar?: (HelixHeadlessDatePicker["calendar"]) | undefined;
4864
5084
  /** The month to open on when `month` is not set. */
4865
5085
  "default-month"?: (HelixHeadlessDatePicker["defaultMonth"]) | undefined;
4866
5086
  /** The month to open on when `month` is not set. */
@@ -5237,6 +5457,12 @@ interface. */
5237
5457
  /** The close control's accessible name. Translate it with the rest of your
5238
5458
  interface. */
5239
5459
  dismissLabel?: (HelixHeadlessDialog["dismissLabel"]) | undefined;
5460
+ /** The dialog's name where nothing names it: no `label`, no heading in the
5461
+ `header` slot, and no `aria-labelledby` on the host. */
5462
+ "fallback-label"?: (HelixHeadlessDialog["fallbackLabel"]) | undefined;
5463
+ /** The dialog's name where nothing names it: no `label`, no heading in the
5464
+ `header` slot, and no `aria-labelledby` on the host. */
5465
+ fallbackLabel?: (HelixHeadlessDialog["fallbackLabel"]) | undefined;
5240
5466
  /** Accessible name for the dialog. When it is empty, the heading in the
5241
5467
  `header` slot names the dialog. */
5242
5468
  label?: (HelixHeadlessDialog["label"]) | undefined;
@@ -5396,8 +5622,8 @@ words and is already written. */
5396
5622
  /** The locale the chart's own numbers are written in: its axis, its
5397
5623
  percentages and its totals, such as `de` for `1.240` and `32 %`.
5398
5624
 
5399
- Absent uses the runtime's own. The table's cells are shown as the table
5400
- writes them, whatever this says. */
5625
+ Absent reads the nearest `lang`, then the runtime's own. The table's
5626
+ cells are shown as the table writes them, whatever this says. */
5401
5627
  locale?: (HelixHeadlessDonutChart["locale"]) | undefined;
5402
5628
  /** Where a reading the keys moved to stands among the readings, said after
5403
5629
  it. `{position}` and `{count}` are replaced with the numbers, written in
@@ -5468,6 +5694,12 @@ interface. */
5468
5694
  /** The close control's accessible name. Translate it with the rest of your
5469
5695
  interface. */
5470
5696
  dismissLabel?: (HelixHeadlessDrawer["dismissLabel"]) | undefined;
5697
+ /** The panel's name where nothing names it: no `label`, no heading in the
5698
+ `header` slot, and no `aria-labelledby` on the host. */
5699
+ "fallback-label"?: (HelixHeadlessDrawer["fallbackLabel"]) | undefined;
5700
+ /** The panel's name where nothing names it: no `label`, no heading in the
5701
+ `header` slot, and no `aria-labelledby` on the host. */
5702
+ fallbackLabel?: (HelixHeadlessDrawer["fallbackLabel"]) | undefined;
5471
5703
  /** Accessible name for the panel. When it is empty, the heading in the
5472
5704
  `header` slot names the panel. */
5473
5705
  label?: (HelixHeadlessDrawer["label"]) | undefined;
@@ -5683,14 +5915,20 @@ filter is the only check the platform makes and a drop never meets it. */
5683
5915
  /** What a reader hears when a drop or a paste adds files, with `{names}` and
5684
5916
  `{count}` filled in. */
5685
5917
  addedText?: (HelixHeadlessFileInput["addedText"]) | undefined;
5918
+ /** A file's size under a kilobyte. `{count}` is how many bytes, written in
5919
+ the locale, and each language writes the forms it has. */
5920
+ "bytes-label"?: (HelixHeadlessFileInput["bytesLabel"]) | undefined;
5921
+ /** A file's size under a kilobyte. `{count}` is how many bytes, written in
5922
+ the locale, and each language writes the forms it has. */
5923
+ bytesLabel?: (HelixHeadlessFileInput["bytesLabel"]) | undefined;
5686
5924
  /** Which camera or microphone a mobile picker should offer, if any. */
5687
5925
  capture?: (HelixHeadlessFileInput["capture"]) | undefined;
5688
5926
  /** Whether the picker chooses a folder, and the field takes every file in
5689
5927
  it. The platform's `webkitdirectory`. */
5690
5928
  directory?: (HelixHeadlessFileInput["directory"]) | undefined;
5691
- /** Language tag the sizes are written in.
5692
-
5693
- Absent uses the runtime's own. */
5929
+ /** The locale the words, the sizes, and the numbers and lists in sentences
5930
+ are in, as a BCP 47 tag such as `pl`. Empty reads the nearest `lang`, then
5931
+ the browser's language. */
5694
5932
  locale?: (HelixHeadlessFileInput["locale"]) | undefined;
5695
5933
  /** The most files the field holds, under `multiple`. Files past it are
5696
5934
  refused. */
@@ -5752,18 +5990,22 @@ browser's message. */
5752
5990
  required?: (HelixHeadlessFileInput["required"]) | undefined;
5753
5991
  /** The message shown when the field is required and empty.
5754
5992
 
5755
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
5756
- set and the browser's own on a text field, which the browser writes in
5757
- the reader's language. Every other word a control speaks is a property,
5993
+ **Absent, or empty, is the control's own sentence**, "Choose one to
5994
+ continue." on a set and the browser's own on a text field, which the
5995
+ browser writes in the reader's language. A family with a sentence of its
5996
+ own declares it as this property's English, a word property a page
5997
+ registers for its locale under the family's key. Every other word a control speaks is a property,
5758
5998
  and this one was the English a form in another language still spoke in
5759
5999
  the bubble it raises on submit: `feedback` replaces the message under
5760
6000
  the field and does not reach that one. */
5761
6001
  "value-missing-message"?: (HelixHeadlessFileInput["valueMissingMessage"]) | undefined;
5762
6002
  /** The message shown when the field is required and empty.
5763
6003
 
5764
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
5765
- set and the browser's own on a text field, which the browser writes in
5766
- the reader's language. Every other word a control speaks is a property,
6004
+ **Absent, or empty, is the control's own sentence**, "Choose one to
6005
+ continue." on a set and the browser's own on a text field, which the
6006
+ browser writes in the reader's language. A family with a sentence of its
6007
+ own declares it as this property's English, a word property a page
6008
+ registers for its locale under the family's key. Every other word a control speaks is a property,
5767
6009
  and this one was the English a form in another language still spoke in
5768
6010
  the bubble it raises on submit: `feedback` replaces the message under
5769
6011
  the field and does not reach that one. */
@@ -5829,6 +6071,20 @@ export type HelixHeadlessFilterChipHelixDismissElementEvent =
5829
6071
  HelixHeadlessFilterChipElementEvent<HelixDismissEvent>;
5830
6072
 
5831
6073
  export type HelixHeadlessFilterChipVueProps = {
6074
+ /** The remove button's name, read by screen readers. The chip's own words
6075
+ follow it, so several chips are told apart.
6076
+
6077
+ "Remove filter" rather than the mixin's "Dismiss", for the reason `Tag`
6078
+ gives its own: taking a filter out of a set is a different act from
6079
+ closing a message. */
6080
+ "dismiss-label"?: (HelixHeadlessFilterChip["dismissLabel"]) | undefined;
6081
+ /** The remove button's name, read by screen readers. The chip's own words
6082
+ follow it, so several chips are told apart.
6083
+
6084
+ "Remove filter" rather than the mixin's "Dismiss", for the reason `Tag`
6085
+ gives its own: taking a filter out of a set is a different act from
6086
+ closing a message. */
6087
+ dismissLabel?: (HelixHeadlessFilterChip["dismissLabel"]) | undefined;
5832
6088
  /** The name of the field the filter is on, as shown on the chip.
5833
6089
 
5834
6090
  The slot's fallback rather than the slot's replacement: a consumer who wants
@@ -5877,20 +6133,6 @@ makes an unusual filter look unusual. */
5877
6133
  operatorLabel?: (HelixHeadlessFilterChip["operatorLabel"]) | undefined;
5878
6134
  /** Whether the element shows a control that dismisses it. */
5879
6135
  dismissible?: (HelixHeadlessFilterChip["dismissible"]) | undefined;
5880
- /** The dismiss control's label, read by screen readers.
5881
-
5882
- `attribute` is spelled out because Lit lowercases a property name to
5883
- derive one rather than dash-casing it, so this would otherwise be
5884
- reachable only as `dismisslabel`, which nobody would guess and no linter
5885
- would catch. */
5886
- "dismiss-label"?: (HelixHeadlessFilterChip["dismissLabel"]) | undefined;
5887
- /** The dismiss control's label, read by screen readers.
5888
-
5889
- `attribute` is spelled out because Lit lowercases a property name to
5890
- derive one rather than dash-casing it, so this would otherwise be
5891
- reachable only as `dismisslabel`, which nobody would guess and no linter
5892
- would catch. */
5893
- dismissLabel?: (HelixHeadlessFilterChip["dismissLabel"]) | undefined;
5894
6136
  };
5895
6137
 
5896
6138
  export type HelixHeadlessFilterChipVueEvents = {
@@ -6040,13 +6282,21 @@ what you slot and you narrow it. */
6040
6282
 
6041
6283
  Not a label: it goes when typing starts. */
6042
6284
  placeholder?: (HelixHeadlessFilterInput["placeholder"]) | undefined;
6043
- /** What a reader hears for one suggestion, with `{count}` filled in. */
6285
+ /** What a reader hears for one suggestion, where `suggestions-label` should
6286
+ not say it. `{count}` is the count. */
6044
6287
  "suggestion-label"?: (HelixHeadlessFilterInput["suggestionLabel"]) | undefined;
6045
- /** What a reader hears for one suggestion, with `{count}` filled in. */
6288
+ /** What a reader hears for one suggestion, where `suggestions-label` should
6289
+ not say it. `{count}` is the count. */
6046
6290
  suggestionLabel?: (HelixHeadlessFilterInput["suggestionLabel"]) | undefined;
6047
- /** What a reader hears for any other number of suggestions, with `{count}` filled in. */
6291
+ /** What a reader hears as the panel opens on its suggestions. `{count}` is
6292
+ how many, written in the locale, and each language writes the forms it
6293
+ has: `{count, plural, one {# sugestia} few {# sugestie} many {# sugestii}
6294
+ other {# sugestii}}`. */
6048
6295
  "suggestions-label"?: (HelixHeadlessFilterInput["suggestionsLabel"]) | undefined;
6049
- /** What a reader hears for any other number of suggestions, with `{count}` filled in. */
6296
+ /** What a reader hears as the panel opens on its suggestions. `{count}` is
6297
+ how many, written in the locale, and each language writes the forms it
6298
+ has: `{count, plural, one {# sugestia} few {# sugestie} many {# sugestii}
6299
+ other {# sugestii}}`. */
6050
6300
  suggestionsLabel?: (HelixHeadlessFilterInput["suggestionsLabel"]) | undefined;
6051
6301
  /** Whether the element starts open. Ignored once `open` is written. */
6052
6302
  "default-open"?: (HelixHeadlessFilterInput["defaultOpen"]) | undefined;
@@ -6081,6 +6331,12 @@ as `+3`, does not say what it does. */
6081
6331
  "max-tags"?: (HelixHeadlessFilterInput["maxTags"] | `${number}`) | undefined;
6082
6332
  /** How many tokens to show before the rest become a count. */
6083
6333
  maxTags?: (HelixHeadlessFilterInput["maxTags"]) | undefined;
6334
+ /** The count of the tokens past `max-tags`, as it is shown, with `{count}`
6335
+ for the number, written in the element's locale. */
6336
+ "rest-text"?: (HelixHeadlessFilterInput["restText"]) | undefined;
6337
+ /** The count of the tokens past `max-tags`, as it is shown, with `{count}`
6338
+ for the number, written in the element's locale. */
6339
+ restText?: (HelixHeadlessFilterInput["restText"]) | undefined;
6084
6340
  /** The value the control starts with. A form reset returns it to this value,
6085
6341
  and to the `value` attribute where this one is not written, as a native
6086
6342
  control resets to the `value` it declares. */
@@ -6110,18 +6366,22 @@ browser's message. */
6110
6366
  required?: (HelixHeadlessFilterInput["required"]) | undefined;
6111
6367
  /** The message shown when the field is required and empty.
6112
6368
 
6113
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
6114
- set and the browser's own on a text field, which the browser writes in
6115
- the reader's language. Every other word a control speaks is a property,
6369
+ **Absent, or empty, is the control's own sentence**, "Choose one to
6370
+ continue." on a set and the browser's own on a text field, which the
6371
+ browser writes in the reader's language. A family with a sentence of its
6372
+ own declares it as this property's English, a word property a page
6373
+ registers for its locale under the family's key. Every other word a control speaks is a property,
6116
6374
  and this one was the English a form in another language still spoke in
6117
6375
  the bubble it raises on submit: `feedback` replaces the message under
6118
6376
  the field and does not reach that one. */
6119
6377
  "value-missing-message"?: (HelixHeadlessFilterInput["valueMissingMessage"]) | undefined;
6120
6378
  /** The message shown when the field is required and empty.
6121
6379
 
6122
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
6123
- set and the browser's own on a text field, which the browser writes in
6124
- the reader's language. Every other word a control speaks is a property,
6380
+ **Absent, or empty, is the control's own sentence**, "Choose one to
6381
+ continue." on a set and the browser's own on a text field, which the
6382
+ browser writes in the reader's language. A family with a sentence of its
6383
+ own declares it as this property's English, a word property a page
6384
+ registers for its locale under the family's key. Every other word a control speaks is a property,
6125
6385
  and this one was the English a form in another language still spoke in
6126
6386
  the bubble it raises on submit: `feedback` replaces the message under
6127
6387
  the field and does not reach that one. */
@@ -6176,6 +6436,14 @@ export type HelixHeadlessFilterInputVueEvents = {
6176
6436
  };
6177
6437
 
6178
6438
  export type HelixHeadlessFormatDateVueProps = {
6439
+ /** The calendar a date is written in: `gregory`, `buddhist`, `japanese`,
6440
+ `roc`, or `iso8601`, the calendars Date Picker and Date Input draw.
6441
+
6442
+ Absent is the locale's own where it is one of the five, such as
6443
+ `buddhist` for `th-TH`, and `gregory` for every other, such as `persian`
6444
+ for `fa-IR`, so a date written here reads as the same date a Date Picker
6445
+ beside it shows. */
6446
+ calendar?: (HelixHeadlessFormatDate["calendar"]) | undefined;
6179
6447
  /** The timestamp, in any format `Date` can parse.
6180
6448
 
6181
6449
  An ISO string is what an API sends and what `<time datetime>` takes, so it
@@ -6325,13 +6593,33 @@ export type HelixHeadlessGraphHelixGraphZoomElementEvent =
6325
6593
  HelixHeadlessGraphElementEvent<HelixGraphZoomEvent>;
6326
6594
 
6327
6595
  export type HelixHeadlessGraphVueProps = {
6328
- /** What the list says of a note's count, with `{count}`. */
6596
+ /** The hint shown when the graph, waiting to be pressed with
6597
+ `gestures="activate"`, is scrolled or swiped over. */
6598
+ "activate-hint-label"?: (HelixHeadlessGraph["activateHintLabel"]) | undefined;
6599
+ /** The hint shown when the graph, waiting to be pressed with
6600
+ `gestures="activate"`, is scrolled or swiped over. */
6601
+ activateHintLabel?: (HelixHeadlessGraph["activateHintLabel"]) | undefined;
6602
+ /** The name of the group of controls, read by screen readers, which names
6603
+ what the controls drive rather than the mechanism. */
6604
+ "controls-label"?: (HelixHeadlessGraph["controlsLabel"]) | undefined;
6605
+ /** The name of the group of controls, read by screen readers, which names
6606
+ what the controls drive rather than the mechanism. */
6607
+ controlsLabel?: (HelixHeadlessGraph["controlsLabel"]) | undefined;
6608
+ /** What the list says of how many notes it holds. `{count}` is the count,
6609
+ written in the locale, and each language writes the forms it has. */
6329
6610
  "count-label"?: (HelixHeadlessGraph["countLabel"]) | undefined;
6330
- /** What the list says of a note's count, with `{count}`. */
6611
+ /** What the list says of how many notes it holds. `{count}` is the count,
6612
+ written in the locale, and each language writes the forms it has. */
6331
6613
  countLabel?: (HelixHeadlessGraph["countLabel"]) | undefined;
6332
6614
  /** How many links from the selected note to show, for its local graph. Unset
6333
6615
  shows every note. The list holds what the drawing shows. */
6334
6616
  depth?: (HelixHeadlessGraph["depth"]) | undefined;
6617
+ /** The graph's name where `label` is empty and the host has no
6618
+ `aria-label`. */
6619
+ "fallback-label"?: (HelixHeadlessGraph["fallbackLabel"]) | undefined;
6620
+ /** The graph's name where `label` is empty and the host has no
6621
+ `aria-label`. */
6622
+ fallbackLabel?: (HelixHeadlessGraph["fallbackLabel"]) | undefined;
6335
6623
  /** The graph's name, read by screen readers, such as "Research notes".
6336
6624
  Required. */
6337
6625
  label?: (HelixHeadlessGraph["label"]) | undefined;
@@ -6354,6 +6642,22 @@ or hides its notes. Drawn where the notes have two groups or more. */
6354
6642
  "links-to-label"?: (HelixHeadlessGraph["linksToLabel"]) | undefined;
6355
6643
  /** How a note that links to the selected one is described, with `{note}`. */
6356
6644
  linksToLabel?: (HelixHeadlessGraph["linksToLabel"]) | undefined;
6645
+ /** What screen readers hear once the drawing has moved down, after `moved()`. */
6646
+ "moved-down-label"?: (HelixHeadlessGraph["movedDownLabel"]) | undefined;
6647
+ /** What screen readers hear once the drawing has moved down, after `moved()`. */
6648
+ movedDownLabel?: (HelixHeadlessGraph["movedDownLabel"]) | undefined;
6649
+ /** What screen readers hear once the drawing has moved left, after `moved()`. */
6650
+ "moved-left-label"?: (HelixHeadlessGraph["movedLeftLabel"]) | undefined;
6651
+ /** What screen readers hear once the drawing has moved left, after `moved()`. */
6652
+ movedLeftLabel?: (HelixHeadlessGraph["movedLeftLabel"]) | undefined;
6653
+ /** What screen readers hear once the drawing has moved right, after `moved()`. */
6654
+ "moved-right-label"?: (HelixHeadlessGraph["movedRightLabel"]) | undefined;
6655
+ /** What screen readers hear once the drawing has moved right, after `moved()`. */
6656
+ movedRightLabel?: (HelixHeadlessGraph["movedRightLabel"]) | undefined;
6657
+ /** What screen readers hear once the drawing has moved up, after `moved()`. */
6658
+ "moved-up-label"?: (HelixHeadlessGraph["movedUpLabel"]) | undefined;
6659
+ /** What screen readers hear once the drawing has moved up, after `moved()`. */
6660
+ movedUpLabel?: (HelixHeadlessGraph["movedUpLabel"]) | undefined;
6357
6661
  /** Leaves the search and the list out of the frame, behind a button among
6358
6662
  its controls that opens them over the drawing. For a graph shown large,
6359
6663
  such as at the top of a page, where the drawing takes the whole frame. */
@@ -6374,12 +6678,28 @@ such as at the top of a page, where the drawing takes the whole frame. */
6374
6678
  "selected-label"?: (HelixHeadlessGraph["selectedLabel"]) | undefined;
6375
6679
  /** How the selected note is described in the list. */
6376
6680
  selectedLabel?: (HelixHeadlessGraph["selectedLabel"]) | undefined;
6377
- /** The hint shown when a surface waiting to be pressed is scrolled or
6378
- swiped over, with `gestures="activate"`. Absent is the family's own. */
6379
- "activate-hint-label"?: (HelixHeadlessGraph["activateHintLabel"]) | undefined;
6380
- /** The hint shown when a surface waiting to be pressed is scrolled or
6381
- swiped over, with `gestures="activate"`. Absent is the family's own. */
6382
- activateHintLabel?: (HelixHeadlessGraph["activateHintLabel"]) | undefined;
6681
+ /** The hint shown when one finger swipes over the graph with `gestures="cooperative"`. */
6682
+ "two-finger-hint-label"?: (HelixHeadlessGraph["twoFingerHintLabel"]) | undefined;
6683
+ /** The hint shown when one finger swipes over the graph with `gestures="cooperative"`. */
6684
+ twoFingerHintLabel?: (HelixHeadlessGraph["twoFingerHintLabel"]) | undefined;
6685
+ /** The line shown while the graph, with `gestures="activate"`, has the gestures. */
6686
+ "using-label"?: (HelixHeadlessGraph["usingLabel"]) | undefined;
6687
+ /** The line shown while the graph, with `gestures="activate"`, has the gestures. */
6688
+ usingLabel?: (HelixHeadlessGraph["usingLabel"]) | undefined;
6689
+ /** The hint shown when the wheel scrolls past the graph with
6690
+ `gestures="cooperative"`. `{key}` is ⌘ on a Mac and Ctrl elsewhere. */
6691
+ "wheel-hint-label"?: (HelixHeadlessGraph["wheelHintLabel"]) | undefined;
6692
+ /** The hint shown when the wheel scrolls past the graph with
6693
+ `gestures="cooperative"`. `{key}` is ⌘ on a Mac and Ctrl elsewhere. */
6694
+ wheelHintLabel?: (HelixHeadlessGraph["wheelHintLabel"]) | undefined;
6695
+ /** What screen readers hear once the drawing has zoomed in, after `moved()`. */
6696
+ "zoomed-in-label"?: (HelixHeadlessGraph["zoomedInLabel"]) | undefined;
6697
+ /** What screen readers hear once the drawing has zoomed in, after `moved()`. */
6698
+ zoomedInLabel?: (HelixHeadlessGraph["zoomedInLabel"]) | undefined;
6699
+ /** What screen readers hear once the drawing has zoomed out, after `moved()`. */
6700
+ "zoomed-out-label"?: (HelixHeadlessGraph["zoomedOutLabel"]) | undefined;
6701
+ /** What screen readers hear once the drawing has zoomed out, after `moved()`. */
6702
+ zoomedOutLabel?: (HelixHeadlessGraph["zoomedOutLabel"]) | undefined;
6383
6703
  /** Which controls to show, as a list such as `pan zoom fullscreen`, or
6384
6704
  `none`. A family can add words of its own.
6385
6705
 
@@ -6402,20 +6722,6 @@ of the frame. The
6402
6722
  stylesheet lays the cluster out by which buttons are in it rather than by
6403
6723
  this attribute, so the two defaults need no rule each. */
6404
6724
  controls?: (HelixHeadlessGraph["controls"]) | undefined;
6405
- /** The name of the group of controls, read by screen readers.
6406
-
6407
- Absent is the family's own name for it, "Map controls" or "Board
6408
- controls", which names what the controls drive rather than the
6409
- mechanism. Written here to say it in another language, which every other
6410
- string this surface speaks already allowed and this one did not. */
6411
- "controls-label"?: (HelixHeadlessGraph["controlsLabel"]) | undefined;
6412
- /** The name of the group of controls, read by screen readers.
6413
-
6414
- Absent is the family's own name for it, "Map controls" or "Board
6415
- controls", which names what the controls drive rather than the
6416
- mechanism. Written here to say it in another language, which every other
6417
- string this surface speaks already allowed and this one did not. */
6418
- controlsLabel?: (HelixHeadlessGraph["controlsLabel"]) | undefined;
6419
6725
  /** Which corner the controls sit in.
6420
6726
 
6421
6727
  **Configurable because there is no safe default**, which is a collision
@@ -6518,26 +6824,6 @@ at any zoom, and a consumer who wants their own units multiplies by them. */
6518
6824
  "pan-up-label"?: (HelixHeadlessGraph["panUpLabel"]) | undefined;
6519
6825
  /** The pan up button's label. */
6520
6826
  panUpLabel?: (HelixHeadlessGraph["panUpLabel"]) | undefined;
6521
- /** The hint shown when one finger swipes over a surface with
6522
- `gestures="cooperative"`. Absent is the family's own. */
6523
- "two-finger-hint-label"?: (HelixHeadlessGraph["twoFingerHintLabel"]) | undefined;
6524
- /** The hint shown when one finger swipes over a surface with
6525
- `gestures="cooperative"`. Absent is the family's own. */
6526
- twoFingerHintLabel?: (HelixHeadlessGraph["twoFingerHintLabel"]) | undefined;
6527
- /** The line shown while a surface with `gestures="activate"` has the
6528
- gestures. Absent is the family's own. */
6529
- "using-label"?: (HelixHeadlessGraph["usingLabel"]) | undefined;
6530
- /** The line shown while a surface with `gestures="activate"` has the
6531
- gestures. Absent is the family's own. */
6532
- usingLabel?: (HelixHeadlessGraph["usingLabel"]) | undefined;
6533
- /** The hint shown when the wheel scrolls past a surface with
6534
- `gestures="cooperative"`, with `{key}`, which is ⌘ on a Mac and Ctrl
6535
- elsewhere. Absent is the family's own. */
6536
- "wheel-hint-label"?: (HelixHeadlessGraph["wheelHintLabel"]) | undefined;
6537
- /** The hint shown when the wheel scrolls past a surface with
6538
- `gestures="cooperative"`, with `{key}`, which is ⌘ on a Mac and Ctrl
6539
- elsewhere. Absent is the family's own. */
6540
- wheelHintLabel?: (HelixHeadlessGraph["wheelHintLabel"]) | undefined;
6541
6827
  /** The zoom in button's label. */
6542
6828
  "zoom-in-label"?: (HelixHeadlessGraph["zoomInLabel"]) | undefined;
6543
6829
  /** The zoom in button's label. */
@@ -6580,7 +6866,7 @@ export type HelixHeadlessGraphVueEvents = {
6580
6866
  "helix-graph-filter": HelixHeadlessGraphHelixGraphFilterElementEvent;
6581
6867
  /** A layout settled, with where it put each note, sent by `laidOut()`. Keep the positions and pass them back as each note's `x` and `y`, and `z` where a renderer draws in three dimensions. */
6582
6868
  "helix-graph-layout": HelixHeadlessGraphHelixGraphLayoutElementEvent;
6583
- /** A pan button or arrow key was pressed. `connectGraph` moves the drawing. */
6869
+ /** A pan button or arrow key was pressed. `connectGraph` moves the drawing, then calls `moved()`. */
6584
6870
  "helix-graph-pan": HelixHeadlessGraphHelixGraphPanElementEvent;
6585
6871
  /** The notes, the links, the selection, the depth or the gestures changed. Used by `connectGraph`; pages do not need to listen for it. */
6586
6872
  "helix-graph-part-change": HelixHeadlessGraphHelixGraphPartChangeElementEvent;
@@ -6588,7 +6874,7 @@ export type HelixHeadlessGraphVueEvents = {
6588
6874
  "helix-graph-ready": HelixHeadlessGraphHelixGraphReadyElementEvent;
6589
6875
  /** Something passed between two notes, sent by `signal()`. Used by `connectGraph`; pages do not need to listen for it. */
6590
6876
  "helix-graph-signal": HelixHeadlessGraphHelixGraphSignalElementEvent;
6591
- /** A zoom button or key was pressed. `connectGraph` zooms the drawing. */
6877
+ /** A zoom button or key was pressed. `connectGraph` zooms the drawing, then calls `moved()`. */
6592
6878
  "helix-graph-zoom": HelixHeadlessGraphHelixGraphZoomElementEvent;
6593
6879
  };
6594
6880
 
@@ -6605,9 +6891,11 @@ export type HelixHeadlessHeatmapHelixResizeElementEvent =
6605
6891
  HelixHeadlessHeatmapElementEvent<HelixResizeEvent>;
6606
6892
 
6607
6893
  export type HelixHeadlessHeatmapVueProps = {
6608
- /** The word the `overview` puts before the busiest reading. */
6894
+ /** The name the `overview` gives the busiest reading, `{busiestLabel}` in
6895
+ `overview-label`. */
6609
6896
  "busiest-label"?: (HelixHeadlessHeatmap["busiestLabel"]) | undefined;
6610
- /** The word the `overview` puts before the busiest reading. */
6897
+ /** The name the `overview` gives the busiest reading, `{busiestLabel}` in
6898
+ `overview-label`. */
6611
6899
  busiestLabel?: (HelixHeadlessHeatmap["busiestLabel"]) | undefined;
6612
6900
  /** Shown when the table has no readings in it.
6613
6901
 
@@ -6658,6 +6946,16 @@ plan around.
6658
6946
  Zero turns the dropping off altogether, which is right for a strip in a
6659
6947
  container that cannot get narrow. */
6660
6948
  minCell?: (HelixHeadlessHeatmap["minCell"]) | undefined;
6949
+ /** The `overview`'s sentence. `{busiestLabel}` and `{totalLabel}` are
6950
+ `busiest-label` and `total-label`, `{busiest}` the busiest reading's name
6951
+ and its reading as the table writes it, and `{total}` the total of the
6952
+ readings drawn, written in the locale. */
6953
+ "overview-label"?: (HelixHeadlessHeatmap["overviewLabel"]) | undefined;
6954
+ /** The `overview`'s sentence. `{busiestLabel}` and `{totalLabel}` are
6955
+ `busiest-label` and `total-label`, `{busiest}` the busiest reading's name
6956
+ and its reading as the table writes it, and `{total}` the total of the
6957
+ readings drawn, written in the locale. */
6958
+ overviewLabel?: (HelixHeadlessHeatmap["overviewLabel"]) | undefined;
6661
6959
  /** How many rows the strip has.
6662
6960
 
6663
6961
  `1` is a status strip and `7` is a calendar week, which are the two readings
@@ -6674,11 +6972,15 @@ nothing. */
6674
6972
  where the cell stands: "Day 1: 0 (1 of 14, selected)". Empty adds
6675
6973
  nothing. */
6676
6974
  selectedLabel?: (HelixHeadlessHeatmap["selectedLabel"]) | undefined;
6677
- /** What the `selection` part says after the selection changes, with `{count}` for
6678
- how many cells are selected. */
6975
+ /** What the `selection` part says after the selection changes. `{count}` is
6976
+ how many cells are selected, written in the locale, and a language that
6977
+ needs plural forms writes them: `{count, plural, one {# wybrany} few
6978
+ {# wybrane} many {# wybranych} other {# wybranego}}`. */
6679
6979
  "selection-label"?: (HelixHeadlessHeatmap["selectionLabel"]) | undefined;
6680
- /** What the `selection` part says after the selection changes, with `{count}` for
6681
- how many cells are selected. */
6980
+ /** What the `selection` part says after the selection changes. `{count}` is
6981
+ how many cells are selected, written in the locale, and a language that
6982
+ needs plural forms writes them: `{count, plural, one {# wybrany} few
6983
+ {# wybrane} many {# wybranych} other {# wybranego}}`. */
6682
6984
  selectionLabel?: (HelixHeadlessHeatmap["selectionLabel"]) | undefined;
6683
6985
  /** How many cells a reader can select: `single` or `multiple`.
6684
6986
 
@@ -6688,6 +6990,12 @@ Absent selects nothing, and a press or Space does what it did. */
6688
6990
 
6689
6991
  Absent selects nothing, and a press or Space does what it did. */
6690
6992
  selectionMode?: (HelixHeadlessHeatmap["selectionMode"]) | undefined;
6993
+ /** The strip's name where the chart has none: no `aria-label`, `label`, or
6994
+ table caption. */
6995
+ "strip-label"?: (HelixHeadlessHeatmap["stripLabel"]) | undefined;
6996
+ /** The strip's name where the chart has none: no `aria-label`, `label`, or
6997
+ table caption. */
6998
+ stripLabel?: (HelixHeadlessHeatmap["stripLabel"]) | undefined;
6691
6999
  /** Lower bounds for the tone buckets, in the order the tones are given.
6692
7000
 
6693
7001
  `thresholds="1 3 6 9"` with `tones="1 2 3 4"` puts 1 and 2 in the ramp's
@@ -6706,9 +7014,11 @@ compare two hues at all. `tones="surface info accent success primary"` for a
6706
7014
  commit count is five unrelated hues for five amounts, which is confetti with
6707
7015
  no order in it. */
6708
7016
  tones?: (HelixHeadlessHeatmap["tones"]) | undefined;
6709
- /** The word the `overview` puts before the total of the readings drawn. */
7017
+ /** The name the `overview` gives the total of the readings drawn,
7018
+ `{totalLabel}` in `overview-label`. */
6710
7019
  "total-label"?: (HelixHeadlessHeatmap["totalLabel"]) | undefined;
6711
- /** The word the `overview` puts before the total of the readings drawn. */
7020
+ /** The name the `overview` gives the total of the readings drawn,
7021
+ `{totalLabel}` in `overview-label`. */
6712
7022
  totalLabel?: (HelixHeadlessHeatmap["totalLabel"]) | undefined;
6713
7023
  /** The selected cells, by the names their rows have in the table, such as
6714
7024
  `2026-06-11`, separated by commas.
@@ -6733,8 +7043,8 @@ words and is already written. */
6733
7043
  /** The locale the chart's own numbers are written in: its axis, its
6734
7044
  percentages and its totals, such as `de` for `1.240` and `32 %`.
6735
7045
 
6736
- Absent uses the runtime's own. The table's cells are shown as the table
6737
- writes them, whatever this says. */
7046
+ Absent reads the nearest `lang`, then the runtime's own. The table's
7047
+ cells are shown as the table writes them, whatever this says. */
6738
7048
  locale?: (HelixHeadlessHeatmap["locale"]) | undefined;
6739
7049
  /** Where a reading the keys moved to stands among the readings, said after
6740
7050
  it. `{position}` and `{count}` are replaced with the numbers, written in
@@ -6834,7 +7144,11 @@ not text.
6834
7144
 
6835
7145
  Lives here rather than only on `IconButton` so the two share one render.
6836
7146
  An icon-only button without it is a control a screen reader announces as
6837
- "button" and nothing else. */
7147
+ "button" and nothing else.
7148
+
7149
+ Undefaulted, so a subclass's own default, such as Copy Button's `Copy`, is
7150
+ the first value its element receives and so the English its words fall
7151
+ back to. */
6838
7152
  label?: (HelixHeadlessIconButton["label"]) | undefined;
6839
7153
  /** Whether the action the button started is still running.
6840
7154
 
@@ -7261,18 +7575,22 @@ browser's message. */
7261
7575
  required?: (HelixHeadlessInput["required"]) | undefined;
7262
7576
  /** The message shown when the field is required and empty.
7263
7577
 
7264
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7265
- set and the browser's own on a text field, which the browser writes in
7266
- the reader's language. Every other word a control speaks is a property,
7578
+ **Absent, or empty, is the control's own sentence**, "Choose one to
7579
+ continue." on a set and the browser's own on a text field, which the
7580
+ browser writes in the reader's language. A family with a sentence of its
7581
+ own declares it as this property's English, a word property a page
7582
+ registers for its locale under the family's key. Every other word a control speaks is a property,
7267
7583
  and this one was the English a form in another language still spoke in
7268
7584
  the bubble it raises on submit: `feedback` replaces the message under
7269
7585
  the field and does not reach that one. */
7270
7586
  "value-missing-message"?: (HelixHeadlessInput["valueMissingMessage"]) | undefined;
7271
7587
  /** The message shown when the field is required and empty.
7272
7588
 
7273
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7274
- set and the browser's own on a text field, which the browser writes in
7275
- the reader's language. Every other word a control speaks is a property,
7589
+ **Absent, or empty, is the control's own sentence**, "Choose one to
7590
+ continue." on a set and the browser's own on a text field, which the
7591
+ browser writes in the reader's language. A family with a sentence of its
7592
+ own declares it as this property's English, a word property a page
7593
+ registers for its locale under the family's key. Every other word a control speaks is a property,
7276
7594
  and this one was the English a form in another language still spoke in
7277
7595
  the bubble it raises on submit: `feedback` replaces the message under
7278
7596
  the field and does not reach that one. */
@@ -7547,6 +7865,10 @@ interface. */
7547
7865
  /** The close control's accessible name. Translate it with the rest of your
7548
7866
  interface. */
7549
7867
  dismissLabel?: (HelixHeadlessLightbox["dismissLabel"]) | undefined;
7868
+ /** The viewer's name where `label` is empty. */
7869
+ "fallback-label"?: (HelixHeadlessLightbox["fallbackLabel"]) | undefined;
7870
+ /** The viewer's name where `label` is empty. */
7871
+ fallbackLabel?: (HelixHeadlessLightbox["fallbackLabel"]) | undefined;
7550
7872
  /** How long the user can be idle before the header and footer hide, in
7551
7873
  milliseconds.
7552
7874
 
@@ -7580,10 +7902,10 @@ keep the chrome up is the consumer's to decide with this. */
7580
7902
  /** The previous control's accessible name. */
7581
7903
  previousLabel?: (HelixHeadlessLightbox["previousLabel"]) | undefined;
7582
7904
  /** The name of an item with no `label` of its own, with `{index}` and
7583
- `{count}` filled in. */
7905
+ `{count}` filled in, written in the locale. */
7584
7906
  "slide-label"?: (HelixHeadlessLightbox["slideLabel"]) | undefined;
7585
7907
  /** The name of an item with no `label` of its own, with `{index}` and
7586
- `{count}` filled in. */
7908
+ `{count}` filled in, written in the locale. */
7587
7909
  slideLabel?: (HelixHeadlessLightbox["slideLabel"]) | undefined;
7588
7910
  /** The word screen readers announce in place of an item's role, set as
7589
7911
  `aria-roledescription`. Translate it with the rest of your text, or empty
@@ -7594,14 +7916,14 @@ it to leave the role as `group`. */
7594
7916
  it to leave the role as `group`. */
7595
7917
  slideRoleLabel?: (HelixHeadlessLightbox["slideRoleLabel"]) | undefined;
7596
7918
  /** The status text that says which item is shown, with `{index}`, `{count}`
7597
- and the item's `{label}` filled in.
7919
+ and the item's `{label}` filled in, the numbers written in the locale.
7598
7920
 
7599
7921
  Announced rather than only drawn, because the picture changing under a
7600
7922
  reader who cannot see it is otherwise silent. A consumer who has their own
7601
7923
  counter in the chrome can empty this and say it themselves. */
7602
7924
  "status-label"?: (HelixHeadlessLightbox["statusLabel"]) | undefined;
7603
7925
  /** The status text that says which item is shown, with `{index}`, `{count}`
7604
- and the item's `{label}` filled in.
7926
+ and the item's `{label}` filled in, the numbers written in the locale.
7605
7927
 
7606
7928
  Announced rather than only drawn, because the picture changing under a
7607
7929
  reader who cannot see it is otherwise silent. A consumer who has their own
@@ -7615,11 +7937,17 @@ counter in the chrome can empty this and say it themselves. */
7615
7937
  "zoom-out-label"?: (HelixHeadlessLightbox["zoomOutLabel"]) | undefined;
7616
7938
  /** The zoom-out control's accessible name. */
7617
7939
  zoomOutLabel?: (HelixHeadlessLightbox["zoomOutLabel"]) | undefined;
7618
- /** What the live region says once a reader has stopped zooming, with the
7619
- scale as a whole `{percent}` filled in. Empty it to say nothing. */
7940
+ /** What the live region says once a reader has stopped zooming. `{scale,
7941
+ number, percent}` writes the scale as a percentage the way the locale
7942
+ writes one, such as `150%`, or `150 %` in French. `{percent}` is the same
7943
+ scale as a whole number, for a sentence that places the sign itself. Empty
7944
+ it to say nothing. */
7620
7945
  "zoom-status-label"?: (HelixHeadlessLightbox["zoomStatusLabel"]) | undefined;
7621
- /** What the live region says once a reader has stopped zooming, with the
7622
- scale as a whole `{percent}` filled in. Empty it to say nothing. */
7946
+ /** What the live region says once a reader has stopped zooming. `{scale,
7947
+ number, percent}` writes the scale as a percentage the way the locale
7948
+ writes one, such as `150%`, or `150 %` in French. `{percent}` is the same
7949
+ scale as a whole number, for a sentence that places the sign itself. Empty
7950
+ it to say nothing. */
7623
7951
  zoomStatusLabel?: (HelixHeadlessLightbox["zoomStatusLabel"]) | undefined;
7624
7952
  /** The `value` of the current item.
7625
7953
 
@@ -7797,8 +8125,8 @@ words and is already written. */
7797
8125
  /** The locale the chart's own numbers are written in: its axis, its
7798
8126
  percentages and its totals, such as `de` for `1.240` and `32 %`.
7799
8127
 
7800
- Absent uses the runtime's own. The table's cells are shown as the table
7801
- writes them, whatever this says. */
8128
+ Absent reads the nearest `lang`, then the runtime's own. The table's
8129
+ cells are shown as the table writes them, whatever this says. */
7802
8130
  locale?: (HelixHeadlessLineChart["locale"]) | undefined;
7803
8131
  /** Where a reading the keys moved to stands among the readings, said after
7804
8132
  it. `{position}` and `{count}` are replaced with the numbers, written in
@@ -7862,6 +8190,14 @@ Written by a list with `selection-mode` on every row it holds, and unset
7862
8190
  otherwise, which is how a row knows it is a row of a grid. No attribute:
7863
8191
  it is coordination between elements, as `Tag.focusable` is. */
7864
8192
  focusable?: (HelixHeadlessListItem["focusable"]) | undefined;
8193
+ /** The name of the row's grip, written by a `reorderable` list from its
8194
+ `move-label`, and unset in a list that does not reorder, which draws no
8195
+ grip. No attribute: it is coordination between elements, as `focusable`
8196
+ is. */
8197
+ grip?: (HelixHeadlessListItem["grip"]) | undefined;
8198
+ /** Where the row stands in a move, written by a `reorderable` list: the row
8199
+ being moved, or the one the drop indicator is beside. Unset otherwise. */
8200
+ move?: (HelixHeadlessListItem["move"]) | undefined;
7865
8201
  /** Whether the row is selected, in a list that selects.
7866
8202
 
7867
8203
  Written by the list from its own `value`, and unset where nothing can be
@@ -7885,8 +8221,24 @@ export type HelixHeadlessListHelixActionElementEvent =
7885
8221
  /** `helix-before-change` event type */
7886
8222
  export type HelixHeadlessListHelixBeforeChangeElementEvent =
7887
8223
  HelixHeadlessListElementEvent<HelixBeforeChangeEvent>;
8224
+ /** `helix-before-reorder` event type */
8225
+ export type HelixHeadlessListHelixBeforeReorderElementEvent =
8226
+ HelixHeadlessListElementEvent<HelixBeforeReorderEvent>;
8227
+ /** `helix-reorder` event type */
8228
+ export type HelixHeadlessListHelixReorderElementEvent =
8229
+ HelixHeadlessListElementEvent<HelixReorderEvent>;
7888
8230
 
7889
8231
  export type HelixHeadlessListVueProps = {
8232
+ /** What screen readers hear when a held row is put back, or a move is
8233
+ refused, in a `reorderable` list. */
8234
+ "canceled-label"?: (HelixHeadlessList["canceledLabel"]) | undefined;
8235
+ /** What screen readers hear when a held row is put back, or a move is
8236
+ refused, in a `reorderable` list. */
8237
+ canceledLabel?: (HelixHeadlessList["canceledLabel"]) | undefined;
8238
+ /** What screen readers hear when a row is dropped, in a `reorderable` list. */
8239
+ "dropped-label"?: (HelixHeadlessList["droppedLabel"]) | undefined;
8240
+ /** What screen readers hear when a row is dropped, in a `reorderable` list. */
8241
+ droppedLabel?: (HelixHeadlessList["droppedLabel"]) | undefined;
7890
8242
  /** The kind of list, which follows from the content.
7891
8243
 
7892
8244
  On the headless tier because it is meaning rather than decoration, the same
@@ -7910,6 +8262,29 @@ has to survive with the stylesheet turned off.
7910
8262
  kind?: (HelixHeadlessList["kind"]) | undefined;
7911
8263
  /** The list's name, read by screen readers. */
7912
8264
  label?: (HelixHeadlessList["label"]) | undefined;
8265
+ /** What screen readers hear each time an arrow key moves a held row, in a
8266
+ `reorderable` list. `{name}` is the row's words, `{position}` the place it
8267
+ would go, counting from 1, and `{count}` the number of rows. */
8268
+ "moved-label"?: (HelixHeadlessList["movedLabel"]) | undefined;
8269
+ /** What screen readers hear each time an arrow key moves a held row, in a
8270
+ `reorderable` list. `{name}` is the row's words, `{position}` the place it
8271
+ would go, counting from 1, and `{count}` the number of rows. */
8272
+ movedLabel?: (HelixHeadlessList["movedLabel"]) | undefined;
8273
+ /** The name of each row's grip, in a `reorderable` list. `{name}` is
8274
+ replaced with the row's words. */
8275
+ "move-label"?: (HelixHeadlessList["moveLabel"]) | undefined;
8276
+ /** The name of each row's grip, in a `reorderable` list. `{name}` is
8277
+ replaced with the row's words. */
8278
+ moveLabel?: (HelixHeadlessList["moveLabel"]) | undefined;
8279
+ /** What screen readers hear when a key or a click picks up a row, in a
8280
+ `reorderable` list. `{name}` is the row's words. */
8281
+ "picked-up-label"?: (HelixHeadlessList["pickedUpLabel"]) | undefined;
8282
+ /** What screen readers hear when a key or a click picks up a row, in a
8283
+ `reorderable` list. `{name}` is the row's words. */
8284
+ pickedUpLabel?: (HelixHeadlessList["pickedUpLabel"]) | undefined;
8285
+ /** Lets you move rows by dragging a grip, or with the keys. The list moves no
8286
+ row itself: you move your data on `helix-reorder`. */
8287
+ reorderable?: (HelixHeadlessList["reorderable"]) | undefined;
7913
8288
  /** Numbers an ordered list downward, so the count falls row by row and ends at
7914
8289
  its last row, as `<ol reversed>` does. */
7915
8290
  reversed?: (HelixHeadlessList["reversed"]) | undefined;
@@ -7956,6 +8331,10 @@ export type HelixHeadlessListVueEvents = {
7956
8331
  "helix-action": HelixHeadlessListHelixActionElementEvent;
7957
8332
  /** Fired before a press changes which rows are selected, with the `value` it would leave. Cancelable. */
7958
8333
  "helix-before-change": HelixHeadlessListHelixBeforeChangeElementEvent;
8334
+ /** Fired when a row is dropped at a new place, in a `reorderable` list, with every row's value in the new order. Cancelable: cancel it to keep the row where it is. */
8335
+ "helix-before-reorder": HelixHeadlessListHelixBeforeReorderElementEvent;
8336
+ /** Fired after `helix-before-reorder` when nobody canceled it. Move your rows to the order in `keys`. Cancelable: cancel it to say the move did not happen. */
8337
+ "helix-reorder": HelixHeadlessListHelixReorderElementEvent;
7959
8338
  };
7960
8339
 
7961
8340
  /** `HelixHeadlessListbox` component event */
@@ -7966,12 +8345,18 @@ export type HelixHeadlessListboxElementEvent<E = Event> = TypedEvent<
7966
8345
  /** `helix-before-change` event type */
7967
8346
  export type HelixHeadlessListboxHelixBeforeChangeElementEvent =
7968
8347
  HelixHeadlessListboxElementEvent<HelixBeforeChangeEvent>;
8348
+ /** `helix-before-reorder` event type */
8349
+ export type HelixHeadlessListboxHelixBeforeReorderElementEvent =
8350
+ HelixHeadlessListboxElementEvent<HelixBeforeReorderEvent>;
7969
8351
  /** `helix-filter` event type */
7970
8352
  export type HelixHeadlessListboxHelixFilterElementEvent =
7971
8353
  HelixHeadlessListboxElementEvent<HelixFilterEvent>;
7972
8354
  /** `helix-load-more` event type */
7973
8355
  export type HelixHeadlessListboxHelixLoadMoreElementEvent =
7974
8356
  HelixHeadlessListboxElementEvent<HelixLoadMoreEvent>;
8357
+ /** `helix-reorder` event type */
8358
+ export type HelixHeadlessListboxHelixReorderElementEvent =
8359
+ HelixHeadlessListboxElementEvent<HelixReorderEvent>;
7975
8360
 
7976
8361
  export type HelixHeadlessListboxVueProps = {
7977
8362
  /** What a browser's autofill may choose, as a platform token such as
@@ -8069,7 +8454,10 @@ By default a single-choice list chooses as the arrows move, as a radio
8069
8454
  group does. Select and Time Input set this on the list in their panel, so
8070
8455
  a reader can move through the options before closing the panel on one. */
8071
8456
  manual?: (HelixHeadlessListbox["manual"]) | undefined;
8072
- /** Whether more than one option can be chosen. */
8457
+ /** Whether more than one option can be chosen.
8458
+
8459
+ A press then toggles the option pressed, and Shift with a press adds every
8460
+ option from the one last chosen to it, as React Aria's list does. */
8073
8461
  multiple?: (HelixHeadlessListbox["multiple"]) | undefined;
8074
8462
  /** The text shown when a filter hides every option of a list that has some.
8075
8463
 
@@ -8081,25 +8469,28 @@ matches what you typed" from "there is nothing here". */
8081
8469
  Absent, the list says `empty-text` in both cases. Set it to tell "nothing
8082
8470
  matches what you typed" from "there is nothing here". */
8083
8471
  noResultsText?: (HelixHeadlessListbox["noResultsText"]) | undefined;
8084
- /** What a screen reader hears when a filter leaves one option. `{count}` is
8085
- the count. */
8472
+ /** Lets a reader move options, once `@fusion.dev/helix/listbox/reorder` (or
8473
+ `@fusion.dev/helix-headless/listbox/reorder`) is imported: Alt with an
8474
+ arrow moves the highlighted option, and a pointer drags one. The list
8475
+ moves no option itself: you move your options, or your `items`, on
8476
+ `helix-reorder`. Without that import it does nothing, so a list that never
8477
+ moves options carries none of the code. */
8478
+ reorderable?: (HelixHeadlessListbox["reorderable"]) | undefined;
8479
+ /** What a screen reader hears when a filter leaves one option, where
8480
+ `results-label` should not say it. `{count}` is the count. */
8086
8481
  "result-label"?: (HelixHeadlessListbox["resultLabel"]) | undefined;
8087
- /** What a screen reader hears when a filter leaves one option. `{count}` is
8088
- the count. */
8482
+ /** What a screen reader hears when a filter leaves one option, where
8483
+ `results-label` should not say it. `{count}` is the count. */
8089
8484
  resultLabel?: (HelixHeadlessListbox["resultLabel"]) | undefined;
8090
- /** What a screen reader hears when a filter leaves any other number of
8091
- options. `{count}` is the count.
8092
-
8093
- **Two sentences, chosen by `Intl.PluralRules`**, which is Data Table's
8094
- pair: a language with more forms than two picks the one for its `one` and
8095
- writes the rest here. */
8485
+ /** What a screen reader hears when a filter narrows the list. `{count}` is
8486
+ how many options are left, written in the locale, and each language
8487
+ writes the forms it has: `{count, plural, one {# wynik} few {# wyniki}
8488
+ many {# wyników} other {# wyniku}}`. */
8096
8489
  "results-label"?: (HelixHeadlessListbox["resultsLabel"]) | undefined;
8097
- /** What a screen reader hears when a filter leaves any other number of
8098
- options. `{count}` is the count.
8099
-
8100
- **Two sentences, chosen by `Intl.PluralRules`**, which is Data Table's
8101
- pair: a language with more forms than two picks the one for its `one` and
8102
- writes the rest here. */
8490
+ /** What a screen reader hears when a filter narrows the list. `{count}` is
8491
+ how many options are left, written in the locale, and each language
8492
+ writes the forms it has: `{count, plural, one {# wynik} few {# wyniki}
8493
+ many {# wyników} other {# wyniku}}`. */
8103
8494
  resultsLabel?: (HelixHeadlessListbox["resultsLabel"]) | undefined;
8104
8495
  /** What VoiceOver hears as the highlight reaches a chosen option from the
8105
8496
  filter field, on Apple devices. `{name}` is the option's words. */
@@ -8107,6 +8498,14 @@ filter field, on Apple devices. `{name}` is the option's words. */
8107
8498
  /** What VoiceOver hears as the highlight reaches a chosen option from the
8108
8499
  filter field, on Apple devices. `{name}` is the option's words. */
8109
8500
  selectedLabel?: (HelixHeadlessListbox["selectedLabel"]) | undefined;
8501
+ /** The message reported when the field is required and no option is chosen.
8502
+ Absent, or empty, is this sentence, or the words registered for the page's
8503
+ locale. */
8504
+ "value-missing-message"?: (HelixHeadlessListbox["valueMissingMessage"]) | undefined;
8505
+ /** The message reported when the field is required and no option is chosen.
8506
+ Absent, or empty, is this sentence, or the words registered for the page's
8507
+ locale. */
8508
+ valueMissingMessage?: (HelixHeadlessListbox["valueMissingMessage"]) | undefined;
8110
8509
  /** Whether the rows are still loading.
8111
8510
 
8112
8511
  Reflected, because a stylesheet needs it: the rows that are already there
@@ -8144,24 +8543,6 @@ browser's message. */
8144
8543
  label?: (HelixHeadlessListbox["label"]) | undefined;
8145
8544
  /** Whether the field needs a value before the form can submit. */
8146
8545
  required?: (HelixHeadlessListbox["required"]) | undefined;
8147
- /** The message shown when the field is required and empty.
8148
-
8149
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8150
- set and the browser's own on a text field, which the browser writes in
8151
- the reader's language. Every other word a control speaks is a property,
8152
- and this one was the English a form in another language still spoke in
8153
- the bubble it raises on submit: `feedback` replaces the message under
8154
- the field and does not reach that one. */
8155
- "value-missing-message"?: (HelixHeadlessListbox["valueMissingMessage"]) | undefined;
8156
- /** The message shown when the field is required and empty.
8157
-
8158
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8159
- set and the browser's own on a text field, which the browser writes in
8160
- the reader's language. Every other word a control speaks is a property,
8161
- and this one was the English a form in another language still spoke in
8162
- the bubble it raises on submit: `feedback` replaces the message under
8163
- the field and does not reach that one. */
8164
- valueMissingMessage?: (HelixHeadlessListbox["valueMissingMessage"]) | undefined;
8165
8546
  /** Whether the control is disabled and cannot be used.
8166
8547
 
8167
8548
  Reflected, because the styled tier selects on it, and mirrored to
@@ -8223,10 +8604,14 @@ export type HelixHeadlessListboxVueEvents = {
8223
8604
  change: HelixHeadlessListboxElementEvent;
8224
8605
  /** Fired when the value is about to change, and cancelable. */
8225
8606
  "helix-before-change": HelixHeadlessListboxHelixBeforeChangeElementEvent;
8607
+ /** Fired when an option is dropped at a new place, in a `reorderable` list with `@fusion.dev/helix/listbox/reorder` imported, with every value in the new order. Cancelable: cancel it to keep the option where it is. */
8608
+ "helix-before-reorder": HelixHeadlessListboxHelixBeforeReorderElementEvent;
8226
8609
  /** Fired before the list is filtered, and cancelable. */
8227
8610
  "helix-filter": HelixHeadlessListboxHelixFilterElementEvent;
8228
8611
  /** Fired once the list is scrolled within a screen of its end, once for each number of options, and not while `loading` is set. Add the next page of options and set `loading` while you fetch it. */
8229
8612
  "helix-load-more": HelixHeadlessListboxHelixLoadMoreElementEvent;
8613
+ /** Fired after `helix-before-reorder` when nobody canceled it. Move your options, or your `items`, to the order in `keys`. Cancelable: cancel it to say the move did not happen. */
8614
+ "helix-reorder": HelixHeadlessListboxHelixReorderElementEvent;
8230
8615
  /** Fired after the value changes. */
8231
8616
  input: HelixHeadlessListboxElementEvent;
8232
8617
  };
@@ -8405,9 +8790,15 @@ export type HelixHeadlessMapMarkerVueProps = {
8405
8790
  /** Marks the place as passed, such as a stop already visited. The marker is
8406
8791
  drawn muted, and its name is followed by `passed-label`. */
8407
8792
  passed?: (HelixHeadlessMapMarker["passed"]) | undefined;
8408
- /** The word added after a passed place's name. Defaults to "passed". */
8793
+ /** What a passed place is called. `{label}` is its name.
8794
+
8795
+ A word without `{label}`, such as `visited`, is written after the name
8796
+ with a comma, as before the sentence held the name. */
8409
8797
  "passed-label"?: (HelixHeadlessMapMarker["passedLabel"]) | undefined;
8410
- /** The word added after a passed place's name. Defaults to "passed". */
8798
+ /** What a passed place is called. `{label}` is its name.
8799
+
8800
+ A word without `{label}`, such as `visited`, is written after the name
8801
+ with a comma, as before the sentence held the name. */
8411
8802
  passedLabel?: (HelixHeadlessMapMarker["passedLabel"]) | undefined;
8412
8803
  };
8413
8804
 
@@ -8596,16 +8987,32 @@ export type HelixHeadlessMapHelixToggleElementEvent =
8596
8987
  HelixHeadlessMapElementEvent<HelixToggleEvent>;
8597
8988
 
8598
8989
  export type HelixHeadlessMapVueProps = {
8990
+ /** The hint shown when the map, waiting to be pressed with
8991
+ `gestures="activate"`, is scrolled or swiped over. */
8992
+ "activate-hint-label"?: (HelixHeadlessMap["activateHintLabel"]) | undefined;
8993
+ /** The hint shown when the map, waiting to be pressed with
8994
+ `gestures="activate"`, is scrolled or swiped over. */
8995
+ activateHintLabel?: (HelixHeadlessMap["activateHintLabel"]) | undefined;
8599
8996
  /** The map's rotation, in degrees clockwise from north. `connectMap` keeps it
8600
8997
  current, and the Face north button's needle turns with it. */
8601
8998
  bearing?: (HelixHeadlessMap["bearing"]) | undefined;
8602
8999
  /** Combines markers that would overlap into one count. Counts split apart as
8603
9000
  the map zooms in, and pressing one zooms in to its places. */
8604
9001
  cluster?: (HelixHeadlessMap["cluster"]) | undefined;
9002
+ /** The name of the group of controls, read by screen readers, which names
9003
+ what the controls drive rather than the mechanism. */
9004
+ "controls-label"?: (HelixHeadlessMap["controlsLabel"]) | undefined;
9005
+ /** The name of the group of controls, read by screen readers, which names
9006
+ what the controls drive rather than the mechanism. */
9007
+ controlsLabel?: (HelixHeadlessMap["controlsLabel"]) | undefined;
8605
9008
  /** The Face north button's label. */
8606
9009
  "face-north-label"?: (HelixHeadlessMap["faceNorthLabel"]) | undefined;
8607
9010
  /** The Face north button's label. */
8608
9011
  faceNorthLabel?: (HelixHeadlessMap["faceNorthLabel"]) | undefined;
9012
+ /** The map's name where `label` is empty and the host has no `aria-label`. */
9013
+ "fallback-label"?: (HelixHeadlessMap["fallbackLabel"]) | undefined;
9014
+ /** The map's name where `label` is empty and the host has no `aria-label`. */
9015
+ fallbackLabel?: (HelixHeadlessMap["fallbackLabel"]) | undefined;
8609
9016
  /** What screen readers hear when the map is tilted back to looking straight down. */
8610
9017
  "flat-label"?: (HelixHeadlessMap["flatLabel"]) | undefined;
8611
9018
  /** What screen readers hear when the map is tilted back to looking straight down. */
@@ -8676,24 +9083,44 @@ above `0`. */
8676
9083
  /** The Standard map type's name. */
8677
9084
  standardLabel?: (HelixHeadlessMap["standardLabel"]) | undefined;
8678
9085
  /** What screen readers hear when the map is tilted. `{degrees}` is the tilt
8679
- from looking straight down. */
9086
+ from looking straight down, written in the locale, and each language
9087
+ writes the forms it has. */
8680
9088
  "tilted-label"?: (HelixHeadlessMap["tiltedLabel"]) | undefined;
8681
9089
  /** What screen readers hear when the map is tilted. `{degrees}` is the tilt
8682
- from looking straight down. */
9090
+ from looking straight down, written in the locale, and each language
9091
+ writes the forms it has. */
8683
9092
  tiltedLabel?: (HelixHeadlessMap["tiltedLabel"]) | undefined;
8684
9093
  /** The 3D button's label. */
8685
9094
  "tilt-label"?: (HelixHeadlessMap["tiltLabel"]) | undefined;
8686
9095
  /** The 3D button's label. */
8687
9096
  tiltLabel?: (HelixHeadlessMap["tiltLabel"]) | undefined;
8688
9097
  /** What screen readers hear when the map is turned. `{degrees}` is the way the
8689
- top of the map faces, clockwise from north. */
9098
+ top of the map faces, clockwise from north, written in the locale, and
9099
+ each language writes the forms it has. */
8690
9100
  "turned-label"?: (HelixHeadlessMap["turnedLabel"]) | undefined;
8691
9101
  /** What screen readers hear when the map is turned. `{degrees}` is the way the
8692
- top of the map faces, clockwise from north. */
9102
+ top of the map faces, clockwise from north, written in the locale, and
9103
+ each language writes the forms it has. */
8693
9104
  turnedLabel?: (HelixHeadlessMap["turnedLabel"]) | undefined;
8694
- /** What screen readers hear after a zoom. `{level}` is the zoom level. */
9105
+ /** The hint shown when one finger swipes over the map with `gestures="cooperative"`. */
9106
+ "two-finger-hint-label"?: (HelixHeadlessMap["twoFingerHintLabel"]) | undefined;
9107
+ /** The hint shown when one finger swipes over the map with `gestures="cooperative"`. */
9108
+ twoFingerHintLabel?: (HelixHeadlessMap["twoFingerHintLabel"]) | undefined;
9109
+ /** The line shown while the map, with `gestures="activate"`, has the gestures. */
9110
+ "using-label"?: (HelixHeadlessMap["usingLabel"]) | undefined;
9111
+ /** The line shown while the map, with `gestures="activate"`, has the gestures. */
9112
+ usingLabel?: (HelixHeadlessMap["usingLabel"]) | undefined;
9113
+ /** The hint shown when the wheel scrolls past the map with
9114
+ `gestures="cooperative"`. `{key}` is ⌘ on a Mac and Ctrl elsewhere. */
9115
+ "wheel-hint-label"?: (HelixHeadlessMap["wheelHintLabel"]) | undefined;
9116
+ /** The hint shown when the wheel scrolls past the map with
9117
+ `gestures="cooperative"`. `{key}` is ⌘ on a Mac and Ctrl elsewhere. */
9118
+ wheelHintLabel?: (HelixHeadlessMap["wheelHintLabel"]) | undefined;
9119
+ /** What screen readers hear after a zoom. `{level}` is the zoom level,
9120
+ written in the locale. */
8695
9121
  "zoomed-label"?: (HelixHeadlessMap["zoomedLabel"]) | undefined;
8696
- /** What screen readers hear after a zoom. `{level}` is the zoom level. */
9122
+ /** What screen readers hear after a zoom. `{level}` is the zoom level,
9123
+ written in the locale. */
8697
9124
  zoomedLabel?: (HelixHeadlessMap["zoomedLabel"]) | undefined;
8698
9125
  /** How far the map is zoomed, in its renderer's levels. `connectMap` keeps it
8699
9126
  current, and the map says it after a zoom. */
@@ -8701,12 +9128,6 @@ current, and the map says it after a zoom. */
8701
9128
  /** How far the map is zoomed, in its renderer's levels. `connectMap` keeps it
8702
9129
  current, and the map says it after a zoom. */
8703
9130
  zoomLevel?: (HelixHeadlessMap["zoomLevel"]) | undefined;
8704
- /** The hint shown when a surface waiting to be pressed is scrolled or
8705
- swiped over, with `gestures="activate"`. Absent is the family's own. */
8706
- "activate-hint-label"?: (HelixHeadlessMap["activateHintLabel"]) | undefined;
8707
- /** The hint shown when a surface waiting to be pressed is scrolled or
8708
- swiped over, with `gestures="activate"`. Absent is the family's own. */
8709
- activateHintLabel?: (HelixHeadlessMap["activateHintLabel"]) | undefined;
8710
9131
  /** Which controls to show, as a list such as `pan zoom fullscreen`, or
8711
9132
  `none`. A family can add words of its own.
8712
9133
 
@@ -8729,20 +9150,6 @@ of the frame. The
8729
9150
  stylesheet lays the cluster out by which buttons are in it rather than by
8730
9151
  this attribute, so the two defaults need no rule each. */
8731
9152
  controls?: (HelixHeadlessMap["controls"]) | undefined;
8732
- /** The name of the group of controls, read by screen readers.
8733
-
8734
- Absent is the family's own name for it, "Map controls" or "Board
8735
- controls", which names what the controls drive rather than the
8736
- mechanism. Written here to say it in another language, which every other
8737
- string this surface speaks already allowed and this one did not. */
8738
- "controls-label"?: (HelixHeadlessMap["controlsLabel"]) | undefined;
8739
- /** The name of the group of controls, read by screen readers.
8740
-
8741
- Absent is the family's own name for it, "Map controls" or "Board
8742
- controls", which names what the controls drive rather than the
8743
- mechanism. Written here to say it in another language, which every other
8744
- string this surface speaks already allowed and this one did not. */
8745
- controlsLabel?: (HelixHeadlessMap["controlsLabel"]) | undefined;
8746
9153
  /** Which corner the controls sit in.
8747
9154
 
8748
9155
  **Configurable because there is no safe default**, which is a collision
@@ -8845,26 +9252,6 @@ at any zoom, and a consumer who wants their own units multiplies by them. */
8845
9252
  "pan-up-label"?: (HelixHeadlessMap["panUpLabel"]) | undefined;
8846
9253
  /** The pan up button's label. */
8847
9254
  panUpLabel?: (HelixHeadlessMap["panUpLabel"]) | undefined;
8848
- /** The hint shown when one finger swipes over a surface with
8849
- `gestures="cooperative"`. Absent is the family's own. */
8850
- "two-finger-hint-label"?: (HelixHeadlessMap["twoFingerHintLabel"]) | undefined;
8851
- /** The hint shown when one finger swipes over a surface with
8852
- `gestures="cooperative"`. Absent is the family's own. */
8853
- twoFingerHintLabel?: (HelixHeadlessMap["twoFingerHintLabel"]) | undefined;
8854
- /** The line shown while a surface with `gestures="activate"` has the
8855
- gestures. Absent is the family's own. */
8856
- "using-label"?: (HelixHeadlessMap["usingLabel"]) | undefined;
8857
- /** The line shown while a surface with `gestures="activate"` has the
8858
- gestures. Absent is the family's own. */
8859
- usingLabel?: (HelixHeadlessMap["usingLabel"]) | undefined;
8860
- /** The hint shown when the wheel scrolls past a surface with
8861
- `gestures="cooperative"`, with `{key}`, which is ⌘ on a Mac and Ctrl
8862
- elsewhere. Absent is the family's own. */
8863
- "wheel-hint-label"?: (HelixHeadlessMap["wheelHintLabel"]) | undefined;
8864
- /** The hint shown when the wheel scrolls past a surface with
8865
- `gestures="cooperative"`, with `{key}`, which is ⌘ on a Mac and Ctrl
8866
- elsewhere. Absent is the family's own. */
8867
- wheelHintLabel?: (HelixHeadlessMap["wheelHintLabel"]) | undefined;
8868
9255
  /** The zoom in button's label. */
8869
9256
  "zoom-in-label"?: (HelixHeadlessMap["zoomInLabel"]) | undefined;
8870
9257
  /** The zoom in button's label. */
@@ -9327,12 +9714,16 @@ no reader. */
9327
9714
  /** The words each band is said with under `live`, by its name, written as
9328
9715
  JSON in the attribute: `band-labels='{"poor":"Almost full"}'`.
9329
9716
 
9330
- A band left out keeps its default: "Good", "Fair" or "Poor". */
9717
+ A band left out keeps its default: "Good", "Fair" or "Poor". Reading the
9718
+ property gives every band's words, yours over the registry's over the
9719
+ English. */
9331
9720
  "band-labels"?: (HelixHeadlessMeter["bandLabels"]) | undefined;
9332
9721
  /** The words each band is said with under `live`, by its name, written as
9333
9722
  JSON in the attribute: `band-labels='{"poor":"Almost full"}'`.
9334
9723
 
9335
- A band left out keeps its default: "Good", "Fair" or "Poor". */
9724
+ A band left out keeps its default: "Good", "Fair" or "Poor". Reading the
9725
+ property gives every band's words, yours over the registry's over the
9726
+ English. */
9336
9727
  bandLabels?: (HelixHeadlessMeter["bandLabels"]) | undefined;
9337
9728
  /** `Intl.NumberFormat` options the reading is written with, as React Aria's
9338
9729
  Meter and ProgressBar take them: a unit, a currency, or a number of
@@ -9376,9 +9767,17 @@ For a meter whose value changes while it is on screen. Off by default,
9376
9767
  because a meter that reads a fixed level has nothing new to say. A meter
9377
9768
  with no bands says nothing. */
9378
9769
  live?: (HelixHeadlessMeter["live"]) | undefined;
9379
- /** The locale the percentage is written in, such as `fr` for `72 %`.
9380
-
9381
- Absent uses the runtime's own. */
9770
+ /** What `live` says as the reading moves into another band. `{reading}` is
9771
+ the reading as it is shown, and `{band}` the band's words from
9772
+ `band-labels`. */
9773
+ "live-label"?: (HelixHeadlessMeter["liveLabel"]) | undefined;
9774
+ /** What `live` says as the reading moves into another band. `{reading}` is
9775
+ the reading as it is shown, and `{band}` the band's words from
9776
+ `band-labels`. */
9777
+ liveLabel?: (HelixHeadlessMeter["liveLabel"]) | undefined;
9778
+ /** The locale the words and the percentage are in, such as `fr` for `72 %`.
9779
+
9780
+ Absent reads the nearest `lang`, then the runtime's own. */
9382
9781
  locale?: (HelixHeadlessMeter["locale"]) | undefined;
9383
9782
  /** Top of the low band.
9384
9783
 
@@ -9587,14 +9986,22 @@ its place. Translate it with the rest of your interface. */
9587
9986
  `attribute` is spelled out because Lit lowercases a property name to
9588
9987
  derive one rather than dash-casing it, so this would otherwise be
9589
9988
  reachable only as `dismisslabel`, which nobody would guess and no linter
9590
- would catch. */
9989
+ would catch.
9990
+
9991
+ A word property: register it for a locale under the host's key. A family
9992
+ that names the control otherwise, such as Tag's `Remove {label}`,
9993
+ declares its own English with `@words` above the override. */
9591
9994
  "dismiss-label"?: (HelixHeadlessNotification["dismissLabel"]) | undefined;
9592
9995
  /** The dismiss control's label, read by screen readers.
9593
9996
 
9594
9997
  `attribute` is spelled out because Lit lowercases a property name to
9595
9998
  derive one rather than dash-casing it, so this would otherwise be
9596
9999
  reachable only as `dismisslabel`, which nobody would guess and no linter
9597
- would catch. */
10000
+ would catch.
10001
+
10002
+ A word property: register it for a locale under the host's key. A family
10003
+ that names the control otherwise, such as Tag's `Remove {label}`,
10004
+ declares its own English with `@words` above the override. */
9598
10005
  dismissLabel?: (HelixHeadlessNotification["dismissLabel"]) | undefined;
9599
10006
  };
9600
10007
 
@@ -9621,6 +10028,10 @@ export type HelixHeadlessNotificationsHelixReadElementEvent =
9621
10028
  HelixHeadlessNotificationsElementEvent<HelixReadEvent>;
9622
10029
 
9623
10030
  export type HelixHeadlessNotificationsVueProps = {
10031
+ /** The region's name where `label` is empty. */
10032
+ "fallback-label"?: (HelixHeadlessNotifications["fallbackLabel"]) | undefined;
10033
+ /** The region's name where `label` is empty. */
10034
+ fallbackLabel?: (HelixHeadlessNotifications["fallbackLabel"]) | undefined;
9624
10035
  /** The feed's name, read by screen readers. */
9625
10036
  label?: (HelixHeadlessNotifications["label"]) | undefined;
9626
10037
  /** What the feed says when a page of it could not be loaded, such as after a
@@ -9709,7 +10120,8 @@ number.
9709
10120
  **Every sentence a control raises in the browser's bubble is a property**,
9710
10121
  named for the validity flag it reports, so a form in another language
9711
10122
  speaks it: `feedback` replaces the message under the field and does not
9712
- reach the bubble. Absent is the control's own sentence, in English. */
10123
+ reach the bubble. Unset is the sentence registered for the page's
10124
+ language, then the English. */
9713
10125
  "bad-input-message"?: (HelixHeadlessNumberInput["badInputMessage"]) | undefined;
9714
10126
  /** The message the browser shows when the field holds something that is not a
9715
10127
  number.
@@ -9717,7 +10129,8 @@ number.
9717
10129
  **Every sentence a control raises in the browser's bubble is a property**,
9718
10130
  named for the validity flag it reports, so a form in another language
9719
10131
  speaks it: `feedback` replaces the message under the field and does not
9720
- reach the bubble. Absent is the control's own sentence, in English. */
10132
+ reach the bubble. Unset is the sentence registered for the page's
10133
+ language, then the English. */
9721
10134
  badInputMessage?: (HelixHeadlessNumberInput["badInputMessage"]) | undefined;
9722
10135
  /** The name of the step down button, read by screen readers. */
9723
10136
  "decrement-label"?: (HelixHeadlessNumberInput["decrementLabel"]) | undefined;
@@ -9775,16 +10188,16 @@ Absent has no floor. */
9775
10188
  Not a label: it goes when typing starts. */
9776
10189
  placeholder?: (HelixHeadlessNumberInput["placeholder"]) | undefined;
9777
10190
  /** The message the browser shows when the number is above `max`, with `{max}`
9778
- filled in. */
10191
+ filled in, written in the locale. */
9779
10192
  "range-overflow-message"?: (HelixHeadlessNumberInput["rangeOverflowMessage"]) | undefined;
9780
10193
  /** The message the browser shows when the number is above `max`, with `{max}`
9781
- filled in. */
10194
+ filled in, written in the locale. */
9782
10195
  rangeOverflowMessage?: (HelixHeadlessNumberInput["rangeOverflowMessage"]) | undefined;
9783
10196
  /** The message the browser shows when the number is below `min`, with `{min}`
9784
- filled in. */
10197
+ filled in, written in the locale. */
9785
10198
  "range-underflow-message"?: (HelixHeadlessNumberInput["rangeUnderflowMessage"]) | undefined;
9786
10199
  /** The message the browser shows when the number is below `min`, with `{min}`
9787
- filled in. */
10200
+ filled in, written in the locale. */
9788
10201
  rangeUnderflowMessage?: (HelixHeadlessNumberInput["rangeUnderflowMessage"]) | undefined;
9789
10202
  /** Prevents editing. The value is still submitted with the form. */
9790
10203
  readonly?: (HelixHeadlessNumberInput["readOnly"]) | undefined;
@@ -9809,10 +10222,12 @@ showing dollars keeps the cents typed into it. Without `format-options`
9809
10222
  the grid is whole numbers, as in a native number field. */
9810
10223
  step?: (HelixHeadlessNumberInput["step"]) | undefined;
9811
10224
  /** The message the browser shows when the number is off the step grid, with
9812
- `{below}` and `{above}` filled in with the nearest valid values. */
10225
+ `{below}` and `{above}` filled in with the nearest valid values, written in
10226
+ the locale. */
9813
10227
  "step-mismatch-message"?: (HelixHeadlessNumberInput["stepMismatchMessage"]) | undefined;
9814
10228
  /** The message the browser shows when the number is off the step grid, with
9815
- `{below}` and `{above}` filled in with the nearest valid values. */
10229
+ `{below}` and `{above}` filled in with the nearest valid values, written in
10230
+ the locale. */
9816
10231
  stepMismatchMessage?: (HelixHeadlessNumberInput["stepMismatchMessage"]) | undefined;
9817
10232
  /** What a screen reader says for the value, with `{value}` filled in, such as
9818
10233
  `{value} kilograms`.
@@ -9861,18 +10276,22 @@ browser's message. */
9861
10276
  required?: (HelixHeadlessNumberInput["required"]) | undefined;
9862
10277
  /** The message shown when the field is required and empty.
9863
10278
 
9864
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9865
- set and the browser's own on a text field, which the browser writes in
9866
- the reader's language. Every other word a control speaks is a property,
10279
+ **Absent, or empty, is the control's own sentence**, "Choose one to
10280
+ continue." on a set and the browser's own on a text field, which the
10281
+ browser writes in the reader's language. A family with a sentence of its
10282
+ own declares it as this property's English, a word property a page
10283
+ registers for its locale under the family's key. Every other word a control speaks is a property,
9867
10284
  and this one was the English a form in another language still spoke in
9868
10285
  the bubble it raises on submit: `feedback` replaces the message under
9869
10286
  the field and does not reach that one. */
9870
10287
  "value-missing-message"?: (HelixHeadlessNumberInput["valueMissingMessage"]) | undefined;
9871
10288
  /** The message shown when the field is required and empty.
9872
10289
 
9873
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9874
- set and the browser's own on a text field, which the browser writes in
9875
- the reader's language. Every other word a control speaks is a property,
10290
+ **Absent, or empty, is the control's own sentence**, "Choose one to
10291
+ continue." on a set and the browser's own on a text field, which the
10292
+ browser writes in the reader's language. A family with a sentence of its
10293
+ own declares it as this property's English, a word property a page
10294
+ registers for its locale under the family's key. Every other word a control speaks is a property,
9876
10295
  and this one was the English a form in another language still spoke in
9877
10296
  the bubble it raises on submit: `feedback` replaces the message under
9878
10297
  the field and does not reach that one. */
@@ -10004,21 +10423,33 @@ Read once the document exists, and again whenever this changes. Text that
10004
10423
  does not parse leaves the inspector empty rather than throwing, since a
10005
10424
  page's markup should not take the page down over a comma. */
10006
10425
  for?: (HelixHeadlessObjectInspector["for"]) | undefined;
10007
- /** How an array of one entry counts it. `{count}` is replaced with the count. */
10426
+ /** How an array of one entry counts it, where `items-label` should not say
10427
+ it. `{count}` is the count. */
10008
10428
  "item-label"?: (HelixHeadlessObjectInspector["itemLabel"]) | undefined;
10009
- /** How an array of one entry counts it. `{count}` is replaced with the count. */
10429
+ /** How an array of one entry counts it, where `items-label` should not say
10430
+ it. `{count}` is the count. */
10010
10431
  itemLabel?: (HelixHeadlessObjectInspector["itemLabel"]) | undefined;
10011
- /** How an array of any other number of entries counts them. `{count}` is replaced with the count. */
10432
+ /** How an array counts its entries. `{count}` is the count, written in the
10433
+ locale, and each language writes the forms it has: `{count, plural, one
10434
+ {# element} few {# elementy} many {# elementów} other {# elementu}}`. */
10012
10435
  "items-label"?: (HelixHeadlessObjectInspector["itemsLabel"]) | undefined;
10013
- /** How an array of any other number of entries counts them. `{count}` is replaced with the count. */
10436
+ /** How an array counts its entries. `{count}` is the count, written in the
10437
+ locale, and each language writes the forms it has: `{count, plural, one
10438
+ {# element} few {# elementy} many {# elementów} other {# elementu}}`. */
10014
10439
  itemsLabel?: (HelixHeadlessObjectInspector["itemsLabel"]) | undefined;
10015
- /** How an object of one key counts it. `{count}` is replaced with the count. */
10440
+ /** How an object of one key counts it, where `keys-label` should not say it.
10441
+ `{count}` is the count. */
10016
10442
  "key-label"?: (HelixHeadlessObjectInspector["keyLabel"]) | undefined;
10017
- /** How an object of one key counts it. `{count}` is replaced with the count. */
10443
+ /** How an object of one key counts it, where `keys-label` should not say it.
10444
+ `{count}` is the count. */
10018
10445
  keyLabel?: (HelixHeadlessObjectInspector["keyLabel"]) | undefined;
10019
- /** How an object of any other number of keys counts them. `{count}` is replaced with the count. */
10446
+ /** How an object counts its keys. `{count}` is the count, written in the
10447
+ locale, and each language writes the forms it has: `{count, plural, one
10448
+ {# klucz} few {# klucze} many {# kluczy} other {# klucza}}`. */
10020
10449
  "keys-label"?: (HelixHeadlessObjectInspector["keysLabel"]) | undefined;
10021
- /** How an object of any other number of keys counts them. `{count}` is replaced with the count. */
10450
+ /** How an object counts its keys. `{count}` is the count, written in the
10451
+ locale, and each language writes the forms it has: `{count, plural, one
10452
+ {# klucz} few {# klucze} many {# kluczy} other {# klucza}}`. */
10022
10453
  keysLabel?: (HelixHeadlessObjectInspector["keysLabel"]) | undefined;
10023
10454
  /** Accessible name for the tree, and the text of the header where there is one. */
10024
10455
  label?: (HelixHeadlessObjectInspector["label"]) | undefined;
@@ -10046,15 +10477,21 @@ who set the property. This button is positioned out of the flow and takes no
10046
10477
  room, so nothing selects on it, and reflection exists so that a selector can
10047
10478
  reach a value. */
10048
10479
  noCopy?: (HelixHeadlessObjectInspector["noCopy"]) | undefined;
10049
- /** What a screen reader hears when a filter matches one entry. `{count}` is the count. */
10480
+ /** What a screen reader hears when a filter matches one entry, where
10481
+ `results-label` should not say it. `{count}` is the count. */
10050
10482
  "result-label"?: (HelixHeadlessObjectInspector["resultLabel"]) | undefined;
10051
- /** What a screen reader hears when a filter matches one entry. `{count}` is the count. */
10483
+ /** What a screen reader hears when a filter matches one entry, where
10484
+ `results-label` should not say it. `{count}` is the count. */
10052
10485
  resultLabel?: (HelixHeadlessObjectInspector["resultLabel"]) | undefined;
10053
- /** What a screen reader hears when a filter matches any other number of
10054
- entries. `{count}` is the count. The two are chosen by `Intl.PluralRules`. */
10486
+ /** What a screen reader hears when a filter matches entries. `{count}` is
10487
+ how many, written in the locale, and each language writes the forms it
10488
+ has: `{count, plural, one {# wynik} few {# wyniki} many {# wyników}
10489
+ other {# wyniku}}`. */
10055
10490
  "results-label"?: (HelixHeadlessObjectInspector["resultsLabel"]) | undefined;
10056
- /** What a screen reader hears when a filter matches any other number of
10057
- entries. `{count}` is the count. The two are chosen by `Intl.PluralRules`. */
10491
+ /** What a screen reader hears when a filter matches entries. `{count}` is
10492
+ how many, written in the locale, and each language writes the forms it
10493
+ has: `{count, plural, one {# wynik} few {# wyniki} many {# wyników}
10494
+ other {# wyniku}}`. */
10058
10495
  resultsLabel?: (HelixHeadlessObjectInspector["resultsLabel"]) | undefined;
10059
10496
  /** The tree's accessible name when `label` is empty and the host names it
10060
10497
  with neither `aria-label` nor `aria-labelledby`. */
@@ -10393,7 +10830,8 @@ one, and the back button works without the consumer wiring anything. */
10393
10830
  "last-label"?: (HelixHeadlessPagination["lastLabel"]) | undefined;
10394
10831
  /** Accessible name for the control that jumps to the last page. */
10395
10832
  lastLabel?: (HelixHeadlessPagination["lastLabel"]) | undefined;
10396
- /** Locale for the page numbers. Absent uses the runtime's own.
10833
+ /** The locale the words and the page numbers are in, as a BCP 47 tag such as
10834
+ `de`. Empty reads the nearest `lang`, then the browser's language.
10397
10835
 
10398
10836
  The same property the calendar takes, doing the same job one layer down:
10399
10837
  the templates make the *words* the consumer's, and this makes the *numbers*
@@ -10507,9 +10945,8 @@ export type HelixHeadlessPaginationSizeVueProps = {
10507
10945
  defaultValue?: (HelixHeadlessPaginationSize["defaultValue"]) | undefined;
10508
10946
  /** The label beside the control. */
10509
10947
  label?: (HelixHeadlessPaginationSize["label"]) | undefined;
10510
- /** Locale for the numbers.
10511
-
10512
- Absent uses the runtime's own. */
10948
+ /** The locale the words and the numbers are in, as a BCP 47 tag such as
10949
+ `de`. Empty reads the nearest `lang`, then the browser's language. */
10513
10950
  locale?: (HelixHeadlessPaginationSize["locale"]) | undefined;
10514
10951
  /** The sizes offered, comma separated.
10515
10952
 
@@ -10562,7 +10999,7 @@ export type HelixHeadlessPaginationSizeVueEvents = {
10562
10999
 
10563
11000
  export type HelixHeadlessPaginationSummaryVueProps = {
10564
11001
  /** The text shown. `{from}`, `{to}`, and `{total}` are replaced with the first
10565
- item, the last item, and the item count.
11002
+ item, the last item, and the item count, written in the locale.
10566
11003
 
10567
11004
  A template rather than a prefix and a suffix, because word order is not
10568
11005
  universal: `format="{total} 件中 {from}-{to} 件"` is one attribute here and
@@ -10576,9 +11013,8 @@ of the element, so calling it `label` put one word on three jobs inside one
10576
11013
  family. The root's templates are `pageLabel`, `statusLabel` and `gapLabel`,
10577
11014
  which each label something; this labels nothing, it *is* the thing. */
10578
11015
  format?: (HelixHeadlessPaginationSummary["format"]) | undefined;
10579
- /** Locale for the numbers.
10580
-
10581
- Absent uses the runtime's own. */
11016
+ /** The locale the words and the numbers are in, as a BCP 47 tag such as
11017
+ `de`. Empty reads the nearest `lang`, then the browser's language. */
10582
11018
  locale?: (HelixHeadlessPaginationSummary["locale"]) | undefined;
10583
11019
  /** The current page, counting from one. */
10584
11020
  page?: (HelixHeadlessPaginationSummary["page"]) | undefined;
@@ -10644,11 +11080,13 @@ a row of boxes. */
10644
11080
  readonly?: (HelixHeadlessPinInput["readOnly"]) | undefined;
10645
11081
  /** Whether the field blocks input. A read-only code still submits its value. */
10646
11082
  readOnly?: (HelixHeadlessPinInput["readOnly"]) | undefined;
10647
- /** The message shown when the code is started and not finished, with
10648
- `{length}` filled in. When it is unset, an English default is shown. */
11083
+ /** The message shown when the code is started and not finished. `{length}`
11084
+ is how many characters the code has, written in the locale, and each
11085
+ language writes the forms it has. */
10649
11086
  "too-short-message"?: (HelixHeadlessPinInput["tooShortMessage"]) | undefined;
10650
- /** The message shown when the code is started and not finished, with
10651
- `{length}` filled in. When it is unset, an English default is shown. */
11087
+ /** The message shown when the code is started and not finished. `{length}`
11088
+ is how many characters the code has, written in the locale, and each
11089
+ language writes the forms it has. */
10652
11090
  tooShortMessage?: (HelixHeadlessPinInput["tooShortMessage"]) | undefined;
10653
11091
  /** The characters a box accepts, which also sets the keyboard a phone shows.
10654
11092
 
@@ -10699,18 +11137,22 @@ browser's message. */
10699
11137
  required?: (HelixHeadlessPinInput["required"]) | undefined;
10700
11138
  /** The message shown when the field is required and empty.
10701
11139
 
10702
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
10703
- set and the browser's own on a text field, which the browser writes in
10704
- the reader's language. Every other word a control speaks is a property,
11140
+ **Absent, or empty, is the control's own sentence**, "Choose one to
11141
+ continue." on a set and the browser's own on a text field, which the
11142
+ browser writes in the reader's language. A family with a sentence of its
11143
+ own declares it as this property's English, a word property a page
11144
+ registers for its locale under the family's key. Every other word a control speaks is a property,
10705
11145
  and this one was the English a form in another language still spoke in
10706
11146
  the bubble it raises on submit: `feedback` replaces the message under
10707
11147
  the field and does not reach that one. */
10708
11148
  "value-missing-message"?: (HelixHeadlessPinInput["valueMissingMessage"]) | undefined;
10709
11149
  /** The message shown when the field is required and empty.
10710
11150
 
10711
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
10712
- set and the browser's own on a text field, which the browser writes in
10713
- the reader's language. Every other word a control speaks is a property,
11151
+ **Absent, or empty, is the control's own sentence**, "Choose one to
11152
+ continue." on a set and the browser's own on a text field, which the
11153
+ browser writes in the reader's language. A family with a sentence of its
11154
+ own declares it as this property's English, a word property a page
11155
+ registers for its locale under the family's key. Every other word a control speaks is a property,
10714
11156
  and this one was the English a form in another language still spoke in
10715
11157
  the bubble it raises on submit: `feedback` replaces the message under
10716
11158
  the field and does not reach that one. */
@@ -10775,8 +11217,14 @@ export type HelixHeadlessPopoverVueProps = {
10775
11217
  Off by default, which is the house style: a panel that opens from its
10776
11218
  trigger already reads as belonging to it. */
10777
11219
  arrow?: (HelixHeadlessPopover["arrow"]) | undefined;
10778
- /** The panel's name, read by screen readers. Left at `Popover`, the first
10779
- heading in the panel names it instead. */
11220
+ /** The panel's name where nothing else names it: no `label`, no heading in
11221
+ the panel, and no `aria-labelledby` on the host. */
11222
+ "fallback-label"?: (HelixHeadlessPopover["fallbackLabel"]) | undefined;
11223
+ /** The panel's name where nothing else names it: no `label`, no heading in
11224
+ the panel, and no `aria-labelledby` on the host. */
11225
+ fallbackLabel?: (HelixHeadlessPopover["fallbackLabel"]) | undefined;
11226
+ /** The panel's name, read by screen readers. Left empty, the first heading in
11227
+ the panel names it, and then `fallback-label`. */
10780
11228
  label?: (HelixHeadlessPopover["label"]) | undefined;
10781
11229
  /** Keeps `Tab` inside the panel while it is open, marks the panel
10782
11230
  `aria-modal`, and hides the rest of the page from screen readers. A press
@@ -10880,9 +11328,9 @@ place in the layout when the answer arrives and it becomes determinate. */
10880
11328
  A visible label in the `label` slot names it instead, with the words it
10881
11329
  shows, so the name and the label cannot disagree. */
10882
11330
  label?: (HelixHeadlessProgress["label"]) | undefined;
10883
- /** The locale the percentage is written in, such as `fr` for `72 %`.
11331
+ /** The locale the words and the percentage are in, such as `fr` for `72 %`.
10884
11332
 
10885
- Absent uses the runtime's own. */
11333
+ Absent reads the nearest `lang`, then the runtime's own. */
10886
11334
  locale?: (HelixHeadlessProgress["locale"]) | undefined;
10887
11335
  /** The total the work is measured against. */
10888
11336
  max?: (HelixHeadlessProgress["max"]) | undefined;
@@ -10960,11 +11408,17 @@ export type HelixHeadlessQrCodeElementEvent<E = Event> = TypedEvent<
10960
11408
  >;
10961
11409
 
10962
11410
  export type HelixHeadlessQrCodeVueProps = {
10963
- /** The words a code with no `label` is named by, followed by its value where
10964
- the value is a web address. */
11411
+ /** The name of a code with no `label` whose value is a web address.
11412
+ `{code}` is `code-label` and `{address}` the address. */
11413
+ "address-label"?: (HelixHeadlessQrCode["addressLabel"]) | undefined;
11414
+ /** The name of a code with no `label` whose value is a web address.
11415
+ `{code}` is `code-label` and `{address}` the address. */
11416
+ addressLabel?: (HelixHeadlessQrCode["addressLabel"]) | undefined;
11417
+ /** The words a code with no `label` is named by, with its value where the
11418
+ value is a web address, as `address-label` says. */
10965
11419
  "code-label"?: (HelixHeadlessQrCode["codeLabel"]) | undefined;
10966
- /** The words a code with no `label` is named by, followed by its value where
10967
- the value is a web address. */
11420
+ /** The words a code with no `label` is named by, with its value where the
11421
+ value is a web address, as `address-label` says. */
10968
11422
  codeLabel?: (HelixHeadlessQrCode["codeLabel"]) | undefined;
10969
11423
  /** The error correction level, which sets how much of the code can be lost
10970
11424
  and still scan.
@@ -11051,6 +11505,14 @@ Home and End move focus between the radios and choose nothing, so a reader
11051
11505
  can hear every choice, and Tab still reaches the answer. The group says
11052
11506
  `aria-readonly`. A script can still set `value`. */
11053
11507
  readOnly?: (HelixHeadlessRadioGroup["readOnly"]) | undefined;
11508
+ /** The message reported when the field is required and no option is chosen.
11509
+ Absent, or empty, is this sentence, or the words registered for the page's
11510
+ locale. */
11511
+ "value-missing-message"?: (HelixHeadlessRadioGroup["valueMissingMessage"]) | undefined;
11512
+ /** The message reported when the field is required and no option is chosen.
11513
+ Absent, or empty, is this sentence, or the words registered for the page's
11514
+ locale. */
11515
+ valueMissingMessage?: (HelixHeadlessRadioGroup["valueMissingMessage"]) | undefined;
11054
11516
  /** The value the control starts with. A form reset returns it to this value,
11055
11517
  and to the `value` attribute where this one is not written, as a native
11056
11518
  control resets to the `value` it declares. */
@@ -11078,24 +11540,6 @@ browser's message. */
11078
11540
  label?: (HelixHeadlessRadioGroup["label"]) | undefined;
11079
11541
  /** Whether the field needs a value before the form can submit. */
11080
11542
  required?: (HelixHeadlessRadioGroup["required"]) | undefined;
11081
- /** The message shown when the field is required and empty.
11082
-
11083
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
11084
- set and the browser's own on a text field, which the browser writes in
11085
- the reader's language. Every other word a control speaks is a property,
11086
- and this one was the English a form in another language still spoke in
11087
- the bubble it raises on submit: `feedback` replaces the message under
11088
- the field and does not reach that one. */
11089
- "value-missing-message"?: (HelixHeadlessRadioGroup["valueMissingMessage"]) | undefined;
11090
- /** The message shown when the field is required and empty.
11091
-
11092
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
11093
- set and the browser's own on a text field, which the browser writes in
11094
- the reader's language. Every other word a control speaks is a property,
11095
- and this one was the English a form in another language still spoke in
11096
- the bubble it raises on submit: `feedback` replaces the message under
11097
- the field and does not reach that one. */
11098
- valueMissingMessage?: (HelixHeadlessRadioGroup["valueMissingMessage"]) | undefined;
11099
11543
  /** Whether the control is disabled and cannot be used.
11100
11544
 
11101
11545
  Reflected, because the styled tier selects on it, and mirrored to
@@ -11281,13 +11725,13 @@ leaving a rating with nothing to press. A property that silently accepts
11281
11725
  nonsense is the fault this pays off, so neither case is quietly ignored. */
11282
11726
  min?: (HelixHeadlessRating["min"]) | undefined;
11283
11727
  /** The name of each mark a reader can choose, with `{score}` and `{max}`
11284
- filled in. Set it to translate "3 out of 5".
11728
+ filled in, written in the locale. Set it to translate "3 out of 5".
11285
11729
 
11286
11730
  Also what a read-only rating says for its score where `value-text` is
11287
11731
  empty. */
11288
11732
  "option-label"?: (HelixHeadlessRating["optionLabel"]) | undefined;
11289
11733
  /** The name of each mark a reader can choose, with `{score}` and `{max}`
11290
- filled in. Set it to translate "3 out of 5".
11734
+ filled in, written in the locale. Set it to translate "3 out of 5".
11291
11735
 
11292
11736
  Also what a read-only rating says for its score where `value-text` is
11293
11737
  empty. */
@@ -11329,6 +11773,14 @@ reader's own cursor would be worse than no label. */
11329
11773
  `0.5` is the half star, and it is the reason the value is a number rather
11330
11774
  than an index: with halves, five marks are ten answers. */
11331
11775
  step?: (HelixHeadlessRating["step"]) | undefined;
11776
+ /** The message reported when the field is required and no rating is chosen.
11777
+ Absent, or empty, is this sentence, or the words registered for the page's
11778
+ locale. */
11779
+ "value-missing-message"?: (HelixHeadlessRating["valueMissingMessage"]) | undefined;
11780
+ /** The message reported when the field is required and no rating is chosen.
11781
+ Absent, or empty, is this sentence, or the words registered for the page's
11782
+ locale. */
11783
+ valueMissingMessage?: (HelixHeadlessRating["valueMissingMessage"]) | undefined;
11332
11784
  /** The text screen readers read for the score, in place of "3.5 out of 5".
11333
11785
 
11334
11786
  A rating out of five is one of the few places a screen reader gets a worse
@@ -11370,24 +11822,6 @@ browser's message. */
11370
11822
  label?: (HelixHeadlessRating["label"]) | undefined;
11371
11823
  /** Whether the field needs a value before the form can submit. */
11372
11824
  required?: (HelixHeadlessRating["required"]) | undefined;
11373
- /** The message shown when the field is required and empty.
11374
-
11375
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
11376
- set and the browser's own on a text field, which the browser writes in
11377
- the reader's language. Every other word a control speaks is a property,
11378
- and this one was the English a form in another language still spoke in
11379
- the bubble it raises on submit: `feedback` replaces the message under
11380
- the field and does not reach that one. */
11381
- "value-missing-message"?: (HelixHeadlessRating["valueMissingMessage"]) | undefined;
11382
- /** The message shown when the field is required and empty.
11383
-
11384
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
11385
- set and the browser's own on a text field, which the browser writes in
11386
- the reader's language. Every other word a control speaks is a property,
11387
- and this one was the English a form in another language still spoke in
11388
- the bubble it raises on submit: `feedback` replaces the message under
11389
- the field and does not reach that one. */
11390
- valueMissingMessage?: (HelixHeadlessRating["valueMissingMessage"]) | undefined;
11391
11825
  /** Whether the control is disabled and cannot be used.
11392
11826
 
11393
11827
  Reflected, because the styled tier selects on it, and mirrored to
@@ -11436,9 +11870,11 @@ export type HelixHeadlessRatingVueEvents = {
11436
11870
  };
11437
11871
 
11438
11872
  export type HelixHeadlessScatterChartVueProps = {
11439
- /** The word the summary uses for the strength of the relation. */
11873
+ /** The word for the strength of the relation, `{correlationLabel}` in
11874
+ `series-label`. */
11440
11875
  "correlation-label"?: (HelixHeadlessScatterChart["correlationLabel"]) | undefined;
11441
- /** The word the summary uses for the strength of the relation. */
11876
+ /** The word for the strength of the relation, `{correlationLabel}` in
11877
+ `series-label`. */
11442
11878
  correlationLabel?: (HelixHeadlessScatterChart["correlationLabel"]) | undefined;
11443
11879
  /** Which gridlines are drawn across the plot, if any.
11444
11880
 
@@ -11447,10 +11883,30 @@ Both axes are measured, so the values name an axis rather than a role:
11447
11883
  anything unrecognized, means `both`, since neither axis is the one a scatter
11448
11884
  is read along. */
11449
11885
  gridlines?: (HelixHeadlessScatterChart["gridlines"]) | undefined;
11450
- /** The word the summary uses for a row when it counts them. */
11886
+ /** The word for the rows a series rests on, `{pointsLabel}` in
11887
+ `series-label`. `{count}` is how many, so the word takes its plural
11888
+ forms: `{count, plural, one {punkt} few {punkty} other {punktów}}`. */
11451
11889
  "points-label"?: (HelixHeadlessScatterChart["pointsLabel"]) | undefined;
11452
- /** The word the summary uses for a row when it counts them. */
11890
+ /** The word for the rows a series rests on, `{pointsLabel}` in
11891
+ `series-label`. `{count}` is how many, so the word takes its plural
11892
+ forms: `{count, plural, one {punkt} few {punkty} other {punktów}}`. */
11453
11893
  pointsLabel?: (HelixHeadlessScatterChart["pointsLabel"]) | undefined;
11894
+ /** What the summary says of each series. `{y}` is what the series measures up,
11895
+ `{x}` what the chart measures across, `{count}` how many rows it rests on,
11896
+ written in the locale, `{pointsLabel}` the word for them, and
11897
+ `{correlation}` its correlation, or `none` where there are fewer than
11898
+ three points or no spread to measure, so each case is a whole sentence:
11899
+ `{correlation, select, none {...} other {...}}`. `{correlationLabel}` is
11900
+ `correlation-label`. */
11901
+ "series-label"?: (HelixHeadlessScatterChart["seriesLabel"]) | undefined;
11902
+ /** What the summary says of each series. `{y}` is what the series measures up,
11903
+ `{x}` what the chart measures across, `{count}` how many rows it rests on,
11904
+ written in the locale, `{pointsLabel}` the word for them, and
11905
+ `{correlation}` its correlation, or `none` where there are fewer than
11906
+ three points or no spread to measure, so each case is a whole sentence:
11907
+ `{correlation, select, none {...} other {...}}`. `{correlationLabel}` is
11908
+ `correlation-label`. */
11909
+ seriesLabel?: (HelixHeadlessScatterChart["seriesLabel"]) | undefined;
11454
11910
  /** The heading of a column whose numbers size the points, such as
11455
11911
  `Population`, which makes the chart a bubble chart.
11456
11912
 
@@ -11490,8 +11946,8 @@ words and is already written. */
11490
11946
  /** The locale the chart's own numbers are written in: its axis, its
11491
11947
  percentages and its totals, such as `de` for `1.240` and `32 %`.
11492
11948
 
11493
- Absent uses the runtime's own. The table's cells are shown as the table
11494
- writes them, whatever this says. */
11949
+ Absent reads the nearest `lang`, then the runtime's own. The table's
11950
+ cells are shown as the table writes them, whatever this says. */
11495
11951
  locale?: (HelixHeadlessScatterChart["locale"]) | undefined;
11496
11952
  /** Where a reading the keys moved to stands among the readings, said after
11497
11953
  it. `{position}` and `{count}` are replaced with the numbers, written in
@@ -11639,6 +12095,14 @@ round it, and a short move reaches the options either side. Near an edge
11639
12095
  of the screen the list moves to stay on it, so the option may sit beside
11640
12096
  the trigger rather than on it. It follows the page as it scrolls. */
11641
12097
  position?: (HelixHeadlessSelect["position"]) | undefined;
12098
+ /** The message reported when the field is required and nothing is chosen.
12099
+ Absent, or empty, is this sentence, or the words registered for the page's
12100
+ locale. */
12101
+ "value-missing-message"?: (HelixHeadlessSelect["valueMissingMessage"]) | undefined;
12102
+ /** The message reported when the field is required and nothing is chosen.
12103
+ Absent, or empty, is this sentence, or the words registered for the page's
12104
+ locale. */
12105
+ valueMissingMessage?: (HelixHeadlessSelect["valueMissingMessage"]) | undefined;
11642
12106
  /** Whether the element starts open. Ignored once `open` is written. */
11643
12107
  "default-open"?: (HelixHeadlessSelect["defaultOpen"]) | undefined;
11644
12108
  /** Whether the element starts open. Ignored once `open` is written. */
@@ -11683,24 +12147,6 @@ browser's message. */
11683
12147
  label?: (HelixHeadlessSelect["label"]) | undefined;
11684
12148
  /** Whether the field needs a value before the form can submit. */
11685
12149
  required?: (HelixHeadlessSelect["required"]) | undefined;
11686
- /** The message shown when the field is required and empty.
11687
-
11688
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
11689
- set and the browser's own on a text field, which the browser writes in
11690
- the reader's language. Every other word a control speaks is a property,
11691
- and this one was the English a form in another language still spoke in
11692
- the bubble it raises on submit: `feedback` replaces the message under
11693
- the field and does not reach that one. */
11694
- "value-missing-message"?: (HelixHeadlessSelect["valueMissingMessage"]) | undefined;
11695
- /** The message shown when the field is required and empty.
11696
-
11697
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
11698
- set and the browser's own on a text field, which the browser writes in
11699
- the reader's language. Every other word a control speaks is a property,
11700
- and this one was the English a form in another language still spoke in
11701
- the bubble it raises on submit: `feedback` replaces the message under
11702
- the field and does not reach that one. */
11703
- valueMissingMessage?: (HelixHeadlessSelect["valueMissingMessage"]) | undefined;
11704
12150
  /** Whether the control is disabled and cannot be used.
11705
12151
 
11706
12152
  Reflected, because the styled tier selects on it, and mirrored to
@@ -11833,8 +12279,8 @@ attribute.
11833
12279
  <helix-slider format-options='{"style":"currency","currency":"USD"}'></helix-slider>
11834
12280
  ``` */
11835
12281
  formatOptions?: (HelixHeadlessSlider["formatOptions"]) | undefined;
11836
- /** The locale `format-options` writes the value in, such as `de-DE`. Empty is
11837
- the reader's own. */
12282
+ /** The locale the value and the words are written in, such as `de-DE`. Empty
12283
+ reads the nearest `lang`, then the browser's language. */
11838
12284
  locale?: (HelixHeadlessSlider["locale"]) | undefined;
11839
12285
  /** Shows the value at each mark. */
11840
12286
  "marker-labels"?: (HelixHeadlessSlider["markerLabels"]) | undefined;
@@ -11957,18 +12403,22 @@ browser's message. */
11957
12403
  required?: (HelixHeadlessSlider["required"]) | undefined;
11958
12404
  /** The message shown when the field is required and empty.
11959
12405
 
11960
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
11961
- set and the browser's own on a text field, which the browser writes in
11962
- the reader's language. Every other word a control speaks is a property,
12406
+ **Absent, or empty, is the control's own sentence**, "Choose one to
12407
+ continue." on a set and the browser's own on a text field, which the
12408
+ browser writes in the reader's language. A family with a sentence of its
12409
+ own declares it as this property's English, a word property a page
12410
+ registers for its locale under the family's key. Every other word a control speaks is a property,
11963
12411
  and this one was the English a form in another language still spoke in
11964
12412
  the bubble it raises on submit: `feedback` replaces the message under
11965
12413
  the field and does not reach that one. */
11966
12414
  "value-missing-message"?: (HelixHeadlessSlider["valueMissingMessage"]) | undefined;
11967
12415
  /** The message shown when the field is required and empty.
11968
12416
 
11969
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
11970
- set and the browser's own on a text field, which the browser writes in
11971
- the reader's language. Every other word a control speaks is a property,
12417
+ **Absent, or empty, is the control's own sentence**, "Choose one to
12418
+ continue." on a set and the browser's own on a text field, which the
12419
+ browser writes in the reader's language. A family with a sentence of its
12420
+ own declares it as this property's English, a word property a page
12421
+ registers for its locale under the family's key. Every other word a control speaks is a property,
11972
12422
  and this one was the English a form in another language still spoke in
11973
12423
  the bubble it raises on submit: `feedback` replaces the message under
11974
12424
  the field and does not reach that one. */
@@ -12058,11 +12508,11 @@ the accessible representation of a sparkline, and a list of the fourteen
12058
12508
  numbers is not. Absent, the drawing is hidden from a screen reader rather
12059
12509
  than announced without a name. */
12060
12510
  label?: (HelixHeadlessSparkline["label"]) | undefined;
12061
- /** The locale the readout's numbers and positions are written in, such as
12062
- `de` for `1.240`.
12511
+ /** The locale the words, the readout's numbers and positions are in, such
12512
+ as `de` for `1.240`.
12063
12513
 
12064
- Absent uses the runtime's own. A table's cells are shown as the table
12065
- writes them, whatever this says. */
12514
+ Absent reads the nearest `lang`, then the runtime's own. A table's cells
12515
+ are shown as the table writes them, whatever this says. */
12066
12516
  locale?: (HelixHeadlessSparkline["locale"]) | undefined;
12067
12517
  /** Which readings take a mark of their own: `high`, `low`, or both,
12068
12518
  separated by spaces.
@@ -12485,11 +12935,15 @@ in both. Of those four combinations three are ones nobody should pick, and
12485
12935
  a property whose job is mostly to be left alone is a property that mostly
12486
12936
  catches people out. */
12487
12937
  orientation?: (HelixHeadlessSteps["orientation"]) | undefined;
12488
- /** What the `progress` part says to a screen reader, with `{percent}` filled
12489
- in with `progress`. */
12938
+ /** What the `progress` part says to a screen reader. `{share, number,
12939
+ percent}` writes `progress` as a percentage the way the locale writes one,
12940
+ such as `40%`, or `40 %` in French. `{percent}` is `progress` as a whole
12941
+ number, for a sentence that places the sign itself. */
12490
12942
  "progress-label"?: (HelixHeadlessSteps["progressLabel"]) | undefined;
12491
- /** What the `progress` part says to a screen reader, with `{percent}` filled
12492
- in with `progress`. */
12943
+ /** What the `progress` part says to a screen reader. `{share, number,
12944
+ percent}` writes `progress` as a percentage the way the locale writes one,
12945
+ such as `40%`, or `40 %` in French. `{percent}` is `progress` as a whole
12946
+ number, for a sentence that places the sign itself. */
12493
12947
  progressLabel?: (HelixHeadlessSteps["progressLabel"]) | undefined;
12494
12948
  /** What each step is marked with.
12495
12949
 
@@ -12546,6 +13000,16 @@ export type HelixHeadlessStepHelixSelectElementEvent =
12546
13000
  export type HelixHeadlessStepVueProps = {
12547
13001
  /** Whether this stage is finished. */
12548
13002
  complete?: (HelixHeadlessStep["complete"]) | undefined;
13003
+ /** What a screen reader hears when the stage is finished while the page is
13004
+ open. `{name}` is the stage's name and `{complete}` is `complete-label`, so
13005
+ a language can write the whole sentence in its own order. A stage with no
13006
+ name says `complete-label` alone. */
13007
+ "completed-label"?: (HelixHeadlessStep["completedLabel"]) | undefined;
13008
+ /** What a screen reader hears when the stage is finished while the page is
13009
+ open. `{name}` is the stage's name and `{complete}` is `complete-label`, so
13010
+ a language can write the whole sentence in its own order. A stage with no
13011
+ name says `complete-label` alone. */
13012
+ completedLabel?: (HelixHeadlessStep["completedLabel"]) | undefined;
12549
13013
  /** The words that tell a screen reader the stage is finished. Translate it
12550
13014
  with the page. */
12551
13015
  "complete-label"?: (HelixHeadlessStep["completeLabel"]) | undefined;
@@ -12580,6 +13044,14 @@ export type HelixHeadlessSwitchHelixBeforeToggleElementEvent =
12580
13044
  export type HelixHeadlessSwitchVueProps = {
12581
13045
  /** Value submitted when the switch is on. */
12582
13046
  value?: (HelixHeadlessSwitch["value"]) | undefined;
13047
+ /** The message reported when the field is required and the switch is off.
13048
+ Absent, or empty, is this sentence, or the words registered for the page's
13049
+ locale. */
13050
+ "value-missing-message"?: (HelixHeadlessSwitch["valueMissingMessage"]) | undefined;
13051
+ /** The message reported when the field is required and the switch is off.
13052
+ Absent, or empty, is this sentence, or the words registered for the page's
13053
+ locale. */
13054
+ valueMissingMessage?: (HelixHeadlessSwitch["valueMissingMessage"]) | undefined;
12583
13055
  /** Whether the control is checked.
12584
13056
 
12585
13057
  One property rather than two. Writing always applies;
@@ -12631,24 +13103,6 @@ browser's message. */
12631
13103
  label?: (HelixHeadlessSwitch["label"]) | undefined;
12632
13104
  /** Whether the field needs a value before the form can submit. */
12633
13105
  required?: (HelixHeadlessSwitch["required"]) | undefined;
12634
- /** The message shown when the field is required and empty.
12635
-
12636
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
12637
- set and the browser's own on a text field, which the browser writes in
12638
- the reader's language. Every other word a control speaks is a property,
12639
- and this one was the English a form in another language still spoke in
12640
- the bubble it raises on submit: `feedback` replaces the message under
12641
- the field and does not reach that one. */
12642
- "value-missing-message"?: (HelixHeadlessSwitch["valueMissingMessage"]) | undefined;
12643
- /** The message shown when the field is required and empty.
12644
-
12645
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
12646
- set and the browser's own on a text field, which the browser writes in
12647
- the reader's language. Every other word a control speaks is a property,
12648
- and this one was the English a form in another language still spoke in
12649
- the bubble it raises on submit: `feedback` replaces the message under
12650
- the field and does not reach that one. */
12651
- valueMissingMessage?: (HelixHeadlessSwitch["valueMissingMessage"]) | undefined;
12652
13106
  /** Whether the control is disabled and cannot be used.
12653
13107
 
12654
13108
  Reflected, because the styled tier selects on it, and mirrored to
@@ -12721,14 +13175,16 @@ after a column moves is a sort a consumer cannot store in a URL.
12721
13175
  Empty on a column that is purely presentational, an actions column say, and
12722
13176
  such a column is never sortable however it is marked. */
12723
13177
  field?: (HelixHeadlessTableColumn["field"]) | undefined;
12724
- /** The accessible name of the grip that moves the column. `{name}` is replaced
12725
- with the heading text.
13178
+ /** The accessible name of the grip that moves the column. `{name}` is the
13179
+ heading text, and `{named}` is `no` for a column without one, so the
13180
+ sentence for it can name the column another way.
12726
13181
 
12727
13182
  **Every word a column speaks is a property**, so a table in another
12728
13183
  language hears its own rather than English around its own headings. */
12729
13184
  "move-label"?: (HelixHeadlessTableColumn["moveLabel"]) | undefined;
12730
- /** The accessible name of the grip that moves the column. `{name}` is replaced
12731
- with the heading text.
13185
+ /** The accessible name of the grip that moves the column. `{name}` is the
13186
+ heading text, and `{named}` is `no` for a column without one, so the
13187
+ sentence for it can name the column another way.
12732
13188
 
12733
13189
  **Every word a column speaks is a property**, so a table in another
12734
13190
  language hears its own rather than English around its own headings. */
@@ -12741,10 +13197,10 @@ it has focus, a step at a time and four with Shift. The width lands in
12741
13197
  stores the widths can take the decision. */
12742
13198
  resizable?: (HelixHeadlessTableColumn["resizable"]) | undefined;
12743
13199
  /** The accessible name of the separator that resizes the column. `{name}` is
12744
- replaced with the heading text. */
13200
+ the heading text, and `{named}` is `no` for a column without one. */
12745
13201
  "resize-label"?: (HelixHeadlessTableColumn["resizeLabel"]) | undefined;
12746
13202
  /** The accessible name of the separator that resizes the column. `{name}` is
12747
- replaced with the heading text. */
13203
+ the heading text, and `{named}` is `no` for a column without one. */
12748
13204
  resizeLabel?: (HelixHeadlessTableColumn["resizeLabel"]) | undefined;
12749
13205
  /** Makes this column's cells the headers of their rows, in `DataTable`.
12750
13206
 
@@ -12862,10 +13318,12 @@ and lets that column wrap. A headless consumer owns the overflow either
12862
13318
  way, that being paint, and gets the honest track list. */
12863
13319
  width?: (HelixHeadlessTableColumn["width"]) | undefined;
12864
13320
  /** The text screen readers announce for the column's width. `{width}` is
12865
- replaced with the width. */
13321
+ the width in pixels, written in the locale, and each language writes the
13322
+ forms it has. */
12866
13323
  "width-label"?: (HelixHeadlessTableColumn["widthLabel"]) | undefined;
12867
13324
  /** The text screen readers announce for the column's width. `{width}` is
12868
- replaced with the width. */
13325
+ the width in pixels, written in the locale, and each language writes the
13326
+ forms it has. */
12869
13327
  widthLabel?: (HelixHeadlessTableColumn["widthLabel"]) | undefined;
12870
13328
  /** A function that reads the cell's content from a row, for cells that `field`
12871
13329
  alone cannot read.
@@ -12898,6 +13356,12 @@ export type HelixHeadlessTableElementEvent<E = Event> = TypedEvent<
12898
13356
  HelixHeadlessTable,
12899
13357
  E
12900
13358
  >;
13359
+ /** `helix-before-reorder` event type */
13360
+ export type HelixHeadlessTableHelixBeforeReorderElementEvent =
13361
+ HelixHeadlessTableElementEvent<HelixBeforeReorderEvent>;
13362
+ /** `helix-reorder` event type */
13363
+ export type HelixHeadlessTableHelixReorderElementEvent =
13364
+ HelixHeadlessTableElementEvent<HelixReorderEvent>;
12901
13365
  /** `helix-select` event type */
12902
13366
  export type HelixHeadlessTableHelixSelectElementEvent =
12903
13367
  HelixHeadlessTableElementEvent<HelixSelectEvent>;
@@ -12912,10 +13376,16 @@ export type HelixHeadlessTableHelixSortedElementEvent =
12912
13376
  HelixHeadlessTableElementEvent<HelixSortedEvent>;
12913
13377
 
12914
13378
  export type HelixHeadlessTableVueProps = {
12915
- /** The word for an ascending sort, in `sorted-label`. */
13379
+ /** The word for an ascending sort, in a `sorted-label` that writes `{order}`. */
12916
13380
  "ascending-label"?: (HelixHeadlessTable["ascendingLabel"]) | undefined;
12917
- /** The word for an ascending sort, in `sorted-label`. */
13381
+ /** The word for an ascending sort, in a `sorted-label` that writes `{order}`. */
12918
13382
  ascendingLabel?: (HelixHeadlessTable["ascendingLabel"]) | undefined;
13383
+ /** What screen readers hear when a held row is put back, or a move is
13384
+ refused, in a `reorderable` table. */
13385
+ "canceled-label"?: (HelixHeadlessTable["canceledLabel"]) | undefined;
13386
+ /** What screen readers hear when a held row is put back, or a move is
13387
+ refused, in a `reorderable` table. */
13388
+ canceledLabel?: (HelixHeadlessTable["canceledLabel"]) | undefined;
12919
13389
  /** The column widths as one track list, written once on the table.
12920
13390
 
12921
13391
  With `TableColumn` children, each track sizes the column in its place, a
@@ -12955,10 +13425,20 @@ is set. */
12955
13425
  "default-sort"?: (HelixHeadlessTable["defaultSort"]) | undefined;
12956
13426
  /** The starting sort order, used until `sort` is set. */
12957
13427
  defaultSort?: (HelixHeadlessTable["defaultSort"]) | undefined;
12958
- /** The word for a descending sort, in `sorted-label`. */
13428
+ /** The word for a descending sort, in a `sorted-label` that writes `{order}`. */
12959
13429
  "descending-label"?: (HelixHeadlessTable["descendingLabel"]) | undefined;
12960
- /** The word for a descending sort, in `sorted-label`. */
13430
+ /** The word for a descending sort, in a `sorted-label` that writes `{order}`. */
12961
13431
  descendingLabel?: (HelixHeadlessTable["descendingLabel"]) | undefined;
13432
+ /** What screen readers hear when a held row is dropped, in a `reorderable` table. */
13433
+ "dropped-label"?: (HelixHeadlessTable["droppedLabel"]) | undefined;
13434
+ /** What screen readers hear when a held row is dropped, in a `reorderable` table. */
13435
+ droppedLabel?: (HelixHeadlessTable["droppedLabel"]) | undefined;
13436
+ /** The table's name where neither `label` nor an `aria-label` or
13437
+ `aria-labelledby` on the host gives it one. */
13438
+ "fallback-label"?: (HelixHeadlessTable["fallbackLabel"]) | undefined;
13439
+ /** The table's name where neither `label` nor an `aria-label` or
13440
+ `aria-labelledby` on the host gives it one. */
13441
+ fallbackLabel?: (HelixHeadlessTable["fallbackLabel"]) | undefined;
12962
13442
  /** Makes the table a grid: one tab stop, and the arrow keys, Home, End and the
12963
13443
  Page keys move focus between its cells, the headings included. Enter moves
12964
13444
  into a cell's controls, and Tab leaves the table.
@@ -12972,6 +13452,33 @@ cells, which is the one way a cell of your markup can take focus. */
12972
13452
  An `aria-label` or `aria-labelledby` on the host names the table too, and
12973
13453
  wins over this. */
12974
13454
  label?: (HelixHeadlessTable["label"]) | undefined;
13455
+ /** What screen readers hear each time a key moves a held row, in a
13456
+ `reorderable` table. `{name}` is the row's words, `{position}` the place it
13457
+ would go, counting from 1, and `{count}` the number of rows. */
13458
+ "moved-label"?: (HelixHeadlessTable["movedLabel"]) | undefined;
13459
+ /** What screen readers hear each time a key moves a held row, in a
13460
+ `reorderable` table. `{name}` is the row's words, `{position}` the place it
13461
+ would go, counting from 1, and `{count}` the number of rows. */
13462
+ movedLabel?: (HelixHeadlessTable["movedLabel"]) | undefined;
13463
+ /** The name of a row's grip, in a `reorderable` table. `{row}` is replaced
13464
+ with the words of the row's first cell. */
13465
+ "move-row-label"?: (HelixHeadlessTable["moveRowLabel"]) | undefined;
13466
+ /** The name of a row's grip, in a `reorderable` table. `{row}` is replaced
13467
+ with the words of the row's first cell. */
13468
+ moveRowLabel?: (HelixHeadlessTable["moveRowLabel"]) | undefined;
13469
+ /** What screen readers hear when a key or a click picks up a row, in a
13470
+ `reorderable` table. `{name}` is the row's words. */
13471
+ "picked-up-label"?: (HelixHeadlessTable["pickedUpLabel"]) | undefined;
13472
+ /** What screen readers hear when a key or a click picks up a row, in a
13473
+ `reorderable` table. `{name}` is the row's words. */
13474
+ pickedUpLabel?: (HelixHeadlessTable["pickedUpLabel"]) | undefined;
13475
+ /** Adds a column of grips that move rows, by dragging or with the keys. The
13476
+ table moves no row itself: you move your rows on `helix-reorder`. */
13477
+ reorderable?: (HelixHeadlessTable["reorderable"]) | undefined;
13478
+ /** The name of the heading over the row grips, in a `reorderable` table. */
13479
+ "row-grips-label"?: (HelixHeadlessTable["rowGripsLabel"]) | undefined;
13480
+ /** The name of the heading over the row grips, in a `reorderable` table. */
13481
+ rowGripsLabel?: (HelixHeadlessTable["rowGripsLabel"]) | undefined;
12975
13482
  /** Adds a column of checkboxes for selecting rows. Each row is known by its
12976
13483
  `value`, and by its place among the rows as written where it has none. */
12977
13484
  selectable?: (HelixHeadlessTable["selectable"]) | undefined;
@@ -12986,10 +13493,14 @@ selection as it was. `default-selected` seeds a selection this element
12986
13493
  then owns. */
12987
13494
  selected?: (HelixHeadlessTable["selected"]) | undefined;
12988
13495
  /** What screen readers hear when the chosen rows change. `{count}` is how many
12989
- rows are chosen. */
13496
+ rows are chosen, written in the locale, and a language that needs plural
13497
+ forms writes them: `{count, plural, one {# wybrany} few {# wybrane} many
13498
+ {# wybranych} other {# wybranego}}`. */
12990
13499
  "selected-label"?: (HelixHeadlessTable["selectedLabel"]) | undefined;
12991
13500
  /** What screen readers hear when the chosen rows change. `{count}` is how many
12992
- rows are chosen. */
13501
+ rows are chosen, written in the locale, and a language that needs plural
13502
+ forms writes them: `{count, plural, one {# wybrany} few {# wybrane} many
13503
+ {# wybranych} other {# wybranego}}`. */
12993
13504
  selectedLabel?: (HelixHeadlessTable["selectedLabel"]) | undefined;
12994
13505
  /** The name of a row's checkbox. `{row}` is replaced with the words of the
12995
13506
  row's first cell. */
@@ -13006,10 +13517,14 @@ first, and refusing it leaves the order as it was. `default-sort` seeds an
13006
13517
  order this element then owns. */
13007
13518
  sort?: (HelixHeadlessTable["sort"]) | undefined;
13008
13519
  /** What screen readers hear when the table is sorted. `{column}` is the
13009
- column's heading and `{order}` is `ascending-label` or `descending-label`. */
13520
+ column's heading and `{direction}` is `ascending` or `descending`, so each
13521
+ order has its whole sentence. `{order}` is the deprecated
13522
+ `ascending-label` or `descending-label`. */
13010
13523
  "sorted-label"?: (HelixHeadlessTable["sortedLabel"]) | undefined;
13011
13524
  /** What screen readers hear when the table is sorted. `{column}` is the
13012
- column's heading and `{order}` is `ascending-label` or `descending-label`. */
13525
+ column's heading and `{direction}` is `ascending` or `descending`, so each
13526
+ order has its whole sentence. `{order}` is the deprecated
13527
+ `ascending-label` or `descending-label`. */
13013
13528
  sortedLabel?: (HelixHeadlessTable["sortedLabel"]) | undefined;
13014
13529
  /** What screen readers hear when the table stops being sorted. */
13015
13530
  "unsorted-label"?: (HelixHeadlessTable["unsortedLabel"]) | undefined;
@@ -13032,6 +13547,10 @@ say that without the component knowing what a row looks like. */
13032
13547
  };
13033
13548
 
13034
13549
  export type HelixHeadlessTableVueEvents = {
13550
+ /** Fired when a row is dropped at a new place, in a `reorderable` table, with every row's key in the new order. Cancelable: cancel it to keep the row where it is. */
13551
+ "helix-before-reorder": HelixHeadlessTableHelixBeforeReorderElementEvent;
13552
+ /** Fired after `helix-before-reorder` when nobody canceled it. Move your rows to the order in `keys`. Cancelable: cancel it to say the move did not happen. */
13553
+ "helix-reorder": HelixHeadlessTableHelixReorderElementEvent;
13035
13554
  /** The selection is about to change. The event carries every selected key, separated by commas. Cancelable: cancel it to keep the current selection. */
13036
13555
  "helix-select": HelixHeadlessTableHelixSelectElementEvent;
13037
13556
  /** Fired after the selection changes, with every selected key, separated by commas. */
@@ -13257,6 +13776,20 @@ export type HelixHeadlessTagVueProps = {
13257
13776
  answering, and in a `Tag.Group` the arrow keys pass over it and it cannot
13258
13777
  be selected or removed. */
13259
13778
  disabled?: (HelixHeadlessTag["disabled"]) | undefined;
13779
+ /** The remove button's name, read by screen readers, with `{label}` for the
13780
+ tag's own words.
13781
+
13782
+ "Remove" rather than the mixin's "Dismiss": a tag is taken out of a set,
13783
+ which is a different act from closing a message. One sentence with the
13784
+ tag's words in it, so a translation puts them where its language does. */
13785
+ "dismiss-label"?: (HelixHeadlessTag["dismissLabel"]) | undefined;
13786
+ /** The remove button's name, read by screen readers, with `{label}` for the
13787
+ tag's own words.
13788
+
13789
+ "Remove" rather than the mixin's "Dismiss": a tag is taken out of a set,
13790
+ which is a different act from closing a message. One sentence with the
13791
+ tag's words in it, so a translation puts them where its language does. */
13792
+ dismissLabel?: (HelixHeadlessTag["dismissLabel"]) | undefined;
13260
13793
  /** Makes the label a link to this address. */
13261
13794
  href?: (HelixHeadlessTag["href"]) | undefined;
13262
13795
  /** What the tag stands for in its group's `value`.
@@ -13265,20 +13798,6 @@ Absent is the tag's own words, its category first. */
13265
13798
  value?: (HelixHeadlessTag["value"]) | undefined;
13266
13799
  /** Whether the element shows a control that dismisses it. */
13267
13800
  dismissible?: (HelixHeadlessTag["dismissible"]) | undefined;
13268
- /** The dismiss control's label, read by screen readers.
13269
-
13270
- `attribute` is spelled out because Lit lowercases a property name to
13271
- derive one rather than dash-casing it, so this would otherwise be
13272
- reachable only as `dismisslabel`, which nobody would guess and no linter
13273
- would catch. */
13274
- "dismiss-label"?: (HelixHeadlessTag["dismissLabel"]) | undefined;
13275
- /** The dismiss control's label, read by screen readers.
13276
-
13277
- `attribute` is spelled out because Lit lowercases a property name to
13278
- derive one rather than dash-casing it, so this would otherwise be
13279
- reachable only as `dismisslabel`, which nobody would guess and no linter
13280
- would catch. */
13281
- dismissLabel?: (HelixHeadlessTag["dismissLabel"]) | undefined;
13282
13801
  /** Whether the tag holds its group's tab stop.
13283
13802
 
13284
13803
  Written by `Tag.Group` on every tag it holds, and unset outside one, which
@@ -13420,18 +13939,22 @@ browser's message. */
13420
13939
  required?: (HelixHeadlessTextarea["required"]) | undefined;
13421
13940
  /** The message shown when the field is required and empty.
13422
13941
 
13423
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
13424
- set and the browser's own on a text field, which the browser writes in
13425
- the reader's language. Every other word a control speaks is a property,
13942
+ **Absent, or empty, is the control's own sentence**, "Choose one to
13943
+ continue." on a set and the browser's own on a text field, which the
13944
+ browser writes in the reader's language. A family with a sentence of its
13945
+ own declares it as this property's English, a word property a page
13946
+ registers for its locale under the family's key. Every other word a control speaks is a property,
13426
13947
  and this one was the English a form in another language still spoke in
13427
13948
  the bubble it raises on submit: `feedback` replaces the message under
13428
13949
  the field and does not reach that one. */
13429
13950
  "value-missing-message"?: (HelixHeadlessTextarea["valueMissingMessage"]) | undefined;
13430
13951
  /** The message shown when the field is required and empty.
13431
13952
 
13432
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
13433
- set and the browser's own on a text field, which the browser writes in
13434
- the reader's language. Every other word a control speaks is a property,
13953
+ **Absent, or empty, is the control's own sentence**, "Choose one to
13954
+ continue." on a set and the browser's own on a text field, which the
13955
+ browser writes in the reader's language. A family with a sentence of its
13956
+ own declares it as this property's English, a word property a page
13957
+ registers for its locale under the family's key. Every other word a control speaks is a property,
13435
13958
  and this one was the English a form in another language still spoke in
13436
13959
  the bubble it raises on submit: `feedback` replaces the message under
13437
13960
  the field and does not reach that one. */
@@ -13560,14 +14083,14 @@ on why a wheel cannot do either. */
13560
14083
  /** The message shown when a range holds more than two times.
13561
14084
 
13562
14085
  **Every sentence a control raises in the browser's bubble is a property**,
13563
- so a form in another language speaks it. Absent is the control's own
13564
- sentence, in English. */
14086
+ so a form in another language speaks it. Unset is the sentence registered
14087
+ for the page's language, then the English. */
13565
14088
  "range-length-message"?: (HelixHeadlessTimeInput["rangeLengthMessage"]) | undefined;
13566
14089
  /** The message shown when a range holds more than two times.
13567
14090
 
13568
14091
  **Every sentence a control raises in the browser's bubble is a property**,
13569
- so a form in another language speaks it. Absent is the control's own
13570
- sentence, in English. */
14092
+ so a form in another language speaks it. Unset is the sentence registered
14093
+ for the page's language, then the English. */
13571
14094
  rangeLengthMessage?: (HelixHeadlessTimeInput["rangeLengthMessage"]) | undefined;
13572
14095
  /** The message shown when a time is after `max`, with `{max}` filled in as
13573
14096
  the field displays it. */
@@ -13637,12 +14160,28 @@ not touch, and React reads that as a hydration mismatch. The absent
13637
14160
  attribute *is* the list, which the stylesheet reads as the base rule, so
13638
14161
  only the departure has to be named. */
13639
14162
  variant?: (HelixHeadlessTimeInput["variant"]) | undefined;
14163
+ /** What a row of segments reports when the field is required and every
14164
+ segment is empty, where `value-missing-message` is not set. `{kind}` is
14165
+ `date` or `time`. */
14166
+ "empty-message"?: (HelixHeadlessTimeInput["emptyMessage"]) | undefined;
14167
+ /** What a row of segments reports when the field is required and every
14168
+ segment is empty, where `value-missing-message` is not set. `{kind}` is
14169
+ `date` or `time`. */
14170
+ emptyMessage?: (HelixHeadlessTimeInput["emptyMessage"]) | undefined;
13640
14171
  /** What a screen reader hears for a segment with nothing in it, which a
13641
14172
  sighted reader sees as dashes. */
13642
14173
  "empty-segment-label"?: (HelixHeadlessTimeInput["emptySegmentLabel"]) | undefined;
13643
14174
  /** What a screen reader hears for a segment with nothing in it, which a
13644
14175
  sighted reader sees as dashes. */
13645
14176
  emptySegmentLabel?: (HelixHeadlessTimeInput["emptySegmentLabel"]) | undefined;
14177
+ /** What a row of segments reports while some segments are set and others
14178
+ are not, where `bad-input-message` is not set. `{kind}` is `date` or
14179
+ `time`. */
14180
+ "incomplete-message"?: (HelixHeadlessTimeInput["incompleteMessage"]) | undefined;
14181
+ /** What a row of segments reports while some segments are set and others
14182
+ are not, where `bad-input-message` is not set. `{kind}` is `date` or
14183
+ `time`. */
14184
+ incompleteMessage?: (HelixHeadlessTimeInput["incompleteMessage"]) | undefined;
13646
14185
  /** Whether the field is a row of segments, one for each part of the date or
13647
14186
  time, in place of a line of text.
13648
14187
 
@@ -13724,6 +14263,12 @@ as `+3`, does not say what it does. */
13724
14263
  "max-tags"?: (HelixHeadlessTimeInput["maxTags"] | `${number}`) | undefined;
13725
14264
  /** How many tokens to show before the rest become a count. */
13726
14265
  maxTags?: (HelixHeadlessTimeInput["maxTags"]) | undefined;
14266
+ /** The count of the tokens past `max-tags`, as it is shown, with `{count}`
14267
+ for the number, written in the element's locale. */
14268
+ "rest-text"?: (HelixHeadlessTimeInput["restText"]) | undefined;
14269
+ /** The count of the tokens past `max-tags`, as it is shown, with `{count}`
14270
+ for the number, written in the element's locale. */
14271
+ restText?: (HelixHeadlessTimeInput["restText"]) | undefined;
13727
14272
  /** The value the control starts with. A form reset returns it to this value,
13728
14273
  and to the `value` attribute where this one is not written, as a native
13729
14274
  control resets to the `value` it declares. */
@@ -13753,18 +14298,22 @@ browser's message. */
13753
14298
  required?: (HelixHeadlessTimeInput["required"]) | undefined;
13754
14299
  /** The message shown when the field is required and empty.
13755
14300
 
13756
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
13757
- set and the browser's own on a text field, which the browser writes in
13758
- the reader's language. Every other word a control speaks is a property,
14301
+ **Absent, or empty, is the control's own sentence**, "Choose one to
14302
+ continue." on a set and the browser's own on a text field, which the
14303
+ browser writes in the reader's language. A family with a sentence of its
14304
+ own declares it as this property's English, a word property a page
14305
+ registers for its locale under the family's key. Every other word a control speaks is a property,
13759
14306
  and this one was the English a form in another language still spoke in
13760
14307
  the bubble it raises on submit: `feedback` replaces the message under
13761
14308
  the field and does not reach that one. */
13762
14309
  "value-missing-message"?: (HelixHeadlessTimeInput["valueMissingMessage"]) | undefined;
13763
14310
  /** The message shown when the field is required and empty.
13764
14311
 
13765
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
13766
- set and the browser's own on a text field, which the browser writes in
13767
- the reader's language. Every other word a control speaks is a property,
14312
+ **Absent, or empty, is the control's own sentence**, "Choose one to
14313
+ continue." on a set and the browser's own on a text field, which the
14314
+ browser writes in the reader's language. A family with a sentence of its
14315
+ own declares it as this property's English, a word property a page
14316
+ registers for its locale under the family's key. Every other word a control speaks is a property,
13768
14317
  and this one was the English a form in another language still spoke in
13769
14318
  the bubble it raises on submit: `feedback` replaces the message under
13770
14319
  the field and does not reach that one. */
@@ -13837,13 +14386,19 @@ export type HelixHeadlessTimePickerVueProps = {
13837
14386
 
13838
14387
  **Every sentence a control raises in the browser's bubble is a property**,
13839
14388
  named for the validity flag it reports, so a form in another language
13840
- speaks it. Absent is the control's own sentence, in English. */
14389
+ speaks it. Unset is the sentence registered for the page's language, then
14390
+ the English. `{shape}` is how a time is written, `HH:mm` or `HH:mm:ss`, and
14391
+ `{mode}` is `single`, `range` or `multiple`, so each can have its own
14392
+ sentence. */
13841
14393
  "bad-input-message"?: (HelixHeadlessTimePicker["badInputMessage"]) | undefined;
13842
14394
  /** The validation message for a value that is not a time.
13843
14395
 
13844
14396
  **Every sentence a control raises in the browser's bubble is a property**,
13845
14397
  named for the validity flag it reports, so a form in another language
13846
- speaks it. Absent is the control's own sentence, in English. */
14398
+ speaks it. Unset is the sentence registered for the page's language, then
14399
+ the English. `{shape}` is how a time is written, `HH:mm` or `HH:mm:ss`, and
14400
+ `{mode}` is `single`, `range` or `multiple`, so each can have its own
14401
+ sentence. */
13847
14402
  badInputMessage?: (HelixHeadlessTimePicker["badInputMessage"]) | undefined;
13848
14403
  /** Times that cannot be chosen, as `HH:mm`, separated by commas or spaces.
13849
14404
 
@@ -14199,14 +14754,22 @@ A subset of the tone axis: a toast reports a status and never a brand role. */
14199
14754
  `attribute` is spelled out because Lit lowercases a property name to
14200
14755
  derive one rather than dash-casing it, so this would otherwise be
14201
14756
  reachable only as `dismisslabel`, which nobody would guess and no linter
14202
- would catch. */
14757
+ would catch.
14758
+
14759
+ A word property: register it for a locale under the host's key. A family
14760
+ that names the control otherwise, such as Tag's `Remove {label}`,
14761
+ declares its own English with `@words` above the override. */
14203
14762
  "dismiss-label"?: (HelixHeadlessToastItem["dismissLabel"]) | undefined;
14204
14763
  /** The dismiss control's label, read by screen readers.
14205
14764
 
14206
14765
  `attribute` is spelled out because Lit lowercases a property name to
14207
14766
  derive one rather than dash-casing it, so this would otherwise be
14208
14767
  reachable only as `dismisslabel`, which nobody would guess and no linter
14209
- would catch. */
14768
+ would catch.
14769
+
14770
+ A word property: register it for a locale under the host's key. A family
14771
+ that names the control otherwise, such as Tag's `Remove {label}`,
14772
+ declares its own English with `@words` above the override. */
14210
14773
  dismissLabel?: (HelixHeadlessToastItem["dismissLabel"]) | undefined;
14211
14774
  };
14212
14775
 
@@ -14226,7 +14789,9 @@ export type HelixHeadlessToastHelixDismissElementEvent =
14226
14789
 
14227
14790
  export type HelixHeadlessToastVueProps = {
14228
14791
  /** The key that takes focus to the stack and back, such as `F8` or `Alt+T`:
14229
- keys joined by `+`, the last one the key. Empty turns it off. */
14792
+ keys joined by `+`, the last one the key, as `Announcement`'s `hotkey`
14793
+ reads them: `mod` is Command on Apple devices and Control elsewhere.
14794
+ Empty turns it off. */
14230
14795
  hotkey?: (HelixHeadlessToast["hotkey"]) | undefined;
14231
14796
  /** Accessible name for the region, with `{hotkey}` filled in. Translate it with
14232
14797
  the rest of your interface. */
@@ -14350,18 +14915,22 @@ browser's message. */
14350
14915
  required?: (HelixHeadlessToggleGroup["required"]) | undefined;
14351
14916
  /** The message shown when the field is required and empty.
14352
14917
 
14353
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
14354
- set and the browser's own on a text field, which the browser writes in
14355
- the reader's language. Every other word a control speaks is a property,
14918
+ **Absent, or empty, is the control's own sentence**, "Choose one to
14919
+ continue." on a set and the browser's own on a text field, which the
14920
+ browser writes in the reader's language. A family with a sentence of its
14921
+ own declares it as this property's English, a word property a page
14922
+ registers for its locale under the family's key. Every other word a control speaks is a property,
14356
14923
  and this one was the English a form in another language still spoke in
14357
14924
  the bubble it raises on submit: `feedback` replaces the message under
14358
14925
  the field and does not reach that one. */
14359
14926
  "value-missing-message"?: (HelixHeadlessToggleGroup["valueMissingMessage"]) | undefined;
14360
14927
  /** The message shown when the field is required and empty.
14361
14928
 
14362
- **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
14363
- set and the browser's own on a text field, which the browser writes in
14364
- the reader's language. Every other word a control speaks is a property,
14929
+ **Absent, or empty, is the control's own sentence**, "Choose one to
14930
+ continue." on a set and the browser's own on a text field, which the
14931
+ browser writes in the reader's language. A family with a sentence of its
14932
+ own declares it as this property's English, a word property a page
14933
+ registers for its locale under the family's key. Every other word a control speaks is a property,
14365
14934
  and this one was the English a form in another language still spoke in
14366
14935
  the bubble it raises on submit: `feedback` replaces the message under
14367
14936
  the field and does not reach that one. */
@@ -14554,6 +15123,14 @@ default slot is the trigger, which is the older form.
14554
15123
  Names an element in the same tree, so a tooltip inside another component's
14555
15124
  shadow root points at one in that root rather than one in the document.
14556
15125
 
15126
+ Give the tooltip an `id` and name it in the trigger's `aria-describedby`,
15127
+ so the trigger is described in the server's markup and at rest:
15128
+
15129
+ ```html
15130
+ <button aria-describedby="save-tip" id="save">Save</button>
15131
+ <helix-headless-tooltip content="Save your work" for="save" id="save-tip"></helix-headless-tooltip>
15132
+ ```
15133
+
14557
15134
  **In React this arrives as a property and not as an attribute**, which is
14558
15135
  worth knowing before someone reads the DOM and thinks it did not take.
14559
15136
  Measured against React 19.2.8: `for` exists on the prototype, so React sets
@@ -14716,11 +15293,11 @@ The shape is `Carousel`'s, which is the nearest thing in the library: a
14716
15293
  nextLabel?: (HelixHeadlessTour["nextLabel"]) | undefined;
14717
15294
  /** Draws each stop's place in the run in its panel, as well as saying it. */
14718
15295
  progress?: (HelixHeadlessTour["progress"]) | undefined;
14719
- /** Each stop's place in the run, with `{index}` and `{count}` filled in.
14720
- Translate it with the rest of your text. */
15296
+ /** Each stop's place in the run, with `{index}` and `{count}` filled in and
15297
+ written in the locale. Translate it with the rest of your text. */
14721
15298
  "progress-label"?: (HelixHeadlessTour["progressLabel"]) | undefined;
14722
- /** Each stop's place in the run, with `{index}` and `{count}` filled in.
14723
- Translate it with the rest of your text. */
15299
+ /** Each stop's place in the run, with `{index}` and `{count}` filled in and
15300
+ written in the locale. Translate it with the rest of your text. */
14724
15301
  progressLabel?: (HelixHeadlessTour["progressLabel"]) | undefined;
14725
15302
  /** Label for the control that leaves the tour. */
14726
15303
  "skip-label"?: (HelixHeadlessTour["skipLabel"]) | undefined;
@@ -14951,16 +15528,40 @@ export type HelixHeadlessTreeHelixActivateElementEvent =
14951
15528
  /** `helix-before-activate` event type */
14952
15529
  export type HelixHeadlessTreeHelixBeforeActivateElementEvent =
14953
15530
  HelixHeadlessTreeElementEvent<HelixBeforeActivateEvent>;
15531
+ /** `helix-before-reorder` event type */
15532
+ export type HelixHeadlessTreeHelixBeforeReorderElementEvent =
15533
+ HelixHeadlessTreeElementEvent<HelixBeforeReorderEvent>;
15534
+ /** `helix-reorder` event type */
15535
+ export type HelixHeadlessTreeHelixReorderElementEvent =
15536
+ HelixHeadlessTreeElementEvent<HelixReorderEvent>;
14954
15537
  /** `helix-select` event type */
14955
15538
  export type HelixHeadlessTreeHelixSelectElementEvent =
14956
15539
  HelixHeadlessTreeElementEvent<HelixSelectEvent>;
14957
15540
 
14958
15541
  export type HelixHeadlessTreeVueProps = {
15542
+ /** What screen readers hear when a held item is put back, or a move is
15543
+ refused, in a `reorderable` tree. */
15544
+ "canceled-label"?: (HelixHeadlessTree["canceledLabel"]) | undefined;
15545
+ /** What screen readers hear when a held item is put back, or a move is
15546
+ refused, in a `reorderable` tree. */
15547
+ canceledLabel?: (HelixHeadlessTree["canceledLabel"]) | undefined;
15548
+ /** What screen readers hear when a held item is dropped, in a `reorderable` tree. */
15549
+ "dropped-label"?: (HelixHeadlessTree["droppedLabel"]) | undefined;
15550
+ /** What screen readers hear when a held item is dropped, in a `reorderable` tree. */
15551
+ droppedLabel?: (HelixHeadlessTree["droppedLabel"]) | undefined;
14959
15552
  /** Accessible name for the tree.
14960
15553
 
14961
15554
  An `aria-label` or `aria-labelledby` on the host names the tree too, and
14962
15555
  wins over this. */
14963
15556
  label?: (HelixHeadlessTree["label"]) | undefined;
15557
+ /** What screen readers hear each time an item moves, in a `reorderable`
15558
+ tree. `{name}` is the item's words, `{position}` its place among its
15559
+ siblings, counting from 1, and `{count}` the number of siblings. */
15560
+ "moved-label"?: (HelixHeadlessTree["movedLabel"]) | undefined;
15561
+ /** What screen readers hear each time an item moves, in a `reorderable`
15562
+ tree. `{name}` is the item's words, `{position}` its place among its
15563
+ siblings, counting from 1, and `{count}` the number of siblings. */
15564
+ movedLabel?: (HelixHeadlessTree["movedLabel"]) | undefined;
14964
15565
  /** What a deeper level means: `peer` for no change, `subordinate` for a lower
14965
15566
  rank, or `heading` for a parent that heads the items under it.
14966
15567
 
@@ -14996,6 +15597,16 @@ branch as a label; a headless consumer reads the attribute and the
14996
15597
  written here appears in the served markup of every tree anybody renders.
14997
15598
  The resting state is the absence of the attribute, which is `peer`. */
14998
15599
  nesting?: (HelixHeadlessTree["nesting"]) | undefined;
15600
+ /** What screen readers hear when a click on a grip picks up an item, in a
15601
+ `reorderable` tree. `{name}` is the item's words. */
15602
+ "picked-up-label"?: (HelixHeadlessTree["pickedUpLabel"]) | undefined;
15603
+ /** What screen readers hear when a click on a grip picks up an item, in a
15604
+ `reorderable` tree. `{name}` is the item's words. */
15605
+ pickedUpLabel?: (HelixHeadlessTree["pickedUpLabel"]) | undefined;
15606
+ /** Lets you move items among their siblings, by dragging a grip or with Alt
15607
+ and an arrow. The tree moves no item itself: you move your data on
15608
+ `helix-reorder`. */
15609
+ reorderable?: (HelixHeadlessTree["reorderable"]) | undefined;
14999
15610
  /** Whether a reader can check many items, or choose only the items at the
15000
15611
  ends. Unset, one item is chosen at a time, branches included.
15001
15612
 
@@ -15047,14 +15658,20 @@ export type HelixHeadlessTreeVueEvents = {
15047
15658
  "helix-activate": HelixHeadlessTreeHelixActivateElementEvent;
15048
15659
  /** Fired before the current node changes, and cancelable. Canceling it is the only way to stop the change. */
15049
15660
  "helix-before-activate": HelixHeadlessTreeHelixBeforeActivateElementEvent;
15661
+ /** Fired when an item is dropped at a new place among its siblings, in a `reorderable` tree, with the siblings' keys in the new order. Cancelable: cancel it to keep the item where it is. */
15662
+ "helix-before-reorder": HelixHeadlessTreeHelixBeforeReorderElementEvent;
15663
+ /** Fired after `helix-before-reorder` when nobody canceled it. Move your items to the order in `keys`, each an item's `value`, or its words where it has none. Cancelable: cancel it to say the move did not happen. */
15664
+ "helix-reorder": HelixHeadlessTreeHelixReorderElementEvent;
15050
15665
  /** Fired when an item is chosen. The item sends it, and you can listen for it on the tree. Cancelable: canceling it changes nothing. */
15051
15666
  "helix-select": HelixHeadlessTreeHelixSelectElementEvent;
15052
15667
  };
15053
15668
 
15054
15669
  export type HelixHeadlessTrendVueProps = {
15055
- /** The word read out after the direction when the move is an improvement. */
15670
+ /** The word read out after the direction when the move is an improvement,
15671
+ `{betterLabel}` in `judgment-label`. */
15056
15672
  "better-label"?: (HelixHeadlessTrend["betterLabel"]) | undefined;
15057
- /** The word read out after the direction when the move is an improvement. */
15673
+ /** The word read out after the direction when the move is an improvement,
15674
+ `{betterLabel}` in `judgment-label`. */
15058
15675
  betterLabel?: (HelixHeadlessTrend["betterLabel"]) | undefined;
15059
15676
  /** Which way the measurement moved, as `movement` says it. */
15060
15677
  direction?: (HelixHeadlessTrend["direction"]) | undefined;
@@ -15093,9 +15710,23 @@ revenue up is good news and latency up is bad news, and only the consumer
15093
15710
  knows which one this is. Set it once per metric and it holds while the
15094
15711
  movement changes underneath. */
15095
15712
  good?: (HelixHeadlessTrend["good"]) | undefined;
15096
- /** The locale `value` is written in, such as `de` for `1.234,5`.
15097
-
15098
- Absent uses the runtime's own. Set it on a page rendered on a server, so
15713
+ /** What the `direction` part says. `{direction}` is the word for the
15714
+ movement, `up-label`, `down-label` or `unchanged-label`, and
15715
+ `{judgment}` is `better` or `worse` where `good` judges the move, so a
15716
+ language whose words agree with the movement writes each phrase whole:
15717
+ `{judgment, select, better {...} worse {...} other {...}}`.
15718
+ `{betterLabel}` and `{worseLabel}` are `better-label` and `worse-label`. */
15719
+ "judgment-label"?: (HelixHeadlessTrend["judgmentLabel"]) | undefined;
15720
+ /** What the `direction` part says. `{direction}` is the word for the
15721
+ movement, `up-label`, `down-label` or `unchanged-label`, and
15722
+ `{judgment}` is `better` or `worse` where `good` judges the move, so a
15723
+ language whose words agree with the movement writes each phrase whole:
15724
+ `{judgment, select, better {...} worse {...} other {...}}`.
15725
+ `{betterLabel}` and `{worseLabel}` are `better-label` and `worse-label`. */
15726
+ judgmentLabel?: (HelixHeadlessTrend["judgmentLabel"]) | undefined;
15727
+ /** The locale the words and `value` are in, such as `de` for `1.234,5`.
15728
+
15729
+ Absent reads the nearest `lang`, then the runtime's own. Set it on a page rendered on a server, so
15099
15730
  the server and the browser write the figure alike. */
15100
15731
  locale?: (HelixHeadlessTrend["locale"]) | undefined;
15101
15732
  /** Which way the measurement moved.
@@ -15124,9 +15755,11 @@ both are written. The size is written in the `value` part with
15124
15755
  `format-options` and `locale`, in place of a slotted metric. Absent leaves
15125
15756
  the movement to `movement` and the metric to the slot. */
15126
15757
  value?: (HelixHeadlessTrend["value"]) | undefined;
15127
- /** The word read out after the direction when the move is a setback. */
15758
+ /** The word read out after the direction when the move is a setback,
15759
+ `{worseLabel}` in `judgment-label`. */
15128
15760
  "worse-label"?: (HelixHeadlessTrend["worseLabel"]) | undefined;
15129
- /** The word read out after the direction when the move is a setback. */
15761
+ /** The word read out after the direction when the move is a setback,
15762
+ `{worseLabel}` in `judgment-label`. */
15130
15763
  worseLabel?: (HelixHeadlessTrend["worseLabel"]) | undefined;
15131
15764
  };
15132
15765
 
@@ -15411,9 +16044,11 @@ ours to promise: the attribute is ignored cross-origin, so a file served
15411
16044
  from somewhere else opens rather than saves, which is the browser's rule
15412
16045
  and not something a player can work around. */
15413
16046
  extraControls?: (HelixHeadlessVideo["extraControls"]) | undefined;
15414
- /** What the control that skips ahead is called, with `{seconds}` filled in. */
16047
+ /** What the control that skips ahead is called. `{seconds}` is how far, written
16048
+ in the locale, and each language writes the forms it has. */
15415
16049
  "forward-label"?: (HelixHeadlessVideo["forwardLabel"]) | undefined;
15416
- /** What the control that skips ahead is called, with `{seconds}` filled in. */
16050
+ /** What the control that skips ahead is called. `{seconds}` is how far, written
16051
+ in the locale, and each language writes the forms it has. */
15417
16052
  forwardLabel?: (HelixHeadlessVideo["forwardLabel"]) | undefined;
15418
16053
  /** What the control that fills the screen is called.
15419
16054
 
@@ -15507,9 +16142,13 @@ bar: two of the same control is worse than either placement. */
15507
16142
  "pause-label"?: (HelixHeadlessVideo["pauseLabel"]) | undefined;
15508
16143
  /** The name of the play control while pressing it would pause the video. */
15509
16144
  pauseLabel?: (HelixHeadlessVideo["pauseLabel"]) | undefined;
15510
- /** How the volume is read out, with `{percent}` filled in. */
16145
+ /** How the volume is read out. `{percent}` is the volume from 0 to 100,
16146
+ written in the locale, and a language that needs plural forms writes them
16147
+ with `{percent, plural, ...}`. */
15511
16148
  "percent-label"?: (HelixHeadlessVideo["percentLabel"]) | undefined;
15512
- /** How the volume is read out, with `{percent}` filled in. */
16149
+ /** How the volume is read out. `{percent}` is the volume from 0 to 100,
16150
+ written in the locale, and a language that needs plural forms writes them
16151
+ with `{percent, plural, ...}`. */
15513
16152
  percentLabel?: (HelixHeadlessVideo["percentLabel"]) | undefined;
15514
16153
  /** What the control that floats the video over other windows is called. */
15515
16154
  "pip-label"?: (HelixHeadlessVideo["pipLabel"]) | undefined;
@@ -15541,9 +16180,11 @@ this is what a screen reader calls it on arriving. */
15541
16180
  "remote-label"?: (HelixHeadlessVideo["remoteLabel"]) | undefined;
15542
16181
  /** What the control that casts the video to another device is called. */
15543
16182
  remoteLabel?: (HelixHeadlessVideo["remoteLabel"]) | undefined;
15544
- /** What the control that skips back is called, with `{seconds}` filled in. */
16183
+ /** What the control that skips back is called. `{seconds}` is how far, written
16184
+ in the locale, and each language writes the forms it has. */
15545
16185
  "rewind-label"?: (HelixHeadlessVideo["rewindLabel"]) | undefined;
15546
- /** What the control that skips back is called, with `{seconds}` filled in. */
16186
+ /** What the control that skips back is called. `{seconds}` is how far, written
16187
+ in the locale, and each language writes the forms it has. */
15547
16188
  rewindLabel?: (HelixHeadlessVideo["rewindLabel"]) | undefined;
15548
16189
  /** What the scrubber is called. */
15549
16190
  "seek-label"?: (HelixHeadlessVideo["seekLabel"]) | undefined;
@@ -15743,7 +16384,8 @@ arrive. The list does not ask for more while it is set. */
15743
16384
  loadingLabel?: (HelixHeadlessVirtualList["loadingLabel"]) | undefined;
15744
16385
  /** Places each row by its own measured height. Without it, rows are placed
15745
16386
  by one height: `estimate` until rows are drawn, then the drawn rows' height,
15746
- read once.
16387
+ read once. Rows that come out different heights are placed by their own
16388
+ heights either way.
15747
16389
 
15748
16390
  **Off by default, because the straight line is better when it holds.** One
15749
16391
  height makes offset and index convert by division, which can never
@@ -16081,7 +16723,7 @@ export interface WcToolkitVueGlobalComponents {
16081
16723
  HelixHeadlessCanvasNodeVueProps,
16082
16724
  HelixHeadlessCanvasNodeVueEvents
16083
16725
  >;
16084
- /** A board of cards and connectors, drawn by Helix. On a canvas every position is data that someone placed, so drawing is arithmetic over rectangles with no layout to compute. 'Map' takes a slotted map, because another renderer draws its tiles. The format is [JSON Canvas](https://jsoncanvas.org), an open format. Each node has an 'x', 'y', 'width', 'height', and a type. Each edge names the two nodes it joins and the sides it leaves and arrives on. A card belongs to a group when it sits inside the group's bounds. The cards are text in the DOM, so a screen reader can read them. The family adds a reading order and states each card's connections as text. 'order' sets the reading order: - 'spatial' bands the cards into rows. - 'edges' follows the arrows, starting from the cards that nothing points to. **Cards move by default.** The board writes the new 'x' and 'y' onto the card, the way an input writes its own value, and dispatches two events: - 'helix-before-move' for every step. Cancel it to hold the positions in your own state and apply them yourself. - 'helix-move' once the move is finished. A resize dispatches the same pair with a size. Set 'readonly' on the board to keep every card in place, such as on a published board. Set 'readonly' on one card or connection to keep only that one in place. Set 'snap' to a length in the document's units, such as '32', and a card that is moved or resized lands on a multiple of it. Carrying a card, a corner, a connection, or the selection box near the edge of the board moves the board under it, so a card can be taken to a place off screen in one drag. A connection let go within 20 pixels of a card arrives at it. A double click on the empty board zooms in about that point, and Shift with a double click zooms out. Keyboard behavior: - One card holds the board's tab stop. - The arrow keys move through the cards in reading order. The card you land on scrolls into view, and its connections are announced with it. - Shift with an arrow key moves the card: by 16 units, or to the next multiple of 'snap' where it is set. Alt with an arrow key resizes it from its bottom right corner the same way. - The connections leaving a card are stops of their own, straight after it. Enter on one moves to the card it arrives at. - What a key changes that a reader cannot see is said: where a card moved to, its new size, how many cards are selected, and the zoom. A selected card or connection says so when a reader arrives on it. Every drag also works with clicks, as WCAG 2.5.7 requires for a pointer that cannot hold a button down. Click a selected card's move handle, a corner, a card's connection point, or the end of a selected connection to pick it up. It follows the pointer with no button held, and the next click puts it down where a drag would have. On touch, the next tap sets where it lands. Escape, or a press outside the board, puts it back. So a finger connects two cards with three taps: the card, one of its points, and the card to connect to. Connecting and removing dispatch requests, and your code applies them: - Drawing from a card's handle to another card, or pressing C on one card and Enter on another, dispatches 'helix-connect'. - Delete on a card or a connection dispatches 'helix-remove'. The event names every connection that removing the card would leave without an end. The board applies a move itself, because the card already exists. A connection is a new element, and React discards an element the board adds to its markup on the next render, so you write the connection. Cards and connections are 'helix-canvas-node' and 'helix-canvas-edge' elements, so they are in the served markup whichever renderer wrote them. The library fetches nothing, and an array passed to an element is missing from the first paint of a server-rendered React page. 'fromJsonCanvas' turns a JSON Canvas document into their props, and 'toJsonCanvas()' writes a board back out. */
16726
+ /** A board of cards and connectors, drawn by Helix. On a canvas every position is data that someone placed, so drawing is arithmetic over rectangles with no layout to compute. 'Map' takes a slotted map, because another renderer draws its tiles. The format is [JSON Canvas](https://jsoncanvas.org), an open format. Each node has an 'x', 'y', 'width', 'height', and a type. Each edge names the two nodes it joins and the sides it leaves and arrives on. A card belongs to a group when it sits inside the group's bounds. The cards are text in the DOM, so a screen reader can read them. The family adds a reading order and states each card's connections as text. 'order' sets the reading order: - 'spatial' bands the cards into rows. - 'edges' follows the arrows, starting from the cards that nothing points to. **Cards move by default.** The board writes the new 'x' and 'y' onto the card, the way an input writes its own value, and dispatches two events: - 'helix-before-move' for every step. Cancel it to hold the positions in your own state and apply them yourself. - 'helix-move' once the move is finished. A resize dispatches the same pair with a size. Set 'readonly' on the board to keep every card in place, such as on a published board. Set 'readonly' on one card or connection to keep only that one in place. Set 'snap' to a length in the document's units, such as '32', and a card that is moved or resized lands on a multiple of it. Carrying a card, a corner, a connection, or the selection box near the edge of the board moves the board under it, so a card can be taken to a place off screen in one drag. A connection let go within 20 pixels of a card arrives at it. A double click on the empty board zooms in about that point, and Shift with a double click zooms out. Keyboard behavior: - One card holds the board's tab stop. - The arrow keys move through the cards in reading order. The card you land on scrolls into view, and its connections are announced with it. - Shift with an arrow key moves the card: by 16 units, or to the next multiple of 'snap' where it is set. Alt with an arrow key resizes it from its bottom right corner the same way. - The connections leaving a card are stops of their own, straight after it. Enter on one moves to the card it arrives at. - What a key changes that a reader cannot see is said: where a card moved to, its new size, how many cards are selected, and the zoom. A selected card or connection says so when a reader arrives on it. Every drag also works with clicks, as WCAG 2.5.7 requires for a pointer that cannot hold a button down. Click a selected card's move handle, a corner, a card's connection point, or the end of a selected connection to pick it up. It follows the pointer with no button held, and the next click puts it down where a drag would have. On touch, the next tap sets where it lands. Escape, or a press outside the board, puts it back. So a finger connects two cards with three taps: the card, one of its points, and the card to connect to. Connecting and removing dispatch requests, and your code applies them: - Drawing from a card's handle to another card, or pressing C on one card and Enter on another, dispatches 'helix-connect'. - Delete on a card or a connection dispatches 'helix-remove'. The event names every connection that removing the card would leave without an end. Once your page removes what Delete asked for, focus moves to the next stop, to the one before where it was the last, and to the board where none is left. A focused card your page removes for its own reasons hands focus on the same way, unless the reader has already moved focus somewhere else. The board applies a move itself, because the card already exists. A connection is a new element, and React discards an element the board adds to its markup on the next render, so you write the connection. Cards and connections are 'helix-canvas-node' and 'helix-canvas-edge' elements, so they are in the served markup whichever renderer wrote them. The library fetches nothing, and an array passed to an element is missing from the first paint of a server-rendered React page. 'fromJsonCanvas' turns a JSON Canvas document into their props, and 'toJsonCanvas()' writes a board back out. */
16085
16727
  "helix-headless-canvas": DefineCustomElement<
16086
16728
  HelixHeadlessCanvas,
16087
16729
  HelixHeadlessCanvasVueProps,
@@ -16171,7 +16813,7 @@ export interface WcToolkitVueGlobalComponents {
16171
16813
  HelixHeadlessCopyButtonVueProps,
16172
16814
  HelixHeadlessCopyButtonVueEvents
16173
16815
  >;
16174
- /** Declare the columns as 'TableColumn' children and pass the rows as an array. The schema stays readable in the HTML, and the rows can be windowed, which ten thousand row elements cannot be. '''html <helix-headless-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-headless-table-column field="name" sortable>Name</helix-headless-table-column> <helix-headless-table-column field="size" text-align="end" sortable .cell=${bytes}>Size</helix-headless-table-column> </helix-headless-data-table> ''' For a short table written out by hand, use 'Table', which takes rows as markup. Sort and filter apply to the whole set, including the rows on other pages. **The cell values do not server-render.** The headings and the row elements do. Reading a cell needs the columns, and Lit SSR does not pass the column children to this element, so a crawler sees an empty table of the right shape. Use 'Table' when the served HTML has to carry the values. 'selectable' adds a column of checkboxes, keyed on 'row-key': - A row is selected by its key, so the selection survives a sort, a filter, and a page change. - 'selected' holds the chosen keys, comma separated, the same shape 'Listbox' uses for a multiple choice. As with 'sort', writing it applies the selection, and 'default-selected' holds what the markup declared. - The checkbox in the heading selects every row in the result, across pages, and shows a dash while only some are chosen. - Shift with a press on a checkbox selects every row between it and the row last chosen. To act on a single row, such as opening it, put a link or a button in a cell. **Keyboard.** The grid is one tab stop, and the arrow keys move between its cells, the headings included. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the heading row and the 'load-more' row included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the grid. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's controls. Escape moves back to the cell, and Tab moves between the controls of one cell. | | Enter, Space on a sortable heading | Sorts by the column. | | Enter, Space on the 'load-more' row | Sends 'helix-load-more'. | | Space on a row | Selects the row, in a 'selectable' table. | | Shift with Down or Up | Selects the rows it moves across, in a 'selectable' table. | | Shift with Space | Selects every row from the one last chosen, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | Right on a row header in a tree grid | Opens a closed row, and moves one cell along an open one. | | Left on a row header in a tree grid | Closes an open row, and moves to the parent of a closed one. | | A letter or a word | Moves to the next row whose row header starts with what you typed. | 'selected' and 'expanded' hold their keys in the order of the rows, as do 'helix-select', 'helix-selected' and 'helix-expand'. Each row is named by its row header, the column marked 'row-header', or the first column with a 'field' where none is. A screen reader says it as a reader moves between rows. **Rows that hold rows.** 'child-field' names the field that holds a row's child rows, and the grid becomes a tree grid. The row header column draws a mark that a press opens and closes a row by, and 'expanded' holds the keys of the open rows, which 'row-key' names. Right on a closed row's header opens it, Left on an open one closes it, and Left on a child moves to its parent. A sort orders the rows under each parent, and a search shows the rows that lead to each match, open. 'load-more' adds a row after the last one with a button that sends 'helix-load-more'. A 'windowed' table also sends it by itself once a reader scrolls within one screen of the end, once for each number of rows. Add the next rows to 'rows', and set 'loading' while they are on their way. The controls inside the cells leave the tab order, so Tab moves past the whole grid. A windowed table keeps the row holding focus drawn while the rest scroll away. People can resize and reorder the columns. 'resizable' on a column puts a separator on its edge. 'reorderable' on the table puts a grip on each heading that has a 'field', moved by dragging or with the arrow keys. The new order is written to 'order' as a list of fields. Your markup is not rewritten: the table assigns the headings to its header in that order. 'csv()' returns the result as text: every row that passes the filter, in the order and the columns on screen. Saving the file is up to you. 'DataTable' has no 'columns' attribute. Each 'TableColumn' is part of the schema, so you size a column with its own 'width'. 'Table' has 'columns' because its cells are markup you write and it can have no columns at all. Written on 'DataTable', 'columns' has no effect, so watch for it when you move a table from 'Table' to 'DataTable'. */
16816
+ /** Declare the columns as 'TableColumn' children and pass the rows as an array. The schema stays readable in the HTML, and the rows can be windowed, which ten thousand row elements cannot be. '''html <helix-headless-data-table .rows=${rows} sort="name:asc" page-size="20"> <helix-headless-table-column field="name" sortable>Name</helix-headless-table-column> <helix-headless-table-column field="size" text-align="end" sortable .cell=${bytes}>Size</helix-headless-table-column> </helix-headless-data-table> ''' For a short table written out by hand, use 'Table', which takes rows as markup. Sort and filter apply to the whole set, including the rows on other pages. **The cell values do not server-render.** The headings and the row elements do. Reading a cell needs the columns, and Lit SSR does not pass the column children to this element, so a crawler sees an empty table of the right shape. Use 'Table' when the served HTML has to carry the values. 'selectable' adds a column of checkboxes, keyed on 'row-key': - A row is selected by its key, so the selection survives a sort, a filter, and a page change. - 'selected' holds the chosen keys, comma separated, the same shape 'Listbox' uses for a multiple choice. As with 'sort', writing it applies the selection, and 'default-selected' holds what the markup declared. - The checkbox in the heading selects every row in the result, across pages, and shows a dash while only some are chosen. - Shift with a press on a checkbox selects every row between it and the row last chosen. To act on a single row, such as opening it, put a link or a button in a cell. **Keyboard.** The grid is one tab stop, and the arrow keys move between its cells, the headings included. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the heading row and the 'load-more' row included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the grid. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's controls. Escape moves back to the cell, and Tab moves between the controls of one cell. | | Enter, Space on a sortable heading | Sorts by the column. | | Enter, Space on the 'load-more' row | Sends 'helix-load-more'. | | Space on a row | Selects the row, in a 'selectable' table. | | Shift with Down or Up | Selects the rows it moves across, in a 'selectable' table. | | Shift with Space | Selects every row from the one last chosen, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | Right on a row header in a tree grid | Opens a closed row, and moves one cell along an open one. | | Left on a row header in a tree grid | Closes an open row, and moves to the parent of a closed one. | | A letter or a word | Moves to the next row whose row header starts with what you typed. | 'selected' and 'expanded' hold their keys in the order of the rows, as do 'helix-select', 'helix-selected' and 'helix-expand'. Each row is named by its row header, the column marked 'row-header', or the first column with a 'field' where none is. A screen reader says it as a reader moves between rows. **Rows that hold rows.** 'child-field' names the field that holds a row's child rows, and the grid becomes a tree grid. The row header column draws a mark that a press opens and closes a row by, and 'expanded' holds the keys of the open rows, which 'row-key' names. Right on a closed row's header opens it, Left on an open one closes it, and Left on a child moves to its parent. A sort orders the rows under each parent, and a search shows the rows that lead to each match, open. 'load-more' adds a row after the last one with a button that sends 'helix-load-more'. A 'windowed' table also sends it by itself once a reader scrolls within one screen of the end, once for each number of rows. Add the next rows to 'rows', and set 'loading' while they are on their way. The controls inside the cells leave the tab order, so Tab moves past the whole grid. A windowed table keeps the row holding focus drawn while the rest scroll away. People can resize and reorder the columns. 'resizable' on a column puts a separator on its edge. 'reorderable' on the table puts a grip on each heading that has a 'field', moved by dragging or with the arrow keys. The new order is written to 'order' as a list of fields. Your markup is not rewritten: the table assigns the headings to its header in that order. **'reorderable-rows' lets people move rows.** A column of grips leads each row, named by 'move-row-label'. Drag a grip to move its row, and the table scrolls near an edge. Or press Space or Enter on a grip, or click it, to pick up its row, move it with Down and Up, Home and End, and press Space or Enter again to drop it. A click on another row drops it there, and Escape puts it back. The table says each step in its 'live' region. A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder' with 'kind' set to 'row', whose 'keys' hold every key of 'rows' in the new order. **You move the rows**: set 'rows' to the new order, and the table draws it. Set 'row-key', so a row is known by its key once it has moved. The grips do nothing while a 'sort' is set, since the sort decides the order, and a tree grid draws none. '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'. */
16175
16817
  "helix-headless-data-table": DefineCustomElement<
16176
16818
  HelixHeadlessDataTable,
16177
16819
  HelixHeadlessDataTableVueProps,
@@ -16183,7 +16825,7 @@ export interface WcToolkitVueGlobalComponents {
16183
16825
  HelixHeadlessDateInputVueProps,
16184
16826
  HelixHeadlessDateInputVueEvents
16185
16827
  >;
16186
- /** A grid of days that follows the APG date grid pattern: - The grid is one tab stop. Only the focused cell is in the tab sequence. - Arrow keys move by day and by week. - 'PageUp' and 'PageDown' move by month. - 'Home' and 'End' move to the start and end of the week. **Dates are 'YYYY-MM-DD' strings, and every calculation is in UTC**, because a local-time 'Date' shifts across a time zone or daylight-saving boundary. 'month' sets which month the grid shows, separately from 'value', so paging selects nothing and you can control the view. When unset, it follows the first selected date, then the current month. 'mode' sets how many dates are held. Unset holds one, 'range' holds two and marks the dates between them, and 'multiple' toggles each date. All three read and write the same comma-separated 'value'. 'max-view' makes the heading a button that steps back to the months of the year, and with 'year' to a page of years, as Zag's date picker does. The arrows, Home, End and the page keys move there, Enter or a press chooses, and Escape goes back to the days. 'isDateUnavailable' and 'dayContent' are properties for a script: a rule that bars dates, and what each day shows in place of its number. The month heading is a live region, so a screen reader hears the new month when Previous or Next is pressed. Neither moves past 'min' or 'max', and the keys stop at them too. A value outside the bounds, on a barred day, or off 'step' reports 'rangeUnderflow', 'rangeOverflow', 'badInput' or 'stepMismatch', so a form does not submit it. */
16828
+ /** 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. **The days are the Gregorian calendar's**, written in 'calendar': the locale's own where its months are the Gregorian months, as 'th-TH' writes 2569 for 2026, and 'gregory' where they are not, as for 'fa-IR'. 'month' sets which month the grid shows, separately from 'value', so paging selects nothing and you can control the view. When unset, it follows the first selected date, then the current month. 'mode' sets how many dates are held. Unset holds one, 'range' holds two and marks the dates between them, and 'multiple' toggles each date. All three read and write the same comma-separated 'value'. 'max-view' makes the heading a button that steps back to the months of the year, and with 'year' to a page of years, as Zag's date picker does. The arrows, Home, End and the page keys move there, Enter or a press chooses, and Escape goes back to the days. 'isDateUnavailable' and 'dayContent' are properties for a script: a rule that bars dates, and what each day shows in place of its number. The month heading is a live region, so a screen reader hears the new month when Previous or Next is pressed. Neither moves past 'min' or 'max', and the keys stop at them too. A value outside the bounds, on a barred day, or off 'step' reports 'rangeUnderflow', 'rangeOverflow', 'badInput' or 'stepMismatch', so a form does not submit it. */
16187
16829
  "helix-headless-date-picker": DefineCustomElement<
16188
16830
  HelixHeadlessDatePicker,
16189
16831
  HelixHeadlessDatePickerVueProps,
@@ -16201,7 +16843,7 @@ export interface WcToolkitVueGlobalComponents {
16201
16843
  HelixHeadlessDescriptionListVueProps,
16202
16844
  HelixHeadlessDescriptionListVueEvents
16203
16845
  >;
16204
- /** Renders a native '<dialog>' opened with 'showModal()'. The platform provides: - the top layer, so the dialog is above everything whatever the 'z-index' - a backdrop - closing with Escape - an inert page behind the dialog, unreachable by pointer, keyboard, or virtual cursor The dialog adds one thing to those: 'Tab' from its last control goes to its first, and 'Shift+Tab' from its first to its last. A native modal lets 'Tab' past its last control out to the browser's own controls. 'open' calls 'showModal()', and every way the dialog closes goes through 'requestOpen'. A native dialog closes three ways: the property, Escape, and a '<form method="dialog">' submit. Routing all three through 'requestOpen' keeps your state in step, so the dialog never closes while your state still says it is open, which would leave it impossible to reopen. The dialog's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names. While it is open, the page behind it does not scroll. The dialog is described by the words at the start of its body: the elements in the default slot before the first one that is or holds a control. A question above a form describes the dialog, and the form does not. A Helix component that draws words and no control, such as 'Text', counts as words. An 'aria-describedby' on the host replaces it. Set 'alert' for a dialog that interrupts to ask for an answer, such as a confirmation before a deletion. It is an 'alertdialog', which a screen reader announces with its description as it opens. Set 'dismissible' to draw a close control, labeled by 'dismiss-label'. */
16846
+ /** Renders a native '<dialog>' opened with 'showModal()'. The platform provides: - the top layer, so the dialog is above everything whatever the 'z-index' - a backdrop - closing with Escape - an inert page behind the dialog, unreachable by pointer, keyboard, or virtual cursor The dialog adds one thing to those: 'Tab' from its last control goes to its first, and 'Shift+Tab' from its first to its last. A native modal lets 'Tab' past its last control out to the browser's own controls. 'open' calls 'showModal()', and every way the dialog closes goes through 'requestOpen'. A native dialog closes three ways: the property, Escape, and a '<form method="dialog">' submit. Routing all three through 'requestOpen' keeps your state in step, so the dialog never closes while your state still says it is open, which would leave it impossible to reopen. The dialog's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names, and 'fallback-label' where nothing names it. While it is open, the page behind it does not scroll. The dialog is described by the words at the start of its body: the elements in the default slot before the first one that is or holds a control. A question above a form describes the dialog, and the form does not. A Helix component that draws words and no control, such as 'Text', counts as words. An 'aria-describedby' on the host replaces it. Set 'alert' for a dialog that interrupts to ask for an answer, such as a confirmation before a deletion. It is an 'alertdialog', which a screen reader announces with its description as it opens. Set 'dismissible' to draw a close control, labeled by 'dismiss-label'. */
16205
16847
  "helix-headless-dialog": DefineCustomElement<
16206
16848
  HelixHeadlessDialog,
16207
16849
  HelixHeadlessDialogVueProps,
@@ -16219,7 +16861,7 @@ export interface WcToolkitVueGlobalComponents {
16219
16861
  HelixHeadlessDonutChartVueProps,
16220
16862
  HelixHeadlessDonutChartVueEvents
16221
16863
  >;
16222
- /** Uses 'MixinControllerOpen', so 'open', 'defaultOpen', and the 'helix-before-open' and 'helix-before-close' events work the same way as on an accordion item. The drawer is modal by default, which means four things: - focus is trapped inside: 'Tab' from the last control goes to the first, and 'Shift+Tab' from the first to the last, as in 'Dialog' - Escape and a press outside close it - the page behind is covered - the page behind does not scroll A drawer with 'modal="false"' leaves the page usable and still closes on Escape, in a browser without 'closedby' as well. **A touch or a pen swipes it away**, toward the edge it came from, resolved against the writing direction. A swipe past halfway, or a quick one, closes it through the same request as every other way out. 'snap-points' lists the fractions of the panel a reader can leave on screen, such as '0.5 1' for a sheet that rests half open: it opens at the smallest, and a swipe settles at the nearest. While a swipe moves the panel, the distance is written on it as '--drawer-swipe-x' and '--drawer-swipe-y'. 'swipe="false"' turns swiping off. 'snap' is the snap point the panel rests at, and ':state(snapped)' is on the host while that is less than the whole panel. 'snapTo()' moves it to another. **Focus moving to a control past the window's edge opens the panel to its largest snap point**, so a reader moving through a half open sheet with 'Tab' never lands on a control they cannot see. Set 'dismissible' to draw a close control in the corner, labeled by 'dismiss-label', as 'Dialog' draws one. The panel's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names. Content stays mounted when the drawer is closed, so it is in the server markup and can animate. A closed '<dialog>' is already out of the tab order and the accessibility tree, so the drawer does not write 'inert'. The 'role', 'aria-modal', and the scrim also come from the '<dialog>' element. 'drawer-root.ssr.spec.ts' checks that the panel has no hand-written 'inert' or 'role'. Open the drawer declaratively with the platform's invoker attributes: '''html <helix-headless-button commandfor="nav" command="--toggle">Menu</helix-headless-button> <helix-headless-drawer id="nav">…</helix-headless-drawer> ''' */
16864
+ /** Uses 'MixinControllerOpen', so 'open', 'defaultOpen', and the 'helix-before-open' and 'helix-before-close' events work the same way as on an accordion item. The drawer is modal by default, which means four things: - focus is trapped inside: 'Tab' from the last control goes to the first, and 'Shift+Tab' from the first to the last, as in 'Dialog' - Escape and a press outside close it - the page behind is covered - the page behind does not scroll A drawer with 'modal="false"' leaves the page usable and still closes on Escape, in a browser without 'closedby' as well. **A touch or a pen swipes it away**, toward the edge it came from, resolved against the writing direction. A swipe past halfway, or a quick one, closes it through the same request as every other way out. 'snap-points' lists the fractions of the panel a reader can leave on screen, such as '0.5 1' for a sheet that rests half open: it opens at the smallest, and a swipe settles at the nearest. While a swipe moves the panel, the distance is written on it as '--drawer-swipe-x' and '--drawer-swipe-y'. 'swipe="false"' turns swiping off. 'snap' is the snap point the panel rests at, and ':state(snapped)' is on the host while that is less than the whole panel. 'snapTo()' moves it to another. **Focus moving to a control past the window's edge opens the panel to its largest snap point**, so a reader moving through a half open sheet with 'Tab' never lands on a control they cannot see. Set 'dismissible' to draw a close control in the corner, labeled by 'dismiss-label', as 'Dialog' draws one. The panel's name is 'label' when you set it. Otherwise it is the heading in the 'header' slot, or the elements an 'aria-labelledby' on the host names, and 'fallback-label' where nothing names it. 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> ''' */
16223
16865
  "helix-headless-drawer": DefineCustomElement<
16224
16866
  HelixHeadlessDrawer,
16225
16867
  HelixHeadlessDrawerVueProps,
@@ -16279,7 +16921,7 @@ export interface WcToolkitVueGlobalComponents {
16279
16921
  HelixHeadlessFilterInputVueProps,
16280
16922
  HelixHeadlessFilterInputVueEvents
16281
16923
  >;
16282
- /** Formats a date with 'Intl' where it is shown, so you do not write the same 'Intl' call and options in your own code. **'elapsed' shows compact relative time for a feed**, such as "42m", "3h", or "1d". After six days it shows a date. In en-US, 'Intl.NumberFormat' narrow renders both 'minute' and 'month' as 'm', so a compact "3m" could mean three minutes or three months. 'elapsedTime' in 'helix/core' does the measurement. **'relative' shows the same reading in words**, such as "3 hours ago" at 'long', "3 hr. ago" at 'short' and "3h ago" at 'narrow', the styles 'sl-relative-time' offers. 'numeric="always"' says "1 day ago" where the default says "yesterday". **'date-style' and 'time-style' take each locale's own pattern**, such as "Tuesday, August 4, 2026" at 'full', and stand in for the separate fields, which 'Intl' refuses beside them. 'hour-cycle' sets a twelve or twenty-four hour clock either way. **The text refreshes on one timer shared by the page.** Each element schedules an update for when its current reading expires, and an element showing a date schedules none, so a long feed left open costs almost nothing. 'frozen' draws the reading once and leaves it. **'fields' draws each field of a date as a part of its own**, such as 'day', 'month' and 'year', so a stylesheet can set the year in a lighter ink or the weekday in capitals with '::part()'. The text between the fields is the locale's own and has no part. An 'elapsed' or 'relative' reading is one phrase, with no parts inside it. **The output is always '<time datetime>'**, so copy and paste and scripts parsing the page get the exact instant, whatever the visible text says. A screen reader reads the text, so an 'elapsed' reading is named in full, such as "3 hours ago", and carries the whole date as its title. **A date with no time, such as '2026-08-04', is that day everywhere.** It is formatted in UTC unless 'time-zone' says otherwise, as Date Input and Date Picker format their dates, so a reader west of UTC sees August 4 and not August 3. */
16924
+ /** Formats a date with 'Intl' where it is shown, so you do not write the same 'Intl' call and options in your own code. **'elapsed' shows compact relative time for a feed**, such as "42m", "3h", or "1d". After six days it shows a date. In en-US, 'Intl.NumberFormat' narrow renders both 'minute' and 'month' as 'm', so a compact "3m" could mean three minutes or three months. 'elapsedTime' in 'helix/core' does the measurement. **'relative' shows the same reading in words**, such as "3 hours ago" at 'long', "3 hr. ago" at 'short' and "3h ago" at 'narrow', the styles 'sl-relative-time' offers. 'numeric="always"' says "1 day ago" where the default says "yesterday". **'date-style' and 'time-style' take each locale's own pattern**, such as "Tuesday, August 4, 2026" at 'full', and stand in for the separate fields, which 'Intl' refuses beside them. 'hour-cycle' sets a twelve or twenty-four hour clock either way. **The text refreshes on one timer shared by the page.** Each element schedules an update for when its current reading expires, and an element showing a date schedules none, so a long feed left open costs almost nothing. 'frozen' draws the reading once and leaves it. **'fields' draws each field of a date as a part of its own**, such as 'day', 'month' and 'year', so a stylesheet can set the year in a lighter ink or the weekday in capitals with '::part()'. The text between the fields is the locale's own and has no part. An 'elapsed' or 'relative' reading is one phrase, with no parts inside it. **The output is always '<time datetime>'**, so copy and paste and scripts parsing the page get the exact instant, whatever the visible text says. A screen reader reads the text, so an 'elapsed' reading is named in full, such as "3 hours ago", and carries the whole date as its title. **A date with no time, such as '2026-08-04', is that day everywhere.** It is formatted in UTC unless 'time-zone' says otherwise, as Date Input and Date Picker format their dates, so a reader west of UTC sees August 4 and not August 3. **A date is written in a calendar Date Picker draws**: the locale's own where its months are the Gregorian months, as 'th-TH' writes 2569 for 2026, and 'gregory' where they are not, as for 'fa-IR'. 'calendar' picks one of the five. */
16283
16925
  "helix-headless-format-date": DefineCustomElement<
16284
16926
  HelixHeadlessFormatDate,
16285
16927
  HelixHeadlessFormatDateVueProps,
@@ -16351,19 +16993,19 @@ export interface WcToolkitVueGlobalComponents {
16351
16993
  HelixHeadlessLineChartVueProps,
16352
16994
  HelixHeadlessLineChartVueEvents
16353
16995
  >;
16354
- /** Provides layout and semantics. The row is a target only when you set 'href'. **'href' makes the row a link.** The component wraps the leading content, the label, and the description in an '<a part="link">' inside the row, as 'Tree.Item' does. An anchor of your own cannot wrap slots it does not own. With the anchor, the row is a target, Enter follows it, middle click opens a new tab, the status bar shows the destination, and all of it works before JavaScript runs. **The 'end' slot sits beside the link, outside it**, so a button or a menu there is a control of its own: a click on it does not follow the link, and its name is not part of the link's. Client-side routing needs your own handling. A router cannot render its anchor inside the shadow root, so to navigate without a page load, intercept the click: the anchor is in 'composedPath()'. Handle only a plain primary click, so native gestures keep working. **For a row that holds controls and is not a destination, use 'data-list-item'.** With 'href' unset, the row is not a link. 'current' marks the row a reader is on, such as the page in a list of pages, with 'aria-current' on its link, or on the row where it has none. **In a list with 'selection-mode', the row is a row of a grid.** The list gives it its role, its place in the one tab stop and, where the list selects, whether it is selected. Its link leaves the tab order there, and Enter follows it from the row. */
16996
+ /** Provides layout and semantics. The row is a target only when you set 'href'. **'href' makes the row a link.** The component wraps the leading content, the label, and the description in an '<a part="link">' inside the row, as 'Tree.Item' does. An anchor of your own cannot wrap slots it does not own. With the anchor, the row is a target, Enter follows it, middle click opens a new tab, the status bar shows the destination, and all of it works before JavaScript runs. **The 'end' slot sits beside the link, outside it**, so a button or a menu there is a control of its own: a click on it does not follow the link, and its name is not part of the link's. Client-side routing needs your own handling. A router cannot render its anchor inside the shadow root, so to navigate without a page load, intercept the click: the anchor is in 'composedPath()'. Handle only a plain primary click, so native gestures keep working. **For a row that holds controls and is not a destination, use 'data-list-item'.** With 'href' unset, the row is not a link. 'current' marks the row a reader is on, such as the page in a list of pages, with 'aria-current' on its link, or on the row where it has none. **In a list with 'selection-mode', the row is a row of a grid.** The list gives it its role, its place in the one tab stop and, where the list selects, whether it is selected. Its link leaves the tab order there, and Enter follows it from the row. **In a 'reorderable' list, the row has a grip** after its 'end' slot, named by the list's 'move-label'. The list says which row is moving and where the drop indicator is, with the 'dragging', 'drop-before', and 'drop-after' states. */
16355
16997
  "helix-headless-list-item": DefineCustomElement<
16356
16998
  HelixHeadlessListItem,
16357
16999
  HelixHeadlessListItemVueProps,
16358
17000
  HelixHeadlessListItemVueEvents
16359
17001
  >;
16360
- /** Sets 'role="list"' on the host, so a screen reader counts the rows and announces each one's position, such as "1 of 7". **'selection-mode' makes the list interactive**, in the way of a grid list: a grid of rows that is one tab stop. 'single' selects one row at a time and 'multiple' any number, and 'value' holds the selected rows' values, separated by commas. A change asks with 'helix-before-change' and tells with 'change'. 'none' selects nothing, so a press acts on the row. A 'disabled' row is passed over. Each row is named by its label and described by its description, so the words of the controls in 'end' are not read as part of its name. 'selection-behavior' says what a press does to the rows already selected. 'toggle', the default, adds or takes out the row. 'replace' selects the row alone, as a file list does, and the arrow keys carry the selection with them. Control or Command with a press then adds or takes out one row. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous row. Under 'replace', selects it. | | Home, End | Moves to the first or the last row. Under 'replace', selects it. | | Page Down, Page Up | Moves a box's height of rows, so the row at one edge lands at the other. Under 'replace', selects the row it lands on. | | A letter or a word | Moves to the next row whose words start with what you typed. | | Left, Right | Moves between the row and the controls in its 'end' slot. | | Space | Selects the row, or lets it go. | | Shift with Down, Up, Home, End, Page Down, Page Up or Space | Selects every row from the last one pressed, in 'multiple'. | | Control or Command with Down, Up, Home, End, Page Down or Page Up | Moves without selecting, under 'replace'. | | Control or Command with A | Selects every row, in 'multiple'. | | Escape | Lets go of every selected row, asking first, and keeps the key from the dialog or menu around the list. With nothing selected, the key goes on to them. | | Enter | Acts on the row: follows its link, or sends 'helix-action' from it. | A press with Shift selects every row from the last one pressed, and a press with Control or Command adds or takes out one row under 'replace'. **Leave 'selection-mode' unset for a list a reader reads**, and set it for one a reader chooses from or acts on. The rows of an interactive list are grid rows, which hold controls as a list box option cannot. Give a control in 'end' 'tabindex="-1"' to leave it to the arrow keys and out of the tab order. 'start' and 'reversed' number an ordered list as '<ol>' does. The list writes where the numbers start and which way they run as '--list-first' and '--list-step' on its slot, which the styled tier counts from. Reversed with no 'start' counts down from the number of rows, which a server cannot know, so served markup counts from one until the list runs. */
17002
+ /** Sets 'role="list"' on the host, so a screen reader counts the rows and announces each one's position, such as "1 of 7". **'selection-mode' makes the list interactive**, in the way of a grid list: a grid of rows that is one tab stop. 'single' selects one row at a time and 'multiple' any number, and 'value' holds the selected rows' values, separated by commas. A change asks with 'helix-before-change' and tells with 'change'. 'none' selects nothing, so a press acts on the row. A 'disabled' row is passed over. Each row is named by its label and described by its description, so the words of the controls in 'end' are not read as part of its name. 'selection-behavior' says what a press does to the rows already selected. 'toggle', the default, adds or takes out the row. 'replace' selects the row alone, as a file list does, and the arrow keys carry the selection with them. Control or Command with a press then adds or takes out one row. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous row. Under 'replace', selects it. | | Home, End | Moves to the first or the last row. Under 'replace', selects it. | | Page Down, Page Up | Moves a box's height of rows, so the row at one edge lands at the other. Under 'replace', selects the row it lands on. | | A letter or a word | Moves to the next row whose words start with what you typed. | | Left, Right | Moves between the row and the controls in its 'end' slot. | | Space | Selects the row, or lets it go. | | Shift with Down, Up, Home, End, Page Down, Page Up or Space | Selects every row from the last one pressed, in 'multiple'. | | Control or Command with Down, Up, Home, End, Page Down or Page Up | Moves without selecting, under 'replace'. | | Control or Command with A | Selects every row, in 'multiple'. | | Escape | Lets go of every selected row, asking first, and keeps the key from the dialog or menu around the list. With nothing selected, the key goes on to them. | | Enter | Acts on the row: follows its link, or sends 'helix-action' from it. | A press with Shift selects every row from the last one pressed, and a press with Control or Command adds or takes out one row under 'replace'. **Leave 'selection-mode' unset for a list a reader reads**, and set it for one a reader chooses from or acts on. The rows of an interactive list are grid rows, which hold controls as a list box option cannot. Give a control in 'end' 'tabindex="-1"' to leave it to the arrow keys and out of the tab order. **'reorderable' lets you move rows.** Each row gets a grip after its 'end' slot, named by 'move-label'. Drag a grip to move its row, and the list scrolls near an edge. Or press a grip with Space, Enter, or a click to pick up its row, move it with the arrow keys, and press the grip again to drop it. A click on another row drops it there, and Escape puts it back. The list says each step in its 'live' region. A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder', whose 'keys' hold every row's value in the new order. **You move the rows**: the list moves no element of yours, so your framework keeps the order it rendered. | Key, on a held row's grip | What it does | |---|---| | Down, Up | Moves the row one place. | | Home, End | Moves the row to the top or the bottom. | | Space, Enter | Drops the row. | | Escape | Puts the row back where it was. | 'start' and 'reversed' number an ordered list as '<ol>' does. The list writes where the numbers start and which way they run as '--list-first' and '--list-step' on its slot, which the styled tier counts from. Reversed with no 'start' counts down from the number of rows, which a server cannot know, so served markup counts from one until the list runs. */
16361
17003
  "helix-headless-list": DefineCustomElement<
16362
17004
  HelixHeadlessList,
16363
17005
  HelixHeadlessListVueProps,
16364
17006
  HelixHeadlessListVueEvents
16365
17007
  >;
16366
- /** 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. **Keyboard.** The list is one tab stop, or its filter field is where there is one. In a single-choice list the highlight is the choice unless 'manual' is set; then Enter, Space or a click chooses. | Key | What it does | |---|---| | Down, Up | Moves the highlight to the next or the previous option, round from the last to the first. With 'layout="grid"', to the option below or above, stopping at the edge. | | Right, Left | With 'layout="grid"', moves to the next or the previous option, mirrored right to left. In a filter field, moves the caret. | | Home, End | Moves to the first or the last option. In a filter field, moves the caret. | | Page Down, Page Up | Moves by as many options as the list shows at once. | | A letter or a word | Moves to the next option whose words start with what you typed. In a filter field, types it. | | Enter | Chooses the highlighted option, or follows it where it is a link. | | Space | Chooses the highlighted option, or with 'multiple' toggles it. In a filter field, types a space. | | Shift with Down or Up | With 'multiple', adds the option the highlight moves to. In a filter field, moves the highlight and leaves the value. | | Shift with Space | With 'multiple', adds every option from the one last chosen to the highlighted one. In a filter field, types a space. | | Shift with Home or End | With 'multiple', adds every option from the highlight to that end. In a filter field, hold Control as well. | | Control or Command with A | With 'multiple', chooses every option, or none where all are chosen. In a filter field, selects the text. | | Escape | In a filter field, clears the filter. | **ARIA.** The 'items' part is the 'listbox', named by the label and described by the hint and the message, with 'aria-multiselectable' under 'multiple', 'aria-required', 'aria-invalid', and 'aria-busy' while loading. Each option is an 'option' with 'aria-selected'. The list, or its filter field, points 'aria-activedescendant' at the highlighted option; the field is 'aria-autocomplete="list"' and controls the list. An option with 'href' is a link: Enter or a press follows it and selects nothing, and moving onto it with the arrows does not follow it. As a filter narrows the list, a screen reader hears how many options are left, such as "3 results", from 'result-label' and 'results-label'. A filter that leaves none says 'empty-text'. */
17008
+ /** 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. **Keyboard.** The list is one tab stop, or its filter field is where there is one. In a single-choice list the highlight is the choice unless 'manual' is set; then Enter, Space or a click chooses. | Key | What it does | |---|---| | Down, Up | Moves the highlight to the next or the previous option, round from the last to the first. With 'layout="grid"', to the option below or above, stopping at the edge. | | Right, Left | With 'layout="grid"', moves to the next or the previous option, mirrored right to left. In a filter field, moves the caret. | | Home, End | Moves to the first or the last option. In a filter field, moves the caret. | | Page Down, Page Up | Moves by as many options as the list shows at once. | | A letter or a word | Moves to the next option whose words start with what you typed. In a filter field, types it. | | Enter | Chooses the highlighted option, or follows it where it is a link. | | Space | Chooses the highlighted option, or with 'multiple' toggles it. In a filter field, types a space. | | Shift with Down or Up | With 'multiple', adds the option the highlight moves to. In a filter field, moves the highlight and leaves the value. | | Shift with Space | With 'multiple', adds every option from the one last chosen to the highlighted one. In a filter field, types a space. | | Shift with Home or End | With 'multiple', adds every option from the highlight to that end. In a filter field, hold Control as well. | | Control or Command with A | With 'multiple', chooses every option, or none where all are chosen. In a filter field, selects the text. | | Escape | In a filter field, clears the filter. | | Alt with Up or Down | In a 'reorderable' list, moves the highlighted option a place. Alt with Home or End moves it to either end. | **ARIA.** The 'items' part is the 'listbox', named by the label and described by the hint and the message, with 'aria-multiselectable' under 'multiple', 'aria-required', 'aria-invalid', and 'aria-busy' while loading. Each option is an 'option' with 'aria-selected'. The list, or its filter field, points 'aria-activedescendant' at the highlighted option; the field is 'aria-autocomplete="list"' and controls the list. An option with 'href' is a link: Enter or a press follows it and selects nothing, and moving onto it with the arrows does not follow it. As a filter narrows the list, a screen reader hears how many options are left, such as "3 results", from 'result-label' and 'results-label'. A filter that leaves none says 'empty-text'. **Moving options** is a separate import, '@fusion.dev/helix/listbox/reorder', so a list that never moves options carries none of its code. With it imported, 'reorderable' lets a reader move options: - Alt with Up or Down moves the highlighted option a place, and Alt with Home or End moves it to either end, as the APG's rearrangeable listbox does. The highlight stays on it. - A pointer drags an option, with a drop indicator, and the list scrolls near an edge. A press that does not travel still chooses the option. - A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder', whose 'keys' hold every value in the new order. **You move the options**, or set 'items' in the new order: the list moves no element of yours. - The list says each move in its 'live' region. The words are the 'moved-label', 'canceled-label', 'dropped-label', and 'picked-up-label' attributes, which the import reads. - An option in a group moves within its group. Options do not move while a filter narrows the list, under 'layout="grid"', or while the list is disabled. */
16367
17009
  "helix-headless-listbox": DefineCustomElement<
16368
17010
  HelixHeadlessListbox,
16369
17011
  HelixHeadlessListboxVueProps,
@@ -16501,7 +17143,7 @@ export interface WcToolkitVueGlobalComponents {
16501
17143
  HelixHeadlessNumberInputVueProps,
16502
17144
  HelixHeadlessNumberInputVueEvents
16503
17145
  >;
16504
- /** Object Inspector shows a structured value, such as an API response, a config, or a raw record, as a read-only tree with each entry's type visible. Pass the object to 'value', or name a '<script type="application/json">' by id with 'for', the same source 'VirtualList' and the charts read. JSON text works with server rendering and with React hydration, which skips object properties. 'value' wins when both are set. **Keyboard.** The tree is one tab stop, and focus moves from row to row. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous row. | | Right | Opens a closed branch, or moves into an open one. Left on a right-to-left page. | | Left | Closes an open branch, or moves to the parent. Right on a right-to-left page. | | Home, End | Moves to the first or the last row. | | Page Down, Page Up | Moves a box's height of rows, so the row at one edge lands at the other. | | Enter, Space | Opens or closes a branch. | | '*' | Opens every branch beside the active row. | | A letter or a word | Moves to the next row whose key starts with what you typed. | | Command+C, Control+C | Copies the active row, where no text is selected. | The tree is a 'treegrid', as React Aria's Tree is: each entry is a 'row' with one cell, and carries its real level, position, and set size, including in a windowed tree. Nothing in it is chosen, so no row carries 'aria-selected', and a focused row is not announced as selected. A reader opening or closing a branch sends 'helix-before-open' or 'helix-before-close', which you can cancel, and then 'toggle' with 'newState' and 'oldState', as '<details>' does. The branch is the active row, and 'expanded' holds every open branch. '*' asks once for all the branches it opens. A script writing 'expanded' or 'active' sends nothing. 'active' is the active row's path, written the way a JSON Pointer writes it: the empty string for the root and '/meta/tags/0' for an entry under it. Moving to another row sends 'helix-before-activate', which you can cancel, and then 'helix-activate', both with the path. Writing 'active' moves there and opens the branches around it, and sends nothing. 'expanded' holds the open branches by path, and writing it opens those and closes the rest. A row that closes around the active one hands it to the nearest open branch. 'filter' narrows the tree to the entries whose key or value holds the text, ignoring case, and the branches that lead to them, which it opens. A matched branch keeps everything under it. Each matched row carries 'row-match', and a screen reader hears how many entries matched from 'result-label' and 'results-label'. 'filterable' adds a field that sets it: typing sends 'helix-filter', which you can cancel, and then 'helix-filtered', and Down moves from the field to the tree. A new 'value' keeps the branches a reader opened or closed, and the active row, where the new value still has them. A branch the old value did not have opens to 'default-depth'. The copy button copies the active row, a branch as JSON and a string as its text. So do Command+C and Control+C while the tree has focus and no text is selected. The button sits beside the tree, because assistive technology cannot reliably reach a button inside a tree item. 'windowed' draws only the rows in view, for values with thousands of entries. The box needs a height for windowing to work. The styled tier sets one, and in the headless tier you set it yourself. */
17146
+ /** Object Inspector shows a structured value, such as an API response, a config, or a raw record, as a read-only tree with each entry's type visible. Pass the object to 'value', or name a '<script type="application/json">' by id with 'for', the same source 'VirtualList' and the charts read. JSON text works with server rendering and with React hydration, which skips object properties. 'value' wins when both are set. **Keyboard.** The tree is one tab stop, and focus moves from row to row. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous row. | | Right | Opens a closed branch, or moves into an open one. Left on a right-to-left page. | | Left | Closes an open branch, or moves to the parent. Right on a right-to-left page. | | Home, End | Moves to the first or the last row. | | Page Down, Page Up | Moves a box's height of rows, so the row at one edge lands at the other. | | Enter, Space | Opens or closes a branch. | | '*' | Opens every branch beside the active row. | | A letter or a word | Moves to the next row whose key starts with what you typed. | | Command+C, Control+C | Copies the active row, where no text is selected. | The tree is a 'treegrid', as React Aria's Tree is: each entry is a 'row' with one cell, and carries its real level, position, and set size, including in a windowed tree. Nothing in it is chosen, so no row carries 'aria-selected', and a focused row is not announced as selected. A reader opening or closing a branch sends 'helix-before-open' or 'helix-before-close', which you can cancel, and then 'toggle' with 'newState' and 'oldState', as '<details>' does. The branch is the active row, and 'expanded' holds every open branch. '*' asks once for all the branches it opens. A script writing 'expanded' or 'active' sends nothing. 'active' is the active row's path, written the way a JSON Pointer writes it: the empty string for the root and '/meta/tags/0' for an entry under it. Moving to another row sends 'helix-before-activate', which you can cancel, and then 'helix-activate', both with the path. Writing 'active' moves there and opens the branches around it, and sends nothing. 'expanded' holds the open branches by path, and writing it opens those and closes the rest. A row that closes around the active one hands it to the nearest open branch. 'filter' narrows the tree to the entries whose key or value holds the text, ignoring case, and the branches that lead to them, which it opens. A matched branch keeps everything under it. Each matched row carries 'row-match', and a screen reader hears how many entries matched from 'results-label'. 'filterable' adds a field that sets it: typing sends 'helix-filter', which you can cancel, and then 'helix-filtered', and Down moves from the field to the tree. A new 'value' keeps the branches a reader opened or closed, and the active row, where the new value still has them. A branch the old value did not have opens to 'default-depth'. The copy button copies the active row, a branch as JSON and a string as its text. So do Command+C and Control+C while the tree has focus and no text is selected. The button sits beside the tree, because assistive technology cannot reliably reach a button inside a tree item. 'windowed' draws only the rows in view, for values with thousands of entries. The box needs a height for windowing to work. The styled tier sets one, and in the headless tier you set it yourself. */
16505
17147
  "helix-headless-object-inspector": DefineCustomElement<
16506
17148
  HelixHeadlessObjectInspector,
16507
17149
  HelixHeadlessObjectInspectorVueProps,
@@ -16657,7 +17299,7 @@ export interface WcToolkitVueGlobalComponents {
16657
17299
  HelixHeadlessSpeedDialVueProps,
16658
17300
  HelixHeadlessSpeedDialVueEvents
16659
17301
  >;
16660
- /** 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', with 'aria-valuetext' saying the start pane's share as a percentage in the reader's locale, 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'. */
17302
+ /** 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', with 'aria-valuetext' saying the start pane's share as a percentage in the nearest 'lang', or in the reader's locale where no 'lang' is set, 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'. */
16661
17303
  "helix-headless-splitter": DefineCustomElement<
16662
17304
  HelixHeadlessSplitter,
16663
17305
  HelixHeadlessSplitterVueProps,
@@ -16705,13 +17347,13 @@ export interface WcToolkitVueGlobalComponents {
16705
17347
  HelixHeadlessTableColumnVueProps,
16706
17348
  HelixHeadlessTableColumnVueEvents
16707
17349
  >;
16708
- /** Lays out the rows on a CSS grid, so every column lines up across rows and each row stays a real element that can be styled, hidden, or made interactive. A '<table>' layout aligns columns but limits almost everything else. A grid of elements has no table structure for assistive technology, so the roles are set explicitly: 'table', 'row', 'cell', 'columnheader', and 'rowheader' for a 'header' cell in a row of values. Rows are 'display: contents', so their cells become items of the one grid. **Sorting.** A column with 'sortable' and a 'field' draws its heading as a button that sorts the rows by the text of its cells, numbers by their value. Your markup is not reordered: the table draws the rows in the sorted order. 1. Each press cycles the column through ascending, descending, and the order the rows were written in, which keeps a server's own ranking reachable. 2. 'helix-sort' asks first, with 'field:direction', or empty for the written order. Refuse it to keep the order, or to sort the rows yourself and set 'sort'. 3. 'helix-sorted' follows once the order stands, and 'sort' holds it. 4. The heading carries 'aria-sort', and a screen reader hears 'sorted-label' ("Sorted by Name, ascending") or 'unsorted-label' from a polite region. Tab reaches each sort button, and Enter or Space presses it. The 'heading' slot names the table: slot a heading or a line of text into it, and the table is named by its words. An 'aria-label' or 'aria-labelledby' on the host wins over it. **Selecting.** 'selectable' adds a column of checkboxes. 1. Each row is known by its 'value', or by its place among the rows where it has none, and 'selected' holds the chosen keys, comma separated, the same shape 'DataTable' uses. 'default-selected' is where it starts. 2. A row's checkbox is named by 'select-row-label' ("Select {row}") with the words of the row's first cell. The checkbox in the heading selects every row, and shows a dash while only some are chosen. 3. 'helix-select' asks first, with every key the change would leave. Refuse it to keep the selection. 'helix-selected' follows once it stands. 4. A chosen row takes ':state(selected)', and a screen reader hears 'selected-label' ("2 selected") from a polite region. Tab reaches each checkbox, and Space ticks it. To act on one row, put a link or a button in a cell, or give the row an 'href'. **A grid.** 'grid' makes the table one tab stop that the arrow keys move through cell by cell, the headings included, as React Aria's table is. The table is then a 'grid' and each value a 'gridcell', and the table gives every cell a 'tabindex' so focus can rest on it: set 'grid' only where the cells may carry one. For typeahead and range selection, use 'DataTable'. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the headings included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the table. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's links and controls. Escape or F2 moves back to the cell, and Tab moves between the controls of one cell. | | Enter on a cell of a row with 'href' | Follows the row's link. | | Enter, Space on a sortable heading | Sorts by the column. | | Space on a row, Enter or Space on its checkbox cell | Selects the row, in a 'selectable' table. | | Control or Command with A | Selects every row, in a 'selectable' table. | | Tab | Leaves the table. | 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. */
17350
+ /** Lays out the rows on a CSS grid, so every column lines up across rows and each row stays a real element that can be styled, hidden, or made interactive. A '<table>' layout aligns columns but limits almost everything else. A grid of elements has no table structure for assistive technology, so the roles are set explicitly: 'table', 'row', 'cell', 'columnheader', and 'rowheader' for a 'header' cell in a row of values. Rows are 'display: contents', so their cells become items of the one grid. **Sorting.** A column with 'sortable' and a 'field' draws its heading as a button that sorts the rows by the text of its cells, numbers by their value. Your markup is not reordered: the table draws the rows in the sorted order. 1. Each press cycles the column through ascending, descending, and the order the rows were written in, which keeps a server's own ranking reachable. 2. 'helix-sort' asks first, with 'field:direction', or empty for the written order. Refuse it to keep the order, or to sort the rows yourself and set 'sort'. 3. 'helix-sorted' follows once the order stands, and 'sort' holds it. 4. The heading carries 'aria-sort', and a screen reader hears 'sorted-label' ("Sorted by Name, ascending") or 'unsorted-label' from a polite region. Tab reaches each sort button, and Enter or Space presses it. The 'heading' slot names the table: slot a heading or a line of text into it, and the table is named by its words. An 'aria-label' or 'aria-labelledby' on the host wins over it. **Selecting.** 'selectable' adds a column of checkboxes. 1. Each row is known by its 'value', or by its place among the rows where it has none, and 'selected' holds the chosen keys, comma separated, the same shape 'DataTable' uses. 'default-selected' is where it starts. 2. A row's checkbox is named by 'select-row-label' ("Select {row}") with the words of the row's first cell. The checkbox in the heading selects every row, and shows a dash while only some are chosen. 3. 'helix-select' asks first, with every key the change would leave. Refuse it to keep the selection. 'helix-selected' follows once it stands. 4. A chosen row takes ':state(selected)', and a screen reader hears 'selected-label' ("2 selected") from a polite region. Tab reaches each checkbox, and Space ticks it. To act on one row, put a link or a button in a cell, or give the row an 'href'. **Moving rows.** 'reorderable' adds a column of grips before the checkboxes, under a heading named by 'row-grips-label'. 1. Each row is known by its 'value', or by its place among the rows where it has none, as for selecting. Give rows a 'value' when they move, so a key stays with its row. 2. A grip is a button named by 'move-row-label' ("Move {row}") with the words of the row's first cell. Drag it to move its row, and the page scrolls near an edge. Or press it with Space, Enter, or a click to pick the row up, move it with Up, Down, Home, and End, and press it again to drop it. A click on another row drops it there, and Escape puts it back. 3. 'helix-before-reorder' asks first, and 'helix-reorder' follows with 'keys', every row's key in the new order. **You move the rows**: the table moves no element of yours, and focus goes back to the moved row's grip once you have. 4. Each step is said in the table's live region, in words you can change: 'picked-up-label', 'moved-label', 'dropped-label', and 'canceled-label'. The grips do nothing while a sort is set. **A grid.** 'grid' makes the table one tab stop that the arrow keys move through cell by cell, the headings included, as React Aria's table is. The table is then a 'grid' and each value a 'gridcell', and the table gives every cell a 'tabindex' so focus can rest on it: set 'grid' only where the cells may carry one. For typeahead and range selection, use 'DataTable'. | Key | What it does | |---|---| | Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. | | Down, Up | Moves one row, the headings included. | | Home, End | Moves to the first or the last cell of the row. | | Control with Home or End | Moves to the first or the last cell of the table. | | Page Down, Page Up | Moves by the rows that fit in view. | | Enter, F2 | Moves into the cell's links and controls. Escape or F2 moves back to the cell, and Tab moves between the controls of one cell. | | Enter on a cell of a row with 'href' | Follows the row's link. | | Enter, Space on a sortable heading | Sorts by the column. | | Space on a row, Enter or Space on its checkbox cell | Selects the row, in a 'selectable' table. | | Enter or Space on a grip cell | Picks the row up, or drops it, in a 'reorderable' table. Up, Down, Home, and End move a row picked up, and Escape puts it back. | | Control or Command with A | Selects every row, in a 'selectable' table. | | Tab | Leaves the table. | 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. */
16709
17351
  "helix-headless-table": DefineCustomElement<
16710
17352
  HelixHeadlessTable,
16711
17353
  HelixHeadlessTableVueProps,
16712
17354
  HelixHeadlessTableVueEvents
16713
17355
  >;
16714
- /** The row renders its cells straight through and lays out none of them, so a stylesheet can place them in the table's grid and every column lines up across rows. The row still exists as an element, so you can style it, hide it, or make it interactive. In a 'selectable' table the row draws a checkbox cell before its own cells, and 'value' is the key the table's 'selected' lists it by. **'href' makes the whole row a link**, as a row action does in React Aria's table: a press anywhere on the row follows it, except on a link or a control of the row's own, and Control, Command or Shift open it the way they open a link. A drag that selects text follows nothing. A row in a table is not a stop of its own, so put the same link in a cell, usually the row header, which is what the keyboard and a screen reader reach. In a 'grid' table, Enter on any cell of the row follows it as well. */
17356
+ /** The row renders its cells straight through and lays out none of them, so a stylesheet can place them in the table's grid and every column lines up across rows. The row still exists as an element, so you can style it, hide it, or make it interactive. In a 'selectable' table the row draws a checkbox cell before its own cells, and 'value' is the key the table's 'selected' lists it by. In a 'reorderable' table the row draws a grip cell before those, holding a button named by the table's 'move-row-label', and 'value' is the key 'helix-reorder' lists it by. The table says which row is moving and where the drop indicator is, with the 'dragging', 'drop-before', and 'drop-after' states. **'href' makes the whole row a link**, as a row action does in React Aria's table: a press anywhere on the row follows it, except on a link or a control of the row's own, and Control, Command or Shift open it the way they open a link. A drag that selects text follows nothing. A row in a table is not a stop of its own, so put the same link in a cell, usually the row header, which is what the keyboard and a screen reader reach. In a 'grid' table, Enter on any cell of the row follows it as well. */
16715
17357
  "helix-headless-table-row": DefineCustomElement<
16716
17358
  HelixHeadlessTableRow,
16717
17359
  HelixHeadlessTableRowVueProps,
@@ -16813,7 +17455,7 @@ export interface WcToolkitVueGlobalComponents {
16813
17455
  HelixHeadlessToolbarVueProps,
16814
17456
  HelixHeadlessToolbarVueEvents
16815
17457
  >;
16816
- /** The trigger is slotted and stays your own element. The bubble renders in the top layer through the popover API, so an ancestor with 'overflow: hidden' does not clip it and no 'z-index' is needed. 'FloatingController' positions it and flips it to another side when the preferred side does not fit. **The tooltip describes its trigger itself, in both forms.** Wrap the trigger, or place the tooltip beside it and name the trigger with 'for': '''html <helix-headless-button id="save">Save</helix-headless-button> <helix-headless-tooltip for="save" content="Save your work"></helix-headless-tooltip> ''' The link is an element reference on the control that takes focus, and it is never written into your markup before a reader has acted. A trigger that is a Helix component is described at once, inside its own shadow root. A plain element in your markup is described when a reader first points at it or focuses it, which is after any hydration, and only where you have written no 'aria-describedby' or 'aria-labelledby' of your own. Write 'aria-describedby' pointing at the tooltip yourself to have the link in the server's markup. Where the browser has no element references, write it yourself; the tooltip warns once on first open if nothing links the two. In the 'for' form the tooltip itself is out of the accessibility tree while its bubble is down, so a reader walking the page meets its words once, as the trigger's description. The tooltip shows on hover and on focus. It hides on pointer leave, on blur, on Escape, and when the trigger is activated. The pointer can move from the trigger onto the bubble and the bubble stays, unless you set 'hoverable="false"'. 'delay' is how long the pointer rests before it shows, and 'delay-out' how long it stays once the pointer leaves. Once one tooltip is showing, moving to another trigger shows its tooltip with no 'delay', and the first one hides. The same holds for 'skip-delay' milliseconds after a tooltip hides, 300 unless you set it. 'show-on="focus"' shows the tooltip on keyboard focus only, for a hint a pointer does not need. */
17458
+ /** The trigger 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. **Place the tooltip beside its trigger, name the trigger with 'for', and name the tooltip in the trigger's 'aria-describedby'.** The description is then in your own markup, so it is in the server's HTML and in the accessibility tree at rest, in every browser, before anyone points at the trigger or focuses it: '''html <helix-headless-button aria-describedby="save-tip" id="save">Save</helix-headless-button> <helix-headless-tooltip content="Save your work" for="save" id="save-tip"></helix-headless-tooltip> ''' Without the attribute, the tooltip links itself through an element reference on the control that takes focus, and it never writes into your markup before you act, so hydration stays intact. A trigger that is a Helix component is described at once, inside its own shadow root. A plain element in your markup is described when you first point at it or focus it, so a screen reader in reading mode meets it with no description until then. Where the browser has no element references, nothing links the two, and the tooltip warns once on first open. The tooltip can also wrap its trigger, which describes a Helix component and leaves a plain element undescribed. In the 'for' form the tooltip itself is out of the accessibility tree while its bubble is down, so you meet its words once, as the trigger's description. The tooltip shows on hover and on focus. It hides on pointer leave, on blur, on Escape, and when the trigger is activated. The pointer can move from the trigger onto the bubble and the bubble stays, unless you set 'hoverable="false"'. 'delay' is how long the pointer rests before it shows, and 'delay-out' how long it stays once the pointer leaves. Once one tooltip is showing, moving to another trigger shows its tooltip with no 'delay', and the first one hides. The same holds for 'skip-delay' milliseconds after a tooltip hides, 300 unless you set it. 'show-on="focus"' shows the tooltip on keyboard focus only, for a hint a pointer does not need. */
16817
17459
  "helix-headless-tooltip": DefineCustomElement<
16818
17460
  HelixHeadlessTooltip,
16819
17461
  HelixHeadlessTooltipVueProps,
@@ -16831,13 +17473,13 @@ export interface WcToolkitVueGlobalComponents {
16831
17473
  HelixHeadlessTourStopVueProps,
16832
17474
  HelixHeadlessTourStopVueEvents
16833
17475
  >;
16834
- /** 'open' comes from 'MixinControllerOpen', the same state a disclosure holds, so you can respond to a branch opening and control the state yourself. The row renders 'aria-expanded'. Each item is an element because it holds state: whether it is open, selected, and focused. An item is a branch when something is slotted into 'children'. This is detected on the client, so server-rendered markup shows a leaf and the twisty appears on hydration. **'href' makes the whole row a link**, rendered as an '<a>'. Enter, middle click, and the status bar then work anywhere on the row. Pressing a branch, or Enter or Space on it, opens or closes it. A branch with a 'value' is chosen as well and sends 'helix-select', unless the tree has 'nesting="heading"', where a branch names the list under it, or 'selection-mode="leaf"', where only the items at the ends are chosen. A 'disabled' item is reached by the arrow keys and announced as unavailable, and a press, Enter or Space on it does nothing. A 'lazy' item is a branch whose children you load when it opens: opening it sends 'helix-load', the row says it is busy, and the children you add appear in it. Remove 'lazy' once they are in. */
17476
+ /** 'open' comes from 'MixinControllerOpen', the same state a disclosure holds, so you can respond to a branch opening and control the state yourself. The row renders 'aria-expanded'. Each item is an element because it holds state: whether it is open, selected, and focused. An item is a branch when something is slotted into 'children'. This is detected on the client, so server-rendered markup shows a leaf and the twisty appears on hydration. **'href' makes the whole row a link**, rendered as an '<a>'. Enter, middle click, and the status bar then work anywhere on the row. Pressing a branch, or Enter or Space on it, opens or closes it. A branch with a 'value' is chosen as well and sends 'helix-select', unless the tree has 'nesting="heading"', where a branch names the list under it, or 'selection-mode="leaf"', where only the items at the ends are chosen. A 'disabled' item is reached by the arrow keys and announced as unavailable, and a press, Enter or Space on it does nothing. A 'lazy' item is a branch whose children you load when it opens: opening it sends 'helix-load', the row says it is busy, and the children you add appear in it. Remove 'lazy' once they are in. **In a 'reorderable' tree, the row has a grip** at its far end, which a pointer drags to move the item among its siblings. The tree says which item is moving and where the drop indicator is, with the 'dragging', 'drop-before', and 'drop-after' states. */
16835
17477
  "helix-headless-tree-item": DefineCustomElement<
16836
17478
  HelixHeadlessTreeItem,
16837
17479
  HelixHeadlessTreeItemVueProps,
16838
17480
  HelixHeadlessTreeItemVueEvents
16839
17481
  >;
16840
- /** The tree is a single tab stop, and arrow keys move focus between items, as the tree pattern requires, so Tab moves past a long sidebar in one press. The tree moves the tab stop to the focused item, so the browser's focus order stays intact. Items are found with 'instanceof', never by tag name, so the headless tier does not depend on the styled one. Typing a letter moves to the next visible item whose name starts with it, and '*' opens every branch beside the focused item. 'selection-mode="multiple"' draws a check mark on every row and lets a reader check many, as Web Awesome's and Ark UI's checkbox trees do. Checking a branch checks every item under it, and a branch some of whose items are checked is partly checked. Space or a press on the mark checks the focused row, and Enter or a press on a branch's row opens it. 'active' then holds the checked values, comma separated, which 'values' also gives as a list, and the tree says 'aria-multiselectable'. 'selection-mode="leaf"' chooses one item at a time and only the items at the ends: a press, Enter or Space on a branch opens or closes it and chooses nothing, as Web Awesome's 'leaf' mode does. Keys: Up and Down Arrow move between the items a reader can see; Right Arrow opens a shut branch and then moves into it, and Left Arrow shuts an open one and then moves to its parent, the two swapping on a right-to-left page. Home and End go to the first and the last item, Enter and Space choose or open, and the tree's one tab stop stays on the item last reached. In a tree of check marks, Control+A (Command+A on an Apple keyboard) checks every item or clears them all, and Shift with Up or Down Arrow moves and checks. */
17482
+ /** The tree is a single tab stop, and arrow keys move focus between items, as the tree pattern requires, so Tab moves past a long sidebar in one press. The tree moves the tab stop to the focused item, so the browser's focus order stays intact. Items are found with 'instanceof', never by tag name, so the headless tier does not depend on the styled one. Typing a letter moves to the next visible item whose name starts with it, and '*' opens every branch beside the focused item. 'selection-mode="multiple"' draws a check mark on every row and lets a reader check many, as Web Awesome's and Ark UI's checkbox trees do. Checking a branch checks every item under it, and a branch some of whose items are checked is partly checked. Space or a press on the mark checks the focused row, and Enter or a press on a branch's row opens it. 'active' then holds the checked values, comma separated, which 'values' also gives as a list, and the tree says 'aria-multiselectable'. 'selection-mode="leaf"' chooses one item at a time and only the items at the ends: a press, Enter or Space on a branch opens or closes it and chooses nothing, as Web Awesome's 'leaf' mode does. Keys: Up and Down Arrow move between the items a reader can see; Right Arrow opens a shut branch and then moves into it, and Left Arrow shuts an open one and then moves to its parent, the two swapping on a right-to-left page. Home and End go to the first and the last item, Enter and Space choose or open, and the tree's one tab stop stays on the item last reached. In a tree of check marks, Control+A (Command+A on an Apple keyboard) checks every item or clears them all, and Shift with Up or Down Arrow moves and checks. **'reorderable' lets you move items among their siblings.** Alt with Up or Down moves the focused item a place, and Alt with Home or End to the first or the last place among its siblings, as the APG's rearrangeable listbox does. Each row gets a grip at its far end: drag it to move the item, and the tree scrolls near an edge. A click on a grip picks the item up and a click on one of its siblings drops it there, which needs no drag. The arrows move an item picked up that way, Enter or Space drops it, and Escape puts it back. The tree says each step in its 'live' region. A drop sends 'helix-before-reorder', which you can refuse, and then 'helix-reorder', whose 'keys' hold the siblings in the new order. **You move the items**: the tree moves no element of yours, and focus follows the moved item once you have. Moving an item into another branch is not part of this. */
16841
17483
  "helix-headless-tree": DefineCustomElement<
16842
17484
  HelixHeadlessTree,
16843
17485
  HelixHeadlessTreeVueProps,
@@ -16873,7 +17515,7 @@ export interface WcToolkitVueGlobalComponents {
16873
17515
  HelixHeadlessVideoVueProps,
16874
17516
  HelixHeadlessVideoVueEvents
16875
17517
  >;
16876
- /** The items arrive as data, in one of two ways: - 'items' takes an array. A framework sets it as a property, and React hydration keeps it. - 'for' names a '<script type="application/json">' that holds an array, which a server sends as markup. Each item is drawn into a row in one of two ways: - 'renderItem' is a function from an item and its index to the row's content: a Lit template, a string, or a DOM node. - A '<template>' child defines one row. 'data-field="name"' fills an element with the item's 'name' as text, and 'data-field-href="url"' writes the item's 'url' into 'href', the same for any attribute. A field may be a path of keys, such as 'author.name'. Rows are your markup in the light DOM, so your stylesheet styles them. **A grid.** 'columns' lays the items out that many to a line, as a grid of equal columns, and windows the set a line at a time, as React Aria's grid layout does. Each item draws one element, a cell of the grid, and 'estimate' is the height of a line. Space the items with padding inside each one, which the list measures with the line. **Keyboard.** The list is one tab stop. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous item, or in a grid to the item in the same column on the next or the previous line. | | Right, Left | In a grid, moves to the next or the previous item along the line, the other way round on a right-to-left page. | | Home, End | Moves to the first or the last item. | | Page Down, Page Up | Moves by the number of items, or of lines in a grid, on screen. | | A letter or a word | Moves to the next item whose text starts with what you typed. | | Tab | Moves into the focused row's own links and buttons, then out of the list. | An item that is not drawn is scrolled into view and focused, so a keyboard reaches the whole set. When the row holding the tab stop scrolls away, the stop moves to the first row on screen. Typing matches each item's 'text-field', which is the first 'data-field' of the row template by default, or the item itself when it is a string or a number. Each row says its place in the whole set with 'aria-posinset' and 'aria-setsize', so a screen reader says "4,000 of 10,000". The row holding focus stays drawn when it scrolls out. **Selecting.** 'selection-mode' makes the list a list box a reader chooses from: 'single' selects one item and 'multiple' any number. Space or a press selects an item, Shift with Space, an arrow, Home, End or a press takes in the items from the last one chosen, and Control or Command with A selects them all, in 'multiple'. 'value' holds the chosen items' keys, separated by commas, in the order of the set: 'key-field' names each item's key, and a string or a number item is its own key. A change asks with 'helix-before-change' and tells with 'change'. Each row is an 'option' marked 'aria-selected', so a row's own links and buttons are not reached there: keep those to a list without 'selection-mode'. **Loading more.** 'helix-range-change' fires as the items on screen change, and 'range' holds them. 'helix-load-more' fires once a reader is within one screen of the end, once for each length of the set: add to 'items' and it can fire again. While you fetch, set 'loading': the list is busy, and a row after the last item says "Loading more" ('loading-label', or your own content in the 'loading' slot). 'scrollToIndex' takes a reader to an item. **Row height.** Rows are placed by 'estimate' until they are drawn. Then the list reads the drawn rows' height once and places every row by it, so a wrong estimate still reaches the last item. Set 'measured' for rows of different heights. The list follows its source. A new 'items' array, an edit to the script's text, or a script replaced under the same id draws the new rows. A row that stays in view keeps its element as the list scrolls. The viewport scrolls on this tier. It carries 'data-scroller', and 'core' ships '[data-scroller] { overflow: auto }' into every shadow root, so 'scrollTop' works with no stylesheet. You still need to set a block size. */
17518
+ /** The items arrive as data, in one of two ways: - 'items' takes an array. A framework sets it as a property, and React hydration keeps it. - 'for' names a '<script type="application/json">' that holds an array, which a server sends as markup. Each item is drawn into a row in one of two ways: - 'renderItem' is a function from an item and its index to the row's content: a Lit template, a string, or a DOM node. - A '<template>' child defines one row. 'data-field="name"' fills an element with the item's 'name' as text, and 'data-field-href="url"' writes the item's 'url' into 'href', the same for any attribute. A field may be a path of keys, such as 'author.name'. Rows are your markup in the light DOM, so your stylesheet styles them. **A grid.** 'columns' lays the items out that many to a line, as a grid of equal columns, and windows the set a line at a time, as React Aria's grid layout does. Each item draws one element, a cell of the grid, and 'estimate' is the height of a line. Space the items with padding inside each one, which the list measures with the line. **Keyboard.** The list is one tab stop. | Key | What it does | |---|---| | Down, Up | Moves to the next or the previous item, or in a grid to the item in the same column on the next or the previous line. | | Right, Left | In a grid, moves to the next or the previous item along the line, the other way round on a right-to-left page. | | Home, End | Moves to the first or the last item. | | Page Down, Page Up | Moves by the number of items, or of lines in a grid, on screen. | | A letter or a word | Moves to the next item whose text starts with what you typed. | | Tab | Moves into the focused row's own links and buttons, then out of the list. | An item that is not drawn is scrolled into view and focused, so a keyboard reaches the whole set. When the row holding the tab stop scrolls away, the stop moves to the first row on screen. Typing matches each item's 'text-field', which is the first 'data-field' of the row template by default, or the item itself when it is a string or a number. Each row says its place in the whole set with 'aria-posinset' and 'aria-setsize', so a screen reader says "4,000 of 10,000". The row holding focus stays drawn when it scrolls out. **Selecting.** 'selection-mode' makes the list a list box a reader chooses from: 'single' selects one item and 'multiple' any number. Space or a press selects an item, Shift with Space, an arrow, Home, End or a press takes in the items from the last one chosen, and Control or Command with A selects them all, in 'multiple'. 'value' holds the chosen items' keys, separated by commas, in the order of the set: 'key-field' names each item's key, and a string or a number item is its own key. A change asks with 'helix-before-change' and tells with 'change'. Each row is an 'option' marked 'aria-selected', so a row's own links and buttons are not reached there: keep those to a list without 'selection-mode'. **Loading more.** 'helix-range-change' fires as the items on screen change, and 'range' holds them. 'helix-load-more' fires once a reader is within one screen of the end, once for each length of the set: add to 'items' and it can fire again. While you fetch, set 'loading': the list is busy, and a row after the last item says "Loading more" ('loading-label', or your own content in the 'loading' slot). 'scrollToIndex' takes a reader to an item. **Row height.** Rows are placed by 'estimate' until they are drawn. Then the list reads the drawn rows' height once and places every row by it, so a wrong estimate still reaches the last item. Set 'measured' for rows of different heights. Once the list draws rows of different heights, such as rows that wrap on a narrow screen, it places each row by its own height whether 'measured' is set or not. The list follows its source. A new 'items' array, an edit to the script's text, or a script replaced under the same id draws the new rows. A row that stays in view keeps its element as the list scrolls. The viewport scrolls on this tier. It carries 'data-scroller', and 'core' ships '[data-scroller] { overflow: auto }' into every shadow root, so 'scrollTop' works with no stylesheet. You still need to set a block size. */
16877
17519
  "helix-headless-virtual-list": DefineCustomElement<
16878
17520
  HelixHeadlessVirtualList,
16879
17521
  HelixHeadlessVirtualListVueProps,