@fusion.dev/helix-headless 0.188.0 → 0.190.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/api.json +1 -1
- package/custom-elements.json +39844 -36049
- package/dist/element-events.generated.js +21 -7
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/spatial-heatmap/index.d.ts +1 -0
- package/dist/spatial-heatmap/index.js +1 -0
- package/dist/{isometric-heatmap → spatial-heatmap}/projection.d.ts +32 -6
- package/dist/{isometric-heatmap → spatial-heatmap}/projection.js +33 -8
- package/dist/spatial-heatmap/root/spatial-heatmap-root.d.ts +239 -0
- package/dist/spatial-heatmap/root/spatial-heatmap-root.js +252 -0
- package/dist/spatial-scatter-chart/field.d.ts +63 -0
- package/dist/spatial-scatter-chart/field.js +61 -0
- package/dist/spatial-scatter-chart/index.d.ts +2 -0
- package/dist/spatial-scatter-chart/index.js +2 -0
- package/dist/spatial-scatter-chart/root/spatial-scatter-chart-root.d.ts +207 -0
- package/dist/spatial-scatter-chart/root/spatial-scatter-chart-root.js +222 -0
- package/dist/spatial-scatter-chart/view.d.ts +93 -0
- package/dist/spatial-scatter-chart/view.js +115 -0
- package/dist/spatial-surface-chart/grid.d.ts +50 -0
- package/dist/spatial-surface-chart/grid.js +46 -0
- package/dist/spatial-surface-chart/index.d.ts +2 -0
- package/dist/spatial-surface-chart/index.js +2 -0
- package/dist/spatial-surface-chart/root/spatial-surface-chart-root.d.ts +234 -0
- package/dist/spatial-surface-chart/root/spatial-surface-chart-root.js +281 -0
- package/examples.json +1 -1
- package/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +5417 -3661
- package/types/svelte.d.ts +3 -1
- package/types/vue.d.ts +590 -298
- package/types/words.d.ts +153 -69
- package/dist/isometric-heatmap/index.d.ts +0 -1
- package/dist/isometric-heatmap/index.js +0 -1
- package/dist/isometric-heatmap/root/isometric-heatmap-root.d.ts +0 -118
- package/dist/isometric-heatmap/root/isometric-heatmap-root.js +0 -127
|
@@ -148,13 +148,6 @@ registerElementEvents({
|
|
|
148
148
|
'helix-headless-icon-button': ['helix-press'],
|
|
149
149
|
'helix-headless-image': ['error', 'load'],
|
|
150
150
|
'helix-headless-input': ['change', 'helix-before-change', 'helix-clear', 'input'],
|
|
151
|
-
'helix-headless-isometric-heatmap': [
|
|
152
|
-
'change',
|
|
153
|
-
'helix-before-change',
|
|
154
|
-
'helix-reading-change',
|
|
155
|
-
'helix-reading-press',
|
|
156
|
-
'helix-resize',
|
|
157
|
-
],
|
|
158
151
|
'helix-headless-kbd': ['helix-shortcut'],
|
|
159
152
|
'helix-headless-legend': ['change', 'helix-before-change'],
|
|
160
153
|
'helix-headless-lightbox': [
|
|
@@ -264,6 +257,27 @@ registerElementEvents({
|
|
|
264
257
|
],
|
|
265
258
|
'helix-headless-slider': ['change', 'helix-before-change', 'input'],
|
|
266
259
|
'helix-headless-sparkline': ['helix-reading-change', 'helix-reading-press'],
|
|
260
|
+
'helix-headless-spatial-heatmap': [
|
|
261
|
+
'change',
|
|
262
|
+
'helix-before-change',
|
|
263
|
+
'helix-plot-change',
|
|
264
|
+
'helix-plot-turn',
|
|
265
|
+
'helix-reading-change',
|
|
266
|
+
'helix-reading-press',
|
|
267
|
+
'helix-resize',
|
|
268
|
+
],
|
|
269
|
+
'helix-headless-spatial-scatter-chart': [
|
|
270
|
+
'helix-plot-change',
|
|
271
|
+
'helix-plot-turn',
|
|
272
|
+
'helix-reading-change',
|
|
273
|
+
'helix-reading-press',
|
|
274
|
+
],
|
|
275
|
+
'helix-headless-spatial-surface-chart': [
|
|
276
|
+
'helix-plot-change',
|
|
277
|
+
'helix-plot-turn',
|
|
278
|
+
'helix-reading-change',
|
|
279
|
+
'helix-reading-press',
|
|
280
|
+
],
|
|
267
281
|
'helix-headless-speed-dial': [
|
|
268
282
|
'helix-before-close',
|
|
269
283
|
'helix-before-open',
|
package/dist/index.d.ts
CHANGED
|
@@ -54,7 +54,6 @@ export * from './icon/index.js';
|
|
|
54
54
|
export * from './icon-button/index.js';
|
|
55
55
|
export * from './image/index.js';
|
|
56
56
|
export * from './input/index.js';
|
|
57
|
-
export * from './isometric-heatmap/index.js';
|
|
58
57
|
export * from './kbd/index.js';
|
|
59
58
|
export * from './legend/index.js';
|
|
60
59
|
export * from './lightbox/index.js';
|
|
@@ -88,6 +87,9 @@ export * from './skeleton/index.js';
|
|
|
88
87
|
export * from './skip-link/index.js';
|
|
89
88
|
export * from './slider/index.js';
|
|
90
89
|
export * from './sparkline/index.js';
|
|
90
|
+
export * from './spatial-heatmap/index.js';
|
|
91
|
+
export * from './spatial-scatter-chart/index.js';
|
|
92
|
+
export * from './spatial-surface-chart/index.js';
|
|
91
93
|
export * from './speed-dial/index.js';
|
|
92
94
|
export * from './splitter/index.js';
|
|
93
95
|
export * from './stat/index.js';
|
package/dist/index.js
CHANGED
|
@@ -45,7 +45,6 @@ export * from './icon/index.js';
|
|
|
45
45
|
export * from './icon-button/index.js';
|
|
46
46
|
export * from './image/index.js';
|
|
47
47
|
export * from './input/index.js';
|
|
48
|
-
export * from './isometric-heatmap/index.js';
|
|
49
48
|
export * from './kbd/index.js';
|
|
50
49
|
export * from './legend/index.js';
|
|
51
50
|
export * from './lightbox/index.js';
|
|
@@ -79,6 +78,9 @@ export * from './skeleton/index.js';
|
|
|
79
78
|
export * from './skip-link/index.js';
|
|
80
79
|
export * from './slider/index.js';
|
|
81
80
|
export * from './sparkline/index.js';
|
|
81
|
+
export * from './spatial-heatmap/index.js';
|
|
82
|
+
export * from './spatial-scatter-chart/index.js';
|
|
83
|
+
export * from './spatial-surface-chart/index.js';
|
|
82
84
|
export * from './speed-dial/index.js';
|
|
83
85
|
export * from './splitter/index.js';
|
|
84
86
|
export * from './stat/index.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { HelixHeadlessSpatialHeatmap } from './root/spatial-heatmap-root.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { HelixHeadlessSpatialHeatmap } from './root/spatial-heatmap-root.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Where each reading of
|
|
2
|
+
* Where each reading of a spatial heatmap stands, in the isometric projection, as SVG path data.
|
|
3
3
|
*
|
|
4
4
|
* Kept apart from the element because it is arithmetic a picture hides: a face
|
|
5
5
|
* drawn in the wrong order is covered by the prism it should cover, and a
|
|
@@ -8,14 +8,16 @@
|
|
|
8
8
|
* **The units are cells.** A step along a column or a row is one cell, and a
|
|
9
9
|
* prism's height is in the same unit, so the drawing scales as a whole through
|
|
10
10
|
* the `viewBox` and a server can write it with no width to measure.
|
|
11
|
+
*
|
|
12
|
+
* **The projection is the one every spatial drawing shares**, `helix-core`'s,
|
|
13
|
+
* seen from the isometric camera. What is here is the heatmap's own: which way
|
|
14
|
+
* its columns and rows run, its prisms, and the slab under them.
|
|
11
15
|
*/
|
|
16
|
+
import { type PagePoint } from '@fusion.dev/helix-core';
|
|
12
17
|
/** How far across the page one step along either axis goes: the cosine of 30 degrees. */
|
|
13
18
|
export declare const ACROSS: number;
|
|
14
19
|
/** A point on the page, in cells. */
|
|
15
|
-
export
|
|
16
|
-
x: number;
|
|
17
|
-
y: number;
|
|
18
|
-
}
|
|
20
|
+
export type Point = PagePoint;
|
|
19
21
|
/** One reading drawn as a prism: three visible faces, as path data. */
|
|
20
22
|
export interface Prism {
|
|
21
23
|
/** The reading's place among those drawn. */
|
|
@@ -29,8 +31,19 @@ export interface Prism {
|
|
|
29
31
|
/** The face the reading's tone is painted on. */
|
|
30
32
|
top: string;
|
|
31
33
|
}
|
|
32
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* The slab the prisms stand on: its top, which is the floor, and its two
|
|
36
|
+
* sides seen from the front, as path data.
|
|
37
|
+
*/
|
|
38
|
+
export interface Base {
|
|
39
|
+
left: string;
|
|
40
|
+
right: string;
|
|
41
|
+
top: string;
|
|
42
|
+
}
|
|
43
|
+
/** Every prism, the slab under them, and the box they fit in. */
|
|
33
44
|
export interface Relief {
|
|
45
|
+
/** The slab under the grid, or none where there is nothing to stand on it. */
|
|
46
|
+
base: Base | undefined;
|
|
34
47
|
/** The box every face fits in, in cells: its left, top, width, and height. */
|
|
35
48
|
box: {
|
|
36
49
|
height: number;
|
|
@@ -38,9 +51,22 @@ export interface Relief {
|
|
|
38
51
|
x: number;
|
|
39
52
|
y: number;
|
|
40
53
|
};
|
|
54
|
+
/**
|
|
55
|
+
* The two ends of the front edge, at the foot of the slab: `start` at the
|
|
56
|
+
* left corner, under the first column, and `end` at the bottom corner,
|
|
57
|
+
* under the last. The strip's first and last labels stand there.
|
|
58
|
+
*/
|
|
59
|
+
corners: {
|
|
60
|
+
end: Point;
|
|
61
|
+
start: Point;
|
|
62
|
+
} | undefined;
|
|
41
63
|
/** In the order they are painted, which is the order of the readings. */
|
|
42
64
|
prisms: Prism[];
|
|
43
65
|
}
|
|
66
|
+
/** How far the slab reaches past the grid on every side, in cells. */
|
|
67
|
+
export declare const MARGIN = 0.3;
|
|
68
|
+
/** How thick the slab is, in cells. */
|
|
69
|
+
export declare const THICKNESS = 0.25;
|
|
44
70
|
/**
|
|
45
71
|
* Each reading's height, from zero, as a share of the highest reading times
|
|
46
72
|
* `tallest`.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
+
import { ISOMETRIC, pathData, projectionOf } from '@fusion.dev/helix-core';
|
|
1
2
|
export const ACROSS = Math.sqrt(3) / 2;
|
|
3
|
+
export const MARGIN = 0.3;
|
|
4
|
+
export const THICKNESS = 0.25;
|
|
2
5
|
export const heightsOf = (values, highest, tallest) => values.map((value) => highest > 0 && value !== undefined && value > 0
|
|
3
6
|
? (Math.min(value, highest) / highest) * tallest
|
|
4
7
|
: 0);
|
|
5
8
|
export const highestOf = (values) => values.reduce((high, value) => (value !== undefined && value > high ? value : high), 0);
|
|
6
|
-
const
|
|
7
|
-
const at = (column, row, height) => (
|
|
8
|
-
|
|
9
|
-
y: (column + row) / 2 - height,
|
|
10
|
-
});
|
|
11
|
-
const path = (points) => `M${points.map((point) => `${short(point.x)} ${short(point.y)}`).join('L')}Z`;
|
|
9
|
+
const isometric = projectionOf(ISOMETRIC);
|
|
10
|
+
const at = (column, row, height) => isometric.at(column, -row, height);
|
|
11
|
+
const path = pathData;
|
|
12
12
|
export const reliefOf = (heights, rows, footprint) => {
|
|
13
13
|
const count = Math.max(1, Math.floor(rows) || 1);
|
|
14
14
|
const inset = (1 - Math.min(1, Math.max(0, footprint))) / 2;
|
|
@@ -43,7 +43,32 @@ export const reliefOf = (heights, rows, footprint) => {
|
|
|
43
43
|
};
|
|
44
44
|
});
|
|
45
45
|
if (prisms.length === 0) {
|
|
46
|
-
return { box: { height: 0, width: 0, x: 0, y: 0 }, prisms };
|
|
46
|
+
return { base: undefined, box: { height: 0, width: 0, x: 0, y: 0 }, corners: undefined, prisms };
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
const columns = Math.ceil(heights.length / count);
|
|
49
|
+
const deep = Math.min(count, heights.length);
|
|
50
|
+
const [first, last] = [-MARGIN, columns + MARGIN];
|
|
51
|
+
const [near, far] = [-MARGIN, deep + MARGIN];
|
|
52
|
+
const back = at(first, near, 0);
|
|
53
|
+
const across = at(last, near, 0);
|
|
54
|
+
const front = at(last, far, 0);
|
|
55
|
+
const down = at(first, far, 0);
|
|
56
|
+
const acrossFoot = at(last, near, -THICKNESS);
|
|
57
|
+
const frontFoot = at(last, far, -THICKNESS);
|
|
58
|
+
const downFoot = at(first, far, -THICKNESS);
|
|
59
|
+
const base = {
|
|
60
|
+
left: path([down, front, frontFoot, downFoot]),
|
|
61
|
+
right: path([front, across, acrossFoot, frontFoot]),
|
|
62
|
+
top: path([back, across, front, down]),
|
|
63
|
+
};
|
|
64
|
+
left = Math.min(left, downFoot.x);
|
|
65
|
+
right = Math.max(right, acrossFoot.x);
|
|
66
|
+
top = Math.min(top, back.y);
|
|
67
|
+
bottom = Math.max(bottom, frontFoot.y);
|
|
68
|
+
return {
|
|
69
|
+
base,
|
|
70
|
+
box: { height: bottom - top, width: right - left, x: left, y: top },
|
|
71
|
+
corners: { end: frontFoot, start: downFoot },
|
|
72
|
+
prisms,
|
|
73
|
+
};
|
|
49
74
|
};
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { nothing, type PropertyValues, type TemplateResult } from 'lit';
|
|
2
|
+
import '../../tooltip/index.js';
|
|
3
|
+
import { HelixHeadlessHeatmap } from '../../heatmap/root/heatmap-root.js';
|
|
4
|
+
/**
|
|
5
|
+
* @summary A heatmap drawn as a relief, where each reading stands as tall as its value.
|
|
6
|
+
*
|
|
7
|
+
* @description
|
|
8
|
+
* The same strip as `Heatmap`, seen from above at an angle. Each reading is a
|
|
9
|
+
* prism: its top face takes the cell's tone, and its height repeats the value,
|
|
10
|
+
* measured from zero against the highest reading in the table. `rows="7"`
|
|
11
|
+
* makes a contribution graph, with each week a column running down to the
|
|
12
|
+
* right.
|
|
13
|
+
*
|
|
14
|
+
* **The height says what the tone says.** Read the exact value from the tooltip
|
|
15
|
+
* or the table, and compare readings by tone. A tall reading at the front can
|
|
16
|
+
* hide a short one behind it, so the newest column stands at the front, where
|
|
17
|
+
* nothing covers it.
|
|
18
|
+
*
|
|
19
|
+
* **Everything else is `Heatmap`.** The table named by `for`, the tones and
|
|
20
|
+
* thresholds, the keys, the tooltip, the overview, `selection-mode`, and the
|
|
21
|
+
* events all work as they do there. The class extends the headless heatmap,
|
|
22
|
+
* and its own entry point carries the drawing, so a page using only `Heatmap`
|
|
23
|
+
* loads none of it.
|
|
24
|
+
*
|
|
25
|
+
* **It was `helix-isometric-heatmap` until 0.189.0**, and
|
|
26
|
+
* `helix-headless-isometric-heatmap` in the headless tier. The old tags are
|
|
27
|
+
* gone, and so are the `--isometric-heatmap-*` hooks, which are
|
|
28
|
+
* `--spatial-heatmap-*`, and the words key, which is `helix-spatial-heatmap`.
|
|
29
|
+
* The two shade hooks now take a step of lightness, such as `0.07`, where they
|
|
30
|
+
* took a percentage mixed toward black. Every attribute, part, and event kept
|
|
31
|
+
* its name.
|
|
32
|
+
*
|
|
33
|
+
* **`flat` lays every prism down** at no height, which leaves the tones on a
|
|
34
|
+
* plane at the same angle.
|
|
35
|
+
*
|
|
36
|
+
* **The prisms stand on a slab**, the `base`, which reaches a little past the
|
|
37
|
+
* grid, so the relief reads as one object. The `start` and `end` slots name
|
|
38
|
+
* the two ends of the front edge, which is the strip's first and last column:
|
|
39
|
+
* the component writes where those corners are on the `footer`, and a
|
|
40
|
+
* stylesheet stands each label at its corner. A renderer tells the chart where
|
|
41
|
+
* it draws those corners, so the labels stand at them there too, and follow
|
|
42
|
+
* them as the view turns.
|
|
43
|
+
*
|
|
44
|
+
* **`gap` and `min-cell` set the smallest cell.** The drawing scales as a
|
|
45
|
+
* whole, so a wider box draws larger cells and the gap grows with them. A box
|
|
46
|
+
* too narrow for every column at `min-cell` draws the newest that fit.
|
|
47
|
+
*
|
|
48
|
+
* **The drawing is SVG and holds still.** It scales with its box through its
|
|
49
|
+
* `viewBox`, needs no WebGL, and has no motion to pause.
|
|
50
|
+
*
|
|
51
|
+
* **A renderer can draw it in 3D instead.** Put a box for it in the
|
|
52
|
+
* `renderer` slot, and `connectSpatialHeatmap` from `@fusion.dev/helix-plot`
|
|
53
|
+
* draws the prisms in it with three.js, lit, in the same tones, in a view
|
|
54
|
+
* that drags round and zooms. The chart publishes its readings in `field`,
|
|
55
|
+
* and its own drawing stays under the renderer's, unseen, where a screen
|
|
56
|
+
* reader and the keys still reach it. Shift with an arrow turns the view,
|
|
57
|
+
* except under `selection-mode="multiple"`, where it selects.
|
|
58
|
+
*
|
|
59
|
+
* **Keyboard.** The keys are `Heatmap`'s. Down moves to the next reading in a
|
|
60
|
+
* column, drawn down to the left, and Right to the same reading in the next
|
|
61
|
+
* column, drawn down to the right.
|
|
62
|
+
*
|
|
63
|
+
* | Key | What it does |
|
|
64
|
+
* |---|---|
|
|
65
|
+
* | Tab | Moves focus to the strip and shows the first cell. |
|
|
66
|
+
* | Down, Up | Moves to the next or the previous cell. |
|
|
67
|
+
* | Right, Left | Moves a column on or back, a week with `rows="7"`. On a right-to-left page, Left moves on. |
|
|
68
|
+
* | Home, End | Moves to the first or the last cell. |
|
|
69
|
+
* | Page Down, Page Up | Moves a month on or back where the rows carry dates, and four columns otherwise. |
|
|
70
|
+
* | Enter, Space | Presses the cell, which sends `helix-reading-press`, and selects it or lets it go under `selection-mode`. |
|
|
71
|
+
* | 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"`. |
|
|
72
|
+
* | Shift with an arrow | Turns a renderer's view, where one is connected and `selection-mode` is not `multiple`. |
|
|
73
|
+
* | Escape | Puts the cell's tooltip away. |
|
|
74
|
+
*
|
|
75
|
+
* @since 0.189.0
|
|
76
|
+
* @status experimental
|
|
77
|
+
* @category charts
|
|
78
|
+
* @aliases Isometric heatmap, Isometric chart, 3D heatmap, Relief chart, Isometric contribution graph
|
|
79
|
+
* @documentation https://fusion.dev/helix/components/spatial-heatmap
|
|
80
|
+
*
|
|
81
|
+
* @slot renderer - The renderer's box, which a 3D drawing is made in, over the chart's own.
|
|
82
|
+
*
|
|
83
|
+
* @event {HelixPlotChangeEvent} helix-plot-change - The readings drawn or the reading the keys rest on changed, which a renderer is told. It stays on the chart.
|
|
84
|
+
* @event {HelixPlotTurnEvent} helix-plot-turn - Shift with an arrow asked a renderer's view to turn, by a step across or up.
|
|
85
|
+
*
|
|
86
|
+
* @csspart base - The slab the prisms stand on: a group holding its top and its two sides. Hidden from screen readers.
|
|
87
|
+
* @csspart base-left - The slab's side toward the viewer at the lower left, under the strip's last row.
|
|
88
|
+
* @csspart base-right - The slab's side toward the viewer at the lower right, under the newest column.
|
|
89
|
+
* @csspart base-top - The slab's top, which is the floor the prisms stand on.
|
|
90
|
+
* @csspart cell - One reading: a group holding its three faces.
|
|
91
|
+
* @csspart drawing - The SVG every prism is drawn in. It is mirrored on a right-to-left page.
|
|
92
|
+
* @csspart left-face - The face of a prism toward the next row, drawn at its lower left.
|
|
93
|
+
* @csspart right-face - The face of a prism toward the next column, drawn at its lower right.
|
|
94
|
+
* @csspart row - A column of prisms, which a grid reads as a row, under `selection-mode`.
|
|
95
|
+
* @csspart strip - The box the drawing fills, 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.
|
|
96
|
+
* @csspart top-face - The top of a prism, which carries the reading's tone.
|
|
97
|
+
*
|
|
98
|
+
* @cssproperty --spatial-heatmap-depth - How tall the drawing is for its width. The component writes it on the footer, and a stylesheet that stands the `start` and `end` labels at their corners reads it.
|
|
99
|
+
* @cssproperty --spatial-heatmap-end-x - Where the front edge ends, under the newest column, across the drawing, from 0 at its inline start to 1. The component writes it on the footer, and a stylesheet that stands the `end` label there reads it.
|
|
100
|
+
* @cssproperty --spatial-heatmap-end-y - How far down the drawing the front edge ends, under the newest column, as a share of the drawing's width: its whole depth in the chart's own drawing, and wherever a renderer draws it. The component writes it on the footer, and a stylesheet that stands the `end` label there reads it.
|
|
101
|
+
* @cssproperty --spatial-heatmap-span - How many cells the drawing spans across: its columns and its rows together. The component writes it on the strip, and a stylesheet that caps the cell size reads it.
|
|
102
|
+
* @cssproperty --spatial-heatmap-start-x - Where the front edge starts, under the first column, across the drawing, from 0 at its inline start to 1: 0 in the chart's own drawing, and wherever a renderer draws it. The component writes it on the footer, and a stylesheet that stands the `start` label there reads it.
|
|
103
|
+
* @cssproperty --spatial-heatmap-start-y - How far down the drawing the front edge starts, under the first column, as a share of the drawing's width. The component writes it on the footer, and a stylesheet that stands the `start` label there reads it.
|
|
104
|
+
*
|
|
105
|
+
* @cssstate drawn - While a renderer has drawn the relief, and the chart's own drawing stays unseen under it.
|
|
106
|
+
*/
|
|
107
|
+
export declare class HelixHeadlessSpatialHeatmap extends HelixHeadlessHeatmap {
|
|
108
|
+
/**
|
|
109
|
+
* The key this family's words are registered under, its styled tag:
|
|
110
|
+
* `registerWords('de', { 'helix-spatial-heatmap': { emptyText: 'Keine Werte' } })`.
|
|
111
|
+
*/
|
|
112
|
+
static words: string;
|
|
113
|
+
protected static markRules: string[];
|
|
114
|
+
/**
|
|
115
|
+
* Draws every prism at no height, so the tones lie on a plane.
|
|
116
|
+
*/
|
|
117
|
+
flat: boolean;
|
|
118
|
+
/**
|
|
119
|
+
* How tall the highest reading stands, in cells. Every other reading stands
|
|
120
|
+
* at its share of it.
|
|
121
|
+
*/
|
|
122
|
+
relief: number;
|
|
123
|
+
/** The prisms drawn on the last render, which the tooltip is placed against. */
|
|
124
|
+
private shown;
|
|
125
|
+
/** Whether a renderer has drawn the relief, which its own drawing then stays under. */
|
|
126
|
+
private rendered;
|
|
127
|
+
/** Where the renderer draws the reading, which the tooltip points at. */
|
|
128
|
+
private place;
|
|
129
|
+
/** Where the renderer draws the two ends of the front edge, which the first and last labels stand at. */
|
|
130
|
+
private corners;
|
|
131
|
+
/** The field last told, and the reading, so a renderer is told of a change only. */
|
|
132
|
+
private told;
|
|
133
|
+
/**
|
|
134
|
+
* What a renderer draws: every reading drawn, down each column and then
|
|
135
|
+
* across, with its place on the grid, its height in cells, and its tone.
|
|
136
|
+
*/
|
|
137
|
+
get field(): {
|
|
138
|
+
cells: Array<{
|
|
139
|
+
column: number;
|
|
140
|
+
height: number;
|
|
141
|
+
label: string;
|
|
142
|
+
row: number;
|
|
143
|
+
tone?: string | undefined;
|
|
144
|
+
}>;
|
|
145
|
+
columns: number;
|
|
146
|
+
rows: number;
|
|
147
|
+
};
|
|
148
|
+
/** The reading the pointer or the keys rest on, as its place in `field.cells`, or `-1`. */
|
|
149
|
+
get active(): number;
|
|
150
|
+
/**
|
|
151
|
+
* Says whether a renderer has drawn the relief, which its own drawing then
|
|
152
|
+
* stays under, or shows it again. Called by the connector.
|
|
153
|
+
*/
|
|
154
|
+
rendererDrawn(on?: boolean): void;
|
|
155
|
+
/**
|
|
156
|
+
* Puts the reading on the prism at `index`, or lets it go with `-1`, as a
|
|
157
|
+
* pointer resting on it in the renderer's drawing or a press there does.
|
|
158
|
+
* A touch keeps it until a tap lands elsewhere, and a mouse leaving a
|
|
159
|
+
* reading the keys moved to leaves it. Called by the connector.
|
|
160
|
+
*/
|
|
161
|
+
requestActive(index: number, kind?: 'mouse' | 'pen' | 'touch'): void;
|
|
162
|
+
/**
|
|
163
|
+
* Says where the renderer draws the reading, as fractions of the strip from
|
|
164
|
+
* its top left, or `undefined` while it draws none. The tooltip points
|
|
165
|
+
* there. Called by the connector.
|
|
166
|
+
*/
|
|
167
|
+
placeReading(at: {
|
|
168
|
+
x: number;
|
|
169
|
+
y: number;
|
|
170
|
+
} | undefined): void;
|
|
171
|
+
/**
|
|
172
|
+
* Says where the renderer draws the two ends of the front edge, under the
|
|
173
|
+
* first column and the last, as fractions of the strip from its top left,
|
|
174
|
+
* or `undefined` while they are out of view, where the labels keep the
|
|
175
|
+
* last place they had. The `start` and `end` labels stand there. Called by
|
|
176
|
+
* the connector.
|
|
177
|
+
*/
|
|
178
|
+
placeCorners(at: {
|
|
179
|
+
end: {
|
|
180
|
+
x: number;
|
|
181
|
+
y: number;
|
|
182
|
+
};
|
|
183
|
+
start: {
|
|
184
|
+
x: number;
|
|
185
|
+
y: number;
|
|
186
|
+
};
|
|
187
|
+
} | undefined): void;
|
|
188
|
+
protected updated(changed: PropertyValues): void;
|
|
189
|
+
/**
|
|
190
|
+
* Shift with an arrow turns a renderer's view, and moves no reading,
|
|
191
|
+
* except under `selection-mode="multiple"`, where it selects a range.
|
|
192
|
+
*/
|
|
193
|
+
private readonly onTurnKeydown;
|
|
194
|
+
/**
|
|
195
|
+
* How many readings fit, as whole columns, newest kept.
|
|
196
|
+
*
|
|
197
|
+
* The drawing runs at 30 degrees, so a cell takes `ACROSS` of its width, and
|
|
198
|
+
* the rows run across too: a strip `rows` deep starts that many cells to the
|
|
199
|
+
* left of its first column.
|
|
200
|
+
*/
|
|
201
|
+
protected get room(): number;
|
|
202
|
+
/** The drawn readings as prisms, standing against the highest reading in the table. */
|
|
203
|
+
private drawnRelief;
|
|
204
|
+
protected render(): TemplateResult;
|
|
205
|
+
/**
|
|
206
|
+
* One reading as a prism. The sides come first, so the top face is painted
|
|
207
|
+
* over the edge they share with it.
|
|
208
|
+
*
|
|
209
|
+
* Under `selection-mode` the prism is a `gridcell` named by its row in the
|
|
210
|
+
* table and saying whether it is selected, as the flat strip's cell is.
|
|
211
|
+
*/
|
|
212
|
+
private renderPrism;
|
|
213
|
+
/**
|
|
214
|
+
* The slab under the prisms, painted first so every prism stands on it.
|
|
215
|
+
* Hidden from screen readers, and out of a grid's rows.
|
|
216
|
+
*/
|
|
217
|
+
private renderBase;
|
|
218
|
+
/**
|
|
219
|
+
* Where the front edge's two ends stand, for the labels that name them.
|
|
220
|
+
* **As shares of the drawing's width**, the one length a percentage margin
|
|
221
|
+
* is measured against, so a sheet places a label with no height to read.
|
|
222
|
+
*/
|
|
223
|
+
private cornersStyle;
|
|
224
|
+
/**
|
|
225
|
+
* The prisms as a grid's rows, one for each column of the strip, which is
|
|
226
|
+
* also the order they are painted in.
|
|
227
|
+
*/
|
|
228
|
+
private renderPrismRows;
|
|
229
|
+
/**
|
|
230
|
+
* The bubble over the top face of the reading the pointer or the keys rest
|
|
231
|
+
* on, placed as a share of the drawing, which the strip's box matches.
|
|
232
|
+
*/
|
|
233
|
+
protected renderTooltip(grid?: boolean): TemplateResult | typeof nothing;
|
|
234
|
+
}
|
|
235
|
+
declare global {
|
|
236
|
+
interface HTMLElementTagNameMap {
|
|
237
|
+
'helix-headless-spatial-heatmap': HelixHeadlessSpatialHeatmap;
|
|
238
|
+
}
|
|
239
|
+
}
|