@fusion.dev/helix-headless 0.218.0 → 0.220.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 (84) hide show
  1. package/api.json +1 -1
  2. package/custom-elements.json +1 -1
  3. package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +13 -2
  4. package/dist/breadcrumbs/breadcrumb/breadcrumb.js +19 -9
  5. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +16 -1
  6. package/dist/breadcrumbs/root/breadcrumbs-root.js +6 -0
  7. package/dist/button/root/button-root.d.ts +33 -0
  8. package/dist/button/root/button-root.js +13 -3
  9. package/dist/canvas/root/canvas-root.d.ts +11 -0
  10. package/dist/canvas/root/canvas-root.js +1 -0
  11. package/dist/chat/composer/chat-composer.d.ts +221 -6
  12. package/dist/chat/composer/chat-composer.js +249 -19
  13. package/dist/chat/message/chat-message.d.ts +7 -0
  14. package/dist/chat/message/chat-message.js +2 -1
  15. package/dist/chat/root/chat-root.d.ts +1 -0
  16. package/dist/chat/root/chat-root.js +1 -1
  17. package/dist/code-editor/root/code-editor-root.d.ts +48 -51
  18. package/dist/code-editor/root/code-editor-root.js +67 -249
  19. package/dist/copy-button/root/copy-button-root.js +3 -3
  20. package/dist/device-screen/root/device-screen-root.d.ts +11 -0
  21. package/dist/device-screen/root/device-screen-root.js +22 -10
  22. package/dist/dialog/root/dialog-root.js +6 -1
  23. package/dist/drilldown/item/drilldown-item.js +1 -1
  24. package/dist/element-events.generated.js +4 -1
  25. package/dist/filter-input/root/filter-input-root.d.ts +4 -3
  26. package/dist/filter-input/root/filter-input-root.js +1 -20
  27. package/dist/find/index.d.ts +1 -0
  28. package/dist/find/index.js +1 -0
  29. package/dist/find/root/find-root.d.ts +314 -0
  30. package/dist/find/root/find-root.js +577 -0
  31. package/dist/graph/root/graph-root.d.ts +11 -0
  32. package/dist/graph/root/graph-root.js +4 -1
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.js +1 -0
  35. package/dist/input/root/input-root.d.ts +6 -0
  36. package/dist/input/root/input-root.js +7 -0
  37. package/dist/lightbox/root/lightbox-root.d.ts +4 -1
  38. package/dist/lightbox/root/lightbox-root.js +10 -8
  39. package/dist/listbox/root/listbox-root.d.ts +21 -0
  40. package/dist/listbox/root/listbox-root.js +37 -2
  41. package/dist/log/group/log-group.d.ts +18 -3
  42. package/dist/log/group/log-group.js +31 -4
  43. package/dist/log/root/log-root.d.ts +13 -3
  44. package/dist/log/root/log-root.js +5 -2
  45. package/dist/map/root/map-root.d.ts +11 -0
  46. package/dist/map/root/map-root.js +28 -12
  47. package/dist/menu/root/menu-root.d.ts +8 -0
  48. package/dist/menu/root/menu-root.js +22 -1
  49. package/dist/menu/section/menu-section.d.ts +10 -0
  50. package/dist/menu/section/menu-section.js +10 -0
  51. package/dist/meter/index.d.ts +1 -0
  52. package/dist/meter/index.js +1 -0
  53. package/dist/meter/root/meter-root.d.ts +16 -1
  54. package/dist/meter/root/meter-root.js +27 -11
  55. package/dist/meter/segment/meter-segment.d.ts +74 -0
  56. package/dist/meter/segment/meter-segment.js +47 -0
  57. package/dist/scroll-area/root/scroll-area-root.d.ts +20 -3
  58. package/dist/scroll-area/root/scroll-area-root.js +23 -4
  59. package/dist/spatial-bar-chart/bars.d.ts +125 -5
  60. package/dist/spatial-bar-chart/bars.js +194 -17
  61. package/dist/spatial-bar-chart/root/spatial-bar-chart-root.d.ts +148 -6
  62. package/dist/spatial-bar-chart/root/spatial-bar-chart-root.js +285 -16
  63. package/dist/splitter/root/splitter-root.js +1 -0
  64. package/dist/tabs/root/tabs-root.d.ts +4 -0
  65. package/dist/tabs/tab/tab.d.ts +1 -0
  66. package/dist/tabs/tab/tab.js +2 -2
  67. package/dist/tag/root/tag-root.d.ts +1 -1
  68. package/dist/terminal/root/terminal-root.d.ts +60 -32
  69. package/dist/terminal/root/terminal-root.js +82 -178
  70. package/dist/toolbar/root/toolbar-root.d.ts +4 -1
  71. package/dist/tooltip/root/tooltip-root.d.ts +23 -1
  72. package/dist/tooltip/root/tooltip-root.js +28 -5
  73. package/dist/tour/root/tour-root.d.ts +1 -0
  74. package/dist/tour/root/tour-root.js +4 -1
  75. package/dist/tour/stop/tour-stop.js +1 -0
  76. package/dist/tree/item/tree-item.d.ts +11 -0
  77. package/dist/tree/item/tree-item.js +19 -1
  78. package/examples.json +1 -1
  79. package/lint.json +1 -1
  80. package/package.json +5 -5
  81. package/types/jsx.d.ts +2222 -118
  82. package/types/svelte.d.ts +2 -0
  83. package/types/vue.d.ts +468 -19
  84. package/types/words.d.ts +96 -1
package/types/vue.d.ts CHANGED
@@ -41,6 +41,7 @@ import type {
41
41
  HelixFacetEvent,
42
42
  HelixFilterEvent,
43
43
  HelixFilteredEvent,
44
+ HelixFoundEvent,
44
45
  HelixGraphFilterEvent,
45
46
  HelixGraphLayoutEvent,
46
47
  HelixGraphPanEvent,
@@ -101,6 +102,7 @@ import type {
101
102
  HelixHeadlessFilterInput,
102
103
  HelixHeadlessFilterMenu,
103
104
  HelixHeadlessFilterOperator,
105
+ HelixHeadlessFind,
104
106
  HelixHeadlessFormatDate,
105
107
  HelixHeadlessGraph,
106
108
  HelixHeadlessHeatmap,
@@ -137,6 +139,7 @@ import type {
137
139
  HelixHeadlessMenuItem,
138
140
  HelixHeadlessMenuSection,
139
141
  HelixHeadlessMeter,
142
+ HelixHeadlessMeterSegment,
140
143
  HelixHeadlessMotionToggle,
141
144
  HelixHeadlessNavigation,
142
145
  HelixHeadlessNotification,
@@ -256,6 +259,7 @@ import type {
256
259
  HelixShortcutEvent,
257
260
  HelixSortEvent,
258
261
  HelixSortedEvent,
262
+ HelixStopEvent,
259
263
  HelixTerminalBellEvent,
260
264
  HelixTerminalInputEvent,
261
265
  HelixTerminalLinkEvent,
@@ -1371,6 +1375,19 @@ into one, counting the first and the last. Unset, it never folds. At least
1371
1375
  into one, counting the first and the last. Unset, it never folds. At least
1372
1376
  2, so the first crumb and the current page always show. */
1373
1377
  maxItems?: (HelixHeadlessBreadcrumbs["maxItems"]) | undefined;
1378
+ /** The mark between one crumb and the next, for the whole trail. Unset is a
1379
+ chevron; `slash` is a slash, as a path or a repository and its branch is
1380
+ written.
1381
+
1382
+ **On the trail rather than on each crumb**, because the marks are one
1383
+ decision: a trail whose separators differ from crumb to crumb is a
1384
+ mistake, and a trail drawn from `items` has no crumb of yours to set it
1385
+ on. A crumb's own `separator` slot still replaces its mark, for the rare
1386
+ crumb that needs something else.
1387
+
1388
+ Optional and reflected, per the rule that a reflected property takes no
1389
+ default, so a stylesheet can select on it. */
1390
+ separator?: (HelixHeadlessBreadcrumbs["separator"]) | undefined;
1374
1391
  /** The trail as data, drawn as crumbs before any you slot. The last item is the
1375
1392
  current page.
1376
1393
 
@@ -1485,6 +1502,36 @@ is the platform's `commandfor`. */
1485
1502
  commandfor?: (HelixHeadlessButton["commandFor"]) | undefined;
1486
1503
  /** The id of the element the command is sent to. */
1487
1504
  commandFor?: (HelixHeadlessButton["commandFor"]) | undefined;
1505
+ /** Whether a disabled button stays in the tab order, so a tooltip around it
1506
+ can say why it is disabled.
1507
+
1508
+ Set it on a button whose reason a Tooltip gives, such as a Save with no
1509
+ changes to save. While the button is disabled, it keeps focus and takes
1510
+ hover, and it refuses every press: a click, Enter and Space, and Enter in
1511
+ a field of its form. The click does not reach your listeners, and a submit
1512
+ button submits nothing. The inner control carries `aria-disabled` in place
1513
+ of the native `disabled`, so a screen reader still says it is unavailable.
1514
+ The styled button keeps the disabled look.
1515
+
1516
+ Leave it unset on a button with no reason to give. A plain disabled button
1517
+ leaves the tab order, as a native one does, and a keyboard reader skips a
1518
+ stop that does nothing. Set `pending` for the wait after a press. */
1519
+ "focusable-when-disabled"?: (HelixHeadlessButton["focusableWhenDisabled"]) | undefined;
1520
+ /** Whether a disabled button stays in the tab order, so a tooltip around it
1521
+ can say why it is disabled.
1522
+
1523
+ Set it on a button whose reason a Tooltip gives, such as a Save with no
1524
+ changes to save. While the button is disabled, it keeps focus and takes
1525
+ hover, and it refuses every press: a click, Enter and Space, and Enter in
1526
+ a field of its form. The click does not reach your listeners, and a submit
1527
+ button submits nothing. The inner control carries `aria-disabled` in place
1528
+ of the native `disabled`, so a screen reader still says it is unavailable.
1529
+ The styled button keeps the disabled look.
1530
+
1531
+ Leave it unset on a button with no reason to give. A plain disabled button
1532
+ leaves the tab order, as a native one does, and a keyboard reader skips a
1533
+ stop that does nothing. Set `pending` for the wait after a press. */
1534
+ focusableWhenDisabled?: (HelixHeadlessButton["focusableWhenDisabled"]) | undefined;
1488
1535
  /** Where this button's submission goes, overriding the form's own.
1489
1536
 
1490
1537
  **The five `form*` overrides ride on a native submit button that stands in
@@ -2713,11 +2760,26 @@ export type HelixHeadlessChatComposerHelixListenElementEvent =
2713
2760
  /** `helix-send` event type */
2714
2761
  export type HelixHeadlessChatComposerHelixSendElementEvent =
2715
2762
  HelixHeadlessChatComposerElementEvent<HelixSendEvent>;
2763
+ /** `helix-stop` event type */
2764
+ export type HelixHeadlessChatComposerHelixStopElementEvent =
2765
+ HelixHeadlessChatComposerElementEvent<HelixStopEvent>;
2716
2766
  /** `helix-typing` event type */
2717
2767
  export type HelixHeadlessChatComposerHelixTypingElementEvent =
2718
2768
  HelixHeadlessChatComposerElementEvent<HelixTypingEvent>;
2719
2769
 
2720
2770
  export type HelixHeadlessChatComposerVueProps = {
2771
+ /** Whether the draft holds something besides its text, such as an attached
2772
+ file. The draft then counts as one though the field is empty, so the
2773
+ send button shows in place of the `idle` slot. */
2774
+ attached?: (HelixHeadlessChatComposer["attached"]) | undefined;
2775
+ /** Whether a reply is on its way. While set, the send button is a stop
2776
+ button that sends `helix-stop`, and the draft does not send.
2777
+
2778
+ **The same button rather than one beside it**, because sending and
2779
+ stopping are never both possible: while a reply is on its way there is
2780
+ nothing to send to, and the place the reader's eye goes to act is the
2781
+ place that can act. The field stays open for the next turn. */
2782
+ busy?: (HelixHeadlessChatComposer["busy"]) | undefined;
2721
2783
  /** A message about the draft, shown under the field. While set, the composer
2722
2784
  is invalid, does not send, and does not submit, as a field's `feedback`
2723
2785
  does, and the message is announced as it appears. */
@@ -2736,6 +2798,14 @@ the field, as on a `<textarea>`. */
2736
2798
  minLength?: (HelixHeadlessChatComposer["minLength"]) | undefined;
2737
2799
  /** Placeholder text shown in an empty field. */
2738
2800
  placeholder?: (HelixHeadlessChatComposer["placeholder"]) | undefined;
2801
+ /** Whether Enter sends while `busy`, for a page that queues the turn or
2802
+ hands it to the reply under way.
2803
+
2804
+ Off by default, because a page that does neither would drop the turn: it
2805
+ has nowhere to put a message while a reply is coming. The button stays
2806
+ the stop button either way, since stopping is still the one thing it
2807
+ should do while a reply is on its way. */
2808
+ queue?: (HelixHeadlessChatComposer["queue"]) | undefined;
2739
2809
  /** Whether the form needs a draft to submit. An empty draft never sends,
2740
2810
  required or not. */
2741
2811
  required?: (HelixHeadlessChatComposer["required"]) | undefined;
@@ -2743,10 +2813,34 @@ required or not. */
2743
2813
 
2744
2814
  It grows from there. */
2745
2815
  rows?: (HelixHeadlessChatComposer["rows"]) | undefined;
2816
+ /** Whether the draft waits to be sent, such as while an attachment is still
2817
+ read. The send button is unavailable and Enter does not send, while the
2818
+ field stays open. The stop button shown while `busy` still stops. */
2819
+ "send-disabled"?: (HelixHeadlessChatComposer["sendDisabled"]) | undefined;
2820
+ /** Whether the draft waits to be sent, such as while an attachment is still
2821
+ read. The send button is unavailable and Enter does not send, while the
2822
+ field stays open. The stop button shown while `busy` still stops. */
2823
+ sendDisabled?: (HelixHeadlessChatComposer["sendDisabled"]) | undefined;
2746
2824
  /** Label for the send button. */
2747
2825
  "send-label"?: (HelixHeadlessChatComposer["sendLabel"]) | undefined;
2748
2826
  /** Label for the send button. */
2749
2827
  sendLabel?: (HelixHeadlessChatComposer["sendLabel"]) | undefined;
2828
+ /** Why the draft waits, such as "Reading photo.jpg", shown in a tooltip on
2829
+ the send button while `send-disabled` is set. The button then stays in
2830
+ the tab order and takes the pointer, with `aria-disabled` in place of
2831
+ `disabled`, so the reason can be reached by keyboard and by pointer, as
2832
+ Button's `focusable-when-disabled` does. A press still sends nothing. */
2833
+ "send-reason"?: (HelixHeadlessChatComposer["sendReason"]) | undefined;
2834
+ /** Why the draft waits, such as "Reading photo.jpg", shown in a tooltip on
2835
+ the send button while `send-disabled` is set. The button then stays in
2836
+ the tab order and takes the pointer, with `aria-disabled` in place of
2837
+ `disabled`, so the reason can be reached by keyboard and by pointer, as
2838
+ Button's `focusable-when-disabled` does. A press still sends nothing. */
2839
+ sendReason?: (HelixHeadlessChatComposer["sendReason"]) | undefined;
2840
+ /** Label for the stop button shown while `busy`. */
2841
+ "stop-label"?: (HelixHeadlessChatComposer["stopLabel"]) | undefined;
2842
+ /** Label for the stop button shown while `busy`. */
2843
+ stopLabel?: (HelixHeadlessChatComposer["stopLabel"]) | undefined;
2750
2844
  /** What sends the turn: `enter` for the Enter key, or `button` for the send
2751
2845
  button only.
2752
2846
 
@@ -2819,6 +2913,23 @@ imperatively later, and nothing is hydrating by then.
2819
2913
 
2820
2914
  Here rather than on each control. */
2821
2915
  name?: (HelixHeadlessChatComposer["name"]) | undefined;
2916
+ /** Examples the empty field shows in turn, in place of `placeholder`, such
2917
+ as tasks a reader might ask for. Each shows for 6.5 seconds, and a longer
2918
+ one shows longer, up to 10 seconds.
2919
+
2920
+ **Each is the field's placeholder in its turn**, so a screen reader that
2921
+ reaches the field hears the one showing. The swap runs through
2922
+ `:state(example-leaving)`, as one example leaves, and
2923
+ `:state(example-entering)`, as the next arrives.
2924
+
2925
+ **They move only while nobody is about to write, and while the reader
2926
+ can see them.** An empty field without focus moves on. Focus or text
2927
+ holds the example showing, and an example already leaving finishes its
2928
+ turn. A composer scrolled out of view holds its example, and the example
2929
+ gets its full time again when the composer comes back. Where the reader
2930
+ asked for less motion, or the page paused its motion, the first example
2931
+ stays. */
2932
+ placeholders?: (HelixHeadlessChatComposer["placeholders"]) | undefined;
2822
2933
  /** The engine this field listens through, in place of the one
2823
2934
  `registerSpeechEngine` gave the page, or the browser's own. */
2824
2935
  speechEngine?: (HelixHeadlessChatComposer["speechEngine"]) | undefined;
@@ -2831,6 +2942,8 @@ export type HelixHeadlessChatComposerVueEvents = {
2831
2942
  "helix-listen": HelixHeadlessChatComposerHelixListenElementEvent;
2832
2943
  /** Fired when the user sends their turn, and cancelable. */
2833
2944
  "helix-send": HelixHeadlessChatComposerHelixSendElementEvent;
2945
+ /** Fired when the user presses the stop button, shown in place of the send button while `busy` is set. */
2946
+ "helix-stop": HelixHeadlessChatComposerHelixStopElementEvent;
2834
2947
  /** The user started or stopped writing, with `typing` saying which, as the composer's `typing` does. */
2835
2948
  "helix-typing": HelixHeadlessChatComposerHelixTypingElementEvent;
2836
2949
  /** The user changed the text. Read it from `value`, for a typing indicator or a saved draft. Bubbles and is composed, as a native field's is. */
@@ -3584,6 +3697,9 @@ export type HelixHeadlessCodeEditorElementEvent<E = Event> = TypedEvent<
3584
3697
  /** `helix-before-change` event type */
3585
3698
  export type HelixHeadlessCodeEditorHelixBeforeChangeElementEvent =
3586
3699
  HelixHeadlessCodeEditorElementEvent<HelixBeforeChangeEvent>;
3700
+ /** `helix-found` event type */
3701
+ export type HelixHeadlessCodeEditorHelixFoundElementEvent =
3702
+ HelixHeadlessCodeEditorElementEvent<HelixFoundEvent>;
3587
3703
 
3588
3704
  export type HelixHeadlessCodeEditorVueProps = {
3589
3705
  /** The name of the header's toolbar, read by screen readers. */
@@ -3780,6 +3896,8 @@ export type HelixHeadlessCodeEditorVueEvents = {
3780
3896
  change: HelixHeadlessCodeEditorElementEvent;
3781
3897
  /** The text is about to change. Cancelable: cancel it to keep the current text. */
3782
3898
  "helix-before-change": HelixHeadlessCodeEditorHelixBeforeChangeElementEvent;
3899
+ /** The find bar searched or moved among the matches, with `count` and the selected match's `index`, counting from 0, or -1 for none. */
3900
+ "helix-found": HelixHeadlessCodeEditorHelixFoundElementEvent;
3783
3901
  /** Fired after the text changes. */
3784
3902
  input: HelixHeadlessCodeEditorElementEvent;
3785
3903
  };
@@ -5330,6 +5448,36 @@ whatever its `type`. Declared here so its own page says what it holds. */
5330
5448
  value?: (HelixHeadlessCopyButton["value"]) | undefined;
5331
5449
  /** */
5332
5450
  "aria-label"?: (string) | undefined;
5451
+ /** Whether a disabled button stays in the tab order, so a tooltip around it
5452
+ can say why it is disabled.
5453
+
5454
+ Set it on a button whose reason a Tooltip gives, such as a Save with no
5455
+ changes to save. While the button is disabled, it keeps focus and takes
5456
+ hover, and it refuses every press: a click, Enter and Space, and Enter in
5457
+ a field of its form. The click does not reach your listeners, and a submit
5458
+ button submits nothing. The inner control carries `aria-disabled` in place
5459
+ of the native `disabled`, so a screen reader still says it is unavailable.
5460
+ The styled button keeps the disabled look.
5461
+
5462
+ Leave it unset on a button with no reason to give. A plain disabled button
5463
+ leaves the tab order, as a native one does, and a keyboard reader skips a
5464
+ stop that does nothing. Set `pending` for the wait after a press. */
5465
+ "focusable-when-disabled"?: (HelixHeadlessCopyButton["focusableWhenDisabled"]) | undefined;
5466
+ /** Whether a disabled button stays in the tab order, so a tooltip around it
5467
+ can say why it is disabled.
5468
+
5469
+ Set it on a button whose reason a Tooltip gives, such as a Save with no
5470
+ changes to save. While the button is disabled, it keeps focus and takes
5471
+ hover, and it refuses every press: a click, Enter and Space, and Enter in
5472
+ a field of its form. The click does not reach your listeners, and a submit
5473
+ button submits nothing. The inner control carries `aria-disabled` in place
5474
+ of the native `disabled`, so a screen reader still says it is unavailable.
5475
+ The styled button keeps the disabled look.
5476
+
5477
+ Leave it unset on a button with no reason to give. A plain disabled button
5478
+ leaves the tab order, as a native one does, and a keyboard reader skips a
5479
+ stop that does nothing. Set `pending` for the wait after a press. */
5480
+ focusableWhenDisabled?: (HelixHeadlessCopyButton["focusableWhenDisabled"]) | undefined;
5333
5481
  /** Whether the action the button started is still running.
5334
5482
 
5335
5483
  A pending button keeps focus and stays in the tab order, and refuses every
@@ -8311,6 +8459,142 @@ export type HelixHeadlessFilterInputVueEvents = {
8311
8459
  toggle: HelixHeadlessFilterInputToggleElementEvent;
8312
8460
  };
8313
8461
 
8462
+ /** `HelixHeadlessFind` component event */
8463
+ export type HelixHeadlessFindElementEvent<E = Event> = TypedEvent<
8464
+ HelixHeadlessFind,
8465
+ E
8466
+ >;
8467
+ /** `helix-before-close` event type */
8468
+ export type HelixHeadlessFindHelixBeforeCloseElementEvent =
8469
+ HelixHeadlessFindElementEvent<HelixBeforeCloseEvent>;
8470
+ /** `helix-before-open` event type */
8471
+ export type HelixHeadlessFindHelixBeforeOpenElementEvent =
8472
+ HelixHeadlessFindElementEvent<HelixBeforeOpenEvent>;
8473
+ /** `helix-found` event type */
8474
+ export type HelixHeadlessFindHelixFoundElementEvent =
8475
+ HelixHeadlessFindElementEvent<HelixFoundEvent>;
8476
+ /** `toggle` event type */
8477
+ export type HelixHeadlessFindToggleElementEvent =
8478
+ HelixHeadlessFindElementEvent<ToggleEvent>;
8479
+
8480
+ export type HelixHeadlessFindVueProps = {
8481
+ /** The close button's label. */
8482
+ "close-label"?: (HelixHeadlessFind["closeLabel"]) | undefined;
8483
+ /** The close button's label. */
8484
+ closeLabel?: (HelixHeadlessFind["closeLabel"]) | undefined;
8485
+ /** The name of the bar's toolbar, read by screen readers. */
8486
+ "controls-label"?: (HelixHeadlessFind["controlsLabel"]) | undefined;
8487
+ /** The name of the bar's toolbar, read by screen readers. */
8488
+ controlsLabel?: (HelixHeadlessFind["controlsLabel"]) | undefined;
8489
+ /** The id of the element whose text Find searches, in the same tree as Find.
8490
+ With a finder attached, it names only where the find key opens the bar. */
8491
+ for?: (HelixHeadlessFind["for"]) | undefined;
8492
+ /** What the count says when the regular expression cannot be read. */
8493
+ "invalid-label"?: (HelixHeadlessFind["invalidLabel"]) | undefined;
8494
+ /** What the count says when the regular expression cannot be read. */
8495
+ invalidLabel?: (HelixHeadlessFind["invalidLabel"]) | undefined;
8496
+ /** The field's name and placeholder, and the name of the bar. */
8497
+ label?: (HelixHeadlessFind["label"]) | undefined;
8498
+ /** Whether case has to match, so "Error" does not find "error". The reader turns it on and off from the bar. */
8499
+ "match-case"?: (HelixHeadlessFind["matchCase"]) | undefined;
8500
+ /** Whether case has to match, so "Error" does not find "error". The reader turns it on and off from the bar. */
8501
+ matchCase?: (HelixHeadlessFind["matchCase"]) | undefined;
8502
+ /** The match case button's label. */
8503
+ "match-case-label"?: (HelixHeadlessFind["matchCaseLabel"]) | undefined;
8504
+ /** The match case button's label. */
8505
+ matchCaseLabel?: (HelixHeadlessFind["matchCaseLabel"]) | undefined;
8506
+ /** What the count says of the matches. `{index}` is the current match,
8507
+ counting from 1, and `{count}` how many there are. */
8508
+ "matches-label"?: (HelixHeadlessFind["matchesLabel"]) | undefined;
8509
+ /** What the count says of the matches. `{index}` is the current match,
8510
+ counting from 1, and `{count}` how many there are. */
8511
+ matchesLabel?: (HelixHeadlessFind["matchesLabel"]) | undefined;
8512
+ /** The next match button's label. */
8513
+ "next-label"?: (HelixHeadlessFind["nextLabel"]) | undefined;
8514
+ /** The next match button's label. */
8515
+ nextLabel?: (HelixHeadlessFind["nextLabel"]) | undefined;
8516
+ /** Which options the bar draws, as a list of `match-case`, `whole-word`, and
8517
+ `regex`, or `none`. They are always drawn in that order. */
8518
+ options?: (HelixHeadlessFind["options"]) | undefined;
8519
+ /** The previous match button's label. */
8520
+ "previous-label"?: (HelixHeadlessFind["previousLabel"]) | undefined;
8521
+ /** The previous match button's label. */
8522
+ previousLabel?: (HelixHeadlessFind["previousLabel"]) | undefined;
8523
+ /** What the field holds: what the reader typed, or what you set. */
8524
+ query?: (HelixHeadlessFind["query"]) | undefined;
8525
+ /** Hides replacing, for content the reader cannot change. The attribute is `readonly`, the platform's spelling. */
8526
+ readonly?: (HelixHeadlessFind["readOnly"]) | undefined;
8527
+ /** Hides replacing, for content the reader cannot change. The attribute is `readonly`, the platform's spelling. */
8528
+ readOnly?: (HelixHeadlessFind["readOnly"]) | undefined;
8529
+ /** Whether the field reads as a regular expression, in JavaScript's syntax. The reader turns it on and off from the bar. */
8530
+ regex?: (HelixHeadlessFind["regex"]) | undefined;
8531
+ /** The regular expression button's label. */
8532
+ "regex-label"?: (HelixHeadlessFind["regexLabel"]) | undefined;
8533
+ /** The regular expression button's label. */
8534
+ regexLabel?: (HelixHeadlessFind["regexLabel"]) | undefined;
8535
+ /** The Replace all button's words. */
8536
+ "replace-all-label"?: (HelixHeadlessFind["replaceAllLabel"]) | undefined;
8537
+ /** The Replace all button's words. */
8538
+ replaceAllLabel?: (HelixHeadlessFind["replaceAllLabel"]) | undefined;
8539
+ /** The replace field's name and placeholder. */
8540
+ "replace-field-label"?: (HelixHeadlessFind["replaceFieldLabel"]) | undefined;
8541
+ /** The replace field's name and placeholder. */
8542
+ replaceFieldLabel?: (HelixHeadlessFind["replaceFieldLabel"]) | undefined;
8543
+ /** The Replace button's words. */
8544
+ "replace-label"?: (HelixHeadlessFind["replaceLabel"]) | undefined;
8545
+ /** The Replace button's words. */
8546
+ replaceLabel?: (HelixHeadlessFind["replaceLabel"]) | undefined;
8547
+ /** What the replace field holds, which Replace puts in place of a match. */
8548
+ replacement?: (HelixHeadlessFind["replacement"]) | undefined;
8549
+ /** The label of the button that shows the replace row. */
8550
+ "replace-toggle-label"?: (HelixHeadlessFind["replaceToggleLabel"]) | undefined;
8551
+ /** The label of the button that shows the replace row. */
8552
+ replaceToggleLabel?: (HelixHeadlessFind["replaceToggleLabel"]) | undefined;
8553
+ /** The key that opens the bar, as a chord such as `mod+f`, where `mod` is
8554
+ Command on an Apple keyboard and Control elsewhere. Empty turns the key
8555
+ off, as for a bar the page opens itself. */
8556
+ shortcut?: (HelixHeadlessFind["shortcut"]) | undefined;
8557
+ /** Elements inside the content whose text is not searched, as a selector,
8558
+ such as line numbers or the buttons beside each message. */
8559
+ skip?: (HelixHeadlessFind["skip"]) | undefined;
8560
+ /** Whether only whole words match. The reader turns it on and off from the bar. */
8561
+ "whole-word"?: (HelixHeadlessFind["wholeWord"]) | undefined;
8562
+ /** Whether only whole words match. The reader turns it on and off from the bar. */
8563
+ wholeWord?: (HelixHeadlessFind["wholeWord"]) | undefined;
8564
+ /** The whole word button's label. */
8565
+ "whole-word-label"?: (HelixHeadlessFind["wholeWordLabel"]) | undefined;
8566
+ /** The whole word button's label. */
8567
+ wholeWordLabel?: (HelixHeadlessFind["wholeWordLabel"]) | undefined;
8568
+ /** Whether the element starts open. Ignored once `open` is written. */
8569
+ "default-open"?: (HelixHeadlessFind["defaultOpen"]) | undefined;
8570
+ /** Whether the element starts open. Ignored once `open` is written. */
8571
+ defaultOpen?: (HelixHeadlessFind["defaultOpen"]) | undefined;
8572
+ /** Whether the element is open.
8573
+
8574
+ One property, not two, so `dialog.open` answers the question anyone
8575
+ asking it meant. Writing always applies; `<helix-dialog open>` is the
8576
+ same statement in markup.
8577
+
8578
+ **Not reflected, and that is required rather than tidy.** Reflection
8579
+ writes the resolved state back as an attribute, so an element that opened
8580
+ itself would put `open` on its own host: cloned, serialized for
8581
+ hydration, or diffed by a framework, it comes back holding whatever the
8582
+ last reader did rather than what the author wrote. `:state(open)` carries
8583
+ the resolved state for stylesheets, which is what the mirror is for. */
8584
+ open?: (HelixHeadlessFind["open"]) | undefined;
8585
+ };
8586
+
8587
+ export type HelixHeadlessFindVueEvents = {
8588
+ /** Fired before the bar closes, and cancelable. */
8589
+ "helix-before-close": HelixHeadlessFindHelixBeforeCloseElementEvent;
8590
+ /** Fired before the bar opens, and cancelable. Canceling it keeps the bar closed. */
8591
+ "helix-before-open": HelixHeadlessFindHelixBeforeOpenElementEvent;
8592
+ /** Sent after each search and each move among the matches, with `count` and the current match's `index`, counting from 0, or -1 for none. */
8593
+ "helix-found": HelixHeadlessFindHelixFoundElementEvent;
8594
+ /** Sent when the bar opens or closes, with `newState` and `oldState`. */
8595
+ toggle: HelixHeadlessFindToggleElementEvent;
8596
+ };
8597
+
8314
8598
  export type HelixHeadlessFormatDateVueProps = {
8315
8599
  /** The calendar a date is written in: `gregory`, `buddhist`, `japanese`,
8316
8600
  `roc`, or `iso8601`, or a calendar with months of its own, such as
@@ -9167,6 +9451,36 @@ is the platform's `commandfor`. */
9167
9451
  commandfor?: (HelixHeadlessIconButton["commandFor"]) | undefined;
9168
9452
  /** The id of the element the command is sent to. */
9169
9453
  commandFor?: (HelixHeadlessIconButton["commandFor"]) | undefined;
9454
+ /** Whether a disabled button stays in the tab order, so a tooltip around it
9455
+ can say why it is disabled.
9456
+
9457
+ Set it on a button whose reason a Tooltip gives, such as a Save with no
9458
+ changes to save. While the button is disabled, it keeps focus and takes
9459
+ hover, and it refuses every press: a click, Enter and Space, and Enter in
9460
+ a field of its form. The click does not reach your listeners, and a submit
9461
+ button submits nothing. The inner control carries `aria-disabled` in place
9462
+ of the native `disabled`, so a screen reader still says it is unavailable.
9463
+ The styled button keeps the disabled look.
9464
+
9465
+ Leave it unset on a button with no reason to give. A plain disabled button
9466
+ leaves the tab order, as a native one does, and a keyboard reader skips a
9467
+ stop that does nothing. Set `pending` for the wait after a press. */
9468
+ "focusable-when-disabled"?: (HelixHeadlessIconButton["focusableWhenDisabled"]) | undefined;
9469
+ /** Whether a disabled button stays in the tab order, so a tooltip around it
9470
+ can say why it is disabled.
9471
+
9472
+ Set it on a button whose reason a Tooltip gives, such as a Save with no
9473
+ changes to save. While the button is disabled, it keeps focus and takes
9474
+ hover, and it refuses every press: a click, Enter and Space, and Enter in
9475
+ a field of its form. The click does not reach your listeners, and a submit
9476
+ button submits nothing. The inner control carries `aria-disabled` in place
9477
+ of the native `disabled`, so a screen reader still says it is unavailable.
9478
+ The styled button keeps the disabled look.
9479
+
9480
+ Leave it unset on a button with no reason to give. A plain disabled button
9481
+ leaves the tab order, as a native one does, and a keyboard reader skips a
9482
+ stop that does nothing. Set `pending` for the wait after a press. */
9483
+ focusableWhenDisabled?: (HelixHeadlessIconButton["focusableWhenDisabled"]) | undefined;
9170
9484
  /** Where this button's submission goes, overriding the form's own.
9171
9485
 
9172
9486
  **The five `form*` overrides ride on a native submit button that stands in
@@ -9522,6 +9836,10 @@ token.
9522
9836
  Empty leaves the attribute off, which is the browser's default. Set it to
9523
9837
  a token like `email` or `bday` to ask for autofill, or to `off` to refuse. */
9524
9838
  autocomplete?: (HelixHeadlessInput["autocomplete"]) | undefined;
9839
+ /** Whether the browser corrects words as the reader types, as the platform's
9840
+ `autocorrect`. Turn it off, with `autocorrect="off"`, for text that is not
9841
+ prose, such as an address or a code, which corrections would change. */
9842
+ autocorrect?: (HelixHeadlessInput["autocorrect"]) | undefined;
9525
9843
  /** Whether the field shows a button that empties it.
9526
9844
 
9527
9845
  Shown only while there is something to clear, because a control that does
@@ -11116,9 +11434,13 @@ stream ends. */
11116
11434
  "dropped-label"?: (HelixHeadlessLog["droppedLabel"]) | undefined;
11117
11435
  /** What the line above the log says once `limit` has let lines go. `{count}` is how many. */
11118
11436
  droppedLabel?: (HelixHeadlessLog["droppedLabel"]) | undefined;
11119
- /** The text shown and announced when the log has no lines. */
11437
+ /** The text shown and announced when the log has no lines and no steps. A
11438
+ step with nothing in it yet, such as one still `pending`, is its heading
11439
+ alone, so a log holding one says nothing. */
11120
11440
  "empty-text"?: (HelixHeadlessLog["emptyText"]) | undefined;
11121
- /** The text shown and announced when the log has no lines. */
11441
+ /** The text shown and announced when the log has no lines and no steps. A
11442
+ step with nothing in it yet, such as one still `pending`, is its heading
11443
+ alone, so a log holding one says nothing. */
11122
11444
  emptyText?: (HelixHeadlessLog["emptyText"]) | undefined;
11123
11445
  /** What a screen reader hears when lines at `error` arrive. `{count}` is how
11124
11446
  many arrived together and `{text}` is the first of them. */
@@ -12641,6 +12963,24 @@ export type HelixHeadlessMeterVueEvents = {
12641
12963
  "helix-band": HelixHeadlessMeterHelixBandElementEvent;
12642
12964
  };
12643
12965
 
12966
+ export type HelixHeadlessMeterSegmentVueProps = {
12967
+ /** What the segment is, such as "Tools", which names the slice when a pointer
12968
+ rests on it.
12969
+
12970
+ Not announced: see the note on a meter's children above. */
12971
+ label?: (HelixHeadlessMeterSegment["label"]) | undefined;
12972
+ /** What the segment means, as it does on a callout. Takes the tone's color in
12973
+ place of the next color in the series. */
12974
+ tone?: (HelixHeadlessMeterSegment["tone"]) | undefined;
12975
+ /** How much of the meter's range the segment takes, in the units of the meter's
12976
+ `min` and `max`.
12977
+
12978
+ A value that is not a number, or is below zero, draws nothing. */
12979
+ value?: (HelixHeadlessMeterSegment["value"]) | undefined;
12980
+ };
12981
+
12982
+ export type HelixHeadlessMeterSegmentVueEvents = {};
12983
+
12644
12984
  /** `HelixHeadlessMotionToggle` component event */
12645
12985
  export type HelixHeadlessMotionToggleElementEvent<E = Event> = TypedEvent<
12646
12986
  HelixHeadlessMotionToggle,
@@ -15819,13 +16159,42 @@ export type HelixHeadlessSpatialBarChartHelixReadingPressElementEvent =
15819
16159
  HelixHeadlessSpatialBarChartElementEvent<HelixReadingPressEvent>;
15820
16160
 
15821
16161
  export type HelixHeadlessSpatialBarChartVueProps = {
15822
- /** Draws no box: no edges, grid, numbers, or names, so the readings stand
15823
- alone and fill the plot, as a picture on a product's own page does. The
16162
+ /** Grows the bars up from the floor the first time the chart comes into
16163
+ view with readings, each category a little after the one before it, so
16164
+ the drawing arrives the way a page's own picture does. The growth is
16165
+ fast at first, slows to rest, and never passes a bar's value.
16166
+
16167
+ Under `prefers-reduced-motion`, or where the page has paused its motion
16168
+ through `pauseMotion` or `Motion Toggle`, the bars stand at their height
16169
+ from the start. A later table draws the bars it already had at their
16170
+ height, and grows the bars it adds, each from the floor, so a reading that
16171
+ arrives while the chart is in view arrives the same way. */
16172
+ grow?: (HelixHeadlessSpatialBarChart["grow"]) | undefined;
16173
+ /** Grows the bars again each time the chart comes back into view after it
16174
+ left it, as a pane does when it is opened again, where `grow` alone grows
16175
+ them the first time only. Only a chart that grows takes it.
16176
+
16177
+ While it is out of view the bars stand at the floor, so the first frame
16178
+ after it returns is the start of the growth and never a flash at full
16179
+ height. */
16180
+ "grow-again"?: (HelixHeadlessSpatialBarChart["growAgain"]) | undefined;
16181
+ /** Grows the bars again each time the chart comes back into view after it
16182
+ left it, as a pane does when it is opened again, where `grow` alone grows
16183
+ them the first time only. Only a chart that grows takes it.
16184
+
16185
+ While it is out of view the bars stand at the floor, so the first frame
16186
+ after it returns is the start of the growth and never a flash at full
16187
+ height. */
16188
+ growAgain?: (HelixHeadlessSpatialBarChart["growAgain"]) | undefined;
16189
+ /** Draws no box: no edges, grid, numbers, or names, and in a `row` no
16190
+ floor, so the readings stand alone and fill the plot, as a picture on a
16191
+ product's own page does. The
15824
16192
  table, the summary, the tooltip, and the keys still carry every value,
15825
16193
  and a renderer draws no box either. */
15826
16194
  "no-box"?: (HelixHeadlessSpatialBarChart["noBox"]) | undefined;
15827
- /** Draws no box: no edges, grid, numbers, or names, so the readings stand
15828
- alone and fill the plot, as a picture on a product's own page does. The
16195
+ /** Draws no box: no edges, grid, numbers, or names, and in a `row` no
16196
+ floor, so the readings stand alone and fill the plot, as a picture on a
16197
+ product's own page does. The
15829
16198
  table, the summary, the tooltip, and the keys still carry every value,
15830
16199
  and a renderer draws no box either. */
15831
16200
  noBox?: (HelixHeadlessSpatialBarChart["noBox"]) | undefined;
@@ -15839,6 +16208,15 @@ and a renderer draws no box either. */
15839
16208
  "plot-label"?: (HelixHeadlessSpatialBarChart["plotLabel"]) | undefined;
15840
16209
  /** The plot's name where the chart has none: no `aria-label`, `label`, or table caption. */
15841
16210
  plotLabel?: (HelixHeadlessSpatialBarChart["plotLabel"]) | undefined;
16211
+ /** Stacks a category's series into one column, each block standing on the
16212
+ ones before it, so the column is as tall as the category's total, as a
16213
+ flat `Bar Chart` stacks them.
16214
+
16215
+ Absent stands the series one behind another in depth. Stacked, every
16216
+ series stands in the front row, so none hides another, and the parts of
16217
+ one total read together. A negative reading hangs below zero on the
16218
+ negatives before it. The scale fits the stacks. */
16219
+ stacked?: (HelixHeadlessSpatialBarChart["stacked"]) | undefined;
15842
16220
  /** The `summary` part's sentence. `{count}`, `{series}`, and `{categories}`
15843
16221
  are the number of bars, series, and categories, written in the locale,
15844
16222
  and `{low}` and `{high}` the lowest and the highest value. */
@@ -15847,6 +16225,38 @@ and `{low}` and `{high}` the lowest and the highest value. */
15847
16225
  are the number of bars, series, and categories, written in the locale,
15848
16226
  and `{low}` and `{high}` the lowest and the highest value. */
15849
16227
  summaryLabel?: (HelixHeadlessSpatialBarChart["summaryLabel"]) | undefined;
16228
+ /** How the bars stand.
16229
+
16230
+ Unset, they stand on a grid of categories across and series in depth,
16231
+ in a box the camera looks at from a corner, so the grid recedes at an
16232
+ angle. `row` lays the categories in a straight line across the page and
16233
+ turns each bar to the camera, showing its top and two sides, for one row
16234
+ of readings in a small space such as a pane: turning the view turns each
16235
+ bar where it stands, and the row stays level. It is the chart's own
16236
+ drawing that lays the row: a renderer connected through
16237
+ `@fusion.dev/helix-plot` stands the bars on the grid.
16238
+
16239
+ `diagonal` is the same row climbing to the right as it recedes, each
16240
+ place a step further back than the one before, as a row of days on a
16241
+ product's page is drawn: the row rises one part in five across the page
16242
+ from any turn, and its floor and names climb with it. A row whose bars
16243
+ have a size climbs at most a quarter of the plot's height, so the bars
16244
+ of a long row keep theirs.
16245
+
16246
+ **A row draws its floor in place of a box**: each place as an outline a
16247
+ little wider than its bar, and each category's name under it, as many
16248
+ names as fit without touching. A name whose bar names a tone is written
16249
+ first, in that tone. `no-box` leaves the floor and the names out.
16250
+
16251
+ **A `column-gap` on the `fallback` part gives a row's bars one width**,
16252
+ which the styled tier sets from `--spatial-bar-chart-bar-size`: one bar
16253
+ stands as wide as each of twenty, the row is as long as its bars and
16254
+ centered, the tallest bar stands as high as the plot has room for and
16255
+ no taller than the row is long and a quarter again, so one bar stands
16256
+ as a block, and `fits` says how many bars the plot holds, so a page
16257
+ can give it the latest of a longer table. It is read when the plot's
16258
+ size changes. */
16259
+ variant?: (HelixHeadlessSpatialBarChart["variant"]) | undefined;
15850
16260
  /** The words shown in place of the drawing when the table has no readings,
15851
16261
  and the fallback of the `empty` slot. */
15852
16262
  "empty-text"?: (HelixHeadlessSpatialBarChart["emptyText"]) | undefined;
@@ -18530,6 +18940,9 @@ export type HelixHeadlessTerminalElementEvent<E = Event> = TypedEvent<
18530
18940
  /** `helix-copy` event type */
18531
18941
  export type HelixHeadlessTerminalHelixCopyElementEvent =
18532
18942
  HelixHeadlessTerminalElementEvent<HelixCopyEvent>;
18943
+ /** `helix-found` event type */
18944
+ export type HelixHeadlessTerminalHelixFoundElementEvent =
18945
+ HelixHeadlessTerminalElementEvent<HelixFoundEvent>;
18533
18946
  /** `helix-terminal-bell` event type */
18534
18947
  export type HelixHeadlessTerminalHelixTerminalBellElementEvent =
18535
18948
  HelixHeadlessTerminalElementEvent<HelixTerminalBellEvent>;
@@ -18698,6 +19111,8 @@ write. Connect it to a setting your reader can turn on. */
18698
19111
  export type HelixHeadlessTerminalVueEvents = {
18699
19112
  /** The copy control or its key put the selection on the clipboard. */
18700
19113
  "helix-copy": HelixHeadlessTerminalHelixCopyElementEvent;
19114
+ /** The find bar searched or moved among the matches, with `count` and the current match's `index`, counting from 0, or -1 for none. */
19115
+ "helix-found": HelixHeadlessTerminalHelixFoundElementEvent;
18701
19116
  /** The program rang the bell. The frame flashes once. */
18702
19117
  "helix-terminal-bell": HelixHeadlessTerminalHelixTerminalBellElementEvent;
18703
19118
  /** The reader typed or pasted, with `data` encoded for the program. Write it to the process. Not sent while `readonly`, or once `exit-code` is set. */
@@ -22033,8 +22448,12 @@ export type CustomCssProperties = {
22033
22448
  "--meter-at"?: (string) | undefined;
22034
22449
  /** The value as a fraction of the range, 0 to 1. */
22035
22450
  "--meter-fraction"?: (string) | undefined;
22451
+ /** How much the range holds, `max` less `min`, which a segment divides its own value by to find its width. */
22452
+ "--meter-span"?: (string) | undefined;
22036
22453
  /** How much of the circle the arc covers, as a path length. */
22037
22454
  "--meter-sweep"?: (string) | undefined;
22455
+ /** How much of the range the segment takes, in the meter's own units. */
22456
+ "--meter-segment-value"?: (string) | undefined;
22038
22457
  /** How deep a row is, from 0 at the root, for indenting it. */
22039
22458
  "--object-inspector-level"?: (string) | undefined;
22040
22459
  /** The value as a fraction of the range, 0 to 1. Pinned to 1 while indeterminate. */
@@ -22055,6 +22474,10 @@ export type CustomCssProperties = {
22055
22474
  "--chart-point-y"?: (string) | undefined;
22056
22475
  /** A tick's position along its axis, as a percentage. The component writes it. */
22057
22476
  "--chart-tick"?: (string) | undefined;
22477
+ /** The room the browser's horizontal scrollbar takes at the block end of the viewport, in pixels. Written on the `viewport` part while that scrollbar takes room, and absent while it draws over the content. */
22478
+ "--scroll-area-gutter-block-end"?: (string) | undefined;
22479
+ /** The room the browser's vertical scrollbar takes at the inline end of the viewport, in pixels. Written on the `viewport` part while that scrollbar takes room, and absent while it draws over the content. */
22480
+ "--scroll-area-gutter-inline-end"?: (string) | undefined;
22058
22481
  /** How far along its axis the content is scrolled, from 0 at the start to 1 at the end. Written on each `scrollbar` part, so its thumb inherits it. Counted from the right on a right-to-left page. */
22059
22482
  "--scroll-area-scroll-fraction"?: (string) | undefined;
22060
22483
  /** The share of the track the thumb covers, from 0 to 1, which is how much of the content is in view. Written on each `scrollbar` part. */
@@ -22069,8 +22492,22 @@ export type CustomCssProperties = {
22069
22492
  "--slider-marker-at"?: (string) | undefined;
22070
22493
  /** Where the filled span ends, as a fraction of the track, 0 to 1: a range's upper thumb, or the farther of a single thumb and its `origin`. */
22071
22494
  "--slider-to"?: (string) | undefined;
22072
- /** How far a bar's face turns from the light, from 0 for its top. The component writes it on each face, and the stylesheet that shades the face reads it. */
22073
- "--spatial-bar-chart-shade"?: (string) | undefined;
22495
+ /** */
22496
+ "--spatial-bar-chart-shade -How far a bar's face turns from the light, from 0 for its top. The component writes it on each face, and the stylesheet that shades the face reads it."?: (string) | undefined;
22497
+ /** The color of a bar whose cell says `data-tone="accent"`. */
22498
+ "--spatial-bar-chart-tone-accent"?: (string) | undefined;
22499
+ /** The color of a bar whose cell says `data-tone="danger"`. */
22500
+ "--spatial-bar-chart-tone-danger"?: (string) | undefined;
22501
+ /** The color of a bar whose cell says `data-tone="info"`. */
22502
+ "--spatial-bar-chart-tone-info"?: (string) | undefined;
22503
+ /** The color of a bar whose cell says `data-tone="muted"`. */
22504
+ "--spatial-bar-chart-tone-muted"?: (string) | undefined;
22505
+ /** The color of a bar whose cell says `data-tone="primary"`. A tone with no property of its own falls back to the bar's series color, and the same holds for a name you define. */
22506
+ "--spatial-bar-chart-tone-primary"?: (string) | undefined;
22507
+ /** The color of a bar whose cell says `data-tone="success"`. */
22508
+ "--spatial-bar-chart-tone-success"?: (string) | undefined;
22509
+ /** The color of a bar whose cell says `data-tone="warning"`. */
22510
+ "--spatial-bar-chart-tone-warning"?: (string) | undefined;
22074
22511
  /** Where the `start` or the `end` label stands clear of the drawing, from the footer's inline start, in pixels. The component measures it and writes it on the label, with `data-placed`, as the view turns. */
22075
22512
  "--spatial-heatmap-label-x"?: (string) | undefined;
22076
22513
  /** Where the `start` or the `end` label stands clear of the drawing, from the footer's top, in pixels. The component measures it and writes it on the label, with `data-placed`, as the view turns. */
@@ -22251,7 +22688,7 @@ export interface WcToolkitVueGlobalComponents {
22251
22688
  HelixHeadlessButtonGroupVueProps,
22252
22689
  HelixHeadlessButtonGroupVueEvents
22253
22690
  >;
22254
- /** Renders a real '<button>', so activation, focus, and other browser behavior come from the platform. **It never renders an anchor.** A router renders its own '<a>' to intercept a click, and it cannot render one inside the button's shadow root. For a link that looks like a button, use the base layer recipe on your own anchor: '<Link data-button="solid">' draws the same control. 'delegatesFocus' moves focus to the inner control. It is serialized into the server markup, so the button is reachable by keyboard before any JavaScript loads. The inner control is always 'type="button"', because a '<button type="submit">' inside a shadow root cannot submit a form outside it. To submit, the button puts a hidden native submit button carrying its 'name', 'value' and 'form*' overrides into the form, calls 'requestSubmit()' with it, which runs validation, unlike 'submit()', and takes it out again, as Shoelace and Web Awesome do. A 'submit' listener reads that button as 'event.submitter', so 'event.submitter.value' and 'new FormData(form, event.submitter)' tell two submit buttons apart. As the first submit button in its form, it is the form's default button: Enter in a text field of the form presses it, as it presses a native one. A press acts once its 'click' has reached your listeners, as a native button's does, so 'preventDefault()' in a 'click' listener cancels it: the form is not submitted or reset, and no command is sent. Set 'pending' while the action a press started is still running. The button keeps focus and refuses presses, and a reader on it hears 'pending-label'. Every press that acts sends 'helix-press' with what pressed it in 'detail.pointerType': 'mouse', 'pen', 'touch', 'keyboard', or 'virtual' for a screen reader's press or a script's 'click()', as React Aria's 'onPress' does. It is sent once the press has done its own work, after 'click' has reached your listeners, and never for a disabled or pending button or a canceled press. **Keyboard.** Enter and Space press the button, as on a native one. */
22691
+ /** Renders a real '<button>', so activation, focus, and other browser behavior come from the platform. **It never renders an anchor.** A router renders its own '<a>' to intercept a click, and it cannot render one inside the button's shadow root. For a link that looks like a button, use the base layer recipe on your own anchor: '<Link data-button="solid">' draws the same control. 'delegatesFocus' moves focus to the inner control. It is serialized into the server markup, so the button is reachable by keyboard before any JavaScript loads. The inner control is always 'type="button"', because a '<button type="submit">' inside a shadow root cannot submit a form outside it. To submit, the button puts a hidden native submit button carrying its 'name', 'value' and 'form*' overrides into the form, calls 'requestSubmit()' with it, which runs validation, unlike 'submit()', and takes it out again, as Shoelace and Web Awesome do. A 'submit' listener reads that button as 'event.submitter', so 'event.submitter.value' and 'new FormData(form, event.submitter)' tell two submit buttons apart. As the first submit button in its form, it is the form's default button: Enter in a text field of the form presses it, as it presses a native one. A press acts once its 'click' has reached your listeners, as a native button's does, so 'preventDefault()' in a 'click' listener cancels it: the form is not submitted or reset, and no command is sent. Set 'pending' while the action a press started is still running. The button keeps focus and refuses presses, and a reader on it hears 'pending-label'. Set 'focusable-when-disabled' on a disabled button whose reason a Tooltip gives. It stays in the tab order and takes hover, so the tooltip opens, and it refuses every press. Every press that acts sends 'helix-press' with what pressed it in 'detail.pointerType': 'mouse', 'pen', 'touch', 'keyboard', or 'virtual' for a screen reader's press or a script's 'click()', as React Aria's 'onPress' does. It is sent once the press has done its own work, after 'click' has reached your listeners, and never for a disabled or pending button or a canceled press. **Keyboard.** Enter and Space press the button, as on a native one. */
22255
22692
  "helix-headless-button": DefineCustomElement<
22256
22693
  HelixHeadlessButton,
22257
22694
  HelixHeadlessButtonVueProps,
@@ -22293,13 +22730,13 @@ export interface WcToolkitVueGlobalComponents {
22293
22730
  HelixHeadlessCarouselVueProps,
22294
22731
  HelixHeadlessCarouselVueEvents
22295
22732
  >;
22296
- /** The composer is a separate element so you can replace it. If you need attachments, slash commands, or a model picker, replace the composer and keep the transcript. By default, Enter sends and Shift+Enter starts a new line, the convention in messaging apps. Document editors mostly use the opposite, so 'submit-on' takes 'enter' or 'button'. Use 'button' for a long-form composer. The composer clears only when no listener cancels the send, so the text is kept when you cancel a send that failed. **Set 'voice' for dictation.** A microphone button before send listens through the page's speech engine, the browser's own unless 'registerSpeechEngine' gave the page another, and types what it hears at the caret as the reader speaks, each guess replaced by the next. Press it again, press Escape, or send, and it stops. Where the browser has no engine, as in Firefox, no button is drawn. **In a form, the draft is the composer's value**, submitted under 'name', and an empty draft submits an empty entry, as a native textarea does. A form reset puts back the 'value' the markup declared, and a '<fieldset disabled>' turns the composer off. Sending is still 'helix-send', and it does not submit the form. **'required', 'minlength' and 'maxlength' are checked by the browser**, as on a '<textarea>', and the message is the browser's. 'maxlength' stops the field taking more. A draft that fails them does not send, and the composer takes ':state(invalid)' and 'aria-invalid' once the reader has tried to send it, the form was submitted, or the reader edited the field and left it. Sending an empty required composer counts as trying. Tabbing past an empty composer marks nothing. **'feedback' is a message of your own about the draft**, such as one your server sent back. While it is set, the composer is invalid at once, does not send or submit, shows the message under the field, and a screen reader hears it as it appears. Clear it to let the draft go. **'typing' says whether the user is writing**, and 'helix-typing' is sent each time it changes: when they start, and when they send or stop for 'typing-timeout' milliseconds. Pass it on to show "is typing" to the other side. */
22733
+ /** The composer is a separate element so you can replace it. If you need slash commands or a layout of your own, replace the composer and keep the transcript. By default, Enter sends and Shift+Enter starts a new line, the convention in messaging apps. Document editors mostly use the opposite, so 'submit-on' takes 'enter' or 'button'. Use 'button' for a long-form composer. The composer clears only when no listener cancels the send, so the text is kept when you cancel a send that failed. **Set 'voice' for dictation.** A microphone button before send listens through the page's speech engine, the browser's own unless 'registerSpeechEngine' gave the page another, and types what it hears at the caret as the reader speaks, each guess replaced by the next. Press it again, press Escape, or send, and it stops. Where the browser has no engine, as in Firefox, no button is drawn. **In a form, the draft is the composer's value**, submitted under 'name', and an empty draft submits an empty entry, as a native textarea does. A form reset puts back the 'value' the markup declared, and a '<fieldset disabled>' turns the composer off. Sending is still 'helix-send', and it does not submit the form. **'required', 'minlength' and 'maxlength' are checked by the browser**, as on a '<textarea>', and the message is the browser's. 'maxlength' stops the field taking more. A draft that fails them does not send, and the composer takes ':state(invalid)' and 'aria-invalid' once the reader has tried to send it, the form was submitted, or the reader edited the field and left it. Sending an empty required composer counts as trying. Tabbing past an empty composer marks nothing. **'feedback' is a message of your own about the draft**, such as one your server sent back. While it is set, the composer is invalid at once, does not send or submit, shows the message under the field, and a screen reader hears it as it appears. Clear it to let the draft go. **'typing' says whether the user is writing**, and 'helix-typing' is sent each time it changes: when they start, and when they send or stop for 'typing-timeout' milliseconds. Pass it on to show "is typing" to the other side. **'busy' says a reply is on its way**, and turns the send button into a stop button, named by 'stop-label', that sends 'helix-stop'. The field stays open so the reader can write the next turn, and Enter does not send it until 'busy' is cleared. With 'queue', Enter sends while 'busy' too, for a page that holds a turn until the reply ends or hands it to the reply under way; the button stays the stop button. **The 'idle' slot takes the send button's place while there is nothing to send**: the field is empty, 'attached' is not set, and no reply is on its way. Put the action an empty draft offers there, such as a button that starts a voice conversation. The send button comes back as soon as there is a draft. Where focus was on the one that goes, it moves to the one that comes, so a keyboard reader stays in the same place. **What the draft carries goes in 'attachments'**, inside the box and above the field, such as thumbnails of attached images and cards for attached files. The region takes no room while nothing is in it. A press on its empty space keeps the reader in the field, and a press on a control in it, such as a button that removes an attachment, goes to that control. Set 'attached' as well, so the send button shows for a draft with no text. */
22297
22734
  "helix-headless-chat-composer": DefineCustomElement<
22298
22735
  HelixHeadlessChatComposer,
22299
22736
  HelixHeadlessChatComposerVueProps,
22300
22737
  HelixHeadlessChatComposerVueEvents
22301
22738
  >;
22302
- /** A chat message carries its state: sending, arrived, streaming, or failed. A failed message has a retry control in the message, which fires 'helix-send'. 'streaming' is the state the others are arranged around. A streaming message changes height on every frame, so it is marked 'aria-busy' while it arrives and announced once when it settles. A screen reader cannot follow a stream read out character by character. A screen reader names the turn by its author and its time, such as "You, 2 minutes ago". The author is 'author-label', or "You" for 'me', or the 'author' itself where it is a name; give a turn by 'them' an 'author-label' to name it. The chat it sits in holds the sentence and the word for 'me', so a page in another language sets them once there. The time moves on by itself, so "now" becomes "1 minute ago" while the page is open. **An agent's work goes in 'work', and its answer in the content.** The work, its thinking, the commands it ran and what they printed, is a record read the way a log is, so a 'Log' with 'separation="plain"' and 'quiet' sits there above the answer. The chat says the turn once it settles, from the content alone, so the work is never read aloud as part of the answer. */
22739
+ /** A chat message carries its state: sending, arrived, streaming, or failed. A failed message has a retry control in the message, which fires 'helix-send'. 'streaming' is the state the others are arranged around. A streaming message changes height on every frame, so it is marked 'aria-busy' while it arrives and announced once when it settles. A screen reader cannot follow a stream read out character by character. A screen reader names the turn by its author and its time, such as "You, 2 minutes ago". The author is 'author-label', or "You" for 'me', or the 'author' itself where it is a name; give a turn by 'them' an 'author-label' to name it. The chat it sits in holds the sentence and the word for 'me', so a page in another language sets them once there. The time moves on by itself, so "now" becomes "1 minute ago" while the page is open. **What a turn carries goes in 'attachments'**, above the bubble rather in it: a picture inside a tinted bubble is framed twice, and one sent with no words is an empty bubble around it. It sits against the same edge as the turn, and the words keep their bubble under it. **An agent's work goes in 'work', and its answer in the content.** The work, its thinking, the commands it ran and what they printed, is a record read the way a log is, so a 'Log' with 'separation="plain"' and 'quiet' sits there above the answer. The chat says the turn once it settles, from the content alone, so the work is never read aloud as part of the answer. */
22303
22740
  "helix-headless-chat-message": DefineCustomElement<
22304
22741
  HelixHeadlessChatMessage,
22305
22742
  HelixHeadlessChatMessageVueProps,
@@ -22491,6 +22928,12 @@ export interface WcToolkitVueGlobalComponents {
22491
22928
  HelixHeadlessFilterInputVueProps,
22492
22929
  HelixHeadlessFilterInputVueEvents
22493
22930
  >;
22931
+ /** Searches the content 'for' names, by id, and marks every match, with the current one marked apart. The count says which match is current and how many there are. Find opens with Command+F, or Control+F on Windows and Linux, while the reader is in that content or in the bar. Everywhere else on the page, the key opens the browser's own find. 'shortcut' changes the key, and empty turns it off. The match case, whole word, and regular expression options are drawn in the bar. 'options' names the ones it draws. Text that is not shown is not searched, nor text under 'inert' or 'aria-hidden="true"', nor what 'skip' matches. Text under 'hidden="until-found"' and in a closed '<details>' is searched, and opened when its match becomes current, as the browser's find opens it: an Accordion section opens. A match is scrolled into the middle of what scrolls it unless it is already in sight. While Find is open, a change to the content searches again once the content is still. Content drawn some other way, such as a terminal's grid, an editor's document, or rows of a list that are not all in the page, is searched by a finder the page attaches with 'attach(finder)'. Terminal and Code Editor draw a Find of their own, which searches through their renderer. Find offers replacing to a finder that can replace, unless 'readonly' is set. The bar is a search landmark named by 'label'. The count is said in a live region as it changes. **Keyboard.** In the field, Enter moves to the next match and Shift+Enter to the previous one. Escape closes the bar from anywhere in it, and focus returns to where it was before the bar opened. The find key pressed again moves focus to the field and selects what it holds. In the replace field, Enter replaces the current match, and Command+Enter or Control+Enter replaces every match. */
22932
+ "helix-headless-find": DefineCustomElement<
22933
+ HelixHeadlessFind,
22934
+ HelixHeadlessFindVueProps,
22935
+ HelixHeadlessFindVueEvents
22936
+ >;
22494
22937
  /** Formats a date with 'Intl' where it is shown, so you do not write the same 'Intl' call and options in your own code. **'elapsed' shows compact relative time for a feed**, such as "42m", "3h", or "1d". After six days it shows a date. In en-US, 'Intl.NumberFormat' narrow renders both 'minute' and 'month' as 'm', so a compact "3m" could mean three minutes or three months. 'elapsedTime' in 'helix/core' does the measurement. **'relative' shows the same reading in words**, such as "3 hours ago" at 'long', "3 hr. ago" at 'short' and "3h ago" at 'narrow', the styles 'sl-relative-time' offers. 'numeric="always"' says "1 day ago" where the default says "yesterday". Both readings round the count, as 'sl-relative-time' does: 100 seconds ago is "2 minutes ago", and 59.6 minutes is "1 hour". **'date-style' and 'time-style' take each locale's own pattern**, such as "Tuesday, August 4, 2026" at 'full', and stand in for the separate fields, which 'Intl' refuses beside them. 'hour-cycle' sets a twelve or twenty-four hour clock either way. **The text refreshes on one timer shared by the page.** Each element schedules an update for when its current reading expires, and an element showing a date schedules none, so a long feed left open costs almost nothing. 'frozen' draws the reading once and leaves it. **'fields' draws each field of a date as a part of its own**, such as 'day', 'month' and 'year', so a stylesheet can set the year in a lighter ink or the weekday in capitals with '::part()'. The text between the fields is the locale's own and has no part. An 'elapsed' or 'relative' reading is one phrase, with no parts inside it. **The output is always '<time datetime>'**, so copy and paste and scripts parsing the page get the exact instant, whatever the visible text says. A screen reader reads the text, so an 'elapsed' reading is named in full, such as "3 hours ago", and carries the whole date as its title. **A date with no time, such as '2026-08-04', is that day everywhere.** It is formatted in UTC unless 'time-zone' says otherwise, as Date Input and Date Picker format their dates, so a reader west of UTC sees August 4 and not August 3. **A date is written in a calendar Date Picker draws**: the locale's own where its months are the Gregorian months, as 'th-TH' writes 2569 for 2026, and 'gregory' where they are not, as for 'fa-IR'. 'calendar' picks any of them, 'persian' and 'hebrew' included. */
22495
22938
  "helix-headless-format-date": DefineCustomElement<
22496
22939
  HelixHeadlessFormatDate,
@@ -22551,7 +22994,7 @@ export interface WcToolkitVueGlobalComponents {
22551
22994
  HelixHeadlessLightboxItemVueProps,
22552
22995
  HelixHeadlessLightboxItemVueEvents
22553
22996
  >;
22554
- /** The frame around content you open, such as a picture, a video frame, or a chart. The lightbox draws no content of its own. It provides the frame, the keyboard behavior, and text that states the current position in the set. The modal behavior comes from a native '<dialog>' opened with 'showModal()', which provides the top layer, a backdrop, Escape to close, and 'inert' on the rest of the document. Every way of closing goes through 'requestOpen', as in 'Dialog' and 'Drawer'. A lightbox shows one item at a time and has no scrolling track, so 'active' holds the current item, as in 'Tabs'. The arrow keys change the item while focus stays in the dialog. 'active' names an item by its 'value', and an item with no 'value' by its place, counted from 1, as in 'Steps', so a set written without values moves and 'helix-activate' says '1', '2' and so on. Set 'controls' for the viewer's own previous, next and close controls, named by 'previous-label', 'next-label' and 'dismiss-label', whose glyphs you can replace in the 'previous-icon', 'next-icon' and 'dismiss-icon' slots. Without it, compose the chrome yourself in the 'header' and 'footer' slots, with buttons that send '--previous', '--next' and '--close'. **Set 'max-zoom' to let a reader zoom into the shown item**, such as '3'. Two fingers pinch it, and so does a trackpad pinch or the wheel with Ctrl held, about the point under the pointer. A double click or a double tap zooms all the way in about the point pressed and back out, and once zoomed one pointer drags it about and the wheel moves it. '+' and '-' zoom in and out from the keyboard, and '0' puts it back. The scale and the offset are on the 'viewport' part as '--lightbox-zoom', '--lightbox-pan-x' and '--lightbox-pan-y', written only while zoomed, and a swipe moves to the next item only while the item is at its own size. With 'controls', the viewer also draws zoom-out and zoom-in controls, for a pointer with no wheel and no second finger. Once a reader stops zooming, and at once for a key or a zoom control, the live region says the new scale in the words of 'zoom-status-label', such as "Zoomed to 150%". Each item is a slide: a 'group' with the role description in 'slide-role-label', named by its 'label' or by 'slide-label'. A touch or a pen swiped across the picture shows the next or the previous item, the way the line of text runs. A press on the empty area around the item closes the viewer, as a press on the backdrop does. Under 'max-zoom', a press beside the item zooms on a double press and closes nothing, and only the space outside the viewport closes the viewer. A press that dragged closes nothing. **Keyboard.** Opening moves focus to the viewer itself, which a screen reader names. | Key | What it does | |---|---| | Right, Down | Shows the next item. On a right-to-left page, Left does. While the item is zoomed, the arrows move about it instead. | | Left, Up | Shows the previous item. | | Home, End | Shows the first or the last item. | | '+', '-', '0' | Zooms in, zooms out, and puts the item back at its own size, where 'max-zoom' allows zooming. | | Tab, Shift+Tab | Moves through the controls in the viewer, from the last round to the first and from the first round to the last. | | Escape | Closes the viewer. A 'helix-before-close' listener can refuse. | A development build warns when a viewer opens with no 'label'. The chrome hides when there is no input, through 'IdleController', and comes back on a pointer move, a key press, or a focus. It stays while focus is on a control in the header or the footer, so a keyboard reader is never left on a control that has gone. 'fullscreen' uses 'FullscreenController', as 'Video' does. While the viewer is open, the page behind it does not scroll. */
22997
+ /** The frame around content you open, such as a picture, a video frame, or a chart. The lightbox draws no content of its own. It provides the frame, the keyboard behavior, and text that states the current position in the set. The modal behavior comes from a native '<dialog>' opened with 'showModal()', which provides the top layer, a backdrop, Escape to close, and 'inert' on the rest of the document. Every way of closing goes through 'requestOpen', as in 'Dialog' and 'Drawer'. A lightbox shows one item at a time and has no scrolling track, so 'active' holds the current item, as in 'Tabs'. The arrow keys change the item while focus stays in the dialog. 'active' names an item by its 'value', and an item with no 'value' by its place, counted from 1, as in 'Steps', so a set written without values moves and 'helix-activate' says '1', '2' and so on. Set 'controls' for the viewer's own previous, next and close controls, named by 'previous-label', 'next-label' and 'dismiss-label', whose glyphs you can replace in the 'previous-icon', 'next-icon' and 'dismiss-icon' slots. A set of one item has nothing to step to, so it draws no previous, next or counter. Without it, compose the chrome yourself in the 'header' and 'footer' slots, with buttons that send '--previous', '--next' and '--close'. **Set 'max-zoom' to let a reader zoom into the shown item**, such as '3'. Two fingers pinch it, and so does a trackpad pinch or the wheel with Ctrl held, about the point under the pointer. A double click or a double tap zooms all the way in about the point pressed and back out, and once zoomed one pointer drags it about and the wheel moves it. '+' and '-' zoom in and out from the keyboard, and '0' puts it back. The scale and the offset are on the 'viewport' part as '--lightbox-zoom', '--lightbox-pan-x' and '--lightbox-pan-y', written only while zoomed, and a swipe moves to the next item only while the item is at its own size. With 'controls', the viewer also draws zoom-out and zoom-in controls, for a pointer with no wheel and no second finger. Once a reader stops zooming, and at once for a key or a zoom control, the live region says the new scale in the words of 'zoom-status-label', such as "Zoomed to 150%". Each item is a slide: a 'group' with the role description in 'slide-role-label', named by its 'label' or by 'slide-label'. A touch or a pen swiped across the picture shows the next or the previous item, the way the line of text runs. A press on the empty area around the item closes the viewer, as a press on the backdrop does. Under 'max-zoom', a press beside the item zooms on a double press and closes nothing, and only the space outside the viewport closes the viewer. A press that dragged closes nothing. **Keyboard.** Opening moves focus to the viewer itself, which a screen reader names. | Key | What it does | |---|---| | Right, Down | Shows the next item. On a right-to-left page, Left does. While the item is zoomed, the arrows move about it instead. | | Left, Up | Shows the previous item. | | Home, End | Shows the first or the last item. | | '+', '-', '0' | Zooms in, zooms out, and puts the item back at its own size, where 'max-zoom' allows zooming. | | Tab, Shift+Tab | Moves through the controls in the viewer, from the last round to the first and from the first round to the last. | | Escape | Closes the viewer. A 'helix-before-close' listener can refuse. | A development build warns when a viewer opens with no 'label'. The chrome hides when there is no input, through 'IdleController', and comes back on a pointer move, a key press, or a focus. It stays while focus is on a control in the header or the footer, so a keyboard reader is never left on a control that has gone. 'fullscreen' uses 'FullscreenController', as 'Video' does. While the viewer is open, the page behind it does not scroll. */
22555
22998
  "helix-headless-lightbox": DefineCustomElement<
22556
22999
  HelixHeadlessLightbox,
22557
23000
  HelixHeadlessLightboxVueProps,
@@ -22587,7 +23030,7 @@ export interface WcToolkitVueGlobalComponents {
22587
23030
  HelixHeadlessLoaderVueProps,
22588
23031
  HelixHeadlessLoaderVueEvents
22589
23032
  >;
22590
- /** A group is a disclosure: its heading is a button that shows and hides the lines inside it, and says whether they are shown with 'aria-expanded'. Put 'Log.Line' elements inside it, and nest groups for steps within steps. 'status' draws a mark before the heading, and a screen reader hears the status after the heading ('status-label'). 'duration' stands at the end of the heading, as you write it, such as '12s'. A group starts shut. Write 'default-open' on the step a reader should see, such as the one that failed. */
23033
+ /** A group is a disclosure: its heading is a button that shows and hides the lines inside it, and says whether they are shown with 'aria-expanded'. Put 'Log.Line' elements inside it, and nest groups for steps within steps. 'status' draws a mark before the heading, and a screen reader hears the status after the heading ('status-label'). 'duration' stands at the end of the heading, as you write it, such as '12s'. A group starts shut. Write 'default-open' on the step a reader should see, such as the one that failed. A shut group's lines are hidden until found: the browser's find and Find search them, and the group opens on the one that holds the match, unless 'helix-before-open' is canceled. */
22591
23034
  "helix-headless-log-group": DefineCustomElement<
22592
23035
  HelixHeadlessLogGroup,
22593
23036
  HelixHeadlessLogGroupVueProps,
@@ -22701,12 +23144,18 @@ export interface WcToolkitVueGlobalComponents {
22701
23144
  HelixHeadlessMenuSectionVueProps,
22702
23145
  HelixHeadlessMenuSectionVueEvents
22703
23146
  >;
22704
- /** A meter shows a level within a range. Use 'Progress' to show how far along a task is. A progress bar starts empty and ends full, and full is always the good end. For a meter, which end is good depends on what is measured. There is no 'indeterminate', because a meter always has a value. **Set 'low', 'high', and 'optimum'**, as defined in the HTML specification. 'low' and 'high' divide the range into a low band, a middle band, and a high band. 'optimum' sets the preferred band. The band next to it is fair, and the band two away is poor. The band is a custom state on the meter, 'good', 'fair' or 'poor', beside 'over' and 'under' for a value past an end, so a page styles the meter around the fill as well as the fill. **'live' says the reading when it moves into another band**, such as "92%, Poor", in a polite region, for a meter whose value changes while a reader is on the page: a disk filling or a battery draining. The band's word comes from 'band-labels'. */
23147
+ /** A meter shows a level within a range, or how the level divides: write 'Meter.Segment' inside it for each part of the whole, and the meter measures their sum. Use 'Progress' to show how far along a task is. A progress bar starts empty and ends full, and full is always the good end. For a meter, which end is good depends on what is measured. There is no 'indeterminate', because a meter always has a value. **Set 'low', 'high', and 'optimum'**, as defined in the HTML specification. 'low' and 'high' divide the range into a low band, a middle band, and a high band. 'optimum' sets the preferred band. The band next to it is fair, and the band two away is poor. The band is a custom state on the meter, 'good', 'fair' or 'poor', beside 'over' and 'under' for a value past an end, so a page styles the meter around the fill as well as the fill. **'live' says the reading when it moves into another band**, such as "92%, Poor", in a polite region, for a meter whose value changes while a reader is on the page: a disk filling or a battery draining. The band's word comes from 'band-labels'. */
22705
23148
  "helix-headless-meter": DefineCustomElement<
22706
23149
  HelixHeadlessMeter,
22707
23150
  HelixHeadlessMeterVueProps,
22708
23151
  HelixHeadlessMeterVueEvents
22709
23152
  >;
23153
+ /** A segment says how much of the range one part of the whole takes, such as the tokens a model's context holds for its tools, against the tokens it holds for the conversation. Write one for each part inside a 'Meter'. **The meter's reading is the sum of its segments.** 'value' on the meter is ignored while it has any, so the two cannot disagree, and the bands, the ticks and the reading answer to the total. A segment is drawn as wide as its 'value' is of the meter's range, so segments that add up to less than the range leave the rest of the track empty, and ones that add up to more are cut at the end. **A meter's children are presentational to a screen reader**, so a segment reaches no one that cannot see the bar. Say the breakdown in text beside it, such as a list with the name and the amount of each part, which is also where a reader finds the exact figures. A segment draws only in the bar. A meter in 'ring' or 'arc' draws its total. */
23154
+ "helix-headless-meter-segment": DefineCustomElement<
23155
+ HelixHeadlessMeterSegment,
23156
+ HelixHeadlessMeterSegmentVueProps,
23157
+ HelixHeadlessMeterSegmentVueEvents
23158
+ >;
22710
23159
  /** WCAG 2.2.2 asks that motion which starts by itself and runs longer than five seconds can be paused. **This is one control for the whole page**: a press pauses every Helix component that moves by itself, and another lets them run again. - 'Carousel' stops rotating under 'autoplay'. - 'Video' pauses a video that started itself under 'autoplay'. - 'Aura', 'Orb', and 'Strands' hold the frame they show. - A graph that 'connectGraph' lays out stops where its notes stand, and its three.js view stops turning. - A map layer's 'frames' stop on the frame they show. **The choice is the page's**, held on the document element as 'data-helix-motion="paused"', so two of these on one page agree, and a page can set it in its markup or with 'pauseMotion' from '@fusion.dev/helix-core'. A stylesheet can select on the attribute to pause motion of its own. It is a toggle button: a '<button>' that says whether motion is paused with 'aria-pressed'. It keeps one name, 'label', whichever way it stands, as a toggle button does, and its icon shows what a press does next. Put it where a reader looks first, such as the page's header. Where the reader asked for reduced motion, nothing moves by itself to begin with. */
22711
23160
  "helix-headless-motion-toggle": DefineCustomElement<
22712
23161
  HelixHeadlessMotionToggle,
@@ -22845,7 +23294,7 @@ export interface WcToolkitVueGlobalComponents {
22845
23294
  HelixHeadlessScatterChartVueProps,
22846
23295
  HelixHeadlessScatterChartVueEvents
22847
23296
  >;
22848
- /** Measures which edges have content past them and sets one custom state per edge. CSS cannot read scroll position, so a stylesheet cannot work this out on its own. The styled tier draws a fade on each edge that has a state. Custom states keep an element that upgrades after a framework rendered it from adding markup the framework did not write. Select them with ':host(:state(more-block-end))'. While the content overflows, the region gets a 'tabindex', so keyboard users can scroll it. When nothing overflows, it is not a tab stop. It has 'role="region"' only when you set a 'label', because a screen reader announces an unnamed region as only "region". **'scrollbars' draws scrollbars of its own** in place of the browser's: a 'scrollbar' part for each axis that scrolls, a 'thumb' in each, and a 'corner' where the two meet. They are for the pointer. The thumb drags, and a press on the track moves the thumb to the press. The viewport stays the tab stop and the region a screen reader reads, and the scrollbars are hidden from screen readers. On the headless tier your stylesheet sizes and places them, hides the browser's own with 'scrollbar-width: none' on the viewport, and draws the thumb from the two custom properties written on each scrollbar. An axis whose 'overflow' is 'hidden' gets no scrollbar. **'orientation' keeps the content to one axis.** 'vertical' scrolls up and down only, and 'horizontal' sideways only, so the other axis has no scrollbar, the browser's or the component's, and clips what is past it. Leave it unset to scroll both ways. The viewport's 'scroll' and 'scrollend' are sent again from the host, which is the element you hold. A thumb dragged across the content sends one 'scrollend', once it is let go. In React, bind them with 'onScroll' and 'onScrollEnd'. **Keyboard.** The viewport is the tab stop while the content overflows, and the browser's scrolling keys move it: the arrow keys, Page Up and Page Down, Home and End, and Space. The scrollbars take no focus. */
23297
+ /** Measures which edges have content past them and sets one custom state per edge. CSS cannot read scroll position, so a stylesheet cannot work this out on its own. The styled tier draws a fade on each edge that has a state. Custom states keep an element that upgrades after a framework rendered it from adding markup the framework did not write. Select them with ':host(:state(more-block-end))'. While the content overflows, the region gets a 'tabindex', so keyboard users can scroll it. When nothing overflows, it is not a tab stop. It has 'role="region"' only when you set a 'label', because a screen reader announces an unnamed region as only "region". **'scrollbars' draws scrollbars of its own** in place of the browser's: a 'scrollbar' part for each axis that scrolls, a 'thumb' in each, and a 'corner' where the two meet. They are for the pointer. The thumb drags, and a press on the track moves the thumb to the press. The viewport stays the tab stop and the region a screen reader reads, and the scrollbars are hidden from screen readers. On the headless tier your stylesheet sizes and places them, hides the browser's own with 'scrollbar-width: none' on the viewport, and draws the thumb from the two custom properties written on each scrollbar. An axis whose 'overflow' is 'hidden' gets no scrollbar. **'orientation' keeps the content to one axis.** 'vertical' scrolls up and down only, and 'horizontal' sideways only, so the other axis has no scrollbar, the browser's or the component's, and clips what is past it. Leave it unset to scroll both ways. **A mask on the viewport also masks the browser's scrollbar.** While a scrollbar takes room beside the content, the viewport carries its size in '--scroll-area-gutter-inline-end' or '--scroll-area-gutter-block-end', so a mask can leave that room opaque. The styled tier's fades use them. The viewport's 'scroll' and 'scrollend' are sent again from the host, which is the element you hold. A thumb dragged across the content sends one 'scrollend', once it is let go. In React, bind them with 'onScroll' and 'onScrollEnd'. **Keyboard.** The viewport is the tab stop while the content overflows, and the browser's scrolling keys move it: the arrow keys, Page Up and Page Down, Home and End, and Space. The scrollbars take no focus. */
22849
23298
  "helix-headless-scroll-area": DefineCustomElement<
22850
23299
  HelixHeadlessScrollArea,
22851
23300
  HelixHeadlessScrollAreaVueProps,
@@ -22887,7 +23336,7 @@ export interface WcToolkitVueGlobalComponents {
22887
23336
  HelixHeadlessSparklineVueProps,
22888
23337
  HelixHeadlessSparklineVueEvents
22889
23338
  >;
22890
- /** A 3D bar chart reads its table as 'Bar Chart' does: **each row is a category, named by its label, and each numeric column a series**, named by its heading. The bars stand on a grid of categories across and series in depth, each as tall as its value from zero and colored by its series, so one series is a single row of bars and several make a block of them. **The flat 'Bar Chart' is read more exactly.** Measured, a reader judges a 3D bar's value less closely than a flat one's, and a bar can stand behind another. Use this one where the shape across two sets of names matters more than any one exact value, such as sales by region and by quarter. The tooltip and the table carry the exact values, and a drag turns the view to show a bar another hides. **Helix draws the frame, and the chart draws the bars in 3D itself, in SVG**: a picture a print and a page without WebGL show too, which a drag or Shift with an arrow turns. Put a box inside the chart, and 'connectSpatialBarChart' from '@fusion.dev/helix-plot', given 'threeBarDriver' from '@fusion.dev/helix-plot/three', draws the bars in it with three.js, lit and in perspective. **The table is the reading.** Every number is in it, and screen readers read it. The 'summary' part names the number of bars, series, and categories, and the range of values, and describes the plot. **The plot is read by key, across and in depth.** It takes focus, named by 'label' or the caption. The left and right arrows move from category to category, the down and up arrows from series to series, and Home and End go to the first and the last bar. The 'live' part says the bar's category, series, and value in words. Shift with an arrow turns the view, and Escape lets the bar go. **A reading shows its row in a tooltip**, as on every chart: the bar a mouse or a pen rests on, the bar tapped, or the one the keys move to. **Readings are sent as every chart sends them.** 'helix-reading-change' says each move of the reading, and 'helix-reading-press' a bar clicked or pressed with Enter or Space, each with the row of the table in 'index'. **Keyboard.** The plot is one tab stop once it has readings. | Key | What it does | |---|---| | Tab | Moves focus to the plot. | | Right, Left | Moves to the next or the previous category. | | Down, Up | Moves to the next or the previous series. | | Home, End | Moves to the first or the last bar. | | Shift with an arrow | Turns the view across, or tilts it up and down. | | Enter, Space | Presses the bar, which sends 'helix-reading-press'. | | Escape | Lets the bar go. | */
23339
+ /** A 3D bar chart reads its table as 'Bar Chart' does: **each row is a category, named by its label, and each numeric column a series**, named by its heading. The bars stand on a grid of categories across and series in depth, each as tall as its value from zero and colored by its series, so one series is a single row of bars and several make a block of them. **A cell's 'data-tone' colors its own bar and writes its value above it**, such as 'data-tone="primary"' on the one reading a chart is about, as on 'Bar Chart'. The value is the cell's own text. Without a tone, a bar takes its series' color. **The flat 'Bar Chart' is read more exactly.** Measured, a reader judges a 3D bar's value less closely than a flat one's, and a bar can stand behind another. Use this one where the shape across two sets of names matters more than any one exact value, such as sales by region and by quarter. The tooltip and the table carry the exact values, and a drag turns the view to show a bar another hides. **Helix draws the frame, and the chart draws the bars in 3D itself, in SVG**: a picture a print and a page without WebGL show too, which a drag or Shift with an arrow turns. Put a box inside the chart, and 'connectSpatialBarChart' from '@fusion.dev/helix-plot', given 'threeBarDriver' from '@fusion.dev/helix-plot/three', draws the bars in it with three.js, lit and in perspective. **The table is the reading.** Every number is in it, and screen readers read it. The 'summary' part names the number of bars, series, and categories, and the range of values, and describes the plot. **The plot is read by key, across and in depth.** It takes focus, named by 'label' or the caption. The left and right arrows move from category to category, the down and up arrows from series to series, and Home and End go to the first and the last bar. The 'live' part says the bar's category, series, and value in words. Shift with an arrow turns the view, and Escape lets the bar go. **A reading shows its row in a tooltip**, as on every chart: the bar a mouse or a pen rests on, the bar tapped, or the one the keys move to. **Readings are sent as every chart sends them.** 'helix-reading-change' says each move of the reading, and 'helix-reading-press' a bar clicked or pressed with Enter or Space, each with the row of the table in 'index'. **Keyboard.** The plot is one tab stop once it has readings. | Key | What it does | |---|---| | Tab | Moves focus to the plot. | | Right, Left | Moves to the next or the previous category. | | Down, Up | Moves to the next or the previous series. | | Home, End | Moves to the first or the last bar. | | Shift with an arrow | Turns the view across, or tilts it up and down. | | Enter, Space | Presses the bar, which sends 'helix-reading-press'. | | Escape | Lets the bar go. | */
22891
23340
  "helix-headless-spatial-bar-chart": DefineCustomElement<
22892
23341
  HelixHeadlessSpatialBarChart,
22893
23342
  HelixHeadlessSpatialBarChartVueProps,
@@ -23007,7 +23456,7 @@ export interface WcToolkitVueGlobalComponents {
23007
23456
  HelixHeadlessTabPanelVueProps,
23008
23457
  HelixHeadlessTabPanelVueEvents
23009
23458
  >;
23010
- /** Selection works through an event, the same as in the accordion and the tree. A tab dispatches 'helix-select', and the root pairs it with the panel of the same value. Nothing registers with anything, so tabs added later work with no extra setup. The tab list is a single tab stop, and the arrow keys move between tabs through 'KeyboardNavigationController', the same as in the radio and toggle groups. Selection follows focus, which suits a small set where showing a panel is cheap. Set 'manual' when showing a panel is expensive, so focus can move without selecting. 'orientation="vertical"' sets the tabs in a column beside the panels, and the tab list says 'aria-orientation="vertical"'. The arrow keys of both axes move between tabs either way. A tab with an 'href' is a link, for tabs that are pages of a site. Pressing it follows the link. Where any tab is a link, the arrow keys move focus without choosing on every tab of the list, as under 'manual', so arrowing past a tab never leaves the page and the list answers the keys one way. Mark the tab of the page you are on with 'selected', or set 'active' to its value. Each tab says which panel it controls through 'aria-controls', set as an element reference to the panel's host, where the engine has reflection. Keys, on the tab list: Left and Right Arrow move between tabs, and so do Up and Down; Home and End go to the first and the last. The horizontal arrows follow the reading direction, so on a right-to-left page Left moves on. Disabled tabs are passed over. Tab leaves the list for the selected panel, which is a tab stop only while it holds nothing focusable. **Keyboard.** | Key | What it does | |---|---| | Right, Down | Moves to the next tab, from the last round to the first. Selects it, unless 'manual' is set or a tab is a link. | | Left, Up | Moves to the tab before, from the first round to the last. | | Home, End | Moves to the first or the last tab. | | Enter, Space | Selects the tab with focus, or follows its link. | | Tab | Leaves the list for the selected panel. | Removing the selected tab selects the enabled tab beside it, the next one or else the one before, and 'active' says so, with 'helix-activate'. Where the removed tab had focus, focus moves to the tab now selected. **More tabs than fit.** With 'scroll-controls', a strip that scrolls shows a button at each end it can scroll toward, as Web Awesome's tab group does, and a press scrolls it most of its own length. The buttons are for the pointer, so they are out of the tab order and hidden from screen readers; the arrow keys already reach every tab, and the strip scrolls the selected tab into view. A strip scrolls once a stylesheet gives the 'tabs' part an 'overflow', as the styled tier does. A tab with 'dismissible' can be closed: see 'Tabs.Tab'. The 'indicator' part moves to the selected tab and carries its place and size, so a mark of your own can be drawn there: style the part, or slot an element into 'indicator', which sits inside the part and reads the same properties. */
23459
+ /** Selection works through an event, the same as in the accordion and the tree. A tab dispatches 'helix-select', and the root pairs it with the panel of the same value. Nothing registers with anything, so tabs added later work with no extra setup. The tab list is a single tab stop, and the arrow keys move between tabs through 'KeyboardNavigationController', the same as in the radio and toggle groups. Selection follows focus, which suits a small set where showing a panel is cheap. Set 'manual' when showing a panel is expensive, so focus can move without selecting. 'orientation="vertical"' sets the tabs in a column beside the panels, and the tab list says 'aria-orientation="vertical"'. The arrow keys of both axes move between tabs either way. A tab with an 'href' is a link, for tabs that are pages of a site. Pressing it follows the link. Where any tab is a link, the arrow keys move focus without choosing on every tab of the list, as under 'manual', so arrowing past a tab never leaves the page and the list answers the keys one way. Mark the tab of the page you are on with 'selected', or set 'active' to its value. Each tab says which panel it controls through 'aria-controls', set as an element reference to the panel's host, where the engine has reflection. Keys, on the tab list: Left and Right Arrow move between tabs, and so do Up and Down; Home and End go to the first and the last. The horizontal arrows follow the reading direction, so on a right-to-left page Left moves on. Disabled tabs are passed over. Tab leaves the list for the selected panel, which is a tab stop only while it holds nothing focusable. **Keyboard.** | Key | What it does | |---|---| | Right, Down | Moves to the next tab, from the last round to the first. Selects it, unless 'manual' is set or a tab is a link. | | Left, Up | Moves to the tab before, from the first round to the last. | | Home, End | Moves to the first or the last tab. | | Enter, Space | Selects the tab with focus, or follows its link. | | Tab | Leaves the list for the selected panel. | Removing the selected tab selects the enabled tab beside it, the next one or else the one before, and 'active' says so, with 'helix-activate'. Where the removed tab had focus, focus moves to the tab now selected. **More tabs than fit.** With 'scroll-controls', a strip that scrolls shows a button at each end it can scroll toward, as Web Awesome's tab group does, and a press scrolls it most of its own length. The buttons are for the pointer, so they are out of the tab order and hidden from screen readers; the arrow keys already reach every tab, and the strip scrolls the selected tab into view. A strip scrolls once a stylesheet gives the 'tabs' part an 'overflow', as the styled tier does. A tab with 'dismissible' can be closed: see 'Tabs.Tab'. **Panels are optional.** A set with none is a strip whose tabs stand for something the page shows elsewhere: the keys, the selection, 'active' and 'helix-activate' work the same, and no tab names a panel it controls. The 'indicator' part moves to the selected tab and carries its place and size, so a mark of your own can be drawn there: style the part, or slot an element into 'indicator', which sits inside the part and reads the same properties. */
23011
23460
  "helix-headless-tabs": DefineCustomElement<
23012
23461
  HelixHeadlessTabs,
23013
23462
  HelixHeadlessTabsVueProps,
@@ -23097,7 +23546,7 @@ export interface WcToolkitVueGlobalComponents {
23097
23546
  HelixHeadlessToggleVueProps,
23098
23547
  HelixHeadlessToggleVueEvents
23099
23548
  >;
23100
- /** A toolbar holds a mix of controls, such as buttons, toggles, and menus. A button group holds one kind, so the two are separate components. The toolbar is one tab stop, and the arrow keys move between its controls, so three toolbars take three presses of Tab to pass. Any element the browser can focus counts as a control, including your own elements. A child that takes no focus, such as a divider, is skipped. A menu is reached at its trigger. A Divider in the toolbar is a separator across the toolbar's axis, as React Aria's is: vertical in a horizontal toolbar and horizontal in a vertical one, without an 'orientation' of its own. Controls inside a plain wrapper, such as a 'Button Group', are each a stop of the toolbar's own, as React Aria's toolbar flattens a group: the arrows walk through the group's buttons and on past it, and the group takes no tab stop of its own. The arrows wrap from the last control to the first. Set 'stop-at-ends' to keep them at the ends, as Radix's 'loop' set to false does. **Keyboard.** Tab enters the toolbar on the control that last had focus, the first control at the start, and the next Tab leaves it. | Key | What it does | |---|---| | Right | Moves to the next control in a horizontal toolbar, from the last back to the first. | | Left | Moves to the control before in a horizontal toolbar, from the first round to the last. | | Down, Up | The same in a vertical toolbar. | | Home, End | Moves to the first or the last control. | Left and Right swap on a right-to-left page, where the first control is on the right. The arrows across the toolbar's axis are left to the control that has focus, so a radio-style toggle group or a select answers them itself. The toolbar is 'role="toolbar"' with 'aria-orientation', named by 'label'. The stop moves through a control's own 'focusable' property where it has one, as Button, Select and Toggle Group do. A control without one has 'tabindex' written on the element that takes focus: a native element itself, or the control inside a custom element's open shadow root, so the host keeps the markup you rendered. Only a custom element whose shadow root is closed takes it on the host. A toggle group of pressed buttons, 'selection-mode="multiple"', is walked through the same way, each toggle a stop on the toolbar's axis, as React Aria's toolbar walks its toggle buttons. Another nested composite, such as a radio-style toggle group, is one stop on the toolbar's axis: the toolbar's arrows move past it, and the arrows across the toolbar move inside it. A composite with a 'focusable' property, as Toggle Group has, gives up its own tab stop while the toolbar's is elsewhere, so Tab stops once in the toolbar. A composite without one keeps its own tab stop. A '<slot>' in the toolbar counts as the controls assigned to it, for a toolbar a component draws in its own shadow root with your controls passed into it: they share its tab stop and its arrows with the component's own. A toolbar inside another toolbar, a Helix one or the page's own 'role="toolbar"', is a 'group' of the outer one, as React Aria's is: the outer toolbar's arrows walk through its controls and on past them, and it takes no keys and no tab stop of its own. A server renders it as a toolbar, having no parent to read, until it upgrades. */
23549
+ /** A toolbar holds a mix of controls, such as buttons, toggles, and menus. A button group holds one kind, so the two are separate components. The toolbar is one tab stop, and the arrow keys move between its controls, so three toolbars take three presses of Tab to pass. Any element the browser can focus counts as a control, including your own elements. A child that takes no focus, such as a divider, is skipped. A menu is reached at its trigger. A disabled control is skipped too, except a Button with 'focusable-when-disabled', which the arrows still reach so its tooltip can say why it is disabled. A Divider in the toolbar is a separator across the toolbar's axis, as React Aria's is: vertical in a horizontal toolbar and horizontal in a vertical one, without an 'orientation' of its own. Controls inside a plain wrapper, such as a 'Button Group', are each a stop of the toolbar's own, as React Aria's toolbar flattens a group: the arrows walk through the group's buttons and on past it, and the group takes no tab stop of its own. The arrows wrap from the last control to the first. Set 'stop-at-ends' to keep them at the ends, as Radix's 'loop' set to false does. **Keyboard.** Tab enters the toolbar on the control that last had focus, the first control at the start, and the next Tab leaves it. | Key | What it does | |---|---| | Right | Moves to the next control in a horizontal toolbar, from the last back to the first. | | Left | Moves to the control before in a horizontal toolbar, from the first round to the last. | | Down, Up | The same in a vertical toolbar. | | Home, End | Moves to the first or the last control. | Left and Right swap on a right-to-left page, where the first control is on the right. The arrows across the toolbar's axis are left to the control that has focus, so a radio-style toggle group or a select answers them itself. The toolbar is 'role="toolbar"' with 'aria-orientation', named by 'label'. The stop moves through a control's own 'focusable' property where it has one, as Button, Select and Toggle Group do. A control without one has 'tabindex' written on the element that takes focus: a native element itself, or the control inside a custom element's open shadow root, so the host keeps the markup you rendered. Only a custom element whose shadow root is closed takes it on the host. A toggle group of pressed buttons, 'selection-mode="multiple"', is walked through the same way, each toggle a stop on the toolbar's axis, as React Aria's toolbar walks its toggle buttons. Another nested composite, such as a radio-style toggle group, is one stop on the toolbar's axis: the toolbar's arrows move past it, and the arrows across the toolbar move inside it. A composite with a 'focusable' property, as Toggle Group has, gives up its own tab stop while the toolbar's is elsewhere, so Tab stops once in the toolbar. A composite without one keeps its own tab stop. A '<slot>' in the toolbar counts as the controls assigned to it, for a toolbar a component draws in its own shadow root with your controls passed into it: they share its tab stop and its arrows with the component's own. A toolbar inside another toolbar, a Helix one or the page's own 'role="toolbar"', is a 'group' of the outer one, as React Aria's is: the outer toolbar's arrows walk through its controls and on past them, and it takes no keys and no tab stop of its own. A server renders it as a toolbar, having no parent to read, until it upgrades. */
23101
23550
  "helix-headless-toolbar": DefineCustomElement<
23102
23551
  HelixHeadlessToolbar,
23103
23552
  HelixHeadlessToolbarVueProps,
@@ -23121,7 +23570,7 @@ export interface WcToolkitVueGlobalComponents {
23121
23570
  HelixHeadlessTourStopVueProps,
23122
23571
  HelixHeadlessTourStopVueEvents
23123
23572
  >;
23124
- /** 'open' comes from 'MixinControllerOpen', the same state a disclosure holds, so you can respond to a branch opening and control the state yourself. The row renders 'aria-expanded'. Each item is an element because it holds state: whether it is open, selected, and focused. An item is a branch when an item is slotted into 'children', with 'slot="children"' on each nested item. This is detected on the client, so server-rendered markup shows a leaf and the twisty appears on hydration. **'href' makes the whole row a link**, rendered as an '<a>'. Enter, middle click, and the status bar then work anywhere on the row. Pressing a branch, or Enter or Space on it, opens or closes it. A branch with a 'value' is chosen as well and sends 'helix-select', unless the tree has 'nesting="heading"', where a branch names the list under it, or 'selection-mode="leaf"', where only the items at the ends are chosen. A 'disabled' item is reached by the arrow keys and announced as unavailable, and a press, Enter or Space on it does nothing. A 'lazy' item is a branch whose children you load when it opens: opening it sends 'helix-load', the row says it is busy, and the children you add appear in it. Remove 'lazy' once they are in. **In a 'reorderable' tree, the row has a grip** at its far end, which a pointer drags to move the item among its siblings. The tree says which item is moving and where the drop indicator is, with the 'dragging', 'drop-before', and 'drop-after' states. */
23573
+ /** 'open' comes from 'MixinControllerOpen', the same state a disclosure holds, so you can respond to a branch opening and control the state yourself. The row renders 'aria-expanded'. Each item is an element because it holds state: whether it is open, selected, and focused. An item is a branch when an item is slotted into 'children', with 'slot="children"' on each nested item. This is detected on the client, so server-rendered markup shows a leaf and the twisty appears on hydration. **'href' makes the whole row a link**, rendered as an '<a>'. Enter, middle click, and the status bar then work anywhere on the row. Pressing a branch, or Enter or Space on it, opens or closes it. A branch with a 'value' is chosen as well and sends 'helix-select', unless the tree has 'nesting="heading"', where a branch names the list under it, or 'selection-mode="leaf"', where only the items at the ends are chosen. A 'disabled' item is reached by the arrow keys and announced as unavailable, and a press, Enter or Space on it does nothing. A closed branch's children are hidden until found: the browser's find and Find search them, and the branch opens on the one that holds the match, unless 'helix-before-open' is canceled. A 'lazy' item is a branch whose children you load when it opens: opening it sends 'helix-load', the row says it is busy, and the children you add appear in it. Remove 'lazy' once they are in. **In a 'reorderable' tree, the row has a grip** at its far end, which a pointer drags to move the item among its siblings. The tree says which item is moving and where the drop indicator is, with the 'dragging', 'drop-before', and 'drop-after' states. */
23125
23574
  "helix-headless-tree-item": DefineCustomElement<
23126
23575
  HelixHeadlessTreeItem,
23127
23576
  HelixHeadlessTreeItemVueProps,