@fusion.dev/helix 0.53.1 → 0.53.2

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
@@ -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
@@ -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
@@ -2832,13 +2832,13 @@ end while the slides stop moving a third of the way through.
2832
2832
  **The number is published to the styles rather than enumerated by them**,
2833
2833
  as `--carousel-per-view` on the track, which is what keeps a width and a
2834
2834
  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.
2835
+ so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
2836
+ above it the pane falls back to one across while this file goes on counting
2837
+ positions. Measured in Chromium over eight slides against such a sheet, six
2838
+ across gave three dots, a pane taking the whole track and five slides
2839
+ reachable only by dragging. Published from here there is no ceiling to
2840
+ exceed, and every sheet reads the same declaration. `runEnd` publishes its
2841
+ correction the same way and for the same reason.
2842
2842
 
2843
2843
  **On the track and not on the host.** A custom property on the host is a
2844
2844
  reflected attribute by another name: it would arrive on upgrade, and a
@@ -2863,8 +2863,8 @@ inline the count would outrank the sheet that computes it, which is why an
2863
2863
  `auto` track is handed nothing. A count stays for the design that calls for
2864
2864
  exactly three.
2865
2865
 
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.
2866
+ A sheet says how it divides, and the `auto` example here carries the same
2867
+ three lines for a consumer writing their own.
2868
2868
 
2869
2869
  **A value rather than the resting behavior**, which is what the
2870
2870
  responsiveness policy asks of every axis that a box decides: a splitter
@@ -2892,13 +2892,13 @@ end while the slides stop moving a third of the way through.
2892
2892
  **The number is published to the styles rather than enumerated by them**,
2893
2893
  as `--carousel-per-view` on the track, which is what keeps a width and a
2894
2894
  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.
2895
+ so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
2896
+ above it the pane falls back to one across while this file goes on counting
2897
+ positions. Measured in Chromium over eight slides against such a sheet, six
2898
+ across gave three dots, a pane taking the whole track and five slides
2899
+ reachable only by dragging. Published from here there is no ceiling to
2900
+ exceed, and every sheet reads the same declaration. `runEnd` publishes its
2901
+ correction the same way and for the same reason.
2902
2902
 
2903
2903
  **On the track and not on the host.** A custom property on the host is a
2904
2904
  reflected attribute by another name: it would arrive on upgrade, and a
@@ -2923,8 +2923,8 @@ inline the count would outrank the sheet that computes it, which is why an
2923
2923
  `auto` track is handed nothing. A count stays for the design that calls for
2924
2924
  exactly three.
2925
2925
 
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.
2926
+ A sheet says how it divides, and the `auto` example here carries the same
2927
+ three lines for a consumer writing their own.
2928
2928
 
2929
2929
  **A value rather than the resting behavior**, which is what the
2930
2930
  responsiveness policy asks of every axis that a box decides: a splitter
@@ -3151,13 +3151,13 @@ end while the slides stop moving a third of the way through.
3151
3151
  **The number is published to the styles rather than enumerated by them**,
3152
3152
  as `--carousel-per-view` on the track, which is what keeps a width and a
3153
3153
  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.
3154
+ so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
3155
+ above it the pane falls back to one across while this file goes on counting
3156
+ positions. Measured in Chromium over eight slides against such a sheet, six
3157
+ across gave three dots, a pane taking the whole track and five slides
3158
+ reachable only by dragging. Published from here there is no ceiling to
3159
+ exceed, and every sheet reads the same declaration. `runEnd` publishes its
3160
+ correction the same way and for the same reason.
3161
3161
 
3162
3162
  **On the track and not on the host.** A custom property on the host is a
3163
3163
  reflected attribute by another name: it would arrive on upgrade, and a
@@ -3182,8 +3182,8 @@ inline the count would outrank the sheet that computes it, which is why an
3182
3182
  `auto` track is handed nothing. A count stays for the design that calls for
3183
3183
  exactly three.
3184
3184
 
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.
3185
+ A sheet says how it divides, and the `auto` example here carries the same
3186
+ three lines for a consumer writing their own.
3187
3187
 
3188
3188
  **A value rather than the resting behavior**, which is what the
3189
3189
  responsiveness policy asks of every axis that a box decides: a splitter
@@ -3211,13 +3211,13 @@ end while the slides stop moving a third of the way through.
3211
3211
  **The number is published to the styles rather than enumerated by them**,
3212
3212
  as `--carousel-per-view` on the track, which is what keeps a width and a
3213
3213
  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.
3214
+ so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
3215
+ above it the pane falls back to one across while this file goes on counting
3216
+ positions. Measured in Chromium over eight slides against such a sheet, six
3217
+ across gave three dots, a pane taking the whole track and five slides
3218
+ reachable only by dragging. Published from here there is no ceiling to
3219
+ exceed, and every sheet reads the same declaration. `runEnd` publishes its
3220
+ correction the same way and for the same reason.
3221
3221
 
3222
3222
  **On the track and not on the host.** A custom property on the host is a
3223
3223
  reflected attribute by another name: it would arrive on upgrade, and a
@@ -3242,8 +3242,8 @@ inline the count would outrank the sheet that computes it, which is why an
3242
3242
  `auto` track is handed nothing. A count stays for the design that calls for
3243
3243
  exactly three.
3244
3244
 
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.
3245
+ A sheet says how it divides, and the `auto` example here carries the same
3246
+ three lines for a consumer writing their own.
3247
3247
 
3248
3248
  **A value rather than the resting behavior**, which is what the
3249
3249
  responsiveness policy asks of every axis that a box decides: a splitter
@@ -3541,13 +3541,13 @@ pinned because a conversation opens at its most recent turn.
3541
3541
 
3542
3542
  **Not reflected, and the default is why.** A reflected property that
3543
3543
  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. */
3544
+ consumer wrote one, so the server serves `<helix-headless-chat label="x">`
3545
+ and the client turns it into `<helix-headless-chat label="x" pinned>`: a
3546
+ hydration mismatch a React consumer reports and does not patch up. Nothing
3547
+ needs the attribute either, because the one thing that changes with the pin
3548
+ is the way back, and that is a part inside the shadow tree where a
3549
+ stylesheet can already reach it. Measured rather than assumed: `label,
3550
+ pinned` after upgrade against `label` from the server. */
3551
3551
  pinned?: (HelixChat["pinned"]) | undefined;
3552
3552
  /** How near the bottom still counts as being at it, in pixels.
3553
3553
 
@@ -3616,13 +3616,13 @@ pinned because a conversation opens at its most recent turn.
3616
3616
 
3617
3617
  **Not reflected, and the default is why.** A reflected property that
3618
3618
  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. */
3619
+ consumer wrote one, so the server serves `<helix-headless-chat label="x">`
3620
+ and the client turns it into `<helix-headless-chat label="x" pinned>`: a
3621
+ hydration mismatch a React consumer reports and does not patch up. Nothing
3622
+ needs the attribute either, because the one thing that changes with the pin
3623
+ is the way back, and that is a part inside the shadow tree where a
3624
+ stylesheet can already reach it. Measured rather than assumed: `label,
3625
+ pinned` after upgrade against `label` from the server. */
3626
3626
  "prop:pinned"?: (HelixChat["pinned"]) | undefined;
3627
3627
  /** How near the bottom still counts as being at it, in pixels.
3628
3628
 
@@ -3953,11 +3953,11 @@ present, which is true. Measured, and it is why this is named the other way
3953
3953
  round. The platform already writes booleans like this for the same reason,
3954
3954
  `novalidate` and `nomodule` and `noreferrer` among them.
3955
3955
 
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.
3956
+ **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
3957
+ the copy button's width with `:host(:not([no-copy]))`, so the attribute is
3958
+ what decides whether the block pays for a control. Unreflected, setting it
3959
+ from script takes the button away (`render` reads the property) and leaves
3960
+ the 40px it stood in reserved.
3961
3961
 
3962
3962
  A false boolean reflects as the attribute's absence, so this costs no
3963
3963
  `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -3973,11 +3973,11 @@ present, which is true. Measured, and it is why this is named the other way
3973
3973
  round. The platform already writes booleans like this for the same reason,
3974
3974
  `novalidate` and `nomodule` and `noreferrer` among them.
3975
3975
 
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.
3976
+ **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
3977
+ the copy button's width with `:host(:not([no-copy]))`, so the attribute is
3978
+ what decides whether the block pays for a control. Unreflected, setting it
3979
+ from script takes the button away (`render` reads the property) and leaves
3980
+ the 40px it stood in reserved.
3981
3981
 
3982
3982
  A false boolean reflects as the attribute's absence, so this costs no
3983
3983
  `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -4012,11 +4012,11 @@ present, which is true. Measured, and it is why this is named the other way
4012
4012
  round. The platform already writes booleans like this for the same reason,
4013
4013
  `novalidate` and `nomodule` and `noreferrer` among them.
4014
4014
 
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.
4015
+ **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
4016
+ the copy button's width with `:host(:not([no-copy]))`, so the attribute is
4017
+ what decides whether the block pays for a control. Unreflected, setting it
4018
+ from script takes the button away (`render` reads the property) and leaves
4019
+ the 40px it stood in reserved.
4020
4020
 
4021
4021
  A false boolean reflects as the attribute's absence, so this costs no
4022
4022
  `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -4032,11 +4032,11 @@ present, which is true. Measured, and it is why this is named the other way
4032
4032
  round. The platform already writes booleans like this for the same reason,
4033
4033
  `novalidate` and `nomodule` and `noreferrer` among them.
4034
4034
 
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.
4035
+ **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
4036
+ the copy button's width with `:host(:not([no-copy]))`, so the attribute is
4037
+ what decides whether the block pays for a control. Unreflected, setting it
4038
+ from script takes the button away (`render` reads the property) and leaves
4039
+ the 40px it stood in reserved.
4040
4040
 
4041
4041
  A false boolean reflects as the attribute's absence, so this costs no
4042
4042
  `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -4489,10 +4489,10 @@ letting it open would take a color from the reader and drop it. */
4489
4489
 
4490
4490
  **A color is exactly as requirable as a date**, which is the comparison
4491
4491
  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.
4492
+ and reports its value, so a consumer writing `<helix-headless-color-picker
4493
+ name="brand" required>` inside a form has every reason to expect the form
4494
+ to refuse an empty one. Its two siblings in the same composition position,
4495
+ Date Picker and Time Picker, both check it.
4496
4496
 
4497
4497
  Written out rather than taken from `MixinField`, for the reason those two
4498
4498
  record: the mixin brings a label, a hint and a feedback region, and this is
@@ -4682,10 +4682,10 @@ letting it open would take a color from the reader and drop it. */
4682
4682
 
4683
4683
  **A color is exactly as requirable as a date**, which is the comparison
4684
4684
  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.
4685
+ and reports its value, so a consumer writing `<helix-headless-color-picker
4686
+ name="brand" required>` inside a form has every reason to expect the form
4687
+ to refuse an empty one. Its two siblings in the same composition position,
4688
+ Date Picker and Time Picker, both check it.
4689
4689
 
4690
4690
  Written out rather than taken from `MixinField`, for the reason those two
4691
4691
  record: the mixin brings a label, a hint and a feedback region, and this is
@@ -5297,7 +5297,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
5297
5297
  the same way `label` becomes `aria-label` in there.
5298
5298
 
5299
5299
  ```html
5300
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
5300
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
5301
5301
  ```
5302
5302
 
5303
5303
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -5489,7 +5489,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
5489
5489
  the same way `label` becomes `aria-label` in there.
5490
5490
 
5491
5491
  ```html
5492
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
5492
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
5493
5493
  ```
5494
5494
 
5495
5495
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -5780,17 +5780,17 @@ refusing it leaves the selection as it was. */
5780
5780
 
5781
5781
  **It announces nothing, and that is not an omission.** Nothing in this
5782
5782
  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. */
5783
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
5784
+ themselves. Routing this through `requestChange` would announce an event
5785
+ the element never has cause to fire. */
5786
5786
  "page-size"?: (HelixDataTable["pageSize"] | `${number}`) | undefined;
5787
5787
  /** How many rows a page holds. Zero is every row, which is what "no paging" means.
5788
5788
 
5789
5789
  **It announces nothing, and that is not an omission.** Nothing in this
5790
5790
  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. */
5791
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
5792
+ themselves. Routing this through `requestChange` would announce an event
5793
+ the element never has cause to fire. */
5794
5794
  pageSize?: (HelixDataTable["pageSize"]) | undefined;
5795
5795
  /** How many rows the whole result has, where this element cannot count them.
5796
5796
 
@@ -5979,17 +5979,17 @@ refusing it leaves the selection as it was. */
5979
5979
 
5980
5980
  **It announces nothing, and that is not an omission.** Nothing in this
5981
5981
  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. */
5982
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
5983
+ themselves. Routing this through `requestChange` would announce an event
5984
+ the element never has cause to fire. */
5985
5985
  "attr:page-size"?: (HelixDataTable["pageSize"] | `${number}`) | undefined;
5986
5986
  /** How many rows a page holds. Zero is every row, which is what "no paging" means.
5987
5987
 
5988
5988
  **It announces nothing, and that is not an omission.** Nothing in this
5989
5989
  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. */
5990
+ `PaginationSize`, which a consumer puts in the `footer` slot and answers
5991
+ themselves. Routing this through `requestChange` would announce an event
5992
+ the element never has cause to fire. */
5993
5993
  "prop:pageSize"?: (HelixDataTable["pageSize"]) | undefined;
5994
5994
  /** How many rows the whole result has, where this element cannot count them.
5995
5995
 
@@ -7534,10 +7534,10 @@ not, rather than shown or hidden by CSS. */
7534
7534
  modal?: (HelixDrawer["modal"]) | undefined;
7535
7535
  /** Which edge the drawer comes from.
7536
7536
 
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
7537
+ Unset is `end`, and it stays unset rather than being written down: a
7539
7538
  default assigned to the property would reflect onto every host and put a
7540
- `placement="end"` into markup no consumer wrote. */
7539
+ `placement="end"` into markup no consumer wrote. So what this tier
7540
+ guarantees is the absence, and a sheet selects on it. */
7541
7541
  placement?: (HelixDrawer["placement"]) | undefined;
7542
7542
  /** What the dialog closed with, the way `<dialog>` reports it.
7543
7543
 
@@ -7636,10 +7636,10 @@ not, rather than shown or hidden by CSS. */
7636
7636
  "prop:modal"?: (HelixDrawer["modal"]) | undefined;
7637
7637
  /** Which edge the drawer comes from.
7638
7638
 
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
7639
+ Unset is `end`, and it stays unset rather than being written down: a
7641
7640
  default assigned to the property would reflect onto every host and put a
7642
- `placement="end"` into markup no consumer wrote. */
7641
+ `placement="end"` into markup no consumer wrote. So what this tier
7642
+ guarantees is the absence, and a sheet selects on it. */
7643
7643
  "prop:placement"?: (HelixDrawer["placement"]) | undefined;
7644
7644
  /** What the dialog closed with, the way `<dialog>` reports it.
7645
7645
 
@@ -8611,11 +8611,12 @@ renders nothing rather than the epoch, which is what parsing an empty string
8611
8611
  would give.
8612
8612
 
8613
8613
  **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
8614
+ `<helix-headless-format-date
8615
+ elapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling
8616
+ that reads best in markup, and it cannot be the only one: measured against
8617
+ Lit's server shim, `textContent`, `children`, `firstChild` and
8618
+ `querySelector` are all `undefined` there, so a server has no way to see
8619
+ it. An element rendered on a server needs the attribute; one rendered in a
8619
8620
  browser may use either. */
8620
8621
  date?: (HelixFormatDate["date"]) | undefined;
8621
8622
  /** How the day of the month is written, where a date is shown. */
@@ -8665,11 +8666,12 @@ renders nothing rather than the epoch, which is what parsing an empty string
8665
8666
  would give.
8666
8667
 
8667
8668
  **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
8669
+ `<helix-headless-format-date
8670
+ elapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling
8671
+ that reads best in markup, and it cannot be the only one: measured against
8672
+ Lit's server shim, `textContent`, `children`, `firstChild` and
8673
+ `querySelector` are all `undefined` there, so a server has no way to see
8674
+ it. An element rendered on a server needs the attribute; one rendered in a
8673
8675
  browser may use either. */
8674
8676
  "prop:date"?: (HelixFormatDate["date"]) | undefined;
8675
8677
  /** How the day of the month is written, where a date is shown. */
@@ -8790,12 +8792,12 @@ so a number written here that disagrees with the sheet is a promise the
8790
8792
  consumer has to keep by hand, and the one number a summary is told to trust
8791
8793
  is the one it gets wrong.
8792
8794
 
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.
8795
+ The strip measures itself, so sizing the cells in a sheet is enough on its
8796
+ own and these two are the estimate used until the first measurement lands.
8797
+ Writing the attribute pins the value and stops the measurement being
8798
+ consulted, which is what a container query or a transition on the cell size
8799
+ wants, where what is drawn this frame is not what the arithmetic should
8800
+ plan around.
8799
8801
 
8800
8802
  Zero turns the dropping off altogether, which is right for a strip in a
8801
8803
  container that cannot get narrow. */
@@ -8808,12 +8810,12 @@ so a number written here that disagrees with the sheet is a promise the
8808
8810
  consumer has to keep by hand, and the one number a summary is told to trust
8809
8811
  is the one it gets wrong.
8810
8812
 
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.
8813
+ The strip measures itself, so sizing the cells in a sheet is enough on its
8814
+ own and these two are the estimate used until the first measurement lands.
8815
+ Writing the attribute pins the value and stops the measurement being
8816
+ consulted, which is what a container query or a transition on the cell size
8817
+ wants, where what is drawn this frame is not what the arithmetic should
8818
+ plan around.
8817
8819
 
8818
8820
  Zero turns the dropping off altogether, which is right for a strip in a
8819
8821
  container that cannot get narrow. */
@@ -8885,12 +8887,12 @@ so a number written here that disagrees with the sheet is a promise the
8885
8887
  consumer has to keep by hand, and the one number a summary is told to trust
8886
8888
  is the one it gets wrong.
8887
8889
 
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.
8890
+ The strip measures itself, so sizing the cells in a sheet is enough on its
8891
+ own and these two are the estimate used until the first measurement lands.
8892
+ Writing the attribute pins the value and stops the measurement being
8893
+ consulted, which is what a container query or a transition on the cell size
8894
+ wants, where what is drawn this frame is not what the arithmetic should
8895
+ plan around.
8894
8896
 
8895
8897
  Zero turns the dropping off altogether, which is right for a strip in a
8896
8898
  container that cannot get narrow. */
@@ -8903,12 +8905,12 @@ so a number written here that disagrees with the sheet is a promise the
8903
8905
  consumer has to keep by hand, and the one number a summary is told to trust
8904
8906
  is the one it gets wrong.
8905
8907
 
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.
8908
+ The strip measures itself, so sizing the cells in a sheet is enough on its
8909
+ own and these two are the estimate used until the first measurement lands.
8910
+ Writing the attribute pins the value and stops the measurement being
8911
+ consulted, which is what a container query or a transition on the cell size
8912
+ wants, where what is drawn this frame is not what the arithmetic should
8913
+ plan around.
8912
8914
 
8913
8915
  Zero turns the dropping off altogether, which is right for a strip in a
8914
8916
  container that cannot get narrow. */
@@ -9003,7 +9005,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
9003
9005
  the same way `label` becomes `aria-label` in there.
9004
9006
 
9005
9007
  ```html
9006
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
9008
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
9007
9009
  ```
9008
9010
 
9009
9011
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -9209,7 +9211,7 @@ the trigger silently does nothing at all. A wrapper has to hand them down,
9209
9211
  the same way `label` becomes `aria-label` in there.
9210
9212
 
9211
9213
  ```html
9212
- <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
9214
+ <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
9213
9215
  ```
9214
9216
 
9215
9217
  `commandFor` spells its attribute out, because Lit lowercases a property
@@ -9463,10 +9465,10 @@ Read-only to a consumer: it is a report rather than a setting.
9463
9465
  **Mirrored to `data-status`, and not reflected as `status`.** It is element
9464
9466
  state, so reflecting it puts the element's own bookkeeping into the markup
9465
9467
  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
9468
+ hydration mismatch, and a host pasted back carrying `status="loaded"`
9469
+ declares that a picture has arrived which this element has never fetched.
9470
+ The `data-` name is the library's answer to both, being a name a re-parse
9471
+ cannot mistake for a declaration, and it is what `data-closed` on
9470
9472
  `Toast.Item` already does. A picture arrives after somebody fetched it,
9471
9473
  which puts this on the safe side of hydration: a fact that can be true on
9472
9474
  the *first* update mirrors to a custom state instead, which is what
@@ -9546,10 +9548,10 @@ Read-only to a consumer: it is a report rather than a setting.
9546
9548
  **Mirrored to `data-status`, and not reflected as `status`.** It is element
9547
9549
  state, so reflecting it puts the element's own bookkeeping into the markup
9548
9550
  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
9551
+ hydration mismatch, and a host pasted back carrying `status="loaded"`
9552
+ declares that a picture has arrived which this element has never fetched.
9553
+ The `data-` name is the library's answer to both, being a name a re-parse
9554
+ cannot mistake for a declaration, and it is what `data-closed` on
9553
9555
  `Toast.Item` already does. A picture arrives after somebody fetched it,
9554
9556
  which puts this on the safe side of hydration: a fact that can be true on
9555
9557
  the *first* update mirrors to a custom state instead, which is what
@@ -9634,20 +9636,20 @@ Not a label: it goes when typing starts. */
9634
9636
  **The attribute is `readonly`, which is the platform's spelling.** A
9635
9637
  camelCase property needs an explicit `attribute`, and dash-casing a word
9636
9638
  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`. */
9639
+ warns. `<helix-headless-input readonly>` is what anybody who has written
9640
+ HTML types; against `read-only` it parses to no property at all, and the
9641
+ field stays editable with no error anywhere. Measured on the dash-cased
9642
+ form, `readOnly` came back `false`. */
9641
9643
  readonly?: (HelixInput["readOnly"]) | undefined;
9642
9644
  /** Whether the field refuses input while still submitting its value.
9643
9645
 
9644
9646
  **The attribute is `readonly`, which is the platform's spelling.** A
9645
9647
  camelCase property needs an explicit `attribute`, and dash-casing a word
9646
9648
  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`. */
9649
+ warns. `<helix-headless-input readonly>` is what anybody who has written
9650
+ HTML types; against `read-only` it parses to no property at all, and the
9651
+ field stays editable with no error anywhere. Measured on the dash-cased
9652
+ form, `readOnly` came back `false`. */
9651
9653
  readOnly?: (HelixInput["readOnly"]) | undefined;
9652
9654
  /** Whether a password field offers a toggle that shows what was typed.
9653
9655
 
@@ -9668,9 +9670,9 @@ The state is `aria-pressed`, not this. */
9668
9670
 
9669
9671
  **Not reflected.** Reflection exists so a selector can reach a value, and
9670
9672
  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`.
9673
+ `type="text"` onto every `<helix-headless-input>` ever rendered, an
9674
+ attribute no consumer's markup has, which is the fault the area rules write
9675
+ up under `Button`'s `href`, `target` and `rel`.
9674
9676
 
9675
9677
  Nothing reads it from the attribute either. The real `<input>` inside takes
9676
9678
  it as a property binding, which is what makes the keyboard and the
@@ -9788,20 +9790,20 @@ Not a label: it goes when typing starts. */
9788
9790
  **The attribute is `readonly`, which is the platform's spelling.** A
9789
9791
  camelCase property needs an explicit `attribute`, and dash-casing a word
9790
9792
  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`. */
9793
+ warns. `<helix-headless-input readonly>` is what anybody who has written
9794
+ HTML types; against `read-only` it parses to no property at all, and the
9795
+ field stays editable with no error anywhere. Measured on the dash-cased
9796
+ form, `readOnly` came back `false`. */
9795
9797
  "bool:readonly"?: (HelixInput["readOnly"]) | undefined;
9796
9798
  /** Whether the field refuses input while still submitting its value.
9797
9799
 
9798
9800
  **The attribute is `readonly`, which is the platform's spelling.** A
9799
9801
  camelCase property needs an explicit `attribute`, and dash-casing a word
9800
9802
  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`. */
9803
+ warns. `<helix-headless-input readonly>` is what anybody who has written
9804
+ HTML types; against `read-only` it parses to no property at all, and the
9805
+ field stays editable with no error anywhere. Measured on the dash-cased
9806
+ form, `readOnly` came back `false`. */
9805
9807
  "prop:readOnly"?: (HelixInput["readOnly"]) | undefined;
9806
9808
  /** Whether a password field offers a toggle that shows what was typed.
9807
9809
 
@@ -9822,9 +9824,9 @@ The state is `aria-pressed`, not this. */
9822
9824
 
9823
9825
  **Not reflected.** Reflection exists so a selector can reach a value, and
9824
9826
  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`.
9827
+ `type="text"` onto every `<helix-headless-input>` ever rendered, an
9828
+ attribute no consumer's markup has, which is the fault the area rules write
9829
+ up under `Button`'s `href`, `target` and `rel`.
9828
9830
 
9829
9831
  Nothing reads it from the attribute either. The real `<input>` inside takes
9830
9832
  it as a property binding, which is what makes the keyboard and the
@@ -10263,8 +10265,7 @@ beside it for instance. `ring` lets the ground through, for a chart drawn
10263
10265
  over something busy. `triangle` points along the axis and reads as "and
10264
10266
  onward" rather than as a second claim about the data.
10265
10267
 
10266
- The shapes come from
10267
- `helix/styled/src/shared/chart/terminus.css`, the same sheet `Sparkline` takes, so
10268
+ The shapes come from one shared sheet, the same one `Sparkline` takes, so
10268
10269
  the set is identical wherever one appears. **Which is why every value is
10269
10270
  named here.** `Sparkline` shipped `square` implemented, drawn, asserted and
10270
10271
  undocumented until the cohort before this one; this family reads the same
@@ -10414,8 +10415,7 @@ beside it for instance. `ring` lets the ground through, for a chart drawn
10414
10415
  over something busy. `triangle` points along the axis and reads as "and
10415
10416
  onward" rather than as a second claim about the data.
10416
10417
 
10417
- The shapes come from
10418
- `helix/styled/src/shared/chart/terminus.css`, the same sheet `Sparkline` takes, so
10418
+ The shapes come from one shared sheet, the same one `Sparkline` takes, so
10419
10419
  the set is identical wherever one appears. **Which is why every value is
10420
10420
  named here.** `Sparkline` shipped `square` implemented, drawn, asserted and
10421
10421
  undocumented until the cohort before this one; this family reads the same
@@ -10519,10 +10519,10 @@ has to survive with the stylesheet turned off.
10519
10519
  label?: (HelixList["label"]) | undefined;
10520
10520
  /** Which markers an ordered list draws, in `<ol type>`'s own five values.
10521
10521
 
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>`.
10522
+ Reflected, because this is one of the things a stylesheet selects on, each
10523
+ value mapping to a `list-style-type`. The platform's spellings rather than
10524
+ the CSS ones, so `<helix-headless-list kind="ordered" type="i">` is what a
10525
+ consumer would have written on an `<ol>`.
10526
10526
 
10527
10527
  **`start` and `reversed` are both absent and neither can be done here.**
10528
10528
  This renders no `<ol>`: the rows are slotted and numbered by the CSS
@@ -10578,10 +10578,10 @@ has to survive with the stylesheet turned off.
10578
10578
  "prop:label"?: (HelixList["label"]) | undefined;
10579
10579
  /** Which markers an ordered list draws, in `<ol type>`'s own five values.
10580
10580
 
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>`.
10581
+ Reflected, because this is one of the things a stylesheet selects on, each
10582
+ value mapping to a `list-style-type`. The platform's spellings rather than
10583
+ the CSS ones, so `<helix-headless-list kind="ordered" type="i">` is what a
10584
+ consumer would have written on an `<ol>`.
10585
10585
 
10586
10586
  **`start` and `reversed` are both absent and neither can be done here.**
10587
10587
  This renders no `<ol>`: the rows are slotted and numbered by the CSS
@@ -11816,10 +11816,10 @@ this element then owns.
11816
11816
 
11817
11817
  **Not reflected.** Unread is a visual state, which is why the four mixins
11818
11818
  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.
11819
+ `<helix-headless-notification default-read>` comes back from a server
11820
+ without `read` and would gain it on the first update, which React reports
11821
+ as a hydration mismatch, and which a copy of the serialized element
11822
+ re-parses as a declaration. `:state(read)` is what the stylesheet reads.
11823
11823
  `hydration.dom.spec.ts` holds it. */
11824
11824
  read?: (HelixNotification["read"]) | undefined;
11825
11825
  /** State to open with, where nothing declared one. */
@@ -11887,10 +11887,10 @@ this element then owns.
11887
11887
 
11888
11888
  **Not reflected.** Unread is a visual state, which is why the four mixins
11889
11889
  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.
11890
+ `<helix-headless-notification default-read>` comes back from a server
11891
+ without `read` and would gain it on the first update, which React reports
11892
+ as a hydration mismatch, and which a copy of the serialized element
11893
+ re-parses as a declaration. `:state(read)` is what the stylesheet reads.
11894
11894
  `hydration.dom.spec.ts` holds it. */
11895
11895
  "prop:read"?: (HelixNotification["read"]) | undefined;
11896
11896
  /** State to open with, where nothing declared one. */
@@ -12483,7 +12483,7 @@ attribute and the state is the property.
12483
12483
  **The attribute, read when it is asked for, and never a snapshot taken in
12484
12484
  the constructor.** A field initializer runs there, and an element the HTML
12485
12485
  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"
12486
+ this element, on `Radio` and on `Toggle`, `<helix-headless-option value="a"
12487
12487
  selected>` reported `defaultSelected` as `false` both from parsed markup
12488
12488
  and from `createElement` followed by `setAttribute`, which is every way a
12489
12489
  consumer writes one. The snapshot could only ever be true for an element
@@ -12590,7 +12590,7 @@ attribute and the state is the property.
12590
12590
  **The attribute, read when it is asked for, and never a snapshot taken in
12591
12591
  the constructor.** A field initializer runs there, and an element the HTML
12592
12592
  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"
12593
+ this element, on `Radio` and on `Toggle`, `<helix-headless-option value="a"
12594
12594
  selected>` reported `defaultSelected` as `false` both from parsed markup
12595
12595
  and from `createElement` followed by `setAttribute`, which is every way a
12596
12596
  consumer writes one. The snapshot could only ever be true for an element
@@ -13255,10 +13255,10 @@ other end is going to reject. A consumer whose codes really do carry
13255
13255
  marked letters wants `text`, which judges nothing.
13256
13256
 
13257
13257
  **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. */
13258
+ `type="numeric"` onto every `<helix-headless-pin-input>` ever rendered, an
13259
+ attribute no consumer's markup had. The area rules carry the sentence
13260
+ "reflect only what CSS selects on". The real inputs take it as a binding,
13261
+ which is what makes the keyboard follow. */
13262
13262
  type?: (HelixPinInput["type"]) | undefined;
13263
13263
  /** Whether the control is non-interactive.
13264
13264
 
@@ -13364,10 +13364,10 @@ other end is going to reject. A consumer whose codes really do carry
13364
13364
  marked letters wants `text`, which judges nothing.
13365
13365
 
13366
13366
  **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. */
13367
+ `type="numeric"` onto every `<helix-headless-pin-input>` ever rendered, an
13368
+ attribute no consumer's markup had. The area rules carry the sentence
13369
+ "reflect only what CSS selects on". The real inputs take it as a binding,
13370
+ which is what makes the keyboard follow. */
13371
13371
  "prop:type"?: (HelixPinInput["type"]) | undefined;
13372
13372
  /** Whether the control is non-interactive.
13373
13373
 
@@ -14019,7 +14019,7 @@ attribute and the state is the property.
14019
14019
  **The attribute, read when it is asked for, and never a snapshot taken in
14020
14020
  the constructor.** A field initializer runs there, and an element the HTML
14021
14021
  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"
14022
+ this element, on `Option` and on `Toggle`, `<helix-headless-radio value="a"
14023
14023
  selected>` reported `defaultSelected` as `false` both from parsed markup
14024
14024
  and from `createElement` followed by `setAttribute`, which is every way a
14025
14025
  consumer writes one. The snapshot could only ever be true for an element
@@ -14126,7 +14126,7 @@ attribute and the state is the property.
14126
14126
  **The attribute, read when it is asked for, and never a snapshot taken in
14127
14127
  the constructor.** A field initializer runs there, and an element the HTML
14128
14128
  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"
14129
+ this element, on `Option` and on `Toggle`, `<helix-headless-radio value="a"
14130
14130
  selected>` reported `defaultSelected` as `false` both from parsed markup
14131
14131
  and from `createElement` followed by `setAttribute`, which is every way a
14132
14132
  consumer writes one. The snapshot could only ever be true for an element
@@ -16426,9 +16426,9 @@ the headline and the label is a caption under it.
16426
16426
  The row directions set them side by side, for a figure in a line of text or
16427
16427
  a narrow strip where a stacked pair would be two lines of almost nothing.
16428
16428
 
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.
16429
+ A property rather than a `Flex` around it, because the unit has to stay on
16430
+ the value's baseline whichever way the pair goes, and only this element
16431
+ knows which of its children the unit belongs to.
16432
16432
 
16433
16433
  **Optional rather than defaulted to `column`, which is not a style
16434
16434
  preference.** A reflecting property with a default writes its attribute onto
@@ -16451,9 +16451,9 @@ the headline and the label is a caption under it.
16451
16451
  The row directions set them side by side, for a figure in a line of text or
16452
16452
  a narrow strip where a stacked pair would be two lines of almost nothing.
16453
16453
 
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.
16454
+ A property rather than a `Flex` around it, because the unit has to stay on
16455
+ the value's baseline whichever way the pair goes, and only this element
16456
+ knows which of its children the unit belongs to.
16457
16457
 
16458
16458
  **Optional rather than defaulted to `column`, which is not a style
16459
16459
  preference.** A reflecting property with a default writes its attribute onto
@@ -16797,15 +16797,15 @@ export type HelixTableColumnHelixBeforeResizeElementEvent =
16797
16797
  export type HelixTableColumnProps = {
16798
16798
  /** Which edge the values line up against.
16799
16799
 
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.
16800
+ `end` is what a column of numbers wants, so digits of the same magnitude
16801
+ sit above each other. Left unset the cell inherits the table's own
16802
+ alignment, which is `start` for text in either writing direction.
16803
+ `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
16804
+ consumer wrote, so the table writes nothing onto them: it publishes the
16805
+ edge to each cell under this column as `--table-cell-align`, which
16806
+ `@fusion.dev/helix` reads. The heading is this element's own, and
16807
+ `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
16808
+ inline end, so in a right-to-left table it is the left.
16809
16809
 
16810
16810
  **Reflected, because the heading is drawn by a stylesheet and has no other
16811
16811
  way to learn it.** Set as a property, which is how React sets it, an
@@ -16852,8 +16852,8 @@ onto its host. */
16852
16852
  /** The track this column takes, as CSS.
16853
16853
 
16854
16854
  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
16855
+ `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track in
16856
+ its place in a `Table`'s `columns`, where that table sets one, and
16857
16857
  otherwise shares what is left over equally, as `minmax(max-content, 1fr)`.
16858
16858
  Set here, it wins over that list, which is what lets a reader resize a
16859
16859
  column in a table that set one.
@@ -16899,15 +16899,15 @@ correct default: the raw value is what an API sorted by. */
16899
16899
  export type HelixTableColumnSolidJsProps = {
16900
16900
  /** Which edge the values line up against.
16901
16901
 
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.
16902
+ `end` is what a column of numbers wants, so digits of the same magnitude
16903
+ sit above each other. Left unset the cell inherits the table's own
16904
+ alignment, which is `start` for text in either writing direction.
16905
+ `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
16906
+ consumer wrote, so the table writes nothing onto them: it publishes the
16907
+ edge to each cell under this column as `--table-cell-align`, which
16908
+ `@fusion.dev/helix` reads. The heading is this element's own, and
16909
+ `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
16910
+ inline end, so in a right-to-left table it is the left.
16911
16911
 
16912
16912
  **Reflected, because the heading is drawn by a stylesheet and has no other
16913
16913
  way to learn it.** Set as a property, which is how React sets it, an
@@ -16954,8 +16954,8 @@ onto its host. */
16954
16954
  /** The track this column takes, as CSS.
16955
16955
 
16956
16956
  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
16957
+ `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track in
16958
+ its place in a `Table`'s `columns`, where that table sets one, and
16959
16959
  otherwise shares what is left over equally, as `minmax(max-content, 1fr)`.
16960
16960
  Set here, it wins over that list, which is what lets a reader resize a
16961
16961
  column in a table that set one.
@@ -17019,15 +17019,14 @@ say that without the component knowing what a row looks like. */
17019
17019
  loadingText?: (HelixTable["loadingText"]) | undefined;
17020
17020
  /** The column widths as one track list, written once on the table.
17021
17021
 
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.
17022
+ With `TableColumn` children, each track sizes the column in its place, a
17023
+ hidden column counted, so hiding one takes its track with it and the rest
17024
+ keep theirs. The columns decide how many tracks there are and this list
17025
+ only how wide: a track past the last column is dropped, and a column past
17026
+ the last track shares what is left. With no columns declared it is the
17027
+ whole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`
17028
+ is one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves
17029
+ its column at the default rather than taking the table down to one column.
17031
17030
 
17032
17031
  **A column's own `width` wins over its track here.** The width is written
17033
17032
  on the column it sizes, which is the more particular statement, and it is
@@ -17041,13 +17040,11 @@ to walk, so a render there knows of no columns and this attribute is the
17041
17040
  whole answer: a table given one lays its grid out in the first paint, and a
17042
17041
  table sized only by its columns is one track wide until it upgrades.
17043
17042
 
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. */
17043
+ **Data Table has none of this, and should not.** Its columns are its schema
17044
+ rather than an option, so there is always a column to write a `width` on
17045
+ and a list here would be a second way to say what that says. This table's
17046
+ cells are markup, and a table written as rows of cells with no column
17047
+ declared in it has nowhere else to be sized from. */
17051
17048
  columns?: (HelixTable["columns"]) | undefined;
17052
17049
  /** Accessible name for the table. */
17053
17050
  label?: (HelixTable["label"]) | undefined;
@@ -17070,15 +17067,14 @@ say that without the component knowing what a row looks like. */
17070
17067
  "prop:loadingText"?: (HelixTable["loadingText"]) | undefined;
17071
17068
  /** The column widths as one track list, written once on the table.
17072
17069
 
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.
17070
+ With `TableColumn` children, each track sizes the column in its place, a
17071
+ hidden column counted, so hiding one takes its track with it and the rest
17072
+ keep theirs. The columns decide how many tracks there are and this list
17073
+ only how wide: a track past the last column is dropped, and a column past
17074
+ the last track shares what is left. With no columns declared it is the
17075
+ whole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`
17076
+ is one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves
17077
+ its column at the default rather than taking the table down to one column.
17082
17078
 
17083
17079
  **A column's own `width` wins over its track here.** The width is written
17084
17080
  on the column it sizes, which is the more particular statement, and it is
@@ -17092,13 +17088,11 @@ to walk, so a render there knows of no columns and this attribute is the
17092
17088
  whole answer: a table given one lays its grid out in the first paint, and a
17093
17089
  table sized only by its columns is one track wide until it upgrades.
17094
17090
 
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. */
17091
+ **Data Table has none of this, and should not.** Its columns are its schema
17092
+ rather than an option, so there is always a column to write a `width` on
17093
+ and a list here would be a second way to say what that says. This table's
17094
+ cells are markup, and a table written as rows of cells with no column
17095
+ declared in it has nowhere else to be sized from. */
17102
17096
  "prop:columns"?: (HelixTable["columns"]) | undefined;
17103
17097
  /** Accessible name for the table. */
17104
17098
  "prop:label"?: (HelixTable["label"]) | undefined;
@@ -17907,8 +17901,8 @@ Absent uses the runtime's own. */
17907
17901
 
17908
17902
  Absent is one. `range` holds a start and an end, `multiple` holds any
17909
17903
  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. */
17904
+ form submits. `TimePicker` carries the longer note on the interaction and
17905
+ on why a wheel cannot do either. */
17912
17906
  mode?: (HelixTimeInput["mode"]) | undefined;
17913
17907
  /** What the field says before a time is in it. */
17914
17908
  placeholder?: (HelixTimeInput["placeholder"]) | undefined;
@@ -17937,7 +17931,7 @@ never something this element would refuse to read back. */
17937
17931
  `list` offers whole times, which is what a product with slots or opening
17938
17932
  hours has. `wheels` splits them into an hour, a minute and a meridiem where
17939
17933
  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.
17934
+ scrolling most of a day. `TimePicker` carries the longer note on the trade.
17941
17935
 
17942
17936
  **Optional rather than defaulted, which is not a style preference.** A
17943
17937
  reflecting property with a default writes its attribute onto every host the
@@ -18095,8 +18089,8 @@ Absent uses the runtime's own. */
18095
18089
 
18096
18090
  Absent is one. `range` holds a start and an end, `multiple` holds any
18097
18091
  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. */
18092
+ form submits. `TimePicker` carries the longer note on the interaction and
18093
+ on why a wheel cannot do either. */
18100
18094
  "prop:mode"?: (HelixTimeInput["mode"]) | undefined;
18101
18095
  /** What the field says before a time is in it. */
18102
18096
  "prop:placeholder"?: (HelixTimeInput["placeholder"]) | undefined;
@@ -18125,7 +18119,7 @@ never something this element would refuse to read back. */
18125
18119
  `list` offers whole times, which is what a product with slots or opening
18126
18120
  hours has. `wheels` splits them into an hour, a minute and a meridiem where
18127
18121
  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.
18122
+ scrolling most of a day. `TimePicker` carries the longer note on the trade.
18129
18123
 
18130
18124
  **Optional rather than defaulted, which is not a style preference.** A
18131
18125
  reflecting property with a default writes its attribute onto every host the
@@ -18260,7 +18254,7 @@ Absent uses the runtime's own. */
18260
18254
 
18261
18255
  Absent is one. `range` holds a start and an end with everything between
18262
18256
  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,
18257
+ carried as one comma-separated value: the same shape `DatePicker` uses,
18264
18258
  because it is the same question asked of a different unit.
18265
18259
 
18266
18260
  **A range is two picks, and a third starts over.** That is the calendar's
@@ -18434,7 +18428,7 @@ Absent uses the runtime's own. */
18434
18428
 
18435
18429
  Absent is one. `range` holds a start and an end with everything between
18436
18430
  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,
18431
+ carried as one comma-separated value: the same shape `DatePicker` uses,
18438
18432
  because it is the same question asked of a different unit.
18439
18433
 
18440
18434
  **A range is two picks, and a third starts over.** That is the calendar's
@@ -18715,7 +18709,7 @@ where they were would not be a stack.
18715
18709
  **Optional, and bottom-end is the absence of it.** Reflecting *and*
18716
18710
  defaulting is the pair that writes onto a host: every toast region anybody
18717
18711
  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
18712
+ consumer's server markup does not have. A sheet carries the resting
18719
18713
  arrangement in its own `:host` rule and the selectors describe only the
18720
18714
  departures, which is what `orientation` does. */
18721
18715
  placement?: (HelixToast["placement"]) | undefined;
@@ -18736,7 +18730,7 @@ where they were would not be a stack.
18736
18730
  **Optional, and bottom-end is the absence of it.** Reflecting *and*
18737
18731
  defaulting is the pair that writes onto a host: every toast region anybody
18738
18732
  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
18733
+ consumer's server markup does not have. A sheet carries the resting
18740
18734
  arrangement in its own `:host` rule and the selectors describe only the
18741
18735
  departures, which is what `orientation` does. */
18742
18736
  "prop:placement"?: (HelixToast["placement"]) | undefined;
@@ -18988,11 +18982,11 @@ attribute and the state is the property.
18988
18982
  **The attribute, read when it is asked for, and never a snapshot taken in
18989
18983
  the constructor.** A field initializer runs there, and an element the HTML
18990
18984
  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.
18985
+ this element, on `Option` and on `Radio`, `<helix-headless-toggle
18986
+ value="light" selected>` reported `defaultSelected` as `false` both from
18987
+ parsed markup and from `createElement` followed by `setAttribute`, which is
18988
+ every way a consumer writes one. The snapshot could only ever be true for
18989
+ an element already in the document when `customElements.define` ran.
18996
18990
 
18997
18991
  Nothing overwrites it either, which is what makes reading it late correct
18998
18992
  rather than merely later: `selected` does not reflect, for the reason
@@ -19038,11 +19032,11 @@ attribute and the state is the property.
19038
19032
  **The attribute, read when it is asked for, and never a snapshot taken in
19039
19033
  the constructor.** A field initializer runs there, and an element the HTML
19040
19034
  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.
19035
+ this element, on `Option` and on `Radio`, `<helix-headless-toggle
19036
+ value="light" selected>` reported `defaultSelected` as `false` both from
19037
+ parsed markup and from `createElement` followed by `setAttribute`, which is
19038
+ every way a consumer writes one. The snapshot could only ever be true for
19039
+ an element already in the document when `customElements.define` ran.
19046
19040
 
19047
19041
  Nothing overwrites it either, which is what makes reading it late correct
19048
19042
  rather than merely later: `selected` does not reflect, for the reason
@@ -21726,13 +21720,13 @@ export type CustomElements = {
21726
21720
  * Unset shows all of them, which is what no limit means and is more useful
21727
21721
  * than refusing to render.
21728
21722
  *
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.
21723
+ * **Reflected, because the fold is a stylesheet rule and nothing else.** A
21724
+ * sheet hides past the limit one selector per value, as `FOLDS_UP_TO`
21725
+ * describes, so the attribute *is* the mechanism: a `max` that reaches this
21726
+ * property and never reaches the host matches no rule, and every avatar is
21727
+ * drawn beside a count claiming some are hidden. Markup is the safe path and
21728
+ * hides the fault; a script is the broken one, and React takes it for
21729
+ * everyone, assigning a matching property rather than an attribute.
21736
21730
  *
21737
21731
  * **Optional rather than defaulted, per the rule that a reflected property
21738
21732
  * takes no default**: `max = 0` would stamp `max="0"` onto every host that
@@ -22253,7 +22247,7 @@ export type CustomElements = {
22253
22247
  * - `--bar-chart-line-width`: Thickness of a `lines` series, over `--chart-stroke`. (default: `undefined`)
22254
22248
  * - `--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
22249
  * - `--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`)
22250
+ * - `--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
22251
  * - `--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
22252
  *
22259
22253
  * ## CSS Parts
@@ -22381,12 +22375,12 @@ export type CustomElements = {
22381
22375
  * - `current`: Whether this item is the page the reader is on.
22382
22376
  * - `href`: Where the crumb goes, and nothing where it is the current page.
22383
22377
  *
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.
22378
+ * **Optional and reflected, because a stylesheet does select on it.** A sheet
22379
+ * writes `:host(:not([href])) [part="link"]` to take the block padding off a
22380
+ * crumb that is not a link, so the attribute is what decides how tall a crumb
22381
+ * is. Unreflected, an `href` set from script reached the property, rendered
22382
+ * the anchor, and left the host looking unlinked: the crumb drew at 20px
22383
+ * where a markup twin drew at 28.
22390
22384
  *
22391
22385
  * Optional rather than defaulted, which is the general rule that a reflected
22392
22386
  * property takes no default: an `href` written onto every host would be a link
@@ -22665,7 +22659,7 @@ export type CustomElements = {
22665
22659
  * the same way `label` becomes `aria-label` in there.
22666
22660
  *
22667
22661
  * ```html
22668
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
22662
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
22669
22663
  * ```
22670
22664
  *
22671
22665
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -23221,13 +23215,13 @@ export type CustomElements = {
23221
23215
  * **The number is published to the styles rather than enumerated by them**,
23222
23216
  * as `--carousel-per-view` on the track, which is what keeps a width and a
23223
23217
  * 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.
23218
+ * so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
23219
+ * above it the pane falls back to one across while this file goes on counting
23220
+ * positions. Measured in Chromium over eight slides against such a sheet, six
23221
+ * across gave three dots, a pane taking the whole track and five slides
23222
+ * reachable only by dragging. Published from here there is no ceiling to
23223
+ * exceed, and every sheet reads the same declaration. `runEnd` publishes its
23224
+ * correction the same way and for the same reason.
23231
23225
  *
23232
23226
  * **On the track and not on the host.** A custom property on the host is a
23233
23227
  * reflected attribute by another name: it would arrive on upgrade, and a
@@ -23252,8 +23246,8 @@ export type CustomElements = {
23252
23246
  * `auto` track is handed nothing. A count stays for the design that calls for
23253
23247
  * exactly three.
23254
23248
  *
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.
23249
+ * A sheet says how it divides, and the `auto` example here carries the same
23250
+ * three lines for a consumer writing their own.
23257
23251
  *
23258
23252
  * **A value rather than the resting behavior**, which is what the
23259
23253
  * responsiveness policy asks of every axis that a box decides: a splitter
@@ -23626,13 +23620,13 @@ export type CustomElements = {
23626
23620
  *
23627
23621
  * **Not reflected, and the default is why.** A reflected property that
23628
23622
  * 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.
23623
+ * consumer wrote one, so the server serves `<helix-headless-chat label="x">`
23624
+ * and the client turns it into `<helix-headless-chat label="x" pinned>`: a
23625
+ * hydration mismatch a React consumer reports and does not patch up. Nothing
23626
+ * needs the attribute either, because the one thing that changes with the pin
23627
+ * is the way back, and that is a part inside the shadow tree where a
23628
+ * stylesheet can already reach it. Measured rather than assumed: `label,
23629
+ * pinned` after upgrade against `label` from the server.
23636
23630
  * - `threshold`: How near the bottom still counts as being at it, in pixels.
23637
23631
  *
23638
23632
  * A hook rather than a constant, because the right number depends on how tall
@@ -23682,7 +23676,7 @@ export type CustomElements = {
23682
23676
  *
23683
23677
  * Areas where markup can be added to the component.
23684
23678
  *
23685
- * - `(default)`: The turns, as `helix-chat-message` children.
23679
+ * - `(default)`: The turns.
23686
23680
  * - `composer`: Below the transcript, where the reader writes.
23687
23681
  * - `header`: Above the transcript.
23688
23682
  * - `resume`: The way back to the bottom.
@@ -24137,11 +24131,11 @@ export type CustomElements = {
24137
24131
  * round. The platform already writes booleans like this for the same reason,
24138
24132
  * `novalidate` and `nomodule` and `noreferrer` among them.
24139
24133
  *
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.
24134
+ * **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
24135
+ * the copy button's width with `:host(:not([no-copy]))`, so the attribute is
24136
+ * what decides whether the block pays for a control. Unreflected, setting it
24137
+ * from script takes the button away (`render` reads the property) and leaves
24138
+ * the 40px it stood in reserved.
24145
24139
  *
24146
24140
  * A false boolean reflects as the attribute's absence, so this costs no
24147
24141
  * `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -24667,10 +24661,10 @@ export type CustomElements = {
24667
24661
  *
24668
24662
  * **A color is exactly as requirable as a date**, which is the comparison
24669
24663
  * 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.
24664
+ * and reports its value, so a consumer writing `<helix-headless-color-picker
24665
+ * name="brand" required>` inside a form has every reason to expect the form
24666
+ * to refuse an empty one. Its two siblings in the same composition position,
24667
+ * Date Picker and Time Picker, both check it.
24674
24668
  *
24675
24669
  * Written out rather than taken from `MixinField`, for the reason those two
24676
24670
  * record: the mixin brings a label, a hint and a feedback region, and this is
@@ -25015,7 +25009,7 @@ export type CustomElements = {
25015
25009
  *
25016
25010
  * Areas where markup can be added to the component.
25017
25011
  *
25018
- * - `(default)`: The options, which are `helix-option` elements.
25012
+ * - `(default)`: The options.
25019
25013
  * - `end`: After it, for a unit or a clear button.
25020
25014
  * - `indicator`: Replaces the caret saying the field opens.
25021
25015
  * - `start`: Before the text, for an icon.
@@ -25202,7 +25196,7 @@ export type CustomElements = {
25202
25196
  *
25203
25197
  * Areas where markup can be added to the component.
25204
25198
  *
25205
- * - `(default)`: The commands, which are `helix-option` elements and their groups.
25199
+ * - `(default)`: The commands, and any groups of them.
25206
25200
  * - `footer`: Under the list, for the keys a reader can press.
25207
25201
  *
25208
25202
  * ## Methods
@@ -25311,7 +25305,7 @@ export type CustomElements = {
25311
25305
  * the same way `label` becomes `aria-label` in there.
25312
25306
  *
25313
25307
  * ```html
25314
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
25308
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
25315
25309
  * ```
25316
25310
  *
25317
25311
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -25617,9 +25611,9 @@ export type CustomElements = {
25617
25611
  *
25618
25612
  * **It announces nothing, and that is not an omission.** Nothing in this
25619
25613
  * 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.
25614
+ * `PaginationSize`, which a consumer puts in the `footer` slot and answers
25615
+ * themselves. Routing this through `requestChange` would announce an event
25616
+ * the element never has cause to fire.
25623
25617
  * - `total`: How many rows the whole result has, where this element cannot count them.
25624
25618
  *
25625
25619
  * Only read in `server` mode, where `rows` is one page and its length says
@@ -25699,7 +25693,7 @@ export type CustomElements = {
25699
25693
  *
25700
25694
  * Areas where markup can be added to the component.
25701
25695
  *
25702
- * - `(default)`: The columns, declared as `helix-table-column` children.
25696
+ * - `(default)`: The columns, declared rather than drawn.
25703
25697
  * - `footer`: Below the grid, replacing the pagination this would otherwise draw.
25704
25698
  * - `toolbar`: Above the grid, for a search field or actions.
25705
25699
  *
@@ -25744,8 +25738,8 @@ export type CustomElements = {
25744
25738
  * - `--data-table-padding-inline`: Space either side of a cell's content. (default: `undefined`)
25745
25739
  * - `--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
25740
  * - `--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`)
25741
+ * - `--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`)
25742
+ * - `--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
25743
  *
25750
25744
  * ## CSS Parts
25751
25745
  *
@@ -27072,10 +27066,10 @@ export type CustomElements = {
27072
27066
  * not, rather than shown or hidden by CSS.
27073
27067
  * - `placement`: Which edge the drawer comes from.
27074
27068
  *
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
27069
+ * Unset is `end`, and it stays unset rather than being written down: a
27077
27070
  * default assigned to the property would reflect onto every host and put a
27078
- * `placement="end"` into markup no consumer wrote.
27071
+ * `placement="end"` into markup no consumer wrote. So what this tier
27072
+ * guarantees is the absence, and a sheet selects on it.
27079
27073
  * - `returnValue`: What the dialog closed with, the way `<dialog>` reports it.
27080
27074
  *
27081
27075
  * **The whole point of a `<dialog>` returning a value is lost behind a shadow
@@ -27872,7 +27866,13 @@ export type CustomElements = {
27872
27866
  * - `fields`: The fields declared inside this, in the order they were written.
27873
27867
  *
27874
27868
  * 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)
27869
+ * and threw here, and none while hydrating what one sent.
27870
+ *
27871
+ * By identity rather than by tag. A list of names can only hold the tags this
27872
+ * package knows about, so it misses any third one, which is what subclassing
27873
+ * a headless element produces, and it is also how a headless package learns a
27874
+ * styled tag. `instanceof` answers for every one of them and proves the type
27875
+ * the signature claims. (property only) (readonly)
27876
27876
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
27877
27877
  *
27878
27878
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -28396,11 +28396,12 @@ export type CustomElements = {
28396
28396
  * would give.
28397
28397
  *
28398
28398
  * **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
28399
+ * `<helix-headless-format-date
28400
+ * elapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling
28401
+ * that reads best in markup, and it cannot be the only one: measured against
28402
+ * Lit's server shim, `textContent`, `children`, `firstChild` and
28403
+ * `querySelector` are all `undefined` there, so a server has no way to see
28404
+ * it. An element rendered on a server needs the attribute; one rendered in a
28404
28405
  * browser may use either.
28405
28406
  * - `day`: How the day of the month is written, where a date is shown.
28406
28407
  * - `elapsed`: Show how long ago it was, compactly, instead of the date.
@@ -28561,12 +28562,12 @@ export type CustomElements = {
28561
28562
  * consumer has to keep by hand, and the one number a summary is told to trust
28562
28563
  * is the one it gets wrong.
28563
28564
  *
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.
28565
+ * The strip measures itself, so sizing the cells in a sheet is enough on its
28566
+ * own and these two are the estimate used until the first measurement lands.
28567
+ * Writing the attribute pins the value and stops the measurement being
28568
+ * consulted, which is what a container query or a transition on the cell size
28569
+ * wants, where what is drawn this frame is not what the arithmetic should
28570
+ * plan around.
28570
28571
  *
28571
28572
  * Zero turns the dropping off altogether, which is right for a strip in a
28572
28573
  * container that cannot get narrow.
@@ -28820,7 +28821,7 @@ export type CustomElements = {
28820
28821
  * the same way `label` becomes `aria-label` in there.
28821
28822
  *
28822
28823
  * ```html
28823
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
28824
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
28824
28825
  * ```
28825
28826
  *
28826
28827
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -29129,10 +29130,10 @@ export type CustomElements = {
29129
29130
  * **Mirrored to `data-status`, and not reflected as `status`.** It is element
29130
29131
  * state, so reflecting it puts the element's own bookkeeping into the markup
29131
29132
  * 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
29133
+ * hydration mismatch, and a host pasted back carrying `status="loaded"`
29134
+ * declares that a picture has arrived which this element has never fetched.
29135
+ * The `data-` name is the library's answer to both, being a name a re-parse
29136
+ * cannot mistake for a declaration, and it is what `data-closed` on
29136
29137
  * `Toast.Item` already does. A picture arrives after somebody fetched it,
29137
29138
  * which puts this on the safe side of hydration: a fact that can be true on
29138
29139
  * the *first* update mirrors to a custom state instead, which is what
@@ -29262,10 +29263,10 @@ export type CustomElements = {
29262
29263
  * **The attribute is `readonly`, which is the platform's spelling.** A
29263
29264
  * camelCase property needs an explicit `attribute`, and dash-casing a word
29264
29265
  * 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`.
29266
+ * warns. `<helix-headless-input readonly>` is what anybody who has written
29267
+ * HTML types; against `read-only` it parses to no property at all, and the
29268
+ * field stays editable with no error anywhere. Measured on the dash-cased
29269
+ * form, `readOnly` came back `false`.
29269
29270
  * - `reveal`: Whether a password field offers a toggle that shows what was typed.
29270
29271
  *
29271
29272
  * Ignored on every other type. A reveal on an email field would be a button
@@ -29279,9 +29280,9 @@ export type CustomElements = {
29279
29280
  *
29280
29281
  * **Not reflected.** Reflection exists so a selector can reach a value, and
29281
29282
  * 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`.
29283
+ * `type="text"` onto every `<helix-headless-input>` ever rendered, an
29284
+ * attribute no consumer's markup has, which is the fault the area rules write
29285
+ * up under `Button`'s `href`, `target` and `rel`.
29285
29286
  *
29286
29287
  * Nothing reads it from the attribute either. The real `<input>` inside takes
29287
29288
  * it as a property binding, which is what makes the keyboard and the
@@ -29825,8 +29826,7 @@ export type CustomElements = {
29825
29826
  * over something busy. `triangle` points along the axis and reads as "and
29826
29827
  * onward" rather than as a second claim about the data.
29827
29828
  *
29828
- * The shapes come from
29829
- * `helix/styled/src/shared/chart/terminus.css`, the same sheet `Sparkline` takes, so
29829
+ * The shapes come from one shared sheet, the same one `Sparkline` takes, so
29830
29830
  * the set is identical wherever one appears. **Which is why every value is
29831
29831
  * named here.** `Sparkline` shipped `square` implemented, drawn, asserted and
29832
29832
  * undocumented until the cohort before this one; this family reads the same
@@ -30097,10 +30097,10 @@ export type CustomElements = {
30097
30097
  * - `label`: Accessible name for the set.
30098
30098
  * - `type`: Which markers an ordered list draws, in `<ol type>`'s own five values.
30099
30099
  *
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>`.
30100
+ * Reflected, because this is one of the things a stylesheet selects on, each
30101
+ * value mapping to a `list-style-type`. The platform's spellings rather than
30102
+ * the CSS ones, so `<helix-headless-list kind="ordered" type="i">` is what a
30103
+ * consumer would have written on an `<ol>`.
30104
30104
  *
30105
30105
  * **`start` and `reversed` are both absent and neither can be done here.**
30106
30106
  * This renders no `<ol>`: the rows are slotted and numbered by the CSS
@@ -31347,10 +31347,10 @@ export type CustomElements = {
31347
31347
  *
31348
31348
  * **Not reflected.** Unread is a visual state, which is why the four mixins
31349
31349
  * 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.
31350
+ * `<helix-headless-notification default-read>` comes back from a server
31351
+ * without `read` and would gain it on the first update, which React reports
31352
+ * as a hydration mismatch, and which a copy of the serialized element
31353
+ * re-parses as a declaration. `:state(read)` is what the stylesheet reads.
31354
31354
  * `hydration.dom.spec.ts` holds it.
31355
31355
  * - `default-read`/`defaultRead`: State to open with, where nothing declared one.
31356
31356
  * - `locale`: Locale for the timestamp.
@@ -31546,7 +31546,7 @@ export type CustomElements = {
31546
31546
  *
31547
31547
  * Areas where markup can be added to the component.
31548
31548
  *
31549
- * - `(default)`: The notifications, as `helix-notification` children.
31549
+ * - `(default)`: The notifications.
31550
31550
  * - `footer`: Below the list, for a link to everything.
31551
31551
  * - `header`: Above the list, for a title and the mark-all control.
31552
31552
  *
@@ -32088,7 +32088,7 @@ export type CustomElements = {
32088
32088
  * **The attribute, read when it is asked for, and never a snapshot taken in
32089
32089
  * the constructor.** A field initializer runs there, and an element the HTML
32090
32090
  * 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"
32091
+ * this element, on `Radio` and on `Toggle`, `<helix-headless-option value="a"
32092
32092
  * selected>` reported `defaultSelected` as `false` both from parsed markup
32093
32093
  * and from `createElement` followed by `setAttribute`, which is every way a
32094
32094
  * consumer writes one. The snapshot could only ever be true for an element
@@ -32830,10 +32830,10 @@ export type CustomElements = {
32830
32830
  * marked letters wants `text`, which judges nothing.
32831
32831
  *
32832
32832
  * **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.
32833
+ * `type="numeric"` onto every `<helix-headless-pin-input>` ever rendered, an
32834
+ * attribute no consumer's markup had. The area rules carry the sentence
32835
+ * "reflect only what CSS selects on". The real inputs take it as a binding,
32836
+ * which is what makes the keyboard follow.
32837
32837
  * - `disabled`: Whether the control is non-interactive.
32838
32838
  *
32839
32839
  * Reflected, because the styled tier selects on it, and mirrored to
@@ -33612,7 +33612,7 @@ export type CustomElements = {
33612
33612
  * **The attribute, read when it is asked for, and never a snapshot taken in
33613
33613
  * the constructor.** A field initializer runs there, and an element the HTML
33614
33614
  * 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"
33615
+ * this element, on `Option` and on `Toggle`, `<helix-headless-radio value="a"
33616
33616
  * selected>` reported `defaultSelected` as `false` both from parsed markup
33617
33617
  * and from `createElement` followed by `setAttribute`, which is every way a
33618
33618
  * consumer writes one. The snapshot could only ever be true for an element
@@ -36094,9 +36094,9 @@ export type CustomElements = {
36094
36094
  * The row directions set them side by side, for a figure in a line of text or
36095
36095
  * a narrow strip where a stacked pair would be two lines of almost nothing.
36096
36096
  *
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.
36097
+ * A property rather than a `Flex` around it, because the unit has to stay on
36098
+ * the value's baseline whichever way the pair goes, and only this element
36099
+ * knows which of its children the unit belongs to.
36100
36100
  *
36101
36101
  * **Optional rather than defaulted to `column`, which is not a style
36102
36102
  * preference.** A reflecting property with a default writes its attribute onto
@@ -36231,7 +36231,7 @@ export type CustomElements = {
36231
36231
  *
36232
36232
  * Areas where markup can be added to the component.
36233
36233
  *
36234
- * - `(default)`: The steps, which are `helix-step` elements.
36234
+ * - `(default)`: The steps.
36235
36235
  *
36236
36236
  * ## Methods
36237
36237
  *
@@ -36308,7 +36308,7 @@ export type CustomElements = {
36308
36308
  * Areas where markup can be added to the component.
36309
36309
  *
36310
36310
  * - `(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.
36311
+ * - `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
36312
  * - `description`: A line under the name, for what the stage is for.
36313
36313
  * - `marker`: Replaces the number, or the check a complete step shows.
36314
36314
  *
@@ -36325,7 +36325,7 @@ export type CustomElements = {
36325
36325
  * - `body`: The name and its description.
36326
36326
  * - `content`: What the stage holds, while it is open.
36327
36327
  * - `description`: The line under it.
36328
- * - `label`: The step's name, which is a `helix-button`.
36328
+ * - `label`: The step's name, which is a control.
36329
36329
  * - `label-button`: The inner control.
36330
36330
  * - `lead`: The half line arriving from the step before.
36331
36331
  * - `mark`: The glyph inside the marker: a tick, a dot, or an empty ring.
@@ -36596,15 +36596,15 @@ export type CustomElements = {
36596
36596
  *
36597
36597
  * - `align`: Which edge the values line up against.
36598
36598
  *
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.
36599
+ * `end` is what a column of numbers wants, so digits of the same magnitude
36600
+ * sit above each other. Left unset the cell inherits the table's own
36601
+ * alignment, which is `start` for text in either writing direction.
36602
+ * `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
36603
+ * consumer wrote, so the table writes nothing onto them: it publishes the
36604
+ * edge to each cell under this column as `--table-cell-align`, which
36605
+ * `@fusion.dev/helix` reads. The heading is this element's own, and
36606
+ * `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
36607
+ * inline end, so in a right-to-left table it is the left.
36608
36608
  *
36609
36609
  * **Reflected, because the heading is drawn by a stylesheet and has no other
36610
36610
  * way to learn it.** Set as a property, which is how React sets it, an
@@ -36647,8 +36647,8 @@ export type CustomElements = {
36647
36647
  * - `width`: The track this column takes, as CSS.
36648
36648
  *
36649
36649
  * 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
36650
+ * `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track in
36651
+ * its place in a `Table`'s `columns`, where that table sets one, and
36652
36652
  * otherwise shares what is left over equally, as `minmax(max-content, 1fr)`.
36653
36653
  * Set here, it wins over that list, which is what lets a reader resize a
36654
36654
  * column in a table that set one.
@@ -36767,15 +36767,14 @@ export type CustomElements = {
36767
36767
  * - `loading-text`/`loadingText`: What is said while they are on their way.
36768
36768
  * - `columns`: The column widths as one track list, written once on the table.
36769
36769
  *
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.
36770
+ * With `TableColumn` children, each track sizes the column in its place, a
36771
+ * hidden column counted, so hiding one takes its track with it and the rest
36772
+ * keep theirs. The columns decide how many tracks there are and this list
36773
+ * only how wide: a track past the last column is dropped, and a column past
36774
+ * the last track shares what is left. With no columns declared it is the
36775
+ * whole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`
36776
+ * is one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves
36777
+ * its column at the default rather than taking the table down to one column.
36779
36778
  *
36780
36779
  * **A column's own `width` wins over its track here.** The width is written
36781
36780
  * on the column it sizes, which is the more particular statement, and it is
@@ -36789,13 +36788,11 @@ export type CustomElements = {
36789
36788
  * whole answer: a table given one lays its grid out in the first paint, and a
36790
36789
  * table sized only by its columns is one track wide until it upgrades.
36791
36790
  *
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.
36791
+ * **Data Table has none of this, and should not.** Its columns are its schema
36792
+ * rather than an option, so there is always a column to write a `width` on
36793
+ * and a list here would be a second way to say what that says. This table's
36794
+ * cells are markup, and a table written as rows of cells with no column
36795
+ * declared in it has nowhere else to be sized from.
36799
36796
  * - `label`: Accessible name for the table.
36800
36797
  * - `tableColumns`: The columns declared as children, in the order they are written. (property only) (readonly)
36801
36798
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -36830,7 +36827,7 @@ export type CustomElements = {
36830
36827
  * CSS variables available for styling the component.
36831
36828
  *
36832
36829
  * - `--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`)
36830
+ * - `--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
36831
  *
36835
36832
  * ## CSS Parts
36836
36833
  *
@@ -37643,8 +37640,8 @@ export type CustomElements = {
37643
37640
  *
37644
37641
  * Absent is one. `range` holds a start and an end, `multiple` holds any
37645
37642
  * 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.
37643
+ * form submits. `TimePicker` carries the longer note on the interaction and
37644
+ * on why a wheel cannot do either.
37648
37645
  * - `placeholder`: What the field says before a time is in it.
37649
37646
  * - `step`: How far apart the offered times are, in minutes.
37650
37647
  * - `time-style`/`timeStyle`: Whether the field writes the time out, or holds the value as it is.
@@ -37659,7 +37656,7 @@ export type CustomElements = {
37659
37656
  * `list` offers whole times, which is what a product with slots or opening
37660
37657
  * hours has. `wheels` splits them into an hour, a minute and a meridiem where
37661
37658
  * 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.
37659
+ * scrolling most of a day. `TimePicker` carries the longer note on the trade.
37663
37660
  *
37664
37661
  * **Optional rather than defaulted, which is not a style preference.** A
37665
37662
  * reflecting property with a default writes its attribute onto every host the
@@ -37919,7 +37916,7 @@ export type CustomElements = {
37919
37916
  *
37920
37917
  * Absent is one. `range` holds a start and an end with everything between
37921
37918
  * 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,
37919
+ * carried as one comma-separated value: the same shape `DatePicker` uses,
37923
37920
  * because it is the same question asked of a different unit.
37924
37921
  *
37925
37922
  * **A range is two picks, and a third starts over.** That is the calendar's
@@ -38436,7 +38433,7 @@ export type CustomElements = {
38436
38433
  * **Optional, and bottom-end is the absence of it.** Reflecting *and*
38437
38434
  * defaulting is the pair that writes onto a host: every toast region anybody
38438
38435
  * 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
38436
+ * consumer's server markup does not have. A sheet carries the resting
38440
38437
  * arrangement in its own `:host` rule and the selectors describe only the
38441
38438
  * departures, which is what `orientation` does.
38442
38439
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -38470,7 +38467,7 @@ export type CustomElements = {
38470
38467
  *
38471
38468
  * Areas where markup can be added to the component.
38472
38469
  *
38473
- * - `(default)`: The messages, as `helix-toast-item` elements.
38470
+ * - `(default)`: The messages.
38474
38471
  *
38475
38472
  * ## CSS Custom Properties
38476
38473
  *
@@ -38716,11 +38713,11 @@ export type CustomElements = {
38716
38713
  * **The attribute, read when it is asked for, and never a snapshot taken in
38717
38714
  * the constructor.** A field initializer runs there, and an element the HTML
38718
38715
  * 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.
38716
+ * this element, on `Option` and on `Radio`, `<helix-headless-toggle
38717
+ * value="light" selected>` reported `defaultSelected` as `false` both from
38718
+ * parsed markup and from `createElement` followed by `setAttribute`, which is
38719
+ * every way a consumer writes one. The snapshot could only ever be true for
38720
+ * an element already in the document when `customElements.define` ran.
38724
38721
  *
38725
38722
  * Nothing overwrites it either, which is what makes reading it late correct
38726
38723
  * rather than merely later: `selected` does not reflect, for the reason
@@ -39935,7 +39932,7 @@ export type CustomElements = {
39935
39932
  * Areas where markup can be added to the component.
39936
39933
  *
39937
39934
  * - `(default)`: The entries.
39938
- * - `player`: The `helix-video` they play in.
39935
+ * - `player`: The player the entries take turns in.
39939
39936
  *
39940
39937
  * ## Methods
39941
39938
  *
@@ -41241,13 +41238,13 @@ export type CustomElementsSolidJs = {
41241
41238
  * Unset shows all of them, which is what no limit means and is more useful
41242
41239
  * than refusing to render.
41243
41240
  *
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.
41241
+ * **Reflected, because the fold is a stylesheet rule and nothing else.** A
41242
+ * sheet hides past the limit one selector per value, as `FOLDS_UP_TO`
41243
+ * describes, so the attribute *is* the mechanism: a `max` that reaches this
41244
+ * property and never reaches the host matches no rule, and every avatar is
41245
+ * drawn beside a count claiming some are hidden. Markup is the safe path and
41246
+ * hides the fault; a script is the broken one, and React takes it for
41247
+ * everyone, assigning a matching property rather than an attribute.
41251
41248
  *
41252
41249
  * **Optional rather than defaulted, per the rule that a reflected property
41253
41250
  * takes no default**: `max = 0` would stamp `max="0"` onto every host that
@@ -41779,7 +41776,7 @@ export type CustomElementsSolidJs = {
41779
41776
  * - `--bar-chart-line-width`: Thickness of a `lines` series, over `--chart-stroke`. (default: `undefined`)
41780
41777
  * - `--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
41778
  * - `--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`)
41779
+ * - `--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
41780
  * - `--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
41781
  *
41785
41782
  * ## CSS Parts
@@ -41913,12 +41910,12 @@ export type CustomElementsSolidJs = {
41913
41910
  * - `current`: Whether this item is the page the reader is on.
41914
41911
  * - `href`: Where the crumb goes, and nothing where it is the current page.
41915
41912
  *
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.
41913
+ * **Optional and reflected, because a stylesheet does select on it.** A sheet
41914
+ * writes `:host(:not([href])) [part="link"]` to take the block padding off a
41915
+ * crumb that is not a link, so the attribute is what decides how tall a crumb
41916
+ * is. Unreflected, an `href` set from script reached the property, rendered
41917
+ * the anchor, and left the host looking unlinked: the crumb drew at 20px
41918
+ * where a markup twin drew at 28.
41922
41919
  *
41923
41920
  * Optional rather than defaulted, which is the general rule that a reflected
41924
41921
  * property takes no default: an `href` written onto every host would be a link
@@ -42206,7 +42203,7 @@ export type CustomElementsSolidJs = {
42206
42203
  * the same way `label` becomes `aria-label` in there.
42207
42204
  *
42208
42205
  * ```html
42209
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
42206
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
42210
42207
  * ```
42211
42208
  *
42212
42209
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -42770,13 +42767,13 @@ export type CustomElementsSolidJs = {
42770
42767
  * **The number is published to the styles rather than enumerated by them**,
42771
42768
  * as `--carousel-per-view` on the track, which is what keeps a width and a
42772
42769
  * 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.
42770
+ * so a sheet enumerating `per-view="2"` through `5` is a ceiling of five, and
42771
+ * above it the pane falls back to one across while this file goes on counting
42772
+ * positions. Measured in Chromium over eight slides against such a sheet, six
42773
+ * across gave three dots, a pane taking the whole track and five slides
42774
+ * reachable only by dragging. Published from here there is no ceiling to
42775
+ * exceed, and every sheet reads the same declaration. `runEnd` publishes its
42776
+ * correction the same way and for the same reason.
42780
42777
  *
42781
42778
  * **On the track and not on the host.** A custom property on the host is a
42782
42779
  * reflected attribute by another name: it would arrive on upgrade, and a
@@ -42801,8 +42798,8 @@ export type CustomElementsSolidJs = {
42801
42798
  * `auto` track is handed nothing. A count stays for the design that calls for
42802
42799
  * exactly three.
42803
42800
  *
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.
42801
+ * A sheet says how it divides, and the `auto` example here carries the same
42802
+ * three lines for a consumer writing their own.
42806
42803
  *
42807
42804
  * **A value rather than the resting behavior**, which is what the
42808
42805
  * responsiveness policy asks of every axis that a box decides: a splitter
@@ -43184,13 +43181,13 @@ export type CustomElementsSolidJs = {
43184
43181
  *
43185
43182
  * **Not reflected, and the default is why.** A reflected property that
43186
43183
  * 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.
43184
+ * consumer wrote one, so the server serves `<helix-headless-chat label="x">`
43185
+ * and the client turns it into `<helix-headless-chat label="x" pinned>`: a
43186
+ * hydration mismatch a React consumer reports and does not patch up. Nothing
43187
+ * needs the attribute either, because the one thing that changes with the pin
43188
+ * is the way back, and that is a part inside the shadow tree where a
43189
+ * stylesheet can already reach it. Measured rather than assumed: `label,
43190
+ * pinned` after upgrade against `label` from the server.
43194
43191
  * - `threshold`: How near the bottom still counts as being at it, in pixels.
43195
43192
  *
43196
43193
  * A hook rather than a constant, because the right number depends on how tall
@@ -43240,7 +43237,7 @@ export type CustomElementsSolidJs = {
43240
43237
  *
43241
43238
  * Areas where markup can be added to the component.
43242
43239
  *
43243
- * - `(default)`: The turns, as `helix-chat-message` children.
43240
+ * - `(default)`: The turns.
43244
43241
  * - `composer`: Below the transcript, where the reader writes.
43245
43242
  * - `header`: Above the transcript.
43246
43243
  * - `resume`: The way back to the bottom.
@@ -43703,11 +43700,11 @@ export type CustomElementsSolidJs = {
43703
43700
  * round. The platform already writes booleans like this for the same reason,
43704
43701
  * `novalidate` and `nomodule` and `noreferrer` among them.
43705
43702
  *
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.
43703
+ * **Reflected, because the gutter is a stylesheet rule.** A sheet reserves
43704
+ * the copy button's width with `:host(:not([no-copy]))`, so the attribute is
43705
+ * what decides whether the block pays for a control. Unreflected, setting it
43706
+ * from script takes the button away (`render` reads the property) and leaves
43707
+ * the 40px it stood in reserved.
43711
43708
  *
43712
43709
  * A false boolean reflects as the attribute's absence, so this costs no
43713
43710
  * `no-copy=""` on hosts that never asked for one, and the rule about a
@@ -44241,10 +44238,10 @@ export type CustomElementsSolidJs = {
44241
44238
  *
44242
44239
  * **A color is exactly as requirable as a date**, which is the comparison
44243
44240
  * 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.
44241
+ * and reports its value, so a consumer writing `<helix-headless-color-picker
44242
+ * name="brand" required>` inside a form has every reason to expect the form
44243
+ * to refuse an empty one. Its two siblings in the same composition position,
44244
+ * Date Picker and Time Picker, both check it.
44248
44245
  *
44249
44246
  * Written out rather than taken from `MixinField`, for the reason those two
44250
44247
  * record: the mixin brings a label, a hint and a feedback region, and this is
@@ -44592,7 +44589,7 @@ export type CustomElementsSolidJs = {
44592
44589
  *
44593
44590
  * Areas where markup can be added to the component.
44594
44591
  *
44595
- * - `(default)`: The options, which are `helix-option` elements.
44592
+ * - `(default)`: The options.
44596
44593
  * - `end`: After it, for a unit or a clear button.
44597
44594
  * - `indicator`: Replaces the caret saying the field opens.
44598
44595
  * - `start`: Before the text, for an icon.
@@ -44782,7 +44779,7 @@ export type CustomElementsSolidJs = {
44782
44779
  *
44783
44780
  * Areas where markup can be added to the component.
44784
44781
  *
44785
- * - `(default)`: The commands, which are `helix-option` elements and their groups.
44782
+ * - `(default)`: The commands, and any groups of them.
44786
44783
  * - `footer`: Under the list, for the keys a reader can press.
44787
44784
  *
44788
44785
  * ## Methods
@@ -44894,7 +44891,7 @@ export type CustomElementsSolidJs = {
44894
44891
  * the same way `label` becomes `aria-label` in there.
44895
44892
  *
44896
44893
  * ```html
44897
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
44894
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
44898
44895
  * ```
44899
44896
  *
44900
44897
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -45203,9 +45200,9 @@ export type CustomElementsSolidJs = {
45203
45200
  *
45204
45201
  * **It announces nothing, and that is not an omission.** Nothing in this
45205
45202
  * 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.
45203
+ * `PaginationSize`, which a consumer puts in the `footer` slot and answers
45204
+ * themselves. Routing this through `requestChange` would announce an event
45205
+ * the element never has cause to fire.
45209
45206
  * - `total`: How many rows the whole result has, where this element cannot count them.
45210
45207
  *
45211
45208
  * Only read in `server` mode, where `rows` is one page and its length says
@@ -45285,7 +45282,7 @@ export type CustomElementsSolidJs = {
45285
45282
  *
45286
45283
  * Areas where markup can be added to the component.
45287
45284
  *
45288
- * - `(default)`: The columns, declared as `helix-table-column` children.
45285
+ * - `(default)`: The columns, declared rather than drawn.
45289
45286
  * - `footer`: Below the grid, replacing the pagination this would otherwise draw.
45290
45287
  * - `toolbar`: Above the grid, for a search field or actions.
45291
45288
  *
@@ -45330,8 +45327,8 @@ export type CustomElementsSolidJs = {
45330
45327
  * - `--data-table-padding-inline`: Space either side of a cell's content. (default: `undefined`)
45331
45328
  * - `--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
45329
  * - `--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`)
45330
+ * - `--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`)
45331
+ * - `--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
45332
  *
45336
45333
  * ## CSS Parts
45337
45334
  *
@@ -46680,10 +46677,10 @@ export type CustomElementsSolidJs = {
46680
46677
  * not, rather than shown or hidden by CSS.
46681
46678
  * - `placement`: Which edge the drawer comes from.
46682
46679
  *
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
46680
+ * Unset is `end`, and it stays unset rather than being written down: a
46685
46681
  * default assigned to the property would reflect onto every host and put a
46686
- * `placement="end"` into markup no consumer wrote.
46682
+ * `placement="end"` into markup no consumer wrote. So what this tier
46683
+ * guarantees is the absence, and a sheet selects on it.
46687
46684
  * - `returnValue`: What the dialog closed with, the way `<dialog>` reports it.
46688
46685
  *
46689
46686
  * **The whole point of a `<dialog>` returning a value is lost behind a shadow
@@ -47503,7 +47500,13 @@ export type CustomElementsSolidJs = {
47503
47500
  * - `fields`: The fields declared inside this, in the order they were written.
47504
47501
  *
47505
47502
  * 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)
47503
+ * and threw here, and none while hydrating what one sent.
47504
+ *
47505
+ * By identity rather than by tag. A list of names can only hold the tags this
47506
+ * package knows about, so it misses any third one, which is what subclassing
47507
+ * a headless element produces, and it is also how a headless package learns a
47508
+ * styled tag. `instanceof` answers for every one of them and proves the type
47509
+ * the signature claims. (property only) (readonly)
47507
47510
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
47508
47511
  *
47509
47512
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -48038,11 +48041,12 @@ export type CustomElementsSolidJs = {
48038
48041
  * would give.
48039
48042
  *
48040
48043
  * **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
48044
+ * `<helix-headless-format-date
48045
+ * elapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling
48046
+ * that reads best in markup, and it cannot be the only one: measured against
48047
+ * Lit's server shim, `textContent`, `children`, `firstChild` and
48048
+ * `querySelector` are all `undefined` there, so a server has no way to see
48049
+ * it. An element rendered on a server needs the attribute; one rendered in a
48046
48050
  * browser may use either.
48047
48051
  * - `day`: How the day of the month is written, where a date is shown.
48048
48052
  * - `elapsed`: Show how long ago it was, compactly, instead of the date.
@@ -48208,12 +48212,12 @@ export type CustomElementsSolidJs = {
48208
48212
  * consumer has to keep by hand, and the one number a summary is told to trust
48209
48213
  * is the one it gets wrong.
48210
48214
  *
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.
48215
+ * The strip measures itself, so sizing the cells in a sheet is enough on its
48216
+ * own and these two are the estimate used until the first measurement lands.
48217
+ * Writing the attribute pins the value and stops the measurement being
48218
+ * consulted, which is what a container query or a transition on the cell size
48219
+ * wants, where what is drawn this frame is not what the arithmetic should
48220
+ * plan around.
48217
48221
  *
48218
48222
  * Zero turns the dropping off altogether, which is right for a strip in a
48219
48223
  * container that cannot get narrow.
@@ -48470,7 +48474,7 @@ export type CustomElementsSolidJs = {
48470
48474
  * the same way `label` becomes `aria-label` in there.
48471
48475
  *
48472
48476
  * ```html
48473
- * <helix-button commandfor="confirm" command="--show">Delete…</helix-button>
48477
+ * <helix-headless-button commandfor="confirm" command="--show">Delete…</helix-headless-button>
48474
48478
  * ```
48475
48479
  *
48476
48480
  * `commandFor` spells its attribute out, because Lit lowercases a property
@@ -48784,10 +48788,10 @@ export type CustomElementsSolidJs = {
48784
48788
  * **Mirrored to `data-status`, and not reflected as `status`.** It is element
48785
48789
  * state, so reflecting it puts the element's own bookkeeping into the markup
48786
48790
  * 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
48791
+ * hydration mismatch, and a host pasted back carrying `status="loaded"`
48792
+ * declares that a picture has arrived which this element has never fetched.
48793
+ * The `data-` name is the library's answer to both, being a name a re-parse
48794
+ * cannot mistake for a declaration, and it is what `data-closed` on
48791
48795
  * `Toast.Item` already does. A picture arrives after somebody fetched it,
48792
48796
  * which puts this on the safe side of hydration: a fact that can be true on
48793
48797
  * the *first* update mirrors to a custom state instead, which is what
@@ -48922,10 +48926,10 @@ export type CustomElementsSolidJs = {
48922
48926
  * **The attribute is `readonly`, which is the platform's spelling.** A
48923
48927
  * camelCase property needs an explicit `attribute`, and dash-casing a word
48924
48928
  * 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`.
48929
+ * warns. `<helix-headless-input readonly>` is what anybody who has written
48930
+ * HTML types; against `read-only` it parses to no property at all, and the
48931
+ * field stays editable with no error anywhere. Measured on the dash-cased
48932
+ * form, `readOnly` came back `false`.
48929
48933
  * - `reveal`: Whether a password field offers a toggle that shows what was typed.
48930
48934
  *
48931
48935
  * Ignored on every other type. A reveal on an email field would be a button
@@ -48939,9 +48943,9 @@ export type CustomElementsSolidJs = {
48939
48943
  *
48940
48944
  * **Not reflected.** Reflection exists so a selector can reach a value, and
48941
48945
  * 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`.
48946
+ * `type="text"` onto every `<helix-headless-input>` ever rendered, an
48947
+ * attribute no consumer's markup has, which is the fault the area rules write
48948
+ * up under `Button`'s `href`, `target` and `rel`.
48945
48949
  *
48946
48950
  * Nothing reads it from the attribute either. The real `<input>` inside takes
48947
48951
  * it as a property binding, which is what makes the keyboard and the
@@ -49495,8 +49499,7 @@ export type CustomElementsSolidJs = {
49495
49499
  * over something busy. `triangle` points along the axis and reads as "and
49496
49500
  * onward" rather than as a second claim about the data.
49497
49501
  *
49498
- * The shapes come from
49499
- * `helix/styled/src/shared/chart/terminus.css`, the same sheet `Sparkline` takes, so
49502
+ * The shapes come from one shared sheet, the same one `Sparkline` takes, so
49500
49503
  * the set is identical wherever one appears. **Which is why every value is
49501
49504
  * named here.** `Sparkline` shipped `square` implemented, drawn, asserted and
49502
49505
  * undocumented until the cohort before this one; this family reads the same
@@ -49773,10 +49776,10 @@ export type CustomElementsSolidJs = {
49773
49776
  * - `label`: Accessible name for the set.
49774
49777
  * - `type`: Which markers an ordered list draws, in `<ol type>`'s own five values.
49775
49778
  *
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>`.
49779
+ * Reflected, because this is one of the things a stylesheet selects on, each
49780
+ * value mapping to a `list-style-type`. The platform's spellings rather than
49781
+ * the CSS ones, so `<helix-headless-list kind="ordered" type="i">` is what a
49782
+ * consumer would have written on an `<ol>`.
49780
49783
  *
49781
49784
  * **`start` and `reversed` are both absent and neither can be done here.**
49782
49785
  * This renders no `<ol>`: the rows are slotted and numbered by the CSS
@@ -51050,10 +51053,10 @@ export type CustomElementsSolidJs = {
51050
51053
  *
51051
51054
  * **Not reflected.** Unread is a visual state, which is why the four mixins
51052
51055
  * 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.
51056
+ * `<helix-headless-notification default-read>` comes back from a server
51057
+ * without `read` and would gain it on the first update, which React reports
51058
+ * as a hydration mismatch, and which a copy of the serialized element
51059
+ * re-parses as a declaration. `:state(read)` is what the stylesheet reads.
51057
51060
  * `hydration.dom.spec.ts` holds it.
51058
51061
  * - `default-read`/`defaultRead`: State to open with, where nothing declared one.
51059
51062
  * - `locale`: Locale for the timestamp.
@@ -51252,7 +51255,7 @@ export type CustomElementsSolidJs = {
51252
51255
  *
51253
51256
  * Areas where markup can be added to the component.
51254
51257
  *
51255
- * - `(default)`: The notifications, as `helix-notification` children.
51258
+ * - `(default)`: The notifications.
51256
51259
  * - `footer`: Below the list, for a link to everything.
51257
51260
  * - `header`: Above the list, for a title and the mark-all control.
51258
51261
  *
@@ -51806,7 +51809,7 @@ export type CustomElementsSolidJs = {
51806
51809
  * **The attribute, read when it is asked for, and never a snapshot taken in
51807
51810
  * the constructor.** A field initializer runs there, and an element the HTML
51808
51811
  * 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"
51812
+ * this element, on `Radio` and on `Toggle`, `<helix-headless-option value="a"
51810
51813
  * selected>` reported `defaultSelected` as `false` both from parsed markup
51811
51814
  * and from `createElement` followed by `setAttribute`, which is every way a
51812
51815
  * consumer writes one. The snapshot could only ever be true for an element
@@ -52565,10 +52568,10 @@ export type CustomElementsSolidJs = {
52565
52568
  * marked letters wants `text`, which judges nothing.
52566
52569
  *
52567
52570
  * **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.
52571
+ * `type="numeric"` onto every `<helix-headless-pin-input>` ever rendered, an
52572
+ * attribute no consumer's markup had. The area rules carry the sentence
52573
+ * "reflect only what CSS selects on". The real inputs take it as a binding,
52574
+ * which is what makes the keyboard follow.
52572
52575
  * - `disabled`: Whether the control is non-interactive.
52573
52576
  *
52574
52577
  * Reflected, because the styled tier selects on it, and mirrored to
@@ -53367,7 +53370,7 @@ export type CustomElementsSolidJs = {
53367
53370
  * **The attribute, read when it is asked for, and never a snapshot taken in
53368
53371
  * the constructor.** A field initializer runs there, and an element the HTML
53369
53372
  * 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"
53373
+ * this element, on `Option` and on `Toggle`, `<helix-headless-radio value="a"
53371
53374
  * selected>` reported `defaultSelected` as `false` both from parsed markup
53372
53375
  * and from `createElement` followed by `setAttribute`, which is every way a
53373
53376
  * consumer writes one. The snapshot could only ever be true for an element
@@ -55908,9 +55911,9 @@ export type CustomElementsSolidJs = {
55908
55911
  * The row directions set them side by side, for a figure in a line of text or
55909
55912
  * a narrow strip where a stacked pair would be two lines of almost nothing.
55910
55913
  *
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.
55914
+ * A property rather than a `Flex` around it, because the unit has to stay on
55915
+ * the value's baseline whichever way the pair goes, and only this element
55916
+ * knows which of its children the unit belongs to.
55914
55917
  *
55915
55918
  * **Optional rather than defaulted to `column`, which is not a style
55916
55919
  * preference.** A reflecting property with a default writes its attribute onto
@@ -56047,7 +56050,7 @@ export type CustomElementsSolidJs = {
56047
56050
  *
56048
56051
  * Areas where markup can be added to the component.
56049
56052
  *
56050
- * - `(default)`: The steps, which are `helix-step` elements.
56053
+ * - `(default)`: The steps.
56051
56054
  *
56052
56055
  * ## Methods
56053
56056
  *
@@ -56129,7 +56132,7 @@ export type CustomElementsSolidJs = {
56129
56132
  * Areas where markup can be added to the component.
56130
56133
  *
56131
56134
  * - `(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.
56135
+ * - `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
56136
  * - `description`: A line under the name, for what the stage is for.
56134
56137
  * - `marker`: Replaces the number, or the check a complete step shows.
56135
56138
  *
@@ -56146,7 +56149,7 @@ export type CustomElementsSolidJs = {
56146
56149
  * - `body`: The name and its description.
56147
56150
  * - `content`: What the stage holds, while it is open.
56148
56151
  * - `description`: The line under it.
56149
- * - `label`: The step's name, which is a `helix-button`.
56152
+ * - `label`: The step's name, which is a control.
56150
56153
  * - `label-button`: The inner control.
56151
56154
  * - `lead`: The half line arriving from the step before.
56152
56155
  * - `mark`: The glyph inside the marker: a tick, a dot, or an empty ring.
@@ -56425,15 +56428,15 @@ export type CustomElementsSolidJs = {
56425
56428
  *
56426
56429
  * - `align`: Which edge the values line up against.
56427
56430
  *
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.
56431
+ * `end` is what a column of numbers wants, so digits of the same magnitude
56432
+ * sit above each other. Left unset the cell inherits the table's own
56433
+ * alignment, which is `start` for text in either writing direction.
56434
+ * `DataTable` aligns the cells it draws. A `Table`'s cells are markup the
56435
+ * consumer wrote, so the table writes nothing onto them: it publishes the
56436
+ * edge to each cell under this column as `--table-cell-align`, which
56437
+ * `@fusion.dev/helix` reads. The heading is this element's own, and
56438
+ * `@fusion.dev/helix` sets it to the same edge in either table. `end` is the
56439
+ * inline end, so in a right-to-left table it is the left.
56437
56440
  *
56438
56441
  * **Reflected, because the heading is drawn by a stylesheet and has no other
56439
56442
  * way to learn it.** Set as a property, which is how React sets it, an
@@ -56476,8 +56479,8 @@ export type CustomElementsSolidJs = {
56476
56479
  * - `width`: The track this column takes, as CSS.
56477
56480
  *
56478
56481
  * 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
56482
+ * `16rem`, `auto`, `minmax(0, 2fr)`. Left unset the column takes the track in
56483
+ * its place in a `Table`'s `columns`, where that table sets one, and
56481
56484
  * otherwise shares what is left over equally, as `minmax(max-content, 1fr)`.
56482
56485
  * Set here, it wins over that list, which is what lets a reader resize a
56483
56486
  * column in a table that set one.
@@ -56599,15 +56602,14 @@ export type CustomElementsSolidJs = {
56599
56602
  * - `loading-text`/`loadingText`: What is said while they are on their way.
56600
56603
  * - `columns`: The column widths as one track list, written once on the table.
56601
56604
  *
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.
56605
+ * With `TableColumn` children, each track sizes the column in its place, a
56606
+ * hidden column counted, so hiding one takes its track with it and the rest
56607
+ * keep theirs. The columns decide how many tracks there are and this list
56608
+ * only how wide: a track past the last column is dropped, and a column past
56609
+ * the last track shares what is left. With no columns declared it is the
56610
+ * whole track list. Tracks count as the grid counts them, so `minmax(0, 1fr)`
56611
+ * is one and `repeat(2, 8rem)` is two, and one the grid would refuse leaves
56612
+ * its column at the default rather than taking the table down to one column.
56611
56613
  *
56612
56614
  * **A column's own `width` wins over its track here.** The width is written
56613
56615
  * on the column it sizes, which is the more particular statement, and it is
@@ -56621,13 +56623,11 @@ export type CustomElementsSolidJs = {
56621
56623
  * whole answer: a table given one lays its grid out in the first paint, and a
56622
56624
  * table sized only by its columns is one track wide until it upgrades.
56623
56625
  *
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.
56626
+ * **Data Table has none of this, and should not.** Its columns are its schema
56627
+ * rather than an option, so there is always a column to write a `width` on
56628
+ * and a list here would be a second way to say what that says. This table's
56629
+ * cells are markup, and a table written as rows of cells with no column
56630
+ * declared in it has nowhere else to be sized from.
56631
56631
  * - `label`: Accessible name for the table.
56632
56632
  * - `tableColumns`: The columns declared as children, in the order they are written. (property only) (readonly)
56633
56633
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -56662,7 +56662,7 @@ export type CustomElementsSolidJs = {
56662
56662
  * CSS variables available for styling the component.
56663
56663
  *
56664
56664
  * - `--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`)
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. `columns` is the one to set. (default: `undefined`)
56666
56666
  *
56667
56667
  * ## CSS Parts
56668
56668
  *
@@ -57497,8 +57497,8 @@ export type CustomElementsSolidJs = {
57497
57497
  *
57498
57498
  * Absent is one. `range` holds a start and an end, `multiple` holds any
57499
57499
  * 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.
57500
+ * form submits. `TimePicker` carries the longer note on the interaction and
57501
+ * on why a wheel cannot do either.
57502
57502
  * - `placeholder`: What the field says before a time is in it.
57503
57503
  * - `step`: How far apart the offered times are, in minutes.
57504
57504
  * - `time-style`/`timeStyle`: Whether the field writes the time out, or holds the value as it is.
@@ -57513,7 +57513,7 @@ export type CustomElementsSolidJs = {
57513
57513
  * `list` offers whole times, which is what a product with slots or opening
57514
57514
  * hours has. `wheels` splits them into an hour, a minute and a meridiem where
57515
57515
  * 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.
57516
+ * scrolling most of a day. `TimePicker` carries the longer note on the trade.
57517
57517
  *
57518
57518
  * **Optional rather than defaulted, which is not a style preference.** A
57519
57519
  * reflecting property with a default writes its attribute onto every host the
@@ -57776,7 +57776,7 @@ export type CustomElementsSolidJs = {
57776
57776
  *
57777
57777
  * Absent is one. `range` holds a start and an end with everything between
57778
57778
  * 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,
57779
+ * carried as one comma-separated value: the same shape `DatePicker` uses,
57780
57780
  * because it is the same question asked of a different unit.
57781
57781
  *
57782
57782
  * **A range is two picks, and a third starts over.** That is the calendar's
@@ -58305,7 +58305,7 @@ export type CustomElementsSolidJs = {
58305
58305
  * **Optional, and bottom-end is the absence of it.** Reflecting *and*
58306
58306
  * defaulting is the pair that writes onto a host: every toast region anybody
58307
58307
  * 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
58308
+ * consumer's server markup does not have. A sheet carries the resting
58309
58309
  * arrangement in its own `:host` rule and the selectors describe only the
58310
58310
  * departures, which is what `orientation` does.
58311
58311
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -58339,7 +58339,7 @@ export type CustomElementsSolidJs = {
58339
58339
  *
58340
58340
  * Areas where markup can be added to the component.
58341
58341
  *
58342
- * - `(default)`: The messages, as `helix-toast-item` elements.
58342
+ * - `(default)`: The messages.
58343
58343
  *
58344
58344
  * ## CSS Custom Properties
58345
58345
  *
@@ -58593,11 +58593,11 @@ export type CustomElementsSolidJs = {
58593
58593
  * **The attribute, read when it is asked for, and never a snapshot taken in
58594
58594
  * the constructor.** A field initializer runs there, and an element the HTML
58595
58595
  * 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.
58596
+ * this element, on `Option` and on `Radio`, `<helix-headless-toggle
58597
+ * value="light" selected>` reported `defaultSelected` as `false` both from
58598
+ * parsed markup and from `createElement` followed by `setAttribute`, which is
58599
+ * every way a consumer writes one. The snapshot could only ever be true for
58600
+ * an element already in the document when `customElements.define` ran.
58601
58601
  *
58602
58602
  * Nothing overwrites it either, which is what makes reading it late correct
58603
58603
  * rather than merely later: `selected` does not reflect, for the reason
@@ -59842,7 +59842,7 @@ export type CustomElementsSolidJs = {
59842
59842
  * Areas where markup can be added to the component.
59843
59843
  *
59844
59844
  * - `(default)`: The entries.
59845
- * - `player`: The `helix-video` they play in.
59845
+ * - `player`: The player the entries take turns in.
59846
59846
  *
59847
59847
  * ## Methods
59848
59848
  *
@@ -60348,7 +60348,7 @@ export type CustomCssProperties = {
60348
60348
  "--bar-chart-line-width"?: (string) | undefined;
60349
60349
  /** 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
60350
  "--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. */
60351
+ /** 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
60352
  "--bar-chart-secondary"?: (string) | undefined;
60353
60353
  /** 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
60354
  "--chart-bar-wash"?: (string) | undefined;
@@ -60572,9 +60572,9 @@ export type CustomCssProperties = {
60572
60572
  "--data-table-rule-color"?: (string) | undefined;
60573
60573
  /** Type size, headings and cells alike. */
60574
60574
  "--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. */
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; Table publishes `--table-cell-align` for the same attribute on the cells a consumer wrote, under its own family's name. */
60576
60576
  "--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. */
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. A column's `width` is the one to set. */
60578
60578
  "--data-table-template"?: (string) | undefined;
60579
60579
  /** Fill behind the field. */
60580
60580
  "--date-input-background-color"?: (string) | undefined;
@@ -61178,7 +61178,7 @@ export type CustomCssProperties = {
61178
61178
  "--table-cell-align"?: (string) | undefined;
61179
61179
  /** Track list for the columns, which wins over the one the columns worked out. */
61180
61180
  "--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. */
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. `columns` is the one to set. */
61182
61182
  "--table-template"?: (string) | undefined;
61183
61183
  /** Fill behind the tag. */
61184
61184
  "--tag-background-color"?: (string) | undefined;