minerva-design 1.2.0 → 1.3.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/CHANGELOG.md +7 -0
- package/dist/charts/canvas.d.cts +4 -1
- package/dist/charts/canvas.d.ts +4 -1
- package/dist/charts/core.cjs +1 -1
- package/dist/charts/core.d.cts +5 -2
- package/dist/charts/core.d.ts +5 -2
- package/dist/charts/core.js +6 -4
- package/dist/charts/engine/canvas.cjs +1 -1
- package/dist/charts/engine/canvas.cjs.map +1 -1
- package/dist/charts/engine/canvas.js +65 -53
- package/dist/charts/engine/canvas.js.map +1 -1
- package/dist/charts/engine/chart.cjs +1 -2
- package/dist/charts/engine/chart.cjs.map +1 -1
- package/dist/charts/engine/chart.js +342 -323
- package/dist/charts/engine/chart.js.map +1 -1
- package/dist/charts/engine/color.cjs +1 -1
- package/dist/charts/engine/color.cjs.map +1 -1
- package/dist/charts/engine/color.d.cts +17 -0
- package/dist/charts/engine/color.d.ts +17 -0
- package/dist/charts/engine/color.js +27 -3
- package/dist/charts/engine/color.js.map +1 -1
- package/dist/charts/engine/controller.cjs +2 -2
- package/dist/charts/engine/controller.cjs.map +1 -1
- package/dist/charts/engine/controller.d.cts +6 -0
- package/dist/charts/engine/controller.d.ts +6 -0
- package/dist/charts/engine/controller.js +317 -253
- package/dist/charts/engine/controller.js.map +1 -1
- package/dist/charts/engine/curve.cjs +2 -0
- package/dist/charts/engine/curve.cjs.map +1 -0
- package/dist/charts/engine/curve.d.cts +15 -0
- package/dist/charts/engine/curve.d.ts +15 -0
- package/dist/charts/engine/curve.js +56 -0
- package/dist/charts/engine/curve.js.map +1 -0
- package/dist/charts/engine/data.cjs +1 -1
- package/dist/charts/engine/data.cjs.map +1 -1
- package/dist/charts/engine/data.d.cts +15 -2
- package/dist/charts/engine/data.d.ts +15 -2
- package/dist/charts/engine/data.js +98 -38
- package/dist/charts/engine/data.js.map +1 -1
- package/dist/charts/engine/dom.cjs +1 -1
- package/dist/charts/engine/dom.cjs.map +1 -1
- package/dist/charts/engine/dom.d.cts +5 -3
- package/dist/charts/engine/dom.d.ts +5 -3
- package/dist/charts/engine/dom.js +27 -22
- package/dist/charts/engine/dom.js.map +1 -1
- package/dist/charts/engine/items.cjs +1 -1
- package/dist/charts/engine/items.cjs.map +1 -1
- package/dist/charts/engine/items.js +132 -61
- package/dist/charts/engine/items.js.map +1 -1
- package/dist/charts/engine/model.cjs +1 -1
- package/dist/charts/engine/model.cjs.map +1 -1
- package/dist/charts/engine/model.d.cts +30 -3
- package/dist/charts/engine/model.d.ts +30 -3
- package/dist/charts/engine/model.js +225 -108
- package/dist/charts/engine/model.js.map +1 -1
- package/dist/charts/engine/overlay.cjs +1 -1
- package/dist/charts/engine/overlay.cjs.map +1 -1
- package/dist/charts/engine/overlay.d.cts +2 -0
- package/dist/charts/engine/overlay.d.ts +2 -0
- package/dist/charts/engine/overlay.js +16 -16
- package/dist/charts/engine/overlay.js.map +1 -1
- package/dist/charts/engine/presets.cjs +2 -2
- package/dist/charts/engine/presets.cjs.map +1 -1
- package/dist/charts/engine/presets.d.cts +71 -5
- package/dist/charts/engine/presets.d.ts +71 -5
- package/dist/charts/engine/presets.js +120 -33
- package/dist/charts/engine/presets.js.map +1 -1
- package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
- package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
- package/dist/charts/engine/renderers/canvas2d.js +149 -111
- package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
- package/dist/charts/engine/renderers/range.cjs +1 -1
- package/dist/charts/engine/renderers/range.cjs.map +1 -1
- package/dist/charts/engine/renderers/range.js +4 -4
- package/dist/charts/engine/renderers/range.js.map +1 -1
- package/dist/charts/engine/renderers/shaders.cjs +37 -19
- package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
- package/dist/charts/engine/renderers/shaders.d.cts +2 -2
- package/dist/charts/engine/renderers/shaders.d.ts +2 -2
- package/dist/charts/engine/renderers/shaders.js +37 -19
- package/dist/charts/engine/renderers/shaders.js.map +1 -1
- package/dist/charts/engine/renderers/types.cjs.map +1 -1
- package/dist/charts/engine/renderers/types.d.cts +11 -4
- package/dist/charts/engine/renderers/types.d.ts +11 -4
- package/dist/charts/engine/renderers/types.js.map +1 -1
- package/dist/charts/engine/renderers/webgl2.cjs +1 -1
- package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgl2.js +33 -12
- package/dist/charts/engine/renderers/webgl2.js.map +1 -1
- package/dist/charts/engine/renderers/webgpu.cjs +1 -1
- package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgpu.js +18 -15
- package/dist/charts/engine/renderers/webgpu.js.map +1 -1
- package/dist/charts/engine/scene.cjs +1 -1
- package/dist/charts/engine/scene.cjs.map +1 -1
- package/dist/charts/engine/scene.d.cts +19 -6
- package/dist/charts/engine/scene.d.ts +19 -6
- package/dist/charts/engine/scene.js +201 -89
- package/dist/charts/engine/scene.js.map +1 -1
- package/dist/charts/engine/shapes/canvas.cjs +2 -0
- package/dist/charts/engine/shapes/canvas.cjs.map +1 -0
- package/dist/charts/engine/shapes/canvas.d.cts +58 -0
- package/dist/charts/engine/shapes/canvas.d.ts +58 -0
- package/dist/charts/engine/shapes/canvas.js +159 -0
- package/dist/charts/engine/shapes/canvas.js.map +1 -0
- package/dist/charts/engine/shapes/chart.cjs +2 -0
- package/dist/charts/engine/shapes/chart.cjs.map +1 -0
- package/dist/charts/engine/shapes/chart.d.cts +6 -0
- package/dist/charts/engine/shapes/chart.d.ts +6 -0
- package/dist/charts/engine/shapes/chart.js +273 -0
- package/dist/charts/engine/shapes/chart.js.map +1 -0
- package/dist/charts/engine/shapes/draw.cjs +2 -0
- package/dist/charts/engine/shapes/draw.cjs.map +1 -0
- package/dist/charts/engine/shapes/draw.d.cts +20 -0
- package/dist/charts/engine/shapes/draw.d.ts +20 -0
- package/dist/charts/engine/shapes/draw.js +152 -0
- package/dist/charts/engine/shapes/draw.js.map +1 -0
- package/dist/charts/engine/shapes/funnel.cjs +2 -0
- package/dist/charts/engine/shapes/funnel.cjs.map +1 -0
- package/dist/charts/engine/shapes/funnel.d.cts +6 -0
- package/dist/charts/engine/shapes/funnel.d.ts +6 -0
- package/dist/charts/engine/shapes/funnel.js +149 -0
- package/dist/charts/engine/shapes/funnel.js.map +1 -0
- package/dist/charts/engine/shapes/gauge.cjs +2 -0
- package/dist/charts/engine/shapes/gauge.cjs.map +1 -0
- package/dist/charts/engine/shapes/gauge.d.cts +7 -0
- package/dist/charts/engine/shapes/gauge.d.ts +7 -0
- package/dist/charts/engine/shapes/gauge.js +173 -0
- package/dist/charts/engine/shapes/gauge.js.map +1 -0
- package/dist/charts/engine/shapes/hit.cjs +2 -0
- package/dist/charts/engine/shapes/hit.cjs.map +1 -0
- package/dist/charts/engine/shapes/hit.d.cts +28 -0
- package/dist/charts/engine/shapes/hit.d.ts +28 -0
- package/dist/charts/engine/shapes/hit.js +124 -0
- package/dist/charts/engine/shapes/hit.js.map +1 -0
- package/dist/charts/engine/shapes/index.d.cts +9 -0
- package/dist/charts/engine/shapes/index.d.ts +9 -0
- package/dist/charts/engine/shapes/layout.cjs +3 -0
- package/dist/charts/engine/shapes/layout.cjs.map +1 -0
- package/dist/charts/engine/shapes/layout.d.cts +88 -0
- package/dist/charts/engine/shapes/layout.d.ts +88 -0
- package/dist/charts/engine/shapes/layout.js +266 -0
- package/dist/charts/engine/shapes/layout.js.map +1 -0
- package/dist/charts/engine/shapes/pie.cjs +2 -0
- package/dist/charts/engine/shapes/pie.cjs.map +1 -0
- package/dist/charts/engine/shapes/pie.d.cts +20 -0
- package/dist/charts/engine/shapes/pie.d.ts +20 -0
- package/dist/charts/engine/shapes/pie.js +302 -0
- package/dist/charts/engine/shapes/pie.js.map +1 -0
- package/dist/charts/engine/shapes/radar.cjs +2 -0
- package/dist/charts/engine/shapes/radar.cjs.map +1 -0
- package/dist/charts/engine/shapes/radar.d.cts +8 -0
- package/dist/charts/engine/shapes/radar.d.ts +8 -0
- package/dist/charts/engine/shapes/radar.js +197 -0
- package/dist/charts/engine/shapes/radar.js.map +1 -0
- package/dist/charts/engine/shapes/runtime.cjs +2 -0
- package/dist/charts/engine/shapes/runtime.cjs.map +1 -0
- package/dist/charts/engine/shapes/runtime.d.cts +29 -0
- package/dist/charts/engine/shapes/runtime.d.ts +29 -0
- package/dist/charts/engine/shapes/runtime.js +97 -0
- package/dist/charts/engine/shapes/runtime.js.map +1 -0
- package/dist/charts/engine/shapes/scene.cjs +2 -0
- package/dist/charts/engine/shapes/scene.cjs.map +1 -0
- package/dist/charts/engine/shapes/scene.d.cts +257 -0
- package/dist/charts/engine/shapes/scene.d.ts +257 -0
- package/dist/charts/engine/shapes/scene.js +123 -0
- package/dist/charts/engine/shapes/scene.js.map +1 -0
- package/dist/charts/engine/shapes/treemap.cjs +2 -0
- package/dist/charts/engine/shapes/treemap.cjs.map +1 -0
- package/dist/charts/engine/shapes/treemap.d.cts +14 -0
- package/dist/charts/engine/shapes/treemap.d.ts +14 -0
- package/dist/charts/engine/shapes/treemap.js +213 -0
- package/dist/charts/engine/shapes/treemap.js.map +1 -0
- package/dist/charts/engine/shapes/types.d.cts +292 -0
- package/dist/charts/engine/shapes/types.d.ts +292 -0
- package/dist/charts/engine/signature.cjs +2 -0
- package/dist/charts/engine/signature.cjs.map +1 -0
- package/dist/charts/engine/signature.d.cts +9 -0
- package/dist/charts/engine/signature.d.ts +9 -0
- package/dist/charts/engine/signature.js +13 -0
- package/dist/charts/engine/signature.js.map +1 -0
- package/dist/charts/engine/theme.cjs +1 -1
- package/dist/charts/engine/theme.cjs.map +1 -1
- package/dist/charts/engine/theme.d.cts +10 -1
- package/dist/charts/engine/theme.d.ts +10 -1
- package/dist/charts/engine/theme.js +40 -16
- package/dist/charts/engine/theme.js.map +1 -1
- package/dist/charts/engine/types.d.cts +70 -9
- package/dist/charts/engine/types.d.ts +70 -9
- package/dist/charts/index.cjs +1 -1
- package/dist/charts/index.d.cts +4 -2
- package/dist/charts/index.d.ts +4 -2
- package/dist/charts/index.js +8 -5
- package/dist/charts/react/Chart.cjs +1 -1
- package/dist/charts/react/Chart.cjs.map +1 -1
- package/dist/charts/react/Chart.d.cts +8 -1
- package/dist/charts/react/Chart.d.ts +8 -1
- package/dist/charts/react/Chart.js +66 -47
- package/dist/charts/react/Chart.js.map +1 -1
- package/dist/charts/react/charts.cjs +1 -1
- package/dist/charts/react/charts.cjs.map +1 -1
- package/dist/charts/react/charts.d.cts +10 -2
- package/dist/charts/react/charts.d.ts +10 -2
- package/dist/charts/react/charts.js +174 -51
- package/dist/charts/react/charts.js.map +1 -1
- package/dist/charts/react/shapes.cjs +2 -0
- package/dist/charts/react/shapes.cjs.map +1 -0
- package/dist/charts/react/shapes.d.cts +255 -0
- package/dist/charts/react/shapes.d.ts +255 -0
- package/dist/charts/react/shapes.js +242 -0
- package/dist/charts/react/shapes.js.map +1 -0
- package/dist/charts/react/types.d.cts +73 -4
- package/dist/charts/react/types.d.ts +73 -4
- package/dist/native/charts/src/engine/color.cjs +1 -1
- package/dist/native/charts/src/engine/color.cjs.map +1 -1
- package/dist/native/charts/src/engine/color.js +12 -3
- package/dist/native/charts/src/engine/color.js.map +1 -1
- package/dist/native/charts/src/engine/controller.cjs +2 -2
- package/dist/native/charts/src/engine/controller.cjs.map +1 -1
- package/dist/native/charts/src/engine/controller.js +334 -270
- package/dist/native/charts/src/engine/controller.js.map +1 -1
- package/dist/native/charts/src/engine/curve.cjs +2 -0
- package/dist/native/charts/src/engine/curve.cjs.map +1 -0
- package/dist/native/charts/src/engine/curve.js +56 -0
- package/dist/native/charts/src/engine/curve.js.map +1 -0
- package/dist/native/charts/src/engine/data.cjs +1 -1
- package/dist/native/charts/src/engine/data.cjs.map +1 -1
- package/dist/native/charts/src/engine/data.js +98 -38
- package/dist/native/charts/src/engine/data.js.map +1 -1
- package/dist/native/charts/src/engine/model.cjs +1 -1
- package/dist/native/charts/src/engine/model.cjs.map +1 -1
- package/dist/native/charts/src/engine/model.js +229 -112
- package/dist/native/charts/src/engine/model.js.map +1 -1
- package/dist/native/charts/src/engine/overlay.cjs +1 -1
- package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
- package/dist/native/charts/src/engine/overlay.js +16 -16
- package/dist/native/charts/src/engine/overlay.js.map +1 -1
- package/dist/native/charts/src/engine/presets.cjs +1 -1
- package/dist/native/charts/src/engine/presets.cjs.map +1 -1
- package/dist/native/charts/src/engine/presets.js +11 -4
- package/dist/native/charts/src/engine/presets.js.map +1 -1
- package/dist/native/charts/src/engine/scene.cjs +1 -1
- package/dist/native/charts/src/engine/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/scene.js +209 -97
- package/dist/native/charts/src/engine/scene.js.map +1 -1
- package/dist/native/charts/src/engine/theme.cjs.map +1 -1
- package/dist/native/charts/src/engine/theme.js.map +1 -1
- package/dist/native/components/Chart/scene.cjs +1 -1
- package/dist/native/components/Chart/scene.cjs.map +1 -1
- package/dist/native/components/Chart/scene.js +31 -19
- package/dist/native/components/Chart/scene.js.map +1 -1
- package/dist/native/source/components/Chart/scene.tsx +54 -20
- package/dist/taro/index.js +1059 -579
- package/dist/uni/charts-canvas.js +3 -1
- package/dist/weapp/controls.js +966 -225
- package/package.json +1 -1
|
@@ -10,6 +10,24 @@ var e = (e) => typeof e == "object" && !!e && !("length" in e) && "y" in e, t =
|
|
|
10
10
|
}
|
|
11
11
|
return r;
|
|
12
12
|
}, n = (e) => typeof e == "number" ? e : e == null ? NaN : Number(e), r = (t) => {
|
|
13
|
+
let n = /* @__PURE__ */ new Set();
|
|
14
|
+
for (let r of t) {
|
|
15
|
+
if (e(r)) {
|
|
16
|
+
let e = r.y;
|
|
17
|
+
if (!ArrayBuffer.isView(e)) for (let t = 0; t < e.length; t++) {
|
|
18
|
+
let r = e[t];
|
|
19
|
+
typeof r == "string" && n.add(r);
|
|
20
|
+
}
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
let t = r;
|
|
24
|
+
for (let e = 0; e < t.length; e++) {
|
|
25
|
+
let r = t[e], i = Array.isArray(r) ? r[1] : r && typeof r == "object" ? r.y : void 0;
|
|
26
|
+
typeof i == "string" && n.add(i);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return [...n];
|
|
30
|
+
}, i = (t) => {
|
|
13
31
|
let n = /* @__PURE__ */ new Set(), r = (e) => {
|
|
14
32
|
typeof e == "string" && n.add(e);
|
|
15
33
|
};
|
|
@@ -26,8 +44,8 @@ var e = (e) => typeof e == "object" && !!e && !("length" in e) && "y" in e, t =
|
|
|
26
44
|
}
|
|
27
45
|
}
|
|
28
46
|
return [...n];
|
|
29
|
-
},
|
|
30
|
-
let i = Infinity, a = -Infinity, o = Infinity, s = -Infinity, c = !0, l = -Infinity;
|
|
47
|
+
}, a = (e, t, n, r) => {
|
|
48
|
+
let i = Infinity, a = -Infinity, o = Infinity, s = -Infinity, c = !0, l = -Infinity, { high: u, low: d, value: f } = r;
|
|
31
49
|
for (let r = 0; r < n; r++) {
|
|
32
50
|
let n = e[r];
|
|
33
51
|
if (!Number.isFinite(n)) {
|
|
@@ -35,70 +53,112 @@ var e = (e) => typeof e == "object" && !!e && !("length" in e) && "y" in e, t =
|
|
|
35
53
|
continue;
|
|
36
54
|
}
|
|
37
55
|
n < l && (c = !1), l = n;
|
|
38
|
-
let
|
|
39
|
-
Number.isFinite(
|
|
56
|
+
let f = t[r];
|
|
57
|
+
if (Number.isFinite(f)) {
|
|
58
|
+
if (n < i && (i = n), n > a && (a = n), f < o && (o = f), f > s && (s = f), u) {
|
|
59
|
+
let e = u[r];
|
|
60
|
+
e > s && (s = e), e < o && (o = e);
|
|
61
|
+
}
|
|
62
|
+
if (d) {
|
|
63
|
+
let e = d[r];
|
|
64
|
+
e < o && (o = e), e > s && (s = e);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
let p = Infinity, m = -Infinity;
|
|
69
|
+
if (f) for (let e = 0; e < n; e++) {
|
|
70
|
+
let t = f[e];
|
|
71
|
+
Number.isFinite(t) && (t < p && (p = t), t > m && (m = t));
|
|
40
72
|
}
|
|
41
|
-
let
|
|
73
|
+
let h = i > a;
|
|
42
74
|
return {
|
|
43
75
|
x: e,
|
|
44
76
|
y: t,
|
|
45
77
|
count: n,
|
|
46
78
|
sorted: c,
|
|
47
|
-
xMin:
|
|
48
|
-
xMax:
|
|
49
|
-
yMin:
|
|
50
|
-
yMax:
|
|
79
|
+
xMin: h ? NaN : i,
|
|
80
|
+
xMax: h ? NaN : a,
|
|
81
|
+
yMin: h ? NaN : o,
|
|
82
|
+
yMax: h ? NaN : s,
|
|
83
|
+
valueMin: p > m ? NaN : p,
|
|
84
|
+
valueMax: p > m ? NaN : m,
|
|
51
85
|
...r
|
|
52
86
|
};
|
|
53
|
-
},
|
|
54
|
-
|
|
87
|
+
}, o = (e, t) => {
|
|
88
|
+
if (!e) return null;
|
|
89
|
+
if (e instanceof Float64Array && e.length >= t) return e.length === t ? e : e.subarray(0, t);
|
|
90
|
+
let r = new Float64Array(t);
|
|
91
|
+
for (let i = 0; i < t; i++) r[i] = n(e[i]);
|
|
92
|
+
return r;
|
|
93
|
+
}, s = (t, r, i = n) => {
|
|
94
|
+
let s = {
|
|
55
95
|
size: null,
|
|
56
96
|
colors: null,
|
|
57
|
-
labels: null
|
|
97
|
+
labels: null,
|
|
98
|
+
open: null,
|
|
99
|
+
high: null,
|
|
100
|
+
low: null,
|
|
101
|
+
value: null
|
|
58
102
|
};
|
|
59
103
|
if (e(t)) {
|
|
60
|
-
let e = t.y.length,
|
|
61
|
-
for (let
|
|
62
|
-
|
|
104
|
+
let e = t.y.length, c = new Float64Array(e), l = t.x;
|
|
105
|
+
if (!l) for (let t = 0; t < e; t++) c[t] = t;
|
|
106
|
+
else if (ArrayBuffer.isView(l) && l.length >= e) c.set(l.length === e ? l : l.subarray(0, e));
|
|
107
|
+
else for (let t = 0; t < e; t++) c[t] = r(l[t], t);
|
|
108
|
+
let u = t.y, d;
|
|
109
|
+
if (ArrayBuffer.isView(u)) d = new Float64Array(e), d.set(u);
|
|
110
|
+
else {
|
|
111
|
+
d = new Float64Array(e);
|
|
112
|
+
for (let t = 0; t < e; t++) d[t] = i(u[t]);
|
|
113
|
+
}
|
|
114
|
+
let f = null;
|
|
63
115
|
if (t.size) {
|
|
64
|
-
|
|
65
|
-
for (let r = 0; r < e; r++)
|
|
116
|
+
f = new Float32Array(e);
|
|
117
|
+
for (let r = 0; r < e; r++) f[r] = n(t.size[r]);
|
|
66
118
|
}
|
|
67
|
-
return
|
|
68
|
-
...
|
|
69
|
-
size:
|
|
119
|
+
return a(c, d, e, {
|
|
120
|
+
...s,
|
|
121
|
+
size: f,
|
|
122
|
+
open: o(t.open, e),
|
|
123
|
+
high: o(t.high, e),
|
|
124
|
+
low: o(t.low, e),
|
|
125
|
+
value: o(t.value, e)
|
|
70
126
|
});
|
|
71
127
|
}
|
|
72
|
-
let
|
|
73
|
-
for (let e = 0; e <
|
|
74
|
-
let t =
|
|
75
|
-
if (t == null || typeof t == "number")
|
|
76
|
-
else if (Array.isArray(t))
|
|
128
|
+
let c = t, l = c.length, u = new Float64Array(l), d = new Float64Array(l), f = null, p = null, m = null, h = null, g = null, _ = null, v = null, y = () => new Float64Array(l).fill(NaN);
|
|
129
|
+
for (let e = 0; e < l; e++) {
|
|
130
|
+
let t = c[e];
|
|
131
|
+
if (t == null || typeof t == "number") u[e] = e, d[e] = n(t);
|
|
132
|
+
else if (Array.isArray(t)) u[e] = r(t[0], e), d[e] = i(t[1]);
|
|
77
133
|
else if (typeof t == "object") {
|
|
78
|
-
let
|
|
79
|
-
|
|
80
|
-
} else
|
|
134
|
+
let a = t;
|
|
135
|
+
u[e] = a.x === void 0 ? e : r(a.x, e), d[e] = i(a.y), a.size !== void 0 && (f ?? (f = new Float32Array(l).fill(NaN)), f[e] = a.size), a.color !== void 0 && (p ?? (p = Array(l)), p[e] = a.color), a.label !== void 0 && (m ?? (m = Array(l)), m[e] = a.label), a.open !== void 0 && ((h ?? (h = y()))[e] = n(a.open)), a.high !== void 0 && ((g ?? (g = y()))[e] = n(a.high)), a.low !== void 0 && ((_ ?? (_ = y()))[e] = n(a.low)), a.value !== void 0 && ((v ?? (v = y()))[e] = n(a.value));
|
|
136
|
+
} else u[e] = e, d[e] = NaN;
|
|
81
137
|
}
|
|
82
|
-
return
|
|
83
|
-
size:
|
|
84
|
-
colors:
|
|
85
|
-
labels:
|
|
138
|
+
return a(u, d, l, {
|
|
139
|
+
size: f,
|
|
140
|
+
colors: p,
|
|
141
|
+
labels: m,
|
|
142
|
+
open: h,
|
|
143
|
+
high: g,
|
|
144
|
+
low: _,
|
|
145
|
+
value: v
|
|
86
146
|
});
|
|
87
|
-
},
|
|
147
|
+
}, c = (e, t, n) => {
|
|
88
148
|
let r = 0, i = t;
|
|
89
149
|
for (; r < i;) {
|
|
90
150
|
let t = r + i >>> 1;
|
|
91
151
|
e[t] < n ? r = t + 1 : i = t;
|
|
92
152
|
}
|
|
93
153
|
return r;
|
|
94
|
-
},
|
|
154
|
+
}, l = (e, t, n, r) => {
|
|
95
155
|
if (n === 0) return -1;
|
|
96
|
-
let i =
|
|
156
|
+
let i = c(e, n, r), a = i - 1, o = i;
|
|
97
157
|
for (; a >= 0 && !Number.isFinite(t[a]);) a--;
|
|
98
|
-
for (;
|
|
99
|
-
return a < 0 ?
|
|
158
|
+
for (; o < n && !Number.isFinite(t[o]);) o++;
|
|
159
|
+
return a < 0 ? o < n ? o : -1 : o >= n || r - e[a] <= e[o] - r ? a : o;
|
|
100
160
|
};
|
|
101
161
|
//#endregion
|
|
102
|
-
export {
|
|
162
|
+
export { i as collectCategories, r as collectYCategories, c as lowerBound, l as nearestIndex, s as normalizeData, t as xResolver };
|
|
103
163
|
|
|
104
164
|
//# sourceMappingURL=data.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","names":["isColumns","data","xResolver","value","type","categoryIndex","n","index","toNumber","v","collectCategories","seen","add","datas","xs","i","list","item","finalize","xMin","xMax","yMin","yMax","sorted","prev","count","xi","x","yi","y","empty","extra","normalizeData","none","resolveX","size","colors","labels","d","lowerBound","lo","hi","mid","nearestIndex","left","right"],"sources":["../../../../charts/src/engine/data.ts"],"sourcesContent":["// Normalization of series data into columns (Float64Array).\n\nimport type { ChartAxisType, ChartSeriesData, ChartXValue } from \"./types\";\n\nexport interface SeriesColumns {\n x: Float64Array;\n /** NaN where the value is missing */\n y: Float64Array;\n size: Float32Array | null;\n colors: (string | undefined)[] | null;\n labels: (string | undefined)[] | null;\n count: number;\n /** x is non-decreasing (binary search, decimation) */\n sorted: boolean;\n /** Extent of the finite points (NaN when there is none) */\n xMin: number;\n xMax: number;\n yMin: number;\n yMax: number;\n}\n\ntype XResolver = (value: ChartXValue, index: number) => number;\n\nconst isColumns = (\n data: ChartSeriesData,\n): data is {\n x?: ArrayLike<number> | readonly ChartXValue[];\n y: ArrayLike<number> | readonly (number | null)[];\n size?: ArrayLike<number>;\n} =>\n typeof data === \"object\" &&\n data !== null &&\n !(\"length\" in data) &&\n \"y\" in data;\n\n/** Converts an x value to a number for the axis type */\nexport const xResolver = (\n type: ChartAxisType,\n categoryIndex: (name: string) => number,\n): XResolver => {\n return (value, index) => {\n if (typeof value === \"number\") return value;\n if (value instanceof Date) return value.getTime();\n if (typeof value === \"string\") {\n if (type === \"category\") return categoryIndex(value);\n if (type === \"time\") return Date.parse(value);\n const n = Number(value);\n return Number.isNaN(n) ? index : n;\n }\n return index;\n };\n};\n\nconst toNumber = (v: unknown): number =>\n typeof v === \"number\" ? v : v === null || v === undefined ? NaN : Number(v);\n\n/** Category names used by string x values, in order of appearance */\nexport const collectCategories = (\n datas: readonly ChartSeriesData[],\n): string[] => {\n const seen = new Set<string>();\n const add = (v: unknown) => {\n if (typeof v === \"string\") seen.add(v);\n };\n for (const data of datas) {\n if (isColumns(data)) {\n const xs = data.x;\n if (xs && !ArrayBuffer.isView(xs)) {\n for (let i = 0; i < xs.length; i++) add(xs[i]);\n }\n continue;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (Array.isArray(item)) add(item[0]);\n else if (item && typeof item === \"object\")\n add((item as { x?: unknown }).x);\n }\n }\n return [...seen];\n};\n\nconst finalize = (\n x: Float64Array,\n y: Float64Array,\n count: number,\n extra: Pick<SeriesColumns, \"size\" | \"colors\" | \"labels\">,\n): SeriesColumns => {\n let xMin = Infinity;\n let xMax = -Infinity;\n let yMin = Infinity;\n let yMax = -Infinity;\n let sorted = true;\n let prev = -Infinity;\n for (let i = 0; i < count; i++) {\n const xi = x[i];\n if (!Number.isFinite(xi)) {\n y[i] = NaN;\n continue;\n }\n if (xi < prev) sorted = false;\n prev = xi;\n const yi = y[i];\n if (!Number.isFinite(yi)) continue;\n if (xi < xMin) xMin = xi;\n if (xi > xMax) xMax = xi;\n if (yi < yMin) yMin = yi;\n if (yi > yMax) yMax = yi;\n }\n const empty = xMin > xMax;\n return {\n x,\n y,\n count,\n sorted,\n xMin: empty ? NaN : xMin,\n xMax: empty ? NaN : xMax,\n yMin: empty ? NaN : yMin,\n yMax: empty ? NaN : yMax,\n ...extra,\n };\n};\n\n/** Turns any supported data form into columns */\nexport const normalizeData = (\n data: ChartSeriesData,\n resolveX: XResolver,\n): SeriesColumns => {\n const none = { size: null, colors: null, labels: null };\n if (isColumns(data)) {\n const count = data.y.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n const xs = data.x;\n for (let i = 0; i < count; i++) {\n y[i] = toNumber(data.y[i]);\n x[i] = xs ? resolveX(xs[i] as ChartXValue, i) : i;\n }\n let size: Float32Array | null = null;\n if (data.size) {\n size = new Float32Array(count);\n for (let i = 0; i < count; i++) size[i] = toNumber(data.size[i]);\n }\n return finalize(x, y, count, { ...none, size });\n }\n\n const list = data as ArrayLike<unknown>;\n const count = list.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n let size: Float32Array | null = null;\n let colors: (string | undefined)[] | null = null;\n let labels: (string | undefined)[] | null = null;\n\n for (let i = 0; i < count; i++) {\n const item = list[i];\n if (item === null || item === undefined || typeof item === \"number\") {\n x[i] = i;\n y[i] = toNumber(item);\n } else if (Array.isArray(item)) {\n x[i] = resolveX(item[0] as ChartXValue, i);\n y[i] = toNumber(item[1]);\n } else if (typeof item === \"object\") {\n const d = item as {\n x?: ChartXValue;\n y?: number | null;\n size?: number;\n color?: string;\n label?: string;\n };\n x[i] = d.x === undefined ? i : resolveX(d.x, i);\n y[i] = toNumber(d.y);\n if (d.size !== undefined) {\n size ??= new Float32Array(count).fill(NaN);\n size[i] = d.size;\n }\n if (d.color !== undefined) {\n colors ??= new Array<string | undefined>(count);\n colors[i] = d.color;\n }\n if (d.label !== undefined) {\n labels ??= new Array<string | undefined>(count);\n labels[i] = d.label;\n }\n } else {\n x[i] = i;\n y[i] = NaN;\n }\n }\n return finalize(x, y, count, { size, colors, labels });\n};\n\n/** First index whose x is >= value (sorted x) */\nexport const lowerBound = (\n x: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n let lo = 0;\n let hi = count;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (x[mid] < value) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n};\n\n/** Index of the point with the closest x and a finite y (sorted x), -1 if none */\nexport const nearestIndex = (\n x: ArrayLike<number>,\n y: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n if (count === 0) return -1;\n const i = lowerBound(x, count, value);\n let left = i - 1;\n let right = i;\n while (left >= 0 && !Number.isFinite(y[left])) left--;\n while (right < count && !Number.isFinite(y[right])) right++;\n if (left < 0) return right < count ? right : -1;\n if (right >= count) return left;\n return value - x[left] <= x[right] - value ? left : right;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data.js","names":["isColumns","data","xResolver","value","type","categoryIndex","n","index","toNumber","v","collectYCategories","seen","datas","ys","i","list","item","collectCategories","add","xs","finalize","xMin","xMax","yMin","yMax","sorted","prev","extra","count","xi","x","yi","y","high","h","low","l","valueMin","valueMax","empty","column","values","out","normalizeData","none","resolveX","resolveY","size","colors","labels","open","nanColumn","d","lowerBound","lo","hi","mid","nearestIndex","left","right"],"sources":["../../../../charts/src/engine/data.ts"],"sourcesContent":["// Normalization of series data into columns (Float64Array).\n\nimport type { ChartAxisType, ChartSeriesData, ChartXValue } from \"./types\";\n\nexport interface SeriesColumns {\n x: Float64Array;\n /** NaN where the value is missing */\n y: Float64Array;\n size: Float32Array | null;\n colors: (string | undefined)[] | null;\n labels: (string | undefined)[] | null;\n /** Candlesticks: open / high / low (y is the close) */\n open: Float64Array | null;\n high: Float64Array | null;\n low: Float64Array | null;\n /** Heatmaps: values of the cells */\n value: Float64Array | null;\n count: number;\n /** x is non-decreasing (binary search, decimation) */\n sorted: boolean;\n /** Extent of the finite points (NaN when there is none); high / low included */\n xMin: number;\n xMax: number;\n yMin: number;\n yMax: number;\n /** Extent of the finite `value`s (NaN when there is none) */\n valueMin: number;\n valueMax: number;\n}\n\ntype XResolver = (value: ChartXValue, index: number) => number;\n/** Converts a y value (a category name on category y axes) to a number */\nexport type YResolver = (value: unknown) => number;\n\ntype Extra = Pick<\n SeriesColumns,\n \"size\" | \"colors\" | \"labels\" | \"open\" | \"high\" | \"low\" | \"value\"\n>;\n\nconst isColumns = (\n data: ChartSeriesData,\n): data is {\n x?: ArrayLike<number> | readonly ChartXValue[];\n y: ArrayLike<number> | readonly (number | string | null)[];\n size?: ArrayLike<number>;\n open?: ArrayLike<number>;\n high?: ArrayLike<number>;\n low?: ArrayLike<number>;\n value?: ArrayLike<number> | readonly (number | null)[];\n} =>\n typeof data === \"object\" &&\n data !== null &&\n !(\"length\" in data) &&\n \"y\" in data;\n\n/** Converts an x value to a number for the axis type */\nexport const xResolver = (\n type: ChartAxisType,\n categoryIndex: (name: string) => number,\n): XResolver => {\n return (value, index) => {\n if (typeof value === \"number\") return value;\n if (value instanceof Date) return value.getTime();\n if (typeof value === \"string\") {\n if (type === \"category\") return categoryIndex(value);\n if (type === \"time\") return Date.parse(value);\n const n = Number(value);\n return Number.isNaN(n) ? index : n;\n }\n return index;\n };\n};\n\nconst toNumber = (v: unknown): number =>\n typeof v === \"number\" ? v : v === null || v === undefined ? NaN : Number(v);\n\n/** Category names used by string y values (heatmap rows), in order of appearance */\nexport const collectYCategories = (\n datas: readonly ChartSeriesData[],\n): string[] => {\n const seen = new Set<string>();\n for (const data of datas) {\n if (isColumns(data)) {\n const ys = data.y;\n if (!ArrayBuffer.isView(ys)) {\n for (let i = 0; i < ys.length; i++) {\n const v = ys[i];\n if (typeof v === \"string\") seen.add(v);\n }\n }\n continue;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n const v = Array.isArray(item)\n ? item[1]\n : item && typeof item === \"object\"\n ? (item as { y?: unknown }).y\n : undefined;\n if (typeof v === \"string\") seen.add(v);\n }\n }\n return [...seen];\n};\n\n/** Category names used by string x values, in order of appearance */\nexport const collectCategories = (\n datas: readonly ChartSeriesData[],\n): string[] => {\n const seen = new Set<string>();\n const add = (v: unknown) => {\n if (typeof v === \"string\") seen.add(v);\n };\n for (const data of datas) {\n if (isColumns(data)) {\n const xs = data.x;\n if (xs && !ArrayBuffer.isView(xs)) {\n for (let i = 0; i < xs.length; i++) add(xs[i]);\n }\n continue;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (Array.isArray(item)) add(item[0]);\n else if (item && typeof item === \"object\")\n add((item as { x?: unknown }).x);\n }\n }\n return [...seen];\n};\n\nconst finalize = (\n x: Float64Array,\n y: Float64Array,\n count: number,\n extra: Extra,\n): SeriesColumns => {\n let xMin = Infinity;\n let xMax = -Infinity;\n let yMin = Infinity;\n let yMax = -Infinity;\n let sorted = true;\n let prev = -Infinity;\n const { high, low, value } = extra;\n for (let i = 0; i < count; i++) {\n const xi = x[i];\n if (!Number.isFinite(xi)) {\n y[i] = NaN;\n continue;\n }\n if (xi < prev) sorted = false;\n prev = xi;\n const yi = y[i];\n if (!Number.isFinite(yi)) continue;\n if (xi < xMin) xMin = xi;\n if (xi > xMax) xMax = xi;\n if (yi < yMin) yMin = yi;\n if (yi > yMax) yMax = yi;\n if (high) {\n const h = high[i];\n if (h > yMax) yMax = h;\n if (h < yMin) yMin = h;\n }\n if (low) {\n const l = low[i];\n if (l < yMin) yMin = l;\n if (l > yMax) yMax = l;\n }\n }\n let valueMin = Infinity;\n let valueMax = -Infinity;\n if (value) {\n for (let i = 0; i < count; i++) {\n const v = value[i];\n if (!Number.isFinite(v)) continue;\n if (v < valueMin) valueMin = v;\n if (v > valueMax) valueMax = v;\n }\n }\n const empty = xMin > xMax;\n return {\n x,\n y,\n count,\n sorted,\n xMin: empty ? NaN : xMin,\n xMax: empty ? NaN : xMax,\n yMin: empty ? NaN : yMin,\n yMax: empty ? NaN : yMax,\n valueMin: valueMin > valueMax ? NaN : valueMin,\n valueMax: valueMin > valueMax ? NaN : valueMax,\n ...extra,\n };\n};\n\nconst column = (\n values: ArrayLike<unknown> | undefined,\n count: number,\n): Float64Array | null => {\n if (!values) return null;\n if (values instanceof Float64Array && values.length >= count) {\n return values.length === count ? values : values.subarray(0, count);\n }\n const out = new Float64Array(count);\n for (let i = 0; i < count; i++) out[i] = toNumber(values[i]);\n return out;\n};\n\n/** Turns any supported data form into columns */\nexport const normalizeData = (\n data: ChartSeriesData,\n resolveX: XResolver,\n resolveY: YResolver = toNumber,\n): SeriesColumns => {\n const none: Extra = {\n size: null,\n colors: null,\n labels: null,\n open: null,\n high: null,\n low: null,\n value: null,\n };\n if (isColumns(data)) {\n const count = data.y.length;\n const x = new Float64Array(count);\n const xs = data.x;\n if (!xs) {\n for (let i = 0; i < count; i++) x[i] = i;\n } else if (ArrayBuffer.isView(xs) && xs.length >= count) {\n // typed arrays: a plain copy (the hot path of large data sets)\n x.set(\n (xs.length === count\n ? xs\n : (xs as unknown as Float64Array).subarray(\n 0,\n count,\n )) as ArrayLike<number>,\n );\n } else {\n for (let i = 0; i < count; i++) x[i] = resolveX(xs[i] as ChartXValue, i);\n }\n const ys = data.y;\n let y: Float64Array;\n if (ArrayBuffer.isView(ys)) {\n // finalize writes NaN at invalid x: copy so the input is never changed\n y = new Float64Array(count);\n y.set(ys as ArrayLike<number>);\n } else {\n y = new Float64Array(count);\n for (let i = 0; i < count; i++) y[i] = resolveY(ys[i]);\n }\n let size: Float32Array | null = null;\n if (data.size) {\n size = new Float32Array(count);\n for (let i = 0; i < count; i++) size[i] = toNumber(data.size[i]);\n }\n return finalize(x, y, count, {\n ...none,\n size,\n open: column(data.open, count),\n high: column(data.high, count),\n low: column(data.low, count),\n value: column(data.value, count),\n });\n }\n\n const list = data as ArrayLike<unknown>;\n const count = list.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n let size: Float32Array | null = null;\n let colors: (string | undefined)[] | null = null;\n let labels: (string | undefined)[] | null = null;\n let open: Float64Array | null = null;\n let high: Float64Array | null = null;\n let low: Float64Array | null = null;\n let value: Float64Array | null = null;\n const nanColumn = () => new Float64Array(count).fill(NaN);\n\n for (let i = 0; i < count; i++) {\n const item = list[i];\n if (item === null || item === undefined || typeof item === \"number\") {\n x[i] = i;\n y[i] = toNumber(item);\n } else if (Array.isArray(item)) {\n x[i] = resolveX(item[0] as ChartXValue, i);\n y[i] = resolveY(item[1]);\n } else if (typeof item === \"object\") {\n const d = item as {\n x?: ChartXValue;\n y?: number | string | null;\n size?: number;\n color?: string;\n label?: string;\n open?: number;\n high?: number;\n low?: number;\n value?: number | null;\n };\n x[i] = d.x === undefined ? i : resolveX(d.x, i);\n y[i] = resolveY(d.y);\n if (d.size !== undefined) {\n size ??= new Float32Array(count).fill(NaN);\n size[i] = d.size;\n }\n if (d.color !== undefined) {\n colors ??= new Array<string | undefined>(count);\n colors[i] = d.color;\n }\n if (d.label !== undefined) {\n labels ??= new Array<string | undefined>(count);\n labels[i] = d.label;\n }\n if (d.open !== undefined) (open ??= nanColumn())[i] = toNumber(d.open);\n if (d.high !== undefined) (high ??= nanColumn())[i] = toNumber(d.high);\n if (d.low !== undefined) (low ??= nanColumn())[i] = toNumber(d.low);\n if (d.value !== undefined) (value ??= nanColumn())[i] = toNumber(d.value);\n } else {\n x[i] = i;\n y[i] = NaN;\n }\n }\n return finalize(x, y, count, {\n size,\n colors,\n labels,\n open,\n high,\n low,\n value,\n });\n};\n\n/** First index whose x is >= value (sorted x) */\nexport const lowerBound = (\n x: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n let lo = 0;\n let hi = count;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (x[mid] < value) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n};\n\n/** Index of the point with the closest x and a finite y (sorted x), -1 if none */\nexport const nearestIndex = (\n x: ArrayLike<number>,\n y: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n if (count === 0) return -1;\n const i = lowerBound(x, count, value);\n let left = i - 1;\n let right = i;\n while (left >= 0 && !Number.isFinite(y[left])) left--;\n while (right < count && !Number.isFinite(y[right])) right++;\n if (left < 0) return right < count ? right : -1;\n if (right >= count) return left;\n return value - x[left] <= x[right] - value ? left : right;\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=(e,t)=>(Object.assign(e.style,t),e),t=(t,n)=>e(t.createElement(n),{position:`absolute`,left:`0`,top:`0`,pointerEvents:`none`}),n=n=>{let r=n.ownerDocument,i=e(r.createElement(`div`),{position:`relative`,display:`flex`,flexDirection:`column`,width:`100%`,height:`100%`,minHeight:`0`,fontFamily:`var(--font-family-sans, system-ui, sans-serif)`,color:`var(--text-color, #1f2937)`});i.className=`minerva-chart`;let a=e(r.createElement(`div`),{display:`none`,flexWrap:`wrap`,alignItems:`center`,gap:`4px 14px`,padding:`0 4px 8px`,fontSize:`12px`,lineHeight:`18px`});a.className=`minerva-chart-legend`;let o=e(r.createElement(`div`),{position:`relative`,flex:`1 1 auto`,minHeight:`0`,outline:`none`,touchAction:`pan-y`,userSelect:`none`,borderRadius:`6px`});o.className=`minerva-chart-stage`,o.setAttribute(`role`,`figure`),o.setAttribute(`aria-roledescription`,`chart`);let s=t(r,`canvas`),c=t(r,`canvas`);s.setAttribute(`aria-hidden`,`true`),c.setAttribute(`aria-hidden`,`true`);let l=e(t(r,`div`),{right:`0`,bottom:`0`,overflow:`hidden`});l.setAttribute(`aria-hidden`,`true`);let u=e(r.createElement(`div`),{position:`absolute`,width:`0`,borderLeft:`1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280)
|
|
1
|
+
var e=(e,t)=>(Object.assign(e.style,t),e),t=(t,n)=>e(t.createElement(n),{position:`absolute`,left:`0`,top:`0`,pointerEvents:`none`}),n=n=>{let r=n.ownerDocument,i=e(r.createElement(`div`),{position:`relative`,display:`flex`,flexDirection:`column`,width:`100%`,height:`100%`,minHeight:`0`,fontFamily:`var(--font-family-sans, system-ui, sans-serif)`,color:`var(--text-color, #1f2937)`});i.className=`minerva-chart`;let a=e(r.createElement(`div`),{display:`none`,flexWrap:`wrap`,alignItems:`center`,gap:`4px 14px`,padding:`0 4px 8px`,fontSize:`12px`,lineHeight:`18px`});a.className=`minerva-chart-legend`;let o=e(r.createElement(`div`),{position:`relative`,flex:`1 1 auto`,minHeight:`0`,outline:`none`,touchAction:`pan-y`,userSelect:`none`,borderRadius:`6px`});o.className=`minerva-chart-stage`,o.setAttribute(`role`,`figure`),o.setAttribute(`aria-roledescription`,`chart`);let s=t(r,`canvas`),c=t(r,`canvas`);s.setAttribute(`aria-hidden`,`true`),c.setAttribute(`aria-hidden`,`true`);let l=e(t(r,`div`),{right:`0`,bottom:`0`,overflow:`hidden`});l.setAttribute(`aria-hidden`,`true`);let u=e(t(r,`div`),{right:`0`,bottom:`0`});u.setAttribute(`aria-hidden`,`true`);let d=e(r.createElement(`div`),{position:`absolute`,width:`0`,borderLeft:`1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 45%, transparent)`,display:`none`});l.appendChild(d);let f=e(r.createElement(`div`),{position:`absolute`,left:`0`,top:`0`,zIndex:`2`,display:`none`,pointerEvents:`none`,minWidth:`128px`,maxWidth:`320px`,padding:`8px 12px`,borderRadius:`10px`,border:`1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)`,background:`var(--surface-elevated-color, var(--background-color, #fff))`,color:`var(--text-color, #1f2937)`,boxShadow:`0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)`,fontSize:`12px`,lineHeight:`20px`,whiteSpace:`nowrap`,transition:`transform 80ms ease-out`});f.className=`minerva-chart-tooltip`,f.setAttribute(`role`,`tooltip`);let p=e(r.createElement(`div`),{position:`absolute`,width:`1px`,height:`1px`,overflow:`hidden`,clip:`rect(0 0 0 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`});return p.setAttribute(`aria-live`,`polite`),o.append(s,u,c,l,f,p),i.append(a,o),n.appendChild(i),{root:i,legend:a,stage:o,background:s,underlay:u,foreground:c,hover:l,crosshair:d,tooltip:f,live:p}},r=e=>{let n=t(e,`canvas`);return n.setAttribute(`aria-hidden`,`true`),n.className=`minerva-chart-data`,n},i=(t,n,r)=>{let i=t.createElement(`span`);return e(i,{display:`inline-block`,flex:`none`,width:r===`line`?`14px`:`9px`,height:r===`line`?`3px`:`9px`,borderRadius:r===`dot`?`50%`:`2px`,background:n}),i},a=t=>e(t.createElement(`div`),{position:`absolute`,boxSizing:`border-box`,borderRadius:`50%`,border:`2px solid var(--surface-color, var(--background-color, #fff))`,transform:`translate(-50%, -50%)`,transition:`box-shadow 120ms ease-out`}),o=t=>e(t.createElement(`div`),{position:`absolute`,boxSizing:`border-box`,borderRadius:`6px`,background:`color-mix(in srgb, var(--text-color, #1f2937) 6%, transparent)`});exports.createBand=o,exports.createChartDom=n,exports.createDataCanvas=r,exports.createMarker=a,exports.styleElement=e,exports.swatch=i;
|
|
2
2
|
//# sourceMappingURL=dom.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.cjs","names":["assign","el","style","layer","doc","tag","createChartDom","container","root","legend","stage","background","foreground","hover","crosshair","tooltip","live","createDataCanvas","canvas","swatch","shape","color","createMarker","
|
|
1
|
+
{"version":3,"file":"dom.cjs","names":["assign","el","style","layer","doc","tag","createChartDom","container","root","legend","stage","background","foreground","hover","underlay","crosshair","tooltip","live","createDataCanvas","canvas","swatch","shape","color","createMarker","createBand"],"sources":["../../../../charts/src/engine/dom.ts"],"sourcesContent":["// DOM of a chart: legend, stage with the canvas layers, hover markers,\n// tooltip and a live region. Styled inline with the Minerva CSS variables\n// (and fallbacks), so the engine needs no stylesheet.\n\nexport interface ChartDom {\n root: HTMLDivElement;\n legend: HTMLDivElement;\n stage: HTMLDivElement;\n background: HTMLCanvasElement;\n /** Hover band of bars, drawn below the data */\n underlay: HTMLDivElement;\n foreground: HTMLCanvasElement;\n hover: HTMLDivElement;\n crosshair: HTMLDivElement;\n tooltip: HTMLDivElement;\n live: HTMLDivElement;\n}\n\nconst assign = (el: HTMLElement, style: Partial<CSSStyleDeclaration>) => {\n Object.assign(el.style, style);\n return el;\n};\n\nconst layer = (doc: Document, tag: \"canvas\" | \"div\") =>\n assign(doc.createElement(tag), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n\nexport const createChartDom = (container: HTMLElement): ChartDom => {\n const doc = container.ownerDocument;\n const root = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n }) as HTMLDivElement;\n root.className = \"minerva-chart\";\n\n const legend = assign(doc.createElement(\"div\"), {\n display: \"none\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: \"4px 14px\",\n padding: \"0 4px 8px\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n }) as HTMLDivElement;\n legend.className = \"minerva-chart-legend\";\n\n const stage = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n flex: \"1 1 auto\",\n minHeight: \"0\",\n outline: \"none\",\n touchAction: \"pan-y\",\n userSelect: \"none\",\n borderRadius: \"6px\",\n }) as HTMLDivElement;\n stage.className = \"minerva-chart-stage\";\n stage.setAttribute(\"role\", \"figure\");\n stage.setAttribute(\"aria-roledescription\", \"chart\");\n\n const background = layer(doc, \"canvas\") as HTMLCanvasElement;\n const foreground = layer(doc, \"canvas\") as HTMLCanvasElement;\n background.setAttribute(\"aria-hidden\", \"true\");\n foreground.setAttribute(\"aria-hidden\", \"true\");\n\n const hover = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n overflow: \"hidden\",\n }) as HTMLDivElement;\n hover.setAttribute(\"aria-hidden\", \"true\");\n\n const underlay = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n }) as HTMLDivElement;\n underlay.setAttribute(\"aria-hidden\", \"true\");\n\n const crosshair = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"0\",\n borderLeft:\n \"1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 45%, transparent)\",\n display: \"none\",\n }) as HTMLDivElement;\n hover.appendChild(crosshair);\n\n const tooltip = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"2\",\n display: \"none\",\n pointerEvents: \"none\",\n minWidth: \"128px\",\n maxWidth: \"320px\",\n padding: \"8px 12px\",\n borderRadius: \"10px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)\",\n fontSize: \"12px\",\n lineHeight: \"20px\",\n whiteSpace: \"nowrap\",\n transition: \"transform 80ms ease-out\",\n }) as HTMLDivElement;\n tooltip.className = \"minerva-chart-tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n\n const live = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n }) as HTMLDivElement;\n live.setAttribute(\"aria-live\", \"polite\");\n\n stage.append(background, underlay, foreground, hover, tooltip, live);\n root.append(legend, stage);\n container.appendChild(root);\n return {\n root,\n legend,\n stage,\n background,\n underlay,\n foreground,\n hover,\n crosshair,\n tooltip,\n live,\n };\n};\n\n/** Canvas of the data layer, placed over the plot area */\nexport const createDataCanvas = (doc: Document): HTMLCanvasElement => {\n const canvas = layer(doc, \"canvas\") as HTMLCanvasElement;\n canvas.setAttribute(\"aria-hidden\", \"true\");\n canvas.className = \"minerva-chart-data\";\n return canvas;\n};\n\nexport const swatch = (\n doc: Document,\n color: string,\n shape: \"dot\" | \"square\" | \"line\",\n) => {\n const el = doc.createElement(\"span\");\n assign(el, {\n display: \"inline-block\",\n flex: \"none\",\n width: shape === \"line\" ? \"14px\" : \"9px\",\n height: shape === \"line\" ? \"3px\" : \"9px\",\n borderRadius: shape === \"dot\" ? \"50%\" : shape === \"line\" ? \"2px\" : \"2px\",\n background: color,\n });\n return el;\n};\n\n/** Marker of a hovered point: a dot with a thin ring in the background color and a soft halo */\nexport const createMarker = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"50%\",\n border: \"2px solid var(--surface-color, var(--background-color, #fff))\",\n transform: \"translate(-50%, -50%)\",\n transition: \"box-shadow 120ms ease-out\",\n }) as HTMLDivElement;\n\n/** Band behind the hovered bars (or outline of a heatmap cell) */\nexport const createBand = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"6px\",\n background:\n \"color-mix(in srgb, var(--text-color, #1f2937) 6%, transparent)\",\n }) as HTMLDivElement;\n\nexport { assign as styleElement };\n"],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ export interface ChartDom {
|
|
|
3
3
|
legend: HTMLDivElement;
|
|
4
4
|
stage: HTMLDivElement;
|
|
5
5
|
background: HTMLCanvasElement;
|
|
6
|
+
/** Hover band of bars, drawn below the data */
|
|
7
|
+
underlay: HTMLDivElement;
|
|
6
8
|
foreground: HTMLCanvasElement;
|
|
7
9
|
hover: HTMLDivElement;
|
|
8
10
|
crosshair: HTMLDivElement;
|
|
@@ -14,8 +16,8 @@ export declare const createChartDom: (container: HTMLElement) => ChartDom;
|
|
|
14
16
|
/** Canvas of the data layer, placed over the plot area */
|
|
15
17
|
export declare const createDataCanvas: (doc: Document) => HTMLCanvasElement;
|
|
16
18
|
export declare const swatch: (doc: Document, color: string, shape: "dot" | "square" | "line") => HTMLSpanElement;
|
|
17
|
-
/** Marker of a hovered point
|
|
19
|
+
/** Marker of a hovered point: a dot with a thin ring in the background color and a soft halo */
|
|
18
20
|
export declare const createMarker: (doc: Document) => HTMLDivElement;
|
|
19
|
-
/**
|
|
20
|
-
export declare const
|
|
21
|
+
/** Band behind the hovered bars (or outline of a heatmap cell) */
|
|
22
|
+
export declare const createBand: (doc: Document) => HTMLDivElement;
|
|
21
23
|
export { assign as styleElement };
|
|
@@ -3,6 +3,8 @@ export interface ChartDom {
|
|
|
3
3
|
legend: HTMLDivElement;
|
|
4
4
|
stage: HTMLDivElement;
|
|
5
5
|
background: HTMLCanvasElement;
|
|
6
|
+
/** Hover band of bars, drawn below the data */
|
|
7
|
+
underlay: HTMLDivElement;
|
|
6
8
|
foreground: HTMLCanvasElement;
|
|
7
9
|
hover: HTMLDivElement;
|
|
8
10
|
crosshair: HTMLDivElement;
|
|
@@ -14,8 +16,8 @@ export declare const createChartDom: (container: HTMLElement) => ChartDom;
|
|
|
14
16
|
/** Canvas of the data layer, placed over the plot area */
|
|
15
17
|
export declare const createDataCanvas: (doc: Document) => HTMLCanvasElement;
|
|
16
18
|
export declare const swatch: (doc: Document, color: string, shape: "dot" | "square" | "line") => HTMLSpanElement;
|
|
17
|
-
/** Marker of a hovered point
|
|
19
|
+
/** Marker of a hovered point: a dot with a thin ring in the background color and a soft halo */
|
|
18
20
|
export declare const createMarker: (doc: Document) => HTMLDivElement;
|
|
19
|
-
/**
|
|
20
|
-
export declare const
|
|
21
|
+
/** Band behind the hovered bars (or outline of a heatmap cell) */
|
|
22
|
+
export declare const createBand: (doc: Document) => HTMLDivElement;
|
|
21
23
|
export { assign as styleElement };
|
|
@@ -44,14 +44,19 @@ var e = (e, t) => (Object.assign(e.style, t), e), t = (t, n) => e(t.createElemen
|
|
|
44
44
|
overflow: "hidden"
|
|
45
45
|
});
|
|
46
46
|
l.setAttribute("aria-hidden", "true");
|
|
47
|
-
let u = e(r
|
|
47
|
+
let u = e(t(r, "div"), {
|
|
48
|
+
right: "0",
|
|
49
|
+
bottom: "0"
|
|
50
|
+
});
|
|
51
|
+
u.setAttribute("aria-hidden", "true");
|
|
52
|
+
let d = e(r.createElement("div"), {
|
|
48
53
|
position: "absolute",
|
|
49
54
|
width: "0",
|
|
50
|
-
borderLeft: "1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280)
|
|
55
|
+
borderLeft: "1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 45%, transparent)",
|
|
51
56
|
display: "none"
|
|
52
57
|
});
|
|
53
|
-
l.appendChild(
|
|
54
|
-
let
|
|
58
|
+
l.appendChild(d);
|
|
59
|
+
let f = e(r.createElement("div"), {
|
|
55
60
|
position: "absolute",
|
|
56
61
|
left: "0",
|
|
57
62
|
top: "0",
|
|
@@ -60,19 +65,19 @@ var e = (e, t) => (Object.assign(e.style, t), e), t = (t, n) => e(t.createElemen
|
|
|
60
65
|
pointerEvents: "none",
|
|
61
66
|
minWidth: "128px",
|
|
62
67
|
maxWidth: "320px",
|
|
63
|
-
padding: "8px
|
|
64
|
-
borderRadius: "
|
|
65
|
-
border: "1px solid var(--border-color, #e5e7eb)",
|
|
68
|
+
padding: "8px 12px",
|
|
69
|
+
borderRadius: "10px",
|
|
70
|
+
border: "1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)",
|
|
66
71
|
background: "var(--surface-elevated-color, var(--background-color, #fff))",
|
|
67
72
|
color: "var(--text-color, #1f2937)",
|
|
68
|
-
boxShadow: "0
|
|
73
|
+
boxShadow: "0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)",
|
|
69
74
|
fontSize: "12px",
|
|
70
|
-
lineHeight: "
|
|
75
|
+
lineHeight: "20px",
|
|
71
76
|
whiteSpace: "nowrap",
|
|
72
|
-
transition: "transform
|
|
77
|
+
transition: "transform 80ms ease-out"
|
|
73
78
|
});
|
|
74
|
-
|
|
75
|
-
let
|
|
79
|
+
f.className = "minerva-chart-tooltip", f.setAttribute("role", "tooltip");
|
|
80
|
+
let p = e(r.createElement("div"), {
|
|
76
81
|
position: "absolute",
|
|
77
82
|
width: "1px",
|
|
78
83
|
height: "1px",
|
|
@@ -81,16 +86,17 @@ var e = (e, t) => (Object.assign(e.style, t), e), t = (t, n) => e(t.createElemen
|
|
|
81
86
|
clipPath: "inset(50%)",
|
|
82
87
|
whiteSpace: "nowrap"
|
|
83
88
|
});
|
|
84
|
-
return
|
|
89
|
+
return p.setAttribute("aria-live", "polite"), o.append(s, u, c, l, f, p), i.append(a, o), n.appendChild(i), {
|
|
85
90
|
root: i,
|
|
86
91
|
legend: a,
|
|
87
92
|
stage: o,
|
|
88
93
|
background: s,
|
|
94
|
+
underlay: u,
|
|
89
95
|
foreground: c,
|
|
90
96
|
hover: l,
|
|
91
|
-
crosshair:
|
|
92
|
-
tooltip:
|
|
93
|
-
live:
|
|
97
|
+
crosshair: d,
|
|
98
|
+
tooltip: f,
|
|
99
|
+
live: p
|
|
94
100
|
};
|
|
95
101
|
}, r = (e) => {
|
|
96
102
|
let n = t(e, "canvas");
|
|
@@ -110,16 +116,15 @@ var e = (e, t) => (Object.assign(e.style, t), e), t = (t, n) => e(t.createElemen
|
|
|
110
116
|
boxSizing: "border-box",
|
|
111
117
|
borderRadius: "50%",
|
|
112
118
|
border: "2px solid var(--surface-color, var(--background-color, #fff))",
|
|
113
|
-
|
|
114
|
-
|
|
119
|
+
transform: "translate(-50%, -50%)",
|
|
120
|
+
transition: "box-shadow 120ms ease-out"
|
|
115
121
|
}), o = (t) => e(t.createElement("div"), {
|
|
116
122
|
position: "absolute",
|
|
117
123
|
boxSizing: "border-box",
|
|
118
|
-
borderRadius: "
|
|
119
|
-
background: "
|
|
120
|
-
boxShadow: "0 0 0 2px var(--surface-color, var(--background-color, #fff)) inset"
|
|
124
|
+
borderRadius: "6px",
|
|
125
|
+
background: "color-mix(in srgb, var(--text-color, #1f2937) 6%, transparent)"
|
|
121
126
|
});
|
|
122
127
|
//#endregion
|
|
123
|
-
export { o as
|
|
128
|
+
export { o as createBand, n as createChartDom, r as createDataCanvas, a as createMarker, e as styleElement, i as swatch };
|
|
124
129
|
|
|
125
130
|
//# sourceMappingURL=dom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","names":["assign","el","style","layer","doc","tag","createChartDom","container","root","legend","stage","background","foreground","hover","crosshair","tooltip","live","createDataCanvas","canvas","swatch","shape","color","createMarker","
|
|
1
|
+
{"version":3,"file":"dom.js","names":["assign","el","style","layer","doc","tag","createChartDom","container","root","legend","stage","background","foreground","hover","underlay","crosshair","tooltip","live","createDataCanvas","canvas","swatch","shape","color","createMarker","createBand"],"sources":["../../../../charts/src/engine/dom.ts"],"sourcesContent":["// DOM of a chart: legend, stage with the canvas layers, hover markers,\n// tooltip and a live region. Styled inline with the Minerva CSS variables\n// (and fallbacks), so the engine needs no stylesheet.\n\nexport interface ChartDom {\n root: HTMLDivElement;\n legend: HTMLDivElement;\n stage: HTMLDivElement;\n background: HTMLCanvasElement;\n /** Hover band of bars, drawn below the data */\n underlay: HTMLDivElement;\n foreground: HTMLCanvasElement;\n hover: HTMLDivElement;\n crosshair: HTMLDivElement;\n tooltip: HTMLDivElement;\n live: HTMLDivElement;\n}\n\nconst assign = (el: HTMLElement, style: Partial<CSSStyleDeclaration>) => {\n Object.assign(el.style, style);\n return el;\n};\n\nconst layer = (doc: Document, tag: \"canvas\" | \"div\") =>\n assign(doc.createElement(tag), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n\nexport const createChartDom = (container: HTMLElement): ChartDom => {\n const doc = container.ownerDocument;\n const root = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n }) as HTMLDivElement;\n root.className = \"minerva-chart\";\n\n const legend = assign(doc.createElement(\"div\"), {\n display: \"none\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: \"4px 14px\",\n padding: \"0 4px 8px\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n }) as HTMLDivElement;\n legend.className = \"minerva-chart-legend\";\n\n const stage = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n flex: \"1 1 auto\",\n minHeight: \"0\",\n outline: \"none\",\n touchAction: \"pan-y\",\n userSelect: \"none\",\n borderRadius: \"6px\",\n }) as HTMLDivElement;\n stage.className = \"minerva-chart-stage\";\n stage.setAttribute(\"role\", \"figure\");\n stage.setAttribute(\"aria-roledescription\", \"chart\");\n\n const background = layer(doc, \"canvas\") as HTMLCanvasElement;\n const foreground = layer(doc, \"canvas\") as HTMLCanvasElement;\n background.setAttribute(\"aria-hidden\", \"true\");\n foreground.setAttribute(\"aria-hidden\", \"true\");\n\n const hover = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n overflow: \"hidden\",\n }) as HTMLDivElement;\n hover.setAttribute(\"aria-hidden\", \"true\");\n\n const underlay = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n }) as HTMLDivElement;\n underlay.setAttribute(\"aria-hidden\", \"true\");\n\n const crosshair = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"0\",\n borderLeft:\n \"1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 45%, transparent)\",\n display: \"none\",\n }) as HTMLDivElement;\n hover.appendChild(crosshair);\n\n const tooltip = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"2\",\n display: \"none\",\n pointerEvents: \"none\",\n minWidth: \"128px\",\n maxWidth: \"320px\",\n padding: \"8px 12px\",\n borderRadius: \"10px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)\",\n fontSize: \"12px\",\n lineHeight: \"20px\",\n whiteSpace: \"nowrap\",\n transition: \"transform 80ms ease-out\",\n }) as HTMLDivElement;\n tooltip.className = \"minerva-chart-tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n\n const live = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n }) as HTMLDivElement;\n live.setAttribute(\"aria-live\", \"polite\");\n\n stage.append(background, underlay, foreground, hover, tooltip, live);\n root.append(legend, stage);\n container.appendChild(root);\n return {\n root,\n legend,\n stage,\n background,\n underlay,\n foreground,\n hover,\n crosshair,\n tooltip,\n live,\n };\n};\n\n/** Canvas of the data layer, placed over the plot area */\nexport const createDataCanvas = (doc: Document): HTMLCanvasElement => {\n const canvas = layer(doc, \"canvas\") as HTMLCanvasElement;\n canvas.setAttribute(\"aria-hidden\", \"true\");\n canvas.className = \"minerva-chart-data\";\n return canvas;\n};\n\nexport const swatch = (\n doc: Document,\n color: string,\n shape: \"dot\" | \"square\" | \"line\",\n) => {\n const el = doc.createElement(\"span\");\n assign(el, {\n display: \"inline-block\",\n flex: \"none\",\n width: shape === \"line\" ? \"14px\" : \"9px\",\n height: shape === \"line\" ? \"3px\" : \"9px\",\n borderRadius: shape === \"dot\" ? \"50%\" : shape === \"line\" ? \"2px\" : \"2px\",\n background: color,\n });\n return el;\n};\n\n/** Marker of a hovered point: a dot with a thin ring in the background color and a soft halo */\nexport const createMarker = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"50%\",\n border: \"2px solid var(--surface-color, var(--background-color, #fff))\",\n transform: \"translate(-50%, -50%)\",\n transition: \"box-shadow 120ms ease-out\",\n }) as HTMLDivElement;\n\n/** Band behind the hovered bars (or outline of a heatmap cell) */\nexport const createBand = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"6px\",\n background:\n \"color-mix(in srgb, var(--text-color, #1f2937) 6%, transparent)\",\n }) as HTMLDivElement;\n\nexport { assign as styleElement };\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./color.cjs"),t=require("./renderers/types.cjs");var
|
|
1
|
+
const e=require("./color.cjs"),t=require("./curve.cjs"),n=require("./renderers/types.cjs");var r=(e,t)=>Number.isFinite(e)?e-t:n.GAP,i={heatmap:0,area:1,bar:2,candlestick:3,line:4,scatter:5},a=e=>{let{x:n,count:r}=e.cols,i=e.stackTop??e.cols.y,a=e.stackBase;if(e.curve===`linear`)return{n:r,xAt:e=>n[e],yAt:e=>i[e],baseAt:a?e=>a[e]:null};let o=t.curvePoints(n,i,0,r,e.curve),s=a?t.curvePoints(n,a,0,r,e.curve).points:null,c=o.points;return{n:o.length,xAt:e=>c[e*2],yAt:e=>c[e*2+1],baseAt:s?e=>s[e*2+1]:null}},o=(e,t,n,r,i,a)=>{let o=new ArrayBuffer(r*16),s=new Float32Array(o),c=new Uint32Array(o);for(let e=0;e<r;e++)i(e,s,c);return{kind:`bar`,key:e,version:t,color:n.color,instances:o,count:r,...a}},s=(t,s,c)=>{let l=[],u=[],d=t.series.filter(e=>!e.hidden).sort((e,t)=>i[e.type]-i[t.type]||e.index-t.index);for(let i of d){let{x:d,y:f,count:p,sorted:m}=i.cols;switch((i.type===`line`||i.type===`scatter`)&&u.length&&l.push(...u.splice(0)),i.type){case`line`:case`area`:{let{n:e,xAt:o,yAt:p,baseAt:h}=a(i),g=new Float32Array(e*2);if(i.curve===`linear`){let t=i.stackTop??f,r=s.x,a=s.y;for(let i=0;i<e;i++){let e=d[i],o=t[i];g[i*2]=Number.isFinite(e)?e-r:n.GAP,g[i*2+1]=Number.isFinite(o)?o-a:n.GAP}}else for(let t=0;t<e;t++)g[t*2]=r(o(t),s.x),g[t*2+1]=r(p(t),s.y);if(i.type===`area`){let n=new Float32Array(e*3),a=t.baseline-s.y;for(let t=0;t<e;t++)n[t*3]=g[t*2],n[t*3+1]=g[t*2+1],n[t*3+2]=h?r(h(t),s.y):a;l.push({kind:`area`,key:`${i.key}:area`,version:c,color:i.color,points:n,count:e,opacity:i.opacity,sorted:m})}(i.type===`area`?u:l).push({kind:`line`,key:`${i.key}:line`,version:c,color:i.color,points:g,count:e,width:i.lineWidth,sorted:m});break}case`bar`:{let a=i.barBase??new Float64Array(p),u=i.barTop??f,h=e.packColor(i.color),g=t.series.some(e=>e!==i&&!e.hidden&&e.type===`bar`&&e.barOffset===i.barOffset);l.push(o(`${i.key}:bar`,c,i,p,(t,o,c)=>{let l=Number.isFinite(u[t])&&Number.isFinite(a[t]);o[t*4]=r(d[t]+i.barOffset,s.x),o[t*4+1]=l?a[t]-s.y:n.GAP,o[t*4+2]=l?u[t]-s.y:n.GAP;let f=i.pointColors?.[t];c[t*4+3]=f?e.packColor(f):h},{halfWidth:i.barHalfWidth,radius:g?0:i.radius,inset:0,minHalf:0,sorted:m}));break}case`candlestick`:{let{open:t,high:a,low:u}=i.cols,h=e.packColor(i.upColor),g=e.packColor(i.downColor),_=e=>t&&Number.isFinite(t[e])&&f[e]<t[e]?g:h;l.push(o(`${i.key}:wick`,c,i,p,(e,t,i)=>{let o=a?a[e]:f[e],c=u?u[e]:f[e],l=Number.isFinite(o)&&Number.isFinite(c)&&Number.isFinite(f[e]);t[e*4]=r(d[e],s.x),t[e*4+1]=l?c-s.y:n.GAP,t[e*4+2]=l?o-s.y:n.GAP,i[e*4+3]=_(e)},{halfWidth:0,radius:0,inset:0,minHalf:i.lineWidth/2,sorted:m}),o(`${i.key}:body`,c,i,p,(e,i,a)=>{let o=t?t[e]:f[e],c=Number.isFinite(o)&&Number.isFinite(f[e]);i[e*4]=r(d[e],s.x),i[e*4+1]=c?o-s.y:n.GAP,i[e*4+2]=c?f[e]-s.y:n.GAP,a[e*4+3]=_(e)},{halfWidth:i.barHalfWidth,radius:Math.min(i.radius,1.5),inset:0,minHalf:.5,sorted:m}));break}case`heatmap`:{let e=i.cellColors,t=i.cellHalf.y;l.push(o(`${i.key}:cells`,c,i,p,(i,a,o)=>{let c=e?e[i]:0,l=c!==0&&Number.isFinite(d[i]);a[i*4]=r(d[i],s.x),a[i*4+1]=l?f[i]-t-s.y:n.GAP,a[i*4+2]=l?f[i]+t-s.y:n.GAP,o[i*4+3]=c},{halfWidth:i.cellHalf.x,radius:i.radius,inset:1,minHalf:0,sorted:m}));break}default:{let t=new ArrayBuffer(p*16),r=new Float32Array(t),a=new Uint32Array(t),o=e.packColor(i.color),u=i.cols.size;for(let t=0;t<p;t++){let c=Number.isFinite(f[t])&&Number.isFinite(d[t]);r[t*4]=c?d[t]-s.x:n.GAP,r[t*4+1]=c?f[t]-s.y:n.GAP;let l=u?u[t]:NaN;r[t*4+2]=Number.isFinite(l)&&l>0?l:i.pointSize;let p=i.pointColors?.[t];a[t*4+3]=p?e.packColor(p):o}l.push({kind:`scatter`,key:`${i.key}:scatter`,version:c,color:i.color,instances:t,count:p,opacity:i.opacity,stroke:p<=5e3?1.25:0});break}}}return l.push(...u),l};exports.buildItems=s;
|
|
2
2
|
//# sourceMappingURL=items.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"items.cjs","names":["GAP","packColor","require_color","require_types","rel","value","origin","points","out","count","i","x","o","y","DRAW_ORDER","buildItems","items","outlines","ordered","model","s","a","b","pts","base","top","instances","valid","buffer","f","u","seriesColor","sizes","size","pc"],"sources":["../../../../charts/src/engine/items.ts"],"sourcesContent":["// Chart model -> GPU-ready buffers (positions relative to an origin).\n\nimport { packColor } from \"./color\";\nimport type { ChartModel } from \"./model\";\nimport { GAP, SCATTER_STRIDE, type RenderItem } from \"./renderers/types\";\n\nexport interface Origin {\n x: number;\n y: number;\n}\n\nconst rel = (value: number, origin: number) =>\n Number.isFinite(value) ? value - origin : GAP;\n\nconst points = (x: Float64Array, y: Float64Array, count: number, o: Origin) => {\n const out = new Float32Array(count * 2);\n for (let i = 0; i < count; i++) {\n // x stays real at gaps so sorted data can be binary searched\n out[i * 2] = rel(x[i], o.x);\n out[i * 2 + 1] = Number.isFinite(y[i]) ? y[i] - o.y : GAP;\n }\n return out;\n};\n\nconst DRAW_ORDER = { area: 0, bar: 1, line: 2, scatter: 3 } as const;\n\n/** Render items of the visible series, back to front */\nexport const buildItems = (\n model: ChartModel,\n origin: Origin,\n version: number,\n): RenderItem[] => {\n const items: RenderItem[] = [];\n /** Outlines of the areas are drawn with the lines, above the bars */\n const outlines: RenderItem[] = [];\n const ordered = model.series\n .filter((s) => !s.hidden)\n .sort(\n (a, b) => DRAW_ORDER[a.type] - DRAW_ORDER[b.type] || a.index - b.index,\n );\n for (const s of ordered) {\n const { x, y, count, sorted } = s.cols;\n if ((s.type === \"line\" || s.type === \"scatter\") && outlines.length) {\n items.push(...outlines.splice(0));\n }\n switch (s.type) {\n case \"line\":\n case \"area\": {\n const pts = points(x, y, count, origin);\n if (s.type === \"area\") {\n items.push({\n kind: \"area\",\n key: `${s.key}:area`,\n version,\n color: s.color,\n points: pts,\n count,\n baseline: model.baseline - origin.y,\n opacity: s.opacity,\n sorted,\n });\n }\n (s.type === \"area\" ? outlines : items).push({\n kind: \"line\",\n key: `${s.key}:line`,\n version,\n color: s.color,\n points: pts,\n count,\n width: s.lineWidth,\n sorted,\n });\n break;\n }\n case \"bar\": {\n const base = s.barBase ?? new Float64Array(count);\n const top = s.barTop ?? y;\n const instances = new Float32Array(count * 3);\n for (let i = 0; i < count; i++) {\n const valid = Number.isFinite(top[i]) && Number.isFinite(base[i]);\n instances[i * 3] = rel(x[i] + s.barOffset, origin.x);\n instances[i * 3 + 1] = valid ? base[i] - origin.y : GAP;\n instances[i * 3 + 2] = valid ? top[i] - origin.y : GAP;\n }\n items.push({\n kind: \"bar\",\n key: `${s.key}:bar`,\n version,\n color: s.color,\n instances,\n count,\n halfWidth: s.barHalfWidth,\n sorted,\n radius: model.series.some(\n (o) =>\n o !== s &&\n !o.hidden &&\n o.type === \"bar\" &&\n o.barOffset === s.barOffset,\n )\n ? 0\n : 3,\n });\n break;\n }\n default: {\n const buffer = new ArrayBuffer(count * SCATTER_STRIDE);\n const f = new Float32Array(buffer);\n const u = new Uint32Array(buffer);\n const seriesColor = packColor(s.color);\n const sizes = s.cols.size;\n for (let i = 0; i < count; i++) {\n const valid = Number.isFinite(y[i]) && Number.isFinite(x[i]);\n f[i * 4] = valid ? x[i] - origin.x : GAP;\n f[i * 4 + 1] = valid ? y[i] - origin.y : GAP;\n const size = sizes ? sizes[i] : NaN;\n f[i * 4 + 2] = Number.isFinite(size) && size > 0 ? size : s.pointSize;\n const pc = s.pointColors?.[i];\n u[i * 4 + 3] = pc ? packColor(pc) : seriesColor;\n }\n items.push({\n kind: \"scatter\",\n key: `${s.key}:scatter`,\n version,\n color: s.color,\n instances: buffer,\n count,\n opacity: s.opacity,\n stroke: count <= 5000 ? 1.25 : 0,\n });\n break;\n }\n }\n }\n items.push(...outlines);\n return items;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"items.cjs","names":["GAP","curvePoints","packColor","require_color","require_curve","require_types","rel","value","origin","DRAW_ORDER","linePoints","s","top","stackBase","count","x","i","curved","base","points","barItem","instances","f","u","write","extra","buildItems","items","outlines","ordered","model","a","b","pts","n","y","ox","oy","xv","yv","xAt","yAt","area","baseline","baseAt","seriesColor","shared","o","version","valid","pc","up","down","colorAt","open","hi","high","lo","low","colors","hy","buffer","sizes","size"],"sources":["../../../../charts/src/engine/items.ts"],"sourcesContent":["// Chart model -> GPU-ready buffers (positions relative to an origin).\n\nimport { packColor } from \"./color\";\nimport { curvePoints } from \"./curve\";\nimport type { ChartModel, SeriesModel } from \"./model\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n GAP,\n SCATTER_STRIDE,\n type BarItem,\n type RenderItem,\n} from \"./renderers/types\";\n\nexport interface Origin {\n x: number;\n y: number;\n}\n\nconst rel = (value: number, origin: number) =>\n Number.isFinite(value) ? value - origin : GAP;\n\nconst DRAW_ORDER = {\n heatmap: 0,\n area: 1,\n bar: 2,\n candlestick: 3,\n line: 4,\n scatter: 5,\n} as const;\n\n/** Line (and area) points of a series: stacked, curved; interleaved x, y */\nconst linePoints = (s: SeriesModel) => {\n const { x, count } = s.cols;\n const top = s.stackTop ?? s.cols.y;\n const stackBase = s.stackBase;\n if (s.curve === \"linear\") {\n // no copy: the hot path of large series\n return {\n n: count,\n xAt: (i: number) => x[i],\n yAt: (i: number) => top[i],\n baseAt: stackBase ? (i: number) => stackBase[i] : null,\n };\n }\n const curved = curvePoints(x, top, 0, count, s.curve);\n const base = stackBase\n ? curvePoints(x, stackBase, 0, count, s.curve).points\n : null;\n const points = curved.points;\n return {\n // the buffers are allocated for the worst case: only `length` are written\n n: curved.length,\n xAt: (i: number) => points[i * 2],\n yAt: (i: number) => points[i * 2 + 1],\n baseAt: base ? (i: number) => base[i * 2 + 1] : null,\n };\n};\n\nconst barItem = (\n key: string,\n version: number,\n s: SeriesModel,\n count: number,\n write: (i: number, f: Float32Array, u: Uint32Array) => void,\n extra: Pick<BarItem, \"halfWidth\" | \"radius\" | \"inset\" | \"minHalf\" | \"sorted\">,\n): BarItem => {\n const instances = new ArrayBuffer(count * BAR_STRIDE);\n const f = new Float32Array(instances);\n const u = new Uint32Array(instances);\n for (let i = 0; i < count; i++) write(i, f, u);\n return {\n kind: \"bar\",\n key,\n version,\n color: s.color,\n instances,\n count,\n ...extra,\n };\n};\n\n/** Render items of the visible series, back to front */\nexport const buildItems = (\n model: ChartModel,\n origin: Origin,\n version: number,\n): RenderItem[] => {\n const items: RenderItem[] = [];\n /** Outlines of the areas are drawn with the lines, above the bars */\n const outlines: RenderItem[] = [];\n const ordered = model.series\n .filter((s) => !s.hidden)\n .sort(\n (a, b) => DRAW_ORDER[a.type] - DRAW_ORDER[b.type] || a.index - b.index,\n );\n for (const s of ordered) {\n const { x, y, count, sorted } = s.cols;\n if ((s.type === \"line\" || s.type === \"scatter\") && outlines.length) {\n items.push(...outlines.splice(0));\n }\n switch (s.type) {\n case \"line\":\n case \"area\": {\n const { n, xAt, yAt, baseAt } = linePoints(s);\n const pts = new Float32Array(n * 2);\n if (s.curve === \"linear\") {\n // direct loop: the hot path of very large series\n const top = s.stackTop ?? y;\n const ox = origin.x;\n const oy = origin.y;\n for (let i = 0; i < n; i++) {\n const xv = x[i];\n const yv = top[i];\n pts[i * 2] = Number.isFinite(xv) ? xv - ox : GAP;\n pts[i * 2 + 1] = Number.isFinite(yv) ? yv - oy : GAP;\n }\n } else {\n for (let i = 0; i < n; i++) {\n // x stays real at gaps so sorted data can be binary searched\n pts[i * 2] = rel(xAt(i), origin.x);\n pts[i * 2 + 1] = rel(yAt(i), origin.y);\n }\n }\n if (s.type === \"area\") {\n const area = new Float32Array(n * AREA_STRIDE);\n const baseline = model.baseline - origin.y;\n for (let i = 0; i < n; i++) {\n area[i * 3] = pts[i * 2];\n area[i * 3 + 1] = pts[i * 2 + 1];\n area[i * 3 + 2] = baseAt ? rel(baseAt(i), origin.y) : baseline;\n }\n items.push({\n kind: \"area\",\n key: `${s.key}:area`,\n version,\n color: s.color,\n points: area,\n count: n,\n opacity: s.opacity,\n sorted,\n });\n }\n (s.type === \"area\" ? outlines : items).push({\n kind: \"line\",\n key: `${s.key}:line`,\n version,\n color: s.color,\n points: pts,\n count: n,\n width: s.lineWidth,\n sorted,\n });\n break;\n }\n case \"bar\": {\n const base = s.barBase ?? new Float64Array(count);\n const top = s.barTop ?? y;\n const seriesColor = packColor(s.color);\n const shared = model.series.some(\n (o) =>\n o !== s &&\n !o.hidden &&\n o.type === \"bar\" &&\n o.barOffset === s.barOffset,\n );\n items.push(\n barItem(\n `${s.key}:bar`,\n version,\n s,\n count,\n (i, f, u) => {\n const valid = Number.isFinite(top[i]) && Number.isFinite(base[i]);\n f[i * 4] = rel(x[i] + s.barOffset, origin.x);\n f[i * 4 + 1] = valid ? base[i] - origin.y : GAP;\n f[i * 4 + 2] = valid ? top[i] - origin.y : GAP;\n const pc = s.pointColors?.[i];\n u[i * 4 + 3] = pc ? packColor(pc) : seriesColor;\n },\n {\n halfWidth: s.barHalfWidth,\n // stacked segments stay square so the stack reads as one bar\n radius: shared ? 0 : s.radius,\n inset: 0,\n minHalf: 0,\n sorted,\n },\n ),\n );\n break;\n }\n case \"candlestick\": {\n const { open, high, low } = s.cols;\n const up = packColor(s.upColor);\n const down = packColor(s.downColor);\n const colorAt = (i: number) =>\n open && Number.isFinite(open[i]) && y[i] < open[i] ? down : up;\n // wicks first, the bodies cover them\n items.push(\n barItem(\n `${s.key}:wick`,\n version,\n s,\n count,\n (i, f, u) => {\n const hi = high ? high[i] : y[i];\n const lo = low ? low[i] : y[i];\n const valid =\n Number.isFinite(hi) &&\n Number.isFinite(lo) &&\n Number.isFinite(y[i]);\n f[i * 4] = rel(x[i], origin.x);\n f[i * 4 + 1] = valid ? lo - origin.y : GAP;\n f[i * 4 + 2] = valid ? hi - origin.y : GAP;\n u[i * 4 + 3] = colorAt(i);\n },\n {\n halfWidth: 0,\n radius: 0,\n inset: 0,\n minHalf: s.lineWidth / 2,\n sorted,\n },\n ),\n barItem(\n `${s.key}:body`,\n version,\n s,\n count,\n (i, f, u) => {\n const o = open ? open[i] : y[i];\n const valid = Number.isFinite(o) && Number.isFinite(y[i]);\n f[i * 4] = rel(x[i], origin.x);\n f[i * 4 + 1] = valid ? o - origin.y : GAP;\n f[i * 4 + 2] = valid ? y[i] - origin.y : GAP;\n u[i * 4 + 3] = colorAt(i);\n },\n {\n halfWidth: s.barHalfWidth,\n radius: Math.min(s.radius, 1.5),\n inset: 0,\n minHalf: 0.5,\n sorted,\n },\n ),\n );\n break;\n }\n case \"heatmap\": {\n const colors = s.cellColors;\n const hy = s.cellHalf.y;\n items.push(\n barItem(\n `${s.key}:cells`,\n version,\n s,\n count,\n (i, f, u) => {\n const c = colors ? colors[i] : 0;\n const valid = c !== 0 && Number.isFinite(x[i]);\n f[i * 4] = rel(x[i], origin.x);\n f[i * 4 + 1] = valid ? y[i] - hy - origin.y : GAP;\n f[i * 4 + 2] = valid ? y[i] + hy - origin.y : GAP;\n u[i * 4 + 3] = c;\n },\n {\n halfWidth: s.cellHalf.x,\n radius: s.radius,\n inset: 1,\n minHalf: 0,\n sorted,\n },\n ),\n );\n break;\n }\n default: {\n const buffer = new ArrayBuffer(count * SCATTER_STRIDE);\n const f = new Float32Array(buffer);\n const u = new Uint32Array(buffer);\n const seriesColor = packColor(s.color);\n const sizes = s.cols.size;\n for (let i = 0; i < count; i++) {\n const valid = Number.isFinite(y[i]) && Number.isFinite(x[i]);\n f[i * 4] = valid ? x[i] - origin.x : GAP;\n f[i * 4 + 1] = valid ? y[i] - origin.y : GAP;\n const size = sizes ? sizes[i] : NaN;\n f[i * 4 + 2] = Number.isFinite(size) && size > 0 ? size : s.pointSize;\n const pc = s.pointColors?.[i];\n u[i * 4 + 3] = pc ? packColor(pc) : seriesColor;\n }\n items.push({\n kind: \"scatter\",\n key: `${s.key}:scatter`,\n version,\n color: s.color,\n instances: buffer,\n count,\n opacity: s.opacity,\n stroke: count <= 5000 ? 1.25 : 0,\n });\n break;\n }\n }\n }\n items.push(...outlines);\n return items;\n};\n"],"mappings":"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"}
|