@fusion.dev/helix-headless 0.157.0 → 0.159.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 (56) hide show
  1. package/custom-elements.json +851 -56
  2. package/dist/app-header/root/app-header-root.d.ts +59 -12
  3. package/dist/app-header/root/app-header-root.js +68 -29
  4. package/dist/button/root/button-root.d.ts +8 -0
  5. package/dist/button/root/button-root.js +4 -0
  6. package/dist/button-group/root/button-group-root.d.ts +20 -7
  7. package/dist/button-group/root/button-group-root.js +30 -5
  8. package/dist/command/root/command-root.d.ts +19 -5
  9. package/dist/command/root/command-root.js +14 -4
  10. package/dist/data-table/root/data-table-root.js +5 -2
  11. package/dist/element-events.generated.js +7 -1
  12. package/dist/lightbox/item/lightbox-item.d.ts +7 -1
  13. package/dist/lightbox/item/lightbox-item.js +15 -2
  14. package/dist/lightbox/root/lightbox-root.d.ts +8 -4
  15. package/dist/lightbox/root/lightbox-root.js +9 -1
  16. package/dist/lightbox/zoom-controller.d.ts +13 -4
  17. package/dist/lightbox/zoom-controller.js +17 -0
  18. package/dist/list/item/list-item.d.ts +15 -1
  19. package/dist/list/item/list-item.js +20 -1
  20. package/dist/list/root/list-root.d.ts +29 -1
  21. package/dist/list/root/list-root.js +44 -10
  22. package/dist/listbox/root/listbox-root.d.ts +19 -2
  23. package/dist/listbox/root/listbox-root.js +16 -8
  24. package/dist/map/root/map-root.d.ts +4 -0
  25. package/dist/map/root/map-root.js +1 -1
  26. package/dist/menu/item/menu-item.js +1 -1
  27. package/dist/menu/root/menu-root.d.ts +6 -2
  28. package/dist/menu/root/menu-root.js +9 -2
  29. package/dist/number-input/root/number-input-root.d.ts +7 -4
  30. package/dist/number-input/root/number-input-root.js +3 -3
  31. package/dist/progress/root/progress-root.js +1 -1
  32. package/dist/select/root/select-root.d.ts +8 -1
  33. package/dist/select/root/select-root.js +8 -5
  34. package/dist/skeleton/root/skeleton-root.d.ts +2 -1
  35. package/dist/skeleton/root/skeleton-root.js +1 -1
  36. package/dist/steps/root/steps-root.js +8 -6
  37. package/dist/steps/step/step.d.ts +9 -0
  38. package/dist/steps/step/step.js +19 -2
  39. package/dist/tabs/panel/tab-panel.d.ts +22 -1
  40. package/dist/tabs/panel/tab-panel.js +22 -1
  41. package/dist/tabs/root/tabs-root.d.ts +21 -5
  42. package/dist/tabs/root/tabs-root.js +24 -13
  43. package/dist/tabs/tab/tab.d.ts +4 -2
  44. package/dist/tabs/tab/tab.js +3 -1
  45. package/dist/toast/item/toast-item.d.ts +27 -8
  46. package/dist/toast/item/toast-item.js +47 -11
  47. package/dist/toast/root/toast-root.d.ts +24 -1
  48. package/dist/toast/root/toast-root.js +54 -0
  49. package/dist/tour/root/tour-root.d.ts +34 -0
  50. package/dist/tour/root/tour-root.js +92 -3
  51. package/dist/tour/stop/tour-stop.d.ts +33 -1
  52. package/dist/tour/stop/tour-stop.js +12 -1
  53. package/lint.json +1 -1
  54. package/package.json +5 -5
  55. package/types/jsx.d.ts +667 -102
  56. package/types/vue.d.ts +148 -23
package/types/jsx.d.ts CHANGED
@@ -936,9 +936,18 @@ export type HelixHeadlessAppHeaderElementEvent<E = Event> = TypedEvent<
936
936
  HelixHeadlessAppHeader,
937
937
  E
938
938
  >;
939
+ /** `helix-before-close` event type */
940
+ export type HelixHeadlessAppHeaderHelixBeforeCloseElementEvent =
941
+ HelixHeadlessAppHeaderElementEvent<HelixBeforeCloseEvent>;
942
+ /** `helix-before-open` event type */
943
+ export type HelixHeadlessAppHeaderHelixBeforeOpenElementEvent =
944
+ HelixHeadlessAppHeaderElementEvent<HelixBeforeOpenEvent>;
939
945
  /** `helix-scrolled` event type */
940
946
  export type HelixHeadlessAppHeaderHelixScrolledElementEvent =
941
947
  HelixHeadlessAppHeaderElementEvent<HelixScrolledEvent>;
948
+ /** `toggle` event type */
949
+ export type HelixHeadlessAppHeaderToggleElementEvent =
950
+ HelixHeadlessAppHeaderElementEvent<ToggleEvent>;
942
951
 
943
952
  export type HelixHeadlessAppHeaderProps = {
944
953
  /** Where the middle region sits in the bar.
@@ -988,11 +997,50 @@ page scrolls up. */
988
997
  /** The id of the element whose scrolling lifts the bar, for an app shell that
989
998
  scrolls a container instead of the window. Unset is the window. */
990
999
  scroller?: (HelixHeadlessAppHeader["scroller"]) | undefined;
1000
+ /** Where the toggle that opens a folded middle region sits: at the end of the
1001
+ bar, after the trailing content, or with `start`, before the leading
1002
+ content.
1003
+
1004
+ Optional, so the resting bar writes no attribute onto the host. */
1005
+ "toggle-placement"?: (HelixHeadlessAppHeader["togglePlacement"]) | undefined;
1006
+ /** Where the toggle that opens a folded middle region sits: at the end of the
1007
+ bar, after the trailing content, or with `start`, before the leading
1008
+ content.
1009
+
1010
+ Optional, so the resting bar writes no attribute onto the host. */
1011
+ togglePlacement?: (HelixHeadlessAppHeader["togglePlacement"]) | undefined;
1012
+ /** Whether the element starts open. Ignored once `open` is written. */
1013
+ "default-open"?: (HelixHeadlessAppHeader["defaultOpen"]) | undefined;
1014
+ /** Whether the element starts open. Ignored once `open` is written. */
1015
+ defaultOpen?: (HelixHeadlessAppHeader["defaultOpen"]) | undefined;
1016
+ /** Whether the element is open.
1017
+
1018
+ One property, not two, so `dialog.open` answers the question anyone
1019
+ asking it meant. Writing always applies; `<helix-dialog open>` is the
1020
+ same statement in markup.
991
1021
 
1022
+ **Not reflected, and that is required rather than tidy.** Reflection
1023
+ writes the resolved state back as an attribute, so an element that opened
1024
+ itself would put `open` on its own host: cloned, serialized for
1025
+ hydration, or diffed by a framework, it comes back holding whatever the
1026
+ last reader did rather than what the author wrote. `:state(open)` carries
1027
+ the resolved state for stylesheets, which is what the mirror is for. */
1028
+ open?: (HelixHeadlessAppHeader["open"]) | undefined;
1029
+
1030
+ /** The folded region is about to close. Cancelable: cancel it to keep it open. */
1031
+ "onhelix-before-close"?: ((
1032
+ e: HelixHeadlessAppHeaderHelixBeforeCloseElementEvent,
1033
+ ) => void) | undefined;
1034
+ /** The folded region is about to open. Cancelable: cancel it to keep it closed. */
1035
+ "onhelix-before-open"?: ((
1036
+ e: HelixHeadlessAppHeaderHelixBeforeOpenElementEvent,
1037
+ ) => void) | undefined;
992
1038
  /** Fired when the page crosses the scroll threshold, with the new state. A custom state cannot be observed the way an attribute can, so listen for this event to follow it. The event uses the header's own threshold and hysteresis, so you do not need a second scroll listener. */
993
1039
  "onhelix-scrolled"?: ((
994
1040
  e: HelixHeadlessAppHeaderHelixScrolledElementEvent,
995
1041
  ) => void) | undefined;
1042
+ /** The folded region opened or closed. The event carries `newState` and `oldState`. */
1043
+ ontoggle?: ((e: HelixHeadlessAppHeaderToggleElementEvent) => void) | undefined;
996
1044
  };
997
1045
 
998
1046
  export type HelixHeadlessAppHeaderSolidJsProps = {
@@ -1043,10 +1091,49 @@ page scrolls up. */
1043
1091
  /** The id of the element whose scrolling lifts the bar, for an app shell that
1044
1092
  scrolls a container instead of the window. Unset is the window. */
1045
1093
  "prop:scroller"?: (HelixHeadlessAppHeader["scroller"]) | undefined;
1094
+ /** Where the toggle that opens a folded middle region sits: at the end of the
1095
+ bar, after the trailing content, or with `start`, before the leading
1096
+ content.
1097
+
1098
+ Optional, so the resting bar writes no attribute onto the host. */
1099
+ "attr:toggle-placement"?: (HelixHeadlessAppHeader["togglePlacement"]) | undefined;
1100
+ /** Where the toggle that opens a folded middle region sits: at the end of the
1101
+ bar, after the trailing content, or with `start`, before the leading
1102
+ content.
1103
+
1104
+ Optional, so the resting bar writes no attribute onto the host. */
1105
+ "prop:togglePlacement"?: (HelixHeadlessAppHeader["togglePlacement"]) | undefined;
1106
+ /** Whether the element starts open. Ignored once `open` is written. */
1107
+ "bool:default-open"?: (HelixHeadlessAppHeader["defaultOpen"]) | undefined;
1108
+ /** Whether the element starts open. Ignored once `open` is written. */
1109
+ "prop:defaultOpen"?: (HelixHeadlessAppHeader["defaultOpen"]) | undefined;
1110
+ /** Whether the element is open.
1111
+
1112
+ One property, not two, so `dialog.open` answers the question anyone
1113
+ asking it meant. Writing always applies; `<helix-dialog open>` is the
1114
+ same statement in markup.
1115
+
1116
+ **Not reflected, and that is required rather than tidy.** Reflection
1117
+ writes the resolved state back as an attribute, so an element that opened
1118
+ itself would put `open` on its own host: cloned, serialized for
1119
+ hydration, or diffed by a framework, it comes back holding whatever the
1120
+ last reader did rather than what the author wrote. `:state(open)` carries
1121
+ the resolved state for stylesheets, which is what the mirror is for. */
1122
+ "prop:open"?: (HelixHeadlessAppHeader["open"]) | undefined;
1123
+ /** The folded region is about to close. Cancelable: cancel it to keep it open. */
1124
+ "on:helix-before-close"?: ((
1125
+ e: HelixHeadlessAppHeaderHelixBeforeCloseElementEvent,
1126
+ ) => void) | undefined;
1127
+ /** The folded region is about to open. Cancelable: cancel it to keep it closed. */
1128
+ "on:helix-before-open"?: ((
1129
+ e: HelixHeadlessAppHeaderHelixBeforeOpenElementEvent,
1130
+ ) => void) | undefined;
1046
1131
  /** Fired when the page crosses the scroll threshold, with the new state. A custom state cannot be observed the way an attribute can, so listen for this event to follow it. The event uses the header's own threshold and hysteresis, so you do not need a second scroll listener. */
1047
1132
  "on:helix-scrolled"?: ((
1048
1133
  e: HelixHeadlessAppHeaderHelixScrolledElementEvent,
1049
1134
  ) => void) | undefined;
1135
+ /** The folded region opened or closed. The event carries `newState` and `oldState`. */
1136
+ "on:toggle"?: ((e: HelixHeadlessAppHeaderToggleElementEvent) => void) | undefined;
1050
1137
 
1051
1138
  /** Set the innerHTML of the element */
1052
1139
  innerHTML?: (string) | undefined;
@@ -2317,6 +2404,14 @@ export type HelixHeadlessButtonGroupHelixBeforeChangeElementEvent =
2317
2404
  HelixHeadlessButtonGroupElementEvent<HelixBeforeChangeEvent>;
2318
2405
 
2319
2406
  export type HelixHeadlessButtonGroupProps = {
2407
+ /** Keeps at least one button pressed once one is, as React Aria's
2408
+ `disallowEmptySelection`: a press that would leave none pressed is
2409
+ refused. */
2410
+ "disallow-empty-selection"?: (HelixHeadlessButtonGroup["disallowEmptySelection"]) | undefined;
2411
+ /** Keeps at least one button pressed once one is, as React Aria's
2412
+ `disallowEmptySelection`: a press that would leave none pressed is
2413
+ refused. */
2414
+ disallowEmptySelection?: (HelixHeadlessButtonGroup["disallowEmptySelection"]) | undefined;
2320
2415
  /** The group's name, read by screen readers.
2321
2416
 
2322
2417
  On the host through internals, so an author's `aria-label` still overrides
@@ -2368,6 +2463,14 @@ not reflect, as a native control's `value` does not. */
2368
2463
  };
2369
2464
 
2370
2465
  export type HelixHeadlessButtonGroupSolidJsProps = {
2466
+ /** Keeps at least one button pressed once one is, as React Aria's
2467
+ `disallowEmptySelection`: a press that would leave none pressed is
2468
+ refused. */
2469
+ "bool:disallow-empty-selection"?: (HelixHeadlessButtonGroup["disallowEmptySelection"]) | undefined;
2470
+ /** Keeps at least one button pressed once one is, as React Aria's
2471
+ `disallowEmptySelection`: a press that would leave none pressed is
2472
+ refused. */
2473
+ "prop:disallowEmptySelection"?: (HelixHeadlessButtonGroup["disallowEmptySelection"]) | undefined;
2371
2474
  /** The group's name, read by screen readers.
2372
2475
 
2373
2476
  On the host through internals, so an author's `aria-label` still overrides
@@ -8419,6 +8522,13 @@ hydration, or diffed by a framework, it comes back holding whatever the
8419
8522
  last reader did rather than what the author wrote. `:state(open)` carries
8420
8523
  the resolved state for stylesheets, which is what the mirror is for. */
8421
8524
  open?: (HelixHeadlessCommand["open"]) | undefined;
8525
+ /** Whether a command is kept by the filter: a function given the command's
8526
+ words and the filter, trimmed, that returns `true` to keep it showing, as
8527
+ React Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
8528
+
8529
+ Absent, a command is kept where its words hold the filter, in any case. A
8530
+ property only, there being no way to write a function in markup. */
8531
+ filterMatch?: (HelixHeadlessCommand["filterMatch"]) | undefined;
8422
8532
  /** The commands as data, for a palette too long to draw whole: each a value,
8423
8533
  which is also its words, or a record with a `value`, a `label` and
8424
8534
  `disabled`. Handed to the list, which draws only the commands in sight and
@@ -8548,6 +8658,13 @@ hydration, or diffed by a framework, it comes back holding whatever the
8548
8658
  last reader did rather than what the author wrote. `:state(open)` carries
8549
8659
  the resolved state for stylesheets, which is what the mirror is for. */
8550
8660
  "prop:open"?: (HelixHeadlessCommand["open"]) | undefined;
8661
+ /** Whether a command is kept by the filter: a function given the command's
8662
+ words and the filter, trimmed, that returns `true` to keep it showing, as
8663
+ React Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
8664
+
8665
+ Absent, a command is kept where its words hold the filter, in any case. A
8666
+ property only, there being no way to write a function in markup. */
8667
+ "prop:filterMatch"?: (HelixHeadlessCommand["filterMatch"]) | undefined;
8551
8668
  /** The commands as data, for a palette too long to draw whole: each a value,
8552
8669
  which is also its words, or a record with a `value`, a `label` and
8553
8670
  `disabled`. Handed to the list, which draws only the commands in sight and
@@ -17395,7 +17512,9 @@ Not reflected, as a state never is. `row-current` is the part a
17395
17512
  stylesheet draws it from. */
17396
17513
  current?: (HelixHeadlessListItem["current"]) | undefined;
17397
17514
  /** 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. */
17515
+ pass over it and it cannot be selected or acted on. In a list with
17516
+ `disabled-behavior="selection"`, it cannot be selected and is reached and
17517
+ acted on as any row is. */
17399
17518
  disabled?: (HelixHeadlessListItem["disabled"]) | undefined;
17400
17519
  /** The URL the row links to. Leave it empty for a row that is not a link.
17401
17520
 
@@ -17431,6 +17550,10 @@ being moved, or the one the drop indicator is beside. Unset otherwise. */
17431
17550
  Written by the list from its own `value`, and unset where nothing can be
17432
17551
  selected, which keeps `aria-selected` off a list that does not select. */
17433
17552
  selected?: (HelixHeadlessListItem["selected"]) | undefined;
17553
+ /** Whether `disabled` takes the row out of selection alone, written by a list
17554
+ with `disabled-behavior="selection"`. No attribute: it is coordination
17555
+ between elements, as `focusable` is. */
17556
+ selectionOnly?: (HelixHeadlessListItem["selectionOnly"]) | undefined;
17434
17557
 
17435
17558
  /** 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
17559
  "onhelix-action"?: ((e: HelixHeadlessListItemHelixActionElementEvent) => void) | undefined;
@@ -17446,7 +17569,9 @@ Not reflected, as a state never is. `row-current` is the part a
17446
17569
  stylesheet draws it from. */
17447
17570
  "prop:current"?: (HelixHeadlessListItem["current"]) | undefined;
17448
17571
  /** 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. */
17572
+ pass over it and it cannot be selected or acted on. In a list with
17573
+ `disabled-behavior="selection"`, it cannot be selected and is reached and
17574
+ acted on as any row is. */
17450
17575
  "prop:disabled"?: (HelixHeadlessListItem["disabled"]) | undefined;
17451
17576
  /** The URL the row links to. Leave it empty for a row that is not a link.
17452
17577
 
@@ -17482,6 +17607,10 @@ being moved, or the one the drop indicator is beside. Unset otherwise. */
17482
17607
  Written by the list from its own `value`, and unset where nothing can be
17483
17608
  selected, which keeps `aria-selected` off a list that does not select. */
17484
17609
  "prop:selected"?: (HelixHeadlessListItem["selected"]) | undefined;
17610
+ /** Whether `disabled` takes the row out of selection alone, written by a list
17611
+ with `disabled-behavior="selection"`. No attribute: it is coordination
17612
+ between elements, as `focusable` is. */
17613
+ "prop:selectionOnly"?: (HelixHeadlessListItem["selectionOnly"]) | undefined;
17485
17614
  /** 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
17615
  "on:helix-action"?: ((e: HelixHeadlessListItemHelixActionElementEvent) => void) | undefined;
17487
17616
 
@@ -17519,6 +17648,20 @@ refused, in a `reorderable` list. */
17519
17648
  /** What screen readers hear when a held row is put back, or a move is
17520
17649
  refused, in a `reorderable` list. */
17521
17650
  canceledLabel?: (HelixHeadlessList["canceledLabel"]) | undefined;
17651
+ /** What `disabled` takes from a row, in a list that selects: `all`, which
17652
+ passes over the row, or `selection`, which keeps the row out of the
17653
+ selection and lets the keys reach it and Enter or a press act on it, as
17654
+ React Aria's GridList takes `disabledBehavior`.
17655
+
17656
+ Absent is `all`. */
17657
+ "disabled-behavior"?: (HelixHeadlessList["disabledBehavior"]) | undefined;
17658
+ /** What `disabled` takes from a row, in a list that selects: `all`, which
17659
+ passes over the row, or `selection`, which keeps the row out of the
17660
+ selection and lets the keys reach it and Enter or a press act on it, as
17661
+ React Aria's GridList takes `disabledBehavior`.
17662
+
17663
+ Absent is `all`. */
17664
+ disabledBehavior?: (HelixHeadlessList["disabledBehavior"]) | undefined;
17522
17665
  /** What screen readers hear when a row is dropped, in a `reorderable` list. */
17523
17666
  "dropped-label"?: (HelixHeadlessList["droppedLabel"]) | undefined;
17524
17667
  /** What screen readers hear when a row is dropped, in a `reorderable` list. */
@@ -17651,6 +17794,20 @@ refused, in a `reorderable` list. */
17651
17794
  /** What screen readers hear when a held row is put back, or a move is
17652
17795
  refused, in a `reorderable` list. */
17653
17796
  "prop:canceledLabel"?: (HelixHeadlessList["canceledLabel"]) | undefined;
17797
+ /** What `disabled` takes from a row, in a list that selects: `all`, which
17798
+ passes over the row, or `selection`, which keeps the row out of the
17799
+ selection and lets the keys reach it and Enter or a press act on it, as
17800
+ React Aria's GridList takes `disabledBehavior`.
17801
+
17802
+ Absent is `all`. */
17803
+ "attr:disabled-behavior"?: (HelixHeadlessList["disabledBehavior"]) | undefined;
17804
+ /** What `disabled` takes from a row, in a list that selects: `all`, which
17805
+ passes over the row, or `selection`, which keeps the row out of the
17806
+ selection and lets the keys reach it and Enter or a press act on it, as
17807
+ React Aria's GridList takes `disabledBehavior`.
17808
+
17809
+ Absent is `all`. */
17810
+ "prop:disabledBehavior"?: (HelixHeadlessList["disabledBehavior"]) | undefined;
17654
17811
  /** What screen readers hear when a row is dropped, in a `reorderable` list. */
17655
17812
  "attr:dropped-label"?: (HelixHeadlessList["droppedLabel"]) | undefined;
17656
17813
  /** What screen readers hear when a row is dropped, in a `reorderable` list. */
@@ -18042,6 +18199,14 @@ imperatively later, and nothing is hydrating by then.
18042
18199
 
18043
18200
  Here rather than on each control. */
18044
18201
  name?: (HelixHeadlessListbox["name"]) | undefined;
18202
+ /** Whether an option is kept by the filter: a function given the option's
18203
+ words and the filter, trimmed, that returns `true` to keep it showing, as
18204
+ React Aria's `Autocomplete` takes `filter`. For matching that ignores
18205
+ accents, matches the start of each word, or matches out of order.
18206
+
18207
+ Absent, an option is kept where its words hold the filter, in any case. A
18208
+ property only, there being no way to write a function in markup. */
18209
+ filterMatch?: (HelixHeadlessListbox["filterMatch"]) | undefined;
18045
18210
  /** The options as data, for a list too long to draw whole: each a value,
18046
18211
  which is also its words, or a record with a `value`, a `label` and
18047
18212
  `disabled`. Set, the list draws only the options in sight, and the ones
@@ -18332,6 +18497,14 @@ imperatively later, and nothing is hydrating by then.
18332
18497
 
18333
18498
  Here rather than on each control. */
18334
18499
  "prop:name"?: (HelixHeadlessListbox["name"]) | undefined;
18500
+ /** Whether an option is kept by the filter: a function given the option's
18501
+ words and the filter, trimmed, that returns `true` to keep it showing, as
18502
+ React Aria's `Autocomplete` takes `filter`. For matching that ignores
18503
+ accents, matches the start of each word, or matches out of order.
18504
+
18505
+ Absent, an option is kept where its words hold the filter, in any case. A
18506
+ property only, there being no way to write a function in markup. */
18507
+ "prop:filterMatch"?: (HelixHeadlessListbox["filterMatch"]) | undefined;
18335
18508
  /** The options as data, for a list too long to draw whole: each a value,
18336
18509
  which is also its words, or a record with a `value`, a `label` and
18337
18510
  `disabled`. Set, the list draws only the options in sight, and the ones
@@ -21603,8 +21776,11 @@ imperatively later, and nothing is hydrating by then.
21603
21776
 
21604
21777
  Here rather than on each control. */
21605
21778
  name?: (HelixHeadlessNumberInput["name"]) | undefined;
21606
- /** The value as a number, or `NaN` while the control is empty.
21779
+ /** The value as a number, or `NaN` while the control is empty or does not
21780
+ hold a number.
21607
21781
 
21782
+ Read in the locale and the format, as the form reads it, so `1,5` typed
21783
+ in a locale with a decimal comma is 1.5 here while the form holds 1.5.
21608
21784
  `NaN` and not zero, which is the trap the platform already avoids: `Number('')`
21609
21785
  is zero, so an empty control would report a number it does not hold and a
21610
21786
  form would submit it. */
@@ -21878,8 +22054,11 @@ imperatively later, and nothing is hydrating by then.
21878
22054
 
21879
22055
  Here rather than on each control. */
21880
22056
  "prop:name"?: (HelixHeadlessNumberInput["name"]) | undefined;
21881
- /** The value as a number, or `NaN` while the control is empty.
22057
+ /** The value as a number, or `NaN` while the control is empty or does not
22058
+ hold a number.
21882
22059
 
22060
+ Read in the locale and the format, as the form reads it, so `1,5` typed
22061
+ in a locale with a decimal comma is 1.5 here while the form holds 1.5.
21883
22062
  `NaN` and not zero, which is the trap the platform already avoids: `Number('')`
21884
22063
  is zero, so an empty control would report a number it does not hold and a
21885
22064
  form would submit it. */
@@ -26018,7 +26197,8 @@ export type HelixHeadlessSkeletonProps = {
26018
26197
  /** What is loading, read out as the placeholder's name, such as "Loading
26019
26198
  profile".
26020
26199
 
26021
- Absent hides the placeholder from screen readers. */
26200
+ Absent hides the placeholder from screen readers. Around content, the name
26201
+ is read while `loading` is set, and the loaded content is read as it is. */
26022
26202
  label?: (HelixHeadlessSkeleton["label"]) | undefined;
26023
26203
  /** Whether the content inside is still loading, which keeps it inert and
26024
26204
  draws the placeholder over it.
@@ -26032,7 +26212,8 @@ export type HelixHeadlessSkeletonSolidJsProps = {
26032
26212
  /** What is loading, read out as the placeholder's name, such as "Loading
26033
26213
  profile".
26034
26214
 
26035
- Absent hides the placeholder from screen readers. */
26215
+ Absent hides the placeholder from screen readers. Around content, the name
26216
+ is read while `loading` is set, and the loaded content is read as it is. */
26036
26217
  "prop:label"?: (HelixHeadlessSkeleton["label"]) | undefined;
26037
26218
  /** Whether the content inside is still loading, which keeps it inert and
26038
26219
  draws the placeholder over it.
@@ -28981,7 +29162,19 @@ known by its place among the rows as written. */
28981
29162
  textContent?: (string | number) | undefined;
28982
29163
  };
28983
29164
 
29165
+ /** `HelixHeadlessTabPanel` component event */
29166
+ export type HelixHeadlessTabPanelElementEvent<E = Event> = TypedEvent<
29167
+ HelixHeadlessTabPanel,
29168
+ E
29169
+ >;
29170
+ /** `helix-load` event type */
29171
+ export type HelixHeadlessTabPanelHelixLoadElementEvent =
29172
+ HelixHeadlessTabPanelElementEvent<HelixLoadEvent>;
29173
+
28984
29174
  export type HelixHeadlessTabPanelProps = {
29175
+ /** Whether the panel's content waits in a `<template>` until the panel is
29176
+ first shown. */
29177
+ lazy?: (HelixHeadlessTabPanel["lazy"]) | undefined;
28985
29178
  /** Whether this panel is the visible one. */
28986
29179
  selected?: (HelixHeadlessTabPanel["selected"]) | undefined;
28987
29180
  /** Pairs the panel with the tab of the same value. */
@@ -28997,9 +29190,15 @@ written in, and the tab's control is inside the tab's shadow root, which no
28997
29190
  reference from the light DOM can reach. `aria-label` on a `tabpanel` is how
28998
29191
  the pattern names one anyway. */
28999
29192
  label?: (HelixHeadlessTabPanel["label"]) | undefined;
29193
+
29194
+ /** Fired the first time a `lazy` panel is shown, once its template's content is in. */
29195
+ "onhelix-load"?: ((e: HelixHeadlessTabPanelHelixLoadElementEvent) => void) | undefined;
29000
29196
  };
29001
29197
 
29002
29198
  export type HelixHeadlessTabPanelSolidJsProps = {
29199
+ /** Whether the panel's content waits in a `<template>` until the panel is
29200
+ first shown. */
29201
+ "prop:lazy"?: (HelixHeadlessTabPanel["lazy"]) | undefined;
29003
29202
  /** Whether this panel is the visible one. */
29004
29203
  "prop:selected"?: (HelixHeadlessTabPanel["selected"]) | undefined;
29005
29204
  /** Pairs the panel with the tab of the same value. */
@@ -29015,6 +29214,8 @@ written in, and the tab's control is inside the tab's shadow root, which no
29015
29214
  reference from the light DOM can reach. `aria-label` on a `tabpanel` is how
29016
29215
  the pattern names one anyway. */
29017
29216
  "prop:label"?: (HelixHeadlessTabPanel["label"]) | undefined;
29217
+ /** Fired the first time a `lazy` panel is shown, once its template's content is in. */
29218
+ "on:helix-load"?: ((e: HelixHeadlessTabPanelHelixLoadElementEvent) => void) | undefined;
29018
29219
 
29019
29220
  /** Set the innerHTML of the element */
29020
29221
  innerHTML?: (string) | undefined;
@@ -31638,6 +31839,12 @@ consumer's server markup does not have. A sheet carries the resting
31638
31839
  arrangement in its own `:host` rule and the selectors describe only the
31639
31840
  departures, which is what `orientation` does. */
31640
31841
  placement?: (HelixHeadlessToast["placement"]) | undefined;
31842
+ /** The edge a touch or a pen swipes a message toward to dismiss it: `end`,
31843
+ the end of the line, or `start`, `top` or `bottom`. Unset is `end`. */
31844
+ "swipe-direction"?: (HelixHeadlessToast["swipeDirection"]) | undefined;
31845
+ /** The edge a touch or a pen swipes a message toward to dismiss it: `end`,
31846
+ the end of the line, or `start`, `top` or `bottom`. Unset is `end`. */
31847
+ swipeDirection?: (HelixHeadlessToast["swipeDirection"]) | undefined;
31641
31848
 
31642
31849
  /** A message is being dismissed, by its control or by its timer. The message sends it, and you can listen for it on the region. Cancelable: canceling it keeps the message. */
31643
31850
  "onhelix-dismiss"?: ((e: HelixHeadlessToastHelixDismissElementEvent) => void) | undefined;
@@ -31685,6 +31892,12 @@ consumer's server markup does not have. A sheet carries the resting
31685
31892
  arrangement in its own `:host` rule and the selectors describe only the
31686
31893
  departures, which is what `orientation` does. */
31687
31894
  "prop:placement"?: (HelixHeadlessToast["placement"]) | undefined;
31895
+ /** The edge a touch or a pen swipes a message toward to dismiss it: `end`,
31896
+ the end of the line, or `start`, `top` or `bottom`. Unset is `end`. */
31897
+ "attr:swipe-direction"?: (HelixHeadlessToast["swipeDirection"]) | undefined;
31898
+ /** The edge a touch or a pen swipes a message toward to dismiss it: `end`,
31899
+ the end of the line, or `start`, `top` or `bottom`. Unset is `end`. */
31900
+ "prop:swipeDirection"?: (HelixHeadlessToast["swipeDirection"]) | undefined;
31688
31901
  /** A message is being dismissed, by its control or by its timer. The message sends it, and you can listen for it on the region. Cancelable: canceling it keeps the message. */
31689
31902
  "on:helix-dismiss"?: ((e: HelixHeadlessToastHelixDismissElementEvent) => void) | undefined;
31690
31903
 
@@ -32601,6 +32814,14 @@ The shape is `Carousel`'s, which is the nearest thing in the library: a
32601
32814
  "next-label"?: (HelixHeadlessTour["nextLabel"]) | undefined;
32602
32815
  /** Label for the control that goes on. */
32603
32816
  nextLabel?: (HelixHeadlessTour["nextLabel"]) | undefined;
32817
+ /** What a press outside the current stop and its target does while the tour
32818
+ runs. Unset, nothing: the page stays usable. `close` ends the tour, as
32819
+ Skip does, and `block` refuses the press. */
32820
+ "outside-press"?: (HelixHeadlessTour["outsidePress"]) | undefined;
32821
+ /** What a press outside the current stop and its target does while the tour
32822
+ runs. Unset, nothing: the page stays usable. `close` ends the tour, as
32823
+ Skip does, and `block` refuses the press. */
32824
+ outsidePress?: (HelixHeadlessTour["outsidePress"]) | undefined;
32604
32825
  /** Draws each stop's place in the run in its panel, as well as saying it. */
32605
32826
  progress?: (HelixHeadlessTour["progress"]) | undefined;
32606
32827
  /** Each stop's place in the run, with `{index}` and `{count}` filled in and
@@ -32691,6 +32912,14 @@ The shape is `Carousel`'s, which is the nearest thing in the library: a
32691
32912
  "attr:next-label"?: (HelixHeadlessTour["nextLabel"]) | undefined;
32692
32913
  /** Label for the control that goes on. */
32693
32914
  "prop:nextLabel"?: (HelixHeadlessTour["nextLabel"]) | undefined;
32915
+ /** What a press outside the current stop and its target does while the tour
32916
+ runs. Unset, nothing: the page stays usable. `close` ends the tour, as
32917
+ Skip does, and `block` refuses the press. */
32918
+ "attr:outside-press"?: (HelixHeadlessTour["outsidePress"]) | undefined;
32919
+ /** What a press outside the current stop and its target does while the tour
32920
+ runs. Unset, nothing: the page stays usable. `close` ends the tour, as
32921
+ Skip does, and `block` refuses the press. */
32922
+ "prop:outsidePress"?: (HelixHeadlessTour["outsidePress"]) | undefined;
32694
32923
  /** Draws each stop's place in the run in its panel, as well as saying it. */
32695
32924
  "prop:progress"?: (HelixHeadlessTour["progress"]) | undefined;
32696
32925
  /** Each stop's place in the run, with `{index}` and `{count}` filled in and
@@ -32809,6 +33038,9 @@ heading. */
32809
33038
  Reflected, because the styled tier places a dialog and a floating panel by
32810
33039
  it, and unset at rest, so no default is written onto the host. */
32811
33040
  type?: (HelixHeadlessTourStop["type"]) | undefined;
33041
+ /** Run as the tour reaches the stop, before it is shown: see the description
33042
+ above. A function, so it is set from script and has no attribute. */
33043
+ effect?: (HelixHeadlessTourStop["effect"]) | undefined;
32812
33044
 
32813
33045
  /** Fired when one of the stop's controls is pressed, to move the tour. */
32814
33046
  "onhelix-tour-ask"?: ((
@@ -32861,6 +33093,9 @@ heading. */
32861
33093
  Reflected, because the styled tier places a dialog and a floating panel by
32862
33094
  it, and unset at rest, so no default is written onto the host. */
32863
33095
  "prop:type"?: (HelixHeadlessTourStop["type"]) | undefined;
33096
+ /** Run as the tour reaches the stop, before it is shown: see the description
33097
+ above. A function, so it is set from script and has no attribute. */
33098
+ "prop:effect"?: (HelixHeadlessTourStop["effect"]) | undefined;
32864
33099
  /** Fired when one of the stop's controls is pressed, to move the tour. */
32865
33100
  "on:helix-tour-ask"?: ((
32866
33101
  e: HelixHeadlessTourStopHelixTourAskElementEvent,
@@ -35480,12 +35715,21 @@ export type CustomElements = {
35480
35715
  *
35481
35716
  * **Set `fold-below` to fold the middle region on a narrow screen.** Below that
35482
35717
  * many pixels of the bar's own width, the middle region is hidden behind a
35483
- * toggle at the end of the bar, named by `menu-label`. The toggle says whether
35484
- * the region is open with `aria-expanded`, and the region opens below the row.
35485
- * Escape closes it and puts focus back on the toggle. The custom state
35486
- * `folded` is on the host while the bar is that narrow, and `open` while the
35487
- * folded region is open. A server serves the bar unfolded, and the browser
35488
- * folds it once it has measured it.
35718
+ * toggle at the end of the bar, named by `menu-label`, or at its start with
35719
+ * `toggle-placement="start"`. The toggle says whether the region is open with
35720
+ * `aria-expanded`, and the region opens below the row. The region follows the
35721
+ * toggle's region in focus order, so Tab from the toggle at the end goes into
35722
+ * the open region. The custom state `folded` is on the host while the bar is
35723
+ * that narrow, and `open` while the folded region is open. A server serves the
35724
+ * bar unfolded, and the browser folds it once it has measured it.
35725
+ *
35726
+ * **`open` says whether the folded region is open, and setting it opens or
35727
+ * closes the region.** `requestOpen(true)` and `requestOpen(false)` do the same
35728
+ * and send `helix-before-open` or `helix-before-close` first, which you can
35729
+ * cancel, and `toggleOpen()` asks for the opposite. `toggle` follows every
35730
+ * change. The region closes on Escape, which puts focus back on the toggle,
35731
+ * when focus moves to something outside the header, and on a press outside
35732
+ * it. A bar that widens past `fold-below` closes its region.
35489
35733
  *
35490
35734
  * The host is the page's `banner` landmark. Placed inside `main`, `article`,
35491
35735
  * `aside`, `nav` or `section`, it is a plain box instead, as a native
@@ -35520,6 +35764,24 @@ export type CustomElements = {
35520
35764
  * - `menu-label`/`menuLabel`: The name of the toggle that opens a folded middle region.
35521
35765
  * - `scroller`: The id of the element whose scrolling lifts the bar, for an app shell that
35522
35766
  * scrolls a container instead of the window. Unset is the window.
35767
+ * - `toggle-placement`/`togglePlacement`: Where the toggle that opens a folded middle region sits: at the end of the
35768
+ * bar, after the trailing content, or with `start`, before the leading
35769
+ * content.
35770
+ *
35771
+ * Optional, so the resting bar writes no attribute onto the host.
35772
+ * - `default-open`/`defaultOpen`: Whether the element starts open. Ignored once `open` is written.
35773
+ * - `open`: Whether the element is open.
35774
+ *
35775
+ * One property, not two, so `dialog.open` answers the question anyone
35776
+ * asking it meant. Writing always applies; `<helix-dialog open>` is the
35777
+ * same statement in markup.
35778
+ *
35779
+ * **Not reflected, and that is required rather than tidy.** Reflection
35780
+ * writes the resolved state back as an attribute, so an element that opened
35781
+ * itself would put `open` on its own host: cloned, serialized for
35782
+ * hydration, or diffed by a framework, it comes back holding whatever the
35783
+ * last reader did rather than what the author wrote. `:state(open)` carries
35784
+ * the resolved state for stylesheets, which is what the mirror is for.
35523
35785
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
35524
35786
  *
35525
35787
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -35545,7 +35807,10 @@ export type CustomElements = {
35545
35807
  *
35546
35808
  * Events that will be emitted by the component.
35547
35809
  *
35810
+ * - `helix-before-close`: The folded region is about to close. Cancelable: cancel it to keep it open.
35811
+ * - `helix-before-open`: The folded region is about to open. Cancelable: cancel it to keep it closed.
35548
35812
  * - `helix-scrolled`: Fired when the page crosses the scroll threshold, with the new state. A custom state cannot be observed the way an attribute can, so listen for this event to follow it. The event uses the header's own threshold and hysteresis, so you do not need a second scroll listener.
35813
+ * - `toggle`: The folded region opened or closed. The event carries `newState` and `oldState`.
35549
35814
  *
35550
35815
  * ## Slots
35551
35816
  *
@@ -35556,6 +35821,20 @@ export type CustomElements = {
35556
35821
  * - `menu-icon`: Replaces the glyph inside the toggle that opens a folded middle region.
35557
35822
  * - `start`: Leading content, usually a wordmark.
35558
35823
  *
35824
+ * ## Methods
35825
+ *
35826
+ * Methods that can be called to access component functionality.
35827
+ *
35828
+ * - `requestOpen(next: boolean) => boolean`: Requests that the element open or close, and returns whether the change
35829
+ * was applied.
35830
+ *
35831
+ * Announces before it acts, so `preventDefault()` on the `helix-before-open` or
35832
+ * `helix-before-close` is a refusal and nothing moves. Nobody refusing means the
35833
+ * element opens or closes itself, whether or not a consumer declared
35834
+ * `open`: a declared property is a seed and a correction, and a consumer
35835
+ * who wants the decision for themselves refuses it and assigns their own.
35836
+ * - `toggleOpen() => boolean`: Requests the opposite of the current state.
35837
+ *
35559
35838
  * ## CSS Parts
35560
35839
  *
35561
35840
  * Custom selectors for styling elements within the component.
@@ -36940,11 +37219,15 @@ export type CustomElements = {
36940
37219
  * appearance and size.
36941
37220
  *
36942
37221
  * **Buttons that stay pressed.** With `selection-mode`, each button with a
36943
- * `value` is a toggle button: a press presses or releases it, and it says so
36944
- * with `aria-pressed`. `single` keeps one pressed at a time, and a press on the
36945
- * pressed one releases it. `multiple` lets any number be pressed. `value` is
36946
- * the pressed values, comma separated. A press sends a cancelable
36947
- * `helix-before-change` with the value it would leave, then `change`.
37222
+ * `value` is a toggle button: a press presses or releases it. `multiple` lets
37223
+ * any number be pressed, and each button says so with `aria-pressed`. `single`
37224
+ * keeps one pressed at a time: the group is a `radiogroup` and each button a
37225
+ * `radio` that says so with `aria-checked`, as React Aria's toggle button
37226
+ * group is. A press on the pressed one releases it, unless
37227
+ * `disallow-empty-selection` keeps one pressed. `value` is the pressed values,
37228
+ * comma separated. A press sends a cancelable `helix-before-change` with the
37229
+ * value it would leave, then `change`. A pressed Helix button has
37230
+ * `:state(pressed)` on its own element.
36948
37231
  *
36949
37232
  * The pressed state is written on the control inside each button's shadow
36950
37233
  * root, so the markup you rendered is never changed and a framework hydrating
@@ -36972,15 +37255,18 @@ export type CustomElements = {
36972
37255
  * | Space, Enter | Presses or releases the focused button. |
36973
37256
  *
36974
37257
  * Left and Right swap on a right-to-left page, and a disabled button is
36975
- * passed over. In a selection mode the group is a `toolbar`, with
37258
+ * passed over. Under `multiple` the group is a `toolbar`, with
36976
37259
  * `aria-orientation` under `orientation="vertical"`. Inside a toolbar it stays
36977
37260
  * a named `group`, and the toolbar's own arrow keys walk its buttons, so a
36978
- * reader meets one toolbar.
37261
+ * reader meets one toolbar. Under `single` it is a `radiogroup` either way.
36979
37262
  *
36980
37263
  * ## Attributes & Properties
36981
37264
  *
36982
37265
  * Component attributes and properties that can be applied to the element or by using JavaScript.
36983
37266
  *
37267
+ * - `disallow-empty-selection`/`disallowEmptySelection`: Keeps at least one button pressed once one is, as React Aria's
37268
+ * `disallowEmptySelection`: a press that would leave none pressed is
37269
+ * refused.
36984
37270
  * - `label`: The group's name, read by screen readers.
36985
37271
  *
36986
37272
  * On the host through internals, so an author's `aria-label` still overrides
@@ -37348,6 +37634,7 @@ export type CustomElements = {
37348
37634
  * These can be used to apply styling when a component is in a given state.
37349
37635
  *
37350
37636
  * - `pending`: The button is pending: `pending` is set.
37637
+ * - `pressed`: A Button Group in a selection mode has this button pressed.
37351
37638
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
37352
37639
  */
37353
37640
  "helix-headless-button": Partial<
@@ -41095,8 +41382,9 @@ export type CustomElements = {
41095
41382
  *
41096
41383
  * Choosing the opener says `helix-select` with its value, and canceling it
41097
41384
  * 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.
41385
+ * opener's words, and a screen reader hears those words. Backspace in an empty
41386
+ * filter goes back, and a screen reader hears the name of the page it goes
41387
+ * back to. `page` says which page is shown.
41100
41388
  *
41101
41389
  * The filter is cleared when the palette closes, so each opening starts from
41102
41390
  * the full list. Combobox and Select do the same. As typing narrows the list, a
@@ -41118,9 +41406,10 @@ export type CustomElements = {
41118
41406
  * | Tab | Stays in the palette, which is modal. With `inline`, moves on through the page. |
41119
41407
  *
41120
41408
  * **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
41409
+ * `inline` no dialog at all. Inside it the filter field is a text field with
41410
+ * `aria-autocomplete="list"`, `aria-controls` on the list, and
41411
+ * `aria-activedescendant` on the highlighted command, as the field of React
41412
+ * Aria's `Autocomplete` is. The commands are a `listbox` of `option`s. How many commands typing left, the empty text and
41124
41413
  * the loading text are said in a polite live region.
41125
41414
  *
41126
41415
  * ## Attributes & Properties
@@ -41184,6 +41473,12 @@ export type CustomElements = {
41184
41473
  * hydration, or diffed by a framework, it comes back holding whatever the
41185
41474
  * last reader did rather than what the author wrote. `:state(open)` carries
41186
41475
  * the resolved state for stylesheets, which is what the mirror is for.
41476
+ * - `filterMatch`: Whether a command is kept by the filter: a function given the command's
41477
+ * words and the filter, trimmed, that returns `true` to keep it showing, as
41478
+ * React Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
41479
+ *
41480
+ * Absent, a command is kept where its words hold the filter, in any case. A
41481
+ * property only, there being no way to write a function in markup. (property only)
41187
41482
  * - `items`: The commands as data, for a palette too long to draw whole: each a value,
41188
41483
  * which is also its words, or a record with a `value`, a `label` and
41189
41484
  * `disabled`. Handed to the list, which draws only the commands in sight and
@@ -41275,6 +41570,7 @@ export type CustomElements = {
41275
41570
  * - `listbox-loading`: The text shown while the commands are loading.
41276
41571
  * - `listbox-search`: The region that holds the filter field.
41277
41572
  * - `listbox-search-field`: The filter field.
41573
+ * - `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
41574
  *
41279
41575
  * ## CSS States
41280
41576
  *
@@ -41520,6 +41816,7 @@ export type CustomElements = {
41520
41816
  * - `copied`: The moment after a successful copy, while `copied-label` names the button.
41521
41817
  * - `failed`: The moment after a press that put nothing on the clipboard, while `error-label` names the button.
41522
41818
  * - `pending`: The button is pending: `pending` is set.
41819
+ * - `pressed`: A Button Group in a selection mode has this button pressed.
41523
41820
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
41524
41821
  */
41525
41822
  "helix-headless-copy-button": Partial<
@@ -46545,6 +46842,7 @@ export type CustomElements = {
46545
46842
  * These can be used to apply styling when a component is in a given state.
46546
46843
  *
46547
46844
  * - `pending`: The button is pending: `pending` is set.
46845
+ * - `pressed`: A Button Group in a selection mode has this button pressed.
46548
46846
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
46549
46847
  */
46550
46848
  "helix-headless-icon-button": Partial<
@@ -47431,7 +47729,8 @@ export type CustomElements = {
47431
47729
  * Each item is a `group` with the role description `slide`, named by its
47432
47730
  * `label` or, without one, by its place in the set, such as "2 of 5", as the
47433
47731
  * APG carousel pattern names a slide. The lightbox supplies both words, so they
47434
- * are translated on the lightbox.
47732
+ * are translated on the lightbox. A `description`, while there is one,
47733
+ * describes the group, so a screen reader says it with the name.
47435
47734
  *
47436
47735
  * An item that is not current is hidden and stays in the DOM, as a `TabPanel`
47437
47736
  * does. Crawlers can read it, it is in the server-rendered markup, and an
@@ -47515,9 +47814,10 @@ export type CustomElements = {
47515
47814
  * buttons that send `--previous`, `--next` and `--close`.
47516
47815
  *
47517
47816
  * **Set `max-zoom` to let a reader zoom into the shown item**, such as `3`.
47518
- * Two fingers pinch it, a double click or a double tap zooms all the way in
47519
- * about the point pressed and back out, and once zoomed one pointer drags it
47520
- * about. `+` and `-` zoom in and out from the keyboard, and `0` puts it back.
47817
+ * Two fingers pinch it, and so does a trackpad pinch or the wheel with Ctrl
47818
+ * held, about the point under the pointer. A double click or a double tap
47819
+ * zooms all the way in about the point pressed and back out, and once zoomed
47820
+ * one pointer drags it about and the wheel moves it. `+` and `-` zoom in and out from the keyboard, and `0` puts it back.
47521
47821
  * The scale and the offset are on the `viewport` part as `--lightbox-zoom`,
47522
47822
  * `--lightbox-pan-x` and `--lightbox-pan-y`, written only while zoomed, and a
47523
47823
  * swipe moves to the next item only while the item is at its own size. With
@@ -47738,6 +48038,8 @@ export type CustomElements = {
47738
48038
  *
47739
48039
  * These can be used to apply styling when a component is in a given state.
47740
48040
  *
48041
+ * - `entering`: From the moment the viewer opens until its entrance has finished.
48042
+ * - `exiting`: From the moment the viewer closes until its exit has finished.
47741
48043
  * - `fullscreen`: While the viewer fills the screen.
47742
48044
  * - `idle`: The user has been still long enough for the controls to hide.
47743
48045
  * - `open`: While the viewer is open.
@@ -48186,7 +48488,9 @@ export type CustomElements = {
48186
48488
  * Not reflected, as a state never is. `row-current` is the part a
48187
48489
  * stylesheet draws it from.
48188
48490
  * - `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.
48491
+ * pass over it and it cannot be selected or acted on. In a list with
48492
+ * `disabled-behavior="selection"`, it cannot be selected and is reached and
48493
+ * acted on as any row is.
48190
48494
  * - `href`: The URL the row links to. Leave it empty for a row that is not a link.
48191
48495
  *
48192
48496
  * Empty rather than optional, and unset by default: a list is not always a
@@ -48213,6 +48517,9 @@ export type CustomElements = {
48213
48517
  *
48214
48518
  * Written by the list from its own `value`, and unset where nothing can be
48215
48519
  * selected, which keeps `aria-selected` off a list that does not select. (property only)
48520
+ * - `selectionOnly`: Whether `disabled` takes the row out of selection alone, written by a list
48521
+ * with `disabled-behavior="selection"`. No attribute: it is coordination
48522
+ * between elements, as `focusable` is. (property only)
48216
48523
  * - `words`: The row's words, or none where the children are not known yet. (property only) (readonly)
48217
48524
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
48218
48525
  *
@@ -48273,6 +48580,7 @@ export type CustomElements = {
48273
48580
  * - `dragging`: The row is being moved, in a `reorderable` list.
48274
48581
  * - `drop-after`: The row being moved goes after this one when it is dropped.
48275
48582
  * - `drop-before`: The row being moved goes before this one when it is dropped.
48583
+ * - `focus-visible`: The row's cell has keyboard focus that the browser shows, in a list with `selection-mode`.
48276
48584
  * - `selected`: The row is selected, in a list that selects.
48277
48585
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
48278
48586
  */
@@ -48289,7 +48597,9 @@ export type CustomElements = {
48289
48597
  * `multiple` any number, and `value` holds the selected rows' values,
48290
48598
  * separated by commas. A change asks with `helix-before-change` and tells
48291
48599
  * 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
48600
+ * `disabled` row is passed over. With `disabled-behavior="selection"`, a
48601
+ * `disabled` row cannot be selected, and is reached and acted on as any row
48602
+ * is, as React Aria's GridList has it. Each row is named by its label and described
48293
48603
  * by its description, so the words of the controls in `end` are not read as
48294
48604
  * part of its name.
48295
48605
  *
@@ -48367,6 +48677,12 @@ export type CustomElements = {
48367
48677
  *
48368
48678
  * - `canceled-label`/`canceledLabel`: What screen readers hear when a held row is put back, or a move is
48369
48679
  * refused, in a `reorderable` list.
48680
+ * - `disabled-behavior`/`disabledBehavior`: What `disabled` takes from a row, in a list that selects: `all`, which
48681
+ * passes over the row, or `selection`, which keeps the row out of the
48682
+ * selection and lets the keys reach it and Enter or a press act on it, as
48683
+ * React Aria's GridList takes `disabledBehavior`.
48684
+ *
48685
+ * Absent is `all`.
48370
48686
  * - `dropped-label`/`droppedLabel`: What screen readers hear when a row is dropped, in a `reorderable` list.
48371
48687
  * - `empty-label`/`emptyLabel`: The text of the row shown while the list has no rows, where the `empty`
48372
48688
  * slot is empty. Empty, the default, shows no row.
@@ -48506,7 +48822,9 @@ export type CustomElements = {
48506
48822
  * With `multiple` set, `value` is a comma-separated string, like
48507
48823
  * `Checkbox.Group`'s, because `MixinControllerValue` holds a string. The form
48508
48824
  * receives one entry per selected option, as a native `<select multiple>` sends
48509
- * it, so your server does not split on commas.
48825
+ * it, so your server does not split on commas. An option's value may hold a
48826
+ * comma: a run of the string that is an option's value is read as that one
48827
+ * value, and the form sends it as one entry.
48510
48828
  *
48511
48829
  * Selected and active are separate. The selected option is the value. The
48512
48830
  * active option is where the keyboard is: the arrow keys move it, and
@@ -48713,6 +49031,13 @@ export type CustomElements = {
48713
49031
  * imperatively later, and nothing is hydrating by then.
48714
49032
  *
48715
49033
  * Here rather than on each control.
49034
+ * - `filterMatch`: Whether an option is kept by the filter: a function given the option's
49035
+ * words and the filter, trimmed, that returns `true` to keep it showing, as
49036
+ * React Aria's `Autocomplete` takes `filter`. For matching that ignores
49037
+ * accents, matches the start of each word, or matches out of order.
49038
+ *
49039
+ * Absent, an option is kept where its words hold the filter, in any case. A
49040
+ * property only, there being no way to write a function in markup. (property only)
48716
49041
  * - `items`: The options as data, for a list too long to draw whole: each a value,
48717
49042
  * which is also its words, or a record with a `value`, a `label` and
48718
49043
  * `disabled`. Set, the list draws only the options in sight, and the ones
@@ -48749,7 +49074,10 @@ export type CustomElements = {
48749
49074
  * Descendants rather than children, because a group puts a level between the
48750
49075
  * list and its options and the keyboard has to move through a grouped list
48751
49076
  * 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)
49077
+ * - `values`: The chosen values, as an array whether or not `multiple` is set.
49078
+ *
49079
+ * Read against the options' values, so an option whose value holds a comma
49080
+ * is one value. See `chosenValues`. (property only) (readonly)
48753
49081
  * - `validity`: Whether the control meets its constraints, and why not. (property only) (readonly)
48754
49082
  * - `validationMessage`: The message the browser would show for the control, or an empty string. (property only) (readonly)
48755
49083
  * - `willValidate`: Whether the control is checked when its form is submitted. (property only) (readonly)
@@ -50520,8 +50848,8 @@ export type CustomElements = {
50520
50848
  * rows, Home and End go to the first and the last, a typed letter moves to
50521
50849
  * the next row whose name starts with it, Enter and Space choose, Right Arrow
50522
50850
  * 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.
50851
+ * right-to-left page. Left Arrow on the top page does nothing. Escape closes
50852
+ * the menu and returns focus to the trigger. Tab closes it and moves on.
50525
50853
  *
50526
50854
  * While it is open, the surface carries the trigger's width as
50527
50855
  * `--floating-anchor-inline-size` and the room left below it as
@@ -50665,6 +50993,10 @@ export type CustomElements = {
50665
50993
  * - `drilled`: A submenu's page is showing, so content that is not a row can hide with the top page.
50666
50994
  * - `mark`: A row on the current page has a checkbox or a link, so every row keeps the trailing column.
50667
50995
  * - `open`: While the menu is open.
50996
+ * - `placed-bottom`: While the open panel sits below its trigger.
50997
+ * - `placed-left`: While the open panel sits to the left of its trigger.
50998
+ * - `placed-right`: While the open panel sits to the right of its trigger.
50999
+ * - `placed-top`: While the open panel sits above its trigger.
50668
51000
  * - `start`: A row on the current page has content in its leading column, so every row keeps that column.
50669
51001
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
50670
51002
  */
@@ -51564,9 +51896,9 @@ export type CustomElements = {
51564
51896
  * The locale's group separators are read in every field, so `1,234` is a
51565
51897
  * number in `en-US`.
51566
51898
  *
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
51899
+ * The field and its two buttons sit in a `role="group"` named by the label,
51900
+ * and the field carries `role-label`, "number field" in English, as its
51901
+ * `aria-roledescription`, as React Aria's NumberField does. On iOS and iPadOS the field is a plain text
51570
51902
  * field, with no `role="spinbutton"`, which VoiceOver reads as a slider you
51571
51903
  * cannot type in, and no role description, so VoiceOver says the field is
51572
51904
  * required. React Aria's NumberField does the same.
@@ -51745,8 +52077,11 @@ export type CustomElements = {
51745
52077
  * imperatively later, and nothing is hydrating by then.
51746
52078
  *
51747
52079
  * Here rather than on each control.
51748
- * - `valueAsNumber`: The value as a number, or `NaN` while the control is empty.
52080
+ * - `valueAsNumber`: The value as a number, or `NaN` while the control is empty or does not
52081
+ * hold a number.
51749
52082
  *
52083
+ * Read in the locale and the format, as the form reads it, so `1,5` typed
52084
+ * in a locale with a decimal comma is 1.5 here while the form holds 1.5.
51750
52085
  * `NaN` and not zero, which is the trap the platform already avoids: `Number('')`
51751
52086
  * is zero, so an empty control would report a number it does not hold and a
51752
52087
  * form would submit it. (property only)
@@ -55142,7 +55477,9 @@ export type CustomElements = {
55142
55477
  * whole set.
55143
55478
  *
55144
55479
  * `Select` owns the value, passes it down to the listbox, and takes changes
55145
- * back, so the value lives in one place.
55480
+ * back, so the value lives in one place. With `multiple`, the value is the
55481
+ * chosen values joined with commas, and the form receives one entry for each.
55482
+ * An option's value may hold a comma, and it is read as one value.
55146
55483
  *
55147
55484
  * Set `valueContent` to draw the trigger's content from the chosen options,
55148
55485
  * and several chosen options are written as a list in the reader's language.
@@ -55519,7 +55856,8 @@ export type CustomElements = {
55519
55856
  * - `label`: What is loading, read out as the placeholder's name, such as "Loading
55520
55857
  * profile".
55521
55858
  *
55522
- * Absent hides the placeholder from screen readers.
55859
+ * Absent hides the placeholder from screen readers. Around content, the name
55860
+ * is read while `loading` is set, and the loaded content is read as it is.
55523
55861
  * - `loading`: Whether the content inside is still loading, which keeps it inert and
55524
55862
  * draws the placeholder over it.
55525
55863
  *
@@ -57152,6 +57490,10 @@ export type CustomElements = {
57152
57490
  * region. The current stage's button carries `aria-current="step"`, and only
57153
57491
  * the button, so the state is said once, on the control.
57154
57492
  *
57493
+ * A stage's `content`, while it holds anything, is a group named by the
57494
+ * stage's name, so a screen reader moving into it hears which stage it
57495
+ * belongs to.
57496
+ *
57155
57497
  * ## Attributes & Properties
57156
57498
  *
57157
57499
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -58198,10 +58540,18 @@ export type CustomElements = {
58198
58540
  * the tab list lands on the panel's first link or control where there is one,
58199
58541
  * and on the panel itself where there is none.
58200
58542
  *
58543
+ * **Set `lazy` for a panel that is expensive to draw.** Its content waits in a
58544
+ * `<template>` inside it, and goes into the panel the first time the panel is
58545
+ * shown, so it costs nothing until a reader opens that tab. Once in, it stays.
58546
+ * The panel sends `helix-load` at the same moment, for content your code
58547
+ * renders itself.
58548
+ *
58201
58549
  * ## Attributes & Properties
58202
58550
  *
58203
58551
  * Component attributes and properties that can be applied to the element or by using JavaScript.
58204
58552
  *
58553
+ * - `lazy`: Whether the panel's content waits in a `<template>` until the panel is
58554
+ * first shown.
58205
58555
  * - `selected`: Whether this panel is the visible one.
58206
58556
  * - `value`: Pairs the panel with the tab of the same value.
58207
58557
  * - `label`: The name of the panel, which is the text of the tab that opens it.
@@ -58235,11 +58585,17 @@ export type CustomElements = {
58235
58585
  * browser harness's awaits it alone: a browser always runs the frame, and a
58236
58586
  * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
58237
58587
  *
58588
+ * ## Events
58589
+ *
58590
+ * Events that will be emitted by the component.
58591
+ *
58592
+ * - `helix-load`: Fired the first time a `lazy` panel is shown, once its template's content is in.
58593
+ *
58238
58594
  * ## Slots
58239
58595
  *
58240
58596
  * Areas where markup can be added to the component.
58241
58597
  *
58242
- * - `(default)`: The panel's content.
58598
+ * - `(default)`: The panel's content. Under `lazy`, a `<template>` holding it.
58243
58599
  *
58244
58600
  * ## CSS Parts
58245
58601
  *
@@ -58251,6 +58607,7 @@ export type CustomElements = {
58251
58607
  *
58252
58608
  * These can be used to apply styling when a component is in a given state.
58253
58609
  *
58610
+ * - `loaded`: Once a `lazy` panel has been shown and its content is in.
58254
58611
  * - `selected`: While its tab is the one selected.
58255
58612
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
58256
58613
  */
@@ -58300,9 +58657,9 @@ export type CustomElements = {
58300
58657
  * | Enter, Space | Selects the tab with focus, or follows its link. |
58301
58658
  * | Tab | Leaves the list for the selected panel. |
58302
58659
  *
58303
- * Removing the selected tab selects the first enabled tab that is left, and
58304
- * `active` says so, with `helix-activate`. Where the removed tab had focus,
58305
- * focus moves to the tab now selected.
58660
+ * Removing the selected tab selects the enabled tab beside it, the next one
58661
+ * or else the one before, and `active` says so, with `helix-activate`. Where
58662
+ * the removed tab had focus, focus moves to the tab now selected.
58306
58663
  *
58307
58664
  * **More tabs than fit.** With `scroll-controls`, a strip that scrolls shows a
58308
58665
  * button at each end it can scroll toward, as Web Awesome's tab group does,
@@ -58408,6 +58765,8 @@ export type CustomElements = {
58408
58765
  * - `(default)`: The tabs, as direct children of this element.
58409
58766
  * - `indicator`: A mark of your own, drawn inside the `indicator` part, where `--indicator-x`, `--indicator-y`, `--indicator-inline-size` and `--indicator-block-size` reach it.
58410
58767
  * - `panels`: The panels, as direct children of this element. Panels inside a wrapper are not paired with tabs, because pairing reads only the direct children.
58768
+ * - `scroll-end-icon`: Replaces the glyph on the button that scrolls the strip toward its end.
58769
+ * - `scroll-start-icon`: Replaces the glyph on the button that scrolls the strip toward its start.
58411
58770
  *
58412
58771
  * ## Methods
58413
58772
  *
@@ -58429,7 +58788,9 @@ export type CustomElements = {
58429
58788
  * - `indicator`: The marker that moves to the selected tab. It carries the selected tab's place and size as `--indicator-x`, `--indicator-y`, `--indicator-inline-size` and `--indicator-block-size`, and `data-placed` once it has been placed, for a mark you draw and animate yourself.
58430
58789
  * - `panels`: The panel container.
58431
58790
  * - `scroll-end`: The button that scrolls the strip toward its end, shown under `scroll-controls` while there is more that way.
58791
+ * - `scroll-end-mark`: The glyph on that button, where none is slotted.
58432
58792
  * - `scroll-start`: The button that scrolls the strip toward its start, shown under `scroll-controls` while there is more that way.
58793
+ * - `scroll-start-mark`: The glyph on that button, where none is slotted.
58433
58794
  * - `tabs`: The tab list.
58434
58795
  *
58435
58796
  * ## CSS States
@@ -58454,8 +58815,8 @@ export type CustomElements = {
58454
58815
  * can: a press on its `dismiss` mark, or Delete or Backspace while the tab
58455
58816
  * has focus, sends `helix-dismiss`. The tab does not remove itself, because
58456
58817
  * your code owns the set, so remove the tab and its panel in your handler.
58457
- * Focus moves to the tab beside it, and the tab set selects a tab that is
58458
- * left.
58818
+ * Focus moves to the tab beside it, and where the tab was selected, the tab
58819
+ * set selects that same tab.
58459
58820
  * The tab says the key through `aria-keyshortcuts`, and the mark is for the
58460
58821
  * pointer, hidden from screen readers.
58461
58822
  *
@@ -58512,6 +58873,7 @@ export type CustomElements = {
58512
58873
  * Areas where markup can be added to the component.
58513
58874
  *
58514
58875
  * - `(default)`: The tab's label.
58876
+ * - `dismiss-icon`: Replaces the glyph on the mark that closes a `dismissible` tab.
58515
58877
  *
58516
58878
  * ## Methods
58517
58879
  *
@@ -58536,6 +58898,7 @@ export type CustomElements = {
58536
58898
  * Custom selectors for styling elements within the component.
58537
58899
  *
58538
58900
  * - `dismiss`: The mark a pointer presses to close a `dismissible` tab.
58901
+ * - `dismiss-mark`: The glyph on that mark, where none is slotted.
58539
58902
  * - `tab`: The tab itself.
58540
58903
  *
58541
58904
  * ## CSS States
@@ -60154,8 +60517,9 @@ export type CustomElements = {
60154
60517
  *
60155
60518
  * **Each item runs its own timer.** A timer held by the region would restart
60156
60519
  * with each new message, and the last of three messages would stay for nine
60157
- * seconds. It pauses while the pointer or focus is on the message, and while
60158
- * the page is hidden, so a message is not spent in a background tab.
60520
+ * seconds. It pauses while the pointer or focus is on the message or anywhere
60521
+ * in the region's stack, and while the page is hidden, so a message is not
60522
+ * spent in a background tab.
60159
60523
  *
60160
60524
  * **Each message is an `alertdialog` named by its words**, which is how a reader
60161
60525
  * who moves into the stack hears which message they are on. Give it a
@@ -60164,10 +60528,11 @@ export type CustomElements = {
60164
60528
  * says each message once as it arrives, a `danger` one assertively, so a
60165
60529
  * message is never a live region of its own.
60166
60530
  *
60167
- * A touch or a pen swipes a message toward the end of the line, and past
60168
- * halfway, or quickly, dismisses it through the same `helix-dismiss` as its
60169
- * control. While it moves, the distance is on the `item` part as
60170
- * `--toast-swipe-x`.
60531
+ * A touch or a pen swipes a message toward the end of the line, or toward the
60532
+ * edge the region's `swipe-direction` names, and past halfway, or quickly,
60533
+ * dismisses it through the same `helix-dismiss` as its control. While it
60534
+ * moves, the distance is on the `item` part as `--toast-swipe-x` or
60535
+ * `--toast-swipe-y`.
60171
60536
  *
60172
60537
  * **Escape dismisses the message holding focus**, through the same
60173
60538
  * `helix-dismiss`, and focus moves to the next message.
@@ -60269,6 +60634,7 @@ export type CustomElements = {
60269
60634
  *
60270
60635
  * - `--toast-duration`: How long this message stays, in milliseconds, for a progress hint.
60271
60636
  * - `--toast-swipe-x`: How far a swipe has moved the message across, in pixels, toward the right.
60637
+ * - `--toast-swipe-y`: How far a swipe has moved the message down, in pixels, under a `swipe-direction` of `top` or `bottom`.
60272
60638
  *
60273
60639
  * ## CSS Parts
60274
60640
  *
@@ -60290,7 +60656,7 @@ export type CustomElements = {
60290
60656
  * These can be used to apply styling when a component is in a given state.
60291
60657
  *
60292
60658
  * - `closed`: The message has been dismissed and is hidden, or leaving.
60293
- * - `paused`: The dismiss timer is paused, while a pointer or focus is on the message, or while the page is hidden.
60659
+ * - `paused`: The dismiss timer is paused, while a pointer or focus is on the message or in the stack, or while the page is hidden.
60294
60660
  * - `waiting`: The region holds the message back, past its `max-visible`, until a message before it goes.
60295
60661
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
60296
60662
  */
@@ -60329,7 +60695,12 @@ export type CustomElements = {
60329
60695
  * to render them from: it appends a message of the region's own tier and
60330
60696
  * removes it once it has been dismissed and has finished leaving. Messages
60331
60697
  * you render yourself stay yours, and the region never removes them. A touch
60332
- * or a pen swipes a message away toward the end of the line.
60698
+ * or a pen swipes a message away toward the end of the line, or toward the
60699
+ * edge `swipe-direction` names.
60700
+ *
60701
+ * **Every message's timer waits while a pointer or focus is in the stack**, as
60702
+ * React Aria's and Radix's regions do, so a reader moving from one message to
60703
+ * the next does not lose the one behind them.
60333
60704
  *
60334
60705
  * **The stack is in the top layer.** The `region` part is a `popover="manual"`
60335
60706
  * shown while a message is showing, and shown again above a modal dialog that
@@ -60394,6 +60765,8 @@ export type CustomElements = {
60394
60765
  * consumer's server markup does not have. A sheet carries the resting
60395
60766
  * arrangement in its own `:host` rule and the selectors describe only the
60396
60767
  * departures, which is what `orientation` does.
60768
+ * - `swipe-direction`/`swipeDirection`: The edge a touch or a pen swipes a message toward to dismiss it: `end`,
60769
+ * the end of the line, or `start`, `top` or `bottom`. Unset is `end`.
60397
60770
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
60398
60771
  *
60399
60772
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -61262,6 +61635,17 @@ export type CustomElements = {
61262
61635
  * least distance that brings it on screen, so the stop that points at it is
61263
61636
  * on screen too.
61264
61637
  *
61638
+ * **A stop's `effect` runs as the tour reaches it**, before it is shown, and
61639
+ * the stop waits for a promise it returns, with `:state(preparing)` on the
61640
+ * tour meanwhile. A function it returns runs when the tour leaves the stop.
61641
+ *
61642
+ * **A press outside the current stop and its target does nothing by
61643
+ * default**, so a reader can use the page the tour is describing. Set
61644
+ * `outside-press="close"` to end the tour on one, through `helix-before-close`
61645
+ * as Skip does, or `outside-press="block"` to refuse it, so the stop and its
61646
+ * target are all a pointer can reach while the tour runs, as Zag's
61647
+ * `preventInteraction` does.
61648
+ *
61265
61649
  * **Keyboard.** Focus is on the current stop's panel, which is not in the
61266
61650
  * `Tab` order itself.
61267
61651
  *
@@ -61299,6 +61683,9 @@ export type CustomElements = {
61299
61683
  * `undefined` until somebody sets one.
61300
61684
  * - `label`: The tour's name, read by screen readers, such as "Getting started".
61301
61685
  * - `next-label`/`nextLabel`: Label for the control that goes on.
61686
+ * - `outside-press`/`outsidePress`: What a press outside the current stop and its target does while the tour
61687
+ * runs. Unset, nothing: the page stays usable. `close` ends the tour, as
61688
+ * Skip does, and `block` refuses the press.
61302
61689
  * - `progress`: Draws each stop's place in the run in its panel, as well as saying it.
61303
61690
  * - `progress-label`/`progressLabel`: Each stop's place in the run, with `{index}` and `{count}` filled in and
61304
61691
  * written in the locale. Translate it with the rest of your text.
@@ -61402,6 +61789,7 @@ export type CustomElements = {
61402
61789
  * These can be used to apply styling when a component is in a given state.
61403
61790
  *
61404
61791
  * - `open`: While the tour is running.
61792
+ * - `preparing`: While the tour waits for the current stop's `effect` before showing the stop.
61405
61793
  * - `waiting`: While the tour waits at a `wait` stop for its target to be on the page.
61406
61794
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
61407
61795
  */
@@ -61435,6 +61823,13 @@ export type CustomElements = {
61435
61823
  * get Back, Next, and Skip, already wired. Slot your own `actions` and drive
61436
61824
  * them with `next()`, `back()`, and `skip()` on the root.
61437
61825
  *
61826
+ * **Set `effect` to prepare the page for a stop**, such as opening the menu
61827
+ * it points into or loading what it describes. It is a function, set from
61828
+ * script, that the tour runs as it reaches the stop. Return a promise and the
61829
+ * stop waits for it, and the tour has `:state(preparing)` meanwhile; return a
61830
+ * function, or resolve to one, and the tour runs it when it leaves the stop.
61831
+ * Zag's tour step has the same `effect`.
61832
+ *
61438
61833
  * **`for` is an id, as with `Tooltip`**, so you can point at a target elsewhere
61439
61834
  * on the page from markup. It resolves against the stop's root node, so a stop
61440
61835
  * inside a shadow tree points at a target in that tree.
@@ -61476,6 +61871,8 @@ export type CustomElements = {
61476
61871
  *
61477
61872
  * Reflected, because the styled tier places a dialog and a floating panel by
61478
61873
  * it, and unset at rest, so no default is written onto the host.
61874
+ * - `effect`: Run as the tour reaches the stop, before it is shown: see the description
61875
+ * above. A function, so it is set from script and has no attribute. (property only)
61479
61876
  * - `target`: The element the stop points at, or `null` when no element has the `for` id. (property only) (readonly)
61480
61877
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
61481
61878
  *
@@ -61558,6 +61955,8 @@ export type CustomElements = {
61558
61955
  *
61559
61956
  * These can be used to apply styling when a component is in a given state.
61560
61957
  *
61958
+ * - `entering`: From the moment the stop is shown until its entrance has finished.
61959
+ * - `exiting`: From the moment the stop is left until its exit has finished.
61561
61960
  * - `placed-bottom`: The panel sits below its target.
61562
61961
  * - `placed-left`: The panel sits to the left of its target.
61563
61962
  * - `placed-right`: The panel sits to the right of its target.
@@ -63606,12 +64005,21 @@ export type CustomElementsSolidJs = {
63606
64005
  *
63607
64006
  * **Set `fold-below` to fold the middle region on a narrow screen.** Below that
63608
64007
  * many pixels of the bar's own width, the middle region is hidden behind a
63609
- * toggle at the end of the bar, named by `menu-label`. The toggle says whether
63610
- * the region is open with `aria-expanded`, and the region opens below the row.
63611
- * Escape closes it and puts focus back on the toggle. The custom state
63612
- * `folded` is on the host while the bar is that narrow, and `open` while the
63613
- * folded region is open. A server serves the bar unfolded, and the browser
63614
- * folds it once it has measured it.
64008
+ * toggle at the end of the bar, named by `menu-label`, or at its start with
64009
+ * `toggle-placement="start"`. The toggle says whether the region is open with
64010
+ * `aria-expanded`, and the region opens below the row. The region follows the
64011
+ * toggle's region in focus order, so Tab from the toggle at the end goes into
64012
+ * the open region. The custom state `folded` is on the host while the bar is
64013
+ * that narrow, and `open` while the folded region is open. A server serves the
64014
+ * bar unfolded, and the browser folds it once it has measured it.
64015
+ *
64016
+ * **`open` says whether the folded region is open, and setting it opens or
64017
+ * closes the region.** `requestOpen(true)` and `requestOpen(false)` do the same
64018
+ * and send `helix-before-open` or `helix-before-close` first, which you can
64019
+ * cancel, and `toggleOpen()` asks for the opposite. `toggle` follows every
64020
+ * change. The region closes on Escape, which puts focus back on the toggle,
64021
+ * when focus moves to something outside the header, and on a press outside
64022
+ * it. A bar that widens past `fold-below` closes its region.
63615
64023
  *
63616
64024
  * The host is the page's `banner` landmark. Placed inside `main`, `article`,
63617
64025
  * `aside`, `nav` or `section`, it is a plain box instead, as a native
@@ -63646,6 +64054,24 @@ export type CustomElementsSolidJs = {
63646
64054
  * - `menu-label`/`menuLabel`: The name of the toggle that opens a folded middle region.
63647
64055
  * - `scroller`: The id of the element whose scrolling lifts the bar, for an app shell that
63648
64056
  * scrolls a container instead of the window. Unset is the window.
64057
+ * - `toggle-placement`/`togglePlacement`: Where the toggle that opens a folded middle region sits: at the end of the
64058
+ * bar, after the trailing content, or with `start`, before the leading
64059
+ * content.
64060
+ *
64061
+ * Optional, so the resting bar writes no attribute onto the host.
64062
+ * - `default-open`/`defaultOpen`: Whether the element starts open. Ignored once `open` is written.
64063
+ * - `open`: Whether the element is open.
64064
+ *
64065
+ * One property, not two, so `dialog.open` answers the question anyone
64066
+ * asking it meant. Writing always applies; `<helix-dialog open>` is the
64067
+ * same statement in markup.
64068
+ *
64069
+ * **Not reflected, and that is required rather than tidy.** Reflection
64070
+ * writes the resolved state back as an attribute, so an element that opened
64071
+ * itself would put `open` on its own host: cloned, serialized for
64072
+ * hydration, or diffed by a framework, it comes back holding whatever the
64073
+ * last reader did rather than what the author wrote. `:state(open)` carries
64074
+ * the resolved state for stylesheets, which is what the mirror is for.
63649
64075
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
63650
64076
  *
63651
64077
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -63671,7 +64097,10 @@ export type CustomElementsSolidJs = {
63671
64097
  *
63672
64098
  * Events that will be emitted by the component.
63673
64099
  *
64100
+ * - `helix-before-close`: The folded region is about to close. Cancelable: cancel it to keep it open.
64101
+ * - `helix-before-open`: The folded region is about to open. Cancelable: cancel it to keep it closed.
63674
64102
  * - `helix-scrolled`: Fired when the page crosses the scroll threshold, with the new state. A custom state cannot be observed the way an attribute can, so listen for this event to follow it. The event uses the header's own threshold and hysteresis, so you do not need a second scroll listener.
64103
+ * - `toggle`: The folded region opened or closed. The event carries `newState` and `oldState`.
63675
64104
  *
63676
64105
  * ## Slots
63677
64106
  *
@@ -63682,6 +64111,20 @@ export type CustomElementsSolidJs = {
63682
64111
  * - `menu-icon`: Replaces the glyph inside the toggle that opens a folded middle region.
63683
64112
  * - `start`: Leading content, usually a wordmark.
63684
64113
  *
64114
+ * ## Methods
64115
+ *
64116
+ * Methods that can be called to access component functionality.
64117
+ *
64118
+ * - `requestOpen(next: boolean) => boolean`: Requests that the element open or close, and returns whether the change
64119
+ * was applied.
64120
+ *
64121
+ * Announces before it acts, so `preventDefault()` on the `helix-before-open` or
64122
+ * `helix-before-close` is a refusal and nothing moves. Nobody refusing means the
64123
+ * element opens or closes itself, whether or not a consumer declared
64124
+ * `open`: a declared property is a seed and a correction, and a consumer
64125
+ * who wants the decision for themselves refuses it and assigns their own.
64126
+ * - `toggleOpen() => boolean`: Requests the opposite of the current state.
64127
+ *
63685
64128
  * ## CSS Parts
63686
64129
  *
63687
64130
  * Custom selectors for styling elements within the component.
@@ -65085,11 +65528,15 @@ export type CustomElementsSolidJs = {
65085
65528
  * appearance and size.
65086
65529
  *
65087
65530
  * **Buttons that stay pressed.** With `selection-mode`, each button with a
65088
- * `value` is a toggle button: a press presses or releases it, and it says so
65089
- * with `aria-pressed`. `single` keeps one pressed at a time, and a press on the
65090
- * pressed one releases it. `multiple` lets any number be pressed. `value` is
65091
- * the pressed values, comma separated. A press sends a cancelable
65092
- * `helix-before-change` with the value it would leave, then `change`.
65531
+ * `value` is a toggle button: a press presses or releases it. `multiple` lets
65532
+ * any number be pressed, and each button says so with `aria-pressed`. `single`
65533
+ * keeps one pressed at a time: the group is a `radiogroup` and each button a
65534
+ * `radio` that says so with `aria-checked`, as React Aria's toggle button
65535
+ * group is. A press on the pressed one releases it, unless
65536
+ * `disallow-empty-selection` keeps one pressed. `value` is the pressed values,
65537
+ * comma separated. A press sends a cancelable `helix-before-change` with the
65538
+ * value it would leave, then `change`. A pressed Helix button has
65539
+ * `:state(pressed)` on its own element.
65093
65540
  *
65094
65541
  * The pressed state is written on the control inside each button's shadow
65095
65542
  * root, so the markup you rendered is never changed and a framework hydrating
@@ -65117,15 +65564,18 @@ export type CustomElementsSolidJs = {
65117
65564
  * | Space, Enter | Presses or releases the focused button. |
65118
65565
  *
65119
65566
  * Left and Right swap on a right-to-left page, and a disabled button is
65120
- * passed over. In a selection mode the group is a `toolbar`, with
65567
+ * passed over. Under `multiple` the group is a `toolbar`, with
65121
65568
  * `aria-orientation` under `orientation="vertical"`. Inside a toolbar it stays
65122
65569
  * a named `group`, and the toolbar's own arrow keys walk its buttons, so a
65123
- * reader meets one toolbar.
65570
+ * reader meets one toolbar. Under `single` it is a `radiogroup` either way.
65124
65571
  *
65125
65572
  * ## Attributes & Properties
65126
65573
  *
65127
65574
  * Component attributes and properties that can be applied to the element or by using JavaScript.
65128
65575
  *
65576
+ * - `disallow-empty-selection`/`disallowEmptySelection`: Keeps at least one button pressed once one is, as React Aria's
65577
+ * `disallowEmptySelection`: a press that would leave none pressed is
65578
+ * refused.
65129
65579
  * - `label`: The group's name, read by screen readers.
65130
65580
  *
65131
65581
  * On the host through internals, so an author's `aria-label` still overrides
@@ -65494,6 +65944,7 @@ export type CustomElementsSolidJs = {
65494
65944
  * These can be used to apply styling when a component is in a given state.
65495
65945
  *
65496
65946
  * - `pending`: The button is pending: `pending` is set.
65947
+ * - `pressed`: A Button Group in a selection mode has this button pressed.
65497
65948
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
65498
65949
  */
65499
65950
  "helix-headless-button": Partial<
@@ -69278,8 +69729,9 @@ export type CustomElementsSolidJs = {
69278
69729
  *
69279
69730
  * Choosing the opener says `helix-select` with its value, and canceling it
69280
69731
  * 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.
69732
+ * opener's words, and a screen reader hears those words. Backspace in an empty
69733
+ * filter goes back, and a screen reader hears the name of the page it goes
69734
+ * back to. `page` says which page is shown.
69283
69735
  *
69284
69736
  * The filter is cleared when the palette closes, so each opening starts from
69285
69737
  * the full list. Combobox and Select do the same. As typing narrows the list, a
@@ -69301,9 +69753,10 @@ export type CustomElementsSolidJs = {
69301
69753
  * | Tab | Stays in the palette, which is modal. With `inline`, moves on through the page. |
69302
69754
  *
69303
69755
  * **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
69756
+ * `inline` no dialog at all. Inside it the filter field is a text field with
69757
+ * `aria-autocomplete="list"`, `aria-controls` on the list, and
69758
+ * `aria-activedescendant` on the highlighted command, as the field of React
69759
+ * Aria's `Autocomplete` is. The commands are a `listbox` of `option`s. How many commands typing left, the empty text and
69307
69760
  * the loading text are said in a polite live region.
69308
69761
  *
69309
69762
  * ## Attributes & Properties
@@ -69367,6 +69820,12 @@ export type CustomElementsSolidJs = {
69367
69820
  * hydration, or diffed by a framework, it comes back holding whatever the
69368
69821
  * last reader did rather than what the author wrote. `:state(open)` carries
69369
69822
  * the resolved state for stylesheets, which is what the mirror is for.
69823
+ * - `filterMatch`: Whether a command is kept by the filter: a function given the command's
69824
+ * words and the filter, trimmed, that returns `true` to keep it showing, as
69825
+ * React Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
69826
+ *
69827
+ * Absent, a command is kept where its words hold the filter, in any case. A
69828
+ * property only, there being no way to write a function in markup. (property only)
69370
69829
  * - `items`: The commands as data, for a palette too long to draw whole: each a value,
69371
69830
  * which is also its words, or a record with a `value`, a `label` and
69372
69831
  * `disabled`. Handed to the list, which draws only the commands in sight and
@@ -69458,6 +69917,7 @@ export type CustomElementsSolidJs = {
69458
69917
  * - `listbox-loading`: The text shown while the commands are loading.
69459
69918
  * - `listbox-search`: The region that holds the filter field.
69460
69919
  * - `listbox-search-field`: The filter field.
69920
+ * - `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
69921
  *
69462
69922
  * ## CSS States
69463
69923
  *
@@ -69706,6 +70166,7 @@ export type CustomElementsSolidJs = {
69706
70166
  * - `copied`: The moment after a successful copy, while `copied-label` names the button.
69707
70167
  * - `failed`: The moment after a press that put nothing on the clipboard, while `error-label` names the button.
69708
70168
  * - `pending`: The button is pending: `pending` is set.
70169
+ * - `pressed`: A Button Group in a selection mode has this button pressed.
69709
70170
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
69710
70171
  */
69711
70172
  "helix-headless-copy-button": Partial<
@@ -74773,6 +75234,7 @@ export type CustomElementsSolidJs = {
74773
75234
  * These can be used to apply styling when a component is in a given state.
74774
75235
  *
74775
75236
  * - `pending`: The button is pending: `pending` is set.
75237
+ * - `pressed`: A Button Group in a selection mode has this button pressed.
74776
75238
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
74777
75239
  */
74778
75240
  "helix-headless-icon-button": Partial<
@@ -75675,7 +76137,8 @@ export type CustomElementsSolidJs = {
75675
76137
  * Each item is a `group` with the role description `slide`, named by its
75676
76138
  * `label` or, without one, by its place in the set, such as "2 of 5", as the
75677
76139
  * APG carousel pattern names a slide. The lightbox supplies both words, so they
75678
- * are translated on the lightbox.
76140
+ * are translated on the lightbox. A `description`, while there is one,
76141
+ * describes the group, so a screen reader says it with the name.
75679
76142
  *
75680
76143
  * An item that is not current is hidden and stays in the DOM, as a `TabPanel`
75681
76144
  * does. Crawlers can read it, it is in the server-rendered markup, and an
@@ -75760,9 +76223,10 @@ export type CustomElementsSolidJs = {
75760
76223
  * buttons that send `--previous`, `--next` and `--close`.
75761
76224
  *
75762
76225
  * **Set `max-zoom` to let a reader zoom into the shown item**, such as `3`.
75763
- * Two fingers pinch it, a double click or a double tap zooms all the way in
75764
- * about the point pressed and back out, and once zoomed one pointer drags it
75765
- * about. `+` and `-` zoom in and out from the keyboard, and `0` puts it back.
76226
+ * Two fingers pinch it, and so does a trackpad pinch or the wheel with Ctrl
76227
+ * held, about the point under the pointer. A double click or a double tap
76228
+ * zooms all the way in about the point pressed and back out, and once zoomed
76229
+ * one pointer drags it about and the wheel moves it. `+` and `-` zoom in and out from the keyboard, and `0` puts it back.
75766
76230
  * The scale and the offset are on the `viewport` part as `--lightbox-zoom`,
75767
76231
  * `--lightbox-pan-x` and `--lightbox-pan-y`, written only while zoomed, and a
75768
76232
  * swipe moves to the next item only while the item is at its own size. With
@@ -75983,6 +76447,8 @@ export type CustomElementsSolidJs = {
75983
76447
  *
75984
76448
  * These can be used to apply styling when a component is in a given state.
75985
76449
  *
76450
+ * - `entering`: From the moment the viewer opens until its entrance has finished.
76451
+ * - `exiting`: From the moment the viewer closes until its exit has finished.
75986
76452
  * - `fullscreen`: While the viewer fills the screen.
75987
76453
  * - `idle`: The user has been still long enough for the controls to hide.
75988
76454
  * - `open`: While the viewer is open.
@@ -76437,7 +76903,9 @@ export type CustomElementsSolidJs = {
76437
76903
  * Not reflected, as a state never is. `row-current` is the part a
76438
76904
  * stylesheet draws it from.
76439
76905
  * - `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.
76906
+ * pass over it and it cannot be selected or acted on. In a list with
76907
+ * `disabled-behavior="selection"`, it cannot be selected and is reached and
76908
+ * acted on as any row is.
76441
76909
  * - `href`: The URL the row links to. Leave it empty for a row that is not a link.
76442
76910
  *
76443
76911
  * Empty rather than optional, and unset by default: a list is not always a
@@ -76464,6 +76932,9 @@ export type CustomElementsSolidJs = {
76464
76932
  *
76465
76933
  * Written by the list from its own `value`, and unset where nothing can be
76466
76934
  * selected, which keeps `aria-selected` off a list that does not select. (property only)
76935
+ * - `selectionOnly`: Whether `disabled` takes the row out of selection alone, written by a list
76936
+ * with `disabled-behavior="selection"`. No attribute: it is coordination
76937
+ * between elements, as `focusable` is. (property only)
76467
76938
  * - `words`: The row's words, or none where the children are not known yet. (property only) (readonly)
76468
76939
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
76469
76940
  *
@@ -76524,6 +76995,7 @@ export type CustomElementsSolidJs = {
76524
76995
  * - `dragging`: The row is being moved, in a `reorderable` list.
76525
76996
  * - `drop-after`: The row being moved goes after this one when it is dropped.
76526
76997
  * - `drop-before`: The row being moved goes before this one when it is dropped.
76998
+ * - `focus-visible`: The row's cell has keyboard focus that the browser shows, in a list with `selection-mode`.
76527
76999
  * - `selected`: The row is selected, in a list that selects.
76528
77000
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
76529
77001
  */
@@ -76543,7 +77015,9 @@ export type CustomElementsSolidJs = {
76543
77015
  * `multiple` any number, and `value` holds the selected rows' values,
76544
77016
  * separated by commas. A change asks with `helix-before-change` and tells
76545
77017
  * 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
77018
+ * `disabled` row is passed over. With `disabled-behavior="selection"`, a
77019
+ * `disabled` row cannot be selected, and is reached and acted on as any row
77020
+ * is, as React Aria's GridList has it. Each row is named by its label and described
76547
77021
  * by its description, so the words of the controls in `end` are not read as
76548
77022
  * part of its name.
76549
77023
  *
@@ -76621,6 +77095,12 @@ export type CustomElementsSolidJs = {
76621
77095
  *
76622
77096
  * - `canceled-label`/`canceledLabel`: What screen readers hear when a held row is put back, or a move is
76623
77097
  * refused, in a `reorderable` list.
77098
+ * - `disabled-behavior`/`disabledBehavior`: What `disabled` takes from a row, in a list that selects: `all`, which
77099
+ * passes over the row, or `selection`, which keeps the row out of the
77100
+ * selection and lets the keys reach it and Enter or a press act on it, as
77101
+ * React Aria's GridList takes `disabledBehavior`.
77102
+ *
77103
+ * Absent is `all`.
76624
77104
  * - `dropped-label`/`droppedLabel`: What screen readers hear when a row is dropped, in a `reorderable` list.
76625
77105
  * - `empty-label`/`emptyLabel`: The text of the row shown while the list has no rows, where the `empty`
76626
77106
  * slot is empty. Empty, the default, shows no row.
@@ -76763,7 +77243,9 @@ export type CustomElementsSolidJs = {
76763
77243
  * With `multiple` set, `value` is a comma-separated string, like
76764
77244
  * `Checkbox.Group`'s, because `MixinControllerValue` holds a string. The form
76765
77245
  * receives one entry per selected option, as a native `<select multiple>` sends
76766
- * it, so your server does not split on commas.
77246
+ * it, so your server does not split on commas. An option's value may hold a
77247
+ * comma: a run of the string that is an option's value is read as that one
77248
+ * value, and the form sends it as one entry.
76767
77249
  *
76768
77250
  * Selected and active are separate. The selected option is the value. The
76769
77251
  * active option is where the keyboard is: the arrow keys move it, and
@@ -76970,6 +77452,13 @@ export type CustomElementsSolidJs = {
76970
77452
  * imperatively later, and nothing is hydrating by then.
76971
77453
  *
76972
77454
  * Here rather than on each control.
77455
+ * - `filterMatch`: Whether an option is kept by the filter: a function given the option's
77456
+ * words and the filter, trimmed, that returns `true` to keep it showing, as
77457
+ * React Aria's `Autocomplete` takes `filter`. For matching that ignores
77458
+ * accents, matches the start of each word, or matches out of order.
77459
+ *
77460
+ * Absent, an option is kept where its words hold the filter, in any case. A
77461
+ * property only, there being no way to write a function in markup. (property only)
76973
77462
  * - `items`: The options as data, for a list too long to draw whole: each a value,
76974
77463
  * which is also its words, or a record with a `value`, a `label` and
76975
77464
  * `disabled`. Set, the list draws only the options in sight, and the ones
@@ -77006,7 +77495,10 @@ export type CustomElementsSolidJs = {
77006
77495
  * Descendants rather than children, because a group puts a level between the
77007
77496
  * list and its options and the keyboard has to move through a grouped list
77008
77497
  * 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)
77498
+ * - `values`: The chosen values, as an array whether or not `multiple` is set.
77499
+ *
77500
+ * Read against the options' values, so an option whose value holds a comma
77501
+ * is one value. See `chosenValues`. (property only) (readonly)
77010
77502
  * - `validity`: Whether the control meets its constraints, and why not. (property only) (readonly)
77011
77503
  * - `validationMessage`: The message the browser would show for the control, or an empty string. (property only) (readonly)
77012
77504
  * - `willValidate`: Whether the control is checked when its form is submitted. (property only) (readonly)
@@ -78812,8 +79304,8 @@ export type CustomElementsSolidJs = {
78812
79304
  * rows, Home and End go to the first and the last, a typed letter moves to
78813
79305
  * the next row whose name starts with it, Enter and Space choose, Right Arrow
78814
79306
  * 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.
79307
+ * right-to-left page. Left Arrow on the top page does nothing. Escape closes
79308
+ * the menu and returns focus to the trigger. Tab closes it and moves on.
78817
79309
  *
78818
79310
  * While it is open, the surface carries the trigger's width as
78819
79311
  * `--floating-anchor-inline-size` and the room left below it as
@@ -78957,6 +79449,10 @@ export type CustomElementsSolidJs = {
78957
79449
  * - `drilled`: A submenu's page is showing, so content that is not a row can hide with the top page.
78958
79450
  * - `mark`: A row on the current page has a checkbox or a link, so every row keeps the trailing column.
78959
79451
  * - `open`: While the menu is open.
79452
+ * - `placed-bottom`: While the open panel sits below its trigger.
79453
+ * - `placed-left`: While the open panel sits to the left of its trigger.
79454
+ * - `placed-right`: While the open panel sits to the right of its trigger.
79455
+ * - `placed-top`: While the open panel sits above its trigger.
78960
79456
  * - `start`: A row on the current page has content in its leading column, so every row keeps that column.
78961
79457
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
78962
79458
  */
@@ -79867,9 +80363,9 @@ export type CustomElementsSolidJs = {
79867
80363
  * The locale's group separators are read in every field, so `1,234` is a
79868
80364
  * number in `en-US`.
79869
80365
  *
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
80366
+ * The field and its two buttons sit in a `role="group"` named by the label,
80367
+ * and the field carries `role-label`, "number field" in English, as its
80368
+ * `aria-roledescription`, as React Aria's NumberField does. On iOS and iPadOS the field is a plain text
79873
80369
  * field, with no `role="spinbutton"`, which VoiceOver reads as a slider you
79874
80370
  * cannot type in, and no role description, so VoiceOver says the field is
79875
80371
  * required. React Aria's NumberField does the same.
@@ -80048,8 +80544,11 @@ export type CustomElementsSolidJs = {
80048
80544
  * imperatively later, and nothing is hydrating by then.
80049
80545
  *
80050
80546
  * Here rather than on each control.
80051
- * - `valueAsNumber`: The value as a number, or `NaN` while the control is empty.
80547
+ * - `valueAsNumber`: The value as a number, or `NaN` while the control is empty or does not
80548
+ * hold a number.
80052
80549
  *
80550
+ * Read in the locale and the format, as the form reads it, so `1,5` typed
80551
+ * in a locale with a decimal comma is 1.5 here while the form holds 1.5.
80053
80552
  * `NaN` and not zero, which is the trap the platform already avoids: `Number('')`
80054
80553
  * is zero, so an empty control would report a number it does not hold and a
80055
80554
  * form would submit it. (property only)
@@ -83482,7 +83981,9 @@ export type CustomElementsSolidJs = {
83482
83981
  * whole set.
83483
83982
  *
83484
83983
  * `Select` owns the value, passes it down to the listbox, and takes changes
83485
- * back, so the value lives in one place.
83984
+ * back, so the value lives in one place. With `multiple`, the value is the
83985
+ * chosen values joined with commas, and the form receives one entry for each.
83986
+ * An option's value may hold a comma, and it is read as one value.
83486
83987
  *
83487
83988
  * Set `valueContent` to draw the trigger's content from the chosen options,
83488
83989
  * and several chosen options are written as a list in the reader's language.
@@ -83862,7 +84363,8 @@ export type CustomElementsSolidJs = {
83862
84363
  * - `label`: What is loading, read out as the placeholder's name, such as "Loading
83863
84364
  * profile".
83864
84365
  *
83865
- * Absent hides the placeholder from screen readers.
84366
+ * Absent hides the placeholder from screen readers. Around content, the name
84367
+ * is read while `loading` is set, and the loaded content is read as it is.
83866
84368
  * - `loading`: Whether the content inside is still loading, which keeps it inert and
83867
84369
  * draws the placeholder over it.
83868
84370
  *
@@ -85524,6 +86026,10 @@ export type CustomElementsSolidJs = {
85524
86026
  * region. The current stage's button carries `aria-current="step"`, and only
85525
86027
  * the button, so the state is said once, on the control.
85526
86028
  *
86029
+ * A stage's `content`, while it holds anything, is a group named by the
86030
+ * stage's name, so a screen reader moving into it hears which stage it
86031
+ * belongs to.
86032
+ *
85527
86033
  * ## Attributes & Properties
85528
86034
  *
85529
86035
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -86586,10 +87092,18 @@ export type CustomElementsSolidJs = {
86586
87092
  * the tab list lands on the panel's first link or control where there is one,
86587
87093
  * and on the panel itself where there is none.
86588
87094
  *
87095
+ * **Set `lazy` for a panel that is expensive to draw.** Its content waits in a
87096
+ * `<template>` inside it, and goes into the panel the first time the panel is
87097
+ * shown, so it costs nothing until a reader opens that tab. Once in, it stays.
87098
+ * The panel sends `helix-load` at the same moment, for content your code
87099
+ * renders itself.
87100
+ *
86589
87101
  * ## Attributes & Properties
86590
87102
  *
86591
87103
  * Component attributes and properties that can be applied to the element or by using JavaScript.
86592
87104
  *
87105
+ * - `lazy`: Whether the panel's content waits in a `<template>` until the panel is
87106
+ * first shown.
86593
87107
  * - `selected`: Whether this panel is the visible one.
86594
87108
  * - `value`: Pairs the panel with the tab of the same value.
86595
87109
  * - `label`: The name of the panel, which is the text of the tab that opens it.
@@ -86623,11 +87137,17 @@ export type CustomElementsSolidJs = {
86623
87137
  * browser harness's awaits it alone: a browser always runs the frame, and a
86624
87138
  * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
86625
87139
  *
87140
+ * ## Events
87141
+ *
87142
+ * Events that will be emitted by the component.
87143
+ *
87144
+ * - `helix-load`: Fired the first time a `lazy` panel is shown, once its template's content is in.
87145
+ *
86626
87146
  * ## Slots
86627
87147
  *
86628
87148
  * Areas where markup can be added to the component.
86629
87149
  *
86630
- * - `(default)`: The panel's content.
87150
+ * - `(default)`: The panel's content. Under `lazy`, a `<template>` holding it.
86631
87151
  *
86632
87152
  * ## CSS Parts
86633
87153
  *
@@ -86639,6 +87159,7 @@ export type CustomElementsSolidJs = {
86639
87159
  *
86640
87160
  * These can be used to apply styling when a component is in a given state.
86641
87161
  *
87162
+ * - `loaded`: Once a `lazy` panel has been shown and its content is in.
86642
87163
  * - `selected`: While its tab is the one selected.
86643
87164
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
86644
87165
  */
@@ -86691,9 +87212,9 @@ export type CustomElementsSolidJs = {
86691
87212
  * | Enter, Space | Selects the tab with focus, or follows its link. |
86692
87213
  * | Tab | Leaves the list for the selected panel. |
86693
87214
  *
86694
- * Removing the selected tab selects the first enabled tab that is left, and
86695
- * `active` says so, with `helix-activate`. Where the removed tab had focus,
86696
- * focus moves to the tab now selected.
87215
+ * Removing the selected tab selects the enabled tab beside it, the next one
87216
+ * or else the one before, and `active` says so, with `helix-activate`. Where
87217
+ * the removed tab had focus, focus moves to the tab now selected.
86697
87218
  *
86698
87219
  * **More tabs than fit.** With `scroll-controls`, a strip that scrolls shows a
86699
87220
  * button at each end it can scroll toward, as Web Awesome's tab group does,
@@ -86799,6 +87320,8 @@ export type CustomElementsSolidJs = {
86799
87320
  * - `(default)`: The tabs, as direct children of this element.
86800
87321
  * - `indicator`: A mark of your own, drawn inside the `indicator` part, where `--indicator-x`, `--indicator-y`, `--indicator-inline-size` and `--indicator-block-size` reach it.
86801
87322
  * - `panels`: The panels, as direct children of this element. Panels inside a wrapper are not paired with tabs, because pairing reads only the direct children.
87323
+ * - `scroll-end-icon`: Replaces the glyph on the button that scrolls the strip toward its end.
87324
+ * - `scroll-start-icon`: Replaces the glyph on the button that scrolls the strip toward its start.
86802
87325
  *
86803
87326
  * ## Methods
86804
87327
  *
@@ -86820,7 +87343,9 @@ export type CustomElementsSolidJs = {
86820
87343
  * - `indicator`: The marker that moves to the selected tab. It carries the selected tab's place and size as `--indicator-x`, `--indicator-y`, `--indicator-inline-size` and `--indicator-block-size`, and `data-placed` once it has been placed, for a mark you draw and animate yourself.
86821
87344
  * - `panels`: The panel container.
86822
87345
  * - `scroll-end`: The button that scrolls the strip toward its end, shown under `scroll-controls` while there is more that way.
87346
+ * - `scroll-end-mark`: The glyph on that button, where none is slotted.
86823
87347
  * - `scroll-start`: The button that scrolls the strip toward its start, shown under `scroll-controls` while there is more that way.
87348
+ * - `scroll-start-mark`: The glyph on that button, where none is slotted.
86824
87349
  * - `tabs`: The tab list.
86825
87350
  *
86826
87351
  * ## CSS States
@@ -86848,8 +87373,8 @@ export type CustomElementsSolidJs = {
86848
87373
  * can: a press on its `dismiss` mark, or Delete or Backspace while the tab
86849
87374
  * has focus, sends `helix-dismiss`. The tab does not remove itself, because
86850
87375
  * your code owns the set, so remove the tab and its panel in your handler.
86851
- * Focus moves to the tab beside it, and the tab set selects a tab that is
86852
- * left.
87376
+ * Focus moves to the tab beside it, and where the tab was selected, the tab
87377
+ * set selects that same tab.
86853
87378
  * The tab says the key through `aria-keyshortcuts`, and the mark is for the
86854
87379
  * pointer, hidden from screen readers.
86855
87380
  *
@@ -86906,6 +87431,7 @@ export type CustomElementsSolidJs = {
86906
87431
  * Areas where markup can be added to the component.
86907
87432
  *
86908
87433
  * - `(default)`: The tab's label.
87434
+ * - `dismiss-icon`: Replaces the glyph on the mark that closes a `dismissible` tab.
86909
87435
  *
86910
87436
  * ## Methods
86911
87437
  *
@@ -86930,6 +87456,7 @@ export type CustomElementsSolidJs = {
86930
87456
  * Custom selectors for styling elements within the component.
86931
87457
  *
86932
87458
  * - `dismiss`: The mark a pointer presses to close a `dismissible` tab.
87459
+ * - `dismiss-mark`: The glyph on that mark, where none is slotted.
86933
87460
  * - `tab`: The tab itself.
86934
87461
  *
86935
87462
  * ## CSS States
@@ -88569,8 +89096,9 @@ export type CustomElementsSolidJs = {
88569
89096
  *
88570
89097
  * **Each item runs its own timer.** A timer held by the region would restart
88571
89098
  * with each new message, and the last of three messages would stay for nine
88572
- * seconds. It pauses while the pointer or focus is on the message, and while
88573
- * the page is hidden, so a message is not spent in a background tab.
89099
+ * seconds. It pauses while the pointer or focus is on the message or anywhere
89100
+ * in the region's stack, and while the page is hidden, so a message is not
89101
+ * spent in a background tab.
88574
89102
  *
88575
89103
  * **Each message is an `alertdialog` named by its words**, which is how a reader
88576
89104
  * who moves into the stack hears which message they are on. Give it a
@@ -88579,10 +89107,11 @@ export type CustomElementsSolidJs = {
88579
89107
  * says each message once as it arrives, a `danger` one assertively, so a
88580
89108
  * message is never a live region of its own.
88581
89109
  *
88582
- * A touch or a pen swipes a message toward the end of the line, and past
88583
- * halfway, or quickly, dismisses it through the same `helix-dismiss` as its
88584
- * control. While it moves, the distance is on the `item` part as
88585
- * `--toast-swipe-x`.
89110
+ * A touch or a pen swipes a message toward the end of the line, or toward the
89111
+ * edge the region's `swipe-direction` names, and past halfway, or quickly,
89112
+ * dismisses it through the same `helix-dismiss` as its control. While it
89113
+ * moves, the distance is on the `item` part as `--toast-swipe-x` or
89114
+ * `--toast-swipe-y`.
88586
89115
  *
88587
89116
  * **Escape dismisses the message holding focus**, through the same
88588
89117
  * `helix-dismiss`, and focus moves to the next message.
@@ -88684,6 +89213,7 @@ export type CustomElementsSolidJs = {
88684
89213
  *
88685
89214
  * - `--toast-duration`: How long this message stays, in milliseconds, for a progress hint.
88686
89215
  * - `--toast-swipe-x`: How far a swipe has moved the message across, in pixels, toward the right.
89216
+ * - `--toast-swipe-y`: How far a swipe has moved the message down, in pixels, under a `swipe-direction` of `top` or `bottom`.
88687
89217
  *
88688
89218
  * ## CSS Parts
88689
89219
  *
@@ -88705,7 +89235,7 @@ export type CustomElementsSolidJs = {
88705
89235
  * These can be used to apply styling when a component is in a given state.
88706
89236
  *
88707
89237
  * - `closed`: The message has been dismissed and is hidden, or leaving.
88708
- * - `paused`: The dismiss timer is paused, while a pointer or focus is on the message, or while the page is hidden.
89238
+ * - `paused`: The dismiss timer is paused, while a pointer or focus is on the message or in the stack, or while the page is hidden.
88709
89239
  * - `waiting`: The region holds the message back, past its `max-visible`, until a message before it goes.
88710
89240
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
88711
89241
  */
@@ -88747,7 +89277,12 @@ export type CustomElementsSolidJs = {
88747
89277
  * to render them from: it appends a message of the region's own tier and
88748
89278
  * removes it once it has been dismissed and has finished leaving. Messages
88749
89279
  * you render yourself stay yours, and the region never removes them. A touch
88750
- * or a pen swipes a message away toward the end of the line.
89280
+ * or a pen swipes a message away toward the end of the line, or toward the
89281
+ * edge `swipe-direction` names.
89282
+ *
89283
+ * **Every message's timer waits while a pointer or focus is in the stack**, as
89284
+ * React Aria's and Radix's regions do, so a reader moving from one message to
89285
+ * the next does not lose the one behind them.
88751
89286
  *
88752
89287
  * **The stack is in the top layer.** The `region` part is a `popover="manual"`
88753
89288
  * shown while a message is showing, and shown again above a modal dialog that
@@ -88812,6 +89347,8 @@ export type CustomElementsSolidJs = {
88812
89347
  * consumer's server markup does not have. A sheet carries the resting
88813
89348
  * arrangement in its own `:host` rule and the selectors describe only the
88814
89349
  * departures, which is what `orientation` does.
89350
+ * - `swipe-direction`/`swipeDirection`: The edge a touch or a pen swipes a message toward to dismiss it: `end`,
89351
+ * the end of the line, or `start`, `top` or `bottom`. Unset is `end`.
88815
89352
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
88816
89353
  *
88817
89354
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -89693,6 +90230,17 @@ export type CustomElementsSolidJs = {
89693
90230
  * least distance that brings it on screen, so the stop that points at it is
89694
90231
  * on screen too.
89695
90232
  *
90233
+ * **A stop's `effect` runs as the tour reaches it**, before it is shown, and
90234
+ * the stop waits for a promise it returns, with `:state(preparing)` on the
90235
+ * tour meanwhile. A function it returns runs when the tour leaves the stop.
90236
+ *
90237
+ * **A press outside the current stop and its target does nothing by
90238
+ * default**, so a reader can use the page the tour is describing. Set
90239
+ * `outside-press="close"` to end the tour on one, through `helix-before-close`
90240
+ * as Skip does, or `outside-press="block"` to refuse it, so the stop and its
90241
+ * target are all a pointer can reach while the tour runs, as Zag's
90242
+ * `preventInteraction` does.
90243
+ *
89696
90244
  * **Keyboard.** Focus is on the current stop's panel, which is not in the
89697
90245
  * `Tab` order itself.
89698
90246
  *
@@ -89730,6 +90278,9 @@ export type CustomElementsSolidJs = {
89730
90278
  * `undefined` until somebody sets one.
89731
90279
  * - `label`: The tour's name, read by screen readers, such as "Getting started".
89732
90280
  * - `next-label`/`nextLabel`: Label for the control that goes on.
90281
+ * - `outside-press`/`outsidePress`: What a press outside the current stop and its target does while the tour
90282
+ * runs. Unset, nothing: the page stays usable. `close` ends the tour, as
90283
+ * Skip does, and `block` refuses the press.
89733
90284
  * - `progress`: Draws each stop's place in the run in its panel, as well as saying it.
89734
90285
  * - `progress-label`/`progressLabel`: Each stop's place in the run, with `{index}` and `{count}` filled in and
89735
90286
  * written in the locale. Translate it with the rest of your text.
@@ -89833,6 +90384,7 @@ export type CustomElementsSolidJs = {
89833
90384
  * These can be used to apply styling when a component is in a given state.
89834
90385
  *
89835
90386
  * - `open`: While the tour is running.
90387
+ * - `preparing`: While the tour waits for the current stop's `effect` before showing the stop.
89836
90388
  * - `waiting`: While the tour waits at a `wait` stop for its target to be on the page.
89837
90389
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
89838
90390
  */
@@ -89869,6 +90421,13 @@ export type CustomElementsSolidJs = {
89869
90421
  * get Back, Next, and Skip, already wired. Slot your own `actions` and drive
89870
90422
  * them with `next()`, `back()`, and `skip()` on the root.
89871
90423
  *
90424
+ * **Set `effect` to prepare the page for a stop**, such as opening the menu
90425
+ * it points into or loading what it describes. It is a function, set from
90426
+ * script, that the tour runs as it reaches the stop. Return a promise and the
90427
+ * stop waits for it, and the tour has `:state(preparing)` meanwhile; return a
90428
+ * function, or resolve to one, and the tour runs it when it leaves the stop.
90429
+ * Zag's tour step has the same `effect`.
90430
+ *
89872
90431
  * **`for` is an id, as with `Tooltip`**, so you can point at a target elsewhere
89873
90432
  * on the page from markup. It resolves against the stop's root node, so a stop
89874
90433
  * inside a shadow tree points at a target in that tree.
@@ -89910,6 +90469,8 @@ export type CustomElementsSolidJs = {
89910
90469
  *
89911
90470
  * Reflected, because the styled tier places a dialog and a floating panel by
89912
90471
  * it, and unset at rest, so no default is written onto the host.
90472
+ * - `effect`: Run as the tour reaches the stop, before it is shown: see the description
90473
+ * above. A function, so it is set from script and has no attribute. (property only)
89913
90474
  * - `target`: The element the stop points at, or `null` when no element has the `for` id. (property only) (readonly)
89914
90475
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
89915
90476
  *
@@ -89992,6 +90553,8 @@ export type CustomElementsSolidJs = {
89992
90553
  *
89993
90554
  * These can be used to apply styling when a component is in a given state.
89994
90555
  *
90556
+ * - `entering`: From the moment the stop is shown until its entrance has finished.
90557
+ * - `exiting`: From the moment the stop is left until its exit has finished.
89995
90558
  * - `placed-bottom`: The panel sits below its target.
89996
90559
  * - `placed-left`: The panel sits to the left of its target.
89997
90560
  * - `placed-right`: The panel sits to the right of its target.
@@ -91764,6 +92327,8 @@ export type CustomCssProperties = {
91764
92327
  "--toast-duration"?: (string) | undefined;
91765
92328
  /** How far a swipe has moved the message across, in pixels, toward the right. */
91766
92329
  "--toast-swipe-x"?: (string) | undefined;
92330
+ /** How far a swipe has moved the message down, in pixels, under a `swipe-direction` of `top` or `bottom`. */
92331
+ "--toast-swipe-y"?: (string) | undefined;
91767
92332
  /** The lit box's height, in pixels, padding included. Written on the spotlight while it lights a target. */
91768
92333
  "--tour-spotlight-height"?: (string) | undefined;
91769
92334
  /** The lit box's width, in pixels, padding included. Written on the spotlight while it lights a target. */