@fusion.dev/helix-core 0.142.1 → 0.143.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.
- package/custom-elements.json +1475 -54
- package/dist/controllers/aria-forward-controller/aria-forward-controller.d.ts +55 -0
- package/dist/controllers/aria-forward-controller/aria-forward-controller.js +72 -16
- package/dist/controllers/arrival-controller/arrival-controller.d.ts +12 -0
- package/dist/controllers/arrival-controller/arrival-controller.js +10 -0
- package/dist/controllers/chart-pointer-controller/chart-pointer-controller.d.ts +10 -0
- package/dist/controllers/chart-pointer-controller/chart-pointer-controller.js +5 -1
- package/dist/controllers/copy-controller/copy-controller.js +5 -0
- package/dist/controllers/dismiss-controller/dismiss-controller.js +40 -3
- package/dist/controllers/keyboard-navigation-controller/keyboard-navigation-controller.d.ts +79 -1
- package/dist/controllers/keyboard-navigation-controller/keyboard-navigation-controller.js +80 -10
- package/dist/controllers/popover-controller/popover-controller.d.ts +11 -0
- package/dist/controllers/popover-controller/popover-controller.js +6 -0
- package/dist/controllers/source-controller/source-controller.d.ts +22 -0
- package/dist/controllers/source-controller/source-controller.js +27 -1
- package/dist/controllers/virtualize-controller/virtualize-controller.d.ts +16 -0
- package/dist/controllers/virtualize-controller/virtualize-controller.js +24 -2
- package/dist/events/events.d.ts +102 -4
- package/dist/events/events.js +84 -0
- package/dist/helix-element/react-bridge.js +6 -4
- package/dist/helix-form-element/helix-form-element.d.ts +131 -2
- package/dist/helix-form-element/helix-form-element.js +216 -6
- package/dist/index.d.ts +4 -3
- package/dist/index.js +4 -3
- package/dist/mixins/mixin-chart-source/mixin-chart-source.d.ts +8 -0
- package/dist/mixins/mixin-chart-source/mixin-chart-source.js +4 -0
- package/dist/mixins/mixin-collection/mixin-collection.d.ts +4 -2
- package/dist/mixins/mixin-collection/mixin-collection.js +8 -6
- package/dist/mixins/mixin-controller-open/mixin-controller-open.js +19 -3
- package/dist/mixins/mixin-dismissible/mixin-dismissible.js +39 -0
- package/dist/mixins/mixin-field/mixin-field.js +38 -8
- package/dist/mixins/mixin-picker-editing/mixin-picker-editing.d.ts +8 -3
- package/dist/mixins/mixin-picker-editing/mixin-picker-editing.js +6 -0
- package/dist/mixins/mixin-picker-field/mixin-picker-field.d.ts +27 -4
- package/dist/mixins/mixin-picker-field/mixin-picker-field.js +83 -1
- package/dist/utils/draw-tooltip/draw-tooltip.d.ts +3 -0
- package/dist/utils/draw-tooltip/draw-tooltip.js +5 -0
- package/dist/utils/read-series/read-series.d.ts +28 -0
- package/dist/utils/read-series/read-series.js +31 -4
- package/dist/utils/report-runtime/report-runtime.d.ts +10 -0
- package/dist/utils/scroll-lock/scroll-lock.d.ts +16 -0
- package/dist/utils/scroll-lock/scroll-lock.js +30 -0
- package/dist/utils/written-list/written-list.d.ts +11 -2
- package/dist/utils/written-list/written-list.js +3 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
package/custom-elements.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"declarations": [
|
|
9
9
|
{
|
|
10
10
|
"kind": "class",
|
|
11
|
-
"description": "Carries a host's ARIA references down to the control inside it.\n\n**The gap this closes, measured.** `<helix-button aria-describedby=\"tip\">` puts\nthe description on the host, and the host is not what a reader is on: the\naccessibility tree exposes the `<button>` in the shadow root, and the host\nbeside it is a generic with a description nobody hears. Read from Chrome's own\ntree:\n\n```\nhost role=generic name=\"\" desc=\"Helix description\"\ninner button role=button name=\"Helix\" desc=\"\"\n```\n\nA plain `<button>` with the identical attribute reads `desc=\"Helix\ndescription\"`, so the reference itself is fine and only its destination is\nwrong. This moves it.\n\n**An IDREF cannot make that trip and an element reference can.** The ids are\nwritten in the consumer's tree and the control is in a shadow root, so\n`aria-describedby` copied onto the inner element resolves to nothing.\n`ariaDescribedByElements` takes the elements themselves, and a reference is\nvalid into the same tree *or a shadow-including ancestor* of it: from inside\nthe shadow root looking out, the document is exactly that. Measured, the\nassignment reads back with the node intact, where the inward direction, from a\nlight-DOM trigger to a node in a shadow root, reads back empty. This is the\none direction that works, which is why `Tooltip` needs `for` and this does\nnot.\n\n**The attributes stay on the host.** Nothing is removed and nothing is added:\nthe consumer's markup is exactly what they wrote, which is the same reason\n`hostAria` exists. What changes is only that the control now also holds the\nreference, so a screen reader on the focused element hears it.\n\nWatched with a `MutationObserver`, because a reference can arrive at any time:\na framework rendering a tooltip after this element upgrades, or a consumer\npointing `aria-describedby` at a different id, changes an attribute and\nnothing schedules a Lit update.",
|
|
11
|
+
"description": "Carries a host's ARIA references down to the control inside it.\n\n**The gap this closes, measured.** `<helix-button aria-describedby=\"tip\">` puts\nthe description on the host, and the host is not what a reader is on: the\naccessibility tree exposes the `<button>` in the shadow root, and the host\nbeside it is a generic with a description nobody hears. Read from Chrome's own\ntree:\n\n```\nhost role=generic name=\"\" desc=\"Helix description\"\ninner button role=button name=\"Helix\" desc=\"\"\n```\n\nA plain `<button>` with the identical attribute reads `desc=\"Helix\ndescription\"`, so the reference itself is fine and only its destination is\nwrong. This moves it.\n\n**An IDREF cannot make that trip and an element reference can.** The ids are\nwritten in the consumer's tree and the control is in a shadow root, so\n`aria-describedby` copied onto the inner element resolves to nothing.\n`ariaDescribedByElements` takes the elements themselves, and a reference is\nvalid into the same tree *or a shadow-including ancestor* of it: from inside\nthe shadow root looking out, the document is exactly that. Measured, the\nassignment reads back with the node intact, where the inward direction, from a\nlight-DOM trigger to a node in a shadow root, reads back empty. This is the\none direction that works, which is why `Tooltip` needs `for` and this does\nnot.\n\n**The attributes stay on the host.** Nothing is removed and nothing is added:\nthe consumer's markup is exactly what they wrote, which is the same reason\n`hostAria` exists. What changes is only that the control now also holds the\nreference, so a screen reader on the focused element hears it.\n\nWatched with a `MutationObserver`, because a reference can arrive at any time:\na framework rendering a tooltip after this element upgrades, or a consumer\npointing `aria-describedby` at a different id, changes an attribute and\nnothing schedules a Lit update.\n\n**A `<label>` that names the host names the control too**, when the control\nhas no name of its own. The platform gives a form-associated host its labels\nand the host is a generic the reader never lands on, so a `<label for>` or a\nwrapping `<label>` left the textbox unnamed. The labels travel the same way a\nforwarded `aria-labelledby` does, as element references, and are read again\nwhen focus arrives, since a label can be added without the host hearing.",
|
|
12
12
|
"name": "AriaForwardController",
|
|
13
13
|
"members": [
|
|
14
14
|
{
|
|
@@ -55,6 +55,83 @@
|
|
|
55
55
|
"privacy": "private",
|
|
56
56
|
"description": "The control the record above is about, so a replacement resets it."
|
|
57
57
|
},
|
|
58
|
+
{
|
|
59
|
+
"kind": "field",
|
|
60
|
+
"name": "asked",
|
|
61
|
+
"type": {
|
|
62
|
+
"text": "boolean | (() => boolean)"
|
|
63
|
+
},
|
|
64
|
+
"privacy": "private",
|
|
65
|
+
"readonly": true,
|
|
66
|
+
"description": "Whether a host `aria-label` is carried down. See the option."
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"kind": "field",
|
|
70
|
+
"name": "label",
|
|
71
|
+
"type": {
|
|
72
|
+
"text": "boolean"
|
|
73
|
+
},
|
|
74
|
+
"privacy": "private",
|
|
75
|
+
"readonly": true
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"kind": "field",
|
|
79
|
+
"name": "named",
|
|
80
|
+
"type": {
|
|
81
|
+
"text": "(() => boolean) | undefined"
|
|
82
|
+
},
|
|
83
|
+
"privacy": "private",
|
|
84
|
+
"readonly": true,
|
|
85
|
+
"description": "The component's own answer to whether the control is named. See the option."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"kind": "field",
|
|
89
|
+
"name": "after",
|
|
90
|
+
"type": {
|
|
91
|
+
"text": "(() => Element[]) | undefined"
|
|
92
|
+
},
|
|
93
|
+
"privacy": "private",
|
|
94
|
+
"readonly": true,
|
|
95
|
+
"description": "What is read after the host's names. See the option."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"kind": "method",
|
|
99
|
+
"name": "namedByItself",
|
|
100
|
+
"privacy": "private",
|
|
101
|
+
"return": {
|
|
102
|
+
"type": {
|
|
103
|
+
"text": "boolean"
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"parameters": [
|
|
107
|
+
{
|
|
108
|
+
"name": "target",
|
|
109
|
+
"type": {
|
|
110
|
+
"text": "HTMLElement"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"description": "Whether the control has a name that did not come from this controller: an\n`aria-label`, an `aria-labelledby` of its own, or a label of its own with\nwords in it."
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"kind": "method",
|
|
118
|
+
"name": "hostLabels",
|
|
119
|
+
"privacy": "private",
|
|
120
|
+
"return": {
|
|
121
|
+
"type": {
|
|
122
|
+
"text": "HTMLElement[]"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"parameters": [
|
|
126
|
+
{
|
|
127
|
+
"name": "target",
|
|
128
|
+
"type": {
|
|
129
|
+
"text": "HTMLElement"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
"description": "The labels the platform associated with the host, for a control with no\nname of its own, and none otherwise."
|
|
134
|
+
},
|
|
58
135
|
{
|
|
59
136
|
"kind": "method",
|
|
60
137
|
"name": "forward",
|
|
@@ -83,6 +160,13 @@
|
|
|
83
160
|
}
|
|
84
161
|
}
|
|
85
162
|
},
|
|
163
|
+
{
|
|
164
|
+
"kind": "field",
|
|
165
|
+
"name": "refresh",
|
|
166
|
+
"privacy": "private",
|
|
167
|
+
"readonly": true,
|
|
168
|
+
"description": "Forwards again as focus arrives, for a label added since the last update."
|
|
169
|
+
},
|
|
86
170
|
{
|
|
87
171
|
"kind": "method",
|
|
88
172
|
"name": "hostUpdated",
|
|
@@ -113,7 +197,7 @@
|
|
|
113
197
|
"declarations": [
|
|
114
198
|
{
|
|
115
199
|
"kind": "class",
|
|
116
|
-
"description": "The words of an element that is announced when it appears, for a region that\nis there before they are.\n\n**A live region is heard when what it holds changes, not when it arrives.**\nAn element the page inserts with its message already inside is a region\narriving with its words, which a screen reader reads inconsistently at best:\nan empty state after a search, a banner raised mid-session. So the element\nrenders its region empty and this fills it a frame later, which is a change.\n\n**Left empty when the element came with the page**, served or parsed in the\nfirst pass, because a message that was always there is content rather than\nnews, and a region that spoke on every page load would interrupt a reader\nbefore they had read anything. Its words are the baseline instead, and the\nregion speaks only when they change. Filling it at once also drew the words a\nsecond time on the headless tier, which has no sheet to clip the region, and\na served page changed its picture on hydrating.\n\nThe component renders `said` into its region and calls `say` when what it\nholds changes, from a `slotchange`.",
|
|
200
|
+
"description": "The words of an element that is announced when it appears, for a region that\nis there before they are.\n\n**A live region is heard when what it holds changes, not when it arrives.**\nAn element the page inserts with its message already inside is a region\narriving with its words, which a screen reader reads inconsistently at best:\nan empty state after a search, a banner raised mid-session. So the element\nrenders its region empty and this fills it a frame later, which is a change.\n\n**Left empty when the element came with the page**, served or parsed in the\nfirst pass, because a message that was always there is content rather than\nnews, and a region that spoke on every page load would interrupt a reader\nbefore they had read anything. Its words are the baseline instead, and the\nregion speaks only when they change. Filling it at once also drew the words a\nsecond time on the headless tier, which has no sheet to clip the region, and\na served page changed its picture on hydrating.\n\n**And emptied again once it has been heard.** The words stay in the element\nitself, so a region that kept its copy put the message in the accessibility\ntree twice, and a reader moving through the page met it twice. The region\nkeeps the copy for `hold` and then lets it go, which a polite region does not\nread out, removals being no news.\n\nThe component renders `said` into its region and calls `say` when what it\nholds changes, from a `slotchange`.",
|
|
117
201
|
"name": "ArrivalController",
|
|
118
202
|
"members": [
|
|
119
203
|
{
|
|
@@ -144,6 +228,14 @@
|
|
|
144
228
|
"privacy": "private",
|
|
145
229
|
"default": "0"
|
|
146
230
|
},
|
|
231
|
+
{
|
|
232
|
+
"kind": "field",
|
|
233
|
+
"name": "timer",
|
|
234
|
+
"type": {
|
|
235
|
+
"text": "ReturnType<typeof setTimeout> | undefined"
|
|
236
|
+
},
|
|
237
|
+
"privacy": "private"
|
|
238
|
+
},
|
|
147
239
|
{
|
|
148
240
|
"kind": "method",
|
|
149
241
|
"name": "hostConnected",
|
|
@@ -288,6 +380,24 @@
|
|
|
288
380
|
"description": "Whether the drawing is turned to run right to left, which it is on a\nright-to-left page.\n\n`HelixElement` mirrors a drawing marked `data-mirror` there, so a reading\ndrawn at 10% of the plot's width stands 10% in from its right edge. What is\nread against the drawing has to be read the same way: the pointer from the\nplot's right, and a bubble beside a bar's far end on its left. Asked of the\nhost through `isRtl`, which is the one question the table and the splitter\nask for their own arrow keys.\n\nOn the controller because it is what reads the pointer against the drawing,\nand a chart deciding which side a bubble goes asks here rather than\nrepeating the question. Asked when needed rather than held, since a page\ncan change its direction without the chart updating.",
|
|
289
381
|
"readonly": true
|
|
290
382
|
},
|
|
383
|
+
{
|
|
384
|
+
"kind": "method",
|
|
385
|
+
"name": "accepts",
|
|
386
|
+
"return": {
|
|
387
|
+
"type": {
|
|
388
|
+
"text": "boolean"
|
|
389
|
+
}
|
|
390
|
+
},
|
|
391
|
+
"parameters": [
|
|
392
|
+
{
|
|
393
|
+
"name": "event",
|
|
394
|
+
"type": {
|
|
395
|
+
"text": "Event"
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
],
|
|
399
|
+
"description": "Whether a pointer event may move the reading, which only a mouse or a pen\nmay.\n\nPublic for a chart that hears the pointer itself, a donut's slices and a\nheatmap's cells, so the rule a coarse pointer gets is this one everywhere.\nHeard unfiltered, a touch opened the bubble under the finger and left it\nthere after the finger lifted."
|
|
400
|
+
},
|
|
291
401
|
{
|
|
292
402
|
"kind": "method",
|
|
293
403
|
"name": "set",
|
|
@@ -1619,9 +1729,123 @@
|
|
|
1619
1729
|
"kind": "javascript-module",
|
|
1620
1730
|
"path": "src/controllers/keyboard-navigation-controller/keyboard-navigation-controller.ts",
|
|
1621
1731
|
"declarations": [
|
|
1732
|
+
{
|
|
1733
|
+
"kind": "function",
|
|
1734
|
+
"name": "typesCharacter",
|
|
1735
|
+
"return": {
|
|
1736
|
+
"type": {
|
|
1737
|
+
"text": "boolean"
|
|
1738
|
+
}
|
|
1739
|
+
},
|
|
1740
|
+
"parameters": [
|
|
1741
|
+
{
|
|
1742
|
+
"name": "event",
|
|
1743
|
+
"type": {
|
|
1744
|
+
"text": "KeyboardEvent"
|
|
1745
|
+
}
|
|
1746
|
+
}
|
|
1747
|
+
],
|
|
1748
|
+
"description": "Whether a press types a character, which is what typeahead reads.\n\nOne character with no Control, Command or Alt held, so a shortcut such as\nControl+A is never taken for the letter A. Shift is allowed, because a\ncapital is still a letter."
|
|
1749
|
+
},
|
|
1750
|
+
{
|
|
1751
|
+
"kind": "class",
|
|
1752
|
+
"description": "Finds an item by the letters a reader types at a set, the way a native\n`<select>` does.\n\nLetters typed within `timeout` milliseconds of each other build one search,\nso typing \"ca\" moves to \"Canada\" past \"Cambodia\". The same letter typed again\nmoves to the next item that starts with it, so pressing \"c\" three times visits\nthe first three. A pause starts a new search.\n\nMatching ignores case and leading spaces, and searches from the reader's\nposition, wrapping at the end. A search that matches nothing moves nothing.\n\nHolds only the letters, so one instance serves any set: the caller passes the\nwords of the items and where the reader is on every key.",
|
|
1753
|
+
"name": "Typeahead",
|
|
1754
|
+
"members": [
|
|
1755
|
+
{
|
|
1756
|
+
"kind": "field",
|
|
1757
|
+
"name": "letters",
|
|
1758
|
+
"type": {
|
|
1759
|
+
"text": "string"
|
|
1760
|
+
},
|
|
1761
|
+
"privacy": "private",
|
|
1762
|
+
"default": "''"
|
|
1763
|
+
},
|
|
1764
|
+
{
|
|
1765
|
+
"kind": "field",
|
|
1766
|
+
"name": "last",
|
|
1767
|
+
"type": {
|
|
1768
|
+
"text": "number"
|
|
1769
|
+
},
|
|
1770
|
+
"privacy": "private",
|
|
1771
|
+
"default": "0"
|
|
1772
|
+
},
|
|
1773
|
+
{
|
|
1774
|
+
"kind": "field",
|
|
1775
|
+
"name": "timeout",
|
|
1776
|
+
"type": {
|
|
1777
|
+
"text": "number"
|
|
1778
|
+
},
|
|
1779
|
+
"privacy": "private",
|
|
1780
|
+
"readonly": true,
|
|
1781
|
+
"default": "timeout"
|
|
1782
|
+
},
|
|
1783
|
+
{
|
|
1784
|
+
"kind": "method",
|
|
1785
|
+
"name": "typing",
|
|
1786
|
+
"return": {
|
|
1787
|
+
"type": {
|
|
1788
|
+
"text": "boolean"
|
|
1789
|
+
}
|
|
1790
|
+
},
|
|
1791
|
+
"parameters": [
|
|
1792
|
+
{
|
|
1793
|
+
"name": "now",
|
|
1794
|
+
"default": "Date.now()"
|
|
1795
|
+
}
|
|
1796
|
+
],
|
|
1797
|
+
"description": "Whether a search is under way.\n\nA set that chooses on Space asks this first, because a Space typed in the\nmiddle of a search is part of the words, as in \"New York\"."
|
|
1798
|
+
},
|
|
1799
|
+
{
|
|
1800
|
+
"kind": "method",
|
|
1801
|
+
"name": "match",
|
|
1802
|
+
"return": {
|
|
1803
|
+
"type": {
|
|
1804
|
+
"text": "number"
|
|
1805
|
+
}
|
|
1806
|
+
},
|
|
1807
|
+
"parameters": [
|
|
1808
|
+
{
|
|
1809
|
+
"name": "key",
|
|
1810
|
+
"type": {
|
|
1811
|
+
"text": "string"
|
|
1812
|
+
}
|
|
1813
|
+
},
|
|
1814
|
+
{
|
|
1815
|
+
"name": "texts",
|
|
1816
|
+
"type": {
|
|
1817
|
+
"text": "readonly string[]"
|
|
1818
|
+
}
|
|
1819
|
+
},
|
|
1820
|
+
{
|
|
1821
|
+
"name": "from",
|
|
1822
|
+
"type": {
|
|
1823
|
+
"text": "number"
|
|
1824
|
+
}
|
|
1825
|
+
},
|
|
1826
|
+
{
|
|
1827
|
+
"name": "now",
|
|
1828
|
+
"default": "Date.now()"
|
|
1829
|
+
}
|
|
1830
|
+
],
|
|
1831
|
+
"description": "Adds a character to the search, and returns the index of the item it\nmatches, or `-1` where none does.\n\n`texts` are the words of the items a reader can reach, in order, and\n`from` is the index of the item the reader is on, or `-1`."
|
|
1832
|
+
},
|
|
1833
|
+
{
|
|
1834
|
+
"kind": "method",
|
|
1835
|
+
"name": "reset",
|
|
1836
|
+
"return": {
|
|
1837
|
+
"type": {
|
|
1838
|
+
"text": "void"
|
|
1839
|
+
}
|
|
1840
|
+
},
|
|
1841
|
+
"description": "Ends the search, so the next letter starts a new one."
|
|
1842
|
+
}
|
|
1843
|
+
],
|
|
1844
|
+
"helix": {}
|
|
1845
|
+
},
|
|
1622
1846
|
{
|
|
1623
1847
|
"kind": "class",
|
|
1624
|
-
"description": "Moves through a set of items with the arrow keys, and chooses as it goes.\n\n**Moving and choosing are one act here, not two.** That is the radio group\npattern and it is the difference from a listbox: moving focus without\nchoosing leaves a keyboard reader sitting on an item they have not selected,\nwith nothing on screen saying which of the two is true. A pointer user\nchooses by arriving, so a keyboard user does too.\n\n**Both axes, always.** A vertical set still answers left and right, and a\nhorizontal one still answers up and down. Binding only the axis the items\nhappen to be laid out on means a reader who guesses wrong gets nothing, and\n`orientation` is presentation: the same set of choices reads the same way\nwhichever direction it runs.\n\n**The horizontal pair turns with the line.** On a right-to-left page the\nfirst item is on the right, so left is forward there, which is what a native\nradio group does, measured in Chromium on 15 Sep 2026. Vertical sets\nincluded: the key a reader guesses on a column is the one that goes forward\nalong a row of the same items, and the two answering differently would make\n`orientation` more than presentation after all.\n\nDisabled items are skipped rather than stopped at, so a set with a gap in it\nstill moves in one press.\n\nA set that starts from focus rather than from the selection, or that moves\nwithout choosing, says so through `origin` and `selects`. Neither is a reason\nto keep a hand-written copy, and neither exempts a set from both axes.",
|
|
1848
|
+
"description": "Moves through a set of items with the arrow keys, and chooses as it goes.\n\n**Moving and choosing are one act here, not two.** That is the radio group\npattern and it is the difference from a listbox: moving focus without\nchoosing leaves a keyboard reader sitting on an item they have not selected,\nwith nothing on screen saying which of the two is true. A pointer user\nchooses by arriving, so a keyboard user does too.\n\n**Both axes, always.** A vertical set still answers left and right, and a\nhorizontal one still answers up and down. Binding only the axis the items\nhappen to be laid out on means a reader who guesses wrong gets nothing, and\n`orientation` is presentation: the same set of choices reads the same way\nwhichever direction it runs.\n\n**The horizontal pair turns with the line.** On a right-to-left page the\nfirst item is on the right, so left is forward there, which is what a native\nradio group does, measured in Chromium on 15 Sep 2026. Vertical sets\nincluded: the key a reader guesses on a column is the one that goes forward\nalong a row of the same items, and the two answering differently would make\n`orientation` more than presentation after all.\n\nDisabled items are skipped rather than stopped at, so a set with a gap in it\nstill moves in one press.\n\n**Typeahead is opt-in.** Pass `typeahead` with a function that returns an\nitem's words, and a printable key moves to the next item whose words start\nwith the letters typed, choosing it where arriving chooses. A key that a text\nfield inside the set is typing into is left to the field.\n\nA set that starts from focus rather than from the selection, or that moves\nwithout choosing, says so through `origin` and `selects`. Neither is a reason\nto keep a hand-written copy, and neither exempts a set from both axes.",
|
|
1625
1849
|
"name": "KeyboardNavigationController",
|
|
1626
1850
|
"members": [
|
|
1627
1851
|
{
|
|
@@ -1684,6 +1908,86 @@
|
|
|
1684
1908
|
"readonly": true,
|
|
1685
1909
|
"default": "wrap"
|
|
1686
1910
|
},
|
|
1911
|
+
{
|
|
1912
|
+
"kind": "field",
|
|
1913
|
+
"name": "words",
|
|
1914
|
+
"type": {
|
|
1915
|
+
"text": "((item: NavigableItem) => string) | undefined"
|
|
1916
|
+
},
|
|
1917
|
+
"privacy": "private",
|
|
1918
|
+
"readonly": true,
|
|
1919
|
+
"default": "typeahead"
|
|
1920
|
+
},
|
|
1921
|
+
{
|
|
1922
|
+
"kind": "field",
|
|
1923
|
+
"name": "typeahead",
|
|
1924
|
+
"privacy": "private",
|
|
1925
|
+
"readonly": true,
|
|
1926
|
+
"default": "new Typeahead()"
|
|
1927
|
+
},
|
|
1928
|
+
{
|
|
1929
|
+
"kind": "method",
|
|
1930
|
+
"name": "arrive",
|
|
1931
|
+
"privacy": "private",
|
|
1932
|
+
"return": {
|
|
1933
|
+
"type": {
|
|
1934
|
+
"text": "void"
|
|
1935
|
+
}
|
|
1936
|
+
},
|
|
1937
|
+
"parameters": [
|
|
1938
|
+
{
|
|
1939
|
+
"name": "target",
|
|
1940
|
+
"type": {
|
|
1941
|
+
"text": "NavigableItem | undefined"
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1944
|
+
],
|
|
1945
|
+
"description": "Moves to an item, and chooses it where arriving is choosing."
|
|
1946
|
+
},
|
|
1947
|
+
{
|
|
1948
|
+
"kind": "method",
|
|
1949
|
+
"name": "current",
|
|
1950
|
+
"privacy": "private",
|
|
1951
|
+
"return": {
|
|
1952
|
+
"type": {
|
|
1953
|
+
"text": "number"
|
|
1954
|
+
}
|
|
1955
|
+
},
|
|
1956
|
+
"parameters": [
|
|
1957
|
+
{
|
|
1958
|
+
"name": "items",
|
|
1959
|
+
"type": {
|
|
1960
|
+
"text": "NavigableItem[]"
|
|
1961
|
+
}
|
|
1962
|
+
},
|
|
1963
|
+
{
|
|
1964
|
+
"name": "event",
|
|
1965
|
+
"type": {
|
|
1966
|
+
"text": "KeyboardEvent"
|
|
1967
|
+
}
|
|
1968
|
+
}
|
|
1969
|
+
],
|
|
1970
|
+
"description": "Where the reader is: the item the press came from, or the selection.\n\n**Focus first, where nothing is chosen.** A reader who tabs into an\nunanswered set lands on its first item, and the selection then says `-1`.\nStarting from `-1`, a forward step lands on that same first item, so the\nfirst press appeared to do nothing and the second one moved. A native radio\ngroup moves to the second radio on that press, and so does this."
|
|
1971
|
+
},
|
|
1972
|
+
{
|
|
1973
|
+
"kind": "method",
|
|
1974
|
+
"name": "handleTypeahead",
|
|
1975
|
+
"privacy": "private",
|
|
1976
|
+
"return": {
|
|
1977
|
+
"type": {
|
|
1978
|
+
"text": "void"
|
|
1979
|
+
}
|
|
1980
|
+
},
|
|
1981
|
+
"parameters": [
|
|
1982
|
+
{
|
|
1983
|
+
"name": "event",
|
|
1984
|
+
"type": {
|
|
1985
|
+
"text": "KeyboardEvent"
|
|
1986
|
+
}
|
|
1987
|
+
}
|
|
1988
|
+
],
|
|
1989
|
+
"description": "Moves to the item whose words start with what was typed, if any."
|
|
1990
|
+
},
|
|
1687
1991
|
{
|
|
1688
1992
|
"kind": "field",
|
|
1689
1993
|
"name": "handleKeydown",
|
|
@@ -1715,14 +2019,30 @@
|
|
|
1715
2019
|
"exports": [
|
|
1716
2020
|
{
|
|
1717
2021
|
"kind": "js",
|
|
1718
|
-
"name": "
|
|
2022
|
+
"name": "typesCharacter",
|
|
1719
2023
|
"declaration": {
|
|
1720
|
-
"name": "
|
|
2024
|
+
"name": "typesCharacter",
|
|
1721
2025
|
"module": "src/controllers/keyboard-navigation-controller/keyboard-navigation-controller.ts"
|
|
1722
2026
|
}
|
|
1723
|
-
}
|
|
1724
|
-
|
|
1725
|
-
|
|
2027
|
+
},
|
|
2028
|
+
{
|
|
2029
|
+
"kind": "js",
|
|
2030
|
+
"name": "Typeahead",
|
|
2031
|
+
"declaration": {
|
|
2032
|
+
"name": "Typeahead",
|
|
2033
|
+
"module": "src/controllers/keyboard-navigation-controller/keyboard-navigation-controller.ts"
|
|
2034
|
+
}
|
|
2035
|
+
},
|
|
2036
|
+
{
|
|
2037
|
+
"kind": "js",
|
|
2038
|
+
"name": "KeyboardNavigationController",
|
|
2039
|
+
"declaration": {
|
|
2040
|
+
"name": "KeyboardNavigationController",
|
|
2041
|
+
"module": "src/controllers/keyboard-navigation-controller/keyboard-navigation-controller.ts"
|
|
2042
|
+
}
|
|
2043
|
+
}
|
|
2044
|
+
]
|
|
2045
|
+
},
|
|
1726
2046
|
{
|
|
1727
2047
|
"kind": "javascript-module",
|
|
1728
2048
|
"path": "src/controllers/media-session-controller/media-session-controller.ts",
|
|
@@ -2177,6 +2497,16 @@
|
|
|
2177
2497
|
"default": "false",
|
|
2178
2498
|
"description": "Whether the surface is currently shown, so the calls can be idempotent."
|
|
2179
2499
|
},
|
|
2500
|
+
{
|
|
2501
|
+
"kind": "field",
|
|
2502
|
+
"name": "host",
|
|
2503
|
+
"type": {
|
|
2504
|
+
"text": "ReactiveControllerHost & HTMLElement"
|
|
2505
|
+
},
|
|
2506
|
+
"privacy": "private",
|
|
2507
|
+
"readonly": true,
|
|
2508
|
+
"default": "host"
|
|
2509
|
+
},
|
|
2180
2510
|
{
|
|
2181
2511
|
"kind": "field",
|
|
2182
2512
|
"name": "open",
|
|
@@ -2254,6 +2584,16 @@
|
|
|
2254
2584
|
"text": "void"
|
|
2255
2585
|
}
|
|
2256
2586
|
}
|
|
2587
|
+
},
|
|
2588
|
+
{
|
|
2589
|
+
"kind": "method",
|
|
2590
|
+
"name": "hostConnected",
|
|
2591
|
+
"return": {
|
|
2592
|
+
"type": {
|
|
2593
|
+
"text": "void"
|
|
2594
|
+
}
|
|
2595
|
+
},
|
|
2596
|
+
"description": "Asks a reconnected host that is still open to update, so the panel is shown\nagain.\n\nThe flag above lets it show, and nothing asked it to: a host moved in the\nDOM while open kept `open` and `aria-expanded=\"true\"` with the panel\nhidden until something else updated it, and Escape did not close it,\nbecause the dismissal is started by showing."
|
|
2257
2597
|
}
|
|
2258
2598
|
],
|
|
2259
2599
|
"helix": {}
|
|
@@ -2391,7 +2731,7 @@
|
|
|
2391
2731
|
"declarations": [
|
|
2392
2732
|
{
|
|
2393
2733
|
"kind": "class",
|
|
2394
|
-
"description": "Resolves the element a chart reads from, and follows it.\n\nEvery chart that takes a `for` wants exactly this, and wants it to behave\nidentically, so it is a controller rather than a paragraph in each of them.\n\nA controller and not a pure function, by the test the rules set: it reacts to\nthe host's lifecycle. It has to start watching when the host connects, stop\nwhen it leaves, and re-resolve when `for` changes.\n\n**What it refuses is as much the point as what it accepts.** A `<table>` or\nanything built from grid roles, including this library's own `helix-table`,\nwhose roles live in `ElementInternals` and therefore write no attribute at\nall. Anything else resolves to null, so a `for` pointed at a paragraph draws\nnothing rather than something arbitrary.\n\nThe element is watched for `childList` and `characterData` alike, because\nrenaming a series edits a text node in place rather than replacing a cell,\nand nothing in a page has reason to know a chart is reading it.",
|
|
2734
|
+
"description": "Resolves the element a chart reads from, and follows it.\n\nEvery chart that takes a `for` wants exactly this, and wants it to behave\nidentically, so it is a controller rather than a paragraph in each of them.\n\nA controller and not a pure function, by the test the rules set: it reacts to\nthe host's lifecycle. It has to start watching when the host connects, stop\nwhen it leaves, and re-resolve when `for` changes.\n\n**What it refuses is as much the point as what it accepts.** A `<table>` or\nanything built from grid roles, including this library's own `helix-table`,\nwhose roles live in `ElementInternals` and therefore write no attribute at\nall. Anything else resolves to null, so a `for` pointed at a paragraph draws\nnothing rather than something arbitrary.\n\nThe element is watched for `childList` and `characterData` alike, because\nrenaming a series edits a text node in place rather than replacing a cell,\nand nothing in a page has reason to know a chart is reading it.\n\n**The tree around it is watched as well, for the table that is not there\nyet.** A framework page renders a chart first and its table once the data\nloads, or re-keys the table and so replaces it under the same id. Watching\nonly the element resolved on connect found nothing in the first case and\nkept a detached table in the second, and the chart drew neither until some\nunrelated property changed. So the root the id resolves in is watched for\nnodes arriving and leaving and for `id` and `role` changing, and each batch\nasks the id again. That is one lookup by id per batch, and a chart redraws\nonly when the answer is a different element.",
|
|
2395
2735
|
"name": "SourceController",
|
|
2396
2736
|
"members": [
|
|
2397
2737
|
{
|
|
@@ -2411,6 +2751,25 @@
|
|
|
2411
2751
|
},
|
|
2412
2752
|
"privacy": "private"
|
|
2413
2753
|
},
|
|
2754
|
+
{
|
|
2755
|
+
"kind": "field",
|
|
2756
|
+
"name": "tree",
|
|
2757
|
+
"type": {
|
|
2758
|
+
"text": "MutationObserver | undefined"
|
|
2759
|
+
},
|
|
2760
|
+
"privacy": "private",
|
|
2761
|
+
"description": "Watches the tree `for` resolves in, for the table arriving, leaving or being replaced."
|
|
2762
|
+
},
|
|
2763
|
+
{
|
|
2764
|
+
"kind": "field",
|
|
2765
|
+
"name": "watched",
|
|
2766
|
+
"type": {
|
|
2767
|
+
"text": "Element | null"
|
|
2768
|
+
},
|
|
2769
|
+
"privacy": "private",
|
|
2770
|
+
"default": "null",
|
|
2771
|
+
"description": "The element the watcher is on, or null where `for` named nothing."
|
|
2772
|
+
},
|
|
2414
2773
|
{
|
|
2415
2774
|
"kind": "field",
|
|
2416
2775
|
"name": "deferred",
|
|
@@ -2546,6 +2905,17 @@
|
|
|
2546
2905
|
}
|
|
2547
2906
|
},
|
|
2548
2907
|
"description": "Points the watcher at whatever `for` names now.\n\nCalled on connect and by the host when `for` changes. Safe to call when\nthere is no `MutationObserver`, which is the server."
|
|
2908
|
+
},
|
|
2909
|
+
{
|
|
2910
|
+
"kind": "method",
|
|
2911
|
+
"name": "watchTree",
|
|
2912
|
+
"privacy": "private",
|
|
2913
|
+
"return": {
|
|
2914
|
+
"type": {
|
|
2915
|
+
"text": "void"
|
|
2916
|
+
}
|
|
2917
|
+
},
|
|
2918
|
+
"description": "Watches the root `for` resolves in, so a table that arrives, leaves or is\nreplaced under the same id is followed.\n\nOnly while `for` names something and the host sits in a tree that can\nresolve an id, which a detached host and a server render do not."
|
|
2549
2919
|
}
|
|
2550
2920
|
],
|
|
2551
2921
|
"helix": {}
|
|
@@ -3147,6 +3517,46 @@
|
|
|
3147
3517
|
],
|
|
3148
3518
|
"description": "Tells the controller the set grew by `by` items at its start.\n\nFor a host that prepends, which is what a transcript loading its history\ndoes. Every index the controller knew now names the item `by` places later,\nso the heights and the window move with them, and the scroll offset is moved\nby the room the new items take once they have been drawn. The reader stays\non the turn they were reading rather than on whatever now sits at their old\noffset, which is what loading history upward has to look like.\n\nCall it from `willUpdate`, before the render that draws the grown set."
|
|
3149
3519
|
},
|
|
3520
|
+
{
|
|
3521
|
+
"kind": "method",
|
|
3522
|
+
"name": "sizeOf",
|
|
3523
|
+
"return": {
|
|
3524
|
+
"type": {
|
|
3525
|
+
"text": "number"
|
|
3526
|
+
}
|
|
3527
|
+
},
|
|
3528
|
+
"parameters": [
|
|
3529
|
+
{
|
|
3530
|
+
"name": "index",
|
|
3531
|
+
"type": {
|
|
3532
|
+
"text": "number"
|
|
3533
|
+
}
|
|
3534
|
+
}
|
|
3535
|
+
],
|
|
3536
|
+
"description": "How tall item `index` is: what was measured, or the estimate.\n\nFor a host that draws an item outside the window, the row holding focus\nsay, and has to take that item's room out of a spacer."
|
|
3537
|
+
},
|
|
3538
|
+
{
|
|
3539
|
+
"kind": "method",
|
|
3540
|
+
"name": "reveal",
|
|
3541
|
+
"return": {
|
|
3542
|
+
"type": {
|
|
3543
|
+
"text": "void"
|
|
3544
|
+
}
|
|
3545
|
+
},
|
|
3546
|
+
"parameters": [
|
|
3547
|
+
{
|
|
3548
|
+
"name": "index",
|
|
3549
|
+
"type": {
|
|
3550
|
+
"text": "number"
|
|
3551
|
+
}
|
|
3552
|
+
},
|
|
3553
|
+
{
|
|
3554
|
+
"name": "inset",
|
|
3555
|
+
"default": "0"
|
|
3556
|
+
}
|
|
3557
|
+
],
|
|
3558
|
+
"description": "Scrolls the box the least distance that shows item `index` whole.\n\nFor a host moving focus to an item outside the window, whose own element\ncannot be scrolled to because it is not drawn where it belongs. `inset` is\nhow far into the box the items start, for a heading that sticks at its\ntop and covers that much of every item scrolled under it."
|
|
3559
|
+
},
|
|
3150
3560
|
{
|
|
3151
3561
|
"kind": "method",
|
|
3152
3562
|
"name": "forget",
|
|
@@ -4061,6 +4471,28 @@
|
|
|
4061
4471
|
},
|
|
4062
4472
|
"helix": {}
|
|
4063
4473
|
},
|
|
4474
|
+
{
|
|
4475
|
+
"kind": "class",
|
|
4476
|
+
"description": "A transcript was pinned to the bottom, or let go of it.\n\nThe notification half of `helix-before-pin`, sent once `pinned` has moved,\nso `currentTarget.pinned` is the new state and `detail.value` says it as\n`true` or `false`. Not cancelable: the decision was the request's.",
|
|
4477
|
+
"name": "HelixPinEvent",
|
|
4478
|
+
"members": [
|
|
4479
|
+
{
|
|
4480
|
+
"kind": "field",
|
|
4481
|
+
"name": "eventName",
|
|
4482
|
+
"type": {
|
|
4483
|
+
"text": "string"
|
|
4484
|
+
},
|
|
4485
|
+
"static": true,
|
|
4486
|
+
"readonly": true,
|
|
4487
|
+
"default": "'helix-pin'"
|
|
4488
|
+
}
|
|
4489
|
+
],
|
|
4490
|
+
"superclass": {
|
|
4491
|
+
"name": "CustomEvent",
|
|
4492
|
+
"module": "src/events/events.ts"
|
|
4493
|
+
},
|
|
4494
|
+
"helix": {}
|
|
4495
|
+
},
|
|
4064
4496
|
{
|
|
4065
4497
|
"kind": "class",
|
|
4066
4498
|
"description": "A divider is about to move, and can be refused.",
|
|
@@ -4083,6 +4515,28 @@
|
|
|
4083
4515
|
},
|
|
4084
4516
|
"helix": {}
|
|
4085
4517
|
},
|
|
4518
|
+
{
|
|
4519
|
+
"kind": "class",
|
|
4520
|
+
"description": "A divider settled somewhere new.\n\nThe notification half of `helix-before-resize`, sent once `position` has\nmoved, with the new position. Not cancelable: the decision was the\nrequest's.\n\n**Past tense, because `helix-resize` was already taken** by a measurement,\nthe height a sandboxed preview reports for what it drew, and one name cannot\ncarry both.",
|
|
4521
|
+
"name": "HelixResizedEvent",
|
|
4522
|
+
"members": [
|
|
4523
|
+
{
|
|
4524
|
+
"kind": "field",
|
|
4525
|
+
"name": "eventName",
|
|
4526
|
+
"type": {
|
|
4527
|
+
"text": "string"
|
|
4528
|
+
},
|
|
4529
|
+
"static": true,
|
|
4530
|
+
"readonly": true,
|
|
4531
|
+
"default": "'helix-resized'"
|
|
4532
|
+
}
|
|
4533
|
+
],
|
|
4534
|
+
"superclass": {
|
|
4535
|
+
"name": "CustomEvent",
|
|
4536
|
+
"module": "src/events/events.ts"
|
|
4537
|
+
},
|
|
4538
|
+
"helix": {}
|
|
4539
|
+
},
|
|
4086
4540
|
{
|
|
4087
4541
|
"kind": "class",
|
|
4088
4542
|
"description": "The divider between a sandbox's panes is about to move, and can be refused.\n\nIts own verb rather than a `helix-before-resize` carrying which divider moved:\na sandbox has two, and they were told apart by a field on a detail every other\nrequest in this file also carries.",
|
|
@@ -4149,6 +4603,28 @@
|
|
|
4149
4603
|
},
|
|
4150
4604
|
"helix": {}
|
|
4151
4605
|
},
|
|
4606
|
+
{
|
|
4607
|
+
"kind": "class",
|
|
4608
|
+
"description": "A pane shut or reopened.\n\nThe notification half of `helix-before-collapse`, sent once `collapsed` has\nmoved. `detail.value` is the side that is shut, or empty where both panes\nare open. Not cancelable: the decision was the request's.",
|
|
4609
|
+
"name": "HelixCollapseEvent",
|
|
4610
|
+
"members": [
|
|
4611
|
+
{
|
|
4612
|
+
"kind": "field",
|
|
4613
|
+
"name": "eventName",
|
|
4614
|
+
"type": {
|
|
4615
|
+
"text": "string"
|
|
4616
|
+
},
|
|
4617
|
+
"static": true,
|
|
4618
|
+
"readonly": true,
|
|
4619
|
+
"default": "'helix-collapse'"
|
|
4620
|
+
}
|
|
4621
|
+
],
|
|
4622
|
+
"superclass": {
|
|
4623
|
+
"name": "CustomEvent",
|
|
4624
|
+
"module": "src/events/events.ts"
|
|
4625
|
+
},
|
|
4626
|
+
"helix": {}
|
|
4627
|
+
},
|
|
4152
4628
|
{
|
|
4153
4629
|
"kind": "class",
|
|
4154
4630
|
"description": "Source is about to be edited, and can be refused.",
|
|
@@ -4457,6 +4933,28 @@
|
|
|
4457
4933
|
},
|
|
4458
4934
|
"helix": {}
|
|
4459
4935
|
},
|
|
4936
|
+
{
|
|
4937
|
+
"kind": "class",
|
|
4938
|
+
"description": "The rows are in a different order.\n\nThe notification after `helix-sort`, sent once `sort` has moved, with the\norder now in force. Not cancelable: the decision was the request's.\n\n**Past tense, because the plain verb is the request.** `helix-sort` was\ncancelable before the library had a word for its notification, and\nconsumers bind it by that name, so the notification takes the one after it.",
|
|
4939
|
+
"name": "HelixSortedEvent",
|
|
4940
|
+
"members": [
|
|
4941
|
+
{
|
|
4942
|
+
"kind": "field",
|
|
4943
|
+
"name": "eventName",
|
|
4944
|
+
"type": {
|
|
4945
|
+
"text": "string"
|
|
4946
|
+
},
|
|
4947
|
+
"static": true,
|
|
4948
|
+
"readonly": true,
|
|
4949
|
+
"default": "'helix-sorted'"
|
|
4950
|
+
}
|
|
4951
|
+
],
|
|
4952
|
+
"superclass": {
|
|
4953
|
+
"name": "CustomEvent",
|
|
4954
|
+
"module": "src/events/events.ts"
|
|
4955
|
+
},
|
|
4956
|
+
"helix": {}
|
|
4957
|
+
},
|
|
4460
4958
|
{
|
|
4461
4959
|
"kind": "class",
|
|
4462
4960
|
"description": "Fired when the reader changes which values a field is filtered by.\n\n**Not `helix-filter`, which is a different thing already taken.** That one\nsays a list narrowed itself to a string, and `Data Table` and `Listbox` both\ndispatch it with exactly that meaning. This one carries a structured filter:\na field, a comparison and a set of values, which is a shape neither of those\nhas and neither should grow.\n\nCancelable, and refusing it is how a consumer takes the decision for one\ninteraction, the way `requestChange` documents for every stateful change here.",
|
|
@@ -4501,6 +4999,28 @@
|
|
|
4501
4999
|
},
|
|
4502
5000
|
"helix": {}
|
|
4503
5001
|
},
|
|
5002
|
+
{
|
|
5003
|
+
"kind": "class",
|
|
5004
|
+
"description": "A component is showing a narrower or a wider set.\n\nThe notification after `helix-filter`, sent once the query has moved, with\nthe query now in force. Not cancelable, and past tense for the reason\n`helix-sorted` is.",
|
|
5005
|
+
"name": "HelixFilteredEvent",
|
|
5006
|
+
"members": [
|
|
5007
|
+
{
|
|
5008
|
+
"kind": "field",
|
|
5009
|
+
"name": "eventName",
|
|
5010
|
+
"type": {
|
|
5011
|
+
"text": "string"
|
|
5012
|
+
},
|
|
5013
|
+
"static": true,
|
|
5014
|
+
"readonly": true,
|
|
5015
|
+
"default": "'helix-filtered'"
|
|
5016
|
+
}
|
|
5017
|
+
],
|
|
5018
|
+
"superclass": {
|
|
5019
|
+
"name": "CustomEvent",
|
|
5020
|
+
"module": "src/events/events.ts"
|
|
5021
|
+
},
|
|
5022
|
+
"helix": {}
|
|
5023
|
+
},
|
|
4504
5024
|
{
|
|
4505
5025
|
"kind": "class",
|
|
4506
5026
|
"description": "Fired when a shortcut's chord is pressed.\n\nCancelable, and the key event is only consumed where this is not refused: a\nconsumer that decides the moment is wrong, a dialog is over the control or\nthe reader is mid-composition, calls `preventDefault()` and the keystroke\ngoes on to whatever would have had it.",
|
|
@@ -4545,6 +5065,28 @@
|
|
|
4545
5065
|
},
|
|
4546
5066
|
"helix": {}
|
|
4547
5067
|
},
|
|
5068
|
+
{
|
|
5069
|
+
"kind": "class",
|
|
5070
|
+
"description": "A set holds a different selection.\n\nThe notification after a `helix-select` that asked to change what is\nselected, sent once the selection has moved, with the selection now in\nforce. Not cancelable, and past tense for the reason `helix-sorted` is.",
|
|
5071
|
+
"name": "HelixSelectedEvent",
|
|
5072
|
+
"members": [
|
|
5073
|
+
{
|
|
5074
|
+
"kind": "field",
|
|
5075
|
+
"name": "eventName",
|
|
5076
|
+
"type": {
|
|
5077
|
+
"text": "string"
|
|
5078
|
+
},
|
|
5079
|
+
"static": true,
|
|
5080
|
+
"readonly": true,
|
|
5081
|
+
"default": "'helix-selected'"
|
|
5082
|
+
}
|
|
5083
|
+
],
|
|
5084
|
+
"superclass": {
|
|
5085
|
+
"name": "CustomEvent",
|
|
5086
|
+
"module": "src/events/events.ts"
|
|
5087
|
+
},
|
|
5088
|
+
"helix": {}
|
|
5089
|
+
},
|
|
4548
5090
|
{
|
|
4549
5091
|
"kind": "class",
|
|
4550
5092
|
"description": "Fired when the reader asks for the columns in a different order.\n\nCancelable, and refusing it leaves the columns where they were, so a consumer\nwho stores the order, in a URL or a preference, can take the decision the way\na server-side sort takes `helix-sort`. The detail is the whole order as\nspace-separated fields rather than one move, because the order is the fact a\nconsumer stores, and a move is only meaningful against an order they would\nthen have to keep in step.\n\nNot `helix-sort`: that reorders the rows, this reorders the columns, and a\nconsumer listening for one should not hear the other.",
|
|
@@ -4567,6 +5109,28 @@
|
|
|
4567
5109
|
},
|
|
4568
5110
|
"helix": {}
|
|
4569
5111
|
},
|
|
5112
|
+
{
|
|
5113
|
+
"kind": "class",
|
|
5114
|
+
"description": "The columns are in a different order.\n\nThe notification after `helix-reorder`, sent once the order has moved, with\nevery field in the new one. Not cancelable, and past tense for the reason\n`helix-sorted` is.",
|
|
5115
|
+
"name": "HelixReorderedEvent",
|
|
5116
|
+
"members": [
|
|
5117
|
+
{
|
|
5118
|
+
"kind": "field",
|
|
5119
|
+
"name": "eventName",
|
|
5120
|
+
"type": {
|
|
5121
|
+
"text": "string"
|
|
5122
|
+
},
|
|
5123
|
+
"static": true,
|
|
5124
|
+
"readonly": true,
|
|
5125
|
+
"default": "'helix-reordered'"
|
|
5126
|
+
}
|
|
5127
|
+
],
|
|
5128
|
+
"superclass": {
|
|
5129
|
+
"name": "CustomEvent",
|
|
5130
|
+
"module": "src/events/events.ts"
|
|
5131
|
+
},
|
|
5132
|
+
"helix": {}
|
|
5133
|
+
},
|
|
4570
5134
|
{
|
|
4571
5135
|
"kind": "class",
|
|
4572
5136
|
"description": "Fired when a reader reaches the oldest turn a transcript holds, while there are\nolder ones to fetch.\n\n**A report of where the reader is, not a request to be granted**, so it is not\ncancelable: there is nothing for the transcript to do if nobody refuses, and\nnothing to stop if somebody does. The consumer answers by fetching, and says\nso through the transcript's `history` while the older turns are on their way.\n\nNo detail. The consumer holds the transcript and knows its oldest turn, which\nis the one thing a fetch needs.",
|
|
@@ -4896,6 +5460,14 @@
|
|
|
4896
5460
|
"module": "src/events/events.ts"
|
|
4897
5461
|
}
|
|
4898
5462
|
},
|
|
5463
|
+
{
|
|
5464
|
+
"kind": "js",
|
|
5465
|
+
"name": "HelixPinEvent",
|
|
5466
|
+
"declaration": {
|
|
5467
|
+
"name": "HelixPinEvent",
|
|
5468
|
+
"module": "src/events/events.ts"
|
|
5469
|
+
}
|
|
5470
|
+
},
|
|
4899
5471
|
{
|
|
4900
5472
|
"kind": "js",
|
|
4901
5473
|
"name": "HelixBeforeResizeEvent",
|
|
@@ -4904,6 +5476,14 @@
|
|
|
4904
5476
|
"module": "src/events/events.ts"
|
|
4905
5477
|
}
|
|
4906
5478
|
},
|
|
5479
|
+
{
|
|
5480
|
+
"kind": "js",
|
|
5481
|
+
"name": "HelixResizedEvent",
|
|
5482
|
+
"declaration": {
|
|
5483
|
+
"name": "HelixResizedEvent",
|
|
5484
|
+
"module": "src/events/events.ts"
|
|
5485
|
+
}
|
|
5486
|
+
},
|
|
4907
5487
|
{
|
|
4908
5488
|
"kind": "js",
|
|
4909
5489
|
"name": "HelixBeforeSplitEvent",
|
|
@@ -4928,6 +5508,14 @@
|
|
|
4928
5508
|
"module": "src/events/events.ts"
|
|
4929
5509
|
}
|
|
4930
5510
|
},
|
|
5511
|
+
{
|
|
5512
|
+
"kind": "js",
|
|
5513
|
+
"name": "HelixCollapseEvent",
|
|
5514
|
+
"declaration": {
|
|
5515
|
+
"name": "HelixCollapseEvent",
|
|
5516
|
+
"module": "src/events/events.ts"
|
|
5517
|
+
}
|
|
5518
|
+
},
|
|
4931
5519
|
{
|
|
4932
5520
|
"kind": "js",
|
|
4933
5521
|
"name": "HelixBeforeEditEvent",
|
|
@@ -5040,6 +5628,14 @@
|
|
|
5040
5628
|
"module": "src/events/events.ts"
|
|
5041
5629
|
}
|
|
5042
5630
|
},
|
|
5631
|
+
{
|
|
5632
|
+
"kind": "js",
|
|
5633
|
+
"name": "HelixSortedEvent",
|
|
5634
|
+
"declaration": {
|
|
5635
|
+
"name": "HelixSortedEvent",
|
|
5636
|
+
"module": "src/events/events.ts"
|
|
5637
|
+
}
|
|
5638
|
+
},
|
|
5043
5639
|
{
|
|
5044
5640
|
"kind": "js",
|
|
5045
5641
|
"name": "HelixFacetEvent",
|
|
@@ -5056,6 +5652,14 @@
|
|
|
5056
5652
|
"module": "src/events/events.ts"
|
|
5057
5653
|
}
|
|
5058
5654
|
},
|
|
5655
|
+
{
|
|
5656
|
+
"kind": "js",
|
|
5657
|
+
"name": "HelixFilteredEvent",
|
|
5658
|
+
"declaration": {
|
|
5659
|
+
"name": "HelixFilteredEvent",
|
|
5660
|
+
"module": "src/events/events.ts"
|
|
5661
|
+
}
|
|
5662
|
+
},
|
|
5059
5663
|
{
|
|
5060
5664
|
"kind": "js",
|
|
5061
5665
|
"name": "HelixShortcutEvent",
|
|
@@ -5072,6 +5676,14 @@
|
|
|
5072
5676
|
"module": "src/events/events.ts"
|
|
5073
5677
|
}
|
|
5074
5678
|
},
|
|
5679
|
+
{
|
|
5680
|
+
"kind": "js",
|
|
5681
|
+
"name": "HelixSelectedEvent",
|
|
5682
|
+
"declaration": {
|
|
5683
|
+
"name": "HelixSelectedEvent",
|
|
5684
|
+
"module": "src/events/events.ts"
|
|
5685
|
+
}
|
|
5686
|
+
},
|
|
5075
5687
|
{
|
|
5076
5688
|
"kind": "js",
|
|
5077
5689
|
"name": "HelixReorderEvent",
|
|
@@ -5080,6 +5692,14 @@
|
|
|
5080
5692
|
"module": "src/events/events.ts"
|
|
5081
5693
|
}
|
|
5082
5694
|
},
|
|
5695
|
+
{
|
|
5696
|
+
"kind": "js",
|
|
5697
|
+
"name": "HelixReorderedEvent",
|
|
5698
|
+
"declaration": {
|
|
5699
|
+
"name": "HelixReorderedEvent",
|
|
5700
|
+
"module": "src/events/events.ts"
|
|
5701
|
+
}
|
|
5702
|
+
},
|
|
5083
5703
|
{
|
|
5084
5704
|
"kind": "js",
|
|
5085
5705
|
"name": "HelixHistoryEvent",
|
|
@@ -5590,7 +6210,7 @@
|
|
|
5590
6210
|
"declarations": [
|
|
5591
6211
|
{
|
|
5592
6212
|
"kind": "class",
|
|
5593
|
-
"description": "`HelixFormElement` is a class because the browser reads `formAssociated` from\nthe constructor during element upgrade, and a mixin or controller cannot\nsupply it.\n\n`internals` comes from `HelixElement`, which attaches it for every component.\n`attachInternals()` throws on a second call, so only one class attaches it.\n\nThe class carries only what every form participant needs. `value
|
|
6213
|
+
"description": "`HelixFormElement` is a class because the browser reads `formAssociated` from\nthe constructor during element upgrade, and a mixin or controller cannot\nsupply it.\n\n`internals` comes from `HelixElement`, which attaches it for every component.\n`attachInternals()` throws on a second call, so only one class attaches it.\n\nThe class carries only what every form participant needs. `value` and the\nreset and restore callbacks are added with the first input component.\n\n**The validity API is the platform's, read through `internals`**, so\n`checkValidity()`, `reportValidity()` and `setCustomValidity()` work on the\nhost as they do on a native control. A custom message is laid over whatever\nthe control itself reports, which is why `setValidity` is wrapped below.\n\n**Focus goes to the control's first tab stop**, for `focus()` and for a\npress on a `<label>` that names the host. A host is not focusable itself, so\nwithout this a label press focused nothing on half the controls.",
|
|
5594
6214
|
"name": "HelixFormElement",
|
|
5595
6215
|
"members": [
|
|
5596
6216
|
{
|
|
@@ -5617,17 +6237,243 @@
|
|
|
5617
6237
|
},
|
|
5618
6238
|
{
|
|
5619
6239
|
"kind": "field",
|
|
5620
|
-
"name": "formDisabled",
|
|
6240
|
+
"name": "formDisabled",
|
|
6241
|
+
"type": {
|
|
6242
|
+
"text": "boolean"
|
|
6243
|
+
},
|
|
6244
|
+
"privacy": "protected",
|
|
6245
|
+
"default": "false",
|
|
6246
|
+
"description": "Whether an ancestor `<fieldset disabled>` has switched this control off.\n\nThe platform tells a form-associated element through `formDisabledCallback`\nand nothing else does, so without this a control inside a disabled fieldset\nstays fully typeable and announces itself as enabled.\n\nThe submission half is already the platform's: measured, the fieldset's\ncontrols are absent from the form's entry list and the host matches\n`:disabled`, so the value never goes anywhere. What is missing without this\nis everything a reader can see or touch.\n\nState rather than the `disabled` property. Writing that would reflect an\nattribute the consumer's server markup does not have, which React reports\non hydration and does not patch up, and it would also silently overwrite\nwhat the consumer set."
|
|
6247
|
+
},
|
|
6248
|
+
{
|
|
6249
|
+
"kind": "method",
|
|
6250
|
+
"name": "formDisabledCallback",
|
|
6251
|
+
"return": {
|
|
6252
|
+
"type": {
|
|
6253
|
+
"text": "void"
|
|
6254
|
+
}
|
|
6255
|
+
},
|
|
6256
|
+
"parameters": [
|
|
6257
|
+
{
|
|
6258
|
+
"name": "disabled",
|
|
6259
|
+
"type": {
|
|
6260
|
+
"text": "boolean"
|
|
6261
|
+
}
|
|
6262
|
+
}
|
|
6263
|
+
],
|
|
6264
|
+
"description": "Called by the browser when an ancestor fieldset is disabled or enabled.\n\n**The argument is the effective state, and taking it whole is what latched\nevery control in the library.** The platform calls this for the element's\nown `disabled` as well as for a fieldset, and our own arrives here at the\nworst possible moment: reflecting `disabled` to the attribute happens\ninside Lit's `update()`, the UA fires this synchronously from that write,\nand a reactive write during an update is a change-in-update Lit does not\nre-render for. So `formDisabled` ran exactly one update behind forever.\n\nMeasured on Slider, logging what `render` saw:\n\n```\nset true disabled true formDisabled false isDisabled true\nset false disabled false formDisabled true isDisabled true <- stale\n(no third render)\n```\n\nThe host came out right every time, `disabled` false, `:disabled` not\nmatching, and the inner control kept the attribute, so a control disabled\nonce could never be re-enabled. It only shows when something re-enables,\nwhich is the same shape of bug `inheritDisabled` was written for.\n\nOur own half is already in `this.disabled` and `isDisabled` is an or, so\nthis records only what the fieldset adds. That also removes the write\nentirely on the own-disabled path rather than moving it.\n\nThe one case this cannot see is a control that is disabled itself *and*\ninside a disabled fieldset, whose own `disabled` is then removed: the\neffective state does not change, so the platform does not call again, and\nthe fieldset's hold is not recorded. There is no callback to learn it from\nand reading `:disabled` here would answer about the attribute we are in the\nmiddle of removing."
|
|
6265
|
+
},
|
|
6266
|
+
{
|
|
6267
|
+
"kind": "field",
|
|
6268
|
+
"name": "heldByFieldset",
|
|
6269
|
+
"type": {
|
|
6270
|
+
"text": "boolean"
|
|
6271
|
+
},
|
|
6272
|
+
"privacy": "private",
|
|
6273
|
+
"description": "Whether an ancestor `<fieldset disabled>` holds the control, outside its\nfirst `<legend>`, read from the tree.\n\nFor the one case the callback cannot report: a control disabled itself and\nby a fieldset, whose own `disabled` is then removed. The effective state does\nnot change, so the platform does not call, and the fieldset's hold has to\nbe read.",
|
|
6274
|
+
"readonly": true
|
|
6275
|
+
},
|
|
6276
|
+
{
|
|
6277
|
+
"kind": "method",
|
|
6278
|
+
"name": "formResetCallback",
|
|
6279
|
+
"return": {
|
|
6280
|
+
"type": {
|
|
6281
|
+
"text": "void"
|
|
6282
|
+
}
|
|
6283
|
+
},
|
|
6284
|
+
"description": "Called by the browser when the form is reset. It does nothing here, and\nevery override calls it.\n\n**A chain rather than a leaf**, because more than one layer owes a reset\nsomething: the value mixin its default, and the field mixin beneath it the\nforgetting of a reader's past attempt, whose message otherwise showed over\nthe emptied control the moment the form was reset."
|
|
6285
|
+
},
|
|
6286
|
+
{
|
|
6287
|
+
"kind": "method",
|
|
6288
|
+
"name": "announceInput",
|
|
6289
|
+
"privacy": "protected",
|
|
6290
|
+
"return": {
|
|
6291
|
+
"type": {
|
|
6292
|
+
"text": "void"
|
|
6293
|
+
}
|
|
6294
|
+
},
|
|
6295
|
+
"description": "Announces `input` from the host, the way the control it stands for would.\n\nComposed, as the native one is: `input` crosses shadow boundaries by\nspecification, so a consumer listening above a composition hears it."
|
|
6296
|
+
},
|
|
6297
|
+
{
|
|
6298
|
+
"kind": "method",
|
|
6299
|
+
"name": "announceChange",
|
|
6300
|
+
"privacy": "protected",
|
|
6301
|
+
"return": {
|
|
6302
|
+
"type": {
|
|
6303
|
+
"text": "void"
|
|
6304
|
+
}
|
|
6305
|
+
},
|
|
6306
|
+
"description": "Announces `change` from the host, the way the control it stands for would.\n\n**Not composed, and that is the shape of the native event rather than a\nchoice made here.** `change` stops at a shadow boundary, so a composed\ncontrol hears its inner control's and relays it under the same name from\nits own host, which is what `onChange` binds. Every control here that\ncommits a value announces it through this, whether the commit came from an\ninner control's own `change`, a step, a scrub or a completed code, so the\nevent is one shape in one place."
|
|
6307
|
+
},
|
|
6308
|
+
{
|
|
6309
|
+
"kind": "field",
|
|
6310
|
+
"name": "name",
|
|
6311
|
+
"type": {
|
|
6312
|
+
"text": "string"
|
|
6313
|
+
},
|
|
6314
|
+
"default": "''",
|
|
6315
|
+
"description": "The name the control's value is submitted under.\n\n**Reflected, and it is the exception to \"reflect only what CSS selects\non\".** The platform builds a form's entry list from the `name` *content\nattribute*, not from the property, so a control named through the property\nsubmitted under no name at all and was silently dropped. Measured: two\ninputs in one form, one named by attribute and one by property, and the\nform carried a single entry.\n\nSafe for a React consumer, which is what the rule is protecting: React\nrenders a custom element's props as attributes on the server, so the name\nis already in the markup being hydrated and reflecting it writes what is\nthere. It is only a change to the markup when a consumer assigns it\nimperatively later, and nothing is hydrating by then.\n\nHere rather than on each control.",
|
|
6316
|
+
"attribute": "name",
|
|
6317
|
+
"reflects": true
|
|
6318
|
+
},
|
|
6319
|
+
{
|
|
6320
|
+
"kind": "field",
|
|
6321
|
+
"name": "reportValidityTo",
|
|
6322
|
+
"type": {
|
|
6323
|
+
"text": "ElementInternals['setValidity']"
|
|
6324
|
+
},
|
|
6325
|
+
"privacy": "private",
|
|
6326
|
+
"readonly": true,
|
|
6327
|
+
"description": "The platform's own `setValidity`, which the wrapper above calls.",
|
|
6328
|
+
"default": "report"
|
|
6329
|
+
},
|
|
6330
|
+
{
|
|
6331
|
+
"kind": "field",
|
|
6332
|
+
"name": "reported",
|
|
6333
|
+
"type": {
|
|
6334
|
+
"text": "Reported"
|
|
6335
|
+
},
|
|
6336
|
+
"privacy": "private",
|
|
6337
|
+
"default": "{ anchor: undefined, flags: {}, message: '' }",
|
|
6338
|
+
"description": "What the control last reported, before any custom error is laid over it."
|
|
6339
|
+
},
|
|
6340
|
+
{
|
|
6341
|
+
"kind": "field",
|
|
6342
|
+
"name": "customValidity",
|
|
6343
|
+
"type": {
|
|
6344
|
+
"text": "string"
|
|
6345
|
+
},
|
|
6346
|
+
"privacy": "private",
|
|
6347
|
+
"default": "''",
|
|
6348
|
+
"description": "The message `setCustomValidity` was given."
|
|
6349
|
+
},
|
|
6350
|
+
{
|
|
6351
|
+
"kind": "field",
|
|
6352
|
+
"name": "appliedFeedback",
|
|
6353
|
+
"type": {
|
|
6354
|
+
"text": "string"
|
|
6355
|
+
},
|
|
6356
|
+
"privacy": "private",
|
|
6357
|
+
"default": "''",
|
|
6358
|
+
"description": "The `validityFeedback` the platform was last told about."
|
|
6359
|
+
},
|
|
6360
|
+
{
|
|
6361
|
+
"kind": "method",
|
|
6362
|
+
"name": "applyValidity",
|
|
6363
|
+
"privacy": "private",
|
|
6364
|
+
"return": {
|
|
6365
|
+
"type": {
|
|
6366
|
+
"text": "void"
|
|
6367
|
+
}
|
|
6368
|
+
},
|
|
6369
|
+
"description": "Hands the platform the control's own verdict with any custom error on top,\nanchored where focus can go."
|
|
6370
|
+
},
|
|
6371
|
+
{
|
|
6372
|
+
"kind": "method",
|
|
6373
|
+
"name": "validationAnchor",
|
|
6374
|
+
"privacy": "protected",
|
|
6375
|
+
"return": {
|
|
6376
|
+
"type": {
|
|
6377
|
+
"text": "HTMLElement | undefined"
|
|
6378
|
+
}
|
|
6379
|
+
},
|
|
6380
|
+
"parameters": [
|
|
6381
|
+
{
|
|
6382
|
+
"name": "anchor",
|
|
6383
|
+
"optional": true,
|
|
6384
|
+
"type": {
|
|
6385
|
+
"text": "HTMLElement"
|
|
6386
|
+
}
|
|
6387
|
+
}
|
|
6388
|
+
],
|
|
6389
|
+
"description": "Where the browser points its bubble: the anchor a control gave if focus\ncan go there, and its first tab stop otherwise.\n\nA group anchors on a part that holds its members and cannot take focus,\nand the platform then refuses the submission, logs that the control is\nnot focusable, and leaves the reader on the submit button."
|
|
6390
|
+
},
|
|
6391
|
+
{
|
|
6392
|
+
"kind": "field",
|
|
6393
|
+
"name": "validity",
|
|
6394
|
+
"type": {
|
|
6395
|
+
"text": "ValidityState"
|
|
6396
|
+
},
|
|
6397
|
+
"description": "Whether the control meets its constraints, and why not.",
|
|
6398
|
+
"readonly": true,
|
|
6399
|
+
"helix": {
|
|
6400
|
+
"references": [
|
|
6401
|
+
{
|
|
6402
|
+
"label": "ElementInternals.validity",
|
|
6403
|
+
"url": "https://developer.mozilla.org/docs/Web/API/ElementInternals/validity"
|
|
6404
|
+
}
|
|
6405
|
+
]
|
|
6406
|
+
}
|
|
6407
|
+
},
|
|
6408
|
+
{
|
|
6409
|
+
"kind": "field",
|
|
6410
|
+
"name": "validationMessage",
|
|
6411
|
+
"type": {
|
|
6412
|
+
"text": "string"
|
|
6413
|
+
},
|
|
6414
|
+
"description": "The message the browser would show for the control, or an empty string.",
|
|
6415
|
+
"readonly": true
|
|
6416
|
+
},
|
|
6417
|
+
{
|
|
6418
|
+
"kind": "field",
|
|
6419
|
+
"name": "willValidate",
|
|
6420
|
+
"type": {
|
|
6421
|
+
"text": "boolean"
|
|
6422
|
+
},
|
|
6423
|
+
"description": "Whether the control is checked when its form is submitted.",
|
|
6424
|
+
"readonly": true
|
|
6425
|
+
},
|
|
6426
|
+
{
|
|
6427
|
+
"kind": "method",
|
|
6428
|
+
"name": "checkValidity",
|
|
6429
|
+
"return": {
|
|
6430
|
+
"type": {
|
|
6431
|
+
"text": "boolean"
|
|
6432
|
+
}
|
|
6433
|
+
},
|
|
6434
|
+
"description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot."
|
|
6435
|
+
},
|
|
6436
|
+
{
|
|
6437
|
+
"kind": "method",
|
|
6438
|
+
"name": "reportValidity",
|
|
6439
|
+
"return": {
|
|
6440
|
+
"type": {
|
|
6441
|
+
"text": "boolean"
|
|
6442
|
+
}
|
|
6443
|
+
},
|
|
6444
|
+
"description": "Returns whether the control is valid, and when it is not, fires `invalid`\nand shows the browser's message at the control."
|
|
6445
|
+
},
|
|
6446
|
+
{
|
|
6447
|
+
"kind": "method",
|
|
6448
|
+
"name": "setCustomValidity",
|
|
6449
|
+
"return": {
|
|
6450
|
+
"type": {
|
|
6451
|
+
"text": "void"
|
|
6452
|
+
}
|
|
6453
|
+
},
|
|
6454
|
+
"parameters": [
|
|
6455
|
+
{
|
|
6456
|
+
"name": "message",
|
|
6457
|
+
"type": {
|
|
6458
|
+
"text": "string"
|
|
6459
|
+
}
|
|
6460
|
+
}
|
|
6461
|
+
],
|
|
6462
|
+
"description": "Marks the control invalid with `message`, or clears that with an empty\nstring, as on a native control. The form does not submit while it is set."
|
|
6463
|
+
},
|
|
6464
|
+
{
|
|
6465
|
+
"kind": "field",
|
|
6466
|
+
"name": "focusTarget",
|
|
5621
6467
|
"type": {
|
|
5622
|
-
"text": "
|
|
6468
|
+
"text": "HTMLElement | null"
|
|
5623
6469
|
},
|
|
5624
6470
|
"privacy": "protected",
|
|
5625
|
-
"
|
|
5626
|
-
"
|
|
6471
|
+
"description": "The element focus goes to: the control's first tab stop, or `null` where\nthere is none.\n\nRead through shadow roots and slots, so a group lands on the member that\nholds its tab stop, which is the chosen radio in a radio group.",
|
|
6472
|
+
"readonly": true
|
|
5627
6473
|
},
|
|
5628
6474
|
{
|
|
5629
6475
|
"kind": "method",
|
|
5630
|
-
"name": "
|
|
6476
|
+
"name": "focus",
|
|
5631
6477
|
"return": {
|
|
5632
6478
|
"type": {
|
|
5633
6479
|
"text": "void"
|
|
@@ -5635,56 +6481,113 @@
|
|
|
5635
6481
|
},
|
|
5636
6482
|
"parameters": [
|
|
5637
6483
|
{
|
|
5638
|
-
"name": "
|
|
6484
|
+
"name": "options",
|
|
6485
|
+
"optional": true,
|
|
5639
6486
|
"type": {
|
|
5640
|
-
"text": "
|
|
6487
|
+
"text": "FocusOptions"
|
|
5641
6488
|
}
|
|
5642
6489
|
}
|
|
5643
6490
|
],
|
|
5644
|
-
"description": "
|
|
6491
|
+
"description": "Moves focus to the control, as focusing a native control does."
|
|
6492
|
+
},
|
|
6493
|
+
{
|
|
6494
|
+
"kind": "field",
|
|
6495
|
+
"name": "focusFromLabel",
|
|
6496
|
+
"privacy": "private",
|
|
6497
|
+
"readonly": true,
|
|
6498
|
+
"description": "Focuses the control when its `<label>` is pressed.\n\nThe label sends the host a click of the browser's own after trying to\nfocus it, and a host that is not focusable takes nothing from that try.\nOnly a click that starts at the host and that the browser sent: one from\ninside has landed where it meant to, and `click()` from a script does not\nfocus a native control either."
|
|
6499
|
+
},
|
|
6500
|
+
{
|
|
6501
|
+
"kind": "field",
|
|
6502
|
+
"name": "refreshAnchor",
|
|
6503
|
+
"privacy": "private",
|
|
6504
|
+
"readonly": true,
|
|
6505
|
+
"description": "Re-anchors the verdict as the form checks it, because the control's\nmembers may have rendered since it last reported, and the anchor read then\nwas the best there was."
|
|
5645
6506
|
},
|
|
5646
6507
|
{
|
|
5647
6508
|
"kind": "method",
|
|
5648
|
-
"name": "
|
|
6509
|
+
"name": "submitImplicitly",
|
|
6510
|
+
"privacy": "protected",
|
|
5649
6511
|
"return": {
|
|
5650
6512
|
"type": {
|
|
5651
6513
|
"text": "void"
|
|
5652
6514
|
}
|
|
5653
6515
|
},
|
|
5654
|
-
"description": "
|
|
6516
|
+
"description": "Submits the form the way pressing Enter in a native text field does.\n\nThe control's own input is in a shadow root and has no form owner, so the\nplatform never runs implicit submission for it. This runs it: the form's\ndefault button is activated, the first submit button in it, a Helix one\nincluded. With none, the form is submitted when it holds no more than one\nfield that counts against implicit submission, and nothing happens\notherwise.",
|
|
6517
|
+
"helix": {
|
|
6518
|
+
"references": [
|
|
6519
|
+
{
|
|
6520
|
+
"label": "implicit submission",
|
|
6521
|
+
"url": "https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#implicit-submission"
|
|
6522
|
+
}
|
|
6523
|
+
]
|
|
6524
|
+
}
|
|
5655
6525
|
},
|
|
5656
6526
|
{
|
|
5657
6527
|
"kind": "method",
|
|
5658
|
-
"name": "
|
|
6528
|
+
"name": "defaultButton",
|
|
5659
6529
|
"privacy": "protected",
|
|
6530
|
+
"static": true,
|
|
5660
6531
|
"return": {
|
|
5661
6532
|
"type": {
|
|
5662
|
-
"text": "
|
|
6533
|
+
"text": "Element | undefined"
|
|
5663
6534
|
}
|
|
5664
6535
|
},
|
|
5665
|
-
"
|
|
6536
|
+
"parameters": [
|
|
6537
|
+
{
|
|
6538
|
+
"name": "form",
|
|
6539
|
+
"type": {
|
|
6540
|
+
"text": "HTMLFormElement"
|
|
6541
|
+
}
|
|
6542
|
+
}
|
|
6543
|
+
],
|
|
6544
|
+
"description": "The form's default button, the first submit button in it, native or Helix."
|
|
5666
6545
|
},
|
|
5667
6546
|
{
|
|
5668
6547
|
"kind": "method",
|
|
5669
|
-
"name": "
|
|
6548
|
+
"name": "submitsOnEnter",
|
|
5670
6549
|
"privacy": "protected",
|
|
6550
|
+
"static": true,
|
|
5671
6551
|
"return": {
|
|
5672
6552
|
"type": {
|
|
5673
|
-
"text": "
|
|
6553
|
+
"text": "boolean"
|
|
5674
6554
|
}
|
|
5675
6555
|
},
|
|
5676
|
-
"
|
|
6556
|
+
"parameters": [
|
|
6557
|
+
{
|
|
6558
|
+
"name": "target",
|
|
6559
|
+
"type": {
|
|
6560
|
+
"text": "EventTarget | undefined"
|
|
6561
|
+
}
|
|
6562
|
+
},
|
|
6563
|
+
{
|
|
6564
|
+
"name": "form",
|
|
6565
|
+
"type": {
|
|
6566
|
+
"text": "HTMLFormElement"
|
|
6567
|
+
}
|
|
6568
|
+
}
|
|
6569
|
+
],
|
|
6570
|
+
"description": "Whether `target` is a native field of `form` that Enter submits it from."
|
|
5677
6571
|
},
|
|
5678
6572
|
{
|
|
5679
|
-
"kind": "
|
|
5680
|
-
"name": "
|
|
5681
|
-
"
|
|
5682
|
-
|
|
6573
|
+
"kind": "method",
|
|
6574
|
+
"name": "submits",
|
|
6575
|
+
"privacy": "protected",
|
|
6576
|
+
"static": true,
|
|
6577
|
+
"return": {
|
|
6578
|
+
"type": {
|
|
6579
|
+
"text": "boolean"
|
|
6580
|
+
}
|
|
5683
6581
|
},
|
|
5684
|
-
"
|
|
5685
|
-
|
|
5686
|
-
|
|
5687
|
-
|
|
6582
|
+
"parameters": [
|
|
6583
|
+
{
|
|
6584
|
+
"name": "element",
|
|
6585
|
+
"type": {
|
|
6586
|
+
"text": "Element"
|
|
6587
|
+
}
|
|
6588
|
+
}
|
|
6589
|
+
],
|
|
6590
|
+
"description": "Whether `element` is a submit button, native or Helix."
|
|
5688
6591
|
},
|
|
5689
6592
|
{
|
|
5690
6593
|
"kind": "field",
|
|
@@ -6416,6 +7319,22 @@
|
|
|
6416
7319
|
"module": "./controllers/keyboard-navigation-controller/keyboard-navigation-controller.js"
|
|
6417
7320
|
}
|
|
6418
7321
|
},
|
|
7322
|
+
{
|
|
7323
|
+
"kind": "js",
|
|
7324
|
+
"name": "Typeahead",
|
|
7325
|
+
"declaration": {
|
|
7326
|
+
"name": "Typeahead",
|
|
7327
|
+
"module": "./controllers/keyboard-navigation-controller/keyboard-navigation-controller.js"
|
|
7328
|
+
}
|
|
7329
|
+
},
|
|
7330
|
+
{
|
|
7331
|
+
"kind": "js",
|
|
7332
|
+
"name": "typesCharacter",
|
|
7333
|
+
"declaration": {
|
|
7334
|
+
"name": "typesCharacter",
|
|
7335
|
+
"module": "./controllers/keyboard-navigation-controller/keyboard-navigation-controller.js"
|
|
7336
|
+
}
|
|
7337
|
+
},
|
|
6419
7338
|
{
|
|
6420
7339
|
"kind": "js",
|
|
6421
7340
|
"name": "MediaSessionController",
|
|
@@ -6864,6 +7783,14 @@
|
|
|
6864
7783
|
"module": "./events/events.js"
|
|
6865
7784
|
}
|
|
6866
7785
|
},
|
|
7786
|
+
{
|
|
7787
|
+
"kind": "js",
|
|
7788
|
+
"name": "HelixCollapseEvent",
|
|
7789
|
+
"declaration": {
|
|
7790
|
+
"name": "HelixCollapseEvent",
|
|
7791
|
+
"module": "./events/events.js"
|
|
7792
|
+
}
|
|
7793
|
+
},
|
|
6867
7794
|
{
|
|
6868
7795
|
"kind": "js",
|
|
6869
7796
|
"name": "HelixCompleteEvent",
|
|
@@ -6928,6 +7855,14 @@
|
|
|
6928
7855
|
"module": "./events/events.js"
|
|
6929
7856
|
}
|
|
6930
7857
|
},
|
|
7858
|
+
{
|
|
7859
|
+
"kind": "js",
|
|
7860
|
+
"name": "HelixFilteredEvent",
|
|
7861
|
+
"declaration": {
|
|
7862
|
+
"name": "HelixFilteredEvent",
|
|
7863
|
+
"module": "./events/events.js"
|
|
7864
|
+
}
|
|
7865
|
+
},
|
|
6931
7866
|
{
|
|
6932
7867
|
"kind": "js",
|
|
6933
7868
|
"name": "HelixGraphFilterEvent",
|
|
@@ -7072,6 +8007,14 @@
|
|
|
7072
8007
|
"module": "./events/events.js"
|
|
7073
8008
|
}
|
|
7074
8009
|
},
|
|
8010
|
+
{
|
|
8011
|
+
"kind": "js",
|
|
8012
|
+
"name": "HelixPinEvent",
|
|
8013
|
+
"declaration": {
|
|
8014
|
+
"name": "HelixPinEvent",
|
|
8015
|
+
"module": "./events/events.js"
|
|
8016
|
+
}
|
|
8017
|
+
},
|
|
7075
8018
|
{
|
|
7076
8019
|
"kind": "js",
|
|
7077
8020
|
"name": "HelixPreviousEvent",
|
|
@@ -7120,6 +8063,22 @@
|
|
|
7120
8063
|
"module": "./events/events.js"
|
|
7121
8064
|
}
|
|
7122
8065
|
},
|
|
8066
|
+
{
|
|
8067
|
+
"kind": "js",
|
|
8068
|
+
"name": "HelixReorderedEvent",
|
|
8069
|
+
"declaration": {
|
|
8070
|
+
"name": "HelixReorderedEvent",
|
|
8071
|
+
"module": "./events/events.js"
|
|
8072
|
+
}
|
|
8073
|
+
},
|
|
8074
|
+
{
|
|
8075
|
+
"kind": "js",
|
|
8076
|
+
"name": "HelixResizedEvent",
|
|
8077
|
+
"declaration": {
|
|
8078
|
+
"name": "HelixResizedEvent",
|
|
8079
|
+
"module": "./events/events.js"
|
|
8080
|
+
}
|
|
8081
|
+
},
|
|
7123
8082
|
{
|
|
7124
8083
|
"kind": "js",
|
|
7125
8084
|
"name": "HelixResizeEvent",
|
|
@@ -7160,6 +8119,14 @@
|
|
|
7160
8119
|
"module": "./events/events.js"
|
|
7161
8120
|
}
|
|
7162
8121
|
},
|
|
8122
|
+
{
|
|
8123
|
+
"kind": "js",
|
|
8124
|
+
"name": "HelixSelectedEvent",
|
|
8125
|
+
"declaration": {
|
|
8126
|
+
"name": "HelixSelectedEvent",
|
|
8127
|
+
"module": "./events/events.js"
|
|
8128
|
+
}
|
|
8129
|
+
},
|
|
7163
8130
|
{
|
|
7164
8131
|
"kind": "js",
|
|
7165
8132
|
"name": "HelixSendEvent",
|
|
@@ -7184,6 +8151,14 @@
|
|
|
7184
8151
|
"module": "./events/events.js"
|
|
7185
8152
|
}
|
|
7186
8153
|
},
|
|
8154
|
+
{
|
|
8155
|
+
"kind": "js",
|
|
8156
|
+
"name": "HelixSortedEvent",
|
|
8157
|
+
"declaration": {
|
|
8158
|
+
"name": "HelixSortedEvent",
|
|
8159
|
+
"module": "./events/events.js"
|
|
8160
|
+
}
|
|
8161
|
+
},
|
|
7187
8162
|
{
|
|
7188
8163
|
"kind": "js",
|
|
7189
8164
|
"name": "HelixTourAskEvent",
|
|
@@ -8040,6 +9015,14 @@
|
|
|
8040
9015
|
"module": "./utils/read-color/read-color.js"
|
|
8041
9016
|
}
|
|
8042
9017
|
},
|
|
9018
|
+
{
|
|
9019
|
+
"kind": "js",
|
|
9020
|
+
"name": "byRow",
|
|
9021
|
+
"declaration": {
|
|
9022
|
+
"name": "byRow",
|
|
9023
|
+
"module": "./utils/read-series/read-series.js"
|
|
9024
|
+
}
|
|
9025
|
+
},
|
|
8043
9026
|
{
|
|
8044
9027
|
"kind": "js",
|
|
8045
9028
|
"name": "Row",
|
|
@@ -8088,6 +9071,14 @@
|
|
|
8088
9071
|
"module": "./utils/read-series/read-series.js"
|
|
8089
9072
|
}
|
|
8090
9073
|
},
|
|
9074
|
+
{
|
|
9075
|
+
"kind": "js",
|
|
9076
|
+
"name": "unbroken",
|
|
9077
|
+
"declaration": {
|
|
9078
|
+
"name": "unbroken",
|
|
9079
|
+
"module": "./utils/read-series/read-series.js"
|
|
9080
|
+
}
|
|
9081
|
+
},
|
|
8091
9082
|
{
|
|
8092
9083
|
"kind": "js",
|
|
8093
9084
|
"name": "Relative",
|
|
@@ -8304,6 +9295,30 @@
|
|
|
8304
9295
|
"module": "./utils/scroll-item-into-view/scroll-item-into-view.js"
|
|
8305
9296
|
}
|
|
8306
9297
|
},
|
|
9298
|
+
{
|
|
9299
|
+
"kind": "js",
|
|
9300
|
+
"name": "lockScroll",
|
|
9301
|
+
"declaration": {
|
|
9302
|
+
"name": "lockScroll",
|
|
9303
|
+
"module": "./utils/scroll-lock/scroll-lock.js"
|
|
9304
|
+
}
|
|
9305
|
+
},
|
|
9306
|
+
{
|
|
9307
|
+
"kind": "js",
|
|
9308
|
+
"name": "scrollHolders",
|
|
9309
|
+
"declaration": {
|
|
9310
|
+
"name": "scrollHolders",
|
|
9311
|
+
"module": "./utils/scroll-lock/scroll-lock.js"
|
|
9312
|
+
}
|
|
9313
|
+
},
|
|
9314
|
+
{
|
|
9315
|
+
"kind": "js",
|
|
9316
|
+
"name": "unlockScroll",
|
|
9317
|
+
"declaration": {
|
|
9318
|
+
"name": "unlockScroll",
|
|
9319
|
+
"module": "./utils/scroll-lock/scroll-lock.js"
|
|
9320
|
+
}
|
|
9321
|
+
},
|
|
8307
9322
|
{
|
|
8308
9323
|
"kind": "js",
|
|
8309
9324
|
"name": "slotFilled",
|
|
@@ -8688,6 +9703,14 @@
|
|
|
8688
9703
|
},
|
|
8689
9704
|
"description": "The chart's name, which starts the chart's text summary.\n\nAbsent falls back to the table's own caption, which is usually the right\nwords and is already written."
|
|
8690
9705
|
},
|
|
9706
|
+
{
|
|
9707
|
+
"kind": "field",
|
|
9708
|
+
"name": "locale",
|
|
9709
|
+
"type": {
|
|
9710
|
+
"text": "string"
|
|
9711
|
+
},
|
|
9712
|
+
"description": "The locale the chart's own numbers are written in: its axis, its\npercentages and its totals, such as `de` for `1.240` and `32 %`.\n\nAbsent uses the runtime's own. The table's cells are shown as the table\nwrites them, whatever this says."
|
|
9713
|
+
},
|
|
8691
9714
|
{
|
|
8692
9715
|
"kind": "field",
|
|
8693
9716
|
"name": "series",
|
|
@@ -8802,6 +9825,16 @@
|
|
|
8802
9825
|
"description": "The chart's name, which starts the chart's text summary.\n\nAbsent falls back to the table's own caption, which is usually the right\nwords and is already written.",
|
|
8803
9826
|
"attribute": "label"
|
|
8804
9827
|
},
|
|
9828
|
+
{
|
|
9829
|
+
"kind": "field",
|
|
9830
|
+
"name": "locale",
|
|
9831
|
+
"type": {
|
|
9832
|
+
"text": "string"
|
|
9833
|
+
},
|
|
9834
|
+
"default": "''",
|
|
9835
|
+
"description": "The locale the chart's own numbers are written in: its axis, its\npercentages and its totals, such as `de` for `1.240` and `32 %`.\n\nAbsent uses the runtime's own. The table's cells are shown as the table\nwrites them, whatever this says.",
|
|
9836
|
+
"attribute": "locale"
|
|
9837
|
+
},
|
|
8805
9838
|
{
|
|
8806
9839
|
"kind": "field",
|
|
8807
9840
|
"name": "series",
|
|
@@ -8884,6 +9917,15 @@
|
|
|
8884
9917
|
"default": "''",
|
|
8885
9918
|
"description": "The chart's name, which starts the chart's text summary.\n\nAbsent falls back to the table's own caption, which is usually the right\nwords and is already written.",
|
|
8886
9919
|
"fieldName": "label"
|
|
9920
|
+
},
|
|
9921
|
+
{
|
|
9922
|
+
"name": "locale",
|
|
9923
|
+
"type": {
|
|
9924
|
+
"text": "string"
|
|
9925
|
+
},
|
|
9926
|
+
"default": "''",
|
|
9927
|
+
"description": "The locale the chart's own numbers are written in: its axis, its\npercentages and its totals, such as `de` for `1.240` and `32 %`.\n\nAbsent uses the runtime's own. The table's cells are shown as the table\nwrites them, whatever this says.",
|
|
9928
|
+
"fieldName": "locale"
|
|
8887
9929
|
}
|
|
8888
9930
|
],
|
|
8889
9931
|
"parameters": [
|
|
@@ -9003,9 +10045,16 @@
|
|
|
9003
10045
|
"type": {
|
|
9004
10046
|
"text": "boolean"
|
|
9005
10047
|
}
|
|
10048
|
+
},
|
|
10049
|
+
{
|
|
10050
|
+
"name": "cell",
|
|
10051
|
+
"optional": true,
|
|
10052
|
+
"type": {
|
|
10053
|
+
"text": "'cell' | 'gridcell'"
|
|
10054
|
+
}
|
|
9006
10055
|
}
|
|
9007
10056
|
],
|
|
9008
|
-
"description": "The status line, or nothing where the collection has content to show.\n\nRendered by the component wherever its rows would be."
|
|
10057
|
+
"description": "The status line, or nothing where the collection has content to show.\n\nRendered by the component wherever its rows would be. `cell` makes the line\na row holding one cell of that role, for a table or a grid, whose children\nmay only be rows."
|
|
9009
10058
|
},
|
|
9010
10059
|
{
|
|
9011
10060
|
"kind": "method",
|
|
@@ -9186,6 +10235,13 @@
|
|
|
9186
10235
|
"type": {
|
|
9187
10236
|
"text": "boolean"
|
|
9188
10237
|
}
|
|
10238
|
+
},
|
|
10239
|
+
{
|
|
10240
|
+
"name": "cell",
|
|
10241
|
+
"optional": true,
|
|
10242
|
+
"type": {
|
|
10243
|
+
"text": "'cell' | 'gridcell'"
|
|
10244
|
+
}
|
|
9189
10245
|
}
|
|
9190
10246
|
],
|
|
9191
10247
|
"description": "The status line, or nothing where there is content to show.\n\nLoading wins over empty. A collection that has not answered yet is not\nempty, and saying so is the most common version of this fault: the reader\nis told there is nothing a moment before there is something."
|
|
@@ -9792,6 +10848,16 @@
|
|
|
9792
10848
|
"default": "undefined",
|
|
9793
10849
|
"description": "The state, whoever set it, and `undefined` until somebody has.\n\nPrefixed, and it has to be. These mixins compose onto one prototype\nchain, `Select` takes this one and `MixinControllerValue` together, and\nTypeScript's `private` is a compile-time fiction: two mixins with a field\ncalled `state` share one property on the instance, and the second one\nsilently overwrites the first. Measured, as a select whose `value` came\nback holding its `open` boolean.\n\nOne field and not two. Writing always applies, the way a native control\ndoes when a script assigns to it."
|
|
9794
10850
|
},
|
|
10851
|
+
{
|
|
10852
|
+
"kind": "field",
|
|
10853
|
+
"name": "announcedOpen",
|
|
10854
|
+
"type": {
|
|
10855
|
+
"text": "boolean | undefined"
|
|
10856
|
+
},
|
|
10857
|
+
"privacy": "private",
|
|
10858
|
+
"default": "undefined",
|
|
10859
|
+
"description": "The state `toggle` last reported, and `undefined` before the first update.\n\n`requestOpen` announces at once. An assignment to `open` announces here,\nonce it has rendered, so a consumer binding `toggle` hears every change\nthat a `close` listener on a dialog hears. The first update sets it and\nannounces nothing, because a seed is where the element starts."
|
|
10860
|
+
},
|
|
9795
10861
|
{
|
|
9796
10862
|
"kind": "method",
|
|
9797
10863
|
"name": "requestOpen",
|
|
@@ -9840,6 +10906,14 @@
|
|
|
9840
10906
|
"description": "Requests the opposite of the current state."
|
|
9841
10907
|
}
|
|
9842
10908
|
],
|
|
10909
|
+
"events": [
|
|
10910
|
+
{
|
|
10911
|
+
"name": "toggle",
|
|
10912
|
+
"type": {
|
|
10913
|
+
"text": "ToggleEvent"
|
|
10914
|
+
}
|
|
10915
|
+
}
|
|
10916
|
+
],
|
|
9843
10917
|
"attributes": [
|
|
9844
10918
|
{
|
|
9845
10919
|
"name": "default-open",
|
|
@@ -10218,6 +11292,36 @@
|
|
|
10218
11292
|
}
|
|
10219
11293
|
},
|
|
10220
11294
|
"description": "Fires `helix-dismiss`, and returns `false` if a listener cancels it."
|
|
11295
|
+
},
|
|
11296
|
+
{
|
|
11297
|
+
"kind": "method",
|
|
11298
|
+
"name": "neighbors",
|
|
11299
|
+
"privacy": "private",
|
|
11300
|
+
"return": {
|
|
11301
|
+
"type": {
|
|
11302
|
+
"text": "HTMLElement[]"
|
|
11303
|
+
}
|
|
11304
|
+
},
|
|
11305
|
+
"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."
|
|
11306
|
+
},
|
|
11307
|
+
{
|
|
11308
|
+
"kind": "method",
|
|
11309
|
+
"name": "keepFocus",
|
|
11310
|
+
"privacy": "private",
|
|
11311
|
+
"return": {
|
|
11312
|
+
"type": {
|
|
11313
|
+
"text": "void"
|
|
11314
|
+
}
|
|
11315
|
+
},
|
|
11316
|
+
"parameters": [
|
|
11317
|
+
{
|
|
11318
|
+
"name": "neighbors",
|
|
11319
|
+
"type": {
|
|
11320
|
+
"text": "HTMLElement[]"
|
|
11321
|
+
}
|
|
11322
|
+
}
|
|
11323
|
+
],
|
|
11324
|
+
"description": "Moves focus to a neighbor's dismiss control if removing this element dropped it."
|
|
10221
11325
|
}
|
|
10222
11326
|
],
|
|
10223
11327
|
"attributes": [
|
|
@@ -10519,13 +11623,46 @@
|
|
|
10519
11623
|
},
|
|
10520
11624
|
{
|
|
10521
11625
|
"kind": "field",
|
|
10522
|
-
"name": "labeled",
|
|
10523
|
-
"type": {
|
|
10524
|
-
"text": "boolean"
|
|
11626
|
+
"name": "labeled",
|
|
11627
|
+
"type": {
|
|
11628
|
+
"text": "boolean"
|
|
11629
|
+
},
|
|
11630
|
+
"privacy": "protected",
|
|
11631
|
+
"description": "Whether a label is drawn at all, in either shape.",
|
|
11632
|
+
"readonly": true
|
|
11633
|
+
},
|
|
11634
|
+
{
|
|
11635
|
+
"kind": "field",
|
|
11636
|
+
"name": "filledSlots",
|
|
11637
|
+
"privacy": "private",
|
|
11638
|
+
"default": "new Set<string>()",
|
|
11639
|
+
"description": "The named slots a consumer has put content in, among `label` and `hint`.\n\n**Asked of the slot, because the property cannot answer.** A label or a\nhint is drawn only when there is something in it, and slotted content\nchanges no property, so a field given `<span slot=\"label\">` and no\n`label` drew no label at all and its control went unnamed. With nothing\nelse to show, each renders a bare slot, which takes no box, and the slot\nreports what arrives in it."
|
|
11640
|
+
},
|
|
11641
|
+
{
|
|
11642
|
+
"kind": "field",
|
|
11643
|
+
"name": "noteSlotted",
|
|
11644
|
+
"privacy": "private",
|
|
11645
|
+
"readonly": true,
|
|
11646
|
+
"description": "Records whether the `label` or `hint` slot has content, which moves it\ninto its part.\n\nOn the render root, so the binding leaves the served markup as it was."
|
|
11647
|
+
},
|
|
11648
|
+
{
|
|
11649
|
+
"kind": "method",
|
|
11650
|
+
"name": "bareSlot",
|
|
11651
|
+
"privacy": "private",
|
|
11652
|
+
"return": {
|
|
11653
|
+
"type": {
|
|
11654
|
+
"text": "TemplateResult"
|
|
11655
|
+
}
|
|
10525
11656
|
},
|
|
10526
|
-
"
|
|
10527
|
-
|
|
10528
|
-
|
|
11657
|
+
"parameters": [
|
|
11658
|
+
{
|
|
11659
|
+
"name": "name",
|
|
11660
|
+
"type": {
|
|
11661
|
+
"text": "'hint' | 'label'"
|
|
11662
|
+
}
|
|
11663
|
+
}
|
|
11664
|
+
],
|
|
11665
|
+
"description": "A slot with no part around it, for content that may arrive."
|
|
10529
11666
|
},
|
|
10530
11667
|
{
|
|
10531
11668
|
"kind": "field",
|
|
@@ -10740,8 +11877,7 @@
|
|
|
10740
11877
|
"type": {
|
|
10741
11878
|
"text": "string | null"
|
|
10742
11879
|
},
|
|
10743
|
-
"default": "null"
|
|
10744
|
-
"fieldName": "namedBy"
|
|
11880
|
+
"default": "null"
|
|
10745
11881
|
},
|
|
10746
11882
|
{
|
|
10747
11883
|
"name": "feedback",
|
|
@@ -10880,13 +12016,31 @@
|
|
|
10880
12016
|
}
|
|
10881
12017
|
],
|
|
10882
12018
|
"description": "Requests a new value. While `readOnly` is set, nothing changes and it\nreturns `false`."
|
|
12019
|
+
},
|
|
12020
|
+
{
|
|
12021
|
+
"kind": "method",
|
|
12022
|
+
"name": "requestOpen",
|
|
12023
|
+
"return": {
|
|
12024
|
+
"type": {
|
|
12025
|
+
"text": "boolean"
|
|
12026
|
+
}
|
|
12027
|
+
},
|
|
12028
|
+
"parameters": [
|
|
12029
|
+
{
|
|
12030
|
+
"name": "next",
|
|
12031
|
+
"type": {
|
|
12032
|
+
"text": "boolean"
|
|
12033
|
+
}
|
|
12034
|
+
}
|
|
12035
|
+
],
|
|
12036
|
+
"description": "Requests the panel open or closed. While `readOnly` is set, it does not\nopen, and it returns `false`."
|
|
10883
12037
|
}
|
|
10884
12038
|
],
|
|
10885
12039
|
"helix": {}
|
|
10886
12040
|
},
|
|
10887
12041
|
{
|
|
10888
12042
|
"kind": "mixin",
|
|
10889
|
-
"description": "Grafts the typing half of a picker field: it opens on arrival, holds the\nvalue while the caret is in it, and refuses while read-only.\n\n**Over `MixinPickerField` and not part of it, because Color Input takes the\none and not the other.** Date Input and Time Input show a rendering while\nnobody is in the field, `4 August 2026` and `2:30 PM`, and the value itself\nwhile somebody is, because `Intl` formats and does not parse and a document\nbeing edited must not be a rendering of something else. That split needs to\nknow when the caret is in the field, which is `editing`; and a reader who\nreaches such a field is choosing, so arriving opens the picker. A color has\nneither: `#ff0000` is what is typed and what is shown, and a reader who has\nthe hex pastes it and never opens anything. `readOnly`
|
|
12043
|
+
"description": "Grafts the typing half of a picker field: it opens on arrival, holds the\nvalue while the caret is in it, and refuses while read-only.\n\n**Over `MixinPickerField` and not part of it, because Color Input takes the\none and not the other.** Date Input and Time Input show a rendering while\nnobody is in the field, `4 August 2026` and `2:30 PM`, and the value itself\nwhile somebody is, because `Intl` formats and does not parse and a document\nbeing edited must not be a rendering of something else. That split needs to\nknow when the caret is in the field, which is `editing`; and a reader who\nreaches such a field is choosing, so arriving opens the picker. A color has\nneither: `#ff0000` is what is typed and what is shown, and a reader who has\nthe hex pastes it and never opens anything. `readOnly` comes along here for\nthe two that take this mixin; Color Input declares its own, the same\nproperty refusing the same two requests.",
|
|
10890
12044
|
"name": "MixinPickerEditing",
|
|
10891
12045
|
"members": [
|
|
10892
12046
|
{
|
|
@@ -10928,6 +12082,24 @@
|
|
|
10928
12082
|
],
|
|
10929
12083
|
"description": "Requests a new value. While `readOnly` is set, nothing changes and it\nreturns `false`."
|
|
10930
12084
|
},
|
|
12085
|
+
{
|
|
12086
|
+
"kind": "method",
|
|
12087
|
+
"name": "requestOpen",
|
|
12088
|
+
"return": {
|
|
12089
|
+
"type": {
|
|
12090
|
+
"text": "boolean"
|
|
12091
|
+
}
|
|
12092
|
+
},
|
|
12093
|
+
"parameters": [
|
|
12094
|
+
{
|
|
12095
|
+
"name": "next",
|
|
12096
|
+
"type": {
|
|
12097
|
+
"text": "boolean"
|
|
12098
|
+
}
|
|
12099
|
+
}
|
|
12100
|
+
],
|
|
12101
|
+
"description": "Requests the panel open or closed. While `readOnly` is set, it does not\nopen, and it returns `false`.\n\nA read-only field opened its picker on focus and on its trigger, and\nthen refused every pick in it, so the panel offered choices that went\nnowhere. A native read-only `<input type=\"date\">` opens nothing."
|
|
12102
|
+
},
|
|
10931
12103
|
{
|
|
10932
12104
|
"kind": "field",
|
|
10933
12105
|
"name": "handleBlur",
|
|
@@ -11059,6 +12231,36 @@
|
|
|
11059
12231
|
],
|
|
11060
12232
|
"description": "Puts the caret in the field, as clicking its label does."
|
|
11061
12233
|
},
|
|
12234
|
+
{
|
|
12235
|
+
"kind": "field",
|
|
12236
|
+
"name": "handleCommit",
|
|
12237
|
+
"type": {
|
|
12238
|
+
"text": "(event: Event) => void"
|
|
12239
|
+
},
|
|
12240
|
+
"privacy": "protected",
|
|
12241
|
+
"readonly": true,
|
|
12242
|
+
"description": "The text control's own `change`, which a reader's edit ends with, said\nunder the host's name."
|
|
12243
|
+
},
|
|
12244
|
+
{
|
|
12245
|
+
"kind": "field",
|
|
12246
|
+
"name": "handleTriggerClick",
|
|
12247
|
+
"type": {
|
|
12248
|
+
"text": "() => void"
|
|
12249
|
+
},
|
|
12250
|
+
"privacy": "protected",
|
|
12251
|
+
"readonly": true,
|
|
12252
|
+
"description": "The trigger's press: opens the panel with focus in the picker, or closes\nit."
|
|
12253
|
+
},
|
|
12254
|
+
{
|
|
12255
|
+
"kind": "field",
|
|
12256
|
+
"name": "handleKeypress",
|
|
12257
|
+
"type": {
|
|
12258
|
+
"text": "(event: KeyboardEvent) => void"
|
|
12259
|
+
},
|
|
12260
|
+
"privacy": "protected",
|
|
12261
|
+
"readonly": true,
|
|
12262
|
+
"description": "Enter in the text submits the form, as it does in a native text field."
|
|
12263
|
+
},
|
|
11062
12264
|
{
|
|
11063
12265
|
"kind": "field",
|
|
11064
12266
|
"name": "handleKeydown",
|
|
@@ -11067,7 +12269,7 @@
|
|
|
11067
12269
|
},
|
|
11068
12270
|
"privacy": "protected",
|
|
11069
12271
|
"readonly": true,
|
|
11070
|
-
"description": "Escape shuts the panel without moving the value."
|
|
12272
|
+
"description": "Escape shuts the panel without moving the value, Tab out of the text shuts\na panel the reader is passing, and ArrowDown in the text moves into it."
|
|
11071
12273
|
},
|
|
11072
12274
|
{
|
|
11073
12275
|
"kind": "field",
|
|
@@ -11098,6 +12300,25 @@
|
|
|
11098
12300
|
],
|
|
11099
12301
|
"description": "Told the panel has been placed, and how wide the window leaves it room to\nbe, in pixels.\n\nNothing, unless a family fits what its panel holds to the room it has."
|
|
11100
12302
|
},
|
|
12303
|
+
{
|
|
12304
|
+
"kind": "method",
|
|
12305
|
+
"name": "requestPicked",
|
|
12306
|
+
"privacy": "protected",
|
|
12307
|
+
"return": {
|
|
12308
|
+
"type": {
|
|
12309
|
+
"text": "boolean"
|
|
12310
|
+
}
|
|
12311
|
+
},
|
|
12312
|
+
"parameters": [
|
|
12313
|
+
{
|
|
12314
|
+
"name": "next",
|
|
12315
|
+
"type": {
|
|
12316
|
+
"text": "string"
|
|
12317
|
+
}
|
|
12318
|
+
}
|
|
12319
|
+
],
|
|
12320
|
+
"description": "Takes a value the reader picked in the panel, and says it is settled.\n\nReturns whether it was taken. A family whose typing announces `input`\nalone sends `change` from here for a pick, since a pick is a finished\nchoice."
|
|
12321
|
+
},
|
|
11101
12322
|
{
|
|
11102
12323
|
"kind": "method",
|
|
11103
12324
|
"name": "restore",
|
|
@@ -11156,7 +12377,7 @@
|
|
|
11156
12377
|
},
|
|
11157
12378
|
{
|
|
11158
12379
|
"kind": "mixin",
|
|
11159
|
-
"description": "Grafts a floating picker onto a text field, and the protocol between them.\n\n**Three families are this shape and were three copies of it.** Date Input,\nTime Input and Color Input each render a text control, a trigger and a\n`popover=\"manual\"` surface holding a picker that already exists on its own,\nand each owed the same wiring: the panel that floats the surface against the\nfield, the Escape that shuts it and hands the caret back, the restore that\nputs the control back where a refusal left the value, and the sync that\nreports the value and a verdict the platform cannot reach. Measured on the\ndiff that made the lift, 14 Sep 2026, comments counted: 223 lines left Date\nInput and 32 came back, 185 left Time Input and 32 came back, 87 left\nColor Input and 11 came back.\n\n**What it does not own is the picker, the typing or the value's shape.**\nWhich element floats in the surface, what a keystroke means, what the field\nshows when idle and what is wrong with a value are each the family's, which\nis why `display` and `validate` are seams here and the template stays where\nit was. A family renders `field`, `control`, `trigger` and `surface`; this\nreads them.\n\n**The parts this reads are the host's, so the name is a parameter.** A\nliteral `[part=\"control\"]` here would be a lookup nothing in this file\nrenders, which is the fault `helix component`'s `selectors` exists to catch\nand would rightly report. `MixinField.reportRequired` takes its anchor the\nsame way, and for the same reason: a mixin reads a part out of whatever host\napplies it.\n\n**Opening on focus, `readOnly` and the idle rendering are not here.** They\nare `MixinPickerEditing`'s, because Color Input
|
|
12380
|
+
"description": "Grafts a floating picker onto a text field, and the protocol between them.\n\n**Three families are this shape and were three copies of it.** Date Input,\nTime Input and Color Input each render a text control, a trigger and a\n`popover=\"manual\"` surface holding a picker that already exists on its own,\nand each owed the same wiring: the panel that floats the surface against the\nfield, the Escape that shuts it and hands the caret back, the restore that\nputs the control back where a refusal left the value, and the sync that\nreports the value and a verdict the platform cannot reach. Measured on the\ndiff that made the lift, 14 Sep 2026, comments counted: 223 lines left Date\nInput and 32 came back, 185 left Time Input and 32 came back, 87 left\nColor Input and 11 came back.\n\n**What it does not own is the picker, the typing or the value's shape.**\nWhich element floats in the surface, what a keystroke means, what the field\nshows when idle and what is wrong with a value are each the family's, which\nis why `display` and `validate` are seams here and the template stays where\nit was. A family renders `field`, `control`, `trigger` and `surface`; this\nreads them.\n\n**The parts this reads are the host's, so the name is a parameter.** A\nliteral `[part=\"control\"]` here would be a lookup nothing in this file\nrenders, which is the fault `helix component`'s `selectors` exists to catch\nand would rightly report. `MixinField.reportRequired` takes its anchor the\nsame way, and for the same reason: a mixin reads a part out of whatever host\napplies it.\n\n**Opening on focus, `readOnly` and the idle rendering are not here.** They\nare `MixinPickerEditing`'s, because Color Input takes neither of the first\nand last: a hex is pasted and read at a glance, so its field neither renders\nnor opens on arrival. Color Input declares its own `readOnly`.\n\n**Three things the two typed families share stay with them.** `renderTrigger`\ndiffers only by its icon and would still be the wrong thing to lift: a part a\nmixin renders belongs to every host that applies it, which is how\n`helix component`'s `parts` reads a chain, so `trigger-icon` would be\ncredited to Color Input, whose trigger is a swatch and documents no such\npart. `renderTag` names its part after the family, `date` or `time`, and\nwrites the label on the remove control differently in each. `valueAsDate`\nand `valueAsNumber` are public, convert a different way, and carry a\ndifferent note onto each family's page, which a mixin could only carry as\none.\n\n**Four more families look like this and are not.** Select has no text to\nhand the caret to: its panel hangs off the trigger and dismissal refocuses\nthat. Combobox has the text and a different agreement with it: a press\nanywhere in the field is inside, the gap is four, Escape closes without the\n`returning` flag because nothing there opens on arrival, and the control is\nreconciled against a completion rather than restored to a value. Input and\nTextarea open nothing, and their `readOnly` is the native attribute rather\nthan a gate on `requestValue`, so a programmatic change still lands. What\nthose two share with this is `focus()` and the platform's verdict copied in\n`sync`, which is not a protocol.",
|
|
11160
12381
|
"name": "MixinPickerField",
|
|
11161
12382
|
"members": [
|
|
11162
12383
|
{
|
|
@@ -11273,7 +12494,71 @@
|
|
|
11273
12494
|
"name": "handleKeydown",
|
|
11274
12495
|
"privacy": "protected",
|
|
11275
12496
|
"readonly": true,
|
|
11276
|
-
"description": "Escape shuts the panel without moving the value."
|
|
12497
|
+
"description": "Escape shuts the panel without moving the value, Tab out of the text\nshuts a panel the reader is passing, and ArrowDown in the text moves\ninto it.\n\n**Tab is for a reader moving through a form.** The panel opens when the\ntext is reached, which is `MixinPickerEditing`'s, and left open it added\nits own controls to the Tab order: a reader passing a Date Input pressed\nTab five times for one field. Leaving the text by Tab closes it, so the\npanel is reached by its trigger, which moves focus into it."
|
|
12498
|
+
},
|
|
12499
|
+
{
|
|
12500
|
+
"kind": "field",
|
|
12501
|
+
"name": "handleSurfaceKeydown",
|
|
12502
|
+
"privacy": "private",
|
|
12503
|
+
"readonly": true,
|
|
12504
|
+
"description": "Escape pressed inside the panel, which `handleKeydown` never hears.\n\nA family binds `handleKeydown` on the field, and the surface is the\nfield's sibling, so a key pressed in the grid or the list went past it to\nthe document, where the dismissal closed the panel and left focus on a\ncell that was no longer shown. Measured: focus fell to the body. Here the\nkey is taken on the host, and focus goes back to the text."
|
|
12505
|
+
},
|
|
12506
|
+
{
|
|
12507
|
+
"kind": "field",
|
|
12508
|
+
"name": "handleFocusOut",
|
|
12509
|
+
"privacy": "private",
|
|
12510
|
+
"readonly": true,
|
|
12511
|
+
"description": "Closes the panel when focus leaves the whole control.\n\nOnly for a move to somewhere else that can hold focus. Focus that goes\nnowhere, which is a press on the panel's own padding or a hidden cell\ngiving it up, has no `relatedTarget`, and closing then would shut the\npanel under a reader who pressed inside it."
|
|
12512
|
+
},
|
|
12513
|
+
{
|
|
12514
|
+
"kind": "field",
|
|
12515
|
+
"name": "handleCommit",
|
|
12516
|
+
"privacy": "protected",
|
|
12517
|
+
"readonly": true,
|
|
12518
|
+
"description": "The text control's own `change`, which a reader's edit ends with, said\nunder the host's name.\n\nA native `change` is not composed, so it stops at this shadow root. The\nfamilies whose typing announces `input` alone send this one when the\nreader is done, as `<input>` does."
|
|
12519
|
+
},
|
|
12520
|
+
{
|
|
12521
|
+
"kind": "field",
|
|
12522
|
+
"name": "fromTrigger",
|
|
12523
|
+
"type": {
|
|
12524
|
+
"text": "boolean"
|
|
12525
|
+
},
|
|
12526
|
+
"privacy": "private",
|
|
12527
|
+
"default": "false",
|
|
12528
|
+
"description": "Whether the trigger opened the panel, so focus moves into the picker."
|
|
12529
|
+
},
|
|
12530
|
+
{
|
|
12531
|
+
"kind": "field",
|
|
12532
|
+
"name": "handleKeypress",
|
|
12533
|
+
"privacy": "protected",
|
|
12534
|
+
"readonly": true,
|
|
12535
|
+
"description": "Enter in the text submits the form, as it does in a native text field.\n\nThe text is in a shadow root and has no form owner, so the platform\nnever runs implicit submission for it. On `keypress`, where the platform\nruns its own, so an Enter a family or a consumer prevented on `keydown`,\nsuch as one that adds a date in `multiple`, submits nothing."
|
|
12536
|
+
},
|
|
12537
|
+
{
|
|
12538
|
+
"kind": "field",
|
|
12539
|
+
"name": "handleTriggerClick",
|
|
12540
|
+
"privacy": "protected",
|
|
12541
|
+
"readonly": true,
|
|
12542
|
+
"description": "The trigger's press: opens the panel with focus in the picker, or closes\nit.\n\n**Focus moves only when the trigger opened it**, which is what the APG\ndate picker dialog does: the panel is a dialog, and opening one from a\nbutton takes focus into it. Measured before this: Enter on the trigger\nleft focus there, three Tab presses from the selected day. Focusing the\ntext opens the panel too, on the families that open on arrival, and\nmoving focus from there would take the caret from a reader who came to\ntype."
|
|
12543
|
+
},
|
|
12544
|
+
{
|
|
12545
|
+
"kind": "method",
|
|
12546
|
+
"name": "requestPicked",
|
|
12547
|
+
"privacy": "protected",
|
|
12548
|
+
"return": {
|
|
12549
|
+
"type": {
|
|
12550
|
+
"text": "boolean"
|
|
12551
|
+
}
|
|
12552
|
+
},
|
|
12553
|
+
"parameters": [
|
|
12554
|
+
{
|
|
12555
|
+
"name": "next",
|
|
12556
|
+
"type": {
|
|
12557
|
+
"text": "string"
|
|
12558
|
+
}
|
|
12559
|
+
}
|
|
12560
|
+
],
|
|
12561
|
+
"description": "Takes a value the reader picked in the panel, and says it is settled."
|
|
11277
12562
|
},
|
|
11278
12563
|
{
|
|
11279
12564
|
"kind": "field",
|
|
@@ -11294,7 +12579,7 @@
|
|
|
11294
12579
|
"text": "void"
|
|
11295
12580
|
}
|
|
11296
12581
|
},
|
|
11297
|
-
"description": "Puts the caret back in the field without the field reopening the panel."
|
|
12582
|
+
"description": "Puts the caret back in the field without the field reopening the panel.\n\nThe anchor rather than the text, which is the trigger where there is no\ntext: Color Input's swatch dropped focus to the body on Escape."
|
|
11298
12583
|
},
|
|
11299
12584
|
{
|
|
11300
12585
|
"kind": "method",
|
|
@@ -13629,7 +14914,7 @@
|
|
|
13629
14914
|
}
|
|
13630
14915
|
}
|
|
13631
14916
|
],
|
|
13632
|
-
"description": "What a pointer resting on a reading shows, as `Tooltip` pointed at a mark.\n\n**A chart does not draw its own tooltip, and the top layer is why.** `Tooltip`\nrenders `popover=\"manual\"` through `PopoverController`, so it clears every\nstacking context and every `overflow` on the page. A box drawn by the chart is\n`position: absolute` inside the plot and is confined to the chart's own\ncontext, so it is clipped by, or layered under, whatever sits beside the\nchart. Escaping that means reimplementing `PopoverController`, which is\n`Tooltip` with extra steps and a second copy of the hard part.\n\n**`for` was already the anchor and needed nothing added.** It resolves in the\ntree the tooltip sits in, and the mark is in the same shadow root, so a chart\nnames an element inside itself and `Tooltip` finds it. What the chart\nprovides is an invisible mark at the reading's point.\n\n**An HTML mark rather than the `<rect>` or `<circle>` already there.**\n`FloatingController` types its anchor as `HTMLElement` and an SVG element is\nnot one; and a slice's `<circle>` has the bounding box of the whole ring\nrather than of its arc, so anchoring to it would point at the ring's center\nfor every slice.\n\n**And the arrow now follows from placement rather than from a compass.** The\nchart says which side it prefers and `FloatingController` moves it if that\nside does not fit, which is how a slice at any bearing gets a bubble that\npoints at it. Four hard-coded sides could not express a bearing, which is what\nmade the donut's arrow miss its own ring.\n\n**It shows the table's text and not the chart's numbers.** `$128k` is what the\ncell says and `128000` is what the drawing measured. Every cell of the row is\nhere, including columns nothing was plotted from, because a note beside the\nfigures is most of the reason to want a tooltip.\n\n**Hidden from assistive technology, on purpose.** The table is the accessible\nrepresentation and the drawing is `aria-hidden`; a reader on a keyboard gets\nthe table, which they can reach, rather than a tooltip which they cannot."
|
|
14917
|
+
"description": "What a pointer resting on a reading shows, as `Tooltip` pointed at a mark.\n\n**A chart does not draw its own tooltip, and the top layer is why.** `Tooltip`\nrenders `popover=\"manual\"` through `PopoverController`, so it clears every\nstacking context and every `overflow` on the page. A box drawn by the chart is\n`position: absolute` inside the plot and is confined to the chart's own\ncontext, so it is clipped by, or layered under, whatever sits beside the\nchart. Escaping that means reimplementing `PopoverController`, which is\n`Tooltip` with extra steps and a second copy of the hard part.\n\n**`for` was already the anchor and needed nothing added.** It resolves in the\ntree the tooltip sits in, and the mark is in the same shadow root, so a chart\nnames an element inside itself and `Tooltip` finds it. What the chart\nprovides is an invisible mark at the reading's point.\n\n**An HTML mark rather than the `<rect>` or `<circle>` already there.**\n`FloatingController` types its anchor as `HTMLElement` and an SVG element is\nnot one; and a slice's `<circle>` has the bounding box of the whole ring\nrather than of its arc, so anchoring to it would point at the ring's center\nfor every slice.\n\n**And the arrow now follows from placement rather than from a compass.** The\nchart says which side it prefers and `FloatingController` moves it if that\nside does not fit, which is how a slice at any bearing gets a bubble that\npoints at it. Four hard-coded sides could not express a bearing, which is what\nmade the donut's arrow miss its own ring.\n\n**It shows the table's text and not the chart's numbers.** `$128k` is what the\ncell says and `128000` is what the drawing measured. Every cell of the row is\nhere, including columns nothing was plotted from, because a note beside the\nfigures is most of the reason to want a tooltip.\n\n**Hidden from assistive technology, on purpose.** The table is the accessible\nrepresentation and the drawing is `aria-hidden`; a reader on a keyboard gets\nthe table, which they can reach, rather than a tooltip which they cannot.\nThe mark and the bubble carry `aria-hidden` themselves, so they stay hidden\nin a chart whose plot also holds something a reader should hear, such as\nthe middle of a donut."
|
|
13633
14918
|
}
|
|
13634
14919
|
],
|
|
13635
14920
|
"exports": [
|
|
@@ -14368,7 +15653,49 @@
|
|
|
14368
15653
|
}
|
|
14369
15654
|
}
|
|
14370
15655
|
],
|
|
14371
|
-
"description": "Reads a table as series, one per data column.\n\n**The table is the chart's accessible representation, not a fallback for\none.** Every chart here takes its numbers from real markup rather than from a\nproperty, so the page is readable with no script at all, sortable by anything\nthat sorts tables, and correct in a screen reader without a parallel\ndescription that has to be kept in step by hand. A `values` array would be\neasier to pass and would make the accessible version the thing nobody\nmaintains.\n\nThe shape is the ordinary one: a header row naming the series, a first column\nof row headers, and numbers in the rest. A single-column table has one series\nand takes its name from the caption, since a header row of one is usually\nabsent.\n\n`data-value` wins over the cell's text, because `$1.2k` is what a reader\nshould see and is not a number. `Number()` rather than `parseFloat`, because\nthe second reads `12abc` as 12: a value that is nearly a number is a mistake\nworth dropping rather than rounding off, and a dropped point is visible where\na silently truncated one is not."
|
|
15656
|
+
"description": "Reads a table as series, one per data column.\n\n**The table is the chart's accessible representation, not a fallback for\none.** Every chart here takes its numbers from real markup rather than from a\nproperty, so the page is readable with no script at all, sortable by anything\nthat sorts tables, and correct in a screen reader without a parallel\ndescription that has to be kept in step by hand. A `values` array would be\neasier to pass and would make the accessible version the thing nobody\nmaintains.\n\nThe shape is the ordinary one: a header row naming the series, a first column\nof row headers, and numbers in the rest. A single-column table has one series\nand takes its name from the caption, since a header row of one is usually\nabsent.\n\n`data-value` wins over the cell's text, because `$1.2k` is what a reader\nshould see and is not a number. `Number()` rather than `parseFloat`, because\nthe second reads `12abc` as 12: a value that is nearly a number is a mistake\nworth dropping rather than rounding off, and a dropped point is visible where\na silently truncated one is not.\n\n**A dropped point keeps its place.** Each point carries `at`, the row it was\nread from, and a chart draws it at that row's category. Counted by position\nin `points`, a blank in March slid April's reading under March's label, and a\nblank in the first column took a category off the axis for every series.\n`byRow` lays a series out one slot per row with the blanks left empty."
|
|
15657
|
+
},
|
|
15658
|
+
{
|
|
15659
|
+
"kind": "function",
|
|
15660
|
+
"name": "byRow",
|
|
15661
|
+
"return": {
|
|
15662
|
+
"type": {
|
|
15663
|
+
"text": "(SeriesPoint | undefined)[]"
|
|
15664
|
+
}
|
|
15665
|
+
},
|
|
15666
|
+
"parameters": [
|
|
15667
|
+
{
|
|
15668
|
+
"name": "series",
|
|
15669
|
+
"type": {
|
|
15670
|
+
"text": "Series | undefined"
|
|
15671
|
+
}
|
|
15672
|
+
},
|
|
15673
|
+
{
|
|
15674
|
+
"name": "rows",
|
|
15675
|
+
"type": {
|
|
15676
|
+
"text": "number"
|
|
15677
|
+
}
|
|
15678
|
+
}
|
|
15679
|
+
],
|
|
15680
|
+
"description": "A series laid out one slot per row, with nothing in a slot whose cell was\nblank or did not parse.\n\nThis is the shape a chart drawing categories wants: slot `i` is the reading at\nthe `i`th row, which is the label under it and the row the tooltip reads."
|
|
15681
|
+
},
|
|
15682
|
+
{
|
|
15683
|
+
"kind": "function",
|
|
15684
|
+
"name": "unbroken",
|
|
15685
|
+
"return": {
|
|
15686
|
+
"type": {
|
|
15687
|
+
"text": "SeriesPoint[][]"
|
|
15688
|
+
}
|
|
15689
|
+
},
|
|
15690
|
+
"parameters": [
|
|
15691
|
+
{
|
|
15692
|
+
"name": "series",
|
|
15693
|
+
"type": {
|
|
15694
|
+
"text": "Series"
|
|
15695
|
+
}
|
|
15696
|
+
}
|
|
15697
|
+
],
|
|
15698
|
+
"description": "A series cut into its unbroken runs, where a run ends at a row with no\nreading.\n\nA line drawn through a gap claims a value in the gap. Drawn as runs, the\nline stops at the last reading before a blank and starts again at the first\none after it."
|
|
14372
15699
|
},
|
|
14373
15700
|
{
|
|
14374
15701
|
"kind": "function",
|
|
@@ -14398,6 +15725,22 @@
|
|
|
14398
15725
|
"module": "src/utils/read-series/read-series.ts"
|
|
14399
15726
|
}
|
|
14400
15727
|
},
|
|
15728
|
+
{
|
|
15729
|
+
"kind": "js",
|
|
15730
|
+
"name": "byRow",
|
|
15731
|
+
"declaration": {
|
|
15732
|
+
"name": "byRow",
|
|
15733
|
+
"module": "src/utils/read-series/read-series.ts"
|
|
15734
|
+
}
|
|
15735
|
+
},
|
|
15736
|
+
{
|
|
15737
|
+
"kind": "js",
|
|
15738
|
+
"name": "unbroken",
|
|
15739
|
+
"declaration": {
|
|
15740
|
+
"name": "unbroken",
|
|
15741
|
+
"module": "src/utils/read-series/read-series.ts"
|
|
15742
|
+
}
|
|
15743
|
+
},
|
|
14401
15744
|
{
|
|
14402
15745
|
"kind": "js",
|
|
14403
15746
|
"name": "readRows",
|
|
@@ -14985,6 +16328,84 @@
|
|
|
14985
16328
|
}
|
|
14986
16329
|
]
|
|
14987
16330
|
},
|
|
16331
|
+
{
|
|
16332
|
+
"kind": "javascript-module",
|
|
16333
|
+
"path": "src/utils/scroll-lock/scroll-lock.ts",
|
|
16334
|
+
"declarations": [
|
|
16335
|
+
{
|
|
16336
|
+
"kind": "function",
|
|
16337
|
+
"name": "lockScroll",
|
|
16338
|
+
"return": {
|
|
16339
|
+
"type": {
|
|
16340
|
+
"text": "void"
|
|
16341
|
+
}
|
|
16342
|
+
},
|
|
16343
|
+
"parameters": [
|
|
16344
|
+
{
|
|
16345
|
+
"name": "holder",
|
|
16346
|
+
"type": {
|
|
16347
|
+
"text": "Element"
|
|
16348
|
+
}
|
|
16349
|
+
}
|
|
16350
|
+
],
|
|
16351
|
+
"description": "Stops the page behind a modal surface from scrolling.\n\n`showModal()` makes the page inert and leaves it scrollable, so a wheel over\nthe backdrop moves the page under the dialog. `overflow: hidden` on the root\nstops that, and `scrollbar-gutter: stable` keeps the space a classic\nscrollbar took, so the page does not shift sideways when it goes. What the\nroot carried before is put back when the last holder lets go.\n\nDialog, Drawer and Lightbox hold it, and Toast reads who does."
|
|
16352
|
+
},
|
|
16353
|
+
{
|
|
16354
|
+
"kind": "function",
|
|
16355
|
+
"name": "unlockScroll",
|
|
16356
|
+
"return": {
|
|
16357
|
+
"type": {
|
|
16358
|
+
"text": "void"
|
|
16359
|
+
}
|
|
16360
|
+
},
|
|
16361
|
+
"parameters": [
|
|
16362
|
+
{
|
|
16363
|
+
"name": "holder",
|
|
16364
|
+
"type": {
|
|
16365
|
+
"text": "Element"
|
|
16366
|
+
}
|
|
16367
|
+
}
|
|
16368
|
+
],
|
|
16369
|
+
"description": "Lets go of the page, and gives it back once nothing else holds it."
|
|
16370
|
+
},
|
|
16371
|
+
{
|
|
16372
|
+
"kind": "function",
|
|
16373
|
+
"name": "scrollHolders",
|
|
16374
|
+
"return": {
|
|
16375
|
+
"type": {
|
|
16376
|
+
"text": "Element[]"
|
|
16377
|
+
}
|
|
16378
|
+
},
|
|
16379
|
+
"description": "The surfaces holding the page still, in the order they took it."
|
|
16380
|
+
}
|
|
16381
|
+
],
|
|
16382
|
+
"exports": [
|
|
16383
|
+
{
|
|
16384
|
+
"kind": "js",
|
|
16385
|
+
"name": "lockScroll",
|
|
16386
|
+
"declaration": {
|
|
16387
|
+
"name": "lockScroll",
|
|
16388
|
+
"module": "src/utils/scroll-lock/scroll-lock.ts"
|
|
16389
|
+
}
|
|
16390
|
+
},
|
|
16391
|
+
{
|
|
16392
|
+
"kind": "js",
|
|
16393
|
+
"name": "unlockScroll",
|
|
16394
|
+
"declaration": {
|
|
16395
|
+
"name": "unlockScroll",
|
|
16396
|
+
"module": "src/utils/scroll-lock/scroll-lock.ts"
|
|
16397
|
+
}
|
|
16398
|
+
},
|
|
16399
|
+
{
|
|
16400
|
+
"kind": "js",
|
|
16401
|
+
"name": "scrollHolders",
|
|
16402
|
+
"declaration": {
|
|
16403
|
+
"name": "scrollHolders",
|
|
16404
|
+
"module": "src/utils/scroll-lock/scroll-lock.ts"
|
|
16405
|
+
}
|
|
16406
|
+
}
|
|
16407
|
+
]
|
|
16408
|
+
},
|
|
14988
16409
|
{
|
|
14989
16410
|
"kind": "javascript-module",
|
|
14990
16411
|
"path": "src/utils/slot-filled/slot-filled.ts",
|
|
@@ -15628,7 +17049,7 @@
|
|
|
15628
17049
|
{
|
|
15629
17050
|
"name": "source",
|
|
15630
17051
|
"type": {
|
|
15631
|
-
"text": "
|
|
17052
|
+
"text": "WrittenList"
|
|
15632
17053
|
}
|
|
15633
17054
|
}
|
|
15634
17055
|
],
|
|
@@ -15646,7 +17067,7 @@
|
|
|
15646
17067
|
{
|
|
15647
17068
|
"name": "source",
|
|
15648
17069
|
"type": {
|
|
15649
|
-
"text": "
|
|
17070
|
+
"text": "WrittenList"
|
|
15650
17071
|
}
|
|
15651
17072
|
}
|
|
15652
17073
|
],
|
|
@@ -15682,7 +17103,7 @@
|
|
|
15682
17103
|
"type": {
|
|
15683
17104
|
"text": "string"
|
|
15684
17105
|
},
|
|
15685
|
-
"default": "'0.
|
|
17106
|
+
"default": "'0.143.0'",
|
|
15686
17107
|
"description": "The version of the package this file ships in.\n\n**Written by `fusion/scripts/version.mjs`** wherever it writes the package's\n`package.json`, and stamped back into the repository beside it after a\nrelease, so the two never disagree; a spec beside this holds them to it.\nNothing else in the running code knows which release it is."
|
|
15687
17108
|
}
|
|
15688
17109
|
],
|
|
@@ -15700,6 +17121,6 @@
|
|
|
15700
17121
|
],
|
|
15701
17122
|
"helix": {
|
|
15702
17123
|
"package": "@fusion.dev/helix-core",
|
|
15703
|
-
"version": "0.
|
|
17124
|
+
"version": "0.143.0"
|
|
15704
17125
|
}
|
|
15705
17126
|
}
|