@fusion.dev/helix-headless 0.4.1 → 0.4.3
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 +39 -39
- package/dist/app-header/root/app-header-root.d.ts +8 -28
- package/dist/avatar/group/avatar-group.d.ts +5 -30
- package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +9 -28
- package/dist/chat/root/chat-root.d.ts +9 -28
- package/dist/color-picker/root/color-picker-root.d.ts +10 -28
- package/dist/combobox/root/combobox-root.d.ts +18 -60
- package/dist/copy-button/root/copy-button-root.d.ts +6 -21
- package/dist/data-table/root/data-table-root.d.ts +9 -32
- package/dist/date-input/root/date-input-root.d.ts +5 -21
- package/dist/date-picker/root/date-picker-root.d.ts +10 -35
- package/dist/dialog/root/dialog-root.d.ts +7 -29
- package/dist/donut-chart/root/donut-chart-root.d.ts +5 -25
- package/dist/file-input/root/file-input-root.d.ts +5 -22
- package/dist/heatmap/root/heatmap-root.d.ts +13 -36
- package/dist/image/root/image-root.d.ts +5 -22
- package/dist/input/root/input-root.d.ts +11 -29
- package/dist/kbd/root/kbd-root.d.ts +8 -26
- package/dist/legend/root/legend-root.d.ts +6 -24
- package/dist/listbox/root/listbox-root.d.ts +4 -26
- package/dist/megamenu/root/megamenu-root.d.ts +7 -39
- package/dist/meter/root/meter-root.d.ts +6 -24
- package/dist/number-input/root/number-input-root.d.ts +11 -20
- package/dist/outline/root/outline-root.d.ts +8 -27
- package/dist/pagination/root/pagination-root.d.ts +21 -54
- package/dist/pagination/summary/pagination-summary.d.ts +10 -31
- package/dist/progress/root/progress-root.d.ts +4 -21
- package/dist/rating/root/rating-root.d.ts +8 -31
- package/dist/slider/root/slider-root.d.ts +9 -32
- package/dist/splitter/root/splitter-root.d.ts +17 -85
- package/dist/steps/root/steps-root.d.ts +8 -26
- package/dist/steps/step/step.d.ts +11 -41
- package/dist/toast/item/toast-item.d.ts +6 -30
- package/dist/toggle/group/toggle-group.d.ts +7 -25
- package/dist/tooltip/root/tooltip-root.d.ts +14 -36
- package/dist/tour/root/tour-root.d.ts +6 -29
- package/dist/tree/item/tree-item.d.ts +13 -35
- package/dist/video/root/video-root.d.ts +12 -40
- package/dist/video-playlist/menu/video-playlist-menu.d.ts +3 -25
- package/dist/virtual-list/root/virtual-list-root.d.ts +5 -44
- package/package.json +17 -18
- package/{jsx.d.ts → types/jsx.d.ts} +724 -2537
- package/{vue.d.ts → types/vue.d.ts} +39 -39
- /package/{svelte.d.ts → types/svelte.d.ts} +0 -0
package/custom-elements.json
CHANGED
|
@@ -1255,7 +1255,7 @@
|
|
|
1255
1255
|
"declarations": [
|
|
1256
1256
|
{
|
|
1257
1257
|
"kind": "class",
|
|
1258
|
-
"description": "Tracks whether the page has scrolled and carries it as the custom state\n`scrolled`, so the styled tier can lift the bar
|
|
1258
|
+
"description": "Tracks whether the page has scrolled and carries it as the custom state\n`scrolled`, so the styled tier can lift the bar without a scroll handler of\nits own. It is read on connect rather than derived: a fresh load starts at\nthe top, which is what the server rendered, and a reload part-way down\ncorrects on hydration.\n\n**A custom state and never `data-scrolled`.** An attribute the element writes\nonto its own host is one the server did not send, so a hydrating framework\nreports a mismatch, intermittently: only when the reader reloads far enough\ndown the page. `ElementInternals.states` is not in the DOM, so there is\nnothing for a hydration pass to disagree with, and `:state(scrolled)` selects\nit.",
|
|
1259
1259
|
"name": "HelixHeadlessAppHeader",
|
|
1260
1260
|
"cssParts": [
|
|
1261
1261
|
{
|
|
@@ -1576,7 +1576,7 @@
|
|
|
1576
1576
|
},
|
|
1577
1577
|
{
|
|
1578
1578
|
"kind": "class",
|
|
1579
|
-
"description": "A part of `Avatar` rather than a family of its own: it arranges avatars and\nis about nothing else
|
|
1579
|
+
"description": "A part of `Avatar` rather than a family of its own: it arranges avatars and\nis about nothing else.\n\n**The overflow count is the group's, not a slot.** Which avatars are hidden\nis a fact the group works out from `max`, so a consumer writing the \"+3\"\nwould be writing a number that has to agree with a list they do not control.\n\n**Hidden, not removed.** Past `max` the extra avatars stay in the DOM and\nstop being shown, so nothing re-renders when `max` changes and the accessible\nname is still built from all of them.",
|
|
1580
1580
|
"name": "HelixHeadlessAvatarGroup",
|
|
1581
1581
|
"cssParts": [
|
|
1582
1582
|
{
|
|
@@ -4113,7 +4113,7 @@
|
|
|
4113
4113
|
"declarations": [
|
|
4114
4114
|
{
|
|
4115
4115
|
"kind": "class",
|
|
4116
|
-
"description": "The host is the landmark, so `aria-label` on it names the trail directly
|
|
4116
|
+
"description": "The host is the landmark, so `aria-label` on it names the trail directly. A\npage may hold more than one navigation, and landmarks are how a\nscreen-reader user chooses between them.\n\n`role=\"list\"` is set explicitly on the `<ol>` even though it is one:\n`list-style: none` strips list semantics in Safari, and a breadcrumb trail\nalways removes its markers.\n\nItems are slotted rather than wrapped, so they are `<ol>` children in the\nflat tree and each carries `role=\"listitem\"` itself.\n\n**The trail does not measure itself, and the overflow is markup.**",
|
|
4117
4117
|
"name": "HelixHeadlessBreadcrumbs",
|
|
4118
4118
|
"cssParts": [
|
|
4119
4119
|
{
|
|
@@ -7778,7 +7778,7 @@
|
|
|
7778
7778
|
"declarations": [
|
|
7779
7779
|
{
|
|
7780
7780
|
"kind": "class",
|
|
7781
|
-
"description": "**It has no opinion about where it sits.** A chat is asked for as a floating\nbutton, a page, a palette, a sidebar, a modal and an inline block, and none
|
|
7781
|
+
"description": "**It has no opinion about where it sits.** A chat is asked for as a floating\nbutton, a page, a palette, a sidebar, a modal and an inline block, and none\nof those is a variant of a conversation: they are containers, and the\ncontainers already exist. Nothing here is positioned, nothing has a backdrop,\nand nothing owns a trigger. If a form factor needs a mode on this element,\nthe split is wrong.\n\n**Scroll ownership is the behavior everything else depends on.** A transcript\nthat grows wants to stay at the bottom, except when the reader has scrolled\nup to read, where pinning is hostile. The rule: pin while the reader is\nwithin `threshold` of the bottom, and let go the moment they leave it.",
|
|
7782
7782
|
"name": "HelixHeadlessChat",
|
|
7783
7783
|
"cssParts": [
|
|
7784
7784
|
{
|
|
@@ -12631,7 +12631,7 @@
|
|
|
12631
12631
|
"declarations": [
|
|
12632
12632
|
{
|
|
12633
12633
|
"kind": "class",
|
|
12634
|
-
"description": "**The picker itself, with no field around it.** Color Input is this element
|
|
12634
|
+
"description": "**The picker itself, with no field around it.** Color Input is this element\nin a panel behind a text field; a settings pane or a toolbar wants the picker\nflat on the page with nothing to open.\n\n**The square is two real range inputs.** Saturation and brightness are each\nan `<input type=\"range\">`, laid over the square and made invisible, and the\nhandle is drawn from their values. The keyboard, the announcements and the\ntouch targets are the platform's, and there is no `role=\"application\"`.\n\n**The working model is HSB, and the value is derived from it.** The reverse\nloses colors: black is `brightness: 0`, whose hue and saturation are both\nundefined, so dragging to the bottom of the square and back would give gray\nwhere there had been red. A value arriving from outside is read into the\nmodel once.",
|
|
12635
12635
|
"name": "HelixHeadlessColorPicker",
|
|
12636
12636
|
"cssProperties": [
|
|
12637
12637
|
{
|
|
@@ -13783,7 +13783,7 @@
|
|
|
13783
13783
|
"declarations": [
|
|
13784
13784
|
{
|
|
13785
13785
|
"kind": "class",
|
|
13786
|
-
"description": "**The list is `helix-listbox`, and the filtering is its own.** It
|
|
13786
|
+
"description": "**The list is `helix-listbox`, and the filtering is its own.** It owns\nnarrowing, the empty state, the highlight, `aria-activedescendant` and\nscrolling an option into view. What is left for this element is the field,\nthe panel and the traffic between them.\n\n**The text and the value are two things.** What a reader types is a filter:\nit narrows the list and is thrown away. The value is whichever option they\nthen choose, and the field is rewritten to that option's words once they\nhave. The filter is cleared on close, so a reopened control does not start\nfrom the last visit's leftovers.\n\n**Focus stays in the field, which is the whole of what a combobox is.** The\narrows move the list without leaving the text, through the listbox's public\n`navigate`. `role=\"combobox\"` is on the input rather than on a wrapper,\nbecause the thing the pattern describes is the text field.\n\n**With `multiple`, the chosen options are tags in the field**, one object per\nanswer, each with its own remove control. The panel stays open while more\nthan one can be chosen and the filter clears on each choice, so the next pick\nstarts from the whole list.\n\n**`creatable` announces, and does not write.** The options are the consumer's\nlight DOM and nothing here puts an element into it: a component that grew the\nconsumer's markup would be one their framework re-renders over. It offers the\nrow and fires the event; adding the option is the consumer's.",
|
|
13787
13787
|
"name": "HelixHeadlessCombobox",
|
|
13788
13788
|
"cssParts": [
|
|
13789
13789
|
{
|
|
@@ -16090,7 +16090,7 @@
|
|
|
16090
16090
|
"declarations": [
|
|
16091
16091
|
{
|
|
16092
16092
|
"kind": "class",
|
|
16093
|
-
"description": "**The confirmation is the component.** Writing to the clipboard is three\nlines; what makes this worth an element is that the platform gives a reader\nno feedback at all
|
|
16093
|
+
"description": "**The confirmation is the component.** Writing to the clipboard is three\nlines; what makes this worth an element is that the platform gives a reader\nno feedback at all, so a press that copies looks identical to one that\nfailed.\n\n**Announced after the write, never before.** A clipboard write is a\npermission the browser may refuse, for real reasons: an insecure origin, a\ndocument that is not focused, a gesture that did not qualify. The\nconfirmation and the event both wait for the promise, and a refusal leaves\nthe button exactly as it was.",
|
|
16094
16094
|
"name": "HelixHeadlessCopyButton",
|
|
16095
16095
|
"cssParts": [
|
|
16096
16096
|
{
|
|
@@ -17173,7 +17173,7 @@
|
|
|
17173
17173
|
"declarations": [
|
|
17174
17174
|
{
|
|
17175
17175
|
"kind": "class",
|
|
17176
|
-
"description": "**The schema is markup and the data is a property.** Columns are declared as\n`helix-table-column` children, because a schema is small
|
|
17176
|
+
"description": "**The schema is markup and the data is a property.** Columns are declared as\n`helix-table-column` children, because a schema is small and something a\nreader should see in the HTML; rows are handed over as an array, because a\ntable that draws ten thousand elements cannot window them.\n\n```html\n<helix-data-table .rows=${rows} sort=\"name:asc\" page-size=\"20\">\n <helix-table-column field=\"name\" sortable>Name</helix-table-column>\n <helix-table-column field=\"size\" align=\"end\" sortable .cell=${bytes}>Size</helix-table-column>\n</helix-data-table>\n```\n\n`helix-table` takes rows as markup and is the right component for a table of\ntwelve things a person wrote out.\n\n**Sort and filter apply to the whole set, never the page.** Sorting the drawn\nwindow is correct on the first screen and wrong on every other one.\n\n**The cell values do not server-render.** The headings do, and the row\nelements do, but reading a cell needs the columns, and the columns are markup\nchildren Lit SSR does not hand this element. So a crawler sees a table of the\nright shape with nothing in it. That is the cost of the first paragraph: use\n`helix-table` where the served HTML has to carry the values.",
|
|
17177
17177
|
"name": "HelixHeadlessDataTable",
|
|
17178
17178
|
"cssProperties": [
|
|
17179
17179
|
{
|
|
@@ -18601,7 +18601,7 @@
|
|
|
18601
18601
|
"declarations": [
|
|
18602
18602
|
{
|
|
18603
18603
|
"kind": "class",
|
|
18604
|
-
"description": "**The calendar is `helix-date-picker`, not a second one written here.** It\nalready knows about months, ranges, disabled days, the first day of the week\nand every keyboard rule a grid owes a reader
|
|
18604
|
+
"description": "**The calendar is `helix-date-picker`, not a second one written here.** It\nalready knows about months, ranges, disabled days, the first day of the week\nand every keyboard rule a grid owes a reader. This element is the field, the\noverlay, and the translation between them.\n\n**Typed as well as picked, and the typing is why it is not\n`<input type=\"date\">`.** The native control gives a free picker and a free\nlocale and takes almost all styling with it. What is kept from it is the part\nworth keeping: a real text field.",
|
|
18605
18605
|
"name": "HelixHeadlessDateInput",
|
|
18606
18606
|
"cssParts": [
|
|
18607
18607
|
{
|
|
@@ -20324,7 +20324,7 @@
|
|
|
20324
20324
|
"declarations": [
|
|
20325
20325
|
{
|
|
20326
20326
|
"kind": "class",
|
|
20327
|
-
"description": "A grid of days, per the APG date grid: the whole grid is one tab stop, arrows\nmove by day and week, `PageUp` and `PageDown`
|
|
20327
|
+
"description": "A grid of days, per the APG date grid: the whole grid is one tab stop, arrows\nmove by day and week, `PageUp` and `PageDown` by month, `Home` and `End` to\nthe ends of the week. Only the focused cell is in the tab sequence.\n\n**Dates are `YYYY-MM-DD` strings and every calculation is in UTC.** A\nlocal-time `Date` shifts across a timezone or a daylight-saving boundary.\n\n`month` is what the grid shows, separately from `value`, so paging does not\nselect anything and a consumer can drive the view. Left unset it follows the\nfirst selected date, then the current month.\n\n`mode` decides how many dates are held: absent takes one, `range` takes two\nand marks everything between them, `multiple` toggles. All three read and\nwrite the same comma-separated `value`.",
|
|
20328
20328
|
"name": "HelixHeadlessDatePicker",
|
|
20329
20329
|
"cssProperties": [
|
|
20330
20330
|
{
|
|
@@ -21630,7 +21630,7 @@
|
|
|
21630
21630
|
"declarations": [
|
|
21631
21631
|
{
|
|
21632
21632
|
"kind": "class",
|
|
21633
|
-
"description": "A real `<dialog>` opened with `showModal()`, not a div with a role and a\nhand-built trap. The platform gives four things that are each a day's work to\nreimplement
|
|
21633
|
+
"description": "A real `<dialog>` opened with `showModal()`, not a div with a role and a\nhand-built trap. The platform gives four things that are each a day's work to\nreimplement: the top layer, so the dialog is above everything whatever\n`z-index` anyone wrote; a real backdrop; Escape; and inert-behind, so the\npage underneath is unreachable by pointer, keyboard or virtual cursor.\n\n**`open` drives `showModal()`, and every way it can close comes back through\n`requestOpen`.** A native dialog closes from three directions: the property,\nEscape, and a `<form method=\"dialog\">` submit. Left alone, two of them would\nshut the dialog while the consumer's state still said open, which is the bug\nthat makes a modal impossible to reopen.",
|
|
21634
21634
|
"name": "HelixHeadlessDialog",
|
|
21635
21635
|
"cssParts": [
|
|
21636
21636
|
{
|
|
@@ -22579,7 +22579,7 @@
|
|
|
22579
22579
|
"declarations": [
|
|
22580
22580
|
{
|
|
22581
22581
|
"kind": "class",
|
|
22582
|
-
"description": "The chart with the narrowest honest use, so the component is narrow too.\n\n**It reads one column and treats the rows as the parts.** Every other chart\nhere takes a column per series; a ring has one whole to divide,
|
|
22582
|
+
"description": "The chart with the narrowest honest use, so the component is narrow too.\n\n**It reads one column and treats the rows as the parts.** Every other chart\nhere takes a column per series; a ring has one whole to divide, so the first\ncolumn of numbers is the series and each row is a slice.\n\n**It refuses negative values rather than drawing them.** An arc for a\nnegative number either runs backwards over its neighbors or is silently\ndropped. Those rows are skipped and the total is of what is left.",
|
|
22583
22583
|
"name": "HelixHeadlessDonutChart",
|
|
22584
22584
|
"cssProperties": [
|
|
22585
22585
|
{
|
|
@@ -25060,7 +25060,7 @@
|
|
|
25060
25060
|
"declarations": [
|
|
25061
25061
|
{
|
|
25062
25062
|
"kind": "class",
|
|
25063
|
-
"description": "**A real `<input type=\"file\">`, kept and made invisible rather than\nreplaced.** It is the only way to open a file picker: the dialog is a\nprivileged action a script cannot start on its own, and it opens for a click\non the input or on a `<label>` pointing at it. A component that draws its own\nbutton
|
|
25063
|
+
"description": "**A real `<input type=\"file\">`, kept and made invisible rather than\nreplaced.** It is the only way to open a file picker: the dialog is a\nprivileged action a script cannot start on its own, and it opens for a click\non the input or on a `<label>` pointing at it. A component that draws its own\nbutton calls `.click()` on a hidden input anyway, and then has two things a\nscreen reader can find where there is one control.\n\nSo the input stays, holding the label, the name, the validity and the focus,\nand the visible trigger is a `<label for>`. A label is not focusable and does\nnot need to be: the input is, and Enter and Space on it open the picker.",
|
|
25064
25064
|
"name": "HelixHeadlessFileInput",
|
|
25065
25065
|
"cssParts": [
|
|
25066
25066
|
{
|
|
@@ -26901,7 +26901,7 @@
|
|
|
26901
26901
|
"declarations": [
|
|
26902
26902
|
{
|
|
26903
26903
|
"kind": "class",
|
|
26904
|
-
"description": "**One family covers both readings
|
|
26904
|
+
"description": "**One family covers both readings.** `rows=\"1\"` is a status strip, `rows=\"7\"`\nis a contribution graph, and a cell that takes a tone covers both: GitHub's\ncontribution graph is five discrete levels rather than a gradient.\n\n**What it cannot be is a bar chart with flat values**, and the data model is\nwhat closes that: chart color is per *series* everywhere else here, so ninety\ndifferently colored cells would be ninety series.\n\n**The data is a real `<table>` named by `for`**, the convention every chart\nin this library uses, and it is the accessible representation. Hide it with\n`data-hidden-visually` and the reading is still there.\n\nA cell takes its tone from its own `data-tone`, or from `thresholds` and\n`tones` bucketing its value. The cell's own wins, so a page that already\nknows a day was degraded does not encode that as a number to be decoded.\n\n**A tone is a name this tier never resolves.** `tone=\"success\"` writes\n`--heatmap-tone: var(--heatmap-tone-success)` and stops, so what a name is\nworth is the answering tier's to say. Reaching for `var(--helix-color-*)`\nhere is the dependency the tiers exist to prevent.",
|
|
26905
26905
|
"name": "HelixHeadlessHeatmap",
|
|
26906
26906
|
"cssProperties": [
|
|
26907
26907
|
{
|
|
@@ -28916,7 +28916,7 @@
|
|
|
28916
28916
|
"declarations": [
|
|
28917
28917
|
{
|
|
28918
28918
|
"kind": "class",
|
|
28919
|
-
"description": "**An element rather than a recipe, because of the part CSS cannot do.**\nReserving the box is `aspect-ratio` and needs nothing from anybody
|
|
28919
|
+
"description": "**An element rather than a recipe, because of the part CSS cannot do.**\nReserving the box is `aspect-ratio` and needs nothing from anybody. What\ncannot be written as a rule is *when the picture arrived*: a stylesheet has\nno way to know, and no way to hear that it never will. So this owns three\nstates and the two events that move between them, and leaves the box to the\nstylesheet.\n\n**The placeholder is a slot with nothing in it by default.** A default of\n`Skeleton` would make this tier depend on a component it does not ship.",
|
|
28920
28920
|
"name": "HelixHeadlessImage",
|
|
28921
28921
|
"cssParts": [
|
|
28922
28922
|
{
|
|
@@ -30212,7 +30212,7 @@
|
|
|
30212
30212
|
"declarations": [
|
|
30213
30213
|
{
|
|
30214
30214
|
"kind": "class",
|
|
30215
|
-
"description": "Renders a real `<input>`, so the caret, selection, autofill, spellcheck, the\npassword manager
|
|
30215
|
+
"description": "Renders a real `<input>`, so the caret, selection, autofill, spellcheck, the\npassword manager and the on-screen keyboard a phone chooses are all the\nplatform's. It serializes into the server's markup, so the field is usable\nbefore any script loads.\n\n**The input inside a shadow root submits nothing**, the form being on the\nother side of the boundary. The host is form-associated instead and reports\nits own value through `ElementInternals`, which also carries validity and\nanswers a form reset.\n\n`value` and `defaultValue` are separate the way `checked` and\n`defaultChecked` are: `value` is what is in the field now, `defaultValue` is\nwhat the markup asked for and where a reset returns to.\n\n**Validity is the platform's.** `type` and `required` are set on the real\ninput and its `validity` is copied onto the host.",
|
|
30216
30216
|
"name": "HelixHeadlessInput",
|
|
30217
30217
|
"cssParts": [
|
|
30218
30218
|
{
|
|
@@ -31534,7 +31534,7 @@
|
|
|
31534
31534
|
"declarations": [
|
|
31535
31535
|
{
|
|
31536
31536
|
"kind": "class",
|
|
31537
|
-
"description": "Renders a real `<kbd>`, so the passage still means \"press this\" to anything\nreading the markup
|
|
31537
|
+
"description": "Renders a real `<kbd>`, so the passage still means \"press this\" to anything\nreading the markup.\n\n**One key per element, with `keys` as the stated exception.** A sequence is\nseveral of these with the separator written between them as ordinary text,\nbecause that separator is prose: \"then\" in a sequence, \"plus\" in a chord, and\na component inserting one would have to guess which.\n\n**`keys` exists because the glyphs were being typed by hand and were wrong.**\nA literal `⌘K` in a template tells a reader on Windows to press a key their\nkeyboard does not have, and nothing catches it. Given `mod` this renders\n`⌘K` on Apple and `Ctrl+K` everywhere else.\n\n**`within` is what binds it, and it is absent by default**, so this draws a\nkey and listens for nothing unless asked.",
|
|
31538
31538
|
"name": "HelixHeadlessKbd",
|
|
31539
31539
|
"cssParts": [
|
|
31540
31540
|
{
|
|
@@ -31922,7 +31922,7 @@
|
|
|
31922
31922
|
"declarations": [
|
|
31923
31923
|
{
|
|
31924
31924
|
"kind": "class",
|
|
31925
|
-
"description": "A legend is a list, so it is a list: not part of a chart, and shared by\nwhichever of them needs one. It takes its entries from the same table the\nchart reads, through `for`, so the two cannot disagree
|
|
31925
|
+
"description": "A legend is a list, so it is a list: not part of a chart, and shared by\nwhichever of them needs one. It takes its entries from the same table the\nchart reads, through `for`, so the two cannot disagree.\n\n`entries` picks which way to read that table. `series` is one entry per data\ncolumn, named by the header row, which is a line or a bar chart.\n`categories` is one entry per body row, which is a donut: its slices are the\nrows and it has no axis to write their names along.\n\n**The table is resolved on the client and there is no server pass.**",
|
|
31926
31926
|
"name": "HelixHeadlessLegend",
|
|
31927
31927
|
"cssParts": [
|
|
31928
31928
|
{
|
|
@@ -33707,7 +33707,7 @@
|
|
|
33707
33707
|
"declarations": [
|
|
33708
33708
|
{
|
|
33709
33709
|
"kind": "class",
|
|
33710
|
-
"description": "**The listbox is the control and the options are its vocabulary.** A Select\nis this with a trigger in front of it, a Combobox is this with a text input,\nand a command palette is this again: they differ in what opens the list and\nwhat filters it, not in what the list is
|
|
33710
|
+
"description": "**The listbox is the control and the options are its vocabulary.** A Select\nis this with a trigger in front of it, a Combobox is this with a text input,\nand a command palette is this again: they differ in what opens the list and\nwhat filters it, not in what the list is.\n\n**`value` is comma separated when `multiple` is set**, the way\n`Checkbox.Group`'s is. It stays a string because that is what a form submits\nand what `MixinControllerValue` holds.\n\n**Chosen and active are two different things.** Chosen is the answer; active\nis where the keyboard is. Only the second moves with the arrows, and\n`aria-activedescendant` names it while focus stays on the list.",
|
|
33711
33711
|
"name": "HelixHeadlessListbox",
|
|
33712
33712
|
"cssParts": [
|
|
33713
33713
|
{
|
|
@@ -35540,7 +35540,7 @@
|
|
|
35540
35540
|
"declarations": [
|
|
35541
35541
|
{
|
|
35542
35542
|
"kind": "class",
|
|
35543
|
-
"description": "**A disclosure, not a menu, and that is the whole design.** `role=\"menu\"` and\n`menuitem` are for an application's commands: they take over the arrow keys,\nannounce \"menu\" to a reader who asked for navigation, and put every link\ninside a role that is not a link.
|
|
35543
|
+
"description": "**A disclosure, not a menu, and that is the whole design.** `role=\"menu\"` and\n`menuitem` are for an application's commands: they take over the arrow keys,\nannounce \"menu\" to a reader who asked for navigation, and put every link\ninside a role that is not a link. This is a button that shows and hides a\nregion of the consumer's own anchors, which leaves a middle click, a modified\nclick and the status bar working. `Menu` remains right for a row of commands.\n\n**It renders no links.** A router renders its own anchor and cannot render\none inside this shadow root, so the panel is a slot and what goes in it is\nthe lists and headings the consumer wrote.\n\n**It opens on hover, and a press is always the fallback.** `open-on` says\nwhich, and hover is the resting value because a nav bar is where a reader\nexpects to sweep along a row and see each section.",
|
|
35544
35544
|
"name": "HelixHeadlessMegamenu",
|
|
35545
35545
|
"cssProperties": [
|
|
35546
35546
|
{
|
|
@@ -37707,7 +37707,7 @@
|
|
|
37707
37707
|
"declarations": [
|
|
37708
37708
|
{
|
|
37709
37709
|
"kind": "class",
|
|
37710
|
-
"description": "**Not `Progress`, and the difference is the whole component.** A progress bar\nreports how far along a task is: it starts empty, ends full, and full is\nalways the good end. A meter reports a level in a range that is not going\nanywhere, and which end is good is a fact about the thing
|
|
37710
|
+
"description": "**Not `Progress`, and the difference is the whole component.** A progress bar\nreports how far along a task is: it starts empty, ends full, and full is\nalways the good end. A meter reports a level in a range that is not going\nanywhere, and which end is good is a fact about the thing measured. So there\nis no `indeterminate`: a measurement whose value is unknown is not one.\n\n**`low`, `high` and `optimum` are the reason it exists**, following the HTML\nspecification's own rule. The three cut the range into a low band, a middle\nand a high band, and `optimum` says which is the one to be in; the band next\nto it is fair and the one two away is poor.",
|
|
37711
37711
|
"name": "HelixHeadlessMeter",
|
|
37712
37712
|
"cssProperties": [
|
|
37713
37713
|
{
|
|
@@ -39778,7 +39778,7 @@
|
|
|
39778
39778
|
"declarations": [
|
|
39779
39779
|
{
|
|
39780
39780
|
"kind": "class",
|
|
39781
|
-
"description": "**A family rather than `Input`'s `type=\"number\"
|
|
39781
|
+
"description": "**A family rather than `Input`'s `type=\"number\"`.** It renders two buttons,\nbinds four keys `Input` does not, and owns clamping and stepping, so it is an\nalternative and not a variant.\n\n**The field is `type=\"text\"` with `inputmode=\"decimal\"`, and that is a\nmeasurement.** Asked of a real browser, `type=number` fails three ways this\ncontrol cannot live with:\n\n```\ntyped \"12e\" into type=number → .value === \"\"\nfocused, wheeled over it → 5 became 4\nselectionStart on type=number → null\nsame keystrokes into type=text → .value === \"12e\"\n```\n\nThe first is fatal alone: the element cannot see what the reader typed. The\nsecond changes a value because a page scrolled past. The third means the\ncaret cannot be managed at all. `inputmode` keeps the phone keypad, which is\nthe one thing `type=number` was giving.\n\nValidity is still the platform's, through `min`, `max` and `step` mirrored\nonto the host's own `setValidity`.\n\n**Stepping is separate from typing**, so a reader mid-way through a number is\nnot corrected under their hands.",
|
|
39782
39782
|
"name": "HelixHeadlessNumberInput",
|
|
39783
39783
|
"cssParts": [
|
|
39784
39784
|
{
|
|
@@ -41895,7 +41895,7 @@
|
|
|
41895
41895
|
"declarations": [
|
|
41896
41896
|
{
|
|
41897
41897
|
"kind": "class",
|
|
41898
|
-
"description": "A table of contents, named for the job. It sits beside `Navigation`, which is\nthe same job at the other scale: one navigates a site, the other
|
|
41898
|
+
"description": "A table of contents, named for the job. It sits beside `Navigation`, which is\nthe same job at the other scale: one navigates a site, the other a document.\n\n**The links are the consumer's own anchors.** A router renders its own `<a>`\nand cannot render one inside this shadow root, and the hrefs are fragments\nthe page already knows.\n\n**What is current is decided by position, not by intersection.** An\n`IntersectionObserver` with a band near the top fails in both directions:\nwith headings far apart nothing is in the band and the marker goes out, and\nwith headings close together several are in it at once.",
|
|
41899
41899
|
"name": "HelixHeadlessOutline",
|
|
41900
41900
|
"cssParts": [
|
|
41901
41901
|
{
|
|
@@ -42418,7 +42418,7 @@
|
|
|
42418
42418
|
"declarations": [
|
|
42419
42419
|
{
|
|
42420
42420
|
"kind": "class",
|
|
42421
|
-
"description": "The component is the truncation
|
|
42421
|
+
"description": "**The component is the truncation.** Given a page and a total it works out\nwhich numbers to show and where the runs break, so this is data-driven rather\nthan composed: `<helix-pagination page=\"4\" pages=\"12\">` rather than twelve\nslotted children a consumer keeps in step with their own query.\n\n**The width does not change as you page.** The run around the current page is\n`siblings` either side, and grows to absorb a gap slot at a boundary, so the\ncontrol holds the same number of slots from the first page to the last.\nAnything that lets the count vary moves the buttons under the pointer between\none click and the next.\n\n**A gap is only drawn where it hides more than one page, and a gap is a\ncontrol.** It goes to the middle of the run it stands over, which is the\nbinary-search step: any page in a set of any size is a handful of presses.\n\n**`href` is what makes these links.** Set it and every page renders an `<a>`\nwith `{page}` filled in, so the output is crawlable, a middle click opens a\ntab, and the address bar is the state. Left unset they are buttons, which is\nright for a table paging in place. Either way the click announces\n`helix-navigate` first, and `preventDefault()` stops the navigation as well\nas the change, which is how a router takes over.\n\n**`helix-navigate` and not `helix-change`.** Moving to page four chooses\nnothing; it moves the view over a result that has not changed.\n\n**The count and the page-size control are their own elements.**\n`Pagination.Summary` and `Pagination.Size` sit beside this one, because a\nslot can only offer one place: at one end of one row, in one order.",
|
|
42422
42422
|
"name": "HelixHeadlessPagination",
|
|
42423
42423
|
"cssParts": [
|
|
42424
42424
|
{
|
|
@@ -43715,7 +43715,7 @@
|
|
|
43715
43715
|
"declarations": [
|
|
43716
43716
|
{
|
|
43717
43717
|
"kind": "class",
|
|
43718
|
-
"description": "Its own element rather than a part of `Pagination`, so a consumer decides\nwhere it goes
|
|
43718
|
+
"description": "Its own element rather than a part of `Pagination`, so a consumer decides\nwhere it goes: above, below, in a table's caption, or on the other side of\nthe page. Inside the run it could only ever be at one end of one row.\n\n**It repeats `page`, `page-size` and `total`, and the cost of that is skew.**\nThose three come from the consumer's own query, so writing them on two\nelements is one variable used twice; what it risks is the two disagreeing.\n\n**Nothing removes that at this level, and it was measured.** A coordinating\nroot can only reach light-DOM children by writing attributes onto them, which\na framework reports as a hydration error, or through context, which is dead\non a server: `@lit/context` subscribes from `connectedCallback`, and Lit SSR\ndoes not call it.",
|
|
43719
43719
|
"name": "HelixHeadlessPaginationSummary",
|
|
43720
43720
|
"members": [
|
|
43721
43721
|
{
|
|
@@ -45902,7 +45902,7 @@
|
|
|
45902
45902
|
"declarations": [
|
|
45903
45903
|
{
|
|
45904
45904
|
"kind": "class",
|
|
45905
|
-
"description": "Determinate by default, and `indeterminate` for a task whose total is not\nknown yet. `Loader` is still
|
|
45905
|
+
"description": "Determinate by default, and `indeterminate` for a task whose total is not\nknown yet. `Loader` is still right where the wait is short or has no place of\nits own on the page.\n\nA bar that fills at a made-up rate would be a bar that lies, so the\nindeterminate one does not fill: it runs a segment across the track, which\nsays work is happening and claims no proportion. `aria-valuenow` is omitted\nwith it, which is the platform's own signal for the same thing.\n\n**The fill is a fraction of the track, written as a custom property.**",
|
|
45906
45906
|
"name": "HelixHeadlessProgress",
|
|
45907
45907
|
"cssProperties": [
|
|
45908
45908
|
{
|
|
@@ -48346,7 +48346,7 @@
|
|
|
48346
48346
|
"declarations": [
|
|
48347
48347
|
{
|
|
48348
48348
|
"kind": "class",
|
|
48349
|
-
"description": "**Half marks decide the shape.** Supporting them means the value is not an\ninteger and the targets are not the marks: five stars at a half step is ten\nplaces to press
|
|
48349
|
+
"description": "**Half marks decide the shape.** Supporting them means the value is not an\ninteger and the targets are not the marks: five stars at a half step is ten\nplaces to press. The pointer handling and `step` are built around that\nrather than added over it.\n\n**A partial mark is the whole mark, clipped**, not a second glyph filled to\nthe middle: the fill is the same marks over the same marks, cut off partway,\nso any mark works and any fraction does.\n\n**Read-only is not this control grayed out.** The commoner use is showing a\nscore nobody is being asked for, which is a reading rather than a disabled\ninput, and it is announced as one.",
|
|
48350
48350
|
"name": "HelixHeadlessRating",
|
|
48351
48351
|
"cssProperties": [
|
|
48352
48352
|
{
|
|
@@ -51577,7 +51577,7 @@
|
|
|
51577
51577
|
"declarations": [
|
|
51578
51578
|
{
|
|
51579
51579
|
"kind": "class",
|
|
51580
|
-
"description": "A real `<input type=\"range\">`, so the drag, the arrow keys, Home and End, the\npage keys and the touch target are
|
|
51580
|
+
"description": "A real `<input type=\"range\">`, so the drag, the arrow keys, Home and End, the\npage keys and the touch target are the platform's. The last is the one nobody\nnotices: a native range has a hit area larger than its thumb, sized by the\nplatform for a finger.\n\n**The value is a string, like every other form control's.** A range submits\ntext and `MixinControllerValue` holds text, so the number is a reading of the\nvalue. `valueAsNumber` is there for arithmetic.\n\n**Marks are drawn rather than left to `<datalist>`**, whose ticks cannot be\nstyled and which Firefox does not render for a range at all. A mark is\ndecoration; what a reader can land on is `step`, which the input enforces\nwhether or not anything is drawn. `markers` is a count rather than a flag, so\na slider from zero to a hundred cannot silently ask for a hundred and one.\n\n**A range is two of them.** There is no native two-thumb range, so two are\nstacked on one track and each thumb keeps its own.",
|
|
51581
51581
|
"name": "HelixHeadlessSlider",
|
|
51582
51582
|
"cssProperties": [
|
|
51583
51583
|
{
|
|
@@ -54171,7 +54171,7 @@
|
|
|
54171
54171
|
"declarations": [
|
|
54172
54172
|
{
|
|
54173
54173
|
"kind": "class",
|
|
54174
|
-
"description": "**One axis, and nesting is how you get two.**
|
|
54174
|
+
"description": "**One axis, and nesting is how you get two.** A splitter inside a splitter\ngives back the cross, and gives the three-pane and four-pane arrangements a\nsingle divider never had.\n\n**Where two of them cross there is a corner, and it moves both.** A splitter\nslotted into a pane of another, at right angles to it, grows a handle at the\ncrossing: `move` under the pointer, both arrow axes on the keyboard, and a\ndrag that carries the two positions at once. It appears at `firstUpdated`\nrather than in the served markup, being an affordance rather than content,\nand a splitter with no corner yet is a splitter with two working dividers.\n\n**The divider is a real `role=\"separator\"` with `aria-valuenow`**, moved by\nthe arrow keys as well as by pointer, with `Home` and `End` taking it to its\nbounds. A drag in progress is a state rather than `:hover`, so both dividers\na corner moves are lit for as long as it moves them.\n\n**It goes where it is put, all the way to either end.** `min` and `max` are\nnothing and everything unless a consumer says otherwise, because a divider\nthat stops short of the edge gives a reader no way to put a pane away.\n\n**A pane can be shut, and that is not the same as a divider at the edge.**\nThe geometry is identical and the knowledge is not: only a shut pane knows\nwhere to open back to. So `collapsed` is a second state rather than a reading\nof the position, and the position it opens to is the one collapsing never\noverwrote. `collapsed-size` keeps a sliver showing where a pane has a tab\nstrip worth leaving, and collapse overrides `min` and `max`, which is what\nthose are for.",
|
|
54175
54175
|
"name": "HelixHeadlessSplitter",
|
|
54176
54176
|
"cssProperties": [
|
|
54177
54177
|
{
|
|
@@ -55701,7 +55701,7 @@
|
|
|
55701
55701
|
"declarations": [
|
|
55702
55702
|
{
|
|
55703
55703
|
"kind": "class",
|
|
55704
|
-
"description": "**`active` names where the reader is. `complete` stays on each step.**
|
|
55704
|
+
"description": "**`active` names where the reader is. `complete` stays on each step.** Only\none of them is positional: return to stage one of three and stages one and\ntwo are still finished, where \"everything before the active one\" says only\nthe first is. So this element drives `current` and never touches `complete`.\n\n**`active` is optional, and a sequence without it still renders.** Left\nunset, each step's own `current` stands, which is what lets the whole\nsequence be right in the server's markup: this element would have to count\nits slotted children to know which is third, and the server has none to\ncount.",
|
|
55705
55705
|
"name": "HelixHeadlessSteps",
|
|
55706
55706
|
"slots": [
|
|
55707
55707
|
{
|
|
@@ -56192,7 +56192,7 @@
|
|
|
56192
56192
|
"declarations": [
|
|
56193
56193
|
{
|
|
56194
56194
|
"kind": "class",
|
|
56195
|
-
"description": "**The name is a button, and only the name.**
|
|
56195
|
+
"description": "**The name is a button, and only the name.** The marker is `aria-hidden`\ndecoration, so wrapping it would add hit area and no meaning. It is\n`helix-button` rather than a `<button>` this element resets: the hover wash,\nthe focus ring and the disabled treatment are decisions the button carries.\n\n**It says nothing about where a reader may go.** Every step is pressable and\nannounces itself with `helix-select`; refusing the ones ahead is `disabled`,\nwhich the consumer sets, because only they know whether a form can be\nskipped.\n\n**The marker is a slot whose fallback is the state.** A finished stage shows\na check, the current one a target, one not yet reached an empty ring. Exactly\none is rendered, chosen from the step's own two booleans, rather than three\nwith two hidden in CSS: the accessibility tree would otherwise carry marks\nthat are not there.",
|
|
56196
56196
|
"name": "HelixHeadlessStep",
|
|
56197
56197
|
"cssParts": [
|
|
56198
56198
|
{
|
|
@@ -65607,7 +65607,7 @@
|
|
|
65607
65607
|
"declarations": [
|
|
65608
65608
|
{
|
|
65609
65609
|
"kind": "class",
|
|
65610
|
-
"description": "An element rather than a slot, because it carries a timeout, a tone, a\ndismiss control and a lifetime that pauses: behavior, state and API
|
|
65610
|
+
"description": "An element rather than a slot, because it carries a timeout, a tone, a\ndismiss control and a lifetime that pauses: behavior, state and API.\n\n**The timer is the item's own.** Held by the region, one message arriving\nwould restart another's, so a stack of three would go from three seconds each\nto nine for the last.\n\n**A message is the opposite of the page it is over.** Inverted by default, so\na thing arriving in a corner is told apart from the page before it is read,\nand by a flip of `color-scheme` rather than by spending a color that means\nsomething.",
|
|
65611
65611
|
"name": "HelixHeadlessToastItem",
|
|
65612
65612
|
"cssProperties": [
|
|
65613
65613
|
{
|
|
@@ -66442,7 +66442,7 @@
|
|
|
66442
66442
|
"declarations": [
|
|
66443
66443
|
{
|
|
66444
66444
|
"kind": "class",
|
|
66445
|
-
"description": "The indicator is one element that travels, not a background that appears on\nwhichever item is current.
|
|
66445
|
+
"description": "The indicator is one element that travels, not a background that appears on\nwhichever item is current. A fill that swaps is two things changing at once\nand reads as a flicker; one that moves is a single object the eye follows,\nand it says where the selection came from as well as where it went.\n\nIts box is measured from the selected item and written onto the indicator as\ncustom properties, labels being different lengths. Measurement is client-side\nby necessity, so the server renders the indicator hidden and it fades in once\nit has somewhere to be, which is the harmless direction.",
|
|
66446
66446
|
"name": "HelixHeadlessToggleGroup",
|
|
66447
66447
|
"cssParts": [
|
|
66448
66448
|
{
|
|
@@ -68239,7 +68239,7 @@
|
|
|
68239
68239
|
"declarations": [
|
|
68240
68240
|
{
|
|
68241
68241
|
"kind": "class",
|
|
68242
|
-
"description": "The trigger is slotted and stays the consumer's own element. The bubble is\nrendered here, in the top layer through the popover API, so it clears any\nancestor with `overflow: hidden` without a `z-index` anywhere
|
|
68242
|
+
"description": "The trigger is slotted and stays the consumer's own element. The bubble is\nrendered here, in the top layer through the popover API, so it clears any\nancestor with `overflow: hidden` without a `z-index` anywhere. Position comes\nfrom `FloatingController`, which flips to another side when the preferred one\ndoes not fit.\n\n**Two forms, and they are not equivalent for a screen reader.** Wrapping is\nthe convenience form and is right where the bubble decorates a control that\nalready says what it is: nothing here can describe a slotted trigger, an\nIDREF being unable to cross a shadow boundary.\n\n`for` is the form that works. The tooltip sits *beside* the trigger in the\nconsumer's own tree and names it by id, so an IDREF between them is legal in\nthe ordinary way:\n\n```html\n<helix-button id=\"save\" aria-describedby=\"save-tip\">Save</helix-button>\n<helix-tooltip id=\"save-tip\" for=\"save\" content=\"Save your work\"></helix-tooltip>\n```\n\nThe reference points at *this host*, not at the bubble in its shadow root:\nthe description is computed from the flat tree, which descends into shadow\ncontent on its own.\n\n**The consumer writes that `aria-describedby`, and nothing here writes it for\nthem.** Setting it at runtime is a hydration mismatch React will not patch\nup. `for` audits itself on first open and warns once where it is missing.\n\nIt shows on hover and on focus, and hides on leave, on blur, on Escape, and\nonce the trigger has been activated: the hint is spent when the control has\nbeen used.",
|
|
68243
68243
|
"name": "HelixHeadlessTooltip",
|
|
68244
68244
|
"cssParts": [
|
|
68245
68245
|
{
|
|
@@ -69084,7 +69084,7 @@
|
|
|
69084
69084
|
"declarations": [
|
|
69085
69085
|
{
|
|
69086
69086
|
"kind": "class",
|
|
69087
|
-
"description": "The root owns the order and nothing else. Which stop is current, what Next\nand Back mean, when the run is finished; the stops own where they point, and\nthe consumer owns every word.\n\n**The spotlight is a shadow, not a hole.** The scrim is a box the size of the\ncurrent target with an enormous spread on its `box-shadow`, so the darkness\nis what the shadow paints
|
|
69087
|
+
"description": "The root owns the order and nothing else. Which stop is current, what Next\nand Back mean, when the run is finished; the stops own where they point, and\nthe consumer owns every word.\n\n**The spotlight is a shadow, not a hole.** The scrim is a box the size of the\ncurrent target with an enormous spread on its `box-shadow`, so the darkness\nis what the shadow paints. A `clip-path` on a full-screen scrim needs the\nviewport in the same coordinate space as the cut, which stops being true the\nmoment anything between them is transformed.\n\n**It measures, and the target is an element elsewhere on the page whose\nposition nothing can know statically.** Nothing is measured on the server and\nnothing needs to be: a tour starts when a reader asks for it.",
|
|
69088
69088
|
"name": "HelixHeadlessTour",
|
|
69089
69089
|
"cssParts": [
|
|
69090
69090
|
{
|
|
@@ -70219,7 +70219,7 @@
|
|
|
70219
70219
|
"declarations": [
|
|
70220
70220
|
{
|
|
70221
70221
|
"kind": "class",
|
|
70222
|
-
"description": "**`open`, on `MixinControllerOpen`, rather than a bare boolean of its own
|
|
70222
|
+
"description": "**`open`, on `MixinControllerOpen`, rather than a bare boolean of its own.**\nA branch showing its children is the same state a disclosure holds. A\nhand-written toggle announces nothing, so a consumer could neither know a\nbranch opened nor own the state. `aria-expanded` is still what the row\nrenders: the property differs, not the semantics.\n\nAn element rather than a slot, because it owns state: whether it is open,\nselected, and whether it holds focus.\n\nA branch is any item with something slotted into `children`, detected in\n`firstUpdated` because the server cannot inspect children. The server renders\nthe node as a leaf and the twisty appears on hydration, which is the harmless\ndirection.\n\n**`href` makes the row itself the link.** With the anchor slotted into the\nname instead, everything outside the words is dead: no Enter, no middle\nclick, no status bar. Given an `href` the row *is* an `<a>`.",
|
|
70223
70223
|
"name": "HelixHeadlessTreeItem",
|
|
70224
70224
|
"cssProperties": [
|
|
70225
70225
|
{
|
|
@@ -72304,7 +72304,7 @@
|
|
|
72304
72304
|
"declarations": [
|
|
72305
72305
|
{
|
|
72306
72306
|
"kind": "class",
|
|
72307
|
-
"description": "The entries again, reachable without leaving the picture. A playlist beside\nthe player is a list a reader scrolls to; the same list in the control bar is\none they open over the video
|
|
72307
|
+
"description": "The entries again, reachable without leaving the picture. A playlist beside\nthe player is a list a reader scrolls to; the same list in the control bar is\none they open over the video.\n\n**It is placed by the consumer, not rendered by the playlist**, and that is\nforced rather than chosen: a shadow root cannot project into a sibling's\nlight DOM, so nothing the playlist renders can land inside the player's\ncontrol bar. What can is an element the consumer writes there, which is what\n`Video`'s `controls` slot is for.",
|
|
72308
72308
|
"name": "HelixHeadlessVideoPlaylistMenu",
|
|
72309
72309
|
"cssParts": [
|
|
72310
72310
|
{
|
|
@@ -73239,7 +73239,7 @@
|
|
|
73239
73239
|
"declarations": [
|
|
73240
73240
|
{
|
|
73241
73241
|
"kind": "class",
|
|
73242
|
-
"description": "**The picture is a real `<video>`.** Decoding, buffering, captions, Picture\nin Picture, AirPlay and
|
|
73242
|
+
"description": "**The picture is a real `<video>`.** Decoding, buffering, captions, Picture\nin Picture, AirPlay and whatever codecs a device has are the platform's. What\nis replaced is the control bar, which is the one part that cannot be styled.\n\n**Every control is a real control.** The scrubber and the volume are\n`<input type=\"range\">`, so arrow keys, Home and End, the platform's touch\ntarget and its screen reader announcement all come for free.\n\n**Native controls are the fallback, not the default.** Where a consumer sets\n`controls` the browser's bar is used and this one is not drawn, and the keys\nbelow are not bound: two handlers on one press is a video that seeks twice.\n\nThe keys are the ones every player uses: Space and `k` to play or pause, the\narrows to seek and to change volume, `m` to mute, `f` for fullscreen. They\nare bound on this element rather than on the document, because a video is not\na palette.\n\n**`<source>` and `<track>` are copied into the video, never slotted into it.**\nA media element runs resource selection over its own child *nodes*, and a slot\nis one node, so slotted sources reach it as nothing: no text tracks, no\ncurrent source, `readyState` zero. A video given sources that way does not\nmerely lack captions, it does not play. They are copied rather than moved,\nbecause the consumer's light DOM is theirs, and rebuilt whenever the slot\nchanges.",
|
|
73243
73243
|
"name": "HelixHeadlessVideo",
|
|
73244
73244
|
"cssProperties": [
|
|
73245
73245
|
{
|
|
@@ -74894,7 +74894,7 @@
|
|
|
74894
74894
|
"declarations": [
|
|
74895
74895
|
{
|
|
74896
74896
|
"kind": "class",
|
|
74897
|
-
"description": "**The set arrives as data, which is what makes this a virtual list rather\nthan a box that hides children.** `for` names a\n`<script type=\"application/json\">` holding an array of objects, and a\n`<template>` child says what one row looks like: elements carrying\n`data-field=\"name\"` are filled with that field of the item.\n\nBoth halves are markup, and that is the
|
|
74897
|
+
"description": "**The set arrives as data, which is what makes this a virtual list rather\nthan a box that hides children.** `for` names a\n`<script type=\"application/json\">` holding an array of objects, and a\n`<template>` child says what one row looks like: elements carrying\n`data-field=\"name\"` are filled with that field of the item.\n\nBoth halves are markup, and that is the reason for the shape. An `items`\nproperty cannot survive React hydration, which skips every property it would\nhave to apply imperatively, and light-DOM children exist by the time anything\ncould decide not to create them. Text in the document is neither, and it is\none node whatever the row count.\n\n**The accessible version is not a `<table>`**, the way it is for the charts\nthat share this `for=\"<id>\"` shape: ten thousand rows in one is the cost this\nexists to avoid. It is the rendered window plus `aria-setsize`.",
|
|
74898
74898
|
"name": "HelixHeadlessVirtualList",
|
|
74899
74899
|
"cssParts": [
|
|
74900
74900
|
{
|