@fusion.dev/helix-headless 0.157.0 → 0.158.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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fusion.dev/helix-headless",
3
3
  "description": "Headless component tier. Structure, accessibility, state, and form participation. No styling.",
4
- "version": "0.157.0",
4
+ "version": "0.158.0",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -49,13 +49,13 @@
49
49
  },
50
50
  "bugs": "https://github.com/project-fusion/fusion/issues",
51
51
  "dependencies": {
52
- "@fusion.dev/helix-core": "0.157.0",
53
- "@fusion.dev/helix-icons": "0.157.0",
52
+ "@fusion.dev/helix-core": "0.158.0",
53
+ "@fusion.dev/helix-icons": "0.158.0",
54
54
  "uqr": "^0.1.3"
55
55
  },
56
56
  "devDependencies": {
57
- "@fusion.dev/helix-cem": "0.157.0",
58
- "@fusion.dev/helix-testing": "0.157.0",
57
+ "@fusion.dev/helix-cem": "0.158.0",
58
+ "@fusion.dev/helix-testing": "0.158.0",
59
59
  "@fusion.dev/scripts": "0.0.0-dev",
60
60
  "@happy-dom/global-registrator": "^20.14.5",
61
61
  "@lit-labs/ssr": "^4.1.0",
package/types/jsx.d.ts CHANGED
@@ -8419,6 +8419,13 @@ hydration, or diffed by a framework, it comes back holding whatever the
8419
8419
  last reader did rather than what the author wrote. `:state(open)` carries
8420
8420
  the resolved state for stylesheets, which is what the mirror is for. */
8421
8421
  open?: (HelixHeadlessCommand["open"]) | undefined;
8422
+ /** Whether a command is kept by the filter: a function given the command's
8423
+ words and the filter, trimmed, that returns `true` to keep it showing, as
8424
+ React Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
8425
+
8426
+ Absent, a command is kept where its words hold the filter, in any case. A
8427
+ property only, there being no way to write a function in markup. */
8428
+ filterMatch?: (HelixHeadlessCommand["filterMatch"]) | undefined;
8422
8429
  /** The commands as data, for a palette too long to draw whole: each a value,
8423
8430
  which is also its words, or a record with a `value`, a `label` and
8424
8431
  `disabled`. Handed to the list, which draws only the commands in sight and
@@ -8548,6 +8555,13 @@ hydration, or diffed by a framework, it comes back holding whatever the
8548
8555
  last reader did rather than what the author wrote. `:state(open)` carries
8549
8556
  the resolved state for stylesheets, which is what the mirror is for. */
8550
8557
  "prop:open"?: (HelixHeadlessCommand["open"]) | undefined;
8558
+ /** Whether a command is kept by the filter: a function given the command's
8559
+ words and the filter, trimmed, that returns `true` to keep it showing, as
8560
+ React Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
8561
+
8562
+ Absent, a command is kept where its words hold the filter, in any case. A
8563
+ property only, there being no way to write a function in markup. */
8564
+ "prop:filterMatch"?: (HelixHeadlessCommand["filterMatch"]) | undefined;
8551
8565
  /** The commands as data, for a palette too long to draw whole: each a value,
8552
8566
  which is also its words, or a record with a `value`, a `label` and
8553
8567
  `disabled`. Handed to the list, which draws only the commands in sight and
@@ -17395,7 +17409,9 @@ Not reflected, as a state never is. `row-current` is the part a
17395
17409
  stylesheet draws it from. */
17396
17410
  current?: (HelixHeadlessListItem["current"]) | undefined;
17397
17411
  /** Takes the row out of reach in a list with `selection-mode`: the arrow keys
17398
- pass over it and it cannot be selected or acted on. */
17412
+ pass over it and it cannot be selected or acted on. In a list with
17413
+ `disabled-behavior="selection"`, it cannot be selected and is reached and
17414
+ acted on as any row is. */
17399
17415
  disabled?: (HelixHeadlessListItem["disabled"]) | undefined;
17400
17416
  /** The URL the row links to. Leave it empty for a row that is not a link.
17401
17417
 
@@ -17431,6 +17447,10 @@ being moved, or the one the drop indicator is beside. Unset otherwise. */
17431
17447
  Written by the list from its own `value`, and unset where nothing can be
17432
17448
  selected, which keeps `aria-selected` off a list that does not select. */
17433
17449
  selected?: (HelixHeadlessListItem["selected"]) | undefined;
17450
+ /** Whether `disabled` takes the row out of selection alone, written by a list
17451
+ with `disabled-behavior="selection"`. No attribute: it is coordination
17452
+ between elements, as `focusable` is. */
17453
+ selectionOnly?: (HelixHeadlessListItem["selectionOnly"]) | undefined;
17434
17454
 
17435
17455
  /** The reader pressed Enter on the row, or pressed the row in a list that selects nothing, in a list with `selection-mode`. Read the row from `target`. A row with `href` follows its link instead. */
17436
17456
  "onhelix-action"?: ((e: HelixHeadlessListItemHelixActionElementEvent) => void) | undefined;
@@ -17446,7 +17466,9 @@ Not reflected, as a state never is. `row-current` is the part a
17446
17466
  stylesheet draws it from. */
17447
17467
  "prop:current"?: (HelixHeadlessListItem["current"]) | undefined;
17448
17468
  /** Takes the row out of reach in a list with `selection-mode`: the arrow keys
17449
- pass over it and it cannot be selected or acted on. */
17469
+ pass over it and it cannot be selected or acted on. In a list with
17470
+ `disabled-behavior="selection"`, it cannot be selected and is reached and
17471
+ acted on as any row is. */
17450
17472
  "prop:disabled"?: (HelixHeadlessListItem["disabled"]) | undefined;
17451
17473
  /** The URL the row links to. Leave it empty for a row that is not a link.
17452
17474
 
@@ -17482,6 +17504,10 @@ being moved, or the one the drop indicator is beside. Unset otherwise. */
17482
17504
  Written by the list from its own `value`, and unset where nothing can be
17483
17505
  selected, which keeps `aria-selected` off a list that does not select. */
17484
17506
  "prop:selected"?: (HelixHeadlessListItem["selected"]) | undefined;
17507
+ /** Whether `disabled` takes the row out of selection alone, written by a list
17508
+ with `disabled-behavior="selection"`. No attribute: it is coordination
17509
+ between elements, as `focusable` is. */
17510
+ "prop:selectionOnly"?: (HelixHeadlessListItem["selectionOnly"]) | undefined;
17485
17511
  /** The reader pressed Enter on the row, or pressed the row in a list that selects nothing, in a list with `selection-mode`. Read the row from `target`. A row with `href` follows its link instead. */
17486
17512
  "on:helix-action"?: ((e: HelixHeadlessListItemHelixActionElementEvent) => void) | undefined;
17487
17513
 
@@ -17519,6 +17545,20 @@ refused, in a `reorderable` list. */
17519
17545
  /** What screen readers hear when a held row is put back, or a move is
17520
17546
  refused, in a `reorderable` list. */
17521
17547
  canceledLabel?: (HelixHeadlessList["canceledLabel"]) | undefined;
17548
+ /** What `disabled` takes from a row, in a list that selects: `all`, which
17549
+ passes over the row, or `selection`, which keeps the row out of the
17550
+ selection and lets the keys reach it and Enter or a press act on it, as
17551
+ React Aria's GridList takes `disabledBehavior`.
17552
+
17553
+ Absent is `all`. */
17554
+ "disabled-behavior"?: (HelixHeadlessList["disabledBehavior"]) | undefined;
17555
+ /** What `disabled` takes from a row, in a list that selects: `all`, which
17556
+ passes over the row, or `selection`, which keeps the row out of the
17557
+ selection and lets the keys reach it and Enter or a press act on it, as
17558
+ React Aria's GridList takes `disabledBehavior`.
17559
+
17560
+ Absent is `all`. */
17561
+ disabledBehavior?: (HelixHeadlessList["disabledBehavior"]) | undefined;
17522
17562
  /** What screen readers hear when a row is dropped, in a `reorderable` list. */
17523
17563
  "dropped-label"?: (HelixHeadlessList["droppedLabel"]) | undefined;
17524
17564
  /** What screen readers hear when a row is dropped, in a `reorderable` list. */
@@ -17651,6 +17691,20 @@ refused, in a `reorderable` list. */
17651
17691
  /** What screen readers hear when a held row is put back, or a move is
17652
17692
  refused, in a `reorderable` list. */
17653
17693
  "prop:canceledLabel"?: (HelixHeadlessList["canceledLabel"]) | undefined;
17694
+ /** What `disabled` takes from a row, in a list that selects: `all`, which
17695
+ passes over the row, or `selection`, which keeps the row out of the
17696
+ selection and lets the keys reach it and Enter or a press act on it, as
17697
+ React Aria's GridList takes `disabledBehavior`.
17698
+
17699
+ Absent is `all`. */
17700
+ "attr:disabled-behavior"?: (HelixHeadlessList["disabledBehavior"]) | undefined;
17701
+ /** What `disabled` takes from a row, in a list that selects: `all`, which
17702
+ passes over the row, or `selection`, which keeps the row out of the
17703
+ selection and lets the keys reach it and Enter or a press act on it, as
17704
+ React Aria's GridList takes `disabledBehavior`.
17705
+
17706
+ Absent is `all`. */
17707
+ "prop:disabledBehavior"?: (HelixHeadlessList["disabledBehavior"]) | undefined;
17654
17708
  /** What screen readers hear when a row is dropped, in a `reorderable` list. */
17655
17709
  "attr:dropped-label"?: (HelixHeadlessList["droppedLabel"]) | undefined;
17656
17710
  /** What screen readers hear when a row is dropped, in a `reorderable` list. */
@@ -18042,6 +18096,14 @@ imperatively later, and nothing is hydrating by then.
18042
18096
 
18043
18097
  Here rather than on each control. */
18044
18098
  name?: (HelixHeadlessListbox["name"]) | undefined;
18099
+ /** Whether an option is kept by the filter: a function given the option's
18100
+ words and the filter, trimmed, that returns `true` to keep it showing, as
18101
+ React Aria's `Autocomplete` takes `filter`. For matching that ignores
18102
+ accents, matches the start of each word, or matches out of order.
18103
+
18104
+ Absent, an option is kept where its words hold the filter, in any case. A
18105
+ property only, there being no way to write a function in markup. */
18106
+ filterMatch?: (HelixHeadlessListbox["filterMatch"]) | undefined;
18045
18107
  /** The options as data, for a list too long to draw whole: each a value,
18046
18108
  which is also its words, or a record with a `value`, a `label` and
18047
18109
  `disabled`. Set, the list draws only the options in sight, and the ones
@@ -18332,6 +18394,14 @@ imperatively later, and nothing is hydrating by then.
18332
18394
 
18333
18395
  Here rather than on each control. */
18334
18396
  "prop:name"?: (HelixHeadlessListbox["name"]) | undefined;
18397
+ /** Whether an option is kept by the filter: a function given the option's
18398
+ words and the filter, trimmed, that returns `true` to keep it showing, as
18399
+ React Aria's `Autocomplete` takes `filter`. For matching that ignores
18400
+ accents, matches the start of each word, or matches out of order.
18401
+
18402
+ Absent, an option is kept where its words hold the filter, in any case. A
18403
+ property only, there being no way to write a function in markup. */
18404
+ "prop:filterMatch"?: (HelixHeadlessListbox["filterMatch"]) | undefined;
18335
18405
  /** The options as data, for a list too long to draw whole: each a value,
18336
18406
  which is also its words, or a record with a `value`, a `label` and
18337
18407
  `disabled`. Set, the list draws only the options in sight, and the ones
@@ -21603,8 +21673,11 @@ imperatively later, and nothing is hydrating by then.
21603
21673
 
21604
21674
  Here rather than on each control. */
21605
21675
  name?: (HelixHeadlessNumberInput["name"]) | undefined;
21606
- /** The value as a number, or `NaN` while the control is empty.
21676
+ /** The value as a number, or `NaN` while the control is empty or does not
21677
+ hold a number.
21607
21678
 
21679
+ Read in the locale and the format, as the form reads it, so `1,5` typed
21680
+ in a locale with a decimal comma is 1.5 here while the form holds 1.5.
21608
21681
  `NaN` and not zero, which is the trap the platform already avoids: `Number('')`
21609
21682
  is zero, so an empty control would report a number it does not hold and a
21610
21683
  form would submit it. */
@@ -21878,8 +21951,11 @@ imperatively later, and nothing is hydrating by then.
21878
21951
 
21879
21952
  Here rather than on each control. */
21880
21953
  "prop:name"?: (HelixHeadlessNumberInput["name"]) | undefined;
21881
- /** The value as a number, or `NaN` while the control is empty.
21954
+ /** The value as a number, or `NaN` while the control is empty or does not
21955
+ hold a number.
21882
21956
 
21957
+ Read in the locale and the format, as the form reads it, so `1,5` typed
21958
+ in a locale with a decimal comma is 1.5 here while the form holds 1.5.
21883
21959
  `NaN` and not zero, which is the trap the platform already avoids: `Number('')`
21884
21960
  is zero, so an empty control would report a number it does not hold and a
21885
21961
  form would submit it. */
@@ -26018,7 +26094,8 @@ export type HelixHeadlessSkeletonProps = {
26018
26094
  /** What is loading, read out as the placeholder's name, such as "Loading
26019
26095
  profile".
26020
26096
 
26021
- Absent hides the placeholder from screen readers. */
26097
+ Absent hides the placeholder from screen readers. Around content, the name
26098
+ is read while `loading` is set, and the loaded content is read as it is. */
26022
26099
  label?: (HelixHeadlessSkeleton["label"]) | undefined;
26023
26100
  /** Whether the content inside is still loading, which keeps it inert and
26024
26101
  draws the placeholder over it.
@@ -26032,7 +26109,8 @@ export type HelixHeadlessSkeletonSolidJsProps = {
26032
26109
  /** What is loading, read out as the placeholder's name, such as "Loading
26033
26110
  profile".
26034
26111
 
26035
- Absent hides the placeholder from screen readers. */
26112
+ Absent hides the placeholder from screen readers. Around content, the name
26113
+ is read while `loading` is set, and the loaded content is read as it is. */
26036
26114
  "prop:label"?: (HelixHeadlessSkeleton["label"]) | undefined;
26037
26115
  /** Whether the content inside is still loading, which keeps it inert and
26038
26116
  draws the placeholder over it.
@@ -41095,8 +41173,9 @@ export type CustomElements = {
41095
41173
  *
41096
41174
  * Choosing the opener says `helix-select` with its value, and canceling it
41097
41175
  * keeps the page that is shown. The list then shows the page, named by the
41098
- * opener's words, and Backspace in an empty filter goes back. `page` says
41099
- * which page is shown.
41176
+ * opener's words, and a screen reader hears those words. Backspace in an empty
41177
+ * filter goes back, and a screen reader hears the name of the page it goes
41178
+ * back to. `page` says which page is shown.
41100
41179
  *
41101
41180
  * The filter is cleared when the palette closes, so each opening starts from
41102
41181
  * the full list. Combobox and Select do the same. As typing narrows the list, a
@@ -41118,9 +41197,10 @@ export type CustomElements = {
41118
41197
  * | Tab | Stays in the palette, which is modal. With `inline`, moves on through the page. |
41119
41198
  *
41120
41199
  * **ARIA.** The palette is a modal `dialog` named by `label`, or with
41121
- * `inline` no dialog at all. Inside it the filter field is a `combobox` with
41122
- * `aria-activedescendant` on the highlighted command, and the commands are a
41123
- * `listbox` of `option`s. How many commands typing left, the empty text and
41200
+ * `inline` no dialog at all. Inside it the filter field is a text field with
41201
+ * `aria-autocomplete="list"`, `aria-controls` on the list, and
41202
+ * `aria-activedescendant` on the highlighted command, as the field of React
41203
+ * Aria's `Autocomplete` is. The commands are a `listbox` of `option`s. How many commands typing left, the empty text and
41124
41204
  * the loading text are said in a polite live region.
41125
41205
  *
41126
41206
  * ## Attributes & Properties
@@ -41184,6 +41264,12 @@ export type CustomElements = {
41184
41264
  * hydration, or diffed by a framework, it comes back holding whatever the
41185
41265
  * last reader did rather than what the author wrote. `:state(open)` carries
41186
41266
  * the resolved state for stylesheets, which is what the mirror is for.
41267
+ * - `filterMatch`: Whether a command is kept by the filter: a function given the command's
41268
+ * words and the filter, trimmed, that returns `true` to keep it showing, as
41269
+ * React Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
41270
+ *
41271
+ * Absent, a command is kept where its words hold the filter, in any case. A
41272
+ * property only, there being no way to write a function in markup. (property only)
41187
41273
  * - `items`: The commands as data, for a palette too long to draw whole: each a value,
41188
41274
  * which is also its words, or a record with a `value`, a `label` and
41189
41275
  * `disabled`. Handed to the list, which draws only the commands in sight and
@@ -41275,6 +41361,7 @@ export type CustomElements = {
41275
41361
  * - `listbox-loading`: The text shown while the commands are loading.
41276
41362
  * - `listbox-search`: The region that holds the filter field.
41277
41363
  * - `listbox-search-field`: The filter field.
41364
+ * - `live`: The region a screen reader announces the page shown from, by the words of the command that opens it, drawn once there is one to say. Visually hidden in the styled tier.
41278
41365
  *
41279
41366
  * ## CSS States
41280
41367
  *
@@ -48186,7 +48273,9 @@ export type CustomElements = {
48186
48273
  * Not reflected, as a state never is. `row-current` is the part a
48187
48274
  * stylesheet draws it from.
48188
48275
  * - `disabled`: Takes the row out of reach in a list with `selection-mode`: the arrow keys
48189
- * pass over it and it cannot be selected or acted on.
48276
+ * pass over it and it cannot be selected or acted on. In a list with
48277
+ * `disabled-behavior="selection"`, it cannot be selected and is reached and
48278
+ * acted on as any row is.
48190
48279
  * - `href`: The URL the row links to. Leave it empty for a row that is not a link.
48191
48280
  *
48192
48281
  * Empty rather than optional, and unset by default: a list is not always a
@@ -48213,6 +48302,9 @@ export type CustomElements = {
48213
48302
  *
48214
48303
  * Written by the list from its own `value`, and unset where nothing can be
48215
48304
  * selected, which keeps `aria-selected` off a list that does not select. (property only)
48305
+ * - `selectionOnly`: Whether `disabled` takes the row out of selection alone, written by a list
48306
+ * with `disabled-behavior="selection"`. No attribute: it is coordination
48307
+ * between elements, as `focusable` is. (property only)
48216
48308
  * - `words`: The row's words, or none where the children are not known yet. (property only) (readonly)
48217
48309
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
48218
48310
  *
@@ -48273,6 +48365,7 @@ export type CustomElements = {
48273
48365
  * - `dragging`: The row is being moved, in a `reorderable` list.
48274
48366
  * - `drop-after`: The row being moved goes after this one when it is dropped.
48275
48367
  * - `drop-before`: The row being moved goes before this one when it is dropped.
48368
+ * - `focus-visible`: The row's cell has keyboard focus that the browser shows, in a list with `selection-mode`.
48276
48369
  * - `selected`: The row is selected, in a list that selects.
48277
48370
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
48278
48371
  */
@@ -48289,7 +48382,9 @@ export type CustomElements = {
48289
48382
  * `multiple` any number, and `value` holds the selected rows' values,
48290
48383
  * separated by commas. A change asks with `helix-before-change` and tells
48291
48384
  * with `change`. `none` selects nothing, so a press acts on the row. A
48292
- * `disabled` row is passed over. Each row is named by its label and described
48385
+ * `disabled` row is passed over. With `disabled-behavior="selection"`, a
48386
+ * `disabled` row cannot be selected, and is reached and acted on as any row
48387
+ * is, as React Aria's GridList has it. Each row is named by its label and described
48293
48388
  * by its description, so the words of the controls in `end` are not read as
48294
48389
  * part of its name.
48295
48390
  *
@@ -48367,6 +48462,12 @@ export type CustomElements = {
48367
48462
  *
48368
48463
  * - `canceled-label`/`canceledLabel`: What screen readers hear when a held row is put back, or a move is
48369
48464
  * refused, in a `reorderable` list.
48465
+ * - `disabled-behavior`/`disabledBehavior`: What `disabled` takes from a row, in a list that selects: `all`, which
48466
+ * passes over the row, or `selection`, which keeps the row out of the
48467
+ * selection and lets the keys reach it and Enter or a press act on it, as
48468
+ * React Aria's GridList takes `disabledBehavior`.
48469
+ *
48470
+ * Absent is `all`.
48370
48471
  * - `dropped-label`/`droppedLabel`: What screen readers hear when a row is dropped, in a `reorderable` list.
48371
48472
  * - `empty-label`/`emptyLabel`: The text of the row shown while the list has no rows, where the `empty`
48372
48473
  * slot is empty. Empty, the default, shows no row.
@@ -48506,7 +48607,9 @@ export type CustomElements = {
48506
48607
  * With `multiple` set, `value` is a comma-separated string, like
48507
48608
  * `Checkbox.Group`'s, because `MixinControllerValue` holds a string. The form
48508
48609
  * receives one entry per selected option, as a native `<select multiple>` sends
48509
- * it, so your server does not split on commas.
48610
+ * it, so your server does not split on commas. An option's value may hold a
48611
+ * comma: a run of the string that is an option's value is read as that one
48612
+ * value, and the form sends it as one entry.
48510
48613
  *
48511
48614
  * Selected and active are separate. The selected option is the value. The
48512
48615
  * active option is where the keyboard is: the arrow keys move it, and
@@ -48713,6 +48816,13 @@ export type CustomElements = {
48713
48816
  * imperatively later, and nothing is hydrating by then.
48714
48817
  *
48715
48818
  * Here rather than on each control.
48819
+ * - `filterMatch`: Whether an option is kept by the filter: a function given the option's
48820
+ * words and the filter, trimmed, that returns `true` to keep it showing, as
48821
+ * React Aria's `Autocomplete` takes `filter`. For matching that ignores
48822
+ * accents, matches the start of each word, or matches out of order.
48823
+ *
48824
+ * Absent, an option is kept where its words hold the filter, in any case. A
48825
+ * property only, there being no way to write a function in markup. (property only)
48716
48826
  * - `items`: The options as data, for a list too long to draw whole: each a value,
48717
48827
  * which is also its words, or a record with a `value`, a `label` and
48718
48828
  * `disabled`. Set, the list draws only the options in sight, and the ones
@@ -48749,7 +48859,10 @@ export type CustomElements = {
48749
48859
  * Descendants rather than children, because a group puts a level between the
48750
48860
  * list and its options and the keyboard has to move through a grouped list
48751
48861
  * exactly as it moves through a flat one. (property only) (readonly)
48752
- * - `values`: The chosen values, as an array whether or not `multiple` is set. (property only) (readonly)
48862
+ * - `values`: The chosen values, as an array whether or not `multiple` is set.
48863
+ *
48864
+ * Read against the options' values, so an option whose value holds a comma
48865
+ * is one value. See `chosenValues`. (property only) (readonly)
48753
48866
  * - `validity`: Whether the control meets its constraints, and why not. (property only) (readonly)
48754
48867
  * - `validationMessage`: The message the browser would show for the control, or an empty string. (property only) (readonly)
48755
48868
  * - `willValidate`: Whether the control is checked when its form is submitted. (property only) (readonly)
@@ -50520,8 +50633,8 @@ export type CustomElements = {
50520
50633
  * rows, Home and End go to the first and the last, a typed letter moves to
50521
50634
  * the next row whose name starts with it, Enter and Space choose, Right Arrow
50522
50635
  * opens a row's submenu and Left Arrow goes back, the two swapping on a
50523
- * right-to-left page, and Escape closes the menu and returns focus to the
50524
- * trigger. Tab closes it and moves on.
50636
+ * right-to-left page. Left Arrow on the top page does nothing. Escape closes
50637
+ * the menu and returns focus to the trigger. Tab closes it and moves on.
50525
50638
  *
50526
50639
  * While it is open, the surface carries the trigger's width as
50527
50640
  * `--floating-anchor-inline-size` and the room left below it as
@@ -50665,6 +50778,10 @@ export type CustomElements = {
50665
50778
  * - `drilled`: A submenu's page is showing, so content that is not a row can hide with the top page.
50666
50779
  * - `mark`: A row on the current page has a checkbox or a link, so every row keeps the trailing column.
50667
50780
  * - `open`: While the menu is open.
50781
+ * - `placed-bottom`: While the open panel sits below its trigger.
50782
+ * - `placed-left`: While the open panel sits to the left of its trigger.
50783
+ * - `placed-right`: While the open panel sits to the right of its trigger.
50784
+ * - `placed-top`: While the open panel sits above its trigger.
50668
50785
  * - `start`: A row on the current page has content in its leading column, so every row keeps that column.
50669
50786
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
50670
50787
  */
@@ -51564,9 +51681,9 @@ export type CustomElements = {
51564
51681
  * The locale's group separators are read in every field, so `1,234` is a
51565
51682
  * number in `en-US`.
51566
51683
  *
51567
- * The field and its two buttons sit in a `role="group"`, and the field carries
51568
- * `role-label`, "number field" in English, as its `aria-roledescription`, as
51569
- * React Aria's NumberField does. On iOS and iPadOS the field is a plain text
51684
+ * The field and its two buttons sit in a `role="group"` named by the label,
51685
+ * and the field carries `role-label`, "number field" in English, as its
51686
+ * `aria-roledescription`, as React Aria's NumberField does. On iOS and iPadOS the field is a plain text
51570
51687
  * field, with no `role="spinbutton"`, which VoiceOver reads as a slider you
51571
51688
  * cannot type in, and no role description, so VoiceOver says the field is
51572
51689
  * required. React Aria's NumberField does the same.
@@ -51745,8 +51862,11 @@ export type CustomElements = {
51745
51862
  * imperatively later, and nothing is hydrating by then.
51746
51863
  *
51747
51864
  * Here rather than on each control.
51748
- * - `valueAsNumber`: The value as a number, or `NaN` while the control is empty.
51865
+ * - `valueAsNumber`: The value as a number, or `NaN` while the control is empty or does not
51866
+ * hold a number.
51749
51867
  *
51868
+ * Read in the locale and the format, as the form reads it, so `1,5` typed
51869
+ * in a locale with a decimal comma is 1.5 here while the form holds 1.5.
51750
51870
  * `NaN` and not zero, which is the trap the platform already avoids: `Number('')`
51751
51871
  * is zero, so an empty control would report a number it does not hold and a
51752
51872
  * form would submit it. (property only)
@@ -55142,7 +55262,9 @@ export type CustomElements = {
55142
55262
  * whole set.
55143
55263
  *
55144
55264
  * `Select` owns the value, passes it down to the listbox, and takes changes
55145
- * back, so the value lives in one place.
55265
+ * back, so the value lives in one place. With `multiple`, the value is the
55266
+ * chosen values joined with commas, and the form receives one entry for each.
55267
+ * An option's value may hold a comma, and it is read as one value.
55146
55268
  *
55147
55269
  * Set `valueContent` to draw the trigger's content from the chosen options,
55148
55270
  * and several chosen options are written as a list in the reader's language.
@@ -55519,7 +55641,8 @@ export type CustomElements = {
55519
55641
  * - `label`: What is loading, read out as the placeholder's name, such as "Loading
55520
55642
  * profile".
55521
55643
  *
55522
- * Absent hides the placeholder from screen readers.
55644
+ * Absent hides the placeholder from screen readers. Around content, the name
55645
+ * is read while `loading` is set, and the loaded content is read as it is.
55523
55646
  * - `loading`: Whether the content inside is still loading, which keeps it inert and
55524
55647
  * draws the placeholder over it.
55525
55648
  *
@@ -69278,8 +69401,9 @@ export type CustomElementsSolidJs = {
69278
69401
  *
69279
69402
  * Choosing the opener says `helix-select` with its value, and canceling it
69280
69403
  * keeps the page that is shown. The list then shows the page, named by the
69281
- * opener's words, and Backspace in an empty filter goes back. `page` says
69282
- * which page is shown.
69404
+ * opener's words, and a screen reader hears those words. Backspace in an empty
69405
+ * filter goes back, and a screen reader hears the name of the page it goes
69406
+ * back to. `page` says which page is shown.
69283
69407
  *
69284
69408
  * The filter is cleared when the palette closes, so each opening starts from
69285
69409
  * the full list. Combobox and Select do the same. As typing narrows the list, a
@@ -69301,9 +69425,10 @@ export type CustomElementsSolidJs = {
69301
69425
  * | Tab | Stays in the palette, which is modal. With `inline`, moves on through the page. |
69302
69426
  *
69303
69427
  * **ARIA.** The palette is a modal `dialog` named by `label`, or with
69304
- * `inline` no dialog at all. Inside it the filter field is a `combobox` with
69305
- * `aria-activedescendant` on the highlighted command, and the commands are a
69306
- * `listbox` of `option`s. How many commands typing left, the empty text and
69428
+ * `inline` no dialog at all. Inside it the filter field is a text field with
69429
+ * `aria-autocomplete="list"`, `aria-controls` on the list, and
69430
+ * `aria-activedescendant` on the highlighted command, as the field of React
69431
+ * Aria's `Autocomplete` is. The commands are a `listbox` of `option`s. How many commands typing left, the empty text and
69307
69432
  * the loading text are said in a polite live region.
69308
69433
  *
69309
69434
  * ## Attributes & Properties
@@ -69367,6 +69492,12 @@ export type CustomElementsSolidJs = {
69367
69492
  * hydration, or diffed by a framework, it comes back holding whatever the
69368
69493
  * last reader did rather than what the author wrote. `:state(open)` carries
69369
69494
  * the resolved state for stylesheets, which is what the mirror is for.
69495
+ * - `filterMatch`: Whether a command is kept by the filter: a function given the command's
69496
+ * words and the filter, trimmed, that returns `true` to keep it showing, as
69497
+ * React Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
69498
+ *
69499
+ * Absent, a command is kept where its words hold the filter, in any case. A
69500
+ * property only, there being no way to write a function in markup. (property only)
69370
69501
  * - `items`: The commands as data, for a palette too long to draw whole: each a value,
69371
69502
  * which is also its words, or a record with a `value`, a `label` and
69372
69503
  * `disabled`. Handed to the list, which draws only the commands in sight and
@@ -69458,6 +69589,7 @@ export type CustomElementsSolidJs = {
69458
69589
  * - `listbox-loading`: The text shown while the commands are loading.
69459
69590
  * - `listbox-search`: The region that holds the filter field.
69460
69591
  * - `listbox-search-field`: The filter field.
69592
+ * - `live`: The region a screen reader announces the page shown from, by the words of the command that opens it, drawn once there is one to say. Visually hidden in the styled tier.
69461
69593
  *
69462
69594
  * ## CSS States
69463
69595
  *
@@ -76437,7 +76569,9 @@ export type CustomElementsSolidJs = {
76437
76569
  * Not reflected, as a state never is. `row-current` is the part a
76438
76570
  * stylesheet draws it from.
76439
76571
  * - `disabled`: Takes the row out of reach in a list with `selection-mode`: the arrow keys
76440
- * pass over it and it cannot be selected or acted on.
76572
+ * pass over it and it cannot be selected or acted on. In a list with
76573
+ * `disabled-behavior="selection"`, it cannot be selected and is reached and
76574
+ * acted on as any row is.
76441
76575
  * - `href`: The URL the row links to. Leave it empty for a row that is not a link.
76442
76576
  *
76443
76577
  * Empty rather than optional, and unset by default: a list is not always a
@@ -76464,6 +76598,9 @@ export type CustomElementsSolidJs = {
76464
76598
  *
76465
76599
  * Written by the list from its own `value`, and unset where nothing can be
76466
76600
  * selected, which keeps `aria-selected` off a list that does not select. (property only)
76601
+ * - `selectionOnly`: Whether `disabled` takes the row out of selection alone, written by a list
76602
+ * with `disabled-behavior="selection"`. No attribute: it is coordination
76603
+ * between elements, as `focusable` is. (property only)
76467
76604
  * - `words`: The row's words, or none where the children are not known yet. (property only) (readonly)
76468
76605
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
76469
76606
  *
@@ -76524,6 +76661,7 @@ export type CustomElementsSolidJs = {
76524
76661
  * - `dragging`: The row is being moved, in a `reorderable` list.
76525
76662
  * - `drop-after`: The row being moved goes after this one when it is dropped.
76526
76663
  * - `drop-before`: The row being moved goes before this one when it is dropped.
76664
+ * - `focus-visible`: The row's cell has keyboard focus that the browser shows, in a list with `selection-mode`.
76527
76665
  * - `selected`: The row is selected, in a list that selects.
76528
76666
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
76529
76667
  */
@@ -76543,7 +76681,9 @@ export type CustomElementsSolidJs = {
76543
76681
  * `multiple` any number, and `value` holds the selected rows' values,
76544
76682
  * separated by commas. A change asks with `helix-before-change` and tells
76545
76683
  * with `change`. `none` selects nothing, so a press acts on the row. A
76546
- * `disabled` row is passed over. Each row is named by its label and described
76684
+ * `disabled` row is passed over. With `disabled-behavior="selection"`, a
76685
+ * `disabled` row cannot be selected, and is reached and acted on as any row
76686
+ * is, as React Aria's GridList has it. Each row is named by its label and described
76547
76687
  * by its description, so the words of the controls in `end` are not read as
76548
76688
  * part of its name.
76549
76689
  *
@@ -76621,6 +76761,12 @@ export type CustomElementsSolidJs = {
76621
76761
  *
76622
76762
  * - `canceled-label`/`canceledLabel`: What screen readers hear when a held row is put back, or a move is
76623
76763
  * refused, in a `reorderable` list.
76764
+ * - `disabled-behavior`/`disabledBehavior`: What `disabled` takes from a row, in a list that selects: `all`, which
76765
+ * passes over the row, or `selection`, which keeps the row out of the
76766
+ * selection and lets the keys reach it and Enter or a press act on it, as
76767
+ * React Aria's GridList takes `disabledBehavior`.
76768
+ *
76769
+ * Absent is `all`.
76624
76770
  * - `dropped-label`/`droppedLabel`: What screen readers hear when a row is dropped, in a `reorderable` list.
76625
76771
  * - `empty-label`/`emptyLabel`: The text of the row shown while the list has no rows, where the `empty`
76626
76772
  * slot is empty. Empty, the default, shows no row.
@@ -76763,7 +76909,9 @@ export type CustomElementsSolidJs = {
76763
76909
  * With `multiple` set, `value` is a comma-separated string, like
76764
76910
  * `Checkbox.Group`'s, because `MixinControllerValue` holds a string. The form
76765
76911
  * receives one entry per selected option, as a native `<select multiple>` sends
76766
- * it, so your server does not split on commas.
76912
+ * it, so your server does not split on commas. An option's value may hold a
76913
+ * comma: a run of the string that is an option's value is read as that one
76914
+ * value, and the form sends it as one entry.
76767
76915
  *
76768
76916
  * Selected and active are separate. The selected option is the value. The
76769
76917
  * active option is where the keyboard is: the arrow keys move it, and
@@ -76970,6 +77118,13 @@ export type CustomElementsSolidJs = {
76970
77118
  * imperatively later, and nothing is hydrating by then.
76971
77119
  *
76972
77120
  * Here rather than on each control.
77121
+ * - `filterMatch`: Whether an option is kept by the filter: a function given the option's
77122
+ * words and the filter, trimmed, that returns `true` to keep it showing, as
77123
+ * React Aria's `Autocomplete` takes `filter`. For matching that ignores
77124
+ * accents, matches the start of each word, or matches out of order.
77125
+ *
77126
+ * Absent, an option is kept where its words hold the filter, in any case. A
77127
+ * property only, there being no way to write a function in markup. (property only)
76973
77128
  * - `items`: The options as data, for a list too long to draw whole: each a value,
76974
77129
  * which is also its words, or a record with a `value`, a `label` and
76975
77130
  * `disabled`. Set, the list draws only the options in sight, and the ones
@@ -77006,7 +77161,10 @@ export type CustomElementsSolidJs = {
77006
77161
  * Descendants rather than children, because a group puts a level between the
77007
77162
  * list and its options and the keyboard has to move through a grouped list
77008
77163
  * exactly as it moves through a flat one. (property only) (readonly)
77009
- * - `values`: The chosen values, as an array whether or not `multiple` is set. (property only) (readonly)
77164
+ * - `values`: The chosen values, as an array whether or not `multiple` is set.
77165
+ *
77166
+ * Read against the options' values, so an option whose value holds a comma
77167
+ * is one value. See `chosenValues`. (property only) (readonly)
77010
77168
  * - `validity`: Whether the control meets its constraints, and why not. (property only) (readonly)
77011
77169
  * - `validationMessage`: The message the browser would show for the control, or an empty string. (property only) (readonly)
77012
77170
  * - `willValidate`: Whether the control is checked when its form is submitted. (property only) (readonly)
@@ -78812,8 +78970,8 @@ export type CustomElementsSolidJs = {
78812
78970
  * rows, Home and End go to the first and the last, a typed letter moves to
78813
78971
  * the next row whose name starts with it, Enter and Space choose, Right Arrow
78814
78972
  * opens a row's submenu and Left Arrow goes back, the two swapping on a
78815
- * right-to-left page, and Escape closes the menu and returns focus to the
78816
- * trigger. Tab closes it and moves on.
78973
+ * right-to-left page. Left Arrow on the top page does nothing. Escape closes
78974
+ * the menu and returns focus to the trigger. Tab closes it and moves on.
78817
78975
  *
78818
78976
  * While it is open, the surface carries the trigger's width as
78819
78977
  * `--floating-anchor-inline-size` and the room left below it as
@@ -78957,6 +79115,10 @@ export type CustomElementsSolidJs = {
78957
79115
  * - `drilled`: A submenu's page is showing, so content that is not a row can hide with the top page.
78958
79116
  * - `mark`: A row on the current page has a checkbox or a link, so every row keeps the trailing column.
78959
79117
  * - `open`: While the menu is open.
79118
+ * - `placed-bottom`: While the open panel sits below its trigger.
79119
+ * - `placed-left`: While the open panel sits to the left of its trigger.
79120
+ * - `placed-right`: While the open panel sits to the right of its trigger.
79121
+ * - `placed-top`: While the open panel sits above its trigger.
78960
79122
  * - `start`: A row on the current page has content in its leading column, so every row keeps that column.
78961
79123
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
78962
79124
  */
@@ -79867,9 +80029,9 @@ export type CustomElementsSolidJs = {
79867
80029
  * The locale's group separators are read in every field, so `1,234` is a
79868
80030
  * number in `en-US`.
79869
80031
  *
79870
- * The field and its two buttons sit in a `role="group"`, and the field carries
79871
- * `role-label`, "number field" in English, as its `aria-roledescription`, as
79872
- * React Aria's NumberField does. On iOS and iPadOS the field is a plain text
80032
+ * The field and its two buttons sit in a `role="group"` named by the label,
80033
+ * and the field carries `role-label`, "number field" in English, as its
80034
+ * `aria-roledescription`, as React Aria's NumberField does. On iOS and iPadOS the field is a plain text
79873
80035
  * field, with no `role="spinbutton"`, which VoiceOver reads as a slider you
79874
80036
  * cannot type in, and no role description, so VoiceOver says the field is
79875
80037
  * required. React Aria's NumberField does the same.
@@ -80048,8 +80210,11 @@ export type CustomElementsSolidJs = {
80048
80210
  * imperatively later, and nothing is hydrating by then.
80049
80211
  *
80050
80212
  * Here rather than on each control.
80051
- * - `valueAsNumber`: The value as a number, or `NaN` while the control is empty.
80213
+ * - `valueAsNumber`: The value as a number, or `NaN` while the control is empty or does not
80214
+ * hold a number.
80052
80215
  *
80216
+ * Read in the locale and the format, as the form reads it, so `1,5` typed
80217
+ * in a locale with a decimal comma is 1.5 here while the form holds 1.5.
80053
80218
  * `NaN` and not zero, which is the trap the platform already avoids: `Number('')`
80054
80219
  * is zero, so an empty control would report a number it does not hold and a
80055
80220
  * form would submit it. (property only)
@@ -83482,7 +83647,9 @@ export type CustomElementsSolidJs = {
83482
83647
  * whole set.
83483
83648
  *
83484
83649
  * `Select` owns the value, passes it down to the listbox, and takes changes
83485
- * back, so the value lives in one place.
83650
+ * back, so the value lives in one place. With `multiple`, the value is the
83651
+ * chosen values joined with commas, and the form receives one entry for each.
83652
+ * An option's value may hold a comma, and it is read as one value.
83486
83653
  *
83487
83654
  * Set `valueContent` to draw the trigger's content from the chosen options,
83488
83655
  * and several chosen options are written as a list in the reader's language.
@@ -83862,7 +84029,8 @@ export type CustomElementsSolidJs = {
83862
84029
  * - `label`: What is loading, read out as the placeholder's name, such as "Loading
83863
84030
  * profile".
83864
84031
  *
83865
- * Absent hides the placeholder from screen readers.
84032
+ * Absent hides the placeholder from screen readers. Around content, the name
84033
+ * is read while `loading` is set, and the loaded content is read as it is.
83866
84034
  * - `loading`: Whether the content inside is still loading, which keeps it inert and
83867
84035
  * draws the placeholder over it.
83868
84036
  *