@fusion.dev/helix-headless 0.163.0 → 0.164.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 (30) hide show
  1. package/custom-elements.json +809 -36
  2. package/dist/callout/root/callout-root.d.ts +43 -4
  3. package/dist/callout/root/callout-root.js +58 -2
  4. package/dist/code-block/patch.d.ts +42 -0
  5. package/dist/code-block/patch.js +118 -0
  6. package/dist/code-block/root/code-block-root.d.ts +37 -1
  7. package/dist/code-block/root/code-block-root.js +57 -9
  8. package/dist/color-picker/root/color-picker-root.d.ts +7 -3
  9. package/dist/color-picker/root/color-picker-root.js +7 -4
  10. package/dist/combobox/root/combobox-root.d.ts +1 -0
  11. package/dist/combobox/root/combobox-root.js +10 -1
  12. package/dist/data-table/root/data-table-root.d.ts +1 -0
  13. package/dist/data-table/root/data-table-root.js +1 -0
  14. package/dist/element-events.generated.js +7 -1
  15. package/dist/object-inspector/root/object-inspector-root.d.ts +23 -0
  16. package/dist/object-inspector/root/object-inspector-root.js +19 -1
  17. package/dist/table/grid-controller.d.ts +7 -0
  18. package/dist/table/grid-controller.js +15 -1
  19. package/dist/table/root/table-root.d.ts +10 -0
  20. package/dist/table/root/table-root.js +18 -1
  21. package/dist/video/root/video-root.js +2 -1
  22. package/dist/video-playlist/item/video-playlist-item.d.ts +8 -0
  23. package/dist/video-playlist/item/video-playlist-item.js +7 -0
  24. package/dist/video-playlist/root/video-playlist-root.d.ts +60 -0
  25. package/dist/video-playlist/root/video-playlist-root.js +55 -1
  26. package/lint.json +1 -1
  27. package/package.json +5 -5
  28. package/types/jsx.d.ts +340 -16
  29. package/types/vue.d.ts +86 -7
  30. package/types/words.d.ts +58 -0
@@ -1681,6 +1681,35 @@
1681
1681
  "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
1682
1682
  }
1683
1683
  },
1684
+ {
1685
+ "kind": "field",
1686
+ "name": "present",
1687
+ "type": {
1688
+ "text": "boolean"
1689
+ },
1690
+ "privacy": "protected",
1691
+ "description": "Whether the element is still on the page for a reader, which is what\nthe focus hand-off waits on: connected, for a surface the page removes.\nA surface that hides itself says it is gone once hidden, and calls\n`handFocusOn` then.",
1692
+ "readonly": true,
1693
+ "inheritedFrom": {
1694
+ "name": "MixinDismissible",
1695
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
1696
+ }
1697
+ },
1698
+ {
1699
+ "kind": "method",
1700
+ "name": "handFocusOn",
1701
+ "privacy": "protected",
1702
+ "return": {
1703
+ "type": {
1704
+ "text": "void"
1705
+ }
1706
+ },
1707
+ "description": "Hands focus on now, where a dismissal is waiting for this element to\ngo: for a surface that hides itself, once it has.",
1708
+ "inheritedFrom": {
1709
+ "name": "MixinDismissible",
1710
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
1711
+ }
1712
+ },
1684
1713
  {
1685
1714
  "kind": "method",
1686
1715
  "name": "dismiss",
@@ -12722,7 +12751,7 @@
12722
12751
  "declarations": [
12723
12752
  {
12724
12753
  "kind": "class",
12725
- "description": "`tone` is on the headless tier because it carries meaning. It picks the icon\nand the icon region's accessible name, so a screen reader announces \"Error\"\nfor an error callout whether or not the color is seen. Set `tone-label` to\nsay the name in another language.\n\nThe icon is the fallback content of a slot. Slot your own icon to replace it,\nand the default disappears with no extra check. The tone's name stays on the\nregion around it.\n\nSet `dismissible` for a note a reader may put away, as Shoelace's `closable`\nalert does. The button fires `helix-dismiss` and the callout stays until a\nlistener removes it, so the page decides whether it comes back.\n\nA callout sets a passage apart inside a document and is read where it sits.\nFor page-level chrome above the masthead that is a live region and can be\ndismissed, use `Announcement`.",
12754
+ "description": "`tone` is on the headless tier because it carries meaning. It picks the icon\nand the icon region's accessible name, so a screen reader announces \"Error\"\nfor an error callout whether or not the color is seen. Set `tone-label` to\nsay the name in another language.\n\nThe icon is the fallback content of a slot. Slot your own icon to replace it,\nand the default disappears with no extra check. The tone's name stays on the\nregion around it.\n\nSet `dismissible` for a note a reader may put away, as Shoelace's `closable`\nalert does. The button fires `helix-dismiss`, and unless a listener cancels\nit the callout hides itself: `open` turns false, `:state(exiting)` holds\nwhile its exit animations run, and then it is `hidden`. Remove it in your\nlistener to take it out of the page, or set `open` to show it again, which\nholds `:state(entering)` while it comes back. Focus on its dismiss button\nmoves to the next callout's, or to the tab stop beside it, once it hides.\n\nA callout sets a passage apart inside a document and is read where it sits.\nFor page-level chrome above the masthead that is a live region and can be\ndismissed, use `Announcement`.",
12726
12755
  "name": "HelixHeadlessCallout",
12727
12756
  "cssParts": [
12728
12757
  {
@@ -12796,6 +12825,57 @@
12796
12825
  "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
12797
12826
  }
12798
12827
  },
12828
+ {
12829
+ "kind": "field",
12830
+ "name": "turn",
12831
+ "type": {
12832
+ "text": "number"
12833
+ },
12834
+ "privacy": "private",
12835
+ "default": "0",
12836
+ "description": "Which journey is the latest, so an entrance settling late leaves an exit alone."
12837
+ },
12838
+ {
12839
+ "kind": "field",
12840
+ "name": "present",
12841
+ "type": {
12842
+ "text": "boolean"
12843
+ },
12844
+ "privacy": "protected",
12845
+ "description": "Hidden from a reader once hidden, for the focus hand-off.",
12846
+ "readonly": true,
12847
+ "inheritedFrom": {
12848
+ "name": "MixinDismissible",
12849
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
12850
+ }
12851
+ },
12852
+ {
12853
+ "kind": "method",
12854
+ "name": "dismiss",
12855
+ "return": {
12856
+ "type": {
12857
+ "text": "boolean"
12858
+ }
12859
+ },
12860
+ "description": "Hides the callout once a dismissal stands, unless the page removed it in\nits listener, which is the page's answer and leaves `open` as it was.",
12861
+ "inheritedFrom": {
12862
+ "name": "MixinDismissible",
12863
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
12864
+ },
12865
+ "type": {
12866
+ "text": "dismiss() => boolean"
12867
+ }
12868
+ },
12869
+ {
12870
+ "kind": "field",
12871
+ "name": "open",
12872
+ "type": {
12873
+ "text": "boolean"
12874
+ },
12875
+ "default": "true",
12876
+ "description": "Whether the callout is showing. A dismissal nobody canceled turns it\nfalse and the callout hides itself, and setting it true shows the callout\nagain. Not reflected: open is the resting state, so an `open` attribute\nwould appear on markup a server sent without it.",
12877
+ "attribute": "open"
12878
+ },
12799
12879
  {
12800
12880
  "kind": "field",
12801
12881
  "name": "tone",
@@ -12884,6 +12964,24 @@
12884
12964
  ],
12885
12965
  "description": "The dismiss button's name: `dismissLabel` with the heading's words, or the\ntone's name.\n\nThe heading is read from the children, so a server and a hydrating render\nname the button for the tone, and the update after names it for the\nheading."
12886
12966
  },
12967
+ {
12968
+ "kind": "method",
12969
+ "name": "journey",
12970
+ "privacy": "private",
12971
+ "return": {
12972
+ "type": {
12973
+ "text": "void"
12974
+ }
12975
+ },
12976
+ "description": "The way out after a dismissal, or back in after `open` is set again.\n\n**Hidden only once the exit has run**, since a hidden element draws no\nanimation: `:state(exiting)` holds until every animation on the callout\nhas finished, or two frames where it has none, and then `hidden` takes it\nout of the page and out of the accessibility tree. Shown again at once,\nwith `:state(entering)` while it arrives."
12977
+ },
12978
+ {
12979
+ "kind": "field",
12980
+ "name": "readRegions",
12981
+ "privacy": "private",
12982
+ "readonly": true,
12983
+ "description": "Says which regions hold something, one call apiece so each pairs with its `@cssstate`."
12984
+ },
12887
12985
  {
12888
12986
  "kind": "field",
12889
12987
  "name": "dismissible",
@@ -12930,19 +13028,17 @@
12930
13028
  },
12931
13029
  {
12932
13030
  "kind": "method",
12933
- "name": "dismiss",
13031
+ "name": "handFocusOn",
13032
+ "privacy": "protected",
12934
13033
  "return": {
12935
13034
  "type": {
12936
- "text": "boolean"
13035
+ "text": "void"
12937
13036
  }
12938
13037
  },
12939
- "description": "Fires `helix-dismiss`, and returns `false` if a listener cancels it.",
13038
+ "description": "Hands focus on now, where a dismissal is waiting for this element to\ngo: for a surface that hides itself, once it has.",
12940
13039
  "inheritedFrom": {
12941
13040
  "name": "MixinDismissible",
12942
13041
  "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
12943
- },
12944
- "type": {
12945
- "text": "dismiss() => boolean"
12946
13042
  }
12947
13043
  },
12948
13044
  {
@@ -13378,7 +13474,7 @@
13378
13474
  "type": {
13379
13475
  "text": "HelixDismissEvent"
13380
13476
  },
13381
- "description": "The dismiss button was pressed. The callout does not remove itself, so remove it in response. Cancelable.",
13477
+ "description": "The dismiss button was pressed. Unless a listener cancels it, the callout hides itself, and a listener may remove it instead. Cancelable: cancel it to keep the callout showing.",
13382
13478
  "name": "helix-dismiss",
13383
13479
  "reactProp": "onhelix-dismiss"
13384
13480
  }
@@ -13397,6 +13493,15 @@
13397
13493
  "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
13398
13494
  }
13399
13495
  },
13496
+ {
13497
+ "name": "open",
13498
+ "type": {
13499
+ "text": "boolean"
13500
+ },
13501
+ "default": "true",
13502
+ "description": "Whether the callout is showing. A dismissal nobody canceled turns it\nfalse and the callout hides itself, and setting it true shows the callout\nagain. Not reflected: open is the resting state, so an `open` attribute\nwould appear on markup a server sent without it.",
13503
+ "fieldName": "open"
13504
+ },
13400
13505
  {
13401
13506
  "name": "tone",
13402
13507
  "type": {
@@ -13437,6 +13542,36 @@
13437
13542
  }
13438
13543
  }
13439
13544
  ],
13545
+ "cssStates": [
13546
+ {
13547
+ "description": "While `open` is false: the callout was dismissed, and is leaving or hidden.",
13548
+ "name": "closed"
13549
+ },
13550
+ {
13551
+ "description": "While a callout shown again by `open` runs its entrance animations.",
13552
+ "name": "entering"
13553
+ },
13554
+ {
13555
+ "description": "While a dismissed callout runs its exit animations, before it is hidden.",
13556
+ "name": "exiting"
13557
+ },
13558
+ {
13559
+ "description": "Something is slotted into `heading`.",
13560
+ "name": "has-heading"
13561
+ },
13562
+ {
13563
+ "description": "An icon of your own is slotted into `icon`, in place of the tone's.",
13564
+ "name": "has-icon"
13565
+ },
13566
+ {
13567
+ "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
13568
+ "name": "settled",
13569
+ "inheritedFrom": {
13570
+ "name": "HelixElement",
13571
+ "module": "src/helix-element/helix-element.ts"
13572
+ }
13573
+ }
13574
+ ],
13440
13575
  "mixins": [
13441
13576
  {
13442
13577
  "name": "MixinDismissible",
@@ -13472,16 +13607,6 @@
13472
13607
  },
13473
13608
  "tagName": "helix-headless-callout",
13474
13609
  "customElement": true,
13475
- "cssStates": [
13476
- {
13477
- "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
13478
- "name": "settled",
13479
- "inheritedFrom": {
13480
- "name": "HelixElement",
13481
- "module": "src/helix-element/helix-element.ts"
13482
- }
13483
- }
13484
- ],
13485
13610
  "modulePath": "src/callout/root/callout-root.ts",
13486
13611
  "definitionPath": "src/callout/root/callout-root.ts"
13487
13612
  }
@@ -30706,6 +30831,30 @@
30706
30831
  ],
30707
30832
  "description": "The files in a unified diff, each with its hunks.\n\n**A hunk is read to the counts its header states**, `@@ -12,7 +12,8"
30708
30833
  },
30834
+ {
30835
+ "kind": "function",
30836
+ "name": "changedWords",
30837
+ "return": {
30838
+ "type": {
30839
+ "text": "[DiffPiece[], DiffPiece[]] | undefined"
30840
+ }
30841
+ },
30842
+ "parameters": [
30843
+ {
30844
+ "name": "before",
30845
+ "type": {
30846
+ "text": "string"
30847
+ }
30848
+ },
30849
+ {
30850
+ "name": "after",
30851
+ "type": {
30852
+ "text": "string"
30853
+ }
30854
+ }
30855
+ ],
30856
+ "description": "The runs of two paired lines that the other line does not have, by the\nlongest run of words they share in order.\n\n**Space between two changes is part of the change**, so \"a b\" replaced by\n\"c d\" is one run, with no gap for the eye to bridge. Two lines\nthat share no word share nothing worth marking: the whole line is the\nchange, which its own wash already says, and `undefined` draws it whole."
30857
+ },
30709
30858
  {
30710
30859
  "kind": "function",
30711
30860
  "name": "pairLines",
@@ -30723,6 +30872,30 @@
30723
30872
  }
30724
30873
  ],
30725
30874
  "description": "A hunk's lines paired for a side-by-side view.\n\nContext sits on both sides. A run of removals followed by a run of additions\nis one change, and its lines are paired in order, the longer run's remainder\nstanding opposite nothing: that is what lets the eye read a changed line\nacross rather than hunting for it further down."
30875
+ },
30876
+ {
30877
+ "kind": "function",
30878
+ "name": "foldContext",
30879
+ "return": {
30880
+ "type": {
30881
+ "text": "DiffRun[]"
30882
+ }
30883
+ },
30884
+ "parameters": [
30885
+ {
30886
+ "name": "lines",
30887
+ "type": {
30888
+ "text": "DiffLine[]"
30889
+ }
30890
+ },
30891
+ {
30892
+ "name": "keep",
30893
+ "type": {
30894
+ "text": "number"
30895
+ }
30896
+ }
30897
+ ],
30898
+ "description": "A hunk's lines with each long run of unchanged lines folded, keeping `keep`\nlines on the side of each change, as a code host draws a diff with more\ncontext than a reader needs.\n\nA fold hides two lines or more: a control in place of one line is no\nshorter than the line."
30726
30899
  }
30727
30900
  ],
30728
30901
  "exports": [
@@ -30734,6 +30907,14 @@
30734
30907
  "module": "src/code-block/patch.ts"
30735
30908
  }
30736
30909
  },
30910
+ {
30911
+ "kind": "js",
30912
+ "name": "changedWords",
30913
+ "declaration": {
30914
+ "name": "changedWords",
30915
+ "module": "src/code-block/patch.ts"
30916
+ }
30917
+ },
30737
30918
  {
30738
30919
  "kind": "js",
30739
30920
  "name": "pairLines",
@@ -30741,6 +30922,14 @@
30741
30922
  "name": "pairLines",
30742
30923
  "module": "src/code-block/patch.ts"
30743
30924
  }
30925
+ },
30926
+ {
30927
+ "kind": "js",
30928
+ "name": "foldContext",
30929
+ "declaration": {
30930
+ "name": "foldContext",
30931
+ "module": "src/code-block/patch.ts"
30932
+ }
30744
30933
  }
30745
30934
  ]
30746
30935
  },
@@ -30750,7 +30939,7 @@
30750
30939
  "declarations": [
30751
30940
  {
30752
30941
  "kind": "class",
30753
- "description": "Renders a `<pre><code>` pair: `pre` keeps the whitespace, and `code` marks it\nas code. Long lines scroll inside the block and do not wrap, because a line\nbreak can be significant in code.\n\nA copy button is on by default. Set `no-copy` to remove it. The button copies\nthe slotted text, so there is no second copy of the code to keep in sync.\n\nFor a fragment of code inside a sentence, use `Code`.\n\nSet `line-numbers` to number the lines in a gutter beside the code, hidden\nfrom the accessibility tree and left out of a copy. Set `mark-lines` to\nmark lines a reader should look at, such as `2, 4-6`: the block draws a\nband behind each run, placed where the lines are laid out, so it follows a\nhighlighter's markup and lines that wrap. Set `wrap` to wrap long lines\nrather than scroll them; a gutter then numbers each line where it starts.\nSet `wrappable` for a button in the header that turns `wrap` on and off,\npressed while the lines wrap.\n\nThe header holds the name, the `actions` slot, and the copy button. Slot a\ncontrol into `actions`, such as a button that sets `wrap` or one that opens\nthe code in an editor, and the block draws a header for it even with no\nname. `copy-icon` and `copied-icon` replace the copy button's two icons. Set `highlight` to a\nfunction that turns the code into highlighted markup, such as one wrapping\nShiki or Prism, and the block draws what it returns; it is handed the\nblock's `language`, so one function serves every block. The code stays in\nthe slot, so the copy button and the page's own text are the code as\nwritten.\n\nSet `expandable` on a block whose height is capped, such as by\n`--code-block-max-block-size`, and a button under it shows every line and\nthen fewer again, as a docs site's long example does. The button is drawn\nonly while the cap hides something, says whether the block is expanded with\n`aria-expanded`, names the block it opens with `aria-controls`, and the block\ncarries `:state(expanded)` while it is.\n\nSet `diff` to show a change. Put a unified diff, the output of `git diff` or\n`diff -u`, in the same slot, and the block draws the lines it added and\nremoved. The block never computes a diff itself. Line numbers come from the\nhunk headers and are hidden from the accessibility tree. Changed lines are\n`<ins>` and `<del>` with the `+` and `-` kept as text, so the change does not\ndepend on color. Each file in the patch is its own block under its own name,\nand its copy button copies the new version of the file. `variant=\"split\"`\nshows the old version beside the new, each removal opposite its replacement.\n\n**A block that scrolls is a tab stop.** While its lines run past its width or\nits cap, the scroller is a region named for the block, such as \"Code,\napp.ts\", that Tab reaches, so a keyboard scrolls it with the arrow keys in\nevery browser. Chromium and Firefox make a scrolling box focusable on their\nown, and Safari does not. A block that fits is no stop at all.\n\n**The code the block draws is marked untranslated**, `translate=\"no\"` on\nits `<pre>`, so a page translator leaves highlighted lines and a diff as\nwritten. Code in the slot takes its translation mode from the element, which\nwrites nothing onto itself, so set `translate=\"no\"` on the element to keep a\ntranslator off plain code too.\n\nOn the server, the slot renders as ordinary code, so a diff first appears as\nthe patch text in a `<pre>`. The client makes the same first render, which\nkeeps hydration clean, and draws the diff once it can read the content. Diff\nmode is experimental. The rest of the family is stable.",
30942
+ "description": "Renders a `<pre><code>` pair: `pre` keeps the whitespace, and `code` marks it\nas code. Long lines scroll inside the block and do not wrap, because a line\nbreak can be significant in code.\n\nA copy button is on by default. Set `no-copy` to remove it. The button copies\nthe slotted text, so there is no second copy of the code to keep in sync.\n\nFor a fragment of code inside a sentence, use `Code`.\n\nSet `line-numbers` to number the lines in a gutter beside the code, hidden\nfrom the accessibility tree and left out of a copy. Set `mark-lines` to\nmark lines a reader should look at, such as `2, 4-6`: the block draws a\nband behind each run, placed where the lines are laid out, so it follows a\nhighlighter's markup and lines that wrap. Set `wrap` to wrap long lines\nrather than scroll them; a gutter then numbers each line where it starts.\nSet `wrappable` for a button in the header that turns `wrap` on and off,\npressed while the lines wrap.\n\nThe header holds the name, the `actions` slot, and the copy button. Slot a\ncontrol into `actions`, such as a button that sets `wrap` or one that opens\nthe code in an editor, and the block draws a header for it even with no\nname. `copy-icon` and `copied-icon` replace the copy button's two icons. Set `highlight` to a\nfunction that turns the code into highlighted markup, such as one wrapping\nShiki or Prism, and the block draws what it returns; it is handed the\nblock's `language`, so one function serves every block. The code stays in\nthe slot, so the copy button and the page's own text are the code as\nwritten.\n\nSet `expandable` on a block whose height is capped, such as by\n`--code-block-max-block-size`, and a button under it shows every line and\nthen fewer again, as a docs site's long example does. The button is drawn\nonly while the cap hides something, says whether the block is expanded with\n`aria-expanded`, names the block it opens with `aria-controls`, and the block\ncarries `:state(expanded)` while it is.\n\nSet `diff` to show a change. Put a unified diff, the output of `git diff` or\n`diff -u`, in the same slot, and the block draws the lines it added and\nremoved. The block never computes a diff itself. Line numbers come from the\nhunk headers and are hidden from the accessibility tree. Changed lines are\n`<ins>` and `<del>` with the `+` and `-` kept as text, so the change does not\ndepend on color. Where a removed line is paired with the added line that\nreplaced it, the words each does not share with the other are the `changed`\npart, so the eye goes to what changed within the line. Each file in the patch is its own block under its own name,\nand its copy button copies the new version of the file. `variant=\"split\"`\nshows the old version beside the new, each removal opposite its replacement.\n`context-lines` folds each long run of unchanged lines, keeping that many\nbeside each change, behind a button that shows them and hides them again,\nas a code host draws a diff written with more context than a reader needs.\n\n**A block that scrolls is a tab stop.** While its lines run past its width or\nits cap, the scroller is a region named for the block, such as \"Code,\napp.ts\", that Tab reaches, so a keyboard scrolls it with the arrow keys in\nevery browser. Chromium and Firefox make a scrolling box focusable on their\nown, and Safari does not. A block that fits is no stop at all.\n\n**The code the block draws is marked untranslated**, `translate=\"no\"` on\nits `<pre>`, so a page translator leaves highlighted lines and a diff as\nwritten. Code in the slot takes its translation mode from the element, which\nwrites nothing onto itself, so set `translate=\"no\"` on the element to keep a\ntranslator off plain code too.\n\nOn the server, the slot renders as ordinary code, so a diff first appears as\nthe patch text in a `<pre>`. The client makes the same first render, which\nkeeps hydration clean, and draws the diff once it can read the content. Diff\nmode is experimental. The rest of the family is stable.",
30754
30943
  "name": "HelixHeadlessCodeBlock",
30755
30944
  "cssProperties": [
30756
30945
  {
@@ -30783,6 +30972,10 @@
30783
30972
  "description": "The scrolling `<pre>`.",
30784
30973
  "name": "block"
30785
30974
  },
30975
+ {
30976
+ "description": "In a diff, the words of a changed line that the line opposite it does not have, inside its `text`.",
30977
+ "name": "changed"
30978
+ },
30786
30979
  {
30787
30980
  "description": "The `<code>` inside it.",
30788
30981
  "name": "code"
@@ -30867,6 +31060,10 @@
30867
31060
  "description": "In a split diff, the empty row opposite a line the other side does not have.",
30868
31061
  "name": "filler"
30869
31062
  },
31063
+ {
31064
+ "description": "In a diff with `context-lines`, the button that shows a folded run of unchanged lines, and hides it again, saying which with `aria-expanded`.",
31065
+ "name": "fold"
31066
+ },
30870
31067
  {
30871
31068
  "description": "The code, and the copy button beside it where there is no header.",
30872
31069
  "name": "frame"
@@ -30992,6 +31189,15 @@
30992
31189
  "words": true
30993
31190
  }
30994
31191
  },
31192
+ {
31193
+ "kind": "field",
31194
+ "name": "contextLines",
31195
+ "type": {
31196
+ "text": "number | undefined"
31197
+ },
31198
+ "description": "In a diff, how many unchanged lines to keep beside each change. Each\nlonger run of unchanged lines is folded behind a button that shows it.\nUnset shows every line the diff holds.",
31199
+ "attribute": "context-lines"
31200
+ },
30995
31201
  {
30996
31202
  "kind": "field",
30997
31203
  "name": "copiedLabel",
@@ -31065,6 +31271,19 @@
31065
31271
  "words": true
31066
31272
  }
31067
31273
  },
31274
+ {
31275
+ "kind": "field",
31276
+ "name": "hideUnchangedLabel",
31277
+ "type": {
31278
+ "text": "string"
31279
+ },
31280
+ "default": "'{count, plural, one {Hide # unchanged line} other {Hide # unchanged lines}}'",
31281
+ "description": "The words of a button that hides a run of unchanged lines it showed, in a\ndiff with `context-lines`. `{count}` is how many, and each language\nwrites the forms it has.",
31282
+ "attribute": "hide-unchanged-label",
31283
+ "helix": {
31284
+ "words": true
31285
+ }
31286
+ },
31068
31287
  {
31069
31288
  "kind": "field",
31070
31289
  "name": "highlight",
@@ -31125,6 +31344,19 @@
31125
31344
  "attribute": "no-copy",
31126
31345
  "reflects": true
31127
31346
  },
31347
+ {
31348
+ "kind": "field",
31349
+ "name": "showUnchangedLabel",
31350
+ "type": {
31351
+ "text": "string"
31352
+ },
31353
+ "default": "'{count, plural, one {Show # unchanged line} other {Show # unchanged lines}}'",
31354
+ "description": "The words of a button that shows a folded run of unchanged lines, in a\ndiff with `context-lines`. `{count}` is how many.",
31355
+ "attribute": "show-unchanged-label",
31356
+ "helix": {
31357
+ "words": true
31358
+ }
31359
+ },
31128
31360
  {
31129
31361
  "kind": "field",
31130
31362
  "name": "variant",
@@ -31200,6 +31432,68 @@
31200
31432
  "description": "The files in the content, when it is a diff and it can be read yet.",
31201
31433
  "readonly": true
31202
31434
  },
31435
+ {
31436
+ "kind": "field",
31437
+ "name": "unfolded",
31438
+ "privacy": "private",
31439
+ "readonly": true,
31440
+ "default": "new Set<string>()",
31441
+ "description": "The folds a reader opened, by file, hunk and the line each starts at."
31442
+ },
31443
+ {
31444
+ "kind": "method",
31445
+ "name": "runsOf",
31446
+ "privacy": "private",
31447
+ "return": {
31448
+ "type": {
31449
+ "text": "DiffRun[]"
31450
+ }
31451
+ },
31452
+ "parameters": [
31453
+ {
31454
+ "name": "hunk",
31455
+ "type": {
31456
+ "text": "DiffHunk"
31457
+ }
31458
+ }
31459
+ ],
31460
+ "description": "A hunk's lines in runs, folded where `context-lines` asks."
31461
+ },
31462
+ {
31463
+ "kind": "method",
31464
+ "name": "renderFold",
31465
+ "privacy": "private",
31466
+ "return": {
31467
+ "type": {
31468
+ "text": "TemplateResult"
31469
+ }
31470
+ },
31471
+ "parameters": [
31472
+ {
31473
+ "name": "run",
31474
+ "type": {
31475
+ "text": "DiffRun"
31476
+ }
31477
+ },
31478
+ {
31479
+ "name": "key",
31480
+ "type": {
31481
+ "text": "string"
31482
+ }
31483
+ },
31484
+ {
31485
+ "name": "line",
31486
+ "type": {
31487
+ "text": "(one: DiffLine) => TemplateResult"
31488
+ }
31489
+ },
31490
+ {
31491
+ "name": "hidden",
31492
+ "default": "false"
31493
+ }
31494
+ ],
31495
+ "description": "The button over a folded run, and the run once it is open.\n\nA disclosure, so focus stays on the button as the lines appear under it.\nThe new side of a split diff draws the same words hidden from the\naccessibility tree, there to keep the rows level and to answer a press."
31496
+ },
31203
31497
  {
31204
31498
  "kind": "field",
31205
31499
  "name": "text",
@@ -31544,6 +31838,12 @@
31544
31838
  "type": {
31545
31839
  "text": "number"
31546
31840
  }
31841
+ },
31842
+ {
31843
+ "name": "at",
31844
+ "type": {
31845
+ "text": "number"
31846
+ }
31547
31847
  }
31548
31848
  ],
31549
31849
  "description": "The old version beside the new one, row for row.\n\nThe new side's hunk headers are hidden from the accessibility tree, being\nthe old side's text again and there only to keep the rows level."
@@ -31953,6 +32253,14 @@
31953
32253
  "description": "The expand button's words while the block shows every line.",
31954
32254
  "fieldName": "collapseLabel"
31955
32255
  },
32256
+ {
32257
+ "name": "context-lines",
32258
+ "type": {
32259
+ "text": "number | undefined"
32260
+ },
32261
+ "description": "In a diff, how many unchanged lines to keep beside each change. Each\nlonger run of unchanged lines is folded behind a button that shows it.\nUnset shows every line the diff holds.",
32262
+ "fieldName": "contextLines"
32263
+ },
31956
32264
  {
31957
32265
  "name": "copied-label",
31958
32266
  "type": {
@@ -32007,6 +32315,15 @@
32007
32315
  "description": "The expand button's words while the cap hides lines.",
32008
32316
  "fieldName": "expandLabel"
32009
32317
  },
32318
+ {
32319
+ "name": "hide-unchanged-label",
32320
+ "type": {
32321
+ "text": "string"
32322
+ },
32323
+ "default": "'{count, plural, one {Hide # unchanged line} other {Hide # unchanged lines}}'",
32324
+ "description": "The words of a button that hides a run of unchanged lines it showed, in a\ndiff with `context-lines`. `{count}` is how many, and each language\nwrites the forms it has.",
32325
+ "fieldName": "hideUnchangedLabel"
32326
+ },
32010
32327
  {
32011
32328
  "name": "label",
32012
32329
  "type": {
@@ -32052,6 +32369,15 @@
32052
32369
  "description": "Whether to leave the copy button off.\n\nNegative, which is not a style choice. A boolean attribute is true whenever\nit is *present*, so a `copyable` defaulting to true could never be turned\noff from markup: `copyable=\"false\"` is the string \"false\", which is\npresent, which is true. Measured, and it is why this is named the other way\nround. The platform already writes booleans like this for the same reason,\n`novalidate` and `nomodule` and `noreferrer` among them.\n\n**Reflected, because the gutter is a stylesheet rule.** A sheet reserves\nthe copy button's width with `:host(:not([no-copy]))`, so the attribute is\nwhat decides whether the block pays for a control. Unreflected, setting it\nfrom script takes the button away (`render` reads the property) and leaves\nthe 40px it stood in reserved.\n\nA false boolean reflects as the attribute's absence, so this costs no\n`no-copy=\"\"` on hosts that never asked for one, and the rule about a\nreflected property taking no default is satisfied by the default being\n`false`.",
32053
32370
  "fieldName": "noCopy"
32054
32371
  },
32372
+ {
32373
+ "name": "show-unchanged-label",
32374
+ "type": {
32375
+ "text": "string"
32376
+ },
32377
+ "default": "'{count, plural, one {Show # unchanged line} other {Show # unchanged lines}}'",
32378
+ "description": "The words of a button that shows a folded run of unchanged lines, in a\ndiff with `context-lines`. `{count}` is how many.",
32379
+ "fieldName": "showUnchangedLabel"
32380
+ },
32055
32381
  {
32056
32382
  "name": "variant",
32057
32383
  "type": {
@@ -35380,7 +35706,7 @@
35380
35706
  "declarations": [
35381
35707
  {
35382
35708
  "kind": "class",
35383
- "description": "The picker on its own, with no field around it, for a settings pane or a\ntoolbar. Color Input shows this element in a panel behind a text field.\n\nThe saturation and brightness square is two `<input type=\"range\">` elements,\nlaid over the square and made invisible, and the handle is drawn from their\nvalues. The keyboard behavior, the announcements, and the touch targets come\nfrom the platform, and there is no `role=\"application\"`.\n\nThe picker works in HSB and derives the value from it. A value set from\noutside is read into the model once. Black is `brightness: 0`, which has no\nhue or saturation, so a model read back from the value would turn red into\ngray after you drag to the bottom of the square and back.\n\nThe square is one tab stop. In it, the up and down arrows move brightness\nand the left and right arrows move saturation, and PageUp and PageDown move\nbrightness by ten. The picker sends `input` as the color moves and `change`\nwhen a drag, a key, a typed value or a preset settles it, as\n`<input type=\"color\">` does.\n\nA screen reader hears the color's name, such as \"vibrant red\", after the two\nnumbers on the square and after the number on the hue ramp, and each preset\nis named by its color. The opacity ramp is heard as a percentage. Set\n`color-words` to speak the names in another language.\n\n`label` names the picker, which is then a group with that name, and the\nsquare's ramps say it before their own, as \"Brand, Saturation\". `hint`\nwrites help under the picker, which the square, the ramps and the value\nfield are described by. Inside Color Input the field carries both.\n\nThe presets are a listbox with the current color selected, and one tab\nstop. The arrow keys move between them, Home and End go to the ends, and\nEnter, Space or a press chooses one.",
35709
+ "description": "The picker on its own, with no field around it, for a settings pane or a\ntoolbar. Color Input shows this element in a panel behind a text field.\n\nThe saturation and brightness square is two `<input type=\"range\">` elements,\nlaid over the square and made invisible, and the handle is drawn from their\nvalues. The keyboard behavior, the announcements, and the touch targets come\nfrom the platform, and there is no `role=\"application\"`.\n\nThe picker works in HSB and derives the value from it. A value set from\noutside is read into the model once. Black is `brightness: 0`, which has no\nhue or saturation, so a model read back from the value would turn red into\ngray after you drag to the bottom of the square and back.\n\nThe square is one tab stop. In it, the up and down arrows move brightness\nand the left and right arrows move saturation, by ten with Shift. PageUp and\nPageDown move brightness by ten, and Home and End move saturation by ten,\nturned on a right-to-left page as the arrows are, as React Aria's ColorArea\ndoes. The picker sends `input` as the color moves and `change`\nwhen a drag, a key, a typed value or a preset settles it, as\n`<input type=\"color\">` does.\n\nA screen reader hears the color's name, such as \"vibrant red\", after the two\nnumbers on the square and after the number on the hue ramp, and each preset\nis named by its color. The opacity ramp is heard as a percentage. Set\n`color-words` to speak the names in another language.\n\n`label` names the picker, which is then a group with that name, and the\nsquare's ramps say it before their own, as \"Brand, Saturation\". `hint`\nwrites help under the picker, which the square, the ramps and the value\nfield are described by. Inside Color Input the field carries both.\n\nThe presets are a listbox with the current color selected, and one tab\nstop. The arrow keys move between them, Home and End go to the ends, and\nEnter, Space or a press chooses one.",
35384
35710
  "name": "HelixHeadlessColorPicker",
35385
35711
  "cssProperties": [
35386
35712
  {
@@ -36288,7 +36614,7 @@
36288
36614
  "name": "handleAreaKeydown",
36289
36615
  "privacy": "private",
36290
36616
  "readonly": true,
36291
- "description": "Moves the square from the keyboard, both axes from either of its inputs.\n\nThe square is two native ranges, and a native range maps every arrow to\nits own one axis: on the saturation input, ArrowUp moved the handle\nsideways. Here the vertical keys move brightness and the horizontal keys\nmove saturation, turned on a right-to-left page as the pointer is, which is\nwhat React Aria's ColorArea does."
36617
+ "description": "Moves the square from the keyboard, both axes from either of its inputs.\n\nThe square is two native ranges, and a native range maps every arrow to\nits own one axis: on the saturation input, ArrowUp moved the handle\nsideways. Here the vertical keys move brightness and the horizontal keys\nmove saturation, turned on a right-to-left page as the pointer is, which is\nwhat React Aria's ColorArea does. Shift makes an arrow a step of ten, and\nHome and End are saturation's steps of ten, as PageUp and PageDown are\nbrightness's."
36292
36618
  },
36293
36619
  {
36294
36620
  "kind": "method",
@@ -38132,7 +38458,7 @@
38132
38458
  "declarations": [
38133
38459
  {
38134
38460
  "kind": "class",
38135
- "description": "The list is a `Listbox`, which handles filtering, the empty state, the\nhighlight, `aria-activedescendant`, and scrolling an option into view. This\nelement handles the field, the panel, and the communication between them.\n\nThe typed text and the value are separate. The text is a filter: it narrows\nthe list and is then discarded. The value is the option you choose, and the\nfield then shows that option's text. The filter clears on close, so a\nreopened combobox starts from the whole list.\n\nFocus stays in the text field. The arrow keys move through the list with the\nlistbox's public `navigate` method. As typing narrows the list, a screen\nreader hears how many options are left, such as \"3 results\". Emptying the\nfield and leaving it clears a single choice.\n\n**Keyboard.**\n\n| Key | What it does |\n|---|---|\n| Down, Up | On a closed field, opens the list on the chosen option, or the first or the last. In the open list, moves the highlight, round from the last option to the first. |\n| Page Down, Page Up | In the open list, moves the highlight by as many options as the list shows at once. |\n| Enter | Chooses the highlighted option. With nothing left in the list, creates what was typed with `creatable`, or takes it with `allows-custom-value`. On a closed field, submits the form. |\n| Escape | Closes the list and puts the chosen words back. On a closed field, a second Escape clears a single choice. |\n| Tab | Closes the list and moves on. |\n| Backspace | With `multiple`, on an empty field, removes the last tag. |\n| Left | With `multiple`, with the caret at the start of the text, moves to the last tag's remove button. Right on a right-to-left page. |\n| Left, Right on a tag | Move between the tags, and past the last back to the text. |\n| Delete, Backspace on a tag | Removes the tag. |\n| Space, Home, End, letters | Edit the text. |\n\n**ARIA.** The input is the `combobox`, named by the label, with\n`aria-expanded`, `aria-controls` naming the list, `aria-autocomplete`\n(`both` with `suggest`, `list` otherwise) and `aria-activedescendant` on\nthe highlighted option. The list is the listbox `Listbox` describes.\n\nOn Apple devices, where VoiceOver does not read the option the field points\nto, the field says it in a live region as the highlight moves, says how many\noptions there are as the list opens, and says a choice once it is made, as\nReact Aria's combobox does there.\n\nSet `autocomplete` to let a browser's autofill choose an option.\n\nWith `multiple`, each chosen option is a tag in the field with its own remove\ncontrol. The text is the field's one tab stop, and the arrow keys reach the\ntags from it. The panel stays open and the filter clears after each choice, so the\nnext choice starts from the whole list.\n\nWith `creatable`, the combobox offers a create row and fires `helix-create`.\nIt does not add the option. The options are your light DOM, and your\nframework would re-render over an element the combobox inserted, so add the\noption in your event handler.",
38461
+ "description": "The list is a `Listbox`, which handles filtering, the empty state, the\nhighlight, `aria-activedescendant`, and scrolling an option into view. This\nelement handles the field, the panel, and the communication between them.\n\nThe typed text and the value are separate. The text is a filter: it narrows\nthe list and is then discarded. The value is the option you choose, and the\nfield then shows that option's text. The filter clears on close, so a\nreopened combobox starts from the whole list.\n\nFocus stays in the text field. The arrow keys move through the list with the\nlistbox's public `navigate` method. As typing narrows the list, a screen\nreader hears how many options are left, such as \"3 results\". Emptying the\nfield and leaving it clears a single choice.\n\n**Keyboard.**\n\n| Key | What it does |\n|---|---|\n| Down, Up | On a closed field, opens the list on the chosen option, or the first or the last. In the open list, moves the highlight, round from the last option to the first. |\n| Alt with Down, Alt with Up | Opens the list without moving the highlight, and closes it, choosing nothing. |\n| Page Down, Page Up | In the open list, moves the highlight by as many options as the list shows at once. |\n| Enter | Chooses the highlighted option. With nothing left in the list, creates what was typed with `creatable`, or takes it with `allows-custom-value`. On a closed field, submits the form. |\n| Escape | Closes the list and puts the chosen words back. On a closed field, a second Escape clears a single choice. |\n| Tab | Closes the list and moves on. |\n| Backspace | With `multiple`, on an empty field, removes the last tag. |\n| Left | With `multiple`, with the caret at the start of the text, moves to the last tag's remove button. Right on a right-to-left page. |\n| Left, Right on a tag | Move between the tags, and past the last back to the text. |\n| Delete, Backspace on a tag | Removes the tag. |\n| Space, Home, End, letters | Edit the text. |\n\n**ARIA.** The input is the `combobox`, named by the label, with\n`aria-expanded`, `aria-controls` naming the list, `aria-autocomplete`\n(`both` with `suggest`, `list` otherwise) and `aria-activedescendant` on\nthe highlighted option. The list is the listbox `Listbox` describes.\n\nOn Apple devices, where VoiceOver does not read the option the field points\nto, the field says it in a live region as the highlight moves, says how many\noptions there are as the list opens, and says a choice once it is made, as\nReact Aria's combobox does there.\n\nSet `autocomplete` to let a browser's autofill choose an option.\n\nWith `multiple`, each chosen option is a tag in the field with its own remove\ncontrol. The text is the field's one tab stop, and the arrow keys reach the\ntags from it. The panel stays open and the filter clears after each choice, so the\nnext choice starts from the whole list.\n\nWith `creatable`, the combobox offers a create row and fires `helix-create`.\nIt does not add the option. The options are your light DOM, and your\nframework would re-render over an element the combobox inserted, so add the\noption in your event handler.",
38136
38462
  "name": "HelixHeadlessCombobox",
38137
38463
  "cssParts": [
38138
38464
  {
@@ -48491,6 +48817,10 @@
48491
48817
  "description": "While `error-text` is set.",
48492
48818
  "name": "error"
48493
48819
  },
48820
+ {
48821
+ "description": "While `loading` is set, as the rows are on their way.",
48822
+ "name": "loading"
48823
+ },
48494
48824
  {
48495
48825
  "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
48496
48826
  "name": "settled",
@@ -66133,6 +66463,35 @@
66133
66463
  "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
66134
66464
  }
66135
66465
  },
66466
+ {
66467
+ "kind": "field",
66468
+ "name": "present",
66469
+ "type": {
66470
+ "text": "boolean"
66471
+ },
66472
+ "privacy": "protected",
66473
+ "description": "Whether the element is still on the page for a reader, which is what\nthe focus hand-off waits on: connected, for a surface the page removes.\nA surface that hides itself says it is gone once hidden, and calls\n`handFocusOn` then.",
66474
+ "readonly": true,
66475
+ "inheritedFrom": {
66476
+ "name": "MixinDismissible",
66477
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
66478
+ }
66479
+ },
66480
+ {
66481
+ "kind": "method",
66482
+ "name": "handFocusOn",
66483
+ "privacy": "protected",
66484
+ "return": {
66485
+ "type": {
66486
+ "text": "void"
66487
+ }
66488
+ },
66489
+ "description": "Hands focus on now, where a dismissal is waiting for this element to\ngo: for a surface that hides itself, once it has.",
66490
+ "inheritedFrom": {
66491
+ "name": "MixinDismissible",
66492
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
66493
+ }
66494
+ },
66136
66495
  {
66137
66496
  "kind": "method",
66138
66497
  "name": "dismiss",
@@ -112816,6 +113175,35 @@
112816
113175
  "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
112817
113176
  }
112818
113177
  },
113178
+ {
113179
+ "kind": "field",
113180
+ "name": "present",
113181
+ "type": {
113182
+ "text": "boolean"
113183
+ },
113184
+ "privacy": "protected",
113185
+ "description": "Whether the element is still on the page for a reader, which is what\nthe focus hand-off waits on: connected, for a surface the page removes.\nA surface that hides itself says it is gone once hidden, and calls\n`handFocusOn` then.",
113186
+ "readonly": true,
113187
+ "inheritedFrom": {
113188
+ "name": "MixinDismissible",
113189
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
113190
+ }
113191
+ },
113192
+ {
113193
+ "kind": "method",
113194
+ "name": "handFocusOn",
113195
+ "privacy": "protected",
113196
+ "return": {
113197
+ "type": {
113198
+ "text": "void"
113199
+ }
113200
+ },
113201
+ "description": "Hands focus on now, where a dismissal is waiting for this element to\ngo: for a surface that hides itself, once it has.",
113202
+ "inheritedFrom": {
113203
+ "name": "MixinDismissible",
113204
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
113205
+ }
113206
+ },
112819
113207
  {
112820
113208
  "kind": "method",
112821
113209
  "name": "dismiss",
@@ -117326,6 +117714,10 @@
117326
117714
  "description": "The number of entries a branch holds.",
117327
117715
  "name": "count"
117328
117716
  },
117717
+ {
117718
+ "description": "The row shown in the tree while it has no entries to show: no value, or a filter that matched none. It holds the `empty` slot.",
117719
+ "name": "empty"
117720
+ },
117329
117721
  {
117330
117722
  "description": "The tree and the copy button beside it.",
117331
117723
  "name": "frame"
@@ -117391,6 +117783,12 @@
117391
117783
  "name": "value"
117392
117784
  }
117393
117785
  ],
117786
+ "slots": [
117787
+ {
117788
+ "description": "Shown in the tree while it has no entries to show. Defaults to `empty-label`, or `no-matches-label` while a filter matched none.",
117789
+ "name": "empty"
117790
+ }
117791
+ ],
117394
117792
  "members": [
117395
117793
  {
117396
117794
  "kind": "field",
@@ -117447,6 +117845,19 @@
117447
117845
  "description": "How many levels start open.\n\nOne by default: the root is open and everything under it closed, so a\nreader sees the shape of the value before its contents. `0` starts with the\nroot closed; a large number opens everything, which on a big value is the\nwall of text this exists to avoid.",
117448
117846
  "attribute": "default-depth"
117449
117847
  },
117848
+ {
117849
+ "kind": "field",
117850
+ "name": "emptyLabel",
117851
+ "type": {
117852
+ "text": "string"
117853
+ },
117854
+ "default": "'Nothing to show'",
117855
+ "description": "What the tree says while there is no value to show, such as before a\nfetch answers. The `empty` slot replaces it.",
117856
+ "attribute": "empty-label",
117857
+ "helix": {
117858
+ "words": true
117859
+ }
117860
+ },
117450
117861
  {
117451
117862
  "kind": "field",
117452
117863
  "name": "expanded",
@@ -117562,6 +117973,19 @@
117562
117973
  "description": "Hides the copy button.\n\nNegative for the reason Code Block's is: a boolean attribute defaulting to\ntrue could never be turned off from markup.\n\n**It does not reflect, where Code Block's does**, and the difference is what\nthe two sheets need. Code Block reserves the button's width with\n`:host(:not([no-copy]))`, so the attribute has to be there for a consumer\nwho set the property. This button is positioned out of the flow and takes no\nroom, so nothing selects on it, and reflection exists so that a selector can\nreach a value.",
117563
117974
  "attribute": "no-copy"
117564
117975
  },
117976
+ {
117977
+ "kind": "field",
117978
+ "name": "noMatchesLabel",
117979
+ "type": {
117980
+ "text": "string"
117981
+ },
117982
+ "default": "'No matches'",
117983
+ "description": "What the tree says while a filter matched no entry. The `empty` slot\nreplaces it.",
117984
+ "attribute": "no-matches-label",
117985
+ "helix": {
117986
+ "words": true
117987
+ }
117988
+ },
117565
117989
  {
117566
117990
  "kind": "field",
117567
117991
  "name": "renderValue",
@@ -117831,6 +118255,16 @@
117831
118255
  ],
117832
118256
  "description": "Opens the branches around each path, where the value has them."
117833
118257
  },
118258
+ {
118259
+ "kind": "field",
118260
+ "name": "blank",
118261
+ "type": {
118262
+ "text": "boolean"
118263
+ },
118264
+ "privacy": "private",
118265
+ "description": "Whether the tree has no entries to show. Not while a value named by `for`\nis still to be read, as on a server and while hydrating what one sent,\nwhere it says nothing yet about the value.",
118266
+ "readonly": true
118267
+ },
117834
118268
  {
117835
118269
  "kind": "method",
117836
118270
  "name": "counted",
@@ -118631,6 +119065,15 @@
118631
119065
  "description": "How many levels start open.\n\nOne by default: the root is open and everything under it closed, so a\nreader sees the shape of the value before its contents. `0` starts with the\nroot closed; a large number opens everything, which on a big value is the\nwall of text this exists to avoid.",
118632
119066
  "fieldName": "defaultDepth"
118633
119067
  },
119068
+ {
119069
+ "name": "empty-label",
119070
+ "type": {
119071
+ "text": "string"
119072
+ },
119073
+ "default": "'Nothing to show'",
119074
+ "description": "What the tree says while there is no value to show, such as before a\nfetch answers. The `empty` slot replaces it.",
119075
+ "fieldName": "emptyLabel"
119076
+ },
118634
119077
  {
118635
119078
  "name": "filter",
118636
119079
  "type": {
@@ -118719,6 +119162,15 @@
118719
119162
  "description": "Hides the copy button.\n\nNegative for the reason Code Block's is: a boolean attribute defaulting to\ntrue could never be turned off from markup.\n\n**It does not reflect, where Code Block's does**, and the difference is what\nthe two sheets need. Code Block reserves the button's width with\n`:host(:not([no-copy]))`, so the attribute has to be there for a consumer\nwho set the property. This button is positioned out of the flow and takes no\nroom, so nothing selects on it, and reflection exists so that a selector can\nreach a value.",
118720
119163
  "fieldName": "noCopy"
118721
119164
  },
119165
+ {
119166
+ "name": "no-matches-label",
119167
+ "type": {
119168
+ "text": "string"
119169
+ },
119170
+ "default": "'No matches'",
119171
+ "description": "What the tree says while a filter matched no entry. The `empty` slot\nreplaces it.",
119172
+ "fieldName": "noMatchesLabel"
119173
+ },
118722
119174
  {
118723
119175
  "name": "result-label",
118724
119176
  "type": {
@@ -118755,6 +119207,28 @@
118755
119207
  "fieldName": "windowed"
118756
119208
  }
118757
119209
  ],
119210
+ "cssStates": [
119211
+ {
119212
+ "description": "While the tree has no entries to show: no value, or a filter that matched none.",
119213
+ "name": "empty"
119214
+ },
119215
+ {
119216
+ "description": "While `filter` holds text.",
119217
+ "name": "filtered"
119218
+ },
119219
+ {
119220
+ "description": "While `filter` holds text and matched at least one entry.",
119221
+ "name": "matched"
119222
+ },
119223
+ {
119224
+ "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
119225
+ "name": "settled",
119226
+ "inheritedFrom": {
119227
+ "name": "HelixElement",
119228
+ "module": "src/helix-element/helix-element.ts"
119229
+ }
119230
+ }
119231
+ ],
118758
119232
  "superclass": {
118759
119233
  "name": "HelixElement",
118760
119234
  "package": "@fusion.dev/helix-core"
@@ -118787,16 +119261,6 @@
118787
119261
  },
118788
119262
  "tagName": "helix-headless-object-inspector",
118789
119263
  "customElement": true,
118790
- "cssStates": [
118791
- {
118792
- "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
118793
- "name": "settled",
118794
- "inheritedFrom": {
118795
- "name": "HelixElement",
118796
- "module": "src/helix-element/helix-element.ts"
118797
- }
118798
- }
118799
- ],
118800
119264
  "modulePath": "src/object-inspector/root/object-inspector-root.ts",
118801
119265
  "definitionPath": "src/object-inspector/root/object-inspector-root.ts"
118802
119266
  }
@@ -155239,7 +155703,7 @@
155239
155703
  "declarations": [
155240
155704
  {
155241
155705
  "kind": "class",
155242
- "description": "Lays out the rows on a CSS grid, so every column lines up across rows and\neach row stays a real element that can be styled, hidden, or made\ninteractive. A `<table>` layout aligns columns but limits almost everything\nelse.\n\nA grid of elements has no table structure for assistive technology, so the\nroles are set explicitly: `table`, `row`, `cell`, `columnheader`, and\n`rowheader` for a `header` cell in a row of values. Rows are\n`display: contents`, so their cells become items of the one grid.\n\n**Sorting.** A column with `sortable` and a `field` draws its heading as a\nbutton that sorts the rows by the text of its cells, numbers by their value.\nYour markup is not reordered: the table draws the rows in the sorted order.\n\n1. Each press cycles the column through ascending, descending, and the\n order the rows were written in, which keeps a server's own ranking\n reachable.\n2. `helix-sort` asks first, with `field:direction`, or empty for the written\n order. Refuse it to keep the order, or to sort the rows yourself and set\n `sort`.\n3. `helix-sorted` follows once the order stands, and `sort` holds it.\n4. The heading carries `aria-sort`, and a screen reader hears `sorted-label`\n (\"Sorted by Name, ascending\") or `unsorted-label` from a polite region.\n\nTab reaches each sort button, and Enter or Space presses it.\n\nThe `heading` slot names the table: slot a heading or a line of text into\nit, and the table is named by its words. An `aria-label` or `aria-labelledby` on the\nhost wins over it.\n\n**Selecting.** `selectable` adds a column of checkboxes.\n\n1. Each row is known by its `value`, or by its place among the rows where it\n has none, and `selected` holds the chosen keys, comma separated, the same\n shape `DataTable` uses. `default-selected` is where it starts.\n2. A row's checkbox is named by `select-row-label` (\"Select {row}\") with the\n words of the row's first cell. The checkbox in the heading selects every\n row, and shows a dash while only some are chosen.\n3. `helix-select` asks first, with every key the change would leave.\n Refuse it to keep the selection. `helix-selected` follows once it stands.\n4. A chosen row takes `:state(selected)`, and a screen reader hears\n `selected-label` (\"2 selected\") from a polite region.\n\nTab reaches each checkbox, and Space ticks it. To act on one row, put a\nlink or a button in a cell, or give the row an `href`.\n\n`selection-mode=\"single\"` selects one row at a time: ticking a row lets go\nof the one before, the heading holds no checkbox, and Shift and Control with\nA take in nothing more. `selection-behavior=\"replace\"` makes a press on a\nrow, anywhere but its own controls, select it alone, as a file list does,\nand in a `grid` table the arrow keys carry the selection with them. Control\nor Command with a press adds or takes out the row, and with an arrow moves\nwithout selecting. Shift with a press takes in the rows from the one last\nchosen.\n\n**Nesting rows.** A row with `parent` sits under the row of that key, as\na file sits in a folder. The table then draws a column of disclosure\nbuttons, under a heading named by `expand-column-label`: a row with rows\nunder it has a button named by `expand-row-label` (\"Expand {row}\") that\nsays with `aria-expanded` whether it is open, and the rows under a shut row\nare not drawn. `expanded` holds the open rows' keys, comma separated, and\n`default-expanded` is where it starts. A press asks with\n`helix-before-toggle` and tells with `helix-toggle`, both from the row, so\nyou can refuse it or load the rows on the way. A sort orders the rows\nunder each row among themselves, and in a `grid` table the table is a\n`treegrid` whose rows say their depth.\n\n**Moving rows.** `reorderable` adds a column of grips before the checkboxes,\nunder a heading named by `row-grips-label`.\n\n1. Each row is known by its `value`, or by its place among the rows where it\n has none, as for selecting. Give rows a `value` when they move, so a key\n stays with its row.\n2. A grip is a button named by `move-row-label` (\"Move {row}\") with the\n words of the row's first cell. Drag it to move its row, and the page\n scrolls near an edge. Or press it with Space, Enter, or a click to pick\n the row up, move it with Up, Down, Home, and End, and press it again to\n drop it. A click on another row drops it there, and Escape puts it back.\n3. `helix-before-reorder` asks first, and `helix-reorder` follows with\n `keys`, every row's key in the new order. **You move the rows**: the\n table moves no element of yours, and focus goes back to the moved row's\n grip once you have.\n4. Each step is said in the table's live region, in words you can change:\n `picked-up-label`, `moved-label`, `dropped-label`, and `canceled-label`.\n The grips do nothing while a sort is set.\n\n**A grid.** `grid` makes the table one tab stop that the arrow keys move\nthrough cell by cell, the headings included, as React Aria's table is. The\ntable is then a `grid` and each value a `gridcell`, and the table gives\nevery cell a `tabindex` so focus can rest on it: set `grid` only where the\ncells may carry one.\n\n| Key | What it does |\n|---|---|\n| Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. |\n| Down, Up | Moves one row, the headings included. |\n| Home, End | Moves to the first or the last cell of the row. |\n| Control with Home or End | Moves to the first or the last cell of the table. |\n| Page Down, Page Up | Moves by the rows that fit in view. |\n| Enter, F2 | Moves into the cell's links and controls. Escape or F2 moves back to the cell, and Tab moves between the controls of one cell. |\n| Enter on a cell of a row with `href` | Follows the row's link. |\n| Enter, Space on a sortable heading | Sorts by the column. |\n| Space on a row, Enter or Space on its checkbox cell | Selects the row, in a `selectable` table. |\n| Enter or Space on a disclosure cell | Shows or hides the rows under the row, in a table whose rows nest. |\n| Enter or Space on a grip cell | Picks the row up, or drops it, in a `reorderable` table. Up, Down, Home, and End move a row picked up, and Escape puts it back. |\n| Down, Up, Page Down, Page Up under `selection-behavior=\"replace\"` | Selects the row it moves to alone. Control or Command with the key moves without selecting. |\n| Shift with Down or Up | Selects the rows it moves across, in a `selectable` table. |\n| Shift with Space | Selects every row from the one last chosen, in a `selectable` table. |\n| Control or Command with A | Selects every row, in a `selectable` table. |\n| A letter or a word | Moves to the next row whose first cell starts with what you typed. |\n| Tab | Leaves the table. |\n\n**Loading more.** `load-more` sends `helix-load-more` once the end of the\ntable comes within a screen of view, in the box that scrolls it or the\npage, once for each number of rows: add rows and it can send it again. Set\n`loading` while you fetch, and the table asks for nothing until it clears.\n\nWhen the rows did not load, set `error-text`, such as \"The orders did not\nload\", and put a button that tries again in the `error` slot. The line shows\nafter the rows in place of the empty and loading lines, the live region says\nit, and the table takes the `error` state. Clear it once you try again.\n\nThe CSS custom properties listed for this component are written by it and\nread by the stylesheet that draws it. Do not set them. Each holds a number\nthe component computes and CSS cannot, so the stylesheet can draw the table\nwithout measuring anything.",
155706
+ "description": "Lays out the rows on a CSS grid, so every column lines up across rows and\neach row stays a real element that can be styled, hidden, or made\ninteractive. A `<table>` layout aligns columns but limits almost everything\nelse.\n\nA grid of elements has no table structure for assistive technology, so the\nroles are set explicitly: `table`, `row`, `cell`, `columnheader`, and\n`rowheader` for a `header` cell in a row of values. Rows are\n`display: contents`, so their cells become items of the one grid.\n\n**Sorting.** A column with `sortable` and a `field` draws its heading as a\nbutton that sorts the rows by the text of its cells, numbers by their value.\nYour markup is not reordered: the table draws the rows in the sorted order.\n\n1. Each press cycles the column through ascending, descending, and the\n order the rows were written in, which keeps a server's own ranking\n reachable.\n2. `helix-sort` asks first, with `field:direction`, or empty for the written\n order. Refuse it to keep the order, or to sort the rows yourself and set\n `sort`.\n3. `helix-sorted` follows once the order stands, and `sort` holds it.\n4. The heading carries `aria-sort`, and a screen reader hears `sorted-label`\n (\"Sorted by Name, ascending\") or `unsorted-label` from a polite region.\n\nTab reaches each sort button, and Enter or Space presses it.\n\nThe `heading` slot names the table: slot a heading or a line of text into\nit, and the table is named by its words. An `aria-label` or `aria-labelledby` on the\nhost wins over it.\n\n**Selecting.** `selectable` adds a column of checkboxes.\n\n1. Each row is known by its `value`, or by its place among the rows where it\n has none, and `selected` holds the chosen keys, comma separated, the same\n shape `DataTable` uses. `default-selected` is where it starts.\n2. A row's checkbox is named by `select-row-label` (\"Select {row}\") with the\n words of the row's first cell. The checkbox in the heading selects every\n row, and shows a dash while only some are chosen.\n3. `helix-select` asks first, with every key the change would leave.\n Refuse it to keep the selection. `helix-selected` follows once it stands.\n4. A chosen row takes `:state(selected)`, and a screen reader hears\n `selected-label` (\"2 selected\") from a polite region.\n\nTab reaches each checkbox, and Space ticks it. To act on one row, put a\nlink or a button in a cell, or give the row an `href`.\n\n`selection-mode=\"single\"` selects one row at a time: ticking a row lets go\nof the one before, the heading holds no checkbox, and Shift and Control with\nA take in nothing more. `selection-behavior=\"replace\"` makes a press on a\nrow, anywhere but its own controls, select it alone, as a file list does,\nand in a `grid` table the arrow keys carry the selection with them. Control\nor Command with a press adds or takes out the row, and with an arrow moves\nwithout selecting. Shift with a press takes in the rows from the one last\nchosen.\n\n**Nesting rows.** A row with `parent` sits under the row of that key, as\na file sits in a folder. The table then draws a column of disclosure\nbuttons, under a heading named by `expand-column-label`: a row with rows\nunder it has a button named by `expand-row-label` (\"Expand {row}\") that\nsays with `aria-expanded` whether it is open, and the rows under a shut row\nare not drawn. `expanded` holds the open rows' keys, comma separated, and\n`default-expanded` is where it starts. A press asks with\n`helix-before-toggle` and tells with `helix-toggle`, both from the row, so\nyou can refuse it or load the rows on the way. A sort orders the rows\nunder each row among themselves, and in a `grid` table the table is a\n`treegrid` whose rows say their depth.\n\n**Moving rows.** `reorderable` adds a column of grips before the checkboxes,\nunder a heading named by `row-grips-label`.\n\n1. Each row is known by its `value`, or by its place among the rows where it\n has none, as for selecting. Give rows a `value` when they move, so a key\n stays with its row.\n2. A grip is a button named by `move-row-label` (\"Move {row}\") with the\n words of the row's first cell. Drag it to move its row, and the page\n scrolls near an edge. Or press it with Space, Enter, or a click to pick\n the row up, move it with Up, Down, Home, and End, and press it again to\n drop it. A click on another row drops it there, and Escape puts it back.\n3. `helix-before-reorder` asks first, and `helix-reorder` follows with\n `keys`, every row's key in the new order. **You move the rows**: the\n table moves no element of yours, and focus goes back to the moved row's\n grip once you have.\n4. Each step is said in the table's live region, in words you can change:\n `picked-up-label`, `moved-label`, `dropped-label`, and `canceled-label`.\n The grips do nothing while a sort is set.\n\n**A grid.** `grid` makes the table one tab stop that the arrow keys move\nthrough cell by cell, the headings included, as React Aria's table is. The\ntable is then a `grid` and each value a `gridcell`, and the table gives\nevery cell a `tabindex` so focus can rest on it: set `grid` only where the\ncells may carry one.\n\n| Key | What it does |\n|---|---|\n| Right, Left | Moves one cell along the row. Left moves on, on a right-to-left page. |\n| Down, Up | Moves one row, the headings included. |\n| Home, End | Moves to the first or the last cell of the row. |\n| Control with Home or End | Moves to the first or the last cell of the table. |\n| Page Down, Page Up | Moves by the rows that fit in view. |\n| Enter, F2 | Moves into the cell's links and controls. Escape or F2 moves back to the cell, and Tab moves between the controls of one cell. |\n| Enter on a cell of a row with `href` | Follows the row's link. |\n| Enter, Space on a sortable heading | Sorts by the column. |\n| Space on a row, Enter or Space on its checkbox cell | Selects the row, in a `selectable` table. |\n| Enter or Space on a disclosure cell | Shows or hides the rows under the row, in a table whose rows nest. |\n| Right on a disclosure cell | Shows the rows under a shut row, and otherwise moves one cell along the row. Left does, on a right-to-left page. |\n| Left on a disclosure cell | Hides the rows under an open row, and moves to the row this one sits under from any other. |\n| Enter or Space on a grip cell | Picks the row up, or drops it, in a `reorderable` table. Up, Down, Home, and End move a row picked up, and Escape puts it back. |\n| Down, Up, Page Down, Page Up under `selection-behavior=\"replace\"` | Selects the row it moves to alone. Control or Command with the key moves without selecting. |\n| Shift with Down or Up | Selects the rows it moves across, in a `selectable` table. |\n| Shift with Space | Selects every row from the one last chosen, in a `selectable` table. |\n| Control or Command with A | Selects every row, in a `selectable` table. |\n| A letter or a word | Moves to the next row whose first cell starts with what you typed. |\n| Tab | Leaves the table. |\n\n**Loading more.** `load-more` sends `helix-load-more` once the end of the\ntable comes within a screen of view, in the box that scrolls it or the\npage, once for each number of rows: add rows and it can send it again. Set\n`loading` while you fetch, and the table asks for nothing until it clears.\n\nWhen the rows did not load, set `error-text`, such as \"The orders did not\nload\", and put a button that tries again in the `error` slot. The line shows\nafter the rows in place of the empty and loading lines, the live region says\nit, and the table takes the `error` state. Clear it once you try again.\n\nThe CSS custom properties listed for this component are written by it and\nread by the stylesheet that draws it. Do not set them. Each holds a number\nthe component computes and CSS cannot, so the stylesheet can draw the table\nwithout measuring anything.",
155243
155707
  "name": "HelixHeadlessTable",
155244
155708
  "cssProperties": [
155245
155709
  {
@@ -155848,7 +156312,7 @@
155848
156312
  "name": "gridKeys",
155849
156313
  "privacy": "private",
155850
156314
  "readonly": true,
155851
- "default": "new TableGridController(this, { activate: (place, event) => this.activate(place, event), arrive: (to, control) => { if (this.replaces && !control) { this.chooseOnly(to) } }, columns: () => this.tableColumns.filter((column) => column.shown), lead: () => this.lead, on: () => this.grid, part: (name) => this.partNamed(name), rows: () => (this.childrenKnown ? this.arrangedRows : []), rowWords: () => this.arrangedRows.map((row) => textOf(row.children[0])), selectAll: () => this.selectable && !this.single && this.requestSelected(new Set([...this.chosen, ...this.enabledKeys])), selectRange: (to, from) => this.selectRange(to, from), })",
156315
+ "default": "new TableGridController(this, { activate: (place, event) => this.activate(place, event), arrive: (to, control) => { if (this.replaces && !control) { this.chooseOnly(to) } }, columns: () => this.tableColumns.filter((column) => column.shown), disclose: (at, forward) => this.disclose(at, forward), lead: () => this.lead, on: () => this.grid, part: (name) => this.partNamed(name), rows: () => (this.childrenKnown ? this.arrangedRows : []), rowWords: () => this.arrangedRows.map((row) => textOf(row.children[0])), selectAll: () => this.selectable && !this.single && this.requestSelected(new Set([...this.chosen, ...this.enabledKeys])), selectRange: (to, from) => this.selectRange(to, from), })",
155852
156316
  "description": "The keyboard of a `grid` table, in `grid-controller.ts`."
155853
156317
  },
155854
156318
  {
@@ -156255,6 +156719,31 @@
156255
156719
  ],
156256
156720
  "description": "One row's checkbox, ticked or not. It becomes the row a range runs from."
156257
156721
  },
156722
+ {
156723
+ "kind": "method",
156724
+ "name": "disclose",
156725
+ "privacy": "private",
156726
+ "return": {
156727
+ "type": {
156728
+ "text": "boolean | number"
156729
+ }
156730
+ },
156731
+ "parameters": [
156732
+ {
156733
+ "name": "at",
156734
+ "type": {
156735
+ "text": "number"
156736
+ }
156737
+ },
156738
+ {
156739
+ "name": "forward",
156740
+ "type": {
156741
+ "text": "boolean"
156742
+ }
156743
+ }
156744
+ ],
156745
+ "description": "Right or Left on a disclosure cell, as on a tree's item and as Data\nTable's row headers do: on to open a shut row, back to shut an open one.\nBack on a row that is shut, or has no rows under it, moves to the row it\nsits under. Anything else moves along the row."
156746
+ },
156258
156747
  {
156259
156748
  "kind": "method",
156260
156749
  "name": "activate",
@@ -157485,6 +157974,10 @@
157485
157974
  "description": "While `error-text` is set.",
157486
157975
  "name": "error"
157487
157976
  },
157977
+ {
157978
+ "description": "While `loading` is set, as the rows are on their way.",
157979
+ "name": "loading"
157980
+ },
157488
157981
  {
157489
157982
  "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
157490
157983
  "name": "settled",
@@ -160030,6 +160523,35 @@
160030
160523
  "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
160031
160524
  }
160032
160525
  },
160526
+ {
160527
+ "kind": "field",
160528
+ "name": "present",
160529
+ "type": {
160530
+ "text": "boolean"
160531
+ },
160532
+ "privacy": "protected",
160533
+ "description": "Whether the element is still on the page for a reader, which is what\nthe focus hand-off waits on: connected, for a surface the page removes.\nA surface that hides itself says it is gone once hidden, and calls\n`handFocusOn` then.",
160534
+ "readonly": true,
160535
+ "inheritedFrom": {
160536
+ "name": "MixinDismissible",
160537
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
160538
+ }
160539
+ },
160540
+ {
160541
+ "kind": "method",
160542
+ "name": "handFocusOn",
160543
+ "privacy": "protected",
160544
+ "return": {
160545
+ "type": {
160546
+ "text": "void"
160547
+ }
160548
+ },
160549
+ "description": "Hands focus on now, where a dismissal is waiting for this element to\ngo: for a surface that hides itself, once it has.",
160550
+ "inheritedFrom": {
160551
+ "name": "MixinDismissible",
160552
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
160553
+ }
160554
+ },
160033
160555
  {
160034
160556
  "kind": "method",
160035
160557
  "name": "stopBeside",
@@ -161842,6 +162364,35 @@
161842
162364
  "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
161843
162365
  }
161844
162366
  },
162367
+ {
162368
+ "kind": "field",
162369
+ "name": "present",
162370
+ "type": {
162371
+ "text": "boolean"
162372
+ },
162373
+ "privacy": "protected",
162374
+ "description": "Whether the element is still on the page for a reader, which is what\nthe focus hand-off waits on: connected, for a surface the page removes.\nA surface that hides itself says it is gone once hidden, and calls\n`handFocusOn` then.",
162375
+ "readonly": true,
162376
+ "inheritedFrom": {
162377
+ "name": "MixinDismissible",
162378
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
162379
+ }
162380
+ },
162381
+ {
162382
+ "kind": "method",
162383
+ "name": "handFocusOn",
162384
+ "privacy": "protected",
162385
+ "return": {
162386
+ "type": {
162387
+ "text": "void"
162388
+ }
162389
+ },
162390
+ "description": "Hands focus on now, where a dismissal is waiting for this element to\ngo: for a surface that hides itself, once it has.",
162391
+ "inheritedFrom": {
162392
+ "name": "MixinDismissible",
162393
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
162394
+ }
162395
+ },
161845
162396
  {
161846
162397
  "kind": "method",
161847
162398
  "name": "dismiss",
@@ -173153,6 +173704,35 @@
173153
173704
  "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
173154
173705
  }
173155
173706
  },
173707
+ {
173708
+ "kind": "field",
173709
+ "name": "present",
173710
+ "type": {
173711
+ "text": "boolean"
173712
+ },
173713
+ "privacy": "protected",
173714
+ "description": "Whether the element is still on the page for a reader, which is what\nthe focus hand-off waits on: connected, for a surface the page removes.\nA surface that hides itself says it is gone once hidden, and calls\n`handFocusOn` then.",
173715
+ "readonly": true,
173716
+ "inheritedFrom": {
173717
+ "name": "MixinDismissible",
173718
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
173719
+ }
173720
+ },
173721
+ {
173722
+ "kind": "method",
173723
+ "name": "handFocusOn",
173724
+ "privacy": "protected",
173725
+ "return": {
173726
+ "type": {
173727
+ "text": "void"
173728
+ }
173729
+ },
173730
+ "description": "Hands focus on now, where a dismissal is waiting for this element to\ngo: for a surface that hides itself, once it has.",
173731
+ "inheritedFrom": {
173732
+ "name": "MixinDismissible",
173733
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
173734
+ }
173735
+ },
173156
173736
  {
173157
173737
  "kind": "method",
173158
173738
  "name": "stopBeside",
@@ -185611,6 +186191,18 @@
185611
186191
  "description": "The entry that is playing.",
185612
186192
  "name": "current"
185613
186193
  },
186194
+ {
186195
+ "description": "The entry a pointer is dragging, in a `reorderable` playlist.",
186196
+ "name": "dragging"
186197
+ },
186198
+ {
186199
+ "description": "The entry the dragged one would land after, which the drop indicator is drawn under.",
186200
+ "name": "drop-after"
186201
+ },
186202
+ {
186203
+ "description": "The entry the dragged one would land before, which the drop indicator is drawn over.",
186204
+ "name": "drop-before"
186205
+ },
185614
186206
  {
185615
186207
  "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
185616
186208
  "name": "settled",
@@ -186483,7 +187075,7 @@
186483
187075
  "declarations": [
186484
187076
  {
186485
187077
  "kind": "class",
186486
- "description": "**You slot the player**, so it keeps your appearance, extra controls,\ncaptions, and poster treatment. `Sandbox` takes its preview and `Menu` its\ntrigger the same way.\n\n**Entries are markup.** React skips properties it would set imperatively\nduring hydration, so an array property on a custom element is missing on the\nfirst paint of a server-rendered page. `using-the-elements.mdx` has the\nmeasurement. Markup also makes each entry a real button with its name inside.\n\n**The playlist does not play media.** It sets `src` on the player and tracks\nwhich entry is current. The current entry moves when:\n\n- an entry is pressed,\n- the player dispatches `helix-next` or `helix-previous`, or\n- the player reaches the end.\n\nOn `ended` the playlist advances and the next clip starts playing, because\nthe user already pressed play once. `no-advance` turns that off, and the\nplaylist stays on the entry that ended. `repeat` decides what happens at the\nend: `one` plays the same entry again, and `all` goes from the last entry\nback to the first. Without it, the playlist stops on the last entry and\nsends `helix-end`. `shuffle` plays the entries in a random order, starting\nfrom the one that is current, and `previous` retraces that order.\n\n**`helix-before-activate` says why the playlist is moving**, in\n`detail.cause`: `press` for an entry or a menu choice, `next` and\n`previous` for the player's controls and the methods, `ended` at the end of\na clip, and `removed` when the current entry leaves the playlist. Cancel an\n`ended` move to show your own \"Up next\" countdown, then call `next()`.\n\n**Removing the current entry moves the playlist on**, to the entry after it,\nor to the one before it when it was the last. A clip that was playing keeps\nplaying in the entry that takes its place.\n\n**The player is named by the current entry**, and the device's own media\ncontrols show the entry as the title. A player you gave a `label` keeps\nyour name, and only the title follows the entry.\n\n**Keyboard.** The entries take one stop in the tab order: the entry you\nlast focused, or the current entry before you have focused one. Enter or\nSpace plays it. The arrow keys move focus to the entry before or after, and\nHome and End to the first and the last, passing over disabled entries. The\ncurrent entry carries `aria-current`. While focus is on the player, the\nplayer's own keys work, and `Video` lists them, and Shift with N or P plays\nthe next or the previous entry. The player's previous and next controls\nmove through the entries in the same order the playlist does.\n\n**What a screen reader hears.** A list named by `label`, with a button for\neach entry. When the playlist moves to another entry, by a press, by the\nplayer's controls, or at the end of a clip, a live region says\n`playing-label`, \"Now playing\" and the entry's name.",
187078
+ "description": "**You slot the player**, so it keeps your appearance, extra controls,\ncaptions, and poster treatment. `Sandbox` takes its preview and `Menu` its\ntrigger the same way.\n\n**Entries are markup.** React skips properties it would set imperatively\nduring hydration, so an array property on a custom element is missing on the\nfirst paint of a server-rendered page. `using-the-elements.mdx` has the\nmeasurement. Markup also makes each entry a real button with its name inside.\n\n**The playlist does not play media.** It sets `src` on the player and tracks\nwhich entry is current. The current entry moves when:\n\n- an entry is pressed,\n- the player dispatches `helix-next` or `helix-previous`, or\n- the player reaches the end.\n\nOn `ended` the playlist advances and the next clip starts playing, because\nthe user already pressed play once. `no-advance` turns that off, and the\nplaylist stays on the entry that ended. `repeat` decides what happens at the\nend: `one` plays the same entry again, and `all` goes from the last entry\nback to the first. Without it, the playlist stops on the last entry and\nsends `helix-end`. `shuffle` plays the entries in a random order, starting\nfrom the one that is current, and `previous` retraces that order.\n\n**`helix-before-activate` says why the playlist is moving**, in\n`detail.cause`: `press` for an entry or a menu choice, `next` and\n`previous` for the player's controls and the methods, `ended` at the end of\na clip, and `removed` when the current entry leaves the playlist. Cancel an\n`ended` move to show your own \"Up next\" countdown, then call `next()`.\n\n**Removing the current entry moves the playlist on**, to the entry after it,\nor to the one before it when it was the last. A clip that was playing keeps\nplaying in the entry that takes its place.\n\n**The player is named by the current entry**, and the device's own media\ncontrols show the entry as the title. A player you gave a `label` keeps\nyour name, and only the title follows the entry.\n\n**Keyboard.** The entries take one stop in the tab order: the entry you\nlast focused, or the current entry before you have focused one. Enter or\nSpace plays it. The arrow keys move focus to the entry before or after, and\nHome and End to the first and the last, passing over disabled entries. The\ncurrent entry carries `aria-current`. While focus is on the player, the\nplayer's own keys work, and `Video` lists them, and Shift with N or P plays\nthe next or the previous entry. The player's previous and next controls\nmove through the entries in the same order the playlist does.\n\n**Moving entries.** `reorderable` lets a reader change the order of the\nqueue:\n\n- Alt with Up or Down moves the focused entry a place, and Alt with Home or\n End moves it to either end, as the APG's rearrangeable listbox does.\n Focus stays on it.\n- A pointer drags an entry, with a drop indicator, and the page scrolls near\n an edge. A press that does not travel still plays the entry.\n- A drop sends `helix-before-reorder`, which you can refuse, and then\n `helix-reorder`, whose `keys` hold every entry's `value` in the new order.\n **You move the entries**: the playlist moves no element of yours, and the\n next entry is the one after the current entry in the order you leave.\n- Each move is said in the live region, in words you can change:\n `moved-label`, `dropped-label`, `canceled-label`, and `picked-up-label`.\n\n**What a screen reader hears.** A list named by `label`, with a button for\neach entry. When the playlist moves to another entry, by a press, by the\nplayer's controls, or at the end of a clip, a live region says\n`playing-label`, \"Now playing\" and the entry's name.",
186487
187079
  "name": "HelixHeadlessVideoPlaylist",
186488
187080
  "cssParts": [
186489
187081
  {
@@ -186528,6 +187120,32 @@
186528
187120
  "default": "'helix-video-playlist'",
186529
187121
  "description": "The key this family's words are registered under, its styled tag:\n`registerWords('de', { 'helix-video-playlist': { label: 'Wiedergabeliste' } })`."
186530
187122
  },
187123
+ {
187124
+ "kind": "field",
187125
+ "name": "canceledLabel",
187126
+ "type": {
187127
+ "text": "string"
187128
+ },
187129
+ "default": "'Canceled'",
187130
+ "description": "What screen readers hear when a move is put back, in a `reorderable`\nplaylist. `{name}` is the entry's words.",
187131
+ "attribute": "canceled-label",
187132
+ "helix": {
187133
+ "words": true
187134
+ }
187135
+ },
187136
+ {
187137
+ "kind": "field",
187138
+ "name": "droppedLabel",
187139
+ "type": {
187140
+ "text": "string"
187141
+ },
187142
+ "default": "'Dropped'",
187143
+ "description": "What screen readers hear when a moved entry is let go, in a `reorderable`\nplaylist. `{name}` is the entry's words.",
187144
+ "attribute": "dropped-label",
187145
+ "helix": {
187146
+ "words": true
187147
+ }
187148
+ },
186531
187149
  {
186532
187150
  "kind": "field",
186533
187151
  "name": "emptyLabel",
@@ -186554,6 +187172,19 @@
186554
187172
  "words": true
186555
187173
  }
186556
187174
  },
187175
+ {
187176
+ "kind": "field",
187177
+ "name": "movedLabel",
187178
+ "type": {
187179
+ "text": "string"
187180
+ },
187181
+ "default": "'{name} moved to position {position} of {count}'",
187182
+ "description": "What screen readers hear each time a key moves an entry, in a\n`reorderable` playlist. `{name}` is the entry's words, `{position}` its\nnew place, counting from 1, and `{count}` the number of entries.",
187183
+ "attribute": "moved-label",
187184
+ "helix": {
187185
+ "words": true
187186
+ }
187187
+ },
186557
187188
  {
186558
187189
  "kind": "field",
186559
187190
  "name": "noAdvance",
@@ -186564,6 +187195,19 @@
186564
187195
  "description": "Stays on an entry when its clip ends, where the playlist would otherwise\nplay the next one. The player's controls, a press, and `next()` still\nmove. `repeat=\"one\"` still plays the entry again.",
186565
187196
  "attribute": "no-advance"
186566
187197
  },
187198
+ {
187199
+ "kind": "field",
187200
+ "name": "pickedUpLabel",
187201
+ "type": {
187202
+ "text": "string"
187203
+ },
187204
+ "default": "'Picked up {name}'",
187205
+ "description": "What screen readers hear when a pointer picks up an entry, in a\n`reorderable` playlist. `{name}` is the entry's words.",
187206
+ "attribute": "picked-up-label",
187207
+ "helix": {
187208
+ "words": true
187209
+ }
187210
+ },
186567
187211
  {
186568
187212
  "kind": "field",
186569
187213
  "name": "playingLabel",
@@ -186577,6 +187221,17 @@
186577
187221
  "words": true
186578
187222
  }
186579
187223
  },
187224
+ {
187225
+ "kind": "field",
187226
+ "name": "reorderable",
187227
+ "type": {
187228
+ "text": "boolean"
187229
+ },
187230
+ "default": "false",
187231
+ "description": "Lets a reader move the entries, with Alt and the arrow keys or by\ndragging one. The playlist moves no entry itself: you move your entries\non `helix-reorder`.",
187232
+ "attribute": "reorderable",
187233
+ "reflects": true
187234
+ },
186580
187235
  {
186581
187236
  "kind": "field",
186582
187237
  "name": "status",
@@ -186585,6 +187240,63 @@
186585
187240
  "default": "new StatusController(this)",
186586
187241
  "description": "The live region, rendered from the first move."
186587
187242
  },
187243
+ {
187244
+ "kind": "method",
187245
+ "name": "entryOf",
187246
+ "privacy": "private",
187247
+ "return": {
187248
+ "type": {
187249
+ "text": "HelixHeadlessVideoPlaylistItem | undefined"
187250
+ }
187251
+ },
187252
+ "parameters": [
187253
+ {
187254
+ "name": "event",
187255
+ "type": {
187256
+ "text": "Event"
187257
+ }
187258
+ }
187259
+ ],
187260
+ "description": "The entry an event passed through, where it may move."
187261
+ },
187262
+ {
187263
+ "kind": "method",
187264
+ "name": "entryFor",
187265
+ "privacy": "private",
187266
+ "return": {
187267
+ "type": {
187268
+ "text": "HelixHeadlessVideoPlaylistItem | undefined"
187269
+ }
187270
+ },
187271
+ "parameters": [
187272
+ {
187273
+ "name": "value",
187274
+ "type": {
187275
+ "text": "string"
187276
+ }
187277
+ }
187278
+ ],
187279
+ "description": "The entry with that value."
187280
+ },
187281
+ {
187282
+ "kind": "field",
187283
+ "name": "reorder",
187284
+ "privacy": "private",
187285
+ "readonly": true,
187286
+ "default": "new ReorderController(this, { axis: 'block', box: (value) => this.entryFor(value)?.getBoundingClientRect(), current: (event) => this.entryOf(event)?.value, grip: (event) => { const entry = this.entryOf(event) return entry ? { element: entry, key: entry.value } : undefined }, holds: false, keys: () => this.items.map((one) => one.value), name: (value) => this.entryFor(value)?.text || value, refocus: (value) => this.entryFor(value)?.focus(), say: (words) => this.status.say(words), })",
187287
+ "description": "Moving the entries, as a listbox moves its options: Alt with the arrows\non the focused entry, or a pointer dragging a whole entry, where a press\nthat does not travel still plays it."
187288
+ },
187289
+ {
187290
+ "kind": "method",
187291
+ "name": "markMoves",
187292
+ "privacy": "private",
187293
+ "return": {
187294
+ "type": {
187295
+ "text": "void"
187296
+ }
187297
+ },
187298
+ "description": "Tells each entry where it stands in a move, which it says through its\nstates for the styled tier to draw: the entry dragged, and the one the\ndrop indicator is before or after."
187299
+ },
186588
187300
  {
186589
187301
  "kind": "field",
186590
187302
  "name": "repeat",
@@ -187343,6 +188055,14 @@
187343
188055
  "name": "helix-before-activate",
187344
188056
  "reactProp": "onhelix-before-activate"
187345
188057
  },
188058
+ {
188059
+ "type": {
188060
+ "text": "HelixBeforeReorderEvent"
188061
+ },
188062
+ "description": "An entry was moved to a new place, in a `reorderable` playlist, with every entry's value in the new order in `detail.keys`. Cancelable: cancel it to keep the entry where it is.",
188063
+ "name": "helix-before-reorder",
188064
+ "reactProp": "onhelix-before-reorder"
188065
+ },
187346
188066
  {
187347
188067
  "type": {
187348
188068
  "text": "HelixEndEvent"
@@ -187350,9 +188070,35 @@
187350
188070
  "description": "The last entry finished playing, and the playlist stopped there. Not sent while `repeat` is set.",
187351
188071
  "name": "helix-end",
187352
188072
  "reactProp": "onhelix-end"
188073
+ },
188074
+ {
188075
+ "type": {
188076
+ "text": "HelixReorderEvent"
188077
+ },
188078
+ "description": "Fired after `helix-before-reorder` when nobody canceled it. Move your entries to the order in `keys`. Cancelable: cancel it to say the move did not happen.",
188079
+ "name": "helix-reorder",
188080
+ "reactProp": "onhelix-reorder"
187353
188081
  }
187354
188082
  ],
187355
188083
  "attributes": [
188084
+ {
188085
+ "name": "canceled-label",
188086
+ "type": {
188087
+ "text": "string"
188088
+ },
188089
+ "default": "'Canceled'",
188090
+ "description": "What screen readers hear when a move is put back, in a `reorderable`\nplaylist. `{name}` is the entry's words.",
188091
+ "fieldName": "canceledLabel"
188092
+ },
188093
+ {
188094
+ "name": "dropped-label",
188095
+ "type": {
188096
+ "text": "string"
188097
+ },
188098
+ "default": "'Dropped'",
188099
+ "description": "What screen readers hear when a moved entry is let go, in a `reorderable`\nplaylist. `{name}` is the entry's words.",
188100
+ "fieldName": "droppedLabel"
188101
+ },
187356
188102
  {
187357
188103
  "name": "empty-label",
187358
188104
  "type": {
@@ -187371,6 +188117,15 @@
187371
188117
  "description": "The list's name, read by screen readers.",
187372
188118
  "fieldName": "label"
187373
188119
  },
188120
+ {
188121
+ "name": "moved-label",
188122
+ "type": {
188123
+ "text": "string"
188124
+ },
188125
+ "default": "'{name} moved to position {position} of {count}'",
188126
+ "description": "What screen readers hear each time a key moves an entry, in a\n`reorderable` playlist. `{name}` is the entry's words, `{position}` its\nnew place, counting from 1, and `{count}` the number of entries.",
188127
+ "fieldName": "movedLabel"
188128
+ },
187374
188129
  {
187375
188130
  "name": "no-advance",
187376
188131
  "type": {
@@ -187380,6 +188135,15 @@
187380
188135
  "description": "Stays on an entry when its clip ends, where the playlist would otherwise\nplay the next one. The player's controls, a press, and `next()` still\nmove. `repeat=\"one\"` still plays the entry again.",
187381
188136
  "fieldName": "noAdvance"
187382
188137
  },
188138
+ {
188139
+ "name": "picked-up-label",
188140
+ "type": {
188141
+ "text": "string"
188142
+ },
188143
+ "default": "'Picked up {name}'",
188144
+ "description": "What screen readers hear when a pointer picks up an entry, in a\n`reorderable` playlist. `{name}` is the entry's words.",
188145
+ "fieldName": "pickedUpLabel"
188146
+ },
187383
188147
  {
187384
188148
  "name": "playing-label",
187385
188149
  "type": {
@@ -187389,6 +188153,15 @@
187389
188153
  "description": "What the live region says when the playlist moves to another entry.\n`{title}` is the entry's name.\n\n**A move a reader did not make is said.** At the end of a clip the\nplaylist starts the next one, and the only other trace of that is the\n`aria-current` on a button the reader is not on.",
187390
188154
  "fieldName": "playingLabel"
187391
188155
  },
188156
+ {
188157
+ "name": "reorderable",
188158
+ "type": {
188159
+ "text": "boolean"
188160
+ },
188161
+ "default": "false",
188162
+ "description": "Lets a reader move the entries, with Alt and the arrow keys or by\ndragging one. The playlist moves no entry itself: you move your entries\non `helix-reorder`.",
188163
+ "fieldName": "reorderable"
188164
+ },
187392
188165
  {
187393
188166
  "name": "repeat",
187394
188167
  "type": {
@@ -192641,6 +193414,6 @@
192641
193414
  ],
192642
193415
  "helix": {
192643
193416
  "package": "@fusion.dev/helix-headless",
192644
- "version": "0.163.0"
193417
+ "version": "0.164.0"
192645
193418
  }
192646
193419
  }