@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/jsx.d.ts CHANGED
@@ -412,9 +412,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
412
412
  last reader did rather than what the author wrote. `:state(open)` carries
413
413
  the resolved state for stylesheets, which is what the mirror is for. */
414
414
  open?: (HelixAccordionItem["open"]) | undefined;
415
- /** Initial open state for uncontrolled use, where nothing declared one. */
415
+ /** Whether the markup declared it open. Ignored once `open` is written. */
416
416
  "default-open"?: (HelixAccordionItem["defaultOpen"]) | undefined;
417
- /** Initial open state for uncontrolled use, where nothing declared one. */
417
+ /** Whether the markup declared it open. Ignored once `open` is written. */
418
418
  defaultOpen?: (HelixAccordionItem["defaultOpen"]) | undefined;
419
419
  /** Where the open indicator sits, or whether there is one.
420
420
 
@@ -479,9 +479,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
479
479
  last reader did rather than what the author wrote. `:state(open)` carries
480
480
  the resolved state for stylesheets, which is what the mirror is for. */
481
481
  "prop:open"?: (HelixAccordionItem["open"]) | undefined;
482
- /** Initial open state for uncontrolled use, where nothing declared one. */
482
+ /** Whether the markup declared it open. Ignored once `open` is written. */
483
483
  "bool:default-open"?: (HelixAccordionItem["defaultOpen"]) | undefined;
484
- /** Initial open state for uncontrolled use, where nothing declared one. */
484
+ /** Whether the markup declared it open. Ignored once `open` is written. */
485
485
  "prop:defaultOpen"?: (HelixAccordionItem["defaultOpen"]) | undefined;
486
486
  /** Where the open indicator sits, or whether there is one.
487
487
 
@@ -1253,13 +1253,13 @@ export type HelixAvatarGroupProps = {
1253
1253
  Unset shows all of them, which is what no limit means and is more useful
1254
1254
  than refusing to render.
1255
1255
 
1256
- **Reflected, because the fold is a stylesheet rule and nothing else.** The
1257
- styled tier hides past the limit with `:host([max="N"]) ::slotted(:nth-child(n + N+1))`,
1258
- so the attribute *is* the mechanism: a `max` that reaches this property and
1259
- never reaches the host matches no rule, and every avatar is drawn beside a
1260
- count claiming some are hidden. Markup is the safe path and hides the fault;
1261
- a script is the broken one, and React takes it for everyone, assigning a
1262
- matching property rather than an attribute.
1256
+ **Reflected, because the fold is a stylesheet rule and nothing else.** A
1257
+ sheet hides past the limit one selector per value, as `FOLDS_UP_TO`
1258
+ describes, so the attribute *is* the mechanism: a `max` that reaches this
1259
+ property and never reaches the host matches no rule, and every avatar is
1260
+ drawn beside a count claiming some are hidden. Markup is the safe path and
1261
+ hides the fault; a script is the broken one, and React takes it for
1262
+ everyone, assigning a matching property rather than an attribute.
1263
1263
 
1264
1264
  **Optional rather than defaulted, per the rule that a reflected property
1265
1265
  takes no default**: `max = 0` would stamp `max="0"` onto every host that
@@ -1275,13 +1275,13 @@ export type HelixAvatarGroupSolidJsProps = {
1275
1275
  Unset shows all of them, which is what no limit means and is more useful
1276
1276
  than refusing to render.
1277
1277
 
1278
- **Reflected, because the fold is a stylesheet rule and nothing else.** The
1279
- styled tier hides past the limit with `:host([max="N"]) ::slotted(:nth-child(n + N+1))`,
1280
- so the attribute *is* the mechanism: a `max` that reaches this property and
1281
- never reaches the host matches no rule, and every avatar is drawn beside a
1282
- count claiming some are hidden. Markup is the safe path and hides the fault;
1283
- a script is the broken one, and React takes it for everyone, assigning a
1284
- matching property rather than an attribute.
1278
+ **Reflected, because the fold is a stylesheet rule and nothing else.** A
1279
+ sheet hides past the limit one selector per value, as `FOLDS_UP_TO`
1280
+ describes, so the attribute *is* the mechanism: a `max` that reaches this
1281
+ property and never reaches the host matches no rule, and every avatar is
1282
+ drawn beside a count claiming some are hidden. Markup is the safe path and
1283
+ hides the fault; a script is the broken one, and React takes it for
1284
+ everyone, assigning a matching property rather than an attribute.
1285
1285
 
1286
1286
  **Optional rather than defaulted, per the rule that a reflected property
1287
1287
  takes no default**: `max = 0` would stamp `max="0"` onto every host that
@@ -1545,7 +1545,7 @@ tier draws whether or not anything points at it.
1545
1545
  **A chart-domain axis and deliberately not a library one.** It lives on this
1546
1546
  family alone, and here it is a way of encoding data rather than a way of
1547
1547
  expressing a theme: promoted to the registry it would put an attribute on
1548
- eighty-eight components that means nothing on eighty-seven. `wash` because
1548
+ every component in the library and mean something on one. `wash` because
1549
1549
  that is what the tier below already calls it, in `--chart-bar-wash` and in
1550
1550
  the `bar-wash-start` and `bar-wash-end` stops. */
1551
1551
  wash?: (HelixBarChart["wash"]) | undefined;
@@ -1747,7 +1747,7 @@ tier draws whether or not anything points at it.
1747
1747
  **A chart-domain axis and deliberately not a library one.** It lives on this
1748
1748
  family alone, and here it is a way of encoding data rather than a way of
1749
1749
  expressing a theme: promoted to the registry it would put an attribute on
1750
- eighty-eight components that means nothing on eighty-seven. `wash` because
1750
+ every component in the library and mean something on one. `wash` because
1751
1751
  that is what the tier below already calls it, in `--chart-bar-wash` and in
1752
1752
  the `bar-wash-start` and `bar-wash-end` stops. */
1753
1753
  "prop:wash"?: (HelixBarChart["wash"]) | undefined;
@@ -1873,12 +1873,12 @@ export type HelixBreadcrumbProps = {
1873
1873
  current?: (HelixBreadcrumb["current"]) | undefined;
1874
1874
  /** Where the crumb goes, and nothing where it is the current page.
1875
1875
 
1876
- **Optional and reflected, because a stylesheet does select on it.**
1877
- `breadcrumb.css` writes `:host(:not([href])) [part="link"]` to take the
1878
- block padding off a crumb that is not a link, so the attribute is what
1879
- decides how tall a crumb is. Unreflected, an `href` set from script reached
1880
- the property, rendered the anchor, and left the host looking unlinked: the
1881
- crumb drew at 20px where a markup twin drew at 28.
1876
+ **Optional and reflected, because a stylesheet does select on it.** A sheet
1877
+ writes `:host(:not([href])) [part="link"]` to take the block padding off a
1878
+ crumb that is not a link, so the attribute is what decides how tall a crumb
1879
+ is. Unreflected, an `href` set from script reached the property, rendered
1880
+ the anchor, and left the host looking unlinked: the crumb drew at 20px
1881
+ where a markup twin drew at 28.
1882
1882
 
1883
1883
  Optional rather than defaulted, which is the general rule that a reflected
1884
1884
  property takes no default: an `href` written onto every host would be a link
@@ -1901,12 +1901,12 @@ export type HelixBreadcrumbSolidJsProps = {
1901
1901
  "prop:current"?: (HelixBreadcrumb["current"]) | undefined;
1902
1902
  /** Where the crumb goes, and nothing where it is the current page.
1903
1903
 
1904
- **Optional and reflected, because a stylesheet does select on it.**
1905
- `breadcrumb.css` writes `:host(:not([href])) [part="link"]` to take the
1906
- block padding off a crumb that is not a link, so the attribute is what
1907
- decides how tall a crumb is. Unreflected, an `href` set from script reached
1908
- the property, rendered the anchor, and left the host looking unlinked: the
1909
- crumb drew at 20px where a markup twin drew at 28.
1904
+ **Optional and reflected, because a stylesheet does select on it.** A sheet
1905
+ writes `:host(:not([href])) [part="link"]` to take the block padding off a
1906
+ crumb that is not a link, so the attribute is what decides how tall a crumb
1907
+ is. Unreflected, an `href` set from script reached the property, rendered
1908
+ the anchor, and left the host looking unlinked: the crumb drew at 20px
1909
+ where a markup twin drew at 28.
1910
1910
 
1911
1911
  Optional rather than defaulted, which is the general rule that a reflected
1912
1912
  property takes no default: an `href` written onto every host would be a link
@@ -2072,7 +2072,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
2072
2072
  the same way `label` becomes `aria-label` in there.
2073
2073
 
2074
2074
  ```html
2075
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
2075
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
2076
2076
  ```
2077
2077
 
2078
2078
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -2280,7 +2280,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
2280
2280
  the same way `label` becomes `aria-label` in there.
2281
2281
 
2282
2282
  ```html
2283
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
2283
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
2284
2284
  ```
2285
2285
 
2286
2286
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -2759,12 +2759,11 @@ one leaves the other alone. */
2759
2759
  autoplay?: (HelixCarousel["autoplay"]) | undefined;
2760
2760
  /** The slide in view, counted from zero.
2761
2761
 
2762
- Reading gives the real slide, in either mode. Writing sets it, the way a
2763
- script assigning to a native control does. Which mode the carousel is in is
2764
- read once, at the first update, from whether anything had declared an
2765
- `index` by then: declared, and the consumer owns it and the carousel only
2766
- announces where it would have gone; not declared, and the carousel owns it
2767
- and `default-index` says where it starts.
2762
+ Reading gives the real slide. Writing always applies, the way a script
2763
+ assigning to a native control does, and is a seed and a correction rather
2764
+ than a claim of ownership: a consumer who wants the decision refuses the
2765
+ `helix-select`. `default-index` is where the carousel starts until
2766
+ something moves it.
2768
2767
 
2769
2768
  The same contract the four mixins carry, written out here rather than
2770
2769
  extracted, because a slide is addressed by position and every one of those
@@ -2832,13 +2831,13 @@ end while the slides stop moving a third of the way through.
2832
2831
  **The number is published to the styles rather than enumerated by them**,
2833
2832
  as `--carousel-per-view` on the track, which is what keeps a width and a
2834
2833
  count from disagreeing. A sheet can only name a value it wrote a rule for,
2835
- so the styled tier enumerated `per-view="2"` through `5` and called five a
2836
- judgment; above it the pane fell back to one across while this file went on
2837
- counting positions. Measured in Chromium over eight slides, six across gave
2838
- three dots, a pane taking the whole track and five slides reachable only by
2839
- dragging. Written from here there is no ceiling to exceed, and a consumer's
2840
- own sheet reads the same declaration the styled one does. `runEnd` publishes
2841
- its correction the same way and for the same reason.
2834
+ so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
2835
+ above it the pane falls back to one across while this file goes on counting
2836
+ positions. Measured in Chromium over eight slides against such a sheet, six
2837
+ across gave three dots, a pane taking the whole track and five slides
2838
+ reachable only by dragging. Published from here there is no ceiling to
2839
+ exceed, and every sheet reads the same declaration. `runEnd` publishes its
2840
+ correction the same way and for the same reason.
2842
2841
 
2843
2842
  **On the track and not on the host.** A custom property on the host is a
2844
2843
  reflected attribute by another name: it would arrive on upgrade, and a
@@ -2863,8 +2862,8 @@ inline the count would outrank the sheet that computes it, which is why an
2863
2862
  `auto` track is handed nothing. A count stays for the design that calls for
2864
2863
  exactly three.
2865
2864
 
2866
- The styled sheet says how it divides, and the headless `auto` example
2867
- carries the same three lines for a consumer writing their own.
2865
+ A sheet says how it divides, and the `auto` example here carries the same
2866
+ three lines for a consumer writing their own.
2868
2867
 
2869
2868
  **A value rather than the resting behavior**, which is what the
2870
2869
  responsiveness policy asks of every axis that a box decides: a splitter
@@ -2892,13 +2891,13 @@ end while the slides stop moving a third of the way through.
2892
2891
  **The number is published to the styles rather than enumerated by them**,
2893
2892
  as `--carousel-per-view` on the track, which is what keeps a width and a
2894
2893
  count from disagreeing. A sheet can only name a value it wrote a rule for,
2895
- so the styled tier enumerated `per-view="2"` through `5` and called five a
2896
- judgment; above it the pane fell back to one across while this file went on
2897
- counting positions. Measured in Chromium over eight slides, six across gave
2898
- three dots, a pane taking the whole track and five slides reachable only by
2899
- dragging. Written from here there is no ceiling to exceed, and a consumer's
2900
- own sheet reads the same declaration the styled one does. `runEnd` publishes
2901
- its correction the same way and for the same reason.
2894
+ so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
2895
+ above it the pane falls back to one across while this file goes on counting
2896
+ positions. Measured in Chromium over eight slides against such a sheet, six
2897
+ across gave three dots, a pane taking the whole track and five slides
2898
+ reachable only by dragging. Published from here there is no ceiling to
2899
+ exceed, and every sheet reads the same declaration. `runEnd` publishes its
2900
+ correction the same way and for the same reason.
2902
2901
 
2903
2902
  **On the track and not on the host.** A custom property on the host is a
2904
2903
  reflected attribute by another name: it would arrive on upgrade, and a
@@ -2923,8 +2922,8 @@ inline the count would outrank the sheet that computes it, which is why an
2923
2922
  `auto` track is handed nothing. A count stays for the design that calls for
2924
2923
  exactly three.
2925
2924
 
2926
- The styled sheet says how it divides, and the headless `auto` example
2927
- carries the same three lines for a consumer writing their own.
2925
+ A sheet says how it divides, and the `auto` example here carries the same
2926
+ three lines for a consumer writing their own.
2928
2927
 
2929
2928
  **A value rather than the resting behavior**, which is what the
2930
2929
  responsiveness policy asks of every axis that a box decides: a splitter
@@ -3078,12 +3077,11 @@ one leaves the other alone. */
3078
3077
  "prop:autoplay"?: (HelixCarousel["autoplay"]) | undefined;
3079
3078
  /** The slide in view, counted from zero.
3080
3079
 
3081
- Reading gives the real slide, in either mode. Writing sets it, the way a
3082
- script assigning to a native control does. Which mode the carousel is in is
3083
- read once, at the first update, from whether anything had declared an
3084
- `index` by then: declared, and the consumer owns it and the carousel only
3085
- announces where it would have gone; not declared, and the carousel owns it
3086
- and `default-index` says where it starts.
3080
+ Reading gives the real slide. Writing always applies, the way a script
3081
+ assigning to a native control does, and is a seed and a correction rather
3082
+ than a claim of ownership: a consumer who wants the decision refuses the
3083
+ `helix-select`. `default-index` is where the carousel starts until
3084
+ something moves it.
3087
3085
 
3088
3086
  The same contract the four mixins carry, written out here rather than
3089
3087
  extracted, because a slide is addressed by position and every one of those
@@ -3151,13 +3149,13 @@ end while the slides stop moving a third of the way through.
3151
3149
  **The number is published to the styles rather than enumerated by them**,
3152
3150
  as `--carousel-per-view` on the track, which is what keeps a width and a
3153
3151
  count from disagreeing. A sheet can only name a value it wrote a rule for,
3154
- so the styled tier enumerated `per-view="2"` through `5` and called five a
3155
- judgment; above it the pane fell back to one across while this file went on
3156
- counting positions. Measured in Chromium over eight slides, six across gave
3157
- three dots, a pane taking the whole track and five slides reachable only by
3158
- dragging. Written from here there is no ceiling to exceed, and a consumer's
3159
- own sheet reads the same declaration the styled one does. `runEnd` publishes
3160
- its correction the same way and for the same reason.
3152
+ so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
3153
+ above it the pane falls back to one across while this file goes on counting
3154
+ positions. Measured in Chromium over eight slides against such a sheet, six
3155
+ across gave three dots, a pane taking the whole track and five slides
3156
+ reachable only by dragging. Published from here there is no ceiling to
3157
+ exceed, and every sheet reads the same declaration. `runEnd` publishes its
3158
+ correction the same way and for the same reason.
3161
3159
 
3162
3160
  **On the track and not on the host.** A custom property on the host is a
3163
3161
  reflected attribute by another name: it would arrive on upgrade, and a
@@ -3182,8 +3180,8 @@ inline the count would outrank the sheet that computes it, which is why an
3182
3180
  `auto` track is handed nothing. A count stays for the design that calls for
3183
3181
  exactly three.
3184
3182
 
3185
- The styled sheet says how it divides, and the headless `auto` example
3186
- carries the same three lines for a consumer writing their own.
3183
+ A sheet says how it divides, and the `auto` example here carries the same
3184
+ three lines for a consumer writing their own.
3187
3185
 
3188
3186
  **A value rather than the resting behavior**, which is what the
3189
3187
  responsiveness policy asks of every axis that a box decides: a splitter
@@ -3211,13 +3209,13 @@ end while the slides stop moving a third of the way through.
3211
3209
  **The number is published to the styles rather than enumerated by them**,
3212
3210
  as `--carousel-per-view` on the track, which is what keeps a width and a
3213
3211
  count from disagreeing. A sheet can only name a value it wrote a rule for,
3214
- so the styled tier enumerated `per-view="2"` through `5` and called five a
3215
- judgment; above it the pane fell back to one across while this file went on
3216
- counting positions. Measured in Chromium over eight slides, six across gave
3217
- three dots, a pane taking the whole track and five slides reachable only by
3218
- dragging. Written from here there is no ceiling to exceed, and a consumer's
3219
- own sheet reads the same declaration the styled one does. `runEnd` publishes
3220
- its correction the same way and for the same reason.
3212
+ so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
3213
+ above it the pane falls back to one across while this file goes on counting
3214
+ positions. Measured in Chromium over eight slides against such a sheet, six
3215
+ across gave three dots, a pane taking the whole track and five slides
3216
+ reachable only by dragging. Published from here there is no ceiling to
3217
+ exceed, and every sheet reads the same declaration. `runEnd` publishes its
3218
+ correction the same way and for the same reason.
3221
3219
 
3222
3220
  **On the track and not on the host.** A custom property on the host is a
3223
3221
  reflected attribute by another name: it would arrive on upgrade, and a
@@ -3242,8 +3240,8 @@ inline the count would outrank the sheet that computes it, which is why an
3242
3240
  `auto` track is handed nothing. A count stays for the design that calls for
3243
3241
  exactly three.
3244
3242
 
3245
- The styled sheet says how it divides, and the headless `auto` example
3246
- carries the same three lines for a consumer writing their own.
3243
+ A sheet says how it divides, and the `auto` example here carries the same
3244
+ three lines for a consumer writing their own.
3247
3245
 
3248
3246
  **A value rather than the resting behavior**, which is what the
3249
3247
  responsiveness policy asks of every axis that a box decides: a splitter
@@ -3541,13 +3539,13 @@ pinned because a conversation opens at its most recent turn.
3541
3539
 
3542
3540
  **Not reflected, and the default is why.** A reflected property that
3543
3541
  defaults to true writes its attribute on upgrade whether or not the
3544
- consumer wrote one, so the server serves `<helix-chat label="x">` and the
3545
- client turns it into `<helix-chat label="x" pinned>`: a hydration mismatch a
3546
- React consumer reports and does not patch up. Nothing needs the attribute
3547
- either, because the one thing that changes with the pin is the way back, and
3548
- that is a part inside the shadow tree where a stylesheet can already reach
3549
- it. Measured rather than assumed: `label, pinned` after upgrade against
3550
- `label` from the server. */
3542
+ consumer wrote one, so the server serves `<helix-headless-chat label="x">`
3543
+ and the client turns it into `<helix-headless-chat label="x" pinned>`: a
3544
+ hydration mismatch a React consumer reports and does not patch up. Nothing
3545
+ needs the attribute either, because the one thing that changes with the pin
3546
+ is the way back, and that is a part inside the shadow tree where a
3547
+ stylesheet can already reach it. Measured rather than assumed: `label,
3548
+ pinned` after upgrade against `label` from the server. */
3551
3549
  pinned?: (HelixChat["pinned"]) | undefined;
3552
3550
  /** How near the bottom still counts as being at it, in pixels.
3553
3551
 
@@ -3616,13 +3614,13 @@ pinned because a conversation opens at its most recent turn.
3616
3614
 
3617
3615
  **Not reflected, and the default is why.** A reflected property that
3618
3616
  defaults to true writes its attribute on upgrade whether or not the
3619
- consumer wrote one, so the server serves `<helix-chat label="x">` and the
3620
- client turns it into `<helix-chat label="x" pinned>`: a hydration mismatch a
3621
- React consumer reports and does not patch up. Nothing needs the attribute
3622
- either, because the one thing that changes with the pin is the way back, and
3623
- that is a part inside the shadow tree where a stylesheet can already reach
3624
- it. Measured rather than assumed: `label, pinned` after upgrade against
3625
- `label` from the server. */
3617
+ consumer wrote one, so the server serves `<helix-headless-chat label="x">`
3618
+ and the client turns it into `<helix-headless-chat label="x" pinned>`: a
3619
+ hydration mismatch a React consumer reports and does not patch up. Nothing
3620
+ needs the attribute either, because the one thing that changes with the pin
3621
+ is the way back, and that is a part inside the shadow tree where a
3622
+ stylesheet can already reach it. Measured rather than assumed: `label,
3623
+ pinned` after upgrade against `label` from the server. */
3626
3624
  "prop:pinned"?: (HelixChat["pinned"]) | undefined;
3627
3625
  /** How near the bottom still counts as being at it, in pixels.
3628
3626
 
@@ -3796,9 +3794,9 @@ Not reflected: the attribute is the consumer's input and stays as they
3796
3794
  wrote it, and `:state(checked)` carries the resolved state for
3797
3795
  stylesheets. */
3798
3796
  checked?: (HelixCheckbox["checked"]) | undefined;
3799
- /** Initial checked state for uncontrolled use, where nothing declared one. */
3797
+ /** Whether the markup declared it checked, which is where a reset returns to. */
3800
3798
  "default-checked"?: (HelixCheckbox["defaultChecked"]) | undefined;
3801
- /** Initial checked state for uncontrolled use, where nothing declared one. */
3799
+ /** Whether the markup declared it checked, which is where a reset returns to. */
3802
3800
  defaultChecked?: (HelixCheckbox["defaultChecked"]) | undefined;
3803
3801
  /** What is wrong, in the reader's words rather than the browser's. */
3804
3802
  feedback?: (HelixCheckbox["feedback"]) | undefined;
@@ -3874,9 +3872,9 @@ Not reflected: the attribute is the consumer's input and stays as they
3874
3872
  wrote it, and `:state(checked)` carries the resolved state for
3875
3873
  stylesheets. */
3876
3874
  "prop:checked"?: (HelixCheckbox["checked"]) | undefined;
3877
- /** Initial checked state for uncontrolled use, where nothing declared one. */
3875
+ /** Whether the markup declared it checked, which is where a reset returns to. */
3878
3876
  "bool:default-checked"?: (HelixCheckbox["defaultChecked"]) | undefined;
3879
- /** Initial checked state for uncontrolled use, where nothing declared one. */
3877
+ /** Whether the markup declared it checked, which is where a reset returns to. */
3880
3878
  "prop:defaultChecked"?: (HelixCheckbox["defaultChecked"]) | undefined;
3881
3879
  /** What is wrong, in the reader's words rather than the browser's. */
3882
3880
  "prop:feedback"?: (HelixCheckbox["feedback"]) | undefined;
@@ -3953,11 +3951,11 @@ present, which is true. Measured, and it is why this is named the other way
3953
3951
  round. The platform already writes booleans like this for the same reason,
3954
3952
  `novalidate` and `nomodule` and `noreferrer` among them.
3955
3953
 
3956
- **Reflected, because the gutter is a stylesheet rule.** `code-block.css`
3957
- reserves the copy button's width with `:host(:not([no-copy]))`, so the
3958
- attribute is what decides whether the block pays for a control. Unreflected,
3959
- setting it from script takes the button away (`render` reads the property)
3960
- and leaves the 40px it stood in reserved.
3954
+ **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
3955
+ the copy button's width with `:host(:not([no-copy]))`, so the attribute is
3956
+ what decides whether the block pays for a control. Unreflected, setting it
3957
+ from script takes the button away (`render` reads the property) and leaves
3958
+ the 40px it stood in reserved.
3961
3959
 
3962
3960
  A false boolean reflects as the attribute's absence, so this costs no
3963
3961
  `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -3973,11 +3971,11 @@ present, which is true. Measured, and it is why this is named the other way
3973
3971
  round. The platform already writes booleans like this for the same reason,
3974
3972
  `novalidate` and `nomodule` and `noreferrer` among them.
3975
3973
 
3976
- **Reflected, because the gutter is a stylesheet rule.** `code-block.css`
3977
- reserves the copy button's width with `:host(:not([no-copy]))`, so the
3978
- attribute is what decides whether the block pays for a control. Unreflected,
3979
- setting it from script takes the button away (`render` reads the property)
3980
- and leaves the 40px it stood in reserved.
3974
+ **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
3975
+ the copy button's width with `:host(:not([no-copy]))`, so the attribute is
3976
+ what decides whether the block pays for a control. Unreflected, setting it
3977
+ from script takes the button away (`render` reads the property) and leaves
3978
+ the 40px it stood in reserved.
3981
3979
 
3982
3980
  A false boolean reflects as the attribute's absence, so this costs no
3983
3981
  `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -4012,11 +4010,11 @@ present, which is true. Measured, and it is why this is named the other way
4012
4010
  round. The platform already writes booleans like this for the same reason,
4013
4011
  `novalidate` and `nomodule` and `noreferrer` among them.
4014
4012
 
4015
- **Reflected, because the gutter is a stylesheet rule.** `code-block.css`
4016
- reserves the copy button's width with `:host(:not([no-copy]))`, so the
4017
- attribute is what decides whether the block pays for a control. Unreflected,
4018
- setting it from script takes the button away (`render` reads the property)
4019
- and leaves the 40px it stood in reserved.
4013
+ **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
4014
+ the copy button's width with `:host(:not([no-copy]))`, so the attribute is
4015
+ what decides whether the block pays for a control. Unreflected, setting it
4016
+ from script takes the button away (`render` reads the property) and leaves
4017
+ the 40px it stood in reserved.
4020
4018
 
4021
4019
  A false boolean reflects as the attribute's absence, so this costs no
4022
4020
  `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -4032,11 +4030,11 @@ present, which is true. Measured, and it is why this is named the other way
4032
4030
  round. The platform already writes booleans like this for the same reason,
4033
4031
  `novalidate` and `nomodule` and `noreferrer` among them.
4034
4032
 
4035
- **Reflected, because the gutter is a stylesheet rule.** `code-block.css`
4036
- reserves the copy button's width with `:host(:not([no-copy]))`, so the
4037
- attribute is what decides whether the block pays for a control. Unreflected,
4038
- setting it from script takes the button away (`render` reads the property)
4039
- and leaves the 40px it stood in reserved.
4033
+ **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
4034
+ the copy button's width with `:host(:not([no-copy]))`, so the attribute is
4035
+ what decides whether the block pays for a control. Unreflected, setting it
4036
+ from script takes the button away (`render` reads the property) and leaves
4037
+ the 40px it stood in reserved.
4040
4038
 
4041
4039
  A false boolean reflects as the attribute's absence, so this costs no
4042
4040
  `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -4094,9 +4092,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
4094
4092
  last reader did rather than what the author wrote. `:state(open)` carries
4095
4093
  the resolved state for stylesheets, which is what the mirror is for. */
4096
4094
  open?: (HelixColorInput["open"]) | undefined;
4097
- /** Initial open state for uncontrolled use, where nothing declared one. */
4095
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4098
4096
  "default-open"?: (HelixColorInput["defaultOpen"]) | undefined;
4099
- /** Initial open state for uncontrolled use, where nothing declared one. */
4097
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4100
4098
  defaultOpen?: (HelixColorInput["defaultOpen"]) | undefined;
4101
4099
  /** The value the markup declared, which is where a reset returns to. */
4102
4100
  "default-value"?: (HelixColorInput["defaultValue"]) | undefined;
@@ -4225,9 +4223,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
4225
4223
  last reader did rather than what the author wrote. `:state(open)` carries
4226
4224
  the resolved state for stylesheets, which is what the mirror is for. */
4227
4225
  "prop:open"?: (HelixColorInput["open"]) | undefined;
4228
- /** Initial open state for uncontrolled use, where nothing declared one. */
4226
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4229
4227
  "bool:default-open"?: (HelixColorInput["defaultOpen"]) | undefined;
4230
- /** Initial open state for uncontrolled use, where nothing declared one. */
4228
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4231
4229
  "prop:defaultOpen"?: (HelixColorInput["defaultOpen"]) | undefined;
4232
4230
  /** The value the markup declared, which is where a reset returns to. */
4233
4231
  "attr:default-value"?: (HelixColorInput["defaultValue"]) | undefined;
@@ -4489,10 +4487,10 @@ letting it open would take a color from the reader and drop it. */
4489
4487
 
4490
4488
  **A color is exactly as requirable as a date**, which is the comparison
4491
4489
  that settles it: this element extends `HelixFormElement`, carries `name`
4492
- and reports its value, so a consumer writing
4493
- `<helix-color-picker name="brand" required>` inside a form has every reason
4494
- to expect the form to refuse an empty one. Its two siblings in the same
4495
- composition position, Date Picker and Time Picker, both check it.
4490
+ and reports its value, so a consumer writing `<helix-headless-color-picker
4491
+ name="brand" required>` inside a form has every reason to expect the form
4492
+ to refuse an empty one. Its two siblings in the same composition position,
4493
+ Date Picker and Time Picker, both check it.
4496
4494
 
4497
4495
  Written out rather than taken from `MixinField`, for the reason those two
4498
4496
  record: the mixin brings a label, a hint and a feedback region, and this is
@@ -4682,10 +4680,10 @@ letting it open would take a color from the reader and drop it. */
4682
4680
 
4683
4681
  **A color is exactly as requirable as a date**, which is the comparison
4684
4682
  that settles it: this element extends `HelixFormElement`, carries `name`
4685
- and reports its value, so a consumer writing
4686
- `<helix-color-picker name="brand" required>` inside a form has every reason
4687
- to expect the form to refuse an empty one. Its two siblings in the same
4688
- composition position, Date Picker and Time Picker, both check it.
4683
+ and reports its value, so a consumer writing `<helix-headless-color-picker
4684
+ name="brand" required>` inside a form has every reason to expect the form
4685
+ to refuse an empty one. Its two siblings in the same composition position,
4686
+ Date Picker and Time Picker, both check it.
4689
4687
 
4690
4688
  Written out rather than taken from `MixinField`, for the reason those two
4691
4689
  record: the mixin brings a label, a hint and a feedback region, and this is
@@ -4786,9 +4784,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
4786
4784
  last reader did rather than what the author wrote. `:state(open)` carries
4787
4785
  the resolved state for stylesheets, which is what the mirror is for. */
4788
4786
  open?: (HelixCombobox["open"]) | undefined;
4789
- /** Initial open state for uncontrolled use, where nothing declared one. */
4787
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4790
4788
  "default-open"?: (HelixCombobox["defaultOpen"]) | undefined;
4791
- /** Initial open state for uncontrolled use, where nothing declared one. */
4789
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4792
4790
  defaultOpen?: (HelixCombobox["defaultOpen"]) | undefined;
4793
4791
  /** What the control is called once everything is showing. */
4794
4792
  "collapse-label"?: (HelixCombobox["collapseLabel"]) | undefined;
@@ -4959,9 +4957,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
4959
4957
  last reader did rather than what the author wrote. `:state(open)` carries
4960
4958
  the resolved state for stylesheets, which is what the mirror is for. */
4961
4959
  "prop:open"?: (HelixCombobox["open"]) | undefined;
4962
- /** Initial open state for uncontrolled use, where nothing declared one. */
4960
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4963
4961
  "bool:default-open"?: (HelixCombobox["defaultOpen"]) | undefined;
4964
- /** Initial open state for uncontrolled use, where nothing declared one. */
4962
+ /** Whether the markup declared it open. Ignored once `open` is written. */
4965
4963
  "prop:defaultOpen"?: (HelixCombobox["defaultOpen"]) | undefined;
4966
4964
  /** What the control is called once everything is showing. */
4967
4965
  "attr:collapse-label"?: (HelixCombobox["collapseLabel"]) | undefined;
@@ -5150,9 +5148,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
5150
5148
  last reader did rather than what the author wrote. `:state(open)` carries
5151
5149
  the resolved state for stylesheets, which is what the mirror is for. */
5152
5150
  open?: (HelixCommand["open"]) | undefined;
5153
- /** Initial open state for uncontrolled use, where nothing declared one. */
5151
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5154
5152
  "default-open"?: (HelixCommand["defaultOpen"]) | undefined;
5155
- /** Initial open state for uncontrolled use, where nothing declared one. */
5153
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5156
5154
  defaultOpen?: (HelixCommand["defaultOpen"]) | undefined;
5157
5155
  /** Words shown where the filter has matched nothing. */
5158
5156
  "empty-text"?: (HelixCommand["emptyText"]) | undefined;
@@ -5195,9 +5193,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
5195
5193
  last reader did rather than what the author wrote. `:state(open)` carries
5196
5194
  the resolved state for stylesheets, which is what the mirror is for. */
5197
5195
  "prop:open"?: (HelixCommand["open"]) | undefined;
5198
- /** Initial open state for uncontrolled use, where nothing declared one. */
5196
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5199
5197
  "bool:default-open"?: (HelixCommand["defaultOpen"]) | undefined;
5200
- /** Initial open state for uncontrolled use, where nothing declared one. */
5198
+ /** Whether the markup declared it open. Ignored once `open` is written. */
5201
5199
  "prop:defaultOpen"?: (HelixCommand["defaultOpen"]) | undefined;
5202
5200
  /** Words shown where the filter has matched nothing. */
5203
5201
  "attr:empty-text"?: (HelixCommand["emptyText"]) | undefined;
@@ -5297,7 +5295,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
5297
5295
  the same way `label` becomes `aria-label` in there.
5298
5296
 
5299
5297
  ```html
5300
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
5298
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
5301
5299
  ```
5302
5300
 
5303
5301
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -5489,7 +5487,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
5489
5487
  the same way `label` becomes `aria-label` in there.
5490
5488
 
5491
5489
  ```html
5492
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
5490
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
5493
5491
  ```
5494
5492
 
5495
5493
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -5780,17 +5778,17 @@ refusing it leaves the selection as it was. */
5780
5778
 
5781
5779
  **It announces nothing, and that is not an omission.** Nothing in this
5782
5780
  element ever asks for a different page size: a size selector is
5783
- `helix-pagination-size`, which a consumer puts in the `footer` slot and
5784
- answers themselves. Routing this through `requestChange` would announce an
5785
- event the element never has cause to fire. */
5781
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
5782
+ themselves. Routing this through `requestChange` would announce an event
5783
+ the element never has cause to fire. */
5786
5784
  "page-size"?: (HelixDataTable["pageSize"] | `${number}`) | undefined;
5787
5785
  /** How many rows a page holds. Zero is every row, which is what "no paging" means.
5788
5786
 
5789
5787
  **It announces nothing, and that is not an omission.** Nothing in this
5790
5788
  element ever asks for a different page size: a size selector is
5791
- `helix-pagination-size`, which a consumer puts in the `footer` slot and
5792
- answers themselves. Routing this through `requestChange` would announce an
5793
- event the element never has cause to fire. */
5789
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
5790
+ themselves. Routing this through `requestChange` would announce an event
5791
+ the element never has cause to fire. */
5794
5792
  pageSize?: (HelixDataTable["pageSize"]) | undefined;
5795
5793
  /** How many rows the whole result has, where this element cannot count them.
5796
5794
 
@@ -5979,17 +5977,17 @@ refusing it leaves the selection as it was. */
5979
5977
 
5980
5978
  **It announces nothing, and that is not an omission.** Nothing in this
5981
5979
  element ever asks for a different page size: a size selector is
5982
- `helix-pagination-size`, which a consumer puts in the `footer` slot and
5983
- answers themselves. Routing this through `requestChange` would announce an
5984
- event the element never has cause to fire. */
5980
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
5981
+ themselves. Routing this through `requestChange` would announce an event
5982
+ the element never has cause to fire. */
5985
5983
  "attr:page-size"?: (HelixDataTable["pageSize"] | `${number}`) | undefined;
5986
5984
  /** How many rows a page holds. Zero is every row, which is what "no paging" means.
5987
5985
 
5988
5986
  **It announces nothing, and that is not an omission.** Nothing in this
5989
5987
  element ever asks for a different page size: a size selector is
5990
- `helix-pagination-size`, which a consumer puts in the `footer` slot and
5991
- answers themselves. Routing this through `requestChange` would announce an
5992
- event the element never has cause to fire. */
5988
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
5989
+ themselves. Routing this through `requestChange` would announce an event
5990
+ the element never has cause to fire. */
5993
5991
  "prop:pageSize"?: (HelixDataTable["pageSize"]) | undefined;
5994
5992
  /** How many rows the whole result has, where this element cannot count them.
5995
5993
 
@@ -6103,9 +6101,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
6103
6101
  last reader did rather than what the author wrote. `:state(open)` carries
6104
6102
  the resolved state for stylesheets, which is what the mirror is for. */
6105
6103
  open?: (HelixDateInput["open"]) | undefined;
6106
- /** Initial open state for uncontrolled use, where nothing declared one. */
6104
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6107
6105
  "default-open"?: (HelixDateInput["defaultOpen"]) | undefined;
6108
- /** Initial open state for uncontrolled use, where nothing declared one. */
6106
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6109
6107
  defaultOpen?: (HelixDateInput["defaultOpen"]) | undefined;
6110
6108
  /** What the control is called once everything is showing. */
6111
6109
  "collapse-label"?: (HelixDateInput["collapseLabel"]) | undefined;
@@ -6335,9 +6333,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
6335
6333
  last reader did rather than what the author wrote. `:state(open)` carries
6336
6334
  the resolved state for stylesheets, which is what the mirror is for. */
6337
6335
  "prop:open"?: (HelixDateInput["open"]) | undefined;
6338
- /** Initial open state for uncontrolled use, where nothing declared one. */
6336
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6339
6337
  "bool:default-open"?: (HelixDateInput["defaultOpen"]) | undefined;
6340
- /** Initial open state for uncontrolled use, where nothing declared one. */
6338
+ /** Whether the markup declared it open. Ignored once `open` is written. */
6341
6339
  "prop:defaultOpen"?: (HelixDateInput["defaultOpen"]) | undefined;
6342
6340
  /** What the control is called once everything is showing. */
6343
6341
  "attr:collapse-label"?: (HelixDateInput["collapseLabel"]) | undefined;
@@ -7025,9 +7023,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
7025
7023
  last reader did rather than what the author wrote. `:state(open)` carries
7026
7024
  the resolved state for stylesheets, which is what the mirror is for. */
7027
7025
  open?: (HelixDialog["open"]) | undefined;
7028
- /** Initial open state for uncontrolled use, where nothing declared one. */
7026
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7029
7027
  "default-open"?: (HelixDialog["defaultOpen"]) | undefined;
7030
- /** Initial open state for uncontrolled use, where nothing declared one. */
7028
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7031
7029
  defaultOpen?: (HelixDialog["defaultOpen"]) | undefined;
7032
7030
  /** Which close requests the browser answers on its own.
7033
7031
 
@@ -7130,9 +7128,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
7130
7128
  last reader did rather than what the author wrote. `:state(open)` carries
7131
7129
  the resolved state for stylesheets, which is what the mirror is for. */
7132
7130
  "prop:open"?: (HelixDialog["open"]) | undefined;
7133
- /** Initial open state for uncontrolled use, where nothing declared one. */
7131
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7134
7132
  "bool:default-open"?: (HelixDialog["defaultOpen"]) | undefined;
7135
- /** Initial open state for uncontrolled use, where nothing declared one. */
7133
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7136
7134
  "prop:defaultOpen"?: (HelixDialog["defaultOpen"]) | undefined;
7137
7135
  /** Which close requests the browser answers on its own.
7138
7136
 
@@ -7317,7 +7315,7 @@ thickness decides is arithmetic done here and published as
7317
7315
  `--donut-chart-stroke`, which is a number a rule can do sums with where the
7318
7316
  word is not. Reflected, it wrote a value onto every host a script had set
7319
7317
  it on for nothing to read. `sweep` beside it is the converse and reflects,
7320
- because three rules select on it. */
7318
+ because the styled sheet selects on it. */
7321
7319
  hole?: (HelixDonutChart["hole"]) | undefined;
7322
7320
  /** How much of the circle the whole occupies.
7323
7321
 
@@ -7423,7 +7421,7 @@ thickness decides is arithmetic done here and published as
7423
7421
  `--donut-chart-stroke`, which is a number a rule can do sums with where the
7424
7422
  word is not. Reflected, it wrote a value onto every host a script had set
7425
7423
  it on for nothing to read. `sweep` beside it is the converse and reflects,
7426
- because three rules select on it. */
7424
+ because the styled sheet selects on it. */
7427
7425
  "prop:hole"?: (HelixDonutChart["hole"]) | undefined;
7428
7426
  /** How much of the circle the whole occupies.
7429
7427
 
@@ -7492,9 +7490,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
7492
7490
  last reader did rather than what the author wrote. `:state(open)` carries
7493
7491
  the resolved state for stylesheets, which is what the mirror is for. */
7494
7492
  open?: (HelixDrawer["open"]) | undefined;
7495
- /** Initial open state for uncontrolled use, where nothing declared one. */
7493
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7496
7494
  "default-open"?: (HelixDrawer["defaultOpen"]) | undefined;
7497
- /** Initial open state for uncontrolled use, where nothing declared one. */
7495
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7498
7496
  defaultOpen?: (HelixDrawer["defaultOpen"]) | undefined;
7499
7497
  /** Which close requests the browser answers on its own.
7500
7498
 
@@ -7534,10 +7532,10 @@ not, rather than shown or hidden by CSS. */
7534
7532
  modal?: (HelixDrawer["modal"]) | undefined;
7535
7533
  /** Which edge the drawer comes from.
7536
7534
 
7537
- Unset is `end`, which the styled tier reads as `:host(:not([placement]))`
7538
- beside `:host([placement="end"])` rather than as a value written here: a
7535
+ Unset is `end`, and it stays unset rather than being written down: a
7539
7536
  default assigned to the property would reflect onto every host and put a
7540
- `placement="end"` into markup no consumer wrote. */
7537
+ `placement="end"` into markup no consumer wrote. So what this tier
7538
+ guarantees is the absence, and a sheet selects on it. */
7541
7539
  placement?: (HelixDrawer["placement"]) | undefined;
7542
7540
  /** What the dialog closed with, the way `<dialog>` reports it.
7543
7541
 
@@ -7594,9 +7592,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
7594
7592
  last reader did rather than what the author wrote. `:state(open)` carries
7595
7593
  the resolved state for stylesheets, which is what the mirror is for. */
7596
7594
  "prop:open"?: (HelixDrawer["open"]) | undefined;
7597
- /** Initial open state for uncontrolled use, where nothing declared one. */
7595
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7598
7596
  "bool:default-open"?: (HelixDrawer["defaultOpen"]) | undefined;
7599
- /** Initial open state for uncontrolled use, where nothing declared one. */
7597
+ /** Whether the markup declared it open. Ignored once `open` is written. */
7600
7598
  "prop:defaultOpen"?: (HelixDrawer["defaultOpen"]) | undefined;
7601
7599
  /** Which close requests the browser answers on its own.
7602
7600
 
@@ -7636,10 +7634,10 @@ not, rather than shown or hidden by CSS. */
7636
7634
  "prop:modal"?: (HelixDrawer["modal"]) | undefined;
7637
7635
  /** Which edge the drawer comes from.
7638
7636
 
7639
- Unset is `end`, which the styled tier reads as `:host(:not([placement]))`
7640
- beside `:host([placement="end"])` rather than as a value written here: a
7637
+ Unset is `end`, and it stays unset rather than being written down: a
7641
7638
  default assigned to the property would reflect onto every host and put a
7642
- `placement="end"` into markup no consumer wrote. */
7639
+ `placement="end"` into markup no consumer wrote. So what this tier
7640
+ guarantees is the absence, and a sheet selects on it. */
7643
7641
  "prop:placement"?: (HelixDrawer["placement"]) | undefined;
7644
7642
  /** What the dialog closed with, the way `<dialog>` reports it.
7645
7643
 
@@ -8339,9 +8337,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
8339
8337
  last reader did rather than what the author wrote. `:state(open)` carries
8340
8338
  the resolved state for stylesheets, which is what the mirror is for. */
8341
8339
  open?: (HelixFilterInput["open"]) | undefined;
8342
- /** Initial open state for uncontrolled use, where nothing declared one. */
8340
+ /** Whether the markup declared it open. Ignored once `open` is written. */
8343
8341
  "default-open"?: (HelixFilterInput["defaultOpen"]) | undefined;
8344
- /** Initial open state for uncontrolled use, where nothing declared one. */
8342
+ /** Whether the markup declared it open. Ignored once `open` is written. */
8345
8343
  defaultOpen?: (HelixFilterInput["defaultOpen"]) | undefined;
8346
8344
  /** What the control is called once everything is showing. */
8347
8345
  "collapse-label"?: (HelixFilterInput["collapseLabel"]) | undefined;
@@ -8458,9 +8456,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
8458
8456
  last reader did rather than what the author wrote. `:state(open)` carries
8459
8457
  the resolved state for stylesheets, which is what the mirror is for. */
8460
8458
  "prop:open"?: (HelixFilterInput["open"]) | undefined;
8461
- /** Initial open state for uncontrolled use, where nothing declared one. */
8459
+ /** Whether the markup declared it open. Ignored once `open` is written. */
8462
8460
  "bool:default-open"?: (HelixFilterInput["defaultOpen"]) | undefined;
8463
- /** Initial open state for uncontrolled use, where nothing declared one. */
8461
+ /** Whether the markup declared it open. Ignored once `open` is written. */
8464
8462
  "prop:defaultOpen"?: (HelixFilterInput["defaultOpen"]) | undefined;
8465
8463
  /** What the control is called once everything is showing. */
8466
8464
  "attr:collapse-label"?: (HelixFilterInput["collapseLabel"]) | undefined;
@@ -8611,11 +8609,12 @@ renders nothing rather than the epoch, which is what parsing an empty string
8611
8609
  would give.
8612
8610
 
8613
8611
  **The element's own text is read as a fallback, and only in a browser.**
8614
- `<helix-format-date elapsed>2026-08-27T01:00:00Z</helix-format-date>` is the
8615
- spelling that reads best in markup, and it cannot be the only one: measured
8616
- against Lit's server shim, `textContent`, `children`, `firstChild` and
8617
- `querySelector` are all `undefined` there, so a server has no way to see it.
8618
- An element rendered on a server needs the attribute; one rendered in a
8612
+ `<helix-headless-format-date
8613
+ elapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling
8614
+ that reads best in markup, and it cannot be the only one: measured against
8615
+ Lit's server shim, `textContent`, `children`, `firstChild` and
8616
+ `querySelector` are all `undefined` there, so a server has no way to see
8617
+ it. An element rendered on a server needs the attribute; one rendered in a
8619
8618
  browser may use either. */
8620
8619
  date?: (HelixFormatDate["date"]) | undefined;
8621
8620
  /** How the day of the month is written, where a date is shown. */
@@ -8665,11 +8664,12 @@ renders nothing rather than the epoch, which is what parsing an empty string
8665
8664
  would give.
8666
8665
 
8667
8666
  **The element's own text is read as a fallback, and only in a browser.**
8668
- `<helix-format-date elapsed>2026-08-27T01:00:00Z</helix-format-date>` is the
8669
- spelling that reads best in markup, and it cannot be the only one: measured
8670
- against Lit's server shim, `textContent`, `children`, `firstChild` and
8671
- `querySelector` are all `undefined` there, so a server has no way to see it.
8672
- An element rendered on a server needs the attribute; one rendered in a
8667
+ `<helix-headless-format-date
8668
+ elapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling
8669
+ that reads best in markup, and it cannot be the only one: measured against
8670
+ Lit's server shim, `textContent`, `children`, `firstChild` and
8671
+ `querySelector` are all `undefined` there, so a server has no way to see
8672
+ it. An element rendered on a server needs the attribute; one rendered in a
8673
8673
  browser may use either. */
8674
8674
  "prop:date"?: (HelixFormatDate["date"]) | undefined;
8675
8675
  /** How the day of the month is written, where a date is shown. */
@@ -8790,12 +8790,12 @@ so a number written here that disagrees with the sheet is a promise the
8790
8790
  consumer has to keep by hand, and the one number a summary is told to trust
8791
8791
  is the one it gets wrong.
8792
8792
 
8793
- The strip measures itself, so `--heatmap-cell-inline-size` and `--heatmap-gap` are
8794
- enough on their own and these two are the estimate used until the first
8795
- measurement lands. Writing the attribute pins the value and stops the
8796
- measurement being consulted, which is what a container query or a transition
8797
- on the cell size wants, where what is drawn this frame is not what the
8798
- arithmetic should plan around.
8793
+ The strip measures itself, so sizing the cells in a sheet is enough on its
8794
+ own and these two are the estimate used until the first measurement lands.
8795
+ Writing the attribute pins the value and stops the measurement being
8796
+ consulted, which is what a container query or a transition on the cell size
8797
+ wants, where what is drawn this frame is not what the arithmetic should
8798
+ plan around.
8799
8799
 
8800
8800
  Zero turns the dropping off altogether, which is right for a strip in a
8801
8801
  container that cannot get narrow. */
@@ -8808,12 +8808,12 @@ so a number written here that disagrees with the sheet is a promise the
8808
8808
  consumer has to keep by hand, and the one number a summary is told to trust
8809
8809
  is the one it gets wrong.
8810
8810
 
8811
- The strip measures itself, so `--heatmap-cell-inline-size` and `--heatmap-gap` are
8812
- enough on their own and these two are the estimate used until the first
8813
- measurement lands. Writing the attribute pins the value and stops the
8814
- measurement being consulted, which is what a container query or a transition
8815
- on the cell size wants, where what is drawn this frame is not what the
8816
- arithmetic should plan around.
8811
+ The strip measures itself, so sizing the cells in a sheet is enough on its
8812
+ own and these two are the estimate used until the first measurement lands.
8813
+ Writing the attribute pins the value and stops the measurement being
8814
+ consulted, which is what a container query or a transition on the cell size
8815
+ wants, where what is drawn this frame is not what the arithmetic should
8816
+ plan around.
8817
8817
 
8818
8818
  Zero turns the dropping off altogether, which is right for a strip in a
8819
8819
  container that cannot get narrow. */
@@ -8885,12 +8885,12 @@ so a number written here that disagrees with the sheet is a promise the
8885
8885
  consumer has to keep by hand, and the one number a summary is told to trust
8886
8886
  is the one it gets wrong.
8887
8887
 
8888
- The strip measures itself, so `--heatmap-cell-inline-size` and `--heatmap-gap` are
8889
- enough on their own and these two are the estimate used until the first
8890
- measurement lands. Writing the attribute pins the value and stops the
8891
- measurement being consulted, which is what a container query or a transition
8892
- on the cell size wants, where what is drawn this frame is not what the
8893
- arithmetic should plan around.
8888
+ The strip measures itself, so sizing the cells in a sheet is enough on its
8889
+ own and these two are the estimate used until the first measurement lands.
8890
+ Writing the attribute pins the value and stops the measurement being
8891
+ consulted, which is what a container query or a transition on the cell size
8892
+ wants, where what is drawn this frame is not what the arithmetic should
8893
+ plan around.
8894
8894
 
8895
8895
  Zero turns the dropping off altogether, which is right for a strip in a
8896
8896
  container that cannot get narrow. */
@@ -8903,12 +8903,12 @@ so a number written here that disagrees with the sheet is a promise the
8903
8903
  consumer has to keep by hand, and the one number a summary is told to trust
8904
8904
  is the one it gets wrong.
8905
8905
 
8906
- The strip measures itself, so `--heatmap-cell-inline-size` and `--heatmap-gap` are
8907
- enough on their own and these two are the estimate used until the first
8908
- measurement lands. Writing the attribute pins the value and stops the
8909
- measurement being consulted, which is what a container query or a transition
8910
- on the cell size wants, where what is drawn this frame is not what the
8911
- arithmetic should plan around.
8906
+ The strip measures itself, so sizing the cells in a sheet is enough on its
8907
+ own and these two are the estimate used until the first measurement lands.
8908
+ Writing the attribute pins the value and stops the measurement being
8909
+ consulted, which is what a container query or a transition on the cell size
8910
+ wants, where what is drawn this frame is not what the arithmetic should
8911
+ plan around.
8912
8912
 
8913
8913
  Zero turns the dropping off altogether, which is right for a strip in a
8914
8914
  container that cannot get narrow. */
@@ -9003,7 +9003,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
9003
9003
  the same way `label` becomes `aria-label` in there.
9004
9004
 
9005
9005
  ```html
9006
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
9006
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
9007
9007
  ```
9008
9008
 
9009
9009
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -9209,7 +9209,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
9209
9209
  the same way `label` becomes `aria-label` in there.
9210
9210
 
9211
9211
  ```html
9212
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
9212
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
9213
9213
  ```
9214
9214
 
9215
9215
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -9463,10 +9463,10 @@ Read-only to a consumer: it is a report rather than a setting.
9463
9463
  **Mirrored to `data-status`, and not reflected as `status`.** It is element
9464
9464
  state, so reflecting it puts the element's own bookkeeping into the markup
9465
9465
  a consumer rendered: React reads the attribute appearing at upgrade as a
9466
- hydration mismatch, and a serialized `<helix-image status="loaded">` pasted
9467
- back declares that a picture has arrived which this element has never
9468
- fetched. The `data-` name is the library's answer to both, being a name a
9469
- re-parse cannot mistake for a declaration, and it is what `data-closed` on
9466
+ hydration mismatch, and a host pasted back carrying `status="loaded"`
9467
+ declares that a picture has arrived which this element has never fetched.
9468
+ The `data-` name is the library's answer to both, being a name a re-parse
9469
+ cannot mistake for a declaration, and it is what `data-closed` on
9470
9470
  `Toast.Item` already does. A picture arrives after somebody fetched it,
9471
9471
  which puts this on the safe side of hydration: a fact that can be true on
9472
9472
  the *first* update mirrors to a custom state instead, which is what
@@ -9546,10 +9546,10 @@ Read-only to a consumer: it is a report rather than a setting.
9546
9546
  **Mirrored to `data-status`, and not reflected as `status`.** It is element
9547
9547
  state, so reflecting it puts the element's own bookkeeping into the markup
9548
9548
  a consumer rendered: React reads the attribute appearing at upgrade as a
9549
- hydration mismatch, and a serialized `<helix-image status="loaded">` pasted
9550
- back declares that a picture has arrived which this element has never
9551
- fetched. The `data-` name is the library's answer to both, being a name a
9552
- re-parse cannot mistake for a declaration, and it is what `data-closed` on
9549
+ hydration mismatch, and a host pasted back carrying `status="loaded"`
9550
+ declares that a picture has arrived which this element has never fetched.
9551
+ The `data-` name is the library's answer to both, being a name a re-parse
9552
+ cannot mistake for a declaration, and it is what `data-closed` on
9553
9553
  `Toast.Item` already does. A picture arrives after somebody fetched it,
9554
9554
  which puts this on the safe side of hydration: a fact that can be true on
9555
9555
  the *first* update mirrors to a custom state instead, which is what
@@ -9634,20 +9634,20 @@ Not a label: it goes when typing starts. */
9634
9634
  **The attribute is `readonly`, which is the platform's spelling.** A
9635
9635
  camelCase property needs an explicit `attribute`, and dash-casing a word
9636
9636
  HTML writes as one costs what an attribute always costs here: nothing
9637
- warns. `<helix-input readonly>` is what anybody who has written HTML types;
9638
- against `read-only` it parses to no property at all, and the field stays
9639
- editable with no error anywhere. Measured on the dash-cased form, `readOnly`
9640
- came back `false`. */
9637
+ warns. `<helix-headless-input readonly>` is what anybody who has written
9638
+ HTML types; against `read-only` it parses to no property at all, and the
9639
+ field stays editable with no error anywhere. Measured on the dash-cased
9640
+ form, `readOnly` came back `false`. */
9641
9641
  readonly?: (HelixInput["readOnly"]) | undefined;
9642
9642
  /** Whether the field refuses input while still submitting its value.
9643
9643
 
9644
9644
  **The attribute is `readonly`, which is the platform's spelling.** A
9645
9645
  camelCase property needs an explicit `attribute`, and dash-casing a word
9646
9646
  HTML writes as one costs what an attribute always costs here: nothing
9647
- warns. `<helix-input readonly>` is what anybody who has written HTML types;
9648
- against `read-only` it parses to no property at all, and the field stays
9649
- editable with no error anywhere. Measured on the dash-cased form, `readOnly`
9650
- came back `false`. */
9647
+ warns. `<helix-headless-input readonly>` is what anybody who has written
9648
+ HTML types; against `read-only` it parses to no property at all, and the
9649
+ field stays editable with no error anywhere. Measured on the dash-cased
9650
+ form, `readOnly` came back `false`. */
9651
9651
  readOnly?: (HelixInput["readOnly"]) | undefined;
9652
9652
  /** Whether a password field offers a toggle that shows what was typed.
9653
9653
 
@@ -9668,9 +9668,9 @@ The state is `aria-pressed`, not this. */
9668
9668
 
9669
9669
  **Not reflected.** Reflection exists so a selector can reach a value, and
9670
9670
  no stylesheet in this repository selects on `type`. Reflecting it writes
9671
- `type="text"` onto every `<helix-input>` ever rendered, an attribute no
9672
- consumer's markup has, which is the fault the area rules write up under
9673
- `Button`'s `href`, `target` and `rel`.
9671
+ `type="text"` onto every `<helix-headless-input>` ever rendered, an
9672
+ attribute no consumer's markup has, which is the fault the area rules write
9673
+ up under `Button`'s `href`, `target` and `rel`.
9674
9674
 
9675
9675
  Nothing reads it from the attribute either. The real `<input>` inside takes
9676
9676
  it as a property binding, which is what makes the keyboard and the
@@ -9788,20 +9788,20 @@ Not a label: it goes when typing starts. */
9788
9788
  **The attribute is `readonly`, which is the platform's spelling.** A
9789
9789
  camelCase property needs an explicit `attribute`, and dash-casing a word
9790
9790
  HTML writes as one costs what an attribute always costs here: nothing
9791
- warns. `<helix-input readonly>` is what anybody who has written HTML types;
9792
- against `read-only` it parses to no property at all, and the field stays
9793
- editable with no error anywhere. Measured on the dash-cased form, `readOnly`
9794
- came back `false`. */
9791
+ warns. `<helix-headless-input readonly>` is what anybody who has written
9792
+ HTML types; against `read-only` it parses to no property at all, and the
9793
+ field stays editable with no error anywhere. Measured on the dash-cased
9794
+ form, `readOnly` came back `false`. */
9795
9795
  "bool:readonly"?: (HelixInput["readOnly"]) | undefined;
9796
9796
  /** Whether the field refuses input while still submitting its value.
9797
9797
 
9798
9798
  **The attribute is `readonly`, which is the platform's spelling.** A
9799
9799
  camelCase property needs an explicit `attribute`, and dash-casing a word
9800
9800
  HTML writes as one costs what an attribute always costs here: nothing
9801
- warns. `<helix-input readonly>` is what anybody who has written HTML types;
9802
- against `read-only` it parses to no property at all, and the field stays
9803
- editable with no error anywhere. Measured on the dash-cased form, `readOnly`
9804
- came back `false`. */
9801
+ warns. `<helix-headless-input readonly>` is what anybody who has written
9802
+ HTML types; against `read-only` it parses to no property at all, and the
9803
+ field stays editable with no error anywhere. Measured on the dash-cased
9804
+ form, `readOnly` came back `false`. */
9805
9805
  "prop:readOnly"?: (HelixInput["readOnly"]) | undefined;
9806
9806
  /** Whether a password field offers a toggle that shows what was typed.
9807
9807
 
@@ -9822,9 +9822,9 @@ The state is `aria-pressed`, not this. */
9822
9822
 
9823
9823
  **Not reflected.** Reflection exists so a selector can reach a value, and
9824
9824
  no stylesheet in this repository selects on `type`. Reflecting it writes
9825
- `type="text"` onto every `<helix-input>` ever rendered, an attribute no
9826
- consumer's markup has, which is the fault the area rules write up under
9827
- `Button`'s `href`, `target` and `rel`.
9825
+ `type="text"` onto every `<helix-headless-input>` ever rendered, an
9826
+ attribute no consumer's markup has, which is the fault the area rules write
9827
+ up under `Button`'s `href`, `target` and `rel`.
9828
9828
 
9829
9829
  Nothing reads it from the attribute either. The real `<input>` inside takes
9830
9830
  it as a property binding, which is what makes the keyboard and the
@@ -10263,8 +10263,7 @@ beside it for instance. `ring` lets the ground through, for a chart drawn
10263
10263
  over something busy. `triangle` points along the axis and reads as "and
10264
10264
  onward" rather than as a second claim about the data.
10265
10265
 
10266
- The shapes come from
10267
- `helix/styled/src/shared/chart/terminus.css`, the same sheet `Sparkline` takes, so
10266
+ The shapes come from one shared sheet, the same one `Sparkline` takes, so
10268
10267
  the set is identical wherever one appears. **Which is why every value is
10269
10268
  named here.** `Sparkline` shipped `square` implemented, drawn, asserted and
10270
10269
  undocumented until the cohort before this one; this family reads the same
@@ -10414,8 +10413,7 @@ beside it for instance. `ring` lets the ground through, for a chart drawn
10414
10413
  over something busy. `triangle` points along the axis and reads as "and
10415
10414
  onward" rather than as a second claim about the data.
10416
10415
 
10417
- The shapes come from
10418
- `helix/styled/src/shared/chart/terminus.css`, the same sheet `Sparkline` takes, so
10416
+ The shapes come from one shared sheet, the same one `Sparkline` takes, so
10419
10417
  the set is identical wherever one appears. **Which is why every value is
10420
10418
  named here.** `Sparkline` shipped `square` implemented, drawn, asserted and
10421
10419
  undocumented until the cohort before this one; this family reads the same
@@ -10519,10 +10517,10 @@ has to survive with the stylesheet turned off.
10519
10517
  label?: (HelixList["label"]) | undefined;
10520
10518
  /** Which markers an ordered list draws, in `<ol type>`'s own five values.
10521
10519
 
10522
- Reflected, because this is one of the things a stylesheet selects on and
10523
- the styled tier maps each to a `list-style-type`. The platform's spellings
10524
- rather than the CSS ones, so `<helix-list kind="ordered" type="i">` is what
10525
- a consumer would have written on an `<ol>`.
10520
+ Reflected, because this is one of the things a stylesheet selects on, each
10521
+ value mapping to a `list-style-type`. The platform's spellings rather than
10522
+ the CSS ones, so `<helix-headless-list kind="ordered" type="i">` is what a
10523
+ consumer would have written on an `<ol>`.
10526
10524
 
10527
10525
  **`start` and `reversed` are both absent and neither can be done here.**
10528
10526
  This renders no `<ol>`: the rows are slotted and numbered by the CSS
@@ -10578,10 +10576,10 @@ has to survive with the stylesheet turned off.
10578
10576
  "prop:label"?: (HelixList["label"]) | undefined;
10579
10577
  /** Which markers an ordered list draws, in `<ol type>`'s own five values.
10580
10578
 
10581
- Reflected, because this is one of the things a stylesheet selects on and
10582
- the styled tier maps each to a `list-style-type`. The platform's spellings
10583
- rather than the CSS ones, so `<helix-list kind="ordered" type="i">` is what
10584
- a consumer would have written on an `<ol>`.
10579
+ Reflected, because this is one of the things a stylesheet selects on, each
10580
+ value mapping to a `list-style-type`. The platform's spellings rather than
10581
+ the CSS ones, so `<helix-headless-list kind="ordered" type="i">` is what a
10582
+ consumer would have written on an `<ol>`.
10585
10583
 
10586
10584
  **`start` and `reversed` are both absent and neither can be done here.**
10587
10585
  This renders no `<ol>`: the rows are slotted and numbered by the CSS
@@ -10904,9 +10902,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
10904
10902
  last reader did rather than what the author wrote. `:state(open)` carries
10905
10903
  the resolved state for stylesheets, which is what the mirror is for. */
10906
10904
  open?: (HelixMegamenu["open"]) | undefined;
10907
- /** Initial open state for uncontrolled use, where nothing declared one. */
10905
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10908
10906
  "default-open"?: (HelixMegamenu["defaultOpen"]) | undefined;
10909
- /** Initial open state for uncontrolled use, where nothing declared one. */
10907
+ /** Whether the markup declared it open. Ignored once `open` is written. */
10910
10908
  defaultOpen?: (HelixMegamenu["defaultOpen"]) | undefined;
10911
10909
  /** The width, in pixels, under which a card becomes a band. Zero never does.
10912
10910
 
@@ -11011,9 +11009,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
11011
11009
  last reader did rather than what the author wrote. `:state(open)` carries
11012
11010
  the resolved state for stylesheets, which is what the mirror is for. */
11013
11011
  "prop:open"?: (HelixMegamenu["open"]) | undefined;
11014
- /** Initial open state for uncontrolled use, where nothing declared one. */
11012
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11015
11013
  "bool:default-open"?: (HelixMegamenu["defaultOpen"]) | undefined;
11016
- /** Initial open state for uncontrolled use, where nothing declared one. */
11014
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11017
11015
  "prop:defaultOpen"?: (HelixMegamenu["defaultOpen"]) | undefined;
11018
11016
  /** The width, in pixels, under which a card becomes a band. Zero never does.
11019
11017
 
@@ -11314,9 +11312,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
11314
11312
  last reader did rather than what the author wrote. `:state(open)` carries
11315
11313
  the resolved state for stylesheets, which is what the mirror is for. */
11316
11314
  open?: (HelixMenu["open"]) | undefined;
11317
- /** Initial open state for uncontrolled use, where nothing declared one. */
11315
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11318
11316
  "default-open"?: (HelixMenu["defaultOpen"]) | undefined;
11319
- /** Initial open state for uncontrolled use, where nothing declared one. */
11317
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11320
11318
  defaultOpen?: (HelixMenu["defaultOpen"]) | undefined;
11321
11319
  /** What the row returning from a submenu reads. */
11322
11320
  "back-label"?: (HelixMenu["backLabel"]) | undefined;
@@ -11369,9 +11367,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
11369
11367
  last reader did rather than what the author wrote. `:state(open)` carries
11370
11368
  the resolved state for stylesheets, which is what the mirror is for. */
11371
11369
  "prop:open"?: (HelixMenu["open"]) | undefined;
11372
- /** Initial open state for uncontrolled use, where nothing declared one. */
11370
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11373
11371
  "bool:default-open"?: (HelixMenu["defaultOpen"]) | undefined;
11374
- /** Initial open state for uncontrolled use, where nothing declared one. */
11372
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11375
11373
  "prop:defaultOpen"?: (HelixMenu["defaultOpen"]) | undefined;
11376
11374
  /** What the row returning from a submenu reads. */
11377
11375
  "attr:back-label"?: (HelixMenu["backLabel"]) | undefined;
@@ -11670,9 +11668,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
11670
11668
  last reader did rather than what the author wrote. `:state(open)` carries
11671
11669
  the resolved state for stylesheets, which is what the mirror is for. */
11672
11670
  open?: (HelixNotificationGroup["open"]) | undefined;
11673
- /** Initial open state for uncontrolled use, where nothing declared one. */
11671
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11674
11672
  "default-open"?: (HelixNotificationGroup["defaultOpen"]) | undefined;
11675
- /** Initial open state for uncontrolled use, where nothing declared one. */
11673
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11676
11674
  defaultOpen?: (HelixNotificationGroup["defaultOpen"]) | undefined;
11677
11675
  /** Whether the group can be collapsed to its first row.
11678
11676
 
@@ -11717,9 +11715,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
11717
11715
  last reader did rather than what the author wrote. `:state(open)` carries
11718
11716
  the resolved state for stylesheets, which is what the mirror is for. */
11719
11717
  "prop:open"?: (HelixNotificationGroup["open"]) | undefined;
11720
- /** Initial open state for uncontrolled use, where nothing declared one. */
11718
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11721
11719
  "bool:default-open"?: (HelixNotificationGroup["defaultOpen"]) | undefined;
11722
- /** Initial open state for uncontrolled use, where nothing declared one. */
11720
+ /** Whether the markup declared it open. Ignored once `open` is written. */
11723
11721
  "prop:defaultOpen"?: (HelixNotificationGroup["defaultOpen"]) | undefined;
11724
11722
  /** Whether the group can be collapsed to its first row.
11725
11723
 
@@ -11816,10 +11814,10 @@ this element then owns.
11816
11814
 
11817
11815
  **Not reflected.** Unread is a visual state, which is why the four mixins
11818
11816
  mirror theirs, but the mirror may not be the property's own attribute:
11819
- `<helix-notification default-read>` comes back from a server without `read`
11820
- and would gain it on the first update, which React reports as a hydration
11821
- mismatch, and which a copy of the serialized element re-parses as a
11822
- declaration. `:state(read)` is what the stylesheet reads.
11817
+ `<helix-headless-notification default-read>` comes back from a server
11818
+ without `read` and would gain it on the first update, which React reports
11819
+ as a hydration mismatch, and which a copy of the serialized element
11820
+ re-parses as a declaration. `:state(read)` is what the stylesheet reads.
11823
11821
  `hydration.dom.spec.ts` holds it. */
11824
11822
  read?: (HelixNotification["read"]) | undefined;
11825
11823
  /** State to open with, where nothing declared one. */
@@ -11887,10 +11885,10 @@ this element then owns.
11887
11885
 
11888
11886
  **Not reflected.** Unread is a visual state, which is why the four mixins
11889
11887
  mirror theirs, but the mirror may not be the property's own attribute:
11890
- `<helix-notification default-read>` comes back from a server without `read`
11891
- and would gain it on the first update, which React reports as a hydration
11892
- mismatch, and which a copy of the serialized element re-parses as a
11893
- declaration. `:state(read)` is what the stylesheet reads.
11888
+ `<helix-headless-notification default-read>` comes back from a server
11889
+ without `read` and would gain it on the first update, which React reports
11890
+ as a hydration mismatch, and which a copy of the serialized element
11891
+ re-parses as a declaration. `:state(read)` is what the stylesheet reads.
11894
11892
  `hydration.dom.spec.ts` holds it. */
11895
11893
  "prop:read"?: (HelixNotification["read"]) | undefined;
11896
11894
  /** State to open with, where nothing declared one. */
@@ -12409,11 +12407,10 @@ Written by the listbox. */
12409
12407
  /** A second destination for this row, taken with the modifier held.
12410
12408
 
12411
12409
  **An attribute rather than a second row, which is the whole point.** A
12412
- palette of eighty-eight components that offered each of them a reference
12413
- page and a sandbox as separate entries would be a palette of a hundred and
12414
- seventy-six, and one earns its keep by getting a reader to one thing in
12415
- three keystrokes. The row already carries the first destination, so the
12416
- second belongs beside it.
12410
+ palette that offered every component a reference page and a sandbox as
12411
+ separate entries would be twice as long, and one earns its keep by getting
12412
+ a reader to one thing in three keystrokes. The row already carries the
12413
+ first destination, so the second belongs beside it.
12417
12414
 
12418
12415
  Declared here and acted on by whatever owns the list, the same division
12419
12416
  selection already uses: an option says what it is and the listbox decides
@@ -12483,7 +12480,7 @@ attribute and the state is the property.
12483
12480
  **The attribute, read when it is asked for, and never a snapshot taken in
12484
12481
  the constructor.** A field initializer runs there, and an element the HTML
12485
12482
  parser created has none of its attributes yet at that moment: measured on
12486
- this element, on `Radio` and on `Toggle`, `<helix-option value="a"
12483
+ this element, on `Radio` and on `Toggle`, `<helix-headless-option value="a"
12487
12484
  selected>` reported `defaultSelected` as `false` both from parsed markup
12488
12485
  and from `createElement` followed by `setAttribute`, which is every way a
12489
12486
  consumer writes one. The snapshot could only ever be true for an element
@@ -12516,11 +12513,10 @@ Written by the listbox. */
12516
12513
  /** A second destination for this row, taken with the modifier held.
12517
12514
 
12518
12515
  **An attribute rather than a second row, which is the whole point.** A
12519
- palette of eighty-eight components that offered each of them a reference
12520
- page and a sandbox as separate entries would be a palette of a hundred and
12521
- seventy-six, and one earns its keep by getting a reader to one thing in
12522
- three keystrokes. The row already carries the first destination, so the
12523
- second belongs beside it.
12516
+ palette that offered every component a reference page and a sandbox as
12517
+ separate entries would be twice as long, and one earns its keep by getting
12518
+ a reader to one thing in three keystrokes. The row already carries the
12519
+ first destination, so the second belongs beside it.
12524
12520
 
12525
12521
  Declared here and acted on by whatever owns the list, the same division
12526
12522
  selection already uses: an option says what it is and the listbox decides
@@ -12590,7 +12586,7 @@ attribute and the state is the property.
12590
12586
  **The attribute, read when it is asked for, and never a snapshot taken in
12591
12587
  the constructor.** A field initializer runs there, and an element the HTML
12592
12588
  parser created has none of its attributes yet at that moment: measured on
12593
- this element, on `Radio` and on `Toggle`, `<helix-option value="a"
12589
+ this element, on `Radio` and on `Toggle`, `<helix-headless-option value="a"
12594
12590
  selected>` reported `defaultSelected` as `false` both from parsed markup
12595
12591
  and from `createElement` followed by `setAttribute`, which is every way a
12596
12592
  consumer writes one. The snapshot could only ever be true for an element
@@ -13255,10 +13251,10 @@ other end is going to reject. A consumer whose codes really do carry
13255
13251
  marked letters wants `text`, which judges nothing.
13256
13252
 
13257
13253
  **Not reflected**: nothing selects on it, so reflecting only writes
13258
- `type="numeric"` onto every `<helix-pin-input>` ever rendered, an attribute
13259
- no consumer's markup had. The area rules carry the sentence "reflect only
13260
- what CSS selects on". The real inputs take it as a binding, which is what
13261
- makes the keyboard follow. */
13254
+ `type="numeric"` onto every `<helix-headless-pin-input>` ever rendered, an
13255
+ attribute no consumer's markup had. The area rules carry the sentence
13256
+ "reflect only what CSS selects on". The real inputs take it as a binding,
13257
+ which is what makes the keyboard follow. */
13262
13258
  type?: (HelixPinInput["type"]) | undefined;
13263
13259
  /** Whether the control is non-interactive.
13264
13260
 
@@ -13364,10 +13360,10 @@ other end is going to reject. A consumer whose codes really do carry
13364
13360
  marked letters wants `text`, which judges nothing.
13365
13361
 
13366
13362
  **Not reflected**: nothing selects on it, so reflecting only writes
13367
- `type="numeric"` onto every `<helix-pin-input>` ever rendered, an attribute
13368
- no consumer's markup had. The area rules carry the sentence "reflect only
13369
- what CSS selects on". The real inputs take it as a binding, which is what
13370
- makes the keyboard follow. */
13363
+ `type="numeric"` onto every `<helix-headless-pin-input>` ever rendered, an
13364
+ attribute no consumer's markup had. The area rules carry the sentence
13365
+ "reflect only what CSS selects on". The real inputs take it as a binding,
13366
+ which is what makes the keyboard follow. */
13371
13367
  "prop:type"?: (HelixPinInput["type"]) | undefined;
13372
13368
  /** Whether the control is non-interactive.
13373
13369
 
@@ -13446,9 +13442,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
13446
13442
  last reader did rather than what the author wrote. `:state(open)` carries
13447
13443
  the resolved state for stylesheets, which is what the mirror is for. */
13448
13444
  open?: (HelixPopover["open"]) | undefined;
13449
- /** Initial open state for uncontrolled use, where nothing declared one. */
13445
+ /** Whether the markup declared it open. Ignored once `open` is written. */
13450
13446
  "default-open"?: (HelixPopover["defaultOpen"]) | undefined;
13451
- /** Initial open state for uncontrolled use, where nothing declared one. */
13447
+ /** Whether the markup declared it open. Ignored once `open` is written. */
13452
13448
  defaultOpen?: (HelixPopover["defaultOpen"]) | undefined;
13453
13449
  /** Accessible name for the panel. */
13454
13450
  label?: (HelixPopover["label"]) | undefined;
@@ -13494,9 +13490,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
13494
13490
  last reader did rather than what the author wrote. `:state(open)` carries
13495
13491
  the resolved state for stylesheets, which is what the mirror is for. */
13496
13492
  "prop:open"?: (HelixPopover["open"]) | undefined;
13497
- /** Initial open state for uncontrolled use, where nothing declared one. */
13493
+ /** Whether the markup declared it open. Ignored once `open` is written. */
13498
13494
  "bool:default-open"?: (HelixPopover["defaultOpen"]) | undefined;
13499
- /** Initial open state for uncontrolled use, where nothing declared one. */
13495
+ /** Whether the markup declared it open. Ignored once `open` is written. */
13500
13496
  "prop:defaultOpen"?: (HelixPopover["defaultOpen"]) | undefined;
13501
13497
  /** Accessible name for the panel. */
13502
13498
  "prop:label"?: (HelixPopover["label"]) | undefined;
@@ -14019,7 +14015,7 @@ attribute and the state is the property.
14019
14015
  **The attribute, read when it is asked for, and never a snapshot taken in
14020
14016
  the constructor.** A field initializer runs there, and an element the HTML
14021
14017
  parser created has none of its attributes yet at that moment: measured on
14022
- this element, on `Option` and on `Toggle`, `<helix-radio value="a"
14018
+ this element, on `Option` and on `Toggle`, `<helix-headless-radio value="a"
14023
14019
  selected>` reported `defaultSelected` as `false` both from parsed markup
14024
14020
  and from `createElement` followed by `setAttribute`, which is every way a
14025
14021
  consumer writes one. The snapshot could only ever be true for an element
@@ -14126,7 +14122,7 @@ attribute and the state is the property.
14126
14122
  **The attribute, read when it is asked for, and never a snapshot taken in
14127
14123
  the constructor.** A field initializer runs there, and an element the HTML
14128
14124
  parser created has none of its attributes yet at that moment: measured on
14129
- this element, on `Option` and on `Toggle`, `<helix-radio value="a"
14125
+ this element, on `Option` and on `Toggle`, `<helix-headless-radio value="a"
14130
14126
  selected>` reported `defaultSelected` as `false` both from parsed markup
14131
14127
  and from `createElement` followed by `setAttribute`, which is every way a
14132
14128
  consumer writes one. The snapshot could only ever be true for an element
@@ -15209,9 +15205,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
15209
15205
  last reader did rather than what the author wrote. `:state(open)` carries
15210
15206
  the resolved state for stylesheets, which is what the mirror is for. */
15211
15207
  open?: (HelixSelect["open"]) | undefined;
15212
- /** Initial open state for uncontrolled use, where nothing declared one. */
15208
+ /** Whether the markup declared it open. Ignored once `open` is written. */
15213
15209
  "default-open"?: (HelixSelect["defaultOpen"]) | undefined;
15214
- /** Initial open state for uncontrolled use, where nothing declared one. */
15210
+ /** Whether the markup declared it open. Ignored once `open` is written. */
15215
15211
  defaultOpen?: (HelixSelect["defaultOpen"]) | undefined;
15216
15212
  /** The value the markup declared, which is where a reset returns to. */
15217
15213
  "default-value"?: (HelixSelect["defaultValue"]) | undefined;
@@ -15352,9 +15348,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
15352
15348
  last reader did rather than what the author wrote. `:state(open)` carries
15353
15349
  the resolved state for stylesheets, which is what the mirror is for. */
15354
15350
  "prop:open"?: (HelixSelect["open"]) | undefined;
15355
- /** Initial open state for uncontrolled use, where nothing declared one. */
15351
+ /** Whether the markup declared it open. Ignored once `open` is written. */
15356
15352
  "bool:default-open"?: (HelixSelect["defaultOpen"]) | undefined;
15357
- /** Initial open state for uncontrolled use, where nothing declared one. */
15353
+ /** Whether the markup declared it open. Ignored once `open` is written. */
15358
15354
  "prop:defaultOpen"?: (HelixSelect["defaultOpen"]) | undefined;
15359
15355
  /** The value the markup declared, which is where a reset returns to. */
15360
15356
  "attr:default-value"?: (HelixSelect["defaultValue"]) | undefined;
@@ -16067,9 +16063,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
16067
16063
  last reader did rather than what the author wrote. `:state(open)` carries
16068
16064
  the resolved state for stylesheets, which is what the mirror is for. */
16069
16065
  open?: (HelixSpeedDial["open"]) | undefined;
16070
- /** Initial open state for uncontrolled use, where nothing declared one. */
16066
+ /** Whether the markup declared it open. Ignored once `open` is written. */
16071
16067
  "default-open"?: (HelixSpeedDial["defaultOpen"]) | undefined;
16072
- /** Initial open state for uncontrolled use, where nothing declared one. */
16068
+ /** Whether the markup declared it open. Ignored once `open` is written. */
16073
16069
  defaultOpen?: (HelixSpeedDial["defaultOpen"]) | undefined;
16074
16070
  /** Names the trigger and the set of actions it opens. */
16075
16071
  label?: (HelixSpeedDial["label"]) | undefined;
@@ -16109,9 +16105,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
16109
16105
  last reader did rather than what the author wrote. `:state(open)` carries
16110
16106
  the resolved state for stylesheets, which is what the mirror is for. */
16111
16107
  "prop:open"?: (HelixSpeedDial["open"]) | undefined;
16112
- /** Initial open state for uncontrolled use, where nothing declared one. */
16108
+ /** Whether the markup declared it open. Ignored once `open` is written. */
16113
16109
  "bool:default-open"?: (HelixSpeedDial["defaultOpen"]) | undefined;
16114
- /** Initial open state for uncontrolled use, where nothing declared one. */
16110
+ /** Whether the markup declared it open. Ignored once `open` is written. */
16115
16111
  "prop:defaultOpen"?: (HelixSpeedDial["defaultOpen"]) | undefined;
16116
16112
  /** Names the trigger and the set of actions it opens. */
16117
16113
  "prop:label"?: (HelixSpeedDial["label"]) | undefined;
@@ -16426,9 +16422,9 @@ the headline and the label is a caption under it.
16426
16422
  The row directions set them side by side, for a figure in a line of text or
16427
16423
  a narrow strip where a stacked pair would be two lines of almost nothing.
16428
16424
 
16429
- A property rather than a `helix-flex` around it, because the unit has to
16430
- stay on the value's baseline whichever way the pair goes, and only this
16431
- element knows which of its children the unit belongs to.
16425
+ A property rather than a `Flex` around it, because the unit has to stay on
16426
+ the value's baseline whichever way the pair goes, and only this element
16427
+ knows which of its children the unit belongs to.
16432
16428
 
16433
16429
  **Optional rather than defaulted to `column`, which is not a style
16434
16430
  preference.** A reflecting property with a default writes its attribute onto
@@ -16451,9 +16447,9 @@ the headline and the label is a caption under it.
16451
16447
  The row directions set them side by side, for a figure in a line of text or
16452
16448
  a narrow strip where a stacked pair would be two lines of almost nothing.
16453
16449
 
16454
- A property rather than a `helix-flex` around it, because the unit has to
16455
- stay on the value's baseline whichever way the pair goes, and only this
16456
- element knows which of its children the unit belongs to.
16450
+ A property rather than a `Flex` around it, because the unit has to stay on
16451
+ the value's baseline whichever way the pair goes, and only this element
16452
+ knows which of its children the unit belongs to.
16457
16453
 
16458
16454
  **Optional rather than defaulted to `column`, which is not a style
16459
16455
  preference.** A reflecting property with a default writes its attribute onto
@@ -16492,11 +16488,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
16492
16488
  tab, and `default-active` is how markup says where to start without
16493
16489
  naming the current one. */
16494
16490
  active?: (HelixSteps["active"]) | undefined;
16495
- /** Initial item for uncontrolled use.
16491
+ /** Which item the markup declared current.
16496
16492
 
16497
16493
  Ignored once `active` is written. */
16498
16494
  "default-active"?: (HelixSteps["defaultActive"]) | undefined;
16499
- /** Initial item for uncontrolled use.
16495
+ /** Which item the markup declared current.
16500
16496
 
16501
16497
  Ignored once `active` is written. */
16502
16498
  defaultActive?: (HelixSteps["defaultActive"]) | undefined;
@@ -16549,11 +16545,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
16549
16545
  tab, and `default-active` is how markup says where to start without
16550
16546
  naming the current one. */
16551
16547
  "prop:active"?: (HelixSteps["active"]) | undefined;
16552
- /** Initial item for uncontrolled use.
16548
+ /** Which item the markup declared current.
16553
16549
 
16554
16550
  Ignored once `active` is written. */
16555
16551
  "attr:default-active"?: (HelixSteps["defaultActive"]) | undefined;
16556
- /** Initial item for uncontrolled use.
16552
+ /** Which item the markup declared current.
16557
16553
 
16558
16554
  Ignored once `active` is written. */
16559
16555
  "prop:defaultActive"?: (HelixSteps["defaultActive"]) | undefined;
@@ -16654,9 +16650,9 @@ Not reflected: the attribute is the consumer's input and stays as they
16654
16650
  wrote it, and `:state(checked)` carries the resolved state for
16655
16651
  stylesheets. */
16656
16652
  checked?: (HelixSwitch["checked"]) | undefined;
16657
- /** Initial checked state for uncontrolled use, where nothing declared one. */
16653
+ /** Whether the markup declared it checked, which is where a reset returns to. */
16658
16654
  "default-checked"?: (HelixSwitch["defaultChecked"]) | undefined;
16659
- /** Initial checked state for uncontrolled use, where nothing declared one. */
16655
+ /** Whether the markup declared it checked, which is where a reset returns to. */
16660
16656
  defaultChecked?: (HelixSwitch["defaultChecked"]) | undefined;
16661
16657
  /** What is wrong, in the reader's words rather than the browser's. */
16662
16658
  feedback?: (HelixSwitch["feedback"]) | undefined;
@@ -16715,9 +16711,9 @@ Not reflected: the attribute is the consumer's input and stays as they
16715
16711
  wrote it, and `:state(checked)` carries the resolved state for
16716
16712
  stylesheets. */
16717
16713
  "prop:checked"?: (HelixSwitch["checked"]) | undefined;
16718
- /** Initial checked state for uncontrolled use, where nothing declared one. */
16714
+ /** Whether the markup declared it checked, which is where a reset returns to. */
16719
16715
  "bool:default-checked"?: (HelixSwitch["defaultChecked"]) | undefined;
16720
- /** Initial checked state for uncontrolled use, where nothing declared one. */
16716
+ /** Whether the markup declared it checked, which is where a reset returns to. */
16721
16717
  "prop:defaultChecked"?: (HelixSwitch["defaultChecked"]) | undefined;
16722
16718
  /** What is wrong, in the reader's words rather than the browser's. */
16723
16719
  "prop:feedback"?: (HelixSwitch["feedback"]) | undefined;
@@ -16797,15 +16793,15 @@ export type HelixTableColumnHelixBeforeResizeElementEvent =
16797
16793
  export type HelixTableColumnProps = {
16798
16794
  /** Which edge the values line up against.
16799
16795
 
16800
- `end` is what a column of numbers wants, so digits of the same magnitude sit
16801
- above each other. Left unset the cell inherits the table's own alignment,
16802
- which is `start` for text in either writing direction. `helix-data-table`
16803
- aligns the cells it draws. A `helix-table`'s cells are markup the consumer
16804
- wrote, so the table writes nothing onto them: it publishes the edge to each
16805
- cell under this column as `--table-cell-align`, which `@fusion.dev/helix`
16806
- reads. The heading is this element's own, and `@fusion.dev/helix` sets it to
16807
- the same edge in either table. `end` is the inline end, so in a
16808
- right-to-left table it is the left.
16796
+ `end` is what a column of numbers wants, so digits of the same magnitude
16797
+ sit above each other. Left unset the cell inherits the table's own
16798
+ alignment, which is `start` for text in either writing direction.
16799
+ `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
16800
+ consumer wrote, so the table writes nothing onto them: it publishes the
16801
+ edge to each cell under this column as `--table-cell-align`, which
16802
+ `@fusion.dev/helix` reads. The heading is this element's own, and
16803
+ `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
16804
+ inline end, so in a right-to-left table it is the left.
16809
16805
 
16810
16806
  **Reflected, because the heading is drawn by a stylesheet and has no other
16811
16807
  way to learn it.** Set as a property, which is how React sets it, an
@@ -16852,8 +16848,8 @@ onto its host. */
16852
16848
  /** The track this column takes, as CSS.
16853
16849
 
16854
16850
  A single track value, so anything valid in `grid-template-columns` works:
16855
- `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track
16856
- in its place in a `helix-table`'s `columns`, where that table sets one, and
16851
+ `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track in
16852
+ its place in a `Table`'s `columns`, where that table sets one, and
16857
16853
  otherwise shares what is left over equally, as `minmax(max-content, 1fr)`.
16858
16854
  Set here, it wins over that list, which is what lets a reader resize a
16859
16855
  column in a table that set one.
@@ -16899,15 +16895,15 @@ correct default: the raw value is what an API sorted by. */
16899
16895
  export type HelixTableColumnSolidJsProps = {
16900
16896
  /** Which edge the values line up against.
16901
16897
 
16902
- `end` is what a column of numbers wants, so digits of the same magnitude sit
16903
- above each other. Left unset the cell inherits the table's own alignment,
16904
- which is `start` for text in either writing direction. `helix-data-table`
16905
- aligns the cells it draws. A `helix-table`'s cells are markup the consumer
16906
- wrote, so the table writes nothing onto them: it publishes the edge to each
16907
- cell under this column as `--table-cell-align`, which `@fusion.dev/helix`
16908
- reads. The heading is this element's own, and `@fusion.dev/helix` sets it to
16909
- the same edge in either table. `end` is the inline end, so in a
16910
- right-to-left table it is the left.
16898
+ `end` is what a column of numbers wants, so digits of the same magnitude
16899
+ sit above each other. Left unset the cell inherits the table's own
16900
+ alignment, which is `start` for text in either writing direction.
16901
+ `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
16902
+ consumer wrote, so the table writes nothing onto them: it publishes the
16903
+ edge to each cell under this column as `--table-cell-align`, which
16904
+ `@fusion.dev/helix` reads. The heading is this element's own, and
16905
+ `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
16906
+ inline end, so in a right-to-left table it is the left.
16911
16907
 
16912
16908
  **Reflected, because the heading is drawn by a stylesheet and has no other
16913
16909
  way to learn it.** Set as a property, which is how React sets it, an
@@ -16954,8 +16950,8 @@ onto its host. */
16954
16950
  /** The track this column takes, as CSS.
16955
16951
 
16956
16952
  A single track value, so anything valid in `grid-template-columns` works:
16957
- `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track
16958
- in its place in a `helix-table`'s `columns`, where that table sets one, and
16953
+ `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track in
16954
+ its place in a `Table`'s `columns`, where that table sets one, and
16959
16955
  otherwise shares what is left over equally, as `minmax(max-content, 1fr)`.
16960
16956
  Set here, it wins over that list, which is what lets a reader resize a
16961
16957
  column in a table that set one.
@@ -17019,15 +17015,14 @@ say that without the component knowing what a row looks like. */
17019
17015
  loadingText?: (HelixTable["loadingText"]) | undefined;
17020
17016
  /** The column widths as one track list, written once on the table.
17021
17017
 
17022
- With `helix-table-column` children, each track sizes the column in its
17023
- place, a hidden column counted, so hiding one takes its track with it and
17024
- the rest keep theirs. The columns decide how many tracks there are and this
17025
- list only how wide: a track past the last column is dropped, and a column
17026
- past the last track shares what is left. With no columns declared it is
17027
- the whole track list. Tracks count as the grid counts them, so
17028
- `minmax(0, 1fr)` is one and `repeat(2, 8rem)` is two, and one the grid
17029
- would refuse leaves its column at the default rather than taking the table
17030
- down to one column.
17018
+ With `TableColumn` children, each track sizes the column in its place, a
17019
+ hidden column counted, so hiding one takes its track with it and the rest
17020
+ keep theirs. The columns decide how many tracks there are and this list
17021
+ only how wide: a track past the last column is dropped, and a column past
17022
+ the last track shares what is left. With no columns declared it is the
17023
+ whole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`
17024
+ is one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves
17025
+ its column at the default rather than taking the table down to one column.
17031
17026
 
17032
17027
  **A column's own `width` wins over its track here.** The width is written
17033
17028
  on the column it sizes, which is the more particular statement, and it is
@@ -17041,13 +17036,11 @@ to walk, so a render there knows of no columns and this attribute is the
17041
17036
  whole answer: a table given one lays its grid out in the first paint, and a
17042
17037
  table sized only by its columns is one track wide until it upgrades.
17043
17038
 
17044
- **`helix-data-table` has none of this, and should not.** Its columns are
17045
- its schema rather than an option, so there is always a column to write a
17046
- `width` on and a list here would be a second way to say what that says.
17047
- This table's cells are markup, and a table written as rows of cells with no
17048
- `helix-table-column` in it has nowhere else to be sized from. Both families
17049
- take the same CSS hook, `--table-columns` and `--data-table-columns`, which
17050
- wins over whichever list the element worked out. */
17039
+ **Data Table has none of this, and should not.** Its columns are its schema
17040
+ rather than an option, so there is always a column to write a `width` on
17041
+ and a list here would be a second way to say what that says. This table's
17042
+ cells are markup, and a table written as rows of cells with no column
17043
+ declared in it has nowhere else to be sized from. */
17051
17044
  columns?: (HelixTable["columns"]) | undefined;
17052
17045
  /** Accessible name for the table. */
17053
17046
  label?: (HelixTable["label"]) | undefined;
@@ -17070,15 +17063,14 @@ say that without the component knowing what a row looks like. */
17070
17063
  "prop:loadingText"?: (HelixTable["loadingText"]) | undefined;
17071
17064
  /** The column widths as one track list, written once on the table.
17072
17065
 
17073
- With `helix-table-column` children, each track sizes the column in its
17074
- place, a hidden column counted, so hiding one takes its track with it and
17075
- the rest keep theirs. The columns decide how many tracks there are and this
17076
- list only how wide: a track past the last column is dropped, and a column
17077
- past the last track shares what is left. With no columns declared it is
17078
- the whole track list. Tracks count as the grid counts them, so
17079
- `minmax(0, 1fr)` is one and `repeat(2, 8rem)` is two, and one the grid
17080
- would refuse leaves its column at the default rather than taking the table
17081
- down to one column.
17066
+ With `TableColumn` children, each track sizes the column in its place, a
17067
+ hidden column counted, so hiding one takes its track with it and the rest
17068
+ keep theirs. The columns decide how many tracks there are and this list
17069
+ only how wide: a track past the last column is dropped, and a column past
17070
+ the last track shares what is left. With no columns declared it is the
17071
+ whole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`
17072
+ is one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves
17073
+ its column at the default rather than taking the table down to one column.
17082
17074
 
17083
17075
  **A column's own `width` wins over its track here.** The width is written
17084
17076
  on the column it sizes, which is the more particular statement, and it is
@@ -17092,13 +17084,11 @@ to walk, so a render there knows of no columns and this attribute is the
17092
17084
  whole answer: a table given one lays its grid out in the first paint, and a
17093
17085
  table sized only by its columns is one track wide until it upgrades.
17094
17086
 
17095
- **`helix-data-table` has none of this, and should not.** Its columns are
17096
- its schema rather than an option, so there is always a column to write a
17097
- `width` on and a list here would be a second way to say what that says.
17098
- This table's cells are markup, and a table written as rows of cells with no
17099
- `helix-table-column` in it has nowhere else to be sized from. Both families
17100
- take the same CSS hook, `--table-columns` and `--data-table-columns`, which
17101
- wins over whichever list the element worked out. */
17087
+ **Data Table has none of this, and should not.** Its columns are its schema
17088
+ rather than an option, so there is always a column to write a `width` on
17089
+ and a list here would be a second way to say what that says. This table's
17090
+ cells are markup, and a table written as rows of cells with no column
17091
+ declared in it has nowhere else to be sized from. */
17102
17092
  "prop:columns"?: (HelixTable["columns"]) | undefined;
17103
17093
  /** Accessible name for the table. */
17104
17094
  "prop:label"?: (HelixTable["label"]) | undefined;
@@ -17183,11 +17173,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
17183
17173
  tab, and `default-active` is how markup says where to start without
17184
17174
  naming the current one. */
17185
17175
  active?: (HelixTabs["active"]) | undefined;
17186
- /** Initial item for uncontrolled use.
17176
+ /** Which item the markup declared current.
17187
17177
 
17188
17178
  Ignored once `active` is written. */
17189
17179
  "default-active"?: (HelixTabs["defaultActive"]) | undefined;
17190
- /** Initial item for uncontrolled use.
17180
+ /** Which item the markup declared current.
17191
17181
 
17192
17182
  Ignored once `active` is written. */
17193
17183
  defaultActive?: (HelixTabs["defaultActive"]) | undefined;
@@ -17235,11 +17225,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
17235
17225
  tab, and `default-active` is how markup says where to start without
17236
17226
  naming the current one. */
17237
17227
  "prop:active"?: (HelixTabs["active"]) | undefined;
17238
- /** Initial item for uncontrolled use.
17228
+ /** Which item the markup declared current.
17239
17229
 
17240
17230
  Ignored once `active` is written. */
17241
17231
  "attr:default-active"?: (HelixTabs["defaultActive"]) | undefined;
17242
- /** Initial item for uncontrolled use.
17232
+ /** Which item the markup declared current.
17243
17233
 
17244
17234
  Ignored once `active` is written. */
17245
17235
  "prop:defaultActive"?: (HelixTabs["defaultActive"]) | undefined;
@@ -17853,9 +17843,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
17853
17843
  last reader did rather than what the author wrote. `:state(open)` carries
17854
17844
  the resolved state for stylesheets, which is what the mirror is for. */
17855
17845
  open?: (HelixTimeInput["open"]) | undefined;
17856
- /** Initial open state for uncontrolled use, where nothing declared one. */
17846
+ /** Whether the markup declared it open. Ignored once `open` is written. */
17857
17847
  "default-open"?: (HelixTimeInput["defaultOpen"]) | undefined;
17858
- /** Initial open state for uncontrolled use, where nothing declared one. */
17848
+ /** Whether the markup declared it open. Ignored once `open` is written. */
17859
17849
  defaultOpen?: (HelixTimeInput["defaultOpen"]) | undefined;
17860
17850
  /** What the control is called once everything is showing. */
17861
17851
  "collapse-label"?: (HelixTimeInput["collapseLabel"]) | undefined;
@@ -17907,8 +17897,8 @@ Absent uses the runtime's own. */
17907
17897
 
17908
17898
  Absent is one. `range` holds a start and an end, `multiple` holds any
17909
17899
  number, and both are carried as one comma-separated value, which is what a
17910
- form submits. `helix-time-picker` carries the longer note on the interaction and on
17911
- why a wheel cannot do either. */
17900
+ form submits. `TimePicker` carries the longer note on the interaction and
17901
+ on why a wheel cannot do either. */
17912
17902
  mode?: (HelixTimeInput["mode"]) | undefined;
17913
17903
  /** What the field says before a time is in it. */
17914
17904
  placeholder?: (HelixTimeInput["placeholder"]) | undefined;
@@ -17937,7 +17927,7 @@ never something this element would refuse to read back. */
17937
17927
  `list` offers whole times, which is what a product with slots or opening
17938
17928
  hours has. `wheels` splits them into an hour, a minute and a meridiem where
17939
17929
  the locale uses one, which is the only way to reach `23:45` without
17940
- scrolling most of a day. `helix-time-picker` carries the longer note on the trade.
17930
+ scrolling most of a day. `TimePicker` carries the longer note on the trade.
17941
17931
 
17942
17932
  **Optional rather than defaulted, which is not a style preference.** A
17943
17933
  reflecting property with a default writes its attribute onto every host the
@@ -18041,9 +18031,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
18041
18031
  last reader did rather than what the author wrote. `:state(open)` carries
18042
18032
  the resolved state for stylesheets, which is what the mirror is for. */
18043
18033
  "prop:open"?: (HelixTimeInput["open"]) | undefined;
18044
- /** Initial open state for uncontrolled use, where nothing declared one. */
18034
+ /** Whether the markup declared it open. Ignored once `open` is written. */
18045
18035
  "bool:default-open"?: (HelixTimeInput["defaultOpen"]) | undefined;
18046
- /** Initial open state for uncontrolled use, where nothing declared one. */
18036
+ /** Whether the markup declared it open. Ignored once `open` is written. */
18047
18037
  "prop:defaultOpen"?: (HelixTimeInput["defaultOpen"]) | undefined;
18048
18038
  /** What the control is called once everything is showing. */
18049
18039
  "attr:collapse-label"?: (HelixTimeInput["collapseLabel"]) | undefined;
@@ -18095,8 +18085,8 @@ Absent uses the runtime's own. */
18095
18085
 
18096
18086
  Absent is one. `range` holds a start and an end, `multiple` holds any
18097
18087
  number, and both are carried as one comma-separated value, which is what a
18098
- form submits. `helix-time-picker` carries the longer note on the interaction and on
18099
- why a wheel cannot do either. */
18088
+ form submits. `TimePicker` carries the longer note on the interaction and
18089
+ on why a wheel cannot do either. */
18100
18090
  "prop:mode"?: (HelixTimeInput["mode"]) | undefined;
18101
18091
  /** What the field says before a time is in it. */
18102
18092
  "prop:placeholder"?: (HelixTimeInput["placeholder"]) | undefined;
@@ -18125,7 +18115,7 @@ never something this element would refuse to read back. */
18125
18115
  `list` offers whole times, which is what a product with slots or opening
18126
18116
  hours has. `wheels` splits them into an hour, a minute and a meridiem where
18127
18117
  the locale uses one, which is the only way to reach `23:45` without
18128
- scrolling most of a day. `helix-time-picker` carries the longer note on the trade.
18118
+ scrolling most of a day. `TimePicker` carries the longer note on the trade.
18129
18119
 
18130
18120
  **Optional rather than defaulted, which is not a style preference.** A
18131
18121
  reflecting property with a default writes its attribute onto every host the
@@ -18260,7 +18250,7 @@ Absent uses the runtime's own. */
18260
18250
 
18261
18251
  Absent is one. `range` holds a start and an end with everything between
18262
18252
  them shown as part of the answer, `multiple` holds any number, and both are
18263
- carried as one comma-separated value: the same shape `helix-date-picker` uses,
18253
+ carried as one comma-separated value: the same shape `DatePicker` uses,
18264
18254
  because it is the same question asked of a different unit.
18265
18255
 
18266
18256
  **A range is two picks, and a third starts over.** That is the calendar's
@@ -18434,7 +18424,7 @@ Absent uses the runtime's own. */
18434
18424
 
18435
18425
  Absent is one. `range` holds a start and an end with everything between
18436
18426
  them shown as part of the answer, `multiple` holds any number, and both are
18437
- carried as one comma-separated value: the same shape `helix-date-picker` uses,
18427
+ carried as one comma-separated value: the same shape `DatePicker` uses,
18438
18428
  because it is the same question asked of a different unit.
18439
18429
 
18440
18430
  **A range is two picks, and a third starts over.** That is the calendar's
@@ -18715,7 +18705,7 @@ where they were would not be a stack.
18715
18705
  **Optional, and bottom-end is the absence of it.** Reflecting *and*
18716
18706
  defaulting is the pair that writes onto a host: every toast region anybody
18717
18707
  rendered would gain a `placement="bottom-end"` nobody typed, which a React
18718
- consumer's server markup does not have. The styled sheet carries the resting
18708
+ consumer's server markup does not have. A sheet carries the resting
18719
18709
  arrangement in its own `:host` rule and the selectors describe only the
18720
18710
  departures, which is what `orientation` does. */
18721
18711
  placement?: (HelixToast["placement"]) | undefined;
@@ -18736,7 +18726,7 @@ where they were would not be a stack.
18736
18726
  **Optional, and bottom-end is the absence of it.** Reflecting *and*
18737
18727
  defaulting is the pair that writes onto a host: every toast region anybody
18738
18728
  rendered would gain a `placement="bottom-end"` nobody typed, which a React
18739
- consumer's server markup does not have. The styled sheet carries the resting
18729
+ consumer's server markup does not have. A sheet carries the resting
18740
18730
  arrangement in its own `:host` rule and the selectors describe only the
18741
18731
  departures, which is what `orientation` does. */
18742
18732
  "prop:placement"?: (HelixToast["placement"]) | undefined;
@@ -18988,11 +18978,11 @@ attribute and the state is the property.
18988
18978
  **The attribute, read when it is asked for, and never a snapshot taken in
18989
18979
  the constructor.** A field initializer runs there, and an element the HTML
18990
18980
  parser created has none of its attributes yet at that moment: measured on
18991
- this element, on `Option` and on `Radio`, `<helix-toggle value="light"
18992
- selected>` reported `defaultSelected` as `false` both from parsed markup
18993
- and from `createElement` followed by `setAttribute`, which is every way a
18994
- consumer writes one. The snapshot could only ever be true for an element
18995
- already in the document when `customElements.define` ran.
18981
+ this element, on `Option` and on `Radio`, `<helix-headless-toggle
18982
+ value="light" selected>` reported `defaultSelected` as `false` both from
18983
+ parsed markup and from `createElement` followed by `setAttribute`, which is
18984
+ every way a consumer writes one. The snapshot could only ever be true for
18985
+ an element already in the document when `customElements.define` ran.
18996
18986
 
18997
18987
  Nothing overwrites it either, which is what makes reading it late correct
18998
18988
  rather than merely later: `selected` does not reflect, for the reason
@@ -19038,11 +19028,11 @@ attribute and the state is the property.
19038
19028
  **The attribute, read when it is asked for, and never a snapshot taken in
19039
19029
  the constructor.** A field initializer runs there, and an element the HTML
19040
19030
  parser created has none of its attributes yet at that moment: measured on
19041
- this element, on `Option` and on `Radio`, `<helix-toggle value="light"
19042
- selected>` reported `defaultSelected` as `false` both from parsed markup
19043
- and from `createElement` followed by `setAttribute`, which is every way a
19044
- consumer writes one. The snapshot could only ever be true for an element
19045
- already in the document when `customElements.define` ran.
19031
+ this element, on `Option` and on `Radio`, `<helix-headless-toggle
19032
+ value="light" selected>` reported `defaultSelected` as `false` both from
19033
+ parsed markup and from `createElement` followed by `setAttribute`, which is
19034
+ every way a consumer writes one. The snapshot could only ever be true for
19035
+ an element already in the document when `customElements.define` ran.
19046
19036
 
19047
19037
  Nothing overwrites it either, which is what makes reading it late correct
19048
19038
  rather than merely later: `selected` does not reflect, for the reason
@@ -19141,9 +19131,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
19141
19131
  last reader did rather than what the author wrote. `:state(open)` carries
19142
19132
  the resolved state for stylesheets, which is what the mirror is for. */
19143
19133
  open?: (HelixTooltip["open"]) | undefined;
19144
- /** Initial open state for uncontrolled use, where nothing declared one. */
19134
+ /** Whether the markup declared it open. Ignored once `open` is written. */
19145
19135
  "default-open"?: (HelixTooltip["defaultOpen"]) | undefined;
19146
- /** Initial open state for uncontrolled use, where nothing declared one. */
19136
+ /** Whether the markup declared it open. Ignored once `open` is written. */
19147
19137
  defaultOpen?: (HelixTooltip["defaultOpen"]) | undefined;
19148
19138
  /** The text shown in the bubble.
19149
19139
 
@@ -19275,9 +19265,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
19275
19265
  last reader did rather than what the author wrote. `:state(open)` carries
19276
19266
  the resolved state for stylesheets, which is what the mirror is for. */
19277
19267
  "prop:open"?: (HelixTooltip["open"]) | undefined;
19278
- /** Initial open state for uncontrolled use, where nothing declared one. */
19268
+ /** Whether the markup declared it open. Ignored once `open` is written. */
19279
19269
  "bool:default-open"?: (HelixTooltip["defaultOpen"]) | undefined;
19280
- /** Initial open state for uncontrolled use, where nothing declared one. */
19270
+ /** Whether the markup declared it open. Ignored once `open` is written. */
19281
19271
  "prop:defaultOpen"?: (HelixTooltip["defaultOpen"]) | undefined;
19282
19272
  /** The text shown in the bubble.
19283
19273
 
@@ -19608,9 +19598,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
19608
19598
  last reader did rather than what the author wrote. `:state(open)` carries
19609
19599
  the resolved state for stylesheets, which is what the mirror is for. */
19610
19600
  open?: (HelixTreeItem["open"]) | undefined;
19611
- /** Initial open state for uncontrolled use, where nothing declared one. */
19601
+ /** Whether the markup declared it open. Ignored once `open` is written. */
19612
19602
  "default-open"?: (HelixTreeItem["defaultOpen"]) | undefined;
19613
- /** Initial open state for uncontrolled use, where nothing declared one. */
19603
+ /** Whether the markup declared it open. Ignored once `open` is written. */
19614
19604
  defaultOpen?: (HelixTreeItem["defaultOpen"]) | undefined;
19615
19605
  /** Where this node goes, which makes its row a real link.
19616
19606
 
@@ -19686,9 +19676,9 @@ hydration, or diffed by a framework, it comes back holding whatever the
19686
19676
  last reader did rather than what the author wrote. `:state(open)` carries
19687
19677
  the resolved state for stylesheets, which is what the mirror is for. */
19688
19678
  "prop:open"?: (HelixTreeItem["open"]) | undefined;
19689
- /** Initial open state for uncontrolled use, where nothing declared one. */
19679
+ /** Whether the markup declared it open. Ignored once `open` is written. */
19690
19680
  "bool:default-open"?: (HelixTreeItem["defaultOpen"]) | undefined;
19691
- /** Initial open state for uncontrolled use, where nothing declared one. */
19681
+ /** Whether the markup declared it open. Ignored once `open` is written. */
19692
19682
  "prop:defaultOpen"?: (HelixTreeItem["defaultOpen"]) | undefined;
19693
19683
  /** Where this node goes, which makes its row a real link.
19694
19684
 
@@ -19836,11 +19826,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
19836
19826
  tab, and `default-active` is how markup says where to start without
19837
19827
  naming the current one. */
19838
19828
  active?: (HelixTree["active"]) | undefined;
19839
- /** Initial item for uncontrolled use.
19829
+ /** Which item the markup declared current.
19840
19830
 
19841
19831
  Ignored once `active` is written. */
19842
19832
  "default-active"?: (HelixTree["defaultActive"]) | undefined;
19843
- /** Initial item for uncontrolled use.
19833
+ /** Which item the markup declared current.
19844
19834
 
19845
19835
  Ignored once `active` is written. */
19846
19836
  defaultActive?: (HelixTree["defaultActive"]) | undefined;
@@ -19959,11 +19949,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
19959
19949
  tab, and `default-active` is how markup says where to start without
19960
19950
  naming the current one. */
19961
19951
  "prop:active"?: (HelixTree["active"]) | undefined;
19962
- /** Initial item for uncontrolled use.
19952
+ /** Which item the markup declared current.
19963
19953
 
19964
19954
  Ignored once `active` is written. */
19965
19955
  "attr:default-active"?: (HelixTree["defaultActive"]) | undefined;
19966
- /** Initial item for uncontrolled use.
19956
+ /** Which item the markup declared current.
19967
19957
 
19968
19958
  Ignored once `active` is written. */
19969
19959
  "prop:defaultActive"?: (HelixTree["defaultActive"]) | undefined;
@@ -20197,11 +20187,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
20197
20187
  tab, and `default-active` is how markup says where to start without
20198
20188
  naming the current one. */
20199
20189
  active?: (HelixVideoPlaylist["active"]) | undefined;
20200
- /** Initial item for uncontrolled use.
20190
+ /** Which item the markup declared current.
20201
20191
 
20202
20192
  Ignored once `active` is written. */
20203
20193
  "default-active"?: (HelixVideoPlaylist["defaultActive"]) | undefined;
20204
- /** Initial item for uncontrolled use.
20194
+ /** Which item the markup declared current.
20205
20195
 
20206
20196
  Ignored once `active` is written. */
20207
20197
  defaultActive?: (HelixVideoPlaylist["defaultActive"]) | undefined;
@@ -20226,11 +20216,11 @@ Writing always applies, so `<helix-tabs active="one">` starts on that
20226
20216
  tab, and `default-active` is how markup says where to start without
20227
20217
  naming the current one. */
20228
20218
  "prop:active"?: (HelixVideoPlaylist["active"]) | undefined;
20229
- /** Initial item for uncontrolled use.
20219
+ /** Which item the markup declared current.
20230
20220
 
20231
20221
  Ignored once `active` is written. */
20232
20222
  "attr:default-active"?: (HelixVideoPlaylist["defaultActive"]) | undefined;
20233
- /** Initial item for uncontrolled use.
20223
+ /** Which item the markup declared current.
20234
20224
 
20235
20225
  Ignored once `active` is written. */
20236
20226
  "prop:defaultActive"?: (HelixVideoPlaylist["defaultActive"]) | undefined;
@@ -20888,7 +20878,7 @@ export type CustomElements = {
20888
20878
  * hydration, or diffed by a framework, it comes back holding whatever the
20889
20879
  * last reader did rather than what the author wrote. `:state(open)` carries
20890
20880
  * the resolved state for stylesheets, which is what the mirror is for.
20891
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
20881
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
20892
20882
  * - `chevron-placement`/`chevronPlacement`: Where the open indicator sits, or whether there is one.
20893
20883
  *
20894
20884
  * `auto` resolves to `end`, which is where a reader scanning a list of
@@ -21726,13 +21716,13 @@ export type CustomElements = {
21726
21716
  * Unset shows all of them, which is what no limit means and is more useful
21727
21717
  * than refusing to render.
21728
21718
  *
21729
- * **Reflected, because the fold is a stylesheet rule and nothing else.** The
21730
- * styled tier hides past the limit with `:host([max="N"]) ::slotted(:nth-child(n + N+1))`,
21731
- * so the attribute *is* the mechanism: a `max` that reaches this property and
21732
- * never reaches the host matches no rule, and every avatar is drawn beside a
21733
- * count claiming some are hidden. Markup is the safe path and hides the fault;
21734
- * a script is the broken one, and React takes it for everyone, assigning a
21735
- * matching property rather than an attribute.
21719
+ * **Reflected, because the fold is a stylesheet rule and nothing else.** A
21720
+ * sheet hides past the limit one selector per value, as `FOLDS_UP_TO`
21721
+ * describes, so the attribute *is* the mechanism: a `max` that reaches this
21722
+ * property and never reaches the host matches no rule, and every avatar is
21723
+ * drawn beside a count claiming some are hidden. Markup is the safe path and
21724
+ * hides the fault; a script is the broken one, and React takes it for
21725
+ * everyone, assigning a matching property rather than an attribute.
21736
21726
  *
21737
21727
  * **Optional rather than defaulted, per the rule that a reflected property
21738
21728
  * takes no default**: `max = 0` would stamp `max="0"` onto every host that
@@ -22074,7 +22064,7 @@ export type CustomElements = {
22074
22064
  * **A chart-domain axis and deliberately not a library one.** It lives on this
22075
22065
  * family alone, and here it is a way of encoding data rather than a way of
22076
22066
  * expressing a theme: promoted to the registry it would put an attribute on
22077
- * eighty-eight components that means nothing on eighty-seven. `wash` because
22067
+ * every component in the library and mean something on one. `wash` because
22078
22068
  * that is what the tier below already calls it, in `--chart-bar-wash` and in
22079
22069
  * the `bar-wash-start` and `bar-wash-end` stops.
22080
22070
  * - `for`: The id of the table to read.
@@ -22253,7 +22243,7 @@ export type CustomElements = {
22253
22243
  * - `--bar-chart-line-width`: Thickness of a `lines` series, over `--chart-stroke`. (default: `undefined`)
22254
22244
  * - `--chart-stroke`: Thickness of a `lines` series, one name across this family, Line Chart and Area Chart's top edge, since the three read one shared rule. `--bar-chart-line-width` overrides it here. (default: `undefined`)
22255
22245
  * - `--bar-chart-axis`: 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. (default: `undefined`)
22256
- * - `--bar-chart-secondary`: 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. (default: `undefined`)
22246
+ * - `--bar-chart-secondary`: 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. (default: `undefined`)
22257
22247
  * - `--chart-bar-wash`: 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. (default: `undefined`)
22258
22248
  *
22259
22249
  * ## CSS Parts
@@ -22381,12 +22371,12 @@ export type CustomElements = {
22381
22371
  * - `current`: Whether this item is the page the reader is on.
22382
22372
  * - `href`: Where the crumb goes, and nothing where it is the current page.
22383
22373
  *
22384
- * **Optional and reflected, because a stylesheet does select on it.**
22385
- * `breadcrumb.css` writes `:host(:not([href])) [part="link"]` to take the
22386
- * block padding off a crumb that is not a link, so the attribute is what
22387
- * decides how tall a crumb is. Unreflected, an `href` set from script reached
22388
- * the property, rendered the anchor, and left the host looking unlinked: the
22389
- * crumb drew at 20px where a markup twin drew at 28.
22374
+ * **Optional and reflected, because a stylesheet does select on it.** A sheet
22375
+ * writes `:host(:not([href])) [part="link"]` to take the block padding off a
22376
+ * crumb that is not a link, so the attribute is what decides how tall a crumb
22377
+ * is. Unreflected, an `href` set from script reached the property, rendered
22378
+ * the anchor, and left the host looking unlinked: the crumb drew at 20px
22379
+ * where a markup twin drew at 28.
22390
22380
  *
22391
22381
  * Optional rather than defaulted, which is the general rule that a reflected
22392
22382
  * property takes no default: an `href` written onto every host would be a link
@@ -22665,7 +22655,7 @@ export type CustomElements = {
22665
22655
  * the same way `label` becomes `aria-label` in there.
22666
22656
  *
22667
22657
  * ```html
22668
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
22658
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
22669
22659
  * ```
22670
22660
  *
22671
22661
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -23157,12 +23147,11 @@ export type CustomElements = {
23157
23147
  * - `autoplay`: Whether the carousel advances on its own.
23158
23148
  * - `index`: The slide in view, counted from zero.
23159
23149
  *
23160
- * Reading gives the real slide, in either mode. Writing sets it, the way a
23161
- * script assigning to a native control does. Which mode the carousel is in is
23162
- * read once, at the first update, from whether anything had declared an
23163
- * `index` by then: declared, and the consumer owns it and the carousel only
23164
- * announces where it would have gone; not declared, and the carousel owns it
23165
- * and `default-index` says where it starts.
23150
+ * Reading gives the real slide. Writing always applies, the way a script
23151
+ * assigning to a native control does, and is a seed and a correction rather
23152
+ * than a claim of ownership: a consumer who wants the decision refuses the
23153
+ * `helix-select`. `default-index` is where the carousel starts until
23154
+ * something moves it.
23166
23155
  *
23167
23156
  * The same contract the four mixins carry, written out here rather than
23168
23157
  * extracted, because a slide is addressed by position and every one of those
@@ -23221,13 +23210,13 @@ export type CustomElements = {
23221
23210
  * **The number is published to the styles rather than enumerated by them**,
23222
23211
  * as `--carousel-per-view` on the track, which is what keeps a width and a
23223
23212
  * count from disagreeing. A sheet can only name a value it wrote a rule for,
23224
- * so the styled tier enumerated `per-view="2"` through `5` and called five a
23225
- * judgment; above it the pane fell back to one across while this file went on
23226
- * counting positions. Measured in Chromium over eight slides, six across gave
23227
- * three dots, a pane taking the whole track and five slides reachable only by
23228
- * dragging. Written from here there is no ceiling to exceed, and a consumer's
23229
- * own sheet reads the same declaration the styled one does. `runEnd` publishes
23230
- * its correction the same way and for the same reason.
23213
+ * so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
23214
+ * above it the pane falls back to one across while this file goes on counting
23215
+ * positions. Measured in Chromium over eight slides against such a sheet, six
23216
+ * across gave three dots, a pane taking the whole track and five slides
23217
+ * reachable only by dragging. Published from here there is no ceiling to
23218
+ * exceed, and every sheet reads the same declaration. `runEnd` publishes its
23219
+ * correction the same way and for the same reason.
23231
23220
  *
23232
23221
  * **On the track and not on the host.** A custom property on the host is a
23233
23222
  * reflected attribute by another name: it would arrive on upgrade, and a
@@ -23252,8 +23241,8 @@ export type CustomElements = {
23252
23241
  * `auto` track is handed nothing. A count stays for the design that calls for
23253
23242
  * exactly three.
23254
23243
  *
23255
- * The styled sheet says how it divides, and the headless `auto` example
23256
- * carries the same three lines for a consumer writing their own.
23244
+ * A sheet says how it divides, and the `auto` example here carries the same
23245
+ * three lines for a consumer writing their own.
23257
23246
  *
23258
23247
  * **A value rather than the resting behavior**, which is what the
23259
23248
  * responsiveness policy asks of every axis that a box decides: a splitter
@@ -23626,13 +23615,13 @@ export type CustomElements = {
23626
23615
  *
23627
23616
  * **Not reflected, and the default is why.** A reflected property that
23628
23617
  * defaults to true writes its attribute on upgrade whether or not the
23629
- * consumer wrote one, so the server serves `<helix-chat label="x">` and the
23630
- * client turns it into `<helix-chat label="x" pinned>`: a hydration mismatch a
23631
- * React consumer reports and does not patch up. Nothing needs the attribute
23632
- * either, because the one thing that changes with the pin is the way back, and
23633
- * that is a part inside the shadow tree where a stylesheet can already reach
23634
- * it. Measured rather than assumed: `label, pinned` after upgrade against
23635
- * `label` from the server.
23618
+ * consumer wrote one, so the server serves `<helix-headless-chat label="x">`
23619
+ * and the client turns it into `<helix-headless-chat label="x" pinned>`: a
23620
+ * hydration mismatch a React consumer reports and does not patch up. Nothing
23621
+ * needs the attribute either, because the one thing that changes with the pin
23622
+ * is the way back, and that is a part inside the shadow tree where a
23623
+ * stylesheet can already reach it. Measured rather than assumed: `label,
23624
+ * pinned` after upgrade against `label` from the server.
23636
23625
  * - `threshold`: How near the bottom still counts as being at it, in pixels.
23637
23626
  *
23638
23627
  * A hook rather than a constant, because the right number depends on how tall
@@ -23682,7 +23671,7 @@ export type CustomElements = {
23682
23671
  *
23683
23672
  * Areas where markup can be added to the component.
23684
23673
  *
23685
- * - `(default)`: The turns, as `helix-chat-message` children.
23674
+ * - `(default)`: The turns.
23686
23675
  * - `composer`: Below the transcript, where the reader writes.
23687
23676
  * - `header`: Above the transcript.
23688
23677
  * - `resume`: The way back to the bottom.
@@ -23932,7 +23921,7 @@ export type CustomElements = {
23932
23921
  * Not reflected: the attribute is the consumer's input and stays as they
23933
23922
  * wrote it, and `:state(checked)` carries the resolved state for
23934
23923
  * stylesheets.
23935
- * - `default-checked`/`defaultChecked`: Initial checked state for uncontrolled use, where nothing declared one.
23924
+ * - `default-checked`/`defaultChecked`: Whether the markup declared it checked, which is where a reset returns to.
23936
23925
  * - `feedback`: What is wrong, in the reader's words rather than the browser's.
23937
23926
  * - `hint`: Help under the control, shown while there is nothing wrong.
23938
23927
  * - `label`: The accessible name, and the fallback for the `label` slot.
@@ -24137,11 +24126,11 @@ export type CustomElements = {
24137
24126
  * round. The platform already writes booleans like this for the same reason,
24138
24127
  * `novalidate` and `nomodule` and `noreferrer` among them.
24139
24128
  *
24140
- * **Reflected, because the gutter is a stylesheet rule.** `code-block.css`
24141
- * reserves the copy button's width with `:host(:not([no-copy]))`, so the
24142
- * attribute is what decides whether the block pays for a control. Unreflected,
24143
- * setting it from script takes the button away (`render` reads the property)
24144
- * and leaves the 40px it stood in reserved.
24129
+ * **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
24130
+ * the copy button's width with `:host(:not([no-copy]))`, so the attribute is
24131
+ * what decides whether the block pays for a control. Unreflected, setting it
24132
+ * from script takes the button away (`render` reads the property) and leaves
24133
+ * the 40px it stood in reserved.
24145
24134
  *
24146
24135
  * A false boolean reflects as the attribute's absence, so this costs no
24147
24136
  * `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -24325,7 +24314,7 @@ export type CustomElements = {
24325
24314
  * hydration, or diffed by a framework, it comes back holding whatever the
24326
24315
  * last reader did rather than what the author wrote. `:state(open)` carries
24327
24316
  * the resolved state for stylesheets, which is what the mirror is for.
24328
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
24317
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
24329
24318
  * - `default-value`/`defaultValue`: The value the markup declared, which is where a reset returns to.
24330
24319
  * - `value`: What the control holds now, and what its form submits.
24331
24320
  *
@@ -24667,10 +24656,10 @@ export type CustomElements = {
24667
24656
  *
24668
24657
  * **A color is exactly as requirable as a date**, which is the comparison
24669
24658
  * that settles it: this element extends `HelixFormElement`, carries `name`
24670
- * and reports its value, so a consumer writing
24671
- * `<helix-color-picker name="brand" required>` inside a form has every reason
24672
- * to expect the form to refuse an empty one. Its two siblings in the same
24673
- * composition position, Date Picker and Time Picker, both check it.
24659
+ * and reports its value, so a consumer writing `<helix-headless-color-picker
24660
+ * name="brand" required>` inside a form has every reason to expect the form
24661
+ * to refuse an empty one. Its two siblings in the same composition position,
24662
+ * Date Picker and Time Picker, both check it.
24674
24663
  *
24675
24664
  * Written out rather than taken from `MixinField`, for the reason those two
24676
24665
  * record: the mixin brings a label, a hint and a feedback region, and this is
@@ -24883,7 +24872,7 @@ export type CustomElements = {
24883
24872
  * hydration, or diffed by a framework, it comes back holding whatever the
24884
24873
  * last reader did rather than what the author wrote. `:state(open)` carries
24885
24874
  * the resolved state for stylesheets, which is what the mirror is for.
24886
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
24875
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
24887
24876
  * - `collapse-label`/`collapseLabel`: What the control is called once everything is showing.
24888
24877
  * - `expandable`: Whether the count is a control that shows the rest.
24889
24878
  * - `expand-label`/`expandLabel`: What the collapsed count is called, since `+3` names nothing.
@@ -25015,7 +25004,7 @@ export type CustomElements = {
25015
25004
  *
25016
25005
  * Areas where markup can be added to the component.
25017
25006
  *
25018
- * - `(default)`: The options, which are `helix-option` elements.
25007
+ * - `(default)`: The options.
25019
25008
  * - `end`: After it, for a unit or a clear button.
25020
25009
  * - `indicator`: Replaces the caret saying the field opens.
25021
25010
  * - `start`: Before the text, for an icon.
@@ -25159,7 +25148,7 @@ export type CustomElements = {
25159
25148
  * hydration, or diffed by a framework, it comes back holding whatever the
25160
25149
  * last reader did rather than what the author wrote. `:state(open)` carries
25161
25150
  * the resolved state for stylesheets, which is what the mirror is for.
25162
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
25151
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
25163
25152
  * - `empty-text`/`emptyText`: Words shown where the filter has matched nothing.
25164
25153
  * - `hotkey`: The key that opens it, as `mod+k` or `shift+p` or plain `k`.
25165
25154
  *
@@ -25202,7 +25191,7 @@ export type CustomElements = {
25202
25191
  *
25203
25192
  * Areas where markup can be added to the component.
25204
25193
  *
25205
- * - `(default)`: The commands, which are `helix-option` elements and their groups.
25194
+ * - `(default)`: The commands, and any groups of them.
25206
25195
  * - `footer`: Under the list, for the keys a reader can press.
25207
25196
  *
25208
25197
  * ## Methods
@@ -25311,7 +25300,7 @@ export type CustomElements = {
25311
25300
  * the same way `label` becomes `aria-label` in there.
25312
25301
  *
25313
25302
  * ```html
25314
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
25303
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
25315
25304
  * ```
25316
25305
  *
25317
25306
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -25617,9 +25606,9 @@ export type CustomElements = {
25617
25606
  *
25618
25607
  * **It announces nothing, and that is not an omission.** Nothing in this
25619
25608
  * element ever asks for a different page size: a size selector is
25620
- * `helix-pagination-size`, which a consumer puts in the `footer` slot and
25621
- * answers themselves. Routing this through `requestChange` would announce an
25622
- * event the element never has cause to fire.
25609
+ * `PaginationSize`, which a consumer puts in the `footer` slot and answers
25610
+ * themselves. Routing this through `requestChange` would announce an event
25611
+ * the element never has cause to fire.
25623
25612
  * - `total`: How many rows the whole result has, where this element cannot count them.
25624
25613
  *
25625
25614
  * Only read in `server` mode, where `rows` is one page and its length says
@@ -25699,7 +25688,7 @@ export type CustomElements = {
25699
25688
  *
25700
25689
  * Areas where markup can be added to the component.
25701
25690
  *
25702
- * - `(default)`: The columns, declared as `helix-table-column` children.
25691
+ * - `(default)`: The columns, declared rather than drawn.
25703
25692
  * - `footer`: Below the grid, replacing the pagination this would otherwise draw.
25704
25693
  * - `toolbar`: Above the grid, for a search field or actions.
25705
25694
  *
@@ -25744,8 +25733,8 @@ export type CustomElements = {
25744
25733
  * - `--data-table-padding-inline`: Space either side of a cell's content. (default: `undefined`)
25745
25734
  * - `--data-table-rule-color`: Color of the hairline between rows. A color and not a border: it lands in the color slot of a shorthand, so a whole border written into it produces invalid CSS and drops the rule. Drawn on the cells rather than the row, which is `display: contents` and measures `0px`. (default: `undefined`)
25746
25735
  * - `--data-table-text`: Type size, headings and cells alike. (default: `undefined`)
25747
- * - `--data-table-cell-align`: 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. (default: `undefined`)
25748
- * - `--data-table-template`: 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. (default: `undefined`)
25736
+ * - `--data-table-cell-align`: 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. (default: `undefined`)
25737
+ * - `--data-table-template`: 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. (default: `undefined`)
25749
25738
  *
25750
25739
  * ## CSS Parts
25751
25740
  *
@@ -25840,7 +25829,7 @@ export type CustomElements = {
25840
25829
  * hydration, or diffed by a framework, it comes back holding whatever the
25841
25830
  * last reader did rather than what the author wrote. `:state(open)` carries
25842
25831
  * the resolved state for stylesheets, which is what the mirror is for.
25843
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
25832
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
25844
25833
  * - `collapse-label`/`collapseLabel`: What the control is called once everything is showing.
25845
25834
  * - `expandable`: Whether the count is a control that shows the rest.
25846
25835
  * - `expand-label`/`expandLabel`: What the collapsed count is called, since `+3` names nothing.
@@ -26567,7 +26556,7 @@ export type CustomElements = {
26567
26556
  * hydration, or diffed by a framework, it comes back holding whatever the
26568
26557
  * last reader did rather than what the author wrote. `:state(open)` carries
26569
26558
  * the resolved state for stylesheets, which is what the mirror is for.
26570
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
26559
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
26571
26560
  * - `closedby`/`closedBy`: Which close requests the browser answers on its own.
26572
26561
  *
26573
26562
  * `<dialog closedby>`, forwarded, and safe to forward because every path it
@@ -26865,7 +26854,7 @@ export type CustomElements = {
26865
26854
  * `--donut-chart-stroke`, which is a number a rule can do sums with where the
26866
26855
  * word is not. Reflected, it wrote a value onto every host a script had set
26867
26856
  * it on for nothing to read. `sweep` beside it is the converse and reflects,
26868
- * because three rules select on it.
26857
+ * because the styled sheet selects on it.
26869
26858
  * - `sweep`: How much of the circle the whole occupies.
26870
26859
  *
26871
26860
  * Absent is the full turn. `half` is a semi-donut: the same shares spread
@@ -27047,7 +27036,7 @@ export type CustomElements = {
27047
27036
  * hydration, or diffed by a framework, it comes back holding whatever the
27048
27037
  * last reader did rather than what the author wrote. `:state(open)` carries
27049
27038
  * the resolved state for stylesheets, which is what the mirror is for.
27050
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
27039
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
27051
27040
  * - `closedby`/`closedBy`: Which close requests the browser answers on its own.
27052
27041
  *
27053
27042
  * `<dialog closedby>`, forwarded, and safe to forward because every path it
@@ -27072,10 +27061,10 @@ export type CustomElements = {
27072
27061
  * not, rather than shown or hidden by CSS.
27073
27062
  * - `placement`: Which edge the drawer comes from.
27074
27063
  *
27075
- * Unset is `end`, which the styled tier reads as `:host(:not([placement]))`
27076
- * beside `:host([placement="end"])` rather than as a value written here: a
27064
+ * Unset is `end`, and it stays unset rather than being written down: a
27077
27065
  * default assigned to the property would reflect onto every host and put a
27078
- * `placement="end"` into markup no consumer wrote.
27066
+ * `placement="end"` into markup no consumer wrote. So what this tier
27067
+ * guarantees is the absence, and a sheet selects on it.
27079
27068
  * - `returnValue`: What the dialog closed with, the way `<dialog>` reports it.
27080
27069
  *
27081
27070
  * **The whole point of a `<dialog>` returning a value is lost behind a shadow
@@ -27872,7 +27861,13 @@ export type CustomElements = {
27872
27861
  * - `fields`: The fields declared inside this, in the order they were written.
27873
27862
  *
27874
27863
  * What a render may know of them: none on a server, whose shim has no tree
27875
- * and threw here, and none while hydrating what one sent. (property only) (readonly)
27864
+ * and threw here, and none while hydrating what one sent.
27865
+ *
27866
+ * By identity rather than by tag. A list of names can only hold the tags this
27867
+ * package knows about, so it misses any third one, which is what subclassing
27868
+ * a headless element produces, and it is also how a headless package learns a
27869
+ * styled tag. `instanceof` answers for every one of them and proves the type
27870
+ * the signature claims. (property only) (readonly)
27876
27871
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
27877
27872
  *
27878
27873
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -28092,7 +28087,7 @@ export type CustomElements = {
28092
28087
  * hydration, or diffed by a framework, it comes back holding whatever the
28093
28088
  * last reader did rather than what the author wrote. `:state(open)` carries
28094
28089
  * the resolved state for stylesheets, which is what the mirror is for.
28095
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
28090
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
28096
28091
  * - `collapse-label`/`collapseLabel`: What the control is called once everything is showing.
28097
28092
  * - `expandable`: Whether the count is a control that shows the rest.
28098
28093
  * - `expand-label`/`expandLabel`: What the collapsed count is called, since `+3` names nothing.
@@ -28396,11 +28391,12 @@ export type CustomElements = {
28396
28391
  * would give.
28397
28392
  *
28398
28393
  * **The element's own text is read as a fallback, and only in a browser.**
28399
- * `<helix-format-date elapsed>2026-08-27T01:00:00Z</helix-format-date>` is the
28400
- * spelling that reads best in markup, and it cannot be the only one: measured
28401
- * against Lit's server shim, `textContent`, `children`, `firstChild` and
28402
- * `querySelector` are all `undefined` there, so a server has no way to see it.
28403
- * An element rendered on a server needs the attribute; one rendered in a
28394
+ * `<helix-headless-format-date
28395
+ * elapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling
28396
+ * that reads best in markup, and it cannot be the only one: measured against
28397
+ * Lit's server shim, `textContent`, `children`, `firstChild` and
28398
+ * `querySelector` are all `undefined` there, so a server has no way to see
28399
+ * it. An element rendered on a server needs the attribute; one rendered in a
28404
28400
  * browser may use either.
28405
28401
  * - `day`: How the day of the month is written, where a date is shown.
28406
28402
  * - `elapsed`: Show how long ago it was, compactly, instead of the date.
@@ -28561,12 +28557,12 @@ export type CustomElements = {
28561
28557
  * consumer has to keep by hand, and the one number a summary is told to trust
28562
28558
  * is the one it gets wrong.
28563
28559
  *
28564
- * The strip measures itself, so `--heatmap-cell-inline-size` and `--heatmap-gap` are
28565
- * enough on their own and these two are the estimate used until the first
28566
- * measurement lands. Writing the attribute pins the value and stops the
28567
- * measurement being consulted, which is what a container query or a transition
28568
- * on the cell size wants, where what is drawn this frame is not what the
28569
- * arithmetic should plan around.
28560
+ * The strip measures itself, so sizing the cells in a sheet is enough on its
28561
+ * own and these two are the estimate used until the first measurement lands.
28562
+ * Writing the attribute pins the value and stops the measurement being
28563
+ * consulted, which is what a container query or a transition on the cell size
28564
+ * wants, where what is drawn this frame is not what the arithmetic should
28565
+ * plan around.
28570
28566
  *
28571
28567
  * Zero turns the dropping off altogether, which is right for a strip in a
28572
28568
  * container that cannot get narrow.
@@ -28820,7 +28816,7 @@ export type CustomElements = {
28820
28816
  * the same way `label` becomes `aria-label` in there.
28821
28817
  *
28822
28818
  * ```html
28823
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
28819
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
28824
28820
  * ```
28825
28821
  *
28826
28822
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -29129,10 +29125,10 @@ export type CustomElements = {
29129
29125
  * **Mirrored to `data-status`, and not reflected as `status`.** It is element
29130
29126
  * state, so reflecting it puts the element's own bookkeeping into the markup
29131
29127
  * a consumer rendered: React reads the attribute appearing at upgrade as a
29132
- * hydration mismatch, and a serialized `<helix-image status="loaded">` pasted
29133
- * back declares that a picture has arrived which this element has never
29134
- * fetched. The `data-` name is the library's answer to both, being a name a
29135
- * re-parse cannot mistake for a declaration, and it is what `data-closed` on
29128
+ * hydration mismatch, and a host pasted back carrying `status="loaded"`
29129
+ * declares that a picture has arrived which this element has never fetched.
29130
+ * The `data-` name is the library's answer to both, being a name a re-parse
29131
+ * cannot mistake for a declaration, and it is what `data-closed` on
29136
29132
  * `Toast.Item` already does. A picture arrives after somebody fetched it,
29137
29133
  * which puts this on the safe side of hydration: a fact that can be true on
29138
29134
  * the *first* update mirrors to a custom state instead, which is what
@@ -29262,10 +29258,10 @@ export type CustomElements = {
29262
29258
  * **The attribute is `readonly`, which is the platform's spelling.** A
29263
29259
  * camelCase property needs an explicit `attribute`, and dash-casing a word
29264
29260
  * HTML writes as one costs what an attribute always costs here: nothing
29265
- * warns. `<helix-input readonly>` is what anybody who has written HTML types;
29266
- * against `read-only` it parses to no property at all, and the field stays
29267
- * editable with no error anywhere. Measured on the dash-cased form, `readOnly`
29268
- * came back `false`.
29261
+ * warns. `<helix-headless-input readonly>` is what anybody who has written
29262
+ * HTML types; against `read-only` it parses to no property at all, and the
29263
+ * field stays editable with no error anywhere. Measured on the dash-cased
29264
+ * form, `readOnly` came back `false`.
29269
29265
  * - `reveal`: Whether a password field offers a toggle that shows what was typed.
29270
29266
  *
29271
29267
  * Ignored on every other type. A reveal on an email field would be a button
@@ -29279,9 +29275,9 @@ export type CustomElements = {
29279
29275
  *
29280
29276
  * **Not reflected.** Reflection exists so a selector can reach a value, and
29281
29277
  * no stylesheet in this repository selects on `type`. Reflecting it writes
29282
- * `type="text"` onto every `<helix-input>` ever rendered, an attribute no
29283
- * consumer's markup has, which is the fault the area rules write up under
29284
- * `Button`'s `href`, `target` and `rel`.
29278
+ * `type="text"` onto every `<helix-headless-input>` ever rendered, an
29279
+ * attribute no consumer's markup has, which is the fault the area rules write
29280
+ * up under `Button`'s `href`, `target` and `rel`.
29285
29281
  *
29286
29282
  * Nothing reads it from the attribute either. The real `<input>` inside takes
29287
29283
  * it as a property binding, which is what makes the keyboard and the
@@ -29825,8 +29821,7 @@ export type CustomElements = {
29825
29821
  * over something busy. `triangle` points along the axis and reads as "and
29826
29822
  * onward" rather than as a second claim about the data.
29827
29823
  *
29828
- * The shapes come from
29829
- * `helix/styled/src/shared/chart/terminus.css`, the same sheet `Sparkline` takes, so
29824
+ * The shapes come from one shared sheet, the same one `Sparkline` takes, so
29830
29825
  * the set is identical wherever one appears. **Which is why every value is
29831
29826
  * named here.** `Sparkline` shipped `square` implemented, drawn, asserted and
29832
29827
  * undocumented until the cohort before this one; this family reads the same
@@ -30097,10 +30092,10 @@ export type CustomElements = {
30097
30092
  * - `label`: Accessible name for the set.
30098
30093
  * - `type`: Which markers an ordered list draws, in `<ol type>`'s own five values.
30099
30094
  *
30100
- * Reflected, because this is one of the things a stylesheet selects on and
30101
- * the styled tier maps each to a `list-style-type`. The platform's spellings
30102
- * rather than the CSS ones, so `<helix-list kind="ordered" type="i">` is what
30103
- * a consumer would have written on an `<ol>`.
30095
+ * Reflected, because this is one of the things a stylesheet selects on, each
30096
+ * value mapping to a `list-style-type`. The platform's spellings rather than
30097
+ * the CSS ones, so `<helix-headless-list kind="ordered" type="i">` is what a
30098
+ * consumer would have written on an `<ol>`.
30104
30099
  *
30105
30100
  * **`start` and `reversed` are both absent and neither can be done here.**
30106
30101
  * This renders no `<ol>`: the rows are slotted and numbered by the CSS
@@ -30506,7 +30501,7 @@ export type CustomElements = {
30506
30501
  * hydration, or diffed by a framework, it comes back holding whatever the
30507
30502
  * last reader did rather than what the author wrote. `:state(open)` carries
30508
30503
  * the resolved state for stylesheets, which is what the mirror is for.
30509
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
30504
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
30510
30505
  * - `full-below`/`fullBelow`: The width, in pixels, under which a card becomes a band. Zero never does.
30511
30506
  *
30512
30507
  * A card is a panel hung off one word, and there is no room to hang anything
@@ -30822,7 +30817,7 @@ export type CustomElements = {
30822
30817
  * hydration, or diffed by a framework, it comes back holding whatever the
30823
30818
  * last reader did rather than what the author wrote. `:state(open)` carries
30824
30819
  * the resolved state for stylesheets, which is what the mirror is for.
30825
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
30820
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
30826
30821
  * - `back-label`/`backLabel`: What the row returning from a submenu reads.
30827
30822
  * - `label`: Accessible name for the surface.
30828
30823
  * - `offset`: Space between the trigger and the surface, in pixels.
@@ -31188,7 +31183,7 @@ export type CustomElements = {
31188
31183
  * hydration, or diffed by a framework, it comes back holding whatever the
31189
31184
  * last reader did rather than what the author wrote. `:state(open)` carries
31190
31185
  * the resolved state for stylesheets, which is what the mirror is for.
31191
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
31186
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
31192
31187
  * - `collapsible`: Whether the group can be collapsed to its first row.
31193
31188
  *
31194
31189
  * Off by default, because a group is a heading before it is a control: a feed
@@ -31347,10 +31342,10 @@ export type CustomElements = {
31347
31342
  *
31348
31343
  * **Not reflected.** Unread is a visual state, which is why the four mixins
31349
31344
  * mirror theirs, but the mirror may not be the property's own attribute:
31350
- * `<helix-notification default-read>` comes back from a server without `read`
31351
- * and would gain it on the first update, which React reports as a hydration
31352
- * mismatch, and which a copy of the serialized element re-parses as a
31353
- * declaration. `:state(read)` is what the stylesheet reads.
31345
+ * `<helix-headless-notification default-read>` comes back from a server
31346
+ * without `read` and would gain it on the first update, which React reports
31347
+ * as a hydration mismatch, and which a copy of the serialized element
31348
+ * re-parses as a declaration. `:state(read)` is what the stylesheet reads.
31354
31349
  * `hydration.dom.spec.ts` holds it.
31355
31350
  * - `default-read`/`defaultRead`: State to open with, where nothing declared one.
31356
31351
  * - `locale`: Locale for the timestamp.
@@ -31546,7 +31541,7 @@ export type CustomElements = {
31546
31541
  *
31547
31542
  * Areas where markup can be added to the component.
31548
31543
  *
31549
- * - `(default)`: The notifications, as `helix-notification` children.
31544
+ * - `(default)`: The notifications.
31550
31545
  * - `footer`: Below the list, for a link to everything.
31551
31546
  * - `header`: Above the list, for a title and the mark-all control.
31552
31547
  *
@@ -32029,11 +32024,10 @@ export type CustomElements = {
32029
32024
  * - `alternate`: A second destination for this row, taken with the modifier held.
32030
32025
  *
32031
32026
  * **An attribute rather than a second row, which is the whole point.** A
32032
- * palette of eighty-eight components that offered each of them a reference
32033
- * page and a sandbox as separate entries would be a palette of a hundred and
32034
- * seventy-six, and one earns its keep by getting a reader to one thing in
32035
- * three keystrokes. The row already carries the first destination, so the
32036
- * second belongs beside it.
32027
+ * palette that offered every component a reference page and a sandbox as
32028
+ * separate entries would be twice as long, and one earns its keep by getting
32029
+ * a reader to one thing in three keystrokes. The row already carries the
32030
+ * first destination, so the second belongs beside it.
32037
32031
  *
32038
32032
  * Declared here and acted on by whatever owns the list, the same division
32039
32033
  * selection already uses: an option says what it is and the listbox decides
@@ -32088,7 +32082,7 @@ export type CustomElements = {
32088
32082
  * **The attribute, read when it is asked for, and never a snapshot taken in
32089
32083
  * the constructor.** A field initializer runs there, and an element the HTML
32090
32084
  * parser created has none of its attributes yet at that moment: measured on
32091
- * this element, on `Radio` and on `Toggle`, `<helix-option value="a"
32085
+ * this element, on `Radio` and on `Toggle`, `<helix-headless-option value="a"
32092
32086
  * selected>` reported `defaultSelected` as `false` both from parsed markup
32093
32087
  * and from `createElement` followed by `setAttribute`, which is every way a
32094
32088
  * consumer writes one. The snapshot could only ever be true for an element
@@ -32830,10 +32824,10 @@ export type CustomElements = {
32830
32824
  * marked letters wants `text`, which judges nothing.
32831
32825
  *
32832
32826
  * **Not reflected**: nothing selects on it, so reflecting only writes
32833
- * `type="numeric"` onto every `<helix-pin-input>` ever rendered, an attribute
32834
- * no consumer's markup had. The area rules carry the sentence "reflect only
32835
- * what CSS selects on". The real inputs take it as a binding, which is what
32836
- * makes the keyboard follow.
32827
+ * `type="numeric"` onto every `<helix-headless-pin-input>` ever rendered, an
32828
+ * attribute no consumer's markup had. The area rules carry the sentence
32829
+ * "reflect only what CSS selects on". The real inputs take it as a binding,
32830
+ * which is what makes the keyboard follow.
32837
32831
  * - `disabled`: Whether the control is non-interactive.
32838
32832
  *
32839
32833
  * Reflected, because the styled tier selects on it, and mirrored to
@@ -33011,7 +33005,7 @@ export type CustomElements = {
33011
33005
  * hydration, or diffed by a framework, it comes back holding whatever the
33012
33006
  * last reader did rather than what the author wrote. `:state(open)` carries
33013
33007
  * the resolved state for stylesheets, which is what the mirror is for.
33014
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
33008
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
33015
33009
  * - `label`: Accessible name for the panel.
33016
33010
  * - `offset`: Space between the trigger and the panel, in pixels.
33017
33011
  * - `placement`: Preferred side.
@@ -33612,7 +33606,7 @@ export type CustomElements = {
33612
33606
  * **The attribute, read when it is asked for, and never a snapshot taken in
33613
33607
  * the constructor.** A field initializer runs there, and an element the HTML
33614
33608
  * parser created has none of its attributes yet at that moment: measured on
33615
- * this element, on `Option` and on `Toggle`, `<helix-radio value="a"
33609
+ * this element, on `Option` and on `Toggle`, `<helix-headless-radio value="a"
33616
33610
  * selected>` reported `defaultSelected` as `false` both from parsed markup
33617
33611
  * and from `createElement` followed by `setAttribute`, which is every way a
33618
33612
  * consumer writes one. The snapshot could only ever be true for an element
@@ -34857,7 +34851,7 @@ export type CustomElements = {
34857
34851
  * hydration, or diffed by a framework, it comes back holding whatever the
34858
34852
  * last reader did rather than what the author wrote. `:state(open)` carries
34859
34853
  * the resolved state for stylesheets, which is what the mirror is for.
34860
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
34854
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
34861
34855
  * - `default-value`/`defaultValue`: The value the markup declared, which is where a reset returns to.
34862
34856
  * - `value`: What the control holds now, and what its form submits.
34863
34857
  *
@@ -35730,7 +35724,7 @@ export type CustomElements = {
35730
35724
  * hydration, or diffed by a framework, it comes back holding whatever the
35731
35725
  * last reader did rather than what the author wrote. `:state(open)` carries
35732
35726
  * the resolved state for stylesheets, which is what the mirror is for.
35733
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
35727
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
35734
35728
  * - `label`: Names the trigger and the set of actions it opens.
35735
35729
  * - `offset`: Space between the trigger and the actions, in pixels.
35736
35730
  * - `placement`: Which way the actions fan out. They move if that side does not fit.
@@ -36094,9 +36088,9 @@ export type CustomElements = {
36094
36088
  * The row directions set them side by side, for a figure in a line of text or
36095
36089
  * a narrow strip where a stacked pair would be two lines of almost nothing.
36096
36090
  *
36097
- * A property rather than a `helix-flex` around it, because the unit has to
36098
- * stay on the value's baseline whichever way the pair goes, and only this
36099
- * element knows which of its children the unit belongs to.
36091
+ * A property rather than a `Flex` around it, because the unit has to stay on
36092
+ * the value's baseline whichever way the pair goes, and only this element
36093
+ * knows which of its children the unit belongs to.
36100
36094
  *
36101
36095
  * **Optional rather than defaulted to `column`, which is not a style
36102
36096
  * preference.** A reflecting property with a default writes its attribute onto
@@ -36170,7 +36164,7 @@ export type CustomElements = {
36170
36164
  * Writing always applies, so `<helix-tabs active="one">` starts on that
36171
36165
  * tab, and `default-active` is how markup says where to start without
36172
36166
  * naming the current one.
36173
- * - `default-active`/`defaultActive`: Initial item for uncontrolled use.
36167
+ * - `default-active`/`defaultActive`: Which item the markup declared current.
36174
36168
  *
36175
36169
  * Ignored once `active` is written.
36176
36170
  * - `label`: Accessible name for the sequence.
@@ -36231,7 +36225,7 @@ export type CustomElements = {
36231
36225
  *
36232
36226
  * Areas where markup can be added to the component.
36233
36227
  *
36234
- * - `(default)`: The steps, which are `helix-step` elements.
36228
+ * - `(default)`: The steps.
36235
36229
  *
36236
36230
  * ## Methods
36237
36231
  *
@@ -36308,7 +36302,7 @@ export type CustomElements = {
36308
36302
  * Areas where markup can be added to the component.
36309
36303
  *
36310
36304
  * - `(default)`: The step's name.
36311
- * - `content`: What the stage holds. Always rendered here, a tier with no stylesheet having nothing to fold it with; the styled tier opens it on the current step down a column, and a row has no space under a step to open it into.
36305
+ * - `content`: What the stage holds. Always rendered here, a tier with no stylesheet having nothing to fold it with, so whether it is folded away is the sheet's answer and not this tier's.
36312
36306
  * - `description`: A line under the name, for what the stage is for.
36313
36307
  * - `marker`: Replaces the number, or the check a complete step shows.
36314
36308
  *
@@ -36325,7 +36319,7 @@ export type CustomElements = {
36325
36319
  * - `body`: The name and its description.
36326
36320
  * - `content`: What the stage holds, while it is open.
36327
36321
  * - `description`: The line under it.
36328
- * - `label`: The step's name, which is a `helix-button`.
36322
+ * - `label`: The step's name, which is a control.
36329
36323
  * - `label-button`: The inner control.
36330
36324
  * - `lead`: The half line arriving from the step before.
36331
36325
  * - `mark`: The glyph inside the marker: a tick, a dot, or an empty ring.
@@ -36370,7 +36364,7 @@ export type CustomElements = {
36370
36364
  * Not reflected: the attribute is the consumer's input and stays as they
36371
36365
  * wrote it, and `:state(checked)` carries the resolved state for
36372
36366
  * stylesheets.
36373
- * - `default-checked`/`defaultChecked`: Initial checked state for uncontrolled use, where nothing declared one.
36367
+ * - `default-checked`/`defaultChecked`: Whether the markup declared it checked, which is where a reset returns to.
36374
36368
  * - `feedback`: What is wrong, in the reader's words rather than the browser's.
36375
36369
  * - `hint`: Help under the control, shown while there is nothing wrong.
36376
36370
  * - `label`: The accessible name, and the fallback for the `label` slot.
@@ -36596,15 +36590,15 @@ export type CustomElements = {
36596
36590
  *
36597
36591
  * - `align`: Which edge the values line up against.
36598
36592
  *
36599
- * `end` is what a column of numbers wants, so digits of the same magnitude sit
36600
- * above each other. Left unset the cell inherits the table's own alignment,
36601
- * which is `start` for text in either writing direction. `helix-data-table`
36602
- * aligns the cells it draws. A `helix-table`'s cells are markup the consumer
36603
- * wrote, so the table writes nothing onto them: it publishes the edge to each
36604
- * cell under this column as `--table-cell-align`, which `@fusion.dev/helix`
36605
- * reads. The heading is this element's own, and `@fusion.dev/helix` sets it to
36606
- * the same edge in either table. `end` is the inline end, so in a
36607
- * right-to-left table it is the left.
36593
+ * `end` is what a column of numbers wants, so digits of the same magnitude
36594
+ * sit above each other. Left unset the cell inherits the table's own
36595
+ * alignment, which is `start` for text in either writing direction.
36596
+ * `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
36597
+ * consumer wrote, so the table writes nothing onto them: it publishes the
36598
+ * edge to each cell under this column as `--table-cell-align`, which
36599
+ * `@fusion.dev/helix` reads. The heading is this element's own, and
36600
+ * `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
36601
+ * inline end, so in a right-to-left table it is the left.
36608
36602
  *
36609
36603
  * **Reflected, because the heading is drawn by a stylesheet and has no other
36610
36604
  * way to learn it.** Set as a property, which is how React sets it, an
@@ -36647,8 +36641,8 @@ export type CustomElements = {
36647
36641
  * - `width`: The track this column takes, as CSS.
36648
36642
  *
36649
36643
  * A single track value, so anything valid in `grid-template-columns` works:
36650
- * `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track
36651
- * in its place in a `helix-table`'s `columns`, where that table sets one, and
36644
+ * `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track in
36645
+ * its place in a `Table`'s `columns`, where that table sets one, and
36652
36646
  * otherwise shares what is left over equally, as `minmax(max-content, 1fr)`.
36653
36647
  * Set here, it wins over that list, which is what lets a reader resize a
36654
36648
  * column in a table that set one.
@@ -36767,15 +36761,14 @@ export type CustomElements = {
36767
36761
  * - `loading-text`/`loadingText`: What is said while they are on their way.
36768
36762
  * - `columns`: The column widths as one track list, written once on the table.
36769
36763
  *
36770
- * With `helix-table-column` children, each track sizes the column in its
36771
- * place, a hidden column counted, so hiding one takes its track with it and
36772
- * the rest keep theirs. The columns decide how many tracks there are and this
36773
- * list only how wide: a track past the last column is dropped, and a column
36774
- * past the last track shares what is left. With no columns declared it is
36775
- * the whole track list. Tracks count as the grid counts them, so
36776
- * `minmax(0, 1fr)` is one and `repeat(2, 8rem)` is two, and one the grid
36777
- * would refuse leaves its column at the default rather than taking the table
36778
- * down to one column.
36764
+ * With `TableColumn` children, each track sizes the column in its place, a
36765
+ * hidden column counted, so hiding one takes its track with it and the rest
36766
+ * keep theirs. The columns decide how many tracks there are and this list
36767
+ * only how wide: a track past the last column is dropped, and a column past
36768
+ * the last track shares what is left. With no columns declared it is the
36769
+ * whole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`
36770
+ * is one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves
36771
+ * its column at the default rather than taking the table down to one column.
36779
36772
  *
36780
36773
  * **A column's own `width` wins over its track here.** The width is written
36781
36774
  * on the column it sizes, which is the more particular statement, and it is
@@ -36789,13 +36782,11 @@ export type CustomElements = {
36789
36782
  * whole answer: a table given one lays its grid out in the first paint, and a
36790
36783
  * table sized only by its columns is one track wide until it upgrades.
36791
36784
  *
36792
- * **`helix-data-table` has none of this, and should not.** Its columns are
36793
- * its schema rather than an option, so there is always a column to write a
36794
- * `width` on and a list here would be a second way to say what that says.
36795
- * This table's cells are markup, and a table written as rows of cells with no
36796
- * `helix-table-column` in it has nowhere else to be sized from. Both families
36797
- * take the same CSS hook, `--table-columns` and `--data-table-columns`, which
36798
- * wins over whichever list the element worked out.
36785
+ * **Data Table has none of this, and should not.** Its columns are its schema
36786
+ * rather than an option, so there is always a column to write a `width` on
36787
+ * and a list here would be a second way to say what that says. This table's
36788
+ * cells are markup, and a table written as rows of cells with no column
36789
+ * declared in it has nowhere else to be sized from.
36799
36790
  * - `label`: Accessible name for the table.
36800
36791
  * - `tableColumns`: The columns declared as children, in the order they are written. (property only) (readonly)
36801
36792
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -36830,7 +36821,7 @@ export type CustomElements = {
36830
36821
  * CSS variables available for styling the component.
36831
36822
  *
36832
36823
  * - `--table-columns`: Track list for the columns, which wins over the one the columns worked out. (default: `undefined`)
36833
- * - `--table-template`: 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. (default: `undefined`)
36824
+ * - `--table-template`: 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. (default: `undefined`)
36834
36825
  *
36835
36826
  * ## CSS Parts
36836
36827
  *
@@ -36986,7 +36977,7 @@ export type CustomElements = {
36986
36977
  * Writing always applies, so `<helix-tabs active="one">` starts on that
36987
36978
  * tab, and `default-active` is how markup says where to start without
36988
36979
  * naming the current one.
36989
- * - `default-active`/`defaultActive`: Initial item for uncontrolled use.
36980
+ * - `default-active`/`defaultActive`: Which item the markup declared current.
36990
36981
  *
36991
36982
  * Ignored once `active` is written.
36992
36983
  * - `label`: Accessible name for the tab list.
@@ -37614,7 +37605,7 @@ export type CustomElements = {
37614
37605
  * hydration, or diffed by a framework, it comes back holding whatever the
37615
37606
  * last reader did rather than what the author wrote. `:state(open)` carries
37616
37607
  * the resolved state for stylesheets, which is what the mirror is for.
37617
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
37608
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
37618
37609
  * - `collapse-label`/`collapseLabel`: What the control is called once everything is showing.
37619
37610
  * - `expandable`: Whether the count is a control that shows the rest.
37620
37611
  * - `expand-label`/`expandLabel`: What the collapsed count is called, since `+3` names nothing.
@@ -37643,8 +37634,8 @@ export type CustomElements = {
37643
37634
  *
37644
37635
  * Absent is one. `range` holds a start and an end, `multiple` holds any
37645
37636
  * number, and both are carried as one comma-separated value, which is what a
37646
- * form submits. `helix-time-picker` carries the longer note on the interaction and on
37647
- * why a wheel cannot do either.
37637
+ * form submits. `TimePicker` carries the longer note on the interaction and
37638
+ * on why a wheel cannot do either.
37648
37639
  * - `placeholder`: What the field says before a time is in it.
37649
37640
  * - `step`: How far apart the offered times are, in minutes.
37650
37641
  * - `time-style`/`timeStyle`: Whether the field writes the time out, or holds the value as it is.
@@ -37659,7 +37650,7 @@ export type CustomElements = {
37659
37650
  * `list` offers whole times, which is what a product with slots or opening
37660
37651
  * hours has. `wheels` splits them into an hour, a minute and a meridiem where
37661
37652
  * the locale uses one, which is the only way to reach `23:45` without
37662
- * scrolling most of a day. `helix-time-picker` carries the longer note on the trade.
37653
+ * scrolling most of a day. `TimePicker` carries the longer note on the trade.
37663
37654
  *
37664
37655
  * **Optional rather than defaulted, which is not a style preference.** A
37665
37656
  * reflecting property with a default writes its attribute onto every host the
@@ -37919,7 +37910,7 @@ export type CustomElements = {
37919
37910
  *
37920
37911
  * Absent is one. `range` holds a start and an end with everything between
37921
37912
  * them shown as part of the answer, `multiple` holds any number, and both are
37922
- * carried as one comma-separated value: the same shape `helix-date-picker` uses,
37913
+ * carried as one comma-separated value: the same shape `DatePicker` uses,
37923
37914
  * because it is the same question asked of a different unit.
37924
37915
  *
37925
37916
  * **A range is two picks, and a third starts over.** That is the calendar's
@@ -38436,7 +38427,7 @@ export type CustomElements = {
38436
38427
  * **Optional, and bottom-end is the absence of it.** Reflecting *and*
38437
38428
  * defaulting is the pair that writes onto a host: every toast region anybody
38438
38429
  * rendered would gain a `placement="bottom-end"` nobody typed, which a React
38439
- * consumer's server markup does not have. The styled sheet carries the resting
38430
+ * consumer's server markup does not have. A sheet carries the resting
38440
38431
  * arrangement in its own `:host` rule and the selectors describe only the
38441
38432
  * departures, which is what `orientation` does.
38442
38433
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -38470,7 +38461,7 @@ export type CustomElements = {
38470
38461
  *
38471
38462
  * Areas where markup can be added to the component.
38472
38463
  *
38473
- * - `(default)`: The messages, as `helix-toast-item` elements.
38464
+ * - `(default)`: The messages.
38474
38465
  *
38475
38466
  * ## CSS Custom Properties
38476
38467
  *
@@ -38716,11 +38707,11 @@ export type CustomElements = {
38716
38707
  * **The attribute, read when it is asked for, and never a snapshot taken in
38717
38708
  * the constructor.** A field initializer runs there, and an element the HTML
38718
38709
  * parser created has none of its attributes yet at that moment: measured on
38719
- * this element, on `Option` and on `Radio`, `<helix-toggle value="light"
38720
- * selected>` reported `defaultSelected` as `false` both from parsed markup
38721
- * and from `createElement` followed by `setAttribute`, which is every way a
38722
- * consumer writes one. The snapshot could only ever be true for an element
38723
- * already in the document when `customElements.define` ran.
38710
+ * this element, on `Option` and on `Radio`, `<helix-headless-toggle
38711
+ * value="light" selected>` reported `defaultSelected` as `false` both from
38712
+ * parsed markup and from `createElement` followed by `setAttribute`, which is
38713
+ * every way a consumer writes one. The snapshot could only ever be true for
38714
+ * an element already in the document when `customElements.define` ran.
38724
38715
  *
38725
38716
  * Nothing overwrites it either, which is what makes reading it late correct
38726
38717
  * rather than merely later: `selected` does not reflect, for the reason
@@ -38908,7 +38899,7 @@ export type CustomElements = {
38908
38899
  * hydration, or diffed by a framework, it comes back holding whatever the
38909
38900
  * last reader did rather than what the author wrote. `:state(open)` carries
38910
38901
  * the resolved state for stylesheets, which is what the mirror is for.
38911
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
38902
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
38912
38903
  * - `content`: The text shown in the bubble.
38913
38904
  *
38914
38905
  * The common case, and the fallback for the `content` slot: slot something
@@ -39304,7 +39295,7 @@ export type CustomElements = {
39304
39295
  * hydration, or diffed by a framework, it comes back holding whatever the
39305
39296
  * last reader did rather than what the author wrote. `:state(open)` carries
39306
39297
  * the resolved state for stylesheets, which is what the mirror is for.
39307
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
39298
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
39308
39299
  * - `href`: Where this node goes, which makes its row a real link.
39309
39300
  *
39310
39301
  * Unset by default, and unreflected: a tree of choosable nodes is not a tree
@@ -39487,7 +39478,7 @@ export type CustomElements = {
39487
39478
  * Writing always applies, so `<helix-tabs active="one">` starts on that
39488
39479
  * tab, and `default-active` is how markup says where to start without
39489
39480
  * naming the current one.
39490
- * - `default-active`/`defaultActive`: Initial item for uncontrolled use.
39481
+ * - `default-active`/`defaultActive`: Which item the markup declared current.
39491
39482
  *
39492
39483
  * Ignored once `active` is written.
39493
39484
  * - `label`: Accessible name for the tree.
@@ -39898,7 +39889,7 @@ export type CustomElements = {
39898
39889
  * Writing always applies, so `<helix-tabs active="one">` starts on that
39899
39890
  * tab, and `default-active` is how markup says where to start without
39900
39891
  * naming the current one.
39901
- * - `default-active`/`defaultActive`: Initial item for uncontrolled use.
39892
+ * - `default-active`/`defaultActive`: Which item the markup declared current.
39902
39893
  *
39903
39894
  * Ignored once `active` is written.
39904
39895
  * - `label`: Accessible name for the list, which usually has no visible heading.
@@ -39935,7 +39926,7 @@ export type CustomElements = {
39935
39926
  * Areas where markup can be added to the component.
39936
39927
  *
39937
39928
  * - `(default)`: The entries.
39938
- * - `player`: The `helix-video` they play in.
39929
+ * - `player`: The player the entries take turns in.
39939
39930
  *
39940
39931
  * ## Methods
39941
39932
  *
@@ -40386,7 +40377,7 @@ export type CustomElementsSolidJs = {
40386
40377
  * hydration, or diffed by a framework, it comes back holding whatever the
40387
40378
  * last reader did rather than what the author wrote. `:state(open)` carries
40388
40379
  * the resolved state for stylesheets, which is what the mirror is for.
40389
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
40380
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
40390
40381
  * - `chevron-placement`/`chevronPlacement`: Where the open indicator sits, or whether there is one.
40391
40382
  *
40392
40383
  * `auto` resolves to `end`, which is where a reader scanning a list of
@@ -41241,13 +41232,13 @@ export type CustomElementsSolidJs = {
41241
41232
  * Unset shows all of them, which is what no limit means and is more useful
41242
41233
  * than refusing to render.
41243
41234
  *
41244
- * **Reflected, because the fold is a stylesheet rule and nothing else.** The
41245
- * styled tier hides past the limit with `:host([max="N"]) ::slotted(:nth-child(n + N+1))`,
41246
- * so the attribute *is* the mechanism: a `max` that reaches this property and
41247
- * never reaches the host matches no rule, and every avatar is drawn beside a
41248
- * count claiming some are hidden. Markup is the safe path and hides the fault;
41249
- * a script is the broken one, and React takes it for everyone, assigning a
41250
- * matching property rather than an attribute.
41235
+ * **Reflected, because the fold is a stylesheet rule and nothing else.** A
41236
+ * sheet hides past the limit one selector per value, as `FOLDS_UP_TO`
41237
+ * describes, so the attribute *is* the mechanism: a `max` that reaches this
41238
+ * property and never reaches the host matches no rule, and every avatar is
41239
+ * drawn beside a count claiming some are hidden. Markup is the safe path and
41240
+ * hides the fault; a script is the broken one, and React takes it for
41241
+ * everyone, assigning a matching property rather than an attribute.
41251
41242
  *
41252
41243
  * **Optional rather than defaulted, per the rule that a reflected property
41253
41244
  * takes no default**: `max = 0` would stamp `max="0"` onto every host that
@@ -41600,7 +41591,7 @@ export type CustomElementsSolidJs = {
41600
41591
  * **A chart-domain axis and deliberately not a library one.** It lives on this
41601
41592
  * family alone, and here it is a way of encoding data rather than a way of
41602
41593
  * expressing a theme: promoted to the registry it would put an attribute on
41603
- * eighty-eight components that means nothing on eighty-seven. `wash` because
41594
+ * every component in the library and mean something on one. `wash` because
41604
41595
  * that is what the tier below already calls it, in `--chart-bar-wash` and in
41605
41596
  * the `bar-wash-start` and `bar-wash-end` stops.
41606
41597
  * - `for`: The id of the table to read.
@@ -41779,7 +41770,7 @@ export type CustomElementsSolidJs = {
41779
41770
  * - `--bar-chart-line-width`: Thickness of a `lines` series, over `--chart-stroke`. (default: `undefined`)
41780
41771
  * - `--chart-stroke`: Thickness of a `lines` series, one name across this family, Line Chart and Area Chart's top edge, since the three read one shared rule. `--bar-chart-line-width` overrides it here. (default: `undefined`)
41781
41772
  * - `--bar-chart-axis`: 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. (default: `undefined`)
41782
- * - `--bar-chart-secondary`: 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. (default: `undefined`)
41773
+ * - `--bar-chart-secondary`: 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. (default: `undefined`)
41783
41774
  * - `--chart-bar-wash`: 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. (default: `undefined`)
41784
41775
  *
41785
41776
  * ## CSS Parts
@@ -41913,12 +41904,12 @@ export type CustomElementsSolidJs = {
41913
41904
  * - `current`: Whether this item is the page the reader is on.
41914
41905
  * - `href`: Where the crumb goes, and nothing where it is the current page.
41915
41906
  *
41916
- * **Optional and reflected, because a stylesheet does select on it.**
41917
- * `breadcrumb.css` writes `:host(:not([href])) [part="link"]` to take the
41918
- * block padding off a crumb that is not a link, so the attribute is what
41919
- * decides how tall a crumb is. Unreflected, an `href` set from script reached
41920
- * the property, rendered the anchor, and left the host looking unlinked: the
41921
- * crumb drew at 20px where a markup twin drew at 28.
41907
+ * **Optional and reflected, because a stylesheet does select on it.** A sheet
41908
+ * writes `:host(:not([href])) [part="link"]` to take the block padding off a
41909
+ * crumb that is not a link, so the attribute is what decides how tall a crumb
41910
+ * is. Unreflected, an `href` set from script reached the property, rendered
41911
+ * the anchor, and left the host looking unlinked: the crumb drew at 20px
41912
+ * where a markup twin drew at 28.
41922
41913
  *
41923
41914
  * Optional rather than defaulted, which is the general rule that a reflected
41924
41915
  * property takes no default: an `href` written onto every host would be a link
@@ -42206,7 +42197,7 @@ export type CustomElementsSolidJs = {
42206
42197
  * the same way `label` becomes `aria-label` in there.
42207
42198
  *
42208
42199
  * ```html
42209
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
42200
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
42210
42201
  * ```
42211
42202
  *
42212
42203
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -42706,12 +42697,11 @@ export type CustomElementsSolidJs = {
42706
42697
  * - `autoplay`: Whether the carousel advances on its own.
42707
42698
  * - `index`: The slide in view, counted from zero.
42708
42699
  *
42709
- * Reading gives the real slide, in either mode. Writing sets it, the way a
42710
- * script assigning to a native control does. Which mode the carousel is in is
42711
- * read once, at the first update, from whether anything had declared an
42712
- * `index` by then: declared, and the consumer owns it and the carousel only
42713
- * announces where it would have gone; not declared, and the carousel owns it
42714
- * and `default-index` says where it starts.
42700
+ * Reading gives the real slide. Writing always applies, the way a script
42701
+ * assigning to a native control does, and is a seed and a correction rather
42702
+ * than a claim of ownership: a consumer who wants the decision refuses the
42703
+ * `helix-select`. `default-index` is where the carousel starts until
42704
+ * something moves it.
42715
42705
  *
42716
42706
  * The same contract the four mixins carry, written out here rather than
42717
42707
  * extracted, because a slide is addressed by position and every one of those
@@ -42770,13 +42760,13 @@ export type CustomElementsSolidJs = {
42770
42760
  * **The number is published to the styles rather than enumerated by them**,
42771
42761
  * as `--carousel-per-view` on the track, which is what keeps a width and a
42772
42762
  * count from disagreeing. A sheet can only name a value it wrote a rule for,
42773
- * so the styled tier enumerated `per-view="2"` through `5` and called five a
42774
- * judgment; above it the pane fell back to one across while this file went on
42775
- * counting positions. Measured in Chromium over eight slides, six across gave
42776
- * three dots, a pane taking the whole track and five slides reachable only by
42777
- * dragging. Written from here there is no ceiling to exceed, and a consumer's
42778
- * own sheet reads the same declaration the styled one does. `runEnd` publishes
42779
- * its correction the same way and for the same reason.
42763
+ * so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
42764
+ * above it the pane falls back to one across while this file goes on counting
42765
+ * positions. Measured in Chromium over eight slides against such a sheet, six
42766
+ * across gave three dots, a pane taking the whole track and five slides
42767
+ * reachable only by dragging. Published from here there is no ceiling to
42768
+ * exceed, and every sheet reads the same declaration. `runEnd` publishes its
42769
+ * correction the same way and for the same reason.
42780
42770
  *
42781
42771
  * **On the track and not on the host.** A custom property on the host is a
42782
42772
  * reflected attribute by another name: it would arrive on upgrade, and a
@@ -42801,8 +42791,8 @@ export type CustomElementsSolidJs = {
42801
42791
  * `auto` track is handed nothing. A count stays for the design that calls for
42802
42792
  * exactly three.
42803
42793
  *
42804
- * The styled sheet says how it divides, and the headless `auto` example
42805
- * carries the same three lines for a consumer writing their own.
42794
+ * A sheet says how it divides, and the `auto` example here carries the same
42795
+ * three lines for a consumer writing their own.
42806
42796
  *
42807
42797
  * **A value rather than the resting behavior**, which is what the
42808
42798
  * responsiveness policy asks of every axis that a box decides: a splitter
@@ -43184,13 +43174,13 @@ export type CustomElementsSolidJs = {
43184
43174
  *
43185
43175
  * **Not reflected, and the default is why.** A reflected property that
43186
43176
  * defaults to true writes its attribute on upgrade whether or not the
43187
- * consumer wrote one, so the server serves `<helix-chat label="x">` and the
43188
- * client turns it into `<helix-chat label="x" pinned>`: a hydration mismatch a
43189
- * React consumer reports and does not patch up. Nothing needs the attribute
43190
- * either, because the one thing that changes with the pin is the way back, and
43191
- * that is a part inside the shadow tree where a stylesheet can already reach
43192
- * it. Measured rather than assumed: `label, pinned` after upgrade against
43193
- * `label` from the server.
43177
+ * consumer wrote one, so the server serves `<helix-headless-chat label="x">`
43178
+ * and the client turns it into `<helix-headless-chat label="x" pinned>`: a
43179
+ * hydration mismatch a React consumer reports and does not patch up. Nothing
43180
+ * needs the attribute either, because the one thing that changes with the pin
43181
+ * is the way back, and that is a part inside the shadow tree where a
43182
+ * stylesheet can already reach it. Measured rather than assumed: `label,
43183
+ * pinned` after upgrade against `label` from the server.
43194
43184
  * - `threshold`: How near the bottom still counts as being at it, in pixels.
43195
43185
  *
43196
43186
  * A hook rather than a constant, because the right number depends on how tall
@@ -43240,7 +43230,7 @@ export type CustomElementsSolidJs = {
43240
43230
  *
43241
43231
  * Areas where markup can be added to the component.
43242
43232
  *
43243
- * - `(default)`: The turns, as `helix-chat-message` children.
43233
+ * - `(default)`: The turns.
43244
43234
  * - `composer`: Below the transcript, where the reader writes.
43245
43235
  * - `header`: Above the transcript.
43246
43236
  * - `resume`: The way back to the bottom.
@@ -43495,7 +43485,7 @@ export type CustomElementsSolidJs = {
43495
43485
  * Not reflected: the attribute is the consumer's input and stays as they
43496
43486
  * wrote it, and `:state(checked)` carries the resolved state for
43497
43487
  * stylesheets.
43498
- * - `default-checked`/`defaultChecked`: Initial checked state for uncontrolled use, where nothing declared one.
43488
+ * - `default-checked`/`defaultChecked`: Whether the markup declared it checked, which is where a reset returns to.
43499
43489
  * - `feedback`: What is wrong, in the reader's words rather than the browser's.
43500
43490
  * - `hint`: Help under the control, shown while there is nothing wrong.
43501
43491
  * - `label`: The accessible name, and the fallback for the `label` slot.
@@ -43703,11 +43693,11 @@ export type CustomElementsSolidJs = {
43703
43693
  * round. The platform already writes booleans like this for the same reason,
43704
43694
  * `novalidate` and `nomodule` and `noreferrer` among them.
43705
43695
  *
43706
- * **Reflected, because the gutter is a stylesheet rule.** `code-block.css`
43707
- * reserves the copy button's width with `:host(:not([no-copy]))`, so the
43708
- * attribute is what decides whether the block pays for a control. Unreflected,
43709
- * setting it from script takes the button away (`render` reads the property)
43710
- * and leaves the 40px it stood in reserved.
43696
+ * **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
43697
+ * the copy button's width with `:host(:not([no-copy]))`, so the attribute is
43698
+ * what decides whether the block pays for a control. Unreflected, setting it
43699
+ * from script takes the button away (`render` reads the property) and leaves
43700
+ * the 40px it stood in reserved.
43711
43701
  *
43712
43702
  * A false boolean reflects as the attribute's absence, so this costs no
43713
43703
  * `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -43896,7 +43886,7 @@ export type CustomElementsSolidJs = {
43896
43886
  * hydration, or diffed by a framework, it comes back holding whatever the
43897
43887
  * last reader did rather than what the author wrote. `:state(open)` carries
43898
43888
  * the resolved state for stylesheets, which is what the mirror is for.
43899
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
43889
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
43900
43890
  * - `default-value`/`defaultValue`: The value the markup declared, which is where a reset returns to.
43901
43891
  * - `value`: What the control holds now, and what its form submits.
43902
43892
  *
@@ -44241,10 +44231,10 @@ export type CustomElementsSolidJs = {
44241
44231
  *
44242
44232
  * **A color is exactly as requirable as a date**, which is the comparison
44243
44233
  * that settles it: this element extends `HelixFormElement`, carries `name`
44244
- * and reports its value, so a consumer writing
44245
- * `<helix-color-picker name="brand" required>` inside a form has every reason
44246
- * to expect the form to refuse an empty one. Its two siblings in the same
44247
- * composition position, Date Picker and Time Picker, both check it.
44234
+ * and reports its value, so a consumer writing `<helix-headless-color-picker
44235
+ * name="brand" required>` inside a form has every reason to expect the form
44236
+ * to refuse an empty one. Its two siblings in the same composition position,
44237
+ * Date Picker and Time Picker, both check it.
44248
44238
  *
44249
44239
  * Written out rather than taken from `MixinField`, for the reason those two
44250
44240
  * record: the mixin brings a label, a hint and a feedback region, and this is
@@ -44460,7 +44450,7 @@ export type CustomElementsSolidJs = {
44460
44450
  * hydration, or diffed by a framework, it comes back holding whatever the
44461
44451
  * last reader did rather than what the author wrote. `:state(open)` carries
44462
44452
  * the resolved state for stylesheets, which is what the mirror is for.
44463
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
44453
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
44464
44454
  * - `collapse-label`/`collapseLabel`: What the control is called once everything is showing.
44465
44455
  * - `expandable`: Whether the count is a control that shows the rest.
44466
44456
  * - `expand-label`/`expandLabel`: What the collapsed count is called, since `+3` names nothing.
@@ -44592,7 +44582,7 @@ export type CustomElementsSolidJs = {
44592
44582
  *
44593
44583
  * Areas where markup can be added to the component.
44594
44584
  *
44595
- * - `(default)`: The options, which are `helix-option` elements.
44585
+ * - `(default)`: The options.
44596
44586
  * - `end`: After it, for a unit or a clear button.
44597
44587
  * - `indicator`: Replaces the caret saying the field opens.
44598
44588
  * - `start`: Before the text, for an icon.
@@ -44739,7 +44729,7 @@ export type CustomElementsSolidJs = {
44739
44729
  * hydration, or diffed by a framework, it comes back holding whatever the
44740
44730
  * last reader did rather than what the author wrote. `:state(open)` carries
44741
44731
  * the resolved state for stylesheets, which is what the mirror is for.
44742
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
44732
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
44743
44733
  * - `empty-text`/`emptyText`: Words shown where the filter has matched nothing.
44744
44734
  * - `hotkey`: The key that opens it, as `mod+k` or `shift+p` or plain `k`.
44745
44735
  *
@@ -44782,7 +44772,7 @@ export type CustomElementsSolidJs = {
44782
44772
  *
44783
44773
  * Areas where markup can be added to the component.
44784
44774
  *
44785
- * - `(default)`: The commands, which are `helix-option` elements and their groups.
44775
+ * - `(default)`: The commands, and any groups of them.
44786
44776
  * - `footer`: Under the list, for the keys a reader can press.
44787
44777
  *
44788
44778
  * ## Methods
@@ -44894,7 +44884,7 @@ export type CustomElementsSolidJs = {
44894
44884
  * the same way `label` becomes `aria-label` in there.
44895
44885
  *
44896
44886
  * ```html
44897
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
44887
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
44898
44888
  * ```
44899
44889
  *
44900
44890
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -45203,9 +45193,9 @@ export type CustomElementsSolidJs = {
45203
45193
  *
45204
45194
  * **It announces nothing, and that is not an omission.** Nothing in this
45205
45195
  * element ever asks for a different page size: a size selector is
45206
- * `helix-pagination-size`, which a consumer puts in the `footer` slot and
45207
- * answers themselves. Routing this through `requestChange` would announce an
45208
- * event the element never has cause to fire.
45196
+ * `PaginationSize`, which a consumer puts in the `footer` slot and answers
45197
+ * themselves. Routing this through `requestChange` would announce an event
45198
+ * the element never has cause to fire.
45209
45199
  * - `total`: How many rows the whole result has, where this element cannot count them.
45210
45200
  *
45211
45201
  * Only read in `server` mode, where `rows` is one page and its length says
@@ -45285,7 +45275,7 @@ export type CustomElementsSolidJs = {
45285
45275
  *
45286
45276
  * Areas where markup can be added to the component.
45287
45277
  *
45288
- * - `(default)`: The columns, declared as `helix-table-column` children.
45278
+ * - `(default)`: The columns, declared rather than drawn.
45289
45279
  * - `footer`: Below the grid, replacing the pagination this would otherwise draw.
45290
45280
  * - `toolbar`: Above the grid, for a search field or actions.
45291
45281
  *
@@ -45330,8 +45320,8 @@ export type CustomElementsSolidJs = {
45330
45320
  * - `--data-table-padding-inline`: Space either side of a cell's content. (default: `undefined`)
45331
45321
  * - `--data-table-rule-color`: Color of the hairline between rows. A color and not a border: it lands in the color slot of a shorthand, so a whole border written into it produces invalid CSS and drops the rule. Drawn on the cells rather than the row, which is `display: contents` and measures `0px`. (default: `undefined`)
45332
45322
  * - `--data-table-text`: Type size, headings and cells alike. (default: `undefined`)
45333
- * - `--data-table-cell-align`: 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. (default: `undefined`)
45334
- * - `--data-table-template`: 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. (default: `undefined`)
45323
+ * - `--data-table-cell-align`: 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. (default: `undefined`)
45324
+ * - `--data-table-template`: 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. (default: `undefined`)
45335
45325
  *
45336
45326
  * ## CSS Parts
45337
45327
  *
@@ -45429,7 +45419,7 @@ export type CustomElementsSolidJs = {
45429
45419
  * hydration, or diffed by a framework, it comes back holding whatever the
45430
45420
  * last reader did rather than what the author wrote. `:state(open)` carries
45431
45421
  * the resolved state for stylesheets, which is what the mirror is for.
45432
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
45422
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
45433
45423
  * - `collapse-label`/`collapseLabel`: What the control is called once everything is showing.
45434
45424
  * - `expandable`: Whether the count is a control that shows the rest.
45435
45425
  * - `expand-label`/`expandLabel`: What the collapsed count is called, since `+3` names nothing.
@@ -46166,7 +46156,7 @@ export type CustomElementsSolidJs = {
46166
46156
  * hydration, or diffed by a framework, it comes back holding whatever the
46167
46157
  * last reader did rather than what the author wrote. `:state(open)` carries
46168
46158
  * the resolved state for stylesheets, which is what the mirror is for.
46169
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
46159
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
46170
46160
  * - `closedby`/`closedBy`: Which close requests the browser answers on its own.
46171
46161
  *
46172
46162
  * `<dialog closedby>`, forwarded, and safe to forward because every path it
@@ -46470,7 +46460,7 @@ export type CustomElementsSolidJs = {
46470
46460
  * `--donut-chart-stroke`, which is a number a rule can do sums with where the
46471
46461
  * word is not. Reflected, it wrote a value onto every host a script had set
46472
46462
  * it on for nothing to read. `sweep` beside it is the converse and reflects,
46473
- * because three rules select on it.
46463
+ * because the styled sheet selects on it.
46474
46464
  * - `sweep`: How much of the circle the whole occupies.
46475
46465
  *
46476
46466
  * Absent is the full turn. `half` is a semi-donut: the same shares spread
@@ -46655,7 +46645,7 @@ export type CustomElementsSolidJs = {
46655
46645
  * hydration, or diffed by a framework, it comes back holding whatever the
46656
46646
  * last reader did rather than what the author wrote. `:state(open)` carries
46657
46647
  * the resolved state for stylesheets, which is what the mirror is for.
46658
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
46648
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
46659
46649
  * - `closedby`/`closedBy`: Which close requests the browser answers on its own.
46660
46650
  *
46661
46651
  * `<dialog closedby>`, forwarded, and safe to forward because every path it
@@ -46680,10 +46670,10 @@ export type CustomElementsSolidJs = {
46680
46670
  * not, rather than shown or hidden by CSS.
46681
46671
  * - `placement`: Which edge the drawer comes from.
46682
46672
  *
46683
- * Unset is `end`, which the styled tier reads as `:host(:not([placement]))`
46684
- * beside `:host([placement="end"])` rather than as a value written here: a
46673
+ * Unset is `end`, and it stays unset rather than being written down: a
46685
46674
  * default assigned to the property would reflect onto every host and put a
46686
- * `placement="end"` into markup no consumer wrote.
46675
+ * `placement="end"` into markup no consumer wrote. So what this tier
46676
+ * guarantees is the absence, and a sheet selects on it.
46687
46677
  * - `returnValue`: What the dialog closed with, the way `<dialog>` reports it.
46688
46678
  *
46689
46679
  * **The whole point of a `<dialog>` returning a value is lost behind a shadow
@@ -47503,7 +47493,13 @@ export type CustomElementsSolidJs = {
47503
47493
  * - `fields`: The fields declared inside this, in the order they were written.
47504
47494
  *
47505
47495
  * What a render may know of them: none on a server, whose shim has no tree
47506
- * and threw here, and none while hydrating what one sent. (property only) (readonly)
47496
+ * and threw here, and none while hydrating what one sent.
47497
+ *
47498
+ * By identity rather than by tag. A list of names can only hold the tags this
47499
+ * package knows about, so it misses any third one, which is what subclassing
47500
+ * a headless element produces, and it is also how a headless package learns a
47501
+ * styled tag. `instanceof` answers for every one of them and proves the type
47502
+ * the signature claims. (property only) (readonly)
47507
47503
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
47508
47504
  *
47509
47505
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -47729,7 +47725,7 @@ export type CustomElementsSolidJs = {
47729
47725
  * hydration, or diffed by a framework, it comes back holding whatever the
47730
47726
  * last reader did rather than what the author wrote. `:state(open)` carries
47731
47727
  * the resolved state for stylesheets, which is what the mirror is for.
47732
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
47728
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
47733
47729
  * - `collapse-label`/`collapseLabel`: What the control is called once everything is showing.
47734
47730
  * - `expandable`: Whether the count is a control that shows the rest.
47735
47731
  * - `expand-label`/`expandLabel`: What the collapsed count is called, since `+3` names nothing.
@@ -48038,11 +48034,12 @@ export type CustomElementsSolidJs = {
48038
48034
  * would give.
48039
48035
  *
48040
48036
  * **The element's own text is read as a fallback, and only in a browser.**
48041
- * `<helix-format-date elapsed>2026-08-27T01:00:00Z</helix-format-date>` is the
48042
- * spelling that reads best in markup, and it cannot be the only one: measured
48043
- * against Lit's server shim, `textContent`, `children`, `firstChild` and
48044
- * `querySelector` are all `undefined` there, so a server has no way to see it.
48045
- * An element rendered on a server needs the attribute; one rendered in a
48037
+ * `<helix-headless-format-date
48038
+ * elapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling
48039
+ * that reads best in markup, and it cannot be the only one: measured against
48040
+ * Lit's server shim, `textContent`, `children`, `firstChild` and
48041
+ * `querySelector` are all `undefined` there, so a server has no way to see
48042
+ * it. An element rendered on a server needs the attribute; one rendered in a
48046
48043
  * browser may use either.
48047
48044
  * - `day`: How the day of the month is written, where a date is shown.
48048
48045
  * - `elapsed`: Show how long ago it was, compactly, instead of the date.
@@ -48208,12 +48205,12 @@ export type CustomElementsSolidJs = {
48208
48205
  * consumer has to keep by hand, and the one number a summary is told to trust
48209
48206
  * is the one it gets wrong.
48210
48207
  *
48211
- * The strip measures itself, so `--heatmap-cell-inline-size` and `--heatmap-gap` are
48212
- * enough on their own and these two are the estimate used until the first
48213
- * measurement lands. Writing the attribute pins the value and stops the
48214
- * measurement being consulted, which is what a container query or a transition
48215
- * on the cell size wants, where what is drawn this frame is not what the
48216
- * arithmetic should plan around.
48208
+ * The strip measures itself, so sizing the cells in a sheet is enough on its
48209
+ * own and these two are the estimate used until the first measurement lands.
48210
+ * Writing the attribute pins the value and stops the measurement being
48211
+ * consulted, which is what a container query or a transition on the cell size
48212
+ * wants, where what is drawn this frame is not what the arithmetic should
48213
+ * plan around.
48217
48214
  *
48218
48215
  * Zero turns the dropping off altogether, which is right for a strip in a
48219
48216
  * container that cannot get narrow.
@@ -48470,7 +48467,7 @@ export type CustomElementsSolidJs = {
48470
48467
  * the same way `label` becomes `aria-label` in there.
48471
48468
  *
48472
48469
  * ```html
48473
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
48470
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
48474
48471
  * ```
48475
48472
  *
48476
48473
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -48784,10 +48781,10 @@ export type CustomElementsSolidJs = {
48784
48781
  * **Mirrored to `data-status`, and not reflected as `status`.** It is element
48785
48782
  * state, so reflecting it puts the element's own bookkeeping into the markup
48786
48783
  * a consumer rendered: React reads the attribute appearing at upgrade as a
48787
- * hydration mismatch, and a serialized `<helix-image status="loaded">` pasted
48788
- * back declares that a picture has arrived which this element has never
48789
- * fetched. The `data-` name is the library's answer to both, being a name a
48790
- * re-parse cannot mistake for a declaration, and it is what `data-closed` on
48784
+ * hydration mismatch, and a host pasted back carrying `status="loaded"`
48785
+ * declares that a picture has arrived which this element has never fetched.
48786
+ * The `data-` name is the library's answer to both, being a name a re-parse
48787
+ * cannot mistake for a declaration, and it is what `data-closed` on
48791
48788
  * `Toast.Item` already does. A picture arrives after somebody fetched it,
48792
48789
  * which puts this on the safe side of hydration: a fact that can be true on
48793
48790
  * the *first* update mirrors to a custom state instead, which is what
@@ -48922,10 +48919,10 @@ export type CustomElementsSolidJs = {
48922
48919
  * **The attribute is `readonly`, which is the platform's spelling.** A
48923
48920
  * camelCase property needs an explicit `attribute`, and dash-casing a word
48924
48921
  * HTML writes as one costs what an attribute always costs here: nothing
48925
- * warns. `<helix-input readonly>` is what anybody who has written HTML types;
48926
- * against `read-only` it parses to no property at all, and the field stays
48927
- * editable with no error anywhere. Measured on the dash-cased form, `readOnly`
48928
- * came back `false`.
48922
+ * warns. `<helix-headless-input readonly>` is what anybody who has written
48923
+ * HTML types; against `read-only` it parses to no property at all, and the
48924
+ * field stays editable with no error anywhere. Measured on the dash-cased
48925
+ * form, `readOnly` came back `false`.
48929
48926
  * - `reveal`: Whether a password field offers a toggle that shows what was typed.
48930
48927
  *
48931
48928
  * Ignored on every other type. A reveal on an email field would be a button
@@ -48939,9 +48936,9 @@ export type CustomElementsSolidJs = {
48939
48936
  *
48940
48937
  * **Not reflected.** Reflection exists so a selector can reach a value, and
48941
48938
  * no stylesheet in this repository selects on `type`. Reflecting it writes
48942
- * `type="text"` onto every `<helix-input>` ever rendered, an attribute no
48943
- * consumer's markup has, which is the fault the area rules write up under
48944
- * `Button`'s `href`, `target` and `rel`.
48939
+ * `type="text"` onto every `<helix-headless-input>` ever rendered, an
48940
+ * attribute no consumer's markup has, which is the fault the area rules write
48941
+ * up under `Button`'s `href`, `target` and `rel`.
48945
48942
  *
48946
48943
  * Nothing reads it from the attribute either. The real `<input>` inside takes
48947
48944
  * it as a property binding, which is what makes the keyboard and the
@@ -49495,8 +49492,7 @@ export type CustomElementsSolidJs = {
49495
49492
  * over something busy. `triangle` points along the axis and reads as "and
49496
49493
  * onward" rather than as a second claim about the data.
49497
49494
  *
49498
- * The shapes come from
49499
- * `helix/styled/src/shared/chart/terminus.css`, the same sheet `Sparkline` takes, so
49495
+ * The shapes come from one shared sheet, the same one `Sparkline` takes, so
49500
49496
  * the set is identical wherever one appears. **Which is why every value is
49501
49497
  * named here.** `Sparkline` shipped `square` implemented, drawn, asserted and
49502
49498
  * undocumented until the cohort before this one; this family reads the same
@@ -49773,10 +49769,10 @@ export type CustomElementsSolidJs = {
49773
49769
  * - `label`: Accessible name for the set.
49774
49770
  * - `type`: Which markers an ordered list draws, in `<ol type>`'s own five values.
49775
49771
  *
49776
- * Reflected, because this is one of the things a stylesheet selects on and
49777
- * the styled tier maps each to a `list-style-type`. The platform's spellings
49778
- * rather than the CSS ones, so `<helix-list kind="ordered" type="i">` is what
49779
- * a consumer would have written on an `<ol>`.
49772
+ * Reflected, because this is one of the things a stylesheet selects on, each
49773
+ * value mapping to a `list-style-type`. The platform's spellings rather than
49774
+ * the CSS ones, so `<helix-headless-list kind="ordered" type="i">` is what a
49775
+ * consumer would have written on an `<ol>`.
49780
49776
  *
49781
49777
  * **`start` and `reversed` are both absent and neither can be done here.**
49782
49778
  * This renders no `<ol>`: the rows are slotted and numbered by the CSS
@@ -50190,7 +50186,7 @@ export type CustomElementsSolidJs = {
50190
50186
  * hydration, or diffed by a framework, it comes back holding whatever the
50191
50187
  * last reader did rather than what the author wrote. `:state(open)` carries
50192
50188
  * the resolved state for stylesheets, which is what the mirror is for.
50193
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
50189
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
50194
50190
  * - `full-below`/`fullBelow`: The width, in pixels, under which a card becomes a band. Zero never does.
50195
50191
  *
50196
50192
  * A card is a panel hung off one word, and there is no room to hang anything
@@ -50512,7 +50508,7 @@ export type CustomElementsSolidJs = {
50512
50508
  * hydration, or diffed by a framework, it comes back holding whatever the
50513
50509
  * last reader did rather than what the author wrote. `:state(open)` carries
50514
50510
  * the resolved state for stylesheets, which is what the mirror is for.
50515
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
50511
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
50516
50512
  * - `back-label`/`backLabel`: What the row returning from a submenu reads.
50517
50513
  * - `label`: Accessible name for the surface.
50518
50514
  * - `offset`: Space between the trigger and the surface, in pixels.
@@ -50888,7 +50884,7 @@ export type CustomElementsSolidJs = {
50888
50884
  * hydration, or diffed by a framework, it comes back holding whatever the
50889
50885
  * last reader did rather than what the author wrote. `:state(open)` carries
50890
50886
  * the resolved state for stylesheets, which is what the mirror is for.
50891
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
50887
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
50892
50888
  * - `collapsible`: Whether the group can be collapsed to its first row.
50893
50889
  *
50894
50890
  * Off by default, because a group is a heading before it is a control: a feed
@@ -51050,10 +51046,10 @@ export type CustomElementsSolidJs = {
51050
51046
  *
51051
51047
  * **Not reflected.** Unread is a visual state, which is why the four mixins
51052
51048
  * mirror theirs, but the mirror may not be the property's own attribute:
51053
- * `<helix-notification default-read>` comes back from a server without `read`
51054
- * and would gain it on the first update, which React reports as a hydration
51055
- * mismatch, and which a copy of the serialized element re-parses as a
51056
- * declaration. `:state(read)` is what the stylesheet reads.
51049
+ * `<helix-headless-notification default-read>` comes back from a server
51050
+ * without `read` and would gain it on the first update, which React reports
51051
+ * as a hydration mismatch, and which a copy of the serialized element
51052
+ * re-parses as a declaration. `:state(read)` is what the stylesheet reads.
51057
51053
  * `hydration.dom.spec.ts` holds it.
51058
51054
  * - `default-read`/`defaultRead`: State to open with, where nothing declared one.
51059
51055
  * - `locale`: Locale for the timestamp.
@@ -51252,7 +51248,7 @@ export type CustomElementsSolidJs = {
51252
51248
  *
51253
51249
  * Areas where markup can be added to the component.
51254
51250
  *
51255
- * - `(default)`: The notifications, as `helix-notification` children.
51251
+ * - `(default)`: The notifications.
51256
51252
  * - `footer`: Below the list, for a link to everything.
51257
51253
  * - `header`: Above the list, for a title and the mark-all control.
51258
51254
  *
@@ -51747,11 +51743,10 @@ export type CustomElementsSolidJs = {
51747
51743
  * - `alternate`: A second destination for this row, taken with the modifier held.
51748
51744
  *
51749
51745
  * **An attribute rather than a second row, which is the whole point.** A
51750
- * palette of eighty-eight components that offered each of them a reference
51751
- * page and a sandbox as separate entries would be a palette of a hundred and
51752
- * seventy-six, and one earns its keep by getting a reader to one thing in
51753
- * three keystrokes. The row already carries the first destination, so the
51754
- * second belongs beside it.
51746
+ * palette that offered every component a reference page and a sandbox as
51747
+ * separate entries would be twice as long, and one earns its keep by getting
51748
+ * a reader to one thing in three keystrokes. The row already carries the
51749
+ * first destination, so the second belongs beside it.
51755
51750
  *
51756
51751
  * Declared here and acted on by whatever owns the list, the same division
51757
51752
  * selection already uses: an option says what it is and the listbox decides
@@ -51806,7 +51801,7 @@ export type CustomElementsSolidJs = {
51806
51801
  * **The attribute, read when it is asked for, and never a snapshot taken in
51807
51802
  * the constructor.** A field initializer runs there, and an element the HTML
51808
51803
  * parser created has none of its attributes yet at that moment: measured on
51809
- * this element, on `Radio` and on `Toggle`, `<helix-option value="a"
51804
+ * this element, on `Radio` and on `Toggle`, `<helix-headless-option value="a"
51810
51805
  * selected>` reported `defaultSelected` as `false` both from parsed markup
51811
51806
  * and from `createElement` followed by `setAttribute`, which is every way a
51812
51807
  * consumer writes one. The snapshot could only ever be true for an element
@@ -52565,10 +52560,10 @@ export type CustomElementsSolidJs = {
52565
52560
  * marked letters wants `text`, which judges nothing.
52566
52561
  *
52567
52562
  * **Not reflected**: nothing selects on it, so reflecting only writes
52568
- * `type="numeric"` onto every `<helix-pin-input>` ever rendered, an attribute
52569
- * no consumer's markup had. The area rules carry the sentence "reflect only
52570
- * what CSS selects on". The real inputs take it as a binding, which is what
52571
- * makes the keyboard follow.
52563
+ * `type="numeric"` onto every `<helix-headless-pin-input>` ever rendered, an
52564
+ * attribute no consumer's markup had. The area rules carry the sentence
52565
+ * "reflect only what CSS selects on". The real inputs take it as a binding,
52566
+ * which is what makes the keyboard follow.
52572
52567
  * - `disabled`: Whether the control is non-interactive.
52573
52568
  *
52574
52569
  * Reflected, because the styled tier selects on it, and mirrored to
@@ -52749,7 +52744,7 @@ export type CustomElementsSolidJs = {
52749
52744
  * hydration, or diffed by a framework, it comes back holding whatever the
52750
52745
  * last reader did rather than what the author wrote. `:state(open)` carries
52751
52746
  * the resolved state for stylesheets, which is what the mirror is for.
52752
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
52747
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
52753
52748
  * - `label`: Accessible name for the panel.
52754
52749
  * - `offset`: Space between the trigger and the panel, in pixels.
52755
52750
  * - `placement`: Preferred side.
@@ -53367,7 +53362,7 @@ export type CustomElementsSolidJs = {
53367
53362
  * **The attribute, read when it is asked for, and never a snapshot taken in
53368
53363
  * the constructor.** A field initializer runs there, and an element the HTML
53369
53364
  * parser created has none of its attributes yet at that moment: measured on
53370
- * this element, on `Option` and on `Toggle`, `<helix-radio value="a"
53365
+ * this element, on `Option` and on `Toggle`, `<helix-headless-radio value="a"
53371
53366
  * selected>` reported `defaultSelected` as `false` both from parsed markup
53372
53367
  * and from `createElement` followed by `setAttribute`, which is every way a
53373
53368
  * consumer writes one. The snapshot could only ever be true for an element
@@ -54644,7 +54639,7 @@ export type CustomElementsSolidJs = {
54644
54639
  * hydration, or diffed by a framework, it comes back holding whatever the
54645
54640
  * last reader did rather than what the author wrote. `:state(open)` carries
54646
54641
  * the resolved state for stylesheets, which is what the mirror is for.
54647
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
54642
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
54648
54643
  * - `default-value`/`defaultValue`: The value the markup declared, which is where a reset returns to.
54649
54644
  * - `value`: What the control holds now, and what its form submits.
54650
54645
  *
@@ -55535,7 +55530,7 @@ export type CustomElementsSolidJs = {
55535
55530
  * hydration, or diffed by a framework, it comes back holding whatever the
55536
55531
  * last reader did rather than what the author wrote. `:state(open)` carries
55537
55532
  * the resolved state for stylesheets, which is what the mirror is for.
55538
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
55533
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
55539
55534
  * - `label`: Names the trigger and the set of actions it opens.
55540
55535
  * - `offset`: Space between the trigger and the actions, in pixels.
55541
55536
  * - `placement`: Which way the actions fan out. They move if that side does not fit.
@@ -55908,9 +55903,9 @@ export type CustomElementsSolidJs = {
55908
55903
  * The row directions set them side by side, for a figure in a line of text or
55909
55904
  * a narrow strip where a stacked pair would be two lines of almost nothing.
55910
55905
  *
55911
- * A property rather than a `helix-flex` around it, because the unit has to
55912
- * stay on the value's baseline whichever way the pair goes, and only this
55913
- * element knows which of its children the unit belongs to.
55906
+ * A property rather than a `Flex` around it, because the unit has to stay on
55907
+ * the value's baseline whichever way the pair goes, and only this element
55908
+ * knows which of its children the unit belongs to.
55914
55909
  *
55915
55910
  * **Optional rather than defaulted to `column`, which is not a style
55916
55911
  * preference.** A reflecting property with a default writes its attribute onto
@@ -55986,7 +55981,7 @@ export type CustomElementsSolidJs = {
55986
55981
  * Writing always applies, so `<helix-tabs active="one">` starts on that
55987
55982
  * tab, and `default-active` is how markup says where to start without
55988
55983
  * naming the current one.
55989
- * - `default-active`/`defaultActive`: Initial item for uncontrolled use.
55984
+ * - `default-active`/`defaultActive`: Which item the markup declared current.
55990
55985
  *
55991
55986
  * Ignored once `active` is written.
55992
55987
  * - `label`: Accessible name for the sequence.
@@ -56047,7 +56042,7 @@ export type CustomElementsSolidJs = {
56047
56042
  *
56048
56043
  * Areas where markup can be added to the component.
56049
56044
  *
56050
- * - `(default)`: The steps, which are `helix-step` elements.
56045
+ * - `(default)`: The steps.
56051
56046
  *
56052
56047
  * ## Methods
56053
56048
  *
@@ -56129,7 +56124,7 @@ export type CustomElementsSolidJs = {
56129
56124
  * Areas where markup can be added to the component.
56130
56125
  *
56131
56126
  * - `(default)`: The step's name.
56132
- * - `content`: What the stage holds. Always rendered here, a tier with no stylesheet having nothing to fold it with; the styled tier opens it on the current step down a column, and a row has no space under a step to open it into.
56127
+ * - `content`: What the stage holds. Always rendered here, a tier with no stylesheet having nothing to fold it with, so whether it is folded away is the sheet's answer and not this tier's.
56133
56128
  * - `description`: A line under the name, for what the stage is for.
56134
56129
  * - `marker`: Replaces the number, or the check a complete step shows.
56135
56130
  *
@@ -56146,7 +56141,7 @@ export type CustomElementsSolidJs = {
56146
56141
  * - `body`: The name and its description.
56147
56142
  * - `content`: What the stage holds, while it is open.
56148
56143
  * - `description`: The line under it.
56149
- * - `label`: The step's name, which is a `helix-button`.
56144
+ * - `label`: The step's name, which is a control.
56150
56145
  * - `label-button`: The inner control.
56151
56146
  * - `lead`: The half line arriving from the step before.
56152
56147
  * - `mark`: The glyph inside the marker: a tick, a dot, or an empty ring.
@@ -56193,7 +56188,7 @@ export type CustomElementsSolidJs = {
56193
56188
  * Not reflected: the attribute is the consumer's input and stays as they
56194
56189
  * wrote it, and `:state(checked)` carries the resolved state for
56195
56190
  * stylesheets.
56196
- * - `default-checked`/`defaultChecked`: Initial checked state for uncontrolled use, where nothing declared one.
56191
+ * - `default-checked`/`defaultChecked`: Whether the markup declared it checked, which is where a reset returns to.
56197
56192
  * - `feedback`: What is wrong, in the reader's words rather than the browser's.
56198
56193
  * - `hint`: Help under the control, shown while there is nothing wrong.
56199
56194
  * - `label`: The accessible name, and the fallback for the `label` slot.
@@ -56425,15 +56420,15 @@ export type CustomElementsSolidJs = {
56425
56420
  *
56426
56421
  * - `align`: Which edge the values line up against.
56427
56422
  *
56428
- * `end` is what a column of numbers wants, so digits of the same magnitude sit
56429
- * above each other. Left unset the cell inherits the table's own alignment,
56430
- * which is `start` for text in either writing direction. `helix-data-table`
56431
- * aligns the cells it draws. A `helix-table`'s cells are markup the consumer
56432
- * wrote, so the table writes nothing onto them: it publishes the edge to each
56433
- * cell under this column as `--table-cell-align`, which `@fusion.dev/helix`
56434
- * reads. The heading is this element's own, and `@fusion.dev/helix` sets it to
56435
- * the same edge in either table. `end` is the inline end, so in a
56436
- * right-to-left table it is the left.
56423
+ * `end` is what a column of numbers wants, so digits of the same magnitude
56424
+ * sit above each other. Left unset the cell inherits the table's own
56425
+ * alignment, which is `start` for text in either writing direction.
56426
+ * `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
56427
+ * consumer wrote, so the table writes nothing onto them: it publishes the
56428
+ * edge to each cell under this column as `--table-cell-align`, which
56429
+ * `@fusion.dev/helix` reads. The heading is this element's own, and
56430
+ * `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
56431
+ * inline end, so in a right-to-left table it is the left.
56437
56432
  *
56438
56433
  * **Reflected, because the heading is drawn by a stylesheet and has no other
56439
56434
  * way to learn it.** Set as a property, which is how React sets it, an
@@ -56476,8 +56471,8 @@ export type CustomElementsSolidJs = {
56476
56471
  * - `width`: The track this column takes, as CSS.
56477
56472
  *
56478
56473
  * A single track value, so anything valid in `grid-template-columns` works:
56479
- * `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track
56480
- * in its place in a `helix-table`'s `columns`, where that table sets one, and
56474
+ * `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track in
56475
+ * its place in a `Table`'s `columns`, where that table sets one, and
56481
56476
  * otherwise shares what is left over equally, as `minmax(max-content, 1fr)`.
56482
56477
  * Set here, it wins over that list, which is what lets a reader resize a
56483
56478
  * column in a table that set one.
@@ -56599,15 +56594,14 @@ export type CustomElementsSolidJs = {
56599
56594
  * - `loading-text`/`loadingText`: What is said while they are on their way.
56600
56595
  * - `columns`: The column widths as one track list, written once on the table.
56601
56596
  *
56602
- * With `helix-table-column` children, each track sizes the column in its
56603
- * place, a hidden column counted, so hiding one takes its track with it and
56604
- * the rest keep theirs. The columns decide how many tracks there are and this
56605
- * list only how wide: a track past the last column is dropped, and a column
56606
- * past the last track shares what is left. With no columns declared it is
56607
- * the whole track list. Tracks count as the grid counts them, so
56608
- * `minmax(0, 1fr)` is one and `repeat(2, 8rem)` is two, and one the grid
56609
- * would refuse leaves its column at the default rather than taking the table
56610
- * down to one column.
56597
+ * With `TableColumn` children, each track sizes the column in its place, a
56598
+ * hidden column counted, so hiding one takes its track with it and the rest
56599
+ * keep theirs. The columns decide how many tracks there are and this list
56600
+ * only how wide: a track past the last column is dropped, and a column past
56601
+ * the last track shares what is left. With no columns declared it is the
56602
+ * whole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`
56603
+ * is one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves
56604
+ * its column at the default rather than taking the table down to one column.
56611
56605
  *
56612
56606
  * **A column's own `width` wins over its track here.** The width is written
56613
56607
  * on the column it sizes, which is the more particular statement, and it is
@@ -56621,13 +56615,11 @@ export type CustomElementsSolidJs = {
56621
56615
  * whole answer: a table given one lays its grid out in the first paint, and a
56622
56616
  * table sized only by its columns is one track wide until it upgrades.
56623
56617
  *
56624
- * **`helix-data-table` has none of this, and should not.** Its columns are
56625
- * its schema rather than an option, so there is always a column to write a
56626
- * `width` on and a list here would be a second way to say what that says.
56627
- * This table's cells are markup, and a table written as rows of cells with no
56628
- * `helix-table-column` in it has nowhere else to be sized from. Both families
56629
- * take the same CSS hook, `--table-columns` and `--data-table-columns`, which
56630
- * wins over whichever list the element worked out.
56618
+ * **Data Table has none of this, and should not.** Its columns are its schema
56619
+ * rather than an option, so there is always a column to write a `width` on
56620
+ * and a list here would be a second way to say what that says. This table's
56621
+ * cells are markup, and a table written as rows of cells with no column
56622
+ * declared in it has nowhere else to be sized from.
56631
56623
  * - `label`: Accessible name for the table.
56632
56624
  * - `tableColumns`: The columns declared as children, in the order they are written. (property only) (readonly)
56633
56625
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -56662,7 +56654,7 @@ export type CustomElementsSolidJs = {
56662
56654
  * CSS variables available for styling the component.
56663
56655
  *
56664
56656
  * - `--table-columns`: Track list for the columns, which wins over the one the columns worked out. (default: `undefined`)
56665
- * - `--table-template`: 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. (default: `undefined`)
56657
+ * - `--table-template`: 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. (default: `undefined`)
56666
56658
  *
56667
56659
  * ## CSS Parts
56668
56660
  *
@@ -56829,7 +56821,7 @@ export type CustomElementsSolidJs = {
56829
56821
  * Writing always applies, so `<helix-tabs active="one">` starts on that
56830
56822
  * tab, and `default-active` is how markup says where to start without
56831
56823
  * naming the current one.
56832
- * - `default-active`/`defaultActive`: Initial item for uncontrolled use.
56824
+ * - `default-active`/`defaultActive`: Which item the markup declared current.
56833
56825
  *
56834
56826
  * Ignored once `active` is written.
56835
56827
  * - `label`: Accessible name for the tab list.
@@ -57468,7 +57460,7 @@ export type CustomElementsSolidJs = {
57468
57460
  * hydration, or diffed by a framework, it comes back holding whatever the
57469
57461
  * last reader did rather than what the author wrote. `:state(open)` carries
57470
57462
  * the resolved state for stylesheets, which is what the mirror is for.
57471
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
57463
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
57472
57464
  * - `collapse-label`/`collapseLabel`: What the control is called once everything is showing.
57473
57465
  * - `expandable`: Whether the count is a control that shows the rest.
57474
57466
  * - `expand-label`/`expandLabel`: What the collapsed count is called, since `+3` names nothing.
@@ -57497,8 +57489,8 @@ export type CustomElementsSolidJs = {
57497
57489
  *
57498
57490
  * Absent is one. `range` holds a start and an end, `multiple` holds any
57499
57491
  * number, and both are carried as one comma-separated value, which is what a
57500
- * form submits. `helix-time-picker` carries the longer note on the interaction and on
57501
- * why a wheel cannot do either.
57492
+ * form submits. `TimePicker` carries the longer note on the interaction and
57493
+ * on why a wheel cannot do either.
57502
57494
  * - `placeholder`: What the field says before a time is in it.
57503
57495
  * - `step`: How far apart the offered times are, in minutes.
57504
57496
  * - `time-style`/`timeStyle`: Whether the field writes the time out, or holds the value as it is.
@@ -57513,7 +57505,7 @@ export type CustomElementsSolidJs = {
57513
57505
  * `list` offers whole times, which is what a product with slots or opening
57514
57506
  * hours has. `wheels` splits them into an hour, a minute and a meridiem where
57515
57507
  * the locale uses one, which is the only way to reach `23:45` without
57516
- * scrolling most of a day. `helix-time-picker` carries the longer note on the trade.
57508
+ * scrolling most of a day. `TimePicker` carries the longer note on the trade.
57517
57509
  *
57518
57510
  * **Optional rather than defaulted, which is not a style preference.** A
57519
57511
  * reflecting property with a default writes its attribute onto every host the
@@ -57776,7 +57768,7 @@ export type CustomElementsSolidJs = {
57776
57768
  *
57777
57769
  * Absent is one. `range` holds a start and an end with everything between
57778
57770
  * them shown as part of the answer, `multiple` holds any number, and both are
57779
- * carried as one comma-separated value: the same shape `helix-date-picker` uses,
57771
+ * carried as one comma-separated value: the same shape `DatePicker` uses,
57780
57772
  * because it is the same question asked of a different unit.
57781
57773
  *
57782
57774
  * **A range is two picks, and a third starts over.** That is the calendar's
@@ -58305,7 +58297,7 @@ export type CustomElementsSolidJs = {
58305
58297
  * **Optional, and bottom-end is the absence of it.** Reflecting *and*
58306
58298
  * defaulting is the pair that writes onto a host: every toast region anybody
58307
58299
  * rendered would gain a `placement="bottom-end"` nobody typed, which a React
58308
- * consumer's server markup does not have. The styled sheet carries the resting
58300
+ * consumer's server markup does not have. A sheet carries the resting
58309
58301
  * arrangement in its own `:host` rule and the selectors describe only the
58310
58302
  * departures, which is what `orientation` does.
58311
58303
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -58339,7 +58331,7 @@ export type CustomElementsSolidJs = {
58339
58331
  *
58340
58332
  * Areas where markup can be added to the component.
58341
58333
  *
58342
- * - `(default)`: The messages, as `helix-toast-item` elements.
58334
+ * - `(default)`: The messages.
58343
58335
  *
58344
58336
  * ## CSS Custom Properties
58345
58337
  *
@@ -58593,11 +58585,11 @@ export type CustomElementsSolidJs = {
58593
58585
  * **The attribute, read when it is asked for, and never a snapshot taken in
58594
58586
  * the constructor.** A field initializer runs there, and an element the HTML
58595
58587
  * parser created has none of its attributes yet at that moment: measured on
58596
- * this element, on `Option` and on `Radio`, `<helix-toggle value="light"
58597
- * selected>` reported `defaultSelected` as `false` both from parsed markup
58598
- * and from `createElement` followed by `setAttribute`, which is every way a
58599
- * consumer writes one. The snapshot could only ever be true for an element
58600
- * already in the document when `customElements.define` ran.
58588
+ * this element, on `Option` and on `Radio`, `<helix-headless-toggle
58589
+ * value="light" selected>` reported `defaultSelected` as `false` both from
58590
+ * parsed markup and from `createElement` followed by `setAttribute`, which is
58591
+ * every way a consumer writes one. The snapshot could only ever be true for
58592
+ * an element already in the document when `customElements.define` ran.
58601
58593
  *
58602
58594
  * Nothing overwrites it either, which is what makes reading it late correct
58603
58595
  * rather than merely later: `selected` does not reflect, for the reason
@@ -58791,7 +58783,7 @@ export type CustomElementsSolidJs = {
58791
58783
  * hydration, or diffed by a framework, it comes back holding whatever the
58792
58784
  * last reader did rather than what the author wrote. `:state(open)` carries
58793
58785
  * the resolved state for stylesheets, which is what the mirror is for.
58794
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
58786
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
58795
58787
  * - `content`: The text shown in the bubble.
58796
58788
  *
58797
58789
  * The common case, and the fallback for the `content` slot: slot something
@@ -59195,7 +59187,7 @@ export type CustomElementsSolidJs = {
59195
59187
  * hydration, or diffed by a framework, it comes back holding whatever the
59196
59188
  * last reader did rather than what the author wrote. `:state(open)` carries
59197
59189
  * the resolved state for stylesheets, which is what the mirror is for.
59198
- * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
59190
+ * - `default-open`/`defaultOpen`: Whether the markup declared it open. Ignored once `open` is written.
59199
59191
  * - `href`: Where this node goes, which makes its row a real link.
59200
59192
  *
59201
59193
  * Unset by default, and unreflected: a tree of choosable nodes is not a tree
@@ -59381,7 +59373,7 @@ export type CustomElementsSolidJs = {
59381
59373
  * Writing always applies, so `<helix-tabs active="one">` starts on that
59382
59374
  * tab, and `default-active` is how markup says where to start without
59383
59375
  * naming the current one.
59384
- * - `default-active`/`defaultActive`: Initial item for uncontrolled use.
59376
+ * - `default-active`/`defaultActive`: Which item the markup declared current.
59385
59377
  *
59386
59378
  * Ignored once `active` is written.
59387
59379
  * - `label`: Accessible name for the tree.
@@ -59805,7 +59797,7 @@ export type CustomElementsSolidJs = {
59805
59797
  * Writing always applies, so `<helix-tabs active="one">` starts on that
59806
59798
  * tab, and `default-active` is how markup says where to start without
59807
59799
  * naming the current one.
59808
- * - `default-active`/`defaultActive`: Initial item for uncontrolled use.
59800
+ * - `default-active`/`defaultActive`: Which item the markup declared current.
59809
59801
  *
59810
59802
  * Ignored once `active` is written.
59811
59803
  * - `label`: Accessible name for the list, which usually has no visible heading.
@@ -59842,7 +59834,7 @@ export type CustomElementsSolidJs = {
59842
59834
  * Areas where markup can be added to the component.
59843
59835
  *
59844
59836
  * - `(default)`: The entries.
59845
- * - `player`: The `helix-video` they play in.
59837
+ * - `player`: The player the entries take turns in.
59846
59838
  *
59847
59839
  * ## Methods
59848
59840
  *
@@ -60348,7 +60340,7 @@ export type CustomCssProperties = {
60348
60340
  "--bar-chart-line-width"?: (string) | undefined;
60349
60341
  /** 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. */
60350
60342
  "--bar-chart-axis"?: (string) | undefined;
60351
- /** 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. */
60343
+ /** 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. */
60352
60344
  "--bar-chart-secondary"?: (string) | undefined;
60353
60345
  /** 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. */
60354
60346
  "--chart-bar-wash"?: (string) | undefined;
@@ -60572,9 +60564,9 @@ export type CustomCssProperties = {
60572
60564
  "--data-table-rule-color"?: (string) | undefined;
60573
60565
  /** Type size, headings and cells alike. */
60574
60566
  "--data-table-text"?: (string) | undefined;
60575
- /** 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. */
60567
+ /** 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. */
60576
60568
  "--data-table-cell-align"?: (string) | undefined;
60577
- /** 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. */
60569
+ /** 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. */
60578
60570
  "--data-table-template"?: (string) | undefined;
60579
60571
  /** Fill behind the field. */
60580
60572
  "--date-input-background-color"?: (string) | undefined;
@@ -61178,7 +61170,7 @@ export type CustomCssProperties = {
61178
61170
  "--table-cell-align"?: (string) | undefined;
61179
61171
  /** Track list for the columns, which wins over the one the columns worked out. */
61180
61172
  "--table-columns"?: (string) | undefined;
61181
- /** 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. */
61173
+ /** 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. */
61182
61174
  "--table-template"?: (string) | undefined;
61183
61175
  /** Fill behind the tag. */
61184
61176
  "--tag-background-color"?: (string) | undefined;