@fusion.dev/helix-headless 0.42.0 → 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/custom-elements.json +31 -30
- package/dist/color-picker/root/color-picker-root.js +1 -2
- package/dist/date-picker/root/date-picker-root.d.ts +1 -1
- package/dist/format-date/root/format-date-root.d.ts +1 -1
- package/dist/option/root/option-root.d.ts +21 -11
- package/dist/option/root/option-root.js +2 -3
- package/dist/radio/root/radio-root.d.ts +16 -5
- package/dist/radio/root/radio-root.js +2 -3
- package/dist/slider/root/slider-root.d.ts +10 -3
- package/dist/toggle/group/toggle-group.d.ts +45 -1
- package/dist/toggle/group/toggle-group.js +11 -0
- package/dist/toggle/root/toggle-root.d.ts +17 -6
- package/dist/toggle/root/toggle-root.js +2 -3
- package/package.json +5 -5
- package/types/jsx.d.ts +236 -66
- package/types/vue.d.ts +56 -18
package/custom-elements.json
CHANGED
|
@@ -30667,7 +30667,7 @@
|
|
|
30667
30667
|
"helix": {
|
|
30668
30668
|
"category": "forms",
|
|
30669
30669
|
"since": "0.1.0",
|
|
30670
|
-
"status": "
|
|
30670
|
+
"status": "stable",
|
|
30671
30671
|
"documentation": "https://fusion.dev/helix/components/date-picker",
|
|
30672
30672
|
"aliases": [
|
|
30673
30673
|
"Calendar",
|
|
@@ -42521,7 +42521,7 @@
|
|
|
42521
42521
|
"helix": {
|
|
42522
42522
|
"category": "typography",
|
|
42523
42523
|
"since": "0.1.0",
|
|
42524
|
-
"status": "
|
|
42524
|
+
"status": "stable",
|
|
42525
42525
|
"documentation": "https://fusion.dev/helix/components/format-date",
|
|
42526
42526
|
"aliases": [
|
|
42527
42527
|
"RelativeTime",
|
|
@@ -42533,7 +42533,7 @@
|
|
|
42533
42533
|
"part": "Root",
|
|
42534
42534
|
"examples": [
|
|
42535
42535
|
{
|
|
42536
|
-
"description": "The same readings on the headless tier,
|
|
42536
|
+
"description": "The same readings on the headless tier, with every rule written by hand.",
|
|
42537
42537
|
"slug": "preview"
|
|
42538
42538
|
}
|
|
42539
42539
|
],
|
|
@@ -63024,13 +63024,7 @@
|
|
|
63024
63024
|
"type": {
|
|
63025
63025
|
"text": "boolean"
|
|
63026
63026
|
},
|
|
63027
|
-
"description": "Whether the markup declared this one chosen, which is what a reset returns to.\n\n`<option selected>` reflects to `defaultSelected` and `option.selected` is\nlive state that does not reflect, and those are two different facts. This\nelement has one `selected` doing both jobs, so
|
|
63028
|
-
},
|
|
63029
|
-
{
|
|
63030
|
-
"kind": "field",
|
|
63031
|
-
"name": "seeded",
|
|
63032
|
-
"privacy": "private",
|
|
63033
|
-
"description": "What the markup said, read once at construction for the reason above."
|
|
63027
|
+
"description": "Whether the markup declared this one chosen, which is what a reset returns to.\n\n`<option selected>` reflects to `defaultSelected` and `option.selected` is\nlive state that does not reflect, and those are two different facts. This\nelement has one `selected` doing both jobs, so the declaration is the\nattribute and the state is the property.\n\n**The attribute, read when it is asked for, and never a snapshot taken in\nthe constructor.** A field initializer runs there, and an element the HTML\nparser created has none of its attributes yet at that moment: measured on\nthis element, on `Radio` and on `Toggle`, `<helix-option value=\"a\"\nselected>` reported `defaultSelected` as `false` both from parsed markup\nand from `createElement` followed by `setAttribute`, which is every way a\nconsumer writes one. The snapshot could only ever be true for an element\nalready in the document when `customElements.define` ran.\n\nNothing overwrites it either, which is what makes reading it late correct\nrather than merely later: `selected` does not reflect, for the reason\n`willUpdate` records, so the listbox's writes never reach the attribute and\nwhat it says is what the markup said.\n\n**The deeper half is not this.** State reflecting under the declaration's\nname is the fault `TreeItem` avoids by mirroring to `data-selected`.\nSplitting them means moving what every stylesheet selects on, which is a\nchange of its own rather than a property being added."
|
|
63034
63028
|
},
|
|
63035
63029
|
{
|
|
63036
63030
|
"kind": "field",
|
|
@@ -71504,13 +71498,7 @@
|
|
|
71504
71498
|
"type": {
|
|
71505
71499
|
"text": "boolean"
|
|
71506
71500
|
},
|
|
71507
|
-
"description": "Whether the markup declared this one chosen, which is what a reset returns to.\n\n`<option selected>` reflects to `defaultSelected` and `option.selected` is\nlive state that does not reflect, and those are two different facts. This\nelement has one `selected` doing both jobs, so
|
|
71508
|
-
},
|
|
71509
|
-
{
|
|
71510
|
-
"kind": "field",
|
|
71511
|
-
"name": "seeded",
|
|
71512
|
-
"privacy": "private",
|
|
71513
|
-
"description": "What the markup said, read once at construction for the reason above."
|
|
71501
|
+
"description": "Whether the markup declared this one chosen, which is what a reset returns to.\n\n`<option selected>` reflects to `defaultSelected` and `option.selected` is\nlive state that does not reflect, and those are two different facts. This\nelement has one `selected` doing both jobs, so the declaration is the\nattribute and the state is the property.\n\n**The attribute, read when it is asked for, and never a snapshot taken in\nthe constructor.** A field initializer runs there, and an element the HTML\nparser created has none of its attributes yet at that moment: measured on\nthis element, on `Option` and on `Toggle`, `<helix-radio value=\"a\"\nselected>` reported `defaultSelected` as `false` both from parsed markup\nand from `createElement` followed by `setAttribute`, which is every way a\nconsumer writes one. The snapshot could only ever be true for an element\nalready in the document when `customElements.define` ran.\n\nNothing overwrites it either, which is what makes reading it late correct\nrather than merely later: `selected` does not reflect, for the reason\n`willUpdate` records, so the group's writes never reach the attribute and\nwhat it says is what the markup said.\n\n**The deeper half is not this.** State reflecting under the declaration's\nname is the fault `TreeItem` avoids by mirroring to `data-selected`.\nSplitting them means moving what every stylesheet selects on, which is a\nchange of its own rather than a property being added."
|
|
71514
71502
|
},
|
|
71515
71503
|
{
|
|
71516
71504
|
"kind": "field",
|
|
@@ -77355,7 +77343,7 @@
|
|
|
77355
77343
|
"declarations": [
|
|
77356
77344
|
{
|
|
77357
77345
|
"kind": "class",
|
|
77358
|
-
"description": "A real `<input type=\"range\">`, so the drag, the arrow keys, Home and End, the\npage keys and the touch target are the platform's. The last is the one nobody\nnotices: a native range has a hit area larger than its thumb, sized by the\nplatform for a finger.\n\n**The value is a string, like every other form control's.** A range submits\ntext and `MixinControllerValue` holds text, so the number is a reading of the\nvalue. `valueAsNumber` is there for arithmetic.\n\n**Marks are drawn rather than left to `<datalist>`**, whose ticks cannot be\nstyled and which Firefox does not render for a range at all. A mark is\ndecoration; what a reader can land on is `step`, which the input enforces\nwhether or not anything is drawn. `markers` is a count rather than a flag, so\na slider from zero to a hundred cannot silently ask for a hundred and one.\n\n**A range is two of them.** There is no native two-thumb range, so two are\nstacked on one track and each thumb keeps its own.",
|
|
77346
|
+
"description": "A real `<input type=\"range\">`, so the drag, the arrow keys, Home and End, the\npage keys and the touch target are the platform's. The last is the one nobody\nnotices: a native range has a hit area larger than its thumb, sized by the\nplatform for a finger.\n\n**The value is a string, like every other form control's.** A range submits\ntext and `MixinControllerValue` holds text, so the number is a reading of the\nvalue. `valueAsNumber` is there for arithmetic.\n\n**Marks are drawn rather than left to `<datalist>`**, whose ticks cannot be\nstyled and which Firefox does not render for a range at all. A mark is\ndecoration; what a reader can land on is `step`, which the input enforces\nwhether or not anything is drawn. `markers` is a count rather than a flag, so\na slider from zero to a hundred cannot silently ask for a hundred and one.\n\n**A range is two of them.** There is no native two-thumb range, so two are\nstacked on one track and each thumb keeps its own.\n\n**`required` arrives with the field mixin and cannot fail here**, which is\nworth saying rather than leaving a reader to find. A range is never empty:\nthe platform shows its own midpoint whatever is set, and `willUpdate` seeds\nthat midpoint into `defaultValue` so the value agrees with the handle from the\nfirst render. HTML does not apply `required` to a range either, so it stays\noff the control and the marker beside the label is all it does.",
|
|
77359
77347
|
"name": "HelixHeadlessSlider",
|
|
77360
77348
|
"cssProperties": [
|
|
77361
77349
|
{
|
|
@@ -77363,7 +77351,7 @@
|
|
|
77363
77351
|
"name": "--slider-fraction"
|
|
77364
77352
|
},
|
|
77365
77353
|
{
|
|
77366
|
-
"description": "Where
|
|
77354
|
+
"description": "Where a range's filled span starts, as a fraction of the track, 0 to 1.",
|
|
77367
77355
|
"name": "--slider-from"
|
|
77368
77356
|
},
|
|
77369
77357
|
{
|
|
@@ -77371,7 +77359,7 @@
|
|
|
77371
77359
|
"name": "--slider-marker-at"
|
|
77372
77360
|
},
|
|
77373
77361
|
{
|
|
77374
|
-
"description": "Where
|
|
77362
|
+
"description": "Where a range's filled span ends, as a fraction of the track, 0 to 1.",
|
|
77375
77363
|
"name": "--slider-to"
|
|
77376
77364
|
}
|
|
77377
77365
|
],
|
|
@@ -78720,7 +78708,7 @@
|
|
|
78720
78708
|
"helix": {
|
|
78721
78709
|
"category": "forms",
|
|
78722
78710
|
"since": "0.1.0",
|
|
78723
|
-
"status": "
|
|
78711
|
+
"status": "stable",
|
|
78724
78712
|
"documentation": "https://fusion.dev/helix/components/slider",
|
|
78725
78713
|
"aliases": [
|
|
78726
78714
|
"Range",
|
|
@@ -97186,9 +97174,28 @@
|
|
|
97186
97174
|
{
|
|
97187
97175
|
"description": "The group's items.",
|
|
97188
97176
|
"name": ""
|
|
97177
|
+
},
|
|
97178
|
+
{
|
|
97179
|
+
"description": "Whatever sits after the track on its own line, such as a count or a reset.",
|
|
97180
|
+
"name": "end"
|
|
97181
|
+
},
|
|
97182
|
+
{
|
|
97183
|
+
"description": "Whatever sits before the track on its own line, such as an icon or a caption.",
|
|
97184
|
+
"name": "start"
|
|
97189
97185
|
}
|
|
97190
97186
|
],
|
|
97191
97187
|
"members": [
|
|
97188
|
+
{
|
|
97189
|
+
"kind": "method",
|
|
97190
|
+
"name": "adopt",
|
|
97191
|
+
"privacy": "private",
|
|
97192
|
+
"return": {
|
|
97193
|
+
"type": {
|
|
97194
|
+
"text": "void"
|
|
97195
|
+
}
|
|
97196
|
+
},
|
|
97197
|
+
"description": "Takes the markup's own answer where nothing has set a value.\n\n**The case a server renders**, and `Tabs` records the same fault from the\nother side. This element cannot choose on the server, having no children to\ncount, so a consumer whose first paint is right wrote `selected` on the\nitem: that serves `aria-checked=\"true\"`, and `sync` then cleared it one\nframe later, because `value` is `''` and nothing matches it. The shipped\n`disabled` example is exactly that markup, and drew both of its groups with\nnothing chosen.\n\n**Onto `defaultValue`, never onto `value`**, which is the same call\n`Slider` makes about the midpoint it seeds: what the markup declared is a\nfact about the markup, so it is where a reset returns to rather than\nsomething the reader chose. It also makes the group report the answer it is\nshowing, which marking the item alone would not: a `required` group would\notherwise tell a reader a value is missing while they are looking at one.\n\nA written `value` still wins, a declared property being a seed and a\ncorrection, and a group with neither still marks nothing at all.\n\n**The property and never `defaultSelected`, which is the attribute.** React\nassigns a JSX prop as a property where the custom element has one, and\nwrites no attribute at all, so keying on the attribute answers for markup\nand not for JSX. Measured by the parity check on the shipped `disabled`\nexample, whose two syntaxes are the same tree: 192 pixels apart, the HTML\nmarking `List` and the TSX marking nothing. The attribute seeds the\nproperty at upgrade, so reading the property covers both.\n\nRead before `sync` writes to it, which is the only moment it still holds\nwhat the consumer declared: after that it holds this group's answer, and\n`value` is no longer empty, so this returns above.\n\n**Called from `willUpdate` and from the slot, never from `sync`**, which\nruns in `updated`: a reactive property set there schedules a second update,\nand Lit's development build warns about exactly that once per group. From\n`willUpdate` the first render already carries the value, which is the pass\nthat has to be right. `children` is undefined on the server, whose element\nshim carries attributes and no tree, and that is the same guard\n`MixinCollection` records for the same reason."
|
|
97198
|
+
},
|
|
97192
97199
|
{
|
|
97193
97200
|
"kind": "method",
|
|
97194
97201
|
"name": "sync",
|
|
@@ -98278,7 +98285,7 @@
|
|
|
98278
98285
|
"summary": "A row of options with the selection marked by a moving indicator.",
|
|
98279
98286
|
"helix": {
|
|
98280
98287
|
"since": "0.1.0",
|
|
98281
|
-
"status": "
|
|
98288
|
+
"status": "stable",
|
|
98282
98289
|
"documentation": "https://fusion.dev/helix/components/toggle",
|
|
98283
98290
|
"aliases": [
|
|
98284
98291
|
"SegmentedControl",
|
|
@@ -98376,13 +98383,7 @@
|
|
|
98376
98383
|
"type": {
|
|
98377
98384
|
"text": "boolean"
|
|
98378
98385
|
},
|
|
98379
|
-
"description": "Whether the markup declared this one chosen, which is what a reset returns to.\n\n`<option selected>` reflects to `defaultSelected` and `option.selected` is\nlive state that does not reflect, and those are two different facts. This\nelement has one `selected` doing both jobs, so
|
|
98380
|
-
},
|
|
98381
|
-
{
|
|
98382
|
-
"kind": "field",
|
|
98383
|
-
"name": "seeded",
|
|
98384
|
-
"privacy": "private",
|
|
98385
|
-
"description": "What the markup said, read once at construction for the reason above."
|
|
98386
|
+
"description": "Whether the markup declared this one chosen, which is what a reset returns to.\n\n`<option selected>` reflects to `defaultSelected` and `option.selected` is\nlive state that does not reflect, and those are two different facts. This\nelement has one `selected` doing both jobs, so the declaration is the\nattribute and the state is the property.\n\n**The attribute, read when it is asked for, and never a snapshot taken in\nthe constructor.** A field initializer runs there, and an element the HTML\nparser created has none of its attributes yet at that moment: measured on\nthis element, on `Option` and on `Radio`, `<helix-toggle value=\"light\"\nselected>` reported `defaultSelected` as `false` both from parsed markup\nand from `createElement` followed by `setAttribute`, which is every way a\nconsumer writes one. The snapshot could only ever be true for an element\nalready in the document when `customElements.define` ran.\n\nNothing overwrites it either, which is what makes reading it late correct\nrather than merely later: `selected` does not reflect, for the reason\n`willUpdate` records, so the group's writes never reach the attribute and\nwhat it says is what the markup said.\n\n**The deeper half is not this.** State reflecting under the declaration's\nname is the fault `TreeItem` avoids by mirroring to `data-selected`.\nSplitting them means moving what every stylesheet selects on, which is a\nchange of its own rather than a property being added."
|
|
98386
98387
|
},
|
|
98387
98388
|
{
|
|
98388
98389
|
"kind": "field",
|
|
@@ -98825,7 +98826,7 @@
|
|
|
98825
98826
|
"helix": {
|
|
98826
98827
|
"category": "actions",
|
|
98827
98828
|
"since": "0.1.0",
|
|
98828
|
-
"status": "
|
|
98829
|
+
"status": "stable",
|
|
98829
98830
|
"documentation": "https://fusion.dev/helix/components/toggle",
|
|
98830
98831
|
"aliases": [
|
|
98831
98832
|
"Segment",
|
|
@@ -21,7 +21,7 @@ declare const HelixHeadlessDatePicker_base: (new (...args: any[]) => import("@fu
|
|
|
21
21
|
* write the same comma-separated `value`.
|
|
22
22
|
*
|
|
23
23
|
* @since 0.1.0
|
|
24
|
-
* @status
|
|
24
|
+
* @status stable
|
|
25
25
|
* @category forms
|
|
26
26
|
* @aliases Calendar, Date grid, Month view
|
|
27
27
|
* @documentation https://fusion.dev/helix/components/date-picker
|
|
@@ -30,7 +30,7 @@ import { nothing, type PropertyValues, type TemplateResult } from 'lit';
|
|
|
30
30
|
* "yesterday".
|
|
31
31
|
*
|
|
32
32
|
* @since 0.1.0
|
|
33
|
-
* @status
|
|
33
|
+
* @status stable
|
|
34
34
|
* @category typography
|
|
35
35
|
* @aliases RelativeTime, Timestamp, TimeAgo
|
|
36
36
|
* @documentation https://fusion.dev/helix/components/format-date
|
|
@@ -101,20 +101,30 @@ export declare class HelixHeadlessOption extends HelixElement {
|
|
|
101
101
|
*
|
|
102
102
|
* `<option selected>` reflects to `defaultSelected` and `option.selected` is
|
|
103
103
|
* live state that does not reflect, and those are two different facts. This
|
|
104
|
-
* element has one `selected` doing both jobs, so
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
104
|
+
* element has one `selected` doing both jobs, so the declaration is the
|
|
105
|
+
* attribute and the state is the property.
|
|
106
|
+
*
|
|
107
|
+
* **The attribute, read when it is asked for, and never a snapshot taken in
|
|
108
|
+
* the constructor.** A field initializer runs there, and an element the HTML
|
|
109
|
+
* parser created has none of its attributes yet at that moment: measured on
|
|
110
|
+
* this element, on `Radio` and on `Toggle`, `<helix-option value="a"
|
|
111
|
+
* selected>` reported `defaultSelected` as `false` both from parsed markup
|
|
112
|
+
* and from `createElement` followed by `setAttribute`, which is every way a
|
|
113
|
+
* consumer writes one. The snapshot could only ever be true for an element
|
|
114
|
+
* already in the document when `customElements.define` ran.
|
|
115
|
+
*
|
|
116
|
+
* Nothing overwrites it either, which is what makes reading it late correct
|
|
117
|
+
* rather than merely later: `selected` does not reflect, for the reason
|
|
118
|
+
* `willUpdate` records, so the listbox's writes never reach the attribute and
|
|
119
|
+
* what it says is what the markup said.
|
|
120
|
+
*
|
|
121
|
+
* **The deeper half is not this.** State reflecting under the declaration's
|
|
122
|
+
* name is the fault `TreeItem` avoids by mirroring to `data-selected`.
|
|
123
|
+
* Splitting them means moving what every stylesheet selects on, which is a
|
|
124
|
+
* change of its own rather than a property being added.
|
|
113
125
|
*/
|
|
114
126
|
get defaultSelected(): boolean;
|
|
115
127
|
set defaultSelected(next: boolean);
|
|
116
|
-
/** What the markup said, read once at construction for the reason above. */
|
|
117
|
-
private seeded;
|
|
118
128
|
/**
|
|
119
129
|
* A second line under the words, for what the choice actually is.
|
|
120
130
|
*
|
|
@@ -17,17 +17,16 @@ let HelixHeadlessOption = class HelixHeadlessOption extends HelixElement {
|
|
|
17
17
|
this.active = false;
|
|
18
18
|
this.alternate = '';
|
|
19
19
|
this.alternateLabel = '';
|
|
20
|
-
this.seeded = this.hasAttribute('selected');
|
|
21
20
|
this.disabled = false;
|
|
22
21
|
this.label = '';
|
|
23
22
|
this.selected = false;
|
|
24
23
|
this.value = '';
|
|
25
24
|
}
|
|
26
25
|
get defaultSelected() {
|
|
27
|
-
return this.
|
|
26
|
+
return this.hasAttribute('selected');
|
|
28
27
|
}
|
|
29
28
|
set defaultSelected(next) {
|
|
30
|
-
this.
|
|
29
|
+
this.toggleAttribute('selected', next);
|
|
31
30
|
}
|
|
32
31
|
get text() {
|
|
33
32
|
return [...this.childNodes]
|
|
@@ -51,9 +51,22 @@ export declare class HelixHeadlessRadio extends HelixElement {
|
|
|
51
51
|
*
|
|
52
52
|
* `<option selected>` reflects to `defaultSelected` and `option.selected` is
|
|
53
53
|
* live state that does not reflect, and those are two different facts. This
|
|
54
|
-
* element has one `selected` doing both jobs, so
|
|
55
|
-
*
|
|
56
|
-
*
|
|
54
|
+
* element has one `selected` doing both jobs, so the declaration is the
|
|
55
|
+
* attribute and the state is the property.
|
|
56
|
+
*
|
|
57
|
+
* **The attribute, read when it is asked for, and never a snapshot taken in
|
|
58
|
+
* the constructor.** A field initializer runs there, and an element the HTML
|
|
59
|
+
* parser created has none of its attributes yet at that moment: measured on
|
|
60
|
+
* this element, on `Option` and on `Toggle`, `<helix-radio value="a"
|
|
61
|
+
* selected>` reported `defaultSelected` as `false` both from parsed markup
|
|
62
|
+
* and from `createElement` followed by `setAttribute`, which is every way a
|
|
63
|
+
* consumer writes one. The snapshot could only ever be true for an element
|
|
64
|
+
* already in the document when `customElements.define` ran.
|
|
65
|
+
*
|
|
66
|
+
* Nothing overwrites it either, which is what makes reading it late correct
|
|
67
|
+
* rather than merely later: `selected` does not reflect, for the reason
|
|
68
|
+
* `willUpdate` records, so the group's writes never reach the attribute and
|
|
69
|
+
* what it says is what the markup said.
|
|
57
70
|
*
|
|
58
71
|
* **The deeper half is not this.** State reflecting under the declaration's
|
|
59
72
|
* name is the fault `TreeItem` avoids by mirroring to `data-selected`.
|
|
@@ -62,8 +75,6 @@ export declare class HelixHeadlessRadio extends HelixElement {
|
|
|
62
75
|
*/
|
|
63
76
|
get defaultSelected(): boolean;
|
|
64
77
|
set defaultSelected(next: boolean);
|
|
65
|
-
/** What the markup said, read once at construction for the reason above. */
|
|
66
|
-
private seeded;
|
|
67
78
|
/**
|
|
68
79
|
* Whether this is the current choice.
|
|
69
80
|
*
|
|
@@ -11,15 +11,14 @@ let HelixHeadlessRadio = class HelixHeadlessRadio extends HelixElement {
|
|
|
11
11
|
constructor() {
|
|
12
12
|
super(...arguments);
|
|
13
13
|
this.disabled = false;
|
|
14
|
-
this.seeded = this.hasAttribute('selected');
|
|
15
14
|
this.selected = false;
|
|
16
15
|
this.value = '';
|
|
17
16
|
}
|
|
18
17
|
get defaultSelected() {
|
|
19
|
-
return this.
|
|
18
|
+
return this.hasAttribute('selected');
|
|
20
19
|
}
|
|
21
20
|
set defaultSelected(next) {
|
|
22
|
-
this.
|
|
21
|
+
this.toggleAttribute('selected', next);
|
|
23
22
|
}
|
|
24
23
|
focusItem() {
|
|
25
24
|
this.partNamed('item')?.focus();
|
|
@@ -23,8 +23,15 @@ declare const HelixHeadlessSlider_base: (new (...args: any[]) => import("@fusion
|
|
|
23
23
|
* **A range is two of them.** There is no native two-thumb range, so two are
|
|
24
24
|
* stacked on one track and each thumb keeps its own.
|
|
25
25
|
*
|
|
26
|
+
* **`required` arrives with the field mixin and cannot fail here**, which is
|
|
27
|
+
* worth saying rather than leaving a reader to find. A range is never empty:
|
|
28
|
+
* the platform shows its own midpoint whatever is set, and `willUpdate` seeds
|
|
29
|
+
* that midpoint into `defaultValue` so the value agrees with the handle from the
|
|
30
|
+
* first render. HTML does not apply `required` to a range either, so it stays
|
|
31
|
+
* off the control and the marker beside the label is all it does.
|
|
32
|
+
*
|
|
26
33
|
* @since 0.1.0
|
|
27
|
-
* @status
|
|
34
|
+
* @status stable
|
|
28
35
|
* @category forms
|
|
29
36
|
* @aliases Range, Range input
|
|
30
37
|
* @documentation https://fusion.dev/helix/components/slider
|
|
@@ -44,9 +51,9 @@ declare const HelixHeadlessSlider_base: (new (...args: any[]) => import("@fusion
|
|
|
44
51
|
* @csspart output - The current value, shown beside it.
|
|
45
52
|
*
|
|
46
53
|
* @cssproperty --slider-fraction - The value as a fraction of the range, 0 to 1.
|
|
47
|
-
* @cssproperty --slider-from - Where
|
|
54
|
+
* @cssproperty --slider-from - Where a range's filled span starts, as a fraction of the track, 0 to 1.
|
|
48
55
|
* @cssproperty --slider-marker-at - Where one marker sits, as a percentage of the track.
|
|
49
|
-
* @cssproperty --slider-to - Where
|
|
56
|
+
* @cssproperty --slider-to - Where a range's filled span ends, as a fraction of the track, 0 to 1.
|
|
50
57
|
*
|
|
51
58
|
* @cssstate invalid - While there is feedback to show: the platform's verdict, or the consumer's `feedback`.
|
|
52
59
|
*/
|
|
@@ -16,11 +16,13 @@ declare const HelixHeadlessToggleGroup_base: (new (...args: any[]) => import("@f
|
|
|
16
16
|
* it has somewhere to be, which is the harmless direction.
|
|
17
17
|
*
|
|
18
18
|
* @since 0.1.0
|
|
19
|
-
* @status
|
|
19
|
+
* @status stable
|
|
20
20
|
* @aliases SegmentedControl, Segmented, Navigation, Switcher
|
|
21
21
|
* @documentation https://fusion.dev/helix/components/toggle
|
|
22
22
|
*
|
|
23
23
|
* @slot - The group's items.
|
|
24
|
+
* @slot end - Whatever sits after the track on its own line, such as a count or a reset.
|
|
25
|
+
* @slot start - Whatever sits before the track on its own line, such as an icon or a caption.
|
|
24
26
|
*
|
|
25
27
|
* @event {Event} change - Announced once the value has moved.
|
|
26
28
|
* @event {HelixBeforeChangeEvent} helix-before-change - Fired before the answer moves, and cancelable. The only way to refuse one.
|
|
@@ -38,6 +40,48 @@ declare const HelixHeadlessToggleGroup_base: (new (...args: any[]) => import("@f
|
|
|
38
40
|
* @cssstate invalid - While there is feedback to show: the platform's verdict, or the consumer's `feedback`.
|
|
39
41
|
*/
|
|
40
42
|
export declare class HelixHeadlessToggleGroup extends HelixHeadlessToggleGroup_base {
|
|
43
|
+
/**
|
|
44
|
+
* Takes the markup's own answer where nothing has set a value.
|
|
45
|
+
*
|
|
46
|
+
* **The case a server renders**, and `Tabs` records the same fault from the
|
|
47
|
+
* other side. This element cannot choose on the server, having no children to
|
|
48
|
+
* count, so a consumer whose first paint is right wrote `selected` on the
|
|
49
|
+
* item: that serves `aria-checked="true"`, and `sync` then cleared it one
|
|
50
|
+
* frame later, because `value` is `''` and nothing matches it. The shipped
|
|
51
|
+
* `disabled` example is exactly that markup, and drew both of its groups with
|
|
52
|
+
* nothing chosen.
|
|
53
|
+
*
|
|
54
|
+
* **Onto `defaultValue`, never onto `value`**, which is the same call
|
|
55
|
+
* `Slider` makes about the midpoint it seeds: what the markup declared is a
|
|
56
|
+
* fact about the markup, so it is where a reset returns to rather than
|
|
57
|
+
* something the reader chose. It also makes the group report the answer it is
|
|
58
|
+
* showing, which marking the item alone would not: a `required` group would
|
|
59
|
+
* otherwise tell a reader a value is missing while they are looking at one.
|
|
60
|
+
*
|
|
61
|
+
* A written `value` still wins, a declared property being a seed and a
|
|
62
|
+
* correction, and a group with neither still marks nothing at all.
|
|
63
|
+
*
|
|
64
|
+
* **The property and never `defaultSelected`, which is the attribute.** React
|
|
65
|
+
* assigns a JSX prop as a property where the custom element has one, and
|
|
66
|
+
* writes no attribute at all, so keying on the attribute answers for markup
|
|
67
|
+
* and not for JSX. Measured by the parity check on the shipped `disabled`
|
|
68
|
+
* example, whose two syntaxes are the same tree: 192 pixels apart, the HTML
|
|
69
|
+
* marking `List` and the TSX marking nothing. The attribute seeds the
|
|
70
|
+
* property at upgrade, so reading the property covers both.
|
|
71
|
+
*
|
|
72
|
+
* Read before `sync` writes to it, which is the only moment it still holds
|
|
73
|
+
* what the consumer declared: after that it holds this group's answer, and
|
|
74
|
+
* `value` is no longer empty, so this returns above.
|
|
75
|
+
*
|
|
76
|
+
* **Called from `willUpdate` and from the slot, never from `sync`**, which
|
|
77
|
+
* runs in `updated`: a reactive property set there schedules a second update,
|
|
78
|
+
* and Lit's development build warns about exactly that once per group. From
|
|
79
|
+
* `willUpdate` the first render already carries the value, which is the pass
|
|
80
|
+
* that has to be right. `children` is undefined on the server, whose element
|
|
81
|
+
* shim carries attributes and no tree, and that is the same guard
|
|
82
|
+
* `MixinCollection` records for the same reason.
|
|
83
|
+
*/
|
|
84
|
+
private adopt;
|
|
41
85
|
/** Marks the chosen item, separately from placing the indicator. */
|
|
42
86
|
private sync;
|
|
43
87
|
private readonly indicator;
|
|
@@ -25,6 +25,15 @@ let HelixHeadlessToggleGroup = class HelixHeadlessToggleGroup extends MixinContr
|
|
|
25
25
|
this.requestValue(event.detail.value);
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
+
adopt() {
|
|
29
|
+
if (this.value !== '' || this.children === undefined) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const declared = this.items.find((item) => item.selected);
|
|
33
|
+
if (declared) {
|
|
34
|
+
this.defaultValue = declared.value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
28
37
|
sync() {
|
|
29
38
|
const active = this.items.find((item) => item.value === this.value);
|
|
30
39
|
const entry = active ? undefined : this.items.find((item) => !item.disabled);
|
|
@@ -57,6 +66,7 @@ let HelixHeadlessToggleGroup = class HelixHeadlessToggleGroup extends MixinContr
|
|
|
57
66
|
}
|
|
58
67
|
willUpdate(changed) {
|
|
59
68
|
super.willUpdate(changed);
|
|
69
|
+
this.adopt();
|
|
60
70
|
hostAria(this.internals, { label: this.label, role: 'radiogroup' });
|
|
61
71
|
this.internals.setFormValue(this.value === '' ? null : this.value);
|
|
62
72
|
}
|
|
@@ -74,6 +84,7 @@ let HelixHeadlessToggleGroup = class HelixHeadlessToggleGroup extends MixinContr
|
|
|
74
84
|
<div part="indicator" aria-hidden="true"></div>
|
|
75
85
|
<slot
|
|
76
86
|
@slotchange=${() => {
|
|
87
|
+
this.adopt();
|
|
77
88
|
this.sync();
|
|
78
89
|
this.indicator.place();
|
|
79
90
|
}}
|
|
@@ -11,7 +11,7 @@ import { type PropertyValues, type TemplateResult } from 'lit';
|
|
|
11
11
|
* without radio semantics announcing destinations as choices.
|
|
12
12
|
*
|
|
13
13
|
* @since 0.1.0
|
|
14
|
-
* @status
|
|
14
|
+
* @status stable
|
|
15
15
|
* @category actions
|
|
16
16
|
* @aliases Segment, NavItem, Option
|
|
17
17
|
* @documentation https://fusion.dev/helix/components/toggle
|
|
@@ -34,9 +34,22 @@ export declare class HelixHeadlessToggle extends HelixElement {
|
|
|
34
34
|
*
|
|
35
35
|
* `<option selected>` reflects to `defaultSelected` and `option.selected` is
|
|
36
36
|
* live state that does not reflect, and those are two different facts. This
|
|
37
|
-
* element has one `selected` doing both jobs, so
|
|
38
|
-
*
|
|
39
|
-
*
|
|
37
|
+
* element has one `selected` doing both jobs, so the declaration is the
|
|
38
|
+
* attribute and the state is the property.
|
|
39
|
+
*
|
|
40
|
+
* **The attribute, read when it is asked for, and never a snapshot taken in
|
|
41
|
+
* the constructor.** A field initializer runs there, and an element the HTML
|
|
42
|
+
* parser created has none of its attributes yet at that moment: measured on
|
|
43
|
+
* this element, on `Option` and on `Radio`, `<helix-toggle value="light"
|
|
44
|
+
* selected>` reported `defaultSelected` as `false` both from parsed markup
|
|
45
|
+
* and from `createElement` followed by `setAttribute`, which is every way a
|
|
46
|
+
* consumer writes one. The snapshot could only ever be true for an element
|
|
47
|
+
* already in the document when `customElements.define` ran.
|
|
48
|
+
*
|
|
49
|
+
* Nothing overwrites it either, which is what makes reading it late correct
|
|
50
|
+
* rather than merely later: `selected` does not reflect, for the reason
|
|
51
|
+
* `willUpdate` records, so the group's writes never reach the attribute and
|
|
52
|
+
* what it says is what the markup said.
|
|
40
53
|
*
|
|
41
54
|
* **The deeper half is not this.** State reflecting under the declaration's
|
|
42
55
|
* name is the fault `TreeItem` avoids by mirroring to `data-selected`.
|
|
@@ -45,8 +58,6 @@ export declare class HelixHeadlessToggle extends HelixElement {
|
|
|
45
58
|
*/
|
|
46
59
|
get defaultSelected(): boolean;
|
|
47
60
|
set defaultSelected(next: boolean);
|
|
48
|
-
/** What the markup said, read once at construction for the reason above. */
|
|
49
|
-
private seeded;
|
|
50
61
|
/**
|
|
51
62
|
* Whether this item holds the group's tab stop while nothing is chosen.
|
|
52
63
|
*
|
|
@@ -11,16 +11,15 @@ let HelixHeadlessToggle = class HelixHeadlessToggle extends HelixElement {
|
|
|
11
11
|
constructor() {
|
|
12
12
|
super(...arguments);
|
|
13
13
|
this.disabled = false;
|
|
14
|
-
this.seeded = this.hasAttribute('selected');
|
|
15
14
|
this.focusable = false;
|
|
16
15
|
this.selected = false;
|
|
17
16
|
this.value = '';
|
|
18
17
|
}
|
|
19
18
|
get defaultSelected() {
|
|
20
|
-
return this.
|
|
19
|
+
return this.hasAttribute('selected');
|
|
21
20
|
}
|
|
22
21
|
set defaultSelected(next) {
|
|
23
|
-
this.
|
|
22
|
+
this.toggleAttribute('selected', next);
|
|
24
23
|
}
|
|
25
24
|
focusItem() {
|
|
26
25
|
this.partNamed('item')?.focus();
|
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.
|
|
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.
|
|
50
|
-
"@fusion.dev/helix-icons": "0.
|
|
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.
|
|
56
|
-
"@fusion.dev/helix-testing": "0.
|
|
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
|
@@ -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
|
|
10300
|
-
|
|
10301
|
-
|
|
10302
|
-
|
|
10303
|
-
|
|
10304
|
-
|
|
10305
|
-
|
|
10306
|
-
|
|
10307
|
-
|
|
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
|
|
10395
|
-
|
|
10396
|
-
|
|
10397
|
-
|
|
10398
|
-
|
|
10399
|
-
|
|
10400
|
-
|
|
10401
|
-
|
|
10402
|
-
|
|
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
|
|
11673
|
-
|
|
11674
|
-
|
|
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
|
|
11700
|
-
|
|
11701
|
-
|
|
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
|
|
15524
|
-
|
|
15525
|
-
|
|
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
|
|
15557
|
-
|
|
15558
|
-
|
|
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`.
|
|
@@ -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
|
|
27565
|
-
*
|
|
27566
|
-
*
|
|
27567
|
-
*
|
|
27568
|
-
*
|
|
27569
|
-
*
|
|
27570
|
-
*
|
|
27571
|
-
*
|
|
27572
|
-
*
|
|
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
|
|
28952
|
-
*
|
|
28953
|
-
*
|
|
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
|
|
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
|
|
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
|
|
33221
|
-
*
|
|
33222
|
-
*
|
|
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`.
|
|
@@ -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
|
|
45353
|
-
*
|
|
45354
|
-
*
|
|
45355
|
-
*
|
|
45356
|
-
*
|
|
45357
|
-
*
|
|
45358
|
-
*
|
|
45359
|
-
*
|
|
45360
|
-
*
|
|
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
|
|
46765
|
-
*
|
|
46766
|
-
*
|
|
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
|
|
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
|
|
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
|
|
51119
|
-
*
|
|
51120
|
-
*
|
|
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
|
|
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
|
|
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
|
@@ -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
|
|
5322
|
-
|
|
5323
|
-
|
|
5324
|
-
|
|
5325
|
-
|
|
5326
|
-
|
|
5327
|
-
|
|
5328
|
-
|
|
5329
|
-
|
|
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
|
|
5991
|
-
|
|
5992
|
-
|
|
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
|
|
7971
|
-
|
|
7972
|
-
|
|
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
|
|
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
|
|
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,
|