@fusion.dev/helix-headless 0.103.3 → 0.104.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 (107) hide show
  1. package/custom-elements.json +9253 -880
  2. package/dist/announcement/root/announcement-root.d.ts +9 -2
  3. package/dist/announcement/root/announcement-root.js +9 -6
  4. package/dist/badge/root/badge-root.js +2 -3
  5. package/dist/canvas/edge/canvas-edge.d.ts +112 -0
  6. package/dist/canvas/edge/canvas-edge.js +66 -0
  7. package/dist/canvas/index.d.ts +4 -0
  8. package/dist/canvas/index.js +3 -0
  9. package/dist/canvas/node/canvas-node.d.ts +211 -0
  10. package/dist/canvas/node/canvas-node.js +148 -0
  11. package/dist/canvas/root/canvas-document.d.ts +215 -0
  12. package/dist/canvas/root/canvas-document.js +284 -0
  13. package/dist/canvas/root/canvas-root.d.ts +912 -0
  14. package/dist/canvas/root/canvas-root.js +1814 -0
  15. package/dist/carousel/root/carousel-root.d.ts +53 -16
  16. package/dist/carousel/root/carousel-root.js +46 -11
  17. package/dist/chat/root/chat-root.d.ts +4 -0
  18. package/dist/chat/root/chat-root.js +11 -7
  19. package/dist/checkbox/root/checkbox-root.js +1 -0
  20. package/dist/checkbox-group/root/checkbox-group-root.d.ts +10 -0
  21. package/dist/checkbox-group/root/checkbox-group-root.js +5 -0
  22. package/dist/color-input/root/color-input-root.js +21 -5
  23. package/dist/color-picker/root/color-picker-root.d.ts +55 -0
  24. package/dist/color-picker/root/color-picker-root.js +61 -12
  25. package/dist/combobox/root/combobox-root.d.ts +21 -2
  26. package/dist/combobox/root/combobox-root.js +23 -9
  27. package/dist/command/root/command-root.d.ts +1 -0
  28. package/dist/command/root/command-root.js +1 -1
  29. package/dist/data-table/root/data-table-root.d.ts +43 -42
  30. package/dist/data-table/root/data-table-root.js +35 -34
  31. package/dist/date-input/root/date-input-root.d.ts +27 -0
  32. package/dist/date-input/root/date-input-root.js +38 -9
  33. package/dist/date-picker/root/date-picker-root.d.ts +28 -16
  34. package/dist/date-picker/root/date-picker-root.js +17 -15
  35. package/dist/drilldown/root/drilldown-root.d.ts +1 -0
  36. package/dist/drilldown/root/drilldown-root.js +5 -2
  37. package/dist/element-events.generated.js +15 -0
  38. package/dist/empty/root/empty-root.d.ts +12 -7
  39. package/dist/empty/root/empty-root.js +13 -10
  40. package/dist/file-input/root/file-input-root.d.ts +5 -1
  41. package/dist/file-input/root/file-input-root.js +6 -4
  42. package/dist/filter-input/menu/filter-menu.d.ts +1 -0
  43. package/dist/filter-input/menu/filter-menu.js +1 -1
  44. package/dist/filter-input/root/filter-input-root.js +5 -0
  45. package/dist/index.d.ts +1 -0
  46. package/dist/index.js +1 -0
  47. package/dist/input/root/input-root.js +1 -1
  48. package/dist/lightbox/root/lightbox-root.d.ts +9 -1
  49. package/dist/lightbox/root/lightbox-root.js +17 -7
  50. package/dist/listbox/root/listbox-root.d.ts +16 -14
  51. package/dist/listbox/root/listbox-root.js +24 -15
  52. package/dist/map/root/map-root.d.ts +6 -3
  53. package/dist/map/root/map-root.js +8 -2
  54. package/dist/menu/root/menu-root.d.ts +1 -0
  55. package/dist/menu/root/menu-root.js +1 -1
  56. package/dist/notifications/group/notification-group.js +5 -4
  57. package/dist/notifications/notification/notification.d.ts +10 -10
  58. package/dist/notifications/notification/notification.js +3 -3
  59. package/dist/notifications/root/notifications-root.d.ts +1 -0
  60. package/dist/notifications/root/notifications-root.js +1 -0
  61. package/dist/number-input/root/number-input-root.d.ts +17 -0
  62. package/dist/number-input/root/number-input-root.js +22 -6
  63. package/dist/object-inspector/root/object-inspector-root.d.ts +10 -0
  64. package/dist/object-inspector/root/object-inspector-root.js +10 -2
  65. package/dist/outline/root/outline-root.d.ts +15 -0
  66. package/dist/outline/root/outline-root.js +12 -7
  67. package/dist/pagination/root/pagination-root.d.ts +18 -18
  68. package/dist/pagination/root/pagination-root.js +5 -5
  69. package/dist/pagination/size/pagination-size.d.ts +10 -9
  70. package/dist/pagination/size/pagination-size.js +4 -4
  71. package/dist/pagination/summary/pagination-summary.js +6 -5
  72. package/dist/pin-input/root/pin-input-root.d.ts +5 -0
  73. package/dist/pin-input/root/pin-input-root.js +10 -6
  74. package/dist/rating/root/rating-root.js +3 -2
  75. package/dist/select/root/select-root.d.ts +1 -0
  76. package/dist/select/root/select-root.js +8 -3
  77. package/dist/slider/root/slider-root.d.ts +12 -0
  78. package/dist/slider/root/slider-root.js +13 -1
  79. package/dist/splitter/root/splitter-root.d.ts +44 -35
  80. package/dist/splitter/root/splitter-root.js +27 -22
  81. package/dist/switch/root/switch-root.js +1 -0
  82. package/dist/table/column/table-column.d.ts +17 -0
  83. package/dist/table/column/table-column.js +16 -4
  84. package/dist/table/root/table-root.d.ts +1 -0
  85. package/dist/table/root/table-root.js +1 -1
  86. package/dist/textarea/root/textarea-root.js +1 -1
  87. package/dist/time-input/root/time-input-root.d.ts +29 -0
  88. package/dist/time-input/root/time-input-root.js +31 -10
  89. package/dist/time-picker/root/time-picker-root.d.ts +14 -0
  90. package/dist/time-picker/root/time-picker-root.js +16 -14
  91. package/dist/toast/item/toast-item.d.ts +12 -11
  92. package/dist/toast/item/toast-item.js +11 -5
  93. package/dist/toolbar/root/toolbar-root.js +2 -16
  94. package/dist/tooltip/root/tooltip-root.d.ts +1 -0
  95. package/dist/tooltip/root/tooltip-root.js +6 -0
  96. package/dist/tour/root/tour-root.d.ts +10 -10
  97. package/dist/tour/root/tour-root.js +5 -5
  98. package/dist/tree/root/tree-root.d.ts +1 -0
  99. package/dist/tree/root/tree-root.js +1 -1
  100. package/dist/video/root/video-root.d.ts +84 -0
  101. package/dist/video/root/video-root.js +116 -41
  102. package/dist/video-playlist/menu/video-playlist-menu.d.ts +1 -0
  103. package/dist/video-playlist/menu/video-playlist-menu.js +4 -3
  104. package/package.json +5 -5
  105. package/types/jsx.d.ts +5419 -716
  106. package/types/svelte.d.ts +3 -0
  107. package/types/vue.d.ts +1607 -213
package/types/vue.d.ts CHANGED
@@ -16,6 +16,19 @@ import type {
16
16
  HelixHeadlessButtonGroup,
17
17
  HelixHeadlessButton,
18
18
  HelixHeadlessCallout,
19
+ HelixHeadlessCanvasEdge,
20
+ HelixHeadlessCanvasNode,
21
+ CanvasDocument,
22
+ CanvasEdge,
23
+ CanvasEdgeProps,
24
+ CanvasEnd,
25
+ CanvasNode,
26
+ CanvasNodeProps,
27
+ CanvasPath,
28
+ CanvasSide,
29
+ CanvasTone,
30
+ fromJsonCanvas,
31
+ HelixHeadlessCanvas,
19
32
  HelixHeadlessCard,
20
33
  HelixHeadlessCarousel,
21
34
  HelixHeadlessChatComposer,
@@ -141,6 +154,18 @@ import type {
141
154
  HelixBeforeOpenEvent,
142
155
  HelixDismissEvent,
143
156
  HelixScrolledEvent,
157
+ HelixBeforeMoveEvent,
158
+ HelixBeforeReconnectEvent,
159
+ HelixBeforeRelabelEvent,
160
+ HelixCanvasEditEvent,
161
+ HelixCanvasPanEvent,
162
+ HelixCanvasViewEvent,
163
+ HelixCanvasZoomEvent,
164
+ HelixConnectEvent,
165
+ HelixMoveEvent,
166
+ HelixReconnectEvent,
167
+ HelixRelabelEvent,
168
+ HelixRemoveEvent,
144
169
  HelixSelectEvent,
145
170
  HelixSendEvent,
146
171
  HelixBeforePinEvent,
@@ -258,6 +283,10 @@ empty string writes `name=""` onto every item ever rendered: Lit reflects
258
283
  it, and the resting state of a reflected property is the attribute's
259
284
  absence. Caught by `hydration.dom.spec.ts`. */
260
285
  name?: (HelixHeadlessAccordionItem["name"]) | undefined;
286
+ /** Whether the markup declared it open. Ignored once `open` is written. */
287
+ "default-open"?: (HelixHeadlessAccordionItem["defaultOpen"]) | undefined;
288
+ /** Whether the markup declared it open. Ignored once `open` is written. */
289
+ defaultOpen?: (HelixHeadlessAccordionItem["defaultOpen"]) | undefined;
261
290
  /** Whether the element is open.
262
291
 
263
292
  One property, not two, so `dialog.open` answers the question anyone
@@ -271,10 +300,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
271
300
  last reader did rather than what the author wrote. `:state(open)` carries
272
301
  the resolved state for stylesheets, which is what the mirror is for. */
273
302
  open?: (HelixHeadlessAccordionItem["open"]) | undefined;
274
- /** Whether the markup declared it open. Ignored once `open` is written. */
275
- "default-open"?: (HelixHeadlessAccordionItem["defaultOpen"]) | undefined;
276
- /** Whether the markup declared it open. Ignored once `open` is written. */
277
- defaultOpen?: (HelixHeadlessAccordionItem["defaultOpen"]) | undefined;
278
303
  };
279
304
 
280
305
  export type HelixHeadlessAccordionItemVueEvents = {
@@ -883,6 +908,474 @@ there is no `severity` beside it. */
883
908
 
884
909
  export type HelixHeadlessCalloutVueEvents = {};
885
910
 
911
+ export type HelixHeadlessCanvasEdgeVueProps = {
912
+ /** The card it leaves. */
913
+ from?: (HelixHeadlessCanvasEdge["from"]) | undefined;
914
+ /** What sits at the end it leaves from.
915
+
916
+ Absent is nothing, which is the format's own default and what makes an
917
+ ordinary connector a one-way arrow. */
918
+ "from-end"?: (HelixHeadlessCanvasEdge["fromEnd"]) | undefined;
919
+ /** What sits at the end it leaves from.
920
+
921
+ Absent is nothing, which is the format's own default and what makes an
922
+ ordinary connector a one-way arrow. */
923
+ fromEnd?: (HelixHeadlessCanvasEdge["fromEnd"]) | undefined;
924
+ /** Which side of that card it leaves, where the document says. */
925
+ "from-side"?: (HelixHeadlessCanvasEdge["fromSide"]) | undefined;
926
+ /** Which side of that card it leaves, where the document says. */
927
+ fromSide?: (HelixHeadlessCanvasEdge["fromSide"]) | undefined;
928
+ /** What the connector says, drawn at its middle. */
929
+ label?: (HelixHeadlessCanvasEdge["label"]) | undefined;
930
+ /** What a request calls this connection, unique on its board.
931
+
932
+ Optional, unlike a card's: a connection is also known by its two ends,
933
+ which `helix-remove` carries beside this, so a page that names none of its
934
+ connections can still find the one a reader asked to take away. */
935
+ name?: (HelixHeadlessCanvasEdge["name"]) | undefined;
936
+ /** How it travels: `straight`, or `step` for right angles.
937
+
938
+ Absent is whatever the board says, and a curve where the board says
939
+ nothing. Not part of JSON Canvas, which draws every edge one way; a
940
+ document read from one keeps its curves.
941
+
942
+ **`path` rather than `shape`**, which is a word this library already
943
+ spends on how an element looks in the styled tier: this changes the line
944
+ the connector is drawn along, which the board computes. Nor `route`, which
945
+ every element here already has, as the method that sends a child to a slot. */
946
+ path?: (HelixHeadlessCanvasEdge["path"]) | undefined;
947
+ /** Keeps this connection: a reader cannot remove it.
948
+
949
+ The board's `readonly` still wins. A connection is still removed with a
950
+ card at either end of it, since a line to a card that has gone is not one
951
+ the board can draw. */
952
+ readonly?: (HelixHeadlessCanvasEdge["readOnly"]) | undefined;
953
+ /** Keeps this connection: a reader cannot remove it.
954
+
955
+ The board's `readonly` still wins. A connection is still removed with a
956
+ card at either end of it, since a line to a card that has gone is not one
957
+ the board can draw. */
958
+ readOnly?: (HelixHeadlessCanvasEdge["readOnly"]) | undefined;
959
+ /** The card it arrives at. */
960
+ to?: (HelixHeadlessCanvasEdge["to"]) | undefined;
961
+ /** What sits at the end it arrives at. Absent is an arrow, as the format says. */
962
+ "to-end"?: (HelixHeadlessCanvasEdge["toEnd"]) | undefined;
963
+ /** What sits at the end it arrives at. Absent is an arrow, as the format says. */
964
+ toEnd?: (HelixHeadlessCanvasEdge["toEnd"]) | undefined;
965
+ /** What the connection means, in the words every Helix component uses.
966
+
967
+ A color with no meaning is `--canvas-edge-color`, written in the edge's own
968
+ `style`: the line is drawn by the board rather than by this element, so the
969
+ board carries the value across from where it was written. */
970
+ tone?: (HelixHeadlessCanvasEdge["tone"]) | undefined;
971
+ /** Which side of that card it arrives at, where the document says. */
972
+ "to-side"?: (HelixHeadlessCanvasEdge["toSide"]) | undefined;
973
+ /** Which side of that card it arrives at, where the document says. */
974
+ toSide?: (HelixHeadlessCanvasEdge["toSide"]) | undefined;
975
+ /** How the line is drawn: `dashed` or `dotted`, and solid where it says
976
+ neither.
977
+
978
+ **A variant rather than an axis**, which is what the registry keeps it for:
979
+ no other family draws a line whose stroke says something, and a dashed
980
+ connection is the ordinary way to draw a weaker or an optional one. On the
981
+ headless tier because the board that draws the line is. */
982
+ variant?: (HelixHeadlessCanvasEdge["variant"]) | undefined;
983
+ };
984
+
985
+ export type HelixHeadlessCanvasEdgeVueEvents = {};
986
+
987
+ export type HelixHeadlessCanvasNodeVueProps = {
988
+ /** A box drawn behind the cards inside it rather than a card.
989
+
990
+ The board works out what is inside it from the geometry, which is what the
991
+ format does too, and moves them with it. Its `label` is drawn above it. */
992
+ group?: (HelixHeadlessCanvasNode["group"]) | undefined;
993
+ /** How tall the card is, in the document's own units. */
994
+ height?: (HelixHeadlessCanvasNode["height"]) | undefined;
995
+ /** What the card is called, for a group and wherever another card names it.
996
+
997
+ A group needs one because it has no text of its own; a card that has text
998
+ is named by it, and one holding a picture or a figure is named by nothing
999
+ short enough to read out in another card's connections. */
1000
+ label?: (HelixHeadlessCanvasNode["label"]) | undefined;
1001
+ /** What connections and requests call this card, unique on its board.
1002
+
1003
+ Required: a card with no name is drawn but nothing can connect to it, and
1004
+ the board has nothing to say when a reader asks for it to go. */
1005
+ name?: (HelixHeadlessCanvasNode["name"]) | undefined;
1006
+ /** Keeps this card where it is: not moved, not connected, not removed.
1007
+
1008
+ **The board's own word, meaning the same thing one card at a time.** A
1009
+ board of cards a reader rearranges often has one that anchors it, a start
1010
+ or a title, and this is that card. The board's `readonly` still wins, so a
1011
+ read-only board is read-only whatever its cards say. */
1012
+ readonly?: (HelixHeadlessCanvasNode["readOnly"]) | undefined;
1013
+ /** Keeps this card where it is: not moved, not connected, not removed.
1014
+
1015
+ **The board's own word, meaning the same thing one card at a time.** A
1016
+ board of cards a reader rearranges often has one that anchors it, a start
1017
+ or a title, and this is that card. The board's `readonly` still wins, so a
1018
+ read-only board is read-only whatever its cards say. */
1019
+ readOnly?: (HelixHeadlessCanvasNode["readOnly"]) | undefined;
1020
+ /** The card's outline: `circle`, `diamond`, `pill` or `square`, and a rounded
1021
+ box where it says none.
1022
+
1023
+ **A flowchart's vocabulary, and the reason it is on this tier**: a diamond
1024
+ is drawn as an outline the card renders, because a border follows a box
1025
+ and a diamond is not one, so the markup differs before any rule is
1026
+ written. Every shape here meets the middle of each side of its box, which
1027
+ is where a connection arrives, so a connection to a diamond lands on its
1028
+ point and one to a circle on its curve without the board knowing which. */
1029
+ shape?: (HelixHeadlessCanvasNode["shape"]) | undefined;
1030
+ /** What the card means, in the words every Helix component uses for it.
1031
+
1032
+ **`tone` rather than the format's `color`**, which was a second word for
1033
+ the same thing on this family alone: JSON Canvas writes `1` to `6` and
1034
+ leaves the meaning to the application, and this board had already pinned
1035
+ each to a tone. `fromJsonCanvas` maps the six to tones on the way in. A
1036
+ color with no meaning, a hex a document chose, is a custom property on the
1037
+ card, `--canvas-node-color`, which is a style rather than a statement.
1038
+
1039
+ On the headless tier because meaning survives having no stylesheet. */
1040
+ tone?: (HelixHeadlessCanvasNode["tone"]) | undefined;
1041
+ /** How wide the card is, in the document's own units. */
1042
+ width?: (HelixHeadlessCanvasNode["width"]) | undefined;
1043
+ /** Where its left edge sits, in the document's own units. */
1044
+ x?: (HelixHeadlessCanvasNode["x"]) | undefined;
1045
+ /** Where its top edge sits, in the document's own units. */
1046
+ y?: (HelixHeadlessCanvasNode["y"]) | undefined;
1047
+ };
1048
+
1049
+ export type HelixHeadlessCanvasNodeVueEvents = {};
1050
+
1051
+ /** `HelixHeadlessCanvas` component event */
1052
+ export type HelixHeadlessCanvasElementEvent<E = Event> = TypedEvent<
1053
+ HelixHeadlessCanvas,
1054
+ E
1055
+ >;
1056
+ /** `helix-before-move` event type */
1057
+ export type HelixHeadlessCanvasHelixBeforeMoveElementEvent =
1058
+ HelixHeadlessCanvasElementEvent<HelixBeforeMoveEvent>;
1059
+ /** `helix-before-reconnect` event type */
1060
+ export type HelixHeadlessCanvasHelixBeforeReconnectElementEvent =
1061
+ HelixHeadlessCanvasElementEvent<HelixBeforeReconnectEvent>;
1062
+ /** `helix-before-relabel` event type */
1063
+ export type HelixHeadlessCanvasHelixBeforeRelabelElementEvent =
1064
+ HelixHeadlessCanvasElementEvent<HelixBeforeRelabelEvent>;
1065
+ /** `helix-canvas-edit` event type */
1066
+ export type HelixHeadlessCanvasHelixCanvasEditElementEvent =
1067
+ HelixHeadlessCanvasElementEvent<HelixCanvasEditEvent>;
1068
+ /** `helix-canvas-pan` event type */
1069
+ export type HelixHeadlessCanvasHelixCanvasPanElementEvent =
1070
+ HelixHeadlessCanvasElementEvent<HelixCanvasPanEvent>;
1071
+ /** `helix-canvas-view` event type */
1072
+ export type HelixHeadlessCanvasHelixCanvasViewElementEvent =
1073
+ HelixHeadlessCanvasElementEvent<HelixCanvasViewEvent>;
1074
+ /** `helix-canvas-zoom` event type */
1075
+ export type HelixHeadlessCanvasHelixCanvasZoomElementEvent =
1076
+ HelixHeadlessCanvasElementEvent<HelixCanvasZoomEvent>;
1077
+ /** `helix-connect` event type */
1078
+ export type HelixHeadlessCanvasHelixConnectElementEvent =
1079
+ HelixHeadlessCanvasElementEvent<HelixConnectEvent>;
1080
+ /** `helix-move` event type */
1081
+ export type HelixHeadlessCanvasHelixMoveElementEvent =
1082
+ HelixHeadlessCanvasElementEvent<HelixMoveEvent>;
1083
+ /** `helix-reconnect` event type */
1084
+ export type HelixHeadlessCanvasHelixReconnectElementEvent =
1085
+ HelixHeadlessCanvasElementEvent<HelixReconnectEvent>;
1086
+ /** `helix-relabel` event type */
1087
+ export type HelixHeadlessCanvasHelixRelabelElementEvent =
1088
+ HelixHeadlessCanvasElementEvent<HelixRelabelEvent>;
1089
+ /** `helix-remove` event type */
1090
+ export type HelixHeadlessCanvasHelixRemoveElementEvent =
1091
+ HelixHeadlessCanvasElementEvent<HelixRemoveEvent>;
1092
+ /** `helix-select` event type */
1093
+ export type HelixHeadlessCanvasHelixSelectElementEvent =
1094
+ HelixHeadlessCanvasElementEvent<HelixSelectEvent>;
1095
+
1096
+ export type HelixHeadlessCanvasVueProps = {
1097
+ /** How a card says where its connections come from, with `{cards}`. */
1098
+ "comes-from-label"?: (HelixHeadlessCanvas["comesFromLabel"]) | undefined;
1099
+ /** How a card says where its connections come from, with `{cards}`. */
1100
+ comesFromLabel?: (HelixHeadlessCanvas["comesFromLabel"]) | undefined;
1101
+ /** What it says when a connection is asked for, with `{from}` and `{to}`. */
1102
+ "connected-label"?: (HelixHeadlessCanvas["connectedLabel"]) | undefined;
1103
+ /** What it says when a connection is asked for, with `{from}` and `{to}`. */
1104
+ connectedLabel?: (HelixHeadlessCanvas["connectedLabel"]) | undefined;
1105
+ /** What the live region says when a reader starts a connection, with `{from}`
1106
+ filled in.
1107
+
1108
+ **Every sentence this board speaks is a property**, the rule the pan
1109
+ controls already kept with `pan-up-label` and its three: a board on a page in another
1110
+ language otherwise read its connections out in English. */
1111
+ "connecting-label"?: (HelixHeadlessCanvas["connectingLabel"]) | undefined;
1112
+ /** What the live region says when a reader starts a connection, with `{from}`
1113
+ filled in.
1114
+
1115
+ **Every sentence this board speaks is a property**, the rule the pan
1116
+ controls already kept with `pan-up-label` and its three: a board on a page in another
1117
+ language otherwise read its connections out in English. */
1118
+ connectingLabel?: (HelixHeadlessCanvas["connectingLabel"]) | undefined;
1119
+ /** What a connection is called, with `{from}` and `{to}`.
1120
+
1121
+ Its own label, where it has one, is its description rather than part of
1122
+ this, so a reader hears the ends first and what the line says after. */
1123
+ "connection-label"?: (HelixHeadlessCanvas["connectionLabel"]) | undefined;
1124
+ /** What a connection is called, with `{from}` and `{to}`.
1125
+
1126
+ Its own label, where it has one, is its description rather than part of
1127
+ this, so a reader hears the ends first and what the line says after. */
1128
+ connectionLabel?: (HelixHeadlessCanvas["connectionLabel"]) | undefined;
1129
+ /** Accessible name for the board, which is the one thing a consumer must write.
1130
+
1131
+ A document has no name of its own in the format, and "Canvas" names the
1132
+ widget rather than the thinking on it. */
1133
+ label?: (HelixHeadlessCanvas["label"]) | undefined;
1134
+ /** What the field a label is edited in is called, with `{name}` for what it
1135
+ labels. */
1136
+ "label-editor-label"?: (HelixHeadlessCanvas["labelEditorLabel"]) | undefined;
1137
+ /** What the field a label is edited in is called, with `{name}` for what it
1138
+ labels. */
1139
+ labelEditorLabel?: (HelixHeadlessCanvas["labelEditorLabel"]) | undefined;
1140
+ /** How a card says where its connections go, with `{cards}` as the list.
1141
+
1142
+ The list is joined the way the page's language joins one, "Second and
1143
+ Third", rather than with a comma this component chose. */
1144
+ "leads-to-label"?: (HelixHeadlessCanvas["leadsToLabel"]) | undefined;
1145
+ /** How a card says where its connections go, with `{cards}` as the list.
1146
+
1147
+ The list is joined the way the page's language joins one, "Second and
1148
+ Third", rather than with a comma this component chose. */
1149
+ leadsToLabel?: (HelixHeadlessCanvas["leadsToLabel"]) | undefined;
1150
+ /** The order a reader meets the cards in.
1151
+
1152
+ `spatial` bands them into rows and reads each row across, which is how a
1153
+ person reads a board laid out on a grid and is a heuristic a loose board
1154
+ defeats. `edges` follows the arrows from the cards nothing points to, which
1155
+ on a board that is a flow is the order its author meant.
1156
+
1157
+ Absent is spatial, a resting value being an attribute's absence: a default
1158
+ that reflected would write a choice onto every host that no server sent. */
1159
+ order?: (HelixHeadlessCanvas["order"]) | undefined;
1160
+ /** How every connection travels, where it does not say: `straight`, or `step`
1161
+ for right angles.
1162
+
1163
+ Absent is a curve. A flowchart wants `step` on all of its edges, and
1164
+ writing it once here rather than on each is the reason this exists; an
1165
+ edge's own `path` still wins. */
1166
+ path?: (HelixHeadlessCanvas["path"]) | undefined;
1167
+ /** Keeps every card where its author put it.
1168
+
1169
+ **The attribute is `readonly`, which is the platform's spelling**, and the
1170
+ reverse of an `editable` switch on purpose: a form control takes input
1171
+ unless it is told not to, and a board a reader can rearrange is the same
1172
+ kind of thing. A drag on a card pans the board instead, and the keys still
1173
+ walk the cards. */
1174
+ readonly?: (HelixHeadlessCanvas["readOnly"]) | undefined;
1175
+ /** Keeps every card where its author put it.
1176
+
1177
+ **The attribute is `readonly`, which is the platform's spelling**, and the
1178
+ reverse of an `editable` switch on purpose: a form control takes input
1179
+ unless it is told not to, and a board a reader can rearrange is the same
1180
+ kind of thing. A drag on a card pans the board instead, and the keys still
1181
+ walk the cards. */
1182
+ readOnly?: (HelixHeadlessCanvas["readOnly"]) | undefined;
1183
+ /** What the live region says when a reader picks up a connection's end, with
1184
+ `{from}` and `{to}`. */
1185
+ "reconnecting-label"?: (HelixHeadlessCanvas["reconnectingLabel"]) | undefined;
1186
+ /** What the live region says when a reader picks up a connection's end, with
1187
+ `{from}` and `{to}`. */
1188
+ reconnectingLabel?: (HelixHeadlessCanvas["reconnectingLabel"]) | undefined;
1189
+ /** The cards and connections the reader selected, by name, comma separated,
1190
+ and empty for none.
1191
+
1192
+ **Comma separated, the way `Listbox` writes a multiple value**, so a page
1193
+ reads one selection the same way wherever it comes from. A click, or a key
1194
+ that lands on one, selects it alone; Shift, Command or Control with a click
1195
+ adds or takes one away, and so does Space; Command or Control with A
1196
+ selects everything; Shift and a drag across the empty board selects the
1197
+ cards the box touches. A click on the empty board, or Escape, selects
1198
+ nothing. Dragging, Shift with an arrow, and Delete act on the whole
1199
+ selection.
1200
+
1201
+ **Kept apart from focus**, so it stays when focus leaves: a reader who
1202
+ selects cards and clicks a button beside the board to act on them has not
1203
+ cleared what the button acts on by clicking. A connection with no name is
1204
+ called by its ends, `from->to`, which is also why a name has to be unique
1205
+ on its board across cards and connections both, and may not hold a comma.
1206
+
1207
+ Written to select from outside, and read to act on the selection. */
1208
+ selected?: (HelixHeadlessCanvas["selected"]) | undefined;
1209
+ /** What it says when a reader stops connecting without asking. */
1210
+ "stopped-label"?: (HelixHeadlessCanvas["stoppedLabel"]) | undefined;
1211
+ /** What it says when a reader stops connecting without asking. */
1212
+ stoppedLabel?: (HelixHeadlessCanvas["stoppedLabel"]) | undefined;
1213
+ /** Which of the controls this surface draws, as a list of what to keep.
1214
+
1215
+ **A list rather than a switch, because the overlap is not symmetric.** A
1216
+ surface a consumer brings often has zoom controls of its own and almost
1217
+ never has pan buttons, so a single switch would make them choose between
1218
+ a duplicate and nothing.
1219
+
1220
+ `none` draws none of them, which is the right answer where what was
1221
+ slotted already has controls a reader can find: what this argues for is
1222
+ that *a* findable control exists, never that it is ours. The methods stay
1223
+ public either way, so a consumer drawing their own chrome can still drive
1224
+ the surface.
1225
+
1226
+ Absent is whatever the family rests at, which is this library's rule that
1227
+ a resting value is an attribute's absence: all three for a map, whose
1228
+ reader may have no other way to move it, and zoom and fullscreen for a
1229
+ board, which a reader drags and whose pad took a third of the frame. The
1230
+ stylesheet lays the cluster out by which buttons are in it rather than by
1231
+ this attribute, so the two defaults need no rule each. */
1232
+ controls?: (HelixHeadlessCanvas["controls"]) | undefined;
1233
+ /** What the group of controls is called, for a reader who meets it.
1234
+
1235
+ Absent is the family's own name for it, "Map controls" or "Board
1236
+ controls", which names what the controls drive rather than the
1237
+ mechanism. Written here to say it in another language, which every other
1238
+ string this surface speaks already allowed and this one did not. */
1239
+ "controls-label"?: (HelixHeadlessCanvas["controlsLabel"]) | undefined;
1240
+ /** What the group of controls is called, for a reader who meets it.
1241
+
1242
+ Absent is the family's own name for it, "Map controls" or "Board
1243
+ controls", which names what the controls drive rather than the
1244
+ mechanism. Written here to say it in another language, which every other
1245
+ string this surface speaks already allowed and this one did not. */
1246
+ controlsLabel?: (HelixHeadlessCanvas["controlsLabel"]) | undefined;
1247
+ /** Which corner the controls sit in.
1248
+
1249
+ **Configurable because there is no safe default**, which is a collision
1250
+ rather than a taste: whatever a consumer slots may put its own controls
1251
+ in any corner, and every library that draws some made this a setting for
1252
+ the same reason.
1253
+
1254
+ Logical corners rather than left and right, so a right-to-left page moves
1255
+ them without a consumer writing a second rule. Absent is the top end, a
1256
+ resting value being an attribute's absence: a default that reflected
1257
+ would write an attribute onto every host that no server sent. */
1258
+ "controls-placement"?: (HelixHeadlessCanvas["controlsPlacement"]) | undefined;
1259
+ /** Which corner the controls sit in.
1260
+
1261
+ **Configurable because there is no safe default**, which is a collision
1262
+ rather than a taste: whatever a consumer slots may put its own controls
1263
+ in any corner, and every library that draws some made this a setting for
1264
+ the same reason.
1265
+
1266
+ Logical corners rather than left and right, so a right-to-left page moves
1267
+ them without a consumer writing a second rule. Absent is the top end, a
1268
+ resting value being an attribute's absence: a default that reflected
1269
+ would write an attribute onto every host that no server sent. */
1270
+ controlsPlacement?: (HelixHeadlessCanvas["controlsPlacement"]) | undefined;
1271
+ /** What the control that fills the screen is called. */
1272
+ "fullscreen-label"?: (HelixHeadlessCanvas["fullscreenLabel"]) | undefined;
1273
+ /** What the control that fills the screen is called. */
1274
+ fullscreenLabel?: (HelixHeadlessCanvas["fullscreenLabel"]) | undefined;
1275
+ /** How long the reader may be still before the chrome hides, in milliseconds.
1276
+
1277
+ Zero keeps it up, which is the default: these controls are how a keyboard
1278
+ reader operates the surface, and chrome that hid itself by default would
1279
+ be the component undoing its own argument. Set it for a display nobody
1280
+ drives. */
1281
+ "idle-delay"?: (HelixHeadlessCanvas["idleDelay"] | `${number}`) | undefined;
1282
+ /** How long the reader may be still before the chrome hides, in milliseconds.
1283
+
1284
+ Zero keeps it up, which is the default: these controls are how a keyboard
1285
+ reader operates the surface, and chrome that hid itself by default would
1286
+ be the component undoing its own argument. Set it for a display nobody
1287
+ drives. */
1288
+ idleDelay?: (HelixHeadlessCanvas["idleDelay"]) | undefined;
1289
+ /** What the control that pans down is called.
1290
+
1291
+ **A label for each way rather than one with the way filled in**, which is
1292
+ what this was: `Pan {way}` filled in with `left`, so a page that said it
1293
+ in French read out "Déplacer left". The word for a direction is as much
1294
+ the translator's as the word for panning, and a language can put it
1295
+ anywhere in the phrase. */
1296
+ "pan-down-label"?: (HelixHeadlessCanvas["panDownLabel"]) | undefined;
1297
+ /** What the control that pans down is called.
1298
+
1299
+ **A label for each way rather than one with the way filled in**, which is
1300
+ what this was: `Pan {way}` filled in with `left`, so a page that said it
1301
+ in French read out "Déplacer left". The word for a direction is as much
1302
+ the translator's as the word for panning, and a language can put it
1303
+ anywhere in the phrase. */
1304
+ panDownLabel?: (HelixHeadlessCanvas["panDownLabel"]) | undefined;
1305
+ /** What the control that pans left is called, on screen. */
1306
+ "pan-left-label"?: (HelixHeadlessCanvas["panLeftLabel"]) | undefined;
1307
+ /** What the control that pans left is called, on screen. */
1308
+ panLeftLabel?: (HelixHeadlessCanvas["panLeftLabel"]) | undefined;
1309
+ /** What the control that pans right is called, on screen. */
1310
+ "pan-right-label"?: (HelixHeadlessCanvas["panRightLabel"]) | undefined;
1311
+ /** What the control that pans right is called, on screen. */
1312
+ panRightLabel?: (HelixHeadlessCanvas["panRightLabel"]) | undefined;
1313
+ /** How far one press moves the view, as a fraction of what is on screen.
1314
+
1315
+ A fraction rather than a distance, because this surface does not know the
1316
+ scale of what is inside it: a quarter of the viewport is the same gesture
1317
+ at any zoom, and a consumer who wants their own units multiplies by them. */
1318
+ "pan-step"?: (HelixHeadlessCanvas["panStep"] | `${number}`) | undefined;
1319
+ /** How far one press moves the view, as a fraction of what is on screen.
1320
+
1321
+ A fraction rather than a distance, because this surface does not know the
1322
+ scale of what is inside it: a quarter of the viewport is the same gesture
1323
+ at any zoom, and a consumer who wants their own units multiplies by them. */
1324
+ panStep?: (HelixHeadlessCanvas["panStep"]) | undefined;
1325
+ /** What the control that pans up is called. */
1326
+ "pan-up-label"?: (HelixHeadlessCanvas["panUpLabel"]) | undefined;
1327
+ /** What the control that pans up is called. */
1328
+ panUpLabel?: (HelixHeadlessCanvas["panUpLabel"]) | undefined;
1329
+ /** What the control that zooms in is called. */
1330
+ "zoom-in-label"?: (HelixHeadlessCanvas["zoomInLabel"]) | undefined;
1331
+ /** What the control that zooms in is called. */
1332
+ zoomInLabel?: (HelixHeadlessCanvas["zoomInLabel"]) | undefined;
1333
+ /** What the control that zooms out is called. */
1334
+ "zoom-out-label"?: (HelixHeadlessCanvas["zoomOutLabel"]) | undefined;
1335
+ /** What the control that zooms out is called. */
1336
+ zoomOutLabel?: (HelixHeadlessCanvas["zoomOutLabel"]) | undefined;
1337
+ /** Where the board is looking: the document's point at the middle of the view,
1338
+ and the zoom.
1339
+
1340
+ **Read to save a view and written to restore one**, which a consumer keeping
1341
+ a minimap in step, or putting a reader back where they were, had no way to
1342
+ do: where the board sat was private, and the events said only which way a
1343
+ control had moved it. The middle rather than a corner, so a view saved in
1344
+ one box shows the same thing in the middle of a box of another size.
1345
+ Writing one counts as the reader choosing a view, so a later resize keeps
1346
+ it rather than fitting the board again. */
1347
+ view?: (HelixHeadlessCanvas["view"]) | undefined;
1348
+ };
1349
+
1350
+ export type HelixHeadlessCanvasVueEvents = {
1351
+ /** Cards are about to move. Refuse it to keep the positions in your own state. */
1352
+ "helix-before-move": HelixHeadlessCanvasHelixBeforeMoveElementEvent;
1353
+ /** A connection's end is about to move to another card or side. Refuse it to keep connections in your own state. */
1354
+ "helix-before-reconnect": HelixHeadlessCanvasHelixBeforeReconnectElementEvent;
1355
+ /** A connection's label or a group's name is about to change. Refuse it to keep labels in your own state. */
1356
+ "helix-before-relabel": HelixHeadlessCanvasHelixBeforeRelabelElementEvent;
1357
+ /** The reader asked to edit a card: a double-click, or Enter or F2. Open your own editor for it. */
1358
+ "helix-canvas-edit": HelixHeadlessCanvasHelixCanvasEditElementEvent;
1359
+ /** The board was moved a step, by its controls or the arrow keys: a fact rather than a request. A drag says so through `helix-canvas-view`. */
1360
+ "helix-canvas-pan": HelixHeadlessCanvasHelixCanvasPanElementEvent;
1361
+ /** Where the board is looking changed, however it changed. The detail is the new view. */
1362
+ "helix-canvas-view": HelixHeadlessCanvasHelixCanvasViewElementEvent;
1363
+ /** The board zoomed a step, by its controls or the keys. A wheel or a pinch says so through `helix-canvas-view`. */
1364
+ "helix-canvas-zoom": HelixHeadlessCanvasHelixCanvasZoomElementEvent;
1365
+ /** A reader asked for two cards to be joined. Add the `helix-canvas-edge` to do it. */
1366
+ "helix-connect": HelixHeadlessCanvasHelixConnectElementEvent;
1367
+ /** Cards moved and the move is finished: a drag let go, a click that put a card down, or a key pressed. */
1368
+ "helix-move": HelixHeadlessCanvasHelixMoveElementEvent;
1369
+ /** A connection's end moved, and the move is finished. */
1370
+ "helix-reconnect": HelixHeadlessCanvasHelixReconnectElementEvent;
1371
+ /** A connection's label or a group's name changed. */
1372
+ "helix-relabel": HelixHeadlessCanvasHelixRelabelElementEvent;
1373
+ /** A reader asked for cards or connections to go. Remove the elements it names. */
1374
+ "helix-remove": HelixHeadlessCanvasHelixRemoveElementEvent;
1375
+ /** The selection changed. The detail's `value` is the names, comma separated, empty for none. Cancelable: refusing it keeps the selection where it was. */
1376
+ "helix-select": HelixHeadlessCanvasHelixSelectElementEvent;
1377
+ };
1378
+
886
1379
  export type HelixHeadlessCardVueProps = {
887
1380
  /** Puts the media after the content instead of before it.
888
1381
 
@@ -924,19 +1417,6 @@ export type HelixHeadlessCarouselHelixSelectElementEvent =
924
1417
  export type HelixHeadlessCarouselVueProps = {
925
1418
  /** Whether the carousel advances on its own. */
926
1419
  autoplay?: (HelixHeadlessCarousel["autoplay"]) | undefined;
927
- /** The slide in view, counted from zero.
928
-
929
- Reading gives the real slide. Writing always applies, the way a script
930
- assigning to a native control does, and is a seed and a correction rather
931
- than a claim of ownership: a consumer who wants the decision refuses the
932
- `helix-select`. `default-index` is where the carousel starts until
933
- something moves it.
934
-
935
- The same contract the four mixins carry, written out here rather than
936
- extracted, because a slide is addressed by position and every one of those
937
- mixins is keyed by a name. One consumer is not a mixin: if a second numeric
938
- state turns up, this is what it is extracted from. */
939
- index?: (HelixHeadlessCarousel["index"]) | undefined;
940
1420
  /** Whether the previous and next controls are shown.
941
1421
 
942
1422
  `auto`, which is the resting behavior and what an absent attribute means,
@@ -965,12 +1445,45 @@ touch device exactly as it does on a desktop. */
965
1445
  "default-index"?: (HelixHeadlessCarousel["defaultIndex"] | `${number}`) | undefined;
966
1446
  /** Slide to start on, where nothing declared one. */
967
1447
  defaultIndex?: (HelixHeadlessCarousel["defaultIndex"]) | undefined;
1448
+ /** The slide in view, counted from zero.
1449
+
1450
+ Reading gives the real slide. Writing always applies, the way a script
1451
+ assigning to a native control does, and is a seed and a correction rather
1452
+ than a claim of ownership: a consumer who wants the decision refuses the
1453
+ `helix-select`. `default-index` is where the carousel starts until
1454
+ something moves it.
1455
+
1456
+ The same contract the four mixins carry, written out here rather than
1457
+ extracted, because a slide is addressed by position and every one of those
1458
+ mixins is keyed by a name. One consumer is not a mixin: if a second numeric
1459
+ state turns up, this is what it is extracted from. */
1460
+ index?: (HelixHeadlessCarousel["index"]) | undefined;
1461
+ /** What one indicator is called, with `{index}` filled in.
1462
+
1463
+ **Every word the carousel speaks is a property**, so a page in another
1464
+ language hears its own: only `label` was, and the controls around it
1465
+ read out in English. */
1466
+ "indicator-label"?: (HelixHeadlessCarousel["indicatorLabel"]) | undefined;
1467
+ /** What one indicator is called, with `{index}` filled in.
1468
+
1469
+ **Every word the carousel speaks is a property**, so a page in another
1470
+ language hears its own: only `label` was, and the controls around it
1471
+ read out in English. */
1472
+ indicatorLabel?: (HelixHeadlessCarousel["indicatorLabel"]) | undefined;
1473
+ /** What the row of indicators is called, with the carousel's `{label}` filled in. */
1474
+ "indicators-label"?: (HelixHeadlessCarousel["indicatorsLabel"]) | undefined;
1475
+ /** What the row of indicators is called, with the carousel's `{label}` filled in. */
1476
+ indicatorsLabel?: (HelixHeadlessCarousel["indicatorsLabel"]) | undefined;
968
1477
  /** How long each slide is held, in milliseconds. */
969
1478
  interval?: (HelixHeadlessCarousel["interval"]) | undefined;
970
1479
  /** Accessible name for the carousel. */
971
1480
  label?: (HelixHeadlessCarousel["label"]) | undefined;
972
1481
  /** Whether moving past either end wraps to the other. */
973
1482
  loop?: (HelixHeadlessCarousel["loop"]) | undefined;
1483
+ /** What the control that moves forward is called. */
1484
+ "next-label"?: (HelixHeadlessCarousel["nextLabel"]) | undefined;
1485
+ /** What the control that moves forward is called. */
1486
+ nextLabel?: (HelixHeadlessCarousel["nextLabel"]) | undefined;
974
1487
  /** Which way the track runs.
975
1488
 
976
1489
  Behavior rather than presentation, which is why it is here: the scroll
@@ -1104,6 +1617,28 @@ its attribute on upgrade, and the host then carries something a consumer's
1104
1617
  server markup never had, which React reports as a mismatch. The one-across
1105
1618
  case is the absent attribute, and the styles read it that way. */
1106
1619
  perView?: (HelixHeadlessCarousel["perView"]) | undefined;
1620
+ /** What the control that moves back is called. */
1621
+ "previous-label"?: (HelixHeadlessCarousel["previousLabel"]) | undefined;
1622
+ /** What the control that moves back is called. */
1623
+ previousLabel?: (HelixHeadlessCarousel["previousLabel"]) | undefined;
1624
+ /** What each slide is called, with `{index}` and `{count}` filled in. */
1625
+ "slide-label"?: (HelixHeadlessCarousel["slideLabel"]) | undefined;
1626
+ /** What each slide is called, with `{index}` and `{count}` filled in. */
1627
+ slideLabel?: (HelixHeadlessCarousel["slideLabel"]) | undefined;
1628
+ /** What a slide is, read out in place of its role: `aria-roledescription`,
1629
+ which is a word a reader hears and so a word to translate. */
1630
+ "slide-role-label"?: (HelixHeadlessCarousel["slideRoleLabel"]) | undefined;
1631
+ /** What a slide is, read out in place of its role: `aria-roledescription`,
1632
+ which is a word a reader hears and so a word to translate. */
1633
+ slideRoleLabel?: (HelixHeadlessCarousel["slideRoleLabel"]) | undefined;
1634
+ /** What the rotation control is called while it would start rotation. */
1635
+ "start-label"?: (HelixHeadlessCarousel["startLabel"]) | undefined;
1636
+ /** What the rotation control is called while it would start rotation. */
1637
+ startLabel?: (HelixHeadlessCarousel["startLabel"]) | undefined;
1638
+ /** And while it would stop it. */
1639
+ "stop-label"?: (HelixHeadlessCarousel["stopLabel"]) | undefined;
1640
+ /** And while it would stop it. */
1641
+ stopLabel?: (HelixHeadlessCarousel["stopLabel"]) | undefined;
1107
1642
  };
1108
1643
 
1109
1644
  export type HelixHeadlessCarouselVueEvents = {
@@ -1228,9 +1763,17 @@ export type HelixHeadlessChatHelixSendElementEvent =
1228
1763
  HelixHeadlessChatElementEvent<HelixSendEvent>;
1229
1764
 
1230
1765
  export type HelixHeadlessChatVueProps = {
1231
- /** Whether to open pinned, where nothing declared it. */
1766
+ /** Whether to open pinned, where nothing declared it.
1767
+
1768
+ `default-pinned="false"` opens away from the bottom. A plain boolean
1769
+ attribute could not say that: it is true by being there, whatever it holds,
1770
+ so a default of true had no attribute that turned it off. */
1232
1771
  "default-pinned"?: (HelixHeadlessChat["defaultPinned"]) | undefined;
1233
- /** Whether to open pinned, where nothing declared it. */
1772
+ /** Whether to open pinned, where nothing declared it.
1773
+
1774
+ `default-pinned="false"` opens away from the bottom. A plain boolean
1775
+ attribute could not say that: it is true by being there, whatever it holds,
1776
+ so a default of true had no attribute that turned it off. */
1234
1777
  defaultPinned?: (HelixHeadlessChat["defaultPinned"]) | undefined;
1235
1778
  /** Whether there are older turns than the ones here, and whether they are coming.
1236
1779
 
@@ -1324,6 +1867,26 @@ export type HelixHeadlessCheckboxGroupVueProps = {
1324
1867
  label?: (HelixHeadlessCheckboxGroup["label"]) | undefined;
1325
1868
  /** Whether the form refuses to submit without it. */
1326
1869
  required?: (HelixHeadlessCheckboxGroup["required"]) | undefined;
1870
+ /** What a reader is told when the field is required and empty, where the
1871
+ page says.
1872
+
1873
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
1874
+ set and the browser's own on a text field, which the browser writes in
1875
+ the reader's language. Every other word a control speaks is a property,
1876
+ and this one was the English a form in another language still spoke in
1877
+ the bubble it raises on submit: `feedback` replaces the message under
1878
+ the field and does not reach that one. */
1879
+ "value-missing-message"?: (HelixHeadlessCheckboxGroup["valueMissingMessage"]) | undefined;
1880
+ /** What a reader is told when the field is required and empty, where the
1881
+ page says.
1882
+
1883
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
1884
+ set and the browser's own on a text field, which the browser writes in
1885
+ the reader's language. Every other word a control speaks is a property,
1886
+ and this one was the English a form in another language still spoke in
1887
+ the bubble it raises on submit: `feedback` replaces the message under
1888
+ the field and does not reach that one. */
1889
+ valueMissingMessage?: (HelixHeadlessCheckboxGroup["valueMissingMessage"]) | undefined;
1327
1890
  /** Whether the control is non-interactive.
1328
1891
 
1329
1892
  Reflected, because the styled tier selects on it, and mirrored to
@@ -1398,6 +1961,26 @@ stylesheets. */
1398
1961
  label?: (HelixHeadlessCheckbox["label"]) | undefined;
1399
1962
  /** Whether the form refuses to submit without it. */
1400
1963
  required?: (HelixHeadlessCheckbox["required"]) | undefined;
1964
+ /** What a reader is told when the field is required and empty, where the
1965
+ page says.
1966
+
1967
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
1968
+ set and the browser's own on a text field, which the browser writes in
1969
+ the reader's language. Every other word a control speaks is a property,
1970
+ and this one was the English a form in another language still spoke in
1971
+ the bubble it raises on submit: `feedback` replaces the message under
1972
+ the field and does not reach that one. */
1973
+ "value-missing-message"?: (HelixHeadlessCheckbox["valueMissingMessage"]) | undefined;
1974
+ /** What a reader is told when the field is required and empty, where the
1975
+ page says.
1976
+
1977
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
1978
+ set and the browser's own on a text field, which the browser writes in
1979
+ the reader's language. Every other word a control speaks is a property,
1980
+ and this one was the English a form in another language still spoke in
1981
+ the bubble it raises on submit: `feedback` replaces the message under
1982
+ the field and does not reach that one. */
1983
+ valueMissingMessage?: (HelixHeadlessCheckbox["valueMissingMessage"]) | undefined;
1401
1984
  /** Whether the control is non-interactive.
1402
1985
 
1403
1986
  Reflected, because the styled tier selects on it, and mirrored to
@@ -1563,6 +2146,26 @@ The trade is real and is the reason this is not the default: a swatch cannot
1563
2146
  be read or pasted into without opening the panel, which is worse for a form
1564
2147
  where the color is the answer rather than a setting. */
1565
2148
  variant?: (HelixHeadlessColorInput["variant"]) | undefined;
2149
+ /** What a reader is told when the field holds something the picker cannot
2150
+ read: a date that is not one, a time, a color.
2151
+
2152
+ **Every sentence a control raises in the browser's bubble is a
2153
+ property**, named for the validity flag it reports, so a form in another
2154
+ language speaks it. Absent is the family's own sentence, in English,
2155
+ which says what the value should look like. */
2156
+ "bad-input-message"?: (HelixHeadlessColorInput["badInputMessage"]) | undefined;
2157
+ /** What a reader is told when the field holds something the picker cannot
2158
+ read: a date that is not one, a time, a color.
2159
+
2160
+ **Every sentence a control raises in the browser's bubble is a
2161
+ property**, named for the validity flag it reports, so a form in another
2162
+ language speaks it. Absent is the family's own sentence, in English,
2163
+ which says what the value should look like. */
2164
+ badInputMessage?: (HelixHeadlessColorInput["badInputMessage"]) | undefined;
2165
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2166
+ "default-open"?: (HelixHeadlessColorInput["defaultOpen"]) | undefined;
2167
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2168
+ defaultOpen?: (HelixHeadlessColorInput["defaultOpen"]) | undefined;
1566
2169
  /** Whether the element is open.
1567
2170
 
1568
2171
  One property, not two, so `dialog.open` answers the question anyone
@@ -1576,10 +2179,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
1576
2179
  last reader did rather than what the author wrote. `:state(open)` carries
1577
2180
  the resolved state for stylesheets, which is what the mirror is for. */
1578
2181
  open?: (HelixHeadlessColorInput["open"]) | undefined;
1579
- /** Whether the markup declared it open. Ignored once `open` is written. */
1580
- "default-open"?: (HelixHeadlessColorInput["defaultOpen"]) | undefined;
1581
- /** Whether the markup declared it open. Ignored once `open` is written. */
1582
- defaultOpen?: (HelixHeadlessColorInput["defaultOpen"]) | undefined;
1583
2182
  /** The value the markup declared, which is where a reset returns to. */
1584
2183
  "default-value"?: (HelixHeadlessColorInput["defaultValue"]) | undefined;
1585
2184
  /** The value the markup declared, which is where a reset returns to. */
@@ -1599,6 +2198,26 @@ a reset should return to. */
1599
2198
  label?: (HelixHeadlessColorInput["label"]) | undefined;
1600
2199
  /** Whether the form refuses to submit without it. */
1601
2200
  required?: (HelixHeadlessColorInput["required"]) | undefined;
2201
+ /** What a reader is told when the field is required and empty, where the
2202
+ page says.
2203
+
2204
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2205
+ set and the browser's own on a text field, which the browser writes in
2206
+ the reader's language. Every other word a control speaks is a property,
2207
+ and this one was the English a form in another language still spoke in
2208
+ the bubble it raises on submit: `feedback` replaces the message under
2209
+ the field and does not reach that one. */
2210
+ "value-missing-message"?: (HelixHeadlessColorInput["valueMissingMessage"]) | undefined;
2211
+ /** What a reader is told when the field is required and empty, where the
2212
+ page says.
2213
+
2214
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2215
+ set and the browser's own on a text field, which the browser writes in
2216
+ the reader's language. Every other word a control speaks is a property,
2217
+ and this one was the English a form in another language still spoke in
2218
+ the bubble it raises on submit: `feedback` replaces the message under
2219
+ the field and does not reach that one. */
2220
+ valueMissingMessage?: (HelixHeadlessColorInput["valueMissingMessage"]) | undefined;
1602
2221
  /** Whether the control is non-interactive.
1603
2222
 
1604
2223
  Reflected, because the styled tier selects on it, and mirrored to
@@ -1673,11 +2292,41 @@ point.** The field holds a color, so a browser offering to fill it with a
1673
2292
  saved address is competing for the same keystrokes as the square and the
1674
2293
  ramps. A consumer who wants autofill can still ask. */
1675
2294
  autocomplete?: (HelixHeadlessColorPicker["autocomplete"]) | undefined;
2295
+ /** What the square's vertical ramp is called.
2296
+
2297
+ **Every word the picker speaks is a property**, so a page in another
2298
+ language hears its own rather than English between its own labels. */
2299
+ "brightness-label"?: (HelixHeadlessColorPicker["brightnessLabel"]) | undefined;
2300
+ /** What the square's vertical ramp is called.
2301
+
2302
+ **Every word the picker speaks is a property**, so a page in another
2303
+ language hears its own rather than English between its own labels. */
2304
+ brightnessLabel?: (HelixHeadlessColorPicker["brightnessLabel"]) | undefined;
2305
+ /** What the sample says for a moment after it copied the value. */
2306
+ "copied-label"?: (HelixHeadlessColorPicker["copiedLabel"]) | undefined;
2307
+ /** What the sample says for a moment after it copied the value. */
2308
+ copiedLabel?: (HelixHeadlessColorPicker["copiedLabel"]) | undefined;
2309
+ /** What the sample is called, which copies the value, with `{value}` filled in. */
2310
+ "copy-label"?: (HelixHeadlessColorPicker["copyLabel"]) | undefined;
2311
+ /** What the sample is called, which copies the value, with `{value}` filled in. */
2312
+ copyLabel?: (HelixHeadlessColorPicker["copyLabel"]) | undefined;
2313
+ /** What the eyedropper is called. */
2314
+ "eyedropper-label"?: (HelixHeadlessColorPicker["eyedropperLabel"]) | undefined;
2315
+ /** What the eyedropper is called. */
2316
+ eyedropperLabel?: (HelixHeadlessColorPicker["eyedropperLabel"]) | undefined;
1676
2317
  /** The syntax the value is written in: `hex`, `rgb` or `hsl`.
1677
2318
 
1678
2319
  Only what is written. Everything is read whatever this says, so a picker on
1679
2320
  `hex` still takes an `rgb()` handed to it and stores the hex for it. */
1680
2321
  format?: (HelixHeadlessColorPicker["format"]) | undefined;
2322
+ /** What the syntax toggle is called, with `{format}` filled in. */
2323
+ "format-label"?: (HelixHeadlessColorPicker["formatLabel"]) | undefined;
2324
+ /** What the syntax toggle is called, with `{format}` filled in. */
2325
+ formatLabel?: (HelixHeadlessColorPicker["formatLabel"]) | undefined;
2326
+ /** What the hue channel is called. */
2327
+ "hue-label"?: (HelixHeadlessColorPicker["hueLabel"]) | undefined;
2328
+ /** What the hue channel is called. */
2329
+ hueLabel?: (HelixHeadlessColorPicker["hueLabel"]) | undefined;
1681
2330
  /** Whether the current selection fails validation.
1682
2331
 
1683
2332
  A flag rather than a message, the split Date Picker also draws. A flat
@@ -1720,6 +2369,14 @@ answer to which one is authoritative or which has the caret. Do not close it
1720
2369
  the other way round, with Color Input dropping its own field: the value
1721
2370
  would then be unreadable and unpasteable without opening a panel. */
1722
2371
  noValue?: (HelixHeadlessColorPicker["noValue"]) | undefined;
2372
+ /** What the opacity channel is called, where `alpha` offers one. */
2373
+ "opacity-label"?: (HelixHeadlessColorPicker["opacityLabel"]) | undefined;
2374
+ /** What the opacity channel is called, where `alpha` offers one. */
2375
+ opacityLabel?: (HelixHeadlessColorPicker["opacityLabel"]) | undefined;
2376
+ /** What the row of `swatches` is called. */
2377
+ "presets-label"?: (HelixHeadlessColorPicker["presetsLabel"]) | undefined;
2378
+ /** What the row of `swatches` is called. */
2379
+ presetsLabel?: (HelixHeadlessColorPicker["presetsLabel"]) | undefined;
1723
2380
  /** Whether the control refuses changes while still submitting its value.
1724
2381
 
1725
2382
  **Enforced by refusing every request in one place**, which is the seam this
@@ -1793,8 +2450,32 @@ report bad input because their value moves only on a commit. Color Input
1793
2450
  reports it for this family instead, once, against the field the reader
1794
2451
  typed into. */
1795
2452
  required?: (HelixHeadlessColorPicker["required"]) | undefined;
2453
+ /** What the square's horizontal ramp is called. */
2454
+ "saturation-label"?: (HelixHeadlessColorPicker["saturationLabel"]) | undefined;
2455
+ /** What the square's horizontal ramp is called. */
2456
+ saturationLabel?: (HelixHeadlessColorPicker["saturationLabel"]) | undefined;
1796
2457
  /** Colors offered under the picker, as a comma-separated list. */
1797
2458
  swatches?: (HelixHeadlessColorPicker["swatches"]) | undefined;
2459
+ /** What the group holding the eyedropper and the syntax toggle is called. */
2460
+ "tools-label"?: (HelixHeadlessColorPicker["toolsLabel"]) | undefined;
2461
+ /** What the group holding the eyedropper and the syntax toggle is called. */
2462
+ toolsLabel?: (HelixHeadlessColorPicker["toolsLabel"]) | undefined;
2463
+ /** What the text field holding the value is called. */
2464
+ "value-label"?: (HelixHeadlessColorPicker["valueLabel"]) | undefined;
2465
+ /** What the text field holding the value is called. */
2466
+ valueLabel?: (HelixHeadlessColorPicker["valueLabel"]) | undefined;
2467
+ /** What a reader is told when a color is required and none is chosen.
2468
+
2469
+ **Every sentence a control raises in the browser's bubble is a property**,
2470
+ named for the validity flag it reports, so a form in another language
2471
+ speaks it. Absent is the control's own sentence, in English. */
2472
+ "value-missing-message"?: (HelixHeadlessColorPicker["valueMissingMessage"]) | undefined;
2473
+ /** What a reader is told when a color is required and none is chosen.
2474
+
2475
+ **Every sentence a control raises in the browser's bubble is a property**,
2476
+ named for the validity flag it reports, so a form in another language
2477
+ speaks it. Absent is the control's own sentence, in English. */
2478
+ valueMissingMessage?: (HelixHeadlessColorPicker["valueMissingMessage"]) | undefined;
1798
2479
  /** The value the markup declared, which is where a reset returns to. */
1799
2480
  "default-value"?: (HelixHeadlessColorPicker["defaultValue"]) | undefined;
1800
2481
  /** The value the markup declared, which is where a reset returns to. */
@@ -1926,9 +2607,15 @@ element is responsible for. */
1926
2607
  multiple?: (HelixHeadlessCombobox["multiple"]) | undefined;
1927
2608
  /** Text shown while nothing has been chosen. */
1928
2609
  placeholder?: (HelixHeadlessCombobox["placeholder"]) | undefined;
1929
- /** What a tag's remove control is called, since the mark has no name. */
2610
+ /** What the control removing one chosen option is called, with `{name}` filled in.
2611
+
2612
+ **The name goes in**, so a row of them is heard as which one each
2613
+ removes rather than as "Remove" said once per chosen option. */
1930
2614
  "remove-label"?: (HelixHeadlessCombobox["removeLabel"]) | undefined;
1931
- /** What a tag's remove control is called, since the mark has no name. */
2615
+ /** What the control removing one chosen option is called, with `{name}` filled in.
2616
+
2617
+ **The name goes in**, so a row of them is heard as which one each
2618
+ removes rather than as "Remove" said once per chosen option. */
1932
2619
  removeLabel?: (HelixHeadlessCombobox["removeLabel"]) | undefined;
1933
2620
  /** Whether the field finishes the word as it is typed.
1934
2621
 
@@ -1937,6 +2624,10 @@ element already sets on the input it renders, and two things of one name
1937
2624
  meaning different things on the same control is a question a consumer
1938
2625
  should not have to ask. */
1939
2626
  suggest?: (HelixHeadlessCombobox["suggest"]) | undefined;
2627
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2628
+ "default-open"?: (HelixHeadlessCombobox["defaultOpen"]) | undefined;
2629
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2630
+ defaultOpen?: (HelixHeadlessCombobox["defaultOpen"]) | undefined;
1940
2631
  /** Whether the element is open.
1941
2632
 
1942
2633
  One property, not two, so `dialog.open` answers the question anyone
@@ -1950,10 +2641,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
1950
2641
  last reader did rather than what the author wrote. `:state(open)` carries
1951
2642
  the resolved state for stylesheets, which is what the mirror is for. */
1952
2643
  open?: (HelixHeadlessCombobox["open"]) | undefined;
1953
- /** Whether the markup declared it open. Ignored once `open` is written. */
1954
- "default-open"?: (HelixHeadlessCombobox["defaultOpen"]) | undefined;
1955
- /** Whether the markup declared it open. Ignored once `open` is written. */
1956
- defaultOpen?: (HelixHeadlessCombobox["defaultOpen"]) | undefined;
1957
2644
  /** What the control is called once everything is showing. */
1958
2645
  "collapse-label"?: (HelixHeadlessCombobox["collapseLabel"]) | undefined;
1959
2646
  /** What the control is called once everything is showing. */
@@ -1987,6 +2674,26 @@ a reset should return to. */
1987
2674
  label?: (HelixHeadlessCombobox["label"]) | undefined;
1988
2675
  /** Whether the form refuses to submit without it. */
1989
2676
  required?: (HelixHeadlessCombobox["required"]) | undefined;
2677
+ /** What a reader is told when the field is required and empty, where the
2678
+ page says.
2679
+
2680
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2681
+ set and the browser's own on a text field, which the browser writes in
2682
+ the reader's language. Every other word a control speaks is a property,
2683
+ and this one was the English a form in another language still spoke in
2684
+ the bubble it raises on submit: `feedback` replaces the message under
2685
+ the field and does not reach that one. */
2686
+ "value-missing-message"?: (HelixHeadlessCombobox["valueMissingMessage"]) | undefined;
2687
+ /** What a reader is told when the field is required and empty, where the
2688
+ page says.
2689
+
2690
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
2691
+ set and the browser's own on a text field, which the browser writes in
2692
+ the reader's language. Every other word a control speaks is a property,
2693
+ and this one was the English a form in another language still spoke in
2694
+ the bubble it raises on submit: `feedback` replaces the message under
2695
+ the field and does not reach that one. */
2696
+ valueMissingMessage?: (HelixHeadlessCombobox["valueMissingMessage"]) | undefined;
1990
2697
  /** Whether the control is non-interactive.
1991
2698
 
1992
2699
  Reflected, because the styled tier selects on it, and mirrored to
@@ -2071,6 +2778,10 @@ with: one key, said once. */
2071
2778
  label?: (HelixHeadlessCommand["label"]) | undefined;
2072
2779
  /** Shown in the field before anything is typed. */
2073
2780
  placeholder?: (HelixHeadlessCommand["placeholder"]) | undefined;
2781
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2782
+ "default-open"?: (HelixHeadlessCommand["defaultOpen"]) | undefined;
2783
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2784
+ defaultOpen?: (HelixHeadlessCommand["defaultOpen"]) | undefined;
2074
2785
  /** Whether the element is open.
2075
2786
 
2076
2787
  One property, not two, so `dialog.open` answers the question anyone
@@ -2084,10 +2795,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
2084
2795
  last reader did rather than what the author wrote. `:state(open)` carries
2085
2796
  the resolved state for stylesheets, which is what the mirror is for. */
2086
2797
  open?: (HelixHeadlessCommand["open"]) | undefined;
2087
- /** Whether the markup declared it open. Ignored once `open` is written. */
2088
- "default-open"?: (HelixHeadlessCommand["defaultOpen"]) | undefined;
2089
- /** Whether the markup declared it open. Ignored once `open` is written. */
2090
- defaultOpen?: (HelixHeadlessCommand["defaultOpen"]) | undefined;
2091
2798
  };
2092
2799
 
2093
2800
  export type HelixHeadlessCommandVueEvents = {
@@ -2335,20 +3042,14 @@ replaces this with what each row came to as it draws. It still has to be
2335
3042
  close, because it is what the scrollbar is built from before anything has
2336
3043
  been measured. */
2337
3044
  estimate?: (HelixHeadlessDataTable["estimate"]) | undefined;
2338
- /** The order, as `field:direction`.
2339
-
2340
- Set it and this element defers: a reader's click fires `helix-sort` and
2341
- changes nothing until a new value arrives. `default-sort` seeds an order this
2342
- element then owns. */
2343
- sort?: (HelixHeadlessDataTable["sort"]) | undefined;
2344
- /** Accessible name for the grid. */
2345
- label?: (HelixHeadlessDataTable["label"]) | undefined;
2346
3045
  /** What the rows are narrowed to, as one query across every column.
2347
3046
 
2348
3047
  One query rather than a predicate per column, which is what a reader means
2349
3048
  by a search box above a table. It matches on each column's ordering value,
2350
3049
  so search and sort cannot disagree about what a column holds. */
2351
3050
  filter?: (HelixHeadlessDataTable["filter"]) | undefined;
3051
+ /** Accessible name for the grid. */
3052
+ label?: (HelixHeadlessDataTable["label"]) | undefined;
2352
3053
  /** Whether this element does the work or asks the consumer to.
2353
3054
 
2354
3055
  `client` filters, sorts and pages `rows` itself. `server` applies none of
@@ -2358,25 +3059,48 @@ the client cannot hold the data, so this is not an optimization, it is the
2358
3059
  only mode that works, and it is here from the start because adding it later
2359
3060
  inverts the data flow. */
2360
3061
  mode?: (HelixHeadlessDataTable["mode"]) | undefined;
3062
+ /** The columns' order, as their fields separated by spaces.
3063
+
3064
+ A reader's move fires `helix-reorder` first, and refusing it leaves the
3065
+ columns where they were, which is how a consumer who stores the order takes
3066
+ the decision. `default-order` seeds an order this element then owns. A field not named
3067
+ keeps its place after the named ones, and a column with no field never
3068
+ moves. */
3069
+ order?: (HelixHeadlessDataTable["order"]) | undefined;
2361
3070
  /** The page on show, from 1.
2362
3071
 
2363
3072
  Clamped on the way out, so what this reports is the page it drew: a
2364
3073
  bookmarked link to page 99 of a result that has since shrunk reads back as
2365
3074
  the last page rather than as 99. */
2366
3075
  page?: (HelixHeadlessDataTable["page"]) | undefined;
3076
+ /** How many rows a page holds. Zero is every row, which is what "no paging" means.
3077
+
3078
+ **It announces nothing, and that is not an omission.** Nothing in this
3079
+ element ever asks for a different page size: a size selector is
3080
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
3081
+ themselves. Routing this through `requestChange` would announce an event
3082
+ the element never has cause to fire. */
3083
+ "page-size"?: (HelixHeadlessDataTable["pageSize"] | `${number}`) | undefined;
3084
+ /** How many rows a page holds. Zero is every row, which is what "no paging" means.
3085
+
3086
+ **It announces nothing, and that is not an omission.** Nothing in this
3087
+ element ever asks for a different page size: a size selector is
3088
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
3089
+ themselves. Routing this through `requestChange` would announce an event
3090
+ the element never has cause to fire. */
3091
+ pageSize?: (HelixHeadlessDataTable["pageSize"]) | undefined;
3092
+ /** Whether to draw a pagination under the grid.
3093
+
3094
+ On by default once a page size is set, because a paged table with no way to
3095
+ change pages shows a reader the first twenty rows and no way to know there
3096
+ are more. Off for a consumer supplying their own through the `footer` slot,
3097
+ which is why the slot replaces this rather than sitting beside it. */
3098
+ paginated?: (HelixHeadlessDataTable["paginated"]) | undefined;
2367
3099
  /** Whether a reader may move the columns.
2368
3100
 
2369
3101
  Each heading with a `field` gets a grip, dragged along the header or moved a
2370
3102
  place at a time with the arrow keys once it has focus. */
2371
3103
  reorderable?: (HelixHeadlessDataTable["reorderable"]) | undefined;
2372
- /** The columns' order, as their fields separated by spaces.
2373
-
2374
- A reader's move fires `helix-reorder` first, and refusing it leaves the
2375
- columns where they were, which is how a consumer who stores the order takes
2376
- the decision. `default-order` seeds an order this element then owns. A field not named
2377
- keeps its place after the named ones, and a column with no field never
2378
- moves. */
2379
- order?: (HelixHeadlessDataTable["order"]) | undefined;
2380
3104
  /** The field naming a row's stable identity.
2381
3105
 
2382
3106
  **Needed before selection exists, not after.** Lit keys the rendered rows by
@@ -2416,22 +3140,12 @@ A key holding a comma cannot be told apart from two keys, which is the
2416
3140
  price of the shape. A reader's choice fires `helix-select` first, and
2417
3141
  refusing it leaves the selection as it was. */
2418
3142
  selected?: (HelixHeadlessDataTable["selected"]) | undefined;
2419
- /** How many rows a page holds. Zero is every row, which is what "no paging" means.
2420
-
2421
- **It announces nothing, and that is not an omission.** Nothing in this
2422
- element ever asks for a different page size: a size selector is
2423
- `PaginationSize`, which a consumer puts in the `footer` slot and answers
2424
- themselves. Routing this through `requestChange` would announce an event
2425
- the element never has cause to fire. */
2426
- "page-size"?: (HelixHeadlessDataTable["pageSize"] | `${number}`) | undefined;
2427
- /** How many rows a page holds. Zero is every row, which is what "no paging" means.
3143
+ /** The order, as `field:direction`.
2428
3144
 
2429
- **It announces nothing, and that is not an omission.** Nothing in this
2430
- element ever asks for a different page size: a size selector is
2431
- `PaginationSize`, which a consumer puts in the `footer` slot and answers
2432
- themselves. Routing this through `requestChange` would announce an event
2433
- the element never has cause to fire. */
2434
- pageSize?: (HelixHeadlessDataTable["pageSize"]) | undefined;
3145
+ Set it and this element defers: a reader's click fires `helix-sort` and
3146
+ changes nothing until a new value arrives. `default-sort` seeds an order this
3147
+ element then owns. */
3148
+ sort?: (HelixHeadlessDataTable["sort"]) | undefined;
2435
3149
  /** How many rows the whole result has, where this element cannot count them.
2436
3150
 
2437
3151
  Only read in `server` mode, where `rows` is one page and its length says
@@ -2457,13 +3171,6 @@ Off by default. Windowing costs a scroll listener, a measurement per row
2457
3171
  drawn, and a `block-size` on the scrolling box, and a table of twenty rows
2458
3172
  should pay none of them. */
2459
3173
  windowed?: (HelixHeadlessDataTable["windowed"]) | undefined;
2460
- /** Whether to draw a pagination under the grid.
2461
-
2462
- On by default once a page size is set, because a paged table with no way to
2463
- change pages shows a reader the first twenty rows and no way to know there
2464
- are more. Off for a consumer supplying their own through the `footer` slot,
2465
- which is why the slot replaces this rather than sitting beside it. */
2466
- paginated?: (HelixHeadlessDataTable["paginated"]) | undefined;
2467
3174
  /** What is said where there are none, and none are coming. */
2468
3175
  "empty-text"?: (HelixHeadlessDataTable["emptyText"]) | undefined;
2469
3176
  /** What is said where there are none, and none are coming. */
@@ -2604,6 +3311,40 @@ window has no room for that width it shows one month until there is. */
2604
3311
  months?: (HelixHeadlessDateInput["months"]) | undefined;
2605
3312
  /** What the field says before a date is in it. */
2606
3313
  placeholder?: (HelixHeadlessDateInput["placeholder"]) | undefined;
3314
+ /** What a reader is told when a range holds more than two dates.
3315
+
3316
+ **Every sentence a control raises in the browser's bubble is a property**,
3317
+ so a form in another language speaks it. Absent is the control's own
3318
+ sentence, in English. */
3319
+ "range-length-message"?: (HelixHeadlessDateInput["rangeLengthMessage"]) | undefined;
3320
+ /** What a reader is told when a range holds more than two dates.
3321
+
3322
+ **Every sentence a control raises in the browser's bubble is a property**,
3323
+ so a form in another language speaks it. Absent is the control's own
3324
+ sentence, in English. */
3325
+ rangeLengthMessage?: (HelixHeadlessDateInput["rangeLengthMessage"]) | undefined;
3326
+ /** What a reader is told when a date is after `max`, with `{max}` filled in
3327
+ as the field writes it. */
3328
+ "range-overflow-message"?: (HelixHeadlessDateInput["rangeOverflowMessage"]) | undefined;
3329
+ /** What a reader is told when a date is after `max`, with `{max}` filled in
3330
+ as the field writes it. */
3331
+ rangeOverflowMessage?: (HelixHeadlessDateInput["rangeOverflowMessage"]) | undefined;
3332
+ /** What a reader is told when a date is before `min`, with `{min}` filled
3333
+ in as the field writes it. */
3334
+ "range-underflow-message"?: (HelixHeadlessDateInput["rangeUnderflowMessage"]) | undefined;
3335
+ /** What a reader is told when a date is before `min`, with `{min}` filled
3336
+ in as the field writes it. */
3337
+ rangeUnderflowMessage?: (HelixHeadlessDateInput["rangeUnderflowMessage"]) | undefined;
3338
+ /** What the control removing one date is called, with `{name}` filled in.
3339
+
3340
+ **The name goes in**, so a row of them is heard as which one each
3341
+ removes rather than as "Remove" said once per date. */
3342
+ "remove-label"?: (HelixHeadlessDateInput["removeLabel"]) | undefined;
3343
+ /** What the control removing one date is called, with `{name}` filled in.
3344
+
3345
+ **The name goes in**, so a row of them is heard as which one each
3346
+ removes rather than as "Remove" said once per date. */
3347
+ removeLabel?: (HelixHeadlessDateInput["removeLabel"]) | undefined;
2607
3348
  /** How far apart the selectable dates are, in days.
2608
3349
 
2609
3350
  `<input type="date" step>`'s own unit, handed to the calendar this renders
@@ -2639,6 +3380,26 @@ submits nothing and leaves the tab order, and a read-only one submits its
2639
3380
  value and stays reachable, which is what a form showing a value somebody
2640
3381
  else set needs. */
2641
3382
  readOnly?: (HelixHeadlessDateInput["readOnly"]) | undefined;
3383
+ /** What a reader is told when the field holds something the picker cannot
3384
+ read: a date that is not one, a time, a color.
3385
+
3386
+ **Every sentence a control raises in the browser's bubble is a
3387
+ property**, named for the validity flag it reports, so a form in another
3388
+ language speaks it. Absent is the family's own sentence, in English,
3389
+ which says what the value should look like. */
3390
+ "bad-input-message"?: (HelixHeadlessDateInput["badInputMessage"]) | undefined;
3391
+ /** What a reader is told when the field holds something the picker cannot
3392
+ read: a date that is not one, a time, a color.
3393
+
3394
+ **Every sentence a control raises in the browser's bubble is a
3395
+ property**, named for the validity flag it reports, so a form in another
3396
+ language speaks it. Absent is the family's own sentence, in English,
3397
+ which says what the value should look like. */
3398
+ badInputMessage?: (HelixHeadlessDateInput["badInputMessage"]) | undefined;
3399
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3400
+ "default-open"?: (HelixHeadlessDateInput["defaultOpen"]) | undefined;
3401
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3402
+ defaultOpen?: (HelixHeadlessDateInput["defaultOpen"]) | undefined;
2642
3403
  /** Whether the element is open.
2643
3404
 
2644
3405
  One property, not two, so `dialog.open` answers the question anyone
@@ -2652,10 +3413,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
2652
3413
  last reader did rather than what the author wrote. `:state(open)` carries
2653
3414
  the resolved state for stylesheets, which is what the mirror is for. */
2654
3415
  open?: (HelixHeadlessDateInput["open"]) | undefined;
2655
- /** Whether the markup declared it open. Ignored once `open` is written. */
2656
- "default-open"?: (HelixHeadlessDateInput["defaultOpen"]) | undefined;
2657
- /** Whether the markup declared it open. Ignored once `open` is written. */
2658
- defaultOpen?: (HelixHeadlessDateInput["defaultOpen"]) | undefined;
2659
3416
  /** What the control is called once everything is showing. */
2660
3417
  "collapse-label"?: (HelixHeadlessDateInput["collapseLabel"]) | undefined;
2661
3418
  /** What the control is called once everything is showing. */
@@ -2689,6 +3446,26 @@ a reset should return to. */
2689
3446
  label?: (HelixHeadlessDateInput["label"]) | undefined;
2690
3447
  /** Whether the form refuses to submit without it. */
2691
3448
  required?: (HelixHeadlessDateInput["required"]) | undefined;
3449
+ /** What a reader is told when the field is required and empty, where the
3450
+ page says.
3451
+
3452
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
3453
+ set and the browser's own on a text field, which the browser writes in
3454
+ the reader's language. Every other word a control speaks is a property,
3455
+ and this one was the English a form in another language still spoke in
3456
+ the bubble it raises on submit: `feedback` replaces the message under
3457
+ the field and does not reach that one. */
3458
+ "value-missing-message"?: (HelixHeadlessDateInput["valueMissingMessage"]) | undefined;
3459
+ /** What a reader is told when the field is required and empty, where the
3460
+ page says.
3461
+
3462
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
3463
+ set and the browser's own on a text field, which the browser writes in
3464
+ the reader's language. Every other word a control speaks is a property,
3465
+ and this one was the English a form in another language still spoke in
3466
+ the bubble it raises on submit: `feedback` replaces the message under
3467
+ the field and does not reach that one. */
3468
+ valueMissingMessage?: (HelixHeadlessDateInput["valueMissingMessage"]) | undefined;
2692
3469
  /** Whether the control is non-interactive.
2693
3470
 
2694
3471
  Reflected, because the styled tier selects on it, and mirrored to
@@ -2759,6 +3536,18 @@ export type HelixHeadlessDatePickerHelixNavigateElementEvent =
2759
3536
  HelixHeadlessDatePickerElementEvent<HelixNavigateEvent>;
2760
3537
 
2761
3538
  export type HelixHeadlessDatePickerVueProps = {
3539
+ /** What a reader is told when the value holds something that is not a date.
3540
+
3541
+ **Every sentence a control raises in the browser's bubble is a property**,
3542
+ named for the validity flag it reports, so a form in another language
3543
+ speaks it. Absent is the control's own sentence, in English. */
3544
+ "bad-input-message"?: (HelixHeadlessDatePicker["badInputMessage"]) | undefined;
3545
+ /** What a reader is told when the value holds something that is not a date.
3546
+
3547
+ **Every sentence a control raises in the browser's bubble is a property**,
3548
+ named for the validity flag it reports, so a form in another language
3549
+ speaks it. Absent is the control's own sentence, in English. */
3550
+ badInputMessage?: (HelixHeadlessDatePicker["badInputMessage"]) | undefined;
2762
3551
  /** Month to open on, where nothing declared one. */
2763
3552
  "default-month"?: (HelixHeadlessDatePicker["defaultMonth"]) | undefined;
2764
3553
  /** Month to open on, where nothing declared one. */
@@ -2779,12 +3568,6 @@ export type HelixHeadlessDatePickerVueProps = {
2779
3568
  invalid?: (HelixHeadlessDatePicker["invalid"]) | undefined;
2780
3569
  /** Accessible name for the grid. */
2781
3570
  label?: (HelixHeadlessDatePicker["label"]) | undefined;
2782
- /** The month on show, as `YYYY-MM`. Follows `value`, then the current month.
2783
-
2784
- Separate from `value` on purpose, so paging selects nothing and a consumer
2785
- can drive the view. Reading gives the month on show; writing sets it, and
2786
- `default-month` seeds one the calendar keeps until somebody does. */
2787
- month?: (HelixHeadlessDatePicker["month"]) | undefined;
2788
3571
  /** Locale for month and day names.
2789
3572
 
2790
3573
  Absent uses the runtime's own. */
@@ -2795,6 +3578,12 @@ Absent uses the runtime's own. */
2795
3578
  min?: (HelixHeadlessDatePicker["min"]) | undefined;
2796
3579
  /** How many dates can be held at once. */
2797
3580
  mode?: (HelixHeadlessDatePicker["mode"]) | undefined;
3581
+ /** The month on show, as `YYYY-MM`. Follows `value`, then the current month.
3582
+
3583
+ Separate from `value` on purpose, so paging selects nothing and a consumer
3584
+ can drive the view. Reading gives the month on show; writing sets it, and
3585
+ `default-month` seeds one the calendar keeps until somebody does. */
3586
+ month?: (HelixHeadlessDatePicker["month"]) | undefined;
2798
3587
  /** How many months to show, side by side. */
2799
3588
  months?: (HelixHeadlessDatePicker["months"]) | undefined;
2800
3589
  /** Accessible name for the control that pages forward. */
@@ -2853,6 +3642,10 @@ One is every date and needs no rule, which is why anything below one is
2853
3642
  treated as one rather than as an error: a step of zero would block every
2854
3643
  date including the one already chosen. */
2855
3644
  step?: (HelixHeadlessDatePicker["step"]) | undefined;
3645
+ /** What a reader is told when a date is required and none is chosen. */
3646
+ "value-missing-message"?: (HelixHeadlessDatePicker["valueMissingMessage"]) | undefined;
3647
+ /** What a reader is told when a date is required and none is chosen. */
3648
+ valueMissingMessage?: (HelixHeadlessDatePicker["valueMissingMessage"]) | undefined;
2856
3649
  /** The value the markup declared, which is where a reset returns to. */
2857
3650
  "default-value"?: (HelixHeadlessDatePicker["defaultValue"]) | undefined;
2858
3651
  /** The value the markup declared, which is where a reset returns to. */
@@ -2994,6 +3787,10 @@ A persistent dialog does not ignore that press. It answers it: see
2994
3787
  `refuse`, which is the only way a dialog that will not be dismissed can say
2995
3788
  so at the moment a reader asks. */
2996
3789
  persistent?: (HelixHeadlessDialog["persistent"]) | undefined;
3790
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3791
+ "default-open"?: (HelixHeadlessDialog["defaultOpen"]) | undefined;
3792
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3793
+ defaultOpen?: (HelixHeadlessDialog["defaultOpen"]) | undefined;
2997
3794
  /** Whether the element is open.
2998
3795
 
2999
3796
  One property, not two, so `dialog.open` answers the question anyone
@@ -3007,10 +3804,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
3007
3804
  last reader did rather than what the author wrote. `:state(open)` carries
3008
3805
  the resolved state for stylesheets, which is what the mirror is for. */
3009
3806
  open?: (HelixHeadlessDialog["open"]) | undefined;
3010
- /** Whether the markup declared it open. Ignored once `open` is written. */
3011
- "default-open"?: (HelixHeadlessDialog["defaultOpen"]) | undefined;
3012
- /** Whether the markup declared it open. Ignored once `open` is written. */
3013
- defaultOpen?: (HelixHeadlessDialog["defaultOpen"]) | undefined;
3014
3807
  /** What the dialog closed with, the way `<dialog>` reports it.
3015
3808
 
3016
3809
  **The whole point of a `<dialog>` returning a value is lost behind a shadow
@@ -3178,6 +3971,10 @@ default assigned to the property would reflect onto every host and put a
3178
3971
  `placement="end"` into markup no consumer wrote. So what this tier
3179
3972
  guarantees is the absence, and a sheet selects on it. */
3180
3973
  placement?: (HelixHeadlessDrawer["placement"]) | undefined;
3974
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3975
+ "default-open"?: (HelixHeadlessDrawer["defaultOpen"]) | undefined;
3976
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3977
+ defaultOpen?: (HelixHeadlessDrawer["defaultOpen"]) | undefined;
3181
3978
  /** Whether the element is open.
3182
3979
 
3183
3980
  One property, not two, so `dialog.open` answers the question anyone
@@ -3191,10 +3988,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
3191
3988
  last reader did rather than what the author wrote. `:state(open)` carries
3192
3989
  the resolved state for stylesheets, which is what the mirror is for. */
3193
3990
  open?: (HelixHeadlessDrawer["open"]) | undefined;
3194
- /** Whether the markup declared it open. Ignored once `open` is written. */
3195
- "default-open"?: (HelixHeadlessDrawer["defaultOpen"]) | undefined;
3196
- /** Whether the markup declared it open. Ignored once `open` is written. */
3197
- defaultOpen?: (HelixHeadlessDrawer["defaultOpen"]) | undefined;
3198
3991
  /** What the dialog closed with, the way `<dialog>` reports it.
3199
3992
 
3200
3993
  **The whole point of a `<dialog>` returning a value is lost behind a shadow
@@ -3338,9 +4131,17 @@ Absent uses the runtime's own. */
3338
4131
  locale?: (HelixHeadlessFileInput["locale"]) | undefined;
3339
4132
  /** Whether more than one file can be chosen. */
3340
4133
  multiple?: (HelixHeadlessFileInput["multiple"]) | undefined;
3341
- /** What the control removing one file is called, per file. */
4134
+ /** What the control removing one file is called, with `{name}` filled in.
4135
+
4136
+ **The name goes in**, so a row of them is heard as which one each
4137
+ removes rather than as "Remove" said once per file. A label with no
4138
+ `{name}` has it added after it. */
3342
4139
  "remove-label"?: (HelixHeadlessFileInput["removeLabel"]) | undefined;
3343
- /** What the control removing one file is called, per file. */
4140
+ /** What the control removing one file is called, with `{name}` filled in.
4141
+
4142
+ **The name goes in**, so a row of them is heard as which one each
4143
+ removes rather than as "Remove" said once per file. A label with no
4144
+ `{name}` has it added after it. */
3344
4145
  removeLabel?: (HelixHeadlessFileInput["removeLabel"]) | undefined;
3345
4146
  /** What the trigger reads, where nothing is slotted into it. */
3346
4147
  "trigger-label"?: (HelixHeadlessFileInput["triggerLabel"]) | undefined;
@@ -3354,6 +4155,26 @@ Absent uses the runtime's own. */
3354
4155
  label?: (HelixHeadlessFileInput["label"]) | undefined;
3355
4156
  /** Whether the form refuses to submit without it. */
3356
4157
  required?: (HelixHeadlessFileInput["required"]) | undefined;
4158
+ /** What a reader is told when the field is required and empty, where the
4159
+ page says.
4160
+
4161
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
4162
+ set and the browser's own on a text field, which the browser writes in
4163
+ the reader's language. Every other word a control speaks is a property,
4164
+ and this one was the English a form in another language still spoke in
4165
+ the bubble it raises on submit: `feedback` replaces the message under
4166
+ the field and does not reach that one. */
4167
+ "value-missing-message"?: (HelixHeadlessFileInput["valueMissingMessage"]) | undefined;
4168
+ /** What a reader is told when the field is required and empty, where the
4169
+ page says.
4170
+
4171
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
4172
+ set and the browser's own on a text field, which the browser writes in
4173
+ the reader's language. Every other word a control speaks is a property,
4174
+ and this one was the English a form in another language still spoke in
4175
+ the bubble it raises on submit: `feedback` replaces the message under
4176
+ the field and does not reach that one. */
4177
+ valueMissingMessage?: (HelixHeadlessFileInput["valueMissingMessage"]) | undefined;
3357
4178
  /** Whether the control is non-interactive.
3358
4179
 
3359
4180
  Reflected, because the styled tier selects on it, and mirrored to
@@ -3596,6 +4417,10 @@ them. */
3596
4417
 
3597
4418
  Not a label: it goes when typing starts. */
3598
4419
  placeholder?: (HelixHeadlessFilterInput["placeholder"]) | undefined;
4420
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4421
+ "default-open"?: (HelixHeadlessFilterInput["defaultOpen"]) | undefined;
4422
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4423
+ defaultOpen?: (HelixHeadlessFilterInput["defaultOpen"]) | undefined;
3599
4424
  /** Whether the element is open.
3600
4425
 
3601
4426
  One property, not two, so `dialog.open` answers the question anyone
@@ -3609,10 +4434,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
3609
4434
  last reader did rather than what the author wrote. `:state(open)` carries
3610
4435
  the resolved state for stylesheets, which is what the mirror is for. */
3611
4436
  open?: (HelixHeadlessFilterInput["open"]) | undefined;
3612
- /** Whether the markup declared it open. Ignored once `open` is written. */
3613
- "default-open"?: (HelixHeadlessFilterInput["defaultOpen"]) | undefined;
3614
- /** Whether the markup declared it open. Ignored once `open` is written. */
3615
- defaultOpen?: (HelixHeadlessFilterInput["defaultOpen"]) | undefined;
3616
4437
  /** What the control is called once everything is showing. */
3617
4438
  "collapse-label"?: (HelixHeadlessFilterInput["collapseLabel"]) | undefined;
3618
4439
  /** What the control is called once everything is showing. */
@@ -3646,6 +4467,26 @@ a reset should return to. */
3646
4467
  label?: (HelixHeadlessFilterInput["label"]) | undefined;
3647
4468
  /** Whether the form refuses to submit without it. */
3648
4469
  required?: (HelixHeadlessFilterInput["required"]) | undefined;
4470
+ /** What a reader is told when the field is required and empty, where the
4471
+ page says.
4472
+
4473
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
4474
+ set and the browser's own on a text field, which the browser writes in
4475
+ the reader's language. Every other word a control speaks is a property,
4476
+ and this one was the English a form in another language still spoke in
4477
+ the bubble it raises on submit: `feedback` replaces the message under
4478
+ the field and does not reach that one. */
4479
+ "value-missing-message"?: (HelixHeadlessFilterInput["valueMissingMessage"]) | undefined;
4480
+ /** What a reader is told when the field is required and empty, where the
4481
+ page says.
4482
+
4483
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
4484
+ set and the browser's own on a text field, which the browser writes in
4485
+ the reader's language. Every other word a control speaks is a property,
4486
+ and this one was the English a form in another language still spoke in
4487
+ the bubble it raises on submit: `feedback` replaces the message under
4488
+ the field and does not reach that one. */
4489
+ valueMissingMessage?: (HelixHeadlessFilterInput["valueMissingMessage"]) | undefined;
3649
4490
  /** Whether the control is non-interactive.
3650
4491
 
3651
4492
  Reflected, because the styled tier selects on it, and mirrored to
@@ -4250,6 +5091,26 @@ a reset should return to. */
4250
5091
  label?: (HelixHeadlessInput["label"]) | undefined;
4251
5092
  /** Whether the form refuses to submit without it. */
4252
5093
  required?: (HelixHeadlessInput["required"]) | undefined;
5094
+ /** What a reader is told when the field is required and empty, where the
5095
+ page says.
5096
+
5097
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
5098
+ set and the browser's own on a text field, which the browser writes in
5099
+ the reader's language. Every other word a control speaks is a property,
5100
+ and this one was the English a form in another language still spoke in
5101
+ the bubble it raises on submit: `feedback` replaces the message under
5102
+ the field and does not reach that one. */
5103
+ "value-missing-message"?: (HelixHeadlessInput["valueMissingMessage"]) | undefined;
5104
+ /** What a reader is told when the field is required and empty, where the
5105
+ page says.
5106
+
5107
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
5108
+ set and the browser's own on a text field, which the browser writes in
5109
+ the reader's language. Every other word a control speaks is a property,
5110
+ and this one was the English a form in another language still spoke in
5111
+ the bubble it raises on submit: `feedback` replaces the message under
5112
+ the field and does not reach that one. */
5113
+ valueMissingMessage?: (HelixHeadlessInput["valueMissingMessage"]) | undefined;
4253
5114
  /** Whether the control is non-interactive.
4254
5115
 
4255
5116
  Reflected, because the styled tier selects on it, and mirrored to
@@ -4445,6 +5306,10 @@ Ignored once `active` is written. */
4445
5306
 
4446
5307
  Ignored once `active` is written. */
4447
5308
  defaultActive?: (HelixHeadlessLightbox["defaultActive"]) | undefined;
5309
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5310
+ "default-open"?: (HelixHeadlessLightbox["defaultOpen"]) | undefined;
5311
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5312
+ defaultOpen?: (HelixHeadlessLightbox["defaultOpen"]) | undefined;
4448
5313
  /** Whether the element is open.
4449
5314
 
4450
5315
  One property, not two, so `dialog.open` answers the question anyone
@@ -4458,10 +5323,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
4458
5323
  last reader did rather than what the author wrote. `:state(open)` carries
4459
5324
  the resolved state for stylesheets, which is what the mirror is for. */
4460
5325
  open?: (HelixHeadlessLightbox["open"]) | undefined;
4461
- /** Whether the markup declared it open. Ignored once `open` is written. */
4462
- "default-open"?: (HelixHeadlessLightbox["defaultOpen"]) | undefined;
4463
- /** Whether the markup declared it open. Ignored once `open` is written. */
4464
- defaultOpen?: (HelixHeadlessLightbox["defaultOpen"]) | undefined;
4465
5326
  };
4466
5327
 
4467
5328
  export type HelixHeadlessLightboxVueEvents = {
@@ -4671,13 +5532,6 @@ point.** The field filters a list rather than collecting a value, so a
4671
5532
  browser offering to fill it with a saved address is competing for the same
4672
5533
  keystrokes as the listbox. A consumer who wants autofill can still ask. */
4673
5534
  autocomplete?: (HelixHeadlessListbox["autocomplete"]) | undefined;
4674
- /** What the list is narrowed to, if anything.
4675
-
4676
- Filtering hides rather than removes, so nothing about the value changes and
4677
- the list is still the consumer's own elements in their own order. Reading
4678
- gives what is being filtered on; writing declares it theirs, and
4679
- `default-filter` seeds one the list owns. */
4680
- filter?: (HelixHeadlessListbox["filter"]) | undefined;
4681
5535
  /** What to start narrowed to, where nothing declared it. */
4682
5536
  "default-filter"?: (HelixHeadlessListbox["defaultFilter"]) | undefined;
4683
5537
  /** What to start narrowed to, where nothing declared it. */
@@ -4696,6 +5550,13 @@ and re-declared here only to keep this list's own wording: "No matches" is
4696
5550
  about a filter, and the mixin's "Nothing to show" is about a list that was
4697
5551
  never given anything. */
4698
5552
  emptyText?: (HelixHeadlessListbox["emptyText"]) | undefined;
5553
+ /** What the list is narrowed to, if anything.
5554
+
5555
+ Filtering hides rather than removes, so nothing about the value changes and
5556
+ the list is still the consumer's own elements in their own order. Reading
5557
+ gives what is being filtered on; writing declares it theirs, and
5558
+ `default-filter` seeds one the list owns. */
5559
+ filter?: (HelixHeadlessListbox["filter"]) | undefined;
4699
5560
  /** Whether the list renders a field for narrowing itself.
4700
5561
 
4701
5562
  The field lives here rather than in whatever frames the list, because the
@@ -4738,6 +5599,26 @@ a reset should return to. */
4738
5599
  label?: (HelixHeadlessListbox["label"]) | undefined;
4739
5600
  /** Whether the form refuses to submit without it. */
4740
5601
  required?: (HelixHeadlessListbox["required"]) | undefined;
5602
+ /** What a reader is told when the field is required and empty, where the
5603
+ page says.
5604
+
5605
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
5606
+ set and the browser's own on a text field, which the browser writes in
5607
+ the reader's language. Every other word a control speaks is a property,
5608
+ and this one was the English a form in another language still spoke in
5609
+ the bubble it raises on submit: `feedback` replaces the message under
5610
+ the field and does not reach that one. */
5611
+ "value-missing-message"?: (HelixHeadlessListbox["valueMissingMessage"]) | undefined;
5612
+ /** What a reader is told when the field is required and empty, where the
5613
+ page says.
5614
+
5615
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
5616
+ set and the browser's own on a text field, which the browser writes in
5617
+ the reader's language. Every other word a control speaks is a property,
5618
+ and this one was the English a form in another language still spoke in
5619
+ the bubble it raises on submit: `feedback` replaces the message under
5620
+ the field and does not reach that one. */
5621
+ valueMissingMessage?: (HelixHeadlessListbox["valueMissingMessage"]) | undefined;
4741
5622
  /** Whether the control is non-interactive.
4742
5623
 
4743
5624
  Reflected, because the styled tier selects on it, and mirrored to
@@ -4834,12 +5715,27 @@ that *a* findable control exists, never that it is ours. The methods stay
4834
5715
  public either way, so a consumer drawing their own chrome can still drive
4835
5716
  the surface.
4836
5717
 
4837
- Absent is all three, which is this library's rule that a resting value is
4838
- an attribute's absence, and it is what the stylesheet asks about: the
4839
- layout rules are written against `[controls]:not([controls~="zoom"])`
4840
- rather than the bare negation, or a surface that named no list at all
4841
- would be laid out as though it had dropped everything. */
5718
+ Absent is whatever the family rests at, which is this library's rule that
5719
+ a resting value is an attribute's absence: all three for a map, whose
5720
+ reader may have no other way to move it, and zoom and fullscreen for a
5721
+ board, which a reader drags and whose pad took a third of the frame. The
5722
+ stylesheet lays the cluster out by which buttons are in it rather than by
5723
+ this attribute, so the two defaults need no rule each. */
4842
5724
  controls?: (HelixHeadlessMap["controls"]) | undefined;
5725
+ /** What the group of controls is called, for a reader who meets it.
5726
+
5727
+ Absent is the family's own name for it, "Map controls" or "Board
5728
+ controls", which names what the controls drive rather than the
5729
+ mechanism. Written here to say it in another language, which every other
5730
+ string this surface speaks already allowed and this one did not. */
5731
+ "controls-label"?: (HelixHeadlessMap["controlsLabel"]) | undefined;
5732
+ /** What the group of controls is called, for a reader who meets it.
5733
+
5734
+ Absent is the family's own name for it, "Map controls" or "Board
5735
+ controls", which names what the controls drive rather than the
5736
+ mechanism. Written here to say it in another language, which every other
5737
+ string this surface speaks already allowed and this one did not. */
5738
+ controlsLabel?: (HelixHeadlessMap["controlsLabel"]) | undefined;
4843
5739
  /** Which corner the controls sit in.
4844
5740
 
4845
5741
  **Configurable because there is no safe default**, which is a collision
@@ -4882,10 +5778,30 @@ reader operates the surface, and chrome that hid itself by default would
4882
5778
  be the component undoing its own argument. Set it for a display nobody
4883
5779
  drives. */
4884
5780
  idleDelay?: (HelixHeadlessMap["idleDelay"]) | undefined;
4885
- /** What one pan control is called, with `{way}` filled in. */
4886
- "pan-label"?: (HelixHeadlessMap["panLabel"]) | undefined;
4887
- /** What one pan control is called, with `{way}` filled in. */
4888
- panLabel?: (HelixHeadlessMap["panLabel"]) | undefined;
5781
+ /** What the control that pans down is called.
5782
+
5783
+ **A label for each way rather than one with the way filled in**, which is
5784
+ what this was: `Pan {way}` filled in with `left`, so a page that said it
5785
+ in French read out "Déplacer left". The word for a direction is as much
5786
+ the translator's as the word for panning, and a language can put it
5787
+ anywhere in the phrase. */
5788
+ "pan-down-label"?: (HelixHeadlessMap["panDownLabel"]) | undefined;
5789
+ /** What the control that pans down is called.
5790
+
5791
+ **A label for each way rather than one with the way filled in**, which is
5792
+ what this was: `Pan {way}` filled in with `left`, so a page that said it
5793
+ in French read out "Déplacer left". The word for a direction is as much
5794
+ the translator's as the word for panning, and a language can put it
5795
+ anywhere in the phrase. */
5796
+ panDownLabel?: (HelixHeadlessMap["panDownLabel"]) | undefined;
5797
+ /** What the control that pans left is called, on screen. */
5798
+ "pan-left-label"?: (HelixHeadlessMap["panLeftLabel"]) | undefined;
5799
+ /** What the control that pans left is called, on screen. */
5800
+ panLeftLabel?: (HelixHeadlessMap["panLeftLabel"]) | undefined;
5801
+ /** What the control that pans right is called, on screen. */
5802
+ "pan-right-label"?: (HelixHeadlessMap["panRightLabel"]) | undefined;
5803
+ /** What the control that pans right is called, on screen. */
5804
+ panRightLabel?: (HelixHeadlessMap["panRightLabel"]) | undefined;
4889
5805
  /** How far one press moves the view, as a fraction of what is on screen.
4890
5806
 
4891
5807
  A fraction rather than a distance, because this surface does not know the
@@ -4898,6 +5814,10 @@ A fraction rather than a distance, because this surface does not know the
4898
5814
  scale of what is inside it: a quarter of the viewport is the same gesture
4899
5815
  at any zoom, and a consumer who wants their own units multiplies by them. */
4900
5816
  panStep?: (HelixHeadlessMap["panStep"]) | undefined;
5817
+ /** What the control that pans up is called. */
5818
+ "pan-up-label"?: (HelixHeadlessMap["panUpLabel"]) | undefined;
5819
+ /** What the control that pans up is called. */
5820
+ panUpLabel?: (HelixHeadlessMap["panUpLabel"]) | undefined;
4901
5821
  /** What the control that zooms in is called. */
4902
5822
  "zoom-in-label"?: (HelixHeadlessMap["zoomInLabel"]) | undefined;
4903
5823
  /** What the control that zooms in is called. */
@@ -5013,6 +5933,10 @@ question; borrowing it here would put a third meaning on it.
5013
5933
  a word and a band under a header are two arrangements this family has, and
5014
5934
  no other family is being asked the same question. */
5015
5935
  variant?: (HelixHeadlessMegamenu["variant"]) | undefined;
5936
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5937
+ "default-open"?: (HelixHeadlessMegamenu["defaultOpen"]) | undefined;
5938
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5939
+ defaultOpen?: (HelixHeadlessMegamenu["defaultOpen"]) | undefined;
5016
5940
  /** Whether the element is open.
5017
5941
 
5018
5942
  One property, not two, so `dialog.open` answers the question anyone
@@ -5026,10 +5950,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
5026
5950
  last reader did rather than what the author wrote. `:state(open)` carries
5027
5951
  the resolved state for stylesheets, which is what the mirror is for. */
5028
5952
  open?: (HelixHeadlessMegamenu["open"]) | undefined;
5029
- /** Whether the markup declared it open. Ignored once `open` is written. */
5030
- "default-open"?: (HelixHeadlessMegamenu["defaultOpen"]) | undefined;
5031
- /** Whether the markup declared it open. Ignored once `open` is written. */
5032
- defaultOpen?: (HelixHeadlessMegamenu["defaultOpen"]) | undefined;
5033
5953
  };
5034
5954
 
5035
5955
  export type HelixHeadlessMegamenuVueEvents = {
@@ -5171,6 +6091,10 @@ say that without the component knowing what a row looks like. */
5171
6091
  "loading-text"?: (HelixHeadlessMenu["loadingText"]) | undefined;
5172
6092
  /** What is said while they are on their way. */
5173
6093
  loadingText?: (HelixHeadlessMenu["loadingText"]) | undefined;
6094
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6095
+ "default-open"?: (HelixHeadlessMenu["defaultOpen"]) | undefined;
6096
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6097
+ defaultOpen?: (HelixHeadlessMenu["defaultOpen"]) | undefined;
5174
6098
  /** Whether the element is open.
5175
6099
 
5176
6100
  One property, not two, so `dialog.open` answers the question anyone
@@ -5184,10 +6108,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
5184
6108
  last reader did rather than what the author wrote. `:state(open)` carries
5185
6109
  the resolved state for stylesheets, which is what the mirror is for. */
5186
6110
  open?: (HelixHeadlessMenu["open"]) | undefined;
5187
- /** Whether the markup declared it open. Ignored once `open` is written. */
5188
- "default-open"?: (HelixHeadlessMenu["defaultOpen"]) | undefined;
5189
- /** Whether the markup declared it open. Ignored once `open` is written. */
5190
- defaultOpen?: (HelixHeadlessMenu["defaultOpen"]) | undefined;
5191
6111
  };
5192
6112
 
5193
6113
  export type HelixHeadlessMenuVueEvents = {
@@ -5334,6 +6254,10 @@ unsayable. Left off, it is the number of rows. */
5334
6254
  The slot's fallback rather than its replacement, so a consumer who wants a
5335
6255
  mark beside the name slots `label` and this goes unused. */
5336
6256
  label?: (HelixHeadlessNotificationGroup["label"]) | undefined;
6257
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6258
+ "default-open"?: (HelixHeadlessNotificationGroup["defaultOpen"]) | undefined;
6259
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6260
+ defaultOpen?: (HelixHeadlessNotificationGroup["defaultOpen"]) | undefined;
5337
6261
  /** Whether the element is open.
5338
6262
 
5339
6263
  One property, not two, so `dialog.open` answers the question anyone
@@ -5347,10 +6271,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
5347
6271
  last reader did rather than what the author wrote. `:state(open)` carries
5348
6272
  the resolved state for stylesheets, which is what the mirror is for. */
5349
6273
  open?: (HelixHeadlessNotificationGroup["open"]) | undefined;
5350
- /** Whether the markup declared it open. Ignored once `open` is written. */
5351
- "default-open"?: (HelixHeadlessNotificationGroup["defaultOpen"]) | undefined;
5352
- /** Whether the markup declared it open. Ignored once `open` is written. */
5353
- defaultOpen?: (HelixHeadlessNotificationGroup["defaultOpen"]) | undefined;
5354
6274
  };
5355
6275
 
5356
6276
  export type HelixHeadlessNotificationGroupVueEvents = {
@@ -5380,6 +6300,14 @@ is the shape that needs no translation at either end. Left unset the item
5380
6300
  shows no timestamp rather than showing the epoch, which is what parsing an
5381
6301
  empty string would give. */
5382
6302
  at?: (HelixHeadlessNotification["at"]) | undefined;
6303
+ /** State to open with, where nothing declared one. */
6304
+ "default-read"?: (HelixHeadlessNotification["defaultRead"]) | undefined;
6305
+ /** State to open with, where nothing declared one. */
6306
+ defaultRead?: (HelixHeadlessNotification["defaultRead"]) | undefined;
6307
+ /** Locale for the timestamp.
6308
+
6309
+ Empty is the runtime's own. */
6310
+ locale?: (HelixHeadlessNotification["locale"]) | undefined;
5383
6311
  /** Whether the reader has seen it.
5384
6312
 
5385
6313
  Set it and this element defers: a reader's click fires `helix-read` and
@@ -5394,14 +6322,6 @@ as a hydration mismatch, and which a copy of the serialized element
5394
6322
  re-parses as a declaration. `:state(read)` is what the stylesheet reads.
5395
6323
  `hydration.dom.spec.ts` holds it. */
5396
6324
  read?: (HelixHeadlessNotification["read"]) | undefined;
5397
- /** State to open with, where nothing declared one. */
5398
- "default-read"?: (HelixHeadlessNotification["defaultRead"]) | undefined;
5399
- /** State to open with, where nothing declared one. */
5400
- defaultRead?: (HelixHeadlessNotification["defaultRead"]) | undefined;
5401
- /** Locale for the timestamp.
5402
-
5403
- Empty is the runtime's own. */
5404
- locale?: (HelixHeadlessNotification["locale"]) | undefined;
5405
6325
  /** Whether it offers a control to take it away. */
5406
6326
  dismissible?: (HelixHeadlessNotification["dismissible"]) | undefined;
5407
6327
  /** Accessible name for that control.
@@ -5490,6 +6410,20 @@ lets autofill work at all. Hardcoding `off` here is what stops a reader
5490
6410
  having a birthday or a postal code filled in for them, with no way for a
5491
6411
  consumer to ask for it. */
5492
6412
  autocomplete?: (HelixHeadlessNumberInput["autocomplete"]) | undefined;
6413
+ /** What a reader is told when the field holds something that is not a number.
6414
+
6415
+ **Every sentence a control raises in the browser's bubble is a property**,
6416
+ named for the validity flag it reports, so a form in another language
6417
+ speaks it: `feedback` replaces the message under the field and does not
6418
+ reach the bubble. Absent is the control's own sentence, in English. */
6419
+ "bad-input-message"?: (HelixHeadlessNumberInput["badInputMessage"]) | undefined;
6420
+ /** What a reader is told when the field holds something that is not a number.
6421
+
6422
+ **Every sentence a control raises in the browser's bubble is a property**,
6423
+ named for the validity flag it reports, so a form in another language
6424
+ speaks it: `feedback` replaces the message under the field and does not
6425
+ reach the bubble. Absent is the control's own sentence, in English. */
6426
+ badInputMessage?: (HelixHeadlessNumberInput["badInputMessage"]) | undefined;
5493
6427
  /** Accessible name for the control that steps down. */
5494
6428
  "decrement-label"?: (HelixHeadlessNumberInput["decrementLabel"]) | undefined;
5495
6429
  /** Accessible name for the control that steps down. */
@@ -5522,6 +6456,14 @@ Absent has no floor. */
5522
6456
 
5523
6457
  Not a label: it goes when typing starts. */
5524
6458
  placeholder?: (HelixHeadlessNumberInput["placeholder"]) | undefined;
6459
+ /** What a reader is told when the number is above `max`, with `{max}` filled in. */
6460
+ "range-overflow-message"?: (HelixHeadlessNumberInput["rangeOverflowMessage"]) | undefined;
6461
+ /** What a reader is told when the number is above `max`, with `{max}` filled in. */
6462
+ rangeOverflowMessage?: (HelixHeadlessNumberInput["rangeOverflowMessage"]) | undefined;
6463
+ /** What a reader is told when the number is below `min`, with `{min}` filled in. */
6464
+ "range-underflow-message"?: (HelixHeadlessNumberInput["rangeUnderflowMessage"]) | undefined;
6465
+ /** What a reader is told when the number is below `min`, with `{min}` filled in. */
6466
+ rangeUnderflowMessage?: (HelixHeadlessNumberInput["rangeUnderflowMessage"]) | undefined;
5525
6467
  /** Whether the field refuses input while still submitting its value. */
5526
6468
  readonly?: (HelixHeadlessNumberInput["readOnly"]) | undefined;
5527
6469
  /** Whether the field refuses input while still submitting its value. */
@@ -5556,6 +6498,26 @@ a reset should return to. */
5556
6498
  label?: (HelixHeadlessNumberInput["label"]) | undefined;
5557
6499
  /** Whether the form refuses to submit without it. */
5558
6500
  required?: (HelixHeadlessNumberInput["required"]) | undefined;
6501
+ /** What a reader is told when the field is required and empty, where the
6502
+ page says.
6503
+
6504
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
6505
+ set and the browser's own on a text field, which the browser writes in
6506
+ the reader's language. Every other word a control speaks is a property,
6507
+ and this one was the English a form in another language still spoke in
6508
+ the bubble it raises on submit: `feedback` replaces the message under
6509
+ the field and does not reach that one. */
6510
+ "value-missing-message"?: (HelixHeadlessNumberInput["valueMissingMessage"]) | undefined;
6511
+ /** What a reader is told when the field is required and empty, where the
6512
+ page says.
6513
+
6514
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
6515
+ set and the browser's own on a text field, which the browser writes in
6516
+ the reader's language. Every other word a control speaks is a property,
6517
+ and this one was the English a form in another language still spoke in
6518
+ the bubble it raises on submit: `feedback` replaces the message under
6519
+ the field and does not reach that one. */
6520
+ valueMissingMessage?: (HelixHeadlessNumberInput["valueMissingMessage"]) | undefined;
5559
6521
  /** Whether the control is non-interactive.
5560
6522
 
5561
6523
  Reflected, because the styled tier selects on it, and mirrored to
@@ -5609,6 +6571,22 @@ export type HelixHeadlessObjectInspectorHelixCopyElementEvent =
5609
6571
  HelixHeadlessObjectInspectorElementEvent<HelixCopyEvent>;
5610
6572
 
5611
6573
  export type HelixHeadlessObjectInspectorVueProps = {
6574
+ /** What the copy control is called on a row with a key, with the key as
6575
+ `{name}`.
6576
+
6577
+ **Every word the inspector speaks is a property**, so a page in another
6578
+ language hears its own rather than English around its own keys. */
6579
+ "copy-label"?: (HelixHeadlessObjectInspector["copyLabel"]) | undefined;
6580
+ /** What the copy control is called on a row with a key, with the key as
6581
+ `{name}`.
6582
+
6583
+ **Every word the inspector speaks is a property**, so a page in another
6584
+ language hears its own rather than English around its own keys. */
6585
+ copyLabel?: (HelixHeadlessObjectInspector["copyLabel"]) | undefined;
6586
+ /** What the copy control is called where there is no key, on the value itself. */
6587
+ "copy-value-label"?: (HelixHeadlessObjectInspector["copyValueLabel"]) | undefined;
6588
+ /** What the copy control is called where there is no key, on the value itself. */
6589
+ copyValueLabel?: (HelixHeadlessObjectInspector["copyValueLabel"]) | undefined;
5612
6590
  /** How many levels start open.
5613
6591
 
5614
6592
  One by default: the root is open and everything under it closed, so a
@@ -5881,21 +6859,6 @@ look, so no rule selects on it, and the house rule is that reflection
5881
6859
  exists for selectors: an unread reflected attribute is one more thing
5882
6860
  written onto a host at upgrade that a server's output never had. */
5883
6861
  ends?: (HelixHeadlessPagination["ends"]) | undefined;
5884
- /** The page on show, one-based.
5885
-
5886
- An accessor pair, the same shape as the calendar's `month`. Reading gives
5887
- the page on show; writing sets it, and `default-page` seeds one the element
5888
- keeps until somebody does.
5889
-
5890
- **Clamped on the way out, because "the page on show" is what it says it
5891
- gives.** Returning whatever was written means `default-page="99"` on a
5892
- ten-page result renders page 10, marks page 10 with `aria-current`, and
5893
- reports 99, so a consumer syncing their query from this reads a page that
5894
- does not exist while the control in front of them says otherwise. Not a
5895
- far-fetched value: it is a bookmarked link after the result shrank.
5896
-
5897
- Rounded here too, so `2.7` reads as the 2 it renders. */
5898
- page?: (HelixHeadlessPagination["page"]) | undefined;
5899
6862
  /** Accessible name for the control that jumps to the first page. */
5900
6863
  "first-label"?: (HelixHeadlessPagination["firstLabel"]) | undefined;
5901
6864
  /** Accessible name for the control that jumps to the first page. */
@@ -5932,6 +6895,21 @@ different address from `?page=1234`. */
5932
6895
  "next-label"?: (HelixHeadlessPagination["nextLabel"]) | undefined;
5933
6896
  /** Accessible name for the control that moves forward. */
5934
6897
  nextLabel?: (HelixHeadlessPagination["nextLabel"]) | undefined;
6898
+ /** The page on show, one-based.
6899
+
6900
+ An accessor pair, the same shape as the calendar's `month`. Reading gives
6901
+ the page on show; writing sets it, and `default-page` seeds one the element
6902
+ keeps until somebody does.
6903
+
6904
+ **Clamped on the way out, because "the page on show" is what it says it
6905
+ gives.** Returning whatever was written means `default-page="99"` on a
6906
+ ten-page result renders page 10, marks page 10 with `aria-current`, and
6907
+ reports 99, so a consumer syncing their query from this reads a page that
6908
+ does not exist while the control in front of them says otherwise. Not a
6909
+ far-fetched value: it is a bookmarked link after the result shrank.
6910
+
6911
+ Rounded here too, so `2.7` reads as the 2 it renders. */
6912
+ page?: (HelixHeadlessPagination["page"]) | undefined;
5935
6913
  /** Accessible name for one page, with `{page}` and `{pages}` filled in. */
5936
6914
  "page-label"?: (HelixHeadlessPagination["pageLabel"]) | undefined;
5937
6915
  /** Accessible name for one page, with `{page}` and `{pages}` filled in. */
@@ -6007,12 +6985,6 @@ export type HelixHeadlessPaginationSizeVueProps = {
6007
6985
  "default-value"?: (HelixHeadlessPaginationSize["defaultValue"] | `${number}`) | undefined;
6008
6986
  /** Size to start on, where nothing declared one. */
6009
6987
  defaultValue?: (HelixHeadlessPaginationSize["defaultValue"]) | undefined;
6010
- /** The size in force.
6011
-
6012
- Reading gives the real one; writing declares it the consumer's, and
6013
- `default-value` seeds one this element owns. Same accessor pair as
6014
- `Pagination.page` and the calendar's `month`. */
6015
- value?: (HelixHeadlessPaginationSize["value"]) | undefined;
6016
6988
  /** The words beside the control. */
6017
6989
  label?: (HelixHeadlessPaginationSize["label"]) | undefined;
6018
6990
  /** Locale for the numbers.
@@ -6025,6 +6997,12 @@ A string rather than an array, so the whole control is expressible in
6025
6997
  markup and survives a server render. Anything that is not a positive number
6026
6998
  is dropped rather than rendered as an option that cannot mean anything. */
6027
6999
  sizes?: (HelixHeadlessPaginationSize["sizes"]) | undefined;
7000
+ /** The size in force.
7001
+
7002
+ Reading gives the real one; writing declares it the consumer's, and
7003
+ `default-value` seeds one this element owns. Same accessor pair as
7004
+ `Pagination.page` and the calendar's `month`. */
7005
+ value?: (HelixHeadlessPaginationSize["value"]) | undefined;
6028
7006
  };
6029
7007
 
6030
7008
  export type HelixHeadlessPaginationSizeVueEvents = {
@@ -6105,6 +7083,12 @@ Empty by default, because a row of boxes already reads as a row of boxes. */
6105
7083
  readonly?: (HelixHeadlessPinInput["readOnly"]) | undefined;
6106
7084
  /** Whether the boxes refuse input while still submitting their value. */
6107
7085
  readOnly?: (HelixHeadlessPinInput["readOnly"]) | undefined;
7086
+ /** What a reader is told when the code is started and not finished, with
7087
+ `{length}` filled in. Absent is the control's own sentence, in English. */
7088
+ "too-short-message"?: (HelixHeadlessPinInput["tooShortMessage"]) | undefined;
7089
+ /** What a reader is told when the code is started and not finished, with
7090
+ `{length}` filled in. Absent is the control's own sentence, in English. */
7091
+ tooShortMessage?: (HelixHeadlessPinInput["tooShortMessage"]) | undefined;
6108
7092
  /** What a box accepts, which decides the keyboard a phone offers.
6109
7093
 
6110
7094
  `numeric` and `alphanumeric` also refuse anything else on the way in,
@@ -6145,6 +7129,26 @@ a reset should return to. */
6145
7129
  label?: (HelixHeadlessPinInput["label"]) | undefined;
6146
7130
  /** Whether the form refuses to submit without it. */
6147
7131
  required?: (HelixHeadlessPinInput["required"]) | undefined;
7132
+ /** What a reader is told when the field is required and empty, where the
7133
+ page says.
7134
+
7135
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7136
+ set and the browser's own on a text field, which the browser writes in
7137
+ the reader's language. Every other word a control speaks is a property,
7138
+ and this one was the English a form in another language still spoke in
7139
+ the bubble it raises on submit: `feedback` replaces the message under
7140
+ the field and does not reach that one. */
7141
+ "value-missing-message"?: (HelixHeadlessPinInput["valueMissingMessage"]) | undefined;
7142
+ /** What a reader is told when the field is required and empty, where the
7143
+ page says.
7144
+
7145
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7146
+ set and the browser's own on a text field, which the browser writes in
7147
+ the reader's language. Every other word a control speaks is a property,
7148
+ and this one was the English a form in another language still spoke in
7149
+ the bubble it raises on submit: `feedback` replaces the message under
7150
+ the field and does not reach that one. */
7151
+ valueMissingMessage?: (HelixHeadlessPinInput["valueMissingMessage"]) | undefined;
6148
7152
  /** Whether the control is non-interactive.
6149
7153
 
6150
7154
  Reflected, because the styled tier selects on it, and mirrored to
@@ -6205,6 +7209,10 @@ export type HelixHeadlessPopoverVueProps = {
6205
7209
 
6206
7210
  It moves if that side does not fit. */
6207
7211
  placement?: (HelixHeadlessPopover["placement"]) | undefined;
7212
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7213
+ "default-open"?: (HelixHeadlessPopover["defaultOpen"]) | undefined;
7214
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7215
+ defaultOpen?: (HelixHeadlessPopover["defaultOpen"]) | undefined;
6208
7216
  /** Whether the element is open.
6209
7217
 
6210
7218
  One property, not two, so `dialog.open` answers the question anyone
@@ -6218,10 +7226,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
6218
7226
  last reader did rather than what the author wrote. `:state(open)` carries
6219
7227
  the resolved state for stylesheets, which is what the mirror is for. */
6220
7228
  open?: (HelixHeadlessPopover["open"]) | undefined;
6221
- /** Whether the markup declared it open. Ignored once `open` is written. */
6222
- "default-open"?: (HelixHeadlessPopover["defaultOpen"]) | undefined;
6223
- /** Whether the markup declared it open. Ignored once `open` is written. */
6224
- defaultOpen?: (HelixHeadlessPopover["defaultOpen"]) | undefined;
6225
7229
  };
6226
7230
 
6227
7231
  export type HelixHeadlessPopoverVueEvents = {
@@ -6389,6 +7393,26 @@ a reset should return to. */
6389
7393
  label?: (HelixHeadlessRadioGroup["label"]) | undefined;
6390
7394
  /** Whether the form refuses to submit without it. */
6391
7395
  required?: (HelixHeadlessRadioGroup["required"]) | undefined;
7396
+ /** What a reader is told when the field is required and empty, where the
7397
+ page says.
7398
+
7399
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7400
+ set and the browser's own on a text field, which the browser writes in
7401
+ the reader's language. Every other word a control speaks is a property,
7402
+ and this one was the English a form in another language still spoke in
7403
+ the bubble it raises on submit: `feedback` replaces the message under
7404
+ the field and does not reach that one. */
7405
+ "value-missing-message"?: (HelixHeadlessRadioGroup["valueMissingMessage"]) | undefined;
7406
+ /** What a reader is told when the field is required and empty, where the
7407
+ page says.
7408
+
7409
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7410
+ set and the browser's own on a text field, which the browser writes in
7411
+ the reader's language. Every other word a control speaks is a property,
7412
+ and this one was the English a form in another language still spoke in
7413
+ the bubble it raises on submit: `feedback` replaces the message under
7414
+ the field and does not reach that one. */
7415
+ valueMissingMessage?: (HelixHeadlessRadioGroup["valueMissingMessage"]) | undefined;
6392
7416
  /** Whether the control is non-interactive.
6393
7417
 
6394
7418
  Reflected, because the styled tier selects on it, and mirrored to
@@ -6619,6 +7643,26 @@ a reset should return to. */
6619
7643
  label?: (HelixHeadlessRating["label"]) | undefined;
6620
7644
  /** Whether the form refuses to submit without it. */
6621
7645
  required?: (HelixHeadlessRating["required"]) | undefined;
7646
+ /** What a reader is told when the field is required and empty, where the
7647
+ page says.
7648
+
7649
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7650
+ set and the browser's own on a text field, which the browser writes in
7651
+ the reader's language. Every other word a control speaks is a property,
7652
+ and this one was the English a form in another language still spoke in
7653
+ the bubble it raises on submit: `feedback` replaces the message under
7654
+ the field and does not reach that one. */
7655
+ "value-missing-message"?: (HelixHeadlessRating["valueMissingMessage"]) | undefined;
7656
+ /** What a reader is told when the field is required and empty, where the
7657
+ page says.
7658
+
7659
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7660
+ set and the browser's own on a text field, which the browser writes in
7661
+ the reader's language. Every other word a control speaks is a property,
7662
+ and this one was the English a form in another language still spoke in
7663
+ the bubble it raises on submit: `feedback` replaces the message under
7664
+ the field and does not reach that one. */
7665
+ valueMissingMessage?: (HelixHeadlessRating["valueMissingMessage"]) | undefined;
6622
7666
  /** Whether the control is non-interactive.
6623
7667
 
6624
7668
  Reflected, because the styled tier selects on it, and mirrored to
@@ -6744,6 +7788,10 @@ consumer wiring the same flag twice. */
6744
7788
  multiple?: (HelixHeadlessSelect["multiple"]) | undefined;
6745
7789
  /** Shown on the trigger while nothing is chosen. */
6746
7790
  placeholder?: (HelixHeadlessSelect["placeholder"]) | undefined;
7791
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7792
+ "default-open"?: (HelixHeadlessSelect["defaultOpen"]) | undefined;
7793
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7794
+ defaultOpen?: (HelixHeadlessSelect["defaultOpen"]) | undefined;
6747
7795
  /** Whether the element is open.
6748
7796
 
6749
7797
  One property, not two, so `dialog.open` answers the question anyone
@@ -6757,10 +7805,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
6757
7805
  last reader did rather than what the author wrote. `:state(open)` carries
6758
7806
  the resolved state for stylesheets, which is what the mirror is for. */
6759
7807
  open?: (HelixHeadlessSelect["open"]) | undefined;
6760
- /** Whether the markup declared it open. Ignored once `open` is written. */
6761
- "default-open"?: (HelixHeadlessSelect["defaultOpen"]) | undefined;
6762
- /** Whether the markup declared it open. Ignored once `open` is written. */
6763
- defaultOpen?: (HelixHeadlessSelect["defaultOpen"]) | undefined;
6764
7808
  /** The value the markup declared, which is where a reset returns to. */
6765
7809
  "default-value"?: (HelixHeadlessSelect["defaultValue"]) | undefined;
6766
7810
  /** The value the markup declared, which is where a reset returns to. */
@@ -6780,6 +7824,26 @@ a reset should return to. */
6780
7824
  label?: (HelixHeadlessSelect["label"]) | undefined;
6781
7825
  /** Whether the form refuses to submit without it. */
6782
7826
  required?: (HelixHeadlessSelect["required"]) | undefined;
7827
+ /** What a reader is told when the field is required and empty, where the
7828
+ page says.
7829
+
7830
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7831
+ set and the browser's own on a text field, which the browser writes in
7832
+ the reader's language. Every other word a control speaks is a property,
7833
+ and this one was the English a form in another language still spoke in
7834
+ the bubble it raises on submit: `feedback` replaces the message under
7835
+ the field and does not reach that one. */
7836
+ "value-missing-message"?: (HelixHeadlessSelect["valueMissingMessage"]) | undefined;
7837
+ /** What a reader is told when the field is required and empty, where the
7838
+ page says.
7839
+
7840
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
7841
+ set and the browser's own on a text field, which the browser writes in
7842
+ the reader's language. Every other word a control speaks is a property,
7843
+ and this one was the English a form in another language still spoke in
7844
+ the bubble it raises on submit: `feedback` replaces the message under
7845
+ the field and does not reach that one. */
7846
+ valueMissingMessage?: (HelixHeadlessSelect["valueMissingMessage"]) | undefined;
6783
7847
  /** Whether the control is non-interactive.
6784
7848
 
6785
7849
  Reflected, because the styled tier selects on it, and mirrored to
@@ -6881,8 +7945,28 @@ is the honest picture of the range being offered. */
6881
7945
  markers?: (HelixHeadlessSlider["markers"]) | undefined;
6882
7946
  /** The largest value the reader can choose. */
6883
7947
  max?: (HelixHeadlessSlider["max"]) | undefined;
7948
+ /** What the upper thumb of a range is called, after the slider's own label.
7949
+
7950
+ **Named with the label rather than instead of it.** Each thumb was
7951
+ `aria-label="${label} maximum"`, which overrode the `<label>` and read the
7952
+ `label` string only, so a slider named by a slotted label or `aria-label`
7953
+ had thumbs called "minimum" and "maximum" and nothing else. The word is a
7954
+ property, like every other word a control speaks. */
7955
+ "maximum-label"?: (HelixHeadlessSlider["maximumLabel"]) | undefined;
7956
+ /** What the upper thumb of a range is called, after the slider's own label.
7957
+
7958
+ **Named with the label rather than instead of it.** Each thumb was
7959
+ `aria-label="${label} maximum"`, which overrode the `<label>` and read the
7960
+ `label` string only, so a slider named by a slotted label or `aria-label`
7961
+ had thumbs called "minimum" and "maximum" and nothing else. The word is a
7962
+ property, like every other word a control speaks. */
7963
+ maximumLabel?: (HelixHeadlessSlider["maximumLabel"]) | undefined;
6884
7964
  /** The smallest value the reader can choose. */
6885
7965
  min?: (HelixHeadlessSlider["min"]) | undefined;
7966
+ /** What the lower thumb of a range is called, after the slider's own label. */
7967
+ "minimum-label"?: (HelixHeadlessSlider["minimumLabel"]) | undefined;
7968
+ /** What the lower thumb of a range is called, after the slider's own label. */
7969
+ minimumLabel?: (HelixHeadlessSlider["minimumLabel"]) | undefined;
6886
7970
  /** Which way the track runs, `vertical` standing it on end.
6887
7971
 
6888
7972
  For a level rather than a quantity: a fader, a channel, anything a reader
@@ -6925,6 +8009,26 @@ a reset should return to. */
6925
8009
  label?: (HelixHeadlessSlider["label"]) | undefined;
6926
8010
  /** Whether the form refuses to submit without it. */
6927
8011
  required?: (HelixHeadlessSlider["required"]) | undefined;
8012
+ /** What a reader is told when the field is required and empty, where the
8013
+ page says.
8014
+
8015
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8016
+ set and the browser's own on a text field, which the browser writes in
8017
+ the reader's language. Every other word a control speaks is a property,
8018
+ and this one was the English a form in another language still spoke in
8019
+ the bubble it raises on submit: `feedback` replaces the message under
8020
+ the field and does not reach that one. */
8021
+ "value-missing-message"?: (HelixHeadlessSlider["valueMissingMessage"]) | undefined;
8022
+ /** What a reader is told when the field is required and empty, where the
8023
+ page says.
8024
+
8025
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8026
+ set and the browser's own on a text field, which the browser writes in
8027
+ the reader's language. Every other word a control speaks is a property,
8028
+ and this one was the English a form in another language still spoke in
8029
+ the bubble it raises on submit: `feedback` replaces the message under
8030
+ the field and does not reach that one. */
8031
+ valueMissingMessage?: (HelixHeadlessSlider["valueMissingMessage"]) | undefined;
6928
8032
  /** Whether the control is non-interactive.
6929
8033
 
6930
8034
  Reflected, because the styled tier selects on it, and mirrored to
@@ -7091,6 +8195,10 @@ export type HelixHeadlessSpeedDialVueProps = {
7091
8195
  Up by default, because the control this hangs off is usually docked to the
7092
8196
  bottom of the window and there is nothing below it to fan into. */
7093
8197
  placement?: (HelixHeadlessSpeedDial["placement"]) | undefined;
8198
+ /** Whether the markup declared it open. Ignored once `open` is written. */
8199
+ "default-open"?: (HelixHeadlessSpeedDial["defaultOpen"]) | undefined;
8200
+ /** Whether the markup declared it open. Ignored once `open` is written. */
8201
+ defaultOpen?: (HelixHeadlessSpeedDial["defaultOpen"]) | undefined;
7094
8202
  /** Whether the element is open.
7095
8203
 
7096
8204
  One property, not two, so `dialog.open` answers the question anyone
@@ -7104,10 +8212,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
7104
8212
  last reader did rather than what the author wrote. `:state(open)` carries
7105
8213
  the resolved state for stylesheets, which is what the mirror is for. */
7106
8214
  open?: (HelixHeadlessSpeedDial["open"]) | undefined;
7107
- /** Whether the markup declared it open. Ignored once `open` is written. */
7108
- "default-open"?: (HelixHeadlessSpeedDial["defaultOpen"]) | undefined;
7109
- /** Whether the markup declared it open. Ignored once `open` is written. */
7110
- defaultOpen?: (HelixHeadlessSpeedDial["defaultOpen"]) | undefined;
7111
8215
  };
7112
8216
 
7113
8217
  export type HelixHeadlessSpeedDialVueEvents = {
@@ -7134,6 +8238,32 @@ export type HelixHeadlessSplitterHelixBeforeResizeElementEvent =
7134
8238
  HelixHeadlessSplitterElementEvent<HelixBeforeResizeEvent>;
7135
8239
 
7136
8240
  export type HelixHeadlessSplitterVueProps = {
8241
+ /** Which pane is shut, if either.
8242
+
8243
+ The same accessor pair as `position`, and deliberately a second state
8244
+ rather than a reading of the first. A pane shut by dragging the divider to
8245
+ the edge and a pane shut on purpose look identical in geometry and are not
8246
+ the same thing: only the second knows where to go back to. Kept apart, the
8247
+ open position is simply the one collapsing never overwrote, so restoring
8248
+ needs no memory of its own.
8249
+
8250
+ It overrides `min` and `max`, which is the point of it. Those keep a sliver
8251
+ of a pane during a drag; this is the thing that says the sliver can go. */
8252
+ collapsed?: (HelixHeadlessSplitter["collapsed"]) | undefined;
8253
+ /** What the divider says while a pane is shut, in place of a number.
8254
+
8255
+ **A shut pane is off the scale the divider reports**, which is `min` to
8256
+ `max`, the sliver a drag keeps. The divider said a value outside its own
8257
+ range, 0 against a minimum of 20, which reads as broken rather than as
8258
+ shut. While shut it reports the whole 0 to 100 it sits on and says this. */
8259
+ "collapsed-label"?: (HelixHeadlessSplitter["collapsedLabel"]) | undefined;
8260
+ /** What the divider says while a pane is shut, in place of a number.
8261
+
8262
+ **A shut pane is off the scale the divider reports**, which is `min` to
8263
+ `max`, the sliver a drag keeps. The divider said a value outside its own
8264
+ range, 0 against a minimum of 20, which reads as broken rather than as
8265
+ shut. While shut it reports the whole 0 to 100 it sits on and says this. */
8266
+ collapsedLabel?: (HelixHeadlessSplitter["collapsedLabel"]) | undefined;
7137
8267
  /** How much of a shut pane is still shown, as a percentage.
7138
8268
 
7139
8269
  Zero by default, which is a pane fully gone. A tab strip or a title bar
@@ -7148,28 +8278,10 @@ that should survive its own collapse says how much of itself to keep, and
7148
8278
  only whoever put it there knows that, which is the same reason `min` is a
7149
8279
  consumer's to set. */
7150
8280
  collapsedSize?: (HelixHeadlessSplitter["collapsedSize"]) | undefined;
7151
- /** Where the divider sits, as a percentage of the whole.
7152
-
7153
- Reading gives where it is; writing declares it the consumer's, and
7154
- `default-position` seeds one this element owns. The same accessor pair
7155
- `Pagination.page` and the calendar's `month` carry. */
7156
- position?: (HelixHeadlessSplitter["position"]) | undefined;
7157
8281
  /** Accessible name for the handle where two dividers cross. */
7158
8282
  "corner-label"?: (HelixHeadlessSplitter["cornerLabel"]) | undefined;
7159
8283
  /** Accessible name for the handle where two dividers cross. */
7160
8284
  cornerLabel?: (HelixHeadlessSplitter["cornerLabel"]) | undefined;
7161
- /** Which pane is shut, if either.
7162
-
7163
- The same accessor pair as `position`, and deliberately a second state
7164
- rather than a reading of the first. A pane shut by dragging the divider to
7165
- the edge and a pane shut on purpose look identical in geometry and are not
7166
- the same thing: only the second knows where to go back to. Kept apart, the
7167
- open position is simply the one collapsing never overwrote, so restoring
7168
- needs no memory of its own.
7169
-
7170
- It overrides `min` and `max`, which is the point of it. Those keep a sliver
7171
- of a pane during a drag; this is the thing that says the sliver can go. */
7172
- collapsed?: (HelixHeadlessSplitter["collapsed"]) | undefined;
7173
8285
  /** Which pane starts shut, where nothing declared it. */
7174
8286
  "default-collapsed"?: (HelixHeadlessSplitter["defaultCollapsed"]) | undefined;
7175
8287
  /** Which pane starts shut, where nothing declared it. */
@@ -7225,6 +8337,12 @@ no room for two panes side by side, and a media query would hand it the
7225
8337
  desktop branch. A `ResizeObserver` on the host asks the only question that
7226
8338
  has an honest answer. */
7227
8339
  orientation?: (HelixHeadlessSplitter["orientation"]) | undefined;
8340
+ /** Where the divider sits, as a percentage of the whole.
8341
+
8342
+ Reading gives where it is; writing declares it the consumer's, and
8343
+ `default-position` seeds one this element owns. The same accessor pair
8344
+ `Pagination.page` and the calendar's `month` carry. */
8345
+ position?: (HelixHeadlessSplitter["position"]) | undefined;
7228
8346
  /** How far one arrow press moves it, as a percentage. */
7229
8347
  step?: (HelixHeadlessSplitter["step"]) | undefined;
7230
8348
  };
@@ -7400,6 +8518,26 @@ stylesheets. */
7400
8518
  label?: (HelixHeadlessSwitch["label"]) | undefined;
7401
8519
  /** Whether the form refuses to submit without it. */
7402
8520
  required?: (HelixHeadlessSwitch["required"]) | undefined;
8521
+ /** What a reader is told when the field is required and empty, where the
8522
+ page says.
8523
+
8524
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8525
+ set and the browser's own on a text field, which the browser writes in
8526
+ the reader's language. Every other word a control speaks is a property,
8527
+ and this one was the English a form in another language still spoke in
8528
+ the bubble it raises on submit: `feedback` replaces the message under
8529
+ the field and does not reach that one. */
8530
+ "value-missing-message"?: (HelixHeadlessSwitch["valueMissingMessage"]) | undefined;
8531
+ /** What a reader is told when the field is required and empty, where the
8532
+ page says.
8533
+
8534
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
8535
+ set and the browser's own on a text field, which the browser writes in
8536
+ the reader's language. Every other word a control speaks is a property,
8537
+ and this one was the English a form in another language still spoke in
8538
+ the bubble it raises on submit: `feedback` replaces the message under
8539
+ the field and does not reach that one. */
8540
+ valueMissingMessage?: (HelixHeadlessSwitch["valueMissingMessage"]) | undefined;
7403
8541
  /** Whether the control is non-interactive.
7404
8542
 
7405
8543
  Reflected, because the styled tier selects on it, and mirrored to
@@ -7468,6 +8606,18 @@ after a column moves is a sort a consumer cannot store in a URL.
7468
8606
  Empty on a column that is purely presentational, an actions column say, and
7469
8607
  such a column is never sortable however it is marked. */
7470
8608
  field?: (HelixHeadlessTableColumn["field"]) | undefined;
8609
+ /** What the grip that moves the column is called, with the heading's words as
8610
+ `{name}`.
8611
+
8612
+ **Every word a column speaks is a property**, so a table in another
8613
+ language hears its own rather than English around its own headings. */
8614
+ "move-label"?: (HelixHeadlessTableColumn["moveLabel"]) | undefined;
8615
+ /** What the grip that moves the column is called, with the heading's words as
8616
+ `{name}`.
8617
+
8618
+ **Every word a column speaks is a property**, so a table in another
8619
+ language hears its own rather than English around its own headings. */
8620
+ moveLabel?: (HelixHeadlessTableColumn["moveLabel"]) | undefined;
7471
8621
  /** Whether a reader may change this column's width.
7472
8622
 
7473
8623
  By dragging the edge at the end of the heading, or with the arrow keys once
@@ -7475,6 +8625,12 @@ it has focus, a step at a time and four with Shift. The width lands in
7475
8625
  `width` as pixels, and `helix-before-resize` asks first, so a consumer who
7476
8626
  stores the widths can take the decision. */
7477
8627
  resizable?: (HelixHeadlessTableColumn["resizable"]) | undefined;
8628
+ /** What the separator that resizes the column is called, with the heading's
8629
+ words as `{name}`. */
8630
+ "resize-label"?: (HelixHeadlessTableColumn["resizeLabel"]) | undefined;
8631
+ /** What the separator that resizes the column is called, with the heading's
8632
+ words as `{name}`. */
8633
+ resizeLabel?: (HelixHeadlessTableColumn["resizeLabel"]) | undefined;
7478
8634
  /** Whether a reader may reorder the set by this column.
7479
8635
 
7480
8636
  Ignored without a `field`, and silently: a column with nothing to sort by
@@ -7569,6 +8725,10 @@ line, so a column holding sentences rather than values wants
7569
8725
  `width="minmax(0, 1fr)"` to opt back into wrapping. A headless consumer owns
7570
8726
  the overflow either way, that being paint, and gets the honest track list. */
7571
8727
  width?: (HelixHeadlessTableColumn["width"]) | undefined;
8728
+ /** How the separator reads out the column's width, with `{width}` filled in. */
8729
+ "width-label"?: (HelixHeadlessTableColumn["widthLabel"]) | undefined;
8730
+ /** How the separator reads out the column's width, with `{width}` filled in. */
8731
+ widthLabel?: (HelixHeadlessTableColumn["widthLabel"]) | undefined;
7572
8732
  /** How to read the cell, where the field alone will not do.
7573
8733
 
7574
8734
  A property and not an attribute, because it is a function. Set it from a Lit
@@ -7896,6 +9056,26 @@ a reset should return to. */
7896
9056
  label?: (HelixHeadlessTextarea["label"]) | undefined;
7897
9057
  /** Whether the form refuses to submit without it. */
7898
9058
  required?: (HelixHeadlessTextarea["required"]) | undefined;
9059
+ /** What a reader is told when the field is required and empty, where the
9060
+ page says.
9061
+
9062
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9063
+ set and the browser's own on a text field, which the browser writes in
9064
+ the reader's language. Every other word a control speaks is a property,
9065
+ and this one was the English a form in another language still spoke in
9066
+ the bubble it raises on submit: `feedback` replaces the message under
9067
+ the field and does not reach that one. */
9068
+ "value-missing-message"?: (HelixHeadlessTextarea["valueMissingMessage"]) | undefined;
9069
+ /** What a reader is told when the field is required and empty, where the
9070
+ page says.
9071
+
9072
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9073
+ set and the browser's own on a text field, which the browser writes in
9074
+ the reader's language. Every other word a control speaks is a property,
9075
+ and this one was the English a form in another language still spoke in
9076
+ the bubble it raises on submit: `feedback` replaces the message under
9077
+ the field and does not reach that one. */
9078
+ valueMissingMessage?: (HelixHeadlessTextarea["valueMissingMessage"]) | undefined;
7899
9079
  /** Whether the control is non-interactive.
7900
9080
 
7901
9081
  Reflected, because the styled tier selects on it, and mirrored to
@@ -7987,6 +9167,40 @@ on why a wheel cannot do either. */
7987
9167
  mode?: (HelixHeadlessTimeInput["mode"]) | undefined;
7988
9168
  /** What the field says before a time is in it. */
7989
9169
  placeholder?: (HelixHeadlessTimeInput["placeholder"]) | undefined;
9170
+ /** What a reader is told when a range holds more than two times.
9171
+
9172
+ **Every sentence a control raises in the browser's bubble is a property**,
9173
+ so a form in another language speaks it. Absent is the control's own
9174
+ sentence, in English. */
9175
+ "range-length-message"?: (HelixHeadlessTimeInput["rangeLengthMessage"]) | undefined;
9176
+ /** What a reader is told when a range holds more than two times.
9177
+
9178
+ **Every sentence a control raises in the browser's bubble is a property**,
9179
+ so a form in another language speaks it. Absent is the control's own
9180
+ sentence, in English. */
9181
+ rangeLengthMessage?: (HelixHeadlessTimeInput["rangeLengthMessage"]) | undefined;
9182
+ /** What a reader is told when a time is after `max`, with `{max}` filled in
9183
+ as the field writes it. */
9184
+ "range-overflow-message"?: (HelixHeadlessTimeInput["rangeOverflowMessage"]) | undefined;
9185
+ /** What a reader is told when a time is after `max`, with `{max}` filled in
9186
+ as the field writes it. */
9187
+ rangeOverflowMessage?: (HelixHeadlessTimeInput["rangeOverflowMessage"]) | undefined;
9188
+ /** What a reader is told when a time is before `min`, with `{min}` filled
9189
+ in as the field writes it. */
9190
+ "range-underflow-message"?: (HelixHeadlessTimeInput["rangeUnderflowMessage"]) | undefined;
9191
+ /** What a reader is told when a time is before `min`, with `{min}` filled
9192
+ in as the field writes it. */
9193
+ rangeUnderflowMessage?: (HelixHeadlessTimeInput["rangeUnderflowMessage"]) | undefined;
9194
+ /** What the control removing one time is called, with `{name}` filled in.
9195
+
9196
+ **The name goes in**, so a row of them is heard as which one each
9197
+ removes rather than as "Remove" said once per time. */
9198
+ "remove-label"?: (HelixHeadlessTimeInput["removeLabel"]) | undefined;
9199
+ /** What the control removing one time is called, with `{name}` filled in.
9200
+
9201
+ **The name goes in**, so a row of them is heard as which one each
9202
+ removes rather than as "Remove" said once per time. */
9203
+ removeLabel?: (HelixHeadlessTimeInput["removeLabel"]) | undefined;
7990
9204
  /** How far apart the offered times are, in minutes. */
7991
9205
  step?: (HelixHeadlessTimeInput["step"]) | undefined;
7992
9206
  /** Whether the field writes the time out, or holds the value as it is.
@@ -8045,6 +9259,26 @@ submits nothing and leaves the tab order, and a read-only one submits its
8045
9259
  value and stays reachable, which is what a form showing a value somebody
8046
9260
  else set needs. */
8047
9261
  readOnly?: (HelixHeadlessTimeInput["readOnly"]) | undefined;
9262
+ /** What a reader is told when the field holds something the picker cannot
9263
+ read: a date that is not one, a time, a color.
9264
+
9265
+ **Every sentence a control raises in the browser's bubble is a
9266
+ property**, named for the validity flag it reports, so a form in another
9267
+ language speaks it. Absent is the family's own sentence, in English,
9268
+ which says what the value should look like. */
9269
+ "bad-input-message"?: (HelixHeadlessTimeInput["badInputMessage"]) | undefined;
9270
+ /** What a reader is told when the field holds something the picker cannot
9271
+ read: a date that is not one, a time, a color.
9272
+
9273
+ **Every sentence a control raises in the browser's bubble is a
9274
+ property**, named for the validity flag it reports, so a form in another
9275
+ language speaks it. Absent is the family's own sentence, in English,
9276
+ which says what the value should look like. */
9277
+ badInputMessage?: (HelixHeadlessTimeInput["badInputMessage"]) | undefined;
9278
+ /** Whether the markup declared it open. Ignored once `open` is written. */
9279
+ "default-open"?: (HelixHeadlessTimeInput["defaultOpen"]) | undefined;
9280
+ /** Whether the markup declared it open. Ignored once `open` is written. */
9281
+ defaultOpen?: (HelixHeadlessTimeInput["defaultOpen"]) | undefined;
8048
9282
  /** Whether the element is open.
8049
9283
 
8050
9284
  One property, not two, so `dialog.open` answers the question anyone
@@ -8058,10 +9292,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
8058
9292
  last reader did rather than what the author wrote. `:state(open)` carries
8059
9293
  the resolved state for stylesheets, which is what the mirror is for. */
8060
9294
  open?: (HelixHeadlessTimeInput["open"]) | undefined;
8061
- /** Whether the markup declared it open. Ignored once `open` is written. */
8062
- "default-open"?: (HelixHeadlessTimeInput["defaultOpen"]) | undefined;
8063
- /** Whether the markup declared it open. Ignored once `open` is written. */
8064
- defaultOpen?: (HelixHeadlessTimeInput["defaultOpen"]) | undefined;
8065
9295
  /** What the control is called once everything is showing. */
8066
9296
  "collapse-label"?: (HelixHeadlessTimeInput["collapseLabel"]) | undefined;
8067
9297
  /** What the control is called once everything is showing. */
@@ -8095,6 +9325,26 @@ a reset should return to. */
8095
9325
  label?: (HelixHeadlessTimeInput["label"]) | undefined;
8096
9326
  /** Whether the form refuses to submit without it. */
8097
9327
  required?: (HelixHeadlessTimeInput["required"]) | undefined;
9328
+ /** What a reader is told when the field is required and empty, where the
9329
+ page says.
9330
+
9331
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9332
+ set and the browser's own on a text field, which the browser writes in
9333
+ the reader's language. Every other word a control speaks is a property,
9334
+ and this one was the English a form in another language still spoke in
9335
+ the bubble it raises on submit: `feedback` replaces the message under
9336
+ the field and does not reach that one. */
9337
+ "value-missing-message"?: (HelixHeadlessTimeInput["valueMissingMessage"]) | undefined;
9338
+ /** What a reader is told when the field is required and empty, where the
9339
+ page says.
9340
+
9341
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9342
+ set and the browser's own on a text field, which the browser writes in
9343
+ the reader's language. Every other word a control speaks is a property,
9344
+ and this one was the English a form in another language still spoke in
9345
+ the bubble it raises on submit: `feedback` replaces the message under
9346
+ the field and does not reach that one. */
9347
+ valueMissingMessage?: (HelixHeadlessTimeInput["valueMissingMessage"]) | undefined;
8098
9348
  /** Whether the control is non-interactive.
8099
9349
 
8100
9350
  Reflected, because the styled tier selects on it, and mirrored to
@@ -8158,6 +9408,18 @@ export type HelixHeadlessTimePickerHelixBeforeChangeElementEvent =
8158
9408
  HelixHeadlessTimePickerElementEvent<HelixBeforeChangeEvent>;
8159
9409
 
8160
9410
  export type HelixHeadlessTimePickerVueProps = {
9411
+ /** What a reader is told when the value holds something that is not a time.
9412
+
9413
+ **Every sentence a control raises in the browser's bubble is a property**,
9414
+ named for the validity flag it reports, so a form in another language
9415
+ speaks it. Absent is the control's own sentence, in English. */
9416
+ "bad-input-message"?: (HelixHeadlessTimePicker["badInputMessage"]) | undefined;
9417
+ /** What a reader is told when the value holds something that is not a time.
9418
+
9419
+ **Every sentence a control raises in the browser's bubble is a property**,
9420
+ named for the validity flag it reports, so a form in another language
9421
+ speaks it. Absent is the control's own sentence, in English. */
9422
+ badInputMessage?: (HelixHeadlessTimePicker["badInputMessage"]) | undefined;
8161
9423
  /** Times that cannot be chosen, comma separated, as `HH:mm`.
8162
9424
 
8163
9425
  The counterpart to Date Picker's `disable-dates`, and it exists for the same
@@ -8248,6 +9510,10 @@ Fifteen, which is four rows an hour and ninety-six in a day: enough that a
8248
9510
  reader scrolls rather than hunts, and few enough that the list is a list.
8249
9511
  Anything under five is a thousand rows and wants a field instead. */
8250
9512
  step?: (HelixHeadlessTimePicker["step"]) | undefined;
9513
+ /** What a reader is told when a time is required and none is chosen. */
9514
+ "value-missing-message"?: (HelixHeadlessTimePicker["valueMissingMessage"]) | undefined;
9515
+ /** What a reader is told when a time is required and none is chosen. */
9516
+ valueMissingMessage?: (HelixHeadlessTimePicker["valueMissingMessage"]) | undefined;
8251
9517
  /** Whether the times are one list or a column each.
8252
9518
 
8253
9519
  `list` is the default and offers whole times, which is what a product with
@@ -8366,10 +9632,6 @@ export type HelixHeadlessToastItemVueProps = {
8366
9632
  Read once when the item is first rendered. Changing it afterwards does not
8367
9633
  restart a message the reader is already partway through. */
8368
9634
  duration?: (HelixHeadlessToastItem["duration"]) | undefined;
8369
- /** What kind of message it is, which picks the mark and its name.
8370
-
8371
- A subset of the tone axis: a toast reports a status and never a brand role. */
8372
- tone?: (HelixHeadlessToastItem["tone"]) | undefined;
8373
9635
  /** Whether the message is still showing.
8374
9636
 
8375
9637
  The item always applies: it goes when it is asked to, having announced
@@ -8382,6 +9644,10 @@ only one starting state that makes sense: a message that has been rendered
8382
9644
  is showing. An attribute whose only legal value is the default is an
8383
9645
  attribute nobody can use. */
8384
9646
  open?: (HelixHeadlessToastItem["open"]) | undefined;
9647
+ /** What kind of message it is, which picks the mark and its name.
9648
+
9649
+ A subset of the tone axis: a toast reports a status and never a brand role. */
9650
+ tone?: (HelixHeadlessToastItem["tone"]) | undefined;
8385
9651
  /** Whether it offers a control to take it away. */
8386
9652
  dismissible?: (HelixHeadlessToastItem["dismissible"]) | undefined;
8387
9653
  /** Accessible name for that control.
@@ -8511,6 +9777,26 @@ a reset should return to. */
8511
9777
  label?: (HelixHeadlessToggleGroup["label"]) | undefined;
8512
9778
  /** Whether the form refuses to submit without it. */
8513
9779
  required?: (HelixHeadlessToggleGroup["required"]) | undefined;
9780
+ /** What a reader is told when the field is required and empty, where the
9781
+ page says.
9782
+
9783
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9784
+ set and the browser's own on a text field, which the browser writes in
9785
+ the reader's language. Every other word a control speaks is a property,
9786
+ and this one was the English a form in another language still spoke in
9787
+ the bubble it raises on submit: `feedback` replaces the message under
9788
+ the field and does not reach that one. */
9789
+ "value-missing-message"?: (HelixHeadlessToggleGroup["valueMissingMessage"]) | undefined;
9790
+ /** What a reader is told when the field is required and empty, where the
9791
+ page says.
9792
+
9793
+ **Absent, or empty, is the control's own sentence**, "Choose one to continue." on a
9794
+ set and the browser's own on a text field, which the browser writes in
9795
+ the reader's language. Every other word a control speaks is a property,
9796
+ and this one was the English a form in another language still spoke in
9797
+ the bubble it raises on submit: `feedback` replaces the message under
9798
+ the field and does not reach that one. */
9799
+ valueMissingMessage?: (HelixHeadlessToggleGroup["valueMissingMessage"]) | undefined;
8514
9800
  /** Whether the control is non-interactive.
8515
9801
 
8516
9802
  Reflected, because the styled tier selects on it, and mirrored to
@@ -8710,6 +9996,10 @@ Clamping is on the cross axis only, which is what makes this safe to point
8710
9996
  at a box the bubble genuinely does not fit inside. See `within` on
8711
9997
  `FloatingController` for what happens if it is applied to the rest. */
8712
9998
  within?: (HelixHeadlessTooltip["within"]) | undefined;
9999
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10000
+ "default-open"?: (HelixHeadlessTooltip["defaultOpen"]) | undefined;
10001
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10002
+ defaultOpen?: (HelixHeadlessTooltip["defaultOpen"]) | undefined;
8713
10003
  /** Whether the element is open.
8714
10004
 
8715
10005
  One property, not two, so `dialog.open` answers the question anyone
@@ -8723,10 +10013,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
8723
10013
  last reader did rather than what the author wrote. `:state(open)` carries
8724
10014
  the resolved state for stylesheets, which is what the mirror is for. */
8725
10015
  open?: (HelixHeadlessTooltip["open"]) | undefined;
8726
- /** Whether the markup declared it open. Ignored once `open` is written. */
8727
- "default-open"?: (HelixHeadlessTooltip["defaultOpen"]) | undefined;
8728
- /** Whether the markup declared it open. Ignored once `open` is written. */
8729
- defaultOpen?: (HelixHeadlessTooltip["defaultOpen"]) | undefined;
8730
10016
  };
8731
10017
 
8732
10018
  export type HelixHeadlessTooltipVueEvents = {
@@ -8761,6 +10047,14 @@ export type HelixHeadlessTourVueProps = {
8761
10047
  "back-label"?: (HelixHeadlessTour["backLabel"]) | undefined;
8762
10048
  /** Label for the control that goes back, handed to every stop. */
8763
10049
  backLabel?: (HelixHeadlessTour["backLabel"]) | undefined;
10050
+ /** Stop to start on, where nothing declared one. */
10051
+ "default-index"?: (HelixHeadlessTour["defaultIndex"] | `${number}`) | undefined;
10052
+ /** Stop to start on, where nothing declared one. */
10053
+ defaultIndex?: (HelixHeadlessTour["defaultIndex"]) | undefined;
10054
+ /** Label for the control that goes on from the last stop. */
10055
+ "done-label"?: (HelixHeadlessTour["doneLabel"]) | undefined;
10056
+ /** Label for the control that goes on from the last stop. */
10057
+ doneLabel?: (HelixHeadlessTour["doneLabel"]) | undefined;
8764
10058
  /** Which stop the reader is on.
8765
10059
 
8766
10060
  **Moved through `requestChange`, never by assignment from `move`.** That
@@ -8772,14 +10066,6 @@ The shape is `Carousel`'s, which is the nearest thing in the library: a
8772
10066
  `default-index` for markup that only seeds and a held state that is
8773
10067
  `undefined` until somebody sets one. */
8774
10068
  index?: (HelixHeadlessTour["index"]) | undefined;
8775
- /** Stop to start on, where nothing declared one. */
8776
- "default-index"?: (HelixHeadlessTour["defaultIndex"] | `${number}`) | undefined;
8777
- /** Stop to start on, where nothing declared one. */
8778
- defaultIndex?: (HelixHeadlessTour["defaultIndex"]) | undefined;
8779
- /** Label for the control that goes on from the last stop. */
8780
- "done-label"?: (HelixHeadlessTour["doneLabel"]) | undefined;
8781
- /** Label for the control that goes on from the last stop. */
8782
- doneLabel?: (HelixHeadlessTour["doneLabel"]) | undefined;
8783
10069
  /** Accessible name for the run, such as "Getting started". */
8784
10070
  label?: (HelixHeadlessTour["label"]) | undefined;
8785
10071
  /** Label for the control that goes on. */
@@ -8901,6 +10187,10 @@ row is not part of the tree React hydrates. */
8901
10187
  target?: (HelixHeadlessTreeItem["target"]) | undefined;
8902
10188
  /** Identifies the item to the consumer, carried in `helix-select`. */
8903
10189
  value?: (HelixHeadlessTreeItem["value"]) | undefined;
10190
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10191
+ "default-open"?: (HelixHeadlessTreeItem["defaultOpen"]) | undefined;
10192
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10193
+ defaultOpen?: (HelixHeadlessTreeItem["defaultOpen"]) | undefined;
8904
10194
  /** Whether the element is open.
8905
10195
 
8906
10196
  One property, not two, so `dialog.open` answers the question anyone
@@ -8914,10 +10204,6 @@ hydration, or diffed by a framework, it comes back holding whatever the
8914
10204
  last reader did rather than what the author wrote. `:state(open)` carries
8915
10205
  the resolved state for stylesheets, which is what the mirror is for. */
8916
10206
  open?: (HelixHeadlessTreeItem["open"]) | undefined;
8917
- /** Whether the markup declared it open. Ignored once `open` is written. */
8918
- "default-open"?: (HelixHeadlessTreeItem["defaultOpen"]) | undefined;
8919
- /** Whether the markup declared it open. Ignored once `open` is written. */
8920
- defaultOpen?: (HelixHeadlessTreeItem["defaultOpen"]) | undefined;
8921
10207
  /** Depth from the root, counted by the tree so indentation needs no CSS nesting.
8922
10208
 
8923
10209
  **Read rather than written, and no attribute at all.** The tree counts the
@@ -9191,6 +10477,22 @@ the browser's policy and not this element's, and `play()` already swallows
9191
10477
  the refusal: what follows a refused autoplay is a paused player showing its
9192
10478
  start control, which is the correct thing to be looking at. */
9193
10479
  autoplay?: (HelixHeadlessVideo["autoplay"]) | undefined;
10480
+ /** What the captions control is called where the video has one track, which it switches on and off.
10481
+
10482
+ **Every word this player speaks is a property**, so a page in another
10483
+ language hears its own: the play, pause, loading and error labels were,
10484
+ and the rest of the bar read out in English beside them. */
10485
+ "captions-label"?: (HelixHeadlessVideo["captionsLabel"]) | undefined;
10486
+ /** What the captions control is called where the video has one track, which it switches on and off.
10487
+
10488
+ **Every word this player speaks is a property**, so a page in another
10489
+ language hears its own: the play, pause, loading and error labels were,
10490
+ and the rest of the bar read out in English beside them. */
10491
+ captionsLabel?: (HelixHeadlessVideo["captionsLabel"]) | undefined;
10492
+ /** The row that turns captions off, where the video has several tracks to choose from. */
10493
+ "captions-off-label"?: (HelixHeadlessVideo["captionsOffLabel"]) | undefined;
10494
+ /** The row that turns captions off, where the video has several tracks to choose from. */
10495
+ captionsOffLabel?: (HelixHeadlessVideo["captionsOffLabel"]) | undefined;
9194
10496
  /** Whether the browser draws the controls instead of this element.
9195
10497
 
9196
10498
  A fallback rather than a default. Two bars over one video is worse than
@@ -9228,6 +10530,10 @@ meaning something else. */
9228
10530
  disableremoteplayback?: (HelixHeadlessVideo["disableRemotePlayback"]) | undefined;
9229
10531
  /** Whether the browser may offer playback on a remote device. */
9230
10532
  disableRemotePlayback?: (HelixHeadlessVideo["disableRemotePlayback"]) | undefined;
10533
+ /** What the control that saves the file is called. */
10534
+ "download-label"?: (HelixHeadlessVideo["downloadLabel"]) | undefined;
10535
+ /** What the control that saves the file is called. */
10536
+ downloadLabel?: (HelixHeadlessVideo["downloadLabel"]) | undefined;
9231
10537
  /** And what they are told when it will not play at all. */
9232
10538
  "error-label"?: (HelixHeadlessVideo["errorLabel"]) | undefined;
9233
10539
  /** And what they are told when it will not play at all. */
@@ -9292,6 +10598,22 @@ ours to promise: the attribute is ignored cross-origin, so a file served
9292
10598
  from somewhere else opens rather than saves, which is the browser's rule
9293
10599
  and not something a player can work around. */
9294
10600
  extraControls?: (HelixHeadlessVideo["extraControls"]) | undefined;
10601
+ /** What the control that skips ahead is called, with `{seconds}` filled in. */
10602
+ "forward-label"?: (HelixHeadlessVideo["forwardLabel"]) | undefined;
10603
+ /** What the control that skips ahead is called, with `{seconds}` filled in. */
10604
+ forwardLabel?: (HelixHeadlessVideo["forwardLabel"]) | undefined;
10605
+ /** What the control that fills the screen is called.
10606
+
10607
+ **One name, pressed or not**, since the button says which with
10608
+ `aria-pressed`: a name that changed as well read out "Exit fullscreen,
10609
+ pressed", which is two answers to one question. */
10610
+ "fullscreen-label"?: (HelixHeadlessVideo["fullscreenLabel"]) | undefined;
10611
+ /** What the control that fills the screen is called.
10612
+
10613
+ **One name, pressed or not**, since the button says which with
10614
+ `aria-pressed`: a name that changed as well read out "Exit fullscreen,
10615
+ pressed", which is two answers to one question. */
10616
+ fullscreenLabel?: (HelixHeadlessVideo["fullscreenLabel"]) | undefined;
9295
10617
  /** How long the bar waits after the pointer stops before it goes, in ms.
9296
10618
 
9297
10619
  A wait rather than leaving with the pointer, or a reader moving across the
@@ -9320,6 +10642,18 @@ regardless, because a reader who stopped it is deciding what to do next. */
9320
10642
  loadingLabel?: (HelixHeadlessVideo["loadingLabel"]) | undefined;
9321
10643
  /** Whether it starts again at the end. */
9322
10644
  loop?: (HelixHeadlessVideo["loop"]) | undefined;
10645
+ /** What the button that opens `overflow-controls` is called. */
10646
+ "more-label"?: (HelixHeadlessVideo["moreLabel"]) | undefined;
10647
+ /** What the button that opens `overflow-controls` is called. */
10648
+ moreLabel?: (HelixHeadlessVideo["moreLabel"]) | undefined;
10649
+ /** What the control that silences the video is called, pressed while it is silent. */
10650
+ "mute-label"?: (HelixHeadlessVideo["muteLabel"]) | undefined;
10651
+ /** What the control that silences the video is called, pressed while it is silent. */
10652
+ muteLabel?: (HelixHeadlessVideo["muteLabel"]) | undefined;
10653
+ /** What the control that asks for the next video is called. */
10654
+ "next-label"?: (HelixHeadlessVideo["nextLabel"]) | undefined;
10655
+ /** What the control that asks for the next video is called. */
10656
+ nextLabel?: (HelixHeadlessVideo["nextLabel"]) | undefined;
9323
10657
  /** Controls that go behind one button instead of onto the bar, named the same
9324
10658
  way.
9325
10659
 
@@ -9356,6 +10690,14 @@ bar: two of the same control is worse than either placement. */
9356
10690
  "pause-label"?: (HelixHeadlessVideo["pauseLabel"]) | undefined;
9357
10691
  /** And while it would stop it. */
9358
10692
  pauseLabel?: (HelixHeadlessVideo["pauseLabel"]) | undefined;
10693
+ /** How the volume is read out, with `{percent}` filled in. */
10694
+ "percent-label"?: (HelixHeadlessVideo["percentLabel"]) | undefined;
10695
+ /** How the volume is read out, with `{percent}` filled in. */
10696
+ percentLabel?: (HelixHeadlessVideo["percentLabel"]) | undefined;
10697
+ /** What the control that floats the video over other windows is called. */
10698
+ "pip-label"?: (HelixHeadlessVideo["pipLabel"]) | undefined;
10699
+ /** What the control that floats the video over other windows is called. */
10700
+ pipLabel?: (HelixHeadlessVideo["pipLabel"]) | undefined;
9359
10701
  /** What the play control is called while it would start the video. */
9360
10702
  "play-label"?: (HelixHeadlessVideo["playLabel"]) | undefined;
9361
10703
  /** What the play control is called while it would start the video. */
@@ -9368,6 +10710,26 @@ bar: two of the same control is worse than either placement. */
9368
10710
  poster?: (HelixHeadlessVideo["poster"]) | undefined;
9369
10711
  /** How much to fetch before anything is asked for. */
9370
10712
  preload?: (HelixHeadlessVideo["preload"]) | undefined;
10713
+ /** What the control that asks for the previous video is called. */
10714
+ "previous-label"?: (HelixHeadlessVideo["previousLabel"]) | undefined;
10715
+ /** What the control that asks for the previous video is called. */
10716
+ previousLabel?: (HelixHeadlessVideo["previousLabel"]) | undefined;
10717
+ /** What the control that casts the video to another device is called. */
10718
+ "remote-label"?: (HelixHeadlessVideo["remoteLabel"]) | undefined;
10719
+ /** What the control that casts the video to another device is called. */
10720
+ remoteLabel?: (HelixHeadlessVideo["remoteLabel"]) | undefined;
10721
+ /** What the control that skips back is called, with `{seconds}` filled in. */
10722
+ "rewind-label"?: (HelixHeadlessVideo["rewindLabel"]) | undefined;
10723
+ /** What the control that skips back is called, with `{seconds}` filled in. */
10724
+ rewindLabel?: (HelixHeadlessVideo["rewindLabel"]) | undefined;
10725
+ /** What the scrubber is called. */
10726
+ "seek-label"?: (HelixHeadlessVideo["seekLabel"]) | undefined;
10727
+ /** What the scrubber is called. */
10728
+ seekLabel?: (HelixHeadlessVideo["seekLabel"]) | undefined;
10729
+ /** What the control that changes the speed is called. */
10730
+ "speed-label"?: (HelixHeadlessVideo["speedLabel"]) | undefined;
10731
+ /** What the control that changes the speed is called. */
10732
+ speedLabel?: (HelixHeadlessVideo["speedLabel"]) | undefined;
9371
10733
  /** The speeds offered, slowest first, as multipliers of normal. */
9372
10734
  speeds?: (HelixHeadlessVideo["speeds"]) | undefined;
9373
10735
  /** Where the video is, for the common case of one file. */
@@ -9404,6 +10766,20 @@ A value rather than a boolean, so the resting state is the attribute's
9404
10766
  absence: a boolean defaulting to on would have to be spelled as its own
9405
10767
  negation. */
9406
10768
  startControl?: (HelixHeadlessVideo["startControl"]) | undefined;
10769
+ /** What the menu of tracks is called, where the video has several. */
10770
+ "subtitles-label"?: (HelixHeadlessVideo["subtitlesLabel"]) | undefined;
10771
+ /** What the menu of tracks is called, where the video has several. */
10772
+ subtitlesLabel?: (HelixHeadlessVideo["subtitlesLabel"]) | undefined;
10773
+ /** How the scrubber reads out where the video is, with `{position}` and
10774
+ `{duration}` filled in. */
10775
+ "time-label"?: (HelixHeadlessVideo["timeLabel"]) | undefined;
10776
+ /** How the scrubber reads out where the video is, with `{position}` and
10777
+ `{duration}` filled in. */
10778
+ timeLabel?: (HelixHeadlessVideo["timeLabel"]) | undefined;
10779
+ /** What the volume slider is called. */
10780
+ "volume-label"?: (HelixHeadlessVideo["volumeLabel"]) | undefined;
10781
+ /** What the volume slider is called. */
10782
+ volumeLabel?: (HelixHeadlessVideo["volumeLabel"]) | undefined;
9407
10783
  /** Where playback has reached, in seconds.
9408
10784
 
9409
10785
  Writing seeks, through the same clamp `seek` uses, because a `currentTime`
@@ -9593,7 +10969,7 @@ export interface WcToolkitVueGlobalComponents {
9593
10969
  HelixHeadlessAccordionVueProps,
9594
10970
  HelixHeadlessAccordionVueEvents
9595
10971
  >;
9596
- /** Chrome rather than content. An announcement sits above the header and speaks for the whole page: a trial ending, a service degraded, a change of terms. A passage that interrupts a document to set itself apart is a 'Callout', which is read where it sits and cannot be dismissed. Neither is a variant of the other. **Always a polite live region.** 'role="alert"' is assertive and interrupts whatever is being read, which is right for something that appears mid-session and wrong for something that was in the served HTML: an assertive announcement would cut across a screen-reader user on every page load, before they had read anything. Politeness costs a moment and is never wrong; the tone does not change that, because an error that was always there is still not an interruption. Dismissing is a request. The announcement does not remove itself, because the consumer owns the markup and taking the node out from under them would put their state and the document out of step. 'preventDefault()' on the 'helix-dismiss' is a refusal. */
10972
+ /** Chrome rather than content. An announcement sits above the header and speaks for the whole page: a trial ending, a service degraded, a change of terms. A passage that interrupts a document to set itself apart is a 'Callout', which is read where it sits and cannot be dismissed. Neither is a variant of the other. **Always a polite live region.** 'role="alert"' is assertive and interrupts whatever is being read, which is right for something that appears mid-session and wrong for something that was in the served HTML: an assertive announcement would cut across a screen-reader user on every page load, before they had read anything. Politeness costs a moment and is never wrong; the tone does not change that, because an error that was always there is still not an interruption. **The region is its own, and there before its words.** The host was the region, and a banner raised mid-session arrives with its message already in it, which a screen reader reads inconsistently at best. So the message is said from a region filled a frame after the banner appears, and one that came with the page is filled at once and says nothing, being no news. Dismissing is a request. The announcement does not remove itself, because the consumer owns the markup and taking the node out from under them would put their state and the document out of step. 'preventDefault()' on the 'helix-dismiss' is a refusal. */
9597
10973
  "helix-headless-announcement": DefineCustomElement<
9598
10974
  HelixHeadlessAnnouncement,
9599
10975
  HelixHeadlessAnnouncementVueProps,
@@ -9671,6 +11047,24 @@ export interface WcToolkitVueGlobalComponents {
9671
11047
  HelixHeadlessCalloutVueProps,
9672
11048
  HelixHeadlessCalloutVueEvents
9673
11049
  >;
11050
+ /** **A declaration rather than a drawing**, which is the shape 'Table.Column' has: this element renders nothing at all and the board draws the line, because a connector is geometry between two other elements and neither end of it belongs here. What this carries is which cards, which sides, and what sits at the ends. Written as markup for the reason its cards are: an array of edges handed to a custom element does not survive React's hydration, and a connector a consumer can write is one they can also put a condition around. */
11051
+ "helix-headless-canvas-edge": DefineCustomElement<
11052
+ HelixHeadlessCanvasEdge,
11053
+ HelixHeadlessCanvasEdgeVueProps,
11054
+ HelixHeadlessCanvasEdgeVueEvents
11055
+ >;
11056
+ /** **Markup rather than an entry in an array**, which is the rule 'VideoPlaylist' writes out: an array handed to a custom element is missing from the first paint of every server-rendered React page, because React skips the properties it would have to apply imperatively while hydrating. A card written as an element is in the served HTML whichever renderer wrote it, and what is inside it is the consumer's own DOM rather than a string this component parses. **Where it sits is data**, which is what makes a canvas a canvas: somebody placed this card and the placement carries meaning, so 'x' and 'y' are given rather than computed. The board reads them and places the card; a page with no JavaScript has the cards and their text and not the arrangement, which is the honest half of what a board can promise before it hydrates. **Named by 'name', which only has to be unique on its board**, the way a form control's is in its form. An 'id' has to be unique on the whole page, and two boards written from one template, or one board shown twice, would each have a card called 'write' with no way to say which one a connection meant. 'id' is left for the page, which can still use it. **What it holds is the consumer's**, which is why there is no card type any more: a card of text is text, a link is a link they put inside it, a file is whatever they show for one. The one kind the board treats differently is a group, a box drawn behind the cards inside it, and 'group' says so. JSON Canvas's four types are mapped by 'fromJsonCanvas' on the way in. **The card is the way around the board, for a reader who cannot see it.** The board keeps one tab stop among its cards, arrow keys walk them in reading order, and the one a reader lands on is brought into view. What it connects to is read out with it, so the arrows between cards are heard as well as seen. That replaced a list of every card under the board, which said the same thing twice to a sighted reader and took a row from the board to do it. */
11057
+ "helix-headless-canvas-node": DefineCustomElement<
11058
+ HelixHeadlessCanvasNode,
11059
+ HelixHeadlessCanvasNodeVueProps,
11060
+ HelixHeadlessCanvasNodeVueEvents
11061
+ >;
11062
+ /** **The first of these surfaces Helix draws itself**, and the reason is where the positions come from. On a canvas **position is data**: somebody placed every card and the placement carries the meaning, so there is no layout to compute and drawing is arithmetic over rectangles. A map is somebody else's tiles and a graph view's positions are computed, which is why 'Map' takes a slotted map and this takes a document. **The format is open.** [JSON Canvas](https://jsoncanvas.org) gives each node an 'x', 'y', 'width', 'height' and a type, and each edge 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, which the format leaves to the geometry. **Accessibility is the design work, not the drawing.** The cards are text in the DOM, so they are readable already; what space does not supply is an order and the connections. So the family chooses an order, walks the cards in it, and says every card's links as text. 'order' takes 'spatial', which bands the cards into rows, and 'edges', which follows the arrows from the cards nothing points to. **Cards move by default, the way a form control takes input by default.** The board writes the new 'x' and 'y' onto the card itself, as an input writes its own value, and says so twice: 'helix-before-move' for every step, which a consumer holding the positions in their own state refuses and applies themselves, and 'helix-move' once the move is finished. A resize is the same pair with a size in it. 'readonly' keeps every card where it is, for a board that is published rather than worked on, and 'readonly' on one card or connection keeps that one. **The cards are the way around it.** One of them holds the board's tab stop, arrow keys walk them in reading order, and the one a reader lands on is brought into view with what it connects to read out beside it. Shift with an arrow moves it, which is the keyboard's way to do what a drag does. The connections leaving a card are stops of their own, straight after it, and Enter on one goes to the card it arrives at. **Every drag can be done with clicks instead**, which WCAG 2.5.7 asks of a pointer that cannot hold a button down. A click on a selected card's move handle, a corner, a card's connection point or the end of a selected connection picks the thing up; it follows the pointer with no button held, and the next click puts it down wherever a drag let go there would have. On touch, the next tap is where it lands. Escape, or a press off the board, puts it back. **Connecting and removing are requests, and the page acts on them.** Drawing from a card's handle to another card, or pressing C on one and Enter on another, sends 'helix-connect'; Delete on a card or a connection sends 'helix-remove', naming every connection a removed card would strand. A move can be applied by the board because the card is already there. A connection is a new element, and one a board added to markup React renders would be thrown away on the next render, so the board asks and the page writes it. **Markup rather than a 'src' or a document property.** Nothing in this library fetches, and an array handed to an element is missing from the first paint of every server-rendered React page. The cards and connections are 'helix-canvas-node' and 'helix-canvas-edge' elements, in the served markup whichever renderer wrote them; 'fromJsonCanvas' turns a JSON Canvas document into their props and 'toJsonCanvas()' writes a board back out. */
11063
+ "helix-headless-canvas": DefineCustomElement<
11064
+ HelixHeadlessCanvas,
11065
+ HelixHeadlessCanvasVueProps,
11066
+ HelixHeadlessCanvasVueEvents
11067
+ >;
9674
11068
  /** Regions are slots rather than separate elements, because a header, body, and footer carry no state, no behavior, and no API of their own. Slotting them costs one custom element instead of five and lets the consumer bring their own markup, so a title can be a real '<h2>' rather than an emulated one. The host is the surface. A wrapper '<div part="container">' would be a second box doing nothing the host cannot: the element itself takes the border, the radius, and the grid, and a consumer styles 'Card' rather than reaching through '::part'. One node instead of two, on every card on the page. Name the card with 'aria-label' or 'aria-labelledby'. That is the only naming that survives server rendering: reading a title out of the light DOM needs a DOM, and the server has none. */
9675
11069
  "helix-headless-card": DefineCustomElement<
9676
11070
  HelixHeadlessCard,
@@ -9821,7 +11215,7 @@ export interface WcToolkitVueGlobalComponents {
9821
11215
  HelixHeadlessDrilldownVueProps,
9822
11216
  HelixHeadlessDrilldownVueEvents
9823
11217
  >;
9824
- /** An empty region with no explanation is indistinguishable from one that failed to load, so this exists to tell the difference: what would be here, and the one action that would put something here. 'role="status"' on a polite live region, because an empty view usually arrives in place of content that was being fetched. Announcing it is the only way a screen-reader user learns the search returned nothing, rather than being left waiting. Every region is a bare slot. The reference ships an 'empty-state-heading' and an 'empty-state-actions' whose only job is to assign themselves a slot on connect, which is a component for something the consumer can write. */
11218
+ /** An empty region with no explanation is indistinguishable from one that failed to load, so this exists to tell the difference: what would be here, and the one action that would put something here. Announced, because an empty view usually arrives in place of content that was being fetched: saying so is the only way a screen-reader user learns the search returned nothing, rather than being left waiting. **From a region of its own that is there before its words are**, filled a frame after the view appears. The host was the region, and a page inserts an empty state with its message already in it, which is a region arriving with its words: read inconsistently at best. Every region is a bare slot. The reference ships an 'empty-state-heading' and an 'empty-state-actions' whose only job is to assign themselves a slot on connect, which is a component for something the consumer can write. */
9825
11219
  "helix-headless-empty": DefineCustomElement<
9826
11220
  HelixHeadlessEmpty,
9827
11221
  HelixHeadlessEmptyVueProps,
@@ -9941,7 +11335,7 @@ export interface WcToolkitVueGlobalComponents {
9941
11335
  HelixHeadlessListVueProps,
9942
11336
  HelixHeadlessListVueEvents
9943
11337
  >;
9944
- /** **The listbox is the control and the options are its vocabulary.** A Select is this with a trigger in front of it, a Combobox is this with a text input, and a command palette is this again: they differ in what opens the list and what filters it, not in what the list is. **'value' is comma separated when 'multiple' is set**, the way 'Checkbox.Group''s is. It stays a string because that is what a form submits and what 'MixinControllerValue' holds. **Chosen and active are two different things.** Chosen is the answer; active is where the keyboard is. Only the second moves with the arrows, and 'aria-activedescendant' names it while focus stays on the list. */
11338
+ /** **The listbox is the control and the options are its vocabulary.** A Select is this with a trigger in front of it, a Combobox is this with a text input, and a command palette is this again: they differ in what opens the list and what filters it, not in what the list is. **'value' is comma separated when 'multiple' is set**, the way 'Checkbox.Group''s is, and a string because that is what 'MixinControllerValue' holds. The form is sent one entry per answer, as a native '<select multiple>' sends it, so a server never has to know to split on a comma. **Chosen and active are two different things.** Chosen is the answer; active is where the keyboard is. Only the second moves with the arrows, and 'aria-activedescendant' names it while focus stays on the list. */
9945
11339
  "helix-headless-listbox": DefineCustomElement<
9946
11340
  HelixHeadlessListbox,
9947
11341
  HelixHeadlessListboxVueProps,