@fusion.dev/helix-headless 0.59.0 → 0.59.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +6 -5
- package/dist/object-inspector/root/object-inspector-root.js +3 -5
- package/dist/tabs/root/tabs-root.d.ts +8 -0
- package/dist/toast/root/toast-root.d.ts +12 -0
- package/dist/video/root/extra-controls.d.ts +2 -0
- package/dist/video/root/extra-controls.js +4 -1
- package/dist/video/root/video-root.d.ts +11 -0
- package/dist/video/root/video-root.js +15 -5
- package/dist/virtual-list/root/virtual-list-root.d.ts +8 -2
- package/dist/virtual-list/root/virtual-list-root.js +3 -5
- package/package.json +5 -5
- package/types/jsx.d.ts +80 -0
- package/types/vue.d.ts +20 -0
package/custom-elements.json
CHANGED
|
@@ -88337,7 +88337,7 @@
|
|
|
88337
88337
|
"type": {
|
|
88338
88338
|
"text": "'segmented' | 'underlined' | undefined"
|
|
88339
88339
|
},
|
|
88340
|
-
"description": "How the row reads.\n\nUnset is a raised pill on the selected tab with nothing behind the row,\nwhich is what a set sitting inside other chrome wants. `underlined` is a\nrule under the row and a thicker one under the selected tab, for a set that\nheads a page. `segmented` puts the pill in a framed, sunken track, which\nreads as one control rather than as a row.\n\nA value describes itself rather than naming another component: `segmented`\nand `underlined` are participles reading as a pair, the way `outlined` on\nAccordion does.\n\nReflected and left unset by default, so the host carries nothing a\nconsumer's server markup does not already have.",
|
|
88340
|
+
"description": "How the row reads.\n\nUnset is a raised pill on the selected tab with nothing behind the row,\nwhich is what a set sitting inside other chrome wants. `underlined` is a\nrule under the row and a thicker one under the selected tab, for a set that\nheads a page. `segmented` puts the pill in a framed, sunken track, which\nreads as one control rather than as a row.\n\nA value describes itself rather than naming another component: `segmented`\nand `underlined` are participles reading as a pair, the way `outlined` on\nAccordion does.\n\n**`segmented` is `ToggleGroup`'s track, opted into.** The two draw the same\ngroove, token for token, and the sheets already say so where the height is\nfixed. What differs is polarity, and both are right: a group of toggles is\none control, so its track is the resting state and its `separation` decides\nonly the frame around it, while a row of tabs is a row until something says\notherwise, so the track is a value here rather than the thing a value takes\naway.\n\nReflected and left unset by default, so the host carries nothing a\nconsumer's server markup does not already have.",
|
|
88341
88341
|
"attribute": "variant",
|
|
88342
88342
|
"reflects": true
|
|
88343
88343
|
},
|
|
@@ -88870,7 +88870,7 @@
|
|
|
88870
88870
|
"type": {
|
|
88871
88871
|
"text": "'segmented' | 'underlined' | undefined"
|
|
88872
88872
|
},
|
|
88873
|
-
"description": "How the row reads.\n\nUnset is a raised pill on the selected tab with nothing behind the row,\nwhich is what a set sitting inside other chrome wants. `underlined` is a\nrule under the row and a thicker one under the selected tab, for a set that\nheads a page. `segmented` puts the pill in a framed, sunken track, which\nreads as one control rather than as a row.\n\nA value describes itself rather than naming another component: `segmented`\nand `underlined` are participles reading as a pair, the way `outlined` on\nAccordion does.\n\nReflected and left unset by default, so the host carries nothing a\nconsumer's server markup does not already have.",
|
|
88873
|
+
"description": "How the row reads.\n\nUnset is a raised pill on the selected tab with nothing behind the row,\nwhich is what a set sitting inside other chrome wants. `underlined` is a\nrule under the row and a thicker one under the selected tab, for a set that\nheads a page. `segmented` puts the pill in a framed, sunken track, which\nreads as one control rather than as a row.\n\nA value describes itself rather than naming another component: `segmented`\nand `underlined` are participles reading as a pair, the way `outlined` on\nAccordion does.\n\n**`segmented` is `ToggleGroup`'s track, opted into.** The two draw the same\ngroove, token for token, and the sheets already say so where the height is\nfixed. What differs is polarity, and both are right: a group of toggles is\none control, so its track is the resting state and its `separation` decides\nonly the frame around it, while a row of tabs is a row until something says\notherwise, so the track is a value here rather than the thing a value takes\naway.\n\nReflected and left unset by default, so the host carries nothing a\nconsumer's server markup does not already have.",
|
|
88874
88874
|
"fieldName": "variant"
|
|
88875
88875
|
},
|
|
88876
88876
|
{
|
|
@@ -97004,7 +97004,7 @@
|
|
|
97004
97004
|
"type": {
|
|
97005
97005
|
"text": "| 'bottom-center'\n | 'bottom-end'\n | 'bottom-start'\n | 'top-center'\n | 'top-end'\n | 'top-start' | undefined"
|
|
97006
97006
|
},
|
|
97007
|
-
"description": "Which corner or edge the stack sits at.\n\nNamed here rather than on each message, because where a page puts its\ntoasts is a fact about the page: a stack whose members disagreed about\nwhere they were would not be a stack.\n\n**Optional, and bottom-end is the absence of it.** Reflecting *and*\ndefaulting is the pair that writes onto a host: every toast region anybody\nrendered would gain a `placement=\"bottom-end\"` nobody typed, which a React\nconsumer's server markup does not have. A sheet carries the resting\narrangement in its own `:host` rule and the selectors describe only the\ndepartures, which is what `orientation` does.",
|
|
97007
|
+
"description": "Which corner or edge the stack sits at.\n\nNamed here rather than on each message, because where a page puts its\ntoasts is a fact about the page: a stack whose members disagreed about\nwhere they were would not be a stack.\n\n**Six corners in one word, where `Carousel` splits the same question in\ntwo.** That family takes a placement and an alignment, and argues at its own\ndeclaration that one attribute naming both facts multiplies rather than\ncomposing. It is right there and wrong here, and the difference is the\nshape of the product. A carousel's is ragged: its `overlay` belongs to no\nedge at all, and its two groups of chrome move independently, shipping\ndifferent defaults so they do not land on each other, which is what makes\nrewriting one to move the other a real cost. A stack's is two edges by\nthree alignments, every pair real and every pair named this way by every\ntoast a reader has already met. Fusing spells the domain out and loses\nnothing; a stack has one position and takes it once.\n\n**Optional, and bottom-end is the absence of it.** Reflecting *and*\ndefaulting is the pair that writes onto a host: every toast region anybody\nrendered would gain a `placement=\"bottom-end\"` nobody typed, which a React\nconsumer's server markup does not have. A sheet carries the resting\narrangement in its own `:host` rule and the selectors describe only the\ndepartures, which is what `orientation` does.",
|
|
97008
97008
|
"attribute": "placement",
|
|
97009
97009
|
"reflects": true
|
|
97010
97010
|
},
|
|
@@ -97358,7 +97358,7 @@
|
|
|
97358
97358
|
"type": {
|
|
97359
97359
|
"text": "| 'bottom-center'\n | 'bottom-end'\n | 'bottom-start'\n | 'top-center'\n | 'top-end'\n | 'top-start' | undefined"
|
|
97360
97360
|
},
|
|
97361
|
-
"description": "Which corner or edge the stack sits at.\n\nNamed here rather than on each message, because where a page puts its\ntoasts is a fact about the page: a stack whose members disagreed about\nwhere they were would not be a stack.\n\n**Optional, and bottom-end is the absence of it.** Reflecting *and*\ndefaulting is the pair that writes onto a host: every toast region anybody\nrendered would gain a `placement=\"bottom-end\"` nobody typed, which a React\nconsumer's server markup does not have. A sheet carries the resting\narrangement in its own `:host` rule and the selectors describe only the\ndepartures, which is what `orientation` does.",
|
|
97361
|
+
"description": "Which corner or edge the stack sits at.\n\nNamed here rather than on each message, because where a page puts its\ntoasts is a fact about the page: a stack whose members disagreed about\nwhere they were would not be a stack.\n\n**Six corners in one word, where `Carousel` splits the same question in\ntwo.** That family takes a placement and an alignment, and argues at its own\ndeclaration that one attribute naming both facts multiplies rather than\ncomposing. It is right there and wrong here, and the difference is the\nshape of the product. A carousel's is ragged: its `overlay` belongs to no\nedge at all, and its two groups of chrome move independently, shipping\ndifferent defaults so they do not land on each other, which is what makes\nrewriting one to move the other a real cost. A stack's is two edges by\nthree alignments, every pair real and every pair named this way by every\ntoast a reader has already met. Fusing spells the domain out and loses\nnothing; a stack has one position and takes it once.\n\n**Optional, and bottom-end is the absence of it.** Reflecting *and*\ndefaulting is the pair that writes onto a host: every toast region anybody\nrendered would gain a `placement=\"bottom-end\"` nobody typed, which a React\nconsumer's server markup does not have. A sheet carries the resting\narrangement in its own `:host` rule and the selectors describe only the\ndepartures, which is what `orientation` does.",
|
|
97362
97362
|
"fieldName": "placement"
|
|
97363
97363
|
}
|
|
97364
97364
|
],
|
|
@@ -107645,7 +107645,8 @@
|
|
|
107645
107645
|
"type": {
|
|
107646
107646
|
"text": "Promise<void>"
|
|
107647
107647
|
}
|
|
107648
|
-
}
|
|
107648
|
+
},
|
|
107649
|
+
"description": "Into picture in picture and back, and quiet about being refused.\n\nCaught rather than `void`ed, the way `FullscreenController` catches its\nown: this is called from a click handler that discards the promise, so a\nrefusal is otherwise an unhandled rejection naming neither the element nor\nthe reason. The roster already declines to draw the button where the\nconsumer refused the feature, which leaves the refusals nothing can see\ncoming, a request without user activation and a window another document is\nalready using."
|
|
107649
107650
|
},
|
|
107650
107651
|
{
|
|
107651
107652
|
"kind": "field",
|
|
@@ -5,7 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
var HelixHeadlessObjectInspector_1;
|
|
8
|
-
import { CopyController, customElement, HelixElement, inlineStep, scrollItemIntoView, VirtualizeController, } from '@fusion.dev/helix-core';
|
|
8
|
+
import { CopyController, customElement, elementById, HelixElement, inlineStep, scrollItemIntoView, searchableById, VirtualizeController, } from '@fusion.dev/helix-core';
|
|
9
9
|
import { caretDown, caretRight } from '@fusion.dev/helix-icons';
|
|
10
10
|
import { html, nothing } from 'lit';
|
|
11
11
|
import { property, state } from 'lit/decorators.js';
|
|
@@ -146,9 +146,7 @@ let HelixHeadlessObjectInspector = class HelixHeadlessObjectInspector extends He
|
|
|
146
146
|
}
|
|
147
147
|
willUpdate(changed) {
|
|
148
148
|
super.willUpdate(changed);
|
|
149
|
-
if (this.loadedFor !== this.for &&
|
|
150
|
-
typeof this.ownerDocument?.getElementById === 'function' &&
|
|
151
|
-
!this.hydrating) {
|
|
149
|
+
if (this.loadedFor !== this.for && searchableById(this) && !this.hydrating) {
|
|
152
150
|
this.loadedFor = this.for;
|
|
153
151
|
this.load();
|
|
154
152
|
}
|
|
@@ -178,7 +176,7 @@ let HelixHeadlessObjectInspector = class HelixHeadlessObjectInspector extends He
|
|
|
178
176
|
}
|
|
179
177
|
}
|
|
180
178
|
load() {
|
|
181
|
-
const text = this.for === '' ? '' : (
|
|
179
|
+
const text = this.for === '' ? '' : (elementById(this, this.for)?.textContent ?? '');
|
|
182
180
|
try {
|
|
183
181
|
this.read = text.trim() === '' ? undefined : JSON.parse(text);
|
|
184
182
|
}
|
|
@@ -60,6 +60,14 @@ export declare class HelixHeadlessTabs extends HelixHeadlessTabs_base {
|
|
|
60
60
|
* and `underlined` are participles reading as a pair, the way `outlined` on
|
|
61
61
|
* Accordion does.
|
|
62
62
|
*
|
|
63
|
+
* **`segmented` is `ToggleGroup`'s track, opted into.** The two draw the same
|
|
64
|
+
* groove, token for token, and the sheets already say so where the height is
|
|
65
|
+
* fixed. What differs is polarity, and both are right: a group of toggles is
|
|
66
|
+
* one control, so its track is the resting state and its `separation` decides
|
|
67
|
+
* only the frame around it, while a row of tabs is a row until something says
|
|
68
|
+
* otherwise, so the track is a value here rather than the thing a value takes
|
|
69
|
+
* away.
|
|
70
|
+
*
|
|
63
71
|
* Reflected and left unset by default, so the host carries nothing a
|
|
64
72
|
* consumer's server markup does not already have.
|
|
65
73
|
*/
|
|
@@ -52,6 +52,18 @@ export declare class HelixHeadlessToast extends HelixElement {
|
|
|
52
52
|
* toasts is a fact about the page: a stack whose members disagreed about
|
|
53
53
|
* where they were would not be a stack.
|
|
54
54
|
*
|
|
55
|
+
* **Six corners in one word, where `Carousel` splits the same question in
|
|
56
|
+
* two.** That family takes a placement and an alignment, and argues at its own
|
|
57
|
+
* declaration that one attribute naming both facts multiplies rather than
|
|
58
|
+
* composing. It is right there and wrong here, and the difference is the
|
|
59
|
+
* shape of the product. A carousel's is ragged: its `overlay` belongs to no
|
|
60
|
+
* edge at all, and its two groups of chrome move independently, shipping
|
|
61
|
+
* different defaults so they do not land on each other, which is what makes
|
|
62
|
+
* rewriting one to move the other a real cost. A stack's is two edges by
|
|
63
|
+
* three alignments, every pair real and every pair named this way by every
|
|
64
|
+
* toast a reader has already met. Fusing spells the domain out and loses
|
|
65
|
+
* nothing; a stack has one position and takes it once.
|
|
66
|
+
*
|
|
55
67
|
* **Optional, and bottom-end is the absence of it.** Reflecting *and*
|
|
56
68
|
* defaulting is the pair that writes onto a host: every toast region anybody
|
|
57
69
|
* rendered would gain a `placement="bottom-end"` nobody typed, which a React
|
|
@@ -13,6 +13,8 @@ export interface Conditions {
|
|
|
13
13
|
hydrating: boolean;
|
|
14
14
|
/** Whether anything on the network has offered to play this. */
|
|
15
15
|
remote: boolean;
|
|
16
|
+
/** Whether the consumer has refused picture in picture on the element. */
|
|
17
|
+
refusedPip: boolean;
|
|
16
18
|
/** Whether a file is named, which is what a download needs. */
|
|
17
19
|
source: boolean;
|
|
18
20
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { writtenList } from '@fusion.dev/helix-core';
|
|
2
2
|
export const offers = (one, player) => {
|
|
3
3
|
if (one === 'pip') {
|
|
4
|
-
return !player.hydrating &&
|
|
4
|
+
return (!player.hydrating &&
|
|
5
|
+
!player.refusedPip &&
|
|
6
|
+
typeof document !== 'undefined' &&
|
|
7
|
+
document.pictureInPictureEnabled);
|
|
5
8
|
}
|
|
6
9
|
if (one === 'remote') {
|
|
7
10
|
return player.remote;
|
|
@@ -510,6 +510,17 @@ export declare class HelixHeadlessVideo extends HelixElement {
|
|
|
510
510
|
private skip;
|
|
511
511
|
/** Steps through the speeds offered, which is what one button can do. */
|
|
512
512
|
private cycleSpeed;
|
|
513
|
+
/**
|
|
514
|
+
* Into picture in picture and back, and quiet about being refused.
|
|
515
|
+
*
|
|
516
|
+
* Caught rather than `void`ed, the way `FullscreenController` catches its
|
|
517
|
+
* own: this is called from a click handler that discards the promise, so a
|
|
518
|
+
* refusal is otherwise an unhandled rejection naming neither the element nor
|
|
519
|
+
* the reason. The roster already declines to draw the button where the
|
|
520
|
+
* consumer refused the feature, which leaves the refusals nothing can see
|
|
521
|
+
* coming, a request without user activation and a window another document is
|
|
522
|
+
* already using.
|
|
523
|
+
*/
|
|
513
524
|
private togglePip;
|
|
514
525
|
/**
|
|
515
526
|
* A press on the picture plays or pauses it.
|
|
@@ -174,7 +174,12 @@ let HelixHeadlessVideo = class HelixHeadlessVideo extends HelixElement {
|
|
|
174
174
|
this.captions = [];
|
|
175
175
|
}
|
|
176
176
|
get conditions() {
|
|
177
|
-
return {
|
|
177
|
+
return {
|
|
178
|
+
hydrating: this.hydrating,
|
|
179
|
+
refusedPip: this.disablePictureInPicture,
|
|
180
|
+
remote: this.remoteAvailable,
|
|
181
|
+
source: this.src !== '',
|
|
182
|
+
};
|
|
178
183
|
}
|
|
179
184
|
get extras() {
|
|
180
185
|
return barControls(this.extraControls, this.conditions);
|
|
@@ -347,11 +352,16 @@ let HelixHeadlessVideo = class HelixHeadlessVideo extends HelixElement {
|
|
|
347
352
|
if (!video) {
|
|
348
353
|
return;
|
|
349
354
|
}
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
355
|
+
try {
|
|
356
|
+
if (document.pictureInPictureElement === video) {
|
|
357
|
+
await document.exitPictureInPicture();
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
await video.requestPictureInPicture();
|
|
361
|
+
}
|
|
362
|
+
catch (error) {
|
|
363
|
+
console.warn(`<${this.localName}> could not enter picture in picture. A press has to come from the reader, and one window holds it at a time.`, error);
|
|
353
364
|
}
|
|
354
|
-
await video.requestPictureInPicture();
|
|
355
365
|
}
|
|
356
366
|
willUpdate(changed) {
|
|
357
367
|
super.willUpdate(changed);
|
|
@@ -83,9 +83,15 @@ export declare class HelixHeadlessVirtualList extends HelixElement {
|
|
|
83
83
|
/**
|
|
84
84
|
* Reads the source named by `for`, before the render that draws it.
|
|
85
85
|
*
|
|
86
|
+
* **Resolved through `getRootNode()`, so a list inside another component's
|
|
87
|
+
* shadow root names a source in that root rather than in the page.** Read
|
|
88
|
+
* against `ownerDocument` it looked in the document whatever tree it was in,
|
|
89
|
+
* and found nothing from inside an app shell or a sandbox, which is
|
|
90
|
+
* indistinguishable here from the miss this tolerates on purpose.
|
|
91
|
+
*
|
|
86
92
|
* Not on the server, per the server rules: the shim has attributes and no
|
|
87
|
-
* tree
|
|
88
|
-
*
|
|
93
|
+
* tree to look an id up in. Nor while hydrating what a server sent, which it
|
|
94
|
+
* drew with nothing read. A source that is missing or
|
|
89
95
|
* not an array leaves the list empty rather than throwing, because a consumer
|
|
90
96
|
* whose data has not arrived yet is the ordinary case and an empty list says
|
|
91
97
|
* so by itself.
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { customElement, HelixElement, VirtualizeController } from '@fusion.dev/helix-core';
|
|
7
|
+
import { customElement, elementById, HelixElement, searchableById, VirtualizeController, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { html } from 'lit';
|
|
9
9
|
import { property, state } from 'lit/decorators.js';
|
|
10
10
|
let HelixHeadlessVirtualList = class HelixHeadlessVirtualList extends HelixElement {
|
|
@@ -31,9 +31,7 @@ let HelixHeadlessVirtualList = class HelixHeadlessVirtualList extends HelixEleme
|
|
|
31
31
|
}
|
|
32
32
|
willUpdate(changed) {
|
|
33
33
|
super.willUpdate(changed);
|
|
34
|
-
if (this.readFor !== this.for &&
|
|
35
|
-
typeof this.ownerDocument?.getElementById === 'function' &&
|
|
36
|
-
!this.hydrating) {
|
|
34
|
+
if (this.readFor !== this.for && searchableById(this) && !this.hydrating) {
|
|
37
35
|
this.readFor = this.for;
|
|
38
36
|
this.read();
|
|
39
37
|
}
|
|
@@ -48,7 +46,7 @@ let HelixHeadlessVirtualList = class HelixHeadlessVirtualList extends HelixEleme
|
|
|
48
46
|
this.place();
|
|
49
47
|
}
|
|
50
48
|
read() {
|
|
51
|
-
const source = this.for === '' ? null :
|
|
49
|
+
const source = this.for === '' ? null : elementById(this, this.for);
|
|
52
50
|
const text = source?.textContent ?? '';
|
|
53
51
|
if (text.trim() === '') {
|
|
54
52
|
this.rows = [];
|
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.59.
|
|
4
|
+
"version": "0.59.2",
|
|
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.59.
|
|
50
|
-
"@fusion.dev/helix-icons": "0.59.
|
|
49
|
+
"@fusion.dev/helix-core": "0.59.2",
|
|
50
|
+
"@fusion.dev/helix-icons": "0.59.2",
|
|
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.59.
|
|
56
|
-
"@fusion.dev/helix-testing": "0.59.
|
|
55
|
+
"@fusion.dev/helix-cem": "0.59.2",
|
|
56
|
+
"@fusion.dev/helix-testing": "0.59.2",
|
|
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
|
@@ -14521,6 +14521,14 @@ A value describes itself rather than naming another component: `segmented`
|
|
|
14521
14521
|
and `underlined` are participles reading as a pair, the way `outlined` on
|
|
14522
14522
|
Accordion does.
|
|
14523
14523
|
|
|
14524
|
+
**`segmented` is `ToggleGroup`'s track, opted into.** The two draw the same
|
|
14525
|
+
groove, token for token, and the sheets already say so where the height is
|
|
14526
|
+
fixed. What differs is polarity, and both are right: a group of toggles is
|
|
14527
|
+
one control, so its track is the resting state and its `separation` decides
|
|
14528
|
+
only the frame around it, while a row of tabs is a row until something says
|
|
14529
|
+
otherwise, so the track is a value here rather than the thing a value takes
|
|
14530
|
+
away.
|
|
14531
|
+
|
|
14524
14532
|
Reflected and left unset by default, so the host carries nothing a
|
|
14525
14533
|
consumer's server markup does not already have. */
|
|
14526
14534
|
variant?: (HelixHeadlessTabs["variant"]) | undefined;
|
|
@@ -14573,6 +14581,14 @@ A value describes itself rather than naming another component: `segmented`
|
|
|
14573
14581
|
and `underlined` are participles reading as a pair, the way `outlined` on
|
|
14574
14582
|
Accordion does.
|
|
14575
14583
|
|
|
14584
|
+
**`segmented` is `ToggleGroup`'s track, opted into.** The two draw the same
|
|
14585
|
+
groove, token for token, and the sheets already say so where the height is
|
|
14586
|
+
fixed. What differs is polarity, and both are right: a group of toggles is
|
|
14587
|
+
one control, so its track is the resting state and its `separation` decides
|
|
14588
|
+
only the frame around it, while a row of tabs is a row until something says
|
|
14589
|
+
otherwise, so the track is a value here rather than the thing a value takes
|
|
14590
|
+
away.
|
|
14591
|
+
|
|
14576
14592
|
Reflected and left unset by default, so the host carries nothing a
|
|
14577
14593
|
consumer's server markup does not already have. */
|
|
14578
14594
|
"prop:variant"?: (HelixHeadlessTabs["variant"]) | undefined;
|
|
@@ -15920,6 +15936,18 @@ Named here rather than on each message, because where a page puts its
|
|
|
15920
15936
|
toasts is a fact about the page: a stack whose members disagreed about
|
|
15921
15937
|
where they were would not be a stack.
|
|
15922
15938
|
|
|
15939
|
+
**Six corners in one word, where `Carousel` splits the same question in
|
|
15940
|
+
two.** That family takes a placement and an alignment, and argues at its own
|
|
15941
|
+
declaration that one attribute naming both facts multiplies rather than
|
|
15942
|
+
composing. It is right there and wrong here, and the difference is the
|
|
15943
|
+
shape of the product. A carousel's is ragged: its `overlay` belongs to no
|
|
15944
|
+
edge at all, and its two groups of chrome move independently, shipping
|
|
15945
|
+
different defaults so they do not land on each other, which is what makes
|
|
15946
|
+
rewriting one to move the other a real cost. A stack's is two edges by
|
|
15947
|
+
three alignments, every pair real and every pair named this way by every
|
|
15948
|
+
toast a reader has already met. Fusing spells the domain out and loses
|
|
15949
|
+
nothing; a stack has one position and takes it once.
|
|
15950
|
+
|
|
15923
15951
|
**Optional, and bottom-end is the absence of it.** Reflecting *and*
|
|
15924
15952
|
defaulting is the pair that writes onto a host: every toast region anybody
|
|
15925
15953
|
rendered would gain a `placement="bottom-end"` nobody typed, which a React
|
|
@@ -15941,6 +15969,18 @@ Named here rather than on each message, because where a page puts its
|
|
|
15941
15969
|
toasts is a fact about the page: a stack whose members disagreed about
|
|
15942
15970
|
where they were would not be a stack.
|
|
15943
15971
|
|
|
15972
|
+
**Six corners in one word, where `Carousel` splits the same question in
|
|
15973
|
+
two.** That family takes a placement and an alignment, and argues at its own
|
|
15974
|
+
declaration that one attribute naming both facts multiplies rather than
|
|
15975
|
+
composing. It is right there and wrong here, and the difference is the
|
|
15976
|
+
shape of the product. A carousel's is ragged: its `overlay` belongs to no
|
|
15977
|
+
edge at all, and its two groups of chrome move independently, shipping
|
|
15978
|
+
different defaults so they do not land on each other, which is what makes
|
|
15979
|
+
rewriting one to move the other a real cost. A stack's is two edges by
|
|
15980
|
+
three alignments, every pair real and every pair named this way by every
|
|
15981
|
+
toast a reader has already met. Fusing spells the domain out and loses
|
|
15982
|
+
nothing; a stack has one position and takes it once.
|
|
15983
|
+
|
|
15944
15984
|
**Optional, and bottom-end is the absence of it.** Reflecting *and*
|
|
15945
15985
|
defaulting is the pair that writes onto a host: every toast region anybody
|
|
15946
15986
|
rendered would gain a `placement="bottom-end"` nobody typed, which a React
|
|
@@ -32596,6 +32636,14 @@ export type CustomElements = {
|
|
|
32596
32636
|
* and `underlined` are participles reading as a pair, the way `outlined` on
|
|
32597
32637
|
* Accordion does.
|
|
32598
32638
|
*
|
|
32639
|
+
* **`segmented` is `ToggleGroup`'s track, opted into.** The two draw the same
|
|
32640
|
+
* groove, token for token, and the sheets already say so where the height is
|
|
32641
|
+
* fixed. What differs is polarity, and both are right: a group of toggles is
|
|
32642
|
+
* one control, so its track is the resting state and its `separation` decides
|
|
32643
|
+
* only the frame around it, while a row of tabs is a row until something says
|
|
32644
|
+
* otherwise, so the track is a value here rather than the thing a value takes
|
|
32645
|
+
* away.
|
|
32646
|
+
*
|
|
32599
32647
|
* Reflected and left unset by default, so the host carries nothing a
|
|
32600
32648
|
* consumer's server markup does not already have.
|
|
32601
32649
|
* - `active`: Which item is current, by its `value`.
|
|
@@ -33956,6 +34004,18 @@ export type CustomElements = {
|
|
|
33956
34004
|
* toasts is a fact about the page: a stack whose members disagreed about
|
|
33957
34005
|
* where they were would not be a stack.
|
|
33958
34006
|
*
|
|
34007
|
+
* **Six corners in one word, where `Carousel` splits the same question in
|
|
34008
|
+
* two.** That family takes a placement and an alignment, and argues at its own
|
|
34009
|
+
* declaration that one attribute naming both facts multiplies rather than
|
|
34010
|
+
* composing. It is right there and wrong here, and the difference is the
|
|
34011
|
+
* shape of the product. A carousel's is ragged: its `overlay` belongs to no
|
|
34012
|
+
* edge at all, and its two groups of chrome move independently, shipping
|
|
34013
|
+
* different defaults so they do not land on each other, which is what makes
|
|
34014
|
+
* rewriting one to move the other a real cost. A stack's is two edges by
|
|
34015
|
+
* three alignments, every pair real and every pair named this way by every
|
|
34016
|
+
* toast a reader has already met. Fusing spells the domain out and loses
|
|
34017
|
+
* nothing; a stack has one position and takes it once.
|
|
34018
|
+
*
|
|
33959
34019
|
* **Optional, and bottom-end is the absence of it.** Reflecting *and*
|
|
33960
34020
|
* defaulting is the pair that writes onto a host: every toast region anybody
|
|
33961
34021
|
* rendered would gain a `placement="bottom-end"` nobody typed, which a React
|
|
@@ -50781,6 +50841,14 @@ export type CustomElementsSolidJs = {
|
|
|
50781
50841
|
* and `underlined` are participles reading as a pair, the way `outlined` on
|
|
50782
50842
|
* Accordion does.
|
|
50783
50843
|
*
|
|
50844
|
+
* **`segmented` is `ToggleGroup`'s track, opted into.** The two draw the same
|
|
50845
|
+
* groove, token for token, and the sheets already say so where the height is
|
|
50846
|
+
* fixed. What differs is polarity, and both are right: a group of toggles is
|
|
50847
|
+
* one control, so its track is the resting state and its `separation` decides
|
|
50848
|
+
* only the frame around it, while a row of tabs is a row until something says
|
|
50849
|
+
* otherwise, so the track is a value here rather than the thing a value takes
|
|
50850
|
+
* away.
|
|
50851
|
+
*
|
|
50784
50852
|
* Reflected and left unset by default, so the host carries nothing a
|
|
50785
50853
|
* consumer's server markup does not already have.
|
|
50786
50854
|
* - `active`: Which item is current, by its `value`.
|
|
@@ -52164,6 +52232,18 @@ export type CustomElementsSolidJs = {
|
|
|
52164
52232
|
* toasts is a fact about the page: a stack whose members disagreed about
|
|
52165
52233
|
* where they were would not be a stack.
|
|
52166
52234
|
*
|
|
52235
|
+
* **Six corners in one word, where `Carousel` splits the same question in
|
|
52236
|
+
* two.** That family takes a placement and an alignment, and argues at its own
|
|
52237
|
+
* declaration that one attribute naming both facts multiplies rather than
|
|
52238
|
+
* composing. It is right there and wrong here, and the difference is the
|
|
52239
|
+
* shape of the product. A carousel's is ragged: its `overlay` belongs to no
|
|
52240
|
+
* edge at all, and its two groups of chrome move independently, shipping
|
|
52241
|
+
* different defaults so they do not land on each other, which is what makes
|
|
52242
|
+
* rewriting one to move the other a real cost. A stack's is two edges by
|
|
52243
|
+
* three alignments, every pair real and every pair named this way by every
|
|
52244
|
+
* toast a reader has already met. Fusing spells the domain out and loses
|
|
52245
|
+
* nothing; a stack has one position and takes it once.
|
|
52246
|
+
*
|
|
52167
52247
|
* **Optional, and bottom-end is the absence of it.** Reflecting *and*
|
|
52168
52248
|
* defaulting is the pair that writes onto a host: every toast region anybody
|
|
52169
52249
|
* rendered would gain a `placement="bottom-end"` nobody typed, which a React
|
package/types/vue.d.ts
CHANGED
|
@@ -7444,6 +7444,14 @@ A value describes itself rather than naming another component: `segmented`
|
|
|
7444
7444
|
and `underlined` are participles reading as a pair, the way `outlined` on
|
|
7445
7445
|
Accordion does.
|
|
7446
7446
|
|
|
7447
|
+
**`segmented` is `ToggleGroup`'s track, opted into.** The two draw the same
|
|
7448
|
+
groove, token for token, and the sheets already say so where the height is
|
|
7449
|
+
fixed. What differs is polarity, and both are right: a group of toggles is
|
|
7450
|
+
one control, so its track is the resting state and its `separation` decides
|
|
7451
|
+
only the frame around it, while a row of tabs is a row until something says
|
|
7452
|
+
otherwise, so the track is a value here rather than the thing a value takes
|
|
7453
|
+
away.
|
|
7454
|
+
|
|
7447
7455
|
Reflected and left unset by default, so the host carries nothing a
|
|
7448
7456
|
consumer's server markup does not already have. */
|
|
7449
7457
|
variant?: (HelixHeadlessTabs["variant"]) | undefined;
|
|
@@ -8157,6 +8165,18 @@ Named here rather than on each message, because where a page puts its
|
|
|
8157
8165
|
toasts is a fact about the page: a stack whose members disagreed about
|
|
8158
8166
|
where they were would not be a stack.
|
|
8159
8167
|
|
|
8168
|
+
**Six corners in one word, where `Carousel` splits the same question in
|
|
8169
|
+
two.** That family takes a placement and an alignment, and argues at its own
|
|
8170
|
+
declaration that one attribute naming both facts multiplies rather than
|
|
8171
|
+
composing. It is right there and wrong here, and the difference is the
|
|
8172
|
+
shape of the product. A carousel's is ragged: its `overlay` belongs to no
|
|
8173
|
+
edge at all, and its two groups of chrome move independently, shipping
|
|
8174
|
+
different defaults so they do not land on each other, which is what makes
|
|
8175
|
+
rewriting one to move the other a real cost. A stack's is two edges by
|
|
8176
|
+
three alignments, every pair real and every pair named this way by every
|
|
8177
|
+
toast a reader has already met. Fusing spells the domain out and loses
|
|
8178
|
+
nothing; a stack has one position and takes it once.
|
|
8179
|
+
|
|
8160
8180
|
**Optional, and bottom-end is the absence of it.** Reflecting *and*
|
|
8161
8181
|
defaulting is the pair that writes onto a host: every toast region anybody
|
|
8162
8182
|
rendered would gain a `placement="bottom-end"` nobody typed, which a React
|