@fusion.dev/helix-headless 0.229.0 → 0.230.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.
Files changed (34) hide show
  1. package/api.json +1 -1
  2. package/custom-elements.json +1 -1
  3. package/dist/canvas/edge/canvas-edge.d.ts +9 -9
  4. package/dist/canvas/edge/canvas-edge.js +3 -3
  5. package/dist/canvas/root/canvas-root.js +1 -1
  6. package/dist/code-block/root/code-block-root.d.ts +9 -9
  7. package/dist/code-block/root/code-block-root.js +4 -4
  8. package/dist/color-input/root/color-input-root.d.ts +7 -7
  9. package/dist/color-input/root/color-input-root.js +9 -9
  10. package/dist/megamenu/root/megamenu-root.d.ts +24 -24
  11. package/dist/megamenu/root/megamenu-root.js +4 -4
  12. package/dist/navigation/root/navigation-root.d.ts +7 -7
  13. package/dist/navigation/root/navigation-root.js +2 -2
  14. package/dist/outline/root/outline-root.d.ts +21 -21
  15. package/dist/outline/root/outline-root.js +6 -6
  16. package/dist/radio/root/radio-root.d.ts +1 -1
  17. package/dist/spatial-bar-chart/root/spatial-bar-chart-root.d.ts +33 -33
  18. package/dist/spatial-bar-chart/root/spatial-bar-chart-root.js +5 -5
  19. package/dist/steps/root/steps-root.d.ts +17 -17
  20. package/dist/steps/root/steps-root.js +3 -3
  21. package/dist/table/column/table-column.d.ts +7 -0
  22. package/dist/table/column/table-column.js +4 -1
  23. package/dist/tabs/root/tabs-root.d.ts +13 -13
  24. package/dist/tabs/root/tabs-root.js +3 -3
  25. package/dist/time-input/root/time-input-root.d.ts +26 -26
  26. package/dist/time-input/root/time-input-root.js +10 -10
  27. package/dist/time-picker/root/time-picker-root.d.ts +40 -40
  28. package/dist/time-picker/root/time-picker-root.js +10 -10
  29. package/examples.json +1 -1
  30. package/lint.json +1 -1
  31. package/package.json +5 -5
  32. package/types/jsx.d.ts +203 -196
  33. package/types/vue.d.ts +159 -155
  34. package/types/words.d.ts +1 -1
@@ -64,6 +64,15 @@ export declare class HelixHeadlessCanvasEdge extends HelixElement {
64
64
  * the board can draw.
65
65
  */
66
66
  readOnly: boolean;
67
+ /**
68
+ * How the line is drawn: `dashed` or `dotted`. Unset is solid.
69
+ *
70
+ * **A stroke rather than an axis**, which is what the registry keeps it for:
71
+ * no other family draws a line whose stroke says something, and a dashed
72
+ * connection is the ordinary way to draw a weaker or an optional one. On the
73
+ * headless tier because the board that draws the line is.
74
+ */
75
+ stroke?: 'dashed' | 'dotted';
67
76
  /** The name of the card the connection ends at. */
68
77
  to: string;
69
78
  /** The marker at the end of the connection. Unset is an arrow, as JSON Canvas specifies. */
@@ -79,15 +88,6 @@ export declare class HelixHeadlessCanvasEdge extends HelixElement {
79
88
  tone?: 'accent' | 'danger' | 'info' | 'neutral' | 'primary' | 'success' | 'warning';
80
89
  /** The side of the `to` card the connection arrives at, when the document sets one. */
81
90
  toSide?: CanvasSide | undefined;
82
- /**
83
- * How the line is drawn: `dashed` or `dotted`. Unset is solid.
84
- *
85
- * **A variant rather than an axis**, which is what the registry keeps it for:
86
- * no other family draws a line whose stroke says something, and a dashed
87
- * connection is the ordinary way to draw a weaker or an optional one. On the
88
- * headless tier because the board that draws the line is.
89
- */
90
- variant?: 'dashed' | 'dotted';
91
91
  /**
92
92
  * Tells the board the connector changed, since the board is what draws it.
93
93
  *
@@ -40,6 +40,9 @@ __decorate([
40
40
  __decorate([
41
41
  property({ attribute: 'readonly', reflect: true, type: Boolean })
42
42
  ], HelixHeadlessCanvasEdge.prototype, "readOnly", void 0);
43
+ __decorate([
44
+ property({ reflect: true })
45
+ ], HelixHeadlessCanvasEdge.prototype, "stroke", void 0);
43
46
  __decorate([
44
47
  property()
45
48
  ], HelixHeadlessCanvasEdge.prototype, "to", void 0);
@@ -52,9 +55,6 @@ __decorate([
52
55
  __decorate([
53
56
  property({ attribute: 'to-side' })
54
57
  ], HelixHeadlessCanvasEdge.prototype, "toSide", void 0);
55
- __decorate([
56
- property({ reflect: true })
57
- ], HelixHeadlessCanvasEdge.prototype, "variant", void 0);
58
58
  HelixHeadlessCanvasEdge = __decorate([
59
59
  customElement('helix-headless-canvas-edge')
60
60
  ], HelixHeadlessCanvasEdge);
@@ -2277,7 +2277,7 @@ let HelixHeadlessCanvas = class HelixHeadlessCanvas extends MixinViewport(HelixE
2277
2277
  d=${drawn.d}
2278
2278
  data-selected=${pickedKeys.has(key) ? '' : nothing}
2279
2279
  data-tone=${element?.tone ?? nothing}
2280
- data-variant=${element?.variant ?? nothing}
2280
+ data-stroke=${element?.stroke ?? nothing}
2281
2281
  fill="none"
2282
2282
  marker-end=${ends.end ? `url(#${ARROW})` : nothing}
2283
2283
  marker-start=${ends.start ? `url(#${ARROW})` : nothing}
@@ -72,7 +72,7 @@ import { HighlighterController } from '../highlighter.js';
72
72
  * depend on color. Where a removed line is paired with the added line that
73
73
  * replaced it, the words each does not share with the other are the `changed`
74
74
  * part, so the eye goes to what changed within the line. Each file in the patch is its own block under its own name,
75
- * and its copy button copies the new version of the file. `variant="split"`
75
+ * and its copy button copies the new version of the file. `layout="split"`
76
76
  * shows the old version beside the new, each removal opposite its replacement.
77
77
  * `context-lines` folds each long run of unchanged lines, keeping that many
78
78
  * beside each change, behind a button that shows them and hides them again,
@@ -311,6 +311,14 @@ export declare class HelixHeadlessCodeBlock extends HelixElement {
311
311
  * `highlight` an empty string and names nothing.
312
312
  */
313
313
  language: string;
314
+ /**
315
+ * How a diff's two versions are arranged. It has no effect without `diff`.
316
+ *
317
+ * Absent is unified, each removal above its replacement, which fits any
318
+ * width. `split` sets the old version beside the new one. Optional rather
319
+ * than defaulted, so the host carries no attribute the consumer did not write.
320
+ */
321
+ layout?: 'split';
314
322
  /**
315
323
  * Whether the lines are numbered in a gutter beside the code.
316
324
  *
@@ -358,14 +366,6 @@ export declare class HelixHeadlessCodeBlock extends HelixElement {
358
366
  * diff with `context-lines`. `{count}` is how many.
359
367
  */
360
368
  showUnchangedLabel: string;
361
- /**
362
- * How a diff's two versions are arranged. It has no effect without `diff`.
363
- *
364
- * Absent is unified, each removal above its replacement, which fits any
365
- * width. `split` sets the old version beside the new one. Optional rather
366
- * than defaulted, so the host carries no attribute the consumer did not write.
367
- */
368
- variant?: 'split';
369
369
  /**
370
370
  * Whether long lines wrap. Without it they scroll.
371
371
  *
@@ -504,7 +504,7 @@ let HelixHeadlessCodeBlock = class HelixHeadlessCodeBlock extends HelixElement {
504
504
  return html `<div part="file">
505
505
  ${this.renderHeader(name, now)}
506
506
  <div part="frame">
507
- ${this.variant === 'split'
507
+ ${this.layout === 'split'
508
508
  ? this.renderSplit(file, width, at)
509
509
  : html `<pre part="block" translate="no"><code part="code">${file.hunks.map((hunk, h) => html `${this.renderHunk(hunk)}${this.runsOf(hunk).map((run) => run.folded
510
510
  ? this.renderFold(run, `${at}:${h}:${run.start}`, (line) => this.renderLine(line, width))
@@ -575,6 +575,9 @@ __decorate([
575
575
  __decorate([
576
576
  property()
577
577
  ], HelixHeadlessCodeBlock.prototype, "language", void 0);
578
+ __decorate([
579
+ property({ reflect: true })
580
+ ], HelixHeadlessCodeBlock.prototype, "layout", void 0);
578
581
  __decorate([
579
582
  property({ attribute: 'line-numbers', reflect: true, type: Boolean })
580
583
  ], HelixHeadlessCodeBlock.prototype, "lineNumbers", void 0);
@@ -591,9 +594,6 @@ __decorate([
591
594
  words,
592
595
  property({ attribute: 'show-unchanged-label' })
593
596
  ], HelixHeadlessCodeBlock.prototype, "showUnchangedLabel", void 0);
594
- __decorate([
595
- property({ reflect: true })
596
- ], HelixHeadlessCodeBlock.prototype, "variant", void 0);
597
597
  __decorate([
598
598
  property({ reflect: true, type: Boolean })
599
599
  ], HelixHeadlessCodeBlock.prototype, "wrap", void 0);
@@ -60,7 +60,7 @@ declare const HelixHeadlessColorInput_base: (new (...args: any[]) => import("@fu
60
60
  * @event {Event} input - Fired as the value changes.
61
61
  * @event {ToggleEvent} toggle - The panel opened or closed. The event carries `newState` and `oldState`.
62
62
  *
63
- * @csspart control - The text input that holds the value. Absent in the `swatch` variant.
63
+ * @csspart control - The text input that holds the value. Absent in the `swatch` trigger.
64
64
  * @csspart feedback - The message that says what is wrong with the value.
65
65
  * @csspart field - The box holding the text and the trigger.
66
66
  * @csspart hint - Help text under the field, shown while there is no feedback.
@@ -194,15 +194,11 @@ export declare class HelixHeadlessColorInput extends HelixHeadlessColorInput_bas
194
194
  */
195
195
  swatches: string;
196
196
  /**
197
- * What the swatch says in `variant="swatch"`, after the field's label, once
197
+ * What the swatch says in `trigger="swatch"`, after the field's label, once
198
198
  * there is a color. `{name}` is the color's name, such as "vibrant red", and
199
199
  * `{value}` the value as written.
200
200
  */
201
201
  swatchLabel: string;
202
- /**
203
- * Accessible name for the control that opens the panel.
204
- */
205
- triggerLabel: string;
206
202
  /**
207
203
  * Whether the field is a text box with a swatch on it, or only the swatch.
208
204
  *
@@ -220,7 +216,11 @@ export declare class HelixHeadlessColorInput extends HelixHeadlessColorInput_bas
220
216
  * be read or pasted into without opening the panel, which is worse for a form
221
217
  * where the color is the answer rather than a setting.
222
218
  */
223
- variant?: 'swatch';
219
+ trigger?: 'swatch';
220
+ /**
221
+ * Accessible name for the control that opens the panel.
222
+ */
223
+ triggerLabel: string;
224
224
  /**
225
225
  * Draws the panel's hue as a wheel around the square, in place of the hue
226
226
  * ramp. See Color Picker's `wheel`.
@@ -68,7 +68,7 @@ let HelixHeadlessColorInput = class HelixHeadlessColorInput extends MixinPickerF
68
68
  return this.control ?? this.partNamed('trigger');
69
69
  }
70
70
  renderSwatchValue() {
71
- return this.variant === 'swatch'
71
+ return this.trigger === 'swatch'
72
72
  ? html `<span id="swatch-value" hidden>${this.swatchWords}</span>`
73
73
  : nothing;
74
74
  }
@@ -139,7 +139,7 @@ let HelixHeadlessColorInput = class HelixHeadlessColorInput extends MixinPickerF
139
139
  ?wheel=${this.wheel}
140
140
  ?channel-fields=${this.channelFields}
141
141
  ?no-format=${this.noFormat}
142
- ?no-value=${this.variant !== 'swatch'}
142
+ ?no-value=${this.trigger !== 'swatch'}
143
143
  .colorWords=${this.colorWords}
144
144
  .format=${this.format ?? 'hex'}
145
145
  .value=${this.picked}
@@ -163,7 +163,7 @@ let HelixHeadlessColorInput = class HelixHeadlessColorInput extends MixinPickerF
163
163
  comment: it is inside a tagged template, so one would end the
164
164
  literal and the error lands on a line further down. -->
165
165
  <slot name="start"></slot>
166
- ${this.variant === 'swatch'
166
+ ${this.trigger === 'swatch'
167
167
  ? nothing
168
168
  : html `<input
169
169
  part="control"
@@ -186,14 +186,14 @@ let HelixHeadlessColorInput = class HelixHeadlessColorInput extends MixinPickerF
186
186
  <slot name="end"></slot>
187
187
  <button
188
188
  part="trigger"
189
- id=${this.variant === 'swatch' ? 'control' : nothing}
189
+ id=${this.trigger === 'swatch' ? 'control' : nothing}
190
190
  type="button"
191
191
  aria-controls="surface"
192
192
  aria-disabled=${this.readOnly ? 'true' : nothing}
193
193
  aria-expanded=${this.open ? 'true' : 'false'}
194
194
  aria-haspopup="dialog"
195
- aria-label=${this.variant === 'swatch' ? nothing : this.triggerLabel}
196
- aria-labelledby=${this.variant === 'swatch'
195
+ aria-label=${this.trigger === 'swatch' ? nothing : this.triggerLabel}
196
+ aria-labelledby=${this.trigger === 'swatch'
197
197
  ? this.labeled
198
198
  ? `${this.labelId} swatch-value`
199
199
  : 'swatch-value'
@@ -257,13 +257,13 @@ __decorate([
257
257
  words,
258
258
  property({ attribute: 'swatch-label' })
259
259
  ], HelixHeadlessColorInput.prototype, "swatchLabel", void 0);
260
+ __decorate([
261
+ property({ reflect: true })
262
+ ], HelixHeadlessColorInput.prototype, "trigger", void 0);
260
263
  __decorate([
261
264
  words,
262
265
  property({ attribute: 'trigger-label' })
263
266
  ], HelixHeadlessColorInput.prototype, "triggerLabel", void 0);
264
- __decorate([
265
- property({ reflect: true })
266
- ], HelixHeadlessColorInput.prototype, "variant", void 0);
267
267
  __decorate([
268
268
  property({ reflect: true, type: Boolean })
269
269
  ], HelixHeadlessColorInput.prototype, "wheel", void 0);
@@ -94,7 +94,7 @@ declare const HelixHeadlessMegamenu_base: (new (...args: any[]) => import("@fusi
94
94
  * @cssstate current - A link in the panel carries `aria-current="page"`, so the trigger can show the section you are in.
95
95
  * @cssstate from-end - The panel opened in place of one earlier in the bar, so it can enter from the end side.
96
96
  * @cssstate from-start - The panel opened in place of one later in the bar, so it can enter from the start side.
97
- * @cssstate narrow - The page is narrower than `band-below`, so the panel is shown as a band whatever its variant.
97
+ * @cssstate narrow - The page is narrower than `band-below`, so the panel is shown as a band whatever its layout.
98
98
  * @cssstate open - The panel is open, and the trigger is shown as current.
99
99
  * @cssstate to-end - The panel closed because one earlier in the bar opened, so it can leave toward the end.
100
100
  * @cssstate to-start - The panel closed because one later in the bar opened, so it can leave toward the start.
@@ -139,6 +139,29 @@ export declare class HelixHeadlessMegamenu extends HelixHeadlessMegamenu_base {
139
139
  * The section's name, used for the default trigger and the panel.
140
140
  */
141
141
  label: string;
142
+ /**
143
+ * Whether the panel is a card under the trigger or a band across the page.
144
+ *
145
+ * The resting one is the card, hanging off the trigger and as wide as it
146
+ * needs to be. `band` is the other shape navigations use: a run from edge to
147
+ * edge under the header, with its contents held to the page's own measure, so
148
+ * a set of destinations too wide to sit under one word gets the whole width
149
+ * to lay out in.
150
+ *
151
+ * **A band and not a width, which is why the word is not `full`.** It changes
152
+ * where the panel goes as well as how wide it is, which is why this tier
153
+ * knows about it at all: a band spans the viewport, so there is nothing to
154
+ * measure it against and nothing to flip or shift to, and the placing pass is
155
+ * told not to run. Everything else the popover gives, the top layer and the
156
+ * dismissal, is exactly what such a band needs. `full` is the registry's word
157
+ * for a width, and `Button` and `Dialog` are the two families answering that
158
+ * question; borrowing it here would put a third meaning on it.
159
+ *
160
+ * `layout` and not an axis, for the reason the registry gives: a card under
161
+ * a word and a band under a header are two arrangements this family has, and
162
+ * no other family is being asked the same question.
163
+ */
164
+ layout?: 'band';
142
165
  /**
143
166
  * How long a pointer rests on the trigger before the panel opens, in
144
167
  * milliseconds, under `open-on="hover"`. A pointer crossing the bar on its
@@ -162,29 +185,6 @@ export declare class HelixHeadlessMegamenu extends HelixHeadlessMegamenu_base {
162
185
  * page under its bar.
163
186
  */
164
187
  placement: Placement;
165
- /**
166
- * Whether the panel is a card under the trigger or a band across the page.
167
- *
168
- * The resting one is the card, hanging off the trigger and as wide as it
169
- * needs to be. `band` is the other shape navigations use: a run from edge to
170
- * edge under the header, with its contents held to the page's own measure, so
171
- * a set of destinations too wide to sit under one word gets the whole width
172
- * to lay out in.
173
- *
174
- * **A band and not a width, which is why the word is not `full`.** It changes
175
- * where the panel goes as well as how wide it is, which is why this tier
176
- * knows about it at all: a band spans the viewport, so there is nothing to
177
- * measure it against and nothing to flip or shift to, and the placing pass is
178
- * told not to run. Everything else the popover gives, the top layer and the
179
- * dismissal, is exactly what such a band needs. `full` is the registry's word
180
- * for a width, and `Button` and `Dialog` are the two families answering that
181
- * question; borrowing it here would put a third meaning on it.
182
- *
183
- * `variant` and not an axis, for the reason the registry gives: a card under
184
- * a word and a band under a header are two arrangements this family has, and
185
- * no other family is being asked the same question.
186
- */
187
- variant?: 'band';
188
188
  private narrow;
189
189
  private query;
190
190
  /** A band, whether because it was asked for or because there is no room. */
@@ -133,7 +133,7 @@ let HelixHeadlessMegamenu = class HelixHeadlessMegamenu extends MixinControllerO
133
133
  static { HelixHeadlessMegamenu_1 = this; }
134
134
  static { this.bar = new HandOver((megamenu, to) => megamenu.motion(to)); }
135
135
  get banded() {
136
- return this.variant === 'band' || this.narrow;
136
+ return this.layout === 'band' || this.narrow;
137
137
  }
138
138
  watchWidth() {
139
139
  this.query?.removeEventListener('change', this.handleWidth);
@@ -336,6 +336,9 @@ __decorate([
336
336
  __decorate([
337
337
  property()
338
338
  ], HelixHeadlessMegamenu.prototype, "label", void 0);
339
+ __decorate([
340
+ property({ reflect: true })
341
+ ], HelixHeadlessMegamenu.prototype, "layout", void 0);
339
342
  __decorate([
340
343
  property({ attribute: 'open-delay', converter: timeConverter('open-delay', 120) })
341
344
  ], HelixHeadlessMegamenu.prototype, "openDelay", void 0);
@@ -345,9 +348,6 @@ __decorate([
345
348
  __decorate([
346
349
  property()
347
350
  ], HelixHeadlessMegamenu.prototype, "placement", void 0);
348
- __decorate([
349
- property({ reflect: true })
350
- ], HelixHeadlessMegamenu.prototype, "variant", void 0);
351
351
  __decorate([
352
352
  state()
353
353
  ], HelixHeadlessMegamenu.prototype, "narrow", void 0);
@@ -88,12 +88,6 @@ export declare class HelixHeadlessNavigation extends HelixElement {
88
88
  protected readonly keys: KeyboardNavigationController;
89
89
  /** Carries a host `aria-label` and `aria-labelledby` to the `<nav>`. */
90
90
  protected readonly aria: AriaForwardController;
91
- /**
92
- * Stacks the destinations in a column, for a sidebar, where unset is a row
93
- * for a header or a footer. The marker follows the current destination down
94
- * the column as it does along the row.
95
- */
96
- orientation?: 'vertical';
97
91
  /**
98
92
  * How the destinations are drawn, with `Tabs`' three values and for the same
99
93
  * reasons.
@@ -115,7 +109,13 @@ export declare class HelixHeadlessNavigation extends HelixElement {
115
109
  * Reflected and left unset by default, so the host carries nothing a
116
110
  * consumer's server markup does not already have.
117
111
  */
118
- variant?: 'segmented' | 'underlined';
112
+ marker?: 'segmented' | 'underlined';
113
+ /**
114
+ * Stacks the destinations in a column, for a sidebar, where unset is a row
115
+ * for a header or a footer. The marker follows the current destination down
116
+ * the column as it does along the row.
117
+ */
118
+ orientation?: 'vertical';
119
119
  private current;
120
120
  /** The disclosures among the destinations that are open. */
121
121
  private readonly opened;
@@ -153,10 +153,10 @@ __decorate([
153
153
  ], HelixHeadlessNavigation.prototype, "label", void 0);
154
154
  __decorate([
155
155
  property({ reflect: true })
156
- ], HelixHeadlessNavigation.prototype, "orientation", void 0);
156
+ ], HelixHeadlessNavigation.prototype, "marker", void 0);
157
157
  __decorate([
158
158
  property({ reflect: true })
159
- ], HelixHeadlessNavigation.prototype, "variant", void 0);
159
+ ], HelixHeadlessNavigation.prototype, "orientation", void 0);
160
160
  HelixHeadlessNavigation = __decorate([
161
161
  customElement('helix-headless-navigation')
162
162
  ], HelixHeadlessNavigation);
@@ -56,7 +56,7 @@ import { type Branch } from '../levels.js';
56
56
  * marked, so `a[aria-current]` and `a[data-depth="2"]` are the hooks for a
57
57
  * rule of yours.
58
58
  *
59
- * **The rail.** `variant="rail"` draws a slim column of ticks at the edge of a
59
+ * **The rail.** `marker="rail"` draws a slim column of ticks at the edge of a
60
60
  * long scroll, one per link, with the section in view drawn longer and a deeper
61
61
  * level shorter. Hovering or focusing the rail opens a surface holding the
62
62
  * links, each on one line, and Escape closes it. A tap opens it too, and it stays
@@ -82,9 +82,9 @@ import { type Branch } from '../levels.js';
82
82
  * `--indicator-block-size`, and `data-placed` once it has been placed, for a mark you draw
83
83
  * and animate yourself.
84
84
  * @csspart nav - The navigation landmark.
85
- * @csspart surface - The box holding the heading and the navigation under `variant="rail"`, which opens over the ticks.
85
+ * @csspart surface - The box holding the heading and the navigation under `marker="rail"`, which opens over the ticks.
86
86
  * @csspart tick - One tick of the rail, for one link, with `data-current` while its section is in view. It carries the link's depth as `--outline-depth`.
87
- * @csspart ticks - The column of ticks under `variant="rail"`, hidden from assistive technology.
87
+ * @csspart ticks - The column of ticks under `marker="rail"`, hidden from assistive technology.
88
88
  *
89
89
  * @cssproperty --outline-depth - The depth of the link a tick stands for, from one, set on each tick.
90
90
  *
@@ -144,22 +144,23 @@ export declare class HelixHeadlessOutline extends HelixElement {
144
144
  * Empty by default, which leaves the name to `fallbackLabel`.
145
145
  */
146
146
  label: string;
147
+ /**
148
+ * The rail form: a slim column of ticks, one per link, that opens on hover,
149
+ * focus, or a tap into a surface holding the links.
150
+ *
151
+ * A marker because no registered axis (emphasis, material, nesting,
152
+ * orientation, separation, shape, size, tone, width) has a value for it, and
153
+ * a rail is an arrangement of this family alone, as Megamenu's
154
+ * `marker="band"` is. It has no default: the outline without it is the list
155
+ * of links.
156
+ */
157
+ marker?: 'rail';
147
158
  /**
148
159
  * Which links are marked. `reading` marks the one section being read, the
149
160
  * last whose heading has passed the reading line. `visible` marks every
150
161
  * section with part of it on screen, and the mark runs across their links.
151
162
  */
152
163
  marks: 'reading' | 'visible';
153
- /**
154
- * How far below the top of the scroll container a heading counts as reached,
155
- * in pixels. The scroll container is the window or the panel the sections
156
- * scroll in.
157
- *
158
- * The reading line. A page with a sticky masthead sets this to its height, or
159
- * a little more: without it the current section changes as a heading slides
160
- * under the chrome rather than as it reaches the top of what can be seen.
161
- */
162
- offset: number;
163
164
  /**
164
165
  * The id of the section in view, or empty before anything is measured.
165
166
  *
@@ -180,16 +181,15 @@ export declare class HelixHeadlessOutline extends HelixElement {
180
181
  /** What `marked` reports, which only `markTo` writes. */
181
182
  private markedIds;
182
183
  /**
183
- * The rail form: a slim column of ticks, one per link, that opens on hover,
184
- * focus, or a tap into a surface holding the links.
184
+ * How far below the top of the scroll container a heading counts as reached,
185
+ * in pixels. The scroll container is the window or the panel the sections
186
+ * scroll in.
185
187
  *
186
- * A variant because no registered axis (emphasis, material, nesting,
187
- * orientation, separation, shape, size, tone, width) has a value for it, and
188
- * a rail is an arrangement of this family alone, as Megamenu's
189
- * `variant="band"` is. It has no default: the outline without it is the list
190
- * of links.
188
+ * The reading line. A page with a sticky masthead sets this to its height, or
189
+ * a little more: without it the current section changes as a heading slides
190
+ * under the chrome rather than as it reaches the top of what can be seen.
191
191
  */
192
- variant?: 'rail';
192
+ offset: number;
193
193
  /**
194
194
  * What `current` reports, which only `mark` writes.
195
195
  *
@@ -19,8 +19,8 @@ let HelixHeadlessOutline = class HelixHeadlessOutline extends HelixElement {
19
19
  this.follow = false;
20
20
  this.label = '';
21
21
  this.marks = 'reading';
22
- this.offset = 0;
23
22
  this.markedIds = [];
23
+ this.offset = 0;
24
24
  this.reading = '';
25
25
  this.frame = 0;
26
26
  this.handleScroll = () => {
@@ -319,7 +319,7 @@ let HelixHeadlessOutline = class HelixHeadlessOutline extends HelixElement {
319
319
  }
320
320
  }
321
321
  get rail() {
322
- return this.variant === 'rail';
322
+ return this.marker === 'rail';
323
323
  }
324
324
  setOpen(on) {
325
325
  if (!on) {
@@ -418,7 +418,7 @@ let HelixHeadlessOutline = class HelixHeadlessOutline extends HelixElement {
418
418
  }
419
419
  updated(changed) {
420
420
  super.updated(changed);
421
- if (changed.has('variant') && !this.rail) {
421
+ if (changed.has('marker') && !this.rail) {
422
422
  this.setOpen(false);
423
423
  }
424
424
  this.assign();
@@ -469,15 +469,15 @@ __decorate([
469
469
  __decorate([
470
470
  property()
471
471
  ], HelixHeadlessOutline.prototype, "label", void 0);
472
+ __decorate([
473
+ property({ reflect: true })
474
+ ], HelixHeadlessOutline.prototype, "marker", void 0);
472
475
  __decorate([
473
476
  property()
474
477
  ], HelixHeadlessOutline.prototype, "marks", void 0);
475
478
  __decorate([
476
479
  property({ converter: numberConverter('offset', 0, 'pixels') })
477
480
  ], HelixHeadlessOutline.prototype, "offset", void 0);
478
- __decorate([
479
- property({ reflect: true })
480
- ], HelixHeadlessOutline.prototype, "variant", void 0);
481
481
  HelixHeadlessOutline = __decorate([
482
482
  customElement('helix-headless-outline')
483
483
  ], HelixHeadlessOutline);
@@ -25,7 +25,7 @@ declare const HelixHeadlessRadio_base: (new (...args: any[]) => import("@fusion.
25
25
  * @documentation https://fusion.dev/helix/components/radio
26
26
  *
27
27
  * @slot - The radio's label.
28
- * @slot icon - An icon shown beside the label. With `variant="chip"`, the icon
28
+ * @slot icon - An icon shown beside the label. With `chip`, the icon
29
29
  * replaces the visible label, and the label becomes the name read by screen
30
30
  * readers. The icon has its own slot so the chip can hide the label and show
31
31
  * the icon.
@@ -159,38 +159,6 @@ export declare class HelixHeadlessSpatialBarChart extends HelixHeadlessSpatialBa
159
159
  * height.
160
160
  */
161
161
  growAgain: boolean;
162
- /**
163
- * Draws no box: no edges, grid, numbers, or names, and in a `row` no
164
- * floor, so the readings stand alone and fill the plot, as a picture on a
165
- * product's own page does. The
166
- * table, the summary, the tooltip, and the keys still carry every value,
167
- * and a renderer draws no box either.
168
- */
169
- noBox: boolean;
170
- /**
171
- * What the readout says for a place with no value. `{category}` and
172
- * `{series}` name the place.
173
- */
174
- openLabel: string;
175
- /** The plot's name where the chart has none: no `aria-label`, `label`, or table caption. */
176
- plotLabel: string;
177
- /**
178
- * Stacks a category's series into one column, each block standing on the
179
- * ones before it, so the column is as tall as the category's total, as a
180
- * flat `Bar Chart` stacks them.
181
- *
182
- * Absent stands the series one behind another in depth. Stacked, every
183
- * series stands in the front row, so none hides another, and the parts of
184
- * one total read together. A negative reading hangs below zero on the
185
- * negatives before it. The scale fits the stacks.
186
- */
187
- stacked: boolean;
188
- /**
189
- * The `summary` part's sentence. `{count}`, `{series}`, and `{categories}`
190
- * are the number of bars, series, and categories, written in the locale,
191
- * and `{low}` and `{high}` the lowest and the highest value.
192
- */
193
- summaryLabel: string;
194
162
  /**
195
163
  * How the bars stand.
196
164
  *
@@ -224,7 +192,39 @@ export declare class HelixHeadlessSpatialBarChart extends HelixHeadlessSpatialBa
224
192
  * can give it the latest of a longer table. It is read when the plot's
225
193
  * size changes.
226
194
  */
227
- variant?: 'diagonal' | 'row';
195
+ layout?: 'diagonal' | 'row';
196
+ /**
197
+ * Draws no box: no edges, grid, numbers, or names, and in a `row` no
198
+ * floor, so the readings stand alone and fill the plot, as a picture on a
199
+ * product's own page does. The
200
+ * table, the summary, the tooltip, and the keys still carry every value,
201
+ * and a renderer draws no box either.
202
+ */
203
+ noBox: boolean;
204
+ /**
205
+ * What the readout says for a place with no value. `{category}` and
206
+ * `{series}` name the place.
207
+ */
208
+ openLabel: string;
209
+ /** The plot's name where the chart has none: no `aria-label`, `label`, or table caption. */
210
+ plotLabel: string;
211
+ /**
212
+ * Stacks a category's series into one column, each block standing on the
213
+ * ones before it, so the column is as tall as the category's total, as a
214
+ * flat `Bar Chart` stacks them.
215
+ *
216
+ * Absent stands the series one behind another in depth. Stacked, every
217
+ * series stands in the front row, so none hides another, and the parts of
218
+ * one total read together. A negative reading hangs below zero on the
219
+ * negatives before it. The scale fits the stacks.
220
+ */
221
+ stacked: boolean;
222
+ /**
223
+ * The `summary` part's sentence. `{count}`, `{series}`, and `{categories}`
224
+ * are the number of bars, series, and categories, written in the locale,
225
+ * and `{low}` and `{high}` the lowest and the highest value.
226
+ */
227
+ summaryLabel: string;
228
228
  /** Whether a renderer has drawn the bars, which hides the chart's own drawing. */
229
229
  private rendered;
230
230
  /** Where the chart's own drawing is seen from, which a drag or Shift with an arrow turns. */
@@ -197,7 +197,7 @@ let HelixHeadlessSpatialBarChart = class HelixHeadlessSpatialBarChart extends Mi
197
197
  }
198
198
  get fits() {
199
199
  const box = this.partNamed('fallback');
200
- if (!box || !this.variant || typeof getComputedStyle !== 'function') {
200
+ if (!box || !this.layout || typeof getComputedStyle !== 'function') {
201
201
  return undefined;
202
202
  }
203
203
  const style = getComputedStyle(box);
@@ -331,7 +331,7 @@ let HelixHeadlessSpatialBarChart = class HelixHeadlessSpatialBarChart extends Mi
331
331
  ${readable ? this.renderSummary(field) : this.renderStatus()}${this.renderSonify()}${this.renderTable()}`;
332
332
  }
333
333
  renderFallback(read, at) {
334
- const layout = this.variant ?? 'grid';
334
+ const layout = this.layout ?? 'grid';
335
335
  const lined = layout === 'grid' ? undefined : layout;
336
336
  const bare = this.noBox || lined !== undefined;
337
337
  const view = boxView(read.axes, this.camera, [], bare);
@@ -489,6 +489,9 @@ __decorate([
489
489
  __decorate([
490
490
  property({ attribute: 'grow-again', reflect: true, type: Boolean })
491
491
  ], HelixHeadlessSpatialBarChart.prototype, "growAgain", void 0);
492
+ __decorate([
493
+ property({ reflect: true })
494
+ ], HelixHeadlessSpatialBarChart.prototype, "layout", void 0);
492
495
  __decorate([
493
496
  property({ attribute: 'no-box', reflect: true, type: Boolean })
494
497
  ], HelixHeadlessSpatialBarChart.prototype, "noBox", void 0);
@@ -507,9 +510,6 @@ __decorate([
507
510
  words,
508
511
  property({ attribute: 'summary-label' })
509
512
  ], HelixHeadlessSpatialBarChart.prototype, "summaryLabel", void 0);
510
- __decorate([
511
- property({ reflect: true })
512
- ], HelixHeadlessSpatialBarChart.prototype, "variant", void 0);
513
513
  __decorate([
514
514
  state()
515
515
  ], HelixHeadlessSpatialBarChart.prototype, "rendered", void 0);