@fusion.dev/helix 0.171.0 → 0.173.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/custom-elements.json +2531 -95
  2. package/dist/chat/composer/chat-composer.css.js +1 -1
  3. package/dist/copy-button/root/copy-button-root.css.js +1 -1
  4. package/dist/element-events.generated.js +9 -1
  5. package/dist/graph/root/graph-root.css.js +2 -1
  6. package/dist/orb/root/orb-root.css.js +1 -1
  7. package/dist/orb/root/orb-root.d.ts +24 -5
  8. package/dist/orb/root/orb-root.js +24 -6
  9. package/dist/sandbox/index.d.ts +1 -0
  10. package/dist/sandbox/index.js +1 -0
  11. package/dist/sandbox/preview/sandbox-preview.d.ts +39 -2
  12. package/dist/sandbox/preview/sandbox-preview.js +37 -5
  13. package/dist/sandbox/root/sandbox-root.css.js +1 -1
  14. package/dist/sandbox/root/sandbox-root.d.ts +44 -4
  15. package/dist/sandbox/root/sandbox-root.js +92 -17
  16. package/dist/sandbox/source/editing.d.ts +111 -0
  17. package/dist/sandbox/source/editing.js +185 -0
  18. package/dist/sandbox/source/sandbox-source.css.js +2 -1
  19. package/dist/sandbox/source/sandbox-source.d.ts +131 -6
  20. package/dist/sandbox/source/sandbox-source.js +301 -17
  21. package/dist/timeline/root/timeline-root.css.js +1 -1
  22. package/dist/virtual-list/reorder/index.d.ts +1 -0
  23. package/dist/virtual-list/reorder/index.js +5 -0
  24. package/dist/virtual-list/reorder/virtual-list-reorder.css.d.ts +1 -0
  25. package/dist/virtual-list/reorder/virtual-list-reorder.css.js +12 -0
  26. package/dist/virtual-list/root/virtual-list-root.d.ts +9 -0
  27. package/lint.json +1 -1
  28. package/package.json +6 -6
  29. package/types/jsx.d.ts +996 -38
  30. package/types/vue.d.ts +236 -6
  31. package/types/words.d.ts +27 -0
package/types/vue.d.ts CHANGED
@@ -1693,6 +1693,9 @@ separate actions. The semantics and the joining are separate questions:
1693
1693
  `role="group"` and a shared name are what make a set of buttons a set, and
1694
1694
  `helix-flex` gives the spacing without the group. */
1695
1695
  variant?: (HelixButtonGroup["variant"]) | undefined;
1696
+ /** Disables every button in the group, and says so on the group with
1697
+ `aria-disabled`. Reflected, so a stylesheet can select on it. */
1698
+ disabled?: (HelixButtonGroup["disabled"]) | undefined;
1696
1699
  /** Keeps at least one button pressed once one is, as React Aria's
1697
1700
  `disallowEmptySelection`: a press that would leave none pressed is
1698
1701
  refused. */
@@ -1742,6 +1745,9 @@ A button's own `value` names it, so a value holds no comma.
1742
1745
  The attribute is the seed, and a press changes the property, which does
1743
1746
  not reflect, as a native control's `value` does not. */
1744
1747
  value?: (HelixButtonGroup["value"]) | undefined;
1748
+ /** The pressed values as a list, in a selection mode, and an empty list
1749
+ otherwise. Written, it presses exactly those buttons. */
1750
+ values?: (HelixButtonGroup["values"]) | undefined;
1745
1751
  };
1746
1752
 
1747
1753
  export type HelixButtonGroupVueEvents = {
@@ -2513,6 +2519,9 @@ Third", rather than with a comma this component chose. */
2513
2519
  /** The text read with a card that has connections both ways. `{leadsTo}` is
2514
2520
  `leads-to-label` and `{comesFrom}` is `comes-from-label`, each filled in. */
2515
2521
  linkedLabel?: (HelixCanvas["linkedLabel"]) | undefined;
2522
+ /** Marks the board as busy while its document arrives: the board is
2523
+ `aria-busy`, and the `loading` slot is shown. */
2524
+ loading?: (HelixCanvas["loading"]) | undefined;
2516
2525
  /** What screen readers hear after a key moves a card, with `{name}` for the
2517
2526
  card and `{x}` and `{y}` for where it now is, in the document's units.
2518
2527
 
@@ -3318,6 +3327,10 @@ export type HelixChatComposerHelixTypingElementEvent =
3318
3327
  HelixChatComposerElementEvent<HelixTypingEvent>;
3319
3328
 
3320
3329
  export type HelixChatComposerVueProps = {
3330
+ /** A message about the draft, shown under the field. While set, the composer
3331
+ is invalid, does not send, and does not submit, as a field's `feedback`
3332
+ does, and the message is announced as it appears. */
3333
+ feedback?: (HelixChatComposer["feedback"]) | undefined;
3321
3334
  /** The field's name, read by screen readers. */
3322
3335
  label?: (HelixChatComposer["label"]) | undefined;
3323
3336
  /** The most characters a draft can have. The field stops taking more. */
@@ -5541,6 +5554,24 @@ Defaulted rather than left empty. An icon-only control must be named, and
5541
5554
  the name of this one is not a judgment call: every copy button in the
5542
5555
  world is called Copy. A consumer with a better word still sets it. */
5543
5556
  label?: (HelixCopyButton["label"]) | undefined;
5557
+ /** Draws the name as words beside the icon, and the result in their place
5558
+ after a press. The button stays as wide as the longest of them. */
5559
+ "show-label"?: (HelixCopyButton["showLabel"]) | undefined;
5560
+ /** Draws the name as words beside the icon, and the result in their place
5561
+ after a press. The button stays as wide as the longest of them. */
5562
+ showLabel?: (HelixCopyButton["showLabel"]) | undefined;
5563
+ /** When the tooltip shows: `full` on hover and focus and after a press,
5564
+ `copy` only after a press, to show the result, and `none` never, for a
5565
+ button whose result shows another way, such as under `show-label`.
5566
+
5567
+ Unset is `full`, and the attribute stays absent until you write it. */
5568
+ tooltip?: (HelixCopyButton["tooltip"]) | undefined;
5569
+ /** The side the tooltip prefers. It moves to another side where this one
5570
+ does not fit. */
5571
+ "tooltip-placement"?: (HelixCopyButton["tooltipPlacement"]) | undefined;
5572
+ /** The side the tooltip prefers. It moves to another side where this one
5573
+ does not fit. */
5574
+ tooltipPlacement?: (HelixCopyButton["tooltipPlacement"]) | undefined;
5544
5575
  /** The text copied to the clipboard.
5545
5576
 
5546
5577
  It replaces `Button.value`, the submit value: a copy button never submits,
@@ -6037,7 +6068,11 @@ thousand rows, where the page is a reasonable fetch and a poor render.
6037
6068
 
6038
6069
  Off by default. Windowing costs a scroll listener, a measurement per row
6039
6070
  drawn, and a `block-size` on the scrolling box, and a table of twenty rows
6040
- should pay none of them. */
6071
+ should pay none of them.
6072
+
6073
+ While windowed, the `table` part scrolls on this tier: it carries
6074
+ `data-scroller`, and `core` ships `[data-scroller] { overflow: auto }` into
6075
+ every shadow root. You still need to give it a block size. */
6041
6076
  windowed?: (HelixDataTable["windowed"]) | undefined;
6042
6077
  /** Every row of the result, in the order it arrived.
6043
6078
 
@@ -8843,6 +8878,13 @@ or hides its notes. Drawn where the notes have two groups or more. */
8843
8878
  "links-to-label"?: (HelixGraph["linksToLabel"]) | undefined;
8844
8879
  /** How a note that links to the selected one is described, with `{note}`. */
8845
8880
  linksToLabel?: (HelixGraph["linksToLabel"]) | undefined;
8881
+ /** Marks the graph as busy while its notes arrive: the list is `aria-busy`,
8882
+ and the panel says so where it holds no notes yet. */
8883
+ loading?: (HelixGraph["loading"]) | undefined;
8884
+ /** What the panel says while `loading` is set and the list holds no notes. */
8885
+ "loading-label"?: (HelixGraph["loadingLabel"]) | undefined;
8886
+ /** What the panel says while `loading` is set and the list holds no notes. */
8887
+ loadingLabel?: (HelixGraph["loadingLabel"]) | undefined;
8846
8888
  /** What screen readers hear once the drawing has moved down, after `moved()`. */
8847
8889
  "moved-down-label"?: (HelixGraph["movedDownLabel"]) | undefined;
8848
8890
  /** What screen readers hear once the drawing has moved down, after `moved()`. */
@@ -8915,6 +8957,16 @@ own, since the fallback name is the same word. Empty leaves the role. */
8915
8957
  links?: (HelixGraph["links"]) | undefined;
8916
8958
  /** The notes. A property, never an attribute. */
8917
8959
  nodes?: (HelixGraph["nodes"]) | undefined;
8960
+ /** What each note's row in the list shows in place of its name: a function
8961
+ given the note that returns text, an element or a Lit template.
8962
+
8963
+ For an icon by its kind, or a date under its name, as React Aria's
8964
+ `ListBoxItem` takes children. The row is still named by the note's name,
8965
+ which typeahead and the search find it by, and described by how it stands
8966
+ to the selected note. Return the name with your content where it should
8967
+ still show. A property only, there being no way to write a function in
8968
+ markup. */
8969
+ noteContent?: (HelixGraph["noteContent"]) | undefined;
8918
8970
  };
8919
8971
 
8920
8972
  export type HelixGraphVueEvents = {
@@ -10812,7 +10864,8 @@ itself. */
10812
10864
  type?: (HelixList["type"]) | undefined;
10813
10865
  /** The selected rows' values, separated by commas with no spaces, such as `a,c`, in a list that selects.
10814
10866
 
10815
- Set it to start with rows selected. A row's value is its `value`, or its
10867
+ A press or a key writes it in row order, as Data Table does, whatever
10868
+ order the rows were chosen in. Set it to start with rows selected. A row's value is its `value`, or its
10816
10869
  words where it has none. */
10817
10870
  value?: (HelixList["value"]) | undefined;
10818
10871
  };
@@ -12316,6 +12369,14 @@ or on Alt+Down or Alt+Up. */
12316
12369
 
12317
12370
  It moves if that side does not fit. */
12318
12371
  placement?: (HelixMenu["placement"]) | undefined;
12372
+ /** What a screen reader hears when the filter narrows the rows. `{count}` is
12373
+ how many rows are left, written in the locale, and each language writes
12374
+ the forms it has, as Listbox's `results-label` does. */
12375
+ "results-label"?: (HelixMenu["resultsLabel"]) | undefined;
12376
+ /** What a screen reader hears when the filter narrows the rows. `{count}` is
12377
+ how many rows are left, written in the locale, and each language writes
12378
+ the forms it has, as Listbox's `results-label` does. */
12379
+ resultsLabel?: (HelixMenu["resultsLabel"]) | undefined;
12319
12380
  /** How a submenu opens. `drill` shows it in place of the page showing, with
12320
12381
  a way back. `flyout` opens it in a panel of its own beside its row. */
12321
12382
  submenus?: (HelixMenu["submenus"]) | undefined;
@@ -12326,11 +12387,21 @@ Aria's `Autocomplete` takes `filter`. See Listbox's `filterMatch`.
12326
12387
  Absent, a row is kept where its words hold the filter, in any case. A
12327
12388
  property only, there being no way to write a function in markup. */
12328
12389
  filterMatch?: (HelixMenu["filterMatch"]) | undefined;
12390
+ /** The values of the choice rows that are checked, anywhere in the menu, in
12391
+ document order.
12392
+
12393
+ Set it to check exactly those rows and uncheck every other choice row, as
12394
+ React Aria's `selectedKeys` controls a menu's selection from one place.
12395
+ Each row keeps its own `checked` too, which this reads and writes. `change`
12396
+ is sent on the menu when a reader's choice changes it. */
12397
+ checkedValues?: (HelixMenu["checkedValues"]) | undefined;
12329
12398
  };
12330
12399
 
12331
12400
  export type HelixMenuVueEvents = {
12332
12401
  /** The menu opened or closed. The event carries `newState` and `oldState`. */
12333
12402
  toggle: HelixMenuToggleElementEvent;
12403
+ /** A reader's choice checked or unchecked rows. Read `checkedValues` for the rows that are checked now. */
12404
+ change: HelixMenuElementEvent;
12334
12405
  /** The menu is about to close. Cancelable: cancel it to keep it open. */
12335
12406
  "helix-before-close": HelixMenuHelixBeforeCloseElementEvent;
12336
12407
  /** The menu is about to open. Cancelable: cancel it to keep it closed. */
@@ -13646,6 +13717,10 @@ box the sections scroll in. */
13646
13717
  /** The navigation's name, read by screen readers. A heading in the `heading`
13647
13718
  slot names it in place of this. */
13648
13719
  label?: (HelixOutline["label"]) | undefined;
13720
+ /** Which links are marked. `reading` marks the one section being read, the
13721
+ last whose heading has passed the reading line. `visible` marks every
13722
+ section with part of it on screen, and the mark runs across their links. */
13723
+ marks?: (HelixOutline["marks"]) | undefined;
13649
13724
  /** How far below the top of the scroll container a heading counts as reached,
13650
13725
  in pixels. The scroll container is the window or the panel the sections
13651
13726
  scroll in.
@@ -14156,17 +14231,42 @@ hydration, or diffed by a framework, it comes back holding whatever the
14156
14231
  last reader did rather than what the author wrote. `:state(open)` carries
14157
14232
  the resolved state for stylesheets, which is what the mirror is for. */
14158
14233
  open?: (HelixPopover["open"]) | undefined;
14234
+ /** The element the panel opens against, where that is not the trigger: its
14235
+ `id` in the same document or shadow root, or the element itself. Left
14236
+ empty, the panel opens against the trigger, or against the button whose
14237
+ command opened it. */
14238
+ anchor?: (HelixPopover["anchor"]) | undefined;
14159
14239
  /** Draws a point on the panel's edge facing the trigger.
14160
14240
 
14161
14241
  Off by default, which is the house style: a panel that opens from its
14162
14242
  trigger already reads as belonging to it. */
14163
14243
  arrow?: (HelixPopover["arrow"]) | undefined;
14244
+ /** How close to the window's edges the panel may come, in pixels, when it
14245
+ slides, shrinks or moves to the other side to fit. Left unset, it slides
14246
+ and shrinks to 8 pixels from an edge and moves to the other side only
14247
+ once it would cross one. */
14248
+ "container-padding"?: (HelixPopover["containerPadding"] | `${number}`) | undefined;
14249
+ /** How close to the window's edges the panel may come, in pixels, when it
14250
+ slides, shrinks or moves to the other side to fit. Left unset, it slides
14251
+ and shrinks to 8 pixels from an edge and moves to the other side only
14252
+ once it would cross one. */
14253
+ containerPadding?: (HelixPopover["containerPadding"]) | undefined;
14254
+ /** How far to slide the panel along the side it is on, in pixels: to the
14255
+ right on the top or the bottom, and down on the left or the right. */
14256
+ "cross-offset"?: (HelixPopover["crossOffset"] | `${number}`) | undefined;
14257
+ /** How far to slide the panel along the side it is on, in pixels: to the
14258
+ right on the top or the bottom, and down on the left or the right. */
14259
+ crossOffset?: (HelixPopover["crossOffset"]) | undefined;
14164
14260
  /** The panel's name where nothing else names it: no `label`, no heading in
14165
14261
  the panel, and no `aria-labelledby` on the host. */
14166
14262
  "fallback-label"?: (HelixPopover["fallbackLabel"]) | undefined;
14167
14263
  /** The panel's name where nothing else names it: no `label`, no heading in
14168
14264
  the panel, and no `aria-labelledby` on the host. */
14169
14265
  fallbackLabel?: (HelixPopover["fallbackLabel"]) | undefined;
14266
+ /** Whether the panel moves to the other side of the trigger when its own
14267
+ side has no room. On by default. Write `flip="false"` to keep it on its
14268
+ side, where it shrinks to fit, as React Aria's `shouldFlip` turns off. */
14269
+ flip?: (HelixPopover["flip"]) | undefined;
14170
14270
  /** The panel's name, read by screen readers. Left empty, the first heading in
14171
14271
  the panel names it, and then `fallback-label`. */
14172
14272
  label?: (HelixPopover["label"]) | undefined;
@@ -15006,6 +15106,9 @@ export type HelixSandboxPreviewHelixResizeElementEvent =
15006
15106
  HelixSandboxPreviewElementEvent<HelixResizeEvent>;
15007
15107
 
15008
15108
  export type HelixSandboxPreviewVueProps = {
15109
+ /** The address the packages in `dependencies` load from, which the name, an
15110
+ `@` and the version follow. */
15111
+ cdn?: (HelixSandboxPreview["cdn"]) | undefined;
15009
15112
  /** The color mode the frame renders in.
15010
15113
 
15011
15114
  **The frame is a document and a document has its own color mode.** Setting
@@ -15037,6 +15140,11 @@ including every one of the 24 series colors a chart reads. */
15037
15140
  /** Whether the preview draws a reload button and a button that opens the
15038
15141
  example in a new tab, in its corner. */
15039
15142
  controls?: (HelixSandboxPreview["controls"]) | undefined;
15143
+ /** The npm packages an example can import by name in the built-in document,
15144
+ each name to a version or a range, as a `package.json` lists them. Each
15145
+ loads from `cdn`. Set it as JSON in the attribute or as an object. Not
15146
+ read where `src` is set. */
15147
+ dependencies?: (HelixSandboxPreview["dependencies"]) | undefined;
15040
15148
  /** Writing direction inside the frame.
15041
15149
 
15042
15150
  Not reflected. It is payload for the render message and nothing selects on
@@ -15063,6 +15171,10 @@ Not reflected, for `direction`'s reason: the placement is applied by the
15063
15171
  document inside the frame, against its own root, so no rule on this side
15064
15172
  could read it. */
15065
15173
  layout?: (HelixSandboxPreview["layout"]) | undefined;
15174
+ /** Module files an example imports by a relative path in the built-in
15175
+ document, each path, such as `utils.js`, to its source. Not read where
15176
+ `src` is set. */
15177
+ modules?: (HelixSandboxPreview["modules"]) | undefined;
15066
15178
  /** The name of the button that opens the example in a new tab, under
15067
15179
  `controls`. */
15068
15180
  "open-label"?: (HelixSandboxPreview["openLabel"]) | undefined;
@@ -15190,6 +15302,12 @@ names below keeps that true whichever way round they sit.
15190
15302
  `split` follows the lead pane rather than the source, so `split="30"` means
15191
15303
  the same thing in both directions: thirty percent to whatever comes first. */
15192
15304
  lead?: (HelixSandbox["lead"]) | undefined;
15305
+ /** The description of a file tab whose pane holds an edit, read by screen
15306
+ readers after the file's name. */
15307
+ "modified-label"?: (HelixSandbox["modifiedLabel"]) | undefined;
15308
+ /** The description of a file tab whose pane holds an edit, read by screen
15309
+ readers after the file's name. */
15310
+ modifiedLabel?: (HelixSandbox["modifiedLabel"]) | undefined;
15193
15311
  /** Whether the panes sit side by side or stacked.
15194
15312
 
15195
15313
  Not reflected, for `lead`'s reason above: no rule selects on it. The axis
@@ -15297,6 +15415,23 @@ export type HelixSandboxSourceHelixEditElementEvent =
15297
15415
  HelixSandboxSourceElementEvent<HelixEditEvent>;
15298
15416
 
15299
15417
  export type HelixSandboxSourceVueProps = {
15418
+ /** Whether typing an opening bracket or quote types its closing one too, and
15419
+ a bracket typed with text selected goes around it. */
15420
+ "close-brackets"?: (HelixSandboxSource["closeBrackets"]) | undefined;
15421
+ /** Whether typing an opening bracket or quote types its closing one too, and
15422
+ a bracket typed with text selected goes around it. */
15423
+ closeBrackets?: (HelixSandboxSource["closeBrackets"]) | undefined;
15424
+ /** Whether the pane offers completions for the word before the caret, from
15425
+ the words of the source and of `completions`. */
15426
+ complete?: (HelixSandboxSource["complete"]) | undefined;
15427
+ /** Words the pane offers under `complete` beside the words of the source,
15428
+ such as tag and attribute names. `manifestWords` reads them from a custom
15429
+ elements manifest. Set it as JSON in the attribute or as an array. */
15430
+ completions?: (HelixSandboxSource["completions"]) | undefined;
15431
+ /** The name of the list of completions, read by screen readers. */
15432
+ "completions-label"?: (HelixSandboxSource["completionsLabel"]) | undefined;
15433
+ /** The name of the list of completions, read by screen readers. */
15434
+ completionsLabel?: (HelixSandboxSource["completionsLabel"]) | undefined;
15300
15435
  /** The editable region's name, read by screen readers. */
15301
15436
  "field-label"?: (HelixSandboxSource["fieldLabel"]) | undefined;
15302
15437
  /** The editable region's name, read by screen readers. */
@@ -15320,6 +15455,12 @@ holds several panes. Empty puts the pane's `name` on the tab. */
15320
15455
  "line-numbers"?: (HelixSandboxSource["lineNumbers"]) | undefined;
15321
15456
  /** Whether each line of the source is numbered, in a gutter beside it. */
15322
15457
  lineNumbers?: (HelixSandboxSource["lineNumbers"]) | undefined;
15458
+ /** Whether the bracket beside the caret and its pair are marked while the
15459
+ field has focus. */
15460
+ "match-brackets"?: (HelixSandboxSource["matchBrackets"]) | undefined;
15461
+ /** Whether the bracket beside the caret and its pair are marked while the
15462
+ field has focus. */
15463
+ matchBrackets?: (HelixSandboxSource["matchBrackets"]) | undefined;
15323
15464
  /** Which source this pane holds. Every `helix-before-edit` event includes it.
15324
15465
 
15325
15466
  `html` and `css` are what the sandbox root routes on; any other name is
@@ -15327,6 +15468,14 @@ passed through untouched for a consumer wiring their own panes.
15327
15468
 
15328
15469
  Not reflected: nothing selects on it, so it keeps a real default instead. */
15329
15470
  name?: (HelixSandboxSource["name"]) | undefined;
15471
+ /** Whether the source is read only: it can be selected and copied, and not
15472
+ edited, as Sandpack's `readOnly` file is. Tab moves focus out of a field
15473
+ that is read only. */
15474
+ readonly?: (HelixSandboxSource["readOnly"]) | undefined;
15475
+ /** Whether the source is read only: it can be selected and copied, and not
15476
+ edited, as Sandpack's `readOnly` file is. Tab moves focus out of a field
15477
+ that is read only. */
15478
+ readOnly?: (HelixSandboxSource["readOnly"]) | undefined;
15330
15479
  /** Whether Tab indents the source. When it is off, Tab moves focus. */
15331
15480
  "tab-indents"?: (HelixSandboxSource["tabIndents"]) | undefined;
15332
15481
  /** Whether Tab indents the source. When it is off, Tab moves focus. */
@@ -16649,6 +16798,13 @@ that should survive its own collapse says how much of itself to keep, and
16649
16798
  only whoever put it there knows that, which is the same reason `min` is a
16650
16799
  consumer's to set. */
16651
16800
  collapsedSize?: (HelixSplitter["collapsedSize"]) | undefined;
16801
+ /** Which panes can be collapsed, as Zag's panels each take `collapsible`:
16802
+ `start`, `end`, `both`, or `none`. A pane that cannot be collapsed stops
16803
+ at the edge without shutting. `Enter` collapses the end pane where only
16804
+ the end pane can be collapsed, and the start pane otherwise.
16805
+
16806
+ Unset is `both`, and the attribute stays absent until you write it. */
16807
+ collapsible?: (HelixSplitter["collapsible"]) | undefined;
16652
16808
  /** The name of the handle where two dividers cross, read by screen readers. */
16653
16809
  "corner-label"?: (HelixSplitter["cornerLabel"]) | undefined;
16654
16810
  /** The name of the handle where two dividers cross, read by screen readers. */
@@ -16677,6 +16833,18 @@ these words are the whole of where it is. */
16677
16833
  "default-position"?: (HelixSplitter["defaultPosition"] | `${number}`) | undefined;
16678
16834
  /** Where the divider starts, when `position` is not set. */
16679
16835
  defaultPosition?: (HelixSplitter["defaultPosition"]) | undefined;
16836
+ /** The least the end pane keeps, in the units `min` takes: a percentage, or
16837
+ a CSS length such as `16rem` resolved against the splitter's box. The
16838
+ divider stops that far from the end, whatever `max` allows, so `min` and
16839
+ `end-min` hold a minimum for each pane, as Zag's panels each take
16840
+ `minSize`. */
16841
+ "end-min"?: (HelixSplitter["endMin"]) | undefined;
16842
+ /** The least the end pane keeps, in the units `min` takes: a percentage, or
16843
+ a CSS length such as `16rem` resolved against the splitter's box. The
16844
+ divider stops that far from the end, whatever `max` allows, so `min` and
16845
+ `end-min` hold a minimum for each pane, as Zag's panels each take
16846
+ `minSize`. */
16847
+ endMin?: (HelixSplitter["endMin"]) | undefined;
16680
16848
  /** The divider's name, read by screen readers.
16681
16849
 
16682
16850
  An `aria-label` or `aria-labelledby` on the host names the divider too,
@@ -19095,6 +19263,18 @@ imperatively later, and nothing is hydrating by then.
19095
19263
 
19096
19264
  Here rather than on each control. */
19097
19265
  name?: (HelixTimePicker["name"]) | undefined;
19266
+ /** What each time in the list shows: a function given the time as `HH:mm`,
19267
+ or `HH:mm:ss` with `seconds`, and the time as the row writes it, that
19268
+ returns text, an element or a Lit template.
19269
+
19270
+ For the seats left at a time, or a caption under it, as React Aria's
19271
+ `ListBoxItem` takes children. Content with `slot="start"`, `slot="end"`
19272
+ or `slot="description"` goes to that slot of the row, and a description
19273
+ is read after the time. The row is still named by the written time, and
19274
+ typeahead still finds it by that. Return the written time with your
19275
+ content where it should still show. A property only, there being no way
19276
+ to write a function in markup. The wheels draw their own figures. */
19277
+ timeContent?: (HelixTimePicker["timeContent"]) | undefined;
19098
19278
  /** The value as a `Date` on 1 January 1970 UTC, or `null` while there is no time.
19099
19279
 
19100
19280
  The platform's own pair on `<input type="time">`, epoch day included: a time
@@ -19182,6 +19362,13 @@ they run down it. */
19182
19362
  orientation?: (HelixTimeline["orientation"]) | undefined;
19183
19363
  /** Accessible name for the timeline, for people who reach it out of context. */
19184
19364
  label?: (HelixTimeline["label"]) | undefined;
19365
+ /** Marks the timeline as busy fetching more entries, and draws an entry
19366
+ after the last that says so. */
19367
+ loading?: (HelixTimeline["loading"]) | undefined;
19368
+ /** The text of the entry drawn while `loading` is set, where the `loading` slot is empty. */
19369
+ "loading-label"?: (HelixTimeline["loadingLabel"]) | undefined;
19370
+ /** The text of the entry drawn while `loading` is set, where the `loading` slot is empty. */
19371
+ loadingLabel?: (HelixTimeline["loadingLabel"]) | undefined;
19185
19372
  };
19186
19373
 
19187
19374
  export type HelixTimelineVueEvents = {};
@@ -21098,12 +21285,18 @@ export type HelixVirtualListElementEvent<E = Event> = TypedEvent<
21098
21285
  /** `helix-before-change` event type */
21099
21286
  export type HelixVirtualListHelixBeforeChangeElementEvent =
21100
21287
  HelixVirtualListElementEvent<HelixBeforeChangeEvent>;
21288
+ /** `helix-before-reorder` event type */
21289
+ export type HelixVirtualListHelixBeforeReorderElementEvent =
21290
+ HelixVirtualListElementEvent<HelixBeforeReorderEvent>;
21101
21291
  /** `helix-load-more` event type */
21102
21292
  export type HelixVirtualListHelixLoadMoreElementEvent =
21103
21293
  HelixVirtualListElementEvent<HelixLoadMoreEvent>;
21104
21294
  /** `helix-range-change` event type */
21105
21295
  export type HelixVirtualListHelixRangeChangeElementEvent =
21106
21296
  HelixVirtualListElementEvent<HelixRangeChangeEvent>;
21297
+ /** `helix-reorder` event type */
21298
+ export type HelixVirtualListHelixReorderElementEvent =
21299
+ HelixVirtualListElementEvent<HelixReorderEvent>;
21107
21300
 
21108
21301
  export type HelixVirtualListVueProps = {
21109
21302
  /** How many items a line holds. One, the default, is a list; more lays the
@@ -21183,6 +21376,13 @@ and scrolls it sideways: Left and Right move between items, the other
21183
21376
  way round on a right-to-left page, and `estimate` is an item's width. A
21184
21377
  grid always runs down. */
21185
21378
  orientation?: (HelixVirtualList["orientation"]) | undefined;
21379
+ /** Lets a reader move items, once `@fusion.dev/helix/virtual-list/reorder`
21380
+ (or `@fusion.dev/helix-headless/virtual-list/reorder`) is imported: Alt
21381
+ with an arrow moves the row the keys are on, and a pointer drags a row.
21382
+ The list moves no item itself: you move your `items` on `helix-reorder`.
21383
+ Without that import it does nothing, so a list that never moves items
21384
+ carries none of the code. A list of one column, without sections. */
21385
+ reorderable?: (HelixVirtualList["reorderable"]) | undefined;
21186
21386
  /** The field of each item that names its section, as a key or a path of
21187
21387
  keys. Set, the items are drawn in sections: a header, then the items, in
21188
21388
  an element with the `group` role that the header names. A section starts
@@ -21248,10 +21448,14 @@ export type HelixVirtualListVueEvents = {
21248
21448
  change: HelixVirtualListElementEvent;
21249
21449
  /** Fired before a press or a key changes which items are selected, with the `value` it would leave. Cancelable. */
21250
21450
  "helix-before-change": HelixVirtualListHelixBeforeChangeElementEvent;
21451
+ /** Fired when an item is dropped at a new place, in a `reorderable` list with `@fusion.dev/helix/virtual-list/reorder` imported, with every key in the new order. Cancelable: cancel it to keep the item where it is. */
21452
+ "helix-before-reorder": HelixVirtualListHelixBeforeReorderElementEvent;
21251
21453
  /** Fired when a reader comes within one screen of the last item, once for each length of the set. */
21252
21454
  "helix-load-more": HelixVirtualListHelixLoadMoreElementEvent;
21253
21455
  /** Fired when the items on screen change, with the new `first` and `last`, which `range` also holds. */
21254
21456
  "helix-range-change": HelixVirtualListHelixRangeChangeElementEvent;
21457
+ /** Fired after `helix-before-reorder` when nobody canceled it. Set `items` to the order in `keys`. Cancelable: cancel it to say the move did not happen. */
21458
+ "helix-reorder": HelixVirtualListHelixReorderElementEvent;
21255
21459
  };
21256
21460
 
21257
21461
  export type CustomCssProperties = {
@@ -22761,6 +22965,8 @@ export type CustomCssProperties = {
22761
22965
  "--orb-ground"?: (string) | undefined;
22762
22966
  /** The diameter. Overrides `size`. */
22763
22967
  "--orb-size"?: (string) | undefined;
22968
+ /** How fast the dots move, as a multiple of each state's own tempo. Defaults to `1`. */
22969
+ "--orb-speed"?: (string) | undefined;
22764
22970
  /** The color of the heading in the `heading` slot. */
22765
22971
  "--outline-heading-color"?: (string) | undefined;
22766
22972
  /** How far each level is inset from the one above. */
@@ -22971,10 +23177,16 @@ export type CustomCssProperties = {
22971
23177
  "--sandbox-separator-color"?: (string) | undefined;
22972
23178
  /** Fill behind the source. */
22973
23179
  "--sandbox-source-background-color"?: (string) | undefined;
23180
+ /** Fill behind a matched bracket, under `match-brackets`. Defaults to `--helix-color-accent-subtle`. */
23181
+ "--sandbox-source-bracket-color"?: (string) | undefined;
22974
23182
  /** Color of a `callable` run, under `tokenize`. Defaults to `--helix-color-syntax-callable`. */
22975
23183
  "--sandbox-source-callable-color"?: (string) | undefined;
22976
23184
  /** Color of a `comment` run, under `tokenize`. Defaults to `--helix-color-syntax-comment`. */
22977
23185
  "--sandbox-source-comment-color"?: (string) | undefined;
23186
+ /** Width of the edge of the list of completions, under `complete`. Defaults to `--helix-border-floating`. */
23187
+ "--sandbox-source-completions-border-width"?: (string) | undefined;
23188
+ /** Shadow under the list of completions, under `complete`. Defaults to `--helix-shadow-floating`. */
23189
+ "--sandbox-source-completions-shadow"?: (string) | undefined;
22978
23190
  /** Color of a `constant` run, under `tokenize`. Defaults to `--helix-color-syntax-constant`. */
22979
23191
  "--sandbox-source-constant-color"?: (string) | undefined;
22980
23192
  /** Color of an `invalid` run, under `tokenize`. Defaults to `--helix-color-syntax-invalid`. */
@@ -23729,6 +23941,24 @@ export type CustomCssProperties = {
23729
23941
  "--virtual-list-block-size"?: (string) | undefined;
23730
23942
  /** How faint a row `disabled-keys` names is drawn. */
23731
23943
  "--virtual-list-disabled-opacity"?: (string) | undefined;
23944
+ /** The fill behind the copy of a row a pointer drags, in a `reorderable` list with `@fusion.dev/helix/virtual-list/reorder` imported. */
23945
+ "--virtual-list-drag-preview-background-color"?: (string) | undefined;
23946
+ /** The color of the edge around the copy of a row a pointer drags. */
23947
+ "--virtual-list-drag-preview-border-color"?: (string) | undefined;
23948
+ /** The width of the edge around the copy of a row a pointer drags. None by default, where the shadow lifts it. */
23949
+ "--virtual-list-drag-preview-border-width"?: (string) | undefined;
23950
+ /** The opacity of the copy of a row a pointer drags. */
23951
+ "--virtual-list-drag-preview-opacity"?: (string) | undefined;
23952
+ /** The corner radius of the copy of a row a pointer drags. */
23953
+ "--virtual-list-drag-preview-radius"?: (string) | undefined;
23954
+ /** The shadow that raises the copy of a row a pointer drags over the page. */
23955
+ "--virtual-list-drag-preview-shadow"?: (string) | undefined;
23956
+ /** The opacity of a row being dragged, in a `reorderable` list with `@fusion.dev/helix/virtual-list/reorder` imported. */
23957
+ "--virtual-list-dragging-opacity"?: (string) | undefined;
23958
+ /** The color of the line where a dragged row would land. */
23959
+ "--virtual-list-drop-indicator-color"?: (string) | undefined;
23960
+ /** The thickness of the line where a dragged row would land. */
23961
+ "--virtual-list-drop-indicator-size"?: (string) | undefined;
23732
23962
  /** The color of the text in the row shown when there are no items. */
23733
23963
  "--virtual-list-empty-color"?: (string) | undefined;
23734
23964
  /** The space around the text in the row shown when there are no items. */
@@ -24317,7 +24547,7 @@ export interface WcToolkitVueGlobalComponents {
24317
24547
  HelixOptionSeparatorVueProps,
24318
24548
  HelixOptionSeparatorVueEvents
24319
24549
  >;
24320
- /** A cloud of dots drawn to a canvas, with one shape per state: - 'connecting' and 'thinking': the same leaning sash, differing in how agitated it is. - 'waiting' and 'done': the same settled ball at different tempos. - 'fetching': a globe with a light moving around it. - 'listening': a closed sphere with a ripple crossing it. - 'working': a ring. Every state is the same banded grid with different parameters. Changing state interpolates the parameters, so every frame in between is a complete shape. A small change gets less time than a large one, such as a sash becoming a ring. The outline changes first, so the light starts orbiting only after the shape is round. The cloud does not rotate, and all movement happens inside it. The exception is the light, which travels because a ring of evenly spaced dots looks the same when rotated, so a turning state needs something fixed passing over it. Colors come from '--orb-color' and '--orb-ground'. Each dot's color is mixed toward the ground color by its depth, so depth holds when the theme changes. The animation stops when the orb is off screen or in a background tab. With 'prefers-reduced-motion', it draws one still frame. The orb is styled only and has behavior, which the tier split does not otherwise allow. Its role, name and busy state follow 'state', unless 'announce' makes it a status region, and the rest is drawing dots to a canvas, so there is no structure to restyle. For a drawing of your own, the headless 'Loader' holds the same busy progress bar and its name. Each state is also a custom state, such as ':state(thinking)' or ':state(done)', so a page can style what sits around an orb by what it shows, whether the state was written as an attribute or set from script. */
24550
+ /** A cloud of dots drawn to a canvas, with one shape per state: - 'connecting' and 'thinking': the same leaning sash, differing in how agitated it is. - 'waiting' and 'done': the same settled ball at different tempos. - 'fetching': a globe with a light moving around it. - 'listening': a closed sphere with a ripple crossing it. - 'working': a ring. Every state is the same banded grid with different parameters. Changing state interpolates the parameters, so every frame in between is a complete shape. A small change gets less time than a large one, such as a sash becoming a ring. The outline changes first, so the light starts orbiting only after the shape is round. The cloud does not rotate, and all movement happens inside it. The exception is the light, which travels because a ring of evenly spaced dots looks the same when rotated, so a turning state needs something fixed passing over it. Colors come from '--orb-color' and '--orb-ground'. Each dot's color is mixed toward the ground color by its depth, so depth holds when the theme changes. The animation stops when the orb is off screen or in a background tab. With 'prefers-reduced-motion', it draws one still frame. The orb is styled only and has behavior, which the tier split does not otherwise allow. Its role, name and busy state follow 'state', unless 'announce' makes it a status region, and the rest is drawing dots to a canvas. **A shape of your own goes in the default slot**, such as an SVG, an image, or an animation. The orb draws it over its box in place of the dots and stops drawing them, and keeps its role, name, busy state and custom states, so your stylesheet can change what you slotted by state, such as 'helix-orb:state(working) svg { animation-duration: 1s }'. What you slot is for the eye: a screen reader hears the orb's name. '--orb-speed' scales how fast the dots move, so '0.5' is a calmer orb at half the tempo. Each state is also a custom state, such as ':state(thinking)' or ':state(done)', so a page can style what sits around an orb by what it shows, whether the state was written as an attribute or set from script. */
24321
24551
  "helix-orb": DefineCustomElement<
24322
24552
  HelixOrb,
24323
24553
  HelixOrbVueProps,
@@ -24395,19 +24625,19 @@ export interface WcToolkitVueGlobalComponents {
24395
24625
  HelixRatingVueProps,
24396
24626
  HelixRatingVueEvents
24397
24627
  >;
24398
- /** A sandboxed '<iframe>' that loads 'src', a document you provide. That document imports what the examples need, listens for a render message, and writes the markup into itself. **Without 'src', the frame loads a built-in document**, so a sandbox renders with nothing to host. It runs HTML, CSS, and scripts, and reports the console, uncaught errors, its height, and presses as a frame on 'servePreview' does. It defines no element, so an example that uses Helix components needs a 'src' that imports them. **'imports' lets an example import packages by name** in the built-in document, as an import map: each name maps to the address of an ES module, such as '{"canvas-confetti": "https://esm.sh/canvas-confetti@1.9.3"}', and 'import confetti from 'canvas-confetti'' in the 'js' pane then loads it. A CDN that serves npm packages as modules, such as esm.sh or jsDelivr's '+esm', gives every package an address. A new map loads the document again, since a browser reads one only as a document starts. A 'src' document declares its own. **Examples render in a frame**, so an example's styles and scripts do not affect the page around the sandbox, and 'position: fixed' stays inside the pane. The frame starts empty, with its own stylesheets and its own custom element registry, so 'src' must load the styles and components the examples use. **The source is untrusted, and the frame keeps it isolated.** The frame uses 'sandbox="allow-scripts"' and never 'allow-same-origin'. Together, the two let a document on the same origin remove its own sandbox, which is the same as having none. **A preview says where it is.** It is ':state(loading)' from the moment it has a 'src' until that document can take the example, and again through 'reload()'. It is ':state(failed)' once the example throws an error it does not catch, until the next source is sent, which a frame on 'servePreview' reports. A page draws its own spinner or message from either, such as a sibling shown by 'helix-sandbox-preview:state(failed) + .message'. **A failed preview shows the error over the example**, in the 'error' part, until the next source is sent. The terminal says it too, so the part is not announced. Hide it with '::part(error) { display: none }' where the page draws its own. **'controls' draws two buttons in the preview's corner**: one reloads the frame's document, as 'reload()' does, and one opens the example in a new tab, as 'open()' does. The tab runs it in a frame sandboxed as this one is. */
24628
+ /** A sandboxed '<iframe>' that loads 'src', a document you provide. That document imports what the examples need, listens for a render message, and writes the markup into itself. **Without 'src', the frame loads a built-in document**, so a sandbox renders with nothing to host. It runs HTML, CSS, and scripts, and reports the console, uncaught errors, its height, and presses as a frame on 'servePreview' does. It defines no element, so an example that uses Helix components needs a 'src' that imports them. **'imports' lets an example import packages by name** in the built-in document, as an import map: each name maps to the address of an ES module, such as '{"canvas-confetti": "https://esm.sh/canvas-confetti@1.9.3"}', and 'import confetti from 'canvas-confetti'' in the 'js' pane then loads it. A CDN that serves npm packages as modules, such as esm.sh or jsDelivr's '+esm', gives every package an address. A new map loads the document again, since a browser reads one only as a document starts. A 'src' document declares its own. **'dependencies' names packages by version instead**, as a 'package.json' does: '{"canvas-confetti": "^1.9"}' loads 'canvas-confetti' and the paths under it from 'cdn', 'https://esm.sh/' by default, at the version or range given. An address in 'imports' wins over a package of the same name. **'modules' holds files the example imports by a relative path**: each path, such as 'utils.js', to its source, and 'import { add } from './utils.js'' in the 'js' pane or in another module loads it. A sandbox writes each pane named for a module file here. **Examples render in a frame**, so an example's styles and scripts do not affect the page around the sandbox, and 'position: fixed' stays inside the pane. The frame starts empty, with its own stylesheets and its own custom element registry, so 'src' must load the styles and components the examples use. **The source is untrusted, and the frame keeps it isolated.** The frame uses 'sandbox="allow-scripts"' and never 'allow-same-origin'. Together, the two let a document on the same origin remove its own sandbox, which is the same as having none. **A preview says where it is.** It is ':state(loading)' from the moment it has a 'src' until that document can take the example, and again through 'reload()'. It is ':state(failed)' once the example throws an error it does not catch, until the next source is sent, which a frame on 'servePreview' reports. A page draws its own spinner or message from either, such as a sibling shown by 'helix-sandbox-preview:state(failed) + .message'. **A failed preview shows the error over the example**, in the 'error' part, until the next source is sent. The terminal says it too, so the part is not announced, and it is the frame's description while it shows, so a screen reader reads it with the frame. Hide it with '::part(error) { display: none }' where the page draws its own. **'controls' draws two buttons in the preview's corner**: one reloads the frame's document, as 'reload()' does, and one opens the example in a new tab, as 'open()' does. The tab runs it in a frame sandboxed as this one is. */
24399
24629
  "helix-sandbox-preview": DefineCustomElement<
24400
24630
  HelixSandboxPreview,
24401
24631
  HelixSandboxPreviewVueProps,
24402
24632
  HelixSandboxPreviewVueEvents
24403
24633
  >;
24404
- /** A source pane dispatches 'helix-before-edit', which bubbles, and the sandbox passes the value to the preview slotted into it. The source pane and the preview do not reference each other, so you can replace either one or use it alone. The preview runs an edit once typing has rested for 'preview-delay', 300 milliseconds by default, so a word typed reloads it once. A pane's text when the sandbox starts reaches it at once. The event carries the pane's 'name', so one sandbox can hold several panes. 'html' sets the preview's markup, 'css' sets its stylesheet, and 'js' sets a script that runs as a module after the markup. The sandbox ignores a pane with any other name, so that pane can show content without changing the preview. **The dividers are two nested 'helix-splitter' elements**, which handle the pointer, the keyboard, and the corner. The inner splitter holds the panes and the outer one holds the panel, so the panel spans the full width. **Several source panes are files**, one shown at a time under a row of tabs, each named by the pane's 'label' or, without one, its 'name'. 'file' holds the 'name' of the pane shown. The tabs are a tab list: the arrow keys move between them and show each pane, and 'Home' and 'End' go to the first and the last. Choosing one sends 'helix-before-change' with the pane's 'name', which you can cancel, and 'change' once 'file' holds it. The panes not shown carry 'hidden'. One pane draws no tabs. **Any editor can be the source pane**: an element in the 'source' slot with a 'name' that dispatches 'helix-before-edit' with its text, which bubbles. A wrapper around CodeMirror or Monaco sends one on each change and is a pane like 'helix-sandbox-source', and the sandbox reads its 'value' to seed the preview. Dispatch 'helix-caret' from it too for the status bar's position. Sandbox is styled only and has behavior, as 'Aura' is. Its behavior is the hand-off from a source pane to a preview frame, which works with any pane that sends 'helix-before-edit', and what it draws is the layout around them: dividers, file tabs, and a panel. A page that wants another look slots its own panes and keeps the hand-off, so there is nothing for a headless version to hold. A development build warns about a source pane with no 'label' and no 'name', whose file tab would have no words. On a focused divider, the arrow keys move it, and 'Home' and 'End' move it to its ends. 'Enter' on the panes divider shuts the lead pane, and pressed again it opens the pane where it was. 'Enter' on the panel divider shuts the panel to 'panel-collapsed-size', and pressed again it opens the panel to its last height. */
24634
+ /** A source pane dispatches 'helix-before-edit', which bubbles, and the sandbox passes the value to the preview slotted into it. The source pane and the preview do not reference each other, so you can replace either one or use it alone. The preview runs an edit once typing has rested for 'preview-delay', 300 milliseconds by default, so a word typed reloads it once. A pane's text when the sandbox starts reaches it at once. The event carries the pane's 'name', so one sandbox can hold several panes. The names the sandbox writes into its previews: - 'html' sets the preview's markup. - 'css' sets its stylesheet. - 'js' sets a script that runs as a module after the markup. - A module file name ending in '.js' or '.mjs', such as 'utils.js', is a module the other scripts import by its path, './utils.js'. - 'package.json' sets the npm packages the scripts import by name, from its 'dependencies', which load from the preview's 'cdn'. The sandbox ignores a pane with any other name, so that pane can show content without changing the preview. **The sandbox is ':state(modified)' while a source pane holds an edit**, and that pane's file tab is also 'file-modified' and described as modified to a screen reader. 'reset()' puts every pane back to the source it was given. **The dividers are two nested 'helix-splitter' elements**, which handle the pointer, the keyboard, and the corner. The inner splitter holds the panes and the outer one holds the panel, so the panel spans the full width. **Several source panes are files**, one shown at a time under a row of tabs, each named by the pane's 'label' or, without one, its 'name'. 'file' holds the 'name' of the pane shown. The tabs are a tab list: the arrow keys move between them and show each pane, and 'Home' and 'End' go to the first and the last. Choosing one sends 'helix-before-change' with the pane's 'name', which you can cancel, and 'change' once 'file' holds it. The panes not shown carry 'hidden'. One pane draws no tabs. **Any editor can be the source pane**: an element in the 'source' slot with a 'name' that dispatches 'helix-before-edit' with its text, which bubbles. A wrapper around CodeMirror or Monaco sends one on each change and is a pane like 'helix-sandbox-source', and the sandbox reads its 'value' to seed the preview. Dispatch 'helix-caret' from it too for the status bar's position. Sandbox is styled only and has behavior, as 'Aura' is. Its behavior is the hand-off from a source pane to a preview frame, which works with any pane that sends 'helix-before-edit', and what it draws is the layout around them: dividers, file tabs, and a panel. A page that wants another look slots its own panes and keeps the hand-off, so there is nothing for a headless version to hold. A development build warns about a source pane with no 'label' and no 'name', whose file tab would have no words. On a focused divider, the arrow keys move it, and 'Home' and 'End' move it to its ends. 'Enter' on the panes divider shuts the lead pane, and pressed again it opens the pane where it was. 'Enter' on the panel divider shuts the panel to 'panel-collapsed-size', and pressed again it opens the panel to its last height. */
24405
24635
  "helix-sandbox": DefineCustomElement<
24406
24636
  HelixSandbox,
24407
24637
  HelixSandboxVueProps,
24408
24638
  HelixSandboxVueEvents
24409
24639
  >;
24410
- /** A real '<textarea>', so undo, selection, spellcheck suppression, mobile keyboards, and screen reader support come from the platform. Tab inserts two spaces, so you can indent code. To move focus out of the field, press Escape and then Tab. Shift+Tab moves focus back as it does anywhere else. The field's description says so to a screen reader. **'tokenize' colors the source** with a highlighter you bring, such as one built on Lezer, Prism or Shiki. It is a function from the source to runs of text, each with an optional kind, and the pane draws the runs under a transparent field, so typing, selection and undo stay the textarea's. The kinds are 'callable', 'comment', 'constant', 'invalid', 'keyword', 'name', 'string' and 'tag', each colored by the '--helix-color-syntax-*' token of its name and a hook of its own, such as '--sandbox-source-keyword-color'. A run of any other kind is drawn in the field's own color. Every run with a kind is a 'token' part, and carries its kind as 'data-kind'. A 'tokenize' that throws leaves the source drawn plain and the field editable, and the error is reported to the page as an uncaught one. **'line-numbers' numbers each line** in a gutter beside the source. A line that wraps keeps one number. The numbers are drawn, and hidden from screen readers, which read the field. Enter keeps the indentation of the line it breaks, and the new line is undone with the next undo as typing is. **The source can be written inside the pane** where 'value' is not set: its text, or the markup of a '<template>' it holds, without the indentation the page gave it. Markup goes in a template so the page does not render it or run its scripts. Text inside the pane is read once, when it connects. */
24640
+ /** A real '<textarea>', so undo, selection, spellcheck suppression, mobile keyboards, and screen reader support come from the platform. Tab inserts two spaces, so you can indent code. To move focus out of the field, press Escape and then Tab. Shift+Tab moves focus back as it does anywhere else. The field's description says so to a screen reader. **'tokenize' colors the source** with a highlighter you bring, such as one built on Lezer, Prism or Shiki. It is a function from the source to runs of text, each with an optional kind, and the pane draws the runs under a transparent field, so typing, selection and undo stay the textarea's. The kinds are 'callable', 'comment', 'constant', 'invalid', 'keyword', 'name', 'string' and 'tag', each colored by the '--helix-color-syntax-*' token of its name and a hook of its own, such as '--sandbox-source-keyword-color'. A run of any other kind is drawn in the field's own color. Every run with a kind is a 'token' part, and carries its kind as 'data-kind'. A 'tokenize' that throws leaves the source drawn plain and the field editable, and the error is reported to the page as an uncaught one. **'line-numbers' numbers each line** in a gutter beside the source. A line that wraps keeps one number. The numbers are drawn, and hidden from screen readers, which read the field. Enter keeps the indentation of the line it breaks, one level deeper after an opening bracket, and puts the closing bracket of an empty pair on a line of its own. The new line is undone with the next undo as typing is. **The editing keys are CodeMirror's.** Tab with text selected indents every line the selection touches. 'Mod+]' indents the lines and 'Mod+[' outdents them, and 'Mod+/' comments them out or back in: '//' in a 'js' pane, and one block comment in an 'html' or 'css' pane. 'Mod' is Command on a Mac and Control elsewhere. Each is one step of undo. **'close-brackets' closes brackets and quotes** as you type them: '(', '[', '{' and the three quotes. A closing character typed before the same one steps over it, Backspace between an empty pair deletes both, and a bracket typed with text selected goes around the text. **'match-brackets' marks the bracket beside the caret and its pair** while the field has focus, each a 'bracket' part, and a bracket with no pair is also 'bracket-unmatched'. A bracket in a string or a comment is not matched, where 'tokenize' says which runs those are. **'complete' offers completions as you type**: the words of the source and of 'completions' that start with the word before the caret. They open in a list under the word. The arrow keys move through it, Enter or Tab takes the word, and Escape closes it. 'Ctrl+Space' opens it where it is closed. The field is 'aria-autocomplete="list"' and points at the word chosen with 'aria-activedescendant', so a screen reader reads each one. Give 'completions' the names a page uses, such as the tag and attribute names of a custom elements manifest through 'manifestWords'. **The pane is ':state(modified)' while its source differs from the source it was given**, the first 'value' or the last one set from outside. 'reset()' puts that source back, as an edit the sandbox passes on to its preview. **The source can be written inside the pane** where 'value' is not set: its text, or the markup of a '<template>' it holds, without the indentation the page gave it. Markup goes in a template so the page does not render it or run its scripts. Text inside the pane is read once, when it connects. */
24411
24641
  "helix-sandbox-source": DefineCustomElement<
24412
24642
  HelixSandboxSource,
24413
24643
  HelixSandboxSourceVueProps,
package/types/words.d.ts CHANGED
@@ -351,6 +351,12 @@ declare module '@fusion.dev/helix-core' {
351
351
  * English: `Options`
352
352
  */
353
353
  listLabel: Message
354
+ /**
355
+ * What the panel says while `loading` is set and the list holds no notes.
356
+ *
357
+ * English: `Loading notes`
358
+ */
359
+ loadingLabel: Message
354
360
  /**
355
361
  * The words shown in place of the drawing while `loading` is set and
356
362
  * there are no readings yet, and the fallback of the `loading` slot.
@@ -2178,6 +2184,13 @@ declare module '@fusion.dev/helix-core' {
2178
2184
  * English: `Files`
2179
2185
  */
2180
2186
  filesLabel: Message
2187
+ /**
2188
+ * The description of a file tab whose pane holds an edit, read by screen
2189
+ * readers after the file's name.
2190
+ *
2191
+ * English: `Modified`
2192
+ */
2193
+ modifiedLabel: Message
2181
2194
  /**
2182
2195
  * The name of the panel's divider, read by screen readers.
2183
2196
  *
@@ -2217,6 +2230,12 @@ declare module '@fusion.dev/helix-core' {
2217
2230
  reloadLabel: Message
2218
2231
  }
2219
2232
  'helix-sandbox-source': {
2233
+ /**
2234
+ * The name of the list of completions, read by screen readers.
2235
+ *
2236
+ * English: `Completions`
2237
+ */
2238
+ completionsLabel: Message
2220
2239
  /**
2221
2240
  * The editable region's name, read by screen readers.
2222
2241
  *
@@ -2573,6 +2592,14 @@ declare module '@fusion.dev/helix-core' {
2573
2592
  */
2574
2593
  valueMissingMessage: Message
2575
2594
  }
2595
+ 'helix-timeline': {
2596
+ /**
2597
+ * The text of the entry drawn while `loading` is set, where the `loading` slot is empty.
2598
+ *
2599
+ * English: `Loading more`
2600
+ */
2601
+ loadingLabel: Message
2602
+ }
2576
2603
  'helix-timeline-item': {
2577
2604
  /**
2578
2605
  * What a screen reader hears for an entry that is `pending`.