@fusion.dev/helix 0.53.1 → 0.53.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/types/vue.d.ts CHANGED
@@ -239,9 +239,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
239
239
  last reader did rather than what the author wrote. `:state(open)` carries
240
240
  the resolved state for stylesheets, which is what the mirror is for. */
241
241
  open?: (HelixAccordionItem["open"]) | undefined;
242
- /** Initial open state for uncontrolled use, where nothing declared one. */
242
+ /** Whether the markup declared it open. Ignored once `open` is written. */
243
243
  "default-open"?: (HelixAccordionItem["defaultOpen"]) | undefined;
244
- /** Initial open state for uncontrolled use, where nothing declared one. */
244
+ /** Whether the markup declared it open. Ignored once `open` is written. */
245
245
  defaultOpen?: (HelixAccordionItem["defaultOpen"]) | undefined;
246
246
  /** Where the open indicator sits, or whether there is one.
247
247
 
@@ -660,13 +660,13 @@ export type HelixAvatarGroupVueProps = {
660
660
  Unset shows all of them, which is what no limit means and is more useful
661
661
  than refusing to render.
662
662
 
663
- **Reflected, because the fold is a stylesheet rule and nothing else.** The
664
- styled tier hides past the limit with `:host([max="N"]) ::slotted(:nth-child(n + N+1))`,
665
- so the attribute *is* the mechanism: a `max` that reaches this property and
666
- never reaches the host matches no rule, and every avatar is drawn beside a
667
- count claiming some are hidden. Markup is the safe path and hides the fault;
668
- a script is the broken one, and React takes it for everyone, assigning a
669
- matching property rather than an attribute.
663
+ **Reflected, because the fold is a stylesheet rule and nothing else.** A
664
+ sheet hides past the limit one selector per value, as `FOLDS_UP_TO`
665
+ describes, so the attribute *is* the mechanism: a `max` that reaches this
666
+ property and never reaches the host matches no rule, and every avatar is
667
+ drawn beside a count claiming some are hidden. Markup is the safe path and
668
+ hides the fault; a script is the broken one, and React takes it for
669
+ everyone, assigning a matching property rather than an attribute.
670
670
 
671
671
  **Optional rather than defaulted, per the rule that a reflected property
672
672
  takes no default**: `max = 0` would stamp `max="0"` onto every host that
@@ -853,7 +853,7 @@ tier draws whether or not anything points at it.
853
853
  **A chart-domain axis and deliberately not a library one.** It lives on this
854
854
  family alone, and here it is a way of encoding data rather than a way of
855
855
  expressing a theme: promoted to the registry it would put an attribute on
856
- eighty-eight components that means nothing on eighty-seven. `wash` because
856
+ every component in the library and mean something on one. `wash` because
857
857
  that is what the tier below already calls it, in `--chart-bar-wash` and in
858
858
  the `bar-wash-start` and `bar-wash-end` stops. */
859
859
  wash?: (HelixBarChart["wash"]) | undefined;
@@ -968,12 +968,12 @@ export type HelixBreadcrumbVueProps = {
968
968
  current?: (HelixBreadcrumb["current"]) | undefined;
969
969
  /** Where the crumb goes, and nothing where it is the current page.
970
970
 
971
- **Optional and reflected, because a stylesheet does select on it.**
972
- `breadcrumb.css` writes `:host(:not([href])) [part="link"]` to take the
973
- block padding off a crumb that is not a link, so the attribute is what
974
- decides how tall a crumb is. Unreflected, an `href` set from script reached
975
- the property, rendered the anchor, and left the host looking unlinked: the
976
- crumb drew at 20px where a markup twin drew at 28.
971
+ **Optional and reflected, because a stylesheet does select on it.** A sheet
972
+ writes `:host(:not([href])) [part="link"]` to take the block padding off a
973
+ crumb that is not a link, so the attribute is what decides how tall a crumb
974
+ is. Unreflected, an `href` set from script reached the property, rendered
975
+ the anchor, and left the host looking unlinked: the crumb drew at 20px
976
+ where a markup twin drew at 28.
977
977
 
978
978
  Optional rather than defaulted, which is the general rule that a reflected
979
979
  property takes no default: an `href` written onto every host would be a link
@@ -1092,7 +1092,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
1092
1092
  the same way `label` becomes `aria-label` in there.
1093
1093
 
1094
1094
  ```html
1095
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
1095
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
1096
1096
  ```
1097
1097
 
1098
1098
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -1476,12 +1476,11 @@ one leaves the other alone. */
1476
1476
  autoplay?: (HelixCarousel["autoplay"]) | undefined;
1477
1477
  /** The slide in view, counted from zero.
1478
1478
 
1479
- Reading gives the real slide, in either mode. Writing sets it, the way a
1480
- script assigning to a native control does. Which mode the carousel is in is
1481
- read once, at the first update, from whether anything had declared an
1482
- `index` by then: declared, and the consumer owns it and the carousel only
1483
- announces where it would have gone; not declared, and the carousel owns it
1484
- and `default-index` says where it starts.
1479
+ Reading gives the real slide. Writing always applies, the way a script
1480
+ assigning to a native control does, and is a seed and a correction rather
1481
+ than a claim of ownership: a consumer who wants the decision refuses the
1482
+ `helix-select`. `default-index` is where the carousel starts until
1483
+ something moves it.
1485
1484
 
1486
1485
  The same contract the four mixins carry, written out here rather than
1487
1486
  extracted, because a slide is addressed by position and every one of those
@@ -1549,13 +1548,13 @@ end while the slides stop moving a third of the way through.
1549
1548
  **The number is published to the styles rather than enumerated by them**,
1550
1549
  as `--carousel-per-view` on the track, which is what keeps a width and a
1551
1550
  count from disagreeing. A sheet can only name a value it wrote a rule for,
1552
- so the styled tier enumerated `per-view="2"` through `5` and called five a
1553
- judgment; above it the pane fell back to one across while this file went on
1554
- counting positions. Measured in Chromium over eight slides, six across gave
1555
- three dots, a pane taking the whole track and five slides reachable only by
1556
- dragging. Written from here there is no ceiling to exceed, and a consumer's
1557
- own sheet reads the same declaration the styled one does. `runEnd` publishes
1558
- its correction the same way and for the same reason.
1551
+ so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
1552
+ above it the pane falls back to one across while this file goes on counting
1553
+ positions. Measured in Chromium over eight slides against such a sheet, six
1554
+ across gave three dots, a pane taking the whole track and five slides
1555
+ reachable only by dragging. Published from here there is no ceiling to
1556
+ exceed, and every sheet reads the same declaration. `runEnd` publishes its
1557
+ correction the same way and for the same reason.
1559
1558
 
1560
1559
  **On the track and not on the host.** A custom property on the host is a
1561
1560
  reflected attribute by another name: it would arrive on upgrade, and a
@@ -1580,8 +1579,8 @@ inline the count would outrank the sheet that computes it, which is why an
1580
1579
  `auto` track is handed nothing. A count stays for the design that calls for
1581
1580
  exactly three.
1582
1581
 
1583
- The styled sheet says how it divides, and the headless `auto` example
1584
- carries the same three lines for a consumer writing their own.
1582
+ A sheet says how it divides, and the `auto` example here carries the same
1583
+ three lines for a consumer writing their own.
1585
1584
 
1586
1585
  **A value rather than the resting behavior**, which is what the
1587
1586
  responsiveness policy asks of every axis that a box decides: a splitter
@@ -1609,13 +1608,13 @@ end while the slides stop moving a third of the way through.
1609
1608
  **The number is published to the styles rather than enumerated by them**,
1610
1609
  as `--carousel-per-view` on the track, which is what keeps a width and a
1611
1610
  count from disagreeing. A sheet can only name a value it wrote a rule for,
1612
- so the styled tier enumerated `per-view="2"` through `5` and called five a
1613
- judgment; above it the pane fell back to one across while this file went on
1614
- counting positions. Measured in Chromium over eight slides, six across gave
1615
- three dots, a pane taking the whole track and five slides reachable only by
1616
- dragging. Written from here there is no ceiling to exceed, and a consumer's
1617
- own sheet reads the same declaration the styled one does. `runEnd` publishes
1618
- its correction the same way and for the same reason.
1611
+ so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
1612
+ above it the pane falls back to one across while this file goes on counting
1613
+ positions. Measured in Chromium over eight slides against such a sheet, six
1614
+ across gave three dots, a pane taking the whole track and five slides
1615
+ reachable only by dragging. Published from here there is no ceiling to
1616
+ exceed, and every sheet reads the same declaration. `runEnd` publishes its
1617
+ correction the same way and for the same reason.
1619
1618
 
1620
1619
  **On the track and not on the host.** A custom property on the host is a
1621
1620
  reflected attribute by another name: it would arrive on upgrade, and a
@@ -1640,8 +1639,8 @@ inline the count would outrank the sheet that computes it, which is why an
1640
1639
  `auto` track is handed nothing. A count stays for the design that calls for
1641
1640
  exactly three.
1642
1641
 
1643
- The styled sheet says how it divides, and the headless `auto` example
1644
- carries the same three lines for a consumer writing their own.
1642
+ A sheet says how it divides, and the `auto` example here carries the same
1643
+ three lines for a consumer writing their own.
1645
1644
 
1646
1645
  **A value rather than the resting behavior**, which is what the
1647
1646
  responsiveness policy asks of every axis that a box decides: a splitter
@@ -1835,13 +1834,13 @@ pinned because a conversation opens at its most recent turn.
1835
1834
 
1836
1835
  **Not reflected, and the default is why.** A reflected property that
1837
1836
  defaults to true writes its attribute on upgrade whether or not the
1838
- consumer wrote one, so the server serves `<helix-chat label="x">` and the
1839
- client turns it into `<helix-chat label="x" pinned>`: a hydration mismatch a
1840
- React consumer reports and does not patch up. Nothing needs the attribute
1841
- either, because the one thing that changes with the pin is the way back, and
1842
- that is a part inside the shadow tree where a stylesheet can already reach
1843
- it. Measured rather than assumed: `label, pinned` after upgrade against
1844
- `label` from the server. */
1837
+ consumer wrote one, so the server serves `<helix-headless-chat label="x">`
1838
+ and the client turns it into `<helix-headless-chat label="x" pinned>`: a
1839
+ hydration mismatch a React consumer reports and does not patch up. Nothing
1840
+ needs the attribute either, because the one thing that changes with the pin
1841
+ is the way back, and that is a part inside the shadow tree where a
1842
+ stylesheet can already reach it. Measured rather than assumed: `label,
1843
+ pinned` after upgrade against `label` from the server. */
1845
1844
  pinned?: (HelixChat["pinned"]) | undefined;
1846
1845
  /** How near the bottom still counts as being at it, in pixels.
1847
1846
 
@@ -1959,9 +1958,9 @@ Not reflected: the attribute is the consumer's input and stays as they
1959
1958
  wrote it, and `:state(checked)` carries the resolved state for
1960
1959
  stylesheets. */
1961
1960
  checked?: (HelixCheckbox["checked"]) | undefined;
1962
- /** Initial checked state for uncontrolled use, where nothing declared one. */
1961
+ /** Whether the markup declared it checked, which is where a reset returns to. */
1963
1962
  "default-checked"?: (HelixCheckbox["defaultChecked"]) | undefined;
1964
- /** Initial checked state for uncontrolled use, where nothing declared one. */
1963
+ /** Whether the markup declared it checked, which is where a reset returns to. */
1965
1964
  defaultChecked?: (HelixCheckbox["defaultChecked"]) | undefined;
1966
1965
  /** What is wrong, in the reader's words rather than the browser's. */
1967
1966
  feedback?: (HelixCheckbox["feedback"]) | undefined;
@@ -2034,11 +2033,11 @@ present, which is true. Measured, and it is why this is named the other way
2034
2033
  round. The platform already writes booleans like this for the same reason,
2035
2034
  `novalidate` and `nomodule` and `noreferrer` among them.
2036
2035
 
2037
- **Reflected, because the gutter is a stylesheet rule.** `code-block.css`
2038
- reserves the copy button's width with `:host(:not([no-copy]))`, so the
2039
- attribute is what decides whether the block pays for a control. Unreflected,
2040
- setting it from script takes the button away (`render` reads the property)
2041
- and leaves the 40px it stood in reserved.
2036
+ **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
2037
+ the copy button's width with `:host(:not([no-copy]))`, so the attribute is
2038
+ what decides whether the block pays for a control. Unreflected, setting it
2039
+ from script takes the button away (`render` reads the property) and leaves
2040
+ the 40px it stood in reserved.
2042
2041
 
2043
2042
  A false boolean reflects as the attribute's absence, so this costs no
2044
2043
  `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -2054,11 +2053,11 @@ present, which is true. Measured, and it is why this is named the other way
2054
2053
  round. The platform already writes booleans like this for the same reason,
2055
2054
  `novalidate` and `nomodule` and `noreferrer` among them.
2056
2055
 
2057
- **Reflected, because the gutter is a stylesheet rule.** `code-block.css`
2058
- reserves the copy button's width with `:host(:not([no-copy]))`, so the
2059
- attribute is what decides whether the block pays for a control. Unreflected,
2060
- setting it from script takes the button away (`render` reads the property)
2061
- and leaves the 40px it stood in reserved.
2056
+ **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
2057
+ the copy button's width with `:host(:not([no-copy]))`, so the attribute is
2058
+ what decides whether the block pays for a control. Unreflected, setting it
2059
+ from script takes the button away (`render` reads the property) and leaves
2060
+ the 40px it stood in reserved.
2062
2061
 
2063
2062
  A false boolean reflects as the attribute's absence, so this costs no
2064
2063
  `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -2108,9 +2107,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
2108
2107
  last reader did rather than what the author wrote. `:state(open)` carries
2109
2108
  the resolved state for stylesheets, which is what the mirror is for. */
2110
2109
  open?: (HelixColorInput["open"]) | undefined;
2111
- /** Initial open state for uncontrolled use, where nothing declared one. */
2110
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2112
2111
  "default-open"?: (HelixColorInput["defaultOpen"]) | undefined;
2113
- /** Initial open state for uncontrolled use, where nothing declared one. */
2112
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2114
2113
  defaultOpen?: (HelixColorInput["defaultOpen"]) | undefined;
2115
2114
  /** The value the markup declared, which is where a reset returns to. */
2116
2115
  "default-value"?: (HelixColorInput["defaultValue"]) | undefined;
@@ -2364,10 +2363,10 @@ letting it open would take a color from the reader and drop it. */
2364
2363
 
2365
2364
  **A color is exactly as requirable as a date**, which is the comparison
2366
2365
  that settles it: this element extends `HelixFormElement`, carries `name`
2367
- and reports its value, so a consumer writing
2368
- `<helix-color-picker name="brand" required>` inside a form has every reason
2369
- to expect the form to refuse an empty one. Its two siblings in the same
2370
- composition position, Date Picker and Time Picker, both check it.
2366
+ and reports its value, so a consumer writing `<helix-headless-color-picker
2367
+ name="brand" required>` inside a form has every reason to expect the form
2368
+ to refuse an empty one. Its two siblings in the same composition position,
2369
+ Date Picker and Time Picker, both check it.
2371
2370
 
2372
2371
  Written out rather than taken from `MixinField`, for the reason those two
2373
2372
  record: the mixin brings a label, a hint and a feedback region, and this is
@@ -2460,9 +2459,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
2460
2459
  last reader did rather than what the author wrote. `:state(open)` carries
2461
2460
  the resolved state for stylesheets, which is what the mirror is for. */
2462
2461
  open?: (HelixCombobox["open"]) | undefined;
2463
- /** Initial open state for uncontrolled use, where nothing declared one. */
2462
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2464
2463
  "default-open"?: (HelixCombobox["defaultOpen"]) | undefined;
2465
- /** Initial open state for uncontrolled use, where nothing declared one. */
2464
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2466
2465
  defaultOpen?: (HelixCombobox["defaultOpen"]) | undefined;
2467
2466
  /** What the control is called once everything is showing. */
2468
2467
  "collapse-label"?: (HelixCombobox["collapseLabel"]) | undefined;
@@ -2643,9 +2642,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
2643
2642
  last reader did rather than what the author wrote. `:state(open)` carries
2644
2643
  the resolved state for stylesheets, which is what the mirror is for. */
2645
2644
  open?: (HelixCommand["open"]) | undefined;
2646
- /** Initial open state for uncontrolled use, where nothing declared one. */
2645
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2647
2646
  "default-open"?: (HelixCommand["defaultOpen"]) | undefined;
2648
- /** Initial open state for uncontrolled use, where nothing declared one. */
2647
+ /** Whether the markup declared it open. Ignored once `open` is written. */
2649
2648
  defaultOpen?: (HelixCommand["defaultOpen"]) | undefined;
2650
2649
  /** Words shown where the filter has matched nothing. */
2651
2650
  "empty-text"?: (HelixCommand["emptyText"]) | undefined;
@@ -2741,7 +2740,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
2741
2740
  the same way `label` becomes `aria-label` in there.
2742
2741
 
2743
2742
  ```html
2744
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
2743
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
2745
2744
  ```
2746
2745
 
2747
2746
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -3030,17 +3029,17 @@ refusing it leaves the selection as it was. */
3030
3029
 
3031
3030
  **It announces nothing, and that is not an omission.** Nothing in this
3032
3031
  element ever asks for a different page size: a size selector is
3033
- `helix-pagination-size`, which a consumer puts in the `footer` slot and
3034
- answers themselves. Routing this through `requestChange` would announce an
3035
- event the element never has cause to fire. */
3032
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
3033
+ themselves. Routing this through `requestChange` would announce an event
3034
+ the element never has cause to fire. */
3036
3035
  "page-size"?: (HelixDataTable["pageSize"] | `${number}`) | undefined;
3037
3036
  /** How many rows a page holds. Zero is every row, which is what "no paging" means.
3038
3037
 
3039
3038
  **It announces nothing, and that is not an omission.** Nothing in this
3040
3039
  element ever asks for a different page size: a size selector is
3041
- `helix-pagination-size`, which a consumer puts in the `footer` slot and
3042
- answers themselves. Routing this through `requestChange` would announce an
3043
- event the element never has cause to fire. */
3040
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
3041
+ themselves. Routing this through `requestChange` would announce an event
3042
+ the element never has cause to fire. */
3044
3043
  pageSize?: (HelixDataTable["pageSize"]) | undefined;
3045
3044
  /** How many rows the whole result has, where this element cannot count them.
3046
3045
 
@@ -3152,9 +3151,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
3152
3151
  last reader did rather than what the author wrote. `:state(open)` carries
3153
3152
  the resolved state for stylesheets, which is what the mirror is for. */
3154
3153
  open?: (HelixDateInput["open"]) | undefined;
3155
- /** Initial open state for uncontrolled use, where nothing declared one. */
3154
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3156
3155
  "default-open"?: (HelixDateInput["defaultOpen"]) | undefined;
3157
- /** Initial open state for uncontrolled use, where nothing declared one. */
3156
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3158
3157
  defaultOpen?: (HelixDateInput["defaultOpen"]) | undefined;
3159
3158
  /** What the control is called once everything is showing. */
3160
3159
  "collapse-label"?: (HelixDateInput["collapseLabel"]) | undefined;
@@ -3618,9 +3617,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
3618
3617
  last reader did rather than what the author wrote. `:state(open)` carries
3619
3618
  the resolved state for stylesheets, which is what the mirror is for. */
3620
3619
  open?: (HelixDialog["open"]) | undefined;
3621
- /** Initial open state for uncontrolled use, where nothing declared one. */
3620
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3622
3621
  "default-open"?: (HelixDialog["defaultOpen"]) | undefined;
3623
- /** Initial open state for uncontrolled use, where nothing declared one. */
3622
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3624
3623
  defaultOpen?: (HelixDialog["defaultOpen"]) | undefined;
3625
3624
  /** Which close requests the browser answers on its own.
3626
3625
 
@@ -3780,7 +3779,7 @@ thickness decides is arithmetic done here and published as
3780
3779
  `--donut-chart-stroke`, which is a number a rule can do sums with where the
3781
3780
  word is not. Reflected, it wrote a value onto every host a script had set
3782
3781
  it on for nothing to read. `sweep` beside it is the converse and reflects,
3783
- because three rules select on it. */
3782
+ because the styled sheet selects on it. */
3784
3783
  hole?: (HelixDonutChart["hole"]) | undefined;
3785
3784
  /** How much of the circle the whole occupies.
3786
3785
 
@@ -3846,9 +3845,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
3846
3845
  last reader did rather than what the author wrote. `:state(open)` carries
3847
3846
  the resolved state for stylesheets, which is what the mirror is for. */
3848
3847
  open?: (HelixDrawer["open"]) | undefined;
3849
- /** Initial open state for uncontrolled use, where nothing declared one. */
3848
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3850
3849
  "default-open"?: (HelixDrawer["defaultOpen"]) | undefined;
3851
- /** Initial open state for uncontrolled use, where nothing declared one. */
3850
+ /** Whether the markup declared it open. Ignored once `open` is written. */
3852
3851
  defaultOpen?: (HelixDrawer["defaultOpen"]) | undefined;
3853
3852
  /** Which close requests the browser answers on its own.
3854
3853
 
@@ -3888,10 +3887,10 @@ not, rather than shown or hidden by CSS. */
3888
3887
  modal?: (HelixDrawer["modal"]) | undefined;
3889
3888
  /** Which edge the drawer comes from.
3890
3889
 
3891
- Unset is `end`, which the styled tier reads as `:host(:not([placement]))`
3892
- beside `:host([placement="end"])` rather than as a value written here: a
3890
+ Unset is `end`, and it stays unset rather than being written down: a
3893
3891
  default assigned to the property would reflect onto every host and put a
3894
- `placement="end"` into markup no consumer wrote. */
3892
+ `placement="end"` into markup no consumer wrote. So what this tier
3893
+ guarantees is the absence, and a sheet selects on it. */
3895
3894
  placement?: (HelixDrawer["placement"]) | undefined;
3896
3895
  /** What the dialog closed with, the way `<dialog>` reports it.
3897
3896
 
@@ -4292,9 +4291,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
4292
4291
  last reader did rather than what the author wrote. `:state(open)` carries
4293
4292
  the resolved state for stylesheets, which is what the mirror is for. */
4294
4293
  open?: (HelixFilterInput["open"]) | undefined;
4295
- /** Initial open state for uncontrolled use, where nothing declared one. */
4294
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4296
4295
  "default-open"?: (HelixFilterInput["defaultOpen"]) | undefined;
4297
- /** Initial open state for uncontrolled use, where nothing declared one. */
4296
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4298
4297
  defaultOpen?: (HelixFilterInput["defaultOpen"]) | undefined;
4299
4298
  /** What the control is called once everything is showing. */
4300
4299
  "collapse-label"?: (HelixFilterInput["collapseLabel"]) | undefined;
@@ -4419,11 +4418,12 @@ renders nothing rather than the epoch, which is what parsing an empty string
4419
4418
  would give.
4420
4419
 
4421
4420
  **The element's own text is read as a fallback, and only in a browser.**
4422
- `<helix-format-date elapsed>2026-08-27T01:00:00Z</helix-format-date>` is the
4423
- spelling that reads best in markup, and it cannot be the only one: measured
4424
- against Lit's server shim, `textContent`, `children`, `firstChild` and
4425
- `querySelector` are all `undefined` there, so a server has no way to see it.
4426
- An element rendered on a server needs the attribute; one rendered in a
4421
+ `<helix-headless-format-date
4422
+ elapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling
4423
+ that reads best in markup, and it cannot be the only one: measured against
4424
+ Lit's server shim, `textContent`, `children`, `firstChild` and
4425
+ `querySelector` are all `undefined` there, so a server has no way to see
4426
+ it. An element rendered on a server needs the attribute; one rendered in a
4427
4427
  browser may use either. */
4428
4428
  date?: (HelixFormatDate["date"]) | undefined;
4429
4429
  /** How the day of the month is written, where a date is shown. */
@@ -4524,12 +4524,12 @@ so a number written here that disagrees with the sheet is a promise the
4524
4524
  consumer has to keep by hand, and the one number a summary is told to trust
4525
4525
  is the one it gets wrong.
4526
4526
 
4527
- The strip measures itself, so `--heatmap-cell-inline-size` and `--heatmap-gap` are
4528
- enough on their own and these two are the estimate used until the first
4529
- measurement lands. Writing the attribute pins the value and stops the
4530
- measurement being consulted, which is what a container query or a transition
4531
- on the cell size wants, where what is drawn this frame is not what the
4532
- arithmetic should plan around.
4527
+ The strip measures itself, so sizing the cells in a sheet is enough on its
4528
+ own and these two are the estimate used until the first measurement lands.
4529
+ Writing the attribute pins the value and stops the measurement being
4530
+ consulted, which is what a container query or a transition on the cell size
4531
+ wants, where what is drawn this frame is not what the arithmetic should
4532
+ plan around.
4533
4533
 
4534
4534
  Zero turns the dropping off altogether, which is right for a strip in a
4535
4535
  container that cannot get narrow. */
@@ -4542,12 +4542,12 @@ so a number written here that disagrees with the sheet is a promise the
4542
4542
  consumer has to keep by hand, and the one number a summary is told to trust
4543
4543
  is the one it gets wrong.
4544
4544
 
4545
- The strip measures itself, so `--heatmap-cell-inline-size` and `--heatmap-gap` are
4546
- enough on their own and these two are the estimate used until the first
4547
- measurement lands. Writing the attribute pins the value and stops the
4548
- measurement being consulted, which is what a container query or a transition
4549
- on the cell size wants, where what is drawn this frame is not what the
4550
- arithmetic should plan around.
4545
+ The strip measures itself, so sizing the cells in a sheet is enough on its
4546
+ own and these two are the estimate used until the first measurement lands.
4547
+ Writing the attribute pins the value and stops the measurement being
4548
+ consulted, which is what a container query or a transition on the cell size
4549
+ wants, where what is drawn this frame is not what the arithmetic should
4550
+ plan around.
4551
4551
 
4552
4552
  Zero turns the dropping off altogether, which is right for a strip in a
4553
4553
  container that cannot get narrow. */
@@ -4640,7 +4640,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
4640
4640
  the same way `label` becomes `aria-label` in there.
4641
4641
 
4642
4642
  ```html
4643
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
4643
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
4644
4644
  ```
4645
4645
 
4646
4646
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -4875,10 +4875,10 @@ Read-only to a consumer: it is a report rather than a setting.
4875
4875
  **Mirrored to `data-status`, and not reflected as `status`.** It is element
4876
4876
  state, so reflecting it puts the element's own bookkeeping into the markup
4877
4877
  a consumer rendered: React reads the attribute appearing at upgrade as a
4878
- hydration mismatch, and a serialized `<helix-image status="loaded">` pasted
4879
- back declares that a picture has arrived which this element has never
4880
- fetched. The `data-` name is the library's answer to both, being a name a
4881
- re-parse cannot mistake for a declaration, and it is what `data-closed` on
4878
+ hydration mismatch, and a host pasted back carrying `status="loaded"`
4879
+ declares that a picture has arrived which this element has never fetched.
4880
+ The `data-` name is the library's answer to both, being a name a re-parse
4881
+ cannot mistake for a declaration, and it is what `data-closed` on
4882
4882
  `Toast.Item` already does. A picture arrives after somebody fetched it,
4883
4883
  which puts this on the safe side of hydration: a fact that can be true on
4884
4884
  the *first* update mirrors to a custom state instead, which is what
@@ -4961,20 +4961,20 @@ Not a label: it goes when typing starts. */
4961
4961
  **The attribute is `readonly`, which is the platform's spelling.** A
4962
4962
  camelCase property needs an explicit `attribute`, and dash-casing a word
4963
4963
  HTML writes as one costs what an attribute always costs here: nothing
4964
- warns. `<helix-input readonly>` is what anybody who has written HTML types;
4965
- against `read-only` it parses to no property at all, and the field stays
4966
- editable with no error anywhere. Measured on the dash-cased form, `readOnly`
4967
- came back `false`. */
4964
+ warns. `<helix-headless-input readonly>` is what anybody who has written
4965
+ HTML types; against `read-only` it parses to no property at all, and the
4966
+ field stays editable with no error anywhere. Measured on the dash-cased
4967
+ form, `readOnly` came back `false`. */
4968
4968
  readonly?: (HelixInput["readOnly"]) | undefined;
4969
4969
  /** Whether the field refuses input while still submitting its value.
4970
4970
 
4971
4971
  **The attribute is `readonly`, which is the platform's spelling.** A
4972
4972
  camelCase property needs an explicit `attribute`, and dash-casing a word
4973
4973
  HTML writes as one costs what an attribute always costs here: nothing
4974
- warns. `<helix-input readonly>` is what anybody who has written HTML types;
4975
- against `read-only` it parses to no property at all, and the field stays
4976
- editable with no error anywhere. Measured on the dash-cased form, `readOnly`
4977
- came back `false`. */
4974
+ warns. `<helix-headless-input readonly>` is what anybody who has written
4975
+ HTML types; against `read-only` it parses to no property at all, and the
4976
+ field stays editable with no error anywhere. Measured on the dash-cased
4977
+ form, `readOnly` came back `false`. */
4978
4978
  readOnly?: (HelixInput["readOnly"]) | undefined;
4979
4979
  /** Whether a password field offers a toggle that shows what was typed.
4980
4980
 
@@ -4995,9 +4995,9 @@ The state is `aria-pressed`, not this. */
4995
4995
 
4996
4996
  **Not reflected.** Reflection exists so a selector can reach a value, and
4997
4997
  no stylesheet in this repository selects on `type`. Reflecting it writes
4998
- `type="text"` onto every `<helix-input>` ever rendered, an attribute no
4999
- consumer's markup has, which is the fault the area rules write up under
5000
- `Button`'s `href`, `target` and `rel`.
4998
+ `type="text"` onto every `<helix-headless-input>` ever rendered, an
4999
+ attribute no consumer's markup has, which is the fault the area rules write
5000
+ up under `Button`'s `href`, `target` and `rel`.
5001
5001
 
5002
5002
  Nothing reads it from the attribute either. The real `<input>` inside takes
5003
5003
  it as a property binding, which is what makes the keyboard and the
@@ -5310,8 +5310,7 @@ beside it for instance. `ring` lets the ground through, for a chart drawn
5310
5310
  over something busy. `triangle` points along the axis and reads as "and
5311
5311
  onward" rather than as a second claim about the data.
5312
5312
 
5313
- The shapes come from
5314
- `helix/styled/src/shared/chart/terminus.css`, the same sheet `Sparkline` takes, so
5313
+ The shapes come from one shared sheet, the same one `Sparkline` takes, so
5315
5314
  the set is identical wherever one appears. **Which is why every value is
5316
5315
  named here.** `Sparkline` shipped `square` implemented, drawn, asserted and
5317
5316
  undocumented until the cohort before this one; this family reads the same
@@ -5395,10 +5394,10 @@ has to survive with the stylesheet turned off.
5395
5394
  label?: (HelixList["label"]) | undefined;
5396
5395
  /** Which markers an ordered list draws, in `<ol type>`'s own five values.
5397
5396
 
5398
- Reflected, because this is one of the things a stylesheet selects on and
5399
- the styled tier maps each to a `list-style-type`. The platform's spellings
5400
- rather than the CSS ones, so `<helix-list kind="ordered" type="i">` is what
5401
- a consumer would have written on an `<ol>`.
5397
+ Reflected, because this is one of the things a stylesheet selects on, each
5398
+ value mapping to a `list-style-type`. The platform's spellings rather than
5399
+ the CSS ones, so `<helix-headless-list kind="ordered" type="i">` is what a
5400
+ consumer would have written on an `<ol>`.
5402
5401
 
5403
5402
  **`start` and `reversed` are both absent and neither can be done here.**
5404
5403
  This renders no `<ol>`: the rows are slotted and numbered by the CSS
@@ -5579,9 +5578,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
5579
5578
  last reader did rather than what the author wrote. `:state(open)` carries
5580
5579
  the resolved state for stylesheets, which is what the mirror is for. */
5581
5580
  open?: (HelixMegamenu["open"]) | undefined;
5582
- /** Initial open state for uncontrolled use, where nothing declared one. */
5581
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5583
5582
  "default-open"?: (HelixMegamenu["defaultOpen"]) | undefined;
5584
- /** Initial open state for uncontrolled use, where nothing declared one. */
5583
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5585
5584
  defaultOpen?: (HelixMegamenu["defaultOpen"]) | undefined;
5586
5585
  /** The width, in pixels, under which a card becomes a band. Zero never does.
5587
5586
 
@@ -5797,9 +5796,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
5797
5796
  last reader did rather than what the author wrote. `:state(open)` carries
5798
5797
  the resolved state for stylesheets, which is what the mirror is for. */
5799
5798
  open?: (HelixMenu["open"]) | undefined;
5800
- /** Initial open state for uncontrolled use, where nothing declared one. */
5799
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5801
5800
  "default-open"?: (HelixMenu["defaultOpen"]) | undefined;
5802
- /** Initial open state for uncontrolled use, where nothing declared one. */
5801
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5803
5802
  defaultOpen?: (HelixMenu["defaultOpen"]) | undefined;
5804
5803
  /** What the row returning from a submenu reads. */
5805
5804
  "back-label"?: (HelixMenu["backLabel"]) | undefined;
@@ -5973,9 +5972,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
5973
5972
  last reader did rather than what the author wrote. `:state(open)` carries
5974
5973
  the resolved state for stylesheets, which is what the mirror is for. */
5975
5974
  open?: (HelixNotificationGroup["open"]) | undefined;
5976
- /** Initial open state for uncontrolled use, where nothing declared one. */
5975
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5977
5976
  "default-open"?: (HelixNotificationGroup["defaultOpen"]) | undefined;
5978
- /** Initial open state for uncontrolled use, where nothing declared one. */
5977
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5979
5978
  defaultOpen?: (HelixNotificationGroup["defaultOpen"]) | undefined;
5980
5979
  /** Whether the group can be collapsed to its first row.
5981
5980
 
@@ -6066,10 +6065,10 @@ this element then owns.
6066
6065
 
6067
6066
  **Not reflected.** Unread is a visual state, which is why the four mixins
6068
6067
  mirror theirs, but the mirror may not be the property's own attribute:
6069
- `<helix-notification default-read>` comes back from a server without `read`
6070
- and would gain it on the first update, which React reports as a hydration
6071
- mismatch, and which a copy of the serialized element re-parses as a
6072
- declaration. `:state(read)` is what the stylesheet reads.
6068
+ `<helix-headless-notification default-read>` comes back from a server
6069
+ without `read` and would gain it on the first update, which React reports
6070
+ as a hydration mismatch, and which a copy of the serialized element
6071
+ re-parses as a declaration. `:state(read)` is what the stylesheet reads.
6073
6072
  `hydration.dom.spec.ts` holds it. */
6074
6073
  read?: (HelixNotification["read"]) | undefined;
6075
6074
  /** State to open with, where nothing declared one. */
@@ -6359,11 +6358,10 @@ Written by the listbox. */
6359
6358
  /** A second destination for this row, taken with the modifier held.
6360
6359
 
6361
6360
  **An attribute rather than a second row, which is the whole point.** A
6362
- palette of eighty-eight components that offered each of them a reference
6363
- page and a sandbox as separate entries would be a palette of a hundred and
6364
- seventy-six, and one earns its keep by getting a reader to one thing in
6365
- three keystrokes. The row already carries the first destination, so the
6366
- second belongs beside it.
6361
+ palette that offered every component a reference page and a sandbox as
6362
+ separate entries would be twice as long, and one earns its keep by getting
6363
+ a reader to one thing in three keystrokes. The row already carries the
6364
+ first destination, so the second belongs beside it.
6367
6365
 
6368
6366
  Declared here and acted on by whatever owns the list, the same division
6369
6367
  selection already uses: an option says what it is and the listbox decides
@@ -6433,7 +6431,7 @@ attribute and the state is the property.
6433
6431
  **The attribute, read when it is asked for, and never a snapshot taken in
6434
6432
  the constructor.** A field initializer runs there, and an element the HTML
6435
6433
  parser created has none of its attributes yet at that moment: measured on
6436
- this element, on `Radio` and on `Toggle`, `<helix-option value="a"
6434
+ this element, on `Radio` and on `Toggle`, `<helix-headless-option value="a"
6437
6435
  selected>` reported `defaultSelected` as `false` both from parsed markup
6438
6436
  and from `createElement` followed by `setAttribute`, which is every way a
6439
6437
  consumer writes one. The snapshot could only ever be true for an element
@@ -6822,10 +6820,10 @@ other end is going to reject. A consumer whose codes really do carry
6822
6820
  marked letters wants `text`, which judges nothing.
6823
6821
 
6824
6822
  **Not reflected**: nothing selects on it, so reflecting only writes
6825
- `type="numeric"` onto every `<helix-pin-input>` ever rendered, an attribute
6826
- no consumer's markup had. The area rules carry the sentence "reflect only
6827
- what CSS selects on". The real inputs take it as a binding, which is what
6828
- makes the keyboard follow. */
6823
+ `type="numeric"` onto every `<helix-headless-pin-input>` ever rendered, an
6824
+ attribute no consumer's markup had. The area rules carry the sentence
6825
+ "reflect only what CSS selects on". The real inputs take it as a binding,
6826
+ which is what makes the keyboard follow. */
6829
6827
  type?: (HelixPinInput["type"]) | undefined;
6830
6828
  /** Whether the control is non-interactive.
6831
6829
 
@@ -6900,9 +6898,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
6900
6898
  last reader did rather than what the author wrote. `:state(open)` carries
6901
6899
  the resolved state for stylesheets, which is what the mirror is for. */
6902
6900
  open?: (HelixPopover["open"]) | undefined;
6903
- /** Initial open state for uncontrolled use, where nothing declared one. */
6901
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6904
6902
  "default-open"?: (HelixPopover["defaultOpen"]) | undefined;
6905
- /** Initial open state for uncontrolled use, where nothing declared one. */
6903
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6906
6904
  defaultOpen?: (HelixPopover["defaultOpen"]) | undefined;
6907
6905
  /** Accessible name for the panel. */
6908
6906
  label?: (HelixPopover["label"]) | undefined;
@@ -7213,7 +7211,7 @@ attribute and the state is the property.
7213
7211
  **The attribute, read when it is asked for, and never a snapshot taken in
7214
7212
  the constructor.** A field initializer runs there, and an element the HTML
7215
7213
  parser created has none of its attributes yet at that moment: measured on
7216
- this element, on `Option` and on `Toggle`, `<helix-radio value="a"
7214
+ this element, on `Option` and on `Toggle`, `<helix-headless-radio value="a"
7217
7215
  selected>` reported `defaultSelected` as `false` both from parsed markup
7218
7216
  and from `createElement` followed by `setAttribute`, which is every way a
7219
7217
  consumer writes one. The snapshot could only ever be true for an element
@@ -7817,9 +7815,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
7817
7815
  last reader did rather than what the author wrote. `:state(open)` carries
7818
7816
  the resolved state for stylesheets, which is what the mirror is for. */
7819
7817
  open?: (HelixSelect["open"]) | undefined;
7820
- /** Initial open state for uncontrolled use, where nothing declared one. */
7818
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7821
7819
  "default-open"?: (HelixSelect["defaultOpen"]) | undefined;
7822
- /** Initial open state for uncontrolled use, where nothing declared one. */
7820
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7823
7821
  defaultOpen?: (HelixSelect["defaultOpen"]) | undefined;
7824
7822
  /** The value the markup declared, which is where a reset returns to. */
7825
7823
  "default-value"?: (HelixSelect["defaultValue"]) | undefined;
@@ -8238,9 +8236,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
8238
8236
  last reader did rather than what the author wrote. `:state(open)` carries
8239
8237
  the resolved state for stylesheets, which is what the mirror is for. */
8240
8238
  open?: (HelixSpeedDial["open"]) | undefined;
8241
- /** Initial open state for uncontrolled use, where nothing declared one. */
8239
+ /** Whether the markup declared it open. Ignored once `open` is written. */
8242
8240
  "default-open"?: (HelixSpeedDial["defaultOpen"]) | undefined;
8243
- /** Initial open state for uncontrolled use, where nothing declared one. */
8241
+ /** Whether the markup declared it open. Ignored once `open` is written. */
8244
8242
  defaultOpen?: (HelixSpeedDial["defaultOpen"]) | undefined;
8245
8243
  /** Names the trigger and the set of actions it opens. */
8246
8244
  label?: (HelixSpeedDial["label"]) | undefined;
@@ -8412,9 +8410,9 @@ the headline and the label is a caption under it.
8412
8410
  The row directions set them side by side, for a figure in a line of text or
8413
8411
  a narrow strip where a stacked pair would be two lines of almost nothing.
8414
8412
 
8415
- A property rather than a `helix-flex` around it, because the unit has to
8416
- stay on the value's baseline whichever way the pair goes, and only this
8417
- element knows which of its children the unit belongs to.
8413
+ A property rather than a `Flex` around it, because the unit has to stay on
8414
+ the value's baseline whichever way the pair goes, and only this element
8415
+ knows which of its children the unit belongs to.
8418
8416
 
8419
8417
  **Optional rather than defaulted to `column`, which is not a style
8420
8418
  preference.** A reflecting property with a default writes its attribute onto
@@ -8450,11 +8448,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
8450
8448
  tab, and `default-active` is how markup says where to start without
8451
8449
  naming the current one. */
8452
8450
  active?: (HelixSteps["active"]) | undefined;
8453
- /** Initial item for uncontrolled use.
8451
+ /** Which item the markup declared current.
8454
8452
 
8455
8453
  Ignored once `active` is written. */
8456
8454
  "default-active"?: (HelixSteps["defaultActive"]) | undefined;
8457
- /** Initial item for uncontrolled use.
8455
+ /** Which item the markup declared current.
8458
8456
 
8459
8457
  Ignored once `active` is written. */
8460
8458
  defaultActive?: (HelixSteps["defaultActive"]) | undefined;
@@ -8535,9 +8533,9 @@ Not reflected: the attribute is the consumer's input and stays as they
8535
8533
  wrote it, and `:state(checked)` carries the resolved state for
8536
8534
  stylesheets. */
8537
8535
  checked?: (HelixSwitch["checked"]) | undefined;
8538
- /** Initial checked state for uncontrolled use, where nothing declared one. */
8536
+ /** Whether the markup declared it checked, which is where a reset returns to. */
8539
8537
  "default-checked"?: (HelixSwitch["defaultChecked"]) | undefined;
8540
- /** Initial checked state for uncontrolled use, where nothing declared one. */
8538
+ /** Whether the markup declared it checked, which is where a reset returns to. */
8541
8539
  defaultChecked?: (HelixSwitch["defaultChecked"]) | undefined;
8542
8540
  /** What is wrong, in the reader's words rather than the browser's. */
8543
8541
  feedback?: (HelixSwitch["feedback"]) | undefined;
@@ -8605,15 +8603,15 @@ export type HelixTableColumnHelixBeforeResizeElementEvent =
8605
8603
  export type HelixTableColumnVueProps = {
8606
8604
  /** Which edge the values line up against.
8607
8605
 
8608
- `end` is what a column of numbers wants, so digits of the same magnitude sit
8609
- above each other. Left unset the cell inherits the table's own alignment,
8610
- which is `start` for text in either writing direction. `helix-data-table`
8611
- aligns the cells it draws. A `helix-table`'s cells are markup the consumer
8612
- wrote, so the table writes nothing onto them: it publishes the edge to each
8613
- cell under this column as `--table-cell-align`, which `@fusion.dev/helix`
8614
- reads. The heading is this element's own, and `@fusion.dev/helix` sets it to
8615
- the same edge in either table. `end` is the inline end, so in a
8616
- right-to-left table it is the left.
8606
+ `end` is what a column of numbers wants, so digits of the same magnitude
8607
+ sit above each other. Left unset the cell inherits the table's own
8608
+ alignment, which is `start` for text in either writing direction.
8609
+ `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
8610
+ consumer wrote, so the table writes nothing onto them: it publishes the
8611
+ edge to each cell under this column as `--table-cell-align`, which
8612
+ `@fusion.dev/helix` reads. The heading is this element's own, and
8613
+ `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
8614
+ inline end, so in a right-to-left table it is the left.
8617
8615
 
8618
8616
  **Reflected, because the heading is drawn by a stylesheet and has no other
8619
8617
  way to learn it.** Set as a property, which is how React sets it, an
@@ -8660,8 +8658,8 @@ onto its host. */
8660
8658
  /** The track this column takes, as CSS.
8661
8659
 
8662
8660
  A single track value, so anything valid in `grid-template-columns` works:
8663
- `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track
8664
- in its place in a `helix-table`'s `columns`, where that table sets one, and
8661
+ `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track in
8662
+ its place in a `Table`'s `columns`, where that table sets one, and
8665
8663
  otherwise shares what is left over equally, as `minmax(max-content, 1fr)`.
8666
8664
  Set here, it wins over that list, which is what lets a reader resize a
8667
8665
  column in a table that set one.
@@ -8721,15 +8719,14 @@ say that without the component knowing what a row looks like. */
8721
8719
  loadingText?: (HelixTable["loadingText"]) | undefined;
8722
8720
  /** The column widths as one track list, written once on the table.
8723
8721
 
8724
- With `helix-table-column` children, each track sizes the column in its
8725
- place, a hidden column counted, so hiding one takes its track with it and
8726
- the rest keep theirs. The columns decide how many tracks there are and this
8727
- list only how wide: a track past the last column is dropped, and a column
8728
- past the last track shares what is left. With no columns declared it is
8729
- the whole track list. Tracks count as the grid counts them, so
8730
- `minmax(0, 1fr)` is one and `repeat(2, 8rem)` is two, and one the grid
8731
- would refuse leaves its column at the default rather than taking the table
8732
- down to one column.
8722
+ With `TableColumn` children, each track sizes the column in its place, a
8723
+ hidden column counted, so hiding one takes its track with it and the rest
8724
+ keep theirs. The columns decide how many tracks there are and this list
8725
+ only how wide: a track past the last column is dropped, and a column past
8726
+ the last track shares what is left. With no columns declared it is the
8727
+ whole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`
8728
+ is one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves
8729
+ its column at the default rather than taking the table down to one column.
8733
8730
 
8734
8731
  **A column's own `width` wins over its track here.** The width is written
8735
8732
  on the column it sizes, which is the more particular statement, and it is
@@ -8743,13 +8740,11 @@ to walk, so a render there knows of no columns and this attribute is the
8743
8740
  whole answer: a table given one lays its grid out in the first paint, and a
8744
8741
  table sized only by its columns is one track wide until it upgrades.
8745
8742
 
8746
- **`helix-data-table` has none of this, and should not.** Its columns are
8747
- its schema rather than an option, so there is always a column to write a
8748
- `width` on and a list here would be a second way to say what that says.
8749
- This table's cells are markup, and a table written as rows of cells with no
8750
- `helix-table-column` in it has nowhere else to be sized from. Both families
8751
- take the same CSS hook, `--table-columns` and `--data-table-columns`, which
8752
- wins over whichever list the element worked out. */
8743
+ **Data Table has none of this, and should not.** Its columns are its schema
8744
+ rather than an option, so there is always a column to write a `width` on
8745
+ and a list here would be a second way to say what that says. This table's
8746
+ cells are markup, and a table written as rows of cells with no column
8747
+ declared in it has nowhere else to be sized from. */
8753
8748
  columns?: (HelixTable["columns"]) | undefined;
8754
8749
  /** Accessible name for the table. */
8755
8750
  label?: (HelixTable["label"]) | undefined;
@@ -8804,11 +8799,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
8804
8799
  tab, and `default-active` is how markup says where to start without
8805
8800
  naming the current one. */
8806
8801
  active?: (HelixTabs["active"]) | undefined;
8807
- /** Initial item for uncontrolled use.
8802
+ /** Which item the markup declared current.
8808
8803
 
8809
8804
  Ignored once `active` is written. */
8810
8805
  "default-active"?: (HelixTabs["defaultActive"]) | undefined;
8811
- /** Initial item for uncontrolled use.
8806
+ /** Which item the markup declared current.
8812
8807
 
8813
8808
  Ignored once `active` is written. */
8814
8809
  defaultActive?: (HelixTabs["defaultActive"]) | undefined;
@@ -9165,9 +9160,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
9165
9160
  last reader did rather than what the author wrote. `:state(open)` carries
9166
9161
  the resolved state for stylesheets, which is what the mirror is for. */
9167
9162
  open?: (HelixTimeInput["open"]) | undefined;
9168
- /** Initial open state for uncontrolled use, where nothing declared one. */
9163
+ /** Whether the markup declared it open. Ignored once `open` is written. */
9169
9164
  "default-open"?: (HelixTimeInput["defaultOpen"]) | undefined;
9170
- /** Initial open state for uncontrolled use, where nothing declared one. */
9165
+ /** Whether the markup declared it open. Ignored once `open` is written. */
9171
9166
  defaultOpen?: (HelixTimeInput["defaultOpen"]) | undefined;
9172
9167
  /** What the control is called once everything is showing. */
9173
9168
  "collapse-label"?: (HelixTimeInput["collapseLabel"]) | undefined;
@@ -9219,8 +9214,8 @@ Absent uses the runtime's own. */
9219
9214
 
9220
9215
  Absent is one. `range` holds a start and an end, `multiple` holds any
9221
9216
  number, and both are carried as one comma-separated value, which is what a
9222
- form submits. `helix-time-picker` carries the longer note on the interaction and on
9223
- why a wheel cannot do either. */
9217
+ form submits. `TimePicker` carries the longer note on the interaction and
9218
+ on why a wheel cannot do either. */
9224
9219
  mode?: (HelixTimeInput["mode"]) | undefined;
9225
9220
  /** What the field says before a time is in it. */
9226
9221
  placeholder?: (HelixTimeInput["placeholder"]) | undefined;
@@ -9249,7 +9244,7 @@ never something this element would refuse to read back. */
9249
9244
  `list` offers whole times, which is what a product with slots or opening
9250
9245
  hours has. `wheels` splits them into an hour, a minute and a meridiem where
9251
9246
  the locale uses one, which is the only way to reach `23:45` without
9252
- scrolling most of a day. `helix-time-picker` carries the longer note on the trade.
9247
+ scrolling most of a day. `TimePicker` carries the longer note on the trade.
9253
9248
 
9254
9249
  **Optional rather than defaulted, which is not a style preference.** A
9255
9250
  reflecting property with a default writes its attribute onto every host the
@@ -9376,7 +9371,7 @@ Absent uses the runtime's own. */
9376
9371
 
9377
9372
  Absent is one. `range` holds a start and an end with everything between
9378
9373
  them shown as part of the answer, `multiple` holds any number, and both are
9379
- carried as one comma-separated value: the same shape `helix-date-picker` uses,
9374
+ carried as one comma-separated value: the same shape `DatePicker` uses,
9380
9375
  because it is the same question asked of a different unit.
9381
9376
 
9382
9377
  **A range is two picks, and a third starts over.** That is the calendar's
@@ -9586,7 +9581,7 @@ where they were would not be a stack.
9586
9581
  **Optional, and bottom-end is the absence of it.** Reflecting *and*
9587
9582
  defaulting is the pair that writes onto a host: every toast region anybody
9588
9583
  rendered would gain a `placement="bottom-end"` nobody typed, which a React
9589
- consumer's server markup does not have. The styled sheet carries the resting
9584
+ consumer's server markup does not have. A sheet carries the resting
9590
9585
  arrangement in its own `:host` rule and the selectors describe only the
9591
9586
  departures, which is what `orientation` does. */
9592
9587
  placement?: (HelixToast["placement"]) | undefined;
@@ -9734,11 +9729,11 @@ attribute and the state is the property.
9734
9729
  **The attribute, read when it is asked for, and never a snapshot taken in
9735
9730
  the constructor.** A field initializer runs there, and an element the HTML
9736
9731
  parser created has none of its attributes yet at that moment: measured on
9737
- this element, on `Option` and on `Radio`, `<helix-toggle value="light"
9738
- selected>` reported `defaultSelected` as `false` both from parsed markup
9739
- and from `createElement` followed by `setAttribute`, which is every way a
9740
- consumer writes one. The snapshot could only ever be true for an element
9741
- already in the document when `customElements.define` ran.
9732
+ this element, on `Option` and on `Radio`, `<helix-headless-toggle
9733
+ value="light" selected>` reported `defaultSelected` as `false` both from
9734
+ parsed markup and from `createElement` followed by `setAttribute`, which is
9735
+ every way a consumer writes one. The snapshot could only ever be true for
9736
+ an element already in the document when `customElements.define` ran.
9742
9737
 
9743
9738
  Nothing overwrites it either, which is what makes reading it late correct
9744
9739
  rather than merely later: `selected` does not reflect, for the reason
@@ -9825,9 +9820,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
9825
9820
  last reader did rather than what the author wrote. `:state(open)` carries
9826
9821
  the resolved state for stylesheets, which is what the mirror is for. */
9827
9822
  open?: (HelixTooltip["open"]) | undefined;
9828
- /** Initial open state for uncontrolled use, where nothing declared one. */
9823
+ /** Whether the markup declared it open. Ignored once `open` is written. */
9829
9824
  "default-open"?: (HelixTooltip["defaultOpen"]) | undefined;
9830
- /** Initial open state for uncontrolled use, where nothing declared one. */
9825
+ /** Whether the markup declared it open. Ignored once `open` is written. */
9831
9826
  defaultOpen?: (HelixTooltip["defaultOpen"]) | undefined;
9832
9827
  /** The text shown in the bubble.
9833
9828
 
@@ -10057,9 +10052,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
10057
10052
  last reader did rather than what the author wrote. `:state(open)` carries
10058
10053
  the resolved state for stylesheets, which is what the mirror is for. */
10059
10054
  open?: (HelixTreeItem["open"]) | undefined;
10060
- /** Initial open state for uncontrolled use, where nothing declared one. */
10055
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10061
10056
  "default-open"?: (HelixTreeItem["defaultOpen"]) | undefined;
10062
- /** Initial open state for uncontrolled use, where nothing declared one. */
10057
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10063
10058
  defaultOpen?: (HelixTreeItem["defaultOpen"]) | undefined;
10064
10059
  /** Where this node goes, which makes its row a real link.
10065
10060
 
@@ -10201,11 +10196,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
10201
10196
  tab, and `default-active` is how markup says where to start without
10202
10197
  naming the current one. */
10203
10198
  active?: (HelixTree["active"]) | undefined;
10204
- /** Initial item for uncontrolled use.
10199
+ /** Which item the markup declared current.
10205
10200
 
10206
10201
  Ignored once `active` is written. */
10207
10202
  "default-active"?: (HelixTree["defaultActive"]) | undefined;
10208
- /** Initial item for uncontrolled use.
10203
+ /** Which item the markup declared current.
10209
10204
 
10210
10205
  Ignored once `active` is written. */
10211
10206
  defaultActive?: (HelixTree["defaultActive"]) | undefined;
@@ -10363,11 +10358,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
10363
10358
  tab, and `default-active` is how markup says where to start without
10364
10359
  naming the current one. */
10365
10360
  active?: (HelixVideoPlaylist["active"]) | undefined;
10366
- /** Initial item for uncontrolled use.
10361
+ /** Which item the markup declared current.
10367
10362
 
10368
10363
  Ignored once `active` is written. */
10369
10364
  "default-active"?: (HelixVideoPlaylist["defaultActive"]) | undefined;
10370
- /** Initial item for uncontrolled use.
10365
+ /** Which item the markup declared current.
10371
10366
 
10372
10367
  Ignored once `active` is written. */
10373
10368
  defaultActive?: (HelixVideoPlaylist["defaultActive"]) | undefined;
@@ -10761,7 +10756,7 @@ export type CustomCssProperties = {
10761
10756
  "--bar-chart-line-width"?: (string) | undefined;
10762
10757
  /** How wide an axis column is drawn, in `ch`, from the widest number on it. Written on the axis itself, and only where the categories run along the bottom: turned sideways an axis is a row and takes a line's height instead. */
10763
10758
  "--bar-chart-axis"?: (string) | undefined;
10764
- /** The color of the secondary axis when one series owns it. It resolves a `--helix-color-series-*` token, so on the headless tier alone it names something that is not there. #138. */
10759
+ /** The color of the secondary axis, where one series owns it. Written by the component from that series' `--chart-series-*`, so it promises the series color and nothing more: whatever that hook resolves to is what the axis is drawn in. */
10765
10760
  "--bar-chart-secondary"?: (string) | undefined;
10766
10761
  /** The gradient a bar would take, named per bar so the styled tier can point `fill` at it. Drawn whatever the treatment and used only where `wash="gradient"` asks for it. */
10767
10762
  "--chart-bar-wash"?: (string) | undefined;
@@ -10985,9 +10980,9 @@ export type CustomCssProperties = {
10985
10980
  "--data-table-rule-color"?: (string) | undefined;
10986
10981
  /** Type size, headings and cells alike. */
10987
10982
  "--data-table-text"?: (string) | undefined;
10988
- /** The edge the column a cell sits under is set to, `start`, `center` or `end`, and unset under a column that sets none. Written by the component onto each cell it draws, read by the sheet that paints one; `helix-table` publishes `--table-cell-align` for the same attribute on the cells a consumer wrote, under its own family's name. */
10983
+ /** The edge the column a cell sits under is set to, `start`, `center` or `end`, and unset under a column that sets none. Written by the component onto each cell it draws, read by the sheet that paints one; Table publishes `--table-cell-align` for the same attribute on the cells a consumer wrote, under its own family's name. */
10989
10984
  "--data-table-cell-align"?: (string) | undefined;
10990
- /** The column track list this element worked out from the columns declared in it. Written by the component, read by the sheet that paints: a stylesheet takes it to lay the grid out, and setting it does nothing, because the component writes it inline on the very element that reads it and an inline declaration beats any sheet. `--data-table-columns` is the one to set. */
10985
+ /** The column track list this element worked out from the columns declared in it. Written by the component, read by the sheet that paints: a stylesheet takes it to lay the grid out, and setting it does nothing, because the component writes it inline on the very element that reads it and an inline declaration beats any sheet. A column's `width` is the one to set. */
10991
10986
  "--data-table-template"?: (string) | undefined;
10992
10987
  /** Fill behind the field. */
10993
10988
  "--date-input-background-color"?: (string) | undefined;
@@ -11591,7 +11586,7 @@ export type CustomCssProperties = {
11591
11586
  "--table-cell-align"?: (string) | undefined;
11592
11587
  /** Track list for the columns, which wins over the one the columns worked out. */
11593
11588
  "--table-columns"?: (string) | undefined;
11594
- /** The column track list this element worked out from the columns declared in it. Written by the component, read by the sheet that paints: a stylesheet takes it to lay the grid out, and setting it does nothing, because the component writes it inline on the very element that reads it and an inline declaration beats any sheet. `--table-columns` is the one to set. */
11589
+ /** The column track list this element worked out from the columns declared in it. Written by the component, read by the sheet that paints: a stylesheet takes it to lay the grid out, and setting it does nothing, because the component writes it inline on the very element that reads it and an inline declaration beats any sheet. `columns` is the one to set. */
11595
11590
  "--table-template"?: (string) | undefined;
11596
11591
  /** Fill behind the tag. */
11597
11592
  "--tag-background-color"?: (string) | undefined;