@fusion.dev/helix-headless 0.171.0 → 0.172.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 (33) hide show
  1. package/custom-elements.json +439 -65
  2. package/dist/chat/composer/chat-composer.d.ts +28 -1
  3. package/dist/chat/composer/chat-composer.js +22 -3
  4. package/dist/chat/root/chat-root.d.ts +38 -2
  5. package/dist/chat/root/chat-root.js +38 -1
  6. package/dist/color-input/root/color-input-root.d.ts +15 -1
  7. package/dist/color-input/root/color-input-root.js +19 -1
  8. package/dist/color-picker/root/color-picker-root.d.ts +5 -1
  9. package/dist/color-picker/root/color-picker-root.js +1 -1
  10. package/dist/data-table/root/data-table-root.d.ts +5 -1
  11. package/dist/data-table/root/data-table-root.js +1 -0
  12. package/dist/dialog/root/dialog-root.js +1 -0
  13. package/dist/drawer/root/drawer-root.d.ts +4 -0
  14. package/dist/drawer/root/drawer-root.js +1 -0
  15. package/dist/element-events.generated.js +1 -0
  16. package/dist/lightbox/root/lightbox-root.js +1 -0
  17. package/dist/listbox/root/listbox-root.d.ts +2 -1
  18. package/dist/listbox/root/listbox-root.js +3 -2
  19. package/dist/menu/item/menu-item.d.ts +2 -0
  20. package/dist/menu/item/menu-item.js +2 -0
  21. package/dist/menu/root/menu-root.d.ts +73 -12
  22. package/dist/menu/root/menu-root.js +103 -7
  23. package/dist/popover/root/popover-root.d.ts +59 -6
  24. package/dist/popover/root/popover-root.js +51 -3
  25. package/dist/select/root/select-root.d.ts +2 -2
  26. package/dist/select/root/select-root.js +2 -2
  27. package/dist/textarea/root/textarea-root.d.ts +8 -0
  28. package/dist/textarea/root/textarea-root.js +16 -0
  29. package/lint.json +1 -1
  30. package/package.json +5 -5
  31. package/types/jsx.d.ts +312 -30
  32. package/types/vue.d.ts +59 -8
  33. package/types/words.d.ts +8 -0
package/types/jsx.d.ts CHANGED
@@ -4966,6 +4966,10 @@ export type HelixHeadlessChatComposerHelixTypingElementEvent =
4966
4966
  HelixHeadlessChatComposerElementEvent<HelixTypingEvent>;
4967
4967
 
4968
4968
  export type HelixHeadlessChatComposerProps = {
4969
+ /** A message about the draft, shown under the field. While set, the composer
4970
+ is invalid, does not send, and does not submit, as a field's `feedback`
4971
+ does, and the message is announced as it appears. */
4972
+ feedback?: (HelixHeadlessChatComposer["feedback"]) | undefined;
4969
4973
  /** The field's name, read by screen readers. */
4970
4974
  label?: (HelixHeadlessChatComposer["label"]) | undefined;
4971
4975
  /** The most characters a draft can have. The field stops taking more. */
@@ -5054,6 +5058,10 @@ Here rather than on each control. */
5054
5058
  };
5055
5059
 
5056
5060
  export type HelixHeadlessChatComposerSolidJsProps = {
5061
+ /** A message about the draft, shown under the field. While set, the composer
5062
+ is invalid, does not send, and does not submit, as a field's `feedback`
5063
+ does, and the message is announced as it appears. */
5064
+ "prop:feedback"?: (HelixHeadlessChatComposer["feedback"]) | undefined;
5057
5065
  /** The field's name, read by screen readers. */
5058
5066
  "prop:label"?: (HelixHeadlessChatComposer["label"]) | undefined;
5059
5067
  /** The most characters a draft can have. The field stops taking more. */
@@ -9693,7 +9701,11 @@ thousand rows, where the page is a reasonable fetch and a poor render.
9693
9701
 
9694
9702
  Off by default. Windowing costs a scroll listener, a measurement per row
9695
9703
  drawn, and a `block-size` on the scrolling box, and a table of twenty rows
9696
- should pay none of them. */
9704
+ should pay none of them.
9705
+
9706
+ While windowed, the `table` part scrolls on this tier: it carries
9707
+ `data-scroller`, and `core` ships `[data-scroller] { overflow: auto }` into
9708
+ every shadow root. You still need to give it a block size. */
9697
9709
  windowed?: (HelixHeadlessDataTable["windowed"]) | undefined;
9698
9710
  /** The text shown and announced when there are no rows and none are loading. */
9699
9711
  "empty-text"?: (HelixHeadlessDataTable["emptyText"]) | undefined;
@@ -10122,7 +10134,11 @@ thousand rows, where the page is a reasonable fetch and a poor render.
10122
10134
 
10123
10135
  Off by default. Windowing costs a scroll listener, a measurement per row
10124
10136
  drawn, and a `block-size` on the scrolling box, and a table of twenty rows
10125
- should pay none of them. */
10137
+ should pay none of them.
10138
+
10139
+ While windowed, the `table` part scrolls on this tier: it carries
10140
+ `data-scroller`, and `core` ships `[data-scroller] { overflow: auto }` into
10141
+ every shadow root. You still need to give it a block size. */
10126
10142
  "prop:windowed"?: (HelixHeadlessDataTable["windowed"]) | undefined;
10127
10143
  /** The text shown and announced when there are no rows and none are loading. */
10128
10144
  "attr:empty-text"?: (HelixHeadlessDataTable["emptyText"]) | undefined;
@@ -21188,6 +21204,14 @@ or on Alt+Down or Alt+Up. */
21188
21204
 
21189
21205
  It moves if that side does not fit. */
21190
21206
  placement?: (HelixHeadlessMenu["placement"]) | undefined;
21207
+ /** What a screen reader hears when the filter narrows the rows. `{count}` is
21208
+ how many rows are left, written in the locale, and each language writes
21209
+ the forms it has, as Listbox's `results-label` does. */
21210
+ "results-label"?: (HelixHeadlessMenu["resultsLabel"]) | undefined;
21211
+ /** What a screen reader hears when the filter narrows the rows. `{count}` is
21212
+ how many rows are left, written in the locale, and each language writes
21213
+ the forms it has, as Listbox's `results-label` does. */
21214
+ resultsLabel?: (HelixHeadlessMenu["resultsLabel"]) | undefined;
21191
21215
  /** How a submenu opens. `drill` shows it in place of the page showing, with
21192
21216
  a way back. `flyout` opens it in a panel of its own beside its row. */
21193
21217
  submenus?: (HelixHeadlessMenu["submenus"]) | undefined;
@@ -21229,7 +21253,17 @@ Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
21229
21253
  Absent, a row is kept where its words hold the filter, in any case. A
21230
21254
  property only, there being no way to write a function in markup. */
21231
21255
  filterMatch?: (HelixHeadlessMenu["filterMatch"]) | undefined;
21256
+ /** The values of the choice rows that are checked, anywhere in the menu, in
21257
+ document order.
21258
+
21259
+ Set it to check exactly those rows and uncheck every other choice row, as
21260
+ React Aria's `selectedKeys` controls a menu's selection from one place.
21261
+ Each row keeps its own `checked` too, which this reads and writes. `change`
21262
+ is sent on the menu when a reader's choice changes it. */
21263
+ checkedValues?: (HelixHeadlessMenu["checkedValues"]) | undefined;
21232
21264
 
21265
+ /** A reader's choice checked or unchecked rows. Read `checkedValues` for the rows that are checked now. */
21266
+ onchange?: ((e: HelixHeadlessMenuElementEvent) => void) | undefined;
21233
21267
  /** The menu is about to close. Cancelable: cancel it to keep it open. */
21234
21268
  "onhelix-before-close"?: ((
21235
21269
  e: HelixHeadlessMenuHelixBeforeCloseElementEvent,
@@ -21308,6 +21342,14 @@ or on Alt+Down or Alt+Up. */
21308
21342
 
21309
21343
  It moves if that side does not fit. */
21310
21344
  "prop:placement"?: (HelixHeadlessMenu["placement"]) | undefined;
21345
+ /** What a screen reader hears when the filter narrows the rows. `{count}` is
21346
+ how many rows are left, written in the locale, and each language writes
21347
+ the forms it has, as Listbox's `results-label` does. */
21348
+ "attr:results-label"?: (HelixHeadlessMenu["resultsLabel"]) | undefined;
21349
+ /** What a screen reader hears when the filter narrows the rows. `{count}` is
21350
+ how many rows are left, written in the locale, and each language writes
21351
+ the forms it has, as Listbox's `results-label` does. */
21352
+ "prop:resultsLabel"?: (HelixHeadlessMenu["resultsLabel"]) | undefined;
21311
21353
  /** How a submenu opens. `drill` shows it in place of the page showing, with
21312
21354
  a way back. `flyout` opens it in a panel of its own beside its row. */
21313
21355
  "prop:submenus"?: (HelixHeadlessMenu["submenus"]) | undefined;
@@ -21349,6 +21391,16 @@ Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
21349
21391
  Absent, a row is kept where its words hold the filter, in any case. A
21350
21392
  property only, there being no way to write a function in markup. */
21351
21393
  "prop:filterMatch"?: (HelixHeadlessMenu["filterMatch"]) | undefined;
21394
+ /** The values of the choice rows that are checked, anywhere in the menu, in
21395
+ document order.
21396
+
21397
+ Set it to check exactly those rows and uncheck every other choice row, as
21398
+ React Aria's `selectedKeys` controls a menu's selection from one place.
21399
+ Each row keeps its own `checked` too, which this reads and writes. `change`
21400
+ is sent on the menu when a reader's choice changes it. */
21401
+ "prop:checkedValues"?: (HelixHeadlessMenu["checkedValues"]) | undefined;
21402
+ /** A reader's choice checked or unchecked rows. Read `checkedValues` for the rows that are checked now. */
21403
+ "on:change"?: ((e: HelixHeadlessMenuElementEvent) => void) | undefined;
21352
21404
  /** The menu is about to close. Cancelable: cancel it to keep it open. */
21353
21405
  "on:helix-before-close"?: ((
21354
21406
  e: HelixHeadlessMenuHelixBeforeCloseElementEvent,
@@ -24670,17 +24722,42 @@ export type HelixHeadlessPopoverToggleElementEvent =
24670
24722
  HelixHeadlessPopoverElementEvent<ToggleEvent>;
24671
24723
 
24672
24724
  export type HelixHeadlessPopoverProps = {
24725
+ /** The element the panel opens against, where that is not the trigger: its
24726
+ `id` in the same document or shadow root, or the element itself. Left
24727
+ empty, the panel opens against the trigger, or against the button whose
24728
+ command opened it. */
24729
+ anchor?: (HelixHeadlessPopover["anchor"]) | undefined;
24673
24730
  /** Draws a point on the panel's edge facing the trigger.
24674
24731
 
24675
24732
  Off by default, which is the house style: a panel that opens from its
24676
24733
  trigger already reads as belonging to it. */
24677
24734
  arrow?: (HelixHeadlessPopover["arrow"]) | undefined;
24735
+ /** How close to the window's edges the panel may come, in pixels, when it
24736
+ slides, shrinks or moves to the other side to fit. Left unset, it slides
24737
+ and shrinks to 8 pixels from an edge and moves to the other side only
24738
+ once it would cross one. */
24739
+ "container-padding"?: (HelixHeadlessPopover["containerPadding"] | `${number}`) | undefined;
24740
+ /** How close to the window's edges the panel may come, in pixels, when it
24741
+ slides, shrinks or moves to the other side to fit. Left unset, it slides
24742
+ and shrinks to 8 pixels from an edge and moves to the other side only
24743
+ once it would cross one. */
24744
+ containerPadding?: (HelixHeadlessPopover["containerPadding"]) | undefined;
24745
+ /** How far to slide the panel along the side it is on, in pixels: to the
24746
+ right on the top or the bottom, and down on the left or the right. */
24747
+ "cross-offset"?: (HelixHeadlessPopover["crossOffset"] | `${number}`) | undefined;
24748
+ /** How far to slide the panel along the side it is on, in pixels: to the
24749
+ right on the top or the bottom, and down on the left or the right. */
24750
+ crossOffset?: (HelixHeadlessPopover["crossOffset"]) | undefined;
24678
24751
  /** The panel's name where nothing else names it: no `label`, no heading in
24679
24752
  the panel, and no `aria-labelledby` on the host. */
24680
24753
  "fallback-label"?: (HelixHeadlessPopover["fallbackLabel"]) | undefined;
24681
24754
  /** The panel's name where nothing else names it: no `label`, no heading in
24682
24755
  the panel, and no `aria-labelledby` on the host. */
24683
24756
  fallbackLabel?: (HelixHeadlessPopover["fallbackLabel"]) | undefined;
24757
+ /** Whether the panel moves to the other side of the trigger when its own
24758
+ side has no room. On by default. Write `flip="false"` to keep it on its
24759
+ side, where it shrinks to fit, as React Aria's `shouldFlip` turns off. */
24760
+ flip?: (HelixHeadlessPopover["flip"]) | undefined;
24684
24761
  /** The panel's name, read by screen readers. Left empty, the first heading in
24685
24762
  the panel names it, and then `fallback-label`. */
24686
24763
  label?: (HelixHeadlessPopover["label"]) | undefined;
@@ -24725,17 +24802,42 @@ the resolved state for stylesheets, which is what the mirror is for. */
24725
24802
  };
24726
24803
 
24727
24804
  export type HelixHeadlessPopoverSolidJsProps = {
24805
+ /** The element the panel opens against, where that is not the trigger: its
24806
+ `id` in the same document or shadow root, or the element itself. Left
24807
+ empty, the panel opens against the trigger, or against the button whose
24808
+ command opened it. */
24809
+ "prop:anchor"?: (HelixHeadlessPopover["anchor"]) | undefined;
24728
24810
  /** Draws a point on the panel's edge facing the trigger.
24729
24811
 
24730
24812
  Off by default, which is the house style: a panel that opens from its
24731
24813
  trigger already reads as belonging to it. */
24732
24814
  "prop:arrow"?: (HelixHeadlessPopover["arrow"]) | undefined;
24815
+ /** How close to the window's edges the panel may come, in pixels, when it
24816
+ slides, shrinks or moves to the other side to fit. Left unset, it slides
24817
+ and shrinks to 8 pixels from an edge and moves to the other side only
24818
+ once it would cross one. */
24819
+ "attr:container-padding"?: (HelixHeadlessPopover["containerPadding"] | `${number}`) | undefined;
24820
+ /** How close to the window's edges the panel may come, in pixels, when it
24821
+ slides, shrinks or moves to the other side to fit. Left unset, it slides
24822
+ and shrinks to 8 pixels from an edge and moves to the other side only
24823
+ once it would cross one. */
24824
+ "prop:containerPadding"?: (HelixHeadlessPopover["containerPadding"]) | undefined;
24825
+ /** How far to slide the panel along the side it is on, in pixels: to the
24826
+ right on the top or the bottom, and down on the left or the right. */
24827
+ "attr:cross-offset"?: (HelixHeadlessPopover["crossOffset"] | `${number}`) | undefined;
24828
+ /** How far to slide the panel along the side it is on, in pixels: to the
24829
+ right on the top or the bottom, and down on the left or the right. */
24830
+ "prop:crossOffset"?: (HelixHeadlessPopover["crossOffset"]) | undefined;
24733
24831
  /** The panel's name where nothing else names it: no `label`, no heading in
24734
24832
  the panel, and no `aria-labelledby` on the host. */
24735
24833
  "attr:fallback-label"?: (HelixHeadlessPopover["fallbackLabel"]) | undefined;
24736
24834
  /** The panel's name where nothing else names it: no `label`, no heading in
24737
24835
  the panel, and no `aria-labelledby` on the host. */
24738
24836
  "prop:fallbackLabel"?: (HelixHeadlessPopover["fallbackLabel"]) | undefined;
24837
+ /** Whether the panel moves to the other side of the trigger when its own
24838
+ side has no room. On by default. Write `flip="false"` to keep it on its
24839
+ side, where it shrinks to fit, as React Aria's `shouldFlip` turns off. */
24840
+ "prop:flip"?: (HelixHeadlessPopover["flip"]) | undefined;
24739
24841
  /** The panel's name, read by screen readers. Left empty, the first heading in
24740
24842
  the panel names it, and then `fallback-label`. */
24741
24843
  "prop:label"?: (HelixHeadlessPopover["label"]) | undefined;
@@ -40337,6 +40439,11 @@ export type CustomElements = {
40337
40439
  * Sending an empty required composer counts as trying. Tabbing past an empty
40338
40440
  * composer marks nothing.
40339
40441
  *
40442
+ * **`feedback` is a message of your own about the draft**, such as one your
40443
+ * server sent back. While it is set, the composer is invalid at once, does
40444
+ * not send or submit, shows the message under the field, and a screen reader
40445
+ * hears it as it appears. Clear it to let the draft go.
40446
+ *
40340
40447
  * **`typing` says whether the user is writing**, and `helix-typing` is sent
40341
40448
  * each time it changes: when they start, and when they send or stop for
40342
40449
  * `typing-timeout` milliseconds. Pass it on to show "is typing" to the other
@@ -40346,6 +40453,9 @@ export type CustomElements = {
40346
40453
  *
40347
40454
  * Component attributes and properties that can be applied to the element or by using JavaScript.
40348
40455
  *
40456
+ * - `feedback`: A message about the draft, shown under the field. While set, the composer
40457
+ * is invalid, does not send, and does not submit, as a field's `feedback`
40458
+ * does, and the message is announced as it appears.
40349
40459
  * - `label`: The field's name, read by screen readers.
40350
40460
  * - `maxlength`/`maxLength`: The most characters a draft can have. The field stops taking more.
40351
40461
  * - `minlength`/`minLength`: The fewest characters a draft can have, once the reader has written in
@@ -40494,6 +40604,7 @@ export type CustomElements = {
40494
40604
  *
40495
40605
  * - `composer`: The whole composer.
40496
40606
  * - `end`: The box around the `end` slot.
40607
+ * - `feedback`: The `feedback` message, under the field while it is set.
40497
40608
  * - `field`: The text field.
40498
40609
  * - `mark`: The icon inside the send button.
40499
40610
  * - `send`: The send button.
@@ -40504,7 +40615,7 @@ export type CustomElements = {
40504
40615
  *
40505
40616
  * These can be used to apply styling when a component is in a given state.
40506
40617
  *
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.
40618
+ * - `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
40619
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
40509
40620
  */
40510
40621
  "helix-headless-chat-composer": Partial<
@@ -40638,6 +40749,13 @@ export type CustomElements = {
40638
40749
  * `loading` while you fetch, then prepend the older turns. The turn the user
40639
40750
  * was reading stays in place on screen.
40640
40751
  *
40752
+ * The transcript is a `log`, the role for content added in order where the
40753
+ * newest matters most, and it answers the APG feed's keys. The `feed` role
40754
+ * reads its articles as a list from the top, with no newest end to stay
40755
+ * pinned to, so the log keeps the role a conversation has. While `loading` is
40756
+ * set or older turns load, the log carries `aria-busy`, as the APG asks of a
40757
+ * feed.
40758
+ *
40641
40759
  * The log is `aria-live="off"`. A separate status region announces each new
40642
40760
  * turn once, when it has finished arriving. It skips the user's own turns
40643
40761
  * unless they failed to send, turns loaded as history, and the turns already
@@ -40650,6 +40768,12 @@ export type CustomElements = {
40650
40768
  * conversations. `turns` draws a long
40651
40769
  * transcript one window at a time, so the log needs a block size of its own.
40652
40770
  *
40771
+ * The log scrolls on this tier. It carries `data-scroller`, and `core` ships
40772
+ * `[data-scroller] { overflow: auto }` into every shadow root, so pinning,
40773
+ * history and the window work with no stylesheet. You still need to give the
40774
+ * log a block size, such as `helix-headless-chat::part(log) { block-size:
40775
+ * 20rem }`.
40776
+ *
40653
40777
  * **A conversation is built from three elements.** The chat holds the
40654
40778
  * transcript, a `Chat.Message` stands for each turn, and a `Chat.Composer` sits
40655
40779
  * in the `composer` slot. When the user sends, `helix-send` reaches the chat:
@@ -40666,7 +40790,9 @@ export type CustomElements = {
40666
40790
  * turn says its place, such as "3 of 40", windowed or not. The transcript is
40667
40791
  * a tab stop while it holds a turn, and the turn a reader moved to is one
40668
40792
  * 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.
40793
+ * the turn into view, and moving to the newest pins it again. When the turn
40794
+ * holding focus is removed, focus moves to the turn that took its place, or to
40795
+ * the one before it where it was the last.
40670
40796
  *
40671
40797
  * | Key | What it does |
40672
40798
  * |---|---|
@@ -40845,7 +40971,7 @@ export type CustomElements = {
40845
40971
  * - `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
40972
  * - `live`: The region where screen readers announce each turn once it has arrived.
40847
40973
  * - `loading`: Shown while the history loads.
40848
- * - `log`: The transcript, which scrolls.
40974
+ * - `log`: The transcript, which scrolls. On this tier, it needs only a block size.
40849
40975
  * - `message`: The message drawn for a turn from `turns`, forwarded whole.
40850
40976
  * - `message-actions`: The controls on a turn from `turns`, beside its time.
40851
40977
  * - `message-avatar`: The avatar box of a turn from `turns`.
@@ -41779,7 +41905,8 @@ export type CustomElements = {
41779
41905
  *
41780
41906
  * The trigger and ArrowDown open the panel with focus in the square. Tab moves
41781
41907
  * between the panel's controls without leaving it, and Escape closes it and
41782
- * returns focus to the field.
41908
+ * returns focus to the control that opened it: the trigger after a press, and
41909
+ * the field after ArrowDown.
41783
41910
  *
41784
41911
  * The component sets `--color-input-swatch`, so do not set it yourself. It
41785
41912
  * holds the resolved color, so the styled tier can paint the swatch without
@@ -43733,6 +43860,10 @@ export type CustomElements = {
43733
43860
  * Off by default. Windowing costs a scroll listener, a measurement per row
43734
43861
  * drawn, and a `block-size` on the scrolling box, and a table of twenty rows
43735
43862
  * should pay none of them.
43863
+ *
43864
+ * While windowed, the `table` part scrolls on this tier: it carries
43865
+ * `data-scroller`, and `core` ships `[data-scroller] { overflow: auto }` into
43866
+ * every shadow root. You still need to give it a block size.
43736
43867
  * - `empty-text`/`emptyText`: The text shown and announced when there are no rows and none are loading.
43737
43868
  * - `loading`: Whether the rows are still loading.
43738
43869
  *
@@ -43895,7 +44026,7 @@ export type CustomElements = {
43895
44026
  * - `select`: The cell that holds a row's checkbox.
43896
44027
  * - `select-all`: The heading that holds the checkbox that selects every row.
43897
44028
  * - `select-selected`: Added to `select` in a selected row.
43898
- * - `table`: The grid.
44029
+ * - `table`: The grid. While `windowed`, the box that scrolls, which needs only a block size on this tier.
43899
44030
  * - `toggle`: The mark in a row header that a press opens and closes its row by, in a tree grid.
43900
44031
  * - `toggle-mark`: The caret in `toggle`. It points along the line while the row is closed and down while it is open.
43901
44032
  * - `toggle-open`: Added to `toggle` while its row is open.
@@ -45631,6 +45762,10 @@ export type CustomElements = {
45631
45762
  * <helix-headless-drawer id="nav">…</helix-headless-drawer>
45632
45763
  * ```
45633
45764
  *
45765
+ * From its first press, a button that opens the drawer this way says whether
45766
+ * the drawer is open: a Helix button through `expanded`, and any other
45767
+ * element with `aria-expanded`.
45768
+ *
45634
45769
  * ## Attributes & Properties
45635
45770
  *
45636
45771
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -52556,6 +52691,8 @@ export type CustomElements = {
52556
52691
  * These can be used to apply styling when a component is in a given state.
52557
52692
  *
52558
52693
  * - `checked`: The row is checked.
52694
+ * - `disabled`: The row is disabled.
52695
+ * - `expanded`: Under `submenus="flyout"`, the row's submenu is open beside it.
52559
52696
  * - `highlighted`: In a menu with `filterable`, the arrow keys or the pointer reached the row while focus stays in the filter field.
52560
52697
  * - `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
52698
  * - `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 +52716,9 @@ export type CustomElements = {
52579
52716
  *
52580
52717
  * Submenus drill down by default. A submenu replaces the panel's content, and a
52581
52718
  * back row returns to the previous page. One panel stays inside a narrow
52582
- * window, and works on touch screens, which have no hover.
52719
+ * window, and works on touch screens, which have no hover. Focus follows a
52720
+ * mouse resting on a row in either mode, and a drilled page is a `menu` named
52721
+ * by the row that opened it.
52583
52722
  *
52584
52723
  * **`submenus="flyout"` opens each submenu in a panel of its own beside its
52585
52724
  * row**, as React Aria's `SubmenuTrigger` and Radix's `Sub` do. Resting the
@@ -52613,6 +52752,11 @@ export type CustomElements = {
52613
52752
  * trigger's width, for a menu as wide as its trigger:
52614
52753
  * `helix-menu::part(surface) { min-inline-size: var(--floating-anchor-inline-size) }`.
52615
52754
  *
52755
+ * **The choices in one place.** `checkedValues` holds the values of the rows
52756
+ * that are checked, anywhere in the menu, and setting it checks exactly
52757
+ * those rows, as React Aria's `selectedKeys` does. `change` is sent on the
52758
+ * menu when a reader's choice changes it.
52759
+ *
52616
52760
  * With `context`, the trigger is an area and the menu is its context menu: a
52617
52761
  * right-click, a long press, Shift+F10 or the menu key over the area opens it
52618
52762
  * at the pointer, or at the area's corner from the keyboard, as Radix's context
@@ -52635,7 +52779,8 @@ export type CustomElements = {
52635
52779
  * field: Up and Down Arrow move the highlight through the rows that are left,
52636
52780
  * Enter chooses the highlighted row, Right Arrow opens its submenu, Left Arrow
52637
52781
  * 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
52782
+ * menu. A screen reader hears how many rows the filter keeps
52783
+ * (`results-label`). Home, End and the other keys move the caret and type. The field names
52639
52784
  * the highlighted row with `aria-activedescendant`, and the rows are a `menu`
52640
52785
  * after the field. Cancel `helix-filter` to keep every row
52641
52786
  * showing and narrow the rows yourself, such as by replacing them with rows
@@ -52675,6 +52820,9 @@ export type CustomElements = {
52675
52820
  * - `placement`: The side the menu opens on, when there is room.
52676
52821
  *
52677
52822
  * It moves if that side does not fit.
52823
+ * - `results-label`/`resultsLabel`: What a screen reader hears when the filter narrows the rows. `{count}` is
52824
+ * how many rows are left, written in the locale, and each language writes
52825
+ * the forms it has, as Listbox's `results-label` does.
52678
52826
  * - `submenus`: How a submenu opens. `drill` shows it in place of the page showing, with
52679
52827
  * a way back. `flyout` opens it in a panel of its own beside its row.
52680
52828
  * - `empty-text`/`emptyText`: The text shown and announced when there are no rows and none are loading.
@@ -52703,6 +52851,13 @@ export type CustomElements = {
52703
52851
  *
52704
52852
  * Absent, a row is kept where its words hold the filter, in any case. A
52705
52853
  * property only, there being no way to write a function in markup. (property only)
52854
+ * - `checkedValues`: The values of the choice rows that are checked, anywhere in the menu, in
52855
+ * document order.
52856
+ *
52857
+ * Set it to check exactly those rows and uncheck every other choice row, as
52858
+ * React Aria's `selectedKeys` controls a menu's selection from one place.
52859
+ * Each row keeps its own `checked` too, which this reads and writes. `change`
52860
+ * is sent on the menu when a reader's choice changes it. (property only)
52706
52861
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
52707
52862
  *
52708
52863
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -52728,6 +52883,7 @@ export type CustomElements = {
52728
52883
  *
52729
52884
  * Events that will be emitted by the component.
52730
52885
  *
52886
+ * - `change`: A reader's choice checked or unchecked rows. Read `checkedValues` for the rows that are checked now.
52731
52887
  * - `helix-before-close`: The menu is about to close. Cancelable: cancel it to keep it open.
52732
52888
  * - `helix-before-open`: The menu is about to open. Cancelable: cancel it to keep it closed.
52733
52889
  * - `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 +52895,8 @@ export type CustomElements = {
52739
52895
  * Areas where markup can be added to the component.
52740
52896
  *
52741
52897
  * - `(default)`: The items.
52898
+ * - `empty`: What the menu shows when it has no items, for content richer than `empty-text`.
52899
+ * - `loading`: What the menu shows while its items load, for content richer than `loading-text`.
52742
52900
  * - `no-results`: What the menu shows when the filter keeps no rows, for content richer than `no-results-text`.
52743
52901
  * - `trigger`: The control that opens the menu, or with `context` the area a context menu opens over.
52744
52902
  *
@@ -52784,6 +52942,8 @@ export type CustomElements = {
52784
52942
  * These can be used to apply styling when a component is in a given state.
52785
52943
  *
52786
52944
  * - `drilled`: A submenu's page is showing, so content that is not a row can hide with the top page.
52945
+ * - `entering`: From the moment the panel shows until its entrance has finished.
52946
+ * - `exiting`: From the moment the panel hides until its exit has finished.
52787
52947
  * - `mark`: A row on the current page has a checkbox or a link, so every row keeps the trailing column.
52788
52948
  * - `open`: While the menu is open.
52789
52949
  * - `placed-bottom`: While the open panel sits below its trigger.
@@ -55598,7 +55758,9 @@ export type CustomElements = {
55598
55758
  *
55599
55759
  * It opens on click and from a command. `command="--show"` and the related
55600
55760
  * commands work as they do on `Dialog` and `Drawer`, so a button anywhere on
55601
- * the page can open the popover with no script.
55761
+ * the page can open the popover with no script. From its first press, a
55762
+ * button that opens it this way says whether the popover is open: a Helix
55763
+ * button through `expanded`, and any other element with `aria-expanded`.
55602
55764
  *
55603
55765
  * **Opening moves focus into the panel**, to the first control in it, or to the
55604
55766
  * panel itself where it holds none, and closing from inside gives it back to
@@ -55608,8 +55770,12 @@ export type CustomElements = {
55608
55770
  * `modal` keeps `Tab` inside the panel while it is open and says so with
55609
55771
  * `aria-modal`, for a panel that has to be answered before the page goes on.
55610
55772
  * 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.
55773
+ * it is open, so the virtual cursor stays in the panel too, and the page does
55774
+ * not scroll behind it. Without it the popover does not trap focus.
55775
+ *
55776
+ * A press outside closes the panel and leaves focus where the press put it.
55777
+ * Where it put focus nowhere, as a press on text or on the page's background
55778
+ * does, focus goes back to the trigger.
55613
55779
  *
55614
55780
  * The panel's name is `label` when you set it. Otherwise it is the first
55615
55781
  * heading in the panel, or the elements an `aria-labelledby` on the host names.
@@ -55625,10 +55791,17 @@ export type CustomElements = {
55625
55791
  * | Escape | Closes the panel and puts focus back on the trigger. |
55626
55792
  * | 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
55793
  *
55794
+ * The panel opens against the trigger, or against the element `anchor` names,
55795
+ * such as a field beside the button that opens it. `offset` moves it away from
55796
+ * that element, `cross-offset` slides it along the side it is on,
55797
+ * `container-padding` keeps it that far from the window's edges, and
55798
+ * `flip="false"` keeps it on its side where the other side has more room.
55799
+ *
55628
55800
  * `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:
55801
+ * panel landed on is on the host as `:state(placed-top)` and its kin, its
55802
+ * alignment along that side as `:state(aligned-start)` or
55803
+ * `:state(aligned-end)`, and the trigger's width is on the panel as
55804
+ * `--floating-anchor-inline-size`, for a panel as wide as its trigger:
55632
55805
  *
55633
55806
  * ```css
55634
55807
  * helix-popover::part(popover) {
@@ -55640,12 +55813,25 @@ export type CustomElements = {
55640
55813
  *
55641
55814
  * Component attributes and properties that can be applied to the element or by using JavaScript.
55642
55815
  *
55816
+ * - `anchor`: The element the panel opens against, where that is not the trigger: its
55817
+ * `id` in the same document or shadow root, or the element itself. Left
55818
+ * empty, the panel opens against the trigger, or against the button whose
55819
+ * command opened it.
55643
55820
  * - `arrow`: Draws a point on the panel's edge facing the trigger.
55644
55821
  *
55645
55822
  * Off by default, which is the house style: a panel that opens from its
55646
55823
  * trigger already reads as belonging to it.
55824
+ * - `container-padding`/`containerPadding`: How close to the window's edges the panel may come, in pixels, when it
55825
+ * slides, shrinks or moves to the other side to fit. Left unset, it slides
55826
+ * and shrinks to 8 pixels from an edge and moves to the other side only
55827
+ * once it would cross one.
55828
+ * - `cross-offset`/`crossOffset`: How far to slide the panel along the side it is on, in pixels: to the
55829
+ * right on the top or the bottom, and down on the left or the right.
55647
55830
  * - `fallback-label`/`fallbackLabel`: The panel's name where nothing else names it: no `label`, no heading in
55648
55831
  * the panel, and no `aria-labelledby` on the host.
55832
+ * - `flip`: Whether the panel moves to the other side of the trigger when its own
55833
+ * side has no room. On by default. Write `flip="false"` to keep it on its
55834
+ * side, where it shrinks to fit, as React Aria's `shouldFlip` turns off.
55649
55835
  * - `label`: The panel's name, read by screen readers. Left empty, the first heading in
55650
55836
  * the panel names it, and then `fallback-label`.
55651
55837
  * - `modal`: Keeps `Tab` inside the panel while it is open, marks the panel
@@ -55743,6 +55929,8 @@ export type CustomElements = {
55743
55929
  *
55744
55930
  * These can be used to apply styling when a component is in a given state.
55745
55931
  *
55932
+ * - `aligned-end`: While the panel is aligned to the end of the side it sits on.
55933
+ * - `aligned-start`: While the panel is aligned to the start of the side it sits on.
55746
55934
  * - `entering`: From the moment the panel shows until its entrance has finished.
55747
55935
  * - `exiting`: From the moment the panel hides until its exit has finished.
55748
55936
  * - `open`: While the popover is open.
@@ -57338,7 +57526,7 @@ export type CustomElements = {
57338
57526
  * | Down, Enter, Space | Opens the list on the chosen option, or the first. |
57339
57527
  * | Up | Opens the list on the chosen option, or the last. |
57340
57528
  * | 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. |
57529
+ * | 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
57530
  * | 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
57531
  *
57344
57532
  * In the open list, which is a `Listbox`:
@@ -61319,6 +61507,10 @@ export type CustomElements = {
61319
61507
  * along, so the two writes a consumer would make in sequence do not compose
61320
61508
  * into the range they asked for. The platform has this method for that reason
61321
61509
  * and so does this.
61510
+ * - `setRangeText(replacement: string, start?: number, end?: number, selectMode?: SelectionMode) => void`: Replaces a range of the text, as the native method does: the selection
61511
+ * where `start` and `end` are left out, and `selectMode` says what is
61512
+ * selected after. It sends no event, as the native method sends none.
61513
+ * - `select() => void`: Selects everything in the field.
61322
61514
  * - `focus(options?: FocusOptions) => void`: Puts the caret in the field, as a label pointing at it would.
61323
61515
  * - `requestValue(next: string) => boolean`: Requests a new value, and returns whether the change was applied.
61324
61516
  *
@@ -69445,6 +69637,11 @@ export type CustomElementsSolidJs = {
69445
69637
  * Sending an empty required composer counts as trying. Tabbing past an empty
69446
69638
  * composer marks nothing.
69447
69639
  *
69640
+ * **`feedback` is a message of your own about the draft**, such as one your
69641
+ * server sent back. While it is set, the composer is invalid at once, does
69642
+ * not send or submit, shows the message under the field, and a screen reader
69643
+ * hears it as it appears. Clear it to let the draft go.
69644
+ *
69448
69645
  * **`typing` says whether the user is writing**, and `helix-typing` is sent
69449
69646
  * each time it changes: when they start, and when they send or stop for
69450
69647
  * `typing-timeout` milliseconds. Pass it on to show "is typing" to the other
@@ -69454,6 +69651,9 @@ export type CustomElementsSolidJs = {
69454
69651
  *
69455
69652
  * Component attributes and properties that can be applied to the element or by using JavaScript.
69456
69653
  *
69654
+ * - `feedback`: A message about the draft, shown under the field. While set, the composer
69655
+ * is invalid, does not send, and does not submit, as a field's `feedback`
69656
+ * does, and the message is announced as it appears.
69457
69657
  * - `label`: The field's name, read by screen readers.
69458
69658
  * - `maxlength`/`maxLength`: The most characters a draft can have. The field stops taking more.
69459
69659
  * - `minlength`/`minLength`: The fewest characters a draft can have, once the reader has written in
@@ -69602,6 +69802,7 @@ export type CustomElementsSolidJs = {
69602
69802
  *
69603
69803
  * - `composer`: The whole composer.
69604
69804
  * - `end`: The box around the `end` slot.
69805
+ * - `feedback`: The `feedback` message, under the field while it is set.
69605
69806
  * - `field`: The text field.
69606
69807
  * - `mark`: The icon inside the send button.
69607
69808
  * - `send`: The send button.
@@ -69612,7 +69813,7 @@ export type CustomElementsSolidJs = {
69612
69813
  *
69613
69814
  * These can be used to apply styling when a component is in a given state.
69614
69815
  *
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.
69816
+ * - `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
69817
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
69617
69818
  */
69618
69819
  "helix-headless-chat-composer": Partial<
@@ -69748,6 +69949,13 @@ export type CustomElementsSolidJs = {
69748
69949
  * `loading` while you fetch, then prepend the older turns. The turn the user
69749
69950
  * was reading stays in place on screen.
69750
69951
  *
69952
+ * The transcript is a `log`, the role for content added in order where the
69953
+ * newest matters most, and it answers the APG feed's keys. The `feed` role
69954
+ * reads its articles as a list from the top, with no newest end to stay
69955
+ * pinned to, so the log keeps the role a conversation has. While `loading` is
69956
+ * set or older turns load, the log carries `aria-busy`, as the APG asks of a
69957
+ * feed.
69958
+ *
69751
69959
  * The log is `aria-live="off"`. A separate status region announces each new
69752
69960
  * turn once, when it has finished arriving. It skips the user's own turns
69753
69961
  * unless they failed to send, turns loaded as history, and the turns already
@@ -69760,6 +69968,12 @@ export type CustomElementsSolidJs = {
69760
69968
  * conversations. `turns` draws a long
69761
69969
  * transcript one window at a time, so the log needs a block size of its own.
69762
69970
  *
69971
+ * The log scrolls on this tier. It carries `data-scroller`, and `core` ships
69972
+ * `[data-scroller] { overflow: auto }` into every shadow root, so pinning,
69973
+ * history and the window work with no stylesheet. You still need to give the
69974
+ * log a block size, such as `helix-headless-chat::part(log) { block-size:
69975
+ * 20rem }`.
69976
+ *
69763
69977
  * **A conversation is built from three elements.** The chat holds the
69764
69978
  * transcript, a `Chat.Message` stands for each turn, and a `Chat.Composer` sits
69765
69979
  * in the `composer` slot. When the user sends, `helix-send` reaches the chat:
@@ -69776,7 +69990,9 @@ export type CustomElementsSolidJs = {
69776
69990
  * turn says its place, such as "3 of 40", windowed or not. The transcript is
69777
69991
  * a tab stop while it holds a turn, and the turn a reader moved to is one
69778
69992
  * 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.
69993
+ * the turn into view, and moving to the newest pins it again. When the turn
69994
+ * holding focus is removed, focus moves to the turn that took its place, or to
69995
+ * the one before it where it was the last.
69780
69996
  *
69781
69997
  * | Key | What it does |
69782
69998
  * |---|---|
@@ -69955,7 +70171,7 @@ export type CustomElementsSolidJs = {
69955
70171
  * - `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
70172
  * - `live`: The region where screen readers announce each turn once it has arrived.
69957
70173
  * - `loading`: Shown while the history loads.
69958
- * - `log`: The transcript, which scrolls.
70174
+ * - `log`: The transcript, which scrolls. On this tier, it needs only a block size.
69959
70175
  * - `message`: The message drawn for a turn from `turns`, forwarded whole.
69960
70176
  * - `message-actions`: The controls on a turn from `turns`, beside its time.
69961
70177
  * - `message-avatar`: The avatar box of a turn from `turns`.
@@ -70902,7 +71118,8 @@ export type CustomElementsSolidJs = {
70902
71118
  *
70903
71119
  * The trigger and ArrowDown open the panel with focus in the square. Tab moves
70904
71120
  * between the panel's controls without leaving it, and Escape closes it and
70905
- * returns focus to the field.
71121
+ * returns focus to the control that opened it: the trigger after a press, and
71122
+ * the field after ArrowDown.
70906
71123
  *
70907
71124
  * The component sets `--color-input-swatch`, so do not set it yourself. It
70908
71125
  * holds the resolved color, so the styled tier can paint the swatch without
@@ -72865,6 +73082,10 @@ export type CustomElementsSolidJs = {
72865
73082
  * Off by default. Windowing costs a scroll listener, a measurement per row
72866
73083
  * drawn, and a `block-size` on the scrolling box, and a table of twenty rows
72867
73084
  * should pay none of them.
73085
+ *
73086
+ * While windowed, the `table` part scrolls on this tier: it carries
73087
+ * `data-scroller`, and `core` ships `[data-scroller] { overflow: auto }` into
73088
+ * every shadow root. You still need to give it a block size.
72868
73089
  * - `empty-text`/`emptyText`: The text shown and announced when there are no rows and none are loading.
72869
73090
  * - `loading`: Whether the rows are still loading.
72870
73091
  *
@@ -73027,7 +73248,7 @@ export type CustomElementsSolidJs = {
73027
73248
  * - `select`: The cell that holds a row's checkbox.
73028
73249
  * - `select-all`: The heading that holds the checkbox that selects every row.
73029
73250
  * - `select-selected`: Added to `select` in a selected row.
73030
- * - `table`: The grid.
73251
+ * - `table`: The grid. While `windowed`, the box that scrolls, which needs only a block size on this tier.
73031
73252
  * - `toggle`: The mark in a row header that a press opens and closes its row by, in a tree grid.
73032
73253
  * - `toggle-mark`: The caret in `toggle`. It points along the line while the row is closed and down while it is open.
73033
73254
  * - `toggle-open`: Added to `toggle` while its row is open.
@@ -74779,6 +75000,10 @@ export type CustomElementsSolidJs = {
74779
75000
  * <helix-headless-drawer id="nav">…</helix-headless-drawer>
74780
75001
  * ```
74781
75002
  *
75003
+ * From its first press, a button that opens the drawer this way says whether
75004
+ * the drawer is open: a Helix button through `expanded`, and any other
75005
+ * element with `aria-expanded`.
75006
+ *
74782
75007
  * ## Attributes & Properties
74783
75008
  *
74784
75009
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -81790,6 +82015,8 @@ export type CustomElementsSolidJs = {
81790
82015
  * These can be used to apply styling when a component is in a given state.
81791
82016
  *
81792
82017
  * - `checked`: The row is checked.
82018
+ * - `disabled`: The row is disabled.
82019
+ * - `expanded`: Under `submenus="flyout"`, the row's submenu is open beside it.
81793
82020
  * - `highlighted`: In a menu with `filterable`, the arrow keys or the pointer reached the row while focus stays in the filter field.
81794
82021
  * - `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
82022
  * - `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 +82043,9 @@ export type CustomElementsSolidJs = {
81816
82043
  *
81817
82044
  * Submenus drill down by default. A submenu replaces the panel's content, and a
81818
82045
  * back row returns to the previous page. One panel stays inside a narrow
81819
- * window, and works on touch screens, which have no hover.
82046
+ * window, and works on touch screens, which have no hover. Focus follows a
82047
+ * mouse resting on a row in either mode, and a drilled page is a `menu` named
82048
+ * by the row that opened it.
81820
82049
  *
81821
82050
  * **`submenus="flyout"` opens each submenu in a panel of its own beside its
81822
82051
  * row**, as React Aria's `SubmenuTrigger` and Radix's `Sub` do. Resting the
@@ -81850,6 +82079,11 @@ export type CustomElementsSolidJs = {
81850
82079
  * trigger's width, for a menu as wide as its trigger:
81851
82080
  * `helix-menu::part(surface) { min-inline-size: var(--floating-anchor-inline-size) }`.
81852
82081
  *
82082
+ * **The choices in one place.** `checkedValues` holds the values of the rows
82083
+ * that are checked, anywhere in the menu, and setting it checks exactly
82084
+ * those rows, as React Aria's `selectedKeys` does. `change` is sent on the
82085
+ * menu when a reader's choice changes it.
82086
+ *
81853
82087
  * With `context`, the trigger is an area and the menu is its context menu: a
81854
82088
  * right-click, a long press, Shift+F10 or the menu key over the area opens it
81855
82089
  * at the pointer, or at the area's corner from the keyboard, as Radix's context
@@ -81872,7 +82106,8 @@ export type CustomElementsSolidJs = {
81872
82106
  * field: Up and Down Arrow move the highlight through the rows that are left,
81873
82107
  * Enter chooses the highlighted row, Right Arrow opens its submenu, Left Arrow
81874
82108
  * 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
82109
+ * menu. A screen reader hears how many rows the filter keeps
82110
+ * (`results-label`). Home, End and the other keys move the caret and type. The field names
81876
82111
  * the highlighted row with `aria-activedescendant`, and the rows are a `menu`
81877
82112
  * after the field. Cancel `helix-filter` to keep every row
81878
82113
  * showing and narrow the rows yourself, such as by replacing them with rows
@@ -81912,6 +82147,9 @@ export type CustomElementsSolidJs = {
81912
82147
  * - `placement`: The side the menu opens on, when there is room.
81913
82148
  *
81914
82149
  * It moves if that side does not fit.
82150
+ * - `results-label`/`resultsLabel`: What a screen reader hears when the filter narrows the rows. `{count}` is
82151
+ * how many rows are left, written in the locale, and each language writes
82152
+ * the forms it has, as Listbox's `results-label` does.
81915
82153
  * - `submenus`: How a submenu opens. `drill` shows it in place of the page showing, with
81916
82154
  * a way back. `flyout` opens it in a panel of its own beside its row.
81917
82155
  * - `empty-text`/`emptyText`: The text shown and announced when there are no rows and none are loading.
@@ -81940,6 +82178,13 @@ export type CustomElementsSolidJs = {
81940
82178
  *
81941
82179
  * Absent, a row is kept where its words hold the filter, in any case. A
81942
82180
  * property only, there being no way to write a function in markup. (property only)
82181
+ * - `checkedValues`: The values of the choice rows that are checked, anywhere in the menu, in
82182
+ * document order.
82183
+ *
82184
+ * Set it to check exactly those rows and uncheck every other choice row, as
82185
+ * React Aria's `selectedKeys` controls a menu's selection from one place.
82186
+ * Each row keeps its own `checked` too, which this reads and writes. `change`
82187
+ * is sent on the menu when a reader's choice changes it. (property only)
81943
82188
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
81944
82189
  *
81945
82190
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -81965,6 +82210,7 @@ export type CustomElementsSolidJs = {
81965
82210
  *
81966
82211
  * Events that will be emitted by the component.
81967
82212
  *
82213
+ * - `change`: A reader's choice checked or unchecked rows. Read `checkedValues` for the rows that are checked now.
81968
82214
  * - `helix-before-close`: The menu is about to close. Cancelable: cancel it to keep it open.
81969
82215
  * - `helix-before-open`: The menu is about to open. Cancelable: cancel it to keep it closed.
81970
82216
  * - `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 +82222,8 @@ export type CustomElementsSolidJs = {
81976
82222
  * Areas where markup can be added to the component.
81977
82223
  *
81978
82224
  * - `(default)`: The items.
82225
+ * - `empty`: What the menu shows when it has no items, for content richer than `empty-text`.
82226
+ * - `loading`: What the menu shows while its items load, for content richer than `loading-text`.
81979
82227
  * - `no-results`: What the menu shows when the filter keeps no rows, for content richer than `no-results-text`.
81980
82228
  * - `trigger`: The control that opens the menu, or with `context` the area a context menu opens over.
81981
82229
  *
@@ -82021,6 +82269,8 @@ export type CustomElementsSolidJs = {
82021
82269
  * These can be used to apply styling when a component is in a given state.
82022
82270
  *
82023
82271
  * - `drilled`: A submenu's page is showing, so content that is not a row can hide with the top page.
82272
+ * - `entering`: From the moment the panel shows until its entrance has finished.
82273
+ * - `exiting`: From the moment the panel hides until its exit has finished.
82024
82274
  * - `mark`: A row on the current page has a checkbox or a link, so every row keeps the trailing column.
82025
82275
  * - `open`: While the menu is open.
82026
82276
  * - `placed-bottom`: While the open panel sits below its trigger.
@@ -84862,7 +85112,9 @@ export type CustomElementsSolidJs = {
84862
85112
  *
84863
85113
  * It opens on click and from a command. `command="--show"` and the related
84864
85114
  * commands work as they do on `Dialog` and `Drawer`, so a button anywhere on
84865
- * the page can open the popover with no script.
85115
+ * the page can open the popover with no script. From its first press, a
85116
+ * button that opens it this way says whether the popover is open: a Helix
85117
+ * button through `expanded`, and any other element with `aria-expanded`.
84866
85118
  *
84867
85119
  * **Opening moves focus into the panel**, to the first control in it, or to the
84868
85120
  * panel itself where it holds none, and closing from inside gives it back to
@@ -84872,8 +85124,12 @@ export type CustomElementsSolidJs = {
84872
85124
  * `modal` keeps `Tab` inside the panel while it is open and says so with
84873
85125
  * `aria-modal`, for a panel that has to be answered before the page goes on.
84874
85126
  * 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.
85127
+ * it is open, so the virtual cursor stays in the panel too, and the page does
85128
+ * not scroll behind it. Without it the popover does not trap focus.
85129
+ *
85130
+ * A press outside closes the panel and leaves focus where the press put it.
85131
+ * Where it put focus nowhere, as a press on text or on the page's background
85132
+ * does, focus goes back to the trigger.
84877
85133
  *
84878
85134
  * The panel's name is `label` when you set it. Otherwise it is the first
84879
85135
  * heading in the panel, or the elements an `aria-labelledby` on the host names.
@@ -84889,10 +85145,17 @@ export type CustomElementsSolidJs = {
84889
85145
  * | Escape | Closes the panel and puts focus back on the trigger. |
84890
85146
  * | 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
85147
  *
85148
+ * The panel opens against the trigger, or against the element `anchor` names,
85149
+ * such as a field beside the button that opens it. `offset` moves it away from
85150
+ * that element, `cross-offset` slides it along the side it is on,
85151
+ * `container-padding` keeps it that far from the window's edges, and
85152
+ * `flip="false"` keeps it on its side where the other side has more room.
85153
+ *
84892
85154
  * `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:
85155
+ * panel landed on is on the host as `:state(placed-top)` and its kin, its
85156
+ * alignment along that side as `:state(aligned-start)` or
85157
+ * `:state(aligned-end)`, and the trigger's width is on the panel as
85158
+ * `--floating-anchor-inline-size`, for a panel as wide as its trigger:
84896
85159
  *
84897
85160
  * ```css
84898
85161
  * helix-popover::part(popover) {
@@ -84904,12 +85167,25 @@ export type CustomElementsSolidJs = {
84904
85167
  *
84905
85168
  * Component attributes and properties that can be applied to the element or by using JavaScript.
84906
85169
  *
85170
+ * - `anchor`: The element the panel opens against, where that is not the trigger: its
85171
+ * `id` in the same document or shadow root, or the element itself. Left
85172
+ * empty, the panel opens against the trigger, or against the button whose
85173
+ * command opened it.
84907
85174
  * - `arrow`: Draws a point on the panel's edge facing the trigger.
84908
85175
  *
84909
85176
  * Off by default, which is the house style: a panel that opens from its
84910
85177
  * trigger already reads as belonging to it.
85178
+ * - `container-padding`/`containerPadding`: How close to the window's edges the panel may come, in pixels, when it
85179
+ * slides, shrinks or moves to the other side to fit. Left unset, it slides
85180
+ * and shrinks to 8 pixels from an edge and moves to the other side only
85181
+ * once it would cross one.
85182
+ * - `cross-offset`/`crossOffset`: How far to slide the panel along the side it is on, in pixels: to the
85183
+ * right on the top or the bottom, and down on the left or the right.
84911
85184
  * - `fallback-label`/`fallbackLabel`: The panel's name where nothing else names it: no `label`, no heading in
84912
85185
  * the panel, and no `aria-labelledby` on the host.
85186
+ * - `flip`: Whether the panel moves to the other side of the trigger when its own
85187
+ * side has no room. On by default. Write `flip="false"` to keep it on its
85188
+ * side, where it shrinks to fit, as React Aria's `shouldFlip` turns off.
84913
85189
  * - `label`: The panel's name, read by screen readers. Left empty, the first heading in
84914
85190
  * the panel names it, and then `fallback-label`.
84915
85191
  * - `modal`: Keeps `Tab` inside the panel while it is open, marks the panel
@@ -85007,6 +85283,8 @@ export type CustomElementsSolidJs = {
85007
85283
  *
85008
85284
  * These can be used to apply styling when a component is in a given state.
85009
85285
  *
85286
+ * - `aligned-end`: While the panel is aligned to the end of the side it sits on.
85287
+ * - `aligned-start`: While the panel is aligned to the start of the side it sits on.
85010
85288
  * - `entering`: From the moment the panel shows until its entrance has finished.
85011
85289
  * - `exiting`: From the moment the panel hides until its exit has finished.
85012
85290
  * - `open`: While the popover is open.
@@ -86623,7 +86901,7 @@ export type CustomElementsSolidJs = {
86623
86901
  * | Down, Enter, Space | Opens the list on the chosen option, or the first. |
86624
86902
  * | Up | Opens the list on the chosen option, or the last. |
86625
86903
  * | 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. |
86904
+ * | 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
86905
  * | 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
86906
  *
86629
86907
  * In the open list, which is a `Listbox`:
@@ -90667,6 +90945,10 @@ export type CustomElementsSolidJs = {
90667
90945
  * along, so the two writes a consumer would make in sequence do not compose
90668
90946
  * into the range they asked for. The platform has this method for that reason
90669
90947
  * and so does this.
90948
+ * - `setRangeText(replacement: string, start?: number, end?: number, selectMode?: SelectionMode) => void`: Replaces a range of the text, as the native method does: the selection
90949
+ * where `start` and `end` are left out, and `selectMode` says what is
90950
+ * selected after. It sends no event, as the native method sends none.
90951
+ * - `select() => void`: Selects everything in the field.
90670
90952
  * - `focus(options?: FocusOptions) => void`: Puts the caret in the field, as a label pointing at it would.
90671
90953
  * - `requestValue(next: string) => boolean`: Requests a new value, and returns whether the change was applied.
90672
90954
  *