@fusion.dev/helix 0.169.0 → 0.171.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.
@@ -33154,7 +33154,7 @@
33154
33154
  "text": "void"
33155
33155
  }
33156
33156
  },
33157
- "description": "Makes the log a tab stop while it scrolls, and takes the stop away when it\ndoes not.\n\n**A reader on a keyboard scrolls the history from the log itself.**\nChromium and Firefox make a box that scrolls focusable on their own, and\nSafari does not, so there the arrow keys could not reach a long history.\nA log that fits is no stop at all, so Tab goes straight to the composer.",
33157
+ "description": "Makes the log a tab stop while it holds a turn or scrolls, and takes the\nstop away from an empty log.\n\n**A reader on a keyboard scrolls the history from the log itself.**\nChromium and Firefox make a box that scrolls focusable on their own, and\nSafari does not, so there the arrow keys could not reach a long history.\n\n**And it is where the turns are entered.** Page Down from the log goes to\nthe turn at the top of the view. A log that fits was no stop at all, so a\nconversation whose turns held no control had no way into them by keyboard.",
33158
33158
  "inheritedFrom": {
33159
33159
  "name": "HelixHeadlessChat",
33160
33160
  "module": "src/chat/root/chat-root.ts"
@@ -33492,6 +33492,35 @@
33492
33492
  "module": "src/chat/root/chat-root.ts"
33493
33493
  }
33494
33494
  },
33495
+ {
33496
+ "kind": "field",
33497
+ "name": "warnedMixed",
33498
+ "type": {
33499
+ "text": "boolean"
33500
+ },
33501
+ "privacy": "private",
33502
+ "default": "false",
33503
+ "description": "Whether the chat has said it was given turns both ways.",
33504
+ "inheritedFrom": {
33505
+ "name": "HelixHeadlessChat",
33506
+ "module": "src/chat/root/chat-root.ts"
33507
+ }
33508
+ },
33509
+ {
33510
+ "kind": "method",
33511
+ "name": "warnMixed",
33512
+ "privacy": "private",
33513
+ "return": {
33514
+ "type": {
33515
+ "text": "void"
33516
+ }
33517
+ },
33518
+ "description": "Says once that turns arrived both as children and as `turns`.",
33519
+ "inheritedFrom": {
33520
+ "name": "HelixHeadlessChat",
33521
+ "module": "src/chat/root/chat-root.ts"
33522
+ }
33523
+ },
33495
33524
  {
33496
33525
  "kind": "method",
33497
33526
  "name": "follow",
@@ -33591,6 +33620,29 @@
33591
33620
  "module": "src/chat/root/chat-root.ts"
33592
33621
  }
33593
33622
  },
33623
+ {
33624
+ "kind": "method",
33625
+ "name": "showTurn",
33626
+ "privacy": "private",
33627
+ "return": {
33628
+ "type": {
33629
+ "text": "Promise<void>"
33630
+ }
33631
+ },
33632
+ "parameters": [
33633
+ {
33634
+ "name": "at",
33635
+ "type": {
33636
+ "text": "number"
33637
+ }
33638
+ }
33639
+ ],
33640
+ "description": "Draws turn `at` where it is windowed and not drawn, and visits it.",
33641
+ "inheritedFrom": {
33642
+ "name": "HelixHeadlessChat",
33643
+ "module": "src/chat/root/chat-root.ts"
33644
+ }
33645
+ },
33594
33646
  {
33595
33647
  "kind": "field",
33596
33648
  "name": "stop",
@@ -33627,6 +33679,42 @@
33627
33679
  "module": "src/chat/root/chat-root.ts"
33628
33680
  }
33629
33681
  },
33682
+ {
33683
+ "kind": "field",
33684
+ "name": "placed",
33685
+ "type": {
33686
+ "text": "number | undefined"
33687
+ },
33688
+ "privacy": "private",
33689
+ "description": "Where this element last scrolled the transcript to show a turn, until the scroll that follows.",
33690
+ "inheritedFrom": {
33691
+ "name": "HelixHeadlessChat",
33692
+ "module": "src/chat/root/chat-root.ts"
33693
+ }
33694
+ },
33695
+ {
33696
+ "kind": "method",
33697
+ "name": "reveal",
33698
+ "privacy": "private",
33699
+ "return": {
33700
+ "type": {
33701
+ "text": "void"
33702
+ }
33703
+ },
33704
+ "parameters": [
33705
+ {
33706
+ "name": "turn",
33707
+ "type": {
33708
+ "text": "HTMLElement"
33709
+ }
33710
+ }
33711
+ ],
33712
+ "description": "Scrolls the transcript, and nothing around it, until `turn` is in view,\nand notes the turn at the top as the reader's place. A pinned transcript\nis left at the bottom, which is where whoever holds the pin wants it.\n\nThe edge nearest the turn moves the least, and a turn taller than the\ntranscript is shown from its start.",
33713
+ "inheritedFrom": {
33714
+ "name": "HelixHeadlessChat",
33715
+ "module": "src/chat/root/chat-root.ts"
33716
+ }
33717
+ },
33630
33718
  {
33631
33719
  "kind": "method",
33632
33720
  "name": "firstControlIn",
@@ -34461,6 +34549,38 @@
34461
34549
  }
34462
34550
  ],
34463
34551
  "cssStates": [
34552
+ {
34553
+ "description": "The conversation has no turns.",
34554
+ "name": "empty",
34555
+ "inheritedFrom": {
34556
+ "name": "HelixHeadlessChat",
34557
+ "module": "src/chat/root/chat-root.ts"
34558
+ }
34559
+ },
34560
+ {
34561
+ "description": "Older turns are loading: `history` is `loading`.",
34562
+ "name": "loading",
34563
+ "inheritedFrom": {
34564
+ "name": "HelixHeadlessChat",
34565
+ "module": "src/chat/root/chat-root.ts"
34566
+ }
34567
+ },
34568
+ {
34569
+ "description": "The transcript follows its newest turn.",
34570
+ "name": "pinned",
34571
+ "inheritedFrom": {
34572
+ "name": "HelixHeadlessChat",
34573
+ "module": "src/chat/root/chat-root.ts"
34574
+ }
34575
+ },
34576
+ {
34577
+ "description": "`typing` names someone on the other side.",
34578
+ "name": "typing",
34579
+ "inheritedFrom": {
34580
+ "name": "HelixHeadlessChat",
34581
+ "module": "src/chat/root/chat-root.ts"
34582
+ }
34583
+ },
34464
34584
  {
34465
34585
  "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
34466
34586
  "name": "settled",
@@ -38842,6 +38962,20 @@
38842
38962
  "module": "src/code-block/root/code-block-root.ts"
38843
38963
  }
38844
38964
  },
38965
+ {
38966
+ "kind": "field",
38967
+ "name": "addedLines",
38968
+ "type": {
38969
+ "text": "string"
38970
+ },
38971
+ "default": "''",
38972
+ "description": "The lines to mark as inserted, as numbers and ranges counted from 1, such\nas `3-4`. Drawn as `mark-lines` is, in the added color. Not for a diff.",
38973
+ "attribute": "added-lines",
38974
+ "inheritedFrom": {
38975
+ "name": "HelixHeadlessCodeBlock",
38976
+ "module": "src/code-block/root/code-block-root.ts"
38977
+ }
38978
+ },
38845
38979
  {
38846
38980
  "kind": "field",
38847
38981
  "name": "codeLabel",
@@ -39134,6 +39268,20 @@
39134
39268
  "module": "src/code-block/root/code-block-root.ts"
39135
39269
  }
39136
39270
  },
39271
+ {
39272
+ "kind": "field",
39273
+ "name": "removedLines",
39274
+ "type": {
39275
+ "text": "string"
39276
+ },
39277
+ "default": "''",
39278
+ "description": "The lines to mark as deleted, as numbers and ranges counted from 1. Drawn\nas `mark-lines` is, in the removed color. Not for a diff.",
39279
+ "attribute": "removed-lines",
39280
+ "inheritedFrom": {
39281
+ "name": "HelixHeadlessCodeBlock",
39282
+ "module": "src/code-block/root/code-block-root.ts"
39283
+ }
39284
+ },
39137
39285
  {
39138
39286
  "kind": "field",
39139
39287
  "name": "showUnchangedLabel",
@@ -39673,6 +39821,10 @@
39673
39821
  {
39674
39822
  "name": "drawn",
39675
39823
  "default": "name"
39824
+ },
39825
+ {
39826
+ "name": "own",
39827
+ "default": "false"
39676
39828
  }
39677
39829
  ],
39678
39830
  "description": "The name with the copy button beside it, or nothing when there is no name.\n\n**The button is in the header wherever there is one**, because beside the\ncode it stands over the block and the block has to make room for it. A\ndiff cannot: its washes run to the edge, so the button stood on the hunk\nline and the line under it. In the header it is over nothing.\n\n**No name draws no header**, unless the page put a control in `actions`\nor asked for the wrap button. A bar holding the copy button alone turned a\n`Usage` section of one-line imports into a run of empty strips. The button\nthen stands beside the code, in room the block keeps for it.",
@@ -40356,6 +40508,22 @@
40356
40508
  "name": "HelixHeadlessCodeBlock",
40357
40509
  "module": "src/code-block/root/code-block-root.ts"
40358
40510
  }
40511
+ },
40512
+ {
40513
+ "description": "An icon on the button that shows every line of a capped block, before its words.",
40514
+ "name": "expand-icon",
40515
+ "inheritedFrom": {
40516
+ "name": "HelixHeadlessCodeBlock",
40517
+ "module": "src/code-block/root/code-block-root.ts"
40518
+ }
40519
+ },
40520
+ {
40521
+ "description": "The block's name in the header, such as a file icon beside the file name. Replaces `label` and `language` there, and draws the header.",
40522
+ "name": "label",
40523
+ "inheritedFrom": {
40524
+ "name": "HelixHeadlessCodeBlock",
40525
+ "module": "src/code-block/root/code-block-root.ts"
40526
+ }
40359
40527
  }
40360
40528
  ],
40361
40529
  "cssParts": [
@@ -40624,13 +40792,29 @@
40624
40792
  }
40625
40793
  },
40626
40794
  {
40627
- "description": "The band behind a run of lines `mark-lines` names. The block writes where the run is laid out into `--code-block-mark-start`, `--code-block-mark-size`, and `--code-block-mark-inline-size` on it. Hidden from the accessibility tree.",
40795
+ "description": "The band behind a run of lines `mark-lines`, `added-lines` or `removed-lines` names. The block writes where the run is laid out into `--code-block-mark-start`, `--code-block-mark-size`, and `--code-block-mark-inline-size` on it. Hidden from the accessibility tree.",
40628
40796
  "name": "mark",
40629
40797
  "inheritedFrom": {
40630
40798
  "name": "HelixHeadlessCodeBlock",
40631
40799
  "module": "src/code-block/root/code-block-root.ts"
40632
40800
  }
40633
40801
  },
40802
+ {
40803
+ "description": "The band behind a run of lines `added-lines` names. Applied with `mark`.",
40804
+ "name": "mark-added",
40805
+ "inheritedFrom": {
40806
+ "name": "HelixHeadlessCodeBlock",
40807
+ "module": "src/code-block/root/code-block-root.ts"
40808
+ }
40809
+ },
40810
+ {
40811
+ "description": "The band behind a run of lines `removed-lines` names. Applied with `mark`.",
40812
+ "name": "mark-removed",
40813
+ "inheritedFrom": {
40814
+ "name": "HelixHeadlessCodeBlock",
40815
+ "module": "src/code-block/root/code-block-root.ts"
40816
+ }
40817
+ },
40634
40818
  {
40635
40819
  "description": "In a diff, the `+`, `-`, or space that starts a line.",
40636
40820
  "name": "marker",
@@ -40697,6 +40881,19 @@
40697
40881
  }
40698
40882
  ],
40699
40883
  "attributes": [
40884
+ {
40885
+ "name": "added-lines",
40886
+ "type": {
40887
+ "text": "string"
40888
+ },
40889
+ "default": "''",
40890
+ "description": "The lines to mark as inserted, as numbers and ranges counted from 1, such\nas `3-4`. Drawn as `mark-lines` is, in the added color. Not for a diff.",
40891
+ "fieldName": "addedLines",
40892
+ "inheritedFrom": {
40893
+ "name": "HelixHeadlessCodeBlock",
40894
+ "module": "src/code-block/root/code-block-root.ts"
40895
+ }
40896
+ },
40700
40897
  {
40701
40898
  "name": "code-label",
40702
40899
  "type": {
@@ -40929,6 +41126,19 @@
40929
41126
  "module": "src/code-block/root/code-block-root.ts"
40930
41127
  }
40931
41128
  },
41129
+ {
41130
+ "name": "removed-lines",
41131
+ "type": {
41132
+ "text": "string"
41133
+ },
41134
+ "default": "''",
41135
+ "description": "The lines to mark as deleted, as numbers and ranges counted from 1. Drawn\nas `mark-lines` is, in the removed color. Not for a diff.",
41136
+ "fieldName": "removedLines",
41137
+ "inheritedFrom": {
41138
+ "name": "HelixHeadlessCodeBlock",
41139
+ "module": "src/code-block/root/code-block-root.ts"
41140
+ }
41141
+ },
40932
41142
  {
40933
41143
  "name": "show-unchanged-label",
40934
41144
  "type": {
@@ -45021,7 +45231,7 @@
45021
45231
  "text": "void"
45022
45232
  }
45023
45233
  },
45024
- "description": "Returns the control to its `defaultValue`, or to its `value` attribute\nwhere there is no `default-value`.\n\nBoth halves are dropped, the consumer's and the control's, because a\nreset means the form is as it was served. Clearing only the internal one\nwould leave a control that had been written to stuck at that value.",
45234
+ "description": "A reset ends any typing and takes back text that was not a color, so the\nfield shows the color the reset put back.",
45025
45235
  "inheritedFrom": {
45026
45236
  "name": "HelixFormElement",
45027
45237
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -45595,7 +45805,7 @@
45595
45805
  "text": "boolean"
45596
45806
  },
45597
45807
  "default": "false",
45598
- "description": "Requires a color before the form can submit.\n\n**A color is exactly as requirable as a date**, which is the comparison\nthat settles it: this element extends `HelixFormElement`, carries `name`\nand reports its value, so a consumer writing `<helix-headless-color-picker\nname=\"brand\" required>` inside a form has every reason to expect the form\nto refuse an empty one. Its two siblings in the same composition position,\nDate Picker and Time Picker, both check it.\n\nWritten out rather than taken from `MixinField`, for the reason those two\nrecord: the mixin brings a label, a hint and a feedback region, and this is\na panel composed *into* a field that already has all three, so taking it\nwould give one control two of each. What is left is the validity call and\nthe anchor the browser points its bubble at.\n\n**Text that is not a color is bad input**, so a form does not submit\n`#00` from a half-typed value. The picker draws no message of its own, so\nreporting it as each keystroke arrives shows nothing until the form asks;\nColor Input shows its own message against the field the reader typed\ninto.",
45808
+ "description": "Requires a color before the form can submit.\n\n**A color is exactly as requirable as a date**, which is the comparison\nthat settles it: this element extends `HelixFormElement`, carries `name`\nand reports its value, so a consumer writing `<helix-headless-color-picker\nname=\"brand\" required>` inside a form has every reason to expect the form\nto refuse an empty one. Its two siblings in the same composition position,\nDate Picker and Time Picker, both check it.\n\nWritten out rather than taken from `MixinField`, for the reason those two\nrecord: the mixin brings a label, a hint and a feedback region, and this is\na panel composed *into* a field that already has all three, so taking it\nwould give one control two of each. What is left is the validity call and\nthe anchor the browser points its bubble at.\n\n**Text that is not a color is bad input**, so a form does not submit\n`#00` from a half-typed value. The picker marks it, and says\n`badInputMessage` under itself, once the reader leaves the value field or\npresses Enter, and a missing color once the reader has committed one or a\nform has refused the picker. Color Input shows its own message against the\nfield the reader typed into.",
45599
45809
  "attribute": "required",
45600
45810
  "reflects": true,
45601
45811
  "inheritedFrom": {
@@ -45832,6 +46042,48 @@
45832
46042
  "module": "src/color-picker/root/color-picker-root.ts"
45833
46043
  }
45834
46044
  },
46045
+ {
46046
+ "kind": "field",
46047
+ "name": "typing",
46048
+ "type": {
46049
+ "text": "boolean"
46050
+ },
46051
+ "privacy": "private",
46052
+ "default": "false",
46053
+ "description": "Whether the reader is typing into the value field, between the first\nkeystroke and the `change` that ends it.\n\nHalf-typed text is rarely a color: `#00ff00` passes through `#0` and\n`#00ff0` on the way. So text that is not a color is refused once the\nreader leaves the field or presses Enter, and not on every keystroke.",
46054
+ "inheritedFrom": {
46055
+ "name": "HelixHeadlessColorPicker",
46056
+ "module": "src/color-picker/root/color-picker-root.ts"
46057
+ }
46058
+ },
46059
+ {
46060
+ "kind": "field",
46061
+ "name": "draft",
46062
+ "type": {
46063
+ "text": "string | undefined"
46064
+ },
46065
+ "privacy": "private",
46066
+ "default": "undefined",
46067
+ "description": "Text in the value field that is not a color, or undefined while the field\nholds the value.\n\n**Kept in the field and out of the value**, as a native number field keeps\n\"12e\": the text stays where the reader can correct it, the value stays the\nlast color, and the picker reports `badInput` until the text is a color or\nthe value moves. Measured before this: typed \"nonsense\" became the value,\nso a form read `brand=nonsense` and the square had no color to show.",
46068
+ "inheritedFrom": {
46069
+ "name": "HelixHeadlessColorPicker",
46070
+ "module": "src/color-picker/root/color-picker-root.ts"
46071
+ }
46072
+ },
46073
+ {
46074
+ "kind": "field",
46075
+ "name": "said",
46076
+ "type": {
46077
+ "text": "string"
46078
+ },
46079
+ "privacy": "private",
46080
+ "description": "The line under the picker: `feedback`, or, where the picker is marked by\nits own validation, what is wrong.",
46081
+ "readonly": true,
46082
+ "inheritedFrom": {
46083
+ "name": "HelixHeadlessColorPicker",
46084
+ "module": "src/color-picker/root/color-picker-root.ts"
46085
+ }
46086
+ },
45835
46087
  {
45836
46088
  "kind": "field",
45837
46089
  "name": "dragging",
@@ -47634,7 +47886,7 @@
47634
47886
  "text": "boolean"
47635
47887
  },
47636
47888
  "default": "false",
47637
- "description": "Requires a color before the form can submit.\n\n**A color is exactly as requirable as a date**, which is the comparison\nthat settles it: this element extends `HelixFormElement`, carries `name`\nand reports its value, so a consumer writing `<helix-headless-color-picker\nname=\"brand\" required>` inside a form has every reason to expect the form\nto refuse an empty one. Its two siblings in the same composition position,\nDate Picker and Time Picker, both check it.\n\nWritten out rather than taken from `MixinField`, for the reason those two\nrecord: the mixin brings a label, a hint and a feedback region, and this is\na panel composed *into* a field that already has all three, so taking it\nwould give one control two of each. What is left is the validity call and\nthe anchor the browser points its bubble at.\n\n**Text that is not a color is bad input**, so a form does not submit\n`#00` from a half-typed value. The picker draws no message of its own, so\nreporting it as each keystroke arrives shows nothing until the form asks;\nColor Input shows its own message against the field the reader typed\ninto.",
47889
+ "description": "Requires a color before the form can submit.\n\n**A color is exactly as requirable as a date**, which is the comparison\nthat settles it: this element extends `HelixFormElement`, carries `name`\nand reports its value, so a consumer writing `<helix-headless-color-picker\nname=\"brand\" required>` inside a form has every reason to expect the form\nto refuse an empty one. Its two siblings in the same composition position,\nDate Picker and Time Picker, both check it.\n\nWritten out rather than taken from `MixinField`, for the reason those two\nrecord: the mixin brings a label, a hint and a feedback region, and this is\na panel composed *into* a field that already has all three, so taking it\nwould give one control two of each. What is left is the validity call and\nthe anchor the browser points its bubble at.\n\n**Text that is not a color is bad input**, so a form does not submit\n`#00` from a half-typed value. The picker marks it, and says\n`badInputMessage` under itself, once the reader leaves the value field or\npresses Enter, and a missing color once the reader has committed one or a\nform has refused the picker. Color Input shows its own message against the\nfield the reader typed into.",
47638
47890
  "fieldName": "required",
47639
47891
  "inheritedFrom": {
47640
47892
  "name": "HelixHeadlessColorPicker",
@@ -47963,7 +48215,7 @@
47963
48215
  }
47964
48216
  },
47965
48217
  {
47966
- "description": "The message under the picker, while `feedback` is set.",
48218
+ "description": "The message under the picker: `feedback`, or what is wrong with the answer once the picker is marked invalid.",
47967
48219
  "name": "feedback",
47968
48220
  "inheritedFrom": {
47969
48221
  "name": "HelixHeadlessColorPicker",
@@ -49526,7 +49778,7 @@
49526
49778
  "text": "boolean"
49527
49779
  },
49528
49780
  "default": "false",
49529
- "description": "Whether more than one option can be chosen.\n\nThe list already does the work: `value` comes apart on commas, a press\ntoggles rather than replaces, and the arrows move without choosing. What\nthis adds is the tags, and keeping the panel open between picks.\n\nA comma is therefore not available inside an option's value, which is the\nlistbox's contract and not this element's to change.\n\n**The list is told, and the field is not.** `aria-multiselectable` belongs\nto `listbox`, `grid`, `tree` and `tablist`, and `combobox` dropped it in\nARIA 1.2; the list sets it on itself through `ElementInternals`, where a\nreader on the field hears it through `aria-controls`. This element wrote it\nonto its own `role=\"combobox\"` input as well, which an audit reports as a\nproperty the role does not support and no spec here ever asserted: the one\nthat covers this says in as many words that telling the list is what this\nelement is responsible for.",
49781
+ "description": "Whether more than one option can be chosen.\n\nThe list already does the work: `value` is the chosen values joined with\ncommas, a press toggles rather than replaces, and the arrows move without\nchoosing. What this adds is the tags, and keeping the panel open between\npicks.\n\nAn option's value may hold a comma, and it is read as one value, as\n`Select` and `Listbox` read it. So may an answer the reader created.\n\n**The list is told, and the field is not.** `aria-multiselectable` belongs\nto `listbox`, `grid`, `tree` and `tablist`, and `combobox` dropped it in\nARIA 1.2; the list sets it on itself through `ElementInternals`, where a\nreader on the field hears it through `aria-controls`. This element wrote it\nonto its own `role=\"combobox\"` input as well, which an audit reports as a\nproperty the role does not support and no spec here ever asserted: the one\nthat covers this says in as many words that telling the list is what this\nelement is responsible for.",
49530
49782
  "attribute": "multiple",
49531
49783
  "inheritedFrom": {
49532
49784
  "name": "HelixHeadlessCombobox",
@@ -49833,8 +50085,20 @@
49833
50085
  "text": "string[]"
49834
50086
  },
49835
50087
  "privacy": "private",
49836
- "description": "The values chosen, in the order they were chosen.",
50088
+ "description": "The values chosen, in the order they were chosen, read against the\noptions' values and the answers created here, so a value that holds a\ncomma is one value. See `chosenValues`.\n\nMeasured before this: choosing `Paris, France` drew two tags, \"Paris\" and\n\"France\", and the form received two entries.",
50089
+ "readonly": true,
50090
+ "inheritedFrom": {
50091
+ "name": "HelixHeadlessCombobox",
50092
+ "module": "src/combobox/root/combobox-root.ts"
50093
+ }
50094
+ },
50095
+ {
50096
+ "kind": "field",
50097
+ "name": "created",
50098
+ "privacy": "private",
49837
50099
  "readonly": true,
50100
+ "default": "new Set<string>()",
50101
+ "description": "The answers created here, which no option holds, kept so their commas read as theirs.",
49838
50102
  "inheritedFrom": {
49839
50103
  "name": "HelixHeadlessCombobox",
49840
50104
  "module": "src/combobox/root/combobox-root.ts"
@@ -51662,7 +51926,7 @@
51662
51926
  "text": "boolean"
51663
51927
  },
51664
51928
  "default": "false",
51665
- "description": "Whether more than one option can be chosen.\n\nThe list already does the work: `value` comes apart on commas, a press\ntoggles rather than replaces, and the arrows move without choosing. What\nthis adds is the tags, and keeping the panel open between picks.\n\nA comma is therefore not available inside an option's value, which is the\nlistbox's contract and not this element's to change.\n\n**The list is told, and the field is not.** `aria-multiselectable` belongs\nto `listbox`, `grid`, `tree` and `tablist`, and `combobox` dropped it in\nARIA 1.2; the list sets it on itself through `ElementInternals`, where a\nreader on the field hears it through `aria-controls`. This element wrote it\nonto its own `role=\"combobox\"` input as well, which an audit reports as a\nproperty the role does not support and no spec here ever asserted: the one\nthat covers this says in as many words that telling the list is what this\nelement is responsible for.",
51929
+ "description": "Whether more than one option can be chosen.\n\nThe list already does the work: `value` is the chosen values joined with\ncommas, a press toggles rather than replaces, and the arrows move without\nchoosing. What this adds is the tags, and keeping the panel open between\npicks.\n\nAn option's value may hold a comma, and it is read as one value, as\n`Select` and `Listbox` read it. So may an answer the reader created.\n\n**The list is told, and the field is not.** `aria-multiselectable` belongs\nto `listbox`, `grid`, `tree` and `tablist`, and `combobox` dropped it in\nARIA 1.2; the list sets it on itself through `ElementInternals`, where a\nreader on the field hears it through `aria-controls`. This element wrote it\nonto its own `role=\"combobox\"` input as well, which an audit reports as a\nproperty the role does not support and no spec here ever asserted: the one\nthat covers this says in as many words that telling the list is what this\nelement is responsible for.",
51666
51930
  "fieldName": "multiple",
51667
51931
  "inheritedFrom": {
51668
51932
  "name": "HelixHeadlessCombobox",
@@ -52595,6 +52859,19 @@
52595
52859
  "module": "src/command/root/command-root.ts"
52596
52860
  }
52597
52861
  },
52862
+ {
52863
+ "kind": "field",
52864
+ "name": "homeEnd",
52865
+ "type": {
52866
+ "text": "'list' | undefined"
52867
+ },
52868
+ "description": "Where Home and End go from the filter field.\n\nAbsent, they move the caret, as APG's combobox has them. `list` moves the\nhighlight to the first or the last command, as React Aria's Autocomplete\ndoes, and Shift with either still selects the text.",
52869
+ "attribute": "home-end",
52870
+ "inheritedFrom": {
52871
+ "name": "HelixHeadlessCommand",
52872
+ "module": "src/command/root/command-root.ts"
52873
+ }
52874
+ },
52598
52875
  {
52599
52876
  "kind": "field",
52600
52877
  "name": "hotkey",
@@ -52654,6 +52931,20 @@
52654
52931
  "module": "src/command/root/command-root.ts"
52655
52932
  }
52656
52933
  },
52934
+ {
52935
+ "kind": "field",
52936
+ "name": "layout",
52937
+ "type": {
52938
+ "text": "'grid' | 'stack' | undefined"
52939
+ },
52940
+ "description": "How the commands are laid out, as Listbox's `layout`: `grid` draws them in\nrows and columns, for a palette of icons or emoji, and the arrow keys\nfollow the rows and the columns. Absent is one command under another.",
52941
+ "attribute": "layout",
52942
+ "reflects": true,
52943
+ "inheritedFrom": {
52944
+ "name": "HelixHeadlessCommand",
52945
+ "module": "src/command/root/command-root.ts"
52946
+ }
52947
+ },
52657
52948
  {
52658
52949
  "kind": "field",
52659
52950
  "name": "loadError",
@@ -53473,6 +53764,18 @@
53473
53764
  "module": "src/command/root/command-root.ts"
53474
53765
  }
53475
53766
  },
53767
+ {
53768
+ "name": "home-end",
53769
+ "type": {
53770
+ "text": "'list' | undefined"
53771
+ },
53772
+ "description": "Where Home and End go from the filter field.\n\nAbsent, they move the caret, as APG's combobox has them. `list` moves the\nhighlight to the first or the last command, as React Aria's Autocomplete\ndoes, and Shift with either still selects the text.",
53773
+ "fieldName": "homeEnd",
53774
+ "inheritedFrom": {
53775
+ "name": "HelixHeadlessCommand",
53776
+ "module": "src/command/root/command-root.ts"
53777
+ }
53778
+ },
53476
53779
  {
53477
53780
  "name": "hotkey",
53478
53781
  "type": {
@@ -53512,6 +53815,18 @@
53512
53815
  "module": "src/command/root/command-root.ts"
53513
53816
  }
53514
53817
  },
53818
+ {
53819
+ "name": "layout",
53820
+ "type": {
53821
+ "text": "'grid' | 'stack' | undefined"
53822
+ },
53823
+ "description": "How the commands are laid out, as Listbox's `layout`: `grid` draws them in\nrows and columns, for a palette of icons or emoji, and the arrow keys\nfollow the rows and the columns. Absent is one command under another.",
53824
+ "fieldName": "layout",
53825
+ "inheritedFrom": {
53826
+ "name": "HelixHeadlessCommand",
53827
+ "module": "src/command/root/command-root.ts"
53828
+ }
53829
+ },
53515
53830
  {
53516
53831
  "name": "load-error",
53517
53832
  "type": {
@@ -56093,7 +56408,7 @@
56093
56408
  "declarations": [
56094
56409
  {
56095
56410
  "kind": "class",
56096
- "description": "Rows have hairline rules between them and no fill, and the headings are set\napart by weight and color. Helix shows depth with a single border and no\nelevation, and a header band would be elevation.\n\nThe grid scrolls in its own box, and the toolbar and footer sit outside it,\nso the search field stays in place when the columns scroll sideways.\n\n`windowed` draws only the rows in view, for a result too long to lay out at\nonce, and the headings stay in place while the rows scroll. It works with or\nwithout `paginated` and with either `mode`, so a page or a chunk from a\nserver can be windowed.\n\n**The cell values do not server-render.** Use `helix-table` when the content\nhas to be in the served HTML.",
56411
+ "description": "Rows have hairline rules between them and no fill, and the headings are set\napart by weight and color. Helix shows depth with a single border and no\nelevation, and a header band would be elevation.\n\nThe grid scrolls in its own box, and the toolbar and footer sit outside it,\nso the search field stays in place when the columns scroll sideways.\n\n`windowed` draws only the rows in view, for a result too long to lay out at\nonce, and the headings stay in place while the rows scroll. It works with or\nwithout `paginated` and with either `mode`, so a page or a chunk from a\nserver can be windowed.\n\n**Write the first page as rows, so the served HTML carries the values.**\nWrite it under the columns as `helix-table-row` and `helix-table-cell`\nelements. `@fusion.dev/helix-styles/helix.css` lays them out as the table\ndraws them before it upgrades, and the table shows them until `rows` holds a\nrow.",
56097
56412
  "name": "HelixDataTable",
56098
56413
  "cssProperties": [
56099
56414
  {
@@ -56701,7 +57016,7 @@
56701
57016
  ],
56702
57017
  "slots": [
56703
57018
  {
56704
- "description": "The columns, as `TableColumn` elements.",
57019
+ "description": "The columns, as `TableColumn` elements, and the first page served as `TableRow` elements, which show until `rows` holds a row.",
56705
57020
  "name": "",
56706
57021
  "inheritedFrom": {
56707
57022
  "name": "HelixHeadlessDataTable",
@@ -57954,6 +58269,48 @@
57954
58269
  "module": "src/data-table/root/data-table-root.ts"
57955
58270
  }
57956
58271
  },
58272
+ {
58273
+ "kind": "field",
58274
+ "name": "drewRows",
58275
+ "type": {
58276
+ "text": "boolean"
58277
+ },
58278
+ "privacy": "private",
58279
+ "default": "false",
58280
+ "description": "Whether `rows` has held a row, after which the rows the page served are\nnever shown again, whatever `rows` holds later.",
58281
+ "inheritedFrom": {
58282
+ "name": "HelixHeadlessDataTable",
58283
+ "module": "src/data-table/root/data-table-root.ts"
58284
+ }
58285
+ },
58286
+ {
58287
+ "kind": "field",
58288
+ "name": "serving",
58289
+ "type": {
58290
+ "text": "boolean"
58291
+ },
58292
+ "privacy": "private",
58293
+ "default": "false",
58294
+ "description": "Whether the last render showed the rows the page served.",
58295
+ "inheritedFrom": {
58296
+ "name": "HelixHeadlessDataTable",
58297
+ "module": "src/data-table/root/data-table-root.ts"
58298
+ }
58299
+ },
58300
+ {
58301
+ "kind": "field",
58302
+ "name": "servedLast",
58303
+ "type": {
58304
+ "text": "boolean"
58305
+ },
58306
+ "privacy": "private",
58307
+ "default": "false",
58308
+ "description": "Whether the render before the last showed them, so the change is checked once.",
58309
+ "inheritedFrom": {
58310
+ "name": "HelixHeadlessDataTable",
58311
+ "module": "src/data-table/root/data-table-root.ts"
58312
+ }
58313
+ },
57957
58314
  {
57958
58315
  "kind": "field",
57959
58316
  "name": "typeahead",
@@ -58575,6 +58932,35 @@
58575
58932
  "module": "src/data-table/root/data-table-root.ts"
58576
58933
  }
58577
58934
  },
58935
+ {
58936
+ "kind": "field",
58937
+ "name": "servedRows",
58938
+ "type": {
58939
+ "text": "Element[]"
58940
+ },
58941
+ "privacy": "private",
58942
+ "description": "The rows the page served: the first page, written as `TableRow` children.\n\nBy tag, because the page may not register `Table`, and an element that is\nnot defined has no `isTableRow` to find it by.",
58943
+ "readonly": true,
58944
+ "inheritedFrom": {
58945
+ "name": "HelixHeadlessDataTable",
58946
+ "module": "src/data-table/root/data-table-root.ts"
58947
+ }
58948
+ },
58949
+ {
58950
+ "kind": "method",
58951
+ "name": "serves",
58952
+ "privacy": "private",
58953
+ "return": {
58954
+ "type": {
58955
+ "text": "boolean"
58956
+ }
58957
+ },
58958
+ "description": "Whether this render shows the rows the page served in place of drawing its\nown.\n\n**Until `rows` has held a row, and never after.** A server cannot tell\nwhether the page served any, and a render hydrating what one sent has to\nrender the same, so both show the slot that would hold them. In a browser\nthe rows are shown while `rows` is empty, which is how a framework that\nrenders on a server leaves the property until it hydrates. Once the table\nhas drawn its own rows it stops showing the served ones and never removes\nthem: they are the page's markup, and a framework that rendered them owns\nthem.",
58959
+ "inheritedFrom": {
58960
+ "name": "HelixHeadlessDataTable",
58961
+ "module": "src/data-table/root/data-table-root.ts"
58962
+ }
58963
+ },
58578
58964
  {
58579
58965
  "kind": "field",
58580
58966
  "name": "sourceKnown",
@@ -60554,6 +60940,10 @@
60554
60940
  "description": "Rows selected by their key, and columns you can reorder and resize.",
60555
60941
  "slug": "selecting-and-arranging"
60556
60942
  },
60943
+ {
60944
+ "description": "The first page written out as rows, so the HTML carries the values before the table draws its own.",
60945
+ "slug": "serving-the-first-page"
60946
+ },
60557
60947
  {
60558
60948
  "description": "A summary of the rows shown and a page size menu, on either side of the built-in pagination.",
60559
60949
  "min": 520,
@@ -82945,6 +83335,19 @@
82945
83335
  "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
82946
83336
  }
82947
83337
  },
83338
+ {
83339
+ "kind": "field",
83340
+ "name": "dismissTabStop",
83341
+ "type": {
83342
+ "text": "boolean"
83343
+ },
83344
+ "default": "true",
83345
+ "description": "Whether the remove button is a tab stop of its own.\n\n`FilterInput` writes `false` on the chips in its `tags` slot: the field's\ntext is its one tab stop, and the arrow keys move from the text to the\nchips, as in a `multiple` Combobox. No attribute: it is coordination\nbetween elements, as `Tag.dismissTabStop` is.",
83346
+ "inheritedFrom": {
83347
+ "name": "HelixHeadlessFilterChip",
83348
+ "module": "src/filter-input/chip/filter-chip.ts"
83349
+ }
83350
+ },
82948
83351
  {
82949
83352
  "kind": "field",
82950
83353
  "name": "label",
@@ -85632,6 +86035,20 @@
85632
86035
  }
85633
86036
  ],
85634
86037
  "members": [
86038
+ {
86039
+ "kind": "field",
86040
+ "name": "tier",
86041
+ "type": {
86042
+ "text": "string"
86043
+ },
86044
+ "static": true,
86045
+ "default": "'helix-'",
86046
+ "description": "The prefix this tier registers its elements under.\n\n**A component that renders another renders its own tier's version of it**,\nso `helix-headless-pagination-size` composes `helix-headless-select` and\n`helix-pagination-size` composes `helix-select`. One template says\n`${this.tag('select')}` and each tier answers with its own name.\n\n**The public tag may not be the composed one, in either tier.** Using it\ncosts three things: the name means two different things depending on what a\nconsumer imported, the headless tier composes an element it does not ship,\nand the composition cannot be tested there at all, because there is no\n`helix-select` on that tier to test it against.\n\n**A prefix rather than an override per composition**, which was the first\nplan and does not compile. An override re-renders the fragment from the\nsubclass, and the fragment reads members the base keeps private:\n`PaginationSize` alone would have had to widen `options`, `current` and\n`handleChange` to `protected` so a subclass could say the same thing again.\nSixteen families of that is a lot of encapsulation spent on saying one\nword differently.",
86047
+ "inheritedFrom": {
86048
+ "name": "HelixElement",
86049
+ "module": "src/helix-element/helix-element.ts"
86050
+ }
86051
+ },
85635
86052
  {
85636
86053
  "kind": "field",
85637
86054
  "name": "defaultOpen",
@@ -86579,6 +86996,20 @@
86579
86996
  "module": "src/filter-input/root/filter-input-root.ts"
86580
86997
  }
86581
86998
  },
86999
+ {
87000
+ "kind": "field",
87001
+ "name": "chips",
87002
+ "type": {
87003
+ "text": "boolean"
87004
+ },
87005
+ "default": "false",
87006
+ "description": "Whether the field keeps a `FilterChip` for each filter in its `tags` slot,\nfrom the `helix-facet` events it hears.\n\nOff, you build the chips, which is what you do when your own model holds\nthe filters. On, a filter typed, picked, or changed adds or updates the\nchip for its field, one with no values takes it away (unless its\ncomparison takes none, such as \"is empty\"), and removing the chip clears\nthe filter. A `helix-facet` you cancel changes no chip.\n\nThe chips are elements the field adds to its own children, so leave this\noff where a framework renders those children and would remove them.",
87007
+ "attribute": "chips",
87008
+ "inheritedFrom": {
87009
+ "name": "HelixHeadlessFilterInput",
87010
+ "module": "src/filter-input/root/filter-input-root.ts"
87011
+ }
87012
+ },
86582
87013
  {
86583
87014
  "kind": "field",
86584
87015
  "name": "clearable",
@@ -86624,6 +87055,52 @@
86624
87055
  "module": "src/filter-input/root/filter-input-root.ts"
86625
87056
  }
86626
87057
  },
87058
+ {
87059
+ "kind": "field",
87060
+ "name": "loading",
87061
+ "type": {
87062
+ "text": "boolean"
87063
+ },
87064
+ "default": "false",
87065
+ "description": "Whether the suggestions are still loading, such as while a request for the\nvalues of a typed key is out.\n\nThe panel opens on `loading-text`, or the `loading` slot, while the field\nhas focus, and a screen reader hears it. Slot the options and clear this\nwhen they arrive.",
87066
+ "attribute": "loading",
87067
+ "reflects": true,
87068
+ "inheritedFrom": {
87069
+ "name": "HelixHeadlessFilterInput",
87070
+ "module": "src/filter-input/root/filter-input-root.ts"
87071
+ }
87072
+ },
87073
+ {
87074
+ "kind": "field",
87075
+ "name": "loadingText",
87076
+ "type": {
87077
+ "text": "string"
87078
+ },
87079
+ "default": "'Loading'",
87080
+ "description": "Text the panel shows while the suggestions load.",
87081
+ "attribute": "loading-text",
87082
+ "helix": {
87083
+ "words": true
87084
+ },
87085
+ "inheritedFrom": {
87086
+ "name": "HelixHeadlessFilterInput",
87087
+ "module": "src/filter-input/root/filter-input-root.ts"
87088
+ }
87089
+ },
87090
+ {
87091
+ "kind": "field",
87092
+ "name": "noResultsText",
87093
+ "type": {
87094
+ "text": "string"
87095
+ },
87096
+ "default": "''",
87097
+ "description": "Text the panel shows when `filter-suggestions` hides every suggestion, such\nas \"No matching filters\".\n\nEmpty, or no `no-results` slot, and the panel closes instead, as it does\nwhen it has nothing to offer.",
87098
+ "attribute": "no-results-text",
87099
+ "inheritedFrom": {
87100
+ "name": "HelixHeadlessFilterInput",
87101
+ "module": "src/filter-input/root/filter-input-root.ts"
87102
+ }
87103
+ },
86627
87104
  {
86628
87105
  "kind": "field",
86629
87106
  "name": "placeholder",
@@ -87099,6 +87576,40 @@
87099
87576
  "module": "src/filter-input/root/filter-input-root.ts"
87100
87577
  }
87101
87578
  },
87579
+ {
87580
+ "kind": "field",
87581
+ "name": "handleFacet",
87582
+ "privacy": "private",
87583
+ "readonly": true,
87584
+ "description": "Keeps the chip for a filter in step with it, under `chips`.\n\nAfter every listener has had its turn, so a consumer's `preventDefault()`\non the same event, on this element or above it, is read: `dispatchEvent`\nruns them all before the microtask does.",
87585
+ "inheritedFrom": {
87586
+ "name": "HelixHeadlessFilterInput",
87587
+ "module": "src/filter-input/root/filter-input-root.ts"
87588
+ }
87589
+ },
87590
+ {
87591
+ "kind": "method",
87592
+ "name": "drawChip",
87593
+ "privacy": "private",
87594
+ "return": {
87595
+ "type": {
87596
+ "text": "void"
87597
+ }
87598
+ },
87599
+ "parameters": [
87600
+ {
87601
+ "name": "facet",
87602
+ "type": {
87603
+ "text": "FacetDetail"
87604
+ }
87605
+ }
87606
+ ],
87607
+ "description": "Adds, updates or removes the chip for one filter. See `chips`.",
87608
+ "inheritedFrom": {
87609
+ "name": "HelixHeadlessFilterInput",
87610
+ "module": "src/filter-input/root/filter-input-root.ts"
87611
+ }
87612
+ },
87102
87613
  {
87103
87614
  "kind": "field",
87104
87615
  "name": "handleDismiss",
@@ -87199,6 +87710,20 @@
87199
87710
  "module": "src/filter-input/root/filter-input-root.ts"
87200
87711
  }
87201
87712
  },
87713
+ {
87714
+ "kind": "field",
87715
+ "name": "unmatched",
87716
+ "type": {
87717
+ "text": "boolean"
87718
+ },
87719
+ "privacy": "private",
87720
+ "description": "Whether `filter-suggestions` has hidden every suggestion there is, where a\n`no-results-text` or a `no-results` slot says so. The panel stays open on\nit, and `:state(no-results)` is on the host.",
87721
+ "readonly": true,
87722
+ "inheritedFrom": {
87723
+ "name": "HelixHeadlessFilterInput",
87724
+ "module": "src/filter-input/root/filter-input-root.ts"
87725
+ }
87726
+ },
87202
87727
  {
87203
87728
  "kind": "field",
87204
87729
  "name": "handleSuggestions",
@@ -87248,7 +87773,7 @@
87248
87773
  "name": "handleTokens",
87249
87774
  "privacy": "private",
87250
87775
  "readonly": true,
87251
- "description": "The row again, whenever what is in it changes.",
87776
+ "description": "The row again, whenever what is in it changes.\n\n**And the text is the field's one tab stop.** Each token's remove button\nwas a stop of its own, so Tab through a field with five filters took six\npresses. A `Tag` or `FilterChip` takes `dismissTabStop` for this, as the\ntags of a `multiple` Combobox do, and the arrow keys still reach every one.\nA token not yet defined is told once it is.",
87252
87777
  "inheritedFrom": {
87253
87778
  "name": "HelixHeadlessFilterInput",
87254
87779
  "module": "src/filter-input/root/filter-input-root.ts"
@@ -87789,20 +88314,6 @@
87789
88314
  "module": "src/helix-form-element/helix-form-element.ts"
87790
88315
  }
87791
88316
  },
87792
- {
87793
- "kind": "field",
87794
- "name": "tier",
87795
- "type": {
87796
- "text": "string"
87797
- },
87798
- "static": true,
87799
- "default": "'helix-headless-'",
87800
- "description": "The prefix this tier registers its elements under.\n\n**A component that renders another renders its own tier's version of it**,\nso `helix-headless-pagination-size` composes `helix-headless-select` and\n`helix-pagination-size` composes `helix-select`. One template says\n`${this.tag('select')}` and each tier answers with its own name.\n\n**The public tag may not be the composed one, in either tier.** Using it\ncosts three things: the name means two different things depending on what a\nconsumer imported, the headless tier composes an element it does not ship,\nand the composition cannot be tested there at all, because there is no\n`helix-select` on that tier to test it against.\n\n**A prefix rather than an override per composition**, which was the first\nplan and does not compile. An override re-renders the fragment from the\nsubclass, and the fragment reads members the base keeps private:\n`PaginationSize` alone would have had to widen `options`, `current` and\n`handleChange` to `protected` so a subclass could say the same thing again.\nSixteen families of that is a lot of encapsulation spent on saying one\nword differently.",
87801
- "inheritedFrom": {
87802
- "name": "HelixElement",
87803
- "module": "src/helix-element/helix-element.ts"
87804
- }
87805
- },
87806
88317
  {
87807
88318
  "kind": "method",
87808
88319
  "name": "tag",
@@ -88380,6 +88891,19 @@
88380
88891
  "module": "src/mixins/mixin-field/mixin-field.ts"
88381
88892
  }
88382
88893
  },
88894
+ {
88895
+ "name": "chips",
88896
+ "type": {
88897
+ "text": "boolean"
88898
+ },
88899
+ "default": "false",
88900
+ "description": "Whether the field keeps a `FilterChip` for each filter in its `tags` slot,\nfrom the `helix-facet` events it hears.\n\nOff, you build the chips, which is what you do when your own model holds\nthe filters. On, a filter typed, picked, or changed adds or updates the\nchip for its field, one with no values takes it away (unless its\ncomparison takes none, such as \"is empty\"), and removing the chip clears\nthe filter. A `helix-facet` you cancel changes no chip.\n\nThe chips are elements the field adds to its own children, so leave this\noff where a framework renders those children and would remove them.",
88901
+ "fieldName": "chips",
88902
+ "inheritedFrom": {
88903
+ "name": "HelixHeadlessFilterInput",
88904
+ "module": "src/filter-input/root/filter-input-root.ts"
88905
+ }
88906
+ },
88383
88907
  {
88384
88908
  "name": "clearable",
88385
88909
  "type": {
@@ -88419,6 +88943,45 @@
88419
88943
  "module": "src/filter-input/root/filter-input-root.ts"
88420
88944
  }
88421
88945
  },
88946
+ {
88947
+ "name": "loading",
88948
+ "type": {
88949
+ "text": "boolean"
88950
+ },
88951
+ "default": "false",
88952
+ "description": "Whether the suggestions are still loading, such as while a request for the\nvalues of a typed key is out.\n\nThe panel opens on `loading-text`, or the `loading` slot, while the field\nhas focus, and a screen reader hears it. Slot the options and clear this\nwhen they arrive.",
88953
+ "fieldName": "loading",
88954
+ "inheritedFrom": {
88955
+ "name": "HelixHeadlessFilterInput",
88956
+ "module": "src/filter-input/root/filter-input-root.ts"
88957
+ }
88958
+ },
88959
+ {
88960
+ "name": "loading-text",
88961
+ "type": {
88962
+ "text": "string"
88963
+ },
88964
+ "default": "'Loading'",
88965
+ "description": "Text the panel shows while the suggestions load.",
88966
+ "fieldName": "loadingText",
88967
+ "inheritedFrom": {
88968
+ "name": "HelixHeadlessFilterInput",
88969
+ "module": "src/filter-input/root/filter-input-root.ts"
88970
+ }
88971
+ },
88972
+ {
88973
+ "name": "no-results-text",
88974
+ "type": {
88975
+ "text": "string"
88976
+ },
88977
+ "default": "''",
88978
+ "description": "Text the panel shows when `filter-suggestions` hides every suggestion, such\nas \"No matching filters\".\n\nEmpty, or no `no-results` slot, and the panel closes instead, as it does\nwhen it has nothing to offer.",
88979
+ "fieldName": "noResultsText",
88980
+ "inheritedFrom": {
88981
+ "name": "HelixHeadlessFilterInput",
88982
+ "module": "src/filter-input/root/filter-input-root.ts"
88983
+ }
88984
+ },
88422
88985
  {
88423
88986
  "name": "placeholder",
88424
88987
  "type": {
@@ -88635,6 +89198,22 @@
88635
89198
  "module": "src/filter-input/root/filter-input-root.ts"
88636
89199
  }
88637
89200
  },
89201
+ {
89202
+ "description": "What the panel shows while `loading` is set, for content richer than `loading-text`.",
89203
+ "name": "loading",
89204
+ "inheritedFrom": {
89205
+ "name": "HelixHeadlessFilterInput",
89206
+ "module": "src/filter-input/root/filter-input-root.ts"
89207
+ }
89208
+ },
89209
+ {
89210
+ "description": "What the panel shows when `filter-suggestions` hides every suggestion, for content richer than `no-results-text`.",
89211
+ "name": "no-results",
89212
+ "inheritedFrom": {
89213
+ "name": "HelixHeadlessFilterInput",
89214
+ "module": "src/filter-input/root/filter-input-root.ts"
89215
+ }
89216
+ },
88638
89217
  {
88639
89218
  "description": "Content before the text, such as a search icon.",
88640
89219
  "name": "start",
@@ -88677,6 +89256,14 @@
88677
89256
  "module": "src/filter-input/root/filter-input-root.ts"
88678
89257
  }
88679
89258
  },
89259
+ {
89260
+ "description": "Shown in the panel when `filter-suggestions` hides every suggestion.",
89261
+ "name": "empty",
89262
+ "inheritedFrom": {
89263
+ "name": "HelixHeadlessFilterInput",
89264
+ "module": "src/filter-input/root/filter-input-root.ts"
89265
+ }
89266
+ },
88680
89267
  {
88681
89268
  "description": "The error message under the field.",
88682
89269
  "name": "feedback",
@@ -88725,6 +89312,14 @@
88725
89312
  "module": "src/filter-input/root/filter-input-root.ts"
88726
89313
  }
88727
89314
  },
89315
+ {
89316
+ "description": "Shown in the panel while the suggestions load.",
89317
+ "name": "loading",
89318
+ "inheritedFrom": {
89319
+ "name": "HelixHeadlessFilterInput",
89320
+ "module": "src/filter-input/root/filter-input-root.ts"
89321
+ }
89322
+ },
88728
89323
  {
88729
89324
  "description": "The count of tokens that did not fit. It is a `<button>` with `expandable` and a `<span>` without it.",
88730
89325
  "name": "rest",
@@ -88759,6 +89354,22 @@
88759
89354
  "module": "src/filter-input/root/filter-input-root.ts"
88760
89355
  }
88761
89356
  },
89357
+ {
89358
+ "description": "While `loading` is set.",
89359
+ "name": "loading",
89360
+ "inheritedFrom": {
89361
+ "name": "HelixHeadlessFilterInput",
89362
+ "module": "src/filter-input/root/filter-input-root.ts"
89363
+ }
89364
+ },
89365
+ {
89366
+ "description": "`filter-suggestions` hid every suggestion, and `no-results-text` or the `no-results` slot says so.",
89367
+ "name": "no-results",
89368
+ "inheritedFrom": {
89369
+ "name": "HelixHeadlessFilterInput",
89370
+ "module": "src/filter-input/root/filter-input-root.ts"
89371
+ }
89372
+ },
88762
89373
  {
88763
89374
  "description": "The suggestions are open.",
88764
89375
  "name": "open",
@@ -102907,6 +103518,52 @@
102907
103518
  "module": "src/input/root/input-root.ts"
102908
103519
  }
102909
103520
  },
103521
+ {
103522
+ "kind": "method",
103523
+ "name": "setRangeText",
103524
+ "return": {
103525
+ "type": {
103526
+ "text": "void"
103527
+ }
103528
+ },
103529
+ "parameters": [
103530
+ {
103531
+ "name": "replacement",
103532
+ "type": {
103533
+ "text": "string"
103534
+ }
103535
+ },
103536
+ {
103537
+ "name": "start",
103538
+ "optional": true,
103539
+ "type": {
103540
+ "text": "number"
103541
+ }
103542
+ },
103543
+ {
103544
+ "name": "end",
103545
+ "optional": true,
103546
+ "type": {
103547
+ "text": "number"
103548
+ }
103549
+ },
103550
+ {
103551
+ "name": "selectMode",
103552
+ "optional": true,
103553
+ "type": {
103554
+ "text": "SelectionMode"
103555
+ }
103556
+ }
103557
+ ],
103558
+ "description": "Replaces a range of the text, as the native method does: the selection\nwhere `start` and `end` are left out, and `selectMode` says what is\nselected after. It sends no event, as the native method sends none.",
103559
+ "type": {
103560
+ "text": "setRangeText(replacement: string, start?: number, end?: number, selectMode?: SelectionMode) => void"
103561
+ },
103562
+ "inheritedFrom": {
103563
+ "name": "HelixHeadlessInput",
103564
+ "module": "src/input/root/input-root.ts"
103565
+ }
103566
+ },
102910
103567
  {
102911
103568
  "kind": "method",
102912
103569
  "name": "setSelectionRange",
@@ -142845,7 +143502,7 @@
142845
143502
  "text": "string"
142846
143503
  },
142847
143504
  "default": "'Decrease'",
142848
- "description": "The name of the step down button, read by screen readers.",
143505
+ "description": "The name of the step down button, read by screen readers. The field's\nlabel follows it, so a reader hears \"Decrease Quantity\", as React Aria\nnames its steppers.",
142849
143506
  "attribute": "decrement-label",
142850
143507
  "helix": {
142851
143508
  "words": true
@@ -142875,7 +143532,7 @@
142875
143532
  "text": "string"
142876
143533
  },
142877
143534
  "default": "'Increase'",
142878
- "description": "The name of the step up button, read by screen readers.",
143535
+ "description": "The name of the step up button, read by screen readers. The field's\nlabel follows it, so a reader hears \"Increase Quantity\", as React Aria\nnames its steppers.",
142879
143536
  "attribute": "increment-label",
142880
143537
  "helix": {
142881
143538
  "words": true
@@ -143383,13 +144040,16 @@
143383
144040
  },
143384
144041
  "parameters": [
143385
144042
  {
143386
- "name": "large",
143387
- "default": "false"
144043
+ "name": "count",
144044
+ "default": "1",
144045
+ "type": {
144046
+ "text": "number | boolean"
144047
+ }
143388
144048
  }
143389
144049
  ],
143390
- "description": "Steps the value up, by `largeStep` steps when `large` is set.",
144050
+ "description": "Steps the value up by `step`, `count` times, as the native method and\n`Input.stepUp` do. `true` takes `largeStep` steps, as `PageUp` does.",
143391
144051
  "type": {
143392
- "text": "stepUp(large = false) => void"
144052
+ "text": "stepUp(count: number | boolean = 1) => void"
143393
144053
  },
143394
144054
  "inheritedFrom": {
143395
144055
  "name": "HelixHeadlessNumberInput",
@@ -143406,14 +144066,40 @@
143406
144066
  },
143407
144067
  "parameters": [
143408
144068
  {
143409
- "name": "large",
143410
- "default": "false"
144069
+ "name": "count",
144070
+ "default": "1",
144071
+ "type": {
144072
+ "text": "number | boolean"
144073
+ }
143411
144074
  }
143412
144075
  ],
143413
- "description": "Steps the value down, by `largeStep` steps when `large` is set.\n\nThe same path a press of the down arrow takes, so a consumer driving this\nfrom their own control gets the clamping and the announcement rather than\nhaving to repeat both.",
144076
+ "description": "Steps the value down by `step`, `count` times. `true` takes `largeStep`\nsteps, as `PageDown` does.\n\nThe same path a press of the down arrow takes, so a consumer driving this\nfrom their own control gets the clamping and the announcement rather than\nhaving to repeat both.",
143414
144077
  "type": {
143415
- "text": "stepDown(large = false) => void"
144078
+ "text": "stepDown(count: number | boolean = 1) => void"
144079
+ },
144080
+ "inheritedFrom": {
144081
+ "name": "HelixHeadlessNumberInput",
144082
+ "module": "src/number-input/root/number-input-root.ts"
144083
+ }
144084
+ },
144085
+ {
144086
+ "kind": "method",
144087
+ "name": "stepsOf",
144088
+ "privacy": "private",
144089
+ "return": {
144090
+ "type": {
144091
+ "text": "number"
144092
+ }
143416
144093
  },
144094
+ "parameters": [
144095
+ {
144096
+ "name": "count",
144097
+ "type": {
144098
+ "text": "number | boolean"
144099
+ }
144100
+ }
144101
+ ],
144102
+ "description": "How many steps a `stepUp` argument asks for: a count, or `largeStep` for `true`.",
143417
144103
  "inheritedFrom": {
143418
144104
  "name": "HelixHeadlessNumberInput",
143419
144105
  "module": "src/number-input/root/number-input-root.ts"
@@ -144781,7 +145467,7 @@
144781
145467
  "text": "string"
144782
145468
  },
144783
145469
  "default": "'Decrease'",
144784
- "description": "The name of the step down button, read by screen readers.",
145470
+ "description": "The name of the step down button, read by screen readers. The field's\nlabel follows it, so a reader hears \"Decrease Quantity\", as React Aria\nnames its steppers.",
144785
145471
  "fieldName": "decrementLabel",
144786
145472
  "inheritedFrom": {
144787
145473
  "name": "HelixHeadlessNumberInput",
@@ -144806,7 +145492,7 @@
144806
145492
  "text": "string"
144807
145493
  },
144808
145494
  "default": "'Increase'",
144809
- "description": "The name of the step up button, read by screen readers.",
145495
+ "description": "The name of the step up button, read by screen readers. The field's\nlabel follows it, so a reader hears \"Increase Quantity\", as React Aria\nnames its steppers.",
144810
145496
  "fieldName": "incrementLabel",
144811
145497
  "inheritedFrom": {
144812
145498
  "name": "HelixHeadlessNumberInput",
@@ -167593,7 +168279,17 @@
167593
168279
  "type": {
167594
168280
  "text": "string"
167595
168281
  }
167596
- }
168282
+ },
168283
+ "parameters": [
168284
+ {
168285
+ "name": "imports",
168286
+ "optional": true,
168287
+ "type": {
168288
+ "text": "Readonly<Record<string, string>>"
168289
+ }
168290
+ }
168291
+ ],
168292
+ "description": "The built-in document, with an import map for `imports` where there are any.\n\n**The map comes first in the head**, because a browser reads an import map\nonly before the first module it loads, and the example's scripts are\nmodules. `</` is escaped in the map as in the script, so a URL cannot close\nthe element early."
167597
168293
  }
167598
168294
  ],
167599
168295
  "exports": [
@@ -167857,7 +168553,7 @@
167857
168553
  "declarations": [
167858
168554
  {
167859
168555
  "kind": "class",
167860
- "description": "A sandboxed `<iframe>` that loads `src`, a document you provide. That\ndocument imports what the examples need, listens for a render message, and\nwrites the markup into itself.\n\n**Without `src`, the frame loads a built-in document**, so a sandbox renders\nwith nothing to host. It runs HTML, CSS, and scripts, and reports the\nconsole, uncaught errors, its height, and presses as a frame on\n`servePreview` does. It defines no element, so an example that uses Helix\ncomponents needs a `src` that imports them.\n\n**Examples render in a frame**, so an example's styles and scripts do not\naffect the page around the sandbox, and `position: fixed` stays inside the\npane. The frame starts empty, with its own stylesheets and its own custom\nelement registry, so `src` must load the styles and components the examples\nuse.\n\n**The source is untrusted, and the frame keeps it isolated.** The frame uses\n`sandbox=\"allow-scripts\"` and never `allow-same-origin`. Together, the two\nlet a document on the same origin remove its own sandbox, which is the same\nas having none.\n\n**A preview says where it is.** It is `:state(loading)` from the moment it\nhas a `src` until that document can take the example, and again through\n`reload()`. It is `:state(failed)` once the example throws an error it does\nnot catch, until the next source is sent, which a frame on `servePreview`\nreports. A page draws its own spinner or message from either, such as a\nsibling shown by `helix-sandbox-preview:state(failed) + .message`.\n\n**A failed preview shows the error over the example**, in the `error` part,\nuntil the next source is sent. The terminal says it too, so the part is not\nannounced. Hide it with `::part(error) { display: none }` where the page\ndraws its own.\n\n**`controls` draws two buttons in the preview's corner**: one reloads the\nframe's document, as `reload()` does, and one opens the example in a new\ntab, as `open()` does. The tab runs it in a frame sandboxed as this one is.",
168556
+ "description": "A sandboxed `<iframe>` that loads `src`, a document you provide. That\ndocument imports what the examples need, listens for a render message, and\nwrites the markup into itself.\n\n**Without `src`, the frame loads a built-in document**, so a sandbox renders\nwith nothing to host. It runs HTML, CSS, and scripts, and reports the\nconsole, uncaught errors, its height, and presses as a frame on\n`servePreview` does. It defines no element, so an example that uses Helix\ncomponents needs a `src` that imports them.\n\n**`imports` lets an example import packages by name** in the built-in\ndocument, as an import map: each name maps to the address of an ES module,\nsuch as `{\"canvas-confetti\": \"https://esm.sh/canvas-confetti@1.9.3\"}`, and\n`import confetti from 'canvas-confetti'` in the `js` pane then loads it. A\nCDN that serves npm packages as modules, such as esm.sh or jsDelivr's\n`+esm`, gives every package an address. A new map loads the document again,\nsince a browser reads one only as a document starts. A `src` document\ndeclares its own.\n\n**Examples render in a frame**, so an example's styles and scripts do not\naffect the page around the sandbox, and `position: fixed` stays inside the\npane. The frame starts empty, with its own stylesheets and its own custom\nelement registry, so `src` must load the styles and components the examples\nuse.\n\n**The source is untrusted, and the frame keeps it isolated.** The frame uses\n`sandbox=\"allow-scripts\"` and never `allow-same-origin`. Together, the two\nlet a document on the same origin remove its own sandbox, which is the same\nas having none.\n\n**A preview says where it is.** It is `:state(loading)` from the moment it\nhas a `src` until that document can take the example, and again through\n`reload()`. It is `:state(failed)` once the example throws an error it does\nnot catch, until the next source is sent, which a frame on `servePreview`\nreports. A page draws its own spinner or message from either, such as a\nsibling shown by `helix-sandbox-preview:state(failed) + .message`.\n\n**A failed preview shows the error over the example**, in the `error` part,\nuntil the next source is sent. The terminal says it too, so the part is not\nannounced. Hide it with `::part(error) { display: none }` where the page\ndraws its own.\n\n**`controls` draws two buttons in the preview's corner**: one reloads the\nframe's document, as `reload()` does, and one opens the example in a new\ntab, as `open()` does. The tab runs it in a frame sandboxed as this one is.",
167861
168557
  "name": "HelixSandboxPreview",
167862
168558
  "cssParts": [
167863
168559
  {
@@ -167921,6 +168617,15 @@
167921
168617
  "description": "Writing direction inside the frame.\n\nNot reflected. It is payload for the render message and nothing selects on\nit, here or anywhere: a frame is a document of its own and what is written\non this host reaches nothing inside it, which is the same reason\n`colorMode` has to be sent rather than set.",
167922
168618
  "attribute": "direction"
167923
168619
  },
168620
+ {
168621
+ "kind": "field",
168622
+ "name": "imports",
168623
+ "type": {
168624
+ "text": "Record<string, string> | undefined"
168625
+ },
168626
+ "description": "The packages an example can import by name in the built-in document,\neach mapped to the address of an ES module, as an import map's `imports`.\nSet it as JSON in the attribute or as an object. Not read where `src` is\nset.",
168627
+ "attribute": "imports"
168628
+ },
167924
168629
  {
167925
168630
  "kind": "field",
167926
168631
  "name": "label",
@@ -168573,6 +169278,14 @@
168573
169278
  "description": "Writing direction inside the frame.\n\nNot reflected. It is payload for the render message and nothing selects on\nit, here or anywhere: a frame is a document of its own and what is written\non this host reaches nothing inside it, which is the same reason\n`colorMode` has to be sent rather than set.",
168574
169279
  "fieldName": "direction"
168575
169280
  },
169281
+ {
169282
+ "name": "imports",
169283
+ "type": {
169284
+ "text": "Record<string, string> | undefined"
169285
+ },
169286
+ "description": "The packages an example can import by name in the built-in document,\neach mapped to the address of an ES module, as an import map's `imports`.\nSet it as JSON in the attribute or as an object. Not read where `src` is\nset.",
169287
+ "fieldName": "imports"
169288
+ },
168576
169289
  {
168577
169290
  "name": "label",
168578
169291
  "type": {
@@ -170153,7 +170866,7 @@
170153
170866
  "declarations": [
170154
170867
  {
170155
170868
  "kind": "class",
170156
- "description": "A real `<textarea>`, so undo, selection, spellcheck suppression, mobile\nkeyboards, and screen reader support come from the platform.\n\nTab inserts two spaces, so you can indent code. To move focus out of the\nfield, press Escape and then Tab. Shift+Tab moves focus back as it does\nanywhere else. The field's description says so to a screen reader.\n\n**`tokenize` colors the source** with a highlighter you bring, such as one\nbuilt on Lezer, Prism or Shiki. It is a function from the source to runs of\ntext, each with an optional kind, and the pane draws the runs under a\ntransparent field, so typing, selection and undo stay the textarea's. The\nkinds are `callable`, `comment`, `constant`, `invalid`, `keyword`, `name`,\n`string` and `tag`, each colored by the `--helix-color-syntax-*` token of\nits name and a hook of its own, such as `--sandbox-source-keyword-color`.\nA run of any other kind is drawn in the field's own color. Every run with a\nkind is a `token` part, and carries its kind as `data-kind`. A `tokenize`\nthat throws leaves the source drawn plain and the field editable, and the\nerror is reported to the page as an uncaught one.",
170869
+ "description": "A real `<textarea>`, so undo, selection, spellcheck suppression, mobile\nkeyboards, and screen reader support come from the platform.\n\nTab inserts two spaces, so you can indent code. To move focus out of the\nfield, press Escape and then Tab. Shift+Tab moves focus back as it does\nanywhere else. The field's description says so to a screen reader.\n\n**`tokenize` colors the source** with a highlighter you bring, such as one\nbuilt on Lezer, Prism or Shiki. It is a function from the source to runs of\ntext, each with an optional kind, and the pane draws the runs under a\ntransparent field, so typing, selection and undo stay the textarea's. The\nkinds are `callable`, `comment`, `constant`, `invalid`, `keyword`, `name`,\n`string` and `tag`, each colored by the `--helix-color-syntax-*` token of\nits name and a hook of its own, such as `--sandbox-source-keyword-color`.\nA run of any other kind is drawn in the field's own color. Every run with a\nkind is a `token` part, and carries its kind as `data-kind`. A `tokenize`\nthat throws leaves the source drawn plain and the field editable, and the\nerror is reported to the page as an uncaught one.\n\n**`line-numbers` numbers each line** in a gutter beside the source. A line\nthat wraps keeps one number. The numbers are drawn, and hidden from screen\nreaders, which read the field.\n\nEnter keeps the indentation of the line it breaks, and the new line is\nundone with the next undo as typing is.\n\n**The source can be written inside the pane** where `value` is not set: its\ntext, or the markup of a `<template>` it holds, without the indentation the\npage gave it. Markup goes in a template so the page does not render it or\nrun its scripts. Text inside the pane is read once, when it connects.",
170157
170870
  "name": "HelixSandboxSource",
170158
170871
  "cssProperties": [
170159
170872
  {
@@ -170180,6 +170893,10 @@
170180
170893
  "description": "Color of a `keyword` run, under `tokenize`. Defaults to `--helix-color-syntax-keyword`.",
170181
170894
  "name": "--sandbox-source-keyword-color"
170182
170895
  },
170896
+ {
170897
+ "description": "Color of the line numbers, under `line-numbers`. Defaults to `--helix-color-foreground-subtle`.",
170898
+ "name": "--sandbox-source-line-number-color"
170899
+ },
170183
170900
  {
170184
170901
  "description": "Minimum height of the pane.",
170185
170902
  "name": "--sandbox-source-min-block-size"
@@ -170199,13 +170916,17 @@
170199
170916
  ],
170200
170917
  "cssParts": [
170201
170918
  {
170202
- "description": "The box that scrolls the field and its colors together, under `tokenize`.",
170919
+ "description": "The box that scrolls the field and its colors together, under `tokenize` or `line-numbers`.",
170203
170920
  "name": "field"
170204
170921
  },
170205
170922
  {
170206
- "description": "The colored copy of the source drawn under the field, under `tokenize`.",
170923
+ "description": "The colored copy of the source drawn under the field, under `tokenize` or `line-numbers`.",
170207
170924
  "name": "highlight"
170208
170925
  },
170926
+ {
170927
+ "description": "One line of that copy, under `line-numbers`, numbered in the gutter by its `::before`.",
170928
+ "name": "line"
170929
+ },
170209
170930
  {
170210
170931
  "description": "The editable region.",
170211
170932
  "name": "source"
@@ -170275,6 +170996,17 @@
170275
170996
  "description": "The pane's file name, such as `index.html`, on its tab where a sandbox\nholds several panes. Empty puts the pane's `name` on the tab.",
170276
170997
  "attribute": "label"
170277
170998
  },
170999
+ {
171000
+ "kind": "field",
171001
+ "name": "lineNumbers",
171002
+ "type": {
171003
+ "text": "boolean"
171004
+ },
171005
+ "default": "false",
171006
+ "description": "Whether each line of the source is numbered, in a gutter beside it.",
171007
+ "attribute": "line-numbers",
171008
+ "reflects": true
171009
+ },
170278
171010
  {
170279
171011
  "kind": "field",
170280
171012
  "name": "name",
@@ -170323,6 +171055,27 @@
170323
171055
  "default": "false",
170324
171056
  "description": "Set by Escape, so the next Tab leaves the field."
170325
171057
  },
171058
+ {
171059
+ "kind": "field",
171060
+ "name": "read",
171061
+ "type": {
171062
+ "text": "boolean"
171063
+ },
171064
+ "privacy": "private",
171065
+ "default": "false",
171066
+ "description": "Whether the source written inside the pane has been read."
171067
+ },
171068
+ {
171069
+ "kind": "method",
171070
+ "name": "readWritten",
171071
+ "privacy": "private",
171072
+ "return": {
171073
+ "type": {
171074
+ "text": "void"
171075
+ }
171076
+ },
171077
+ "description": "Takes the source written inside the pane where `value` is not set: a\ntemplate's markup, or else the text. Client only, like every read of the\nlight DOM, and once there is something to read.\n\n**As it connects, and again before its first render.** A pane that\nupgrades after the parser is done holds its text as it connects, which is\nbefore a sandbox around it reads `value` to seed its preview. A parser that\nconnects the pane before its children, as one with the element already\ndefined does, leaves the text for the render."
171078
+ },
170326
171079
  {
170327
171080
  "kind": "field",
170328
171081
  "name": "reportCaret",
@@ -170370,7 +171123,26 @@
170370
171123
  },
170371
171124
  {
170372
171125
  "kind": "method",
170373
- "name": "indent",
171126
+ "name": "breakLine",
171127
+ "privacy": "private",
171128
+ "return": {
171129
+ "type": {
171130
+ "text": "void"
171131
+ }
171132
+ },
171133
+ "parameters": [
171134
+ {
171135
+ "name": "event",
171136
+ "type": {
171137
+ "text": "KeyboardEvent"
171138
+ }
171139
+ }
171140
+ ],
171141
+ "description": "Breaks the line with the indentation it has, where it has some. A line at\nthe margin is left to the platform's own Enter."
171142
+ },
171143
+ {
171144
+ "kind": "method",
171145
+ "name": "insert",
170374
171146
  "privacy": "private",
170375
171147
  "return": {
170376
171148
  "type": {
@@ -170383,9 +171155,15 @@
170383
171155
  "type": {
170384
171156
  "text": "HTMLTextAreaElement"
170385
171157
  }
171158
+ },
171159
+ {
171160
+ "name": "text",
171161
+ "type": {
171162
+ "text": "string"
171163
+ }
170386
171164
  }
170387
171165
  ],
170388
- "description": "Writes the two spaces Tab inserts, as typing would.\n\n**Through `insertText`, so undo takes the indent back.** Assigning\n`field.value` empties the textarea's undo history: a reader who typed,\npressed Tab and then Cmd+Z or Ctrl+Z lost the indent and everything typed\nbefore it. `insertText` is the edit a keystroke makes, so it joins the\nhistory and sends the `input` event that `handleInput` takes. It writes\ninto whatever has focus, so it is used only while the field has it. Where it\nis not supported, the field is written directly."
171166
+ "description": "Writes text at the caret, as typing would: the two spaces Tab inserts,\nand the indentation Enter keeps.\n\n**Through `insertText`, so undo takes the indent back.** Assigning\n`field.value` empties the textarea's undo history: a reader who typed,\npressed Tab and then Cmd+Z or Ctrl+Z lost the indent and everything typed\nbefore it. `insertText` is the edit a keystroke makes, so it joins the\nhistory and sends the `input` event that `handleInput` takes. It writes\ninto whatever has focus, so it is used only while the field has it. Where it\nis not supported, the field is written directly."
170389
171167
  },
170390
171168
  {
170391
171169
  "kind": "method",
@@ -170801,6 +171579,15 @@
170801
171579
  "description": "The pane's file name, such as `index.html`, on its tab where a sandbox\nholds several panes. Empty puts the pane's `name` on the tab.",
170802
171580
  "fieldName": "label"
170803
171581
  },
171582
+ {
171583
+ "name": "line-numbers",
171584
+ "type": {
171585
+ "text": "boolean"
171586
+ },
171587
+ "default": "false",
171588
+ "description": "Whether each line of the source is numbered, in a gutter beside it.",
171589
+ "fieldName": "lineNumbers"
171590
+ },
170804
171591
  {
170805
171592
  "name": "name",
170806
171593
  "type": {
@@ -190634,7 +191421,7 @@
190634
191421
  "text": "boolean"
190635
191422
  },
190636
191423
  "default": "false",
190637
- "description": "Whether the arrow keys move focus between the stages' names, along the\nway the steps run. Off by default, so the arrows keep scrolling the page.",
191424
+ "description": "Whether the arrow keys move focus between the stages' names, along the\nway the steps run, and the names are one tab stop. Off by default, so the\narrows keep scrolling the page.",
190638
191425
  "attribute": "arrows",
190639
191426
  "inheritedFrom": {
190640
191427
  "name": "HelixHeadlessSteps",
@@ -190768,6 +191555,17 @@
190768
191555
  "module": "src/steps/root/steps-root.ts"
190769
191556
  }
190770
191557
  },
191558
+ {
191559
+ "kind": "field",
191560
+ "name": "commands",
191561
+ "privacy": "protected",
191562
+ "readonly": true,
191563
+ "default": "new CommandController(this, { commands: { '--next': () => this.next(), '--previous': () => this.previous(), '--reset': () => this.reset(), }, })",
191564
+ "inheritedFrom": {
191565
+ "name": "HelixHeadlessSteps",
191566
+ "module": "src/steps/root/steps-root.ts"
191567
+ }
191568
+ },
190771
191569
  {
190772
191570
  "kind": "field",
190773
191571
  "name": "steps",
@@ -190796,6 +191594,29 @@
190796
191594
  "module": "src/steps/root/steps-root.ts"
190797
191595
  }
190798
191596
  },
191597
+ {
191598
+ "kind": "method",
191599
+ "name": "named",
191600
+ "privacy": "private",
191601
+ "return": {
191602
+ "type": {
191603
+ "text": "HelixHeadlessStep | undefined"
191604
+ }
191605
+ },
191606
+ "parameters": [
191607
+ {
191608
+ "name": "steps",
191609
+ "type": {
191610
+ "text": "HelixHeadlessStep[]"
191611
+ }
191612
+ }
191613
+ ],
191614
+ "description": "The step `active` names, by `value` or by place, or the first enabled one.",
191615
+ "inheritedFrom": {
191616
+ "name": "HelixHeadlessSteps",
191617
+ "module": "src/steps/root/steps-root.ts"
191618
+ }
191619
+ },
190799
191620
  {
190800
191621
  "kind": "method",
190801
191622
  "name": "next",
@@ -190969,6 +191790,44 @@
190969
191790
  "module": "src/steps/root/steps-root.ts"
190970
191791
  }
190971
191792
  },
191793
+ {
191794
+ "kind": "field",
191795
+ "name": "holder",
191796
+ "type": {
191797
+ "text": "HelixHeadlessStep | undefined"
191798
+ },
191799
+ "privacy": "private",
191800
+ "description": "The step whose name holds the sequence's one tab stop under `arrows`, once focus has chosen it.",
191801
+ "inheritedFrom": {
191802
+ "name": "HelixHeadlessSteps",
191803
+ "module": "src/steps/root/steps-root.ts"
191804
+ }
191805
+ },
191806
+ {
191807
+ "kind": "method",
191808
+ "name": "rove",
191809
+ "privacy": "private",
191810
+ "return": {
191811
+ "type": {
191812
+ "text": "void"
191813
+ }
191814
+ },
191815
+ "description": "Gives the one tab stop to a name, under `arrows`: the one focus last left,\nelse the current stage's, else the first a reader can go to. Without\n`arrows` every name is its own stop. Client only.",
191816
+ "inheritedFrom": {
191817
+ "name": "HelixHeadlessSteps",
191818
+ "module": "src/steps/root/steps-root.ts"
191819
+ }
191820
+ },
191821
+ {
191822
+ "kind": "field",
191823
+ "name": "handleFocus",
191824
+ "privacy": "private",
191825
+ "readonly": true,
191826
+ "inheritedFrom": {
191827
+ "name": "HelixHeadlessSteps",
191828
+ "module": "src/steps/root/steps-root.ts"
191829
+ }
191830
+ },
190972
191831
  {
190973
191832
  "kind": "field",
190974
191833
  "name": "handleSlotChange",
@@ -191421,7 +192280,7 @@
191421
192280
  "text": "boolean"
191422
192281
  },
191423
192282
  "default": "false",
191424
- "description": "Whether the arrow keys move focus between the stages' names, along the\nway the steps run. Off by default, so the arrows keep scrolling the page.",
192283
+ "description": "Whether the arrow keys move focus between the stages' names, along the\nway the steps run, and the names are one tab stop. Off by default, so the\narrows keep scrolling the page.",
191425
192284
  "fieldName": "arrows",
191426
192285
  "inheritedFrom": {
191427
192286
  "name": "HelixHeadlessSteps",
@@ -191751,7 +192610,7 @@
191751
192610
  "text": "string"
191752
192611
  },
191753
192612
  "default": "''",
191754
- "description": "The value the step sends in `helix-select`.",
192613
+ "description": "The value the step sends in `helix-select`, and what names the step in its\nsequence's `active`. Without one, the sequence names the step by its place,\ncounted from 1.",
191755
192614
  "attribute": "value",
191756
192615
  "inheritedFrom": {
191757
192616
  "name": "HelixHeadlessStep",
@@ -192429,7 +193288,7 @@
192429
193288
  "text": "string"
192430
193289
  },
192431
193290
  "default": "''",
192432
- "description": "The value the step sends in `helix-select`.",
193291
+ "description": "The value the step sends in `helix-select`, and what names the step in its\nsequence's `active`. Without one, the sequence names the step by its place,\ncounted from 1.",
192433
193292
  "fieldName": "value",
192434
193293
  "inheritedFrom": {
192435
193294
  "name": "HelixHeadlessStep",
@@ -238327,6 +239186,48 @@
238327
239186
  "module": "src/video-playlist/root/video-playlist-root.ts"
238328
239187
  }
238329
239188
  },
239189
+ {
239190
+ "kind": "field",
239191
+ "name": "wroteName",
239192
+ "type": {
239193
+ "text": "string | undefined"
239194
+ },
239195
+ "privacy": "private",
239196
+ "description": "The name this playlist last wrote on a plain media player, to tell it from yours.",
239197
+ "inheritedFrom": {
239198
+ "name": "HelixHeadlessVideoPlaylist",
239199
+ "module": "src/video-playlist/root/video-playlist-root.ts"
239200
+ }
239201
+ },
239202
+ {
239203
+ "kind": "method",
239204
+ "name": "name",
239205
+ "privacy": "private",
239206
+ "return": {
239207
+ "type": {
239208
+ "text": "void"
239209
+ }
239210
+ },
239211
+ "parameters": [
239212
+ {
239213
+ "name": "player",
239214
+ "type": {
239215
+ "text": "Player"
239216
+ }
239217
+ },
239218
+ {
239219
+ "name": "text",
239220
+ "type": {
239221
+ "text": "string"
239222
+ }
239223
+ }
239224
+ ],
239225
+ "description": "Names the player by the entry.\n\nThe consumer's own name for the player stands. Only a player named by\nnobody takes the entry's words as its name: `label` on a player that has\none, and `aria-label` on a plain `<video>` or `<audio>`, which has none and\nwas heard as an unnamed video.",
239226
+ "inheritedFrom": {
239227
+ "name": "HelixHeadlessVideoPlaylist",
239228
+ "module": "src/video-playlist/root/video-playlist-root.ts"
239229
+ }
239230
+ },
238330
239231
  {
238331
239232
  "kind": "field",
238332
239233
  "name": "pointed",
@@ -244839,7 +245740,7 @@
244839
245740
  }
244840
245741
  }
244841
245742
  ],
244842
- "description": "Writes a row's role, and whether it is chosen in a list that selects:\n`option` with `aria-selected` there, and `listitem` otherwise, and\n`aria-disabled` on an item `disabled-keys` names. Every pass,\nsince a choice changes no row's content.",
245743
+ "description": "Writes a row's role, and whether it is chosen in a list that selects:\n`option` with `aria-selected` there, and `listitem` otherwise, and\n`aria-disabled` on an item `disabled-keys` names. Every pass,\nsince a choice changes no row's content.\n\n`data-selected` and `data-disabled` say the same to a stylesheet, as\nReact Aria's rows do, so one rule reads the same in either kind of list.",
244843
245744
  "inheritedFrom": {
244844
245745
  "name": "HelixHeadlessVirtualList",
244845
245746
  "module": "src/virtual-list/root/virtual-list-root.ts"
@@ -245786,6 +246687,6 @@
245786
246687
  ],
245787
246688
  "helix": {
245788
246689
  "package": "@fusion.dev/helix",
245789
- "version": "0.169.0"
246690
+ "version": "0.171.0"
245790
246691
  }
245791
246692
  }