@fusion.dev/helix-headless 0.41.1 → 0.43.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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fusion.dev/helix-headless",
3
3
  "description": "Headless component tier. Structure, accessibility, state, and form participation. No styling.",
4
- "version": "0.41.1",
4
+ "version": "0.43.0",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -46,14 +46,14 @@
46
46
  },
47
47
  "bugs": "https://github.com/project-fusion/fusion/issues",
48
48
  "dependencies": {
49
- "@fusion.dev/helix-core": "0.41.1",
50
- "@fusion.dev/helix-icons": "0.41.1",
49
+ "@fusion.dev/helix-core": "0.43.0",
50
+ "@fusion.dev/helix-icons": "0.43.0",
51
51
  "uqr": "^0.1.3"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@custom-elements-manifest/analyzer": "^0.11.0",
55
- "@fusion.dev/helix-cem": "0.41.1",
56
- "@fusion.dev/helix-testing": "0.41.1",
55
+ "@fusion.dev/helix-cem": "0.43.0",
56
+ "@fusion.dev/helix-testing": "0.43.0",
57
57
  "@fusion.dev/scripts": "0.0.0-dev",
58
58
  "@happy-dom/global-registrator": "^20.0.0",
59
59
  "@lit-labs/ssr": "^4.1.0",
package/types/jsx.d.ts CHANGED
@@ -1861,7 +1861,7 @@ server markup never had, which React reports as a mismatch. The one-across
1861
1861
  case is the absent attribute, and the styles read it that way. */
1862
1862
  perView?: (HelixHeadlessCarousel["perView"]) | undefined;
1863
1863
 
1864
- /** Fired when the slide in view changes, with its index. Cancelable: refusing it takes the decision and nothing moves. */
1864
+ /** Fired when the slide in view changes, with its index. Cancelable where the carousel is about to move: refusing a control or an indicator takes the decision and nothing moves. A drag has already moved the track, so that one announces after the fact and refusing it does nothing. See `handleScroll`. */
1865
1865
  "onhelix-select"?: ((e: HelixHeadlessCarouselHelixSelectElementEvent) => void) | undefined;
1866
1866
  };
1867
1867
 
@@ -1961,7 +1961,7 @@ its attribute on upgrade, and the host then carries something a consumer's
1961
1961
  server markup never had, which React reports as a mismatch. The one-across
1962
1962
  case is the absent attribute, and the styles read it that way. */
1963
1963
  "prop:perView"?: (HelixHeadlessCarousel["perView"]) | undefined;
1964
- /** Fired when the slide in view changes, with its index. Cancelable: refusing it takes the decision and nothing moves. */
1964
+ /** Fired when the slide in view changes, with its index. Cancelable where the carousel is about to move: refusing a control or an indicator takes the decision and nothing moves. A drag has already moved the track, so that one announces after the fact and refusing it does nothing. See `handleScroll`. */
1965
1965
  "on:helix-select"?: ((e: HelixHeadlessCarouselHelixSelectElementEvent) => void) | undefined;
1966
1966
 
1967
1967
  /** Set the innerHTML of the element */
@@ -10296,15 +10296,27 @@ Written by the listbox. */
10296
10296
 
10297
10297
  `<option selected>` reflects to `defaultSelected` and `option.selected` is
10298
10298
  live state that does not reflect, and those are two different facts. This
10299
- element has one `selected` doing both jobs, so what is captured here is what
10300
- the markup said at upgrade, before anything could overwrite it: read the
10301
- attribute later and the listbox's own writes answer instead.
10302
-
10303
- **The deeper half is 302 and is not this.** State reflecting under the
10304
- declaration's name is the fault `TreeItem` already avoids by mirroring to
10305
- `data-selected`, and four families here still write `selected` back into a
10306
- consumer's markup. Splitting them means moving what every stylesheet selects
10307
- on, which is a change of its own rather than a property being added. */
10299
+ element has one `selected` doing both jobs, so the declaration is the
10300
+ attribute and the state is the property.
10301
+
10302
+ **The attribute, read when it is asked for, and never a snapshot taken in
10303
+ the constructor.** A field initializer runs there, and an element the HTML
10304
+ parser created has none of its attributes yet at that moment: measured on
10305
+ this element, on `Radio` and on `Toggle`, `<helix-option value="a"
10306
+ selected>` reported `defaultSelected` as `false` both from parsed markup
10307
+ and from `createElement` followed by `setAttribute`, which is every way a
10308
+ consumer writes one. The snapshot could only ever be true for an element
10309
+ already in the document when `customElements.define` ran.
10310
+
10311
+ Nothing overwrites it either, which is what makes reading it late correct
10312
+ rather than merely later: `selected` does not reflect, for the reason
10313
+ `willUpdate` records, so the listbox's writes never reach the attribute and
10314
+ what it says is what the markup said.
10315
+
10316
+ **The deeper half is not this.** State reflecting under the declaration's
10317
+ name is the fault `TreeItem` avoids by mirroring to `data-selected`.
10318
+ Splitting them means moving what every stylesheet selects on, which is a
10319
+ change of its own rather than a property being added. */
10308
10320
  defaultSelected?: (HelixHeadlessOption["defaultSelected"]) | undefined;
10309
10321
 
10310
10322
  /** Fired when this choice is made. Cancelable: refusing it takes the decision and nothing moves. */
@@ -10391,15 +10403,27 @@ Written by the listbox. */
10391
10403
 
10392
10404
  `<option selected>` reflects to `defaultSelected` and `option.selected` is
10393
10405
  live state that does not reflect, and those are two different facts. This
10394
- element has one `selected` doing both jobs, so what is captured here is what
10395
- the markup said at upgrade, before anything could overwrite it: read the
10396
- attribute later and the listbox's own writes answer instead.
10397
-
10398
- **The deeper half is 302 and is not this.** State reflecting under the
10399
- declaration's name is the fault `TreeItem` already avoids by mirroring to
10400
- `data-selected`, and four families here still write `selected` back into a
10401
- consumer's markup. Splitting them means moving what every stylesheet selects
10402
- on, which is a change of its own rather than a property being added. */
10406
+ element has one `selected` doing both jobs, so the declaration is the
10407
+ attribute and the state is the property.
10408
+
10409
+ **The attribute, read when it is asked for, and never a snapshot taken in
10410
+ the constructor.** A field initializer runs there, and an element the HTML
10411
+ parser created has none of its attributes yet at that moment: measured on
10412
+ this element, on `Radio` and on `Toggle`, `<helix-option value="a"
10413
+ selected>` reported `defaultSelected` as `false` both from parsed markup
10414
+ and from `createElement` followed by `setAttribute`, which is every way a
10415
+ consumer writes one. The snapshot could only ever be true for an element
10416
+ already in the document when `customElements.define` ran.
10417
+
10418
+ Nothing overwrites it either, which is what makes reading it late correct
10419
+ rather than merely later: `selected` does not reflect, for the reason
10420
+ `willUpdate` records, so the listbox's writes never reach the attribute and
10421
+ what it says is what the markup said.
10422
+
10423
+ **The deeper half is not this.** State reflecting under the declaration's
10424
+ name is the fault `TreeItem` avoids by mirroring to `data-selected`.
10425
+ Splitting them means moving what every stylesheet selects on, which is a
10426
+ change of its own rather than a property being added. */
10403
10427
  "prop:defaultSelected"?: (HelixHeadlessOption["defaultSelected"]) | undefined;
10404
10428
  /** Fired when this choice is made. Cancelable: refusing it takes the decision and nothing moves. */
10405
10429
  "on:helix-select"?: ((e: HelixHeadlessOptionHelixSelectElementEvent) => void) | undefined;
@@ -11669,9 +11693,22 @@ Written by the group. */
11669
11693
 
11670
11694
  `<option selected>` reflects to `defaultSelected` and `option.selected` is
11671
11695
  live state that does not reflect, and those are two different facts. This
11672
- element has one `selected` doing both jobs, so what is captured here is what
11673
- the markup said at upgrade, before anything could overwrite it: read the
11674
- attribute later and the listbox's own writes answer instead.
11696
+ element has one `selected` doing both jobs, so the declaration is the
11697
+ attribute and the state is the property.
11698
+
11699
+ **The attribute, read when it is asked for, and never a snapshot taken in
11700
+ the constructor.** A field initializer runs there, and an element the HTML
11701
+ parser created has none of its attributes yet at that moment: measured on
11702
+ this element, on `Option` and on `Toggle`, `<helix-radio value="a"
11703
+ selected>` reported `defaultSelected` as `false` both from parsed markup
11704
+ and from `createElement` followed by `setAttribute`, which is every way a
11705
+ consumer writes one. The snapshot could only ever be true for an element
11706
+ already in the document when `customElements.define` ran.
11707
+
11708
+ Nothing overwrites it either, which is what makes reading it late correct
11709
+ rather than merely later: `selected` does not reflect, for the reason
11710
+ `willUpdate` records, so the group's writes never reach the attribute and
11711
+ what it says is what the markup said.
11675
11712
 
11676
11713
  **The deeper half is not this.** State reflecting under the declaration's
11677
11714
  name is the fault `TreeItem` avoids by mirroring to `data-selected`.
@@ -11696,9 +11733,22 @@ Written by the group. */
11696
11733
 
11697
11734
  `<option selected>` reflects to `defaultSelected` and `option.selected` is
11698
11735
  live state that does not reflect, and those are two different facts. This
11699
- element has one `selected` doing both jobs, so what is captured here is what
11700
- the markup said at upgrade, before anything could overwrite it: read the
11701
- attribute later and the listbox's own writes answer instead.
11736
+ element has one `selected` doing both jobs, so the declaration is the
11737
+ attribute and the state is the property.
11738
+
11739
+ **The attribute, read when it is asked for, and never a snapshot taken in
11740
+ the constructor.** A field initializer runs there, and an element the HTML
11741
+ parser created has none of its attributes yet at that moment: measured on
11742
+ this element, on `Option` and on `Toggle`, `<helix-radio value="a"
11743
+ selected>` reported `defaultSelected` as `false` both from parsed markup
11744
+ and from `createElement` followed by `setAttribute`, which is every way a
11745
+ consumer writes one. The snapshot could only ever be true for an element
11746
+ already in the document when `customElements.define` ran.
11747
+
11748
+ Nothing overwrites it either, which is what makes reading it late correct
11749
+ rather than merely later: `selected` does not reflect, for the reason
11750
+ `willUpdate` records, so the group's writes never reach the attribute and
11751
+ what it says is what the markup said.
11702
11752
 
11703
11753
  **The deeper half is not this.** State reflecting under the declaration's
11704
11754
  name is the fault `TreeItem` avoids by mirroring to `data-selected`.
@@ -15520,9 +15570,22 @@ export type HelixHeadlessToggleProps = {
15520
15570
 
15521
15571
  `<option selected>` reflects to `defaultSelected` and `option.selected` is
15522
15572
  live state that does not reflect, and those are two different facts. This
15523
- element has one `selected` doing both jobs, so what is captured here is what
15524
- the markup said at upgrade, before anything could overwrite it: read the
15525
- attribute later and the listbox's own writes answer instead.
15573
+ element has one `selected` doing both jobs, so the declaration is the
15574
+ attribute and the state is the property.
15575
+
15576
+ **The attribute, read when it is asked for, and never a snapshot taken in
15577
+ the constructor.** A field initializer runs there, and an element the HTML
15578
+ parser created has none of its attributes yet at that moment: measured on
15579
+ this element, on `Option` and on `Radio`, `<helix-toggle value="light"
15580
+ selected>` reported `defaultSelected` as `false` both from parsed markup
15581
+ and from `createElement` followed by `setAttribute`, which is every way a
15582
+ consumer writes one. The snapshot could only ever be true for an element
15583
+ already in the document when `customElements.define` ran.
15584
+
15585
+ Nothing overwrites it either, which is what makes reading it late correct
15586
+ rather than merely later: `selected` does not reflect, for the reason
15587
+ `willUpdate` records, so the group's writes never reach the attribute and
15588
+ what it says is what the markup said.
15526
15589
 
15527
15590
  **The deeper half is not this.** State reflecting under the declaration's
15528
15591
  name is the fault `TreeItem` avoids by mirroring to `data-selected`.
@@ -15553,9 +15616,22 @@ export type HelixHeadlessToggleSolidJsProps = {
15553
15616
 
15554
15617
  `<option selected>` reflects to `defaultSelected` and `option.selected` is
15555
15618
  live state that does not reflect, and those are two different facts. This
15556
- element has one `selected` doing both jobs, so what is captured here is what
15557
- the markup said at upgrade, before anything could overwrite it: read the
15558
- attribute later and the listbox's own writes answer instead.
15619
+ element has one `selected` doing both jobs, so the declaration is the
15620
+ attribute and the state is the property.
15621
+
15622
+ **The attribute, read when it is asked for, and never a snapshot taken in
15623
+ the constructor.** A field initializer runs there, and an element the HTML
15624
+ parser created has none of its attributes yet at that moment: measured on
15625
+ this element, on `Option` and on `Radio`, `<helix-toggle value="light"
15626
+ selected>` reported `defaultSelected` as `false` both from parsed markup
15627
+ and from `createElement` followed by `setAttribute`, which is every way a
15628
+ consumer writes one. The snapshot could only ever be true for an element
15629
+ already in the document when `customElements.define` ran.
15630
+
15631
+ Nothing overwrites it either, which is what makes reading it late correct
15632
+ rather than merely later: `selected` does not reflect, for the reason
15633
+ `willUpdate` records, so the group's writes never reach the attribute and
15634
+ what it says is what the markup said.
15559
15635
 
15560
15636
  **The deeper half is not this.** State reflecting under the declaration's
15561
15637
  name is the fault `TreeItem` avoids by mirroring to `data-selected`.
@@ -19076,7 +19152,7 @@ export type CustomElements = {
19076
19152
  *
19077
19153
  * Events that will be emitted by the component.
19078
19154
  *
19079
- * - `helix-select`: Fired when the slide in view changes, with its index. Cancelable: refusing it takes the decision and nothing moves.
19155
+ * - `helix-select`: Fired when the slide in view changes, with its index. Cancelable where the carousel is about to move: refusing a control or an indicator takes the decision and nothing moves. A drag has already moved the track, so that one announces after the fact and refusing it does nothing. See `handleScroll`.
19080
19156
  *
19081
19157
  * ## Slots
19082
19158
  *
@@ -27561,15 +27637,27 @@ export type CustomElements = {
27561
27637
  *
27562
27638
  * `<option selected>` reflects to `defaultSelected` and `option.selected` is
27563
27639
  * live state that does not reflect, and those are two different facts. This
27564
- * element has one `selected` doing both jobs, so what is captured here is what
27565
- * the markup said at upgrade, before anything could overwrite it: read the
27566
- * attribute later and the listbox's own writes answer instead.
27567
- *
27568
- * **The deeper half is 302 and is not this.** State reflecting under the
27569
- * declaration's name is the fault `TreeItem` already avoids by mirroring to
27570
- * `data-selected`, and four families here still write `selected` back into a
27571
- * consumer's markup. Splitting them means moving what every stylesheet selects
27572
- * on, which is a change of its own rather than a property being added. (property only)
27640
+ * element has one `selected` doing both jobs, so the declaration is the
27641
+ * attribute and the state is the property.
27642
+ *
27643
+ * **The attribute, read when it is asked for, and never a snapshot taken in
27644
+ * the constructor.** A field initializer runs there, and an element the HTML
27645
+ * parser created has none of its attributes yet at that moment: measured on
27646
+ * this element, on `Radio` and on `Toggle`, `<helix-option value="a"
27647
+ * selected>` reported `defaultSelected` as `false` both from parsed markup
27648
+ * and from `createElement` followed by `setAttribute`, which is every way a
27649
+ * consumer writes one. The snapshot could only ever be true for an element
27650
+ * already in the document when `customElements.define` ran.
27651
+ *
27652
+ * Nothing overwrites it either, which is what makes reading it late correct
27653
+ * rather than merely later: `selected` does not reflect, for the reason
27654
+ * `willUpdate` records, so the listbox's writes never reach the attribute and
27655
+ * what it says is what the markup said.
27656
+ *
27657
+ * **The deeper half is not this.** State reflecting under the declaration's
27658
+ * name is the fault `TreeItem` avoids by mirroring to `data-selected`.
27659
+ * Splitting them means moving what every stylesheet selects on, which is a
27660
+ * change of its own rather than a property being added. (property only)
27573
27661
  * - `text`: The words, for a listbox that has to match text against them.
27574
27662
  *
27575
27663
  * Read from the rendered content rather than required as a property, because
@@ -28948,9 +29036,22 @@ export type CustomElements = {
28948
29036
  *
28949
29037
  * `<option selected>` reflects to `defaultSelected` and `option.selected` is
28950
29038
  * live state that does not reflect, and those are two different facts. This
28951
- * element has one `selected` doing both jobs, so what is captured here is what
28952
- * the markup said at upgrade, before anything could overwrite it: read the
28953
- * attribute later and the listbox's own writes answer instead.
29039
+ * element has one `selected` doing both jobs, so the declaration is the
29040
+ * attribute and the state is the property.
29041
+ *
29042
+ * **The attribute, read when it is asked for, and never a snapshot taken in
29043
+ * the constructor.** A field initializer runs there, and an element the HTML
29044
+ * parser created has none of its attributes yet at that moment: measured on
29045
+ * this element, on `Option` and on `Toggle`, `<helix-radio value="a"
29046
+ * selected>` reported `defaultSelected` as `false` both from parsed markup
29047
+ * and from `createElement` followed by `setAttribute`, which is every way a
29048
+ * consumer writes one. The snapshot could only ever be true for an element
29049
+ * already in the document when `customElements.define` ran.
29050
+ *
29051
+ * Nothing overwrites it either, which is what makes reading it late correct
29052
+ * rather than merely later: `selected` does not reflect, for the reason
29053
+ * `willUpdate` records, so the group's writes never reach the attribute and
29054
+ * what it says is what the markup said.
28954
29055
  *
28955
29056
  * **The deeper half is not this.** State reflecting under the declaration's
28956
29057
  * name is the fault `TreeItem` avoids by mirroring to `data-selected`.
@@ -29885,6 +29986,13 @@ export type CustomElements = {
29885
29986
  * **A range is two of them.** There is no native two-thumb range, so two are
29886
29987
  * stacked on one track and each thumb keeps its own.
29887
29988
  *
29989
+ * **`required` arrives with the field mixin and cannot fail here**, which is
29990
+ * worth saying rather than leaving a reader to find. A range is never empty:
29991
+ * the platform shows its own midpoint whatever is set, and `willUpdate` seeds
29992
+ * that midpoint into `defaultValue` so the value agrees with the handle from the
29993
+ * first render. HTML does not apply `required` to a range either, so it stays
29994
+ * off the control and the marker beside the label is all it does.
29995
+ *
29888
29996
  * ## Attributes & Properties
29889
29997
  *
29890
29998
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -30049,9 +30157,9 @@ export type CustomElements = {
30049
30157
  * CSS variables available for styling the component.
30050
30158
  *
30051
30159
  * - `--slider-fraction`: The value as a fraction of the range, 0 to 1. (default: `undefined`)
30052
- * - `--slider-from`: Where the filled span starts, as a percentage of the track. (default: `undefined`)
30160
+ * - `--slider-from`: Where a range's filled span starts, as a fraction of the track, 0 to 1. (default: `undefined`)
30053
30161
  * - `--slider-marker-at`: Where one marker sits, as a percentage of the track. (default: `undefined`)
30054
- * - `--slider-to`: Where the filled span ends, as a percentage of the track. (default: `undefined`)
30162
+ * - `--slider-to`: Where a range's filled span ends, as a fraction of the track, 0 to 1. (default: `undefined`)
30055
30163
  *
30056
30164
  * ## CSS Parts
30057
30165
  *
@@ -33118,6 +33226,8 @@ export type CustomElements = {
33118
33226
  * Areas where markup can be added to the component.
33119
33227
  *
33120
33228
  * - `(default)`: The group's items.
33229
+ * - `end`: Whatever sits after the track on its own line, such as a count or a reset.
33230
+ * - `start`: Whatever sits before the track on its own line, such as an icon or a caption.
33121
33231
  *
33122
33232
  * ## Methods
33123
33233
  *
@@ -33217,9 +33327,22 @@ export type CustomElements = {
33217
33327
  *
33218
33328
  * `<option selected>` reflects to `defaultSelected` and `option.selected` is
33219
33329
  * live state that does not reflect, and those are two different facts. This
33220
- * element has one `selected` doing both jobs, so what is captured here is what
33221
- * the markup said at upgrade, before anything could overwrite it: read the
33222
- * attribute later and the listbox's own writes answer instead.
33330
+ * element has one `selected` doing both jobs, so the declaration is the
33331
+ * attribute and the state is the property.
33332
+ *
33333
+ * **The attribute, read when it is asked for, and never a snapshot taken in
33334
+ * the constructor.** A field initializer runs there, and an element the HTML
33335
+ * parser created has none of its attributes yet at that moment: measured on
33336
+ * this element, on `Option` and on `Radio`, `<helix-toggle value="light"
33337
+ * selected>` reported `defaultSelected` as `false` both from parsed markup
33338
+ * and from `createElement` followed by `setAttribute`, which is every way a
33339
+ * consumer writes one. The snapshot could only ever be true for an element
33340
+ * already in the document when `customElements.define` ran.
33341
+ *
33342
+ * Nothing overwrites it either, which is what makes reading it late correct
33343
+ * rather than merely later: `selected` does not reflect, for the reason
33344
+ * `willUpdate` records, so the group's writes never reach the attribute and
33345
+ * what it says is what the markup said.
33223
33346
  *
33224
33347
  * **The deeper half is not this.** State reflecting under the declaration's
33225
33348
  * name is the fault `TreeItem` avoids by mirroring to `data-selected`.
@@ -36749,7 +36872,7 @@ export type CustomElementsSolidJs = {
36749
36872
  *
36750
36873
  * Events that will be emitted by the component.
36751
36874
  *
36752
- * - `helix-select`: Fired when the slide in view changes, with its index. Cancelable: refusing it takes the decision and nothing moves.
36875
+ * - `helix-select`: Fired when the slide in view changes, with its index. Cancelable where the carousel is about to move: refusing a control or an indicator takes the decision and nothing moves. A drag has already moved the track, so that one announces after the fact and refusing it does nothing. See `handleScroll`.
36753
36876
  *
36754
36877
  * ## Slots
36755
36878
  *
@@ -45349,15 +45472,27 @@ export type CustomElementsSolidJs = {
45349
45472
  *
45350
45473
  * `<option selected>` reflects to `defaultSelected` and `option.selected` is
45351
45474
  * live state that does not reflect, and those are two different facts. This
45352
- * element has one `selected` doing both jobs, so what is captured here is what
45353
- * the markup said at upgrade, before anything could overwrite it: read the
45354
- * attribute later and the listbox's own writes answer instead.
45355
- *
45356
- * **The deeper half is 302 and is not this.** State reflecting under the
45357
- * declaration's name is the fault `TreeItem` already avoids by mirroring to
45358
- * `data-selected`, and four families here still write `selected` back into a
45359
- * consumer's markup. Splitting them means moving what every stylesheet selects
45360
- * on, which is a change of its own rather than a property being added. (property only)
45475
+ * element has one `selected` doing both jobs, so the declaration is the
45476
+ * attribute and the state is the property.
45477
+ *
45478
+ * **The attribute, read when it is asked for, and never a snapshot taken in
45479
+ * the constructor.** A field initializer runs there, and an element the HTML
45480
+ * parser created has none of its attributes yet at that moment: measured on
45481
+ * this element, on `Radio` and on `Toggle`, `<helix-option value="a"
45482
+ * selected>` reported `defaultSelected` as `false` both from parsed markup
45483
+ * and from `createElement` followed by `setAttribute`, which is every way a
45484
+ * consumer writes one. The snapshot could only ever be true for an element
45485
+ * already in the document when `customElements.define` ran.
45486
+ *
45487
+ * Nothing overwrites it either, which is what makes reading it late correct
45488
+ * rather than merely later: `selected` does not reflect, for the reason
45489
+ * `willUpdate` records, so the listbox's writes never reach the attribute and
45490
+ * what it says is what the markup said.
45491
+ *
45492
+ * **The deeper half is not this.** State reflecting under the declaration's
45493
+ * name is the fault `TreeItem` avoids by mirroring to `data-selected`.
45494
+ * Splitting them means moving what every stylesheet selects on, which is a
45495
+ * change of its own rather than a property being added. (property only)
45361
45496
  * - `text`: The words, for a listbox that has to match text against them.
45362
45497
  *
45363
45498
  * Read from the rendered content rather than required as a property, because
@@ -46761,9 +46896,22 @@ export type CustomElementsSolidJs = {
46761
46896
  *
46762
46897
  * `<option selected>` reflects to `defaultSelected` and `option.selected` is
46763
46898
  * live state that does not reflect, and those are two different facts. This
46764
- * element has one `selected` doing both jobs, so what is captured here is what
46765
- * the markup said at upgrade, before anything could overwrite it: read the
46766
- * attribute later and the listbox's own writes answer instead.
46899
+ * element has one `selected` doing both jobs, so the declaration is the
46900
+ * attribute and the state is the property.
46901
+ *
46902
+ * **The attribute, read when it is asked for, and never a snapshot taken in
46903
+ * the constructor.** A field initializer runs there, and an element the HTML
46904
+ * parser created has none of its attributes yet at that moment: measured on
46905
+ * this element, on `Option` and on `Toggle`, `<helix-radio value="a"
46906
+ * selected>` reported `defaultSelected` as `false` both from parsed markup
46907
+ * and from `createElement` followed by `setAttribute`, which is every way a
46908
+ * consumer writes one. The snapshot could only ever be true for an element
46909
+ * already in the document when `customElements.define` ran.
46910
+ *
46911
+ * Nothing overwrites it either, which is what makes reading it late correct
46912
+ * rather than merely later: `selected` does not reflect, for the reason
46913
+ * `willUpdate` records, so the group's writes never reach the attribute and
46914
+ * what it says is what the markup said.
46767
46915
  *
46768
46916
  * **The deeper half is not this.** State reflecting under the declaration's
46769
46917
  * name is the fault `TreeItem` avoids by mirroring to `data-selected`.
@@ -47715,6 +47863,13 @@ export type CustomElementsSolidJs = {
47715
47863
  * **A range is two of them.** There is no native two-thumb range, so two are
47716
47864
  * stacked on one track and each thumb keeps its own.
47717
47865
  *
47866
+ * **`required` arrives with the field mixin and cannot fail here**, which is
47867
+ * worth saying rather than leaving a reader to find. A range is never empty:
47868
+ * the platform shows its own midpoint whatever is set, and `willUpdate` seeds
47869
+ * that midpoint into `defaultValue` so the value agrees with the handle from the
47870
+ * first render. HTML does not apply `required` to a range either, so it stays
47871
+ * off the control and the marker beside the label is all it does.
47872
+ *
47718
47873
  * ## Attributes & Properties
47719
47874
  *
47720
47875
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -47879,9 +48034,9 @@ export type CustomElementsSolidJs = {
47879
48034
  * CSS variables available for styling the component.
47880
48035
  *
47881
48036
  * - `--slider-fraction`: The value as a fraction of the range, 0 to 1. (default: `undefined`)
47882
- * - `--slider-from`: Where the filled span starts, as a percentage of the track. (default: `undefined`)
48037
+ * - `--slider-from`: Where a range's filled span starts, as a fraction of the track, 0 to 1. (default: `undefined`)
47883
48038
  * - `--slider-marker-at`: Where one marker sits, as a percentage of the track. (default: `undefined`)
47884
- * - `--slider-to`: Where the filled span ends, as a percentage of the track. (default: `undefined`)
48039
+ * - `--slider-to`: Where a range's filled span ends, as a fraction of the track, 0 to 1. (default: `undefined`)
47885
48040
  *
47886
48041
  * ## CSS Parts
47887
48042
  *
@@ -51015,6 +51170,8 @@ export type CustomElementsSolidJs = {
51015
51170
  * Areas where markup can be added to the component.
51016
51171
  *
51017
51172
  * - `(default)`: The group's items.
51173
+ * - `end`: Whatever sits after the track on its own line, such as a count or a reset.
51174
+ * - `start`: Whatever sits before the track on its own line, such as an icon or a caption.
51018
51175
  *
51019
51176
  * ## Methods
51020
51177
  *
@@ -51115,9 +51272,22 @@ export type CustomElementsSolidJs = {
51115
51272
  *
51116
51273
  * `<option selected>` reflects to `defaultSelected` and `option.selected` is
51117
51274
  * live state that does not reflect, and those are two different facts. This
51118
- * element has one `selected` doing both jobs, so what is captured here is what
51119
- * the markup said at upgrade, before anything could overwrite it: read the
51120
- * attribute later and the listbox's own writes answer instead.
51275
+ * element has one `selected` doing both jobs, so the declaration is the
51276
+ * attribute and the state is the property.
51277
+ *
51278
+ * **The attribute, read when it is asked for, and never a snapshot taken in
51279
+ * the constructor.** A field initializer runs there, and an element the HTML
51280
+ * parser created has none of its attributes yet at that moment: measured on
51281
+ * this element, on `Option` and on `Radio`, `<helix-toggle value="light"
51282
+ * selected>` reported `defaultSelected` as `false` both from parsed markup
51283
+ * and from `createElement` followed by `setAttribute`, which is every way a
51284
+ * consumer writes one. The snapshot could only ever be true for an element
51285
+ * already in the document when `customElements.define` ran.
51286
+ *
51287
+ * Nothing overwrites it either, which is what makes reading it late correct
51288
+ * rather than merely later: `selected` does not reflect, for the reason
51289
+ * `willUpdate` records, so the group's writes never reach the attribute and
51290
+ * what it says is what the markup said.
51121
51291
  *
51122
51292
  * **The deeper half is not this.** State reflecting under the declaration's
51123
51293
  * name is the fault `TreeItem` avoids by mirroring to `data-selected`.
@@ -52860,11 +53030,11 @@ export type CustomCssProperties = {
52860
53030
  "--chart-tick"?: (string) | undefined;
52861
53031
  /** The value as a fraction of the range, 0 to 1. */
52862
53032
  "--slider-fraction"?: (string) | undefined;
52863
- /** Where the filled span starts, as a percentage of the track. */
53033
+ /** Where a range's filled span starts, as a fraction of the track, 0 to 1. */
52864
53034
  "--slider-from"?: (string) | undefined;
52865
53035
  /** Where one marker sits, as a percentage of the track. */
52866
53036
  "--slider-marker-at"?: (string) | undefined;
52867
- /** Where the filled span ends, as a percentage of the track. */
53037
+ /** Where a range's filled span ends, as a fraction of the track, 0 to 1. */
52868
53038
  "--slider-to"?: (string) | undefined;
52869
53039
  /** Where a nested splitter crosses this one, as a percentage. */
52870
53040
  "--splitter-corner-at"?: (string) | undefined;
package/types/vue.d.ts CHANGED
@@ -1009,7 +1009,7 @@ case is the absent attribute, and the styles read it that way. */
1009
1009
  };
1010
1010
 
1011
1011
  export type HelixHeadlessCarouselVueEvents = {
1012
- /** Fired when the slide in view changes, with its index. Cancelable: refusing it takes the decision and nothing moves. */
1012
+ /** Fired when the slide in view changes, with its index. Cancelable where the carousel is about to move: refusing a control or an indicator takes the decision and nothing moves. A drag has already moved the track, so that one announces after the fact and refusing it does nothing. See `handleScroll`. */
1013
1013
  "helix-select": HelixHeadlessCarouselHelixSelectElementEvent;
1014
1014
  };
1015
1015
 
@@ -5318,15 +5318,27 @@ Written by the listbox. */
5318
5318
 
5319
5319
  `<option selected>` reflects to `defaultSelected` and `option.selected` is
5320
5320
  live state that does not reflect, and those are two different facts. This
5321
- element has one `selected` doing both jobs, so what is captured here is what
5322
- the markup said at upgrade, before anything could overwrite it: read the
5323
- attribute later and the listbox's own writes answer instead.
5324
-
5325
- **The deeper half is 302 and is not this.** State reflecting under the
5326
- declaration's name is the fault `TreeItem` already avoids by mirroring to
5327
- `data-selected`, and four families here still write `selected` back into a
5328
- consumer's markup. Splitting them means moving what every stylesheet selects
5329
- on, which is a change of its own rather than a property being added. */
5321
+ element has one `selected` doing both jobs, so the declaration is the
5322
+ attribute and the state is the property.
5323
+
5324
+ **The attribute, read when it is asked for, and never a snapshot taken in
5325
+ the constructor.** A field initializer runs there, and an element the HTML
5326
+ parser created has none of its attributes yet at that moment: measured on
5327
+ this element, on `Radio` and on `Toggle`, `<helix-option value="a"
5328
+ selected>` reported `defaultSelected` as `false` both from parsed markup
5329
+ and from `createElement` followed by `setAttribute`, which is every way a
5330
+ consumer writes one. The snapshot could only ever be true for an element
5331
+ already in the document when `customElements.define` ran.
5332
+
5333
+ Nothing overwrites it either, which is what makes reading it late correct
5334
+ rather than merely later: `selected` does not reflect, for the reason
5335
+ `willUpdate` records, so the listbox's writes never reach the attribute and
5336
+ what it says is what the markup said.
5337
+
5338
+ **The deeper half is not this.** State reflecting under the declaration's
5339
+ name is the fault `TreeItem` avoids by mirroring to `data-selected`.
5340
+ Splitting them means moving what every stylesheet selects on, which is a
5341
+ change of its own rather than a property being added. */
5330
5342
  defaultSelected?: (HelixHeadlessOption["defaultSelected"]) | undefined;
5331
5343
  };
5332
5344
 
@@ -5987,9 +5999,22 @@ Written by the group. */
5987
5999
 
5988
6000
  `<option selected>` reflects to `defaultSelected` and `option.selected` is
5989
6001
  live state that does not reflect, and those are two different facts. This
5990
- element has one `selected` doing both jobs, so what is captured here is what
5991
- the markup said at upgrade, before anything could overwrite it: read the
5992
- attribute later and the listbox's own writes answer instead.
6002
+ element has one `selected` doing both jobs, so the declaration is the
6003
+ attribute and the state is the property.
6004
+
6005
+ **The attribute, read when it is asked for, and never a snapshot taken in
6006
+ the constructor.** A field initializer runs there, and an element the HTML
6007
+ parser created has none of its attributes yet at that moment: measured on
6008
+ this element, on `Option` and on `Toggle`, `<helix-radio value="a"
6009
+ selected>` reported `defaultSelected` as `false` both from parsed markup
6010
+ and from `createElement` followed by `setAttribute`, which is every way a
6011
+ consumer writes one. The snapshot could only ever be true for an element
6012
+ already in the document when `customElements.define` ran.
6013
+
6014
+ Nothing overwrites it either, which is what makes reading it late correct
6015
+ rather than merely later: `selected` does not reflect, for the reason
6016
+ `willUpdate` records, so the group's writes never reach the attribute and
6017
+ what it says is what the markup said.
5993
6018
 
5994
6019
  **The deeper half is not this.** State reflecting under the declaration's
5995
6020
  name is the fault `TreeItem` avoids by mirroring to `data-selected`.
@@ -7967,9 +7992,22 @@ export type HelixHeadlessToggleVueProps = {
7967
7992
 
7968
7993
  `<option selected>` reflects to `defaultSelected` and `option.selected` is
7969
7994
  live state that does not reflect, and those are two different facts. This
7970
- element has one `selected` doing both jobs, so what is captured here is what
7971
- the markup said at upgrade, before anything could overwrite it: read the
7972
- attribute later and the listbox's own writes answer instead.
7995
+ element has one `selected` doing both jobs, so the declaration is the
7996
+ attribute and the state is the property.
7997
+
7998
+ **The attribute, read when it is asked for, and never a snapshot taken in
7999
+ the constructor.** A field initializer runs there, and an element the HTML
8000
+ parser created has none of its attributes yet at that moment: measured on
8001
+ this element, on `Option` and on `Radio`, `<helix-toggle value="light"
8002
+ selected>` reported `defaultSelected` as `false` both from parsed markup
8003
+ and from `createElement` followed by `setAttribute`, which is every way a
8004
+ consumer writes one. The snapshot could only ever be true for an element
8005
+ already in the document when `customElements.define` ran.
8006
+
8007
+ Nothing overwrites it either, which is what makes reading it late correct
8008
+ rather than merely later: `selected` does not reflect, for the reason
8009
+ `willUpdate` records, so the group's writes never reach the attribute and
8010
+ what it says is what the markup said.
7973
8011
 
7974
8012
  **The deeper half is not this.** State reflecting under the declaration's
7975
8013
  name is the fault `TreeItem` avoids by mirroring to `data-selected`.
@@ -8928,11 +8966,11 @@ export type CustomCssProperties = {
8928
8966
  "--chart-tick"?: (string) | undefined;
8929
8967
  /** The value as a fraction of the range, 0 to 1. */
8930
8968
  "--slider-fraction"?: (string) | undefined;
8931
- /** Where the filled span starts, as a percentage of the track. */
8969
+ /** Where a range's filled span starts, as a fraction of the track, 0 to 1. */
8932
8970
  "--slider-from"?: (string) | undefined;
8933
8971
  /** Where one marker sits, as a percentage of the track. */
8934
8972
  "--slider-marker-at"?: (string) | undefined;
8935
- /** Where the filled span ends, as a percentage of the track. */
8973
+ /** Where a range's filled span ends, as a fraction of the track, 0 to 1. */
8936
8974
  "--slider-to"?: (string) | undefined;
8937
8975
  /** Where a nested splitter crosses this one, as a percentage. */
8938
8976
  "--splitter-corner-at"?: (string) | undefined;
@@ -9494,7 +9532,7 @@ export interface WcToolkitVueGlobalComponents {
9494
9532
  HelixHeadlessSkipLinkVueProps,
9495
9533
  HelixHeadlessSkipLinkVueEvents
9496
9534
  >;
9497
- /** A real '<input type="range">', so the drag, the arrow keys, Home and End, the page keys and the touch target are the platform's. The last is the one nobody notices: a native range has a hit area larger than its thumb, sized by the platform for a finger. **The value is a string, like every other form control's.** A range submits text and 'MixinControllerValue' holds text, so the number is a reading of the value. 'valueAsNumber' is there for arithmetic. **Marks are drawn rather than left to '<datalist>'**, whose ticks cannot be styled and which Firefox does not render for a range at all. A mark is decoration; what a reader can land on is 'step', which the input enforces whether or not anything is drawn. 'markers' is a count rather than a flag, so a slider from zero to a hundred cannot silently ask for a hundred and one. **A range is two of them.** There is no native two-thumb range, so two are stacked on one track and each thumb keeps its own. */
9535
+ /** A real '<input type="range">', so the drag, the arrow keys, Home and End, the page keys and the touch target are the platform's. The last is the one nobody notices: a native range has a hit area larger than its thumb, sized by the platform for a finger. **The value is a string, like every other form control's.** A range submits text and 'MixinControllerValue' holds text, so the number is a reading of the value. 'valueAsNumber' is there for arithmetic. **Marks are drawn rather than left to '<datalist>'**, whose ticks cannot be styled and which Firefox does not render for a range at all. A mark is decoration; what a reader can land on is 'step', which the input enforces whether or not anything is drawn. 'markers' is a count rather than a flag, so a slider from zero to a hundred cannot silently ask for a hundred and one. **A range is two of them.** There is no native two-thumb range, so two are stacked on one track and each thumb keeps its own. **'required' arrives with the field mixin and cannot fail here**, which is worth saying rather than leaving a reader to find. A range is never empty: the platform shows its own midpoint whatever is set, and 'willUpdate' seeds that midpoint into 'defaultValue' so the value agrees with the handle from the first render. HTML does not apply 'required' to a range either, so it stays off the control and the marker beside the label is all it does. */
9498
9536
  "helix-headless-slider": DefineCustomElement<
9499
9537
  HelixHeadlessSlider,
9500
9538
  HelixHeadlessSliderVueProps,