@fusion.dev/helix-headless 0.33.4 → 0.34.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 +51 -0
- package/dist/carousel/root/carousel-root.d.ts +49 -0
- package/dist/carousel/root/carousel-root.js +10 -0
- package/dist/tree/root/tree-root.d.ts +36 -0
- package/dist/tree/root/tree-root.js +3 -0
- package/package.json +5 -5
- package/types/jsx.d.ts +156 -0
- package/types/vue.d.ts +40 -0
package/custom-elements.json
CHANGED
|
@@ -9526,6 +9526,20 @@
|
|
|
9526
9526
|
"kind": "class",
|
|
9527
9527
|
"description": "The track is a scroller with scroll snapping, so a drag, a trackpad swipe,\nand the browser's own momentum all work without being reimplemented. The\ncontrols scroll it; they do not drive a transform.\n\nSlides are the consumer's own elements, and nothing is written onto them. The\ncomponent renders a pane per slide carrying `role=\"group\"`,\n`aria-roledescription=\"slide\"` and a name reading its position in the set,\nand assigns the slide into it: a screen-reader user hears where they are, and\na slide that is itself a link is still a link. See `assign`.\n\n**Rotation stops on focus and on hover, and once stopped it stays stopped.**\nThe APG is explicit: rotation must not resume unless the reader asks for it,\nso hovering away does not start it again. The control names the action it\nperforms, and it is first in the tab order.",
|
|
9528
9528
|
"name": "HelixHeadlessCarousel",
|
|
9529
|
+
"cssProperties": [
|
|
9530
|
+
{
|
|
9531
|
+
"description": "Space between slides. A sheet sets it and the component measures the run with it.",
|
|
9532
|
+
"name": "--carousel-gap"
|
|
9533
|
+
},
|
|
9534
|
+
{
|
|
9535
|
+
"description": "The size one pane is laid out at. A sheet sets it and the component measures the run with it.",
|
|
9536
|
+
"name": "--carousel-pane"
|
|
9537
|
+
},
|
|
9538
|
+
{
|
|
9539
|
+
"description": "How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`.",
|
|
9540
|
+
"name": "--carousel-run-end"
|
|
9541
|
+
}
|
|
9542
|
+
],
|
|
9529
9543
|
"cssParts": [
|
|
9530
9544
|
{
|
|
9531
9545
|
"description": "The row of controls.",
|
|
@@ -9966,6 +9980,17 @@
|
|
|
9966
9980
|
},
|
|
9967
9981
|
"description": "Puts each slide into the pane rendered for it.\n\n**The panes carry the ARIA and the consumer's element carries none**, which\nis the whole reason this is a manual assignment rather than a plain slot.\nThe APG wants each slide to be a `group` with `aria-roledescription=\"slide\"`\nand a name saying where it sits in the run, and writing those onto the\nelements a consumer wrote fails twice, only one of them about frameworks.\n\n**A React consumer's slides are nodes React is in the middle of hydrating.**\nAttributes landing before React reaches them are a DOM it did not render,\nwhich it reports as a mismatch and will not patch up: the ARIA survives and\nthe announcement is correct, so the console is the only tell. Deferring the\nwrite does not help, a frame being a race rather than an ordering: measured\nin Chromium on the landing page, a tab opened in the foreground still\nreported the mismatch and a tab opened hidden did not, only because\n`requestAnimationFrame` had not run there yet. `Chat`'s comment on\n`shadowRootOptions` reaches the same conclusion.\n\n**And `role=\"group\"` on a consumer's `<a href>` is not additive.** It\nreplaces the implicit link role, so six insight cards on the landing page\nannounced as groups and left the links list entirely. No amount of\ndeferring helps, because the write is the bug. A pane around the slide is\nwhat the pattern actually asks for: a group holding a link, rather than a\nlink relabeled as a group."
|
|
9968
9982
|
},
|
|
9983
|
+
{
|
|
9984
|
+
"kind": "method",
|
|
9985
|
+
"name": "runEnd",
|
|
9986
|
+
"privacy": "private",
|
|
9987
|
+
"return": {
|
|
9988
|
+
"type": {
|
|
9989
|
+
"text": "string | typeof nothing"
|
|
9990
|
+
}
|
|
9991
|
+
},
|
|
9992
|
+
"description": "How far short of a whole pixel the run of slides ends, for the last one.\n\n**The run has to end on a whole pixel, because a right-to-left track cannot\nreach a fraction.** Three across 692 makes the run 450.66 longer than the\ntrack. Chromium measures a right-to-left scroller from its far end and\nfloors that length, so the track stops at -450 where a left-to-right one\nrounds to 451, and two thirds of a pixel of the slide before stays at the\nleading edge. Ending on a whole pixel, the far end is one number both ways\nand the last place rests on it in both, so a swipe to the end stops there\ntoo.\n\n**Here rather than in a stylesheet, because the count is the component's.**\nThe arithmetic wants how many slides there are, and CSS can only ask\n`sibling-count()`, which is Chromium-only, evaluates to 0 through\n`::part()`, and needs a `:last-child` that `::part()` cannot carry either.\nSo the styled tier could correct its run and a consumer writing their own\nseveral-across sheet could not: measured in Chromium at three across, the\nheadless tier rested at 451 against -450 while the styled tier rested at\none number both ways. Published from here, one declaration reading this\ngets both tiers and any consumer to the same place.\n\n**WebKit takes the margin and does not need it**, which is the reason a\ncorrection written in CSS looked like enough. It has no `sibling-count()`\nat all, so nothing reached that engine, and its track rested on one number\nboth ways anyway. Measured with the margin in place, the same widths:\nevery resting place is the number it was without it.\n\n**On the last slide alone, which is what makes that one declaration\nenough.** A sheet writes `margin-inline-end: var(--carousel-run-end, 0px)`\nacross every pane and the fallback answers on all but the last, so nothing\nhas to select a slide by its position in the run.\n\n**A sheet says how wide a pane is and how far apart they sit, and this\nreads both back.** Set neither and the correction is invalid at\ncomputed-value time, which is the fallback rather than a broken margin. The\npercentage resolves where the value is used, on the last pane, so it is the\ntrack's content box and not the track's own containing block: the width the\nrun is actually measured against.\n\nHorizontal only. A vertical track scrolls the other axis, `scrollTop`\ncounts up from zero whatever the writing mode, and there is no far end to\nfloor."
|
|
9993
|
+
},
|
|
9969
9994
|
{
|
|
9970
9995
|
"kind": "field",
|
|
9971
9996
|
"name": "tier",
|
|
@@ -10402,6 +10427,10 @@
|
|
|
10402
10427
|
{
|
|
10403
10428
|
"description": "The same carousel on the headless tier, with every rule written by hand.",
|
|
10404
10429
|
"slug": "preview"
|
|
10430
|
+
},
|
|
10431
|
+
{
|
|
10432
|
+
"description": "Three slides across, with the pane, the gap and the run's end written by hand.",
|
|
10433
|
+
"slug": "several-across"
|
|
10405
10434
|
}
|
|
10406
10435
|
],
|
|
10407
10436
|
"source": "helix/headless/src/carousel"
|
|
@@ -102578,6 +102607,16 @@
|
|
|
102578
102607
|
"description": "Accessible name for the tree.",
|
|
102579
102608
|
"attribute": "label"
|
|
102580
102609
|
},
|
|
102610
|
+
{
|
|
102611
|
+
"kind": "field",
|
|
102612
|
+
"name": "nesting",
|
|
102613
|
+
"type": {
|
|
102614
|
+
"text": "'heading' | 'peer' | 'subordinate' | undefined"
|
|
102615
|
+
},
|
|
102616
|
+
"description": "What a step inward means: nothing, a rank, or a heading over what follows.\n\nAll three answers are right, for different trees, which is why this is\nasked rather than decided. `peer` is a file explorer: every row is the same\nkind of thing, a name that may hold more names, and the indent alone says\nwhere one sits. `subordinate` is side navigation or a categorization: a\nsection holds pages and a facet holds values, so a step inward is a change\nof kind and the rows say so. `heading` is a documentation sidebar, where\nthe change is at the *parent*: \"Getting started\" is not a lesser page than\nthe pages under it and not a page at all, it is the name of the list, so\nthe branch takes the rail-heading treatment and its children stay at the\nsize every other row is.\n\n`subordinate` and `heading` are not the same answer said twice. One keys on\ndepth and quiets the child; the other keys on holding children and relabels\nthe parent, so a top-level leaf beside a branch is untouched by the first\nand untouched by the second for opposite reasons.\n\nOn the root rather than the item, because it is a fact about the tree. Set\nper row it would make a tree writable in which one branch ranks its\nchildren and the next does not, and it would have to be repeated on every\nrow to say one thing.\n\nHere rather than on the styled tier, because it is not about paint: with\nevery stylesheet deleted it is still true that this tree ranks its depths,\nthat this one heads them, and that a file explorer does neither. The styled\ntier steps a subordinate row once down the type scale and sets a heading\nbranch as a label; a headless consumer reads the attribute and the\n`--tree-level` each row carries, and draws either however they like.\n\n**Optional, with no default**, per the reflected-property rule: a value\nwritten here appears in the served markup of every tree anybody renders.\nThe resting state is the absence of the attribute, which is `peer`.",
|
|
102617
|
+
"attribute": "nesting",
|
|
102618
|
+
"reflects": true
|
|
102619
|
+
},
|
|
102581
102620
|
{
|
|
102582
102621
|
"kind": "field",
|
|
102583
102622
|
"name": "watcher",
|
|
@@ -103295,6 +103334,14 @@
|
|
|
103295
103334
|
"description": "Accessible name for the tree.",
|
|
103296
103335
|
"fieldName": "label"
|
|
103297
103336
|
},
|
|
103337
|
+
{
|
|
103338
|
+
"name": "nesting",
|
|
103339
|
+
"type": {
|
|
103340
|
+
"text": "'heading' | 'peer' | 'subordinate' | undefined"
|
|
103341
|
+
},
|
|
103342
|
+
"description": "What a step inward means: nothing, a rank, or a heading over what follows.\n\nAll three answers are right, for different trees, which is why this is\nasked rather than decided. `peer` is a file explorer: every row is the same\nkind of thing, a name that may hold more names, and the indent alone says\nwhere one sits. `subordinate` is side navigation or a categorization: a\nsection holds pages and a facet holds values, so a step inward is a change\nof kind and the rows say so. `heading` is a documentation sidebar, where\nthe change is at the *parent*: \"Getting started\" is not a lesser page than\nthe pages under it and not a page at all, it is the name of the list, so\nthe branch takes the rail-heading treatment and its children stay at the\nsize every other row is.\n\n`subordinate` and `heading` are not the same answer said twice. One keys on\ndepth and quiets the child; the other keys on holding children and relabels\nthe parent, so a top-level leaf beside a branch is untouched by the first\nand untouched by the second for opposite reasons.\n\nOn the root rather than the item, because it is a fact about the tree. Set\nper row it would make a tree writable in which one branch ranks its\nchildren and the next does not, and it would have to be repeated on every\nrow to say one thing.\n\nHere rather than on the styled tier, because it is not about paint: with\nevery stylesheet deleted it is still true that this tree ranks its depths,\nthat this one heads them, and that a file explorer does neither. The styled\ntier steps a subordinate row once down the type scale and sets a heading\nbranch as a label; a headless consumer reads the attribute and the\n`--tree-level` each row carries, and draws either however they like.\n\n**Optional, with no default**, per the reflected-property rule: a value\nwritten here appears in the served markup of every tree anybody renders.\nThe resting state is the absence of the attribute, which is `peer`.",
|
|
103343
|
+
"fieldName": "nesting"
|
|
103344
|
+
},
|
|
103298
103345
|
{
|
|
103299
103346
|
"name": "empty-text",
|
|
103300
103347
|
"type": {
|
|
@@ -103391,6 +103438,10 @@
|
|
|
103391
103438
|
{
|
|
103392
103439
|
"description": "The same tree on the headless tier, with every rule written by hand.",
|
|
103393
103440
|
"slug": "preview"
|
|
103441
|
+
},
|
|
103442
|
+
{
|
|
103443
|
+
"description": "Depth as a position, depth as a rank, and a branch that is a heading, with every rule written by hand.",
|
|
103444
|
+
"slug": "nesting"
|
|
103394
103445
|
}
|
|
103395
103446
|
],
|
|
103396
103447
|
"source": "helix/headless/src/tree"
|
|
@@ -41,6 +41,10 @@ import { type PropertyValues, type TemplateResult } from 'lit';
|
|
|
41
41
|
* @csspart rotation-mark - The glyph on the play and pause control.
|
|
42
42
|
* @csspart slide - The pane one slide is shown in, and the box the track snaps to.
|
|
43
43
|
* @csspart track - The scroller the slides sit in.
|
|
44
|
+
*
|
|
45
|
+
* @cssproperty --carousel-gap - Space between slides. A sheet sets it and the component measures the run with it.
|
|
46
|
+
* @cssproperty --carousel-pane - The size one pane is laid out at. A sheet sets it and the component measures the run with it.
|
|
47
|
+
* @cssproperty --carousel-run-end - How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`.
|
|
44
48
|
*/
|
|
45
49
|
export declare class HelixHeadlessCarousel extends HelixElement {
|
|
46
50
|
/**
|
|
@@ -394,6 +398,51 @@ export declare class HelixHeadlessCarousel extends HelixElement {
|
|
|
394
398
|
* link relabeled as a group.
|
|
395
399
|
*/
|
|
396
400
|
private assign;
|
|
401
|
+
/**
|
|
402
|
+
* How far short of a whole pixel the run of slides ends, for the last one.
|
|
403
|
+
*
|
|
404
|
+
* **The run has to end on a whole pixel, because a right-to-left track cannot
|
|
405
|
+
* reach a fraction.** Three across 692 makes the run 450.66 longer than the
|
|
406
|
+
* track. Chromium measures a right-to-left scroller from its far end and
|
|
407
|
+
* floors that length, so the track stops at -450 where a left-to-right one
|
|
408
|
+
* rounds to 451, and two thirds of a pixel of the slide before stays at the
|
|
409
|
+
* leading edge. Ending on a whole pixel, the far end is one number both ways
|
|
410
|
+
* and the last place rests on it in both, so a swipe to the end stops there
|
|
411
|
+
* too.
|
|
412
|
+
*
|
|
413
|
+
* **Here rather than in a stylesheet, because the count is the component's.**
|
|
414
|
+
* The arithmetic wants how many slides there are, and CSS can only ask
|
|
415
|
+
* `sibling-count()`, which is Chromium-only, evaluates to 0 through
|
|
416
|
+
* `::part()`, and needs a `:last-child` that `::part()` cannot carry either.
|
|
417
|
+
* So the styled tier could correct its run and a consumer writing their own
|
|
418
|
+
* several-across sheet could not: measured in Chromium at three across, the
|
|
419
|
+
* headless tier rested at 451 against -450 while the styled tier rested at
|
|
420
|
+
* one number both ways. Published from here, one declaration reading this
|
|
421
|
+
* gets both tiers and any consumer to the same place.
|
|
422
|
+
*
|
|
423
|
+
* **WebKit takes the margin and does not need it**, which is the reason a
|
|
424
|
+
* correction written in CSS looked like enough. It has no `sibling-count()`
|
|
425
|
+
* at all, so nothing reached that engine, and its track rested on one number
|
|
426
|
+
* both ways anyway. Measured with the margin in place, the same widths:
|
|
427
|
+
* every resting place is the number it was without it.
|
|
428
|
+
*
|
|
429
|
+
* **On the last slide alone, which is what makes that one declaration
|
|
430
|
+
* enough.** A sheet writes `margin-inline-end: var(--carousel-run-end, 0px)`
|
|
431
|
+
* across every pane and the fallback answers on all but the last, so nothing
|
|
432
|
+
* has to select a slide by its position in the run.
|
|
433
|
+
*
|
|
434
|
+
* **A sheet says how wide a pane is and how far apart they sit, and this
|
|
435
|
+
* reads both back.** Set neither and the correction is invalid at
|
|
436
|
+
* computed-value time, which is the fallback rather than a broken margin. The
|
|
437
|
+
* percentage resolves where the value is used, on the last pane, so it is the
|
|
438
|
+
* track's content box and not the track's own containing block: the width the
|
|
439
|
+
* run is actually measured against.
|
|
440
|
+
*
|
|
441
|
+
* Horizontal only. A vertical track scrolls the other axis, `scrollTop`
|
|
442
|
+
* counts up from zero whatever the writing mode, and there is no far end to
|
|
443
|
+
* floor.
|
|
444
|
+
*/
|
|
445
|
+
private runEnd;
|
|
397
446
|
protected render(): TemplateResult;
|
|
398
447
|
}
|
|
399
448
|
declare global {
|
|
@@ -241,8 +241,17 @@ let HelixHeadlessCarousel = class HelixHeadlessCarousel extends HelixElement {
|
|
|
241
241
|
panes[index]?.assign?.(slide);
|
|
242
242
|
});
|
|
243
243
|
}
|
|
244
|
+
runEnd() {
|
|
245
|
+
if (this.orientation === 'vertical') {
|
|
246
|
+
return nothing;
|
|
247
|
+
}
|
|
248
|
+
const run = `${this.slides.length} * (var(--carousel-pane) + var(--carousel-gap))` +
|
|
249
|
+
' - var(--carousel-gap) - 100%';
|
|
250
|
+
return `--carousel-run-end: calc(round(${run}, 1px) - (${run}))`;
|
|
251
|
+
}
|
|
244
252
|
render() {
|
|
245
253
|
const rotating = this.rotating;
|
|
254
|
+
const last = this.slides.length - 1;
|
|
246
255
|
return html `<div part="controls">
|
|
247
256
|
${this.autoplay
|
|
248
257
|
? html `<button
|
|
@@ -297,6 +306,7 @@ let HelixHeadlessCarousel = class HelixHeadlessCarousel extends HelixElement {
|
|
|
297
306
|
role="group"
|
|
298
307
|
aria-roledescription="slide"
|
|
299
308
|
aria-label=${`${index + 1} of ${this.slides.length}`}
|
|
309
|
+
style=${index === last ? this.runEnd() : nothing}
|
|
300
310
|
>
|
|
301
311
|
<slot
|
|
302
312
|
name=${this.assignsByName ? `slide-${index + 1}` : nothing}
|
|
@@ -34,6 +34,42 @@ export declare class HelixHeadlessTree extends HelixHeadlessTree_base {
|
|
|
34
34
|
* Accessible name for the tree.
|
|
35
35
|
*/
|
|
36
36
|
label: string;
|
|
37
|
+
/**
|
|
38
|
+
* What a step inward means: nothing, a rank, or a heading over what follows.
|
|
39
|
+
*
|
|
40
|
+
* All three answers are right, for different trees, which is why this is
|
|
41
|
+
* asked rather than decided. `peer` is a file explorer: every row is the same
|
|
42
|
+
* kind of thing, a name that may hold more names, and the indent alone says
|
|
43
|
+
* where one sits. `subordinate` is side navigation or a categorization: a
|
|
44
|
+
* section holds pages and a facet holds values, so a step inward is a change
|
|
45
|
+
* of kind and the rows say so. `heading` is a documentation sidebar, where
|
|
46
|
+
* the change is at the *parent*: "Getting started" is not a lesser page than
|
|
47
|
+
* the pages under it and not a page at all, it is the name of the list, so
|
|
48
|
+
* the branch takes the rail-heading treatment and its children stay at the
|
|
49
|
+
* size every other row is.
|
|
50
|
+
*
|
|
51
|
+
* `subordinate` and `heading` are not the same answer said twice. One keys on
|
|
52
|
+
* depth and quiets the child; the other keys on holding children and relabels
|
|
53
|
+
* the parent, so a top-level leaf beside a branch is untouched by the first
|
|
54
|
+
* and untouched by the second for opposite reasons.
|
|
55
|
+
*
|
|
56
|
+
* On the root rather than the item, because it is a fact about the tree. Set
|
|
57
|
+
* per row it would make a tree writable in which one branch ranks its
|
|
58
|
+
* children and the next does not, and it would have to be repeated on every
|
|
59
|
+
* row to say one thing.
|
|
60
|
+
*
|
|
61
|
+
* Here rather than on the styled tier, because it is not about paint: with
|
|
62
|
+
* every stylesheet deleted it is still true that this tree ranks its depths,
|
|
63
|
+
* that this one heads them, and that a file explorer does neither. The styled
|
|
64
|
+
* tier steps a subordinate row once down the type scale and sets a heading
|
|
65
|
+
* branch as a label; a headless consumer reads the attribute and the
|
|
66
|
+
* `--tree-level` each row carries, and draws either however they like.
|
|
67
|
+
*
|
|
68
|
+
* **Optional, with no default**, per the reflected-property rule: a value
|
|
69
|
+
* written here appears in the served markup of every tree anybody renders.
|
|
70
|
+
* The resting state is the absence of the attribute, which is `peer`.
|
|
71
|
+
*/
|
|
72
|
+
nesting?: 'heading' | 'peer' | 'subordinate';
|
|
37
73
|
private watcher;
|
|
38
74
|
/**
|
|
39
75
|
* Every item, in the order a reader moving down would meet them.
|
|
@@ -176,6 +176,9 @@ let HelixHeadlessTree = class HelixHeadlessTree extends MixinCollection(MixinCon
|
|
|
176
176
|
__decorate([
|
|
177
177
|
property()
|
|
178
178
|
], HelixHeadlessTree.prototype, "label", void 0);
|
|
179
|
+
__decorate([
|
|
180
|
+
property({ reflect: true })
|
|
181
|
+
], HelixHeadlessTree.prototype, "nesting", void 0);
|
|
179
182
|
HelixHeadlessTree = __decorate([
|
|
180
183
|
customElement('helix-headless-tree')
|
|
181
184
|
], HelixHeadlessTree);
|
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.34.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.34.0",
|
|
50
|
+
"@fusion.dev/helix-icons": "0.34.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.34.0",
|
|
56
|
+
"@fusion.dev/helix-testing": "0.34.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
|
@@ -16069,6 +16069,40 @@ export type HelixHeadlessTreeHelixSelectElementEvent =
|
|
|
16069
16069
|
export type HelixHeadlessTreeProps = {
|
|
16070
16070
|
/** Accessible name for the tree. */
|
|
16071
16071
|
label?: (HelixHeadlessTree["label"]) | undefined;
|
|
16072
|
+
/** What a step inward means: nothing, a rank, or a heading over what follows.
|
|
16073
|
+
|
|
16074
|
+
All three answers are right, for different trees, which is why this is
|
|
16075
|
+
asked rather than decided. `peer` is a file explorer: every row is the same
|
|
16076
|
+
kind of thing, a name that may hold more names, and the indent alone says
|
|
16077
|
+
where one sits. `subordinate` is side navigation or a categorization: a
|
|
16078
|
+
section holds pages and a facet holds values, so a step inward is a change
|
|
16079
|
+
of kind and the rows say so. `heading` is a documentation sidebar, where
|
|
16080
|
+
the change is at the *parent*: "Getting started" is not a lesser page than
|
|
16081
|
+
the pages under it and not a page at all, it is the name of the list, so
|
|
16082
|
+
the branch takes the rail-heading treatment and its children stay at the
|
|
16083
|
+
size every other row is.
|
|
16084
|
+
|
|
16085
|
+
`subordinate` and `heading` are not the same answer said twice. One keys on
|
|
16086
|
+
depth and quiets the child; the other keys on holding children and relabels
|
|
16087
|
+
the parent, so a top-level leaf beside a branch is untouched by the first
|
|
16088
|
+
and untouched by the second for opposite reasons.
|
|
16089
|
+
|
|
16090
|
+
On the root rather than the item, because it is a fact about the tree. Set
|
|
16091
|
+
per row it would make a tree writable in which one branch ranks its
|
|
16092
|
+
children and the next does not, and it would have to be repeated on every
|
|
16093
|
+
row to say one thing.
|
|
16094
|
+
|
|
16095
|
+
Here rather than on the styled tier, because it is not about paint: with
|
|
16096
|
+
every stylesheet deleted it is still true that this tree ranks its depths,
|
|
16097
|
+
that this one heads them, and that a file explorer does neither. The styled
|
|
16098
|
+
tier steps a subordinate row once down the type scale and sets a heading
|
|
16099
|
+
branch as a label; a headless consumer reads the attribute and the
|
|
16100
|
+
`--tree-level` each row carries, and draws either however they like.
|
|
16101
|
+
|
|
16102
|
+
**Optional, with no default**, per the reflected-property rule: a value
|
|
16103
|
+
written here appears in the served markup of every tree anybody renders.
|
|
16104
|
+
The resting state is the absence of the attribute, which is `peer`. */
|
|
16105
|
+
nesting?: (HelixHeadlessTree["nesting"]) | undefined;
|
|
16072
16106
|
/** What is said where there are none, and none are coming. */
|
|
16073
16107
|
"empty-text"?: (HelixHeadlessTree["emptyText"]) | undefined;
|
|
16074
16108
|
/** What is said where there are none, and none are coming. */
|
|
@@ -16114,6 +16148,40 @@ Ignored once `active` is written. */
|
|
|
16114
16148
|
export type HelixHeadlessTreeSolidJsProps = {
|
|
16115
16149
|
/** Accessible name for the tree. */
|
|
16116
16150
|
"prop:label"?: (HelixHeadlessTree["label"]) | undefined;
|
|
16151
|
+
/** What a step inward means: nothing, a rank, or a heading over what follows.
|
|
16152
|
+
|
|
16153
|
+
All three answers are right, for different trees, which is why this is
|
|
16154
|
+
asked rather than decided. `peer` is a file explorer: every row is the same
|
|
16155
|
+
kind of thing, a name that may hold more names, and the indent alone says
|
|
16156
|
+
where one sits. `subordinate` is side navigation or a categorization: a
|
|
16157
|
+
section holds pages and a facet holds values, so a step inward is a change
|
|
16158
|
+
of kind and the rows say so. `heading` is a documentation sidebar, where
|
|
16159
|
+
the change is at the *parent*: "Getting started" is not a lesser page than
|
|
16160
|
+
the pages under it and not a page at all, it is the name of the list, so
|
|
16161
|
+
the branch takes the rail-heading treatment and its children stay at the
|
|
16162
|
+
size every other row is.
|
|
16163
|
+
|
|
16164
|
+
`subordinate` and `heading` are not the same answer said twice. One keys on
|
|
16165
|
+
depth and quiets the child; the other keys on holding children and relabels
|
|
16166
|
+
the parent, so a top-level leaf beside a branch is untouched by the first
|
|
16167
|
+
and untouched by the second for opposite reasons.
|
|
16168
|
+
|
|
16169
|
+
On the root rather than the item, because it is a fact about the tree. Set
|
|
16170
|
+
per row it would make a tree writable in which one branch ranks its
|
|
16171
|
+
children and the next does not, and it would have to be repeated on every
|
|
16172
|
+
row to say one thing.
|
|
16173
|
+
|
|
16174
|
+
Here rather than on the styled tier, because it is not about paint: with
|
|
16175
|
+
every stylesheet deleted it is still true that this tree ranks its depths,
|
|
16176
|
+
that this one heads them, and that a file explorer does neither. The styled
|
|
16177
|
+
tier steps a subordinate row once down the type scale and sets a heading
|
|
16178
|
+
branch as a label; a headless consumer reads the attribute and the
|
|
16179
|
+
`--tree-level` each row carries, and draws either however they like.
|
|
16180
|
+
|
|
16181
|
+
**Optional, with no default**, per the reflected-property rule: a value
|
|
16182
|
+
written here appears in the served markup of every tree anybody renders.
|
|
16183
|
+
The resting state is the absence of the attribute, which is `peer`. */
|
|
16184
|
+
"prop:nesting"?: (HelixHeadlessTree["nesting"]) | undefined;
|
|
16117
16185
|
/** What is said where there are none, and none are coming. */
|
|
16118
16186
|
"attr:empty-text"?: (HelixHeadlessTree["emptyText"]) | undefined;
|
|
16119
16187
|
/** What is said where there are none, and none are coming. */
|
|
@@ -18781,6 +18849,14 @@ export type CustomElements = {
|
|
|
18781
18849
|
*
|
|
18782
18850
|
* - `goTo(index: number) => void`: Moves to a slide, wrapping only where `loop` says to.
|
|
18783
18851
|
*
|
|
18852
|
+
* ## CSS Custom Properties
|
|
18853
|
+
*
|
|
18854
|
+
* CSS variables available for styling the component.
|
|
18855
|
+
*
|
|
18856
|
+
* - `--carousel-gap`: Space between slides. A sheet sets it and the component measures the run with it. (default: `undefined`)
|
|
18857
|
+
* - `--carousel-pane`: The size one pane is laid out at. A sheet sets it and the component measures the run with it. (default: `undefined`)
|
|
18858
|
+
* - `--carousel-run-end`: How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`. (default: `undefined`)
|
|
18859
|
+
*
|
|
18784
18860
|
* ## CSS Parts
|
|
18785
18861
|
*
|
|
18786
18862
|
* Custom selectors for styling elements within the component.
|
|
@@ -33478,6 +33554,39 @@ export type CustomElements = {
|
|
|
33478
33554
|
* Component attributes and properties that can be applied to the element or by using JavaScript.
|
|
33479
33555
|
*
|
|
33480
33556
|
* - `label`: Accessible name for the tree.
|
|
33557
|
+
* - `nesting`: What a step inward means: nothing, a rank, or a heading over what follows.
|
|
33558
|
+
*
|
|
33559
|
+
* All three answers are right, for different trees, which is why this is
|
|
33560
|
+
* asked rather than decided. `peer` is a file explorer: every row is the same
|
|
33561
|
+
* kind of thing, a name that may hold more names, and the indent alone says
|
|
33562
|
+
* where one sits. `subordinate` is side navigation or a categorization: a
|
|
33563
|
+
* section holds pages and a facet holds values, so a step inward is a change
|
|
33564
|
+
* of kind and the rows say so. `heading` is a documentation sidebar, where
|
|
33565
|
+
* the change is at the *parent*: "Getting started" is not a lesser page than
|
|
33566
|
+
* the pages under it and not a page at all, it is the name of the list, so
|
|
33567
|
+
* the branch takes the rail-heading treatment and its children stay at the
|
|
33568
|
+
* size every other row is.
|
|
33569
|
+
*
|
|
33570
|
+
* `subordinate` and `heading` are not the same answer said twice. One keys on
|
|
33571
|
+
* depth and quiets the child; the other keys on holding children and relabels
|
|
33572
|
+
* the parent, so a top-level leaf beside a branch is untouched by the first
|
|
33573
|
+
* and untouched by the second for opposite reasons.
|
|
33574
|
+
*
|
|
33575
|
+
* On the root rather than the item, because it is a fact about the tree. Set
|
|
33576
|
+
* per row it would make a tree writable in which one branch ranks its
|
|
33577
|
+
* children and the next does not, and it would have to be repeated on every
|
|
33578
|
+
* row to say one thing.
|
|
33579
|
+
*
|
|
33580
|
+
* Here rather than on the styled tier, because it is not about paint: with
|
|
33581
|
+
* every stylesheet deleted it is still true that this tree ranks its depths,
|
|
33582
|
+
* that this one heads them, and that a file explorer does neither. The styled
|
|
33583
|
+
* tier steps a subordinate row once down the type scale and sets a heading
|
|
33584
|
+
* branch as a label; a headless consumer reads the attribute and the
|
|
33585
|
+
* `--tree-level` each row carries, and draws either however they like.
|
|
33586
|
+
*
|
|
33587
|
+
* **Optional, with no default**, per the reflected-property rule: a value
|
|
33588
|
+
* written here appears in the served markup of every tree anybody renders.
|
|
33589
|
+
* The resting state is the absence of the attribute, which is `peer`.
|
|
33481
33590
|
* - `empty-text`/`emptyText`: What is said where there are none, and none are coming.
|
|
33482
33591
|
* - `loading`: Whether the rows are still on their way.
|
|
33483
33592
|
*
|
|
@@ -36172,6 +36281,14 @@ export type CustomElementsSolidJs = {
|
|
|
36172
36281
|
*
|
|
36173
36282
|
* - `goTo(index: number) => void`: Moves to a slide, wrapping only where `loop` says to.
|
|
36174
36283
|
*
|
|
36284
|
+
* ## CSS Custom Properties
|
|
36285
|
+
*
|
|
36286
|
+
* CSS variables available for styling the component.
|
|
36287
|
+
*
|
|
36288
|
+
* - `--carousel-gap`: Space between slides. A sheet sets it and the component measures the run with it. (default: `undefined`)
|
|
36289
|
+
* - `--carousel-pane`: The size one pane is laid out at. A sheet sets it and the component measures the run with it. (default: `undefined`)
|
|
36290
|
+
* - `--carousel-run-end`: How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`. (default: `undefined`)
|
|
36291
|
+
*
|
|
36175
36292
|
* ## CSS Parts
|
|
36176
36293
|
*
|
|
36177
36294
|
* Custom selectors for styling elements within the component.
|
|
@@ -51112,6 +51229,39 @@ export type CustomElementsSolidJs = {
|
|
|
51112
51229
|
* Component attributes and properties that can be applied to the element or by using JavaScript.
|
|
51113
51230
|
*
|
|
51114
51231
|
* - `label`: Accessible name for the tree.
|
|
51232
|
+
* - `nesting`: What a step inward means: nothing, a rank, or a heading over what follows.
|
|
51233
|
+
*
|
|
51234
|
+
* All three answers are right, for different trees, which is why this is
|
|
51235
|
+
* asked rather than decided. `peer` is a file explorer: every row is the same
|
|
51236
|
+
* kind of thing, a name that may hold more names, and the indent alone says
|
|
51237
|
+
* where one sits. `subordinate` is side navigation or a categorization: a
|
|
51238
|
+
* section holds pages and a facet holds values, so a step inward is a change
|
|
51239
|
+
* of kind and the rows say so. `heading` is a documentation sidebar, where
|
|
51240
|
+
* the change is at the *parent*: "Getting started" is not a lesser page than
|
|
51241
|
+
* the pages under it and not a page at all, it is the name of the list, so
|
|
51242
|
+
* the branch takes the rail-heading treatment and its children stay at the
|
|
51243
|
+
* size every other row is.
|
|
51244
|
+
*
|
|
51245
|
+
* `subordinate` and `heading` are not the same answer said twice. One keys on
|
|
51246
|
+
* depth and quiets the child; the other keys on holding children and relabels
|
|
51247
|
+
* the parent, so a top-level leaf beside a branch is untouched by the first
|
|
51248
|
+
* and untouched by the second for opposite reasons.
|
|
51249
|
+
*
|
|
51250
|
+
* On the root rather than the item, because it is a fact about the tree. Set
|
|
51251
|
+
* per row it would make a tree writable in which one branch ranks its
|
|
51252
|
+
* children and the next does not, and it would have to be repeated on every
|
|
51253
|
+
* row to say one thing.
|
|
51254
|
+
*
|
|
51255
|
+
* Here rather than on the styled tier, because it is not about paint: with
|
|
51256
|
+
* every stylesheet deleted it is still true that this tree ranks its depths,
|
|
51257
|
+
* that this one heads them, and that a file explorer does neither. The styled
|
|
51258
|
+
* tier steps a subordinate row once down the type scale and sets a heading
|
|
51259
|
+
* branch as a label; a headless consumer reads the attribute and the
|
|
51260
|
+
* `--tree-level` each row carries, and draws either however they like.
|
|
51261
|
+
*
|
|
51262
|
+
* **Optional, with no default**, per the reflected-property rule: a value
|
|
51263
|
+
* written here appears in the served markup of every tree anybody renders.
|
|
51264
|
+
* The resting state is the absence of the attribute, which is `peer`.
|
|
51115
51265
|
* - `empty-text`/`emptyText`: What is said where there are none, and none are coming.
|
|
51116
51266
|
* - `loading`: Whether the rows are still on their way.
|
|
51117
51267
|
*
|
|
@@ -51967,6 +52117,12 @@ export type CustomCssProperties = {
|
|
|
51967
52117
|
"--bar-chart-secondary"?: (string) | undefined;
|
|
51968
52118
|
/** The gradient a bar would take, named per bar so the styled tier can point `fill` at it. Drawn whatever the treatment and used only where `wash="gradient"` asks for it. */
|
|
51969
52119
|
"--chart-bar-wash"?: (string) | undefined;
|
|
52120
|
+
/** Space between slides. A sheet sets it and the component measures the run with it. */
|
|
52121
|
+
"--carousel-gap"?: (string) | undefined;
|
|
52122
|
+
/** The size one pane is laid out at. A sheet sets it and the component measures the run with it. */
|
|
52123
|
+
"--carousel-pane"?: (string) | undefined;
|
|
52124
|
+
/** How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`. */
|
|
52125
|
+
"--carousel-run-end"?: (string) | undefined;
|
|
51970
52126
|
/** The chosen color, to paint over the transparency check. */
|
|
51971
52127
|
"--color-input-swatch"?: (string) | undefined;
|
|
51972
52128
|
/** The chosen brightness, 0 to 100, as a percentage. */
|
package/types/vue.d.ts
CHANGED
|
@@ -8257,6 +8257,40 @@ export type HelixHeadlessTreeHelixSelectElementEvent =
|
|
|
8257
8257
|
export type HelixHeadlessTreeVueProps = {
|
|
8258
8258
|
/** Accessible name for the tree. */
|
|
8259
8259
|
label?: (HelixHeadlessTree["label"]) | undefined;
|
|
8260
|
+
/** What a step inward means: nothing, a rank, or a heading over what follows.
|
|
8261
|
+
|
|
8262
|
+
All three answers are right, for different trees, which is why this is
|
|
8263
|
+
asked rather than decided. `peer` is a file explorer: every row is the same
|
|
8264
|
+
kind of thing, a name that may hold more names, and the indent alone says
|
|
8265
|
+
where one sits. `subordinate` is side navigation or a categorization: a
|
|
8266
|
+
section holds pages and a facet holds values, so a step inward is a change
|
|
8267
|
+
of kind and the rows say so. `heading` is a documentation sidebar, where
|
|
8268
|
+
the change is at the *parent*: "Getting started" is not a lesser page than
|
|
8269
|
+
the pages under it and not a page at all, it is the name of the list, so
|
|
8270
|
+
the branch takes the rail-heading treatment and its children stay at the
|
|
8271
|
+
size every other row is.
|
|
8272
|
+
|
|
8273
|
+
`subordinate` and `heading` are not the same answer said twice. One keys on
|
|
8274
|
+
depth and quiets the child; the other keys on holding children and relabels
|
|
8275
|
+
the parent, so a top-level leaf beside a branch is untouched by the first
|
|
8276
|
+
and untouched by the second for opposite reasons.
|
|
8277
|
+
|
|
8278
|
+
On the root rather than the item, because it is a fact about the tree. Set
|
|
8279
|
+
per row it would make a tree writable in which one branch ranks its
|
|
8280
|
+
children and the next does not, and it would have to be repeated on every
|
|
8281
|
+
row to say one thing.
|
|
8282
|
+
|
|
8283
|
+
Here rather than on the styled tier, because it is not about paint: with
|
|
8284
|
+
every stylesheet deleted it is still true that this tree ranks its depths,
|
|
8285
|
+
that this one heads them, and that a file explorer does neither. The styled
|
|
8286
|
+
tier steps a subordinate row once down the type scale and sets a heading
|
|
8287
|
+
branch as a label; a headless consumer reads the attribute and the
|
|
8288
|
+
`--tree-level` each row carries, and draws either however they like.
|
|
8289
|
+
|
|
8290
|
+
**Optional, with no default**, per the reflected-property rule: a value
|
|
8291
|
+
written here appears in the served markup of every tree anybody renders.
|
|
8292
|
+
The resting state is the absence of the attribute, which is `peer`. */
|
|
8293
|
+
nesting?: (HelixHeadlessTree["nesting"]) | undefined;
|
|
8260
8294
|
/** What is said where there are none, and none are coming. */
|
|
8261
8295
|
"empty-text"?: (HelixHeadlessTree["emptyText"]) | undefined;
|
|
8262
8296
|
/** What is said where there are none, and none are coming. */
|
|
@@ -8715,6 +8749,12 @@ export type CustomCssProperties = {
|
|
|
8715
8749
|
"--bar-chart-secondary"?: (string) | undefined;
|
|
8716
8750
|
/** The gradient a bar would take, named per bar so the styled tier can point `fill` at it. Drawn whatever the treatment and used only where `wash="gradient"` asks for it. */
|
|
8717
8751
|
"--chart-bar-wash"?: (string) | undefined;
|
|
8752
|
+
/** Space between slides. A sheet sets it and the component measures the run with it. */
|
|
8753
|
+
"--carousel-gap"?: (string) | undefined;
|
|
8754
|
+
/** The size one pane is laid out at. A sheet sets it and the component measures the run with it. */
|
|
8755
|
+
"--carousel-pane"?: (string) | undefined;
|
|
8756
|
+
/** How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`. */
|
|
8757
|
+
"--carousel-run-end"?: (string) | undefined;
|
|
8718
8758
|
/** The chosen color, to paint over the transparency check. */
|
|
8719
8759
|
"--color-input-swatch"?: (string) | undefined;
|
|
8720
8760
|
/** The chosen brightness, 0 to 100, as a percentage. */
|