@fusion.dev/helix-headless 0.47.0 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/types/jsx.d.ts CHANGED
@@ -18,6 +18,7 @@ import type {
18
18
  HelixDismissEvent,
19
19
  HelixFacetEvent,
20
20
  HelixFilterEvent,
21
+ HelixFormElement,
21
22
  HelixHeadlessAccordion,
22
23
  HelixHeadlessAccordionItem,
23
24
  HelixHeadlessAnnouncement,
@@ -1839,6 +1840,27 @@ clamps to the last *slide*, so three of the six indicators point at an
1839
1840
  offset the track has already reached: pressing next walks the dots to the
1840
1841
  end while the slides stop moving a third of the way through.
1841
1842
 
1843
+ **The number is published to the styles rather than enumerated by them**,
1844
+ as `--carousel-per-view` on the track, which is what keeps a width and a
1845
+ count from disagreeing. A sheet can only name a value it wrote a rule for,
1846
+ so the styled tier enumerated `per-view="2"` through `5` and called five a
1847
+ judgment; above it the pane fell back to one across while this file went on
1848
+ counting positions. Measured in Chromium over eight slides, six across gave
1849
+ three dots, a pane taking the whole track and five slides reachable only by
1850
+ dragging. Written from here there is no ceiling to exceed, and a consumer's
1851
+ own sheet reads the same declaration the styled one does. `runEnd` publishes
1852
+ its correction the same way and for the same reason.
1853
+
1854
+ **On the track and not on the host.** A custom property on the host is a
1855
+ reflected attribute by another name: it would arrive on upgrade, and a
1856
+ consumer's server markup never had it. Inside the component's own shadow
1857
+ root it serializes with the rest of the template on the server, and the
1858
+ track's own declaration beats anything a consumer inherits in, so the
1859
+ attribute is the one answer to how wide a pane is.
1860
+
1861
+ A value the track cannot honor is taken to the nearest one it can, by
1862
+ `across`, and both tiers read that rather than this.
1863
+
1842
1864
  No default, because it reflects. A reflected property with a value writes
1843
1865
  its attribute on upgrade, and the host then carries something a consumer's
1844
1866
  server markup never had, which React reports as a mismatch. The one-across
@@ -1855,6 +1877,27 @@ clamps to the last *slide*, so three of the six indicators point at an
1855
1877
  offset the track has already reached: pressing next walks the dots to the
1856
1878
  end while the slides stop moving a third of the way through.
1857
1879
 
1880
+ **The number is published to the styles rather than enumerated by them**,
1881
+ as `--carousel-per-view` on the track, which is what keeps a width and a
1882
+ count from disagreeing. A sheet can only name a value it wrote a rule for,
1883
+ so the styled tier enumerated `per-view="2"` through `5` and called five a
1884
+ judgment; above it the pane fell back to one across while this file went on
1885
+ counting positions. Measured in Chromium over eight slides, six across gave
1886
+ three dots, a pane taking the whole track and five slides reachable only by
1887
+ dragging. Written from here there is no ceiling to exceed, and a consumer's
1888
+ own sheet reads the same declaration the styled one does. `runEnd` publishes
1889
+ its correction the same way and for the same reason.
1890
+
1891
+ **On the track and not on the host.** A custom property on the host is a
1892
+ reflected attribute by another name: it would arrive on upgrade, and a
1893
+ consumer's server markup never had it. Inside the component's own shadow
1894
+ root it serializes with the rest of the template on the server, and the
1895
+ track's own declaration beats anything a consumer inherits in, so the
1896
+ attribute is the one answer to how wide a pane is.
1897
+
1898
+ A value the track cannot honor is taken to the nearest one it can, by
1899
+ `across`, and both tiers read that rather than this.
1900
+
1858
1901
  No default, because it reflects. A reflected property with a value writes
1859
1902
  its attribute on upgrade, and the host then carries something a consumer's
1860
1903
  server markup never had, which React reports as a mismatch. The one-across
@@ -1940,6 +1983,27 @@ clamps to the last *slide*, so three of the six indicators point at an
1940
1983
  offset the track has already reached: pressing next walks the dots to the
1941
1984
  end while the slides stop moving a third of the way through.
1942
1985
 
1986
+ **The number is published to the styles rather than enumerated by them**,
1987
+ as `--carousel-per-view` on the track, which is what keeps a width and a
1988
+ count from disagreeing. A sheet can only name a value it wrote a rule for,
1989
+ so the styled tier enumerated `per-view="2"` through `5` and called five a
1990
+ judgment; above it the pane fell back to one across while this file went on
1991
+ counting positions. Measured in Chromium over eight slides, six across gave
1992
+ three dots, a pane taking the whole track and five slides reachable only by
1993
+ dragging. Written from here there is no ceiling to exceed, and a consumer's
1994
+ own sheet reads the same declaration the styled one does. `runEnd` publishes
1995
+ its correction the same way and for the same reason.
1996
+
1997
+ **On the track and not on the host.** A custom property on the host is a
1998
+ reflected attribute by another name: it would arrive on upgrade, and a
1999
+ consumer's server markup never had it. Inside the component's own shadow
2000
+ root it serializes with the rest of the template on the server, and the
2001
+ track's own declaration beats anything a consumer inherits in, so the
2002
+ attribute is the one answer to how wide a pane is.
2003
+
2004
+ A value the track cannot honor is taken to the nearest one it can, by
2005
+ `across`, and both tiers read that rather than this.
2006
+
1943
2007
  No default, because it reflects. A reflected property with a value writes
1944
2008
  its attribute on upgrade, and the host then carries something a consumer's
1945
2009
  server markup never had, which React reports as a mismatch. The one-across
@@ -1956,6 +2020,27 @@ clamps to the last *slide*, so three of the six indicators point at an
1956
2020
  offset the track has already reached: pressing next walks the dots to the
1957
2021
  end while the slides stop moving a third of the way through.
1958
2022
 
2023
+ **The number is published to the styles rather than enumerated by them**,
2024
+ as `--carousel-per-view` on the track, which is what keeps a width and a
2025
+ count from disagreeing. A sheet can only name a value it wrote a rule for,
2026
+ so the styled tier enumerated `per-view="2"` through `5` and called five a
2027
+ judgment; above it the pane fell back to one across while this file went on
2028
+ counting positions. Measured in Chromium over eight slides, six across gave
2029
+ three dots, a pane taking the whole track and five slides reachable only by
2030
+ dragging. Written from here there is no ceiling to exceed, and a consumer's
2031
+ own sheet reads the same declaration the styled one does. `runEnd` publishes
2032
+ its correction the same way and for the same reason.
2033
+
2034
+ **On the track and not on the host.** A custom property on the host is a
2035
+ reflected attribute by another name: it would arrive on upgrade, and a
2036
+ consumer's server markup never had it. Inside the component's own shadow
2037
+ root it serializes with the rest of the template on the server, and the
2038
+ track's own declaration beats anything a consumer inherits in, so the
2039
+ attribute is the one answer to how wide a pane is.
2040
+
2041
+ A value the track cannot honor is taken to the nearest one it can, by
2042
+ `across`, and both tiers read that rather than this.
2043
+
1959
2044
  No default, because it reflects. A reflected property with a value writes
1960
2045
  its attribute on upgrade, and the host then carries something a consumer's
1961
2046
  server markup never had, which React reports as a mismatch. The one-across
@@ -3070,6 +3155,67 @@ answer to which one is authoritative or which has the caret. Do not close it
3070
3155
  the other way round, with Color Input dropping its own field: the value
3071
3156
  would then be unreadable and unpasteable without opening a panel. */
3072
3157
  noValue?: (HelixHeadlessColorPicker["noValue"]) | undefined;
3158
+ /** Whether the control refuses changes while still submitting its value.
3159
+
3160
+ **Enforced by refusing every request in one place**, which is the seam this
3161
+ component already has: `requestValue` is what every path here comes through,
3162
+ and gating it once is what stops the next call site from being written
3163
+ without the check.
3164
+
3165
+ Not `disabled`, which is the confusion worth naming: a disabled control
3166
+ submits nothing and leaves the tab order, and a read-only one submits its
3167
+ value and stays reachable, which is what a form showing a color somebody
3168
+ else set needs.
3169
+
3170
+ **One gate is not enough here, and the second is `move`.** This picker
3171
+ holds a model beside its value, which Date Picker and Time Picker do not:
3172
+ `moved` is the HSB the square is drawn from, and it is written before the
3173
+ value is requested. Gating only the request would leave the square under
3174
+ the reader's pointer and the value where it was, which is a control that
3175
+ refuses and looks like it accepted. */
3176
+ readonly?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
3177
+ /** Whether the control refuses changes while still submitting its value.
3178
+
3179
+ **Enforced by refusing every request in one place**, which is the seam this
3180
+ component already has: `requestValue` is what every path here comes through,
3181
+ and gating it once is what stops the next call site from being written
3182
+ without the check.
3183
+
3184
+ Not `disabled`, which is the confusion worth naming: a disabled control
3185
+ submits nothing and leaves the tab order, and a read-only one submits its
3186
+ value and stays reachable, which is what a form showing a color somebody
3187
+ else set needs.
3188
+
3189
+ **One gate is not enough here, and the second is `move`.** This picker
3190
+ holds a model beside its value, which Date Picker and Time Picker do not:
3191
+ `moved` is the HSB the square is drawn from, and it is written before the
3192
+ value is requested. Gating only the request would leave the square under
3193
+ the reader's pointer and the value where it was, which is a control that
3194
+ refuses and looks like it accepted. */
3195
+ readOnly?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
3196
+ /** Whether the form refuses to submit while no color is chosen.
3197
+
3198
+ **A color is exactly as requirable as a date**, which is the comparison
3199
+ that settles it: this element extends `HelixFormElement`, carries `name`
3200
+ and reports its value, so a consumer writing
3201
+ `<helix-color-picker name="brand" required>` inside a form has every reason
3202
+ to expect the form to refuse an empty one. Its two siblings in the same
3203
+ composition position, Date Picker and Time Picker, both check it.
3204
+
3205
+ Written out rather than taken from `MixinField`, for the reason those two
3206
+ record: the mixin brings a label, a hint and a feedback region, and this is
3207
+ a panel composed *into* a field that already has all three, so taking it
3208
+ would give one control two of each. What is left is the validity call and
3209
+ the anchor the browser points its bubble at.
3210
+
3211
+ **Emptiness is the only fault reported, and bad input deliberately is
3212
+ not.** The value row is typed into a character at a time and every
3213
+ keystroke reaches `requestValue`, so `#0`, `#00` and `#00f` would each be a
3214
+ reported fault on the way to `#00ff00`. Date Picker and Time Picker can
3215
+ report bad input because their value moves only on a commit. Color Input
3216
+ reports it for this family instead, once, against the field the reader
3217
+ typed into. */
3218
+ required?: (HelixHeadlessColorPicker["required"]) | undefined;
3073
3219
  /** Colors offered under the picker, as a comma-separated list. */
3074
3220
  swatches?: (HelixHeadlessColorPicker["swatches"]) | undefined;
3075
3221
  /** The value the markup declared, which is where a reset returns to. */
@@ -3190,6 +3336,67 @@ answer to which one is authoritative or which has the caret. Do not close it
3190
3336
  the other way round, with Color Input dropping its own field: the value
3191
3337
  would then be unreadable and unpasteable without opening a panel. */
3192
3338
  "prop:noValue"?: (HelixHeadlessColorPicker["noValue"]) | undefined;
3339
+ /** Whether the control refuses changes while still submitting its value.
3340
+
3341
+ **Enforced by refusing every request in one place**, which is the seam this
3342
+ component already has: `requestValue` is what every path here comes through,
3343
+ and gating it once is what stops the next call site from being written
3344
+ without the check.
3345
+
3346
+ Not `disabled`, which is the confusion worth naming: a disabled control
3347
+ submits nothing and leaves the tab order, and a read-only one submits its
3348
+ value and stays reachable, which is what a form showing a color somebody
3349
+ else set needs.
3350
+
3351
+ **One gate is not enough here, and the second is `move`.** This picker
3352
+ holds a model beside its value, which Date Picker and Time Picker do not:
3353
+ `moved` is the HSB the square is drawn from, and it is written before the
3354
+ value is requested. Gating only the request would leave the square under
3355
+ the reader's pointer and the value where it was, which is a control that
3356
+ refuses and looks like it accepted. */
3357
+ "bool:readonly"?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
3358
+ /** Whether the control refuses changes while still submitting its value.
3359
+
3360
+ **Enforced by refusing every request in one place**, which is the seam this
3361
+ component already has: `requestValue` is what every path here comes through,
3362
+ and gating it once is what stops the next call site from being written
3363
+ without the check.
3364
+
3365
+ Not `disabled`, which is the confusion worth naming: a disabled control
3366
+ submits nothing and leaves the tab order, and a read-only one submits its
3367
+ value and stays reachable, which is what a form showing a color somebody
3368
+ else set needs.
3369
+
3370
+ **One gate is not enough here, and the second is `move`.** This picker
3371
+ holds a model beside its value, which Date Picker and Time Picker do not:
3372
+ `moved` is the HSB the square is drawn from, and it is written before the
3373
+ value is requested. Gating only the request would leave the square under
3374
+ the reader's pointer and the value where it was, which is a control that
3375
+ refuses and looks like it accepted. */
3376
+ "prop:readOnly"?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
3377
+ /** Whether the form refuses to submit while no color is chosen.
3378
+
3379
+ **A color is exactly as requirable as a date**, which is the comparison
3380
+ that settles it: this element extends `HelixFormElement`, carries `name`
3381
+ and reports its value, so a consumer writing
3382
+ `<helix-color-picker name="brand" required>` inside a form has every reason
3383
+ to expect the form to refuse an empty one. Its two siblings in the same
3384
+ composition position, Date Picker and Time Picker, both check it.
3385
+
3386
+ Written out rather than taken from `MixinField`, for the reason those two
3387
+ record: the mixin brings a label, a hint and a feedback region, and this is
3388
+ a panel composed *into* a field that already has all three, so taking it
3389
+ would give one control two of each. What is left is the validity call and
3390
+ the anchor the browser points its bubble at.
3391
+
3392
+ **Emptiness is the only fault reported, and bad input deliberately is
3393
+ not.** The value row is typed into a character at a time and every
3394
+ keystroke reaches `requestValue`, so `#0`, `#00` and `#00f` would each be a
3395
+ reported fault on the way to `#00ff00`. Date Picker and Time Picker can
3396
+ report bad input because their value moves only on a commit. Color Input
3397
+ reports it for this family instead, once, against the field the reader
3398
+ typed into. */
3399
+ "prop:required"?: (HelixHeadlessColorPicker["required"]) | undefined;
3193
3400
  /** Colors offered under the picker, as a comma-separated list. */
3194
3401
  "prop:swatches"?: (HelixHeadlessColorPicker["swatches"]) | undefined;
3195
3402
  /** The value the markup declared, which is where a reset returns to. */
@@ -11817,7 +12024,41 @@ export type HelixHeadlessRatingProps = {
11817
12024
  Zero rather than one, because "no rating" and "the worst rating" are
11818
12025
  different answers and a control that cannot express the first has to
11819
12026
  pretend the second. A survey that requires an answer says so with
11820
- `required`, not by making one unreachable. */
12027
+ `required`, not by making one unreachable.
12028
+
12029
+ **It is the floor of the scale, and every edge follows from that.**
12030
+
12031
+ *Clearing* returns the row to it. An empty rating, a value nothing can
12032
+ parse, and a form reset with nothing declared are all the same situation,
12033
+ and all three draw `min` filled: at the default of zero that is the empty
12034
+ row this always drew, and at `min="2"` it is two marks, the way an empty
12035
+ `Slider` sits at its own minimum rather than at zero. The value is still
12036
+ `""` through all of it, so `required` still refuses it and `valueAsNumber`
12037
+ is still `NaN`: what the row shows is the bottom of the scale, not an
12038
+ answer somebody gave.
12039
+
12040
+ *The steps* are the scores from `step` up to `max` that are not below it,
12041
+ so `min="2"` on five marks offers 2 to 5 and leaves the first two marks
12042
+ filled and unpressable. At zero nothing is dropped, which is why the
12043
+ default row is unchanged.
12044
+
12045
+ *The keyboard* moves through those steps and no others. `wrap` is already
12046
+ false here, so arrowing down from the lowest one holds its ground rather
12047
+ than reaching a score this property forbids, and the tab stop an unrated
12048
+ rating carries sits on the lowest score offered rather than on the first
12049
+ mark.
12050
+
12051
+ *A `min` between two steps* is a floor and not a step: `min="1.5"` with
12052
+ whole marks clamps the value at 1.5 and offers 2 upward, since 1.5 is not
12053
+ somewhere the row can be pressed. That is a real thing to ask for and is
12054
+ left to mean what it says.
12055
+
12056
+ *A `min` outside the marks is refused rather than obeyed*, and says so
12057
+ once on the console. Below zero and anything that is not a number are read
12058
+ as zero, there being no mark to draw for a negative score; above `max` is
12059
+ read as `max`, which collapses the scale to its top score rather than
12060
+ leaving a rating with nothing to press. A property that silently accepts
12061
+ nonsense is the fault this pays off, so neither case is quietly ignored. */
11821
12062
  min?: (HelixHeadlessRating["min"]) | undefined;
11822
12063
  /** Whether this shows a score rather than asks for one.
11823
12064
 
@@ -11940,7 +12181,41 @@ export type HelixHeadlessRatingSolidJsProps = {
11940
12181
  Zero rather than one, because "no rating" and "the worst rating" are
11941
12182
  different answers and a control that cannot express the first has to
11942
12183
  pretend the second. A survey that requires an answer says so with
11943
- `required`, not by making one unreachable. */
12184
+ `required`, not by making one unreachable.
12185
+
12186
+ **It is the floor of the scale, and every edge follows from that.**
12187
+
12188
+ *Clearing* returns the row to it. An empty rating, a value nothing can
12189
+ parse, and a form reset with nothing declared are all the same situation,
12190
+ and all three draw `min` filled: at the default of zero that is the empty
12191
+ row this always drew, and at `min="2"` it is two marks, the way an empty
12192
+ `Slider` sits at its own minimum rather than at zero. The value is still
12193
+ `""` through all of it, so `required` still refuses it and `valueAsNumber`
12194
+ is still `NaN`: what the row shows is the bottom of the scale, not an
12195
+ answer somebody gave.
12196
+
12197
+ *The steps* are the scores from `step` up to `max` that are not below it,
12198
+ so `min="2"` on five marks offers 2 to 5 and leaves the first two marks
12199
+ filled and unpressable. At zero nothing is dropped, which is why the
12200
+ default row is unchanged.
12201
+
12202
+ *The keyboard* moves through those steps and no others. `wrap` is already
12203
+ false here, so arrowing down from the lowest one holds its ground rather
12204
+ than reaching a score this property forbids, and the tab stop an unrated
12205
+ rating carries sits on the lowest score offered rather than on the first
12206
+ mark.
12207
+
12208
+ *A `min` between two steps* is a floor and not a step: `min="1.5"` with
12209
+ whole marks clamps the value at 1.5 and offers 2 upward, since 1.5 is not
12210
+ somewhere the row can be pressed. That is a real thing to ask for and is
12211
+ left to mean what it says.
12212
+
12213
+ *A `min` outside the marks is refused rather than obeyed*, and says so
12214
+ once on the console. Below zero and anything that is not a number are read
12215
+ as zero, there being no mark to draw for a negative score; above `max` is
12216
+ read as `max`, which collapses the scale to its top score rather than
12217
+ leaving a rating with nothing to press. A property that silently accepts
12218
+ nonsense is the fault this pays off, so neither case is quietly ignored. */
11944
12219
  "prop:min"?: (HelixHeadlessRating["min"]) | undefined;
11945
12220
  /** Whether this shows a score rather than asks for one.
11946
12221
 
@@ -19196,6 +19471,27 @@ export type CustomElements = {
19196
19471
  * offset the track has already reached: pressing next walks the dots to the
19197
19472
  * end while the slides stop moving a third of the way through.
19198
19473
  *
19474
+ * **The number is published to the styles rather than enumerated by them**,
19475
+ * as `--carousel-per-view` on the track, which is what keeps a width and a
19476
+ * count from disagreeing. A sheet can only name a value it wrote a rule for,
19477
+ * so the styled tier enumerated `per-view="2"` through `5` and called five a
19478
+ * judgment; above it the pane fell back to one across while this file went on
19479
+ * counting positions. Measured in Chromium over eight slides, six across gave
19480
+ * three dots, a pane taking the whole track and five slides reachable only by
19481
+ * dragging. Written from here there is no ceiling to exceed, and a consumer's
19482
+ * own sheet reads the same declaration the styled one does. `runEnd` publishes
19483
+ * its correction the same way and for the same reason.
19484
+ *
19485
+ * **On the track and not on the host.** A custom property on the host is a
19486
+ * reflected attribute by another name: it would arrive on upgrade, and a
19487
+ * consumer's server markup never had it. Inside the component's own shadow
19488
+ * root it serializes with the rest of the template on the server, and the
19489
+ * track's own declaration beats anything a consumer inherits in, so the
19490
+ * attribute is the one answer to how wide a pane is.
19491
+ *
19492
+ * A value the track cannot honor is taken to the nearest one it can, by
19493
+ * `across`, and both tiers read that rather than this.
19494
+ *
19199
19495
  * No default, because it reflects. A reflected property with a value writes
19200
19496
  * its attribute on upgrade, and the host then carries something a consumer's
19201
19497
  * server markup never had, which React reports as a mismatch. The one-across
@@ -19252,6 +19548,7 @@ export type CustomElements = {
19252
19548
  *
19253
19549
  * - `--carousel-gap`: Space between slides. A sheet sets it and the component measures the run with it. (default: `undefined`)
19254
19550
  * - `--carousel-pane`: The size one pane is laid out at. A sheet sets it and the component measures the run with it. (default: `undefined`)
19551
+ * - `--carousel-per-view`: How many slides go across, written onto the track by the component so a sheet divides the track by the same number the positions are counted from. Read it rather than selecting on `per-view`, which cannot be enumerated without a ceiling. See `perView`. (default: `undefined`)
19255
19552
  * - `--carousel-run-end`: How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`. (default: `undefined`)
19256
19553
  *
19257
19554
  * ## CSS Parts
@@ -20565,6 +20862,46 @@ export type CustomElements = {
20565
20862
  * answer to which one is authoritative or which has the caret. Do not close it
20566
20863
  * the other way round, with Color Input dropping its own field: the value
20567
20864
  * would then be unreadable and unpasteable without opening a panel.
20865
+ * - `readonly`/`readOnly`: Whether the control refuses changes while still submitting its value.
20866
+ *
20867
+ * **Enforced by refusing every request in one place**, which is the seam this
20868
+ * component already has: `requestValue` is what every path here comes through,
20869
+ * and gating it once is what stops the next call site from being written
20870
+ * without the check.
20871
+ *
20872
+ * Not `disabled`, which is the confusion worth naming: a disabled control
20873
+ * submits nothing and leaves the tab order, and a read-only one submits its
20874
+ * value and stays reachable, which is what a form showing a color somebody
20875
+ * else set needs.
20876
+ *
20877
+ * **One gate is not enough here, and the second is `move`.** This picker
20878
+ * holds a model beside its value, which Date Picker and Time Picker do not:
20879
+ * `moved` is the HSB the square is drawn from, and it is written before the
20880
+ * value is requested. Gating only the request would leave the square under
20881
+ * the reader's pointer and the value where it was, which is a control that
20882
+ * refuses and looks like it accepted.
20883
+ * - `required`: Whether the form refuses to submit while no color is chosen.
20884
+ *
20885
+ * **A color is exactly as requirable as a date**, which is the comparison
20886
+ * that settles it: this element extends `HelixFormElement`, carries `name`
20887
+ * and reports its value, so a consumer writing
20888
+ * `<helix-color-picker name="brand" required>` inside a form has every reason
20889
+ * to expect the form to refuse an empty one. Its two siblings in the same
20890
+ * composition position, Date Picker and Time Picker, both check it.
20891
+ *
20892
+ * Written out rather than taken from `MixinField`, for the reason those two
20893
+ * record: the mixin brings a label, a hint and a feedback region, and this is
20894
+ * a panel composed *into* a field that already has all three, so taking it
20895
+ * would give one control two of each. What is left is the validity call and
20896
+ * the anchor the browser points its bubble at.
20897
+ *
20898
+ * **Emptiness is the only fault reported, and bad input deliberately is
20899
+ * not.** The value row is typed into a character at a time and every
20900
+ * keystroke reaches `requestValue`, so `#0`, `#00` and `#00f` would each be a
20901
+ * reported fault on the way to `#00ff00`. Date Picker and Time Picker can
20902
+ * report bad input because their value moves only on a commit. Color Input
20903
+ * reports it for this family instead, once, against the field the reader
20904
+ * typed into.
20568
20905
  * - `swatches`: Colors offered under the picker, as a comma-separated list.
20569
20906
  * - `default-value`/`defaultValue`: The value the markup declared, which is where a reset returns to.
20570
20907
  * - `value`: What the control holds now, and what its form submits.
@@ -20642,14 +20979,8 @@ export type CustomElements = {
20642
20979
  *
20643
20980
  * Methods that can be called to access component functionality.
20644
20981
  *
20982
+ * - `requestValue(next: string) => boolean`: Refuses every change while read-only. See `readOnly`.
20645
20983
  * - `focus(options?: FocusOptions) => void`: Puts the keyboard on the square, which is the control a reader wants.
20646
- * - `requestValue(next: string) => boolean`: Requests a new value, and reports whether the request stood.
20647
- *
20648
- * Announces before it acts, so `preventDefault()` on the `helix-before-change` is
20649
- * a refusal and nothing moves. Nobody refusing means the control updates
20650
- * itself, whether or not a consumer declared `value`: a declared property
20651
- * is a seed and a correction, the way `<input value>` is, and a consumer
20652
- * who wants the change for themselves refuses it and assigns their own.
20653
20984
  * - `formResetCallback() => void`: Returns the control to the value its markup declared.
20654
20985
  *
20655
20986
  * Both halves are dropped, the consumer's and the control's, because a
@@ -29255,6 +29586,40 @@ export type CustomElements = {
29255
29586
  * different answers and a control that cannot express the first has to
29256
29587
  * pretend the second. A survey that requires an answer says so with
29257
29588
  * `required`, not by making one unreachable.
29589
+ *
29590
+ * **It is the floor of the scale, and every edge follows from that.**
29591
+ *
29592
+ * *Clearing* returns the row to it. An empty rating, a value nothing can
29593
+ * parse, and a form reset with nothing declared are all the same situation,
29594
+ * and all three draw `min` filled: at the default of zero that is the empty
29595
+ * row this always drew, and at `min="2"` it is two marks, the way an empty
29596
+ * `Slider` sits at its own minimum rather than at zero. The value is still
29597
+ * `""` through all of it, so `required` still refuses it and `valueAsNumber`
29598
+ * is still `NaN`: what the row shows is the bottom of the scale, not an
29599
+ * answer somebody gave.
29600
+ *
29601
+ * *The steps* are the scores from `step` up to `max` that are not below it,
29602
+ * so `min="2"` on five marks offers 2 to 5 and leaves the first two marks
29603
+ * filled and unpressable. At zero nothing is dropped, which is why the
29604
+ * default row is unchanged.
29605
+ *
29606
+ * *The keyboard* moves through those steps and no others. `wrap` is already
29607
+ * false here, so arrowing down from the lowest one holds its ground rather
29608
+ * than reaching a score this property forbids, and the tab stop an unrated
29609
+ * rating carries sits on the lowest score offered rather than on the first
29610
+ * mark.
29611
+ *
29612
+ * *A `min` between two steps* is a floor and not a step: `min="1.5"` with
29613
+ * whole marks clamps the value at 1.5 and offers 2 upward, since 1.5 is not
29614
+ * somewhere the row can be pressed. That is a real thing to ask for and is
29615
+ * left to mean what it says.
29616
+ *
29617
+ * *A `min` outside the marks is refused rather than obeyed*, and says so
29618
+ * once on the console. Below zero and anything that is not a number are read
29619
+ * as zero, there being no mark to draw for a negative score; above `max` is
29620
+ * read as `max`, which collapses the scale to its top score rather than
29621
+ * leaving a rating with nothing to press. A property that silently accepts
29622
+ * nonsense is the fault this pays off, so neither case is quietly ignored.
29258
29623
  * - `readonly`/`readOnly`: Whether this shows a score rather than asks for one.
29259
29624
  *
29260
29625
  * A readout is not a control that has been switched off. It takes no focus,
@@ -29412,14 +29777,15 @@ export type CustomElements = {
29412
29777
  *
29413
29778
  * - `--rating-full`: How many marks are wholly filled. (default: `undefined`)
29414
29779
  * - `--rating-part`: How much of the next mark is filled, 0 to 1. (default: `undefined`)
29415
- * - `--rating-step`: The width of one step, as a fraction of a mark. (default: `undefined`)
29416
- * - `--rating-steps`: How many steps one mark is divided into. (default: `undefined`)
29780
+ * - `--rating-step`: Which step along the row a target is, counting from one, whatever `min` leaves open. (default: `undefined`)
29781
+ * - `--rating-steps`: How many steps the whole row holds, which is `max` over `step`. (default: `undefined`)
29417
29782
  *
29418
29783
  * ## CSS Parts
29419
29784
  *
29420
29785
  * Custom selectors for styling elements within the component.
29421
29786
  *
29422
29787
  * - `feedback`: What is wrong with it.
29788
+ * - `field`: The row: the marks, and the score beside them.
29423
29789
  * - `fill`: The filled marks, clipped to the score.
29424
29790
  * - `hint`: Help under the marks, while nothing is wrong.
29425
29791
  * - `label`: The question, over the marks.
@@ -32620,6 +32986,19 @@ export type CustomElements = {
32620
32986
  * string, which is the whole reason the shape is that one. What each row *says*
32621
32987
  * is the reader's own convention, from `Intl`.
32622
32988
  *
32989
+ * **The chosen row is marked in the markup, not worked out on upgrade.** The
32990
+ * listbox is handed the answer as `.value`, and lit-ssr serializes no property
32991
+ * binding, so a served `value="09:30"` shipped ninety-six rows with nothing on
32992
+ * any of them saying which one it was: the mark arrived when the listbox
32993
+ * upgraded and ran `place`. So each option is given `selected` as well, which
32994
+ * is an attribute binding and does serve, and which the listbox then agrees
32995
+ * with rather than fights, `place` writing the same answer from the same value.
32996
+ * `selected` is the declaration a consumer writes on `Option` anywhere else in
32997
+ * the library, and Date Picker expresses its own choice as markup for the same
32998
+ * reason: a picker whose answer is invisible until a script runs is a picker
32999
+ * whose answer is not served at all. Both readings do it, the list and the
33000
+ * wheels, a wheel being a listbox like the list is.
33001
+ *
32623
33002
  * ## Attributes & Properties
32624
33003
  *
32625
33004
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -36973,6 +37352,27 @@ export type CustomElementsSolidJs = {
36973
37352
  * offset the track has already reached: pressing next walks the dots to the
36974
37353
  * end while the slides stop moving a third of the way through.
36975
37354
  *
37355
+ * **The number is published to the styles rather than enumerated by them**,
37356
+ * as `--carousel-per-view` on the track, which is what keeps a width and a
37357
+ * count from disagreeing. A sheet can only name a value it wrote a rule for,
37358
+ * so the styled tier enumerated `per-view="2"` through `5` and called five a
37359
+ * judgment; above it the pane fell back to one across while this file went on
37360
+ * counting positions. Measured in Chromium over eight slides, six across gave
37361
+ * three dots, a pane taking the whole track and five slides reachable only by
37362
+ * dragging. Written from here there is no ceiling to exceed, and a consumer's
37363
+ * own sheet reads the same declaration the styled one does. `runEnd` publishes
37364
+ * its correction the same way and for the same reason.
37365
+ *
37366
+ * **On the track and not on the host.** A custom property on the host is a
37367
+ * reflected attribute by another name: it would arrive on upgrade, and a
37368
+ * consumer's server markup never had it. Inside the component's own shadow
37369
+ * root it serializes with the rest of the template on the server, and the
37370
+ * track's own declaration beats anything a consumer inherits in, so the
37371
+ * attribute is the one answer to how wide a pane is.
37372
+ *
37373
+ * A value the track cannot honor is taken to the nearest one it can, by
37374
+ * `across`, and both tiers read that rather than this.
37375
+ *
36976
37376
  * No default, because it reflects. A reflected property with a value writes
36977
37377
  * its attribute on upgrade, and the host then carries something a consumer's
36978
37378
  * server markup never had, which React reports as a mismatch. The one-across
@@ -37029,6 +37429,7 @@ export type CustomElementsSolidJs = {
37029
37429
  *
37030
37430
  * - `--carousel-gap`: Space between slides. A sheet sets it and the component measures the run with it. (default: `undefined`)
37031
37431
  * - `--carousel-pane`: The size one pane is laid out at. A sheet sets it and the component measures the run with it. (default: `undefined`)
37432
+ * - `--carousel-per-view`: How many slides go across, written onto the track by the component so a sheet divides the track by the same number the positions are counted from. Read it rather than selecting on `per-view`, which cannot be enumerated without a ceiling. See `perView`. (default: `undefined`)
37032
37433
  * - `--carousel-run-end`: How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`. (default: `undefined`)
37033
37434
  *
37034
37435
  * ## CSS Parts
@@ -38361,6 +38762,46 @@ export type CustomElementsSolidJs = {
38361
38762
  * answer to which one is authoritative or which has the caret. Do not close it
38362
38763
  * the other way round, with Color Input dropping its own field: the value
38363
38764
  * would then be unreadable and unpasteable without opening a panel.
38765
+ * - `readonly`/`readOnly`: Whether the control refuses changes while still submitting its value.
38766
+ *
38767
+ * **Enforced by refusing every request in one place**, which is the seam this
38768
+ * component already has: `requestValue` is what every path here comes through,
38769
+ * and gating it once is what stops the next call site from being written
38770
+ * without the check.
38771
+ *
38772
+ * Not `disabled`, which is the confusion worth naming: a disabled control
38773
+ * submits nothing and leaves the tab order, and a read-only one submits its
38774
+ * value and stays reachable, which is what a form showing a color somebody
38775
+ * else set needs.
38776
+ *
38777
+ * **One gate is not enough here, and the second is `move`.** This picker
38778
+ * holds a model beside its value, which Date Picker and Time Picker do not:
38779
+ * `moved` is the HSB the square is drawn from, and it is written before the
38780
+ * value is requested. Gating only the request would leave the square under
38781
+ * the reader's pointer and the value where it was, which is a control that
38782
+ * refuses and looks like it accepted.
38783
+ * - `required`: Whether the form refuses to submit while no color is chosen.
38784
+ *
38785
+ * **A color is exactly as requirable as a date**, which is the comparison
38786
+ * that settles it: this element extends `HelixFormElement`, carries `name`
38787
+ * and reports its value, so a consumer writing
38788
+ * `<helix-color-picker name="brand" required>` inside a form has every reason
38789
+ * to expect the form to refuse an empty one. Its two siblings in the same
38790
+ * composition position, Date Picker and Time Picker, both check it.
38791
+ *
38792
+ * Written out rather than taken from `MixinField`, for the reason those two
38793
+ * record: the mixin brings a label, a hint and a feedback region, and this is
38794
+ * a panel composed *into* a field that already has all three, so taking it
38795
+ * would give one control two of each. What is left is the validity call and
38796
+ * the anchor the browser points its bubble at.
38797
+ *
38798
+ * **Emptiness is the only fault reported, and bad input deliberately is
38799
+ * not.** The value row is typed into a character at a time and every
38800
+ * keystroke reaches `requestValue`, so `#0`, `#00` and `#00f` would each be a
38801
+ * reported fault on the way to `#00ff00`. Date Picker and Time Picker can
38802
+ * report bad input because their value moves only on a commit. Color Input
38803
+ * reports it for this family instead, once, against the field the reader
38804
+ * typed into.
38364
38805
  * - `swatches`: Colors offered under the picker, as a comma-separated list.
38365
38806
  * - `default-value`/`defaultValue`: The value the markup declared, which is where a reset returns to.
38366
38807
  * - `value`: What the control holds now, and what its form submits.
@@ -38438,14 +38879,8 @@ export type CustomElementsSolidJs = {
38438
38879
  *
38439
38880
  * Methods that can be called to access component functionality.
38440
38881
  *
38882
+ * - `requestValue(next: string) => boolean`: Refuses every change while read-only. See `readOnly`.
38441
38883
  * - `focus(options?: FocusOptions) => void`: Puts the keyboard on the square, which is the control a reader wants.
38442
- * - `requestValue(next: string) => boolean`: Requests a new value, and reports whether the request stood.
38443
- *
38444
- * Announces before it acts, so `preventDefault()` on the `helix-before-change` is
38445
- * a refusal and nothing moves. Nobody refusing means the control updates
38446
- * itself, whether or not a consumer declared `value`: a declared property
38447
- * is a seed and a correction, the way `<input value>` is, and a consumer
38448
- * who wants the change for themselves refuses it and assigns their own.
38449
38884
  * - `formResetCallback() => void`: Returns the control to the value its markup declared.
38450
38885
  *
38451
38886
  * Both halves are dropped, the consumer's and the control's, because a
@@ -47175,6 +47610,40 @@ export type CustomElementsSolidJs = {
47175
47610
  * different answers and a control that cannot express the first has to
47176
47611
  * pretend the second. A survey that requires an answer says so with
47177
47612
  * `required`, not by making one unreachable.
47613
+ *
47614
+ * **It is the floor of the scale, and every edge follows from that.**
47615
+ *
47616
+ * *Clearing* returns the row to it. An empty rating, a value nothing can
47617
+ * parse, and a form reset with nothing declared are all the same situation,
47618
+ * and all three draw `min` filled: at the default of zero that is the empty
47619
+ * row this always drew, and at `min="2"` it is two marks, the way an empty
47620
+ * `Slider` sits at its own minimum rather than at zero. The value is still
47621
+ * `""` through all of it, so `required` still refuses it and `valueAsNumber`
47622
+ * is still `NaN`: what the row shows is the bottom of the scale, not an
47623
+ * answer somebody gave.
47624
+ *
47625
+ * *The steps* are the scores from `step` up to `max` that are not below it,
47626
+ * so `min="2"` on five marks offers 2 to 5 and leaves the first two marks
47627
+ * filled and unpressable. At zero nothing is dropped, which is why the
47628
+ * default row is unchanged.
47629
+ *
47630
+ * *The keyboard* moves through those steps and no others. `wrap` is already
47631
+ * false here, so arrowing down from the lowest one holds its ground rather
47632
+ * than reaching a score this property forbids, and the tab stop an unrated
47633
+ * rating carries sits on the lowest score offered rather than on the first
47634
+ * mark.
47635
+ *
47636
+ * *A `min` between two steps* is a floor and not a step: `min="1.5"` with
47637
+ * whole marks clamps the value at 1.5 and offers 2 upward, since 1.5 is not
47638
+ * somewhere the row can be pressed. That is a real thing to ask for and is
47639
+ * left to mean what it says.
47640
+ *
47641
+ * *A `min` outside the marks is refused rather than obeyed*, and says so
47642
+ * once on the console. Below zero and anything that is not a number are read
47643
+ * as zero, there being no mark to draw for a negative score; above `max` is
47644
+ * read as `max`, which collapses the scale to its top score rather than
47645
+ * leaving a rating with nothing to press. A property that silently accepts
47646
+ * nonsense is the fault this pays off, so neither case is quietly ignored.
47178
47647
  * - `readonly`/`readOnly`: Whether this shows a score rather than asks for one.
47179
47648
  *
47180
47649
  * A readout is not a control that has been switched off. It takes no focus,
@@ -47332,14 +47801,15 @@ export type CustomElementsSolidJs = {
47332
47801
  *
47333
47802
  * - `--rating-full`: How many marks are wholly filled. (default: `undefined`)
47334
47803
  * - `--rating-part`: How much of the next mark is filled, 0 to 1. (default: `undefined`)
47335
- * - `--rating-step`: The width of one step, as a fraction of a mark. (default: `undefined`)
47336
- * - `--rating-steps`: How many steps one mark is divided into. (default: `undefined`)
47804
+ * - `--rating-step`: Which step along the row a target is, counting from one, whatever `min` leaves open. (default: `undefined`)
47805
+ * - `--rating-steps`: How many steps the whole row holds, which is `max` over `step`. (default: `undefined`)
47337
47806
  *
47338
47807
  * ## CSS Parts
47339
47808
  *
47340
47809
  * Custom selectors for styling elements within the component.
47341
47810
  *
47342
47811
  * - `feedback`: What is wrong with it.
47812
+ * - `field`: The row: the marks, and the score beside them.
47343
47813
  * - `fill`: The filled marks, clipped to the score.
47344
47814
  * - `hint`: Help under the marks, while nothing is wrong.
47345
47815
  * - `label`: The question, over the marks.
@@ -50610,6 +51080,19 @@ export type CustomElementsSolidJs = {
50610
51080
  * string, which is the whole reason the shape is that one. What each row *says*
50611
51081
  * is the reader's own convention, from `Intl`.
50612
51082
  *
51083
+ * **The chosen row is marked in the markup, not worked out on upgrade.** The
51084
+ * listbox is handed the answer as `.value`, and lit-ssr serializes no property
51085
+ * binding, so a served `value="09:30"` shipped ninety-six rows with nothing on
51086
+ * any of them saying which one it was: the mark arrived when the listbox
51087
+ * upgraded and ran `place`. So each option is given `selected` as well, which
51088
+ * is an attribute binding and does serve, and which the listbox then agrees
51089
+ * with rather than fights, `place` writing the same answer from the same value.
51090
+ * `selected` is the declaration a consumer writes on `Option` anywhere else in
51091
+ * the library, and Date Picker expresses its own choice as markup for the same
51092
+ * reason: a picker whose answer is invisible until a script runs is a picker
51093
+ * whose answer is not served at all. Both readings do it, the list and the
51094
+ * wheels, a wheel being a listbox like the list is.
51095
+ *
50613
51096
  * ## Attributes & Properties
50614
51097
  *
50615
51098
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -53132,6 +53615,8 @@ export type CustomCssProperties = {
53132
53615
  "--carousel-gap"?: (string) | undefined;
53133
53616
  /** The size one pane is laid out at. A sheet sets it and the component measures the run with it. */
53134
53617
  "--carousel-pane"?: (string) | undefined;
53618
+ /** How many slides go across, written onto the track by the component so a sheet divides the track by the same number the positions are counted from. Read it rather than selecting on `per-view`, which cannot be enumerated without a ceiling. See `perView`. */
53619
+ "--carousel-per-view"?: (string) | undefined;
53135
53620
  /** How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`. */
53136
53621
  "--carousel-run-end"?: (string) | undefined;
53137
53622
  /** The chosen color, to paint over the transparency check. */
@@ -53212,9 +53697,9 @@ export type CustomCssProperties = {
53212
53697
  "--rating-full"?: (string) | undefined;
53213
53698
  /** How much of the next mark is filled, 0 to 1. */
53214
53699
  "--rating-part"?: (string) | undefined;
53215
- /** The width of one step, as a fraction of a mark. */
53700
+ /** Which step along the row a target is, counting from one, whatever `min` leaves open. */
53216
53701
  "--rating-step"?: (string) | undefined;
53217
- /** How many steps one mark is divided into. */
53702
+ /** How many steps the whole row holds, which is `max` over `step`. */
53218
53703
  "--rating-steps"?: (string) | undefined;
53219
53704
  /** Where a point sits across, as a percentage. Written by the component. */
53220
53705
  "--chart-point-x"?: (string) | undefined;