@fusion.dev/helix-headless 0.176.0 → 0.177.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 +610 -696
- package/dist/area-chart/root/area-chart-root.d.ts +18 -1
- package/dist/area-chart/root/area-chart-root.js +2 -2
- package/dist/avatar/root/avatar-root.d.ts +1 -1
- package/dist/avatar/root/avatar-root.js +1 -1
- package/dist/bar-chart/root/bar-chart-root.d.ts +19 -1
- package/dist/bar-chart/root/bar-chart-root.js +2 -2
- package/dist/canvas/node/canvas-node.js +1 -1
- package/dist/canvas/root/canvas-root.d.ts +5 -1
- package/dist/canvas/root/canvas-root.js +9 -1
- package/dist/donut-chart/root/donut-chart-root.d.ts +37 -2
- package/dist/donut-chart/root/donut-chart-root.js +22 -8
- package/dist/element-events.generated.js +2 -0
- package/dist/graph/root/graph-root.d.ts +28 -3
- package/dist/graph/root/graph-root.js +38 -3
- package/dist/heatmap/root/heatmap-root.d.ts +28 -5
- package/dist/heatmap/root/heatmap-root.js +7 -2
- package/dist/line-chart/root/line-chart-root.d.ts +18 -1
- package/dist/line-chart/root/line-chart-root.js +2 -2
- package/dist/loader/root/loader-root.d.ts +15 -0
- package/dist/loader/root/loader-root.js +28 -6
- package/dist/rating/root/rating-root.d.ts +2 -1
- package/dist/rating/root/rating-root.js +8 -2
- package/dist/scatter-chart/root/scatter-chart-root.d.ts +29 -6
- package/dist/scatter-chart/root/scatter-chart-root.js +18 -3
- package/dist/select/root/select-root.d.ts +4 -1
- package/dist/select/root/select-root.js +1 -0
- package/dist/sparkline/root/sparkline-root.d.ts +29 -4
- package/dist/sparkline/root/sparkline-root.js +8 -1
- package/dist/tag/group/tag-group.d.ts +4 -3
- package/dist/tag/group/tag-group.js +6 -5
- package/dist/tag/root/tag-root.js +2 -1
- package/dist/tree/item/tree-item.d.ts +4 -4
- package/dist/tree/item/tree-item.js +5 -1
- package/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +532 -364
- package/types/vue.d.ts +86 -19
- package/types/words.d.ts +22 -0
|
@@ -83,6 +83,18 @@ declare const HelixHeadlessAreaChart_base: typeof HelixElement & (new (...args:
|
|
|
83
83
|
* there until readings arrive. The `empty` and `loading` slots take markup in
|
|
84
84
|
* their place, such as a link to add the first reading.
|
|
85
85
|
*
|
|
86
|
+
* **Keyboard.** The plot is one tab stop.
|
|
87
|
+
*
|
|
88
|
+
* | Key | What it does |
|
|
89
|
+
* |---|---|
|
|
90
|
+
* | Tab | Moves focus to the plot and shows the first reading. |
|
|
91
|
+
* | Right, Left | Moves to the next or the previous reading. On a right-to-left page, Left moves to the next. |
|
|
92
|
+
* | Down, Up | Moves among the series of the reading. With one series, moves to the next or the previous reading. |
|
|
93
|
+
* | Home, End | Moves to the first or the last reading. |
|
|
94
|
+
* | Page Down, Page Up | Moves a tenth of the readings on or back. |
|
|
95
|
+
* | Enter, Space | Presses the reading shown, which sends `helix-reading-press`. |
|
|
96
|
+
* | Escape | Puts the reading and its tooltip away. |
|
|
97
|
+
*
|
|
86
98
|
* @since 0.1.0
|
|
87
99
|
* @status stable
|
|
88
100
|
* @category charts
|
|
@@ -107,9 +119,10 @@ declare const HelixHeadlessAreaChart_base: typeof HelixElement & (new (...args:
|
|
|
107
119
|
* @csspart live - The readout: a polite live region that says the reading the keys moved to. Hide it visually.
|
|
108
120
|
* @csspart loading - The words in place of the drawing while `loading` is set and there are no readings: the `loading` slot, falling back to `loading-text`.
|
|
109
121
|
* @csspart mark - The invisible point the tooltip is anchored to.
|
|
110
|
-
* @csspart plot - The drawing, which takes focus to be read by key.
|
|
122
|
+
* @csspart plot - The drawing, which takes focus to be read by key. With nothing to draw, a group named as the chart is, holding the `empty` or `loading` part.
|
|
111
123
|
* @csspart summary - The total and each part's share at the latest reading, written as a sentence for screen readers.
|
|
112
124
|
* @csspart svg - The drawing surface the bands sit on.
|
|
125
|
+
* @csspart table - The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.
|
|
113
126
|
* @csspart tick - One number on the axis, placed with `inset-block-start` at its level.
|
|
114
127
|
* @csspart tooltip - The bubble, forwarded from `Tooltip`.
|
|
115
128
|
* @csspart tooltip-anchor - The `Tooltip` element itself.
|
|
@@ -129,6 +142,10 @@ declare const HelixHeadlessAreaChart_base: typeof HelixElement & (new (...args:
|
|
|
129
142
|
* @csspart tooltip-value - A column's value inside the tooltip.
|
|
130
143
|
*
|
|
131
144
|
* @cssproperty --area-chart-axis - The width of the axis, in `ch`, set from the widest number on it. Written by the component on the axis.
|
|
145
|
+
*
|
|
146
|
+
* @cssstate active - While a reading is shown, under the pointer or the keys, with its tooltip open.
|
|
147
|
+
* @cssstate empty - While the `empty` part stands in the plot.
|
|
148
|
+
* @cssstate loading - While the `loading` part stands in the plot.
|
|
132
149
|
*/
|
|
133
150
|
export declare class HelixHeadlessAreaChart extends HelixHeadlessAreaChart_base {
|
|
134
151
|
/**
|
|
@@ -96,7 +96,7 @@ let HelixHeadlessAreaChart = class HelixHeadlessAreaChart extends MixinChartStat
|
|
|
96
96
|
const rows = this.sourceRows;
|
|
97
97
|
const stack = this.stack;
|
|
98
98
|
if (rows.length === 0 || stack.columns.length === 0) {
|
|
99
|
-
return
|
|
99
|
+
return this.renderEmpty();
|
|
100
100
|
}
|
|
101
101
|
const top = this.overlap
|
|
102
102
|
? Math.max(0, ...stack.layers.flat())
|
|
@@ -108,7 +108,7 @@ let HelixHeadlessAreaChart = class HelixHeadlessAreaChart extends MixinChartStat
|
|
|
108
108
|
const slot = PLOT_WIDTH / rows.length;
|
|
109
109
|
const x = linear([0, Math.max(rows.length - 1, 1)], [slot / 2, PLOT_WIDTH - slot / 2]);
|
|
110
110
|
return html `${this.valueAxis ? this.renderAxis(y, domain) : nothing}${this.renderPlot(stack, rows.length, x, y, domain)}
|
|
111
|
-
${this.renderLabels(rows.map((row) => row.label))} ${this.renderSummary(stack, rows)}`;
|
|
111
|
+
${this.renderLabels(rows.map((row) => row.label))} ${this.renderSummary(stack, rows)}${this.renderTable()}`;
|
|
112
112
|
}
|
|
113
113
|
renderAxis(y, domain) {
|
|
114
114
|
const locale = wordsLocale(this);
|
|
@@ -32,7 +32,7 @@ export declare const initialsOf: (name: string) => string;
|
|
|
32
32
|
* @aliases Profile picture, Gravatar
|
|
33
33
|
* @documentation https://fusion.dev/helix/components/avatar
|
|
34
34
|
*
|
|
35
|
-
* @slot - Shown when there is no usable image, in place of the initials.
|
|
35
|
+
* @slot - Shown when there is no usable image, in place of the initials. Hidden from assistive technology when the avatar has a `name`, which the host announces.
|
|
36
36
|
*
|
|
37
37
|
* @event {Event} error - Relayed from the image when it fails.
|
|
38
38
|
* @event {Event} load - Relayed from the image once it has loaded.
|
|
@@ -103,7 +103,7 @@ let HelixHeadlessAvatar = class HelixHeadlessAvatar extends HelixElement {
|
|
|
103
103
|
return this.renderInitials();
|
|
104
104
|
}
|
|
105
105
|
renderInitials() {
|
|
106
|
-
return html `<slot>
|
|
106
|
+
return html `<slot aria-hidden=${this.name === '' ? nothing : 'true'}>
|
|
107
107
|
<span part="initials" aria-hidden="true">${this.initials ?? initialsOf(this.name)}</span>
|
|
108
108
|
</slot>`;
|
|
109
109
|
}
|
|
@@ -45,6 +45,19 @@ declare const HelixHeadlessBarChart_base: typeof HelixElement & (new (...args: a
|
|
|
45
45
|
* there until readings arrive. The `empty` and `loading` slots take markup in
|
|
46
46
|
* their place, such as a link to add the first reading.
|
|
47
47
|
*
|
|
48
|
+
* **Keyboard.** The plot is one tab stop.
|
|
49
|
+
*
|
|
50
|
+
* | Key | What it does |
|
|
51
|
+
* |---|---|
|
|
52
|
+
* | Tab | Moves focus to the plot and shows the first reading. |
|
|
53
|
+
* | Right, Left | Moves to the next or the previous reading. On a right-to-left page, Left moves to the next. |
|
|
54
|
+
* | Down, Up | Moves among the series of the reading. With one series, moves to the next or the previous reading. |
|
|
55
|
+
* | Down, Up under `orientation="horizontal"` | Moves to the next or the previous reading, and Right and Left move among the series. |
|
|
56
|
+
* | Home, End | Moves to the first or the last reading. |
|
|
57
|
+
* | Page Down, Page Up | Moves a tenth of the readings on or back. |
|
|
58
|
+
* | Enter, Space | Presses the reading shown, which sends `helix-reading-press`. |
|
|
59
|
+
* | Escape | Puts the reading and its tooltip away. |
|
|
60
|
+
*
|
|
48
61
|
* @since 0.1.0
|
|
49
62
|
* @status stable
|
|
50
63
|
* @category charts
|
|
@@ -73,9 +86,10 @@ declare const HelixHeadlessBarChart_base: typeof HelixElement & (new (...args: a
|
|
|
73
86
|
* @csspart live - The readout: a polite live region that says the reading the keys moved to. Hide it visually.
|
|
74
87
|
* @csspart loading - The words in place of the drawing while `loading` is set and there are no readings: the `loading` slot, falling back to `loading-text`.
|
|
75
88
|
* @csspart mark - The invisible point the tooltip is anchored to.
|
|
76
|
-
* @csspart plot - The drawing, which takes focus to be read by key.
|
|
89
|
+
* @csspart plot - The drawing, which takes focus to be read by key. With nothing to draw, a group named as the chart is, holding the `empty` or `loading` part.
|
|
77
90
|
* @csspart summary - The chart's name and each series' highest reading, written as a sentence for screen readers. Hide it visually.
|
|
78
91
|
* @csspart svg - The drawing surface the bars and lines sit on.
|
|
92
|
+
* @csspart table - The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.
|
|
79
93
|
* @csspart tick - One number on an axis.
|
|
80
94
|
* @csspart tooltip - The tooltip bubble, forwarded from `Tooltip`.
|
|
81
95
|
* @csspart tooltip-anchor - The `Tooltip` element itself.
|
|
@@ -99,6 +113,10 @@ declare const HelixHeadlessBarChart_base: typeof HelixElement & (new (...args: a
|
|
|
99
113
|
* @cssproperty --chart-bar-wash - The gradient for a bar, named per bar so the styled
|
|
100
114
|
* tier can use it as the `fill`. It is always drawn, and used only when
|
|
101
115
|
* `wash="gradient"` is set.
|
|
116
|
+
*
|
|
117
|
+
* @cssstate active - While a reading is shown, under the pointer or the keys, with its tooltip open.
|
|
118
|
+
* @cssstate empty - While the `empty` part stands in the plot.
|
|
119
|
+
* @cssstate loading - While the `loading` part stands in the plot.
|
|
102
120
|
*/
|
|
103
121
|
export declare class HelixHeadlessBarChart extends HelixHeadlessBarChart_base {
|
|
104
122
|
/**
|
|
@@ -44,7 +44,7 @@ let HelixHeadlessBarChart = class HelixHeadlessBarChart extends MixinChartStatus
|
|
|
44
44
|
const series = this.series;
|
|
45
45
|
const categories = series.length === 0 ? [] : this.sourceRows.map((row) => row.label);
|
|
46
46
|
if (categories.length === 0) {
|
|
47
|
-
return
|
|
47
|
+
return this.renderEmpty();
|
|
48
48
|
}
|
|
49
49
|
const scaled = this.scaled;
|
|
50
50
|
const own = (one) => scaled.has(seriesKey(one.name));
|
|
@@ -78,7 +78,7 @@ let HelixHeadlessBarChart = class HelixHeadlessBarChart extends MixinChartStatus
|
|
|
78
78
|
: undefined;
|
|
79
79
|
return html `${z === undefined && !this.valueAxis
|
|
80
80
|
? nothing
|
|
81
|
-
: this.renderAxis(y, domain, 'primary', sideways, widest)}${this.renderPlot(series, categories, y, domain, floor, z)}${z === undefined ? nothing : this.renderAxis(z, other, 'secondary', sideways, widest, tint)}${this.renderLabels(categories)}${this.renderSummary(series)}`;
|
|
81
|
+
: this.renderAxis(y, domain, 'primary', sideways, widest)}${this.renderPlot(series, categories, y, domain, floor, z)}${z === undefined ? nothing : this.renderAxis(z, other, 'secondary', sideways, widest, tint)}${this.renderLabels(categories)}${this.renderSummary(series)}${this.renderTable()}`;
|
|
82
82
|
}
|
|
83
83
|
renderSummary(series) {
|
|
84
84
|
const rows = this.sourceRows;
|
|
@@ -77,7 +77,7 @@ let HelixHeadlessCanvasNode = class HelixHeadlessCanvasNode extends HelixElement
|
|
|
77
77
|
aria-describedby=${this.status || this.meaning || this.links ? 'about' : nothing}
|
|
78
78
|
aria-label=${this.label || nothing}
|
|
79
79
|
aria-labelledby=${this.label || this.group ? nothing : 'content'}
|
|
80
|
-
aria-keyshortcuts=${this.connectable ? 'Enter F2 Space Control+ArrowDown Control+ArrowUp Shift+ArrowRight Shift+ArrowDown Alt+ArrowRight Alt+ArrowDown C Delete' : nothing}
|
|
80
|
+
aria-keyshortcuts=${this.connectable ? 'Enter F2 Space Control+ArrowDown Control+ArrowUp Shift+ArrowRight Shift+ArrowDown Alt+ArrowRight Alt+ArrowDown C Delete Plus Minus' : nothing}
|
|
81
81
|
role=${this.group ? 'group' : 'article'}
|
|
82
82
|
tabindex=${this.current ? '0' : '-1'}
|
|
83
83
|
>
|
|
@@ -45,7 +45,11 @@ declare const HelixHeadlessCanvas_base: (new (...args: any[]) => import("@fusion
|
|
|
45
45
|
* double click zooms out.
|
|
46
46
|
*
|
|
47
47
|
* Keyboard behavior:
|
|
48
|
-
* - One card holds the board's tab stop
|
|
48
|
+
* - One card holds the board's tab stop, and the board itself leaves the tab
|
|
49
|
+
* order while a card can hold it. Escape on a card goes back out to the
|
|
50
|
+
* board, where the arrow keys pan it.
|
|
51
|
+
* - Plus and minus zoom the board, on the board and on a card or a
|
|
52
|
+
* connection.
|
|
49
53
|
* - The arrow keys move through the cards in reading order. The card you land
|
|
50
54
|
* on scrolls into view, and its connections are announced with it.
|
|
51
55
|
* - The card you land on is selected. Control or Command with an arrow key,
|
|
@@ -566,6 +566,11 @@ let HelixHeadlessCanvas = class HelixHeadlessCanvas extends MixinViewport(HelixE
|
|
|
566
566
|
}
|
|
567
567
|
return;
|
|
568
568
|
}
|
|
569
|
+
if (plain && ['+', '=', '-', '_'].includes(event.key)) {
|
|
570
|
+
event.preventDefault();
|
|
571
|
+
this.zoom(event.key === '+' || event.key === '=' ? 1 : -1);
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
569
574
|
if (event.key === ' ' && !this.linking) {
|
|
570
575
|
event.preventDefault();
|
|
571
576
|
this.toggle(key);
|
|
@@ -2143,6 +2148,9 @@ let HelixHeadlessCanvas = class HelixHeadlessCanvas extends MixinViewport(HelixE
|
|
|
2143
2148
|
const stop = this.stop !== undefined && this.keyNamed(this.stop) === this.stop
|
|
2144
2149
|
? this.stop
|
|
2145
2150
|
: reading(all, this.edges, this.order ?? 'spatial')[0]?.id;
|
|
2151
|
+
const holds = stop !== undefined &&
|
|
2152
|
+
(stop.startsWith('edge:') || this.cards.some((card) => card.name === stop));
|
|
2153
|
+
this.partNamed('region')?.setAttribute('tabindex', holds ? '-1' : '0');
|
|
2146
2154
|
for (const card of this.cards) {
|
|
2147
2155
|
const x = finite(card.x) - origin.x;
|
|
2148
2156
|
const y = finite(card.y) - origin.y;
|
|
@@ -2255,7 +2263,7 @@ let HelixHeadlessCanvas = class HelixHeadlessCanvas extends MixinViewport(HelixE
|
|
|
2255
2263
|
d=${drawn.d}
|
|
2256
2264
|
data-edge=${key}
|
|
2257
2265
|
fill="none"
|
|
2258
|
-
aria-keyshortcuts="Enter F2 Space Control+ArrowDown Control+ArrowUp C Delete"
|
|
2266
|
+
aria-keyshortcuts="Enter F2 Space Control+ArrowDown Control+ArrowUp C Delete Plus Minus"
|
|
2259
2267
|
role="button"
|
|
2260
2268
|
tabindex=${key === stop ? '0' : '-1'}
|
|
2261
2269
|
/>
|
|
@@ -10,7 +10,7 @@ export interface DonutShare {
|
|
|
10
10
|
/** Where the slice starts, as a share of the whole. */
|
|
11
11
|
start: number;
|
|
12
12
|
}
|
|
13
|
-
declare const HelixHeadlessDonutChart_base: typeof HelixElement & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinChartSourceInterface);
|
|
13
|
+
declare const HelixHeadlessDonutChart_base: typeof HelixElement & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinChartSourceInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinChartStatusInterface);
|
|
14
14
|
/**
|
|
15
15
|
* @summary A chart that shows parts of a whole as a ring, read from a table.
|
|
16
16
|
*
|
|
@@ -34,6 +34,27 @@ declare const HelixHeadlessDonutChart_base: typeof HelixElement & (new (...args:
|
|
|
34
34
|
* follows, the `live` part says the slice in words, and Escape puts the
|
|
35
35
|
* tooltip away.
|
|
36
36
|
*
|
|
37
|
+
* **A tap shows the slice under it**, and keeps it until a tap lands
|
|
38
|
+
* elsewhere. `helix-reading-change` says each move of the slice shown, by
|
|
39
|
+
* pointer, tap or key, and `helix-reading-press` says a slice was clicked,
|
|
40
|
+
* tapped, or pressed with Enter or Space, for a page that opens what a slice
|
|
41
|
+
* stands for. `index` is the slice's row in the table.
|
|
42
|
+
*
|
|
43
|
+
* **A chart with nothing to draw says so.** A table with no readings shows
|
|
44
|
+
* `empty-text`, "No readings", in the plot, and `loading` shows `loading-text`
|
|
45
|
+
* there until readings arrive. The `empty` and `loading` slots take markup in
|
|
46
|
+
* their place.
|
|
47
|
+
*
|
|
48
|
+
* **Keyboard.** The plot is one tab stop.
|
|
49
|
+
*
|
|
50
|
+
* | Key | What it does |
|
|
51
|
+
* |---|---|
|
|
52
|
+
* | Tab | Moves focus to the plot and shows the first slice. |
|
|
53
|
+
* | Any arrow | Right and Down move to the next slice, Left and Up to the previous. On a right-to-left page, Left moves to the next. |
|
|
54
|
+
* | Home, End | Moves to the first or the last slice. |
|
|
55
|
+
* | Enter, Space | Presses the slice shown, which sends `helix-reading-press`. |
|
|
56
|
+
* | Escape | Puts the slice and its tooltip away. |
|
|
57
|
+
*
|
|
37
58
|
* @since 0.1.0
|
|
38
59
|
* @status stable
|
|
39
60
|
* @category charts
|
|
@@ -41,16 +62,24 @@ declare const HelixHeadlessDonutChart_base: typeof HelixElement & (new (...args:
|
|
|
41
62
|
* @documentation https://fusion.dev/helix/components/donut-chart
|
|
42
63
|
*
|
|
43
64
|
* @slot - Content in the middle of the ring, usually a total. It is read by screen readers, while the ring itself is hidden from them.
|
|
65
|
+
* @slot empty - Content shown in place of the ring when the table has no readings. Falls back to `empty-text`.
|
|
66
|
+
* @slot loading - Content shown in place of the ring while `loading` is set and there are no readings yet. Falls back to `loading-text`.
|
|
67
|
+
*
|
|
68
|
+
* @event {HelixReadingChangeEvent} helix-reading-change - The slice shown moved, or was put away: `index` is the slice's row, or `-1` for none, with its `label` and the `pointerType` that moved it.
|
|
69
|
+
* @event {HelixReadingPressEvent} helix-reading-press - A slice was clicked, tapped, or pressed with Enter or Space, with the same detail as `helix-reading-change`.
|
|
44
70
|
*
|
|
45
71
|
* @csspart center - The middle of the ring, holding whatever is slotted.
|
|
72
|
+
* @csspart empty - The words in place of the ring when the table has no readings: the `empty` slot, falling back to `empty-text`. Not drawn while the table cannot be read yet, on the server and during hydration.
|
|
46
73
|
* @csspart live - The readout: a polite live region that says the slice the keys moved to. Hide it visually.
|
|
74
|
+
* @csspart loading - The words in place of the ring while `loading` is set and there are no readings: the `loading` slot, falling back to `loading-text`.
|
|
47
75
|
* @csspart mark - The invisible point the tooltip is anchored to.
|
|
48
|
-
* @csspart plot - The drawing, which takes focus to be read by key.
|
|
76
|
+
* @csspart plot - The drawing, which takes focus to be read by key. With nothing to draw, a group named as the chart is, holding the `empty` or `loading` part.
|
|
49
77
|
* @csspart segment - One slice.
|
|
50
78
|
* @csspart segment-active - The slice under the pointer. Set alongside `segment`.
|
|
51
79
|
* @csspart segment-edge - One slice as a closed shape, used to draw its outline.
|
|
52
80
|
* @csspart slice-label - One slice's share, written on the slice under `slice-labels`. Placed with `left` and `top`, or `inset-inline-start` and `top` on a half ring, and carries its series color as `--chart-series`.
|
|
53
81
|
* @csspart summary - The chart's name and each slice's share, written as a sentence for screen readers. Hide it visually.
|
|
82
|
+
* @csspart table - The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.
|
|
54
83
|
* @csspart tooltip - The bubble, forwarded from `Tooltip`.
|
|
55
84
|
* @csspart tooltip-anchor - The `Tooltip` element itself.
|
|
56
85
|
* @csspart tooltip-arrow - The bubble's point, forwarded from `Tooltip`.
|
|
@@ -70,6 +99,10 @@ declare const HelixHeadlessDonutChart_base: typeof HelixElement & (new (...args:
|
|
|
70
99
|
* @csspart track - The ring the slices are drawn on.
|
|
71
100
|
*
|
|
72
101
|
* @cssproperty --donut-chart-stroke - How thick the ring is drawn, derived from `hole`.
|
|
102
|
+
*
|
|
103
|
+
* @cssstate active - While a slice is shown, under the pointer or the keys, with its tooltip open.
|
|
104
|
+
* @cssstate empty - While the `empty` part stands in place of the ring.
|
|
105
|
+
* @cssstate loading - While the `loading` part stands in place of the ring.
|
|
73
106
|
*/
|
|
74
107
|
export declare class HelixHeadlessDonutChart extends HelixHeadlessDonutChart_base {
|
|
75
108
|
/**
|
|
@@ -204,6 +237,8 @@ export declare class HelixHeadlessDonutChart extends HelixHeadlessDonutChart_bas
|
|
|
204
237
|
* The shares, because they are what the ring shows and the table does not:
|
|
205
238
|
* the table holds the amounts, and the percentages are this chart's
|
|
206
239
|
* arithmetic. In the ring's order, which is the table's and the legend's.
|
|
240
|
+
* A row the ring leaves out, a negative amount or a slice a legend hid, is
|
|
241
|
+
* left out here too.
|
|
207
242
|
*/
|
|
208
243
|
protected renderSummary(shares: DonutShare[]): TemplateResult;
|
|
209
244
|
/**
|
|
@@ -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 { CHART_PLOT, customElement, drawTooltip, HelixElement, MixinChartSource, PLOT_HEIGHT, PLOT_WIDTH, seriesIndex, wordsLocale, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { CHART_PLOT, customElement, drawTooltip, HelixElement, HelixReadingChangeEvent, HelixReadingPressEvent, MixinChartSource, MixinChartStatus, PLOT_HEIGHT, PLOT_WIDTH, seriesIndex, wordsLocale, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { html, nothing, svg } from 'lit';
|
|
9
9
|
import { property } from 'lit/decorators.js';
|
|
10
10
|
import '../../tooltip/index.js';
|
|
@@ -30,7 +30,7 @@ const THICKNESS = {
|
|
|
30
30
|
none: EDGE,
|
|
31
31
|
small: 26,
|
|
32
32
|
};
|
|
33
|
-
let HelixHeadlessDonutChart = class HelixHeadlessDonutChart extends MixinChartSource(HelixElement) {
|
|
33
|
+
let HelixHeadlessDonutChart = class HelixHeadlessDonutChart extends MixinChartStatus(MixinChartSource(HelixElement)) {
|
|
34
34
|
constructor() {
|
|
35
35
|
super(...arguments);
|
|
36
36
|
this.sliceLabels = false;
|
|
@@ -39,6 +39,11 @@ let HelixHeadlessDonutChart = class HelixHeadlessDonutChart extends MixinChartSo
|
|
|
39
39
|
connectedCallback() {
|
|
40
40
|
super.connectedCallback();
|
|
41
41
|
this.pointer.axis = 'none';
|
|
42
|
+
this.pointer.onReading = (heard, detail) => {
|
|
43
|
+
const row = this.shares[detail.index]?.row ?? -1;
|
|
44
|
+
const told = { ...detail, index: row, label: this.sourceRows[row]?.label ?? '' };
|
|
45
|
+
this.dispatchEvent(heard === 'press' ? new HelixReadingPressEvent(told) : new HelixReadingChangeEvent(told));
|
|
46
|
+
};
|
|
42
47
|
}
|
|
43
48
|
get span() {
|
|
44
49
|
return this.sweep === 'half' ? 0.5 : 1;
|
|
@@ -81,28 +86,32 @@ let HelixHeadlessDonutChart = class HelixHeadlessDonutChart extends MixinChartSo
|
|
|
81
86
|
}
|
|
82
87
|
render() {
|
|
83
88
|
const shares = this.shares;
|
|
84
|
-
|
|
89
|
+
if (shares.length === 0 && (this.readingsKnown || this.loading)) {
|
|
90
|
+
return this.renderEmpty();
|
|
91
|
+
}
|
|
92
|
+
return html `${this.renderPlot(shares)}${shares.length === 0 ? nothing : this.renderSummary(shares)}${this.renderTable()}`;
|
|
85
93
|
}
|
|
86
94
|
renderSummary(shares) {
|
|
87
95
|
const rows = this.sourceRows;
|
|
88
96
|
const locale = wordsLocale(this);
|
|
89
97
|
const parts = shares
|
|
90
|
-
.filter((share) =>
|
|
98
|
+
.filter((share) => share.fraction > 0)
|
|
91
99
|
.map((share) => `${rows[share.row]?.label ?? ''} ${percentIn(locale).format(share.fraction)}`);
|
|
92
100
|
const named = this.named ? `${this.named}: ` : '';
|
|
93
101
|
const listed = new Intl.ListFormat(locale, { style: 'short', type: 'unit' }).format(parts);
|
|
94
102
|
return html `<p id="helix-chart-summary" part="summary">${named}${listed}.</p>`;
|
|
95
103
|
}
|
|
96
104
|
renderPlot(shares) {
|
|
105
|
+
const drawn = shares.length > 0;
|
|
97
106
|
return html `<div
|
|
98
|
-
aria-describedby=${this.named ? `helix-chart-summary${this.hole === 'none' ? '' : ' helix-chart-center'}` : nothing}
|
|
107
|
+
aria-describedby=${drawn && this.named ? `helix-chart-summary${this.hole === 'none' ? '' : ' helix-chart-center'}` : nothing}
|
|
99
108
|
aria-label=${this.named || nothing}
|
|
100
|
-
aria-labelledby=${this.named ?
|
|
109
|
+
aria-labelledby=${drawn && !this.named ? 'helix-chart-summary' : nothing}
|
|
101
110
|
id=${CHART_PLOT}
|
|
102
111
|
part="plot"
|
|
103
|
-
role
|
|
112
|
+
role=${drawn ? 'application' : this.named ? 'group' : nothing}
|
|
104
113
|
style="--donut-chart-stroke: ${this.thickness}"
|
|
105
|
-
tabindex
|
|
114
|
+
tabindex=${drawn ? '0' : nothing}
|
|
106
115
|
>
|
|
107
116
|
<svg
|
|
108
117
|
aria-hidden="true"
|
|
@@ -175,6 +184,11 @@ let HelixHeadlessDonutChart = class HelixHeadlessDonutChart extends MixinChartSo
|
|
|
175
184
|
this.pointer.set(index);
|
|
176
185
|
}
|
|
177
186
|
}}
|
|
187
|
+
@pointerup=${(event) => {
|
|
188
|
+
if (event.pointerType === 'touch') {
|
|
189
|
+
this.pointer.tapTo(index);
|
|
190
|
+
}
|
|
191
|
+
}}
|
|
178
192
|
part="segment${active ? ' segment-active' : ''}"
|
|
179
193
|
r=${this.radius}
|
|
180
194
|
stroke-dasharray="${length} ${GAP}"
|
|
@@ -108,6 +108,7 @@ registerElementEvents({
|
|
|
108
108
|
],
|
|
109
109
|
'helix-headless-date-picker': ['change', 'helix-before-change', 'helix-navigate', 'input'],
|
|
110
110
|
'helix-headless-dialog': ['close', 'helix-before-close', 'helix-before-open', 'toggle'],
|
|
111
|
+
'helix-headless-donut-chart': ['helix-reading-change', 'helix-reading-press'],
|
|
111
112
|
'helix-headless-drawer': ['close', 'helix-before-close', 'helix-before-open', 'toggle'],
|
|
112
113
|
'helix-headless-drilldown': ['helix-navigate', 'helix-select'],
|
|
113
114
|
'helix-headless-drilldown-item': ['helix-select'],
|
|
@@ -249,6 +250,7 @@ registerElementEvents({
|
|
|
249
250
|
'toggle',
|
|
250
251
|
],
|
|
251
252
|
'helix-headless-slider': ['change', 'helix-before-change', 'input'],
|
|
253
|
+
'helix-headless-sparkline': ['helix-reading-change', 'helix-reading-press'],
|
|
252
254
|
'helix-headless-speed-dial': [
|
|
253
255
|
'helix-before-close',
|
|
254
256
|
'helix-before-open',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type GraphSignalDetail, HelixElement, type ViewportPanDetail, type ViewportZoomDetail } from '@fusion.dev/helix-core';
|
|
1
|
+
import { type GraphSignalDetail, HelixElement, KeyboardNavigationController, type ViewportPanDetail, type ViewportZoomDetail } from '@fusion.dev/helix-core';
|
|
2
2
|
import { nothing, type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import { type GraphLink, type GraphNode } from './graph-model.js';
|
|
4
4
|
declare const HelixHeadlessGraph_base: (new (...args: any[]) => import("@fusion.dev/helix-core").ViewportElement) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerActiveInterface) & typeof HelixElement;
|
|
@@ -22,7 +22,9 @@ declare const HelixHeadlessGraph_base: (new (...args: any[]) => import("@fusion.
|
|
|
22
22
|
*
|
|
23
23
|
* Set `legend` to name the groups over the drawing, each a button that shows
|
|
24
24
|
* or hides its notes. `hiddenGroups` holds the groups turned off, and the
|
|
25
|
-
* list holds only what the drawing shows.
|
|
25
|
+
* list holds only what the drawing shows. The legend is a toolbar and one tab
|
|
26
|
+
* stop: the arrow keys, Home, End and a group's first letters move between
|
|
27
|
+
* its buttons, and Space or Enter presses one.
|
|
26
28
|
*
|
|
27
29
|
* `nodes` and `links` are properties, never markup: a graph of ten thousand
|
|
28
30
|
* notes as ten thousand elements would cost what the renderer exists to save.
|
|
@@ -75,7 +77,7 @@ declare const HelixHeadlessGraph_base: (new (...args: any[]) => import("@fusion.
|
|
|
75
77
|
* @csspart gesture-hint - Words over the graph for a moment when it lets a gesture pass to the page, such as how to zoom it.
|
|
76
78
|
* @csspart gesture-status - The line shown while a graph with `gestures="activate"` has the gestures.
|
|
77
79
|
* @csspart header - The strip above the graph.
|
|
78
|
-
* @csspart legend - The groups over the drawing, with `legend
|
|
80
|
+
* @csspart legend - The groups over the drawing, with `legend`: a toolbar of buttons, each showing or hiding its notes, which is one tab stop.
|
|
79
81
|
* @csspart legend-item - One group in the legend, pressed while its notes are shown. Carries `data-tone` where every note in the group has the same tone, which colors the notes over the group's own color.
|
|
80
82
|
* @csspart legend-item-hidden - A group in the legend whose notes are hidden.
|
|
81
83
|
* @csspart legend-swatch - The mark in a group's color, before its name.
|
|
@@ -219,6 +221,12 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
|
|
|
219
221
|
searchLabel: string;
|
|
220
222
|
/** How the selected note is described in the list. */
|
|
221
223
|
selectedLabel: string;
|
|
224
|
+
/**
|
|
225
|
+
* What screen readers hear after a reader selects a note, in the list or in
|
|
226
|
+
* the drawing, with `{note}` for its name and `{count}` for how many notes
|
|
227
|
+
* the list then holds, written with `count-label`.
|
|
228
|
+
*/
|
|
229
|
+
selectionLabel: string;
|
|
222
230
|
/** The hint shown when one finger swipes over the graph with `gestures="cooperative"`. */
|
|
223
231
|
twoFingerHintLabel: string;
|
|
224
232
|
/** The line shown while the graph, with `gestures="activate"`, has the gestures. */
|
|
@@ -263,6 +271,21 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
|
|
|
263
271
|
private asked;
|
|
264
272
|
/** Whether the next change of the list's rows is one a reader asked for by the legend, whose count is then said. */
|
|
265
273
|
private countAsked;
|
|
274
|
+
/**
|
|
275
|
+
* The note a reader last asked to select, in the list or in the drawing,
|
|
276
|
+
* until it is selected: by the frame, or by a page that refused the request
|
|
277
|
+
* and wrote `active` itself.
|
|
278
|
+
*/
|
|
279
|
+
private selectionAsked;
|
|
280
|
+
/** The legend's button that holds its one tab stop, by place: the one a reader was last on, or the first. */
|
|
281
|
+
private legendStop;
|
|
282
|
+
/**
|
|
283
|
+
* The arrow keys, Home, End and typed letters among the legend's buttons,
|
|
284
|
+
* so a legend of twelve groups is one tab stop, as the `Legend` family's
|
|
285
|
+
* toolbar is. Only a press that starts on a legend button moves: the frame's
|
|
286
|
+
* own arrows pan the drawing, and the list's walk the notes.
|
|
287
|
+
*/
|
|
288
|
+
protected readonly legendKeys: KeyboardNavigationController;
|
|
266
289
|
private readonly virtualize;
|
|
267
290
|
/**
|
|
268
291
|
* @internal The notes the drawing shows, which `connectGraph` reads: those
|
|
@@ -343,6 +366,8 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
|
|
|
343
366
|
* names what every note is, and turning it off empties the graph.
|
|
344
367
|
*/
|
|
345
368
|
private renderLegend;
|
|
369
|
+
/** Asks for a note to be selected, and remembers the ask, so the selection is said once it lands. */
|
|
370
|
+
requestActive(next: string, cause?: string): boolean;
|
|
346
371
|
/** Selects the note a row names, through the request a page can refuse. */
|
|
347
372
|
private choose;
|
|
348
373
|
/**
|
|
@@ -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 { auditName, customElement, formatWords, HelixElement, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, MixinControllerActive, MixinViewport, scrollItemIntoView, scrollRoom, Typeahead, VirtualizeController, words, wordsLocale, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { auditName, customElement, focusItemOf, formatWords, HelixElement, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, KeyboardNavigationController, MixinControllerActive, MixinViewport, scrollItemIntoView, scrollRoom, Typeahead, typeaheadBy, VirtualizeController, words, wordsLocale, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { list, magnifyingGlass } from '@fusion.dev/helix-icons';
|
|
9
9
|
import { html, nothing } from 'lit';
|
|
10
10
|
import { property, state } from 'lit/decorators.js';
|
|
@@ -39,6 +39,7 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
|
|
|
39
39
|
this.roleLabel = 'graph';
|
|
40
40
|
this.searchLabel = 'Find a note';
|
|
41
41
|
this.selectedLabel = 'Selected';
|
|
42
|
+
this.selectionLabel = '{note}, selected. {count}';
|
|
42
43
|
this.twoFingerHintLabel = 'Use two fingers to move the graph';
|
|
43
44
|
this.usingLabel = 'Using the graph. Press Escape to scroll the page again.';
|
|
44
45
|
this.wheelHintLabel = 'Use {key} and scroll to zoom the graph';
|
|
@@ -54,6 +55,15 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
|
|
|
54
55
|
this.whole = false;
|
|
55
56
|
this.said = '';
|
|
56
57
|
this.countAsked = false;
|
|
58
|
+
this.legendStop = 0;
|
|
59
|
+
this.legendKeys = new KeyboardNavigationController(this, {
|
|
60
|
+
items: () => [
|
|
61
|
+
...(this.renderRoot?.querySelectorAll?.('[part~="legend-item"]') ?? []),
|
|
62
|
+
].map((button) => focusItemOf(button, { words: button.textContent?.trim() ?? '' })),
|
|
63
|
+
origin: 'focus',
|
|
64
|
+
selects: () => false,
|
|
65
|
+
typeahead: typeaheadBy((item) => item.words ?? ''),
|
|
66
|
+
});
|
|
57
67
|
this.virtualize = new VirtualizeController(this, {
|
|
58
68
|
container: () => this.partNamed('list'),
|
|
59
69
|
count: () => this.entries.length,
|
|
@@ -208,6 +218,13 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
|
|
|
208
218
|
this.countAsked = false;
|
|
209
219
|
this.say(this.countText());
|
|
210
220
|
}
|
|
221
|
+
if (changed.has('active') && this.active !== '' && this.active === this.selectionAsked) {
|
|
222
|
+
this.selectionAsked = undefined;
|
|
223
|
+
const chosen = this.nodes.find((node) => node.id === this.active);
|
|
224
|
+
if (chosen) {
|
|
225
|
+
this.say(formatWords(this, 'selectionLabel', { count: this.countText(), note: nameOf(chosen) }));
|
|
226
|
+
}
|
|
227
|
+
}
|
|
211
228
|
}
|
|
212
229
|
}
|
|
213
230
|
updated(changed) {
|
|
@@ -267,21 +284,32 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
|
|
|
267
284
|
return nothing;
|
|
268
285
|
}
|
|
269
286
|
const hidden = new Set(this.hiddenGroups);
|
|
270
|
-
|
|
271
|
-
|
|
287
|
+
const stop = Math.min(this.legendStop, this.groups.length - 1);
|
|
288
|
+
return html `<div part="legend" role="toolbar" aria-label=${this.legendLabel}>
|
|
289
|
+
${this.groups.map(({ name, tone }, index) => {
|
|
272
290
|
const shown = !hidden.has(name);
|
|
273
291
|
return html `<button
|
|
274
292
|
part="legend-item${shown ? '' : ' legend-item-hidden'}"
|
|
275
293
|
type="button"
|
|
294
|
+
tabindex=${index === stop ? '0' : '-1'}
|
|
276
295
|
aria-pressed=${shown ? 'true' : 'false'}
|
|
277
296
|
data-tone=${tone ?? nothing}
|
|
278
297
|
@click=${() => this.toggleGroup(name)}
|
|
298
|
+
@focus=${() => {
|
|
299
|
+
this.legendStop = index;
|
|
300
|
+
}}
|
|
279
301
|
>
|
|
280
302
|
<span part="legend-swatch" aria-hidden="true"></span>${name}
|
|
281
303
|
</button>`;
|
|
282
304
|
})}
|
|
283
305
|
</div>`;
|
|
284
306
|
}
|
|
307
|
+
requestActive(next, cause) {
|
|
308
|
+
if (next !== this.active) {
|
|
309
|
+
this.selectionAsked = next;
|
|
310
|
+
}
|
|
311
|
+
return super.requestActive(next, cause);
|
|
312
|
+
}
|
|
285
313
|
choose(index) {
|
|
286
314
|
const entry = this.entries[index];
|
|
287
315
|
if (entry) {
|
|
@@ -583,6 +611,10 @@ __decorate([
|
|
|
583
611
|
words,
|
|
584
612
|
property({ attribute: 'selected-label' })
|
|
585
613
|
], HelixHeadlessGraph.prototype, "selectedLabel", void 0);
|
|
614
|
+
__decorate([
|
|
615
|
+
words,
|
|
616
|
+
property({ attribute: 'selection-label' })
|
|
617
|
+
], HelixHeadlessGraph.prototype, "selectionLabel", void 0);
|
|
586
618
|
__decorate([
|
|
587
619
|
words,
|
|
588
620
|
property({ attribute: 'two-finger-hint-label' })
|
|
@@ -615,6 +647,9 @@ __decorate([
|
|
|
615
647
|
__decorate([
|
|
616
648
|
state()
|
|
617
649
|
], HelixHeadlessGraph.prototype, "said", void 0);
|
|
650
|
+
__decorate([
|
|
651
|
+
state()
|
|
652
|
+
], HelixHeadlessGraph.prototype, "legendStop", void 0);
|
|
618
653
|
HelixHeadlessGraph = __decorate([
|
|
619
654
|
customElement('helix-headless-graph')
|
|
620
655
|
], HelixHeadlessGraph);
|
|
@@ -44,11 +44,25 @@ declare const HelixHeadlessHeatmap_base: typeof HelixElement & (new (...args: an
|
|
|
44
44
|
* `multiple` any number. Space, Enter or a press selects the cell the keys or
|
|
45
45
|
* the pointer rest on, or lets it go, and under `multiple` Shift with an arrow,
|
|
46
46
|
* Home, End, PageUp or PageDown takes in every cell from the last one pressed
|
|
47
|
-
* to where the key went. `value` holds the selected days, by
|
|
48
|
-
*
|
|
47
|
+
* to where the key went. `value` holds the selected days, separated by
|
|
48
|
+
* commas: each by its row's `<time datetime>`, such as `2026-06-11`, or by
|
|
49
|
+
* its row's name where the row carries no date. A change asks with
|
|
49
50
|
* `helix-before-change` and tells with `change`, and the `selection` part says
|
|
50
51
|
* how many are selected, in `selection-label`.
|
|
51
52
|
*
|
|
53
|
+
* **Keyboard.** The strip is one tab stop once it has cells.
|
|
54
|
+
*
|
|
55
|
+
* | Key | What it does |
|
|
56
|
+
* |---|---|
|
|
57
|
+
* | Tab | Moves focus to the strip and shows the first cell. |
|
|
58
|
+
* | Down, Up | Moves to the next or the previous cell. |
|
|
59
|
+
* | Right, Left | Moves a column on or back, a week with `rows="7"`. On a right-to-left page, Left moves on. |
|
|
60
|
+
* | Home, End | Moves to the first or the last cell. |
|
|
61
|
+
* | Page Down, Page Up | Moves a month on or back where the rows carry dates, and four columns otherwise. |
|
|
62
|
+
* | Enter, Space | Selects the cell, or lets it go, under `selection-mode`. |
|
|
63
|
+
* | Shift with an arrow, Home, End, Page Up or Page Down | Selects every cell from the last one pressed to where the key went, under `selection-mode="multiple"`. |
|
|
64
|
+
* | Escape | Puts the cell's tooltip away. |
|
|
65
|
+
*
|
|
52
66
|
* @since 0.1.0
|
|
53
67
|
* @status stable
|
|
54
68
|
* @category charts
|
|
@@ -76,6 +90,7 @@ declare const HelixHeadlessHeatmap_base: typeof HelixElement & (new (...args: an
|
|
|
76
90
|
* @csspart start - The leading slot's box.
|
|
77
91
|
* @csspart strip - The grid of cells, which takes focus to be read by key. It is named by the host's `aria-labelledby` or `aria-label`, then by `label`, then by the caption of the table.
|
|
78
92
|
* @csspart summary - The middle slot's box.
|
|
93
|
+
* @csspart table - The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.
|
|
79
94
|
* @csspart tooltip - The bubble, forwarded from `Tooltip`.
|
|
80
95
|
* @csspart tooltip-anchor - The `Tooltip` element itself.
|
|
81
96
|
* @csspart tooltip-arrow - The bubble's point, forwarded from `Tooltip`.
|
|
@@ -107,6 +122,9 @@ declare const HelixHeadlessHeatmap_base: typeof HelixElement & (new (...args: an
|
|
|
107
122
|
* @cssproperty --heatmap-tone-primary - The color of the `primary` tone.
|
|
108
123
|
* @cssproperty --heatmap-tone-success - The color of the `success` tone, named in `tones` or in `data-tone`.
|
|
109
124
|
* @cssproperty --heatmap-tone-warning - The color of the `warning` tone.
|
|
125
|
+
*
|
|
126
|
+
* @cssstate active - While a cell is shown, under the pointer or the keys, with its tooltip open.
|
|
127
|
+
* @cssstate empty - While the `empty` part stands in place of the cells.
|
|
110
128
|
*/
|
|
111
129
|
export declare class HelixHeadlessHeatmap extends HelixHeadlessHeatmap_base {
|
|
112
130
|
/**
|
|
@@ -220,8 +238,9 @@ export declare class HelixHeadlessHeatmap extends HelixHeadlessHeatmap_base {
|
|
|
220
238
|
*/
|
|
221
239
|
totalLabel: string;
|
|
222
240
|
/**
|
|
223
|
-
* The selected cells, by
|
|
224
|
-
* `2026-06-11`,
|
|
241
|
+
* The selected cells, separated by commas: each by the date its row's
|
|
242
|
+
* header carries in a `<time datetime>`, such as `2026-06-11`, or by the
|
|
243
|
+
* header's words where it carries none.
|
|
225
244
|
*
|
|
226
245
|
* Set it to start with cells selected. Written by a press or a key under
|
|
227
246
|
* `selection-mode`.
|
|
@@ -279,7 +298,11 @@ export declare class HelixHeadlessHeatmap extends HelixHeadlessHeatmap_base {
|
|
|
279
298
|
private anchor;
|
|
280
299
|
/** The region a change of selection is said in, rendered from the first change. */
|
|
281
300
|
private readonly status;
|
|
282
|
-
/**
|
|
301
|
+
/**
|
|
302
|
+
* The name each drawn cell stands for in `value`: the date its row's header
|
|
303
|
+
* carries in a `<time datetime>`, or the header's words where it carries
|
|
304
|
+
* none.
|
|
305
|
+
*/
|
|
283
306
|
private keysOf;
|
|
284
307
|
/**
|
|
285
308
|
* Moves `value` to `next`, asking first: `helix-before-change` carries it,
|