@fusion.dev/helix-headless 0.171.0 → 0.173.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 (67) hide show
  1. package/custom-elements.json +1350 -124
  2. package/dist/button-group/root/button-group-root.d.ts +30 -0
  3. package/dist/button-group/root/button-group-root.js +50 -4
  4. package/dist/canvas/root/canvas-root.d.ts +7 -0
  5. package/dist/canvas/root/canvas-root.js +7 -0
  6. package/dist/chat/composer/chat-composer.d.ts +28 -1
  7. package/dist/chat/composer/chat-composer.js +22 -3
  8. package/dist/chat/root/chat-root.d.ts +38 -2
  9. package/dist/chat/root/chat-root.js +38 -1
  10. package/dist/color-input/root/color-input-root.d.ts +15 -1
  11. package/dist/color-input/root/color-input-root.js +19 -1
  12. package/dist/color-picker/root/color-picker-root.d.ts +5 -1
  13. package/dist/color-picker/root/color-picker-root.js +1 -1
  14. package/dist/copy-button/root/copy-button-root.d.ts +43 -3
  15. package/dist/copy-button/root/copy-button-root.js +49 -3
  16. package/dist/data-table/root/data-table-root.d.ts +5 -1
  17. package/dist/data-table/root/data-table-root.js +1 -0
  18. package/dist/dialog/root/dialog-root.js +1 -0
  19. package/dist/drawer/root/drawer-root.d.ts +4 -0
  20. package/dist/drawer/root/drawer-root.js +1 -0
  21. package/dist/element-events.generated.js +3 -0
  22. package/dist/graph/root/graph-root.d.ts +22 -0
  23. package/dist/graph/root/graph-root.js +21 -5
  24. package/dist/lightbox/root/lightbox-root.js +1 -0
  25. package/dist/list/root/list-root.d.ts +6 -1
  26. package/dist/list/root/list-root.js +3 -2
  27. package/dist/listbox/root/listbox-root.d.ts +2 -1
  28. package/dist/listbox/root/listbox-root.js +3 -2
  29. package/dist/menu/item/menu-item.d.ts +2 -0
  30. package/dist/menu/item/menu-item.js +2 -0
  31. package/dist/menu/root/menu-root.d.ts +73 -12
  32. package/dist/menu/root/menu-root.js +103 -7
  33. package/dist/outline/root/outline-root.d.ts +57 -0
  34. package/dist/outline/root/outline-root.js +98 -29
  35. package/dist/popover/root/popover-root.d.ts +59 -6
  36. package/dist/popover/root/popover-root.js +51 -3
  37. package/dist/select/root/select-root.d.ts +2 -2
  38. package/dist/select/root/select-root.js +2 -2
  39. package/dist/speed-dial/root/speed-dial-root.d.ts +14 -0
  40. package/dist/speed-dial/root/speed-dial-root.js +34 -2
  41. package/dist/splitter/root/splitter-root.d.ts +25 -2
  42. package/dist/splitter/root/splitter-root.js +19 -4
  43. package/dist/tag/group/tag-group.d.ts +8 -1
  44. package/dist/tag/group/tag-group.js +8 -0
  45. package/dist/tag/root/tag-root.d.ts +12 -0
  46. package/dist/tag/root/tag-root.js +12 -0
  47. package/dist/textarea/root/textarea-root.d.ts +8 -0
  48. package/dist/textarea/root/textarea-root.js +16 -0
  49. package/dist/time-picker/root/time-picker-root.d.ts +14 -0
  50. package/dist/time-picker/root/time-picker-root.js +8 -1
  51. package/dist/timeline/item/timeline-item.d.ts +5 -1
  52. package/dist/timeline/item/timeline-item.js +9 -0
  53. package/dist/timeline/root/timeline-root.d.ts +23 -0
  54. package/dist/timeline/root/timeline-root.js +17 -3
  55. package/dist/tooltip/root/tooltip-root.d.ts +10 -0
  56. package/dist/tooltip/root/tooltip-root.js +14 -2
  57. package/dist/virtual-list/reorder/index.d.ts +1 -0
  58. package/dist/virtual-list/reorder/index.js +4 -0
  59. package/dist/virtual-list/reorder/virtual-list-reorder.d.ts +86 -0
  60. package/dist/virtual-list/reorder/virtual-list-reorder.js +193 -0
  61. package/dist/virtual-list/root/virtual-list-root.d.ts +49 -11
  62. package/dist/virtual-list/root/virtual-list-root.js +10 -1
  63. package/lint.json +1 -1
  64. package/package.json +5 -5
  65. package/types/jsx.d.ts +880 -48
  66. package/types/vue.d.ts +174 -19
  67. package/types/words.d.ts +22 -0
package/types/jsx.d.ts CHANGED
@@ -2410,6 +2410,9 @@ export type HelixHeadlessButtonGroupHelixBeforeChangeElementEvent =
2410
2410
  HelixHeadlessButtonGroupElementEvent<HelixBeforeChangeEvent>;
2411
2411
 
2412
2412
  export type HelixHeadlessButtonGroupProps = {
2413
+ /** Disables every button in the group, and says so on the group with
2414
+ `aria-disabled`. Reflected, so a stylesheet can select on it. */
2415
+ disabled?: (HelixHeadlessButtonGroup["disabled"]) | undefined;
2413
2416
  /** Keeps at least one button pressed once one is, as React Aria's
2414
2417
  `disallowEmptySelection`: a press that would leave none pressed is
2415
2418
  refused. */
@@ -2459,6 +2462,9 @@ A button's own `value` names it, so a value holds no comma.
2459
2462
  The attribute is the seed, and a press changes the property, which does
2460
2463
  not reflect, as a native control's `value` does not. */
2461
2464
  value?: (HelixHeadlessButtonGroup["value"]) | undefined;
2465
+ /** The pressed values as a list, in a selection mode, and an empty list
2466
+ otherwise. Written, it presses exactly those buttons. */
2467
+ values?: (HelixHeadlessButtonGroup["values"]) | undefined;
2462
2468
 
2463
2469
  /** Fired after a press changes `value`, in a selection mode. */
2464
2470
  onchange?: ((e: HelixHeadlessButtonGroupElementEvent) => void) | undefined;
@@ -2469,6 +2475,9 @@ not reflect, as a native control's `value` does not. */
2469
2475
  };
2470
2476
 
2471
2477
  export type HelixHeadlessButtonGroupSolidJsProps = {
2478
+ /** Disables every button in the group, and says so on the group with
2479
+ `aria-disabled`. Reflected, so a stylesheet can select on it. */
2480
+ "prop:disabled"?: (HelixHeadlessButtonGroup["disabled"]) | undefined;
2472
2481
  /** Keeps at least one button pressed once one is, as React Aria's
2473
2482
  `disallowEmptySelection`: a press that would leave none pressed is
2474
2483
  refused. */
@@ -2518,6 +2527,9 @@ A button's own `value` names it, so a value holds no comma.
2518
2527
  The attribute is the seed, and a press changes the property, which does
2519
2528
  not reflect, as a native control's `value` does not. */
2520
2529
  "prop:value"?: (HelixHeadlessButtonGroup["value"]) | undefined;
2530
+ /** The pressed values as a list, in a selection mode, and an empty list
2531
+ otherwise. Written, it presses exactly those buttons. */
2532
+ "prop:values"?: (HelixHeadlessButtonGroup["values"]) | undefined;
2521
2533
  /** Fired after a press changes `value`, in a selection mode. */
2522
2534
  "on:change"?: ((e: HelixHeadlessButtonGroupElementEvent) => void) | undefined;
2523
2535
  /** Fired before a press changes `value`, with the value it would leave in `detail.value`. Cancelable: call `preventDefault()` to keep the buttons as they are. */
@@ -3468,6 +3480,9 @@ Third", rather than with a comma this component chose. */
3468
3480
  /** The text read with a card that has connections both ways. `{leadsTo}` is
3469
3481
  `leads-to-label` and `{comesFrom}` is `comes-from-label`, each filled in. */
3470
3482
  linkedLabel?: (HelixHeadlessCanvas["linkedLabel"]) | undefined;
3483
+ /** Marks the board as busy while its document arrives: the board is
3484
+ `aria-busy`, and the `loading` slot is shown. */
3485
+ loading?: (HelixHeadlessCanvas["loading"]) | undefined;
3471
3486
  /** What screen readers hear after a key moves a card, with `{name}` for the
3472
3487
  card and `{x}` and `{y}` for where it now is, in the document's units.
3473
3488
 
@@ -3945,6 +3960,9 @@ Third", rather than with a comma this component chose. */
3945
3960
  /** The text read with a card that has connections both ways. `{leadsTo}` is
3946
3961
  `leads-to-label` and `{comesFrom}` is `comes-from-label`, each filled in. */
3947
3962
  "prop:linkedLabel"?: (HelixHeadlessCanvas["linkedLabel"]) | undefined;
3963
+ /** Marks the board as busy while its document arrives: the board is
3964
+ `aria-busy`, and the `loading` slot is shown. */
3965
+ "prop:loading"?: (HelixHeadlessCanvas["loading"]) | undefined;
3948
3966
  /** What screen readers hear after a key moves a card, with `{name}` for the
3949
3967
  card and `{x}` and `{y}` for where it now is, in the document's units.
3950
3968
 
@@ -4966,6 +4984,10 @@ export type HelixHeadlessChatComposerHelixTypingElementEvent =
4966
4984
  HelixHeadlessChatComposerElementEvent<HelixTypingEvent>;
4967
4985
 
4968
4986
  export type HelixHeadlessChatComposerProps = {
4987
+ /** A message about the draft, shown under the field. While set, the composer
4988
+ is invalid, does not send, and does not submit, as a field's `feedback`
4989
+ does, and the message is announced as it appears. */
4990
+ feedback?: (HelixHeadlessChatComposer["feedback"]) | undefined;
4969
4991
  /** The field's name, read by screen readers. */
4970
4992
  label?: (HelixHeadlessChatComposer["label"]) | undefined;
4971
4993
  /** The most characters a draft can have. The field stops taking more. */
@@ -5054,6 +5076,10 @@ Here rather than on each control. */
5054
5076
  };
5055
5077
 
5056
5078
  export type HelixHeadlessChatComposerSolidJsProps = {
5079
+ /** A message about the draft, shown under the field. While set, the composer
5080
+ is invalid, does not send, and does not submit, as a field's `feedback`
5081
+ does, and the message is announced as it appears. */
5082
+ "prop:feedback"?: (HelixHeadlessChatComposer["feedback"]) | undefined;
5057
5083
  /** The field's name, read by screen readers. */
5058
5084
  "prop:label"?: (HelixHeadlessChatComposer["label"]) | undefined;
5059
5085
  /** The most characters a draft can have. The field stops taking more. */
@@ -9090,6 +9116,24 @@ Defaulted rather than left empty. An icon-only control must be named, and
9090
9116
  the name of this one is not a judgment call: every copy button in the
9091
9117
  world is called Copy. A consumer with a better word still sets it. */
9092
9118
  label?: (HelixHeadlessCopyButton["label"]) | undefined;
9119
+ /** Draws the name as words beside the icon, and the result in their place
9120
+ after a press. The button stays as wide as the longest of them. */
9121
+ "show-label"?: (HelixHeadlessCopyButton["showLabel"]) | undefined;
9122
+ /** Draws the name as words beside the icon, and the result in their place
9123
+ after a press. The button stays as wide as the longest of them. */
9124
+ showLabel?: (HelixHeadlessCopyButton["showLabel"]) | undefined;
9125
+ /** When the tooltip shows: `full` on hover and focus and after a press,
9126
+ `copy` only after a press, to show the result, and `none` never, for a
9127
+ button whose result shows another way, such as under `show-label`.
9128
+
9129
+ Unset is `full`, and the attribute stays absent until you write it. */
9130
+ tooltip?: (HelixHeadlessCopyButton["tooltip"]) | undefined;
9131
+ /** The side the tooltip prefers. It moves to another side where this one
9132
+ does not fit. */
9133
+ "tooltip-placement"?: (HelixHeadlessCopyButton["tooltipPlacement"]) | undefined;
9134
+ /** The side the tooltip prefers. It moves to another side where this one
9135
+ does not fit. */
9136
+ tooltipPlacement?: (HelixHeadlessCopyButton["tooltipPlacement"]) | undefined;
9093
9137
  /** The text copied to the clipboard.
9094
9138
 
9095
9139
  It replaces `Button.value`, the submit value: a copy button never submits,
@@ -9205,6 +9249,24 @@ Defaulted rather than left empty. An icon-only control must be named, and
9205
9249
  the name of this one is not a judgment call: every copy button in the
9206
9250
  world is called Copy. A consumer with a better word still sets it. */
9207
9251
  "prop:label"?: (HelixHeadlessCopyButton["label"]) | undefined;
9252
+ /** Draws the name as words beside the icon, and the result in their place
9253
+ after a press. The button stays as wide as the longest of them. */
9254
+ "bool:show-label"?: (HelixHeadlessCopyButton["showLabel"]) | undefined;
9255
+ /** Draws the name as words beside the icon, and the result in their place
9256
+ after a press. The button stays as wide as the longest of them. */
9257
+ "prop:showLabel"?: (HelixHeadlessCopyButton["showLabel"]) | undefined;
9258
+ /** When the tooltip shows: `full` on hover and focus and after a press,
9259
+ `copy` only after a press, to show the result, and `none` never, for a
9260
+ button whose result shows another way, such as under `show-label`.
9261
+
9262
+ Unset is `full`, and the attribute stays absent until you write it. */
9263
+ "prop:tooltip"?: (HelixHeadlessCopyButton["tooltip"]) | undefined;
9264
+ /** The side the tooltip prefers. It moves to another side where this one
9265
+ does not fit. */
9266
+ "attr:tooltip-placement"?: (HelixHeadlessCopyButton["tooltipPlacement"]) | undefined;
9267
+ /** The side the tooltip prefers. It moves to another side where this one
9268
+ does not fit. */
9269
+ "prop:tooltipPlacement"?: (HelixHeadlessCopyButton["tooltipPlacement"]) | undefined;
9208
9270
  /** The text copied to the clipboard.
9209
9271
 
9210
9272
  It replaces `Button.value`, the submit value: a copy button never submits,
@@ -9693,7 +9755,11 @@ thousand rows, where the page is a reasonable fetch and a poor render.
9693
9755
 
9694
9756
  Off by default. Windowing costs a scroll listener, a measurement per row
9695
9757
  drawn, and a `block-size` on the scrolling box, and a table of twenty rows
9696
- should pay none of them. */
9758
+ should pay none of them.
9759
+
9760
+ While windowed, the `table` part scrolls on this tier: it carries
9761
+ `data-scroller`, and `core` ships `[data-scroller] { overflow: auto }` into
9762
+ every shadow root. You still need to give it a block size. */
9697
9763
  windowed?: (HelixHeadlessDataTable["windowed"]) | undefined;
9698
9764
  /** The text shown and announced when there are no rows and none are loading. */
9699
9765
  "empty-text"?: (HelixHeadlessDataTable["emptyText"]) | undefined;
@@ -10122,7 +10188,11 @@ thousand rows, where the page is a reasonable fetch and a poor render.
10122
10188
 
10123
10189
  Off by default. Windowing costs a scroll listener, a measurement per row
10124
10190
  drawn, and a `block-size` on the scrolling box, and a table of twenty rows
10125
- should pay none of them. */
10191
+ should pay none of them.
10192
+
10193
+ While windowed, the `table` part scrolls on this tier: it carries
10194
+ `data-scroller`, and `core` ships `[data-scroller] { overflow: auto }` into
10195
+ every shadow root. You still need to give it a block size. */
10126
10196
  "prop:windowed"?: (HelixHeadlessDataTable["windowed"]) | undefined;
10127
10197
  /** The text shown and announced when there are no rows and none are loading. */
10128
10198
  "attr:empty-text"?: (HelixHeadlessDataTable["emptyText"]) | undefined;
@@ -14785,6 +14855,13 @@ or hides its notes. Drawn where the notes have two groups or more. */
14785
14855
  "links-to-label"?: (HelixHeadlessGraph["linksToLabel"]) | undefined;
14786
14856
  /** How a note that links to the selected one is described, with `{note}`. */
14787
14857
  linksToLabel?: (HelixHeadlessGraph["linksToLabel"]) | undefined;
14858
+ /** Marks the graph as busy while its notes arrive: the list is `aria-busy`,
14859
+ and the panel says so where it holds no notes yet. */
14860
+ loading?: (HelixHeadlessGraph["loading"]) | undefined;
14861
+ /** What the panel says while `loading` is set and the list holds no notes. */
14862
+ "loading-label"?: (HelixHeadlessGraph["loadingLabel"]) | undefined;
14863
+ /** What the panel says while `loading` is set and the list holds no notes. */
14864
+ loadingLabel?: (HelixHeadlessGraph["loadingLabel"]) | undefined;
14788
14865
  /** What screen readers hear once the drawing has moved down, after `moved()`. */
14789
14866
  "moved-down-label"?: (HelixHeadlessGraph["movedDownLabel"]) | undefined;
14790
14867
  /** What screen readers hear once the drawing has moved down, after `moved()`. */
@@ -15006,6 +15083,16 @@ Ignored once `active` is written. */
15006
15083
  links?: (HelixHeadlessGraph["links"]) | undefined;
15007
15084
  /** The notes. A property, never an attribute. */
15008
15085
  nodes?: (HelixHeadlessGraph["nodes"]) | undefined;
15086
+ /** What each note's row in the list shows in place of its name: a function
15087
+ given the note that returns text, an element or a Lit template.
15088
+
15089
+ For an icon by its kind, or a date under its name, as React Aria's
15090
+ `ListBoxItem` takes children. The row is still named by the note's name,
15091
+ which typeahead and the search find it by, and described by how it stands
15092
+ to the selected note. Return the name with your content where it should
15093
+ still show. A property only, there being no way to write a function in
15094
+ markup. */
15095
+ noteContent?: (HelixHeadlessGraph["noteContent"]) | undefined;
15009
15096
 
15010
15097
  /** A note was selected, in the list or in the drawing. The detail's `value` is its `id`. */
15011
15098
  "onhelix-activate"?: ((e: HelixHeadlessGraphHelixActivateElementEvent) => void) | undefined;
@@ -15099,6 +15186,13 @@ or hides its notes. Drawn where the notes have two groups or more. */
15099
15186
  "attr:links-to-label"?: (HelixHeadlessGraph["linksToLabel"]) | undefined;
15100
15187
  /** How a note that links to the selected one is described, with `{note}`. */
15101
15188
  "prop:linksToLabel"?: (HelixHeadlessGraph["linksToLabel"]) | undefined;
15189
+ /** Marks the graph as busy while its notes arrive: the list is `aria-busy`,
15190
+ and the panel says so where it holds no notes yet. */
15191
+ "prop:loading"?: (HelixHeadlessGraph["loading"]) | undefined;
15192
+ /** What the panel says while `loading` is set and the list holds no notes. */
15193
+ "attr:loading-label"?: (HelixHeadlessGraph["loadingLabel"]) | undefined;
15194
+ /** What the panel says while `loading` is set and the list holds no notes. */
15195
+ "prop:loadingLabel"?: (HelixHeadlessGraph["loadingLabel"]) | undefined;
15102
15196
  /** What screen readers hear once the drawing has moved down, after `moved()`. */
15103
15197
  "attr:moved-down-label"?: (HelixHeadlessGraph["movedDownLabel"]) | undefined;
15104
15198
  /** What screen readers hear once the drawing has moved down, after `moved()`. */
@@ -15320,6 +15414,16 @@ Ignored once `active` is written. */
15320
15414
  "prop:links"?: (HelixHeadlessGraph["links"]) | undefined;
15321
15415
  /** The notes. A property, never an attribute. */
15322
15416
  "prop:nodes"?: (HelixHeadlessGraph["nodes"]) | undefined;
15417
+ /** What each note's row in the list shows in place of its name: a function
15418
+ given the note that returns text, an element or a Lit template.
15419
+
15420
+ For an icon by its kind, or a date under its name, as React Aria's
15421
+ `ListBoxItem` takes children. The row is still named by the note's name,
15422
+ which typeahead and the search find it by, and described by how it stands
15423
+ to the selected note. Return the name with your content where it should
15424
+ still show. A property only, there being no way to write a function in
15425
+ markup. */
15426
+ "prop:noteContent"?: (HelixHeadlessGraph["noteContent"]) | undefined;
15323
15427
  /** A note was selected, in the list or in the drawing. The detail's `value` is its `id`. */
15324
15428
  "on:helix-activate"?: ((
15325
15429
  e: HelixHeadlessGraphHelixActivateElementEvent,
@@ -18374,7 +18478,8 @@ itself. */
18374
18478
  type?: (HelixHeadlessList["type"]) | undefined;
18375
18479
  /** The selected rows' values, separated by commas with no spaces, such as `a,c`, in a list that selects.
18376
18480
 
18377
- Set it to start with rows selected. A row's value is its `value`, or its
18481
+ A press or a key writes it in row order, as Data Table does, whatever
18482
+ order the rows were chosen in. Set it to start with rows selected. A row's value is its `value`, or its
18378
18483
  words where it has none. */
18379
18484
  value?: (HelixHeadlessList["value"]) | undefined;
18380
18485
 
@@ -18520,7 +18625,8 @@ itself. */
18520
18625
  "prop:type"?: (HelixHeadlessList["type"]) | undefined;
18521
18626
  /** The selected rows' values, separated by commas with no spaces, such as `a,c`, in a list that selects.
18522
18627
 
18523
- Set it to start with rows selected. A row's value is its `value`, or its
18628
+ A press or a key writes it in row order, as Data Table does, whatever
18629
+ order the rows were chosen in. Set it to start with rows selected. A row's value is its `value`, or its
18524
18630
  words where it has none. */
18525
18631
  "prop:value"?: (HelixHeadlessList["value"]) | undefined;
18526
18632
  /** Fired once a press has changed which rows are selected. */
@@ -21188,6 +21294,14 @@ or on Alt+Down or Alt+Up. */
21188
21294
 
21189
21295
  It moves if that side does not fit. */
21190
21296
  placement?: (HelixHeadlessMenu["placement"]) | undefined;
21297
+ /** What a screen reader hears when the filter narrows the rows. `{count}` is
21298
+ how many rows are left, written in the locale, and each language writes
21299
+ the forms it has, as Listbox's `results-label` does. */
21300
+ "results-label"?: (HelixHeadlessMenu["resultsLabel"]) | undefined;
21301
+ /** What a screen reader hears when the filter narrows the rows. `{count}` is
21302
+ how many rows are left, written in the locale, and each language writes
21303
+ the forms it has, as Listbox's `results-label` does. */
21304
+ resultsLabel?: (HelixHeadlessMenu["resultsLabel"]) | undefined;
21191
21305
  /** How a submenu opens. `drill` shows it in place of the page showing, with
21192
21306
  a way back. `flyout` opens it in a panel of its own beside its row. */
21193
21307
  submenus?: (HelixHeadlessMenu["submenus"]) | undefined;
@@ -21229,7 +21343,17 @@ Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
21229
21343
  Absent, a row is kept where its words hold the filter, in any case. A
21230
21344
  property only, there being no way to write a function in markup. */
21231
21345
  filterMatch?: (HelixHeadlessMenu["filterMatch"]) | undefined;
21346
+ /** The values of the choice rows that are checked, anywhere in the menu, in
21347
+ document order.
21232
21348
 
21349
+ Set it to check exactly those rows and uncheck every other choice row, as
21350
+ React Aria's `selectedKeys` controls a menu's selection from one place.
21351
+ Each row keeps its own `checked` too, which this reads and writes. `change`
21352
+ is sent on the menu when a reader's choice changes it. */
21353
+ checkedValues?: (HelixHeadlessMenu["checkedValues"]) | undefined;
21354
+
21355
+ /** A reader's choice checked or unchecked rows. Read `checkedValues` for the rows that are checked now. */
21356
+ onchange?: ((e: HelixHeadlessMenuElementEvent) => void) | undefined;
21233
21357
  /** The menu is about to close. Cancelable: cancel it to keep it open. */
21234
21358
  "onhelix-before-close"?: ((
21235
21359
  e: HelixHeadlessMenuHelixBeforeCloseElementEvent,
@@ -21308,6 +21432,14 @@ or on Alt+Down or Alt+Up. */
21308
21432
 
21309
21433
  It moves if that side does not fit. */
21310
21434
  "prop:placement"?: (HelixHeadlessMenu["placement"]) | undefined;
21435
+ /** What a screen reader hears when the filter narrows the rows. `{count}` is
21436
+ how many rows are left, written in the locale, and each language writes
21437
+ the forms it has, as Listbox's `results-label` does. */
21438
+ "attr:results-label"?: (HelixHeadlessMenu["resultsLabel"]) | undefined;
21439
+ /** What a screen reader hears when the filter narrows the rows. `{count}` is
21440
+ how many rows are left, written in the locale, and each language writes
21441
+ the forms it has, as Listbox's `results-label` does. */
21442
+ "prop:resultsLabel"?: (HelixHeadlessMenu["resultsLabel"]) | undefined;
21311
21443
  /** How a submenu opens. `drill` shows it in place of the page showing, with
21312
21444
  a way back. `flyout` opens it in a panel of its own beside its row. */
21313
21445
  "prop:submenus"?: (HelixHeadlessMenu["submenus"]) | undefined;
@@ -21349,6 +21481,16 @@ Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
21349
21481
  Absent, a row is kept where its words hold the filter, in any case. A
21350
21482
  property only, there being no way to write a function in markup. */
21351
21483
  "prop:filterMatch"?: (HelixHeadlessMenu["filterMatch"]) | undefined;
21484
+ /** The values of the choice rows that are checked, anywhere in the menu, in
21485
+ document order.
21486
+
21487
+ Set it to check exactly those rows and uncheck every other choice row, as
21488
+ React Aria's `selectedKeys` controls a menu's selection from one place.
21489
+ Each row keeps its own `checked` too, which this reads and writes. `change`
21490
+ is sent on the menu when a reader's choice changes it. */
21491
+ "prop:checkedValues"?: (HelixHeadlessMenu["checkedValues"]) | undefined;
21492
+ /** A reader's choice checked or unchecked rows. Read `checkedValues` for the rows that are checked now. */
21493
+ "on:change"?: ((e: HelixHeadlessMenuElementEvent) => void) | undefined;
21352
21494
  /** The menu is about to close. Cancelable: cancel it to keep it open. */
21353
21495
  "on:helix-before-close"?: ((
21354
21496
  e: HelixHeadlessMenuHelixBeforeCloseElementEvent,
@@ -23689,6 +23831,10 @@ box the sections scroll in. */
23689
23831
  /** The navigation's name, read by screen readers. A heading in the `heading`
23690
23832
  slot names it in place of this. */
23691
23833
  label?: (HelixHeadlessOutline["label"]) | undefined;
23834
+ /** Which links are marked. `reading` marks the one section being read, the
23835
+ last whose heading has passed the reading line. `visible` marks every
23836
+ section with part of it on screen, and the mark runs across their links. */
23837
+ marks?: (HelixHeadlessOutline["marks"]) | undefined;
23692
23838
  /** How far below the top of the scroll container a heading counts as reached,
23693
23839
  in pixels. The scroll container is the window or the panel the sections
23694
23840
  scroll in.
@@ -23733,6 +23879,10 @@ box the sections scroll in. */
23733
23879
  /** The navigation's name, read by screen readers. A heading in the `heading`
23734
23880
  slot names it in place of this. */
23735
23881
  "prop:label"?: (HelixHeadlessOutline["label"]) | undefined;
23882
+ /** Which links are marked. `reading` marks the one section being read, the
23883
+ last whose heading has passed the reading line. `visible` marks every
23884
+ section with part of it on screen, and the mark runs across their links. */
23885
+ "prop:marks"?: (HelixHeadlessOutline["marks"]) | undefined;
23736
23886
  /** How far below the top of the scroll container a heading counts as reached,
23737
23887
  in pixels. The scroll container is the window or the panel the sections
23738
23888
  scroll in.
@@ -24670,17 +24820,42 @@ export type HelixHeadlessPopoverToggleElementEvent =
24670
24820
  HelixHeadlessPopoverElementEvent<ToggleEvent>;
24671
24821
 
24672
24822
  export type HelixHeadlessPopoverProps = {
24823
+ /** The element the panel opens against, where that is not the trigger: its
24824
+ `id` in the same document or shadow root, or the element itself. Left
24825
+ empty, the panel opens against the trigger, or against the button whose
24826
+ command opened it. */
24827
+ anchor?: (HelixHeadlessPopover["anchor"]) | undefined;
24673
24828
  /** Draws a point on the panel's edge facing the trigger.
24674
24829
 
24675
24830
  Off by default, which is the house style: a panel that opens from its
24676
24831
  trigger already reads as belonging to it. */
24677
24832
  arrow?: (HelixHeadlessPopover["arrow"]) | undefined;
24833
+ /** How close to the window's edges the panel may come, in pixels, when it
24834
+ slides, shrinks or moves to the other side to fit. Left unset, it slides
24835
+ and shrinks to 8 pixels from an edge and moves to the other side only
24836
+ once it would cross one. */
24837
+ "container-padding"?: (HelixHeadlessPopover["containerPadding"] | `${number}`) | undefined;
24838
+ /** How close to the window's edges the panel may come, in pixels, when it
24839
+ slides, shrinks or moves to the other side to fit. Left unset, it slides
24840
+ and shrinks to 8 pixels from an edge and moves to the other side only
24841
+ once it would cross one. */
24842
+ containerPadding?: (HelixHeadlessPopover["containerPadding"]) | undefined;
24843
+ /** How far to slide the panel along the side it is on, in pixels: to the
24844
+ right on the top or the bottom, and down on the left or the right. */
24845
+ "cross-offset"?: (HelixHeadlessPopover["crossOffset"] | `${number}`) | undefined;
24846
+ /** How far to slide the panel along the side it is on, in pixels: to the
24847
+ right on the top or the bottom, and down on the left or the right. */
24848
+ crossOffset?: (HelixHeadlessPopover["crossOffset"]) | undefined;
24678
24849
  /** The panel's name where nothing else names it: no `label`, no heading in
24679
24850
  the panel, and no `aria-labelledby` on the host. */
24680
24851
  "fallback-label"?: (HelixHeadlessPopover["fallbackLabel"]) | undefined;
24681
24852
  /** The panel's name where nothing else names it: no `label`, no heading in
24682
24853
  the panel, and no `aria-labelledby` on the host. */
24683
24854
  fallbackLabel?: (HelixHeadlessPopover["fallbackLabel"]) | undefined;
24855
+ /** Whether the panel moves to the other side of the trigger when its own
24856
+ side has no room. On by default. Write `flip="false"` to keep it on its
24857
+ side, where it shrinks to fit, as React Aria's `shouldFlip` turns off. */
24858
+ flip?: (HelixHeadlessPopover["flip"]) | undefined;
24684
24859
  /** The panel's name, read by screen readers. Left empty, the first heading in
24685
24860
  the panel names it, and then `fallback-label`. */
24686
24861
  label?: (HelixHeadlessPopover["label"]) | undefined;
@@ -24725,17 +24900,42 @@ the resolved state for stylesheets, which is what the mirror is for. */
24725
24900
  };
24726
24901
 
24727
24902
  export type HelixHeadlessPopoverSolidJsProps = {
24903
+ /** The element the panel opens against, where that is not the trigger: its
24904
+ `id` in the same document or shadow root, or the element itself. Left
24905
+ empty, the panel opens against the trigger, or against the button whose
24906
+ command opened it. */
24907
+ "prop:anchor"?: (HelixHeadlessPopover["anchor"]) | undefined;
24728
24908
  /** Draws a point on the panel's edge facing the trigger.
24729
24909
 
24730
24910
  Off by default, which is the house style: a panel that opens from its
24731
24911
  trigger already reads as belonging to it. */
24732
24912
  "prop:arrow"?: (HelixHeadlessPopover["arrow"]) | undefined;
24913
+ /** How close to the window's edges the panel may come, in pixels, when it
24914
+ slides, shrinks or moves to the other side to fit. Left unset, it slides
24915
+ and shrinks to 8 pixels from an edge and moves to the other side only
24916
+ once it would cross one. */
24917
+ "attr:container-padding"?: (HelixHeadlessPopover["containerPadding"] | `${number}`) | undefined;
24918
+ /** How close to the window's edges the panel may come, in pixels, when it
24919
+ slides, shrinks or moves to the other side to fit. Left unset, it slides
24920
+ and shrinks to 8 pixels from an edge and moves to the other side only
24921
+ once it would cross one. */
24922
+ "prop:containerPadding"?: (HelixHeadlessPopover["containerPadding"]) | undefined;
24923
+ /** How far to slide the panel along the side it is on, in pixels: to the
24924
+ right on the top or the bottom, and down on the left or the right. */
24925
+ "attr:cross-offset"?: (HelixHeadlessPopover["crossOffset"] | `${number}`) | undefined;
24926
+ /** How far to slide the panel along the side it is on, in pixels: to the
24927
+ right on the top or the bottom, and down on the left or the right. */
24928
+ "prop:crossOffset"?: (HelixHeadlessPopover["crossOffset"]) | undefined;
24733
24929
  /** The panel's name where nothing else names it: no `label`, no heading in
24734
24930
  the panel, and no `aria-labelledby` on the host. */
24735
24931
  "attr:fallback-label"?: (HelixHeadlessPopover["fallbackLabel"]) | undefined;
24736
24932
  /** The panel's name where nothing else names it: no `label`, no heading in
24737
24933
  the panel, and no `aria-labelledby` on the host. */
24738
24934
  "prop:fallbackLabel"?: (HelixHeadlessPopover["fallbackLabel"]) | undefined;
24935
+ /** Whether the panel moves to the other side of the trigger when its own
24936
+ side has no room. On by default. Write `flip="false"` to keep it on its
24937
+ side, where it shrinks to fit, as React Aria's `shouldFlip` turns off. */
24938
+ "prop:flip"?: (HelixHeadlessPopover["flip"]) | undefined;
24739
24939
  /** The panel's name, read by screen readers. Left empty, the first heading in
24740
24940
  the panel names it, and then `fallback-label`. */
24741
24941
  "prop:label"?: (HelixHeadlessPopover["label"]) | undefined;
@@ -28156,6 +28356,13 @@ that should survive its own collapse says how much of itself to keep, and
28156
28356
  only whoever put it there knows that, which is the same reason `min` is a
28157
28357
  consumer's to set. */
28158
28358
  collapsedSize?: (HelixHeadlessSplitter["collapsedSize"]) | undefined;
28359
+ /** Which panes can be collapsed, as Zag's panels each take `collapsible`:
28360
+ `start`, `end`, `both`, or `none`. A pane that cannot be collapsed stops
28361
+ at the edge without shutting. `Enter` collapses the end pane where only
28362
+ the end pane can be collapsed, and the start pane otherwise.
28363
+
28364
+ Unset is `both`, and the attribute stays absent until you write it. */
28365
+ collapsible?: (HelixHeadlessSplitter["collapsible"]) | undefined;
28159
28366
  /** The name of the handle where two dividers cross, read by screen readers. */
28160
28367
  "corner-label"?: (HelixHeadlessSplitter["cornerLabel"]) | undefined;
28161
28368
  /** The name of the handle where two dividers cross, read by screen readers. */
@@ -28184,6 +28391,18 @@ these words are the whole of where it is. */
28184
28391
  "default-position"?: (HelixHeadlessSplitter["defaultPosition"] | `${number}`) | undefined;
28185
28392
  /** Where the divider starts, when `position` is not set. */
28186
28393
  defaultPosition?: (HelixHeadlessSplitter["defaultPosition"]) | undefined;
28394
+ /** The least the end pane keeps, in the units `min` takes: a percentage, or
28395
+ a CSS length such as `16rem` resolved against the splitter's box. The
28396
+ divider stops that far from the end, whatever `max` allows, so `min` and
28397
+ `end-min` hold a minimum for each pane, as Zag's panels each take
28398
+ `minSize`. */
28399
+ "end-min"?: (HelixHeadlessSplitter["endMin"]) | undefined;
28400
+ /** The least the end pane keeps, in the units `min` takes: a percentage, or
28401
+ a CSS length such as `16rem` resolved against the splitter's box. The
28402
+ divider stops that far from the end, whatever `max` allows, so `min` and
28403
+ `end-min` hold a minimum for each pane, as Zag's panels each take
28404
+ `minSize`. */
28405
+ endMin?: (HelixHeadlessSplitter["endMin"]) | undefined;
28187
28406
  /** The divider's name, read by screen readers.
28188
28407
 
28189
28408
  An `aria-label` or `aria-labelledby` on the host names the divider too,
@@ -28316,6 +28535,13 @@ that should survive its own collapse says how much of itself to keep, and
28316
28535
  only whoever put it there knows that, which is the same reason `min` is a
28317
28536
  consumer's to set. */
28318
28537
  "prop:collapsedSize"?: (HelixHeadlessSplitter["collapsedSize"]) | undefined;
28538
+ /** Which panes can be collapsed, as Zag's panels each take `collapsible`:
28539
+ `start`, `end`, `both`, or `none`. A pane that cannot be collapsed stops
28540
+ at the edge without shutting. `Enter` collapses the end pane where only
28541
+ the end pane can be collapsed, and the start pane otherwise.
28542
+
28543
+ Unset is `both`, and the attribute stays absent until you write it. */
28544
+ "prop:collapsible"?: (HelixHeadlessSplitter["collapsible"]) | undefined;
28319
28545
  /** The name of the handle where two dividers cross, read by screen readers. */
28320
28546
  "attr:corner-label"?: (HelixHeadlessSplitter["cornerLabel"]) | undefined;
28321
28547
  /** The name of the handle where two dividers cross, read by screen readers. */
@@ -28344,6 +28570,18 @@ these words are the whole of where it is. */
28344
28570
  "attr:default-position"?: (HelixHeadlessSplitter["defaultPosition"] | `${number}`) | undefined;
28345
28571
  /** Where the divider starts, when `position` is not set. */
28346
28572
  "prop:defaultPosition"?: (HelixHeadlessSplitter["defaultPosition"]) | undefined;
28573
+ /** The least the end pane keeps, in the units `min` takes: a percentage, or
28574
+ a CSS length such as `16rem` resolved against the splitter's box. The
28575
+ divider stops that far from the end, whatever `max` allows, so `min` and
28576
+ `end-min` hold a minimum for each pane, as Zag's panels each take
28577
+ `minSize`. */
28578
+ "attr:end-min"?: (HelixHeadlessSplitter["endMin"]) | undefined;
28579
+ /** The least the end pane keeps, in the units `min` takes: a percentage, or
28580
+ a CSS length such as `16rem` resolved against the splitter's box. The
28581
+ divider stops that far from the end, whatever `max` allows, so `min` and
28582
+ `end-min` hold a minimum for each pane, as Zag's panels each take
28583
+ `minSize`. */
28584
+ "prop:endMin"?: (HelixHeadlessSplitter["endMin"]) | undefined;
28347
28585
  /** The divider's name, read by screen readers.
28348
28586
 
28349
28587
  An `aria-label` or `aria-labelledby` on the host names the divider too,
@@ -32309,6 +32547,18 @@ imperatively later, and nothing is hydrating by then.
32309
32547
 
32310
32548
  Here rather than on each control. */
32311
32549
  name?: (HelixHeadlessTimePicker["name"]) | undefined;
32550
+ /** What each time in the list shows: a function given the time as `HH:mm`,
32551
+ or `HH:mm:ss` with `seconds`, and the time as the row writes it, that
32552
+ returns text, an element or a Lit template.
32553
+
32554
+ For the seats left at a time, or a caption under it, as React Aria's
32555
+ `ListBoxItem` takes children. Content with `slot="start"`, `slot="end"`
32556
+ or `slot="description"` goes to that slot of the row, and a description
32557
+ is read after the time. The row is still named by the written time, and
32558
+ typeahead still finds it by that. Return the written time with your
32559
+ content where it should still show. A property only, there being no way
32560
+ to write a function in markup. The wheels draw their own figures. */
32561
+ timeContent?: (HelixHeadlessTimePicker["timeContent"]) | undefined;
32312
32562
  /** The value as a `Date` on 1 January 1970 UTC, or `null` while there is no time.
32313
32563
 
32314
32564
  The platform's own pair on `<input type="time">`, epoch day included: a time
@@ -32645,6 +32895,18 @@ imperatively later, and nothing is hydrating by then.
32645
32895
 
32646
32896
  Here rather than on each control. */
32647
32897
  "prop:name"?: (HelixHeadlessTimePicker["name"]) | undefined;
32898
+ /** What each time in the list shows: a function given the time as `HH:mm`,
32899
+ or `HH:mm:ss` with `seconds`, and the time as the row writes it, that
32900
+ returns text, an element or a Lit template.
32901
+
32902
+ For the seats left at a time, or a caption under it, as React Aria's
32903
+ `ListBoxItem` takes children. Content with `slot="start"`, `slot="end"`
32904
+ or `slot="description"` goes to that slot of the row, and a description
32905
+ is read after the time. The row is still named by the written time, and
32906
+ typeahead still finds it by that. Return the written time with your
32907
+ content where it should still show. A property only, there being no way
32908
+ to write a function in markup. The wheels draw their own figures. */
32909
+ "prop:timeContent"?: (HelixHeadlessTimePicker["timeContent"]) | undefined;
32648
32910
  /** The value as a `Date` on 1 January 1970 UTC, or `null` while there is no time.
32649
32911
 
32650
32912
  The platform's own pair on `<input type="time">`, epoch day included: a time
@@ -32783,11 +33045,25 @@ word is not read, which is `neutral` and `primary` in English. */
32783
33045
  export type HelixHeadlessTimelineProps = {
32784
33046
  /** Accessible name for the timeline, for people who reach it out of context. */
32785
33047
  label?: (HelixHeadlessTimeline["label"]) | undefined;
33048
+ /** Marks the timeline as busy fetching more entries, and draws an entry
33049
+ after the last that says so. */
33050
+ loading?: (HelixHeadlessTimeline["loading"]) | undefined;
33051
+ /** The text of the entry drawn while `loading` is set, where the `loading` slot is empty. */
33052
+ "loading-label"?: (HelixHeadlessTimeline["loadingLabel"]) | undefined;
33053
+ /** The text of the entry drawn while `loading` is set, where the `loading` slot is empty. */
33054
+ loadingLabel?: (HelixHeadlessTimeline["loadingLabel"]) | undefined;
32786
33055
  };
32787
33056
 
32788
33057
  export type HelixHeadlessTimelineSolidJsProps = {
32789
33058
  /** Accessible name for the timeline, for people who reach it out of context. */
32790
33059
  "prop:label"?: (HelixHeadlessTimeline["label"]) | undefined;
33060
+ /** Marks the timeline as busy fetching more entries, and draws an entry
33061
+ after the last that says so. */
33062
+ "prop:loading"?: (HelixHeadlessTimeline["loading"]) | undefined;
33063
+ /** The text of the entry drawn while `loading` is set, where the `loading` slot is empty. */
33064
+ "attr:loading-label"?: (HelixHeadlessTimeline["loadingLabel"]) | undefined;
33065
+ /** The text of the entry drawn while `loading` is set, where the `loading` slot is empty. */
33066
+ "prop:loadingLabel"?: (HelixHeadlessTimeline["loadingLabel"]) | undefined;
32791
33067
 
32792
33068
  /** Set the innerHTML of the element */
32793
33069
  innerHTML?: (string) | undefined;
@@ -36319,12 +36595,18 @@ export type HelixHeadlessVirtualListElementEvent<E = Event> = TypedEvent<
36319
36595
  /** `helix-before-change` event type */
36320
36596
  export type HelixHeadlessVirtualListHelixBeforeChangeElementEvent =
36321
36597
  HelixHeadlessVirtualListElementEvent<HelixBeforeChangeEvent>;
36598
+ /** `helix-before-reorder` event type */
36599
+ export type HelixHeadlessVirtualListHelixBeforeReorderElementEvent =
36600
+ HelixHeadlessVirtualListElementEvent<HelixBeforeReorderEvent>;
36322
36601
  /** `helix-load-more` event type */
36323
36602
  export type HelixHeadlessVirtualListHelixLoadMoreElementEvent =
36324
36603
  HelixHeadlessVirtualListElementEvent<HelixLoadMoreEvent>;
36325
36604
  /** `helix-range-change` event type */
36326
36605
  export type HelixHeadlessVirtualListHelixRangeChangeElementEvent =
36327
36606
  HelixHeadlessVirtualListElementEvent<HelixRangeChangeEvent>;
36607
+ /** `helix-reorder` event type */
36608
+ export type HelixHeadlessVirtualListHelixReorderElementEvent =
36609
+ HelixHeadlessVirtualListElementEvent<HelixReorderEvent>;
36328
36610
 
36329
36611
  export type HelixHeadlessVirtualListProps = {
36330
36612
  /** How many items a line holds. One, the default, is a list; more lays the
@@ -36404,6 +36686,13 @@ and scrolls it sideways: Left and Right move between items, the other
36404
36686
  way round on a right-to-left page, and `estimate` is an item's width. A
36405
36687
  grid always runs down. */
36406
36688
  orientation?: (HelixHeadlessVirtualList["orientation"]) | undefined;
36689
+ /** Lets a reader move items, once `@fusion.dev/helix/virtual-list/reorder`
36690
+ (or `@fusion.dev/helix-headless/virtual-list/reorder`) is imported: Alt
36691
+ with an arrow moves the row the keys are on, and a pointer drags a row.
36692
+ The list moves no item itself: you move your `items` on `helix-reorder`.
36693
+ Without that import it does nothing, so a list that never moves items
36694
+ carries none of the code. A list of one column, without sections. */
36695
+ reorderable?: (HelixHeadlessVirtualList["reorderable"]) | undefined;
36407
36696
  /** The field of each item that names its section, as a key or a path of
36408
36697
  keys. Set, the items are drawn in sections: a header, then the items, in
36409
36698
  an element with the `group` role that the header names. A section starts
@@ -36469,6 +36758,10 @@ it is unset, the header is the name as text. */
36469
36758
  "onhelix-before-change"?: ((
36470
36759
  e: HelixHeadlessVirtualListHelixBeforeChangeElementEvent,
36471
36760
  ) => void) | undefined;
36761
+ /** Fired when an item is dropped at a new place, in a `reorderable` list with `@fusion.dev/helix/virtual-list/reorder` imported, with every key in the new order. Cancelable: cancel it to keep the item where it is. */
36762
+ "onhelix-before-reorder"?: ((
36763
+ e: HelixHeadlessVirtualListHelixBeforeReorderElementEvent,
36764
+ ) => void) | undefined;
36472
36765
  /** Fired when a reader comes within one screen of the last item, once for each length of the set. */
36473
36766
  "onhelix-load-more"?: ((
36474
36767
  e: HelixHeadlessVirtualListHelixLoadMoreElementEvent,
@@ -36477,6 +36770,10 @@ it is unset, the header is the name as text. */
36477
36770
  "onhelix-range-change"?: ((
36478
36771
  e: HelixHeadlessVirtualListHelixRangeChangeElementEvent,
36479
36772
  ) => void) | undefined;
36773
+ /** Fired after `helix-before-reorder` when nobody canceled it. Set `items` to the order in `keys`. Cancelable: cancel it to say the move did not happen. */
36774
+ "onhelix-reorder"?: ((
36775
+ e: HelixHeadlessVirtualListHelixReorderElementEvent,
36776
+ ) => void) | undefined;
36480
36777
  };
36481
36778
 
36482
36779
  export type HelixHeadlessVirtualListSolidJsProps = {
@@ -36557,6 +36854,13 @@ and scrolls it sideways: Left and Right move between items, the other
36557
36854
  way round on a right-to-left page, and `estimate` is an item's width. A
36558
36855
  grid always runs down. */
36559
36856
  "prop:orientation"?: (HelixHeadlessVirtualList["orientation"]) | undefined;
36857
+ /** Lets a reader move items, once `@fusion.dev/helix/virtual-list/reorder`
36858
+ (or `@fusion.dev/helix-headless/virtual-list/reorder`) is imported: Alt
36859
+ with an arrow moves the row the keys are on, and a pointer drags a row.
36860
+ The list moves no item itself: you move your `items` on `helix-reorder`.
36861
+ Without that import it does nothing, so a list that never moves items
36862
+ carries none of the code. A list of one column, without sections. */
36863
+ "prop:reorderable"?: (HelixHeadlessVirtualList["reorderable"]) | undefined;
36560
36864
  /** The field of each item that names its section, as a key or a path of
36561
36865
  keys. Set, the items are drawn in sections: a header, then the items, in
36562
36866
  an element with the `group` role that the header names. A section starts
@@ -36621,6 +36925,10 @@ it is unset, the header is the name as text. */
36621
36925
  "on:helix-before-change"?: ((
36622
36926
  e: HelixHeadlessVirtualListHelixBeforeChangeElementEvent,
36623
36927
  ) => void) | undefined;
36928
+ /** Fired when an item is dropped at a new place, in a `reorderable` list with `@fusion.dev/helix/virtual-list/reorder` imported, with every key in the new order. Cancelable: cancel it to keep the item where it is. */
36929
+ "on:helix-before-reorder"?: ((
36930
+ e: HelixHeadlessVirtualListHelixBeforeReorderElementEvent,
36931
+ ) => void) | undefined;
36624
36932
  /** Fired when a reader comes within one screen of the last item, once for each length of the set. */
36625
36933
  "on:helix-load-more"?: ((
36626
36934
  e: HelixHeadlessVirtualListHelixLoadMoreElementEvent,
@@ -36629,6 +36937,10 @@ it is unset, the header is the name as text. */
36629
36937
  "on:helix-range-change"?: ((
36630
36938
  e: HelixHeadlessVirtualListHelixRangeChangeElementEvent,
36631
36939
  ) => void) | undefined;
36940
+ /** Fired after `helix-before-reorder` when nobody canceled it. Set `items` to the order in `keys`. Cancelable: cancel it to say the move did not happen. */
36941
+ "on:helix-reorder"?: ((
36942
+ e: HelixHeadlessVirtualListHelixReorderElementEvent,
36943
+ ) => void) | undefined;
36632
36944
 
36633
36945
  /** Set the innerHTML of the element */
36634
36946
  innerHTML?: (string) | undefined;
@@ -38638,10 +38950,18 @@ export type CustomElements = {
38638
38950
  * a named `group`, and the toolbar's own arrow keys walk its buttons, so a
38639
38951
  * reader meets one toolbar. Under `single` it is a `radiogroup` either way.
38640
38952
  *
38953
+ * **Disabled.** `disabled` on the group disables every button in it, Helix
38954
+ * and native alike, and says so on the group with `aria-disabled`, as React
38955
+ * Aria's `isDisabled` does. A button disabled on its own stays disabled when
38956
+ * the group is enabled again, and a button that leaves the group gets back
38957
+ * what it said for itself.
38958
+ *
38641
38959
  * ## Attributes & Properties
38642
38960
  *
38643
38961
  * Component attributes and properties that can be applied to the element or by using JavaScript.
38644
38962
  *
38963
+ * - `disabled`: Disables every button in the group, and says so on the group with
38964
+ * `aria-disabled`. Reflected, so a stylesheet can select on it.
38645
38965
  * - `disallow-empty-selection`/`disallowEmptySelection`: Keeps at least one button pressed once one is, as React Aria's
38646
38966
  * `disallowEmptySelection`: a press that would leave none pressed is
38647
38967
  * refused.
@@ -38676,6 +38996,8 @@ export type CustomElements = {
38676
38996
  *
38677
38997
  * The attribute is the seed, and a press changes the property, which does
38678
38998
  * not reflect, as a native control's `value` does not.
38999
+ * - `values`: The pressed values as a list, in a selection mode, and an empty list
39000
+ * otherwise. Written, it presses exactly those buttons. (property only)
38679
39001
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
38680
39002
  *
38681
39003
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -39529,6 +39851,8 @@ export type CustomElements = {
39529
39851
  * Third", rather than with a comma this component chose.
39530
39852
  * - `linked-label`/`linkedLabel`: The text read with a card that has connections both ways. `{leadsTo}` is
39531
39853
  * `leads-to-label` and `{comesFrom}` is `comes-from-label`, each filled in.
39854
+ * - `loading`: Marks the board as busy while its document arrives: the board is
39855
+ * `aria-busy`, and the `loading` slot is shown.
39532
39856
  * - `moved-label`/`movedLabel`: What screen readers hear after a key moves a card, with `{name}` for the
39533
39857
  * card and `{x}` and `{y}` for where it now is, in the document's units.
39534
39858
  *
@@ -39769,6 +40093,7 @@ export type CustomElements = {
39769
40093
  * - `footer`: Content below the board.
39770
40094
  * - `fullscreen-icon`: Replaces the glyph inside the fullscreen button.
39771
40095
  * - `header`: Content above the board.
40096
+ * - `loading`: Content shown while `loading` is set, such as a progress bar while the document arrives.
39772
40097
  * - `pan-down-icon`: Replaces the glyph inside the pan down button.
39773
40098
  * - `pan-end-icon`: Replaces the glyph inside the button that pans toward the end of a line of text.
39774
40099
  * - `pan-start-icon`: Replaces the glyph inside the button that pans toward the start of a line of text.
@@ -39891,6 +40216,7 @@ export type CustomElements = {
39891
40216
  * - `fullscreen`: While the board fills the screen.
39892
40217
  * - `holding`: An item picked up with a click follows the pointer until the next press puts it down.
39893
40218
  * - `idle`: The user has been still for `idle-delay` milliseconds. The board's own controls stay; select on it to hide chrome of your own.
40219
+ * - `loading`: While `loading` is set.
39894
40220
  * - `pressing`: While a press on the board, its cards or its connections is under way.
39895
40221
  * - `sharing`: The page keeps the plain wheel and one finger, with `gestures="cooperative"` or while a board with `gestures="activate"` waits to be pressed.
39896
40222
  * - `using`: A board with `gestures="activate"` has been pressed and has the gestures.
@@ -40337,6 +40663,11 @@ export type CustomElements = {
40337
40663
  * Sending an empty required composer counts as trying. Tabbing past an empty
40338
40664
  * composer marks nothing.
40339
40665
  *
40666
+ * **`feedback` is a message of your own about the draft**, such as one your
40667
+ * server sent back. While it is set, the composer is invalid at once, does
40668
+ * not send or submit, shows the message under the field, and a screen reader
40669
+ * hears it as it appears. Clear it to let the draft go.
40670
+ *
40340
40671
  * **`typing` says whether the user is writing**, and `helix-typing` is sent
40341
40672
  * each time it changes: when they start, and when they send or stop for
40342
40673
  * `typing-timeout` milliseconds. Pass it on to show "is typing" to the other
@@ -40346,6 +40677,9 @@ export type CustomElements = {
40346
40677
  *
40347
40678
  * Component attributes and properties that can be applied to the element or by using JavaScript.
40348
40679
  *
40680
+ * - `feedback`: A message about the draft, shown under the field. While set, the composer
40681
+ * is invalid, does not send, and does not submit, as a field's `feedback`
40682
+ * does, and the message is announced as it appears.
40349
40683
  * - `label`: The field's name, read by screen readers.
40350
40684
  * - `maxlength`/`maxLength`: The most characters a draft can have. The field stops taking more.
40351
40685
  * - `minlength`/`minLength`: The fewest characters a draft can have, once the reader has written in
@@ -40494,6 +40828,7 @@ export type CustomElements = {
40494
40828
  *
40495
40829
  * - `composer`: The whole composer.
40496
40830
  * - `end`: The box around the `end` slot.
40831
+ * - `feedback`: The `feedback` message, under the field while it is set.
40497
40832
  * - `field`: The text field.
40498
40833
  * - `mark`: The icon inside the send button.
40499
40834
  * - `send`: The send button.
@@ -40504,7 +40839,7 @@ export type CustomElements = {
40504
40839
  *
40505
40840
  * These can be used to apply styling when a component is in a given state.
40506
40841
  *
40507
- * - `invalid`: The draft fails `required`, `minlength`, `maxlength`, or a custom error, and the reader has tried to send or submit it, or edited the field and left it.
40842
+ * - `invalid`: The draft fails `required`, `minlength`, `maxlength`, or a custom error, and the reader has tried to send or submit it, or edited the field and left it. Or `feedback` is set.
40508
40843
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
40509
40844
  */
40510
40845
  "helix-headless-chat-composer": Partial<
@@ -40638,6 +40973,13 @@ export type CustomElements = {
40638
40973
  * `loading` while you fetch, then prepend the older turns. The turn the user
40639
40974
  * was reading stays in place on screen.
40640
40975
  *
40976
+ * The transcript is a `log`, the role for content added in order where the
40977
+ * newest matters most, and it answers the APG feed's keys. The `feed` role
40978
+ * reads its articles as a list from the top, with no newest end to stay
40979
+ * pinned to, so the log keeps the role a conversation has. While `loading` is
40980
+ * set or older turns load, the log carries `aria-busy`, as the APG asks of a
40981
+ * feed.
40982
+ *
40641
40983
  * The log is `aria-live="off"`. A separate status region announces each new
40642
40984
  * turn once, when it has finished arriving. It skips the user's own turns
40643
40985
  * unless they failed to send, turns loaded as history, and the turns already
@@ -40650,6 +40992,12 @@ export type CustomElements = {
40650
40992
  * conversations. `turns` draws a long
40651
40993
  * transcript one window at a time, so the log needs a block size of its own.
40652
40994
  *
40995
+ * The log scrolls on this tier. It carries `data-scroller`, and `core` ships
40996
+ * `[data-scroller] { overflow: auto }` into every shadow root, so pinning,
40997
+ * history and the window work with no stylesheet. You still need to give the
40998
+ * log a block size, such as `helix-headless-chat::part(log) { block-size:
40999
+ * 20rem }`.
41000
+ *
40653
41001
  * **A conversation is built from three elements.** The chat holds the
40654
41002
  * transcript, a `Chat.Message` stands for each turn, and a `Chat.Composer` sits
40655
41003
  * in the `composer` slot. When the user sends, `helix-send` reaches the chat:
@@ -40666,7 +41014,9 @@ export type CustomElements = {
40666
41014
  * turn says its place, such as "3 of 40", windowed or not. The transcript is
40667
41015
  * a tab stop while it holds a turn, and the turn a reader moved to is one
40668
41016
  * too. Moving to an older turn unpins a transcript that scrolls and scrolls
40669
- * the turn into view, and moving to the newest pins it again.
41017
+ * the turn into view, and moving to the newest pins it again. When the turn
41018
+ * holding focus is removed, focus moves to the turn that took its place, or to
41019
+ * the one before it where it was the last.
40670
41020
  *
40671
41021
  * | Key | What it does |
40672
41022
  * |---|---|
@@ -40845,7 +41195,7 @@ export type CustomElements = {
40845
41195
  * - `indicator`: The three dots before the words that say who is typing, which the styled tier animates as a message's are. Hidden from screen readers.
40846
41196
  * - `live`: The region where screen readers announce each turn once it has arrived.
40847
41197
  * - `loading`: Shown while the history loads.
40848
- * - `log`: The transcript, which scrolls.
41198
+ * - `log`: The transcript, which scrolls. On this tier, it needs only a block size.
40849
41199
  * - `message`: The message drawn for a turn from `turns`, forwarded whole.
40850
41200
  * - `message-actions`: The controls on a turn from `turns`, beside its time.
40851
41201
  * - `message-avatar`: The avatar box of a turn from `turns`.
@@ -41779,7 +42129,8 @@ export type CustomElements = {
41779
42129
  *
41780
42130
  * The trigger and ArrowDown open the panel with focus in the square. Tab moves
41781
42131
  * between the panel's controls without leaving it, and Escape closes it and
41782
- * returns focus to the field.
42132
+ * returns focus to the control that opened it: the trigger after a press, and
42133
+ * the field after ArrowDown.
41783
42134
  *
41784
42135
  * The component sets `--color-input-swatch`, so do not set it yourself. It
41785
42136
  * holds the resolved color, so the styled tier can paint the swatch without
@@ -43212,7 +43563,17 @@ export type CustomElements = {
43212
43563
  * The button is named `label`, or the host's `aria-label`, and its name
43213
43564
  * changes to `copied-label` or `error-label` for the moment after a press. The
43214
43565
  * same words are said in a live region, so a screen reader hears the result,
43215
- * and the tooltip shows them.
43566
+ * and the tooltip shows them. The tooltip does not also describe the button,
43567
+ * since its words are the button's name.
43568
+ *
43569
+ * **The tooltip.** It shows the name on hover and focus and the result after a
43570
+ * press. `tooltip="copy"` shows it only for the result, and `tooltip="none"`
43571
+ * draws none, as Web Awesome's copy button offers. `tooltip-placement` is the
43572
+ * side it prefers, and it moves to another side where that one does not fit.
43573
+ *
43574
+ * **Words on the button.** `show-label` draws the name beside the icon, and
43575
+ * the result in its place after a press. The button is as wide as the longest
43576
+ * of the three, so a press does not resize it.
43216
43577
  *
43217
43578
  * ## Attributes & Properties
43218
43579
  *
@@ -43235,6 +43596,15 @@ export type CustomElements = {
43235
43596
  * Defaulted rather than left empty. An icon-only control must be named, and
43236
43597
  * the name of this one is not a judgment call: every copy button in the
43237
43598
  * world is called Copy. A consumer with a better word still sets it.
43599
+ * - `show-label`/`showLabel`: Draws the name as words beside the icon, and the result in their place
43600
+ * after a press. The button stays as wide as the longest of them.
43601
+ * - `tooltip`: When the tooltip shows: `full` on hover and focus and after a press,
43602
+ * `copy` only after a press, to show the result, and `none` never, for a
43603
+ * button whose result shows another way, such as under `show-label`.
43604
+ *
43605
+ * Unset is `full`, and the attribute stays absent until you write it.
43606
+ * - `tooltip-placement`/`tooltipPlacement`: The side the tooltip prefers. It moves to another side where this one
43607
+ * does not fit.
43238
43608
  * - `value`: The text copied to the clipboard.
43239
43609
  *
43240
43610
  * It replaces `Button.value`, the submit value: a copy button never submits,
@@ -43396,6 +43766,7 @@ export type CustomElements = {
43396
43766
  * - `live`: The live region that says `copied-label` or `error-label` after a press, and `pending-label` when the button becomes pending under focus. It is rendered from the first time it says anything.
43397
43767
  * - `mark`: The clipboard icon, and the confirmation icon that replaces it.
43398
43768
  * - `spinner`: The ring a pending button turns, an empty element the styled button draws over the icon. It is rendered only while the button is pending.
43769
+ * - `text`: The words beside the icon, under `show-label`. It holds all three, `label`, `copied-label` and `error-label`, with all but the current one hidden.
43399
43770
  * - `tooltip`: The tooltip bubble, forwarded from the tooltip inside the button.
43400
43771
  * - `tooltip-arrow`: The tooltip's arrow, which points at the button.
43401
43772
  * - `tooltip-arrow-bottom`: The arrow while the bubble is below the button, on the bubble's top edge. Set together with `tooltip-arrow`.
@@ -43733,6 +44104,10 @@ export type CustomElements = {
43733
44104
  * Off by default. Windowing costs a scroll listener, a measurement per row
43734
44105
  * drawn, and a `block-size` on the scrolling box, and a table of twenty rows
43735
44106
  * should pay none of them.
44107
+ *
44108
+ * While windowed, the `table` part scrolls on this tier: it carries
44109
+ * `data-scroller`, and `core` ships `[data-scroller] { overflow: auto }` into
44110
+ * every shadow root. You still need to give it a block size.
43736
44111
  * - `empty-text`/`emptyText`: The text shown and announced when there are no rows and none are loading.
43737
44112
  * - `loading`: Whether the rows are still loading.
43738
44113
  *
@@ -43895,7 +44270,7 @@ export type CustomElements = {
43895
44270
  * - `select`: The cell that holds a row's checkbox.
43896
44271
  * - `select-all`: The heading that holds the checkbox that selects every row.
43897
44272
  * - `select-selected`: Added to `select` in a selected row.
43898
- * - `table`: The grid.
44273
+ * - `table`: The grid. While `windowed`, the box that scrolls, which needs only a block size on this tier.
43899
44274
  * - `toggle`: The mark in a row header that a press opens and closes its row by, in a tree grid.
43900
44275
  * - `toggle-mark`: The caret in `toggle`. It points along the line while the row is closed and down while it is open.
43901
44276
  * - `toggle-open`: Added to `toggle` while its row is open.
@@ -45631,6 +46006,10 @@ export type CustomElements = {
45631
46006
  * <helix-headless-drawer id="nav">…</helix-headless-drawer>
45632
46007
  * ```
45633
46008
  *
46009
+ * From its first press, a button that opens the drawer this way says whether
46010
+ * the drawer is open: a Helix button through `expanded`, and any other
46011
+ * element with `aria-expanded`.
46012
+ *
45634
46013
  * ## Attributes & Properties
45635
46014
  *
45636
46015
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -47673,6 +48052,9 @@ export type CustomElements = {
47673
48052
  * - `linked-both-label`/`linkedBothLabel`: How a note linked both to and from the selected one is described, with `{note}`.
47674
48053
  * - `linked-from-label`/`linkedFromLabel`: How a note the selected one links to is described, with `{note}`, the selected note's name.
47675
48054
  * - `links-to-label`/`linksToLabel`: How a note that links to the selected one is described, with `{note}`.
48055
+ * - `loading`: Marks the graph as busy while its notes arrive: the list is `aria-busy`,
48056
+ * and the panel says so where it holds no notes yet.
48057
+ * - `loading-label`/`loadingLabel`: What the panel says while `loading` is set and the list holds no notes.
47676
48058
  * - `moved-down-label`/`movedDownLabel`: What screen readers hear once the drawing has moved down, after `moved()`.
47677
48059
  * - `moved-left-label`/`movedLeftLabel`: What screen readers hear once the drawing has moved left, after `moved()`.
47678
48060
  * - `moved-right-label`/`movedRightLabel`: What screen readers hear once the drawing has moved right, after `moved()`.
@@ -47781,6 +48163,15 @@ export type CustomElements = {
47781
48163
  * - `hiddenGroups`: The groups turned off in the legend, by name, whose notes neither the drawing nor the list shows. A property, never an attribute. (property only)
47782
48164
  * - `links`: The links between notes, each from `source` to `target`. A property, never an attribute. (property only)
47783
48165
  * - `nodes`: The notes. A property, never an attribute. (property only)
48166
+ * - `noteContent`: What each note's row in the list shows in place of its name: a function
48167
+ * given the note that returns text, an element or a Lit template.
48168
+ *
48169
+ * For an icon by its kind, or a date under its name, as React Aria's
48170
+ * `ListBoxItem` takes children. The row is still named by the note's name,
48171
+ * which typeahead and the search find it by, and described by how it stands
48172
+ * to the selected note. Return the name with your content where it should
48173
+ * still show. A property only, there being no way to write a function in
48174
+ * markup. (property only)
47784
48175
  * - `ready`: Whether the graph has been drawn whole. For code that runs after `helix-graph-ready`. (property only) (readonly)
47785
48176
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
47786
48177
  *
@@ -47827,6 +48218,7 @@ export type CustomElements = {
47827
48218
  * - `footer`: Content below the graph.
47828
48219
  * - `fullscreen-icon`: Replaces the glyph inside the fullscreen button.
47829
48220
  * - `header`: Content above the graph.
48221
+ * - `loading`: What the panel shows while `loading` is set and the list holds no notes. Defaults to `loading-label`.
47830
48222
  * - `pan-down-icon`: Replaces the glyph inside the pan down button.
47831
48223
  * - `pan-end-icon`: Replaces the glyph inside the button that pans toward the end of a line of text.
47832
48224
  * - `pan-start-icon`: Replaces the glyph inside the button that pans toward the start of a line of text.
@@ -47900,6 +48292,7 @@ export type CustomElements = {
47900
48292
  * - `legend-swatch`: The mark in a group's color, before its name.
47901
48293
  * - `list`: The list of notes, which draws only the rows in view.
47902
48294
  * - `live`: What screen readers hear: how many notes there are when a search or the legend changes it, and which way the drawing went after a key or a control moved it.
48295
+ * - `loading`: The box in place of the list while `loading` is set and it holds no notes, holding the `loading` slot.
47903
48296
  * - `note`: One note in the list.
47904
48297
  * - `note-cursor`: The note the keyboard is on in the list.
47905
48298
  * - `note-linked`: A note linked to or from the selected one.
@@ -47927,6 +48320,7 @@ export type CustomElements = {
47927
48320
  * - `empty`: The list holds no notes: the graph has none, or a search or the groups hid them all.
47928
48321
  * - `fullscreen`: The graph fills the screen.
47929
48322
  * - `idle`: The user has been still long enough for the header and footer to fade.
48323
+ * - `loading`: While `loading` is set.
47930
48324
  * - `local`: The drawing shows the selected note's local graph, with `depth`.
47931
48325
  * - `panel-open`: A graph with `no-panel` has the search and the list open over the drawing.
47932
48326
  * - `ready`: The graph has been drawn whole, after `helix-graph-ready`.
@@ -50470,7 +50864,8 @@ export type CustomElements = {
50470
50864
  * itself.
50471
50865
  * - `value`: The selected rows' values, separated by commas with no spaces, such as `a,c`, in a list that selects.
50472
50866
  *
50473
- * Set it to start with rows selected. A row's value is its `value`, or its
50867
+ * A press or a key writes it in row order, as Data Table does, whatever
50868
+ * order the rows were chosen in. Set it to start with rows selected. A row's value is its `value`, or its
50474
50869
  * words where it has none.
50475
50870
  * - `rows`: The rows the list holds, in order. (property only) (readonly)
50476
50871
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -52556,6 +52951,8 @@ export type CustomElements = {
52556
52951
  * These can be used to apply styling when a component is in a given state.
52557
52952
  *
52558
52953
  * - `checked`: The row is checked.
52954
+ * - `disabled`: The row is disabled.
52955
+ * - `expanded`: Under `submenus="flyout"`, the row's submenu is open beside it.
52559
52956
  * - `highlighted`: In a menu with `filterable`, the arrow keys or the pointer reached the row while focus stays in the filter field.
52560
52957
  * - `submenu-mark`: Under `submenus="flyout"`, a row in this row's submenu can be ticked or opens a submenu, so the submenu keeps its trailing column.
52561
52958
  * - `submenu-start`: Under `submenus="flyout"`, a row in this row's submenu has content before its label, so the submenu keeps its leading column.
@@ -52579,7 +52976,9 @@ export type CustomElements = {
52579
52976
  *
52580
52977
  * Submenus drill down by default. A submenu replaces the panel's content, and a
52581
52978
  * back row returns to the previous page. One panel stays inside a narrow
52582
- * window, and works on touch screens, which have no hover.
52979
+ * window, and works on touch screens, which have no hover. Focus follows a
52980
+ * mouse resting on a row in either mode, and a drilled page is a `menu` named
52981
+ * by the row that opened it.
52583
52982
  *
52584
52983
  * **`submenus="flyout"` opens each submenu in a panel of its own beside its
52585
52984
  * row**, as React Aria's `SubmenuTrigger` and Radix's `Sub` do. Resting the
@@ -52613,6 +53012,11 @@ export type CustomElements = {
52613
53012
  * trigger's width, for a menu as wide as its trigger:
52614
53013
  * `helix-menu::part(surface) { min-inline-size: var(--floating-anchor-inline-size) }`.
52615
53014
  *
53015
+ * **The choices in one place.** `checkedValues` holds the values of the rows
53016
+ * that are checked, anywhere in the menu, and setting it checks exactly
53017
+ * those rows, as React Aria's `selectedKeys` does. `change` is sent on the
53018
+ * menu when a reader's choice changes it.
53019
+ *
52616
53020
  * With `context`, the trigger is an area and the menu is its context menu: a
52617
53021
  * right-click, a long press, Shift+F10 or the menu key over the area opens it
52618
53022
  * at the pointer, or at the area's corner from the keyboard, as Radix's context
@@ -52635,7 +53039,8 @@ export type CustomElements = {
52635
53039
  * field: Up and Down Arrow move the highlight through the rows that are left,
52636
53040
  * Enter chooses the highlighted row, Right Arrow opens its submenu, Left Arrow
52637
53041
  * on a submenu goes back, and Escape clears the filter and then closes the
52638
- * menu. Home, End and the other keys move the caret and type. The field names
53042
+ * menu. A screen reader hears how many rows the filter keeps
53043
+ * (`results-label`). Home, End and the other keys move the caret and type. The field names
52639
53044
  * the highlighted row with `aria-activedescendant`, and the rows are a `menu`
52640
53045
  * after the field. Cancel `helix-filter` to keep every row
52641
53046
  * showing and narrow the rows yourself, such as by replacing them with rows
@@ -52675,6 +53080,9 @@ export type CustomElements = {
52675
53080
  * - `placement`: The side the menu opens on, when there is room.
52676
53081
  *
52677
53082
  * It moves if that side does not fit.
53083
+ * - `results-label`/`resultsLabel`: What a screen reader hears when the filter narrows the rows. `{count}` is
53084
+ * how many rows are left, written in the locale, and each language writes
53085
+ * the forms it has, as Listbox's `results-label` does.
52678
53086
  * - `submenus`: How a submenu opens. `drill` shows it in place of the page showing, with
52679
53087
  * a way back. `flyout` opens it in a panel of its own beside its row.
52680
53088
  * - `empty-text`/`emptyText`: The text shown and announced when there are no rows and none are loading.
@@ -52703,6 +53111,13 @@ export type CustomElements = {
52703
53111
  *
52704
53112
  * Absent, a row is kept where its words hold the filter, in any case. A
52705
53113
  * property only, there being no way to write a function in markup. (property only)
53114
+ * - `checkedValues`: The values of the choice rows that are checked, anywhere in the menu, in
53115
+ * document order.
53116
+ *
53117
+ * Set it to check exactly those rows and uncheck every other choice row, as
53118
+ * React Aria's `selectedKeys` controls a menu's selection from one place.
53119
+ * Each row keeps its own `checked` too, which this reads and writes. `change`
53120
+ * is sent on the menu when a reader's choice changes it. (property only)
52706
53121
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
52707
53122
  *
52708
53123
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -52728,6 +53143,7 @@ export type CustomElements = {
52728
53143
  *
52729
53144
  * Events that will be emitted by the component.
52730
53145
  *
53146
+ * - `change`: A reader's choice checked or unchecked rows. Read `checkedValues` for the rows that are checked now.
52731
53147
  * - `helix-before-close`: The menu is about to close. Cancelable: cancel it to keep it open.
52732
53148
  * - `helix-before-open`: The menu is about to open. Cancelable: cancel it to keep it closed.
52733
53149
  * - `helix-filter`: The text in the filter field changed, with the new text in `detail.value`. Cancelable: cancel it to keep every row showing and narrow the rows yourself.
@@ -52739,6 +53155,8 @@ export type CustomElements = {
52739
53155
  * Areas where markup can be added to the component.
52740
53156
  *
52741
53157
  * - `(default)`: The items.
53158
+ * - `empty`: What the menu shows when it has no items, for content richer than `empty-text`.
53159
+ * - `loading`: What the menu shows while its items load, for content richer than `loading-text`.
52742
53160
  * - `no-results`: What the menu shows when the filter keeps no rows, for content richer than `no-results-text`.
52743
53161
  * - `trigger`: The control that opens the menu, or with `context` the area a context menu opens over.
52744
53162
  *
@@ -52784,6 +53202,8 @@ export type CustomElements = {
52784
53202
  * These can be used to apply styling when a component is in a given state.
52785
53203
  *
52786
53204
  * - `drilled`: A submenu's page is showing, so content that is not a row can hide with the top page.
53205
+ * - `entering`: From the moment the panel shows until its entrance has finished.
53206
+ * - `exiting`: From the moment the panel hides until its exit has finished.
52787
53207
  * - `mark`: A row on the current page has a checkbox or a link, so every row keeps the trailing column.
52788
53208
  * - `open`: While the menu is open.
52789
53209
  * - `placed-bottom`: While the open panel sits below its trigger.
@@ -54731,6 +55151,22 @@ export type CustomElements = {
54731
55151
  * headings are far apart, none is in the band and no section is marked, and
54732
55152
  * when they are close together, several are in the band at once.
54733
55153
  *
55154
+ * **Several sections at once.** `marks="visible"` marks the link of every
55155
+ * section with part of it on screen, from the reading line to the bottom of
55156
+ * what the sections scroll in, as Zag's table of contents marks its active
55157
+ * ids. The mark then runs from the first of those links to the last, and
55158
+ * `marked` lists their ids in page order.
55159
+ *
55160
+ * **Going to a section from code.** `scrollToSection(id)` scrolls to the
55161
+ * section as a press on its link does, with `behavior`, and marks its link at
55162
+ * once.
55163
+ *
55164
+ * **Styling a link by its state.** Each link the outline finds carries
55165
+ * `data-depth`, its depth in the outline from `1`, nested lists and
55166
+ * `data-level` alike, and `aria-current="location"` while its section is
55167
+ * marked, so `a[aria-current]` and `a[data-depth="2"]` are the hooks for a
55168
+ * rule of yours.
55169
+ *
54734
55170
  * ## Attributes & Properties
54735
55171
  *
54736
55172
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -54760,6 +55196,9 @@ export type CustomElements = {
54760
55196
  * box the sections scroll in.
54761
55197
  * - `label`: The navigation's name, read by screen readers. A heading in the `heading`
54762
55198
  * slot names it in place of this.
55199
+ * - `marks`: Which links are marked. `reading` marks the one section being read, the
55200
+ * last whose heading has passed the reading line. `visible` marks every
55201
+ * section with part of it on screen, and the mark runs across their links.
54763
55202
  * - `offset`: How far below the top of the scroll container a heading counts as reached,
54764
55203
  * in pixels. The scroll container is the window or the panel the sections
54765
55204
  * scroll in.
@@ -54775,6 +55214,9 @@ export type CustomElements = {
54775
55214
  * writable property in this library that a component also writes is state a
54776
55215
  * consumer can own; this one cannot be, and saying so with the type is better
54777
55216
  * than saying it in a sentence nobody reads. (property only) (readonly)
55217
+ * - `marked`: The ids of the sections whose links are marked, in page order: the one
55218
+ * `current` names, or under `marks="visible"` every section on screen.
55219
+ * Read-only, for the reason `current` gives. (property only) (readonly)
54778
55220
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
54779
55221
  *
54780
55222
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -54810,6 +55252,14 @@ export type CustomElements = {
54810
55252
  * - `heading`: A heading above the links, such as "On this page". It names the navigation.
54811
55253
  * - `indicator`: A mark of your own, drawn inside the `indicator` part, where `--indicator-x`, `--indicator-y`, `--indicator-inline-size` and `--indicator-block-size` reach it.
54812
55254
  *
55255
+ * ## Methods
55256
+ *
55257
+ * Methods that can be called to access component functionality.
55258
+ *
55259
+ * - `scrollToSection(id: string) => boolean`: Scrolls to the section with this id, as a press on its link does, with
55260
+ * `behavior`, and marks its link at once. The address and focus stay where
55261
+ * they are. Returns whether the outline has a link to that section.
55262
+ *
54813
55263
  * ## CSS Parts
54814
55264
  *
54815
55265
  * Custom selectors for styling elements within the component.
@@ -55598,7 +56048,9 @@ export type CustomElements = {
55598
56048
  *
55599
56049
  * It opens on click and from a command. `command="--show"` and the related
55600
56050
  * commands work as they do on `Dialog` and `Drawer`, so a button anywhere on
55601
- * the page can open the popover with no script.
56051
+ * the page can open the popover with no script. From its first press, a
56052
+ * button that opens it this way says whether the popover is open: a Helix
56053
+ * button through `expanded`, and any other element with `aria-expanded`.
55602
56054
  *
55603
56055
  * **Opening moves focus into the panel**, to the first control in it, or to the
55604
56056
  * panel itself where it holds none, and closing from inside gives it back to
@@ -55608,8 +56060,12 @@ export type CustomElements = {
55608
56060
  * `modal` keeps `Tab` inside the panel while it is open and says so with
55609
56061
  * `aria-modal`, for a panel that has to be answered before the page goes on.
55610
56062
  * The rest of the page is hidden from screen readers with `aria-hidden` while
55611
- * it is open, so the virtual cursor stays in the panel too. Without it the
55612
- * popover does not trap focus.
56063
+ * it is open, so the virtual cursor stays in the panel too, and the page does
56064
+ * not scroll behind it. Without it the popover does not trap focus.
56065
+ *
56066
+ * A press outside closes the panel and leaves focus where the press put it.
56067
+ * Where it put focus nowhere, as a press on text or on the page's background
56068
+ * does, focus goes back to the trigger.
55613
56069
  *
55614
56070
  * The panel's name is `label` when you set it. Otherwise it is the first
55615
56071
  * heading in the panel, or the elements an `aria-labelledby` on the host names.
@@ -55625,10 +56081,17 @@ export type CustomElements = {
55625
56081
  * | Escape | Closes the panel and puts focus back on the trigger. |
55626
56082
  * | Tab, Shift+Tab | Moves through the controls in the panel. Leaving the panel and the trigger closes it. With `modal`, moves from the last control round to the first and from the first round to the last. |
55627
56083
  *
56084
+ * The panel opens against the trigger, or against the element `anchor` names,
56085
+ * such as a field beside the button that opens it. `offset` moves it away from
56086
+ * that element, `cross-offset` slides it along the side it is on,
56087
+ * `container-padding` keeps it that far from the window's edges, and
56088
+ * `flip="false"` keeps it on its side where the other side has more room.
56089
+ *
55628
56090
  * `arrow` draws a point on the panel's edge facing the trigger. The side the
55629
- * panel landed on is on the host as `:state(placed-top)` and its kin, and the
55630
- * trigger's width is on the panel as `--floating-anchor-inline-size`, for a
55631
- * panel as wide as its trigger:
56091
+ * panel landed on is on the host as `:state(placed-top)` and its kin, its
56092
+ * alignment along that side as `:state(aligned-start)` or
56093
+ * `:state(aligned-end)`, and the trigger's width is on the panel as
56094
+ * `--floating-anchor-inline-size`, for a panel as wide as its trigger:
55632
56095
  *
55633
56096
  * ```css
55634
56097
  * helix-popover::part(popover) {
@@ -55640,12 +56103,25 @@ export type CustomElements = {
55640
56103
  *
55641
56104
  * Component attributes and properties that can be applied to the element or by using JavaScript.
55642
56105
  *
56106
+ * - `anchor`: The element the panel opens against, where that is not the trigger: its
56107
+ * `id` in the same document or shadow root, or the element itself. Left
56108
+ * empty, the panel opens against the trigger, or against the button whose
56109
+ * command opened it.
55643
56110
  * - `arrow`: Draws a point on the panel's edge facing the trigger.
55644
56111
  *
55645
56112
  * Off by default, which is the house style: a panel that opens from its
55646
56113
  * trigger already reads as belonging to it.
56114
+ * - `container-padding`/`containerPadding`: How close to the window's edges the panel may come, in pixels, when it
56115
+ * slides, shrinks or moves to the other side to fit. Left unset, it slides
56116
+ * and shrinks to 8 pixels from an edge and moves to the other side only
56117
+ * once it would cross one.
56118
+ * - `cross-offset`/`crossOffset`: How far to slide the panel along the side it is on, in pixels: to the
56119
+ * right on the top or the bottom, and down on the left or the right.
55647
56120
  * - `fallback-label`/`fallbackLabel`: The panel's name where nothing else names it: no `label`, no heading in
55648
56121
  * the panel, and no `aria-labelledby` on the host.
56122
+ * - `flip`: Whether the panel moves to the other side of the trigger when its own
56123
+ * side has no room. On by default. Write `flip="false"` to keep it on its
56124
+ * side, where it shrinks to fit, as React Aria's `shouldFlip` turns off.
55649
56125
  * - `label`: The panel's name, read by screen readers. Left empty, the first heading in
55650
56126
  * the panel names it, and then `fallback-label`.
55651
56127
  * - `modal`: Keeps `Tab` inside the panel while it is open, marks the panel
@@ -55743,6 +56219,8 @@ export type CustomElements = {
55743
56219
  *
55744
56220
  * These can be used to apply styling when a component is in a given state.
55745
56221
  *
56222
+ * - `aligned-end`: While the panel is aligned to the end of the side it sits on.
56223
+ * - `aligned-start`: While the panel is aligned to the start of the side it sits on.
55746
56224
  * - `entering`: From the moment the panel shows until its entrance has finished.
55747
56225
  * - `exiting`: From the moment the panel hides until its exit has finished.
55748
56226
  * - `open`: While the popover is open.
@@ -57338,7 +57816,7 @@ export type CustomElements = {
57338
57816
  * | Down, Enter, Space | Opens the list on the chosen option, or the first. |
57339
57817
  * | Up | Opens the list on the chosen option, or the last. |
57340
57818
  * | Home, End | Opens the list on the first or the last option. |
57341
- * | Left, Right | Chooses the option before or after the chosen one without opening, as React Aria's Select does, in either direction of text. |
57819
+ * | Left, Right | Chooses the option before or after the chosen one without opening, as React Aria's Select does. On a right-to-left page Left chooses the one after. |
57342
57820
  * | A letter or a word | Chooses the option whose words start with what you typed, as a native `<select>` does. With `multiple`, opens the list on it. |
57343
57821
  *
57344
57822
  * In the open list, which is a `Listbox`:
@@ -58753,7 +59231,11 @@ export type CustomElements = {
58753
59231
  * back to the position where the collapsing gesture began. A drag records that position
58754
59232
  * on press, and every other way of collapsing records it in `settle`.
58755
59233
  * `collapsed-size` keeps a sliver of the pane visible, such as a tab strip.
58756
- * Collapsing overrides `min` and `max`.
59234
+ * Collapsing overrides `min` and `max`. `collapsible` says which panes can be
59235
+ * collapsed at all, as Zag's panels each say.
59236
+ *
59237
+ * `min` is the least the start pane keeps and `end-min` the least the end pane
59238
+ * keeps, each a percentage or a CSS length such as `16rem`.
58757
59239
  *
58758
59240
  * Set `primary` to the pane that keeps its size when the splitter's own size
58759
59241
  * changes, such as a sidebar beside a window being resized. The other pane
@@ -58774,7 +59256,7 @@ export type CustomElements = {
58774
59256
  * | Left, Right | Moves a side-by-side divider by `step`. On a right-to-left page, Left moves it toward the end. |
58775
59257
  * | Up, Down | Moves a stacked divider by `step`. |
58776
59258
  * | Home, End | Moves the divider to its bounds. |
58777
- * | Enter | Collapses the start pane, and opens it again. |
59259
+ * | Enter | Collapses the start pane, or the end pane where `collapsible="end"`, and opens it again. |
58778
59260
  * | F6 | Moves focus from one pane to the first control in the other, and from the divider to the start pane. |
58779
59261
  *
58780
59262
  * ## Attributes & Properties
@@ -58804,6 +59286,12 @@ export type CustomElements = {
58804
59286
  * that should survive its own collapse says how much of itself to keep, and
58805
59287
  * only whoever put it there knows that, which is the same reason `min` is a
58806
59288
  * consumer's to set.
59289
+ * - `collapsible`: Which panes can be collapsed, as Zag's panels each take `collapsible`:
59290
+ * `start`, `end`, `both`, or `none`. A pane that cannot be collapsed stops
59291
+ * at the edge without shutting. `Enter` collapses the end pane where only
59292
+ * the end pane can be collapsed, and the start pane otherwise.
59293
+ *
59294
+ * Unset is `both`, and the attribute stays absent until you write it.
58807
59295
  * - `corner-label`/`cornerLabel`: The name of the handle where two dividers cross, read by screen readers.
58808
59296
  * - `corner-value-label`/`cornerValueLabel`: What the handle where two dividers cross says it is set to, both dividers
58809
59297
  * at once: `{across}` is where the divider that runs down stands, and
@@ -58814,6 +59302,11 @@ export type CustomElements = {
58814
59302
  * these words are the whole of where it is.
58815
59303
  * - `default-collapsed`/`defaultCollapsed`: Which pane starts shut, when `collapsed` is not set.
58816
59304
  * - `default-position`/`defaultPosition`: Where the divider starts, when `position` is not set.
59305
+ * - `end-min`/`endMin`: The least the end pane keeps, in the units `min` takes: a percentage, or
59306
+ * a CSS length such as `16rem` resolved against the splitter's box. The
59307
+ * divider stops that far from the end, whatever `max` allows, so `min` and
59308
+ * `end-min` hold a minimum for each pane, as Zag's panels each take
59309
+ * `minSize`.
58817
59310
  * - `label`: The divider's name, read by screen readers.
58818
59311
  *
58819
59312
  * An `aria-label` or `aria-labelledby` on the host names the divider too,
@@ -60891,7 +61384,8 @@ export type CustomElements = {
60891
61384
  * not disabled. `selection-behavior="replace"` selects the tag a reader
60892
61385
  * presses or moves to alone, as a file list does, and Control or Command
60893
61386
  * with a press or Space adds or takes out one tag. `disallow-empty-selection`
60894
- * keeps one tag selected once one is. `value` holds the
61387
+ * keeps one tag selected once one is, and Escape lets go of the selection
61388
+ * otherwise. `value` holds the
60895
61389
  * selected tags' values, separated by commas, and a change asks with
60896
61390
  * `helix-before-change` and tells with `change`. Enter on a tag with an
60897
61391
  * `href` follows its link. A `disabled` tag is passed over. A selected tag
@@ -60909,6 +61403,12 @@ export type CustomElements = {
60909
61403
  * Where only disabled tags are left, the first of them holds the tab stop and
60910
61404
  * takes focus, so the reader stays in the set.
60911
61405
  *
61406
+ * **Typing new tags.** A field where people type tags and press Enter to add
61407
+ * each one is Combobox with `multiple` and `allows-custom-value`, or
61408
+ * `creatable` to ask first with `helix-create`. It draws each value as a tag,
61409
+ * Backspace on the empty field removes the last one, and the arrow keys move
61410
+ * between them.
61411
+ *
60912
61412
  * ## Attributes & Properties
60913
61413
  *
60914
61414
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -61011,6 +61511,12 @@ export type CustomElements = {
61011
61511
  * selected. Its remove button leaves the tab order there, Delete and Backspace
61012
61512
  * doing its job from the row.
61013
61513
  *
61514
+ * **Styling a tag by what is happening to it.** `:state(selected)` while it is
61515
+ * selected, `:state(focus-visible)` while its cell shows keyboard focus,
61516
+ * `[disabled]` while it is out of reach, and the host's own `:hover` and
61517
+ * `:active` under the pointer, as React Aria's `data-hovered` and
61518
+ * `data-pressed` are.
61519
+ *
61014
61520
  * ## Attributes & Properties
61015
61521
  *
61016
61522
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -61103,6 +61609,7 @@ export type CustomElements = {
61103
61609
  *
61104
61610
  * These can be used to apply styling when a component is in a given state.
61105
61611
  *
61612
+ * - `focus-visible`: The tag's cell has keyboard focus that the browser shows, in a `Tag.Group`.
61106
61613
  * - `selected`: The tag is selected in a `Tag.Group` that selects.
61107
61614
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
61108
61615
  */
@@ -61319,6 +61826,10 @@ export type CustomElements = {
61319
61826
  * along, so the two writes a consumer would make in sequence do not compose
61320
61827
  * into the range they asked for. The platform has this method for that reason
61321
61828
  * and so does this.
61829
+ * - `setRangeText(replacement: string, start?: number, end?: number, selectMode?: SelectionMode) => void`: Replaces a range of the text, as the native method does: the selection
61830
+ * where `start` and `end` are left out, and `selectMode` says what is
61831
+ * selected after. It sends no event, as the native method sends none.
61832
+ * - `select() => void`: Selects everything in the field.
61322
61833
  * - `focus(options?: FocusOptions) => void`: Puts the caret in the field, as a label pointing at it would.
61323
61834
  * - `requestValue(next: string) => boolean`: Requests a new value, and returns whether the change was applied.
61324
61835
  *
@@ -62103,6 +62614,17 @@ export type CustomElements = {
62103
62614
  * imperatively later, and nothing is hydrating by then.
62104
62615
  *
62105
62616
  * Here rather than on each control.
62617
+ * - `timeContent`: What each time in the list shows: a function given the time as `HH:mm`,
62618
+ * or `HH:mm:ss` with `seconds`, and the time as the row writes it, that
62619
+ * returns text, an element or a Lit template.
62620
+ *
62621
+ * For the seats left at a time, or a caption under it, as React Aria's
62622
+ * `ListBoxItem` takes children. Content with `slot="start"`, `slot="end"`
62623
+ * or `slot="description"` goes to that slot of the row, and a description
62624
+ * is read after the time. The row is still named by the written time, and
62625
+ * typeahead still finds it by that. Return the written time with your
62626
+ * content where it should still show. A property only, there being no way
62627
+ * to write a function in markup. The wheels draw their own figures. (property only)
62106
62628
  * - `valueAsDate`: The value as a `Date` on 1 January 1970 UTC, or `null` while there is no time.
62107
62629
  *
62108
62630
  * The platform's own pair on `<input type="time">`, epoch day included: a time
@@ -62379,7 +62901,9 @@ export type CustomElements = {
62379
62901
  * hours ago", from `datetime`, where the `time` slot is empty. The words move
62380
62902
  * on as they go stale, "3 hours ago" becoming "4 hours ago", with one wakeup
62381
62903
  * shared by every reading on the page, as `FormatDate` keeps its own. They are
62382
- * in the language of the page, or of the nearest `lang`.
62904
+ * in the language of the page, or of the nearest `lang`. The whole date and
62905
+ * time is the reading's `title`, so a pointer resting on "3 hours ago" shows
62906
+ * when it was, and a screen reader reads it as the description.
62383
62907
  *
62384
62908
  * Each entry draws the connector line that arrives at it and hides it when it
62385
62909
  * is the first entry, using `:host(:first-child)`. This needs no index, no
@@ -62493,11 +63017,20 @@ export type CustomElements = {
62493
63017
  * Write the entries in the order the events happened, oldest or newest first,
62494
63018
  * and the layout only moves where they are drawn.
62495
63019
  *
63020
+ * **A feed that loads more entries sets `loading` while it fetches.** The
63021
+ * timeline is busy, and an entry after the last says "Loading more"
63022
+ * (`loading-label`, or your own content in the `loading` slot). Put a button
63023
+ * that asks for more after the timeline, and move focus to the first new
63024
+ * entry when they arrive.
63025
+ *
62496
63026
  * ## Attributes & Properties
62497
63027
  *
62498
63028
  * Component attributes and properties that can be applied to the element or by using JavaScript.
62499
63029
  *
62500
63030
  * - `label`: Accessible name for the timeline, for people who reach it out of context.
63031
+ * - `loading`: Marks the timeline as busy fetching more entries, and draws an entry
63032
+ * after the last that says so.
63033
+ * - `loading-label`/`loadingLabel`: The text of the entry drawn while `loading` is set, where the `loading` slot is empty.
62501
63034
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
62502
63035
  *
62503
63036
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -62524,11 +63057,19 @@ export type CustomElements = {
62524
63057
  * Areas where markup can be added to the component.
62525
63058
  *
62526
63059
  * - `(default)`: The entries, and any groups of them.
63060
+ * - `loading`: Content for the entry after the last while `loading` is set. Falls back to `loading-label`.
63061
+ *
63062
+ * ## CSS Parts
63063
+ *
63064
+ * Custom selectors for styling elements within the component.
63065
+ *
63066
+ * - `loading`: The entry after the last while `loading` is set.
62527
63067
  *
62528
63068
  * ## CSS States
62529
63069
  *
62530
63070
  * These can be used to apply styling when a component is in a given state.
62531
63071
  *
63072
+ * - `loading`: While `loading` is set.
62532
63073
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
62533
63074
  */
62534
63075
  "helix-headless-timeline": Partial<
@@ -63413,6 +63954,9 @@ export type CustomElements = {
63413
63954
  * describes a Helix component and leaves a plain element undescribed. In the
63414
63955
  * `for` form the tooltip itself is out of the accessibility tree while its
63415
63956
  * bubble is down, so you meet its words once, as the trigger's description.
63957
+ * A trigger whose name is already the tooltip's words, such as an icon button
63958
+ * named Settings under a tooltip reading Settings, is not described by them
63959
+ * again.
63416
63960
  *
63417
63961
  * The tooltip shows on hover and on focus. It hides on pointer leave, on blur,
63418
63962
  * on Escape, and when the trigger is activated. The pointer can move from the
@@ -65469,11 +66013,14 @@ export type CustomElements = {
65469
66013
  * | Page Down, Page Up | Moves by the number of items, or of lines in a grid, on screen. |
65470
66014
  * | A letter or a word | Moves to the next item whose text starts with what you typed. |
65471
66015
  * | Escape | Lets go of every chosen item, in a list with `selection-mode`. |
66016
+ * | Alt with Up or Down | In a `reorderable` list, moves the item a place. Alt with Home or End moves it to either end. |
65472
66017
  * | Tab | Moves into the focused row's own links and buttons, then out of the list. |
65473
66018
  *
65474
66019
  * An item that is not drawn is scrolled into view and focused, so a keyboard
65475
- * reaches the whole set. When the row holding the tab stop scrolls away, the
65476
- * stop moves to the first row on screen. Typing matches each item's
66020
+ * reaches the whole set. The row a reader last focused keeps the tab stop and
66021
+ * stays drawn when it scrolls away, so Tab and Shift+Tab come back to it, as
66022
+ * React Aria's collections do. In a list nobody has focused yet, the stop
66023
+ * moves to the first row on screen. Typing matches each item's
65477
66024
  * `text-field`, which is the first `data-field` of the row template by default,
65478
66025
  * or the item itself when it is a string or a number.
65479
66026
  *
@@ -65515,6 +66062,23 @@ export type CustomElements = {
65515
66062
  * the last item says "Loading more" (`loading-label`, or your own content in
65516
66063
  * the `loading` slot). `scrollToIndex` takes a reader to an item.
65517
66064
  *
66065
+ * **Moving items** is a separate import, `@fusion.dev/helix/virtual-list/reorder`,
66066
+ * as React Aria's drag and drop is. With it imported, `reorderable` lets a
66067
+ * reader move items in a list of one column without sections:
66068
+ *
66069
+ * - Alt with Up or Down moves the item the keys are on a place, and Alt with
66070
+ * Home or End to either end, as the APG's rearrangeable listbox does.
66071
+ * - A pointer drags a whole row. A press that does not travel is still a
66072
+ * press. The list scrolls near an edge, and an item far down a long set is
66073
+ * reached by dragging to the edge.
66074
+ * - A drop sends `helix-before-reorder`, which you can refuse, and then
66075
+ * `helix-reorder`, whose `keys` hold every item's key in the new order.
66076
+ * **You move the items**: set `items` to them in that order. The keys stay
66077
+ * on the item that moved.
66078
+ * - Each move is said in a region screen readers announce. The row being
66079
+ * dragged carries `data-dragging`, and the row a drop would land beside
66080
+ * `data-drop-before` or `data-drop-after`.
66081
+ *
65518
66082
  * **An empty list.** Set `empty-label`, or put your own content in the `empty`
65519
66083
  * slot, for a row shown when there are no items and none are loading, such as
65520
66084
  * "No messages yet" and a link to write one. Without either, an empty list
@@ -65593,6 +66157,12 @@ export type CustomElements = {
65593
66157
  * and scrolls it sideways: Left and Right move between items, the other
65594
66158
  * way round on a right-to-left page, and `estimate` is an item's width. A
65595
66159
  * grid always runs down.
66160
+ * - `reorderable`: Lets a reader move items, once `@fusion.dev/helix/virtual-list/reorder`
66161
+ * (or `@fusion.dev/helix-headless/virtual-list/reorder`) is imported: Alt
66162
+ * with an arrow moves the row the keys are on, and a pointer drags a row.
66163
+ * The list moves no item itself: you move your `items` on `helix-reorder`.
66164
+ * Without that import it does nothing, so a list that never moves items
66165
+ * carries none of the code. A list of one column, without sections.
65596
66166
  * - `section-field`/`sectionField`: The field of each item that names its section, as a key or a path of
65597
66167
  * keys. Set, the items are drawn in sections: a header, then the items, in
65598
66168
  * an element with the `group` role that the header names. A section starts
@@ -65655,8 +66225,10 @@ export type CustomElements = {
65655
66225
  *
65656
66226
  * - `change`: Fired once a press or a key has changed which items are selected, in a list with `selection-mode`.
65657
66227
  * - `helix-before-change`: Fired before a press or a key changes which items are selected, with the `value` it would leave. Cancelable.
66228
+ * - `helix-before-reorder`: Fired when an item is dropped at a new place, in a `reorderable` list with `@fusion.dev/helix/virtual-list/reorder` imported, with every key in the new order. Cancelable: cancel it to keep the item where it is.
65658
66229
  * - `helix-load-more`: Fired when a reader comes within one screen of the last item, once for each length of the set.
65659
66230
  * - `helix-range-change`: Fired when the items on screen change, with the new `first` and `last`, which `range` also holds.
66231
+ * - `helix-reorder`: Fired after `helix-before-reorder` when nobody canceled it. Set `items` to the order in `keys`. Cancelable: cancel it to say the move did not happen.
65660
66232
  *
65661
66233
  * ## Slots
65662
66234
  *
@@ -67728,10 +68300,18 @@ export type CustomElementsSolidJs = {
67728
68300
  * a named `group`, and the toolbar's own arrow keys walk its buttons, so a
67729
68301
  * reader meets one toolbar. Under `single` it is a `radiogroup` either way.
67730
68302
  *
68303
+ * **Disabled.** `disabled` on the group disables every button in it, Helix
68304
+ * and native alike, and says so on the group with `aria-disabled`, as React
68305
+ * Aria's `isDisabled` does. A button disabled on its own stays disabled when
68306
+ * the group is enabled again, and a button that leaves the group gets back
68307
+ * what it said for itself.
68308
+ *
67731
68309
  * ## Attributes & Properties
67732
68310
  *
67733
68311
  * Component attributes and properties that can be applied to the element or by using JavaScript.
67734
68312
  *
68313
+ * - `disabled`: Disables every button in the group, and says so on the group with
68314
+ * `aria-disabled`. Reflected, so a stylesheet can select on it.
67735
68315
  * - `disallow-empty-selection`/`disallowEmptySelection`: Keeps at least one button pressed once one is, as React Aria's
67736
68316
  * `disallowEmptySelection`: a press that would leave none pressed is
67737
68317
  * refused.
@@ -67766,6 +68346,8 @@ export type CustomElementsSolidJs = {
67766
68346
  *
67767
68347
  * The attribute is the seed, and a press changes the property, which does
67768
68348
  * not reflect, as a native control's `value` does not.
68349
+ * - `values`: The pressed values as a list, in a selection mode, and an empty list
68350
+ * otherwise. Written, it presses exactly those buttons. (property only)
67769
68351
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
67770
68352
  *
67771
68353
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -68628,6 +69210,8 @@ export type CustomElementsSolidJs = {
68628
69210
  * Third", rather than with a comma this component chose.
68629
69211
  * - `linked-label`/`linkedLabel`: The text read with a card that has connections both ways. `{leadsTo}` is
68630
69212
  * `leads-to-label` and `{comesFrom}` is `comes-from-label`, each filled in.
69213
+ * - `loading`: Marks the board as busy while its document arrives: the board is
69214
+ * `aria-busy`, and the `loading` slot is shown.
68631
69215
  * - `moved-label`/`movedLabel`: What screen readers hear after a key moves a card, with `{name}` for the
68632
69216
  * card and `{x}` and `{y}` for where it now is, in the document's units.
68633
69217
  *
@@ -68868,6 +69452,7 @@ export type CustomElementsSolidJs = {
68868
69452
  * - `footer`: Content below the board.
68869
69453
  * - `fullscreen-icon`: Replaces the glyph inside the fullscreen button.
68870
69454
  * - `header`: Content above the board.
69455
+ * - `loading`: Content shown while `loading` is set, such as a progress bar while the document arrives.
68871
69456
  * - `pan-down-icon`: Replaces the glyph inside the pan down button.
68872
69457
  * - `pan-end-icon`: Replaces the glyph inside the button that pans toward the end of a line of text.
68873
69458
  * - `pan-start-icon`: Replaces the glyph inside the button that pans toward the start of a line of text.
@@ -68990,6 +69575,7 @@ export type CustomElementsSolidJs = {
68990
69575
  * - `fullscreen`: While the board fills the screen.
68991
69576
  * - `holding`: An item picked up with a click follows the pointer until the next press puts it down.
68992
69577
  * - `idle`: The user has been still for `idle-delay` milliseconds. The board's own controls stay; select on it to hide chrome of your own.
69578
+ * - `loading`: While `loading` is set.
68993
69579
  * - `pressing`: While a press on the board, its cards or its connections is under way.
68994
69580
  * - `sharing`: The page keeps the plain wheel and one finger, with `gestures="cooperative"` or while a board with `gestures="activate"` waits to be pressed.
68995
69581
  * - `using`: A board with `gestures="activate"` has been pressed and has the gestures.
@@ -69445,6 +70031,11 @@ export type CustomElementsSolidJs = {
69445
70031
  * Sending an empty required composer counts as trying. Tabbing past an empty
69446
70032
  * composer marks nothing.
69447
70033
  *
70034
+ * **`feedback` is a message of your own about the draft**, such as one your
70035
+ * server sent back. While it is set, the composer is invalid at once, does
70036
+ * not send or submit, shows the message under the field, and a screen reader
70037
+ * hears it as it appears. Clear it to let the draft go.
70038
+ *
69448
70039
  * **`typing` says whether the user is writing**, and `helix-typing` is sent
69449
70040
  * each time it changes: when they start, and when they send or stop for
69450
70041
  * `typing-timeout` milliseconds. Pass it on to show "is typing" to the other
@@ -69454,6 +70045,9 @@ export type CustomElementsSolidJs = {
69454
70045
  *
69455
70046
  * Component attributes and properties that can be applied to the element or by using JavaScript.
69456
70047
  *
70048
+ * - `feedback`: A message about the draft, shown under the field. While set, the composer
70049
+ * is invalid, does not send, and does not submit, as a field's `feedback`
70050
+ * does, and the message is announced as it appears.
69457
70051
  * - `label`: The field's name, read by screen readers.
69458
70052
  * - `maxlength`/`maxLength`: The most characters a draft can have. The field stops taking more.
69459
70053
  * - `minlength`/`minLength`: The fewest characters a draft can have, once the reader has written in
@@ -69602,6 +70196,7 @@ export type CustomElementsSolidJs = {
69602
70196
  *
69603
70197
  * - `composer`: The whole composer.
69604
70198
  * - `end`: The box around the `end` slot.
70199
+ * - `feedback`: The `feedback` message, under the field while it is set.
69605
70200
  * - `field`: The text field.
69606
70201
  * - `mark`: The icon inside the send button.
69607
70202
  * - `send`: The send button.
@@ -69612,7 +70207,7 @@ export type CustomElementsSolidJs = {
69612
70207
  *
69613
70208
  * These can be used to apply styling when a component is in a given state.
69614
70209
  *
69615
- * - `invalid`: The draft fails `required`, `minlength`, `maxlength`, or a custom error, and the reader has tried to send or submit it, or edited the field and left it.
70210
+ * - `invalid`: The draft fails `required`, `minlength`, `maxlength`, or a custom error, and the reader has tried to send or submit it, or edited the field and left it. Or `feedback` is set.
69616
70211
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
69617
70212
  */
69618
70213
  "helix-headless-chat-composer": Partial<
@@ -69748,6 +70343,13 @@ export type CustomElementsSolidJs = {
69748
70343
  * `loading` while you fetch, then prepend the older turns. The turn the user
69749
70344
  * was reading stays in place on screen.
69750
70345
  *
70346
+ * The transcript is a `log`, the role for content added in order where the
70347
+ * newest matters most, and it answers the APG feed's keys. The `feed` role
70348
+ * reads its articles as a list from the top, with no newest end to stay
70349
+ * pinned to, so the log keeps the role a conversation has. While `loading` is
70350
+ * set or older turns load, the log carries `aria-busy`, as the APG asks of a
70351
+ * feed.
70352
+ *
69751
70353
  * The log is `aria-live="off"`. A separate status region announces each new
69752
70354
  * turn once, when it has finished arriving. It skips the user's own turns
69753
70355
  * unless they failed to send, turns loaded as history, and the turns already
@@ -69760,6 +70362,12 @@ export type CustomElementsSolidJs = {
69760
70362
  * conversations. `turns` draws a long
69761
70363
  * transcript one window at a time, so the log needs a block size of its own.
69762
70364
  *
70365
+ * The log scrolls on this tier. It carries `data-scroller`, and `core` ships
70366
+ * `[data-scroller] { overflow: auto }` into every shadow root, so pinning,
70367
+ * history and the window work with no stylesheet. You still need to give the
70368
+ * log a block size, such as `helix-headless-chat::part(log) { block-size:
70369
+ * 20rem }`.
70370
+ *
69763
70371
  * **A conversation is built from three elements.** The chat holds the
69764
70372
  * transcript, a `Chat.Message` stands for each turn, and a `Chat.Composer` sits
69765
70373
  * in the `composer` slot. When the user sends, `helix-send` reaches the chat:
@@ -69776,7 +70384,9 @@ export type CustomElementsSolidJs = {
69776
70384
  * turn says its place, such as "3 of 40", windowed or not. The transcript is
69777
70385
  * a tab stop while it holds a turn, and the turn a reader moved to is one
69778
70386
  * too. Moving to an older turn unpins a transcript that scrolls and scrolls
69779
- * the turn into view, and moving to the newest pins it again.
70387
+ * the turn into view, and moving to the newest pins it again. When the turn
70388
+ * holding focus is removed, focus moves to the turn that took its place, or to
70389
+ * the one before it where it was the last.
69780
70390
  *
69781
70391
  * | Key | What it does |
69782
70392
  * |---|---|
@@ -69955,7 +70565,7 @@ export type CustomElementsSolidJs = {
69955
70565
  * - `indicator`: The three dots before the words that say who is typing, which the styled tier animates as a message's are. Hidden from screen readers.
69956
70566
  * - `live`: The region where screen readers announce each turn once it has arrived.
69957
70567
  * - `loading`: Shown while the history loads.
69958
- * - `log`: The transcript, which scrolls.
70568
+ * - `log`: The transcript, which scrolls. On this tier, it needs only a block size.
69959
70569
  * - `message`: The message drawn for a turn from `turns`, forwarded whole.
69960
70570
  * - `message-actions`: The controls on a turn from `turns`, beside its time.
69961
70571
  * - `message-avatar`: The avatar box of a turn from `turns`.
@@ -70902,7 +71512,8 @@ export type CustomElementsSolidJs = {
70902
71512
  *
70903
71513
  * The trigger and ArrowDown open the panel with focus in the square. Tab moves
70904
71514
  * between the panel's controls without leaving it, and Escape closes it and
70905
- * returns focus to the field.
71515
+ * returns focus to the control that opened it: the trigger after a press, and
71516
+ * the field after ArrowDown.
70906
71517
  *
70907
71518
  * The component sets `--color-input-swatch`, so do not set it yourself. It
70908
71519
  * holds the resolved color, so the styled tier can paint the swatch without
@@ -72343,7 +72954,17 @@ export type CustomElementsSolidJs = {
72343
72954
  * The button is named `label`, or the host's `aria-label`, and its name
72344
72955
  * changes to `copied-label` or `error-label` for the moment after a press. The
72345
72956
  * same words are said in a live region, so a screen reader hears the result,
72346
- * and the tooltip shows them.
72957
+ * and the tooltip shows them. The tooltip does not also describe the button,
72958
+ * since its words are the button's name.
72959
+ *
72960
+ * **The tooltip.** It shows the name on hover and focus and the result after a
72961
+ * press. `tooltip="copy"` shows it only for the result, and `tooltip="none"`
72962
+ * draws none, as Web Awesome's copy button offers. `tooltip-placement` is the
72963
+ * side it prefers, and it moves to another side where that one does not fit.
72964
+ *
72965
+ * **Words on the button.** `show-label` draws the name beside the icon, and
72966
+ * the result in its place after a press. The button is as wide as the longest
72967
+ * of the three, so a press does not resize it.
72347
72968
  *
72348
72969
  * ## Attributes & Properties
72349
72970
  *
@@ -72366,6 +72987,15 @@ export type CustomElementsSolidJs = {
72366
72987
  * Defaulted rather than left empty. An icon-only control must be named, and
72367
72988
  * the name of this one is not a judgment call: every copy button in the
72368
72989
  * world is called Copy. A consumer with a better word still sets it.
72990
+ * - `show-label`/`showLabel`: Draws the name as words beside the icon, and the result in their place
72991
+ * after a press. The button stays as wide as the longest of them.
72992
+ * - `tooltip`: When the tooltip shows: `full` on hover and focus and after a press,
72993
+ * `copy` only after a press, to show the result, and `none` never, for a
72994
+ * button whose result shows another way, such as under `show-label`.
72995
+ *
72996
+ * Unset is `full`, and the attribute stays absent until you write it.
72997
+ * - `tooltip-placement`/`tooltipPlacement`: The side the tooltip prefers. It moves to another side where this one
72998
+ * does not fit.
72369
72999
  * - `value`: The text copied to the clipboard.
72370
73000
  *
72371
73001
  * It replaces `Button.value`, the submit value: a copy button never submits,
@@ -72527,6 +73157,7 @@ export type CustomElementsSolidJs = {
72527
73157
  * - `live`: The live region that says `copied-label` or `error-label` after a press, and `pending-label` when the button becomes pending under focus. It is rendered from the first time it says anything.
72528
73158
  * - `mark`: The clipboard icon, and the confirmation icon that replaces it.
72529
73159
  * - `spinner`: The ring a pending button turns, an empty element the styled button draws over the icon. It is rendered only while the button is pending.
73160
+ * - `text`: The words beside the icon, under `show-label`. It holds all three, `label`, `copied-label` and `error-label`, with all but the current one hidden.
72530
73161
  * - `tooltip`: The tooltip bubble, forwarded from the tooltip inside the button.
72531
73162
  * - `tooltip-arrow`: The tooltip's arrow, which points at the button.
72532
73163
  * - `tooltip-arrow-bottom`: The arrow while the bubble is below the button, on the bubble's top edge. Set together with `tooltip-arrow`.
@@ -72865,6 +73496,10 @@ export type CustomElementsSolidJs = {
72865
73496
  * Off by default. Windowing costs a scroll listener, a measurement per row
72866
73497
  * drawn, and a `block-size` on the scrolling box, and a table of twenty rows
72867
73498
  * should pay none of them.
73499
+ *
73500
+ * While windowed, the `table` part scrolls on this tier: it carries
73501
+ * `data-scroller`, and `core` ships `[data-scroller] { overflow: auto }` into
73502
+ * every shadow root. You still need to give it a block size.
72868
73503
  * - `empty-text`/`emptyText`: The text shown and announced when there are no rows and none are loading.
72869
73504
  * - `loading`: Whether the rows are still loading.
72870
73505
  *
@@ -73027,7 +73662,7 @@ export type CustomElementsSolidJs = {
73027
73662
  * - `select`: The cell that holds a row's checkbox.
73028
73663
  * - `select-all`: The heading that holds the checkbox that selects every row.
73029
73664
  * - `select-selected`: Added to `select` in a selected row.
73030
- * - `table`: The grid.
73665
+ * - `table`: The grid. While `windowed`, the box that scrolls, which needs only a block size on this tier.
73031
73666
  * - `toggle`: The mark in a row header that a press opens and closes its row by, in a tree grid.
73032
73667
  * - `toggle-mark`: The caret in `toggle`. It points along the line while the row is closed and down while it is open.
73033
73668
  * - `toggle-open`: Added to `toggle` while its row is open.
@@ -74779,6 +75414,10 @@ export type CustomElementsSolidJs = {
74779
75414
  * <helix-headless-drawer id="nav">…</helix-headless-drawer>
74780
75415
  * ```
74781
75416
  *
75417
+ * From its first press, a button that opens the drawer this way says whether
75418
+ * the drawer is open: a Helix button through `expanded`, and any other
75419
+ * element with `aria-expanded`.
75420
+ *
74782
75421
  * ## Attributes & Properties
74783
75422
  *
74784
75423
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -76840,6 +77479,9 @@ export type CustomElementsSolidJs = {
76840
77479
  * - `linked-both-label`/`linkedBothLabel`: How a note linked both to and from the selected one is described, with `{note}`.
76841
77480
  * - `linked-from-label`/`linkedFromLabel`: How a note the selected one links to is described, with `{note}`, the selected note's name.
76842
77481
  * - `links-to-label`/`linksToLabel`: How a note that links to the selected one is described, with `{note}`.
77482
+ * - `loading`: Marks the graph as busy while its notes arrive: the list is `aria-busy`,
77483
+ * and the panel says so where it holds no notes yet.
77484
+ * - `loading-label`/`loadingLabel`: What the panel says while `loading` is set and the list holds no notes.
76843
77485
  * - `moved-down-label`/`movedDownLabel`: What screen readers hear once the drawing has moved down, after `moved()`.
76844
77486
  * - `moved-left-label`/`movedLeftLabel`: What screen readers hear once the drawing has moved left, after `moved()`.
76845
77487
  * - `moved-right-label`/`movedRightLabel`: What screen readers hear once the drawing has moved right, after `moved()`.
@@ -76948,6 +77590,15 @@ export type CustomElementsSolidJs = {
76948
77590
  * - `hiddenGroups`: The groups turned off in the legend, by name, whose notes neither the drawing nor the list shows. A property, never an attribute. (property only)
76949
77591
  * - `links`: The links between notes, each from `source` to `target`. A property, never an attribute. (property only)
76950
77592
  * - `nodes`: The notes. A property, never an attribute. (property only)
77593
+ * - `noteContent`: What each note's row in the list shows in place of its name: a function
77594
+ * given the note that returns text, an element or a Lit template.
77595
+ *
77596
+ * For an icon by its kind, or a date under its name, as React Aria's
77597
+ * `ListBoxItem` takes children. The row is still named by the note's name,
77598
+ * which typeahead and the search find it by, and described by how it stands
77599
+ * to the selected note. Return the name with your content where it should
77600
+ * still show. A property only, there being no way to write a function in
77601
+ * markup. (property only)
76951
77602
  * - `ready`: Whether the graph has been drawn whole. For code that runs after `helix-graph-ready`. (property only) (readonly)
76952
77603
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
76953
77604
  *
@@ -76994,6 +77645,7 @@ export type CustomElementsSolidJs = {
76994
77645
  * - `footer`: Content below the graph.
76995
77646
  * - `fullscreen-icon`: Replaces the glyph inside the fullscreen button.
76996
77647
  * - `header`: Content above the graph.
77648
+ * - `loading`: What the panel shows while `loading` is set and the list holds no notes. Defaults to `loading-label`.
76997
77649
  * - `pan-down-icon`: Replaces the glyph inside the pan down button.
76998
77650
  * - `pan-end-icon`: Replaces the glyph inside the button that pans toward the end of a line of text.
76999
77651
  * - `pan-start-icon`: Replaces the glyph inside the button that pans toward the start of a line of text.
@@ -77067,6 +77719,7 @@ export type CustomElementsSolidJs = {
77067
77719
  * - `legend-swatch`: The mark in a group's color, before its name.
77068
77720
  * - `list`: The list of notes, which draws only the rows in view.
77069
77721
  * - `live`: What screen readers hear: how many notes there are when a search or the legend changes it, and which way the drawing went after a key or a control moved it.
77722
+ * - `loading`: The box in place of the list while `loading` is set and it holds no notes, holding the `loading` slot.
77070
77723
  * - `note`: One note in the list.
77071
77724
  * - `note-cursor`: The note the keyboard is on in the list.
77072
77725
  * - `note-linked`: A note linked to or from the selected one.
@@ -77094,6 +77747,7 @@ export type CustomElementsSolidJs = {
77094
77747
  * - `empty`: The list holds no notes: the graph has none, or a search or the groups hid them all.
77095
77748
  * - `fullscreen`: The graph fills the screen.
77096
77749
  * - `idle`: The user has been still long enough for the header and footer to fade.
77750
+ * - `loading`: While `loading` is set.
77097
77751
  * - `local`: The drawing shows the selected note's local graph, with `depth`.
77098
77752
  * - `panel-open`: A graph with `no-panel` has the search and the list open over the drawing.
77099
77753
  * - `ready`: The graph has been drawn whole, after `helix-graph-ready`.
@@ -79669,7 +80323,8 @@ export type CustomElementsSolidJs = {
79669
80323
  * itself.
79670
80324
  * - `value`: The selected rows' values, separated by commas with no spaces, such as `a,c`, in a list that selects.
79671
80325
  *
79672
- * Set it to start with rows selected. A row's value is its `value`, or its
80326
+ * A press or a key writes it in row order, as Data Table does, whatever
80327
+ * order the rows were chosen in. Set it to start with rows selected. A row's value is its `value`, or its
79673
80328
  * words where it has none.
79674
80329
  * - `rows`: The rows the list holds, in order. (property only) (readonly)
79675
80330
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -81790,6 +82445,8 @@ export type CustomElementsSolidJs = {
81790
82445
  * These can be used to apply styling when a component is in a given state.
81791
82446
  *
81792
82447
  * - `checked`: The row is checked.
82448
+ * - `disabled`: The row is disabled.
82449
+ * - `expanded`: Under `submenus="flyout"`, the row's submenu is open beside it.
81793
82450
  * - `highlighted`: In a menu with `filterable`, the arrow keys or the pointer reached the row while focus stays in the filter field.
81794
82451
  * - `submenu-mark`: Under `submenus="flyout"`, a row in this row's submenu can be ticked or opens a submenu, so the submenu keeps its trailing column.
81795
82452
  * - `submenu-start`: Under `submenus="flyout"`, a row in this row's submenu has content before its label, so the submenu keeps its leading column.
@@ -81816,7 +82473,9 @@ export type CustomElementsSolidJs = {
81816
82473
  *
81817
82474
  * Submenus drill down by default. A submenu replaces the panel's content, and a
81818
82475
  * back row returns to the previous page. One panel stays inside a narrow
81819
- * window, and works on touch screens, which have no hover.
82476
+ * window, and works on touch screens, which have no hover. Focus follows a
82477
+ * mouse resting on a row in either mode, and a drilled page is a `menu` named
82478
+ * by the row that opened it.
81820
82479
  *
81821
82480
  * **`submenus="flyout"` opens each submenu in a panel of its own beside its
81822
82481
  * row**, as React Aria's `SubmenuTrigger` and Radix's `Sub` do. Resting the
@@ -81850,6 +82509,11 @@ export type CustomElementsSolidJs = {
81850
82509
  * trigger's width, for a menu as wide as its trigger:
81851
82510
  * `helix-menu::part(surface) { min-inline-size: var(--floating-anchor-inline-size) }`.
81852
82511
  *
82512
+ * **The choices in one place.** `checkedValues` holds the values of the rows
82513
+ * that are checked, anywhere in the menu, and setting it checks exactly
82514
+ * those rows, as React Aria's `selectedKeys` does. `change` is sent on the
82515
+ * menu when a reader's choice changes it.
82516
+ *
81853
82517
  * With `context`, the trigger is an area and the menu is its context menu: a
81854
82518
  * right-click, a long press, Shift+F10 or the menu key over the area opens it
81855
82519
  * at the pointer, or at the area's corner from the keyboard, as Radix's context
@@ -81872,7 +82536,8 @@ export type CustomElementsSolidJs = {
81872
82536
  * field: Up and Down Arrow move the highlight through the rows that are left,
81873
82537
  * Enter chooses the highlighted row, Right Arrow opens its submenu, Left Arrow
81874
82538
  * on a submenu goes back, and Escape clears the filter and then closes the
81875
- * menu. Home, End and the other keys move the caret and type. The field names
82539
+ * menu. A screen reader hears how many rows the filter keeps
82540
+ * (`results-label`). Home, End and the other keys move the caret and type. The field names
81876
82541
  * the highlighted row with `aria-activedescendant`, and the rows are a `menu`
81877
82542
  * after the field. Cancel `helix-filter` to keep every row
81878
82543
  * showing and narrow the rows yourself, such as by replacing them with rows
@@ -81912,6 +82577,9 @@ export type CustomElementsSolidJs = {
81912
82577
  * - `placement`: The side the menu opens on, when there is room.
81913
82578
  *
81914
82579
  * It moves if that side does not fit.
82580
+ * - `results-label`/`resultsLabel`: What a screen reader hears when the filter narrows the rows. `{count}` is
82581
+ * how many rows are left, written in the locale, and each language writes
82582
+ * the forms it has, as Listbox's `results-label` does.
81915
82583
  * - `submenus`: How a submenu opens. `drill` shows it in place of the page showing, with
81916
82584
  * a way back. `flyout` opens it in a panel of its own beside its row.
81917
82585
  * - `empty-text`/`emptyText`: The text shown and announced when there are no rows and none are loading.
@@ -81940,6 +82608,13 @@ export type CustomElementsSolidJs = {
81940
82608
  *
81941
82609
  * Absent, a row is kept where its words hold the filter, in any case. A
81942
82610
  * property only, there being no way to write a function in markup. (property only)
82611
+ * - `checkedValues`: The values of the choice rows that are checked, anywhere in the menu, in
82612
+ * document order.
82613
+ *
82614
+ * Set it to check exactly those rows and uncheck every other choice row, as
82615
+ * React Aria's `selectedKeys` controls a menu's selection from one place.
82616
+ * Each row keeps its own `checked` too, which this reads and writes. `change`
82617
+ * is sent on the menu when a reader's choice changes it. (property only)
81943
82618
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
81944
82619
  *
81945
82620
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -81965,6 +82640,7 @@ export type CustomElementsSolidJs = {
81965
82640
  *
81966
82641
  * Events that will be emitted by the component.
81967
82642
  *
82643
+ * - `change`: A reader's choice checked or unchecked rows. Read `checkedValues` for the rows that are checked now.
81968
82644
  * - `helix-before-close`: The menu is about to close. Cancelable: cancel it to keep it open.
81969
82645
  * - `helix-before-open`: The menu is about to open. Cancelable: cancel it to keep it closed.
81970
82646
  * - `helix-filter`: The text in the filter field changed, with the new text in `detail.value`. Cancelable: cancel it to keep every row showing and narrow the rows yourself.
@@ -81976,6 +82652,8 @@ export type CustomElementsSolidJs = {
81976
82652
  * Areas where markup can be added to the component.
81977
82653
  *
81978
82654
  * - `(default)`: The items.
82655
+ * - `empty`: What the menu shows when it has no items, for content richer than `empty-text`.
82656
+ * - `loading`: What the menu shows while its items load, for content richer than `loading-text`.
81979
82657
  * - `no-results`: What the menu shows when the filter keeps no rows, for content richer than `no-results-text`.
81980
82658
  * - `trigger`: The control that opens the menu, or with `context` the area a context menu opens over.
81981
82659
  *
@@ -82021,6 +82699,8 @@ export type CustomElementsSolidJs = {
82021
82699
  * These can be used to apply styling when a component is in a given state.
82022
82700
  *
82023
82701
  * - `drilled`: A submenu's page is showing, so content that is not a row can hide with the top page.
82702
+ * - `entering`: From the moment the panel shows until its entrance has finished.
82703
+ * - `exiting`: From the moment the panel hides until its exit has finished.
82024
82704
  * - `mark`: A row on the current page has a checkbox or a link, so every row keeps the trailing column.
82025
82705
  * - `open`: While the menu is open.
82026
82706
  * - `placed-bottom`: While the open panel sits below its trigger.
@@ -83986,6 +84666,22 @@ export type CustomElementsSolidJs = {
83986
84666
  * headings are far apart, none is in the band and no section is marked, and
83987
84667
  * when they are close together, several are in the band at once.
83988
84668
  *
84669
+ * **Several sections at once.** `marks="visible"` marks the link of every
84670
+ * section with part of it on screen, from the reading line to the bottom of
84671
+ * what the sections scroll in, as Zag's table of contents marks its active
84672
+ * ids. The mark then runs from the first of those links to the last, and
84673
+ * `marked` lists their ids in page order.
84674
+ *
84675
+ * **Going to a section from code.** `scrollToSection(id)` scrolls to the
84676
+ * section as a press on its link does, with `behavior`, and marks its link at
84677
+ * once.
84678
+ *
84679
+ * **Styling a link by its state.** Each link the outline finds carries
84680
+ * `data-depth`, its depth in the outline from `1`, nested lists and
84681
+ * `data-level` alike, and `aria-current="location"` while its section is
84682
+ * marked, so `a[aria-current]` and `a[data-depth="2"]` are the hooks for a
84683
+ * rule of yours.
84684
+ *
83989
84685
  * ## Attributes & Properties
83990
84686
  *
83991
84687
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -84015,6 +84711,9 @@ export type CustomElementsSolidJs = {
84015
84711
  * box the sections scroll in.
84016
84712
  * - `label`: The navigation's name, read by screen readers. A heading in the `heading`
84017
84713
  * slot names it in place of this.
84714
+ * - `marks`: Which links are marked. `reading` marks the one section being read, the
84715
+ * last whose heading has passed the reading line. `visible` marks every
84716
+ * section with part of it on screen, and the mark runs across their links.
84018
84717
  * - `offset`: How far below the top of the scroll container a heading counts as reached,
84019
84718
  * in pixels. The scroll container is the window or the panel the sections
84020
84719
  * scroll in.
@@ -84030,6 +84729,9 @@ export type CustomElementsSolidJs = {
84030
84729
  * writable property in this library that a component also writes is state a
84031
84730
  * consumer can own; this one cannot be, and saying so with the type is better
84032
84731
  * than saying it in a sentence nobody reads. (property only) (readonly)
84732
+ * - `marked`: The ids of the sections whose links are marked, in page order: the one
84733
+ * `current` names, or under `marks="visible"` every section on screen.
84734
+ * Read-only, for the reason `current` gives. (property only) (readonly)
84033
84735
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
84034
84736
  *
84035
84737
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -84065,6 +84767,14 @@ export type CustomElementsSolidJs = {
84065
84767
  * - `heading`: A heading above the links, such as "On this page". It names the navigation.
84066
84768
  * - `indicator`: A mark of your own, drawn inside the `indicator` part, where `--indicator-x`, `--indicator-y`, `--indicator-inline-size` and `--indicator-block-size` reach it.
84067
84769
  *
84770
+ * ## Methods
84771
+ *
84772
+ * Methods that can be called to access component functionality.
84773
+ *
84774
+ * - `scrollToSection(id: string) => boolean`: Scrolls to the section with this id, as a press on its link does, with
84775
+ * `behavior`, and marks its link at once. The address and focus stay where
84776
+ * they are. Returns whether the outline has a link to that section.
84777
+ *
84068
84778
  * ## CSS Parts
84069
84779
  *
84070
84780
  * Custom selectors for styling elements within the component.
@@ -84862,7 +85572,9 @@ export type CustomElementsSolidJs = {
84862
85572
  *
84863
85573
  * It opens on click and from a command. `command="--show"` and the related
84864
85574
  * commands work as they do on `Dialog` and `Drawer`, so a button anywhere on
84865
- * the page can open the popover with no script.
85575
+ * the page can open the popover with no script. From its first press, a
85576
+ * button that opens it this way says whether the popover is open: a Helix
85577
+ * button through `expanded`, and any other element with `aria-expanded`.
84866
85578
  *
84867
85579
  * **Opening moves focus into the panel**, to the first control in it, or to the
84868
85580
  * panel itself where it holds none, and closing from inside gives it back to
@@ -84872,8 +85584,12 @@ export type CustomElementsSolidJs = {
84872
85584
  * `modal` keeps `Tab` inside the panel while it is open and says so with
84873
85585
  * `aria-modal`, for a panel that has to be answered before the page goes on.
84874
85586
  * The rest of the page is hidden from screen readers with `aria-hidden` while
84875
- * it is open, so the virtual cursor stays in the panel too. Without it the
84876
- * popover does not trap focus.
85587
+ * it is open, so the virtual cursor stays in the panel too, and the page does
85588
+ * not scroll behind it. Without it the popover does not trap focus.
85589
+ *
85590
+ * A press outside closes the panel and leaves focus where the press put it.
85591
+ * Where it put focus nowhere, as a press on text or on the page's background
85592
+ * does, focus goes back to the trigger.
84877
85593
  *
84878
85594
  * The panel's name is `label` when you set it. Otherwise it is the first
84879
85595
  * heading in the panel, or the elements an `aria-labelledby` on the host names.
@@ -84889,10 +85605,17 @@ export type CustomElementsSolidJs = {
84889
85605
  * | Escape | Closes the panel and puts focus back on the trigger. |
84890
85606
  * | Tab, Shift+Tab | Moves through the controls in the panel. Leaving the panel and the trigger closes it. With `modal`, moves from the last control round to the first and from the first round to the last. |
84891
85607
  *
85608
+ * The panel opens against the trigger, or against the element `anchor` names,
85609
+ * such as a field beside the button that opens it. `offset` moves it away from
85610
+ * that element, `cross-offset` slides it along the side it is on,
85611
+ * `container-padding` keeps it that far from the window's edges, and
85612
+ * `flip="false"` keeps it on its side where the other side has more room.
85613
+ *
84892
85614
  * `arrow` draws a point on the panel's edge facing the trigger. The side the
84893
- * panel landed on is on the host as `:state(placed-top)` and its kin, and the
84894
- * trigger's width is on the panel as `--floating-anchor-inline-size`, for a
84895
- * panel as wide as its trigger:
85615
+ * panel landed on is on the host as `:state(placed-top)` and its kin, its
85616
+ * alignment along that side as `:state(aligned-start)` or
85617
+ * `:state(aligned-end)`, and the trigger's width is on the panel as
85618
+ * `--floating-anchor-inline-size`, for a panel as wide as its trigger:
84896
85619
  *
84897
85620
  * ```css
84898
85621
  * helix-popover::part(popover) {
@@ -84904,12 +85627,25 @@ export type CustomElementsSolidJs = {
84904
85627
  *
84905
85628
  * Component attributes and properties that can be applied to the element or by using JavaScript.
84906
85629
  *
85630
+ * - `anchor`: The element the panel opens against, where that is not the trigger: its
85631
+ * `id` in the same document or shadow root, or the element itself. Left
85632
+ * empty, the panel opens against the trigger, or against the button whose
85633
+ * command opened it.
84907
85634
  * - `arrow`: Draws a point on the panel's edge facing the trigger.
84908
85635
  *
84909
85636
  * Off by default, which is the house style: a panel that opens from its
84910
85637
  * trigger already reads as belonging to it.
85638
+ * - `container-padding`/`containerPadding`: How close to the window's edges the panel may come, in pixels, when it
85639
+ * slides, shrinks or moves to the other side to fit. Left unset, it slides
85640
+ * and shrinks to 8 pixels from an edge and moves to the other side only
85641
+ * once it would cross one.
85642
+ * - `cross-offset`/`crossOffset`: How far to slide the panel along the side it is on, in pixels: to the
85643
+ * right on the top or the bottom, and down on the left or the right.
84911
85644
  * - `fallback-label`/`fallbackLabel`: The panel's name where nothing else names it: no `label`, no heading in
84912
85645
  * the panel, and no `aria-labelledby` on the host.
85646
+ * - `flip`: Whether the panel moves to the other side of the trigger when its own
85647
+ * side has no room. On by default. Write `flip="false"` to keep it on its
85648
+ * side, where it shrinks to fit, as React Aria's `shouldFlip` turns off.
84913
85649
  * - `label`: The panel's name, read by screen readers. Left empty, the first heading in
84914
85650
  * the panel names it, and then `fallback-label`.
84915
85651
  * - `modal`: Keeps `Tab` inside the panel while it is open, marks the panel
@@ -85007,6 +85743,8 @@ export type CustomElementsSolidJs = {
85007
85743
  *
85008
85744
  * These can be used to apply styling when a component is in a given state.
85009
85745
  *
85746
+ * - `aligned-end`: While the panel is aligned to the end of the side it sits on.
85747
+ * - `aligned-start`: While the panel is aligned to the start of the side it sits on.
85010
85748
  * - `entering`: From the moment the panel shows until its entrance has finished.
85011
85749
  * - `exiting`: From the moment the panel hides until its exit has finished.
85012
85750
  * - `open`: While the popover is open.
@@ -86623,7 +87361,7 @@ export type CustomElementsSolidJs = {
86623
87361
  * | Down, Enter, Space | Opens the list on the chosen option, or the first. |
86624
87362
  * | Up | Opens the list on the chosen option, or the last. |
86625
87363
  * | Home, End | Opens the list on the first or the last option. |
86626
- * | Left, Right | Chooses the option before or after the chosen one without opening, as React Aria's Select does, in either direction of text. |
87364
+ * | Left, Right | Chooses the option before or after the chosen one without opening, as React Aria's Select does. On a right-to-left page Left chooses the one after. |
86627
87365
  * | A letter or a word | Chooses the option whose words start with what you typed, as a native `<select>` does. With `multiple`, opens the list on it. |
86628
87366
  *
86629
87367
  * In the open list, which is a `Listbox`:
@@ -88058,7 +88796,11 @@ export type CustomElementsSolidJs = {
88058
88796
  * back to the position where the collapsing gesture began. A drag records that position
88059
88797
  * on press, and every other way of collapsing records it in `settle`.
88060
88798
  * `collapsed-size` keeps a sliver of the pane visible, such as a tab strip.
88061
- * Collapsing overrides `min` and `max`.
88799
+ * Collapsing overrides `min` and `max`. `collapsible` says which panes can be
88800
+ * collapsed at all, as Zag's panels each say.
88801
+ *
88802
+ * `min` is the least the start pane keeps and `end-min` the least the end pane
88803
+ * keeps, each a percentage or a CSS length such as `16rem`.
88062
88804
  *
88063
88805
  * Set `primary` to the pane that keeps its size when the splitter's own size
88064
88806
  * changes, such as a sidebar beside a window being resized. The other pane
@@ -88079,7 +88821,7 @@ export type CustomElementsSolidJs = {
88079
88821
  * | Left, Right | Moves a side-by-side divider by `step`. On a right-to-left page, Left moves it toward the end. |
88080
88822
  * | Up, Down | Moves a stacked divider by `step`. |
88081
88823
  * | Home, End | Moves the divider to its bounds. |
88082
- * | Enter | Collapses the start pane, and opens it again. |
88824
+ * | Enter | Collapses the start pane, or the end pane where `collapsible="end"`, and opens it again. |
88083
88825
  * | F6 | Moves focus from one pane to the first control in the other, and from the divider to the start pane. |
88084
88826
  *
88085
88827
  * ## Attributes & Properties
@@ -88109,6 +88851,12 @@ export type CustomElementsSolidJs = {
88109
88851
  * that should survive its own collapse says how much of itself to keep, and
88110
88852
  * only whoever put it there knows that, which is the same reason `min` is a
88111
88853
  * consumer's to set.
88854
+ * - `collapsible`: Which panes can be collapsed, as Zag's panels each take `collapsible`:
88855
+ * `start`, `end`, `both`, or `none`. A pane that cannot be collapsed stops
88856
+ * at the edge without shutting. `Enter` collapses the end pane where only
88857
+ * the end pane can be collapsed, and the start pane otherwise.
88858
+ *
88859
+ * Unset is `both`, and the attribute stays absent until you write it.
88112
88860
  * - `corner-label`/`cornerLabel`: The name of the handle where two dividers cross, read by screen readers.
88113
88861
  * - `corner-value-label`/`cornerValueLabel`: What the handle where two dividers cross says it is set to, both dividers
88114
88862
  * at once: `{across}` is where the divider that runs down stands, and
@@ -88119,6 +88867,11 @@ export type CustomElementsSolidJs = {
88119
88867
  * these words are the whole of where it is.
88120
88868
  * - `default-collapsed`/`defaultCollapsed`: Which pane starts shut, when `collapsed` is not set.
88121
88869
  * - `default-position`/`defaultPosition`: Where the divider starts, when `position` is not set.
88870
+ * - `end-min`/`endMin`: The least the end pane keeps, in the units `min` takes: a percentage, or
88871
+ * a CSS length such as `16rem` resolved against the splitter's box. The
88872
+ * divider stops that far from the end, whatever `max` allows, so `min` and
88873
+ * `end-min` hold a minimum for each pane, as Zag's panels each take
88874
+ * `minSize`.
88122
88875
  * - `label`: The divider's name, read by screen readers.
88123
88876
  *
88124
88877
  * An `aria-label` or `aria-labelledby` on the host names the divider too,
@@ -90233,7 +90986,8 @@ export type CustomElementsSolidJs = {
90233
90986
  * not disabled. `selection-behavior="replace"` selects the tag a reader
90234
90987
  * presses or moves to alone, as a file list does, and Control or Command
90235
90988
  * with a press or Space adds or takes out one tag. `disallow-empty-selection`
90236
- * keeps one tag selected once one is. `value` holds the
90989
+ * keeps one tag selected once one is, and Escape lets go of the selection
90990
+ * otherwise. `value` holds the
90237
90991
  * selected tags' values, separated by commas, and a change asks with
90238
90992
  * `helix-before-change` and tells with `change`. Enter on a tag with an
90239
90993
  * `href` follows its link. A `disabled` tag is passed over. A selected tag
@@ -90251,6 +91005,12 @@ export type CustomElementsSolidJs = {
90251
91005
  * Where only disabled tags are left, the first of them holds the tab stop and
90252
91006
  * takes focus, so the reader stays in the set.
90253
91007
  *
91008
+ * **Typing new tags.** A field where people type tags and press Enter to add
91009
+ * each one is Combobox with `multiple` and `allows-custom-value`, or
91010
+ * `creatable` to ask first with `helix-create`. It draws each value as a tag,
91011
+ * Backspace on the empty field removes the last one, and the arrow keys move
91012
+ * between them.
91013
+ *
90254
91014
  * ## Attributes & Properties
90255
91015
  *
90256
91016
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -90356,6 +91116,12 @@ export type CustomElementsSolidJs = {
90356
91116
  * selected. Its remove button leaves the tab order there, Delete and Backspace
90357
91117
  * doing its job from the row.
90358
91118
  *
91119
+ * **Styling a tag by what is happening to it.** `:state(selected)` while it is
91120
+ * selected, `:state(focus-visible)` while its cell shows keyboard focus,
91121
+ * `[disabled]` while it is out of reach, and the host's own `:hover` and
91122
+ * `:active` under the pointer, as React Aria's `data-hovered` and
91123
+ * `data-pressed` are.
91124
+ *
90359
91125
  * ## Attributes & Properties
90360
91126
  *
90361
91127
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -90448,6 +91214,7 @@ export type CustomElementsSolidJs = {
90448
91214
  *
90449
91215
  * These can be used to apply styling when a component is in a given state.
90450
91216
  *
91217
+ * - `focus-visible`: The tag's cell has keyboard focus that the browser shows, in a `Tag.Group`.
90451
91218
  * - `selected`: The tag is selected in a `Tag.Group` that selects.
90452
91219
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
90453
91220
  */
@@ -90667,6 +91434,10 @@ export type CustomElementsSolidJs = {
90667
91434
  * along, so the two writes a consumer would make in sequence do not compose
90668
91435
  * into the range they asked for. The platform has this method for that reason
90669
91436
  * and so does this.
91437
+ * - `setRangeText(replacement: string, start?: number, end?: number, selectMode?: SelectionMode) => void`: Replaces a range of the text, as the native method does: the selection
91438
+ * where `start` and `end` are left out, and `selectMode` says what is
91439
+ * selected after. It sends no event, as the native method sends none.
91440
+ * - `select() => void`: Selects everything in the field.
90670
91441
  * - `focus(options?: FocusOptions) => void`: Puts the caret in the field, as a label pointing at it would.
90671
91442
  * - `requestValue(next: string) => boolean`: Requests a new value, and returns whether the change was applied.
90672
91443
  *
@@ -91457,6 +92228,17 @@ export type CustomElementsSolidJs = {
91457
92228
  * imperatively later, and nothing is hydrating by then.
91458
92229
  *
91459
92230
  * Here rather than on each control.
92231
+ * - `timeContent`: What each time in the list shows: a function given the time as `HH:mm`,
92232
+ * or `HH:mm:ss` with `seconds`, and the time as the row writes it, that
92233
+ * returns text, an element or a Lit template.
92234
+ *
92235
+ * For the seats left at a time, or a caption under it, as React Aria's
92236
+ * `ListBoxItem` takes children. Content with `slot="start"`, `slot="end"`
92237
+ * or `slot="description"` goes to that slot of the row, and a description
92238
+ * is read after the time. The row is still named by the written time, and
92239
+ * typeahead still finds it by that. Return the written time with your
92240
+ * content where it should still show. A property only, there being no way
92241
+ * to write a function in markup. The wheels draw their own figures. (property only)
91460
92242
  * - `valueAsDate`: The value as a `Date` on 1 January 1970 UTC, or `null` while there is no time.
91461
92243
  *
91462
92244
  * The platform's own pair on `<input type="time">`, epoch day included: a time
@@ -91735,7 +92517,9 @@ export type CustomElementsSolidJs = {
91735
92517
  * hours ago", from `datetime`, where the `time` slot is empty. The words move
91736
92518
  * on as they go stale, "3 hours ago" becoming "4 hours ago", with one wakeup
91737
92519
  * shared by every reading on the page, as `FormatDate` keeps its own. They are
91738
- * in the language of the page, or of the nearest `lang`.
92520
+ * in the language of the page, or of the nearest `lang`. The whole date and
92521
+ * time is the reading's `title`, so a pointer resting on "3 hours ago" shows
92522
+ * when it was, and a screen reader reads it as the description.
91739
92523
  *
91740
92524
  * Each entry draws the connector line that arrives at it and hides it when it
91741
92525
  * is the first entry, using `:host(:first-child)`. This needs no index, no
@@ -91850,11 +92634,20 @@ export type CustomElementsSolidJs = {
91850
92634
  * Write the entries in the order the events happened, oldest or newest first,
91851
92635
  * and the layout only moves where they are drawn.
91852
92636
  *
92637
+ * **A feed that loads more entries sets `loading` while it fetches.** The
92638
+ * timeline is busy, and an entry after the last says "Loading more"
92639
+ * (`loading-label`, or your own content in the `loading` slot). Put a button
92640
+ * that asks for more after the timeline, and move focus to the first new
92641
+ * entry when they arrive.
92642
+ *
91853
92643
  * ## Attributes & Properties
91854
92644
  *
91855
92645
  * Component attributes and properties that can be applied to the element or by using JavaScript.
91856
92646
  *
91857
92647
  * - `label`: Accessible name for the timeline, for people who reach it out of context.
92648
+ * - `loading`: Marks the timeline as busy fetching more entries, and draws an entry
92649
+ * after the last that says so.
92650
+ * - `loading-label`/`loadingLabel`: The text of the entry drawn while `loading` is set, where the `loading` slot is empty.
91858
92651
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
91859
92652
  *
91860
92653
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -91881,11 +92674,19 @@ export type CustomElementsSolidJs = {
91881
92674
  * Areas where markup can be added to the component.
91882
92675
  *
91883
92676
  * - `(default)`: The entries, and any groups of them.
92677
+ * - `loading`: Content for the entry after the last while `loading` is set. Falls back to `loading-label`.
92678
+ *
92679
+ * ## CSS Parts
92680
+ *
92681
+ * Custom selectors for styling elements within the component.
92682
+ *
92683
+ * - `loading`: The entry after the last while `loading` is set.
91884
92684
  *
91885
92685
  * ## CSS States
91886
92686
  *
91887
92687
  * These can be used to apply styling when a component is in a given state.
91888
92688
  *
92689
+ * - `loading`: While `loading` is set.
91889
92690
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
91890
92691
  */
91891
92692
  "helix-headless-timeline": Partial<
@@ -92786,6 +93587,9 @@ export type CustomElementsSolidJs = {
92786
93587
  * describes a Helix component and leaves a plain element undescribed. In the
92787
93588
  * `for` form the tooltip itself is out of the accessibility tree while its
92788
93589
  * bubble is down, so you meet its words once, as the trigger's description.
93590
+ * A trigger whose name is already the tooltip's words, such as an icon button
93591
+ * named Settings under a tooltip reading Settings, is not described by them
93592
+ * again.
92789
93593
  *
92790
93594
  * The tooltip shows on hover and on focus. It hides on pointer leave, on blur,
92791
93595
  * on Escape, and when the trigger is activated. The pointer can move from the
@@ -94866,11 +95670,14 @@ export type CustomElementsSolidJs = {
94866
95670
  * | Page Down, Page Up | Moves by the number of items, or of lines in a grid, on screen. |
94867
95671
  * | A letter or a word | Moves to the next item whose text starts with what you typed. |
94868
95672
  * | Escape | Lets go of every chosen item, in a list with `selection-mode`. |
95673
+ * | Alt with Up or Down | In a `reorderable` list, moves the item a place. Alt with Home or End moves it to either end. |
94869
95674
  * | Tab | Moves into the focused row's own links and buttons, then out of the list. |
94870
95675
  *
94871
95676
  * An item that is not drawn is scrolled into view and focused, so a keyboard
94872
- * reaches the whole set. When the row holding the tab stop scrolls away, the
94873
- * stop moves to the first row on screen. Typing matches each item's
95677
+ * reaches the whole set. The row a reader last focused keeps the tab stop and
95678
+ * stays drawn when it scrolls away, so Tab and Shift+Tab come back to it, as
95679
+ * React Aria's collections do. In a list nobody has focused yet, the stop
95680
+ * moves to the first row on screen. Typing matches each item's
94874
95681
  * `text-field`, which is the first `data-field` of the row template by default,
94875
95682
  * or the item itself when it is a string or a number.
94876
95683
  *
@@ -94912,6 +95719,23 @@ export type CustomElementsSolidJs = {
94912
95719
  * the last item says "Loading more" (`loading-label`, or your own content in
94913
95720
  * the `loading` slot). `scrollToIndex` takes a reader to an item.
94914
95721
  *
95722
+ * **Moving items** is a separate import, `@fusion.dev/helix/virtual-list/reorder`,
95723
+ * as React Aria's drag and drop is. With it imported, `reorderable` lets a
95724
+ * reader move items in a list of one column without sections:
95725
+ *
95726
+ * - Alt with Up or Down moves the item the keys are on a place, and Alt with
95727
+ * Home or End to either end, as the APG's rearrangeable listbox does.
95728
+ * - A pointer drags a whole row. A press that does not travel is still a
95729
+ * press. The list scrolls near an edge, and an item far down a long set is
95730
+ * reached by dragging to the edge.
95731
+ * - A drop sends `helix-before-reorder`, which you can refuse, and then
95732
+ * `helix-reorder`, whose `keys` hold every item's key in the new order.
95733
+ * **You move the items**: set `items` to them in that order. The keys stay
95734
+ * on the item that moved.
95735
+ * - Each move is said in a region screen readers announce. The row being
95736
+ * dragged carries `data-dragging`, and the row a drop would land beside
95737
+ * `data-drop-before` or `data-drop-after`.
95738
+ *
94915
95739
  * **An empty list.** Set `empty-label`, or put your own content in the `empty`
94916
95740
  * slot, for a row shown when there are no items and none are loading, such as
94917
95741
  * "No messages yet" and a link to write one. Without either, an empty list
@@ -94990,6 +95814,12 @@ export type CustomElementsSolidJs = {
94990
95814
  * and scrolls it sideways: Left and Right move between items, the other
94991
95815
  * way round on a right-to-left page, and `estimate` is an item's width. A
94992
95816
  * grid always runs down.
95817
+ * - `reorderable`: Lets a reader move items, once `@fusion.dev/helix/virtual-list/reorder`
95818
+ * (or `@fusion.dev/helix-headless/virtual-list/reorder`) is imported: Alt
95819
+ * with an arrow moves the row the keys are on, and a pointer drags a row.
95820
+ * The list moves no item itself: you move your `items` on `helix-reorder`.
95821
+ * Without that import it does nothing, so a list that never moves items
95822
+ * carries none of the code. A list of one column, without sections.
94993
95823
  * - `section-field`/`sectionField`: The field of each item that names its section, as a key or a path of
94994
95824
  * keys. Set, the items are drawn in sections: a header, then the items, in
94995
95825
  * an element with the `group` role that the header names. A section starts
@@ -95052,8 +95882,10 @@ export type CustomElementsSolidJs = {
95052
95882
  *
95053
95883
  * - `change`: Fired once a press or a key has changed which items are selected, in a list with `selection-mode`.
95054
95884
  * - `helix-before-change`: Fired before a press or a key changes which items are selected, with the `value` it would leave. Cancelable.
95885
+ * - `helix-before-reorder`: Fired when an item is dropped at a new place, in a `reorderable` list with `@fusion.dev/helix/virtual-list/reorder` imported, with every key in the new order. Cancelable: cancel it to keep the item where it is.
95055
95886
  * - `helix-load-more`: Fired when a reader comes within one screen of the last item, once for each length of the set.
95056
95887
  * - `helix-range-change`: Fired when the items on screen change, with the new `first` and `last`, which `range` also holds.
95888
+ * - `helix-reorder`: Fired after `helix-before-reorder` when nobody canceled it. Set `items` to the order in `keys`. Cancelable: cancel it to say the move did not happen.
95057
95889
  *
95058
95890
  * ## Slots
95059
95891
  *