@fusion.dev/helix-headless 0.154.0 → 0.155.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 (59) hide show
  1. package/custom-elements.json +1427 -88
  2. package/dist/accordion/item/accordion-item.d.ts +15 -0
  3. package/dist/accordion/item/accordion-item.js +12 -1
  4. package/dist/accordion/root/accordion-root.d.ts +2 -1
  5. package/dist/accordion/root/accordion-root.js +1 -0
  6. package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +36 -3
  7. package/dist/breadcrumbs/breadcrumb/breadcrumb.js +42 -2
  8. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +15 -5
  9. package/dist/breadcrumbs/root/breadcrumbs-root.js +29 -4
  10. package/dist/button-group/root/button-group-root.d.ts +2 -0
  11. package/dist/button-group/root/button-group-root.js +1 -0
  12. package/dist/color-input/root/color-input-root.d.ts +9 -3
  13. package/dist/color-input/root/color-input-root.js +3 -1
  14. package/dist/color-picker/channels.d.ts +5 -3
  15. package/dist/color-picker/channels.js +79 -21
  16. package/dist/color-picker/root/color-picker-root.d.ts +58 -5
  17. package/dist/color-picker/root/color-picker-root.js +75 -13
  18. package/dist/date-input/root/date-input-root.d.ts +1 -0
  19. package/dist/date-input/root/date-input-root.js +2 -1
  20. package/dist/date-picker/root/date-picker-root.d.ts +43 -13
  21. package/dist/date-picker/root/date-picker-root.js +54 -31
  22. package/dist/element-events.generated.js +2 -1
  23. package/dist/navigation/root/navigation-root.d.ts +26 -0
  24. package/dist/navigation/root/navigation-root.js +58 -1
  25. package/dist/select/root/select-root.d.ts +29 -3
  26. package/dist/select/root/select-root.js +34 -9
  27. package/dist/slider/root/slider-root.d.ts +71 -9
  28. package/dist/slider/root/slider-root.js +129 -42
  29. package/dist/speed-dial/item/speed-dial-item.d.ts +29 -1
  30. package/dist/speed-dial/item/speed-dial-item.js +48 -7
  31. package/dist/speed-dial/root/speed-dial-root.d.ts +32 -6
  32. package/dist/speed-dial/root/speed-dial-root.js +50 -5
  33. package/dist/splitter/root/splitter-root.d.ts +22 -0
  34. package/dist/splitter/root/splitter-root.js +36 -7
  35. package/dist/steps/reach.d.ts +5 -1
  36. package/dist/steps/reach.js +2 -2
  37. package/dist/steps/root/steps-root.d.ts +37 -2
  38. package/dist/steps/root/steps-root.js +49 -7
  39. package/dist/steps/step/step.d.ts +6 -0
  40. package/dist/steps/step/step.js +4 -0
  41. package/dist/tabs/root/tabs-root.d.ts +37 -0
  42. package/dist/tabs/root/tabs-root.js +92 -2
  43. package/dist/tabs/tab/tab.d.ts +38 -2
  44. package/dist/tabs/tab/tab.js +45 -4
  45. package/dist/tag/group/tag-group.d.ts +29 -3
  46. package/dist/tag/group/tag-group.js +42 -11
  47. package/dist/toggle/root/toggle-root.d.ts +2 -0
  48. package/dist/toggle/root/toggle-root.js +1 -1
  49. package/dist/tree/item/tree-item.d.ts +10 -0
  50. package/dist/tree/item/tree-item.js +12 -0
  51. package/dist/tree/root/tree-root.d.ts +40 -1
  52. package/dist/tree/root/tree-root.js +120 -4
  53. package/dist/tree/selection.d.ts +6 -0
  54. package/dist/tree/selection.js +11 -0
  55. package/lint.json +1 -1
  56. package/package.json +5 -5
  57. package/types/jsx.d.ts +984 -151
  58. package/types/vue.d.ts +221 -49
  59. package/types/words.d.ts +36 -1
@@ -31,7 +31,7 @@
31
31
  "declarations": [
32
32
  {
33
33
  "kind": "class",
34
- "description": "Holds its own open state. Used alone, outside an accordion, it works as a\ndisclosure.\n\nThe trigger sits inside a heading, so a screen reader lists the section with\nthe page's headings. The level is the item's `heading-level`, then the\naccordion's, then 3.\n\nContent stays mounted when the item is closed, so it can animate and its text\nis present in server-rendered HTML.\n\nThe browser's find in page searches a closed section, and a match opens it,\nwith `helix-before-open` first, as React Aria's disclosure does. Closed\ncontent is `hidden=\"until-found\"`, which hides it with no stylesheet loaded\nand keeps it out of the tab order and the accessibility tree. A section\nthat closes keeps its content drawn until the content part's animations and\ntransitions end, so a sheet that animates the section closed shows the\ncontent shrinking rather than an empty box. Set `hidden-until-found=\"false\"`\nand a closed section is `hidden` and `inert` instead, and find in page skips\nit.\n\nWhile it is open, the content part carries the content's height as\n`--accordion-content-height`, as Radix's accordion does, for a stylesheet\nthat animates the section open with keyframes of its own.",
34
+ "description": "Holds its own open state. Used alone, outside an accordion, it works as a\ndisclosure.\n\nThe trigger sits inside a heading, so a screen reader lists the section with\nthe page's headings. The level is the item's `heading-level`, then the\naccordion's, then 3.\n\nContent stays mounted when the item is closed, so it can animate and its text\nis present in server-rendered HTML.\n\nThe browser's find in page searches a closed section, and a match opens it,\nwith `helix-before-open` first, as React Aria's disclosure does. Closed\ncontent is `hidden=\"until-found\"`, which hides it with no stylesheet loaded\nand keeps it out of the tab order and the accessibility tree. A section\nthat closes keeps its content drawn until the content part's animations and\ntransitions end, so a sheet that animates the section closed shows the\ncontent shrinking rather than an empty box. Set `hidden-until-found=\"false\"`\nand a closed section is `hidden` and `inert` instead, and find in page skips\nit.\n\nA section whose trigger has no words, with nothing in its `summary` slot,\nis announced as a bare button, and a development build warns once with the\nkind `missing-name`.\n\nWhile it is open, the content part carries the content's height as\n`--accordion-content-height`, as Radix's accordion does, for a stylesheet\nthat animates the section open with keyframes of its own.",
35
35
  "name": "HelixHeadlessAccordionItem",
36
36
  "cssProperties": [
37
37
  {
@@ -804,6 +804,10 @@
804
804
  }
805
805
  ],
806
806
  "cssStates": [
807
+ {
808
+ "description": "While the item has closed and its content is still drawn, until the content part's animations end.",
809
+ "name": "closing"
810
+ },
807
811
  {
808
812
  "description": "While the item is open.",
809
813
  "name": "open"
@@ -872,7 +876,7 @@
872
876
  "declarations": [
873
877
  {
874
878
  "kind": "class",
875
- "description": "Holds the mode. Each item coordinates itself: when you click an item, it\nfinds the nearest accordion, reads the mode, and closes the other items.\n\nThe accordion does not listen for items opening. `helix-before-open` does not\nbubble and is not composed, because overlays nest and an inner overlay's\nevents must stay separate from the outer one's.\n\nItems are found when they are clicked, so there is no registry to keep up to\ndate. An item added after render coordinates on its first click. Items are\nmatched with `instanceof HelixHeadlessAccordionItem`, so the headless tier\ndoes not depend on the styled tier's tag names.\n\nKeys, on a trigger: Up and Down Arrow move to the previous and the next\ntrigger, and so do Left and Right, wrapping at the ends; Home and End go to\nthe first and the last. Enter and Space open and close the section. Disabled\nsections are passed over.\n\nEach trigger is a button with `aria-expanded` and `aria-controls`, inside a\nheading, level 3 unless `heading-level` says otherwise, so the sections are\nin a screen reader's list of headings. An open section is a region named by\nits trigger. Set the level that fits the page's outline.\n\nFind in page searches the closed sections too, and opens the one it matches\nin. `hidden-until-found=\"false\"` turns that off.",
879
+ "description": "Holds the mode. Each item coordinates itself: when you click an item, it\nfinds the nearest accordion, reads the mode, and closes the other items.\n\nThe accordion does not listen for items opening. `helix-before-open` does not\nbubble and is not composed, because overlays nest and an inner overlay's\nevents must stay separate from the outer one's.\n\nItems are found when they are clicked, so there is no registry to keep up to\ndate. An item added after render coordinates on its first click. Items are\nmatched with `instanceof HelixHeadlessAccordionItem`, so the headless tier\ndoes not depend on the styled tier's tag names.\n\nKeys, on a trigger: Up and Down Arrow move to the previous and the next\ntrigger, and so do Left and Right, wrapping at the ends; Home and End go to\nthe first and the last. Enter and Space open and close the section. Disabled\nsections are passed over. Under `single` the open section's trigger is\n`aria-disabled`, because a press cannot close it.\n\nEach trigger is a button with `aria-expanded` and `aria-controls`, inside a\nheading, level 3 unless `heading-level` says otherwise, so the sections are\nin a screen reader's list of headings. An open section is a region named by\nits trigger. Set the level that fits the page's outline.\n\nFind in page searches the closed sections too, and opens the one it matches\nin. `hidden-until-found=\"false\"` turns that off.",
876
880
  "name": "HelixHeadlessAccordion",
877
881
  "slots": [
878
882
  {
@@ -8980,9 +8984,17 @@
8980
8984
  "declarations": [
8981
8985
  {
8982
8986
  "kind": "class",
8983
- "description": "Each crumb renders its separator and sets its list-item role. It hides its\nown separator with `:host(:first-child)`, so the trail needs no index from\nthe parent.\n\nSet `href` to make the whole crumb an anchor, which works with Enter, middle\nclick, and the status bar, and before any JavaScript runs. A router cannot\nreach an anchor inside a shadow root, so intercept the click for client-side\nnavigation, as with `Tree.Item` and `List.Item`. A trail that collapses also\nreads `href` to rebuild its hidden crumbs elsewhere.\n\nWithout `href`, the crumb renders a plain `<span>` around what you slot,\nincluding your own anchor.\n\nThe current page is plain text, and `aria-current=\"page\"` on the host conveys\nthe position. In a trail where no crumb is `current`, the last one is said\nto be the current page, and keeps its link. An `aria-current` you write on\nthe host, such as `aria-current=\"location\"`, replaces the one the crumb\ngives itself.",
8987
+ "description": "Each crumb renders its separator and sets its list-item role. It hides its\nown separator with `:host(:first-child)`, so the trail needs no index from\nthe parent.\n\nSet `href` to make the whole crumb an anchor, which works with Enter, middle\nclick, and the status bar, and before any JavaScript runs. A router cannot\nreach an anchor inside a shadow root, so intercept the click for client-side\nnavigation, as with `Tree.Item` and `List.Item`: a plain press on the link\nsends `helix-select` with the `href` as its value first, and canceling it\nkeeps the browser from following, so a client-side router follows it\ninstead, as React Aria's `onAction` lets a router do. A press with a\nmodifier opens the link where the browser opens it and sends nothing.\n\nWithout `href`, the crumb renders a plain `<span>` around what you slot,\nincluding your own anchor.\n\nThe current page is plain text, and `aria-current=\"page\"` on the host conveys\nthe position. In a trail where no crumb is `current`, the last one is said\nto be the current page, and keeps its link. An `aria-current` you write on\nthe host, such as `aria-current=\"location\"`, replaces the one the crumb\ngives itself.",
8984
8988
  "name": "HelixHeadlessBreadcrumb",
8985
8989
  "cssParts": [
8990
+ {
8991
+ "description": "The button after the first crumb of a folded slotted trail, which shows the folded crumbs.",
8992
+ "name": "expand"
8993
+ },
8994
+ {
8995
+ "description": "The chevron before that button.",
8996
+ "name": "fold-separator"
8997
+ },
8986
8998
  {
8987
8999
  "description": "The crumb itself, which is an `<a>` where `href` is set.",
8988
9000
  "name": "link"
@@ -9056,6 +9068,24 @@
9056
9068
  "description": "Where the link opens. Use it for a crumb that leaves the site.",
9057
9069
  "attribute": "target"
9058
9070
  },
9071
+ {
9072
+ "kind": "field",
9073
+ "name": "handleLinkClick",
9074
+ "privacy": "private",
9075
+ "readonly": true,
9076
+ "description": "Sends `helix-select` for a plain press on the link, and keeps the browser\nfrom following where it was canceled."
9077
+ },
9078
+ {
9079
+ "kind": "method",
9080
+ "name": "renderFold",
9081
+ "privacy": "protected",
9082
+ "return": {
9083
+ "type": {
9084
+ "text": "TemplateResult | typeof nothing"
9085
+ }
9086
+ },
9087
+ "description": "The button that shows the crumbs a slotted trail folded after this one,\nwith a chevron before it, drawn after the crumb's own label."
9088
+ },
9059
9089
  {
9060
9090
  "kind": "method",
9061
9091
  "name": "markEnd",
@@ -9424,6 +9454,16 @@
9424
9454
  }
9425
9455
  }
9426
9456
  ],
9457
+ "events": [
9458
+ {
9459
+ "type": {
9460
+ "text": "HelixSelectEvent"
9461
+ },
9462
+ "description": "A plain press on the crumb's link, with its `href` as the value, before the browser follows it. Cancelable: cancel it to keep the browser from following, as a client-side router does.",
9463
+ "name": "helix-select",
9464
+ "reactProp": "onhelix-select"
9465
+ }
9466
+ ],
9427
9467
  "attributes": [
9428
9468
  {
9429
9469
  "name": "current",
@@ -9462,10 +9502,18 @@
9462
9502
  }
9463
9503
  ],
9464
9504
  "cssStates": [
9505
+ {
9506
+ "description": "While the crumb is the current page, marked `current` or the last of a trail with none marked.",
9507
+ "name": "current"
9508
+ },
9465
9509
  {
9466
9510
  "description": "While the `end` slot holds something, so a stylesheet can join the label and what follows it into one control.",
9467
9511
  "name": "end"
9468
9512
  },
9513
+ {
9514
+ "description": "While a trail longer than its `max-items` has folded the crumb away. It takes no room.",
9515
+ "name": "folded"
9516
+ },
9469
9517
  {
9470
9518
  "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
9471
9519
  "name": "settled",
@@ -9545,7 +9593,7 @@
9545
9593
  "declarations": [
9546
9594
  {
9547
9595
  "kind": "class",
9548
- "description": "The host is the navigation landmark, named \"Breadcrumb\" by default. An\n`aria-label` on the host names the trail instead, and so does `label`. When a\npage has more than one navigation landmark, screen reader users choose\nbetween them by name.\n\nThe `<ol>` has an explicit `role=\"list\"`, because Safari removes list\nsemantics from a list with `list-style: none`, and the trail always hides its\nmarkers.\n\nThe items are slotted directly, so they are `<ol>` children in the flat tree,\nand each item sets `role=\"listitem\"` on itself. Where no slotted crumb is\n`current`, the last one is said to be the current page.\n\nThe trail does not measure itself, and you write its overflow in markup: put\nthe crumb that holds the folded items where the gap should appear.\n\nA trail built from data, such as a router's matched routes, takes `items`: an\narray of `{ label, href }`, drawn as crumbs in order, the last one as the\ncurrent page. Slotted crumbs follow them. Use one way or the other in a trail.\n\nWith `max-items`, a trail drawn from `items` that is longer folds its middle\ninto one crumb: the first crumb, a button, then the last `max-items` less one.\nThe button is named by `expand-label` and shows the whole trail, moving focus\nto the first crumb it brought back. A new `items` folds again. Slotted crumbs\ndo not fold; write the folded crumb where the gap should be.\n\n**Keyboard.** Each crumb with an `href` is a link and one tab stop, and\nEnter follows it. The current page and the separators are not in the tab\norder. In a folded trail, Enter or Space on the fold's button shows the\nwhole trail and moves focus to the first crumb it brought back.",
9596
+ "description": "The host is the navigation landmark, named \"Breadcrumb\" by default. An\n`aria-label` on the host names the trail instead, and so does `label`. When a\npage has more than one navigation landmark, screen reader users choose\nbetween them by name.\n\nThe `<ol>` has an explicit `role=\"list\"`, because Safari removes list\nsemantics from a list with `list-style: none`, and the trail always hides its\nmarkers.\n\nThe items are slotted directly, so they are `<ol>` children in the flat tree,\nand each item sets `role=\"listitem\"` on itself. Where no slotted crumb is\n`current`, the last one is said to be the current page.\n\nThe trail does not measure itself, and you write its overflow in markup: put\nthe crumb that holds the folded items where the gap should appear.\n\nA trail built from data, such as a router's matched routes, takes `items`: an\narray of `{ label, href }`, drawn as crumbs in order, the last one as the\ncurrent page. Slotted crumbs follow them. Use one way or the other in a trail.\n\nWith `max-items`, a trail that is longer folds its middle into one place:\nthe first crumb, a button, then the last `max-items` less one. The button is\nnamed by `expand-label` and shows the whole trail, moving focus to the first\ncrumb it brought back. A trail drawn from `items` draws the button as a\ncrumb of its own, and a new `items` folds again. A slotted trail hides the\ncrumbs it folds, which take no room, and its first crumb draws the button\nafter its link; a change to the crumbs folds again.\n\n**Keyboard.** Each crumb with an `href` is a link and one tab stop, and\nEnter follows it. The current page and the separators are not in the tab\norder. In a folded trail, Enter or Space on the fold's button shows the\nwhole trail and moves focus to the first crumb it brought back.",
9549
9597
  "name": "HelixHeadlessBreadcrumbs",
9550
9598
  "cssParts": [
9551
9599
  {
@@ -9560,6 +9608,14 @@
9560
9608
  "description": "The crumb drawn from `items` for the current page.",
9561
9609
  "name": "crumb-current"
9562
9610
  },
9611
+ {
9612
+ "description": "The fold button a crumb draws after the first crumb of a folded slotted trail. A trail drawn from `items` draws its fold as a crumb of its own, `crumb-collapsed`, so this one is never drawn there.",
9613
+ "name": "crumb-expand"
9614
+ },
9615
+ {
9616
+ "description": "The chevron before that button.",
9617
+ "name": "crumb-fold-separator"
9618
+ },
9563
9619
  {
9564
9620
  "description": "The link, or the current page's words, of a crumb drawn from `items`.",
9565
9621
  "name": "crumb-link"
@@ -9652,6 +9708,23 @@
9652
9708
  "default": "false",
9653
9709
  "description": "Whether a reader has asked to see the whole of a folded trail."
9654
9710
  },
9711
+ {
9712
+ "kind": "field",
9713
+ "name": "slotted",
9714
+ "type": {
9715
+ "text": "HelixHeadlessBreadcrumb[]"
9716
+ },
9717
+ "privacy": "private",
9718
+ "description": "The crumbs slotted into the trail, in order.",
9719
+ "readonly": true
9720
+ },
9721
+ {
9722
+ "kind": "field",
9723
+ "name": "unfold",
9724
+ "privacy": "private",
9725
+ "readonly": true,
9726
+ "description": "Shows the whole of a folded slotted trail and moves focus to the first crumb it brought back."
9727
+ },
9655
9728
  {
9656
9729
  "kind": "field",
9657
9730
  "name": "expand",
@@ -9676,6 +9749,13 @@
9676
9749
  "readonly": true,
9677
9750
  "description": "Says the last slotted crumb is the current page where none is marked\n`current`, as React Aria's trail does. Through a property the crumb does\nnot reflect, so nothing is written onto your markup."
9678
9751
  },
9752
+ {
9753
+ "kind": "field",
9754
+ "name": "handleSlotChange",
9755
+ "privacy": "private",
9756
+ "readonly": true,
9757
+ "description": "New crumbs fold again, as a new `items` does."
9758
+ },
9679
9759
  {
9680
9760
  "kind": "method",
9681
9761
  "name": "renderItems",
@@ -10816,6 +10896,20 @@
10816
10896
  "fieldName": "value"
10817
10897
  }
10818
10898
  ],
10899
+ "cssStates": [
10900
+ {
10901
+ "description": "While a group with `selection-mode` has a button pressed.",
10902
+ "name": "pressed"
10903
+ },
10904
+ {
10905
+ "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
10906
+ "name": "settled",
10907
+ "inheritedFrom": {
10908
+ "name": "HelixElement",
10909
+ "module": "src/helix-element/helix-element.ts"
10910
+ }
10911
+ }
10912
+ ],
10819
10913
  "superclass": {
10820
10914
  "name": "HelixElement",
10821
10915
  "package": "@fusion.dev/helix-core"
@@ -10852,16 +10946,6 @@
10852
10946
  },
10853
10947
  "tagName": "helix-headless-button-group",
10854
10948
  "customElement": true,
10855
- "cssStates": [
10856
- {
10857
- "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
10858
- "name": "settled",
10859
- "inheritedFrom": {
10860
- "name": "HelixElement",
10861
- "module": "src/helix-element/helix-element.ts"
10862
- }
10863
- }
10864
- ],
10865
10949
  "modulePath": "src/button-group/root/button-group-root.ts",
10866
10950
  "definitionPath": "src/button-group/root/button-group-root.ts"
10867
10951
  }
@@ -31383,7 +31467,7 @@
31383
31467
  "declarations": [
31384
31468
  {
31385
31469
  "kind": "class",
31386
- "description": "A text field with a button that opens `ColorPicker` in an overlay.\n`ColorPicker` provides the square, the ramps, the eyedropper, and the syntax\ntoggle, and you can also use it on its own, flat on the page. Color Input\nadds the field, the overlay, and the form value, the same arrangement Date\nInput has with `DatePicker`.\n\nYou can type or paste a color into the field without opening the picker.\nColor Input is a custom control, unlike `<input type=\"color\">`, so you can\nstyle the panel to match your interface.\n\nThe field reads every color syntax, including `#f00`, `#ff0000`,\n`rgb(255 0 0)`, `rgba(255,0,0,.5)`, `rgb(255 0 0 / 50%)`, and\n`hsl(0 100% 50%)`. It writes colors in the syntax that `format` names. The\nfield shows the value without reformatting it, because half-typed input does\nnot survive a round trip through a formatter. Date Input does the same with\ndates.\n\nTyping sends `input` on each keystroke and `change` when you leave the\nfield, as a text field does, so the message about a color it cannot read\nwaits until you are done. Dragging in the panel sends `input` as the color\nmoves and `change` when it settles.\n\nThe trigger and ArrowDown open the panel with focus in the square. Tab moves\nbetween the panel's controls without leaving it, and Escape closes it and\nreturns focus to the field.\n\nThe component sets `--color-input-swatch`, so do not set it yourself. It\nholds the resolved color, so the styled tier can paint the swatch without\nparsing the value.",
31470
+ "description": "A text field with a button that opens `ColorPicker` in an overlay.\n`ColorPicker` provides the square, the ramps, the eyedropper, and the syntax\ntoggle, and you can also use it on its own, flat on the page. Color Input\nadds the field, the overlay, and the form value, the same arrangement Date\nInput has with `DatePicker`.\n\nYou can type or paste a color into the field without opening the picker.\nColor Input is a custom control, unlike `<input type=\"color\">`, so you can\nstyle the panel to match your interface.\n\nThe field reads every color syntax, including `#f00`, `#ff0000`,\n`rgb(255 0 0)`, `rgba(255,0,0,.5)`, `rgb(255 0 0 / 50%)`,\n`hsl(0 100% 50%)`, `oklch(62.8% 0.258 29.2)`, and `hsb(0, 100%, 100%)`. It\nwrites colors in the syntax that `format` names. The\nfield shows the value without reformatting it, because half-typed input does\nnot survive a round trip through a formatter. Date Input does the same with\ndates.\n\nTyping sends `input` on each keystroke and `change` when you leave the\nfield, as a text field does, so the message about a color it cannot read\nwaits until you are done. Dragging in the panel sends `input` as the color\nmoves and `change` when it settles.\n\nThe trigger and ArrowDown open the panel with focus in the square. Tab moves\nbetween the panel's controls without leaving it, and Escape closes it and\nreturns focus to the field.\n\nThe component sets `--color-input-swatch`, so do not set it yourself. It\nholds the resolved color, so the styled tier can paint the swatch without\nparsing the value.",
31387
31471
  "name": "HelixHeadlessColorInput",
31388
31472
  "cssProperties": [
31389
31473
  {
@@ -31460,6 +31544,14 @@
31460
31544
  "description": "The current value, shown beside the track.",
31461
31545
  "name": "picker-channel-output"
31462
31546
  },
31547
+ {
31548
+ "description": "A ramp's thumb box, which holds no content in a picker.",
31549
+ "name": "picker-channel-thumb"
31550
+ },
31551
+ {
31552
+ "description": "The layer over a ramp's track that holds its thumb box.",
31553
+ "name": "picker-channel-thumbs"
31554
+ },
31463
31555
  {
31464
31556
  "description": "A ramp's value in a bubble, where a ramp shows one.",
31465
31557
  "name": "picker-channel-tooltip"
@@ -31556,10 +31648,18 @@
31556
31648
  "description": "The range input for the square's horizontal axis.",
31557
31649
  "name": "picker-grid-saturation"
31558
31650
  },
31651
+ {
31652
+ "description": "The picker's own help, which the field's `hint` stands in for here, so it stays hidden.",
31653
+ "name": "picker-hint"
31654
+ },
31559
31655
  {
31560
31656
  "description": "An icon drawn by the picker.",
31561
31657
  "name": "picker-icon"
31562
31658
  },
31659
+ {
31660
+ "description": "The picker's own name, which the field's `label` stands in for here, so it stays hidden.",
31661
+ "name": "picker-label"
31662
+ },
31563
31663
  {
31564
31664
  "description": "A chip of the current color. Pressing it copies the value.",
31565
31665
  "name": "picker-sample"
@@ -31694,9 +31794,9 @@
31694
31794
  "kind": "field",
31695
31795
  "name": "format",
31696
31796
  "type": {
31697
- "text": "'hex' | 'hsl' | 'rgb' | undefined"
31797
+ "text": "'hex' | 'hsb' | 'hsl' | 'oklch' | 'rgb' | undefined"
31698
31798
  },
31699
- "description": "The syntax the value is written in: `hex`, `rgb`, or `hsl`.\n\n**Undefaulted, because it reflects.** The two together stamp an attribute\nonto every host anybody renders, including the ones nobody configured: the\nserver writes `format=\"hex\"` on every color input on the page, and React,\nholding no such prop, reports a hydration mismatch for each one.\n`helix component`'s `reflected-defaults` holds it. Hex is still what an unset one\nwrites; the resting arrangement is the attribute's absence rather than a\nvalue spelled out.",
31799
+ "description": "The syntax the value is written in: `hex`, `rgb`, `hsl`, `oklch`, or\n`hsb`, as Color Picker's `format`.\n\n**Undefaulted, because it reflects.** The two together stamp an attribute\nonto every host anybody renders, including the ones nobody configured: the\nserver writes `format=\"hex\"` on every color input on the page, and React,\nholding no such prop, reports a hydration mismatch for each one.\n`helix component`'s `reflected-defaults` holds it. Hex is still what an unset one\nwrites; the resting arrangement is the attribute's absence rather than a\nvalue spelled out.",
31700
31800
  "attribute": "format",
31701
31801
  "reflects": true
31702
31802
  },
@@ -33665,9 +33765,9 @@
33665
33765
  {
33666
33766
  "name": "format",
33667
33767
  "type": {
33668
- "text": "'hex' | 'hsl' | 'rgb' | undefined"
33768
+ "text": "'hex' | 'hsb' | 'hsl' | 'oklch' | 'rgb' | undefined"
33669
33769
  },
33670
- "description": "The syntax the value is written in: `hex`, `rgb`, or `hsl`.\n\n**Undefaulted, because it reflects.** The two together stamp an attribute\nonto every host anybody renders, including the ones nobody configured: the\nserver writes `format=\"hex\"` on every color input on the page, and React,\nholding no such prop, reports a hydration mismatch for each one.\n`helix component`'s `reflected-defaults` holds it. Hex is still what an unset one\nwrites; the resting arrangement is the attribute's absence rather than a\nvalue spelled out.",
33770
+ "description": "The syntax the value is written in: `hex`, `rgb`, `hsl`, `oklch`, or\n`hsb`, as Color Picker's `format`.\n\n**Undefaulted, because it reflects.** The two together stamp an attribute\nonto every host anybody renders, including the ones nobody configured: the\nserver writes `format=\"hex\"` on every color input on the page, and React,\nholding no such prop, reports a hydration mismatch for each one.\n`helix component`'s `reflected-defaults` holds it. Hex is still what an unset one\nwrites; the resting arrangement is the attribute's absence rather than a\nvalue spelled out.",
33671
33771
  "fieldName": "format"
33672
33772
  },
33673
33773
  {
@@ -34033,7 +34133,7 @@
34033
34133
  }
34034
34134
  }
34035
34135
  ],
34036
- "description": "The numbers a color is written with in `format`, for a field each, as React\nAria's ColorField takes a `channel`: red, green and blue for hex and rgb,\nhue, saturation and lightness for hsl, and the opacity where the picker\ncarries one.\n\nHex is written as bytes, so its fields are the bytes: a field of two hex\ndigits would ask a reader to count in base sixteen."
34136
+ "description": "The numbers a color is written with in `format`, for a field each, as React\nAria's ColorField takes a `channel`: red, green and blue for hex and rgb,\nhue, saturation and lightness for hsl, hue, saturation and brightness for\nhsb, lightness, chroma and hue for oklch, and the opacity where the picker\ncarries one.\n\nHex is written as bytes, so its fields are the bytes: a field of two hex\ndigits would ask a reader to count in base sixteen."
34037
34137
  },
34038
34138
  {
34039
34139
  "kind": "function",
@@ -34118,7 +34218,7 @@
34118
34218
  "declarations": [
34119
34219
  {
34120
34220
  "kind": "class",
34121
- "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\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.",
34221
+ "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.",
34122
34222
  "name": "HelixHeadlessColorPicker",
34123
34223
  "cssProperties": [
34124
34224
  {
@@ -34183,6 +34283,14 @@
34183
34283
  "description": "The current value, shown beside the track.",
34184
34284
  "name": "channel-output"
34185
34285
  },
34286
+ {
34287
+ "description": "A ramp's thumb box, which holds no content in a picker.",
34288
+ "name": "channel-thumb"
34289
+ },
34290
+ {
34291
+ "description": "The layer over a ramp's track that holds its thumb box.",
34292
+ "name": "channel-thumbs"
34293
+ },
34186
34294
  {
34187
34295
  "description": "A ramp's value in a bubble, where a ramp shows one.",
34188
34296
  "name": "channel-tooltip"
@@ -34275,6 +34383,14 @@
34275
34383
  "description": "The range input for the square's horizontal axis.",
34276
34384
  "name": "grid-saturation"
34277
34385
  },
34386
+ {
34387
+ "description": "The help under the picker, while `hint` is set or the `hint` slot has content.",
34388
+ "name": "hint"
34389
+ },
34390
+ {
34391
+ "description": "The name above the picker, while `label` is set or the `label` slot has content.",
34392
+ "name": "label"
34393
+ },
34278
34394
  {
34279
34395
  "description": "A chip of the current color. Pressing it copies the value.",
34280
34396
  "name": "sample"
@@ -34304,6 +34420,14 @@
34304
34420
  {
34305
34421
  "description": "The icon on the eyedropper button, usually a dropper.",
34306
34422
  "name": "eyedropper-icon"
34423
+ },
34424
+ {
34425
+ "description": "Help under the picker, for content richer than the `hint` text.",
34426
+ "name": "hint"
34427
+ },
34428
+ {
34429
+ "description": "The name above the picker, for content richer than the `label` text.",
34430
+ "name": "label"
34307
34431
  }
34308
34432
  ],
34309
34433
  "members": [
@@ -34384,9 +34508,22 @@
34384
34508
  "text": "boolean"
34385
34509
  },
34386
34510
  "default": "false",
34387
- "description": "Whether the picker shows a number field for each channel of the color, as\nReact Aria's ColorField does with `channel`: red, green and blue for hex\nand rgb, hue, saturation and lightness for hsl, and the opacity with\n`alpha`.\n\nFor a reader who has the numbers from a brand guide, and for a keyboard,\nwhere typing 128 is quicker than holding an arrow key. The fields follow\nthe syntax the format toggle sets.",
34511
+ "description": "Whether the picker shows a number field for each channel of the color, as\nReact Aria's ColorField does with `channel`: red, green and blue for hex\nand rgb, hue, saturation and lightness for hsl, hue, saturation and\nbrightness for hsb, lightness, chroma and hue for oklch, and the opacity\nwith `alpha`.\n\nFor a reader who has the numbers from a brand guide, and for a keyboard,\nwhere typing 128 is quicker than holding an arrow key. The fields follow\nthe syntax the format toggle sets.",
34388
34512
  "attribute": "channel-fields"
34389
34513
  },
34514
+ {
34515
+ "kind": "field",
34516
+ "name": "chromaLabel",
34517
+ "type": {
34518
+ "text": "string"
34519
+ },
34520
+ "default": "'Chroma'",
34521
+ "description": "What the chroma channel's field is called, in `channel-fields` with\noklch.",
34522
+ "attribute": "chroma-label",
34523
+ "helix": {
34524
+ "words": true
34525
+ }
34526
+ },
34390
34527
  {
34391
34528
  "kind": "field",
34392
34529
  "name": "colorWords",
@@ -34440,9 +34577,9 @@
34440
34577
  "kind": "field",
34441
34578
  "name": "format",
34442
34579
  "type": {
34443
- "text": "'hex' | 'hsl' | 'rgb' | undefined"
34580
+ "text": "'hex' | 'hsb' | 'hsl' | 'oklch' | 'rgb' | undefined"
34444
34581
  },
34445
- "description": "The syntax the value is written in: `hex`, `rgb`, or `hsl`.\n\nOnly what is written. Everything is read whatever this says, so a picker on\n`hex` still takes an `rgb()` handed to it and stores the hex for it.",
34582
+ "description": "The syntax the value is written in: `hex`, `rgb`, `hsl`, `oklch`, or\n`hsb`.\n\nOnly what is written. Everything is read whatever this says, so a picker on\n`hex` still takes an `rgb()` or an `oklch()` handed to it and stores the\nhex for it. `oklch` writes the sRGB color the picker holds, such as\n`oklch(62.8% 0.258 29.2)`; a color outside sRGB that is handed in is\nclipped to it. `hsb` writes the picker's own model, `hsb(0, 100%, 100%)`,\nas React Aria's and Zag's color strings do. It is not CSS, so the toggle\nwalks the other four.",
34446
34583
  "attribute": "format",
34447
34584
  "reflects": true
34448
34585
  },
@@ -34472,6 +34609,16 @@
34472
34609
  "words": true
34473
34610
  }
34474
34611
  },
34612
+ {
34613
+ "kind": "field",
34614
+ "name": "hint",
34615
+ "type": {
34616
+ "text": "string"
34617
+ },
34618
+ "default": "''",
34619
+ "description": "Help under the picker, such as what the color is used for. The `hint`\nslot takes richer content.",
34620
+ "attribute": "hint"
34621
+ },
34475
34622
  {
34476
34623
  "kind": "field",
34477
34624
  "name": "hueLabel",
@@ -34485,6 +34632,16 @@
34485
34632
  "words": true
34486
34633
  }
34487
34634
  },
34635
+ {
34636
+ "kind": "field",
34637
+ "name": "label",
34638
+ "type": {
34639
+ "text": "string"
34640
+ },
34641
+ "default": "''",
34642
+ "description": "The name above the picker, such as \"Brand color\". The picker is then a\ngroup with this name. The `label` slot takes richer content.",
34643
+ "attribute": "label"
34644
+ },
34488
34645
  {
34489
34646
  "kind": "field",
34490
34647
  "name": "lightnessLabel",
@@ -34492,7 +34649,7 @@
34492
34649
  "text": "string"
34493
34650
  },
34494
34651
  "default": "'Lightness'",
34495
- "description": "What the lightness channel's field is called, in `channel-fields` with\nhsl.",
34652
+ "description": "What the lightness channel's field is called, in `channel-fields` with\nhsl and oklch.",
34496
34653
  "attribute": "lightness-label",
34497
34654
  "helix": {
34498
34655
  "words": true
@@ -34703,6 +34860,81 @@
34703
34860
  "privacy": "private",
34704
34861
  "description": "The preset the reader was last on, which holds the row's one tab stop."
34705
34862
  },
34863
+ {
34864
+ "kind": "method",
34865
+ "name": "slottedIn",
34866
+ "privacy": "private",
34867
+ "return": {
34868
+ "type": {
34869
+ "text": "Element[]"
34870
+ }
34871
+ },
34872
+ "parameters": [
34873
+ {
34874
+ "name": "name",
34875
+ "type": {
34876
+ "text": "'hint' | 'label'"
34877
+ }
34878
+ }
34879
+ ],
34880
+ "description": "The children in a slot, read off the children rather than heard from\n`slotchange`: a declarative shadow root fires that before anything\nlistens, so a served picker kept its label hidden."
34881
+ },
34882
+ {
34883
+ "kind": "field",
34884
+ "name": "handleNamingSlot",
34885
+ "privacy": "private",
34886
+ "readonly": true
34887
+ },
34888
+ {
34889
+ "kind": "field",
34890
+ "name": "named",
34891
+ "type": {
34892
+ "text": "string"
34893
+ },
34894
+ "privacy": "private",
34895
+ "description": "The picker's own name, from `label` or the `label` slot's words.",
34896
+ "readonly": true
34897
+ },
34898
+ {
34899
+ "kind": "field",
34900
+ "name": "hinted",
34901
+ "type": {
34902
+ "text": "boolean"
34903
+ },
34904
+ "privacy": "private",
34905
+ "description": "Whether help is shown under the picker.",
34906
+ "readonly": true
34907
+ },
34908
+ {
34909
+ "kind": "field",
34910
+ "name": "describedBy",
34911
+ "type": {
34912
+ "text": "string | typeof nothing"
34913
+ },
34914
+ "privacy": "private",
34915
+ "description": "The ids a control in the picker is described by: the help, then the message.",
34916
+ "readonly": true
34917
+ },
34918
+ {
34919
+ "kind": "field",
34920
+ "name": "dragging",
34921
+ "type": {
34922
+ "text": "boolean"
34923
+ },
34924
+ "privacy": "private",
34925
+ "default": "false",
34926
+ "description": "Whether a pointer is dragging the square's handle, said as `:state(dragging)`."
34927
+ },
34928
+ {
34929
+ "kind": "field",
34930
+ "name": "picking",
34931
+ "type": {
34932
+ "text": "boolean"
34933
+ },
34934
+ "privacy": "private",
34935
+ "default": "false",
34936
+ "description": "Whether the eyedropper is open, said as `:state(sampling)`."
34937
+ },
34706
34938
  {
34707
34939
  "kind": "field",
34708
34940
  "name": "owned",
@@ -36183,9 +36415,18 @@
36183
36415
  "text": "boolean"
36184
36416
  },
36185
36417
  "default": "false",
36186
- "description": "Whether the picker shows a number field for each channel of the color, as\nReact Aria's ColorField does with `channel`: red, green and blue for hex\nand rgb, hue, saturation and lightness for hsl, and the opacity with\n`alpha`.\n\nFor a reader who has the numbers from a brand guide, and for a keyboard,\nwhere typing 128 is quicker than holding an arrow key. The fields follow\nthe syntax the format toggle sets.",
36418
+ "description": "Whether the picker shows a number field for each channel of the color, as\nReact Aria's ColorField does with `channel`: red, green and blue for hex\nand rgb, hue, saturation and lightness for hsl, hue, saturation and\nbrightness for hsb, lightness, chroma and hue for oklch, and the opacity\nwith `alpha`.\n\nFor a reader who has the numbers from a brand guide, and for a keyboard,\nwhere typing 128 is quicker than holding an arrow key. The fields follow\nthe syntax the format toggle sets.",
36187
36419
  "fieldName": "channelFields"
36188
36420
  },
36421
+ {
36422
+ "name": "chroma-label",
36423
+ "type": {
36424
+ "text": "string"
36425
+ },
36426
+ "default": "'Chroma'",
36427
+ "description": "What the chroma channel's field is called, in `channel-fields` with\noklch.",
36428
+ "fieldName": "chromaLabel"
36429
+ },
36189
36430
  {
36190
36431
  "name": "color-words",
36191
36432
  "type": {
@@ -36225,9 +36466,9 @@
36225
36466
  {
36226
36467
  "name": "format",
36227
36468
  "type": {
36228
- "text": "'hex' | 'hsl' | 'rgb' | undefined"
36469
+ "text": "'hex' | 'hsb' | 'hsl' | 'oklch' | 'rgb' | undefined"
36229
36470
  },
36230
- "description": "The syntax the value is written in: `hex`, `rgb`, or `hsl`.\n\nOnly what is written. Everything is read whatever this says, so a picker on\n`hex` still takes an `rgb()` handed to it and stores the hex for it.",
36471
+ "description": "The syntax the value is written in: `hex`, `rgb`, `hsl`, `oklch`, or\n`hsb`.\n\nOnly what is written. Everything is read whatever this says, so a picker on\n`hex` still takes an `rgb()` or an `oklch()` handed to it and stores the\nhex for it. `oklch` writes the sRGB color the picker holds, such as\n`oklch(62.8% 0.258 29.2)`; a color outside sRGB that is handed in is\nclipped to it. `hsb` writes the picker's own model, `hsb(0, 100%, 100%)`,\nas React Aria's and Zag's color strings do. It is not CSS, so the toggle\nwalks the other four.",
36231
36472
  "fieldName": "format"
36232
36473
  },
36233
36474
  {
@@ -36248,6 +36489,15 @@
36248
36489
  "description": "What the green channel's field is called, in `channel-fields`.",
36249
36490
  "fieldName": "greenLabel"
36250
36491
  },
36492
+ {
36493
+ "name": "hint",
36494
+ "type": {
36495
+ "text": "string"
36496
+ },
36497
+ "default": "''",
36498
+ "description": "Help under the picker, such as what the color is used for. The `hint`\nslot takes richer content.",
36499
+ "fieldName": "hint"
36500
+ },
36251
36501
  {
36252
36502
  "name": "hue-label",
36253
36503
  "type": {
@@ -36257,13 +36507,22 @@
36257
36507
  "description": "What the hue channel is called.",
36258
36508
  "fieldName": "hueLabel"
36259
36509
  },
36510
+ {
36511
+ "name": "label",
36512
+ "type": {
36513
+ "text": "string"
36514
+ },
36515
+ "default": "''",
36516
+ "description": "The name above the picker, such as \"Brand color\". The picker is then a\ngroup with this name. The `label` slot takes richer content.",
36517
+ "fieldName": "label"
36518
+ },
36260
36519
  {
36261
36520
  "name": "lightness-label",
36262
36521
  "type": {
36263
36522
  "text": "string"
36264
36523
  },
36265
36524
  "default": "'Lightness'",
36266
- "description": "What the lightness channel's field is called, in `channel-fields` with\nhsl.",
36525
+ "description": "What the lightness channel's field is called, in `channel-fields` with\nhsl and oklch.",
36267
36526
  "fieldName": "lightnessLabel"
36268
36527
  },
36269
36528
  {
@@ -36480,10 +36739,22 @@
36480
36739
  }
36481
36740
  ],
36482
36741
  "cssStates": [
36742
+ {
36743
+ "description": "The moment after the sample copies the value, while it says `copied-label`.",
36744
+ "name": "copied"
36745
+ },
36746
+ {
36747
+ "description": "While a pointer drags the square's handle.",
36748
+ "name": "dragging"
36749
+ },
36483
36750
  {
36484
36751
  "description": "While `invalid` is set or `feedback` says what is wrong.",
36485
36752
  "name": "invalid"
36486
36753
  },
36754
+ {
36755
+ "description": "While the eyedropper is open over the screen.",
36756
+ "name": "sampling"
36757
+ },
36487
36758
  {
36488
36759
  "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
36489
36760
  "name": "settled",
@@ -46971,6 +47242,10 @@
46971
47242
  "description": "Today. Applied with `picker-day`.",
46972
47243
  "name": "picker-day-today"
46973
47244
  },
47245
+ {
47246
+ "description": "A day of the weekend where the calendar's language is spoken, beside `picker-day`.",
47247
+ "name": "picker-day-weekend"
47248
+ },
46974
47249
  {
46975
47250
  "description": "The calendar's own message, under it, while the calendar's `feedback` is set.",
46976
47251
  "name": "picker-feedback"
@@ -50903,6 +51178,10 @@
50903
51178
  "description": "Today, beside `day`.",
50904
51179
  "name": "day-today"
50905
51180
  },
51181
+ {
51182
+ "description": "A day of the weekend where the calendar's language is spoken, beside `day`: Saturday and Sunday in `en-US`, Friday and Saturday in `ar-EG`.",
51183
+ "name": "day-weekend"
51184
+ },
50906
51185
  {
50907
51186
  "description": "The message under the calendar, while `feedback` is set.",
50908
51187
  "name": "feedback"
@@ -50976,11 +51255,19 @@
50976
51255
  "name": "week"
50977
51256
  },
50978
51257
  {
50979
- "description": "A column header naming a day of the week.",
51258
+ "description": "A column header naming a day of the week. It shows the short name and says the full one.",
50980
51259
  "name": "weekday"
50981
51260
  }
50982
51261
  ],
50983
51262
  "slots": [
51263
+ {
51264
+ "description": "Content under the calendar, such as buttons for today or a common range.",
51265
+ "name": "footer"
51266
+ },
51267
+ {
51268
+ "description": "Content above the calendar, such as a note on what the date is for.",
51269
+ "name": "header"
51270
+ },
50984
51271
  {
50985
51272
  "description": "The glyph on the control that moves forward a month, usually a caret.",
50986
51273
  "name": "next-icon"
@@ -51018,9 +51305,9 @@
51018
51305
  "kind": "field",
51019
51306
  "name": "calendar",
51020
51307
  "type": {
51021
- "text": "'buddhist' | 'gregory' | 'iso8601' | 'japanese' | 'roc' | undefined"
51308
+ "text": "'buddhist' | 'gregory' | 'iso8601' | 'japanese' | 'roc' | 'coptic' | 'ethiopic' | 'hebrew' | 'indian' | 'islamic-civil' | 'islamic-umalqura' | 'persian' | undefined"
51022
51309
  },
51023
- "description": "The calendar the heading, the days, and the months are written in:\n`gregory`, `buddhist`, `japanese`, `roc`, or `iso8601`, the five whose\nmonths are the Gregorian months.\n\nAbsent is the locale's own where it is one of the five, such as\n`buddhist` for `th-TH` or `japanese` for `ja-JP-u-ca-japanese`, and\n`gregory` for every other, such as `persian` for `fa-IR`, so the heading\nnames the Gregorian month the grid shows. The value is `YYYY-MM-DD` in\nevery calendar.",
51310
+ "description": "The calendar the heading, the days, and the months are written in.\n\n`gregory`, `buddhist`, `japanese`, `roc`, and `iso8601` are the five\nwhose months are the Gregorian months. Absent is the locale's own where\nit is one of the five, such as `buddhist` for `th-TH` or `japanese` for\n`ja-JP-u-ca-japanese`, and `gregory` for every other, such as `persian`\nfor `fa-IR`.\n\n`persian`, `hebrew`, `islamic-umalqura`, `islamic-civil`, `ethiopic`,\n`coptic`, and `indian` draw a calendar with months of its own, as React\nAria's calendars do: each grid is one of that calendar's months, the\nHebrew leap month and Ethiopia's five-day thirteenth month included, and\nPrevious, Next and the page keys move by those months. `month` and\n`helix-navigate` then name a month by its first day, `YYYY-MM-DD`. The\nheading stays text, as the months and years views are drawn in Gregorian\nmonths only. The value is `YYYY-MM-DD` in every calendar.",
51024
51311
  "attribute": "calendar"
51025
51312
  },
51026
51313
  {
@@ -51166,7 +51453,7 @@
51166
51453
  "type": {
51167
51454
  "text": "string"
51168
51455
  },
51169
- "description": "The month shown, as `YYYY-MM`. When it is not set, it follows `value`,\nthen the current month.\n\nSeparate from `value` on purpose, so paging selects nothing and a consumer\ncan drive the view. Reading gives the month on show; writing sets it, and\n`default-month` seeds one the calendar keeps until somebody does.",
51456
+ "description": "The month shown, as `YYYY-MM`, or as its first day, `YYYY-MM-DD`, under a\n`calendar` with months of its own. When it is not set, it follows\n`value`, then the current month.\n\nSeparate from `value` on purpose, so paging selects nothing and a consumer\ncan drive the view. Reading gives the month on show; writing sets it, and\n`default-month` seeds one the calendar keeps until somebody does.",
51170
51457
  "attribute": "month"
51171
51458
  },
51172
51459
  {
@@ -51303,6 +51590,16 @@
51303
51590
  "description": "The selected dates, in order.",
51304
51591
  "readonly": true
51305
51592
  },
51593
+ {
51594
+ "kind": "field",
51595
+ "name": "weekend",
51596
+ "type": {
51597
+ "text": "number[]"
51598
+ },
51599
+ "privacy": "private",
51600
+ "description": "The days of the weekend, `0` for Sunday: the locale's, or Saturday and Sunday where none is named.",
51601
+ "readonly": true
51602
+ },
51306
51603
  {
51307
51604
  "kind": "field",
51308
51605
  "name": "weekStart",
@@ -51361,6 +51658,26 @@
51361
51658
  "description": "The month being shown, resolved from `month`, then `value`, then today.",
51362
51659
  "readonly": true
51363
51660
  },
51661
+ {
51662
+ "kind": "field",
51663
+ "name": "system",
51664
+ "type": {
51665
+ "text": "MonthSystem"
51666
+ },
51667
+ "privacy": "private",
51668
+ "description": "The months the calendar pages through: its own under a `calendar` with\nmonths of its own, and the Gregorian months otherwise.",
51669
+ "readonly": true
51670
+ },
51671
+ {
51672
+ "kind": "field",
51673
+ "name": "ownMonths",
51674
+ "type": {
51675
+ "text": "boolean"
51676
+ },
51677
+ "privacy": "private",
51678
+ "description": "Whether `calendar` names a calendar with months of its own.",
51679
+ "readonly": true
51680
+ },
51364
51681
  {
51365
51682
  "kind": "field",
51366
51683
  "name": "derivedMonth",
@@ -51790,6 +52107,16 @@
51790
52107
  "words": true
51791
52108
  }
51792
52109
  },
52110
+ {
52111
+ "kind": "field",
52112
+ "name": "timeZone",
52113
+ "type": {
52114
+ "text": "string"
52115
+ },
52116
+ "default": "''",
52117
+ "description": "The time zone today is read in, such as `America/New_York`, as React\nAria's `today(timeZone)` reads it. Empty is the reader's own.\n\nDates are plain `YYYY-MM-DD` and carry no zone, so this moves only today:\nthe day marked `aria-current` and `day-today`, and the month a picker\nwith no value opens on. A desk in Tokyo booking for an office in New York\nsets `America/New_York`, and today is the office's.",
52118
+ "attribute": "time-zone"
52119
+ },
51793
52120
  {
51794
52121
  "kind": "field",
51795
52122
  "name": "unavailableMessage",
@@ -51913,7 +52240,7 @@
51913
52240
  "kind": "field",
51914
52241
  "name": "cachedFormats",
51915
52242
  "type": {
51916
- "text": "| {\n full: Intl.DateTimeFormat\n heading: Intl.DateTimeFormat\n locale: string\n long: Intl.DateTimeFormat\n monthName: Intl.DateTimeFormat\n monthYear: Intl.DateTimeFormat\n weekday: Intl.DateTimeFormat\n year: Intl.DateTimeFormat\n }\n | undefined"
52243
+ "text": "| {\n full: Intl.DateTimeFormat\n heading: Intl.DateTimeFormat\n locale: string\n long: Intl.DateTimeFormat\n monthName: Intl.DateTimeFormat\n monthYear: Intl.DateTimeFormat\n weekday: Intl.DateTimeFormat\n weekdayName: Intl.DateTimeFormat\n year: Intl.DateTimeFormat\n }\n | undefined"
51917
52244
  },
51918
52245
  "privacy": "private",
51919
52246
  "description": "The three date formatters, built once per locale rather than per render.\n\n`Intl.DateTimeFormat` costs about a quarter of a millisecond to construct\nand these depend on nothing but `locale` and `calendar`, so building them\ninside the per-month render is three constructions for every month on\nshow, on every update: a two-month calendar rebuilds six each time an\narrow key moves the anchor.\n\nKeyed on the locale with its calendar, so a change to either is picked\nup, which a plain lazy field would not do."
@@ -51922,7 +52249,7 @@
51922
52249
  "kind": "field",
51923
52250
  "name": "formats",
51924
52251
  "type": {
51925
- "text": "{\n full: Intl.DateTimeFormat\n heading: Intl.DateTimeFormat\n long: Intl.DateTimeFormat\n monthName: Intl.DateTimeFormat\n monthYear: Intl.DateTimeFormat\n weekday: Intl.DateTimeFormat\n year: Intl.DateTimeFormat\n }"
52252
+ "text": "{\n full: Intl.DateTimeFormat\n heading: Intl.DateTimeFormat\n long: Intl.DateTimeFormat\n monthName: Intl.DateTimeFormat\n monthYear: Intl.DateTimeFormat\n weekday: Intl.DateTimeFormat\n weekdayName: Intl.DateTimeFormat\n year: Intl.DateTimeFormat\n }"
51926
52253
  },
51927
52254
  "privacy": "private",
51928
52255
  "readonly": true
@@ -53042,9 +53369,9 @@
53042
53369
  {
53043
53370
  "name": "calendar",
53044
53371
  "type": {
53045
- "text": "'buddhist' | 'gregory' | 'iso8601' | 'japanese' | 'roc' | undefined"
53372
+ "text": "'buddhist' | 'gregory' | 'iso8601' | 'japanese' | 'roc' | 'coptic' | 'ethiopic' | 'hebrew' | 'indian' | 'islamic-civil' | 'islamic-umalqura' | 'persian' | undefined"
53046
53373
  },
53047
- "description": "The calendar the heading, the days, and the months are written in:\n`gregory`, `buddhist`, `japanese`, `roc`, or `iso8601`, the five whose\nmonths are the Gregorian months.\n\nAbsent is the locale's own where it is one of the five, such as\n`buddhist` for `th-TH` or `japanese` for `ja-JP-u-ca-japanese`, and\n`gregory` for every other, such as `persian` for `fa-IR`, so the heading\nnames the Gregorian month the grid shows. The value is `YYYY-MM-DD` in\nevery calendar.",
53374
+ "description": "The calendar the heading, the days, and the months are written in.\n\n`gregory`, `buddhist`, `japanese`, `roc`, and `iso8601` are the five\nwhose months are the Gregorian months. Absent is the locale's own where\nit is one of the five, such as `buddhist` for `th-TH` or `japanese` for\n`ja-JP-u-ca-japanese`, and `gregory` for every other, such as `persian`\nfor `fa-IR`.\n\n`persian`, `hebrew`, `islamic-umalqura`, `islamic-civil`, `ethiopic`,\n`coptic`, and `indian` draw a calendar with months of its own, as React\nAria's calendars do: each grid is one of that calendar's months, the\nHebrew leap month and Ethiopia's five-day thirteenth month included, and\nPrevious, Next and the page keys move by those months. `month` and\n`helix-navigate` then name a month by its first day, `YYYY-MM-DD`. The\nheading stays text, as the months and years views are drawn in Gregorian\nmonths only. The value is `YYYY-MM-DD` in every calendar.",
53048
53375
  "fieldName": "calendar"
53049
53376
  },
53050
53377
  {
@@ -53139,7 +53466,7 @@
53139
53466
  "type": {
53140
53467
  "text": "string"
53141
53468
  },
53142
- "description": "The month shown, as `YYYY-MM`. When it is not set, it follows `value`,\nthen the current month.\n\nSeparate from `value` on purpose, so paging selects nothing and a consumer\ncan drive the view. Reading gives the month on show; writing sets it, and\n`default-month` seeds one the calendar keeps until somebody does.",
53469
+ "description": "The month shown, as `YYYY-MM`, or as its first day, `YYYY-MM-DD`, under a\n`calendar` with months of its own. When it is not set, it follows\n`value`, then the current month.\n\nSeparate from `value` on purpose, so paging selects nothing and a consumer\ncan drive the view. Reading gives the month on show; writing sets it, and\n`default-month` seeds one the calendar keeps until somebody does.",
53143
53470
  "fieldName": "month"
53144
53471
  },
53145
53472
  {
@@ -53268,6 +53595,15 @@
53268
53595
  "description": "The validation message for a date that `step` skips.",
53269
53596
  "fieldName": "stepMismatchMessage"
53270
53597
  },
53598
+ {
53599
+ "name": "time-zone",
53600
+ "type": {
53601
+ "text": "string"
53602
+ },
53603
+ "default": "''",
53604
+ "description": "The time zone today is read in, such as `America/New_York`, as React\nAria's `today(timeZone)` reads it. Empty is the reader's own.\n\nDates are plain `YYYY-MM-DD` and carry no zone, so this moves only today:\nthe day marked `aria-current` and `day-today`, and the month a picker\nwith no value opens on. A desk in Tokyo booking for an office in New York\nsets `America/New_York`, and today is the office's.",
53605
+ "fieldName": "timeZone"
53606
+ },
53271
53607
  {
53272
53608
  "name": "unavailable-message",
53273
53609
  "type": {
@@ -107318,7 +107654,7 @@
107318
107654
  "declarations": [
107319
107655
  {
107320
107656
  "kind": "class",
107321
- "description": "Renders a real `<nav>`, the landmark that screen reader users jump to.\nNavigation is its own component, separate from `AppHeader`, so you can use it\nin a header, a footer, or a sidebar.\n\n**It renders no links.** Bring your own, mark the current one with\n`aria-current=\"page\"`, and style them with the `data-navigation-item` recipe.\nA router renders its own anchors and cannot render them inside the\ncomponent's shadow root.\n\nThe component moves a marker to the current item. It finds the current item\nby reading `aria-current`, so the attribute that screen readers announce also\nplaces the marker. Any value but `false` counts, so a sidebar of sections on\none page can mark the section in view with `aria-current=\"location\"`. Where\nseveral are marked, `page` wins.\n\n**The destinations can be a list.** Slot a `<ul>` or an `<ol>` of `<li>`\nelements, each holding a link, and a screen reader says how many there are\nand where each one is, as in Radix's `NavigationMenu.List`. The marker and\nthe arrow keys work on the list items as they do on bare links. Give the\nlist `role=\"list\"` as well, since Safari drops the semantics of a list drawn\nwithout bullets.\n\nSet `orientation=\"vertical\"` to stack the destinations in a column, for a\nsidebar.\n\nSet `arrows` and the arrow keys move focus between the destinations, as\nRadix's navigation menu does: left and right along a row, up and down a\ncolumn, Home and End to the ends. A `Megamenu` among them is reached at its\ntrigger. Tab still stops at every link, since a navigation is a list of\nlinks and not a single control, and the keys across the other axis are\nleft to the page and to an open panel.",
107657
+ "description": "Renders a real `<nav>`, the landmark that screen reader users jump to.\nNavigation is its own component, separate from `AppHeader`, so you can use it\nin a header, a footer, or a sidebar.\n\n**It renders no links.** Bring your own, mark the current one with\n`aria-current=\"page\"`, and style them with the `data-navigation-item` recipe.\nA router renders its own anchors and cannot render them inside the\ncomponent's shadow root.\n\nThe component moves a marker to the current item. It finds the current item\nby reading `aria-current`, so the attribute that screen readers announce also\nplaces the marker. Any value but `false` counts, so a sidebar of sections on\none page can mark the section in view with `aria-current=\"location\"`. Where\nseveral are marked, `page` wins.\n\n**The destinations can be a list.** Slot a `<ul>` or an `<ol>` of `<li>`\nelements, each holding a link, and a screen reader says how many there are\nand where each one is, as in Radix's `NavigationMenu.List`. The marker and\nthe arrow keys work on the list items as they do on bare links. Give the\nlist `role=\"list\"` as well, since Safari drops the semantics of a list drawn\nwithout bullets.\n\nSet `orientation=\"vertical\"` to stack the destinations in a column, for a\nsidebar.\n\nSet `arrows` and the arrow keys move focus between the destinations, as\nRadix's navigation menu does: left and right along a row, up and down a\ncolumn, Home and End to the ends. A `Megamenu` among them is reached at its\ntrigger. Tab still stops at every link, since a navigation is a list of\nlinks and not a single control, and the keys across the other axis are\nleft to the page and to an open panel.\n\nWhile a `Megamenu`, or another disclosure among the destinations, is open,\nthe navigation is `:state(open)`, so a page can dim what lies under the\npanel, as Radix's navigation menu marks its open state.\n\nA screen reader lists the page's navigation landmarks by name, so two named\nalike cannot be told apart. Where another navigation in the same document\nhas the same name, \"Main\" for two with no `label`, the later one warns once\nwith the kind `duplicate-name`.",
107322
107658
  "name": "HelixHeadlessNavigation",
107323
107659
  "cssParts": [
107324
107660
  {
@@ -107414,6 +107750,42 @@
107414
107750
  },
107415
107751
  "privacy": "private"
107416
107752
  },
107753
+ {
107754
+ "kind": "field",
107755
+ "name": "opened",
107756
+ "privacy": "private",
107757
+ "readonly": true,
107758
+ "default": "new Set<EventTarget>()",
107759
+ "description": "The disclosures among the destinations that are open."
107760
+ },
107761
+ {
107762
+ "kind": "field",
107763
+ "name": "handleToggle",
107764
+ "privacy": "private",
107765
+ "readonly": true,
107766
+ "description": "Hears a disclosure among the destinations open or close. In capture,\nbecause `toggle` does not bubble."
107767
+ },
107768
+ {
107769
+ "kind": "field",
107770
+ "name": "landmarkName",
107771
+ "type": {
107772
+ "text": "string"
107773
+ },
107774
+ "privacy": "private",
107775
+ "description": "The landmark's name as a screen reader lists it.",
107776
+ "readonly": true
107777
+ },
107778
+ {
107779
+ "kind": "method",
107780
+ "name": "auditTwin",
107781
+ "privacy": "private",
107782
+ "return": {
107783
+ "type": {
107784
+ "text": "void"
107785
+ }
107786
+ },
107787
+ "description": "Warns once where another navigation in the same document has the same\nname, a task after the first render, so the page's other landmarks have\nrendered too."
107788
+ },
107417
107789
  {
107418
107790
  "kind": "field",
107419
107791
  "name": "items",
@@ -107803,6 +108175,20 @@
107803
108175
  "fieldName": "orientation"
107804
108176
  }
107805
108177
  ],
108178
+ "cssStates": [
108179
+ {
108180
+ "description": "While a megamenu or another disclosure among the destinations is open.",
108181
+ "name": "open"
108182
+ },
108183
+ {
108184
+ "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
108185
+ "name": "settled",
108186
+ "inheritedFrom": {
108187
+ "name": "HelixElement",
108188
+ "module": "src/helix-element/helix-element.ts"
108189
+ }
108190
+ }
108191
+ ],
107806
108192
  "superclass": {
107807
108193
  "name": "HelixElement",
107808
108194
  "package": "@fusion.dev/helix-core"
@@ -107831,16 +108217,6 @@
107831
108217
  },
107832
108218
  "tagName": "helix-headless-navigation",
107833
108219
  "customElement": true,
107834
- "cssStates": [
107835
- {
107836
- "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
107837
- "name": "settled",
107838
- "inheritedFrom": {
107839
- "name": "HelixElement",
107840
- "module": "src/helix-element/helix-element.ts"
107841
- }
107842
- }
107843
- ],
107844
108220
  "modulePath": "src/navigation/root/navigation-root.ts",
107845
108221
  "definitionPath": "src/navigation/root/navigation-root.ts"
107846
108222
  }
@@ -133950,7 +134326,7 @@
133950
134326
  "declarations": [
133951
134327
  {
133952
134328
  "kind": "class",
133953
- "description": "A trigger that opens a `Listbox`. The list is the same element you can use on\nits own, with the same keyboard behavior, filtering, and multi-select rules.\nSelect adds a trigger that shows what is chosen, a floating surface, and a\nplace for focus to return to when the list closes.\n\nYour options stay in your light DOM and are slotted through into the listbox,\nso the listbox looks through slots to find them.\n\n`Select` owns the value, passes it down to the listbox, and takes changes\nback, so the value lives in one place.\n\nSet `valueContent` to draw the trigger's content from the chosen options,\nand several chosen options are written as a list in the reader's language.\n\n**Keyboard.** On the closed trigger:\n\n| Key | What it does |\n|---|---|\n| Down, Enter, Space | Opens the list on the chosen option, or the first. |\n| Up | Opens the list on the chosen option, or the last. |\n| Home, End | Opens the list on the first or the last option. |\n| Left, Right | Chooses the option before or after the chosen one without opening, as React Aria's Select does, in either direction of text. |\n| A letter or a word | Chooses the option whose words start with what you typed, as a native `<select>` does. With `multiple`, opens the list on it. |\n\nIn the open list, which is a `Listbox`:\n\n| Key | What it does |\n|---|---|\n| Down, Up, Home, End, Page Down, Page Up | Moves the highlight. |\n| A letter or a word | Moves the highlight to the next option whose words start with what you typed. |\n| Enter, Space | Chooses the highlighted option and closes the list. With `multiple`, toggles it and leaves the list open. |\n| Escape | Closes the list and puts focus back on the trigger. |\n| Tab | Closes the list and moves on. |\n\nA choice made on the closed trigger is said aloud on Apple devices, where\nVoiceOver does not read the trigger's new name.\n\n**ARIA.** The trigger is a `button` with `aria-haspopup=\"listbox\"` and\n`aria-expanded`, named by the label and then the chosen words, as a native\n`<select>` is. The list is the listbox `Listbox` describes, named by the\nlabel, or by `list-label` where there is none.\n\nSet `autocomplete` to let a browser's autofill choose, as a native `<select>`\nwith the same attribute would.",
134329
+ "description": "A trigger that opens a `Listbox`. The list is the same element you can use on\nits own, with the same keyboard behavior, filtering, and multi-select rules.\nSelect adds a trigger that shows what is chosen, a floating surface, and a\nplace for focus to return to when the list closes.\n\nYour options stay in your light DOM and are slotted through into the listbox,\nso the listbox looks through slots to find them. For a list too long to draw\nwhole, set `items` instead: the list draws only the options in sight, as\nListbox's `items` does, and the trigger, its keys and the form read the\nwhole set.\n\n`Select` owns the value, passes it down to the listbox, and takes changes\nback, so the value lives in one place.\n\nSet `valueContent` to draw the trigger's content from the chosen options,\nand several chosen options are written as a list in the reader's language.\n\n**Keyboard.** On the closed trigger:\n\n| Key | What it does |\n|---|---|\n| Down, Enter, Space | Opens the list on the chosen option, or the first. |\n| Up | Opens the list on the chosen option, or the last. |\n| Home, End | Opens the list on the first or the last option. |\n| Left, Right | Chooses the option before or after the chosen one without opening, as React Aria's Select does, in either direction of text. |\n| A letter or a word | Chooses the option whose words start with what you typed, as a native `<select>` does. With `multiple`, opens the list on it. |\n\nIn the open list, which is a `Listbox`:\n\n| Key | What it does |\n|---|---|\n| Down, Up, Home, End, Page Down, Page Up | Moves the highlight. |\n| A letter or a word | Moves the highlight to the next option whose words start with what you typed. |\n| Enter, Space | Chooses the highlighted option and closes the list. With `multiple`, toggles it and leaves the list open. |\n| Escape | Closes the list and puts focus back on the trigger. |\n| Tab | Closes the list and moves on. |\n\nA choice made on the closed trigger is said aloud on Apple devices, where\nVoiceOver does not read the trigger's new name.\n\n**ARIA.** The trigger is a `button` with `aria-haspopup=\"listbox\"` and\n`aria-expanded`, named by the label and then the chosen words, as a native\n`<select>` is. The list is the listbox `Listbox` describes, named by the\nlabel, or by `list-label` where there is none.\n\nSet `autocomplete` to let a browser's autofill choose, as a native `<select>`\nwith the same attribute would.",
133954
134330
  "name": "HelixHeadlessSelect",
133955
134331
  "cssProperties": [
133956
134332
  {
@@ -134147,6 +134523,15 @@
134147
134523
  "default": "true",
134148
134524
  "description": "Whether the trigger holds its group's tab stop.\n\nA toolbar keeps one tab stop across its controls, and writing `tabindex`\nonto this element would change markup the consumer rendered, which a React\nconsumer's hydration reports. A toolbar sets this property instead, and\nthe stop moves on the trigger inside the shadow root, as Button's does.\n\nNo attribute, because it is coordination between elements rather than\nanything a consumer sets."
134149
134525
  },
134526
+ {
134527
+ "kind": "field",
134528
+ "name": "items",
134529
+ "type": {
134530
+ "text": "readonly DataOptionItem[] | undefined"
134531
+ },
134532
+ "default": "undefined",
134533
+ "description": "The options as data, for a list too long to draw whole: each a value,\nwhich is also its words, or a record with a `value`, a `label` and\n`disabled`. Passed to the list, which draws only the options in sight,\nas Listbox's `items` does. Set, the options you write as children are\nnot read.\n\nThe trigger shows the chosen options' labels, the letters and the Left\nand Right keys on the closed trigger choose over the whole set, and a\nchosen value whose option leaves `items` drops out of `value`.\n`value-content` is not called for `items`. Import the Option family as\nwell, whose elements are drawn."
134534
+ },
134150
134535
  {
134151
134536
  "kind": "field",
134152
134537
  "name": "listLabel",
@@ -134275,7 +134660,7 @@
134275
134660
  "name": "panel",
134276
134661
  "privacy": "protected",
134277
134662
  "readonly": true,
134278
- "default": "new PopoverController(this, { anchor: () => this.partNamed('trigger'), /* The surface *and* the trigger. * * A control is not always one element: the button that opens this panel is * part of it, and a press on it is not a press outside. Scoped to the * surface alone, `pointerdown` on the trigger closes the panel and the * trigger's own `toggleOpen` reopens it on the `click` that follows, so * the panel can never be closed by the button that opened it. * * `DismissController` documents this exact failure and takes a list for * it. */ boundary: (): readonly (Element | null | undefined)[] => [ this.partNamed('surface'), this.partNamed('trigger'), ], offset: () => 4, onDismiss: () => this.close(), open: () => this.open, /* Placed here instead where the list opens over the trigger, which is no side of it. */ place: () => this.position !== 'item-aligned', placement: 'bottom-start', surface: () => this.partNamed('surface'), })"
134663
+ "default": "new PopoverController(this, { anchor: () => this.partNamed('trigger'), /* The surface *and* the trigger. * * A control is not always one element: the button that opens this panel is * part of it, and a press on it is not a press outside. Scoped to the * surface alone, `pointerdown` on the trigger closes the panel and the * trigger's own `toggleOpen` reopens it on the `click` that follows, so * the panel can never be closed by the button that opened it. * * `DismissController` documents this exact failure and takes a list for * it. */ boundary: (): readonly (Element | null | undefined)[] => [ this.partNamed('surface'), this.partNamed('trigger'), ], offset: () => 4, onDismiss: () => this.close(), /* The side the list landed on, for a sheet outside that draws by side, as Popover says it. */ onPlace: (placement) => { const side = sideOf(placement) this.toggleState('placed-bottom', side === 'bottom') this.toggleState('placed-top', side === 'top') }, open: () => this.open, /* Placed here instead where the list opens over the trigger, which is no side of it. */ place: () => this.position !== 'item-aligned', placement: 'bottom-start', surface: () => this.partNamed('surface'), })"
134279
134664
  },
134280
134665
  {
134281
134666
  "kind": "field",
@@ -134294,7 +134679,26 @@
134294
134679
  "text": "HelixHeadlessOption[]"
134295
134680
  },
134296
134681
  "privacy": "private",
134297
- "description": "The chosen options, in the order they appear. None on a server or while hydrating.",
134682
+ "description": "The chosen options, in the order they appear. None on a server or while hydrating, and none for `items`.",
134683
+ "readonly": true
134684
+ },
134685
+ {
134686
+ "kind": "field",
134687
+ "name": "data",
134688
+ "type": {
134689
+ "text": "{ from: readonly DataOptionItem[]; options: DataOption[] } | undefined"
134690
+ },
134691
+ "privacy": "private",
134692
+ "description": "`items` as the list reads them, built once per array."
134693
+ },
134694
+ {
134695
+ "kind": "field",
134696
+ "name": "entries",
134697
+ "type": {
134698
+ "text": "readonly { disabled: boolean; text: string; value: string }[]"
134699
+ },
134700
+ "privacy": "private",
134701
+ "description": "Every option the select reads, in order: the records of `items`, or the\noption elements among its children.",
134298
134702
  "readonly": true
134299
134703
  },
134300
134704
  {
@@ -136210,6 +136614,14 @@
136210
136614
  "description": "While the list is open.",
136211
136615
  "name": "open"
136212
136616
  },
136617
+ {
136618
+ "description": "While the open list sits below the trigger.",
136619
+ "name": "placed-bottom"
136620
+ },
136621
+ {
136622
+ "description": "While the open list sits above the trigger, where there was no room below.",
136623
+ "name": "placed-top"
136624
+ },
136213
136625
  {
136214
136626
  "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
136215
136627
  "name": "settled",
@@ -137356,11 +137768,11 @@
137356
137768
  "declarations": [
137357
137769
  {
137358
137770
  "kind": "class",
137359
- "description": "Renders a native `<input type=\"range\">`, so the drag, the arrow keys, Home,\nEnd, the page keys, and the touch target come from the platform. A native\nrange has a hit area larger than its thumb, sized for a finger.\n\nThe value is a string, like every other form control's, and\n`MixinControllerValue` holds text. Use `valueAsNumber` for arithmetic.\n\nMarks are drawn by the component. The ticks of a `<datalist>` cannot be\nstyled, and Firefox does not render them for a range. Marks are decoration.\n`step` sets where the value can land, and the input enforces it whether or\nnot marks are drawn. `markers` is a count, so a slider from zero to a hundred\ndoes not draw a hundred and one marks by accident.\n\nA range with two thumbs is two inputs stacked on one track, because there is\nno native two-thumb range. Each thumb keeps its own value.\n`min-steps-between-thumbs` keeps them that many steps apart, and the readout\njoins the two as `range-text` writes them.\n\n`origin` sets where a single thumb's fill starts: at `min`, at the middle of\nthe track, or at `max`. A balance or an offset from zero fills from the\nmiddle, as Zag's slider `origin` does. The fill's ends are published as\n`--slider-from` and `--slider-to`.\n\n`format-options` writes the value with `Intl.NumberFormat` in `locale`, as a\ncurrency, a percent or a unit, and `formatter` writes it with a function of\nyour own, such as words for a scale. Either one is what a screen reader\nhears, what the readout shows and what the marker labels say. `value-text`\nstill wraps it in a sentence, with the formatted value in its place.\n\n`required` comes with the field mixin and cannot fail. A range is never\nempty: the platform shows its midpoint when no value is set, and `willUpdate`\nseeds that midpoint into `defaultValue`, so the value matches the handle from\nthe first render. HTML does not apply `required` to a range either, so it is\nnot set on the input. It only adds the marker beside the label.\n\n**Keyboard.** Each thumb is one tab stop, and its keys are the native\nrange's.\n\n| Key | What it does |\n|---|---|\n| Right, Up | Moves the thumb up by `step`. |\n| Left, Down | Moves the thumb down by `step`. |\n| Page Up, Page Down | Moves the thumb by a larger step. |\n| Home, End | Moves the thumb to its lowest or highest value. |\n\nEach thumb is an `<input type=\"range\">` with `aria-valuetext` where the value\nis formatted or worded. A range's thumbs say they stop at each other with\n`aria-valuemin` and `aria-valuemax`.",
137771
+ "description": "Renders a native `<input type=\"range\">`, so the drag, the arrow keys, Home,\nEnd, the page keys, and the touch target come from the platform. A native\nrange has a hit area larger than its thumb, sized for a finger.\n\nThe value is a string, like every other form control's, and\n`MixinControllerValue` holds text. Use `valueAsNumber` for arithmetic.\n\nMarks are drawn by the component. The ticks of a `<datalist>` cannot be\nstyled, and Firefox does not render them for a range. Marks are decoration.\n`step` sets where the value can land, and the input enforces it whether or\nnot marks are drawn. `markers` is a count, so a slider from zero to a hundred\ndoes not draw a hundred and one marks by accident.\n\nA range with two thumbs is two inputs stacked on one track, because there is\nno native two-thumb range. Each thumb keeps its own value, and a named range\nsubmits one entry per thumb under its name, the lowest first. A range given\nmore than two values, such as `default-value=\"20,50,80\"`, has a thumb for\neach, as React Aria's slider takes any number of thumbs: each stops at its\nneighbors, and the ones between the first and the last are named by\n`thumb-label`.\n`min-steps-between-thumbs` keeps them that many steps apart, and the readout\njoins the two as `range-text` writes them.\n\n`origin` sets where a single thumb's fill starts: at `min`, at the middle of\nthe track, or at `max`. A balance or an offset from zero fills from the\nmiddle, as Zag's slider `origin` does. The fill's ends are published as\n`--slider-from` and `--slider-to`.\n\n`format-options` writes the value with `Intl.NumberFormat` in `locale`, as a\ncurrency, a percent or a unit, and `formatter` writes it with a function of\nyour own, such as words for a scale. Either one is what a screen reader\nhears, what the readout shows and what the marker labels say. `value-text`\nstill wraps it in a sentence, with the formatted value in its place.\n\n`required` comes with the field mixin and cannot fail. A range is never\nempty: the platform shows its midpoint when no value is set, and `willUpdate`\nseeds that midpoint into `defaultValue`, so the value matches the handle from\nthe first render. HTML does not apply `required` to a range either, so it is\nnot set on the input. It only adds the marker beside the label.\n\n**Keyboard.** Each thumb is one tab stop, and its keys are the native\nrange's.\n\n| Key | What it does |\n|---|---|\n| Right, Up | Moves the thumb up by `step`. |\n| Left, Down | Moves the thumb down by `step`. |\n| Page Up, Page Down | Moves the thumb by a larger step. |\n| Home, End | Moves the thumb to its lowest or highest value. |\n\nUnder `readonly` none of these move the thumb, and Tab still reaches it.\n\nEach thumb is an `<input type=\"range\">` with `aria-valuetext` where the value\nis formatted or worded. A range's thumbs say they stop at each other with\n`aria-valuemin` and `aria-valuemax`.",
137360
137772
  "name": "HelixHeadlessSlider",
137361
137773
  "cssProperties": [
137362
137774
  {
137363
- "description": "Where a bubble's thumb is, as a fraction of the track, 0 to 1. Set on each `tooltip` part.",
137775
+ "description": "Where a bubble's or a thumb box's thumb is, as a fraction of the track, 0 to 1. Set on each `tooltip` and `thumb` part.",
137364
137776
  "name": "--slider-at"
137365
137777
  },
137366
137778
  {
@@ -137382,7 +137794,7 @@
137382
137794
  ],
137383
137795
  "cssParts": [
137384
137796
  {
137385
- "description": "The range input.",
137797
+ "description": "The range input, one per thumb. On a range each carries `data-thumb`, `start`, `middle`, or `end`, and `data-index`, its place from the lowest.",
137386
137798
  "name": "control"
137387
137799
  },
137388
137800
  {
@@ -137418,7 +137830,15 @@
137418
137830
  "name": "output"
137419
137831
  },
137420
137832
  {
137421
- "description": "One thumb's value in a bubble beside it, under `tooltip`. It carries `data-thumb` on a range, `start` or `end`, and `--slider-at`, where its thumb is as a fraction of the track.",
137833
+ "description": "One thumb's own box over the track, which holds the `thumb` or `thumb-end` slot. It carries `data-thumb` on a range, `start`, `middle`, or `end`, and `--slider-at`, where its thumb is as a fraction of the track. Draw your own thumb here and hide the native one, or leave it empty.",
137834
+ "name": "thumb"
137835
+ },
137836
+ {
137837
+ "description": "The layer over the track that holds each `thumb`. It is `hidden` until a thumb slot has content, and then `[part=\"field\"]` carries `data-thumbs`.",
137838
+ "name": "thumbs"
137839
+ },
137840
+ {
137841
+ "description": "One thumb's value in a bubble beside it, under `tooltip`. It carries `data-thumb` on a range, `start`, `middle`, or `end`, and `--slider-at`, where its thumb is as a fraction of the track.",
137422
137842
  "name": "tooltip"
137423
137843
  },
137424
137844
  {
@@ -137438,6 +137858,14 @@
137438
137858
  {
137439
137859
  "description": "The label, for content richer than the `label` text.",
137440
137860
  "name": "label"
137861
+ },
137862
+ {
137863
+ "description": "Content drawn on the thumb, such as a glyph: a single slider's thumb, or a range's lower one. It is decoration, hidden from a screen reader.",
137864
+ "name": "thumb"
137865
+ },
137866
+ {
137867
+ "description": "Content drawn on a range's upper thumb.",
137868
+ "name": "thumb-end"
137441
137869
  }
137442
137870
  ],
137443
137871
  "members": [
@@ -137604,7 +138032,7 @@
137604
138032
  "text": "boolean"
137605
138033
  },
137606
138034
  "default": "false",
137607
- "description": "Adds a second thumb, so the value is a pair.\n\nThe pair is one string, `\"10,50\"`, which is what a form submits and what\n`MixinControllerValue` already holds. `valueAsNumber` reads the lower of\nthe two, since a range has no single number.",
138035
+ "description": "Adds a second thumb, so the value is a pair.\n\nThe pair is one string, `\"10,50\"`, which is what `value` and\n`MixinControllerValue` hold. A form receives two entries under the name,\n`price=10&price=50`, as React Aria's two thumbs send theirs.\n`valueAsNumber` reads the lower of the two, since a range has no single\nnumber.",
137608
138036
  "attribute": "range",
137609
138037
  "reflects": true
137610
138038
  },
@@ -137621,6 +138049,17 @@
137621
138049
  "words": true
137622
138050
  }
137623
138051
  },
138052
+ {
138053
+ "kind": "field",
138054
+ "name": "readOnly",
138055
+ "type": {
138056
+ "text": "boolean"
138057
+ },
138058
+ "default": "false",
138059
+ "description": "Whether a reader can see and focus the value and cannot change it. A\nread-only slider still submits its value.\n\nReact Aria's `isReadOnly`. Each thumb stays a tab stop and says\n`aria-readonly`. The arrow keys, the page keys, Home, End, and a drag\nleave the value where it is. A script can still set `value`.",
138060
+ "attribute": "readonly",
138061
+ "reflects": true
138062
+ },
137624
138063
  {
137625
138064
  "kind": "field",
137626
138065
  "name": "showValue",
@@ -137642,6 +138081,19 @@
137642
138081
  "description": "How far one press of an arrow key moves the thumb.",
137643
138082
  "attribute": "step"
137644
138083
  },
138084
+ {
138085
+ "kind": "field",
138086
+ "name": "thumbLabel",
138087
+ "type": {
138088
+ "text": "string"
138089
+ },
138090
+ "default": "'thumb {index}'",
138091
+ "description": "The name of a thumb between a range's first and last, read after the\nslider's label, with `{index}` filled in: its place, counted from 1. The\nfirst is `minimum-label` and the last `maximum-label`.",
138092
+ "attribute": "thumb-label",
138093
+ "helix": {
138094
+ "words": true
138095
+ }
138096
+ },
137645
138097
  {
137646
138098
  "kind": "field",
137647
138099
  "name": "tooltip",
@@ -137719,6 +138171,16 @@
137719
138171
  "description": "The pair, as numbers, in order.\n\nFalls back to the whole range rather than to zero, so a range slider given\nno value opens fully wide instead of pinned shut at its own minimum, which\nis what a filter with nothing filtered out looks like.",
137720
138172
  "readonly": true
137721
138173
  },
138174
+ {
138175
+ "kind": "field",
138176
+ "name": "points",
138177
+ "type": {
138178
+ "text": "number[]"
138179
+ },
138180
+ "privacy": "private",
138181
+ "description": "A range's values, one per thumb, as numbers in order.\n\nA lone number is not a range, so it is not read as one. `willUpdate`\nseeds and sanitizes a range to two values or more, and anything else that\narrives between the two opens fully wide, which is what \"nothing filtered\nout\" looks like.",
138182
+ "readonly": true
138183
+ },
137722
138184
  {
137723
138185
  "kind": "method",
137724
138186
  "name": "along",
@@ -137751,6 +138213,13 @@
137751
138213
  "readonly": true,
137752
138214
  "description": "Relayed, because `change` does not cross a shadow boundary on its own."
137753
138215
  },
138216
+ {
138217
+ "kind": "field",
138218
+ "name": "handleKeydown",
138219
+ "privacy": "private",
138220
+ "readonly": true,
138221
+ "description": "Keeps a read-only thumb still under the keys that move it. Tab and every\nother key pass, so focus moves on."
138222
+ },
137754
138223
  {
137755
138224
  "kind": "method",
137756
138225
  "name": "sync",
@@ -137760,7 +138229,7 @@
137760
138229
  "text": "void"
137761
138230
  }
137762
138231
  },
137763
- "description": "Reports the value."
138232
+ "description": "Reports the value: one entry, or for a named range one entry per thumb.\nThe joined pair is the state the browser restores."
137764
138233
  },
137765
138234
  {
137766
138235
  "kind": "field",
@@ -137917,6 +138386,33 @@
137917
138386
  "description": "What a screen reader says for a thumb's value, with `{value}` filled in,\nsuch as `{value} degrees`. Empty announces the number alone.",
137918
138387
  "attribute": "value-text"
137919
138388
  },
138389
+ {
138390
+ "kind": "field",
138391
+ "name": "thumbContent",
138392
+ "type": {
138393
+ "text": "boolean"
138394
+ },
138395
+ "privacy": "private",
138396
+ "description": "Whether a `thumb` or `thumb-end` slot has content, read off the children\nrather than heard from `slotchange`: a declarative shadow root fires that\nbefore anything listens, so a served slider kept its layer hidden.",
138397
+ "readonly": true
138398
+ },
138399
+ {
138400
+ "kind": "field",
138401
+ "name": "handleThumbSlot",
138402
+ "privacy": "private",
138403
+ "readonly": true
138404
+ },
138405
+ {
138406
+ "kind": "method",
138407
+ "name": "renderThumbs",
138408
+ "privacy": "protected",
138409
+ "return": {
138410
+ "type": {
138411
+ "text": "TemplateResult"
138412
+ }
138413
+ },
138414
+ "description": "A box for each thumb, over the track at the thumb's place, holding the\n`thumb` slot: a range's upper thumb holds `thumb-end`. Hidden from the\naccessibility tree, since each thumb is already a range with a name and a\nvalue, and `hidden` while no slot has content, so an empty layer takes no\nroom in the row."
138415
+ },
137920
138416
  {
137921
138417
  "kind": "method",
137922
138418
  "name": "renderTooltips",
@@ -137926,20 +138422,6 @@
137926
138422
  "text": "TemplateResult | typeof nothing"
137927
138423
  }
137928
138424
  },
137929
- "parameters": [
137930
- {
137931
- "name": "start",
137932
- "type": {
137933
- "text": "number"
137934
- }
137935
- },
137936
- {
137937
- "name": "end",
137938
- "type": {
137939
- "text": "number"
137940
- }
137941
- }
137942
- ],
137943
138425
  "description": "A bubble for each thumb, under `tooltip`, saying its value where it is.\nAfter the thumbs, so a stylesheet can reach a bubble from a focused\nthumb, and hidden from the accessibility tree for the reason the readout\nis: each thumb already reports its value."
137944
138426
  },
137945
138427
  {
@@ -139342,7 +139824,7 @@
139342
139824
  "text": "boolean"
139343
139825
  },
139344
139826
  "default": "false",
139345
- "description": "Adds a second thumb, so the value is a pair.\n\nThe pair is one string, `\"10,50\"`, which is what a form submits and what\n`MixinControllerValue` already holds. `valueAsNumber` reads the lower of\nthe two, since a range has no single number.",
139827
+ "description": "Adds a second thumb, so the value is a pair.\n\nThe pair is one string, `\"10,50\"`, which is what `value` and\n`MixinControllerValue` hold. A form receives two entries under the name,\n`price=10&price=50`, as React Aria's two thumbs send theirs.\n`valueAsNumber` reads the lower of the two, since a range has no single\nnumber.",
139346
139828
  "fieldName": "range"
139347
139829
  },
139348
139830
  {
@@ -139354,6 +139836,15 @@
139354
139836
  "description": "How the readout joins a range's two values, with `{start}` and `{end}`\nfilled in. Write it in the page's language, such as `{start} bis {end}`.",
139355
139837
  "fieldName": "rangeText"
139356
139838
  },
139839
+ {
139840
+ "name": "readonly",
139841
+ "type": {
139842
+ "text": "boolean"
139843
+ },
139844
+ "default": "false",
139845
+ "description": "Whether a reader can see and focus the value and cannot change it. A\nread-only slider still submits its value.\n\nReact Aria's `isReadOnly`. Each thumb stays a tab stop and says\n`aria-readonly`. The arrow keys, the page keys, Home, End, and a drag\nleave the value where it is. A script can still set `value`.",
139846
+ "fieldName": "readOnly"
139847
+ },
139357
139848
  {
139358
139849
  "name": "show-value",
139359
139850
  "type": {
@@ -139372,6 +139863,15 @@
139372
139863
  "description": "How far one press of an arrow key moves the thumb.",
139373
139864
  "fieldName": "step"
139374
139865
  },
139866
+ {
139867
+ "name": "thumb-label",
139868
+ "type": {
139869
+ "text": "string"
139870
+ },
139871
+ "default": "'thumb {index}'",
139872
+ "description": "The name of a thumb between a range's first and last, read after the\nslider's label, with `{index}` filled in: its place, counted from 1. The\nfirst is `minimum-label` and the last `maximum-label`.",
139873
+ "fieldName": "thumbLabel"
139874
+ },
139375
139875
  {
139376
139876
  "name": "tooltip",
139377
139877
  "type": {
@@ -141154,7 +141654,7 @@
141154
141654
  "declarations": [
141155
141655
  {
141156
141656
  "kind": "class",
141157
- "description": "Each item is a command, so it has the `menuitem` role. A megamenu holds\ndestinations, so it is a disclosure of links. A speed dial holds actions,\nwhich is what `role=\"menu\"` is for.\n\nThe name is text rendered beside the icon, and it is the accessible name. A\n`title` on an icon shows only on hover. Visible text is read, searched, and\ntranslated like other text.\n\n`shortcut` gives the action's keyboard shortcut as a chord, such as `mod+s`,\nthe grammar Menu's rows use. The action carries it as `aria-keyshortcuts`\nand draws it after the name in the platform's glyphs or words, `⌘S` on an\nApple keyboard and `Ctrl+S` elsewhere, as Menu draws its rows' shortcuts.\nPut a `Kbd` in the `shortcut` slot to draw it as keys instead; the dial\nimports no `Kbd` of its own. Showing a shortcut does not bind it.",
141657
+ "description": "Each item is a command, so it has the `menuitem` role. A megamenu holds\ndestinations, so it is a disclosure of links. A speed dial holds actions,\nwhich is what `role=\"menu\"` is for.\n\nThe name is text rendered beside the icon, and it is the accessible name. A\n`title` on an icon shows only on hover. Visible text is read, searched, and\ntranslated like other text.\n\n`shortcut` gives the action's keyboard shortcut as a chord, such as `mod+s`,\nthe grammar Menu's rows use. The action carries it as `aria-keyshortcuts`\nand draws it after the name in the platform's glyphs or words, `⌘S` on an\nApple keyboard and `Ctrl+S` elsewhere, as Menu draws its rows' shortcuts.\nPut a `Kbd` in the `shortcut` slot to draw it as keys instead; the dial\nimports no `Kbd` of its own. Showing a shortcut does not bind it.\n\n`href` makes the action a link, as Menu's rows take one: the `item` part is\nthen an `<a>` carrying `menuitem`, so the browser follows it, opens it in a\nnew tab on a middle press, and offers its own menu for it. Choosing it still\nsends `helix-select` and closes the dial. A disabled action draws no link.",
141158
141658
  "name": "HelixHeadlessSpeedDialItem",
141159
141659
  "cssParts": [
141160
141660
  {
@@ -141162,7 +141662,7 @@
141162
141662
  "name": "icon"
141163
141663
  },
141164
141664
  {
141165
- "description": "The control for the action.",
141665
+ "description": "The control for the action, which is an `<a>` where `href` is set.",
141166
141666
  "name": "item"
141167
141667
  },
141168
141668
  {
@@ -141200,6 +141700,36 @@
141200
141700
  "attribute": "disabled",
141201
141701
  "reflects": true
141202
141702
  },
141703
+ {
141704
+ "kind": "field",
141705
+ "name": "download",
141706
+ "type": {
141707
+ "text": "boolean"
141708
+ },
141709
+ "default": "false",
141710
+ "description": "Whether the link downloads the file when the action is chosen. Only\nmeaningful beside an `href`, and only for a file served from the page's\norigin.",
141711
+ "attribute": "download"
141712
+ },
141713
+ {
141714
+ "kind": "field",
141715
+ "name": "href",
141716
+ "type": {
141717
+ "text": "string"
141718
+ },
141719
+ "default": "''",
141720
+ "description": "The URL the action links to. Setting it draws the action as a link.",
141721
+ "attribute": "href"
141722
+ },
141723
+ {
141724
+ "kind": "field",
141725
+ "name": "rel",
141726
+ "type": {
141727
+ "text": "string"
141728
+ },
141729
+ "default": "''",
141730
+ "description": "The link's `rel`. Set it whenever you set `target=\"_blank\"`.",
141731
+ "attribute": "rel"
141732
+ },
141203
141733
  {
141204
141734
  "kind": "field",
141205
141735
  "name": "shortcut",
@@ -141210,6 +141740,16 @@
141210
141740
  "description": "The action's keyboard shortcut as a chord, such as `mod+s`, carried as\n`aria-keyshortcuts` and drawn after the name. `mod` is Command on an Apple\nkeyboard and Control elsewhere. Showing a shortcut does not bind it.",
141211
141741
  "attribute": "shortcut"
141212
141742
  },
141743
+ {
141744
+ "kind": "field",
141745
+ "name": "target",
141746
+ "type": {
141747
+ "text": "string"
141748
+ },
141749
+ "default": "''",
141750
+ "description": "Where the link opens, such as `_blank` for a new tab.",
141751
+ "attribute": "target"
141752
+ },
141213
141753
  {
141214
141754
  "kind": "field",
141215
141755
  "name": "value",
@@ -141318,6 +141858,13 @@
141318
141858
  "privacy": "private",
141319
141859
  "readonly": true
141320
141860
  },
141861
+ {
141862
+ "kind": "field",
141863
+ "name": "handleKeydown",
141864
+ "privacy": "private",
141865
+ "readonly": true,
141866
+ "description": "Space presses a linked action, which an anchor ignores, and the click that\ncomes back both announces and follows the link. Enter is the anchor's own."
141867
+ },
141321
141868
  {
141322
141869
  "kind": "method",
141323
141870
  "name": "renderShortcut",
@@ -141689,6 +142236,33 @@
141689
142236
  "description": "Whether the action is disabled, so it cannot be chosen.",
141690
142237
  "fieldName": "disabled"
141691
142238
  },
142239
+ {
142240
+ "name": "download",
142241
+ "type": {
142242
+ "text": "boolean"
142243
+ },
142244
+ "default": "false",
142245
+ "description": "Whether the link downloads the file when the action is chosen. Only\nmeaningful beside an `href`, and only for a file served from the page's\norigin.",
142246
+ "fieldName": "download"
142247
+ },
142248
+ {
142249
+ "name": "href",
142250
+ "type": {
142251
+ "text": "string"
142252
+ },
142253
+ "default": "''",
142254
+ "description": "The URL the action links to. Setting it draws the action as a link.",
142255
+ "fieldName": "href"
142256
+ },
142257
+ {
142258
+ "name": "rel",
142259
+ "type": {
142260
+ "text": "string"
142261
+ },
142262
+ "default": "''",
142263
+ "description": "The link's `rel`. Set it whenever you set `target=\"_blank\"`.",
142264
+ "fieldName": "rel"
142265
+ },
141692
142266
  {
141693
142267
  "name": "shortcut",
141694
142268
  "type": {
@@ -141698,6 +142272,15 @@
141698
142272
  "description": "The action's keyboard shortcut as a chord, such as `mod+s`, carried as\n`aria-keyshortcuts` and drawn after the name. `mod` is Command on an Apple\nkeyboard and Control elsewhere. Showing a shortcut does not bind it.",
141699
142273
  "fieldName": "shortcut"
141700
142274
  },
142275
+ {
142276
+ "name": "target",
142277
+ "type": {
142278
+ "text": "string"
142279
+ },
142280
+ "default": "''",
142281
+ "description": "Where the link opens, such as `_blank` for a new tab.",
142282
+ "fieldName": "target"
142283
+ },
141701
142284
  {
141702
142285
  "name": "value",
141703
142286
  "type": {
@@ -141922,7 +142505,7 @@
141922
142505
  "declarations": [
141923
142506
  {
141924
142507
  "kind": "class",
141925
- "description": "A speed dial is a menu. Its items are commands, so it uses `role=\"menu\"` and\n`menuitem`, and it is built from the same pieces as `Menu`:\n- `KeyboardNavigationController` for the arrow keys\n- `PopoverController` for the panel\n- `MixinControllerOpen` for open and closed\n\nIt is a separate component because a speed dial has no submenus, headers, or\ncheckable items.\n\nYou slot the trigger. The usual floating action button is `IconButton` with\n`shape=\"circle\"` and `raised`. There is no `helix-fab`, because `IconButton`\nalready has `emphasis`, `tone`, `label`, and a size. Position the button with\n`data-dock` in the base layer.\n\nAll four arrow keys move through the actions, because a speed dial has no\nnested levels to reserve the horizontal pair for. This is the default\nbehavior of the keyboard controller. Typing a letter moves to the next\naction whose name starts with it. The actions are one tab stop, and Tab\ncloses the dial and moves on.\n\n**Keyboard.** On the trigger, Enter, Space or a press opens the dial on its\nfirst action. With the dial open:\n\n| Key | What it does |\n|---|---|\n| Down, Right | Moves to the next action, from the last back to the first. |\n| Up, Left | Moves to the action before, from the first round to the last. |\n| Home, End | Moves to the first or the last action. |\n| A letter | Moves to the next action whose name starts with it. |\n| Enter, Space | Chooses the action, and the dial closes. |\n| Escape | Closes the dial and puts focus back on the trigger. |\n| Tab | Closes the dial and moves on. |\n\n**Groups.** Put actions in `Speed Dial.Group`, named by its `label`, to set\nthem apart as Menu's sections do: each is a `group` of the menu, and the\narrow keys walk through every group's actions in order.\n\n**A trigger with its own action.** With `open-on=\"long-press\"`, a press on\nthe trigger is the trigger's own, such as composing a message, and holding it\nfor half a second opens the dial, as React Aria's menu trigger does with\n`trigger=\"longPress\"`. Alt+Down or Alt+Up opens it from the keyboard, and\nthe trigger says so in its description, `long-press-label`, the drawn one\nand a slotted one alike. A press that has opened the dial does not also do\nthe trigger's action.",
142508
+ "description": "A speed dial is a menu. Its items are commands, so it uses `role=\"menu\"` and\n`menuitem`, and it is built from the same pieces as `Menu`:\n- `KeyboardNavigationController` for the arrow keys\n- `PopoverController` for the panel\n- `MixinControllerOpen` for open and closed\n\nIt is a separate component because a speed dial has no submenus, headers, or\ncheckable items.\n\nYou slot the trigger. The usual floating action button is `IconButton` with\n`shape=\"circle\"` and `raised`. There is no `helix-fab`, because `IconButton`\nalready has `emphasis`, `tone`, `label`, and a size. Position the button with\n`data-dock` in the base layer.\n\nAll four arrow keys move through the actions, because a speed dial has no\nnested levels to reserve the horizontal pair for. This is the default\nbehavior of the keyboard controller. Typing a letter moves to the next\naction whose name starts with it. The actions are one tab stop, and Tab\ncloses the dial and moves on.\n\n**Keyboard.** On the trigger, Enter, Space, Down or a press opens the dial\non its first action, and Up opens it on its last, as an APG menu button\ndoes. With the dial open:\n\n| Key | What it does |\n|---|---|\n| Down, Right | Moves to the next action, from the last back to the first. |\n| Up, Left | Moves to the action before, from the first round to the last. |\n| Home, End | Moves to the first or the last action. |\n| A letter | Moves to the next action whose name starts with it. |\n| Enter, Space | Chooses the action, and the dial closes. |\n| Escape | Closes the dial and puts focus back on the trigger. |\n| Tab | Closes the dial and moves on. |\n\n**Groups.** Put actions in `Speed Dial.Group`, named by its `label`, to set\nthem apart as Menu's sections do: each is a `group` of the menu, and the\narrow keys walk through every group's actions in order.\n\n**A trigger with its own action.** With `open-on=\"long-press\"`, a press on\nthe trigger is the trigger's own, such as composing a message, and holding it\nfor half a second opens the dial, as React Aria's menu trigger does with\n`trigger=\"longPress\"`. Alt+Down or Alt+Up opens it from the keyboard, and\nthe trigger says so in its description, `long-press-label`, the drawn one\nand a slotted one alike. A press that has opened the dial does not also do\nthe trigger's action.\n\n**Open on hover.** With `open-on=\"hover\"`, a mouse resting on the trigger\nopens the dial, as Material's speed dial does, and the dial closes a moment\nafter the mouse leaves both the trigger and the actions. A press, a touch\nand the keyboard open it as under `click`, and a press on the trigger of a\ndial already open moves focus to its first action, so the press a mouse\nmakes after hovering keeps the dial open.",
141926
142509
  "name": "HelixHeadlessSpeedDial",
141927
142510
  "cssParts": [
141928
142511
  {
@@ -141939,6 +142522,10 @@
141939
142522
  "description": "The actions.",
141940
142523
  "name": ""
141941
142524
  },
142525
+ {
142526
+ "description": "Replaces the plus on the button the dial draws when no trigger is slotted, such as with a pencil for a dial of ways to write.",
142527
+ "name": "icon"
142528
+ },
141942
142529
  {
141943
142530
  "description": "The control that opens the actions. Without one, a button named by `label` is drawn.",
141944
142531
  "name": "trigger"
@@ -141995,10 +142582,10 @@
141995
142582
  "kind": "field",
141996
142583
  "name": "openOn",
141997
142584
  "type": {
141998
- "text": "'click' | 'long-press'"
142585
+ "text": "'click' | 'hover' | 'long-press'"
141999
142586
  },
142000
142587
  "default": "'click'",
142001
- "description": "What opens the dial. `click` opens it on a press of the trigger. Under\n`long-press`, a press is the trigger's own action, and the dial opens on a\npress held for half a second, or on Alt+Down or Alt+Up.",
142588
+ "description": "What opens the dial. `click` opens it on a press of the trigger. `hover`\nalso opens it while a mouse rests on the trigger, and closes it once the\nmouse has left. Under `long-press`, a press is the trigger's own action,\nand the dial opens on a press held for half a second, or on Alt+Down or\nAlt+Up.",
142002
142589
  "attribute": "open-on"
142003
142590
  },
142004
142591
  {
@@ -142028,6 +142615,25 @@
142028
142615
  "default": "false",
142029
142616
  "description": "Whether the trigger asked for the open that is under way, which is the one\nopen that moves focus onto the first action.\n\nA dial opened by `default-open` or by a script setting `open` leaves focus\nwhere it is: on load that is wherever `autofocus` put it, and later it is\nwherever the reader is typing."
142030
142617
  },
142618
+ {
142619
+ "kind": "field",
142620
+ "name": "focusLast",
142621
+ "type": {
142622
+ "text": "boolean"
142623
+ },
142624
+ "privacy": "private",
142625
+ "default": "false",
142626
+ "description": "Whether the open under way puts focus on the last action, from Up."
142627
+ },
142628
+ {
142629
+ "kind": "field",
142630
+ "name": "leaving",
142631
+ "type": {
142632
+ "text": "ReturnType<typeof setTimeout> | undefined"
142633
+ },
142634
+ "privacy": "private",
142635
+ "description": "The close a mouse leaving a hover dial has asked for, a moment from now."
142636
+ },
142031
142637
  {
142032
142638
  "kind": "field",
142033
142639
  "name": "panel",
@@ -142072,6 +142678,37 @@
142072
142678
  "privacy": "private",
142073
142679
  "readonly": true
142074
142680
  },
142681
+ {
142682
+ "kind": "field",
142683
+ "name": "handleTriggerPointerOver",
142684
+ "privacy": "private",
142685
+ "readonly": true,
142686
+ "description": "Opens on a mouse coming over the trigger, under `open-on=\"hover\"`."
142687
+ },
142688
+ {
142689
+ "kind": "field",
142690
+ "name": "handlePointerEnter",
142691
+ "privacy": "private",
142692
+ "readonly": true,
142693
+ "description": "Keeps a hover dial open while the mouse is back over it."
142694
+ },
142695
+ {
142696
+ "kind": "field",
142697
+ "name": "handlePointerLeave",
142698
+ "privacy": "private",
142699
+ "readonly": true,
142700
+ "description": "Closes a hover dial a moment after the mouse leaves it, so a mouse\ncrossing the gap between the trigger and the actions keeps it open.\nFocus inside the dial keeps it open too, as a reader is using it."
142701
+ },
142702
+ {
142703
+ "kind": "method",
142704
+ "name": "stay",
142705
+ "privacy": "private",
142706
+ "return": {
142707
+ "type": {
142708
+ "text": "void"
142709
+ }
142710
+ }
142711
+ },
142075
142712
  {
142076
142713
  "kind": "method",
142077
142714
  "name": "focus",
@@ -142745,10 +143382,10 @@
142745
143382
  {
142746
143383
  "name": "open-on",
142747
143384
  "type": {
142748
- "text": "'click' | 'long-press'"
143385
+ "text": "'click' | 'hover' | 'long-press'"
142749
143386
  },
142750
143387
  "default": "'click'",
142751
- "description": "What opens the dial. `click` opens it on a press of the trigger. Under\n`long-press`, a press is the trigger's own action, and the dial opens on a\npress held for half a second, or on Alt+Down or Alt+Up.",
143388
+ "description": "What opens the dial. `click` opens it on a press of the trigger. `hover`\nalso opens it while a mouse rests on the trigger, and closes it once the\nmouse has left. Under `long-press`, a press is the trigger's own action,\nand the dial opens on a press held for half a second, or on Alt+Down or\nAlt+Up.",
142752
143389
  "fieldName": "openOn"
142753
143390
  },
142754
143391
  {
@@ -142879,7 +143516,7 @@
142879
143516
  "declarations": [
142880
143517
  {
142881
143518
  "kind": "class",
142882
- "description": "A splitter has one axis. Nest splitters to get two axes and three-pane or\nfour-pane layouts.\n\nWhen a splitter is slotted into a pane of another at a right angle, a corner\nhandle appears where the dividers cross. It shows the `move` cursor, responds\nto both arrow axes, and a drag moves both dividers at once. The corner is\nadded at `firstUpdated` and is not in the server markup. Before it appears,\nboth dividers work on their own.\n\nThe divider has `role=\"separator\"` and `aria-valuenow`, with\n`aria-valuetext` saying the start pane's share as a percentage in the\nnearest `lang`, or in the reader's locale where no `lang` is set, and `aria-controls` names the start pane. Drag it with a pointer or move it with the arrow keys,\npress `Home` or `End` to move it to its bounds, and press `Enter` to collapse\nthe start pane and open it again. A drag in progress is tracked as a state, so both dividers a\ncorner moves stay lit for as long as they move.\n\nBy default, `min` and `max` let the divider reach either edge, so you can\ndrag a pane fully closed. Set them to limit the range.\n\nA pane can be collapsed, which is a separate state from a divider at the\nedge. `collapsed` names the shut pane, `start` or `end`, and the pane opens\nback to the position where the collapsing gesture began. A drag records that position\non press, and every other way of collapsing records it in `settle`.\n`collapsed-size` keeps a sliver of the pane visible, such as a tab strip.\nCollapsing overrides `min` and `max`.\n\nSet `primary` to the pane that keeps its size when the splitter's own size\nchanges, such as a sidebar beside a window being resized. The other pane\ntakes all of the change, as Web Awesome's split panel does. Without it,\nboth panes keep their share.\n\n**Keyboard.** The divider is one tab stop.\n\n| Key | What it does |\n|---|---|\n| Left, Right | Moves a side-by-side divider by `step`. On a right-to-left page, Left moves it toward the end. |\n| Up, Down | Moves a stacked divider by `step`. |\n| Home, End | Moves the divider to its bounds. |\n| Enter | Collapses the start pane, and opens it again. |\n| F6 | Moves focus from one pane to the first control in the other, and from the divider to the start pane. |",
143519
+ "description": "A splitter has one axis. Nest splitters to get two axes and three-pane or\nfour-pane layouts.\n\nWhen a splitter is slotted into a pane of another at a right angle, a corner\nhandle appears where the dividers cross. It shows the `move` cursor, responds\nto both arrow axes, and a drag moves both dividers at once. The corner is\nadded at `firstUpdated` and is not in the server markup. Before it appears,\nboth dividers work on their own.\n\nThe divider has `role=\"separator\"` and `aria-valuenow`, with\n`aria-valuetext` saying the start pane's share as a percentage in the\nnearest `lang`, or in the reader's locale where no `lang` is set, and `aria-controls` names the start pane. Drag it with a pointer or move it with the arrow keys,\npress `Home` or `End` to move it to its bounds, and press `Enter` to collapse\nthe start pane and open it again. A drag in progress is tracked as a state, so both dividers a\ncorner moves stay lit for as long as they move.\n\nBy default, `min` and `max` let the divider reach either edge, so you can\ndrag a pane fully closed. Set them to limit the range.\n\nA pane can be collapsed, which is a separate state from a divider at the\nedge. `collapsed` names the shut pane, `start` or `end`, and the pane opens\nback to the position where the collapsing gesture began. A drag records that position\non press, and every other way of collapsing records it in `settle`.\n`collapsed-size` keeps a sliver of the pane visible, such as a tab strip.\nCollapsing overrides `min` and `max`.\n\nSet `primary` to the pane that keeps its size when the splitter's own size\nchanges, such as a sidebar beside a window being resized. The other pane\ntakes all of the change, as Web Awesome's split panel does. Without it,\nboth panes keep their share.\n\n**Three or more panes along one axis are splitters nested on that axis**, a\nsplitter in the `end` pane of another for three columns. The nested one\nkeeps the pane on its far side the size it was while the outer divider\nmoves, so a divider resizes only the two panes beside it, as Zag's splitter\ndoes with any number of panels. Where the whole row is resized, every pane\nkeeps its share, unless `primary` says otherwise.\n\n**Keyboard.** The divider is one tab stop.\n\n| Key | What it does |\n|---|---|\n| Left, Right | Moves a side-by-side divider by `step`. On a right-to-left page, Left moves it toward the end. |\n| Up, Down | Moves a stacked divider by `step`. |\n| Home, End | Moves the divider to its bounds. |\n| Enter | Collapses the start pane, and opens it again. |\n| F6 | Moves focus from one pane to the first control in the other, and from the divider to the start pane. |",
142883
143520
  "name": "HelixHeadlessSplitter",
142884
143521
  "cssProperties": [
142885
143522
  {
@@ -143121,6 +143758,47 @@
143121
143758
  "privacy": "private",
143122
143759
  "description": "Watches this element's length along its axis while `primary` is set."
143123
143760
  },
143761
+ {
143762
+ "kind": "field",
143763
+ "name": "chain",
143764
+ "type": {
143765
+ "text": "{ by: HelixHeadlessSplitter; side: 'end' | 'start' } | null"
143766
+ },
143767
+ "privacy": "private",
143768
+ "default": "null",
143769
+ "description": "The splitter this one is nested in on the same axis, and the pane of it\nthis one is in, for a row of three or more panes."
143770
+ },
143771
+ {
143772
+ "kind": "field",
143773
+ "name": "chainLength",
143774
+ "type": {
143775
+ "text": "number"
143776
+ },
143777
+ "privacy": "private",
143778
+ "default": "0",
143779
+ "description": "The length of the splitter this one is chained to, last seen."
143780
+ },
143781
+ {
143782
+ "kind": "field",
143783
+ "name": "held",
143784
+ "type": {
143785
+ "text": "'end' | 'start' | undefined"
143786
+ },
143787
+ "privacy": "private",
143788
+ "description": "The pane that keeps its pixels as this splitter's length changes:\n`primary`, or the far pane of one chained into another, whose divider\nwould otherwise drag this one's along with it.",
143789
+ "readonly": true
143790
+ },
143791
+ {
143792
+ "kind": "method",
143793
+ "name": "measureChain",
143794
+ "privacy": "private",
143795
+ "return": {
143796
+ "type": {
143797
+ "text": "number"
143798
+ }
143799
+ },
143800
+ "description": "The chained splitter's length along the shared axis, in pixels."
143801
+ },
143124
143802
  {
143125
143803
  "kind": "field",
143126
143804
  "name": "length",
@@ -145358,9 +146036,13 @@
145358
146036
  "type": {
145359
146037
  "text": "number"
145360
146038
  }
146039
+ },
146040
+ {
146041
+ "name": "passing",
146042
+ "default": "false"
145361
146043
  }
145362
146044
  ],
145363
- "description": "Whether a reader on step `from` may go to step `to`, in a linear sequence.\n\nBack is always allowed, as Ark UI's linear steps allow it. Forward is allowed\nonly where every stage from the one the reader is on up to the target is\ncomplete or optional, so no stage is passed unfinished."
146045
+ "description": "Whether a reader on step `from` may go to step `to`, in a linear sequence.\n\nBack is always allowed, as Ark UI's linear steps allow it. Forward is allowed\nonly where every stage from the one the reader is on up to the target is\ncomplete or optional, so no stage is passed unfinished.\n\n`passing` is a sequence whose stages are complete once a reader moves past\nthem, so the stage the reader is on counts as finished and the next one is\nin reach."
145364
146046
  },
145365
146047
  {
145366
146048
  "kind": "function",
@@ -145406,7 +146088,7 @@
145406
146088
  "declarations": [
145407
146089
  {
145408
146090
  "kind": "class",
145409
- "description": "`active` sets where the user is, and `complete` stays on each step. Returning\nto stage one of three leaves stages one and two finished, so the root sets\n`current` on the steps and never changes `complete`.\n\n`active` is optional. Without it, each step keeps its own `current`, so the\nsequence is correct in the server's markup, where the root cannot count its\nslotted children.\n\n`linear` keeps a reader from passing a stage they have not finished, as Ark\nUI's linear steps do: a stage ahead is out of reach, and its button disabled,\nuntil every stage before it is `complete` or `optional`. Going back is always\nallowed. `next()` and `previous()` move one stage either way, under the\nsame rules, for your own buttons.\n\nTo check a stage before a reader moves on from it, set `validate` to a\nfunction that answers whether the stage is valid, as Ark UI's `isStepValid`\ndoes. Moving forward asks it about the stage the reader is on, and where it\nanswers `false` the reader stays and the stage is `:state(invalid)` until it\nanswers `true`. An `optional` stage is not asked. `helix-before-activate`\nis still sent for every move, for a check of your own.\n\n`progress` is how far through the sequence is, from 0 to 100: the share of\nits stages that are `complete`. The `progress` part carries it as a\n`progressbar` and as `--steps-progress`, and is hidden until a stylesheet\ngives it a `display`, so a bar of your own costs nothing until you draw it.\nA screen reader hears it as `progress-label` says, \"33% complete\" unless\nset, as Ark UI's steps write it. The sequence is `:state(complete)` once\nevery stage is.\n\nThe sequence is a list named by `label`, and each step a list item. The\ncurrent stage's button says `aria-current=\"step\"`, and a finished stage's\nbutton is described by its `complete-label`.",
146091
+ "description": "`active` sets where the user is, and `complete` stays on each step. Returning\nto stage one of three leaves stages one and two finished, so the root sets\n`current` on the steps and never changes `complete`.\n\n`active` is optional. Without it, each step keeps its own `current`, so the\nsequence is correct in the server's markup, where the root cannot count its\nslotted children.\n\n`linear` keeps a reader from passing a stage they have not finished, as Ark\nUI's linear steps do: a stage ahead is out of reach, and its button disabled,\nuntil every stage before it is `complete` or `optional`. Going back is always\nallowed. `next()` and `previous()` move one stage either way, under the\nsame rules, for your own buttons. `reset()` goes back to the first stage and\nclears every stage's `complete`, as Ark UI's `resetStep` does.\n\n`completion=\"passed\"` marks a stage `complete` once a reader moves past it,\nas Ark UI counts a stage before the current one as completed. Going back\nleaves it complete. In a `linear` sequence the next stage is then in reach\nfrom the current one, and `validate` decides whether the reader may go.\n\nTo check a stage before a reader moves on from it, set `validate` to a\nfunction that answers whether the stage is valid, as Ark UI's `isStepValid`\ndoes. Moving forward asks it about the stage the reader is on, and where it\nanswers `false` the reader stays and the stage is `:state(invalid)` until it\nanswers `true`. An `optional` stage is not asked. `helix-before-activate`\nis still sent for every move, for a check of your own.\n\n`progress` is how far through the sequence is, from 0 to 100: the share of\nits stages that are `complete`. The `progress` part carries it as a\n`progressbar` and as `--steps-progress`, and is hidden until a stylesheet\ngives it a `display`, so a bar of your own costs nothing until you draw it.\nA screen reader hears it as `progress-label` says, \"33% complete\" unless\nset, as Ark UI's steps write it. The sequence is `:state(complete)` once\nevery stage is.\n\nThe sequence is a list named by `label`, and each step a list item. The\ncurrent stage's button says `aria-current=\"step\"`, and a finished stage's\nbutton is described by its `complete-label`.\n\n**Keyboard.** Each stage's name is a button and its own tab stop, and Enter\nor Space goes to the stage. Set `arrows` and the arrow keys move focus\nbetween the names as well, as Ark UI's steps do: Left and Right along a row,\nUp and Down a column, Home and End to the first and the last. The arrows\npass over a disabled stage and one a linear sequence holds out of reach,\nand they move focus without going to the stage.",
145410
146092
  "name": "HelixHeadlessSteps",
145411
146093
  "cssProperties": [
145412
146094
  {
@@ -145437,6 +146119,26 @@
145437
146119
  "default": "'helix-steps'",
145438
146120
  "description": "The key this family's words are registered under, its styled tag:\n`registerWords('de', { 'helix-steps': { progressLabel: '{share, number, percent} erledigt' } })`."
145439
146121
  },
146122
+ {
146123
+ "kind": "field",
146124
+ "name": "arrows",
146125
+ "type": {
146126
+ "text": "boolean"
146127
+ },
146128
+ "default": "false",
146129
+ "description": "Whether the arrow keys move focus between the stages' names, along the\nway the steps run. Off by default, so the arrows keep scrolling the page.",
146130
+ "attribute": "arrows"
146131
+ },
146132
+ {
146133
+ "kind": "field",
146134
+ "name": "completion",
146135
+ "type": {
146136
+ "text": "'passed' | undefined"
146137
+ },
146138
+ "description": "What marks a stage `complete`.\n\nAbsent, you do: each step's `complete` is yours, because a reader who\nsteps back has finished more stages than the one they are on. `passed`\nmarks every stage before the one a reader moves to, and leaves the marks\nwhen they go back.",
146139
+ "attribute": "completion",
146140
+ "reflects": true
146141
+ },
145440
146142
  {
145441
146143
  "kind": "field",
145442
146144
  "name": "label",
@@ -145511,6 +146213,13 @@
145511
146213
  "attribute": "variant",
145512
146214
  "reflects": true
145513
146215
  },
146216
+ {
146217
+ "kind": "field",
146218
+ "name": "keys",
146219
+ "privacy": "protected",
146220
+ "readonly": true,
146221
+ "default": "new KeyboardNavigationController(this, { items: () => (this.arrows ? this.steps.map(navigable) : []), origin: 'focus', reserved: () => this.orientation === 'vertical' ? ['ArrowLeft', 'ArrowRight'] : ['ArrowDown', 'ArrowUp'], selects: () => false, wrap: false, })"
146222
+ },
145514
146223
  {
145515
146224
  "kind": "field",
145516
146225
  "name": "steps",
@@ -145557,6 +146266,19 @@
145557
146266
  "text": "previous() => boolean"
145558
146267
  }
145559
146268
  },
146269
+ {
146270
+ "kind": "method",
146271
+ "name": "reset",
146272
+ "return": {
146273
+ "type": {
146274
+ "text": "boolean"
146275
+ }
146276
+ },
146277
+ "description": "Goes back to the first stage that can be gone to, and clears `complete`\nand the invalid mark from every stage, as Ark UI's `resetStep` does.\nReturns whether it moved: a listener can refuse the move with\n`helix-before-activate`, and the stages then keep their marks.",
146278
+ "type": {
146279
+ "text": "reset() => boolean"
146280
+ }
146281
+ },
145560
146282
  {
145561
146283
  "kind": "method",
145562
146284
  "name": "step",
@@ -146152,6 +146874,23 @@
146152
146874
  }
146153
146875
  ],
146154
146876
  "attributes": [
146877
+ {
146878
+ "name": "arrows",
146879
+ "type": {
146880
+ "text": "boolean"
146881
+ },
146882
+ "default": "false",
146883
+ "description": "Whether the arrow keys move focus between the stages' names, along the\nway the steps run. Off by default, so the arrows keep scrolling the page.",
146884
+ "fieldName": "arrows"
146885
+ },
146886
+ {
146887
+ "name": "completion",
146888
+ "type": {
146889
+ "text": "'passed' | undefined"
146890
+ },
146891
+ "description": "What marks a stage `complete`.\n\nAbsent, you do: each step's `complete` is yours, because a reader who\nsteps back has finished more stages than the one they are on. `passed`\nmarks every stage before the one a reader moves to, and leaves the marks\nwhen they go back.",
146892
+ "fieldName": "completion"
146893
+ },
146155
146894
  {
146156
146895
  "name": "label",
146157
146896
  "type": {
@@ -146467,6 +147206,28 @@
146467
147206
  "default": "new StatusController(this)",
146468
147207
  "description": "Says a stage was finished, from the first time one is."
146469
147208
  },
147209
+ {
147210
+ "kind": "method",
147211
+ "name": "focus",
147212
+ "return": {
147213
+ "type": {
147214
+ "text": "void"
147215
+ }
147216
+ },
147217
+ "parameters": [
147218
+ {
147219
+ "name": "options",
147220
+ "optional": true,
147221
+ "type": {
147222
+ "text": "FocusOptions"
147223
+ }
147224
+ }
147225
+ ],
147226
+ "description": "Puts focus on the step's name, the control a reader presses, as a\n`focus()` on a native control would.",
147227
+ "type": {
147228
+ "text": "focus(options?: FocusOptions) => void"
147229
+ }
147230
+ },
146470
147231
  {
146471
147232
  "kind": "method",
146472
147233
  "name": "select",
@@ -146922,6 +147683,10 @@
146922
147683
  "description": "The sequence's `validate` last answered that this stage is not valid.",
146923
147684
  "name": "invalid"
146924
147685
  },
147686
+ {
147687
+ "description": "A `linear` sequence holds this stage out of reach until the stages before it are finished.",
147688
+ "name": "locked"
147689
+ },
146925
147690
  {
146926
147691
  "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
146927
147692
  "name": "settled",
@@ -153551,7 +154316,7 @@
153551
154316
  "declarations": [
153552
154317
  {
153553
154318
  "kind": "class",
153554
- "description": "Selection works through an event, the same as in the accordion and the tree.\nA tab dispatches `helix-select`, and the root pairs it with the panel of the\nsame value. Nothing registers with anything, so tabs added later work with no\nextra setup.\n\nThe tab list is a single tab stop, and the arrow keys move between tabs\nthrough `KeyboardNavigationController`, the same as in the radio and toggle\ngroups. Selection follows focus, which suits a small set where showing a\npanel is cheap. Set `manual` when showing a panel is expensive, so focus can\nmove without selecting.\n\n`orientation=\"vertical\"` sets the tabs in a column beside the panels, and the\ntab list says `aria-orientation=\"vertical\"`. The arrow keys of both axes move\nbetween tabs either way.\n\nA tab with an `href` is a link, for tabs that are pages of a site. Pressing\nit follows the link. Where any tab is a link, the arrow keys move focus\nwithout choosing on every tab of the list, as under `manual`, so arrowing\npast a tab never leaves the page and the list answers the keys one way.\nMark the tab of the page you are on with `selected`, or set `active` to its\nvalue.\n\nEach tab says which panel it controls through `aria-controls`, set as an\nelement reference to the panel's host, where the engine has reflection.\n\nKeys, on the tab list: Left and Right Arrow move between tabs, and so do Up\nand Down; Home and End go to the first and the last. The horizontal arrows\nfollow the reading direction, so on a right-to-left page Left moves on.\nDisabled tabs are passed over. Tab leaves the list for the selected panel,\nwhich is a tab stop only while it holds nothing focusable.\n\n**Keyboard.**\n\n| Key | What it does |\n|---|---|\n| Right, Down | Moves to the next tab, from the last round to the first. Selects it, unless `manual` is set or a tab is a link. |\n| Left, Up | Moves to the tab before, from the first round to the last. |\n| Home, End | Moves to the first or the last tab. |\n| Enter, Space | Selects the tab with focus, or follows its link. |\n| Tab | Leaves the list for the selected panel. |\n\nRemoving the selected tab selects the first enabled tab that is left, and\n`active` says so, with `helix-activate`. Where the removed tab had focus,\nfocus moves to the tab now selected.\n\nThe `indicator` part moves to the selected tab and carries its place and\nsize, so a mark of your own can be drawn there: style the part, or slot an\nelement into `indicator`, which sits inside the part and reads the same\nproperties.",
154319
+ "description": "Selection works through an event, the same as in the accordion and the tree.\nA tab dispatches `helix-select`, and the root pairs it with the panel of the\nsame value. Nothing registers with anything, so tabs added later work with no\nextra setup.\n\nThe tab list is a single tab stop, and the arrow keys move between tabs\nthrough `KeyboardNavigationController`, the same as in the radio and toggle\ngroups. Selection follows focus, which suits a small set where showing a\npanel is cheap. Set `manual` when showing a panel is expensive, so focus can\nmove without selecting.\n\n`orientation=\"vertical\"` sets the tabs in a column beside the panels, and the\ntab list says `aria-orientation=\"vertical\"`. The arrow keys of both axes move\nbetween tabs either way.\n\nA tab with an `href` is a link, for tabs that are pages of a site. Pressing\nit follows the link. Where any tab is a link, the arrow keys move focus\nwithout choosing on every tab of the list, as under `manual`, so arrowing\npast a tab never leaves the page and the list answers the keys one way.\nMark the tab of the page you are on with `selected`, or set `active` to its\nvalue.\n\nEach tab says which panel it controls through `aria-controls`, set as an\nelement reference to the panel's host, where the engine has reflection.\n\nKeys, on the tab list: Left and Right Arrow move between tabs, and so do Up\nand Down; Home and End go to the first and the last. The horizontal arrows\nfollow the reading direction, so on a right-to-left page Left moves on.\nDisabled tabs are passed over. Tab leaves the list for the selected panel,\nwhich is a tab stop only while it holds nothing focusable.\n\n**Keyboard.**\n\n| Key | What it does |\n|---|---|\n| Right, Down | Moves to the next tab, from the last round to the first. Selects it, unless `manual` is set or a tab is a link. |\n| Left, Up | Moves to the tab before, from the first round to the last. |\n| Home, End | Moves to the first or the last tab. |\n| Enter, Space | Selects the tab with focus, or follows its link. |\n| Tab | Leaves the list for the selected panel. |\n\nRemoving the selected tab selects the first enabled tab that is left, and\n`active` says so, with `helix-activate`. Where the removed tab had focus,\nfocus moves to the tab now selected.\n\n**More tabs than fit.** With `scroll-controls`, a strip that scrolls shows a\nbutton at each end it can scroll toward, as Web Awesome's tab group does,\nand a press scrolls it most of its own length. The buttons are for the\npointer, so they are out of the tab order and hidden from screen readers;\nthe arrow keys already reach every tab, and the strip scrolls the selected\ntab into view. A strip scrolls once a stylesheet gives the `tabs` part an\n`overflow`, as the styled tier does.\n\nA tab with `dismissible` can be closed: see `Tabs.Tab`.\n\nThe `indicator` part moves to the selected tab and carries its place and\nsize, so a mark of your own can be drawn there: style the part, or slot an\nelement into `indicator`, which sits inside the part and reads the same\nproperties.",
153555
154320
  "name": "HelixHeadlessTabs",
153556
154321
  "cssParts": [
153557
154322
  {
@@ -153562,6 +154327,14 @@
153562
154327
  "description": "The panel container.",
153563
154328
  "name": "panels"
153564
154329
  },
154330
+ {
154331
+ "description": "The button that scrolls the strip toward its end, shown under `scroll-controls` while there is more that way.",
154332
+ "name": "scroll-end"
154333
+ },
154334
+ {
154335
+ "description": "The button that scrolls the strip toward its start, shown under `scroll-controls` while there is more that way.",
154336
+ "name": "scroll-start"
154337
+ },
153565
154338
  {
153566
154339
  "description": "The tab list.",
153567
154340
  "name": "tabs"
@@ -153648,6 +154421,17 @@
153648
154421
  "attribute": "orientation",
153649
154422
  "reflects": true
153650
154423
  },
154424
+ {
154425
+ "kind": "field",
154426
+ "name": "scrollControls",
154427
+ "type": {
154428
+ "text": "boolean"
154429
+ },
154430
+ "default": "false",
154431
+ "description": "Whether a strip with more tabs than fit shows a button at each end it can\nscroll toward.",
154432
+ "attribute": "scroll-controls",
154433
+ "reflects": true
154434
+ },
153651
154435
  {
153652
154436
  "kind": "field",
153653
154437
  "name": "variant",
@@ -153692,6 +154476,51 @@
153692
154476
  "privacy": "private",
153693
154477
  "readonly": true
153694
154478
  },
154479
+ {
154480
+ "kind": "field",
154481
+ "name": "more",
154482
+ "type": {
154483
+ "text": "{ end: boolean; start: boolean }"
154484
+ },
154485
+ "privacy": "private",
154486
+ "default": "{ end: false, start: false }",
154487
+ "description": "Which ends the strip can scroll toward, under `scroll-controls`."
154488
+ },
154489
+ {
154490
+ "kind": "field",
154491
+ "name": "resizing",
154492
+ "type": {
154493
+ "text": "ResizeObserver | undefined"
154494
+ },
154495
+ "privacy": "private",
154496
+ "description": "Watches the strip's size for `scroll-controls`."
154497
+ },
154498
+ {
154499
+ "kind": "field",
154500
+ "name": "measure",
154501
+ "privacy": "private",
154502
+ "readonly": true,
154503
+ "description": "Reads which ends of the strip have more tabs past them."
154504
+ },
154505
+ {
154506
+ "kind": "method",
154507
+ "name": "scrollStrip",
154508
+ "privacy": "private",
154509
+ "return": {
154510
+ "type": {
154511
+ "text": "void"
154512
+ }
154513
+ },
154514
+ "parameters": [
154515
+ {
154516
+ "name": "toward",
154517
+ "type": {
154518
+ "text": "1 | -1"
154519
+ }
154520
+ }
154521
+ ],
154522
+ "description": "Scrolls the strip most of its own length toward one end, smoothly unless\nthe reader asked for less motion."
154523
+ },
153695
154524
  {
153696
154525
  "kind": "field",
153697
154526
  "name": "held",
@@ -153739,6 +154568,28 @@
153739
154568
  },
153740
154569
  "description": "Puts focus on the selected tab where the tab that had it was removed and\nfocus fell to the page, which is where removing a focused element leaves\nit."
153741
154570
  },
154571
+ {
154572
+ "kind": "method",
154573
+ "name": "watchStrip",
154574
+ "privacy": "private",
154575
+ "return": {
154576
+ "type": {
154577
+ "text": "void"
154578
+ }
154579
+ },
154580
+ "description": "Watches the strip's size while `scroll-controls` asks, and reads it."
154581
+ },
154582
+ {
154583
+ "kind": "method",
154584
+ "name": "reveal",
154585
+ "privacy": "private",
154586
+ "return": {
154587
+ "type": {
154588
+ "text": "void"
154589
+ }
154590
+ },
154591
+ "description": "Brings the selected tab into the strip's view, and moves nothing else."
154592
+ },
153742
154593
  {
153743
154594
  "kind": "field",
153744
154595
  "name": "handleSlotChange",
@@ -153746,6 +154597,25 @@
153746
154597
  "readonly": true,
153747
154598
  "description": "The set changed: pair it up and measure it.\n\nBoth, and dropping `place()` leaves an indicator unplaced for the life\nof the page. The order of events is what does it: the host renders and\nmeasures before its tabs have upgraded, so there is no selected tab to\nmeasure and `place` refuses; the ResizeObserver's one initial callback\nlands in that same gap; and then the tabs upgrade, `slotchange` pairs them,\nnothing measures, and nothing ever will again, because the host's size\nnever changes.\n\nInvisible in every example, because a tab strip that is only tabs is\nexactly as tall as its tabs, so a mark at the top of the strip is a mark on\nthe tab. It shows only where something gives the strip a height of its own."
153748
154599
  },
154600
+ {
154601
+ "kind": "method",
154602
+ "name": "renderScroll",
154603
+ "privacy": "private",
154604
+ "return": {
154605
+ "type": {
154606
+ "text": "TemplateResult | typeof nothing"
154607
+ }
154608
+ },
154609
+ "parameters": [
154610
+ {
154611
+ "name": "toward",
154612
+ "type": {
154613
+ "text": "1 | -1"
154614
+ }
154615
+ }
154616
+ ],
154617
+ "description": "One of the two scroll buttons, pointing the way it scrolls. A caret along\nthe line is mirrored on a right-to-left page, and one down a column is not."
154618
+ },
153749
154619
  {
153750
154620
  "kind": "field",
153751
154621
  "name": "active",
@@ -154257,6 +155127,15 @@
154257
155127
  "description": "The direction the tabs run. `vertical` sets them in a column beside the\npanels and tells a screen reader the list is vertical.\n\nOptional, so the resting row writes no attribute onto the host.",
154258
155128
  "fieldName": "orientation"
154259
155129
  },
155130
+ {
155131
+ "name": "scroll-controls",
155132
+ "type": {
155133
+ "text": "boolean"
155134
+ },
155135
+ "default": "false",
155136
+ "description": "Whether a strip with more tabs than fit shows a button at each end it can\nscroll toward.",
155137
+ "fieldName": "scrollControls"
155138
+ },
154260
155139
  {
154261
155140
  "name": "variant",
154262
155141
  "type": {
@@ -154363,9 +155242,13 @@
154363
155242
  "declarations": [
154364
155243
  {
154365
155244
  "kind": "class",
154366
- "description": "A tab is an element, because it manages selection and its own tab stop.\n\nWith an `href`, the tab is a link: `role=\"tab\"` on an `<a>`, which a press,\nEnter and the browser's own link gestures follow. `helix-select` is sent\nfirst, and canceling it keeps the browser from following, so a client-side\nrouter follows it instead.",
155245
+ "description": "A tab is an element, because it manages selection and its own tab stop.\n\nWith an `href`, the tab is a link: `role=\"tab\"` on an `<a>`, which a press,\nEnter and the browser's own link gestures follow. `helix-select` is sent\nfirst, and canceling it keeps the browser from following, so a client-side\nrouter follows it instead.\n\nWith `dismissible`, the tab can be closed, as Web Awesome's closable tab\ncan: a press on its `dismiss` mark, or Delete or Backspace while the tab\nhas focus, sends `helix-dismiss`. The tab does not remove itself, because\nyour code owns the set, so remove the tab and its panel in your handler.\nFocus moves to the tab beside it, and the tab set selects a tab that is\nleft.\nThe tab says the key through `aria-keyshortcuts`, and the mark is for the\npointer, hidden from screen readers.",
154367
155246
  "name": "HelixHeadlessTab",
154368
155247
  "cssParts": [
155248
+ {
155249
+ "description": "The mark a pointer presses to close a `dismissible` tab.",
155250
+ "name": "dismiss"
155251
+ },
154369
155252
  {
154370
155253
  "description": "The tab itself.",
154371
155254
  "name": "tab"
@@ -154378,6 +155261,20 @@
154378
155261
  }
154379
155262
  ],
154380
155263
  "members": [
155264
+ {
155265
+ "kind": "field",
155266
+ "name": "words",
155267
+ "type": {
155268
+ "text": "string"
155269
+ },
155270
+ "static": true,
155271
+ "default": "'helix-tab'",
155272
+ "description": "The key this family's words are registered under, its styled tag:\n`registerWords('de', { 'helix-tab': { dismissLabel: 'Schließen' } })`.",
155273
+ "inheritedFrom": {
155274
+ "name": "MixinDismissible",
155275
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155276
+ }
155277
+ },
154381
155278
  {
154382
155279
  "kind": "field",
154383
155280
  "name": "itemPart",
@@ -154392,6 +155289,23 @@
154392
155289
  "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
154393
155290
  }
154394
155291
  },
155292
+ {
155293
+ "kind": "field",
155294
+ "name": "dismissLabel",
155295
+ "type": {
155296
+ "text": "string"
155297
+ },
155298
+ "default": "'Close'",
155299
+ "description": "The tooltip on the mark that closes a `dismissible` tab. The mark is for\nthe pointer and hidden from screen readers, which hear the Delete key\nthrough `aria-keyshortcuts`.",
155300
+ "attribute": "dismiss-label",
155301
+ "helix": {
155302
+ "words": true
155303
+ },
155304
+ "inheritedFrom": {
155305
+ "name": "MixinDismissible",
155306
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155307
+ }
155308
+ },
154395
155309
  {
154396
155310
  "kind": "field",
154397
155311
  "name": "href",
@@ -154441,6 +155355,61 @@
154441
155355
  "text": "focus(options?: FocusOptions) => void"
154442
155356
  }
154443
155357
  },
155358
+ {
155359
+ "kind": "method",
155360
+ "name": "dismiss",
155361
+ "return": {
155362
+ "type": {
155363
+ "text": "boolean"
155364
+ }
155365
+ },
155366
+ "description": "Sends `helix-dismiss` for a `dismissible` tab, and returns `false` where a\nlistener refused it, or where the tab is not dismissible or is disabled.\nThe tab stays where it is either way: removing it is yours. Where the tab\nhad focus, focus moves to the tab beside it once you remove it.",
155367
+ "inheritedFrom": {
155368
+ "name": "MixinDismissible",
155369
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155370
+ },
155371
+ "type": {
155372
+ "text": "dismiss() => boolean"
155373
+ }
155374
+ },
155375
+ {
155376
+ "kind": "field",
155377
+ "name": "returnFocusTo",
155378
+ "type": {
155379
+ "text": "HTMLElement | null"
155380
+ },
155381
+ "privacy": "protected",
155382
+ "description": "Where focus goes when a tab beside this one that held it is removed: this tab.",
155383
+ "readonly": true,
155384
+ "inheritedFrom": {
155385
+ "name": "MixinDismissible",
155386
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155387
+ }
155388
+ },
155389
+ {
155390
+ "kind": "field",
155391
+ "name": "handleDismissPress",
155392
+ "privacy": "private",
155393
+ "readonly": true,
155394
+ "description": "A press on the mark closes the tab, and neither selects it nor follows its link."
155395
+ },
155396
+ {
155397
+ "kind": "field",
155398
+ "name": "handleKeydown",
155399
+ "privacy": "private",
155400
+ "readonly": true
155401
+ },
155402
+ {
155403
+ "kind": "method",
155404
+ "name": "renderDismiss",
155405
+ "privacy": "protected",
155406
+ "return": {
155407
+ "type": {
155408
+ "text": "TemplateResult | typeof nothing"
155409
+ }
155410
+ },
155411
+ "description": "The mark that closes a `dismissible` tab, inside the control so it shares its box."
155412
+ },
154444
155413
  {
154445
155414
  "kind": "field",
154446
155415
  "name": "handleLinkClick",
@@ -154448,6 +155417,124 @@
154448
155417
  "readonly": true,
154449
155418
  "description": "Chooses the tab before the browser follows its link, and keeps the browser\nfrom following where the choice was refused. A press with a modifier, or\nwith a button other than the main one, opens the link where the browser\nopens it and chooses nothing here."
154450
155419
  },
155420
+ {
155421
+ "kind": "field",
155422
+ "name": "dismissible",
155423
+ "type": {
155424
+ "text": "boolean"
155425
+ },
155426
+ "default": "false",
155427
+ "description": "Whether the element shows a control that dismisses it.",
155428
+ "attribute": "dismissible",
155429
+ "reflects": true,
155430
+ "inheritedFrom": {
155431
+ "name": "MixinDismissible",
155432
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155433
+ }
155434
+ },
155435
+ {
155436
+ "kind": "method",
155437
+ "name": "dismissEvent",
155438
+ "privacy": "protected",
155439
+ "return": {
155440
+ "type": {
155441
+ "text": "HelixDismissEvent"
155442
+ }
155443
+ },
155444
+ "description": "The event, built and not dispatched.\n\nReading text is safe here: nothing calls this on a server, because the\nonly things that do are a press and a timer.",
155445
+ "inheritedFrom": {
155446
+ "name": "MixinDismissible",
155447
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155448
+ }
155449
+ },
155450
+ {
155451
+ "kind": "method",
155452
+ "name": "stopBeside",
155453
+ "privacy": "private",
155454
+ "return": {
155455
+ "type": {
155456
+ "text": "HTMLElement | undefined"
155457
+ }
155458
+ },
155459
+ "description": "The tab stop after this element on the page, or the one before it at the\nend, for a lone element whose removal would drop focus to the body.\n\n**A lone Callout or Announcement had nowhere to hand focus**, so a\nkeyboard reader who dismissed one started again from the top of the\npage. React Aria's Toast hands focus on the same way. Read before the\nevent, in the order Tab reaches the stops, while this element's own are\nstill among them.",
155460
+ "inheritedFrom": {
155461
+ "name": "MixinDismissible",
155462
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155463
+ }
155464
+ },
155465
+ {
155466
+ "kind": "method",
155467
+ "name": "neighbors",
155468
+ "privacy": "private",
155469
+ "return": {
155470
+ "type": {
155471
+ "text": "HTMLElement[]"
155472
+ }
155473
+ },
155474
+ "description": "The elements of the same kind beside this one, where focus goes if this\none is removed: the next ones nearest first, then the previous ones\nnearest first.\n\nRead before the event, while this element is still beside them.",
155475
+ "inheritedFrom": {
155476
+ "name": "MixinDismissible",
155477
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155478
+ }
155479
+ },
155480
+ {
155481
+ "kind": "method",
155482
+ "name": "keepFocus",
155483
+ "privacy": "private",
155484
+ "return": {
155485
+ "type": {
155486
+ "text": "void"
155487
+ }
155488
+ },
155489
+ "parameters": [
155490
+ {
155491
+ "name": "neighbors",
155492
+ "type": {
155493
+ "text": "HTMLElement[]"
155494
+ }
155495
+ },
155496
+ {
155497
+ "name": "beside",
155498
+ "optional": true,
155499
+ "type": {
155500
+ "text": "HTMLElement"
155501
+ }
155502
+ }
155503
+ ],
155504
+ "description": "Moves focus to a neighbor's dismiss control if removing this element\ndropped it, or, with no neighbor, to the tab stop beside where it was.\n\n**The tab stop beside waits a frame.** A container that owns its\nmembers' focus settles it in a microtask after the event: a Tag Group\nwhose last tag goes focuses its `empty` part. Handed on at once, focus\nleft the group before the group could look, and its reader never heard\nthat the set was empty. A neighbor of the same kind is still taken at\nonce, because no container puts focus anywhere better.",
155505
+ "inheritedFrom": {
155506
+ "name": "MixinDismissible",
155507
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155508
+ }
155509
+ },
155510
+ {
155511
+ "kind": "field",
155512
+ "name": "handOff",
155513
+ "type": {
155514
+ "text": "((late: boolean) => void) | undefined"
155515
+ },
155516
+ "privacy": "private",
155517
+ "default": "undefined",
155518
+ "description": "The hand-off waiting for this element to leave, if one is.",
155519
+ "inheritedFrom": {
155520
+ "name": "MixinDismissible",
155521
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155522
+ }
155523
+ },
155524
+ {
155525
+ "kind": "field",
155526
+ "name": "forgetFocus",
155527
+ "type": {
155528
+ "text": "(() => void) | undefined"
155529
+ },
155530
+ "privacy": "private",
155531
+ "default": "undefined",
155532
+ "description": "Stops waiting for the hand-off, once focus has moved anywhere.",
155533
+ "inheritedFrom": {
155534
+ "name": "MixinDismissible",
155535
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155536
+ }
155537
+ },
154451
155538
  {
154452
155539
  "kind": "field",
154453
155540
  "name": "disabled",
@@ -154866,6 +155953,14 @@
154866
155953
  }
154867
155954
  ],
154868
155955
  "events": [
155956
+ {
155957
+ "type": {
155958
+ "text": "HelixDismissEvent"
155959
+ },
155960
+ "description": "A `dismissible` tab was asked to close. The tab does not remove itself, so remove it and its panel in response. Cancelable.",
155961
+ "name": "helix-dismiss",
155962
+ "reactProp": "onhelix-dismiss"
155963
+ },
154869
155964
  {
154870
155965
  "type": {
154871
155966
  "text": "HelixSelectEvent"
@@ -154876,6 +155971,19 @@
154876
155971
  }
154877
155972
  ],
154878
155973
  "attributes": [
155974
+ {
155975
+ "name": "dismiss-label",
155976
+ "type": {
155977
+ "text": "string"
155978
+ },
155979
+ "default": "'Close'",
155980
+ "description": "The tooltip on the mark that closes a `dismissible` tab. The mark is for\nthe pointer and hidden from screen readers, which hear the Delete key\nthrough `aria-keyshortcuts`.",
155981
+ "fieldName": "dismissLabel",
155982
+ "inheritedFrom": {
155983
+ "name": "MixinDismissible",
155984
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
155985
+ }
155986
+ },
154879
155987
  {
154880
155988
  "name": "href",
154881
155989
  "type": {
@@ -154900,6 +156008,19 @@
154900
156008
  "description": "Where the link opens, such as `_blank`, for a tab with an `href`.",
154901
156009
  "fieldName": "target"
154902
156010
  },
156011
+ {
156012
+ "name": "dismissible",
156013
+ "type": {
156014
+ "text": "boolean"
156015
+ },
156016
+ "default": "false",
156017
+ "description": "Whether the element shows a control that dismisses it.",
156018
+ "fieldName": "dismissible",
156019
+ "inheritedFrom": {
156020
+ "name": "MixinDismissible",
156021
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
156022
+ }
156023
+ },
154903
156024
  {
154904
156025
  "name": "disabled",
154905
156026
  "type": {
@@ -154955,6 +156076,10 @@
154955
156076
  }
154956
156077
  ],
154957
156078
  "mixins": [
156079
+ {
156080
+ "name": "MixinDismissible",
156081
+ "package": "@fusion.dev/helix-core"
156082
+ },
154958
156083
  {
154959
156084
  "name": "MixinSelectableItem",
154960
156085
  "package": "@fusion.dev/helix-core"
@@ -155007,7 +156132,7 @@
155007
156132
  "declarations": [
155008
156133
  {
155009
156134
  "kind": "class",
155010
- "description": "A part of `Tag` that holds tags as one control: a grid of rows, one tab stop\nfor the whole set. The arrow keys move between tags, Home and End go to the\nfirst and the last, and a typed letter goes to the next tag starting with\nit. Delete or Backspace removes the focused tag where it is `dismissible`,\nby sending its `helix-dismiss`: remove it from your list in the handler, and\nfocus moves to the next tag, or the previous one after the last.\n\n`selection-mode` lets a reader select tags, with Space, Enter or a press:\n`single` selects one at a time and `multiple` any number. In `multiple`,\nShift with an arrow, Home or End selects the range from the tag last\npressed to the tag focus moves to, and Control or Command with A selects\nevery tag that is not disabled. `value` holds the\nselected tags' values, separated by commas, and a change asks with\n`helix-before-change` and tells with `change`. Enter on a tag with an\n`href` follows its link. A `disabled` tag is passed over. A selected tag\nthat is removed leaves `value`, which then sends `change`.\n\nName the set with `label`. Each tag is named by its words alone, without\nits remove button. `value` takes an array of values on the property as\nwell, as React sets `value={['Apple']}`; a press writes it back as a\nstring.\n\n**Removing the last tag keeps focus in the group.** With no tags left the\nset is a `group`, and focus moves to its `empty` part,\nwhich holds the `empty` slot: put words there such as \"No filters\" for a\nreader to hear. With nothing slotted it says `empty-label`, \"No tags\".\nWhere only disabled tags are left, the first of them holds the tab stop and\ntakes focus, so the reader stays in the set.",
156135
+ "description": "A part of `Tag` that holds tags as one control: a grid of rows, one tab stop\nfor the whole set. The arrow keys move between tags, Home and End go to the\nfirst and the last, and a typed letter goes to the next tag starting with\nit. Delete or Backspace removes the focused tag where it is `dismissible`,\nby sending its `helix-dismiss`: remove it from your list in the handler, and\nfocus moves to the next tag, or the previous one after the last.\n\n`selection-mode` lets a reader select tags, with Space, Enter or a press:\n`single` selects one at a time and `multiple` any number. In `multiple`,\nShift with an arrow, Home or End selects the range from the tag last\npressed to the tag focus moves to, Shift with a press or Space selects the\nrange to that tag, and Control or Command with A selects every tag that is\nnot disabled. `selection-behavior=\"replace\"` selects the tag a reader\npresses or moves to alone, as a file list does, and Control or Command\nwith a press or Space adds or takes out one tag. `disallow-empty-selection`\nkeeps one tag selected once one is. `value` holds the\nselected tags' values, separated by commas, and a change asks with\n`helix-before-change` and tells with `change`. Enter on a tag with an\n`href` follows its link. A `disabled` tag is passed over. A selected tag\nthat is removed leaves `value`, which then sends `change`.\n\nName the set with `label`. Each tag is named by its words alone, without\nits remove button. `value` takes an array of values on the property as\nwell, as React sets `value={['Apple']}`; a press writes it back as a\nstring.\n\n**Removing the last tag keeps focus in the group.** With no tags left the\nset is a `group`, and focus moves to its `empty` part,\nwhich holds the `empty` slot: put words there such as \"No filters\" for a\nreader to hear. With nothing slotted it says `empty-label`, \"No tags\".\nWhere only disabled tags are left, the first of them holds the tab stop and\ntakes focus, so the reader stays in the set.",
155011
156136
  "name": "HelixHeadlessTagGroup",
155012
156137
  "cssParts": [
155013
156138
  {
@@ -155036,6 +156161,16 @@
155036
156161
  "default": "'helix-tag-group'",
155037
156162
  "description": "The key this part's words are registered under, its styled tag:\n`registerWords('de', { 'helix-tag-group': { emptyLabel: 'Keine Schlagwörter' } })`."
155038
156163
  },
156164
+ {
156165
+ "kind": "field",
156166
+ "name": "disallowEmptySelection",
156167
+ "type": {
156168
+ "text": "boolean"
156169
+ },
156170
+ "default": "false",
156171
+ "description": "Keeps at least one tag selected once one is, as React Aria's\n`disallowEmptySelection`: a press or a key that would leave none selected\nis refused. Removing the last selected tag still takes it out of `value`.",
156172
+ "attribute": "disallow-empty-selection"
156173
+ },
155039
156174
  {
155040
156175
  "kind": "field",
155041
156176
  "name": "emptyLabel",
@@ -155059,6 +156194,16 @@
155059
156194
  "description": "The name of the set, such as \"Filters\", which a screen reader announces\nbefore its tags.",
155060
156195
  "attribute": "label"
155061
156196
  },
156197
+ {
156198
+ "kind": "field",
156199
+ "name": "selectionBehavior",
156200
+ "type": {
156201
+ "text": "'replace' | 'toggle'"
156202
+ },
156203
+ "default": "'toggle'",
156204
+ "description": "What a press, Space, or a move does to the tags already selected.\n`toggle`, the default, keeps them: a press adds or takes out the tag, and\nthe arrow keys move focus alone. `replace` selects the tag alone, as a\nfile list does, and the arrow keys carry the selection with focus.\nControl or Command with a press or Space adds or takes out one tag in\n`multiple`, and with an arrow moves focus without selecting.",
156205
+ "attribute": "selection-behavior"
156206
+ },
155062
156207
  {
155063
156208
  "kind": "field",
155064
156209
  "name": "selectionMode",
@@ -155224,10 +156369,46 @@
155224
156369
  "type": {
155225
156370
  "text": "HelixHeadlessTag"
155226
156371
  }
156372
+ },
156373
+ {
156374
+ "name": "cause",
156375
+ "optional": true,
156376
+ "type": {
156377
+ "text": "KeyboardEvent | MouseEvent"
156378
+ }
155227
156379
  }
155228
156380
  ],
155229
156381
  "description": "Selects the tag, or lets it go, asking first.\n\n`helix-before-change` carries the `value` the press would leave, and a\nlistener that refuses it keeps the selection. `change` follows once it\nhas moved."
155230
156382
  },
156383
+ {
156384
+ "kind": "field",
156385
+ "name": "replaces",
156386
+ "type": {
156387
+ "text": "boolean"
156388
+ },
156389
+ "privacy": "private",
156390
+ "description": "Whether a press or a move selects the tag alone.",
156391
+ "readonly": true
156392
+ },
156393
+ {
156394
+ "kind": "method",
156395
+ "name": "ask",
156396
+ "privacy": "private",
156397
+ "return": {
156398
+ "type": {
156399
+ "text": "void"
156400
+ }
156401
+ },
156402
+ "parameters": [
156403
+ {
156404
+ "name": "next",
156405
+ "type": {
156406
+ "text": "string"
156407
+ }
156408
+ }
156409
+ ],
156410
+ "description": "Asks for `value` to become `next`, where it changes and where it leaves a\ntag selected under `disallow-empty-selection`."
156411
+ },
155231
156412
  {
155232
156413
  "kind": "method",
155233
156414
  "name": "span",
@@ -155705,6 +156886,15 @@
155705
156886
  }
155706
156887
  ],
155707
156888
  "attributes": [
156889
+ {
156890
+ "name": "disallow-empty-selection",
156891
+ "type": {
156892
+ "text": "boolean"
156893
+ },
156894
+ "default": "false",
156895
+ "description": "Keeps at least one tag selected once one is, as React Aria's\n`disallowEmptySelection`: a press or a key that would leave none selected\nis refused. Removing the last selected tag still takes it out of `value`.",
156896
+ "fieldName": "disallowEmptySelection"
156897
+ },
155708
156898
  {
155709
156899
  "name": "empty-label",
155710
156900
  "type": {
@@ -155723,6 +156913,15 @@
155723
156913
  "description": "The name of the set, such as \"Filters\", which a screen reader announces\nbefore its tags.",
155724
156914
  "fieldName": "label"
155725
156915
  },
156916
+ {
156917
+ "name": "selection-behavior",
156918
+ "type": {
156919
+ "text": "'replace' | 'toggle'"
156920
+ },
156921
+ "default": "'toggle'",
156922
+ "description": "What a press, Space, or a move does to the tags already selected.\n`toggle`, the default, keeps them: a press adds or takes out the tag, and\nthe arrow keys move focus alone. `replace` selects the tag alone, as a\nfile list does, and the arrow keys carry the selection with focus.\nControl or Command with a press or Space adds or takes out one tag in\n`multiple`, and with an arrow moves focus without selecting.",
156923
+ "fieldName": "selectionBehavior"
156924
+ },
155726
156925
  {
155727
156926
  "name": "selection-mode",
155728
156927
  "type": {
@@ -169787,6 +170986,14 @@
169787
170986
  {
169788
170987
  "description": "The item's label.",
169789
170988
  "name": ""
170989
+ },
170990
+ {
170991
+ "description": "Content after the label, such as a count or a shortcut.",
170992
+ "name": "end"
170993
+ },
170994
+ {
170995
+ "description": "Content before the label, such as an icon.",
170996
+ "name": "start"
169790
170997
  }
169791
170998
  ],
169792
170999
  "members": [
@@ -175634,7 +176841,7 @@
175634
176841
  "declarations": [
175635
176842
  {
175636
176843
  "kind": "class",
175637
- "description": "The tree is a single tab stop, and arrow keys move focus between items, as\nthe tree pattern requires, so Tab moves past a long sidebar in one press. The\ntree moves the tab stop to the focused item, so the browser's focus order\nstays intact.\n\nItems are found with `instanceof`, never by tag name, so the headless tier\ndoes not depend on the styled one.\n\nTyping a letter moves to the next visible item whose name starts with it,\nand `*` opens every branch beside the focused item.\n\n`selection-mode=\"multiple\"` draws a check mark on every row and lets a\nreader check many, as Web Awesome's and Ark UI's checkbox trees do. Checking\na branch checks every item under it, and a branch some of whose items are\nchecked is partly checked. Space or a press on the mark checks the focused\nrow, and Enter or a press on a branch's row opens it. `active` then holds the\nchecked values, comma separated, which `values` also gives as a list, and\nthe tree says `aria-multiselectable`.\n\n`selection-mode=\"leaf\"` chooses one item at a time and only the items at the\nends: a press, Enter or Space on a branch opens or closes it and chooses\nnothing, as Web Awesome's `leaf` mode does.\n\nKeys: Up and Down Arrow move between the items a reader can see; Right\nArrow opens a shut branch and then moves into it, and Left Arrow shuts an\nopen one and then moves to its parent, the two swapping on a right-to-left\npage. Home and End go to the first and the last item, Enter and Space choose\nor open, and the tree's one tab stop stays on the item last reached. In a\ntree of check marks, Control+A (Command+A on an Apple keyboard) checks every\nitem or clears them all, and Shift with Up or Down Arrow moves and checks.\n\nRemoving the item that has focus moves focus to the item after it among its\nsiblings, or the one before, or its parent, so focus stays in the tree.\n\n**`reorderable` lets you move items among their siblings.** Alt with Up or\nDown moves the focused item a place, and Alt with Home or End to the first\nor the last place among its siblings, as the APG's rearrangeable listbox\ndoes. Each row gets a grip at its far end: drag it to move the item, and the\ntree scrolls near an edge. A click on a grip picks the item up and a click on\none of its siblings drops it there, which needs no drag. The arrows move an\nitem picked up that way, Enter or Space drops it, and Escape puts it back.\nThe tree says each step in its `live` region. A drop sends\n`helix-before-reorder`, which you can refuse, and then `helix-reorder`, whose\n`keys` hold the siblings in the new order. **You move the items**: the tree\nmoves no element of yours, and focus follows the moved item once you have.\nMoving an item into another branch is not part of this.",
176844
+ "description": "The tree is a single tab stop, and arrow keys move focus between items, as\nthe tree pattern requires, so Tab moves past a long sidebar in one press. The\ntree moves the tab stop to the focused item, so the browser's focus order\nstays intact.\n\nItems are found with `instanceof`, never by tag name, so the headless tier\ndoes not depend on the styled one.\n\nTyping a letter moves to the next visible item whose name starts with it,\nand `*` opens every branch beside the focused item.\n\n`selection-mode=\"multiple\"` draws a check mark on every row and lets a\nreader check many, as Web Awesome's and Ark UI's checkbox trees do. Checking\na branch checks every item under it, and a branch some of whose items are\nchecked is partly checked. Space or a press on the mark checks the focused\nrow, and Enter or a press on a branch's row opens it. `active` then holds the\nchecked values, comma separated, which `values` also gives as a list, and\nthe tree says `aria-multiselectable`.\n\n`selection-mode=\"leaf\"` chooses one item at a time and only the items at the\nends: a press, Enter or Space on a branch opens or closes it and chooses\nnothing, as Web Awesome's `leaf` mode does.\n\nKeys: Up and Down Arrow move between the items a reader can see; Right\nArrow opens a shut branch and then moves into it, and Left Arrow shuts an\nopen one and then moves to its parent, the two swapping on a right-to-left\npage. Home and End go to the first and the last item, Enter and Space choose\nor open, and the tree's one tab stop stays on the item last reached. In a\ntree of check marks, Control+A (Command+A on an Apple keyboard) checks every\nitem or clears them all, and Shift with Up or Down Arrow moves and checks.\nShift+Space checks every item from the one last checked to the focused one,\nand Control+Shift+Home or End checks every item from the focused one to the\nfirst or the last, then moves there, as the tree pattern's range keys do.\n\nA tree with no name of its own is announced as \"Tree\", which says nothing\nabout what it holds, so a development build warns once with the kind\n`missing-name` where neither `label` nor an `aria-label` names it.\n\nRemoving the item that has focus moves focus to the item after it among its\nsiblings, or the one before, or its parent, so focus stays in the tree.\n\n**`reorderable` lets you move items among their siblings.** Alt with Up or\nDown moves the focused item a place, and Alt with Home or End to the first\nor the last place among its siblings, as the APG's rearrangeable listbox\ndoes. Each row gets a grip at its far end: drag it to move the item, and the\ntree scrolls near an edge. A click on a grip picks the item up and a click on\none of its siblings drops it there, which needs no drag. The arrows move an\nitem picked up that way, Enter or Space drops it, and Escape puts it back.\nThe tree says each step in its `live` region. A drop sends\n`helix-before-reorder`, which you can refuse, and then `helix-reorder`, whose\n`keys` hold the siblings in the new order. **You move the items**: the tree\nmoves no element of yours, and focus follows the moved item once you have.\n\n**Alt with the arrow along the line moves an item into another branch.**\nAlt with the arrow that opens a branch (Right on a left-to-right page) puts\nthe focused item last inside the item before it, and opens that item; Alt\nwith the other arrow puts it after its parent, a level out. The same\n`helix-before-reorder` and `helix-reorder` are sent, with `parent` naming\nthe branch it moves into by its key, `''` for the top level, and `keys`\nholding that branch's items in their new order. The tree says the move with\n`moved-into-label`.",
175638
176845
  "name": "HelixHeadlessTree",
175639
176846
  "cssParts": [
175640
176847
  {
@@ -175718,6 +176925,19 @@
175718
176925
  "words": true
175719
176926
  }
175720
176927
  },
176928
+ {
176929
+ "kind": "field",
176930
+ "name": "movedIntoLabel",
176931
+ "type": {
176932
+ "text": "string"
176933
+ },
176934
+ "default": "'{name} moved into {parent}, position {position} of {count}'",
176935
+ "description": "What screen readers hear when an item moves into another branch, in a\n`reorderable` tree. `{name}` is the item's words, `{parent}` the words of\nthe branch it moved into, or the tree's `label` for the top level,\n`{position}` its place there, counting from 1, and `{count}` the number of\nitems there.",
176936
+ "attribute": "moved-into-label",
176937
+ "helix": {
176938
+ "words": true
176939
+ }
176940
+ },
175721
176941
  {
175722
176942
  "kind": "field",
175723
176943
  "name": "movedLabel",
@@ -175947,6 +177167,15 @@
175947
177167
  "privacy": "private",
175948
177168
  "description": "The item that last had focus, so its removal can hand focus on."
175949
177169
  },
177170
+ {
177171
+ "kind": "field",
177172
+ "name": "anchor",
177173
+ "type": {
177174
+ "text": "HelixHeadlessTreeItem | undefined"
177175
+ },
177176
+ "privacy": "private",
177177
+ "description": "The item last checked or unchecked, where a range Shift+Space checks starts."
177178
+ },
175950
177179
  {
175951
177180
  "kind": "field",
175952
177181
  "name": "handleFocusIn",
@@ -176126,6 +177355,69 @@
176126
177355
  ],
176127
177356
  "description": "The keys of a tree of check marks, as the tree pattern gives them:\nControl+A (Command+A on an Apple keyboard) checks every item, or clears\nthem all where every one is checked, and Shift with Up or Down Arrow moves\nto the item before or after and checks or unchecks it.\n\nReturns whether the press was one of those."
176128
177357
  },
177358
+ {
177359
+ "kind": "method",
177360
+ "name": "checkRange",
177361
+ "privacy": "private",
177362
+ "return": {
177363
+ "type": {
177364
+ "text": "void"
177365
+ }
177366
+ },
177367
+ "parameters": [
177368
+ {
177369
+ "name": "range",
177370
+ "type": {
177371
+ "text": "HelixHeadlessTreeItem[]"
177372
+ }
177373
+ }
177374
+ ],
177375
+ "description": "Checks every item of a range, and keeps the ones already checked."
177376
+ },
177377
+ {
177378
+ "kind": "method",
177379
+ "name": "nest",
177380
+ "privacy": "private",
177381
+ "return": {
177382
+ "type": {
177383
+ "text": "boolean"
177384
+ }
177385
+ },
177386
+ "parameters": [
177387
+ {
177388
+ "name": "current",
177389
+ "type": {
177390
+ "text": "HelixHeadlessTreeItem"
177391
+ }
177392
+ },
177393
+ {
177394
+ "name": "toward",
177395
+ "type": {
177396
+ "text": "number"
177397
+ }
177398
+ }
177399
+ ],
177400
+ "description": "Moves the focused item into another branch, in a `reorderable` tree: last\ninside the item before it, `toward` the line's end, or after its parent,\ntoward its start. Asks the page, which moves the item, and says where it\nwent or that the move was refused. Returns whether the key moved anything."
177401
+ },
177402
+ {
177403
+ "kind": "method",
177404
+ "name": "follow",
177405
+ "privacy": "private",
177406
+ "return": {
177407
+ "type": {
177408
+ "text": "void"
177409
+ }
177410
+ },
177411
+ "parameters": [
177412
+ {
177413
+ "name": "key",
177414
+ "type": {
177415
+ "text": "string"
177416
+ }
177417
+ }
177418
+ ],
177419
+ "description": "Gives focus back to a moved item once the page has moved it, where moving\nit sent focus to the body, as a move among siblings does."
177420
+ },
176129
177421
  {
176130
177422
  "kind": "method",
176131
177423
  "name": "move",
@@ -176917,6 +178209,15 @@
176917
178209
  "description": "Accessible name for the tree.\n\nAn `aria-label` or `aria-labelledby` on the host names the tree too, and\nwins over this.",
176918
178210
  "fieldName": "label"
176919
178211
  },
178212
+ {
178213
+ "name": "moved-into-label",
178214
+ "type": {
178215
+ "text": "string"
178216
+ },
178217
+ "default": "'{name} moved into {parent}, position {position} of {count}'",
178218
+ "description": "What screen readers hear when an item moves into another branch, in a\n`reorderable` tree. `{name}` is the item's words, `{parent}` the words of\nthe branch it moved into, or the tree's `label` for the top level,\n`{position}` its place there, counting from 1, and `{count}` the number of\nitems there.",
178219
+ "fieldName": "movedIntoLabel"
178220
+ },
176920
178221
  {
176921
178222
  "name": "moved-label",
176922
178223
  "type": {
@@ -177127,6 +178428,36 @@
177127
178428
  ],
177128
178429
  "description": "Whether a row is checked in a tree of check marks: a leaf by its value, and\na branch by its leaves, `mixed` where some of them are."
177129
178430
  },
178431
+ {
178432
+ "kind": "function",
178433
+ "name": "checkRows",
178434
+ "return": {
178435
+ "type": {
178436
+ "text": "string[]"
178437
+ }
178438
+ },
178439
+ "parameters": [
178440
+ {
178441
+ "name": "rows",
178442
+ "type": {
178443
+ "text": "readonly CheckableRow[]"
178444
+ }
178445
+ },
178446
+ {
178447
+ "name": "chosen",
178448
+ "type": {
178449
+ "text": "readonly string[]"
178450
+ }
178451
+ },
178452
+ {
178453
+ "name": "order",
178454
+ "type": {
178455
+ "text": "readonly string[]"
178456
+ }
178457
+ }
178458
+ ],
178459
+ "description": "The checked values after checking every row in `rows`, in `order`: a range\nthe reader extends with Shift and Space, or with Control, Shift and Home or\nEnd. Rows already checked stay checked, and disabled rows are passed over."
178460
+ },
177130
178461
  {
177131
178462
  "kind": "function",
177132
178463
  "name": "pressRow",
@@ -177167,6 +178498,14 @@
177167
178498
  "module": "src/tree/selection.ts"
177168
178499
  }
177169
178500
  },
178501
+ {
178502
+ "kind": "js",
178503
+ "name": "checkRows",
178504
+ "declaration": {
178505
+ "name": "checkRows",
178506
+ "module": "src/tree/selection.ts"
178507
+ }
178508
+ },
177170
178509
  {
177171
178510
  "kind": "js",
177172
178511
  "name": "pressRow",
@@ -184831,6 +186170,6 @@
184831
186170
  ],
184832
186171
  "helix": {
184833
186172
  "package": "@fusion.dev/helix-headless",
184834
- "version": "0.154.0"
186173
+ "version": "0.155.0"
184835
186174
  }
184836
186175
  }