@svgrid/grid-wc 3.0.0 → 3.0.2
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/README.md +130 -110
- package/dist/GridMenus-B1mC1aPp.js +1077 -0
- package/dist/SvChartMenu-CBMKm7Xb.js +413 -0
- package/dist/SvDateRangeInput-BrYTQEMM.js +197 -0
- package/dist/SvDateTimePicker-CnLlqNDQ.js +766 -0
- package/dist/SvField-Bmzp3ObZ.js +147 -0
- package/dist/SvGridCellEditor-B005dmV1.js +560 -0
- package/dist/SvGridChart-4TcL9Rj2.js +3702 -0
- package/dist/SvGridChartBuilder-C4OL4XYx.js +1165 -0
- package/dist/SvGridChartPanel-CfHA8Ioq.js +1743 -0
- package/dist/SvGridChartView-Ci-9_EJ0.js +45 -0
- package/dist/SvGridDropdown-BlA6iw9m.js +257 -0
- package/dist/angular/fesm2022/svgrid-grid-wc-angular.mjs +178 -7
- package/dist/angular/fesm2022/svgrid-grid-wc-angular.mjs.map +1 -1
- package/dist/angular/types/svgrid-grid-wc-angular.d.ts +77 -2
- package/dist/{shadow/cell-formatting-C0OsDmi_.js → cell-formatting-Eypm-id0.js} +1 -1
- package/dist/chart/SvChartMenu-C-sbGNk8.js +586 -0
- package/dist/chart/chart-export-BHGuh_kZ.js +127 -0
- package/dist/chart/chart-export-pdf-BjkkIEkE.js +104 -0
- package/dist/chart/chart-summary-B86RFA3M.js +137 -0
- package/dist/chart/chart-trend-DP6DSsBa.js +56 -0
- package/dist/chart/chart-validate-CD6ptiwg.js +180 -0
- package/dist/chart/client-BuB0wIgc.js +2757 -0
- package/dist/chart/sv-chart-element.d.ts +98 -0
- package/dist/chart/sv-chart-element.js +7282 -0
- package/dist/chart-DoqdUoGg.js +4398 -0
- package/dist/chart-export-pdf-BirUdchl.js +104 -0
- package/dist/chart-summary-BP9i-v8M.js +137 -0
- package/dist/chart-validate-CD6ptiwg.js +180 -0
- package/dist/{shadow/client-DjwUji8D.js → client-DEF0GRjE.js} +1 -1
- package/dist/{shadow/column-resize-DvCRUrN3.js → column-resize-DUPgynvc.js} +3 -3
- package/dist/date-format-DMTwV8NC.js +1128 -0
- package/dist/{export-format-B6FUgOll.js → export-format-uGayRKWM.js} +3 -3
- package/dist/focus-trap-DvlOlOGM.js +65 -0
- package/dist/list-option-DrRyivWp.js +82 -0
- package/dist/react/chart.d.ts +99 -0
- package/dist/react/chart.js +49 -0
- package/dist/react/index.d.ts +28 -0
- package/dist/react/index.js +4 -1
- package/dist/{row-resize-D-8s3cqT.js → row-resize-Cf8qPLbi.js} +44 -36
- package/dist/shadow/GridMenus-B1mC1aPp.js +1077 -0
- package/dist/shadow/SvChartMenu-CBMKm7Xb.js +413 -0
- package/dist/shadow/SvDateRangeInput-BrYTQEMM.js +197 -0
- package/dist/shadow/SvDateTimePicker-CnLlqNDQ.js +766 -0
- package/dist/shadow/SvField-Bmzp3ObZ.js +147 -0
- package/dist/shadow/SvGridCellEditor-B005dmV1.js +560 -0
- package/dist/shadow/SvGridChart-4TcL9Rj2.js +3702 -0
- package/dist/shadow/SvGridChartBuilder-C4OL4XYx.js +1165 -0
- package/dist/shadow/SvGridChartPanel-CfHA8Ioq.js +1743 -0
- package/dist/shadow/SvGridChartView-Ci-9_EJ0.js +45 -0
- package/dist/shadow/SvGridDropdown-BlA6iw9m.js +257 -0
- package/dist/{cell-formatting-C0OsDmi_.js → shadow/cell-formatting-Eypm-id0.js} +1 -1
- package/dist/shadow/chart-DoqdUoGg.js +4398 -0
- package/dist/shadow/chart-export-pdf-BirUdchl.js +104 -0
- package/dist/shadow/chart-summary-BP9i-v8M.js +137 -0
- package/dist/shadow/chart-validate-CD6ptiwg.js +180 -0
- package/dist/{client-DjwUji8D.js → shadow/client-DEF0GRjE.js} +1 -1
- package/dist/{column-resize-DvCRUrN3.js → shadow/column-resize-DUPgynvc.js} +3 -3
- package/dist/shadow/date-format-DMTwV8NC.js +1128 -0
- package/dist/shadow/{export-format-C8kZGZfz.js → export-format-DhdZREP1.js} +3 -3
- package/dist/shadow/focus-trap-DvlOlOGM.js +65 -0
- package/dist/shadow/list-option-DrRyivWp.js +82 -0
- package/dist/shadow/{row-resize-D-8s3cqT.js → row-resize-Cf8qPLbi.js} +44 -36
- package/dist/shadow/sv-grid-shadow-element.d.ts +15 -0
- package/dist/shadow/sv-grid-shadow-element.js +4853 -3626
- package/dist/shadow/{svelte-virtualizer.svelte-DZ9UcyfT.js → svelte-virtualizer.svelte-CnGhFGDc.js} +37 -34
- package/dist/sv-grid-element.d.ts +15 -0
- package/dist/sv-grid-element.js +4809 -3612
- package/dist/{svelte-virtualizer.svelte-DZ9UcyfT.js → svelte-virtualizer.svelte-CnGhFGDc.js} +37 -34
- package/dist/vue/chart.d.ts +64 -0
- package/dist/vue/chart.js +41 -0
- package/dist/vue/index.d.ts +11 -2
- package/dist/vue/index.js +4 -1
- package/package.json +18 -5
- package/dist/GridMenus-DpmS1pzo.js +0 -1121
- package/dist/SvDateRangeInput-u4ibte8S.js +0 -196
- package/dist/SvDateTimePicker-DVFiDxUq.js +0 -765
- package/dist/SvField-ChCI-O2O.js +0 -146
- package/dist/SvGridCellEditor-DvsQyE9a.js +0 -550
- package/dist/SvGridChart-yK5Zv85y.js +0 -1199
- package/dist/SvGridChartPanel-B38_VjXM.js +0 -584
- package/dist/SvGridChartView-ScXTF6t-.js +0 -50
- package/dist/SvGridDropdown-DnAESFDu.js +0 -256
- package/dist/chart-uvs3sFJA.js +0 -1220
- package/dist/date-format-CPHqTHN6.js +0 -1127
- package/dist/shadow/GridMenus-DpmS1pzo.js +0 -1121
- package/dist/shadow/SvDateRangeInput-u4ibte8S.js +0 -196
- package/dist/shadow/SvDateTimePicker-DVFiDxUq.js +0 -765
- package/dist/shadow/SvField-ChCI-O2O.js +0 -146
- package/dist/shadow/SvGridCellEditor-DvsQyE9a.js +0 -550
- package/dist/shadow/SvGridChart-yK5Zv85y.js +0 -1199
- package/dist/shadow/SvGridChartPanel-B38_VjXM.js +0 -584
- package/dist/shadow/SvGridChartView-ScXTF6t-.js +0 -50
- package/dist/shadow/SvGridDropdown-DnAESFDu.js +0 -256
- package/dist/shadow/chart-uvs3sFJA.js +0 -1220
- package/dist/shadow/date-format-CPHqTHN6.js +0 -1127
|
@@ -0,0 +1,4398 @@
|
|
|
1
|
+
import { r as e } from "./cell-formatting-Eypm-id0.js";
|
|
2
|
+
//#region \0rolldown/runtime.js
|
|
3
|
+
var t = Object.defineProperty, n = (e, n) => {
|
|
4
|
+
let r = {};
|
|
5
|
+
for (var i in e) t(r, i, {
|
|
6
|
+
get: e[i],
|
|
7
|
+
enumerable: !0
|
|
8
|
+
});
|
|
9
|
+
return n || t(r, Symbol.toStringTag, { value: "Module" }), r;
|
|
10
|
+
};
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region ../grid/dist/chart-format.js
|
|
13
|
+
function r(e) {
|
|
14
|
+
let t = Math.abs(e);
|
|
15
|
+
return t >= 1e6 ? `${(e / 1e6).toFixed(t % 1e6 ? 1 : 0)}M` : t >= 1e3 ? `${(e / 1e3).toFixed(t % 1e3 ? 1 : 0)}k` : String(Math.round(e * 100) / 100);
|
|
16
|
+
}
|
|
17
|
+
function i(t, n, i) {
|
|
18
|
+
if (!Number.isFinite(t)) return "";
|
|
19
|
+
if (i && (i.locale || i.currency)) {
|
|
20
|
+
let r = n === "currency" ? "currency" : n === "percent" ? "percent" : "decimal", a = {
|
|
21
|
+
notation: "compact",
|
|
22
|
+
maximumFractionDigits: 1
|
|
23
|
+
};
|
|
24
|
+
return r === "currency" ? (a.style = "currency", a.currency = i.currency || "USD") : r === "percent" && (a.style = "percent"), e(i.locale, a).format(t);
|
|
25
|
+
}
|
|
26
|
+
if (n === "currency") return `${t < 0 ? "-" : ""}$${r(Math.abs(t))}`;
|
|
27
|
+
if (n === "percent") {
|
|
28
|
+
let e = t * 100;
|
|
29
|
+
return `${Math.round(e * 10) / 10}%`;
|
|
30
|
+
}
|
|
31
|
+
return r(t);
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region ../grid/dist/chart-trend.js
|
|
35
|
+
function a(e) {
|
|
36
|
+
let t = 0, n = 0, r = 0, i = 0, a = 0;
|
|
37
|
+
for (let o = 0; o < e.length; o += 1) {
|
|
38
|
+
let s = e[o];
|
|
39
|
+
Number.isFinite(s) && (t += 1, n += o, r += s, i += o * o, a += o * s);
|
|
40
|
+
}
|
|
41
|
+
if (t < 2) return e.map(() => NaN);
|
|
42
|
+
let o = t * i - n * n;
|
|
43
|
+
if (o === 0) return e.map(() => r / t);
|
|
44
|
+
let s = (t * a - n * r) / o, c = (r - s * n) / t;
|
|
45
|
+
return e.map((e, t) => s * t + c);
|
|
46
|
+
}
|
|
47
|
+
function o(e, t) {
|
|
48
|
+
let n = 0, r = 0, i = 0, a = Math.min(e.length, t.length);
|
|
49
|
+
for (let o = 0; o < a; o += 1) Number.isFinite(e[o]) && Number.isFinite(t[o]) && (n += 1, r += e[o], i += t[o]);
|
|
50
|
+
if (n < 2) return 0;
|
|
51
|
+
let o = r / n, s = i / n, c = 0, l = 0, u = 0;
|
|
52
|
+
for (let n = 0; n < a; n += 1) {
|
|
53
|
+
if (!Number.isFinite(e[n]) || !Number.isFinite(t[n])) continue;
|
|
54
|
+
let r = e[n] - o, i = t[n] - s;
|
|
55
|
+
c += r * i, l += r * r, u += i * i;
|
|
56
|
+
}
|
|
57
|
+
return l === 0 || u === 0 ? 0 : c / Math.sqrt(l * u);
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region ../grid/dist/chart-scale.js
|
|
61
|
+
var s = [
|
|
62
|
+
"#2563eb",
|
|
63
|
+
"#16a34a",
|
|
64
|
+
"#f59e0b",
|
|
65
|
+
"#ef4444",
|
|
66
|
+
"#8b5cf6",
|
|
67
|
+
"#0ea5e9",
|
|
68
|
+
"#ec4899",
|
|
69
|
+
"#14b8a6"
|
|
70
|
+
];
|
|
71
|
+
function c(e) {
|
|
72
|
+
return Math.round(e * 100) / 100;
|
|
73
|
+
}
|
|
74
|
+
function l(e, t) {
|
|
75
|
+
if (e <= 0) return 1;
|
|
76
|
+
let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
|
|
77
|
+
return i = t ? r < 1.5 ? 1 : r < 3 ? 2 : r < 7 ? 5 : 10 : r <= 1 ? 1 : r <= 2 ? 2 : r <= 5 ? 5 : 10, i * 10 ** n;
|
|
78
|
+
}
|
|
79
|
+
var u = [
|
|
80
|
+
"#eff6ff",
|
|
81
|
+
"#bfdbfe",
|
|
82
|
+
"#60a5fa",
|
|
83
|
+
"#2563eb",
|
|
84
|
+
"#1e3a8a"
|
|
85
|
+
], d = [
|
|
86
|
+
"#b91c1c",
|
|
87
|
+
"#fca5a5",
|
|
88
|
+
"#f1f5f9",
|
|
89
|
+
"#93c5fd",
|
|
90
|
+
"#1d4ed8"
|
|
91
|
+
], f = [
|
|
92
|
+
"#1c2c4d",
|
|
93
|
+
"#1d4ed8",
|
|
94
|
+
"#3b82f6",
|
|
95
|
+
"#60a5fa",
|
|
96
|
+
"#bae6fd"
|
|
97
|
+
], p = [
|
|
98
|
+
"#f87171",
|
|
99
|
+
"#b91c1c",
|
|
100
|
+
"#222b3d",
|
|
101
|
+
"#1d4ed8",
|
|
102
|
+
"#60a5fa"
|
|
103
|
+
];
|
|
104
|
+
function m(e, t, n, r = "light") {
|
|
105
|
+
if (Array.isArray(e) && e.length >= 2) return e;
|
|
106
|
+
let i = r === "dark";
|
|
107
|
+
return e === "diverging" || e == null && t < 0 && n > 0 ? i ? p : d : i ? f : u;
|
|
108
|
+
}
|
|
109
|
+
function h(e, t) {
|
|
110
|
+
if (!e.length) return "#888";
|
|
111
|
+
let n = Math.max(0, Math.min(1, t));
|
|
112
|
+
if (e.length === 1) return e[0];
|
|
113
|
+
let r = n * (e.length - 1), i = Math.floor(r), a = r - i, o = g(e[i]), s = g(e[Math.min(e.length - 1, i + 1)]);
|
|
114
|
+
if (!o || !s) return e[i] ?? "#888";
|
|
115
|
+
let c = (e, t) => Math.round(e + (t - e) * a), l = (e) => e.toString(16).padStart(2, "0");
|
|
116
|
+
return "#" + l(c(o.r, s.r)) + l(c(o.g, s.g)) + l(c(o.b, s.b));
|
|
117
|
+
}
|
|
118
|
+
function g(e) {
|
|
119
|
+
let t = /^#?([0-9a-f]{6})$/i.exec(e.trim());
|
|
120
|
+
if (!t) return null;
|
|
121
|
+
let n = parseInt(t[1], 16);
|
|
122
|
+
return {
|
|
123
|
+
r: n >> 16 & 255,
|
|
124
|
+
g: n >> 8 & 255,
|
|
125
|
+
b: n & 255
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function _(e) {
|
|
129
|
+
let t = g(e);
|
|
130
|
+
if (!t) return "#0f172a";
|
|
131
|
+
let n = (e) => {
|
|
132
|
+
let t = e / 255;
|
|
133
|
+
return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
|
|
134
|
+
};
|
|
135
|
+
return .2126 * n(t.r) + .7152 * n(t.g) + .0722 * n(t.b) > .5 ? "#0f172a" : "#ffffff";
|
|
136
|
+
}
|
|
137
|
+
function v(e, t) {
|
|
138
|
+
(!Number.isFinite(e) || e <= 0) && (e = 1), (!Number.isFinite(t) || t <= e) && (t = e * 10);
|
|
139
|
+
let n = Math.floor(Math.log10(e)), r = Math.ceil(Math.log10(t)), i = [];
|
|
140
|
+
for (let e = n; e <= r; e += 1) i.push(10 ** e);
|
|
141
|
+
return {
|
|
142
|
+
min: 10 ** n,
|
|
143
|
+
max: 10 ** r,
|
|
144
|
+
step: 10,
|
|
145
|
+
ticks: i
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function y(e, t) {
|
|
149
|
+
if (!(e > 0) || !(t > e)) return [];
|
|
150
|
+
let n = Math.floor(Math.log10(e)), r = Math.ceil(Math.log10(t)), i = r - n < 3 ? [2, 5] : [], a = [];
|
|
151
|
+
for (let o = n; o <= r; o += 1) {
|
|
152
|
+
let n = 10 ** o;
|
|
153
|
+
for (let r of [1, ...i]) {
|
|
154
|
+
let i = n * r;
|
|
155
|
+
i >= e * .999 && i <= t * 1.001 && a.push(i);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return a;
|
|
159
|
+
}
|
|
160
|
+
function b(e, t, n, r) {
|
|
161
|
+
return Number.isFinite(e) ? r ? e <= 0 || t <= 0 ? null : (Math.log10(e) - Math.log10(t)) / (Math.log10(n) - Math.log10(t)) : (e - t) / (n - t) : null;
|
|
162
|
+
}
|
|
163
|
+
function x(e, t, n = 4) {
|
|
164
|
+
(!Number.isFinite(e) || !Number.isFinite(t)) && (e = 0, t = 1), e === t && (e === 0 ? t = 1 : (e = Math.min(0, e), t = Math.max(0, t)), e === t && (t = e + 1));
|
|
165
|
+
let r = l(l(t - e, !1) / Math.max(1, n), !0), i = Math.floor(e / r) * r, a = Math.ceil(t / r) * r, o = [];
|
|
166
|
+
for (let e = i; e <= a + r * .5; e += r) o.push(c(e));
|
|
167
|
+
return {
|
|
168
|
+
min: i,
|
|
169
|
+
max: a,
|
|
170
|
+
step: r,
|
|
171
|
+
ticks: o
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function S(e, t, n = {}) {
|
|
175
|
+
let r = n.min ?? e, i = n.max ?? t;
|
|
176
|
+
(!Number.isFinite(r) || !Number.isFinite(i)) && (r = Number.isFinite(r) ? r : 0, i = Number.isFinite(i) ? i : r + 1);
|
|
177
|
+
let a = n.nice !== !1, o = n.tickInterval;
|
|
178
|
+
if (o && o > 0 && Number.isFinite(o)) {
|
|
179
|
+
a && n.min == null && (r = Math.floor(r / o) * o), a && n.max == null && (i = Math.ceil(i / o) * o), i <= r && (i = r + o);
|
|
180
|
+
let e = [], t = Math.ceil(r / o - 1e-9) * o;
|
|
181
|
+
for (let n = t, r = 0; n <= i + o * 1e-6 && r < 1e3; n += o, r += 1) e.push(c(n) + 0);
|
|
182
|
+
return {
|
|
183
|
+
min: r,
|
|
184
|
+
max: i,
|
|
185
|
+
step: o,
|
|
186
|
+
ticks: e
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
if (a) {
|
|
190
|
+
let e = x(r, i, n.tickCount ?? 4);
|
|
191
|
+
if (n.min == null && n.max == null) return e;
|
|
192
|
+
let t = n.min ?? e.min, a = n.max ?? e.max;
|
|
193
|
+
return {
|
|
194
|
+
min: t,
|
|
195
|
+
max: a,
|
|
196
|
+
step: e.step,
|
|
197
|
+
ticks: e.ticks.filter((e) => e >= t - 1e-9 && e <= a + 1e-9)
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
i <= r && (i = r + 1);
|
|
201
|
+
let s = Math.max(1, Math.round(n.tickCount ?? 4)), l = (i - r) / s, u = Array.from({ length: s + 1 }, (e, t) => c(r + l * t));
|
|
202
|
+
return {
|
|
203
|
+
min: r,
|
|
204
|
+
max: i,
|
|
205
|
+
step: l,
|
|
206
|
+
ticks: u
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
var C = 864e5;
|
|
210
|
+
function w(e, t, n = 6) {
|
|
211
|
+
if (!(t > e)) return [e];
|
|
212
|
+
let r = Math.max(2, n) * 1.3, i = t - e, a = [
|
|
213
|
+
[1, 0],
|
|
214
|
+
[2, 0],
|
|
215
|
+
[7, 0],
|
|
216
|
+
[14, 0],
|
|
217
|
+
[0, 1],
|
|
218
|
+
[0, 3],
|
|
219
|
+
[0, 6],
|
|
220
|
+
[0, 12],
|
|
221
|
+
[0, 24],
|
|
222
|
+
[0, 60],
|
|
223
|
+
[0, 120]
|
|
224
|
+
], [o, s] = a[a.length - 1];
|
|
225
|
+
for (let [e, t] of a) if (i / (e * 864e5 + t * 30.44 * 864e5) <= r) {
|
|
226
|
+
o = e, s = t;
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
let c = new Date(e), l = [];
|
|
230
|
+
if (o) {
|
|
231
|
+
let n = Date.UTC(c.getUTCFullYear(), c.getUTCMonth(), c.getUTCDate());
|
|
232
|
+
for (o >= 7 && (n += (8 - new Date(n).getUTCDay()) % 7 * C); n < e;) n += o * C;
|
|
233
|
+
for (; n <= t + 1; n += o * C) l.push(n);
|
|
234
|
+
} else {
|
|
235
|
+
let n = Math.ceil((c.getUTCFullYear() * 12 + c.getUTCMonth()) / s) * s, r = (e) => Date.UTC(Math.floor(e / 12), e % 12, 1);
|
|
236
|
+
r(n) < e && (n += s);
|
|
237
|
+
for (let e = r(n); e <= t + 1; n += s, e = r(n)) l.push(e);
|
|
238
|
+
}
|
|
239
|
+
return l.length < 2 ? [e, t] : l;
|
|
240
|
+
}
|
|
241
|
+
function T(e, t = 6) {
|
|
242
|
+
if (e.length <= 1) return e.length ? [0] : [];
|
|
243
|
+
let n = {
|
|
244
|
+
day: (e) => `${e.getUTCFullYear()}-${e.getUTCMonth()}-${e.getUTCDate()}`,
|
|
245
|
+
week: (e) => Math.floor((Date.UTC(e.getUTCFullYear(), e.getUTCMonth(), e.getUTCDate()) / C + 3) / 7),
|
|
246
|
+
month: (e) => `${e.getUTCFullYear()}-${e.getUTCMonth()}`,
|
|
247
|
+
year: (e) => e.getUTCFullYear()
|
|
248
|
+
}, r = null;
|
|
249
|
+
for (let i of [
|
|
250
|
+
"day",
|
|
251
|
+
"week",
|
|
252
|
+
"month",
|
|
253
|
+
"year"
|
|
254
|
+
]) {
|
|
255
|
+
let a = [], o = null;
|
|
256
|
+
for (let t = 0; t < e.length; t += 1) {
|
|
257
|
+
let r = e[t];
|
|
258
|
+
if (!Number.isFinite(r)) continue;
|
|
259
|
+
let s = n[i](new Date(r));
|
|
260
|
+
s !== o && a.push(t), o = s;
|
|
261
|
+
}
|
|
262
|
+
if (r = a, a.length <= t * 2) break;
|
|
263
|
+
}
|
|
264
|
+
let i = r ?? [];
|
|
265
|
+
if (i.length > t) {
|
|
266
|
+
let e = Math.ceil(i.length / t);
|
|
267
|
+
i = i.filter((t, n) => n % e === 0);
|
|
268
|
+
}
|
|
269
|
+
if (i.length < 2) {
|
|
270
|
+
let n = Math.max(1, Math.ceil(e.length / t));
|
|
271
|
+
i = e.map((e, t) => t).filter((e) => e % n === 0);
|
|
272
|
+
}
|
|
273
|
+
return i;
|
|
274
|
+
}
|
|
275
|
+
function E(e, t) {
|
|
276
|
+
let n = new Date(e);
|
|
277
|
+
return t < 24192e5 ? n.toLocaleDateString(void 0, {
|
|
278
|
+
month: "short",
|
|
279
|
+
day: "numeric",
|
|
280
|
+
timeZone: "UTC"
|
|
281
|
+
}) : t < 31104e6 ? n.toLocaleDateString(void 0, {
|
|
282
|
+
month: "short",
|
|
283
|
+
year: "2-digit",
|
|
284
|
+
timeZone: "UTC"
|
|
285
|
+
}) : String(n.getUTCFullYear());
|
|
286
|
+
}
|
|
287
|
+
function D(e, t = "day") {
|
|
288
|
+
let n = new Date(e);
|
|
289
|
+
return t === "year" ? String(n.getUTCFullYear()) : t === "month" ? n.toLocaleDateString(void 0, {
|
|
290
|
+
month: "short",
|
|
291
|
+
year: "numeric",
|
|
292
|
+
timeZone: "UTC"
|
|
293
|
+
}) : n.toLocaleDateString(void 0, {
|
|
294
|
+
year: "numeric",
|
|
295
|
+
month: "short",
|
|
296
|
+
day: "numeric",
|
|
297
|
+
timeZone: "UTC"
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
function O(e) {
|
|
301
|
+
let t = !0, n = !0, r = !1;
|
|
302
|
+
for (let i of e) {
|
|
303
|
+
if (!Number.isFinite(i)) continue;
|
|
304
|
+
r = !0;
|
|
305
|
+
let e = new Date(i);
|
|
306
|
+
if (e.getUTCDate() !== 1 || e.getUTCHours() !== 0) {
|
|
307
|
+
t = !1, n = !1;
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
e.getUTCMonth() !== 0 && (n = !1);
|
|
311
|
+
}
|
|
312
|
+
return r ? n ? "year" : t ? "month" : "day" : "day";
|
|
313
|
+
}
|
|
314
|
+
function k(e, t, n, r) {
|
|
315
|
+
let i = Math.max(1, Math.ceil((r ? 18 : 60) / Math.max(n, .001))), a = [];
|
|
316
|
+
for (let n = 0; n < e.length; n += i) a.push({
|
|
317
|
+
label: e[n],
|
|
318
|
+
x: t(n)
|
|
319
|
+
});
|
|
320
|
+
return a;
|
|
321
|
+
}
|
|
322
|
+
function A(e, t) {
|
|
323
|
+
if (e == null) return null;
|
|
324
|
+
if (typeof e == "number") {
|
|
325
|
+
if (!Number.isFinite(e)) return null;
|
|
326
|
+
let n = Math.abs(e);
|
|
327
|
+
return {
|
|
328
|
+
lo: t - n,
|
|
329
|
+
hi: t + n
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
return !Number.isFinite(e.lo) || !Number.isFinite(e.hi) ? null : {
|
|
333
|
+
lo: Math.min(e.lo, e.hi),
|
|
334
|
+
hi: Math.max(e.lo, e.hi)
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
//#endregion
|
|
338
|
+
//#region ../grid/dist/chart-stats.js
|
|
339
|
+
function j(e, t = 1.5) {
|
|
340
|
+
let n = e.filter((e) => Number.isFinite(e)).slice().sort((e, t) => e - t);
|
|
341
|
+
if (!n.length) return null;
|
|
342
|
+
let r = (e) => {
|
|
343
|
+
let t = (n.length - 1) * e, r = Math.floor(t), i = Math.ceil(t);
|
|
344
|
+
return r === i ? n[r] : n[r] + (n[i] - n[r]) * (t - r);
|
|
345
|
+
}, i = r(.25), a = r(.5), o = r(.75), s = i - t * (o - i), c = o + t * (o - i), l = n.filter((e) => e >= s && e <= c), u = n.filter((e) => e < s || e > c);
|
|
346
|
+
return {
|
|
347
|
+
min: l.length ? l[0] : n[0],
|
|
348
|
+
q1: i,
|
|
349
|
+
median: a,
|
|
350
|
+
q3: o,
|
|
351
|
+
max: l.length ? l[l.length - 1] : n[n.length - 1],
|
|
352
|
+
...u.length ? { outliers: u } : {}
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
var M = (e) => ({
|
|
356
|
+
fitted: e.map(() => NaN),
|
|
357
|
+
r2: 0,
|
|
358
|
+
equation: "",
|
|
359
|
+
predict: () => NaN
|
|
360
|
+
}), N = (e, t) => t ? e.map((e, n) => t[n] ?? NaN) : e.map((e, t) => t);
|
|
361
|
+
function P(e, t) {
|
|
362
|
+
let n = 0, r = 0;
|
|
363
|
+
for (let i = 0; i < e.length; i += 1) Number.isFinite(e[i]) && Number.isFinite(t[i]) && (n += 1, r += e[i]);
|
|
364
|
+
if (n < 2) return 0;
|
|
365
|
+
r /= n;
|
|
366
|
+
let i = 0, a = 0;
|
|
367
|
+
for (let n = 0; n < e.length; n += 1) !Number.isFinite(e[n]) || !Number.isFinite(t[n]) || (i += (e[n] - t[n]) ** 2, a += (e[n] - r) ** 2);
|
|
368
|
+
return a === 0 ? +(i === 0) : Math.max(0, Math.min(1, 1 - i / a));
|
|
369
|
+
}
|
|
370
|
+
var F = (e) => Math.abs(e) >= 1e3 || Math.abs(e) < .001 && e !== 0 ? e.toExponential(2) : String(Math.round(e * 1e3) / 1e3);
|
|
371
|
+
function I(e, t) {
|
|
372
|
+
let n = t.length, r = e.map((e, n) => [...e, t[n]]);
|
|
373
|
+
for (let e = 0; e < n; e += 1) {
|
|
374
|
+
let t = e;
|
|
375
|
+
for (let i = e + 1; i < n; i += 1) Math.abs(r[i][e]) > Math.abs(r[t][e]) && (t = i);
|
|
376
|
+
if (Math.abs(r[t][e]) < 1e-12) return null;
|
|
377
|
+
[r[e], r[t]] = [r[t], r[e]];
|
|
378
|
+
for (let t = 0; t < n; t += 1) {
|
|
379
|
+
if (t === e) continue;
|
|
380
|
+
let i = r[t][e] / r[e][e];
|
|
381
|
+
for (let a = e; a <= n; a += 1) r[t][a] -= i * r[e][a];
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return r.map((e, t) => e[n] / e[t]);
|
|
385
|
+
}
|
|
386
|
+
function L(e, t, n) {
|
|
387
|
+
let r = Math.max(1, Math.min(6, Math.round(t))), i = e.length, a = M(e), o = N(e, n), s = [];
|
|
388
|
+
for (let t = 0; t < i; t += 1) Number.isFinite(e[t]) && Number.isFinite(o[t]) && s.push(t);
|
|
389
|
+
if (s.length <= r) return a;
|
|
390
|
+
let c = Infinity, l = -Infinity;
|
|
391
|
+
for (let e of s) c = Math.min(c, o[e]), l = Math.max(l, o[e]);
|
|
392
|
+
n || (c = 0, l = Math.max(1, i - 1));
|
|
393
|
+
let u = Math.max(l - c, 1e-12), d = (e) => 2 * (e - c) / u - 1, f = Array.from({ length: r + 1 }, () => Array(r + 1).fill(0)), p = Array(r + 1).fill(0);
|
|
394
|
+
for (let t of s) {
|
|
395
|
+
let n = d(o[t]), i = e[t], a = [1];
|
|
396
|
+
for (let e = 1; e <= 2 * r; e += 1) a.push(a[e - 1] * n);
|
|
397
|
+
for (let e = 0; e <= r; e += 1) {
|
|
398
|
+
p[e] += a[e] * i;
|
|
399
|
+
for (let t = 0; t <= r; t += 1) f[e][t] += a[e + t];
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
let m = I(f, p);
|
|
403
|
+
if (!m) return a;
|
|
404
|
+
let h = (e) => {
|
|
405
|
+
let t = d(e), n = 0, i = 1;
|
|
406
|
+
for (let e = 0; e <= r; e += 1) n += m[e] * i, i *= t;
|
|
407
|
+
return n;
|
|
408
|
+
}, g = e.map((e, t) => Number.isFinite(e) && Number.isFinite(o[t]) ? h(o[t]) : NaN), _ = m.map((e, t) => t === 0 ? F(e) : `${F(e)} u^${t}`).reverse(), v = n ? `u = 2(x - ${F(c)})/${F(u)} - 1` : `u = 2x/${u} - 1`;
|
|
409
|
+
return {
|
|
410
|
+
fitted: g,
|
|
411
|
+
r2: P(e, g),
|
|
412
|
+
equation: `y = ${_.join(" + ")} (${v})`,
|
|
413
|
+
predict: h
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
function R(e, t) {
|
|
417
|
+
let n = N(e, t), { slope: r, intercept: i, ok: a } = z(n, e);
|
|
418
|
+
if (!a) return M(e);
|
|
419
|
+
let o = (e) => r * e + i, s = e.map((e, t) => Number.isFinite(e) && Number.isFinite(n[t]) ? o(n[t]) : NaN);
|
|
420
|
+
return {
|
|
421
|
+
fitted: s,
|
|
422
|
+
r2: P(e, s),
|
|
423
|
+
equation: `y = ${F(r)} x + ${F(i)}`,
|
|
424
|
+
predict: o
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
function ee(e, t) {
|
|
428
|
+
let n = N(e, t), { slope: r, intercept: i, ok: a } = z(n, e.map((e) => Number.isFinite(e) && e > 0 ? Math.log(e) : NaN));
|
|
429
|
+
if (!a) return M(e);
|
|
430
|
+
let o = Math.exp(i), s = (e) => o * Math.exp(r * e), c = e.map((e, t) => Number.isFinite(e) && e > 0 && Number.isFinite(n[t]) ? s(n[t]) : NaN);
|
|
431
|
+
return {
|
|
432
|
+
fitted: c,
|
|
433
|
+
r2: P(e, c),
|
|
434
|
+
equation: `y = ${F(o)} e^(${F(r)} x)`,
|
|
435
|
+
predict: s
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
function te(e, t) {
|
|
439
|
+
let n = +!t, r = N(e, t).map((e) => e + n > 0 ? Math.log(e + n) : NaN), { slope: i, intercept: a, ok: o } = z(r, e);
|
|
440
|
+
if (!o) return M(e);
|
|
441
|
+
let s = (e) => e + n > 0 ? a + i * Math.log(e + n) : NaN, c = e.map((e, t) => Number.isFinite(e) && Number.isFinite(r[t]) ? a + i * r[t] : NaN), l = t ? "x" : "x + 1";
|
|
442
|
+
return {
|
|
443
|
+
fitted: c,
|
|
444
|
+
r2: P(e, c),
|
|
445
|
+
equation: `y = ${F(a)} + ${F(i)} ln(${l})`,
|
|
446
|
+
predict: s
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
function ne(e, t) {
|
|
450
|
+
let n = +!t, r = N(e, t).map((e) => e + n > 0 ? Math.log(e + n) : NaN), { slope: i, intercept: a, ok: o } = z(r, e.map((e) => Number.isFinite(e) && e > 0 ? Math.log(e) : NaN));
|
|
451
|
+
if (!o) return M(e);
|
|
452
|
+
let s = Math.exp(a), c = (e) => e + n > 0 ? s * (e + n) ** +i : NaN, l = e.map((e, t) => Number.isFinite(e) && e > 0 && Number.isFinite(r[t]) ? s * Math.exp(i * r[t]) : NaN), u = t ? "x" : "(x + 1)";
|
|
453
|
+
return {
|
|
454
|
+
fitted: l,
|
|
455
|
+
r2: P(e, l),
|
|
456
|
+
equation: `y = ${F(s)} ${u}^${F(i)}`,
|
|
457
|
+
predict: c
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
function z(e, t) {
|
|
461
|
+
let n = 0, r = 0, i = 0, a = 0, o = 0;
|
|
462
|
+
for (let s = 0; s < t.length; s += 1) {
|
|
463
|
+
let c = e[s], l = t[s];
|
|
464
|
+
!Number.isFinite(c) || !Number.isFinite(l) || (n += 1, r += c, i += l, a += c * c, o += c * l);
|
|
465
|
+
}
|
|
466
|
+
if (n < 2) return {
|
|
467
|
+
slope: 0,
|
|
468
|
+
intercept: 0,
|
|
469
|
+
ok: !1
|
|
470
|
+
};
|
|
471
|
+
let s = n * a - r * r, c = s === 0 ? 0 : (n * o - r * i) / s;
|
|
472
|
+
return {
|
|
473
|
+
slope: c,
|
|
474
|
+
intercept: (i - c * r) / n,
|
|
475
|
+
ok: !0
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
function B(e, t) {
|
|
479
|
+
if (t < 1) return e.slice();
|
|
480
|
+
let n = Array(e.length).fill(NaN), r = 0, i = 0;
|
|
481
|
+
for (let a = 0; a < e.length; a += 1) {
|
|
482
|
+
let o = e[a];
|
|
483
|
+
if (Number.isFinite(o) && (r += o, i += 1), a >= t) {
|
|
484
|
+
let n = e[a - t];
|
|
485
|
+
Number.isFinite(n) && (r -= n, --i);
|
|
486
|
+
}
|
|
487
|
+
a >= t - 1 && i > 0 && (n[a] = r / i);
|
|
488
|
+
}
|
|
489
|
+
return n;
|
|
490
|
+
}
|
|
491
|
+
function V(e, t) {
|
|
492
|
+
let n = 2 / (Math.max(1, t) + 1), r = Array(e.length).fill(NaN), i = null;
|
|
493
|
+
for (let t = 0; t < e.length; t += 1) {
|
|
494
|
+
let a = e[t];
|
|
495
|
+
if (!Number.isFinite(a)) {
|
|
496
|
+
r[t] = i ?? NaN;
|
|
497
|
+
continue;
|
|
498
|
+
}
|
|
499
|
+
i = i == null ? a : n * a + (1 - n) * i, r[t] = i;
|
|
500
|
+
}
|
|
501
|
+
return r;
|
|
502
|
+
}
|
|
503
|
+
function re(e) {
|
|
504
|
+
return e !== "sum" && e !== "avg" && e !== "count";
|
|
505
|
+
}
|
|
506
|
+
function ie(e, t) {
|
|
507
|
+
let n = e.length;
|
|
508
|
+
switch (t) {
|
|
509
|
+
case "count": return n;
|
|
510
|
+
case "sum": {
|
|
511
|
+
let t = 0;
|
|
512
|
+
for (let n of e) t += n;
|
|
513
|
+
return t;
|
|
514
|
+
}
|
|
515
|
+
case "avg": {
|
|
516
|
+
if (!n) return 0;
|
|
517
|
+
let t = 0;
|
|
518
|
+
for (let n of e) t += n;
|
|
519
|
+
return t / n;
|
|
520
|
+
}
|
|
521
|
+
case "min": return n ? Math.min(...e) : NaN;
|
|
522
|
+
case "max": return n ? Math.max(...e) : NaN;
|
|
523
|
+
case "first": return n ? e[0] : NaN;
|
|
524
|
+
case "last": return n ? e[n - 1] : NaN;
|
|
525
|
+
case "countDistinct": return new Set(e).size;
|
|
526
|
+
case "median": return H(e, 50);
|
|
527
|
+
default: {
|
|
528
|
+
let n = /^p(\d+(?:\.\d+)?)$/.exec(t);
|
|
529
|
+
return n ? H(e, Number(n[1])) : NaN;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
function H(e, t) {
|
|
534
|
+
let n = e.filter((e) => Number.isFinite(e)).slice().sort((e, t) => e - t);
|
|
535
|
+
if (!n.length) return NaN;
|
|
536
|
+
let r = (n.length - 1) * Math.max(0, Math.min(100, t)) / 100, i = Math.floor(r), a = Math.ceil(r);
|
|
537
|
+
return i === a ? n[i] : n[i] + (n[a] - n[i]) * (r - i);
|
|
538
|
+
}
|
|
539
|
+
function U(e, t) {
|
|
540
|
+
let n = e instanceof Date ? e.getTime() : typeof e == "number" ? e : Date.parse(e);
|
|
541
|
+
if (!Number.isFinite(n)) return "";
|
|
542
|
+
let r = new Date(n), i = r.getUTCFullYear(), a = r.getUTCMonth(), o;
|
|
543
|
+
switch (t) {
|
|
544
|
+
case "day":
|
|
545
|
+
o = new Date(Date.UTC(i, a, r.getUTCDate()));
|
|
546
|
+
break;
|
|
547
|
+
case "week": {
|
|
548
|
+
let e = (r.getUTCDay() + 6) % 7;
|
|
549
|
+
o = new Date(Date.UTC(i, a, r.getUTCDate() - e));
|
|
550
|
+
break;
|
|
551
|
+
}
|
|
552
|
+
case "month":
|
|
553
|
+
o = new Date(Date.UTC(i, a, 1));
|
|
554
|
+
break;
|
|
555
|
+
case "quarter":
|
|
556
|
+
o = new Date(Date.UTC(i, a - a % 3, 1));
|
|
557
|
+
break;
|
|
558
|
+
default: o = new Date(Date.UTC(i, 0, 1));
|
|
559
|
+
}
|
|
560
|
+
return o.toISOString().slice(0, 10);
|
|
561
|
+
}
|
|
562
|
+
function ae(e, t = {}) {
|
|
563
|
+
let n = e.filter((e) => Number.isFinite(e));
|
|
564
|
+
if (!n.length) return {
|
|
565
|
+
categories: [],
|
|
566
|
+
counts: [],
|
|
567
|
+
edges: [],
|
|
568
|
+
width: 0
|
|
569
|
+
};
|
|
570
|
+
let r = t.min ?? Math.min(...n), i = t.max ?? Math.max(...n);
|
|
571
|
+
i <= r && (i = r + 1);
|
|
572
|
+
let a;
|
|
573
|
+
if (t.bins && t.bins > 0) a = Math.round(t.bins);
|
|
574
|
+
else if (t.binWidth && t.binWidth > 0) a = Math.max(1, Math.ceil((i - r) / t.binWidth));
|
|
575
|
+
else if (t.method === "sqrt") a = Math.ceil(Math.sqrt(n.length));
|
|
576
|
+
else if (t.method === "fd") {
|
|
577
|
+
let e = H(n, 75) - H(n, 25), t = e > 0 ? 2 * e / Math.cbrt(n.length) : 0;
|
|
578
|
+
a = Math.ceil(t > 0 ? (i - r) / t : Math.log2(n.length) + 1);
|
|
579
|
+
} else a = Math.ceil(Math.log2(n.length) + 1);
|
|
580
|
+
a = Math.max(1, Math.min(1e3, a));
|
|
581
|
+
let o = t.binWidth && t.binWidth > 0 ? t.binWidth : (i - r) / a, s = o >= 1 ? 0 : Math.min(6, Math.ceil(-Math.log10(o)) + 1), c = (e) => Number(e.toFixed(s)), l = [];
|
|
582
|
+
for (let e = 0; e <= a; e += 1) l.push(c(r + e * o));
|
|
583
|
+
let u = Array(a).fill(0);
|
|
584
|
+
for (let e of n) {
|
|
585
|
+
let t = Math.floor((e - r) / o);
|
|
586
|
+
t >= a && (t = a - 1), t < 0 && (t = 0), u[t] = (u[t] ?? 0) + 1;
|
|
587
|
+
}
|
|
588
|
+
return {
|
|
589
|
+
categories: u.map((e, t) => String(c(r + (t + .5) * o))),
|
|
590
|
+
counts: u,
|
|
591
|
+
edges: l,
|
|
592
|
+
width: o
|
|
593
|
+
};
|
|
594
|
+
}
|
|
595
|
+
//#endregion
|
|
596
|
+
//#region ../grid/dist/chart-axes.js
|
|
597
|
+
function W(e, t) {
|
|
598
|
+
let n = e.type ?? t;
|
|
599
|
+
return n === "candlestick" || n === "ohlc" || e.ohlc ? "candle" : n === "boxplot" || e.boxes ? "box" : n === "line" || n === "area" ? n : n === "stream" ? "area" : n === "range-bar" || n === "range-area" || n === "lollipop" || n === "dumbbell" ? n : n === "scatter" && e.type === "scatter" ? "scatter" : "bar";
|
|
600
|
+
}
|
|
601
|
+
function oe(e, t, n, r = [], i = !1, a = {}) {
|
|
602
|
+
let o = Infinity, s = -Infinity, c = (e) => {
|
|
603
|
+
Number.isFinite(e) && (i && e <= 0 || (e < o && (o = e), e > s && (s = e)));
|
|
604
|
+
};
|
|
605
|
+
for (let e of r) c(e);
|
|
606
|
+
let l = e.filter((e) => e.kind === "bar" || e.kind === "area"), u = e.filter((e) => e.kind === "line" || e.kind === "scatter" || e.kind === "lollipop");
|
|
607
|
+
for (let t of e) if (t.kind === "range-bar" || t.kind === "range-area" || t.kind === "dumbbell") {
|
|
608
|
+
for (let e of t.values) c(e);
|
|
609
|
+
for (let e of t.lowValues ?? []) c(e);
|
|
610
|
+
}
|
|
611
|
+
let d = /* @__PURE__ */ new Map();
|
|
612
|
+
l.forEach((e, t) => {
|
|
613
|
+
let r = e.stack ? `${e.kind}:${e.stack}` : n ? e.kind : `#${t}`, i = d.get(r);
|
|
614
|
+
i ? i.push(e) : d.set(r, [e]);
|
|
615
|
+
});
|
|
616
|
+
for (let e of d.values()) {
|
|
617
|
+
if (e.length === 1) {
|
|
618
|
+
for (let t of e[0].values) c(t);
|
|
619
|
+
continue;
|
|
620
|
+
}
|
|
621
|
+
for (let n = 0; n < t.length; n += 1) {
|
|
622
|
+
let t = 0, r = 0;
|
|
623
|
+
for (let i of e) {
|
|
624
|
+
let e = i.values[n] ?? 0;
|
|
625
|
+
e >= 0 ? t += e : r += e;
|
|
626
|
+
}
|
|
627
|
+
c(t), c(r);
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
for (let e of u) for (let t of e.values) c(t);
|
|
631
|
+
for (let t of e) if (t.kind === "candle") for (let e of t.ohlc ?? []) e && (c(e.h), c(e.l));
|
|
632
|
+
for (let t of e) if (t.kind === "box") {
|
|
633
|
+
for (let e of t.boxes ?? []) if (e) {
|
|
634
|
+
c(e.min), c(e.max);
|
|
635
|
+
for (let t of e.outliers ?? []) c(t);
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
for (let t of e) t.errors && t.errors.forEach((e, n) => {
|
|
639
|
+
let r = A(e, t.values[n] ?? 0);
|
|
640
|
+
r && (c(r.lo), c(r.hi));
|
|
641
|
+
});
|
|
642
|
+
if (o === Infinity && (o = +!!i, s = i ? 10 : 1), (l.length || e.some((e) => e.kind === "lollipop")) && !i && (o = Math.min(o, 0), s = Math.max(s, 0)), i) {
|
|
643
|
+
let e = v(o, s), t = a.min != null && a.min > 0 ? a.min : e.min, n = a.max != null && a.max > t ? a.max : e.max;
|
|
644
|
+
return t === e.min && n === e.max ? e : {
|
|
645
|
+
min: t,
|
|
646
|
+
max: n,
|
|
647
|
+
step: e.step,
|
|
648
|
+
ticks: e.ticks.filter((e) => e >= t && e <= n)
|
|
649
|
+
};
|
|
650
|
+
}
|
|
651
|
+
return S(o, s, a);
|
|
652
|
+
}
|
|
653
|
+
function G(e) {
|
|
654
|
+
let t = e.axes;
|
|
655
|
+
if (!t) return null;
|
|
656
|
+
let { x: n, y: r, w: i, h: a } = e.plot, o = (e) => (t) => {
|
|
657
|
+
let n = b(t, e.min, e.max, e.log);
|
|
658
|
+
return n === null ? NaN : (e.reversed && (n = 1 - n), r + a - n * a);
|
|
659
|
+
}, s = o(t.y), c = t.y2 ? o(t.y2) : s, l = (e) => (t) => {
|
|
660
|
+
let n = a === 0 ? 0 : (r + a - t) / a;
|
|
661
|
+
if (e.reversed && (n = 1 - n), !e.log) return e.min + n * (e.max - e.min);
|
|
662
|
+
let i = Math.log10(e.min);
|
|
663
|
+
return 10 ** (i + n * (Math.log10(e.max) - i));
|
|
664
|
+
}, u = t.x, d = u && u.max - u.min || 1, f = u?.log && Math.log10(u.max) - Math.log10(u.min) || 1, p = (e) => {
|
|
665
|
+
if (!u || !Number.isFinite(e) || u.log && e <= 0) return NaN;
|
|
666
|
+
let t = u.log ? (Math.log10(e) - Math.log10(u.min)) / f : (e - u.min) / d;
|
|
667
|
+
return u.reversed && (t = 1 - t), n + t * i;
|
|
668
|
+
}, m = (e) => {
|
|
669
|
+
if (u?.values) {
|
|
670
|
+
let t = u.values[Math.round(e)];
|
|
671
|
+
if (t != null && Number.isFinite(t)) return p(t);
|
|
672
|
+
}
|
|
673
|
+
let r = n + t.slot * e + t.slot / 2;
|
|
674
|
+
return t.xReversed ? n + i - (r - n) : r;
|
|
675
|
+
}, h = (n) => {
|
|
676
|
+
if (u) {
|
|
677
|
+
if (n instanceof Date) return p(n.getTime());
|
|
678
|
+
if (typeof n == "number") return p(n);
|
|
679
|
+
let t = u.type === "time" ? Date.parse(n) : Number(n);
|
|
680
|
+
if (Number.isFinite(t)) return p(t);
|
|
681
|
+
let r = e.xTicks.findIndex((e) => e.label === n);
|
|
682
|
+
return r >= 0 ? e.xTicks[r].x : NaN;
|
|
683
|
+
}
|
|
684
|
+
if (typeof n == "number") return m(n);
|
|
685
|
+
let r = n instanceof Date ? n.toISOString() : n, i = t.labels ? t.labels.indexOf(r) : -1;
|
|
686
|
+
return i >= 0 ? m(i) : NaN;
|
|
687
|
+
}, g = (e) => {
|
|
688
|
+
let r = i === 0 ? 0 : (e - n) / i;
|
|
689
|
+
return (u ? u.reversed : t.xReversed) && (r = 1 - r), u?.log ? 10 ** (Math.log10(u.min) + r * f) : u ? u.min + r * d : Math.max(0, Math.min(t.count - 1, r * t.count - .5));
|
|
690
|
+
};
|
|
691
|
+
return {
|
|
692
|
+
xOf: m,
|
|
693
|
+
yOf: (e, t) => t === "right" ? c(e) : s(e),
|
|
694
|
+
xInvert: (e) => {
|
|
695
|
+
if (u?.values) {
|
|
696
|
+
let t = g(e), n = 0, r = Infinity;
|
|
697
|
+
return u.values.forEach((e, i) => {
|
|
698
|
+
let a = Math.abs(e - t);
|
|
699
|
+
a < r && (r = a, n = i);
|
|
700
|
+
}), n;
|
|
701
|
+
}
|
|
702
|
+
let r = Math.floor((e - n) / (t.slot || 1)), i = t.xReversed ? t.count - 1 - r : r;
|
|
703
|
+
return Math.max(0, Math.min(t.count - 1, i));
|
|
704
|
+
},
|
|
705
|
+
yInvert: (e, n) => n === "right" && t.y2 ? l(t.y2)(e) : l(t.y)(e),
|
|
706
|
+
xOfValue: h,
|
|
707
|
+
xInvertValue: g
|
|
708
|
+
};
|
|
709
|
+
}
|
|
710
|
+
function se(e) {
|
|
711
|
+
let t = e.xAxis ?? {}, n = e.yAxis ?? {}, r = e.y2Axis ?? {}, i = (e, t) => ({
|
|
712
|
+
...e,
|
|
713
|
+
type: e.type ?? t.type,
|
|
714
|
+
scale: e.scale ?? t.scale,
|
|
715
|
+
title: e.title ?? t.title,
|
|
716
|
+
gridLines: e.gridLines ?? t.gridLines,
|
|
717
|
+
labels: e.labels !== !1,
|
|
718
|
+
nice: e.nice !== !1,
|
|
719
|
+
reversed: e.reversed === !0
|
|
720
|
+
});
|
|
721
|
+
return {
|
|
722
|
+
x: i(t, {
|
|
723
|
+
type: e.xType ?? "category",
|
|
724
|
+
scale: "linear",
|
|
725
|
+
title: e.xAxisTitle,
|
|
726
|
+
gridLines: !1
|
|
727
|
+
}),
|
|
728
|
+
y: i(n, {
|
|
729
|
+
type: "category",
|
|
730
|
+
scale: e.yScale ?? "linear",
|
|
731
|
+
title: e.yAxisTitle,
|
|
732
|
+
gridLines: !0
|
|
733
|
+
}),
|
|
734
|
+
y2: i(r, {
|
|
735
|
+
type: "category",
|
|
736
|
+
scale: e.y2Scale ?? "linear",
|
|
737
|
+
title: e.y2AxisTitle,
|
|
738
|
+
gridLines: !1
|
|
739
|
+
})
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
var ce = 22, le = 16, ue = 16;
|
|
743
|
+
function de(e, t, n) {
|
|
744
|
+
let r = (e.title ?? "").trim(), i = (e.subtitle ?? "").trim(), a = (e.caption ?? "").trim(), o = 0, s = null, c = null;
|
|
745
|
+
r && (o += ce, s = {
|
|
746
|
+
x: t / 2,
|
|
747
|
+
y: o - 6,
|
|
748
|
+
text: r
|
|
749
|
+
}), i && (o += le, c = {
|
|
750
|
+
x: t / 2,
|
|
751
|
+
y: o - 4,
|
|
752
|
+
text: i
|
|
753
|
+
}), o && (o += 4);
|
|
754
|
+
let l = 0, u = null;
|
|
755
|
+
return a && (l = ue, u = {
|
|
756
|
+
x: 8,
|
|
757
|
+
y: n - 5,
|
|
758
|
+
text: a
|
|
759
|
+
}), {
|
|
760
|
+
top: o,
|
|
761
|
+
bottom: l,
|
|
762
|
+
title: s,
|
|
763
|
+
subtitle: c,
|
|
764
|
+
caption: u
|
|
765
|
+
};
|
|
766
|
+
}
|
|
767
|
+
function fe(e, t, n, r, i) {
|
|
768
|
+
return n.formatter ? n.formatter(e, t) : i(e, n.format ?? r.valueFormat, r);
|
|
769
|
+
}
|
|
770
|
+
//#endregion
|
|
771
|
+
//#region ../grid/dist/chart-decimate.js
|
|
772
|
+
var K = [
|
|
773
|
+
"values",
|
|
774
|
+
"rowIds",
|
|
775
|
+
"upperValues",
|
|
776
|
+
"lowerValues",
|
|
777
|
+
"ohlc",
|
|
778
|
+
"boxes",
|
|
779
|
+
"errors",
|
|
780
|
+
"markers",
|
|
781
|
+
"colors",
|
|
782
|
+
"lowValues",
|
|
783
|
+
"targets",
|
|
784
|
+
"volumes"
|
|
785
|
+
], pe = ["waterfallTotals"];
|
|
786
|
+
function q(e, t) {
|
|
787
|
+
let n = (e) => {
|
|
788
|
+
if (!e) return;
|
|
789
|
+
let n = Array(t.length);
|
|
790
|
+
for (let r = 0; r < t.length; r += 1) n[r] = e[t[r]];
|
|
791
|
+
return n;
|
|
792
|
+
}, r = e.series.map((e) => {
|
|
793
|
+
let t = {
|
|
794
|
+
...e,
|
|
795
|
+
values: n(e.values) ?? []
|
|
796
|
+
};
|
|
797
|
+
for (let r of K) {
|
|
798
|
+
if (r === "values") continue;
|
|
799
|
+
let i = e[r];
|
|
800
|
+
i && (t[r] = n(i));
|
|
801
|
+
}
|
|
802
|
+
return t;
|
|
803
|
+
}), i = {
|
|
804
|
+
...e,
|
|
805
|
+
categories: n(e.categories) ?? [],
|
|
806
|
+
series: r
|
|
807
|
+
};
|
|
808
|
+
for (let t of pe) {
|
|
809
|
+
let r = e[t];
|
|
810
|
+
r && (i[t] = n(r));
|
|
811
|
+
}
|
|
812
|
+
return i;
|
|
813
|
+
}
|
|
814
|
+
function me(e, t, n) {
|
|
815
|
+
let r = e.length, i = (e) => n && Number.isFinite(n[e]) ? n[e] : e;
|
|
816
|
+
if (t >= r || r <= 2) return e.map((e, t) => t);
|
|
817
|
+
if (t < 3) return [0, r - 1];
|
|
818
|
+
let a = [0], o = (r - 2) / (t - 2), s = 0;
|
|
819
|
+
for (let n = 0; n < t - 2; n += 1) {
|
|
820
|
+
let t = Math.floor((n + 1) * o) + 1, c = Math.min(Math.floor((n + 2) * o) + 1, r), l = 0, u = 0, d = 0;
|
|
821
|
+
for (let n = t; n < c; n += 1) {
|
|
822
|
+
let t = e[n];
|
|
823
|
+
Number.isFinite(t) && (l += i(n), u += t, d += 1);
|
|
824
|
+
}
|
|
825
|
+
d ? (l /= d, u /= d) : (l = (i(t) + i(Math.min(c, r - 1))) / 2, u = e[s]);
|
|
826
|
+
let f = Math.floor(n * o) + 1, p = Math.min(Math.floor((n + 1) * o) + 1, r), m = i(s), h = Number.isFinite(e[s]) ? e[s] : 0, g = -1, _ = -1;
|
|
827
|
+
for (let t = f; t < p; t += 1) {
|
|
828
|
+
let n = e[t];
|
|
829
|
+
if (!Number.isFinite(n)) continue;
|
|
830
|
+
let r = Math.abs((m - l) * (n - h) - (m - i(t)) * (u - h));
|
|
831
|
+
r > _ && (_ = r, g = t);
|
|
832
|
+
}
|
|
833
|
+
g < 0 && (g = f), a.push(g), s = g;
|
|
834
|
+
}
|
|
835
|
+
return a.push(r - 1), a;
|
|
836
|
+
}
|
|
837
|
+
function J(e, t) {
|
|
838
|
+
let n = e.length;
|
|
839
|
+
if (t >= n || n <= 2) return e.map((e, t) => t);
|
|
840
|
+
let r = /* @__PURE__ */ new Set([0, n - 1]), i = n / Math.max(1, t);
|
|
841
|
+
for (let a = 0; a < t; a += 1) {
|
|
842
|
+
let t = Math.floor(a * i), o = Math.min(n, Math.floor((a + 1) * i)), s = -1, c = -1;
|
|
843
|
+
for (let n = t; n < o; n += 1) {
|
|
844
|
+
let t = e[n];
|
|
845
|
+
Number.isFinite(t) && ((s < 0 || t < e[s]) && (s = n), (c < 0 || t > e[c]) && (c = n));
|
|
846
|
+
}
|
|
847
|
+
s >= 0 && r.add(s), c >= 0 && r.add(c);
|
|
848
|
+
}
|
|
849
|
+
return [...r].sort((e, t) => e - t);
|
|
850
|
+
}
|
|
851
|
+
function he(e, t) {
|
|
852
|
+
if (e === !1) return null;
|
|
853
|
+
let n = typeof e == "object" ? e : {}, r = Math.max(8, Math.round(n.target ?? t));
|
|
854
|
+
return {
|
|
855
|
+
method: n.method ?? "lttb",
|
|
856
|
+
target: r,
|
|
857
|
+
threshold: Math.max(r, Math.round(n.threshold ?? r))
|
|
858
|
+
};
|
|
859
|
+
}
|
|
860
|
+
function ge(e, t, n = e.decimate) {
|
|
861
|
+
let r = he(n, t);
|
|
862
|
+
if (!r) return e;
|
|
863
|
+
let i = e.categories.length;
|
|
864
|
+
if (i <= r.threshold || !e.series.length) return e;
|
|
865
|
+
let a = (e) => e === "line" || e === "area";
|
|
866
|
+
if (!a(e.type) && !e.series.every((e) => a(e.type)) || e.series.some((e) => e.type && !a(e.type) || e.ohlc || e.boxes)) return e;
|
|
867
|
+
let o = (e.xAxis?.type ?? e.xType) === "number", s = o && e.xAxis?.scale === "log", c = o ? e.categories.map((e) => {
|
|
868
|
+
let t = Number(e);
|
|
869
|
+
return s ? t > 0 ? Math.log10(t) : NaN : t;
|
|
870
|
+
}) : void 0, l = /* @__PURE__ */ new Set();
|
|
871
|
+
for (let t of e.series) {
|
|
872
|
+
let e = r.method === "minmax" ? J(t.values, Math.floor(r.target / 2)) : me(t.values, r.target, c);
|
|
873
|
+
for (let t of e) l.add(t);
|
|
874
|
+
}
|
|
875
|
+
let u = [...l].sort((e, t) => e - t);
|
|
876
|
+
return u.length >= i ? e : q(e, u);
|
|
877
|
+
}
|
|
878
|
+
//#endregion
|
|
879
|
+
//#region ../grid/dist/chart-indicators.js
|
|
880
|
+
var Y = (e) => Array(e).fill(NaN);
|
|
881
|
+
function _e(e, t) {
|
|
882
|
+
let n = e.length, r = Math.max(1, Math.floor(t)), i = Y(n), a = r * (r + 1) / 2;
|
|
883
|
+
for (let t = r - 1; t < n; t += 1) {
|
|
884
|
+
let n = 0, o = !0;
|
|
885
|
+
for (let i = 0; i < r; i += 1) {
|
|
886
|
+
let a = e[t - i];
|
|
887
|
+
if (!Number.isFinite(a)) {
|
|
888
|
+
o = !1;
|
|
889
|
+
break;
|
|
890
|
+
}
|
|
891
|
+
n += a * (r - i);
|
|
892
|
+
}
|
|
893
|
+
o && (i[t] = n / a);
|
|
894
|
+
}
|
|
895
|
+
return i;
|
|
896
|
+
}
|
|
897
|
+
function ve(e, t = 20, n = 2) {
|
|
898
|
+
let r = e.length, i = Math.max(1, Math.floor(t)), a = B(e, i), o = Y(r), s = Y(r);
|
|
899
|
+
for (let t = i - 1; t < r; t += 1) {
|
|
900
|
+
let r = a[t];
|
|
901
|
+
if (!Number.isFinite(r)) continue;
|
|
902
|
+
let c = 0, l = 0;
|
|
903
|
+
for (let n = t - i + 1; n <= t; n += 1) {
|
|
904
|
+
let t = e[n];
|
|
905
|
+
Number.isFinite(t) && (c += (t - r) * (t - r), l += 1);
|
|
906
|
+
}
|
|
907
|
+
let u = l ? Math.sqrt(c / l) : 0;
|
|
908
|
+
o[t] = r + n * u, s[t] = r - n * u;
|
|
909
|
+
}
|
|
910
|
+
return {
|
|
911
|
+
middle: a,
|
|
912
|
+
upper: o,
|
|
913
|
+
lower: s
|
|
914
|
+
};
|
|
915
|
+
}
|
|
916
|
+
function ye(e, t = 14) {
|
|
917
|
+
let n = e.length, r = Math.max(1, Math.floor(t)), i = Y(n);
|
|
918
|
+
if (n <= r) return i;
|
|
919
|
+
let a = 0, o = 0;
|
|
920
|
+
for (let t = 1; t <= r; t += 1) {
|
|
921
|
+
let n = e[t] - e[t - 1];
|
|
922
|
+
n > 0 ? a += n : o -= n;
|
|
923
|
+
}
|
|
924
|
+
let s = a / r, c = o / r, l = (e, t) => t === 0 ? 100 : 100 - 100 / (1 + e / t);
|
|
925
|
+
i[r] = l(s, c);
|
|
926
|
+
for (let t = r + 1; t < n; t += 1) {
|
|
927
|
+
let n = e[t] - e[t - 1];
|
|
928
|
+
s = (s * (r - 1) + (n > 0 ? n : 0)) / r, c = (c * (r - 1) + (n < 0 ? -n : 0)) / r, i[t] = l(s, c);
|
|
929
|
+
}
|
|
930
|
+
return i;
|
|
931
|
+
}
|
|
932
|
+
function be(e, t = 12, n = 26, r = 9) {
|
|
933
|
+
let i = e.length, a = V(e, t), o = V(e, n), s = Y(i);
|
|
934
|
+
for (let e = n - 1; e < i; e += 1) s[e] = a[e] - o[e];
|
|
935
|
+
let c = Y(i), l = Y(i), u = 2 / (Math.max(1, r) + 1), d = null, f = 0;
|
|
936
|
+
for (let e = 0; e < i; e += 1) {
|
|
937
|
+
let t = s[e];
|
|
938
|
+
Number.isFinite(t) && (f += 1, d = d == null ? t : u * t + (1 - u) * d, f >= r && (c[e] = d, l[e] = t - d));
|
|
939
|
+
}
|
|
940
|
+
return {
|
|
941
|
+
macd: s,
|
|
942
|
+
signal: c,
|
|
943
|
+
histogram: l
|
|
944
|
+
};
|
|
945
|
+
}
|
|
946
|
+
var xe = (e) => (e.h + e.l + e.c) / 3;
|
|
947
|
+
function Se(e, t) {
|
|
948
|
+
let n = e.length, r = Y(n), i = 0, a = 0;
|
|
949
|
+
for (let o = 0; o < n; o += 1) {
|
|
950
|
+
let n = e[o], s = t[o];
|
|
951
|
+
if (!n || !Number.isFinite(s)) {
|
|
952
|
+
r[o] = a > 0 ? i / a : NaN;
|
|
953
|
+
continue;
|
|
954
|
+
}
|
|
955
|
+
i += xe(n) * s, a += s, r[o] = a > 0 ? i / a : NaN;
|
|
956
|
+
}
|
|
957
|
+
return r;
|
|
958
|
+
}
|
|
959
|
+
function Ce(e, t) {
|
|
960
|
+
let n = e[t];
|
|
961
|
+
if (!n) return NaN;
|
|
962
|
+
let r = t > 0 ? e[t - 1] : null;
|
|
963
|
+
return r ? Math.max(n.h - n.l, Math.abs(n.h - r.c), Math.abs(n.l - r.c)) : n.h - n.l;
|
|
964
|
+
}
|
|
965
|
+
function we(e, t = 14) {
|
|
966
|
+
let n = e.length, r = Math.max(1, Math.floor(t)), i = Y(n);
|
|
967
|
+
if (n < r) return i;
|
|
968
|
+
let a = 0;
|
|
969
|
+
for (let t = 0; t < r; t += 1) {
|
|
970
|
+
let n = Ce(e, t);
|
|
971
|
+
if (!Number.isFinite(n)) return i;
|
|
972
|
+
a += n;
|
|
973
|
+
}
|
|
974
|
+
let o = a / r;
|
|
975
|
+
i[r - 1] = o;
|
|
976
|
+
for (let t = r; t < n; t += 1) {
|
|
977
|
+
let n = Ce(e, t);
|
|
978
|
+
if (!Number.isFinite(n)) {
|
|
979
|
+
i[t] = NaN;
|
|
980
|
+
continue;
|
|
981
|
+
}
|
|
982
|
+
o = (o * (r - 1) + n) / r, i[t] = o;
|
|
983
|
+
}
|
|
984
|
+
return i;
|
|
985
|
+
}
|
|
986
|
+
function Te(e, t = 14, n = 3) {
|
|
987
|
+
let r = e.length, i = Math.max(1, Math.floor(t)), a = Y(r);
|
|
988
|
+
for (let t = i - 1; t < r; t += 1) {
|
|
989
|
+
let n = -Infinity, r = Infinity, o = !0;
|
|
990
|
+
for (let a = t - i + 1; a <= t; a += 1) {
|
|
991
|
+
let t = e[a];
|
|
992
|
+
if (!t) {
|
|
993
|
+
o = !1;
|
|
994
|
+
break;
|
|
995
|
+
}
|
|
996
|
+
t.h > n && (n = t.h), t.l < r && (r = t.l);
|
|
997
|
+
}
|
|
998
|
+
let s = e[t]?.c;
|
|
999
|
+
!o || s == null || (a[t] = n === r ? 50 : (s - r) / (n - r) * 100);
|
|
1000
|
+
}
|
|
1001
|
+
let o = Math.max(1, Math.floor(n)), s = Y(r);
|
|
1002
|
+
for (let e = o - 1; e < r; e += 1) {
|
|
1003
|
+
let t = 0, n = !0;
|
|
1004
|
+
for (let r = e - o + 1; r <= e; r += 1) {
|
|
1005
|
+
if (!Number.isFinite(a[r])) {
|
|
1006
|
+
n = !1;
|
|
1007
|
+
break;
|
|
1008
|
+
}
|
|
1009
|
+
t += a[r];
|
|
1010
|
+
}
|
|
1011
|
+
n && (s[e] = t / o);
|
|
1012
|
+
}
|
|
1013
|
+
return {
|
|
1014
|
+
k: a,
|
|
1015
|
+
d: s
|
|
1016
|
+
};
|
|
1017
|
+
}
|
|
1018
|
+
function Ee(e, t) {
|
|
1019
|
+
let n = e.length, r = Y(n), i = 0;
|
|
1020
|
+
for (let a = 0; a < n; a += 1) {
|
|
1021
|
+
let n = t[a];
|
|
1022
|
+
if (!Number.isFinite(e[a]) || !Number.isFinite(n)) {
|
|
1023
|
+
r[a] = i;
|
|
1024
|
+
continue;
|
|
1025
|
+
}
|
|
1026
|
+
a > 0 && Number.isFinite(e[a - 1]) && (e[a] > e[a - 1] ? i += n : e[a] < e[a - 1] && (i -= n)), r[a] = i;
|
|
1027
|
+
}
|
|
1028
|
+
return r;
|
|
1029
|
+
}
|
|
1030
|
+
function De(e, t, n) {
|
|
1031
|
+
return Oe(e, t, n).values;
|
|
1032
|
+
}
|
|
1033
|
+
function Oe(e, t, n) {
|
|
1034
|
+
let r = (e) => e.equation ? {
|
|
1035
|
+
values: e.fitted,
|
|
1036
|
+
r2: e.r2,
|
|
1037
|
+
equation: e.equation
|
|
1038
|
+
} : { values: e.fitted }, i = ke(e, t);
|
|
1039
|
+
return i ? r(i) : { values: je(e, t, n) };
|
|
1040
|
+
}
|
|
1041
|
+
function ke(e, t, n) {
|
|
1042
|
+
if (t === "linear") return R(e, n);
|
|
1043
|
+
if (t === "exp") return ee(e, n);
|
|
1044
|
+
if (t === "log") return te(e, n);
|
|
1045
|
+
if (t === "power") return ne(e, n);
|
|
1046
|
+
let r = /^poly:(\d+)$/.exec(t);
|
|
1047
|
+
return r ? L(e, Number(r[1]), n) : null;
|
|
1048
|
+
}
|
|
1049
|
+
function Ae(e) {
|
|
1050
|
+
let t = /^(sma|ema|wma|bb|poly):(\d+)/.exec(e);
|
|
1051
|
+
return t ? `${t[1] === "poly" ? "poly" : t[1].toUpperCase()} ${t[2]}` : e === "linear" ? "trend" : e;
|
|
1052
|
+
}
|
|
1053
|
+
function je(e, t, n) {
|
|
1054
|
+
if (t === "vwap") return n?.ohlc && n.volumes ? Se(n.ohlc, n.volumes) : e.map(() => NaN);
|
|
1055
|
+
let r = /^bb:(\d+):(\d+(?:\.\d+)?)$/.exec(t);
|
|
1056
|
+
if (r) return ve(e, Number(r[1]), Number(r[2])).middle;
|
|
1057
|
+
let i = /^(sma|ema|wma):(\d+)$/.exec(t);
|
|
1058
|
+
if (!i) return e.map(() => NaN);
|
|
1059
|
+
let a = Number(i[2]);
|
|
1060
|
+
return i[1] === "wma" ? _e(e, a) : i[1] === "ema" ? V(e, a) : B(e, a);
|
|
1061
|
+
}
|
|
1062
|
+
function Me(e, t) {
|
|
1063
|
+
return t.source ? e.series.find((e) => e.label === t.source) ?? null : e.series.find((e) => e.ohlc) ?? e.series[0] ?? null;
|
|
1064
|
+
}
|
|
1065
|
+
function Ne(e) {
|
|
1066
|
+
return e.ohlc ? e.ohlc.map((e) => e ? e.c : NaN) : e.values.slice();
|
|
1067
|
+
}
|
|
1068
|
+
function Pe(e, t) {
|
|
1069
|
+
let n = Me(e, t), r = e.categories.length, i = n ? Ne(n) : Y(r), a = n?.ohlc ?? i.map((e) => Number.isFinite(e) ? {
|
|
1070
|
+
o: e,
|
|
1071
|
+
h: e,
|
|
1072
|
+
l: e,
|
|
1073
|
+
c: e
|
|
1074
|
+
} : null), o = n?.volumes ?? Y(r), s = t.params ?? {}, c = {
|
|
1075
|
+
categories: e.categories,
|
|
1076
|
+
xType: e.xType,
|
|
1077
|
+
xAxis: e.xAxis,
|
|
1078
|
+
height: t.height ?? Math.max(90, Math.round((e.height ?? 300) / 3)),
|
|
1079
|
+
palette: e.palette,
|
|
1080
|
+
valueFormat: "number",
|
|
1081
|
+
locale: e.locale
|
|
1082
|
+
}, l = (e) => e.map(([e, t]) => ({
|
|
1083
|
+
value: e,
|
|
1084
|
+
label: t,
|
|
1085
|
+
dashed: !0
|
|
1086
|
+
}));
|
|
1087
|
+
switch (t.kind) {
|
|
1088
|
+
case "rsi": {
|
|
1089
|
+
let e = s.period ?? 14;
|
|
1090
|
+
return {
|
|
1091
|
+
...c,
|
|
1092
|
+
type: "line",
|
|
1093
|
+
title: `RSI ${e}`,
|
|
1094
|
+
series: [{
|
|
1095
|
+
label: `RSI ${e}`,
|
|
1096
|
+
values: ye(i, e),
|
|
1097
|
+
marker: "none"
|
|
1098
|
+
}],
|
|
1099
|
+
yAxis: {
|
|
1100
|
+
min: 0,
|
|
1101
|
+
max: 100,
|
|
1102
|
+
tickInterval: 50,
|
|
1103
|
+
nice: !1
|
|
1104
|
+
},
|
|
1105
|
+
referenceLines: l([[30, "30"], [70, "70"]])
|
|
1106
|
+
};
|
|
1107
|
+
}
|
|
1108
|
+
case "stochastic": {
|
|
1109
|
+
let e = s.period ?? 14, t = s.smooth ?? 3, { k: n, d: r } = Te(a, e, t);
|
|
1110
|
+
return {
|
|
1111
|
+
...c,
|
|
1112
|
+
type: "line",
|
|
1113
|
+
title: `Stochastic ${e}, ${t}`,
|
|
1114
|
+
series: [{
|
|
1115
|
+
label: "%K",
|
|
1116
|
+
values: n,
|
|
1117
|
+
marker: "none"
|
|
1118
|
+
}, {
|
|
1119
|
+
label: "%D",
|
|
1120
|
+
values: r,
|
|
1121
|
+
marker: "none",
|
|
1122
|
+
dash: [4, 3]
|
|
1123
|
+
}],
|
|
1124
|
+
yAxis: {
|
|
1125
|
+
min: 0,
|
|
1126
|
+
max: 100,
|
|
1127
|
+
tickInterval: 50,
|
|
1128
|
+
nice: !1
|
|
1129
|
+
},
|
|
1130
|
+
referenceLines: l([[20, "20"], [80, "80"]])
|
|
1131
|
+
};
|
|
1132
|
+
}
|
|
1133
|
+
case "macd": {
|
|
1134
|
+
let e = s.fast ?? 12, t = s.slow ?? 26, n = s.signal ?? 9, r = be(i, e, t, n);
|
|
1135
|
+
return {
|
|
1136
|
+
...c,
|
|
1137
|
+
type: "bar",
|
|
1138
|
+
title: `MACD ${e}, ${t}, ${n}`,
|
|
1139
|
+
series: [
|
|
1140
|
+
{
|
|
1141
|
+
label: "Histogram",
|
|
1142
|
+
values: r.histogram,
|
|
1143
|
+
colors: r.histogram.map((e) => e < 0 ? "#ef4444" : "#16a34a")
|
|
1144
|
+
},
|
|
1145
|
+
{
|
|
1146
|
+
label: "MACD",
|
|
1147
|
+
values: r.macd,
|
|
1148
|
+
type: "line",
|
|
1149
|
+
marker: "none"
|
|
1150
|
+
},
|
|
1151
|
+
{
|
|
1152
|
+
label: "Signal",
|
|
1153
|
+
values: r.signal,
|
|
1154
|
+
type: "line",
|
|
1155
|
+
marker: "none",
|
|
1156
|
+
dash: [4, 3]
|
|
1157
|
+
}
|
|
1158
|
+
],
|
|
1159
|
+
referenceLines: l([[0, ""]])
|
|
1160
|
+
};
|
|
1161
|
+
}
|
|
1162
|
+
case "atr": {
|
|
1163
|
+
let e = s.period ?? 14;
|
|
1164
|
+
return {
|
|
1165
|
+
...c,
|
|
1166
|
+
type: "line",
|
|
1167
|
+
title: `ATR ${e}`,
|
|
1168
|
+
series: [{
|
|
1169
|
+
label: `ATR ${e}`,
|
|
1170
|
+
values: we(a, e),
|
|
1171
|
+
marker: "none"
|
|
1172
|
+
}],
|
|
1173
|
+
yAxis: { min: 0 }
|
|
1174
|
+
};
|
|
1175
|
+
}
|
|
1176
|
+
case "obv": return {
|
|
1177
|
+
...c,
|
|
1178
|
+
type: "line",
|
|
1179
|
+
title: "OBV",
|
|
1180
|
+
series: [{
|
|
1181
|
+
label: "OBV",
|
|
1182
|
+
values: Ee(i, o),
|
|
1183
|
+
marker: "none"
|
|
1184
|
+
}],
|
|
1185
|
+
valueFormat: "compact"
|
|
1186
|
+
};
|
|
1187
|
+
default: {
|
|
1188
|
+
let e = a.map((e, t) => {
|
|
1189
|
+
if (!e) return null;
|
|
1190
|
+
let n = t > 0 ? a[t - 1] : null;
|
|
1191
|
+
return (n ? e.c >= n.c : e.c >= e.o) ? "#16a34a" : "#ef4444";
|
|
1192
|
+
});
|
|
1193
|
+
return {
|
|
1194
|
+
...c,
|
|
1195
|
+
type: "bar",
|
|
1196
|
+
title: "Volume",
|
|
1197
|
+
series: [{
|
|
1198
|
+
label: "Volume",
|
|
1199
|
+
values: o.slice(),
|
|
1200
|
+
colors: e
|
|
1201
|
+
}],
|
|
1202
|
+
yAxis: { min: 0 },
|
|
1203
|
+
valueFormat: "compact"
|
|
1204
|
+
};
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
}
|
|
1208
|
+
//#endregion
|
|
1209
|
+
//#region ../grid/dist/chart-financial.js
|
|
1210
|
+
function Fe(e) {
|
|
1211
|
+
let t = Array(e.length), n = null;
|
|
1212
|
+
for (let r = 0; r < e.length; r += 1) {
|
|
1213
|
+
let i = e[r];
|
|
1214
|
+
if (!i || ![
|
|
1215
|
+
i.o,
|
|
1216
|
+
i.h,
|
|
1217
|
+
i.l,
|
|
1218
|
+
i.c
|
|
1219
|
+
].every(Number.isFinite)) {
|
|
1220
|
+
t[r] = null, n = null;
|
|
1221
|
+
continue;
|
|
1222
|
+
}
|
|
1223
|
+
let a = (i.o + i.h + i.l + i.c) / 4, o = n ? (n.o + n.c) / 2 : (i.o + i.c) / 2, s = {
|
|
1224
|
+
o,
|
|
1225
|
+
c: a,
|
|
1226
|
+
h: Math.max(i.h, o, a),
|
|
1227
|
+
l: Math.min(i.l, o, a)
|
|
1228
|
+
};
|
|
1229
|
+
t[r] = s, n = s;
|
|
1230
|
+
}
|
|
1231
|
+
return t;
|
|
1232
|
+
}
|
|
1233
|
+
function Ie(e, t, n) {
|
|
1234
|
+
let r = /* @__PURE__ */ new Map(), i = [];
|
|
1235
|
+
for (let a = 0; a < e.length; a += 1) {
|
|
1236
|
+
let o = Date.parse(e[a]);
|
|
1237
|
+
if (!Number.isFinite(o)) continue;
|
|
1238
|
+
let s = U(o, n.bucket);
|
|
1239
|
+
if (!s) continue;
|
|
1240
|
+
let c = r.get(s);
|
|
1241
|
+
c || (c = {
|
|
1242
|
+
bar: null,
|
|
1243
|
+
vol: 0,
|
|
1244
|
+
first: Infinity,
|
|
1245
|
+
last: -Infinity
|
|
1246
|
+
}, r.set(s, c), i.push([s, Date.parse(s)]));
|
|
1247
|
+
let l = t[a];
|
|
1248
|
+
l && (c.bar ? (c.bar.h = Math.max(c.bar.h, l.h), c.bar.l = Math.min(c.bar.l, l.l), o >= c.last && (c.bar.c = l.c), o <= c.first && (c.bar.o = l.o)) : c.bar = { ...l }, o > c.last && (c.last = o), o < c.first && (c.first = o));
|
|
1249
|
+
let u = n.volumes?.[a];
|
|
1250
|
+
Number.isFinite(u) && (c.vol += u);
|
|
1251
|
+
}
|
|
1252
|
+
return i.sort((e, t) => e[1] - t[1]), {
|
|
1253
|
+
categories: i.map(([e]) => e),
|
|
1254
|
+
ohlc: i.map(([e]) => r.get(e).bar),
|
|
1255
|
+
...n.volumes ? { volumes: i.map(([e]) => r.get(e).vol) } : {}
|
|
1256
|
+
};
|
|
1257
|
+
}
|
|
1258
|
+
function Le(e, t) {
|
|
1259
|
+
let n = (t) => e.find((e) => t.test(e.field) || t.test(e.label))?.id ?? null;
|
|
1260
|
+
return {
|
|
1261
|
+
open: t?.open ?? n(/open/i),
|
|
1262
|
+
high: t?.high ?? n(/high/i),
|
|
1263
|
+
low: t?.low ?? n(/low/i),
|
|
1264
|
+
close: t?.close ?? n(/close|last|price/i),
|
|
1265
|
+
volume: t?.volume ?? n(/vol/i)
|
|
1266
|
+
};
|
|
1267
|
+
}
|
|
1268
|
+
function Re(e, t, n, r) {
|
|
1269
|
+
let i = e(t), a = e(n.open), o = e(n.high), s = e(n.low), c = e(n.close);
|
|
1270
|
+
if (!i || !a || !o || !s || !c) return null;
|
|
1271
|
+
let l = e(n.volume);
|
|
1272
|
+
return {
|
|
1273
|
+
category: i,
|
|
1274
|
+
ohlc: {
|
|
1275
|
+
open: a,
|
|
1276
|
+
high: o,
|
|
1277
|
+
low: s,
|
|
1278
|
+
close: c,
|
|
1279
|
+
...l ? { volume: l } : {},
|
|
1280
|
+
...r.bucket ? { bucket: r.bucket } : {},
|
|
1281
|
+
...r.candleStyle ? { candleStyle: r.candleStyle } : {},
|
|
1282
|
+
lastPriceLine: !0
|
|
1283
|
+
}
|
|
1284
|
+
};
|
|
1285
|
+
}
|
|
1286
|
+
function ze(e) {
|
|
1287
|
+
let t = {
|
|
1288
|
+
sma: "sma:20",
|
|
1289
|
+
ema: "ema:20",
|
|
1290
|
+
bb: "bb:20:2",
|
|
1291
|
+
vwap: "vwap"
|
|
1292
|
+
}, n = [], r = null;
|
|
1293
|
+
for (let i of e) {
|
|
1294
|
+
let e = t[i];
|
|
1295
|
+
if (e) {
|
|
1296
|
+
r ??= e;
|
|
1297
|
+
continue;
|
|
1298
|
+
}
|
|
1299
|
+
(i === "volume" || i === "rsi" || i === "macd" || i === "stochastic" || i === "atr" || i === "obv") && n.push({ kind: i });
|
|
1300
|
+
}
|
|
1301
|
+
return {
|
|
1302
|
+
panes: n,
|
|
1303
|
+
overlay: r
|
|
1304
|
+
};
|
|
1305
|
+
}
|
|
1306
|
+
function Be(e, t) {
|
|
1307
|
+
let n = (e) => typeof e == "number" ? e : Number(e), r = e.map((e) => ({
|
|
1308
|
+
r: e,
|
|
1309
|
+
t: Date.parse(String(e[t.date]))
|
|
1310
|
+
})).filter((e) => Number.isFinite(e.t)).sort((e, t) => e.t - t.t), i = r.map((e) => new Date(e.t).toISOString().slice(0, 10)), a = r.map(({ r: e }) => {
|
|
1311
|
+
let r = {
|
|
1312
|
+
o: n(e[t.open]),
|
|
1313
|
+
h: n(e[t.high]),
|
|
1314
|
+
l: n(e[t.low]),
|
|
1315
|
+
c: n(e[t.close])
|
|
1316
|
+
};
|
|
1317
|
+
return [
|
|
1318
|
+
r.o,
|
|
1319
|
+
r.h,
|
|
1320
|
+
r.l,
|
|
1321
|
+
r.c
|
|
1322
|
+
].every(Number.isFinite) ? r : null;
|
|
1323
|
+
}), o = t.volume ? r.map(({ r: e }) => n(e[t.volume])) : void 0;
|
|
1324
|
+
if (t.bucket) {
|
|
1325
|
+
let e = Ie(i, a, {
|
|
1326
|
+
bucket: t.bucket,
|
|
1327
|
+
volumes: o
|
|
1328
|
+
});
|
|
1329
|
+
i = e.categories, a = e.ohlc, o = e.volumes;
|
|
1330
|
+
}
|
|
1331
|
+
let s = {
|
|
1332
|
+
label: t.label ?? "Price",
|
|
1333
|
+
values: a.map((e) => e ? e.c : NaN),
|
|
1334
|
+
ohlc: a,
|
|
1335
|
+
...o ? { volumes: o } : {}
|
|
1336
|
+
};
|
|
1337
|
+
return {
|
|
1338
|
+
type: t.type ?? "candlestick",
|
|
1339
|
+
categories: i,
|
|
1340
|
+
series: [s],
|
|
1341
|
+
xType: "ordinal-time",
|
|
1342
|
+
...t.candleStyle ? { candleStyle: t.candleStyle } : {},
|
|
1343
|
+
...t.lastPriceLine ? { lastPriceLine: !0 } : {}
|
|
1344
|
+
};
|
|
1345
|
+
}
|
|
1346
|
+
//#endregion
|
|
1347
|
+
//#region ../grid/dist/chart-cartesian.js
|
|
1348
|
+
function Ve(e, t, n = {}) {
|
|
1349
|
+
return He(e, !!n.connectNulls).map((e) => X(e, t, n.step)).filter(Boolean).join(" ");
|
|
1350
|
+
}
|
|
1351
|
+
function He(e, t) {
|
|
1352
|
+
let n = [], r = [];
|
|
1353
|
+
for (let i of e) i.defined ? r.push({
|
|
1354
|
+
x: i.x,
|
|
1355
|
+
y: i.y
|
|
1356
|
+
}) : r.length && !t && (n.push(r), r = []);
|
|
1357
|
+
return r.length && n.push(r), n;
|
|
1358
|
+
}
|
|
1359
|
+
function X(e, t, n) {
|
|
1360
|
+
return e.length ? n ? Ue(We(e, n)) : t ? qe(e) : Ue(e) : "";
|
|
1361
|
+
}
|
|
1362
|
+
function Ue(e) {
|
|
1363
|
+
return e.map((e, t) => `${t === 0 ? "M" : "L"}${e.x},${e.y}`).join(" ");
|
|
1364
|
+
}
|
|
1365
|
+
function We(e, t) {
|
|
1366
|
+
let n = [];
|
|
1367
|
+
for (let r = 0; r < e.length; r += 1) {
|
|
1368
|
+
let i = e[r];
|
|
1369
|
+
if (r > 0) {
|
|
1370
|
+
let a = e[r - 1];
|
|
1371
|
+
if (t === "before") n.push({
|
|
1372
|
+
x: a.x,
|
|
1373
|
+
y: i.y
|
|
1374
|
+
});
|
|
1375
|
+
else if (t === "after") n.push({
|
|
1376
|
+
x: i.x,
|
|
1377
|
+
y: a.y
|
|
1378
|
+
});
|
|
1379
|
+
else {
|
|
1380
|
+
let e = c((a.x + i.x) / 2);
|
|
1381
|
+
n.push({
|
|
1382
|
+
x: e,
|
|
1383
|
+
y: a.y
|
|
1384
|
+
}, {
|
|
1385
|
+
x: e,
|
|
1386
|
+
y: i.y
|
|
1387
|
+
});
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
n.push(i);
|
|
1391
|
+
}
|
|
1392
|
+
return n;
|
|
1393
|
+
}
|
|
1394
|
+
function Ge(e, t, n, r) {
|
|
1395
|
+
return !e.length || !t.length ? "" : `${X(e, n, r)} ${X(t.slice().reverse(), n, r).replace(/^M/, "L")} Z`;
|
|
1396
|
+
}
|
|
1397
|
+
function Ke(e, t) {
|
|
1398
|
+
let n = e.length, r = e[0]?.length ?? 0, i = Array(r).fill(0);
|
|
1399
|
+
if (!n || !r || t === "zero") return i;
|
|
1400
|
+
let a = (t, n) => {
|
|
1401
|
+
let r = e[t][n];
|
|
1402
|
+
return Number.isFinite(r) ? r : 0;
|
|
1403
|
+
};
|
|
1404
|
+
if (t === "silhouette") {
|
|
1405
|
+
for (let e = 0; e < r; e += 1) {
|
|
1406
|
+
let t = 0;
|
|
1407
|
+
for (let r = 0; r < n; r += 1) t += a(r, e);
|
|
1408
|
+
i[e] = -t / 2;
|
|
1409
|
+
}
|
|
1410
|
+
return i;
|
|
1411
|
+
}
|
|
1412
|
+
let o = 0;
|
|
1413
|
+
for (let e = 1; e < r; e += 1) {
|
|
1414
|
+
let t = 0, r = 0;
|
|
1415
|
+
for (let i = 0; i < n; i += 1) {
|
|
1416
|
+
let n = a(i, e), o = (n - a(i, e - 1)) / 2;
|
|
1417
|
+
for (let t = 0; t < i; t += 1) o += a(t, e) - a(t, e - 1);
|
|
1418
|
+
t += n, r += o * n;
|
|
1419
|
+
}
|
|
1420
|
+
i[e - 1] = o, t && (o -= r / t);
|
|
1421
|
+
}
|
|
1422
|
+
return i[r - 1] = o, i;
|
|
1423
|
+
}
|
|
1424
|
+
function qe(e) {
|
|
1425
|
+
let t = e.length;
|
|
1426
|
+
if (t === 0) return "";
|
|
1427
|
+
if (t === 1) return `M${e[0].x},${e[0].y}`;
|
|
1428
|
+
if (t === 2) return `M${e[0].x},${e[0].y} L${e[1].x},${e[1].y}`;
|
|
1429
|
+
let n = Array(t - 1), r = Array(t - 1);
|
|
1430
|
+
for (let i = 0; i < t - 1; i += 1) {
|
|
1431
|
+
let t = e[i + 1].x - e[i].x;
|
|
1432
|
+
n[i] = t, r[i] = t === 0 ? 0 : (e[i + 1].y - e[i].y) / t;
|
|
1433
|
+
}
|
|
1434
|
+
let i = Array(t);
|
|
1435
|
+
i[0] = r[0], i[t - 1] = r[t - 2];
|
|
1436
|
+
for (let e = 1; e < t - 1; e += 1) r[e - 1] * r[e] <= 0 ? i[e] = 0 : i[e] = (r[e - 1] + r[e]) / 2;
|
|
1437
|
+
for (let e = 0; e < t - 1; e += 1) {
|
|
1438
|
+
if (r[e] === 0) {
|
|
1439
|
+
i[e] = 0, i[e + 1] = 0;
|
|
1440
|
+
continue;
|
|
1441
|
+
}
|
|
1442
|
+
let t = i[e] / r[e], n = i[e + 1] / r[e], a = Math.hypot(t, n);
|
|
1443
|
+
a > 3 && (i[e] = 3 / a * t * r[e], i[e + 1] = 3 / a * n * r[e]);
|
|
1444
|
+
}
|
|
1445
|
+
let a = `M${e[0].x},${e[0].y}`;
|
|
1446
|
+
for (let r = 0; r < t - 1; r += 1) {
|
|
1447
|
+
let t = n[r], o = e[r].x + t / 3, s = e[r].y + i[r] * t / 3, c = e[r + 1].x - t / 3, l = e[r + 1].y - i[r + 1] * t / 3;
|
|
1448
|
+
a += ` C${o},${s} ${c},${l} ${e[r + 1].x},${e[r + 1].y}`;
|
|
1449
|
+
}
|
|
1450
|
+
return a;
|
|
1451
|
+
}
|
|
1452
|
+
function Je(e, t, n, r) {
|
|
1453
|
+
let i = Math.max(.5, r);
|
|
1454
|
+
switch (e) {
|
|
1455
|
+
case "square": return `M${c(t - i)},${c(n - i)} h${c(2 * i)} v${c(2 * i)} h${c(-2 * i)} Z`;
|
|
1456
|
+
case "diamond": return `M${c(t)},${c(n - i * 1.3)} L${c(t + i * 1.3)},${c(n)} L${c(t)},${c(n + i * 1.3)} L${c(t - i * 1.3)},${c(n)} Z`;
|
|
1457
|
+
case "triangle": return `M${c(t)},${c(n - i * 1.2)} L${c(t + i * 1.2)},${c(n + i)} L${c(t - i * 1.2)},${c(n + i)} Z`;
|
|
1458
|
+
case "cross": return `M${c(t - i)},${c(n - i)} L${c(t + i)},${c(n + i)} M${c(t - i)},${c(n + i)} L${c(t + i)},${c(n - i)}`;
|
|
1459
|
+
default: return "";
|
|
1460
|
+
}
|
|
1461
|
+
}
|
|
1462
|
+
function Ye(e, t) {
|
|
1463
|
+
let n = typeof e.marker == "string" ? { shape: e.marker } : e.marker ?? {}, r = e.markers?.[t] ?? void 0, i = r?.color ?? n.color ?? e.colors?.[t] ?? void 0, a = r?.shape ?? n.shape, o = r?.size ?? n.size;
|
|
1464
|
+
if (a == null && o == null && i == null) return;
|
|
1465
|
+
let s = {};
|
|
1466
|
+
return a != null && (s.shape = a), o != null && (s.size = o), i != null && (s.color = i), s;
|
|
1467
|
+
}
|
|
1468
|
+
function Xe(e) {
|
|
1469
|
+
let t = {}, n = !1;
|
|
1470
|
+
if (e.strokeWidth != null && (t.strokeWidth = e.strokeWidth, n = !0), e.dash != null && (t.dash = Array.isArray(e.dash) ? e.dash.join(" ") : e.dash, n = !0), e.opacity != null && (t.opacity = e.opacity, n = !0), e.gradient) {
|
|
1471
|
+
let r = e.gradient === !0 ? {} : e.gradient;
|
|
1472
|
+
t.gradient = {
|
|
1473
|
+
from: r.from ?? e.color,
|
|
1474
|
+
to: r.to ?? "transparent"
|
|
1475
|
+
}, n = !0;
|
|
1476
|
+
}
|
|
1477
|
+
return n ? t : void 0;
|
|
1478
|
+
}
|
|
1479
|
+
function Ze(e, t, n, r = {}) {
|
|
1480
|
+
if (t.show === !1) return [];
|
|
1481
|
+
let i = [], a = r.share ? /* @__PURE__ */ new Map() : null;
|
|
1482
|
+
if (a) for (let t of e.bars) {
|
|
1483
|
+
let e = t.index === void 0 ? t.label : String(t.index);
|
|
1484
|
+
a.set(e, (a.get(e) ?? 0) + Math.abs(t.value));
|
|
1485
|
+
}
|
|
1486
|
+
let o = (e) => {
|
|
1487
|
+
let t = a.get(e.index === void 0 ? e.label : String(e.index)) || 0;
|
|
1488
|
+
return t ? `${Math.round(Math.abs(e.value) / t * 100)}%` : "";
|
|
1489
|
+
}, s = (e, r, i, s) => t.formatter ? t.formatter(e, {
|
|
1490
|
+
category: r,
|
|
1491
|
+
series: i
|
|
1492
|
+
}) : a && s ? o(s) : n(e, i), c = e.orientation === "horizontal", l = t.placement ?? (r.stacked ? "inside" : c ? "outside" : "top"), u = l === "inside" || l === "center";
|
|
1493
|
+
for (let t of e.bars) {
|
|
1494
|
+
let e = s(t.value, t.label, t.series, t);
|
|
1495
|
+
if (e) {
|
|
1496
|
+
if (c) {
|
|
1497
|
+
if (u) {
|
|
1498
|
+
if (t.w <= 18 || t.h < 8) continue;
|
|
1499
|
+
i.push({
|
|
1500
|
+
x: t.x + t.w / 2,
|
|
1501
|
+
y: t.y + t.h / 2 + 3,
|
|
1502
|
+
text: e,
|
|
1503
|
+
anchor: "middle",
|
|
1504
|
+
onBar: !0,
|
|
1505
|
+
series: t.series
|
|
1506
|
+
});
|
|
1507
|
+
} else {
|
|
1508
|
+
if (t.h < 8) continue;
|
|
1509
|
+
let n = t.value >= 0;
|
|
1510
|
+
i.push({
|
|
1511
|
+
x: n ? t.x + t.w + 3 : t.x - 3,
|
|
1512
|
+
y: t.y + t.h / 2 + 3,
|
|
1513
|
+
text: e,
|
|
1514
|
+
anchor: n ? "start" : "end",
|
|
1515
|
+
onBar: !1,
|
|
1516
|
+
series: t.series
|
|
1517
|
+
});
|
|
1518
|
+
}
|
|
1519
|
+
} else if (u) {
|
|
1520
|
+
if (t.h <= 13 || t.w < 14) continue;
|
|
1521
|
+
i.push({
|
|
1522
|
+
x: t.x + t.w / 2,
|
|
1523
|
+
y: t.y + t.h / 2 + 3,
|
|
1524
|
+
text: e,
|
|
1525
|
+
anchor: "middle",
|
|
1526
|
+
onBar: !0,
|
|
1527
|
+
series: t.series
|
|
1528
|
+
});
|
|
1529
|
+
} else {
|
|
1530
|
+
if (t.w < 6) continue;
|
|
1531
|
+
let n = t.value >= 0;
|
|
1532
|
+
i.push({
|
|
1533
|
+
x: t.x + t.w / 2,
|
|
1534
|
+
y: n ? t.y - 3 : t.y + t.h + 11,
|
|
1535
|
+
text: e,
|
|
1536
|
+
anchor: "middle",
|
|
1537
|
+
onBar: !1,
|
|
1538
|
+
series: t.series
|
|
1539
|
+
});
|
|
1540
|
+
}
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
if (!r.dense) for (let t of e.lines) for (let e of t.points) {
|
|
1544
|
+
if (!e.defined) continue;
|
|
1545
|
+
let n = s(e.value, e.label, t.label);
|
|
1546
|
+
n && i.push({
|
|
1547
|
+
x: e.x,
|
|
1548
|
+
y: u ? e.y + 3 : e.y - 7,
|
|
1549
|
+
text: n,
|
|
1550
|
+
anchor: "middle",
|
|
1551
|
+
onBar: !1,
|
|
1552
|
+
series: t.label
|
|
1553
|
+
});
|
|
1554
|
+
}
|
|
1555
|
+
let d = t.rotation ?? 0;
|
|
1556
|
+
if (d) for (let e of i) e.angle = d;
|
|
1557
|
+
if (t.hideOverlap === !1 && !t.connector) return i;
|
|
1558
|
+
let f = [], p = Math.abs(d) >= 45, m = (e) => {
|
|
1559
|
+
let t = e.text.length * 5.6 + 2, n = p ? 10 : t, r = p ? t : 11, i = e.anchor === "middle" ? e.x - n / 2 : e.anchor === "end" ? e.x - n : e.x, a = p ? e.y - r : e.y - 10;
|
|
1560
|
+
return {
|
|
1561
|
+
x0: i,
|
|
1562
|
+
y0: a,
|
|
1563
|
+
x1: i + n,
|
|
1564
|
+
y1: a + r
|
|
1565
|
+
};
|
|
1566
|
+
}, h = (e) => f.some((t) => e.x0 < t.x1 && e.x1 > t.x0 && e.y0 < t.y1 && e.y1 > t.y0), g = [];
|
|
1567
|
+
for (let e of i) {
|
|
1568
|
+
let n = m(e);
|
|
1569
|
+
if (!h(n)) {
|
|
1570
|
+
f.push(n), g.push(e);
|
|
1571
|
+
continue;
|
|
1572
|
+
}
|
|
1573
|
+
if (!t.connector || e.onBar) continue;
|
|
1574
|
+
let r = {
|
|
1575
|
+
x: e.x,
|
|
1576
|
+
y: e.y
|
|
1577
|
+
}, i = null;
|
|
1578
|
+
for (let t = 1; t <= 4; t += 1) {
|
|
1579
|
+
let r = c ? {
|
|
1580
|
+
...e,
|
|
1581
|
+
x: e.x + 12 * t
|
|
1582
|
+
} : {
|
|
1583
|
+
...e,
|
|
1584
|
+
y: e.y - 12 * t
|
|
1585
|
+
};
|
|
1586
|
+
if (n = m(r), !h(n)) {
|
|
1587
|
+
i = r;
|
|
1588
|
+
break;
|
|
1589
|
+
}
|
|
1590
|
+
}
|
|
1591
|
+
i && (i.leader = c ? {
|
|
1592
|
+
x1: r.x,
|
|
1593
|
+
y1: r.y - 3,
|
|
1594
|
+
x2: i.x - 2,
|
|
1595
|
+
y2: i.y - 3
|
|
1596
|
+
} : {
|
|
1597
|
+
x1: r.x,
|
|
1598
|
+
y1: r.y + 1,
|
|
1599
|
+
x2: i.x,
|
|
1600
|
+
y2: i.y + 2
|
|
1601
|
+
}, f.push(n), g.push(i));
|
|
1602
|
+
}
|
|
1603
|
+
return g;
|
|
1604
|
+
}
|
|
1605
|
+
function Qe(e, t, n, a, o) {
|
|
1606
|
+
let s = e.categories, l = s.length, u = a / Math.max(1, l), d = t.reversed, f = (e) => {
|
|
1607
|
+
let t = n + u * e + u / 2;
|
|
1608
|
+
return c(d ? n + a - (t - n) : t);
|
|
1609
|
+
}, p = (e) => {
|
|
1610
|
+
let t = n + u * e;
|
|
1611
|
+
return d ? n + a - (t - n) - u : t;
|
|
1612
|
+
}, m = (e) => typeof t.labelRotation == "number" ? t.labelRotation : e ? -40 : 0, h = t.labels, g = (n, a) => t.formatter ? t.formatter(n, a) : t.format ? i(n, t.format, e) : r(n);
|
|
1613
|
+
if (t.type === "number") {
|
|
1614
|
+
let r = s.map((e) => Number(e)), i = r.filter(Number.isFinite), o = e.binEdges?.filter(Number.isFinite) ?? [], l = i.filter((e) => e > 0);
|
|
1615
|
+
if (t.scale === "log" && o.length < 2 && l.length > 0) {
|
|
1616
|
+
let e = v(Math.min(...l), Math.max(...l)), i = t.min != null && t.min > 0 ? t.min : e.min, o = t.max != null && t.max > i ? t.max : Math.max(e.max, i * 10), s = (e) => {
|
|
1617
|
+
let t = b(e, i, o, !0);
|
|
1618
|
+
return t === null ? NaN : c(n + (d ? 1 - t : t) * a);
|
|
1619
|
+
}, p = (e) => Number.isFinite(r[e]) && r[e] > 0 ? s(r[e]) : f(e), _ = [...new Set(l)].map(s).sort((e, t) => e - t), x = Infinity;
|
|
1620
|
+
for (let e = 1; e < _.length; e += 1) x = Math.min(x, _[e] - _[e - 1]);
|
|
1621
|
+
let S = Number.isFinite(x) ? x : u;
|
|
1622
|
+
return {
|
|
1623
|
+
continuous: "number",
|
|
1624
|
+
log: !0,
|
|
1625
|
+
values: r,
|
|
1626
|
+
min: i,
|
|
1627
|
+
max: o,
|
|
1628
|
+
xCenter: p,
|
|
1629
|
+
xOfValue: s,
|
|
1630
|
+
ticks: y(i, o).map((e, t) => ({
|
|
1631
|
+
label: h ? g(e, t) : "",
|
|
1632
|
+
x: s(e)
|
|
1633
|
+
})),
|
|
1634
|
+
slot: u,
|
|
1635
|
+
barSlot: S,
|
|
1636
|
+
barX0: (e) => p(e) - S / 2,
|
|
1637
|
+
rotated: !1,
|
|
1638
|
+
angle: m(!1)
|
|
1639
|
+
};
|
|
1640
|
+
}
|
|
1641
|
+
if (i.length) {
|
|
1642
|
+
let s = o.length >= 2 ? S(Math.min(...o), Math.max(...o), {
|
|
1643
|
+
...t,
|
|
1644
|
+
nice: e.xAxis?.nice === !0
|
|
1645
|
+
}) : S(Math.min(...i), Math.max(...i), t), l = s.max - s.min || 1, p = (e) => {
|
|
1646
|
+
if (!Number.isFinite(e)) return NaN;
|
|
1647
|
+
let t = (e - s.min) / l;
|
|
1648
|
+
return d && (t = 1 - t), c(n + t * a);
|
|
1649
|
+
}, _ = (e) => Number.isFinite(r[e]) ? p(r[e]) : f(e), v = [...new Set(i)].sort((e, t) => e - t), y = Infinity;
|
|
1650
|
+
for (let e = 1; e < v.length; e += 1) y = Math.min(y, v[e] - v[e - 1]);
|
|
1651
|
+
let b = o.length >= 2 ? (o[1] - o[0]) / l * a : Number.isFinite(y) ? y / l * a : u, x = o.length >= 2 ? $e(o, Math.max(1, Math.floor(a / 40))) : s.ticks, C = o.length >= 2 ? Math.abs(o[1] - o[0]) : 1, w = C >= 1 ? 0 : Math.min(6, Math.ceil(-Math.log10(C)) + 1), T = (e, n) => t.formatter || t.format ? g(e, n) : e.toLocaleString(void 0, {
|
|
1652
|
+
minimumFractionDigits: w,
|
|
1653
|
+
maximumFractionDigits: w
|
|
1654
|
+
}), E = x.map((e, t) => ({
|
|
1655
|
+
label: h ? o.length >= 2 ? T(e, t) : g(e, t) : "",
|
|
1656
|
+
x: p(e)
|
|
1657
|
+
}));
|
|
1658
|
+
return {
|
|
1659
|
+
continuous: "number",
|
|
1660
|
+
values: r,
|
|
1661
|
+
min: s.min,
|
|
1662
|
+
max: s.max,
|
|
1663
|
+
xCenter: _,
|
|
1664
|
+
xOfValue: p,
|
|
1665
|
+
ticks: E,
|
|
1666
|
+
slot: u,
|
|
1667
|
+
barSlot: b,
|
|
1668
|
+
barX0: (e) => _(e) - b / 2,
|
|
1669
|
+
rotated: !1,
|
|
1670
|
+
angle: m(!1)
|
|
1671
|
+
};
|
|
1672
|
+
}
|
|
1673
|
+
}
|
|
1674
|
+
let _ = t.type === "time" || t.type === "ordinal-time" ? s.map((e) => Date.parse(e)) : null, x = !!_ && _.some((e) => Number.isFinite(e));
|
|
1675
|
+
if (x && t.type === "time") {
|
|
1676
|
+
let e = _.filter(Number.isFinite), r = t.min ?? Math.min(...e), i = t.max ?? Math.max(...e), o = i - r || 1, s = (e) => {
|
|
1677
|
+
if (!Number.isFinite(e)) return NaN;
|
|
1678
|
+
let t = (e - r) / o;
|
|
1679
|
+
return d && (t = 1 - t), c(n + t * a);
|
|
1680
|
+
}, l = (e) => Number.isFinite(_[e]) ? s(_[e]) : f(e), g = w(r, i, Math.max(2, Math.floor(a / 90))), v = g.length > 1 ? g[1] - g[0] : o;
|
|
1681
|
+
return {
|
|
1682
|
+
continuous: "time",
|
|
1683
|
+
values: _,
|
|
1684
|
+
min: r,
|
|
1685
|
+
max: i,
|
|
1686
|
+
xCenter: l,
|
|
1687
|
+
xOfValue: s,
|
|
1688
|
+
ticks: g.map((e, n) => ({
|
|
1689
|
+
label: h ? t.formatter ? t.formatter(e, n) : E(e, v) : "",
|
|
1690
|
+
x: s(e)
|
|
1691
|
+
})),
|
|
1692
|
+
slot: u,
|
|
1693
|
+
barSlot: u,
|
|
1694
|
+
barX0: p,
|
|
1695
|
+
rotated: !1,
|
|
1696
|
+
angle: m(!1)
|
|
1697
|
+
};
|
|
1698
|
+
}
|
|
1699
|
+
if (x) {
|
|
1700
|
+
let e = _.filter(Number.isFinite), n = Math.max(...e) - Math.min(...e) || 1, r = T(_), i = r.length > 1 && Math.abs(_[r[1]] - _[r[0]]) || n, a = r.map((e, n) => ({
|
|
1701
|
+
label: h ? t.formatter ? t.formatter(_[e], n) : E(_[e], i) : "",
|
|
1702
|
+
x: f(e)
|
|
1703
|
+
}));
|
|
1704
|
+
return {
|
|
1705
|
+
continuous: null,
|
|
1706
|
+
values: _,
|
|
1707
|
+
min: 0,
|
|
1708
|
+
max: l - 1,
|
|
1709
|
+
xCenter: f,
|
|
1710
|
+
xOfValue: () => NaN,
|
|
1711
|
+
ticks: a,
|
|
1712
|
+
slot: u,
|
|
1713
|
+
barSlot: u,
|
|
1714
|
+
barX0: p,
|
|
1715
|
+
rotated: !1,
|
|
1716
|
+
angle: m(!1)
|
|
1717
|
+
};
|
|
1718
|
+
}
|
|
1719
|
+
let C = m(o), D = C !== 0, O = h ? k(s, f, u, D) : [];
|
|
1720
|
+
return {
|
|
1721
|
+
continuous: null,
|
|
1722
|
+
values: null,
|
|
1723
|
+
min: 0,
|
|
1724
|
+
max: l - 1,
|
|
1725
|
+
xCenter: f,
|
|
1726
|
+
xOfValue: () => NaN,
|
|
1727
|
+
ticks: O,
|
|
1728
|
+
slot: u,
|
|
1729
|
+
barSlot: u,
|
|
1730
|
+
barX0: p,
|
|
1731
|
+
rotated: D,
|
|
1732
|
+
angle: C
|
|
1733
|
+
};
|
|
1734
|
+
}
|
|
1735
|
+
function $e(e, t) {
|
|
1736
|
+
if (e.length <= t) return e;
|
|
1737
|
+
let n = Math.ceil(e.length / t), r = e.filter((e, t) => t % n === 0);
|
|
1738
|
+
return r[r.length - 1] !== e[e.length - 1] && r.push(e[e.length - 1]), r;
|
|
1739
|
+
}
|
|
1740
|
+
function et(e, t, n) {
|
|
1741
|
+
if (t.continuous) {
|
|
1742
|
+
let e = typeof n == "number" ? n : t.continuous === "time" ? Date.parse(n) : Number(n);
|
|
1743
|
+
if (Number.isFinite(e)) return t.xOfValue(e);
|
|
1744
|
+
}
|
|
1745
|
+
if (typeof n == "number") return t.xCenter(n);
|
|
1746
|
+
let r = e.categories.indexOf(n);
|
|
1747
|
+
if (r >= 0) return t.xCenter(r);
|
|
1748
|
+
if (t.values) {
|
|
1749
|
+
let e = Date.parse(n);
|
|
1750
|
+
if (Number.isFinite(e)) {
|
|
1751
|
+
let n = t.values.findIndex((t) => t === e);
|
|
1752
|
+
if (n >= 0) return t.xCenter(n);
|
|
1753
|
+
}
|
|
1754
|
+
}
|
|
1755
|
+
return NaN;
|
|
1756
|
+
}
|
|
1757
|
+
function tt(e, t, n) {
|
|
1758
|
+
if (!t.labels) return 8;
|
|
1759
|
+
if (!n.rotated) return 28;
|
|
1760
|
+
if (typeof t.labelRotation != "number") return 54;
|
|
1761
|
+
let r = e.categories.reduce((e, t) => Math.max(e, Math.min(t.length, 18)), 0), i = Math.abs(n.angle) * Math.PI / 180;
|
|
1762
|
+
return 28 + Math.round(Math.min(72, r * 6 * Math.sin(i)));
|
|
1763
|
+
}
|
|
1764
|
+
function nt(e) {
|
|
1765
|
+
let { spec: t, series: n, empty: a, width: o, height: s, frame: l, axes: u } = e, d = u.y.width ?? (u.y.labels ? 48 : 12) + (u.y.title ? 16 : 0), f = 10 + l.top, p = (u.x.labels ? 28 : 8) + (u.x.title ? 16 : 0) + l.bottom, m = Math.max(1, o - d - 12), h = Math.max(1, s - f - p), g = {
|
|
1766
|
+
x: d,
|
|
1767
|
+
y: f,
|
|
1768
|
+
w: m,
|
|
1769
|
+
h
|
|
1770
|
+
}, _ = Infinity, x = -Infinity, C = Infinity, w = -Infinity, T = Infinity, E = -Infinity;
|
|
1771
|
+
for (let e of n) for (let t of e.points ?? []) Number.isFinite(t.x) && (_ = Math.min(_, t.x), x = Math.max(x, t.x)), Number.isFinite(t.y) && (C = Math.min(C, t.y), w = Math.max(w, t.y)), t.r != null && Number.isFinite(t.r) && (T = Math.min(T, t.r), E = Math.max(E, t.r));
|
|
1772
|
+
if (_ === Infinity) return {
|
|
1773
|
+
...a,
|
|
1774
|
+
plot: g
|
|
1775
|
+
};
|
|
1776
|
+
let D = u.x.scale === "log" && n.some((e) => (e.points ?? []).some((e) => e.x > 0)), O = D ? (() => {
|
|
1777
|
+
let e = Infinity;
|
|
1778
|
+
for (let t of n) for (let n of t.points ?? []) n.x > 0 && n.x < e && (e = n.x);
|
|
1779
|
+
let t = v(e, x), r = u.x.min != null && u.x.min > 0 ? u.x.min : t.min, i = u.x.max != null && u.x.max > r ? u.x.max : Math.max(t.max, r * 10);
|
|
1780
|
+
return {
|
|
1781
|
+
min: r,
|
|
1782
|
+
max: i,
|
|
1783
|
+
step: 10,
|
|
1784
|
+
ticks: y(r, i)
|
|
1785
|
+
};
|
|
1786
|
+
})() : S(_, x, u.x), k = S(C, w, u.y), A = E > T, j = (e) => {
|
|
1787
|
+
if (D) {
|
|
1788
|
+
let t = b(e, O.min, O.max, !0);
|
|
1789
|
+
return t === null ? NaN : c(d + (u.x.reversed ? 1 - t : t) * m);
|
|
1790
|
+
}
|
|
1791
|
+
let t = (e - O.min) / (O.max - O.min || 1);
|
|
1792
|
+
return u.x.reversed && (t = 1 - t), c(d + t * m);
|
|
1793
|
+
}, M = (e) => {
|
|
1794
|
+
let t = (e - k.min) / (k.max - k.min || 1);
|
|
1795
|
+
return u.y.reversed && (t = 1 - t), c(f + h - t * h);
|
|
1796
|
+
}, N = (e) => A && e != null && Number.isFinite(e) ? c(4 + (e - T) / (E - T || 1) * 14) : 5, P = [];
|
|
1797
|
+
for (let e of n) (e.points ?? []).forEach((t, n) => {
|
|
1798
|
+
!Number.isFinite(t.x) || !Number.isFinite(t.y) || D && t.x <= 0 || P.push({
|
|
1799
|
+
cx: j(t.x),
|
|
1800
|
+
cy: M(t.y),
|
|
1801
|
+
r: N(t.r),
|
|
1802
|
+
color: e.colors?.[n] ?? e.color,
|
|
1803
|
+
label: t.label ?? "",
|
|
1804
|
+
series: e.label,
|
|
1805
|
+
x: t.x,
|
|
1806
|
+
y: t.y
|
|
1807
|
+
});
|
|
1808
|
+
});
|
|
1809
|
+
let F = [];
|
|
1810
|
+
for (let e of n) {
|
|
1811
|
+
if (!e.overlay) continue;
|
|
1812
|
+
let t = (e.points ?? []).filter((e) => Number.isFinite(e.x) && Number.isFinite(e.y) && (!D || e.x > 0)), n = ke(t.map((e) => e.y), e.overlay, t.map((e) => e.x));
|
|
1813
|
+
if (!n || !n.equation) continue;
|
|
1814
|
+
let i = [];
|
|
1815
|
+
for (let e = 0; e <= 48; e += 1) {
|
|
1816
|
+
let t = e / 48, a = D ? 10 ** (Math.log10(O.min) + t * (Math.log10(O.max) - Math.log10(O.min))) : O.min + t * (O.max - O.min), o = n.predict(a), s = Number.isFinite(o) && o >= k.min && o <= k.max;
|
|
1817
|
+
i.push({
|
|
1818
|
+
x: j(a),
|
|
1819
|
+
y: s ? M(o) : NaN,
|
|
1820
|
+
label: r(a),
|
|
1821
|
+
value: o,
|
|
1822
|
+
defined: s
|
|
1823
|
+
});
|
|
1824
|
+
}
|
|
1825
|
+
F.push({
|
|
1826
|
+
path: Ve(i, !1),
|
|
1827
|
+
areaPath: "",
|
|
1828
|
+
color: e.overlayColor ?? e.color,
|
|
1829
|
+
label: `${e.label} (${e.overlay})`,
|
|
1830
|
+
points: i,
|
|
1831
|
+
r2: n.r2,
|
|
1832
|
+
equation: n.equation
|
|
1833
|
+
});
|
|
1834
|
+
}
|
|
1835
|
+
let I = [], L = [];
|
|
1836
|
+
for (let e of t.referenceLines ?? []) {
|
|
1837
|
+
let n = Number(e.value);
|
|
1838
|
+
Number.isFinite(n) && (e.axis === "x" ? L.push({
|
|
1839
|
+
x: j(n),
|
|
1840
|
+
label: e.label ?? r(n),
|
|
1841
|
+
color: e.color ?? "#ef4444",
|
|
1842
|
+
dashed: e.dashed !== !1
|
|
1843
|
+
}) : I.push({
|
|
1844
|
+
y: M(n),
|
|
1845
|
+
label: e.label ?? i(n, t.valueFormat, t),
|
|
1846
|
+
color: e.color ?? "#ef4444",
|
|
1847
|
+
dashed: e.dashed !== !1
|
|
1848
|
+
}));
|
|
1849
|
+
}
|
|
1850
|
+
let R = [];
|
|
1851
|
+
for (let e of t.referenceBands ?? []) {
|
|
1852
|
+
let t = Number(e.from), n = Number(e.to);
|
|
1853
|
+
if (!(!Number.isFinite(t) || !Number.isFinite(n))) {
|
|
1854
|
+
if (e.axis === "x") {
|
|
1855
|
+
let r = j(Math.min(t, n)), i = j(Math.max(t, n));
|
|
1856
|
+
R.push({
|
|
1857
|
+
x: Math.min(r, i),
|
|
1858
|
+
y: f,
|
|
1859
|
+
w: Math.abs(i - r),
|
|
1860
|
+
h,
|
|
1861
|
+
color: e.color ?? "#64748b",
|
|
1862
|
+
opacity: e.opacity ?? .08,
|
|
1863
|
+
label: e.label ?? "",
|
|
1864
|
+
axis: "x"
|
|
1865
|
+
});
|
|
1866
|
+
} else {
|
|
1867
|
+
let r = M(Math.max(t, n)), i = M(Math.min(t, n));
|
|
1868
|
+
R.push({
|
|
1869
|
+
x: d,
|
|
1870
|
+
y: Math.min(r, i),
|
|
1871
|
+
w: m,
|
|
1872
|
+
h: Math.abs(i - r),
|
|
1873
|
+
color: e.color ?? "#64748b",
|
|
1874
|
+
opacity: e.opacity ?? .08,
|
|
1875
|
+
label: e.label ?? "",
|
|
1876
|
+
axis: "y"
|
|
1877
|
+
});
|
|
1878
|
+
}
|
|
1879
|
+
}
|
|
1880
|
+
}
|
|
1881
|
+
return {
|
|
1882
|
+
...a,
|
|
1883
|
+
plot: g,
|
|
1884
|
+
axes: {
|
|
1885
|
+
y: {
|
|
1886
|
+
min: k.min,
|
|
1887
|
+
max: k.max,
|
|
1888
|
+
log: !1,
|
|
1889
|
+
reversed: u.y.reversed
|
|
1890
|
+
},
|
|
1891
|
+
y2: null,
|
|
1892
|
+
slot: m,
|
|
1893
|
+
count: 0,
|
|
1894
|
+
x: {
|
|
1895
|
+
type: "number",
|
|
1896
|
+
min: O.min,
|
|
1897
|
+
max: O.max,
|
|
1898
|
+
reversed: u.x.reversed,
|
|
1899
|
+
values: [],
|
|
1900
|
+
...D ? { log: !0 } : {}
|
|
1901
|
+
}
|
|
1902
|
+
},
|
|
1903
|
+
grid: {
|
|
1904
|
+
x: u.x.gridLines,
|
|
1905
|
+
y: u.y.gridLines
|
|
1906
|
+
},
|
|
1907
|
+
scatterPoints: P,
|
|
1908
|
+
overlays: F,
|
|
1909
|
+
referenceLines: I,
|
|
1910
|
+
referenceLinesV: L,
|
|
1911
|
+
referenceBands: R,
|
|
1912
|
+
yTicks: k.ticks.map((e, n) => ({
|
|
1913
|
+
value: e,
|
|
1914
|
+
y: M(e),
|
|
1915
|
+
label: u.y.labels ? fe(e, n, u.y, t, i) : ""
|
|
1916
|
+
})),
|
|
1917
|
+
xTicks: O.ticks.map((e, n) => ({
|
|
1918
|
+
label: u.x.labels ? u.x.formatter ? u.x.formatter(e, n) : u.x.format ? i(e, u.x.format, t) : r(e) : "",
|
|
1919
|
+
x: j(e)
|
|
1920
|
+
}))
|
|
1921
|
+
};
|
|
1922
|
+
}
|
|
1923
|
+
function rt(e) {
|
|
1924
|
+
let { spec: t, series: n, empty: a, width: o, height: s, stacked: l, frame: u, axes: d } = e, f = t.categories.reduce((e, t) => Math.max(e, t.length), 0), p = d.x.labels ? Math.min(150, 18 + f * 6.4) + (d.y.title ? 16 : 0) : 12 + (d.y.title ? 16 : 0), m = 8 + u.top, h = (d.y.labels ? 26 : 8) + (d.x.title ? 16 : 0) + u.bottom, g = Math.max(1, o - p - 16), _ = Math.max(1, s - m - h), v = {
|
|
1925
|
+
x: p,
|
|
1926
|
+
y: m,
|
|
1927
|
+
w: g,
|
|
1928
|
+
h: _
|
|
1929
|
+
}, y = (t.referenceLines ?? []).filter((e) => e.axis !== "x").map((e) => Number(e.value)).concat((t.referenceBands ?? []).filter((e) => e.axis !== "x").flatMap((e) => [Number(e.from), Number(e.to)])), x = d.y.scale === "log", C = t.stacked100 ? S(0, 100) : oe(n, t.categories, l, y, x, d.y), w = (e) => {
|
|
1930
|
+
let t = b(e, C.min, C.max, x);
|
|
1931
|
+
return t === null ? NaN : (d.y.reversed && (t = 1 - t), c(p + t * g));
|
|
1932
|
+
}, T = t.categories.length, E = _ / Math.max(1, T), D = E * .2, O = E - D, k = (e) => m + E * (d.x.reversed ? T - 1 - e : e) + D / 2, A = w(x ? C.min : Math.min(Math.max(0, C.min), C.max)), j = [];
|
|
1933
|
+
if (l) {
|
|
1934
|
+
let e = t.stacked100 ? t.categories.map((e, t) => n.reduce((e, n) => e + Math.abs(Number.isFinite(n.values[t]) ? n.values[t] : 0), 0) || 1) : null, r = Array(T).fill(0), i = Array(T).fill(0);
|
|
1935
|
+
for (let a of n) a.values.forEach((n, o) => {
|
|
1936
|
+
if (!Number.isFinite(n)) return;
|
|
1937
|
+
let s = e ? n / e[o] * 100 : n, l, u;
|
|
1938
|
+
s >= 0 ? (l = w(r[o]), u = w(r[o] + s), r[o] += s) : (l = w(i[o] + s), u = w(i[o]), i[o] += s), !(!Number.isFinite(l) || !Number.isFinite(u)) && j.push({
|
|
1939
|
+
x: Math.min(l, u),
|
|
1940
|
+
y: c(k(o)),
|
|
1941
|
+
w: c(Math.abs(u - l)),
|
|
1942
|
+
h: c(Math.max(1, O)),
|
|
1943
|
+
color: a.colors?.[o] ?? a.color,
|
|
1944
|
+
label: t.categories[o] ?? String(o),
|
|
1945
|
+
series: a.label,
|
|
1946
|
+
value: n,
|
|
1947
|
+
index: o,
|
|
1948
|
+
...a.opacity == null ? {} : { opacity: a.opacity }
|
|
1949
|
+
});
|
|
1950
|
+
});
|
|
1951
|
+
} else {
|
|
1952
|
+
let e = O / n.length;
|
|
1953
|
+
n.forEach((n, r) => {
|
|
1954
|
+
n.values.forEach((i, a) => {
|
|
1955
|
+
if (!Number.isFinite(i) || x && i <= 0) return;
|
|
1956
|
+
let o = w(i);
|
|
1957
|
+
Number.isFinite(o) && j.push({
|
|
1958
|
+
x: Math.min(o, A),
|
|
1959
|
+
y: c(k(a) + e * r),
|
|
1960
|
+
w: c(Math.max(1, Math.abs(o - A))),
|
|
1961
|
+
h: c(Math.max(1, e - 1)),
|
|
1962
|
+
color: n.colors?.[a] ?? n.color,
|
|
1963
|
+
label: t.categories[a] ?? String(a),
|
|
1964
|
+
series: n.label,
|
|
1965
|
+
value: i,
|
|
1966
|
+
index: a,
|
|
1967
|
+
...n.opacity == null ? {} : { opacity: n.opacity }
|
|
1968
|
+
});
|
|
1969
|
+
});
|
|
1970
|
+
});
|
|
1971
|
+
}
|
|
1972
|
+
let M = C.ticks.map((e, n) => ({
|
|
1973
|
+
label: d.y.labels ? t.stacked100 ? `${r(e)}%` : fe(e, n, d.y, t, i) : "",
|
|
1974
|
+
x: w(e)
|
|
1975
|
+
})), N = d.x.labels ? t.categories.map((e, t) => ({
|
|
1976
|
+
value: t,
|
|
1977
|
+
y: c(k(t) + O / 2),
|
|
1978
|
+
label: e
|
|
1979
|
+
})) : [], P = [], F = [];
|
|
1980
|
+
for (let e of t.referenceLines ?? []) {
|
|
1981
|
+
if (e.axis === "x") {
|
|
1982
|
+
let n = typeof e.value == "number" ? e.value : t.categories.indexOf(e.value);
|
|
1983
|
+
if (n < 0 || !Number.isFinite(n)) continue;
|
|
1984
|
+
F.push({
|
|
1985
|
+
y: c(k(n) + O / 2),
|
|
1986
|
+
label: e.label ?? String(e.value),
|
|
1987
|
+
color: e.color ?? "#ef4444",
|
|
1988
|
+
dashed: e.dashed !== !1
|
|
1989
|
+
});
|
|
1990
|
+
continue;
|
|
1991
|
+
}
|
|
1992
|
+
let n = Number(e.value), r = w(n);
|
|
1993
|
+
Number.isFinite(r) && P.push({
|
|
1994
|
+
x: r,
|
|
1995
|
+
label: e.label ?? i(n, t.valueFormat, t),
|
|
1996
|
+
color: e.color ?? "#ef4444",
|
|
1997
|
+
dashed: e.dashed !== !1
|
|
1998
|
+
});
|
|
1999
|
+
}
|
|
2000
|
+
let I = [];
|
|
2001
|
+
for (let e of t.referenceBands ?? []) {
|
|
2002
|
+
if (e.axis === "x") {
|
|
2003
|
+
let n = typeof e.from == "number" ? e.from : t.categories.indexOf(e.from), r = typeof e.to == "number" ? e.to : t.categories.indexOf(e.to);
|
|
2004
|
+
if (n < 0 || r < 0) continue;
|
|
2005
|
+
let i = k(Math.min(n, r)) - D / 2, a = k(Math.max(n, r)) + O + D / 2;
|
|
2006
|
+
I.push({
|
|
2007
|
+
x: p,
|
|
2008
|
+
y: c(Math.min(i, a)),
|
|
2009
|
+
w: g,
|
|
2010
|
+
h: c(Math.abs(a - i)),
|
|
2011
|
+
color: e.color ?? "#64748b",
|
|
2012
|
+
opacity: e.opacity ?? .08,
|
|
2013
|
+
label: e.label ?? "",
|
|
2014
|
+
axis: "y"
|
|
2015
|
+
});
|
|
2016
|
+
continue;
|
|
2017
|
+
}
|
|
2018
|
+
let n = w(Number(e.from)), r = w(Number(e.to));
|
|
2019
|
+
!Number.isFinite(n) || !Number.isFinite(r) || I.push({
|
|
2020
|
+
x: Math.min(n, r),
|
|
2021
|
+
y: m,
|
|
2022
|
+
w: Math.abs(r - n),
|
|
2023
|
+
h: _,
|
|
2024
|
+
color: e.color ?? "#64748b",
|
|
2025
|
+
opacity: e.opacity ?? .08,
|
|
2026
|
+
label: e.label ?? "",
|
|
2027
|
+
axis: "x"
|
|
2028
|
+
});
|
|
2029
|
+
}
|
|
2030
|
+
return {
|
|
2031
|
+
...a,
|
|
2032
|
+
plot: v,
|
|
2033
|
+
axes: {
|
|
2034
|
+
y: {
|
|
2035
|
+
min: C.min,
|
|
2036
|
+
max: C.max,
|
|
2037
|
+
log: x,
|
|
2038
|
+
reversed: d.y.reversed
|
|
2039
|
+
},
|
|
2040
|
+
y2: null,
|
|
2041
|
+
slot: E,
|
|
2042
|
+
count: T,
|
|
2043
|
+
xReversed: d.x.reversed,
|
|
2044
|
+
labels: t.categories
|
|
2045
|
+
},
|
|
2046
|
+
grid: {
|
|
2047
|
+
x: d.y.gridLines,
|
|
2048
|
+
y: d.x.gridLines
|
|
2049
|
+
},
|
|
2050
|
+
bars: j,
|
|
2051
|
+
orientation: "horizontal",
|
|
2052
|
+
valueTicks: M,
|
|
2053
|
+
catTicks: N,
|
|
2054
|
+
referenceLines: F,
|
|
2055
|
+
referenceLinesV: P,
|
|
2056
|
+
referenceBands: I,
|
|
2057
|
+
xLabelRotated: !1
|
|
2058
|
+
};
|
|
2059
|
+
}
|
|
2060
|
+
function it(e) {
|
|
2061
|
+
let { spec: t, series: n, empty: r, width: a, height: o, stacked: s, frame: l, axes: u } = e, d = n.filter((e) => e.axis === "left"), f = n.filter((e) => e.axis === "right"), p = f.length > 0, m = t.categories.reduce((e, t) => Math.max(e, t.length), 0), h = t.categoryGroups && t.categoryGroups.length > 0 && u.x.type !== "time" && t.orientation !== "horizontal" && t.categoryGroups.reduce((e, t) => e + t.span, 0) === t.categories.length ? t.categoryGroups : null, g = h ? 18 : 0, _ = u.y.width ?? (u.y.labels ? 48 : 12) + (u.y.title ? 16 : 0), v = t.seriesLabels ? at(t, n) : null, y = v ? Math.min(Math.floor(a / 3), 8 + Math.max(0, ...v.values()) * 6.2) : 0, x = (p ? u.y2.width ?? (u.y2.labels ? 48 : 12) : 12) + (u.y2.title ? 16 : 0) + y, C = 10 + l.top, w = Math.max(1, a - _ - x), T = m * 6.2 + 8 > w / Math.max(1, t.categories.length), E = Qe(t, u.x, _, w, T), D = tt(t, u.x, E) + (u.x.title ? 16 : 0) + g + l.bottom, O = Math.max(1, o - C - D), k = {
|
|
2062
|
+
x: _,
|
|
2063
|
+
y: C,
|
|
2064
|
+
w,
|
|
2065
|
+
h: O
|
|
2066
|
+
}, j = (t.referenceLines ?? []).filter((e) => e.axis !== "x"), M = (t.referenceBands ?? []).filter((e) => e.axis !== "x"), N = j.filter((e) => e.axis !== "right").map((e) => Number(e.value)).concat(M.filter((e) => e.axis !== "right").flatMap((e) => [Number(e.from), Number(e.to)])), P = j.filter((e) => e.axis === "right").map((e) => Number(e.value)).concat(M.filter((e) => e.axis === "right").flatMap((e) => [Number(e.from), Number(e.to)])), F = u.y.scale === "log", I = u.y2.scale === "log", L = (e) => e.kind === "area" ? e.stack ? `${e.axis}\u0000${e.stack}` : s ? e.axis : null : null, R = [...new Set(n.map(L).filter((e) => e !== null))], ee = t.stackOffset && t.stackOffset !== "zero" && !t.stacked100 ? t.stackOffset : null, te = /* @__PURE__ */ new Map(), ne = {
|
|
2067
|
+
left: [],
|
|
2068
|
+
right: []
|
|
2069
|
+
};
|
|
2070
|
+
if (ee) for (let e of R) {
|
|
2071
|
+
let t = n.filter((t) => L(t) === e), r = t.map((e) => e.values), i = Ke(r, ee);
|
|
2072
|
+
te.set(e, i);
|
|
2073
|
+
let a = t[0].axis;
|
|
2074
|
+
i.forEach((e, t) => {
|
|
2075
|
+
let n = 0;
|
|
2076
|
+
for (let e of r) n += Number.isFinite(e[t]) ? e[t] : 0;
|
|
2077
|
+
ne[a].push(e, e + n);
|
|
2078
|
+
});
|
|
2079
|
+
}
|
|
2080
|
+
let z = t.stacked100 ? S(0, 100) : oe(d, t.categories, s, N.concat(ne.left), F, u.y), B = p ? t.stacked100 ? S(0, 100) : oe(f, t.categories, s, P.concat(ne.right), I, u.y2) : null, V = (e, t, n = !1, r = !1) => {
|
|
2081
|
+
let i = b(t, e.min, e.max, n);
|
|
2082
|
+
return i === null ? NaN : (r && (i = 1 - i), c(C + O - i * O));
|
|
2083
|
+
}, re = (e) => V(z, e, F, u.y.reversed), ie = (e) => V(B ?? z, e, I, u.y2.reversed), H = (e) => e.axis === "right" ? B ?? z : z, U = (e) => e.axis === "right" ? I : F, ae = (e) => e.axis === "right" ? u.y2.reversed : u.y.reversed, W = (e, t) => V(H(e), t, U(e), ae(e)), G = t.categories.length, { slot: se, xCenter: ce, ticks: le } = E, ue = [];
|
|
2084
|
+
if (h && !E.values) {
|
|
2085
|
+
let e = 0;
|
|
2086
|
+
for (let t of h) {
|
|
2087
|
+
let n = c(_ + se * e), r = c(_ + se * (e + t.span));
|
|
2088
|
+
ue.push({
|
|
2089
|
+
label: t.label,
|
|
2090
|
+
x0: n,
|
|
2091
|
+
x1: r,
|
|
2092
|
+
xCenter: c((n + r) / 2)
|
|
2093
|
+
}), e += t.span;
|
|
2094
|
+
}
|
|
2095
|
+
}
|
|
2096
|
+
let de = n.filter((e) => e.kind === "bar" || e.kind === "range-bar" || e.kind === "lollipop" || e.kind === "dumbbell"), K = [], pe = [];
|
|
2097
|
+
if (de.length) {
|
|
2098
|
+
let e = t.type === "histogram", n = e ? 0 : E.barSlot * .2, r = E.barSlot - n, i = (e) => E.barX0(e) + n / 2, a = [], o = /* @__PURE__ */ new Map();
|
|
2099
|
+
for (let e of de) {
|
|
2100
|
+
let t = e.kind === "bar" ? e.stack ?? (s ? "" : null) : null;
|
|
2101
|
+
if (t === null) {
|
|
2102
|
+
a.push({
|
|
2103
|
+
key: e.label,
|
|
2104
|
+
members: [e],
|
|
2105
|
+
stacked: !1
|
|
2106
|
+
});
|
|
2107
|
+
continue;
|
|
2108
|
+
}
|
|
2109
|
+
let n = o.get(t);
|
|
2110
|
+
n || (n = {
|
|
2111
|
+
key: t,
|
|
2112
|
+
members: [],
|
|
2113
|
+
stacked: !0
|
|
2114
|
+
}, o.set(t, n), a.push(n)), n.members.push(e);
|
|
2115
|
+
}
|
|
2116
|
+
let l = r / a.length;
|
|
2117
|
+
a.forEach((n, r) => {
|
|
2118
|
+
if (n.stacked) for (let o of ["left", "right"]) {
|
|
2119
|
+
let s = n.members.filter((e) => e.axis === o);
|
|
2120
|
+
if (!s.length) continue;
|
|
2121
|
+
let u = o === "right" ? ie : re, d = t.stacked100 ? t.categories.map((e, t) => s.reduce((e, n) => e + Math.abs(Number.isFinite(n.values[t]) ? n.values[t] : 0), 0) || 1) : null, f = Array(G).fill(0), p = Array(G).fill(0);
|
|
2122
|
+
for (let n of s) n.values.forEach((o, s) => {
|
|
2123
|
+
if (!Number.isFinite(o)) return;
|
|
2124
|
+
let m = d ? o / d[s] * 100 : o, h, g;
|
|
2125
|
+
m >= 0 ? (h = u(f[s] + m), g = u(f[s]), f[s] += m) : (h = u(p[s]), g = u(p[s] + m), p[s] += m), !(!Number.isFinite(h) || !Number.isFinite(g)) && K.push({
|
|
2126
|
+
x: c(i(s) + l * r),
|
|
2127
|
+
y: Math.min(h, g),
|
|
2128
|
+
w: c(Math.max(1, a.length > 1 ? l - +!e : l)),
|
|
2129
|
+
h: c(Math.abs(g - h)),
|
|
2130
|
+
color: n.colors?.[s] ?? n.color,
|
|
2131
|
+
label: t.categories[s] ?? String(s),
|
|
2132
|
+
series: n.label,
|
|
2133
|
+
value: o,
|
|
2134
|
+
index: s,
|
|
2135
|
+
...n.opacity == null ? {} : { opacity: n.opacity }
|
|
2136
|
+
});
|
|
2137
|
+
});
|
|
2138
|
+
}
|
|
2139
|
+
});
|
|
2140
|
+
let u = a.map((e, t) => ({
|
|
2141
|
+
slot: e,
|
|
2142
|
+
si: t
|
|
2143
|
+
})).filter(({ slot: e }) => !e.stacked);
|
|
2144
|
+
if (u.length) {
|
|
2145
|
+
let n = l;
|
|
2146
|
+
u.forEach(({ slot: r, si: a }) => {
|
|
2147
|
+
let o = r.members[0], s = a, l = H(o), u = U(o), d = u ? W(o, l.min) : W(o, Math.min(Math.max(0, l.min), l.max)), f = c(Math.min(5, Math.max(2.5, n * .3)));
|
|
2148
|
+
o.values.forEach((r, a) => {
|
|
2149
|
+
if (!Number.isFinite(r) || u && r <= 0) return;
|
|
2150
|
+
let l = i(a) + n * s, p = W(o, r);
|
|
2151
|
+
if (!Number.isFinite(p)) return;
|
|
2152
|
+
let m = o.colors?.[a] ?? o.color, h = t.categories[a] ?? String(a);
|
|
2153
|
+
if (o.kind === "lollipop") {
|
|
2154
|
+
pe.push({
|
|
2155
|
+
xCenter: c(l + n / 2),
|
|
2156
|
+
y0: d,
|
|
2157
|
+
y1: p,
|
|
2158
|
+
r: f,
|
|
2159
|
+
color: m,
|
|
2160
|
+
label: h,
|
|
2161
|
+
series: o.label,
|
|
2162
|
+
value: r,
|
|
2163
|
+
dumbbell: !1
|
|
2164
|
+
});
|
|
2165
|
+
return;
|
|
2166
|
+
}
|
|
2167
|
+
if (o.kind === "dumbbell" || o.kind === "range-bar") {
|
|
2168
|
+
let t = o.lowValues?.[a];
|
|
2169
|
+
if (!Number.isFinite(t) || u && t <= 0) return;
|
|
2170
|
+
let i = W(o, t);
|
|
2171
|
+
if (!Number.isFinite(i)) return;
|
|
2172
|
+
if (o.kind === "dumbbell") {
|
|
2173
|
+
pe.push({
|
|
2174
|
+
xCenter: c(l + n / 2),
|
|
2175
|
+
y0: i,
|
|
2176
|
+
y1: p,
|
|
2177
|
+
r: f,
|
|
2178
|
+
color: m,
|
|
2179
|
+
color2: o.overlayColor ?? m,
|
|
2180
|
+
label: h,
|
|
2181
|
+
series: o.label,
|
|
2182
|
+
value: r,
|
|
2183
|
+
value2: t,
|
|
2184
|
+
dumbbell: !0
|
|
2185
|
+
});
|
|
2186
|
+
return;
|
|
2187
|
+
}
|
|
2188
|
+
K.push({
|
|
2189
|
+
x: c(l),
|
|
2190
|
+
y: Math.min(p, i),
|
|
2191
|
+
w: c(Math.max(1, n - +!e)),
|
|
2192
|
+
h: c(Math.max(1, Math.abs(p - i))),
|
|
2193
|
+
color: m,
|
|
2194
|
+
label: h,
|
|
2195
|
+
series: o.label,
|
|
2196
|
+
value: r,
|
|
2197
|
+
index: a,
|
|
2198
|
+
lo: t,
|
|
2199
|
+
...o.opacity == null ? {} : { opacity: o.opacity }
|
|
2200
|
+
});
|
|
2201
|
+
return;
|
|
2202
|
+
}
|
|
2203
|
+
K.push({
|
|
2204
|
+
x: c(l),
|
|
2205
|
+
y: Math.min(p, d),
|
|
2206
|
+
w: c(Math.max(1, n - +!e)),
|
|
2207
|
+
h: c(Math.max(1, Math.abs(p - d))),
|
|
2208
|
+
color: m,
|
|
2209
|
+
label: h,
|
|
2210
|
+
series: o.label,
|
|
2211
|
+
value: r,
|
|
2212
|
+
index: a,
|
|
2213
|
+
...o.opacity == null ? {} : { opacity: o.opacity }
|
|
2214
|
+
});
|
|
2215
|
+
});
|
|
2216
|
+
});
|
|
2217
|
+
}
|
|
2218
|
+
}
|
|
2219
|
+
let q = n.filter((e) => e.kind === "candle"), me = [];
|
|
2220
|
+
if (q.length) {
|
|
2221
|
+
let e = t.candleColors?.up ?? "#16a34a", n = t.candleColors?.down ?? "#ef4444", r = Math.max(1, E.barSlot * .7 / q.length), i = t.candleStyle ?? "classic";
|
|
2222
|
+
q.forEach((a, o) => {
|
|
2223
|
+
let s = U(a), l = a.ohlc ?? [], u = i === "heikin-ashi" ? Fe(l) : l, d = null;
|
|
2224
|
+
u.forEach((l, u) => {
|
|
2225
|
+
if (!l) {
|
|
2226
|
+
d = null;
|
|
2227
|
+
return;
|
|
2228
|
+
}
|
|
2229
|
+
if (![
|
|
2230
|
+
l.o,
|
|
2231
|
+
l.h,
|
|
2232
|
+
l.l,
|
|
2233
|
+
l.c
|
|
2234
|
+
].every(Number.isFinite) || s && (l.o <= 0 || l.h <= 0 || l.l <= 0 || l.c <= 0)) return;
|
|
2235
|
+
let f = E.barX0(u) + E.barSlot / 2 - r * q.length / 2 + r * o, p = W(a, l.o), m = W(a, l.c), h = l.c >= l.o, g = i === "hollow" && d != null ? l.c >= d : h, _ = i === "hollow" ? h : g;
|
|
2236
|
+
d = l.c, me.push({
|
|
2237
|
+
x: c(f),
|
|
2238
|
+
w: c(r),
|
|
2239
|
+
xCenter: c(f + r / 2),
|
|
2240
|
+
yOpen: p,
|
|
2241
|
+
yClose: m,
|
|
2242
|
+
yHigh: W(a, l.h),
|
|
2243
|
+
yLow: W(a, l.l),
|
|
2244
|
+
bodyY: Math.min(p, m),
|
|
2245
|
+
bodyH: Math.max(1, Math.abs(m - p)),
|
|
2246
|
+
up: g,
|
|
2247
|
+
hollow: _,
|
|
2248
|
+
color: g ? e : n,
|
|
2249
|
+
label: t.categories[u] ?? String(u),
|
|
2250
|
+
series: a.label,
|
|
2251
|
+
o: l.o,
|
|
2252
|
+
h: l.h,
|
|
2253
|
+
l: l.l,
|
|
2254
|
+
c: l.c
|
|
2255
|
+
});
|
|
2256
|
+
});
|
|
2257
|
+
});
|
|
2258
|
+
}
|
|
2259
|
+
let J = n.filter((e) => e.kind === "box"), he = [];
|
|
2260
|
+
if (J.length) {
|
|
2261
|
+
let e = Math.max(1, E.barSlot * .6 / J.length);
|
|
2262
|
+
J.forEach((n, r) => {
|
|
2263
|
+
let i = U(n);
|
|
2264
|
+
(n.boxes ?? []).forEach((a, o) => {
|
|
2265
|
+
if (!a || ![
|
|
2266
|
+
a.min,
|
|
2267
|
+
a.q1,
|
|
2268
|
+
a.median,
|
|
2269
|
+
a.q3,
|
|
2270
|
+
a.max
|
|
2271
|
+
].every(Number.isFinite) || i && a.min <= 0) return;
|
|
2272
|
+
let s = E.barX0(o) + E.barSlot / 2 - e * J.length / 2 + e * r, l = W(n, a.q1), u = W(n, a.q3);
|
|
2273
|
+
he.push({
|
|
2274
|
+
x: c(s),
|
|
2275
|
+
w: c(e),
|
|
2276
|
+
xCenter: c(s + e / 2),
|
|
2277
|
+
yMin: W(n, a.min),
|
|
2278
|
+
yQ1: l,
|
|
2279
|
+
yMedian: W(n, a.median),
|
|
2280
|
+
yQ3: u,
|
|
2281
|
+
yMax: W(n, a.max),
|
|
2282
|
+
boxY: Math.min(l, u),
|
|
2283
|
+
boxH: Math.max(1, Math.abs(l - u)),
|
|
2284
|
+
outliers: (a.outliers ?? []).filter((e) => Number.isFinite(e) && (!i || e > 0)).map((e) => ({
|
|
2285
|
+
y: W(n, e),
|
|
2286
|
+
value: e
|
|
2287
|
+
})),
|
|
2288
|
+
color: n.color,
|
|
2289
|
+
label: t.categories[o] ?? String(o),
|
|
2290
|
+
series: n.label,
|
|
2291
|
+
min: a.min,
|
|
2292
|
+
q1: a.q1,
|
|
2293
|
+
median: a.median,
|
|
2294
|
+
q3: a.q3,
|
|
2295
|
+
max: a.max
|
|
2296
|
+
});
|
|
2297
|
+
});
|
|
2298
|
+
});
|
|
2299
|
+
}
|
|
2300
|
+
let ge = [];
|
|
2301
|
+
for (let e of n) {
|
|
2302
|
+
if (!e.errors) continue;
|
|
2303
|
+
let n = U(e);
|
|
2304
|
+
e.errors.forEach((r, i) => {
|
|
2305
|
+
let a = e.values[i];
|
|
2306
|
+
if (!Number.isFinite(a)) return;
|
|
2307
|
+
let o = A(r, a);
|
|
2308
|
+
o && (n && o.lo <= 0 || ge.push({
|
|
2309
|
+
xCenter: c(E.barX0(i) + E.barSlot / 2),
|
|
2310
|
+
yLo: W(e, o.lo),
|
|
2311
|
+
yHi: W(e, o.hi),
|
|
2312
|
+
cap: c(Math.min(6, E.barSlot * .15)),
|
|
2313
|
+
color: e.color,
|
|
2314
|
+
label: t.categories[i] ?? String(i),
|
|
2315
|
+
series: e.label,
|
|
2316
|
+
lo: o.lo,
|
|
2317
|
+
hi: o.hi
|
|
2318
|
+
}));
|
|
2319
|
+
});
|
|
2320
|
+
}
|
|
2321
|
+
let Y = [], _e = /* @__PURE__ */ new Map(), ye = /* @__PURE__ */ new Map(), be = /* @__PURE__ */ new Set();
|
|
2322
|
+
for (let e of R) if (_e.set(e, Array(G).fill(0)), t.stacked100) {
|
|
2323
|
+
let r = n.filter((t) => L(t) === e);
|
|
2324
|
+
ye.set(e, t.categories.map((e, t) => r.reduce((e, n) => e + Math.abs(Number.isFinite(n.values[t]) ? n.values[t] : 0), 0) || 1));
|
|
2325
|
+
}
|
|
2326
|
+
for (let e of n) {
|
|
2327
|
+
if (e.kind === "bar" || e.kind === "candle" || e.kind === "box" || e.kind === "range-bar" || e.kind === "lollipop" || e.kind === "dumbbell") continue;
|
|
2328
|
+
let n = H(e), r = U(e), i = (t) => W(e, t), a = L(e), o = a !== null, s = (e) => ce(e), l, u = null, d = (n, r, i, a) => {
|
|
2329
|
+
let o = {
|
|
2330
|
+
x: s(n),
|
|
2331
|
+
y: i,
|
|
2332
|
+
label: t.categories[n] ?? String(n),
|
|
2333
|
+
value: r,
|
|
2334
|
+
defined: a
|
|
2335
|
+
}, c = Ye(e, n);
|
|
2336
|
+
return c && (o.marker = c), o;
|
|
2337
|
+
};
|
|
2338
|
+
if (o) {
|
|
2339
|
+
let t = _e.get(a), n = te.get(a);
|
|
2340
|
+
if (n && !be.has(a)) {
|
|
2341
|
+
for (let e = 0; e < G; e += 1) t[e] = n[e] ?? 0;
|
|
2342
|
+
be.add(a);
|
|
2343
|
+
}
|
|
2344
|
+
let r = t.slice(), o = ye.get(a);
|
|
2345
|
+
l = e.values.map((e, n) => {
|
|
2346
|
+
let r = Number.isFinite(e) ? e : 0, a = o ? r / o[n] * 100 : r, s = (t[n] ?? 0) + a;
|
|
2347
|
+
return t[n] = s, d(n, e, i(s), Number.isFinite(e));
|
|
2348
|
+
}), u = r.map((e, t) => ({
|
|
2349
|
+
x: s(t),
|
|
2350
|
+
y: i(e)
|
|
2351
|
+
}));
|
|
2352
|
+
} else l = e.values.map((e, t) => {
|
|
2353
|
+
let n = Number.isFinite(e) && Number.isFinite(i(e));
|
|
2354
|
+
return d(t, e, n ? i(e) : NaN, n);
|
|
2355
|
+
});
|
|
2356
|
+
let f = !!e.smooth && !e.step, p = e.step, m = !!e.connectNulls, h = e.kind === "scatter" ? "" : Ve(l, f, {
|
|
2357
|
+
connectNulls: m,
|
|
2358
|
+
step: p
|
|
2359
|
+
}), g = "";
|
|
2360
|
+
if (e.kind === "range-area" && l.length) {
|
|
2361
|
+
let t = [], n = [];
|
|
2362
|
+
l.forEach((r, a) => {
|
|
2363
|
+
let o = e.lowValues?.[a];
|
|
2364
|
+
if (!r.defined || !Number.isFinite(o)) return;
|
|
2365
|
+
let s = i(o);
|
|
2366
|
+
Number.isFinite(s) && (t.push({
|
|
2367
|
+
x: r.x,
|
|
2368
|
+
y: r.y
|
|
2369
|
+
}), n.push({
|
|
2370
|
+
x: r.x,
|
|
2371
|
+
y: s
|
|
2372
|
+
}));
|
|
2373
|
+
}), t.length >= 2 && (g = Ge(t, n, f, p), h = `${X(t, f, p)} ${X(n, f, p)}`);
|
|
2374
|
+
} else if (e.kind === "area" && l.length) {
|
|
2375
|
+
if (u) g = Ge(l.map((e) => ({
|
|
2376
|
+
x: e.x,
|
|
2377
|
+
y: e.y
|
|
2378
|
+
})), u, f, p);
|
|
2379
|
+
else {
|
|
2380
|
+
let e = c(i(r ? n.min : Math.min(Math.max(0, n.min), n.max)));
|
|
2381
|
+
g = He(l, m).map((t) => `${X(t, f, p)} L${t[t.length - 1].x},${e} L${t[0].x},${e} Z`).join(" ");
|
|
2382
|
+
}
|
|
2383
|
+
}
|
|
2384
|
+
let _ = "";
|
|
2385
|
+
if (e.upperValues?.length === e.values.length && e.lowerValues?.length === e.values.length) {
|
|
2386
|
+
let t = [], n = [];
|
|
2387
|
+
for (let a = 0; a < e.values.length; a += 1) {
|
|
2388
|
+
let o = e.upperValues[a], c = e.lowerValues[a];
|
|
2389
|
+
!Number.isFinite(o) || !Number.isFinite(c) || r && (o <= 0 || c <= 0) || (t.push({
|
|
2390
|
+
x: s(a),
|
|
2391
|
+
y: i(o)
|
|
2392
|
+
}), n.push({
|
|
2393
|
+
x: s(a),
|
|
2394
|
+
y: i(c)
|
|
2395
|
+
}));
|
|
2396
|
+
}
|
|
2397
|
+
t.length >= 2 && (_ = Ge(t, n, f, p));
|
|
2398
|
+
}
|
|
2399
|
+
let v = {
|
|
2400
|
+
path: h,
|
|
2401
|
+
areaPath: g,
|
|
2402
|
+
color: e.color,
|
|
2403
|
+
label: e.label,
|
|
2404
|
+
points: l,
|
|
2405
|
+
bandPath: _
|
|
2406
|
+
};
|
|
2407
|
+
e.kind === "range-area" && (v.range = !0);
|
|
2408
|
+
let y = Xe(e);
|
|
2409
|
+
y && (v.style = y), f && (v.smooth = !0), p && (v.step = p), Y.push(v);
|
|
2410
|
+
}
|
|
2411
|
+
let xe = (e, n, r) => e.ticks.map((a, o) => ({
|
|
2412
|
+
value: a,
|
|
2413
|
+
y: V(e, a, r, n.reversed),
|
|
2414
|
+
label: n.labels ? t.stacked100 ? `${c(a)}%` : fe(a, o, n, t, i) : ""
|
|
2415
|
+
})), Se = [], Ce = [];
|
|
2416
|
+
for (let e of t.referenceLines ?? []) {
|
|
2417
|
+
if (e.axis === "x") {
|
|
2418
|
+
let n = et(t, E, e.value);
|
|
2419
|
+
if (!Number.isFinite(n)) continue;
|
|
2420
|
+
Ce.push({
|
|
2421
|
+
x: n,
|
|
2422
|
+
label: e.label ?? String(e.value),
|
|
2423
|
+
color: e.color ?? "#ef4444",
|
|
2424
|
+
dashed: e.dashed !== !1
|
|
2425
|
+
});
|
|
2426
|
+
continue;
|
|
2427
|
+
}
|
|
2428
|
+
let n = e.axis === "right", r = n ? B ?? z : z, a = n ? I : F, o = Number(e.value), s = V(r, o, a, n ? u.y2.reversed : u.y.reversed);
|
|
2429
|
+
Number.isFinite(s) && Se.push({
|
|
2430
|
+
y: s,
|
|
2431
|
+
label: e.label ?? i(o, t.valueFormat, t),
|
|
2432
|
+
color: e.color ?? "#ef4444",
|
|
2433
|
+
dashed: e.dashed !== !1
|
|
2434
|
+
});
|
|
2435
|
+
}
|
|
2436
|
+
let we = [];
|
|
2437
|
+
for (let e of t.referenceBands ?? []) {
|
|
2438
|
+
let n = e.color ?? "#64748b", r = e.opacity ?? .08, i = e.label ?? "";
|
|
2439
|
+
if (e.axis === "x") {
|
|
2440
|
+
let a = et(t, E, e.from), o = et(t, E, e.to);
|
|
2441
|
+
if (!Number.isFinite(a) || !Number.isFinite(o)) continue;
|
|
2442
|
+
if (!E.continuous) {
|
|
2443
|
+
let e = se / 2;
|
|
2444
|
+
a <= o ? (a -= e, o += e) : (a += e, o -= e);
|
|
2445
|
+
}
|
|
2446
|
+
we.push({
|
|
2447
|
+
x: c(Math.min(a, o)),
|
|
2448
|
+
y: C,
|
|
2449
|
+
w: c(Math.abs(o - a)),
|
|
2450
|
+
h: O,
|
|
2451
|
+
color: n,
|
|
2452
|
+
opacity: r,
|
|
2453
|
+
label: i,
|
|
2454
|
+
axis: "x"
|
|
2455
|
+
});
|
|
2456
|
+
continue;
|
|
2457
|
+
}
|
|
2458
|
+
let a = e.axis === "right", o = a ? B ?? z : z, s = a ? I : F, l = a ? u.y2.reversed : u.y.reversed, d = V(o, Number(e.from), s, l), f = V(o, Number(e.to), s, l);
|
|
2459
|
+
!Number.isFinite(d) || !Number.isFinite(f) || we.push({
|
|
2460
|
+
x: _,
|
|
2461
|
+
y: Math.min(d, f),
|
|
2462
|
+
w,
|
|
2463
|
+
h: Math.abs(f - d),
|
|
2464
|
+
color: n,
|
|
2465
|
+
opacity: r,
|
|
2466
|
+
label: i,
|
|
2467
|
+
axis: "y"
|
|
2468
|
+
});
|
|
2469
|
+
}
|
|
2470
|
+
let Te = [];
|
|
2471
|
+
for (let e of n) {
|
|
2472
|
+
if (!e.overlay) continue;
|
|
2473
|
+
let n = U(e), r = Oe(e.values, e.overlay, {
|
|
2474
|
+
ohlc: e.ohlc,
|
|
2475
|
+
volumes: e.volumes
|
|
2476
|
+
}), i = r.values, a = e.overlayColor ?? e.color, o = (r) => r.map((r, i) => {
|
|
2477
|
+
let a = Number.isFinite(r) && (!n || r > 0);
|
|
2478
|
+
return {
|
|
2479
|
+
x: ce(i),
|
|
2480
|
+
y: a ? W(e, r) : NaN,
|
|
2481
|
+
label: t.categories[i] ?? String(i),
|
|
2482
|
+
value: r,
|
|
2483
|
+
defined: a
|
|
2484
|
+
};
|
|
2485
|
+
}), s = o(i), c = Ve(s, !!e.smooth), l = "", u = /^bb:(\d+):(\d+(?:\.\d+)?)$/.exec(e.overlay);
|
|
2486
|
+
if (u) {
|
|
2487
|
+
let { upper: t, lower: n } = ve(e.values, Number(u[1]), Number(u[2])), r = o(t).filter((e) => e.defined), i = o(n).filter((e) => e.defined);
|
|
2488
|
+
r.length > 1 && i.length > 1 && (l = r.map((e, t) => `${t ? "L" : "M"}${e.x},${e.y}`).join(" ") + " " + i.slice().reverse().map((e) => `L${e.x},${e.y}`).join(" ") + " Z");
|
|
2489
|
+
}
|
|
2490
|
+
Te.push({
|
|
2491
|
+
path: c,
|
|
2492
|
+
areaPath: "",
|
|
2493
|
+
color: a,
|
|
2494
|
+
label: `${e.label} (${e.overlay})`,
|
|
2495
|
+
points: s,
|
|
2496
|
+
...l ? { bandPath: l } : {},
|
|
2497
|
+
...r.r2 === void 0 ? {} : { r2: r.r2 },
|
|
2498
|
+
...r.equation ? { equation: r.equation } : {}
|
|
2499
|
+
});
|
|
2500
|
+
}
|
|
2501
|
+
if (t.lastPriceLine) {
|
|
2502
|
+
let e = t.lastPriceLine === !0 ? {} : t.lastPriceLine, r = n.find((e) => e.ohlc) ?? n[0];
|
|
2503
|
+
if (r) {
|
|
2504
|
+
let n = -1;
|
|
2505
|
+
for (let e = r.values.length - 1; e >= 0; --e) if (Number.isFinite(r.values[e])) {
|
|
2506
|
+
n = e;
|
|
2507
|
+
break;
|
|
2508
|
+
}
|
|
2509
|
+
if (n >= 0) {
|
|
2510
|
+
let a = r.values[n], o = NaN;
|
|
2511
|
+
for (let e = n - 1; e >= 0; --e) if (Number.isFinite(r.values[e])) {
|
|
2512
|
+
o = r.values[e];
|
|
2513
|
+
break;
|
|
2514
|
+
}
|
|
2515
|
+
let s = W(r, a);
|
|
2516
|
+
Number.isFinite(s) && Se.push({
|
|
2517
|
+
y: s,
|
|
2518
|
+
label: e.label ?? i(a, t.valueFormat, t),
|
|
2519
|
+
color: e.color ?? (Number.isFinite(o) && a < o ? "#ef4444" : "#16a34a"),
|
|
2520
|
+
dashed: !0,
|
|
2521
|
+
pill: !0
|
|
2522
|
+
});
|
|
2523
|
+
}
|
|
2524
|
+
}
|
|
2525
|
+
}
|
|
2526
|
+
let Ee = [];
|
|
2527
|
+
for (let e of t.annotations ?? []) {
|
|
2528
|
+
let r = null, i = null;
|
|
2529
|
+
if ("category" in e.at) {
|
|
2530
|
+
let a = t.categories.indexOf(e.at.category);
|
|
2531
|
+
if (a < 0) continue;
|
|
2532
|
+
r = ce(a);
|
|
2533
|
+
let o = e.at.series, s = o ? n.find((e) => e.label === o) : n[0];
|
|
2534
|
+
if (s) {
|
|
2535
|
+
let e = s.values[a];
|
|
2536
|
+
Number.isFinite(e) && (i = W(s, e));
|
|
2537
|
+
}
|
|
2538
|
+
i ??= C + O / 2;
|
|
2539
|
+
} else {
|
|
2540
|
+
let n = Number.isFinite(e.at.x) ? et(t, E, e.at.x) : NaN;
|
|
2541
|
+
r = Number.isFinite(n) ? n : _ + w / 2, i = Number.isFinite(e.at.y) ? V(z, e.at.y, F, u.y.reversed) : C + O / 2;
|
|
2542
|
+
}
|
|
2543
|
+
r != null && i != null && Number.isFinite(i) && Ee.push({
|
|
2544
|
+
x: r,
|
|
2545
|
+
y: i,
|
|
2546
|
+
label: e.label,
|
|
2547
|
+
color: e.color ?? "#0f172a",
|
|
2548
|
+
placement: e.placement ?? "top",
|
|
2549
|
+
shape: e.shape ?? "dot",
|
|
2550
|
+
...e.text ? { text: e.text } : {}
|
|
2551
|
+
});
|
|
2552
|
+
}
|
|
2553
|
+
let De = [];
|
|
2554
|
+
for (let e of t.drawings ?? []) {
|
|
2555
|
+
let n = e.axis === "right", r = n ? B ?? z : z, a = n ? I : F, o = n ? u.y2.reversed : u.y.reversed, s = [], l = !0;
|
|
2556
|
+
for (let n of e.points) {
|
|
2557
|
+
let e = et(t, E, n.x), i = V(r, n.y, a, o);
|
|
2558
|
+
if (!Number.isFinite(e) || !Number.isFinite(i)) {
|
|
2559
|
+
l = !1;
|
|
2560
|
+
break;
|
|
2561
|
+
}
|
|
2562
|
+
s.push({
|
|
2563
|
+
x: c(e),
|
|
2564
|
+
y: i
|
|
2565
|
+
});
|
|
2566
|
+
}
|
|
2567
|
+
if (!l || !s.length) continue;
|
|
2568
|
+
let d = e.color ?? "#0ea5e9", f = {
|
|
2569
|
+
id: e.id,
|
|
2570
|
+
kind: e.kind,
|
|
2571
|
+
points: s,
|
|
2572
|
+
color: d,
|
|
2573
|
+
...e.text ? { text: e.text } : {}
|
|
2574
|
+
};
|
|
2575
|
+
if (e.kind === "fib" && s.length >= 2) {
|
|
2576
|
+
let n = e.points[0].y, s = e.points[1].y;
|
|
2577
|
+
f.levels = [
|
|
2578
|
+
0,
|
|
2579
|
+
.236,
|
|
2580
|
+
.382,
|
|
2581
|
+
.5,
|
|
2582
|
+
.618,
|
|
2583
|
+
1
|
|
2584
|
+
].map((e) => {
|
|
2585
|
+
let c = s + (n - s) * e;
|
|
2586
|
+
return {
|
|
2587
|
+
ratio: e,
|
|
2588
|
+
y: V(r, c, a, o),
|
|
2589
|
+
label: `${(e * 100).toFixed(1)}% ${i(c, t.valueFormat, t)}`
|
|
2590
|
+
};
|
|
2591
|
+
});
|
|
2592
|
+
}
|
|
2593
|
+
e.kind === "hray" && (f.label = i(e.points[0].y, t.valueFormat, t)), De.push(f);
|
|
2594
|
+
}
|
|
2595
|
+
return {
|
|
2596
|
+
...r,
|
|
2597
|
+
plot: k,
|
|
2598
|
+
axes: {
|
|
2599
|
+
y: {
|
|
2600
|
+
min: z.min,
|
|
2601
|
+
max: z.max,
|
|
2602
|
+
log: F,
|
|
2603
|
+
reversed: u.y.reversed
|
|
2604
|
+
},
|
|
2605
|
+
y2: B ? {
|
|
2606
|
+
min: B.min,
|
|
2607
|
+
max: B.max,
|
|
2608
|
+
log: I,
|
|
2609
|
+
reversed: u.y2.reversed
|
|
2610
|
+
} : null,
|
|
2611
|
+
slot: se,
|
|
2612
|
+
count: t.categories.length,
|
|
2613
|
+
...E.continuous ? { x: {
|
|
2614
|
+
type: E.continuous,
|
|
2615
|
+
min: E.min,
|
|
2616
|
+
max: E.max,
|
|
2617
|
+
reversed: u.x.reversed,
|
|
2618
|
+
values: E.values ?? [],
|
|
2619
|
+
...E.log ? { log: !0 } : {}
|
|
2620
|
+
} } : {},
|
|
2621
|
+
xReversed: u.x.reversed,
|
|
2622
|
+
labels: t.categories
|
|
2623
|
+
},
|
|
2624
|
+
grid: {
|
|
2625
|
+
x: u.x.gridLines,
|
|
2626
|
+
y: u.y.gridLines
|
|
2627
|
+
},
|
|
2628
|
+
bars: K,
|
|
2629
|
+
candles: me,
|
|
2630
|
+
boxes: he,
|
|
2631
|
+
errorBars: ge,
|
|
2632
|
+
stems: pe,
|
|
2633
|
+
lines: Y,
|
|
2634
|
+
yTicks: xe(z, u.y, F),
|
|
2635
|
+
y2Ticks: B ? xe(B, u.y2, I) : [],
|
|
2636
|
+
hasRightAxis: p,
|
|
2637
|
+
xTicks: le,
|
|
2638
|
+
categoryGroupTicks: ue,
|
|
2639
|
+
xLabelRotated: E.rotated,
|
|
2640
|
+
xLabelAngle: E.angle,
|
|
2641
|
+
referenceLines: Se,
|
|
2642
|
+
referenceLinesV: Ce,
|
|
2643
|
+
referenceBands: we,
|
|
2644
|
+
overlays: Te,
|
|
2645
|
+
annotations: Ee,
|
|
2646
|
+
drawings: De,
|
|
2647
|
+
seriesLabels: t.seriesLabels ? ot(t, Y, k) : []
|
|
2648
|
+
};
|
|
2649
|
+
}
|
|
2650
|
+
function at(e, t) {
|
|
2651
|
+
let n = /* @__PURE__ */ new Map(), r = typeof e.seriesLabels == "object" ? e.seriesLabels.formatter : void 0;
|
|
2652
|
+
for (let e of t) {
|
|
2653
|
+
if (e.kind !== "line" && e.kind !== "area") continue;
|
|
2654
|
+
let t = [...e.values].reverse().find((e) => Number.isFinite(e));
|
|
2655
|
+
t !== void 0 && n.set(e.label, (r ? r(e.label, t) : e.label).length);
|
|
2656
|
+
}
|
|
2657
|
+
return n;
|
|
2658
|
+
}
|
|
2659
|
+
function ot(e, t, n) {
|
|
2660
|
+
let r = typeof e.seriesLabels == "object" ? e.seriesLabels.formatter : void 0, i = [];
|
|
2661
|
+
for (let e of t) {
|
|
2662
|
+
let t = [...e.points].reverse().find((e) => e.defined && Number.isFinite(e.y));
|
|
2663
|
+
t && i.push({
|
|
2664
|
+
x: c(t.x + 6),
|
|
2665
|
+
y: t.y,
|
|
2666
|
+
text: r ? r(e.label, t.value) : e.label,
|
|
2667
|
+
color: e.color,
|
|
2668
|
+
series: e.label
|
|
2669
|
+
});
|
|
2670
|
+
}
|
|
2671
|
+
i.sort((e, t) => e.y - t.y);
|
|
2672
|
+
for (let e = 1; e < i.length; e += 1) i[e].y = Math.max(i[e].y, i[e - 1].y + 12);
|
|
2673
|
+
let a = n.y + n.h - 2;
|
|
2674
|
+
for (let e = i.length - 1; e >= 0; --e) {
|
|
2675
|
+
let t = e === i.length - 1 ? a : i[e + 1].y - 12;
|
|
2676
|
+
i[e].y = Math.min(i[e].y, t);
|
|
2677
|
+
}
|
|
2678
|
+
for (let e of i) e.y = c(Math.max(n.y + 4, e.y));
|
|
2679
|
+
return i;
|
|
2680
|
+
}
|
|
2681
|
+
function st(e) {
|
|
2682
|
+
let { spec: t, series: n, empty: r, width: a, height: o, frame: s, axes: l } = e, u = n[0];
|
|
2683
|
+
if (!u || !t.categories.length) return { ...r };
|
|
2684
|
+
let d = u.targets ?? n[1]?.values ?? [], f = t.bulletRanges ?? t.gaugeRanges ?? [], p = t.categories.reduce((e, t) => Math.max(e, t.length), 0), m = l.x.labels ? Math.min(150, 18 + p * 6.4) : 12, h = 8 + s.top, g = (l.y.labels ? 26 : 8) + (l.y.title ? 16 : 0) + s.bottom, _ = Math.max(1, a - m - 16), v = Math.max(1, o - h - g), y = {
|
|
2685
|
+
x: m,
|
|
2686
|
+
y: h,
|
|
2687
|
+
w: _,
|
|
2688
|
+
h: v
|
|
2689
|
+
}, b = 0;
|
|
2690
|
+
for (let e of u.values) Number.isFinite(e) && e > b && (b = e);
|
|
2691
|
+
for (let e of d) Number.isFinite(e) && e > b && (b = e);
|
|
2692
|
+
for (let e of f) Number.isFinite(e.to) && e.to > b && (b = e.to);
|
|
2693
|
+
let x = S(0, b > 0 ? b : 1, l.y), C = (e) => c(m + (e - x.min) / (x.max - x.min || 1) * _), w = t.categories.length, T = v / w, E = T * .25, D = T - E, O = [];
|
|
2694
|
+
t.categories.forEach((e, t) => {
|
|
2695
|
+
let n = u.values[t], r = d[t], i = c(h + T * t + E / 2), a = Number.isFinite(n) ? n : 0;
|
|
2696
|
+
O.push({
|
|
2697
|
+
x: m,
|
|
2698
|
+
y: i,
|
|
2699
|
+
w: _,
|
|
2700
|
+
h: c(D),
|
|
2701
|
+
measureW: Math.max(0, C(Math.max(x.min, Math.min(x.max, a))) - m),
|
|
2702
|
+
targetX: Number.isFinite(r) ? C(Math.max(x.min, Math.min(x.max, r))) : null,
|
|
2703
|
+
ranges: f.map((e) => {
|
|
2704
|
+
let t = C(Math.max(x.min, Math.min(x.max, e.from))), n = C(Math.max(x.min, Math.min(x.max, e.to)));
|
|
2705
|
+
return {
|
|
2706
|
+
x: Math.min(t, n),
|
|
2707
|
+
w: Math.abs(n - t),
|
|
2708
|
+
color: e.color
|
|
2709
|
+
};
|
|
2710
|
+
}),
|
|
2711
|
+
color: u.colors?.[t] ?? u.color,
|
|
2712
|
+
label: e,
|
|
2713
|
+
series: u.label,
|
|
2714
|
+
value: a,
|
|
2715
|
+
target: Number.isFinite(r) ? r : null
|
|
2716
|
+
});
|
|
2717
|
+
});
|
|
2718
|
+
let k = x.ticks.map((e, n) => ({
|
|
2719
|
+
label: l.y.labels ? fe(e, n, l.y, t, i) : "",
|
|
2720
|
+
x: C(e)
|
|
2721
|
+
})), A = l.x.labels ? t.categories.map((e, t) => ({
|
|
2722
|
+
value: t,
|
|
2723
|
+
y: c(h + T * t + T / 2),
|
|
2724
|
+
label: e
|
|
2725
|
+
})) : [];
|
|
2726
|
+
return {
|
|
2727
|
+
...r,
|
|
2728
|
+
plot: y,
|
|
2729
|
+
axes: {
|
|
2730
|
+
y: {
|
|
2731
|
+
min: x.min,
|
|
2732
|
+
max: x.max,
|
|
2733
|
+
log: !1
|
|
2734
|
+
},
|
|
2735
|
+
y2: null,
|
|
2736
|
+
slot: T,
|
|
2737
|
+
count: w,
|
|
2738
|
+
labels: t.categories
|
|
2739
|
+
},
|
|
2740
|
+
grid: {
|
|
2741
|
+
x: l.y.gridLines,
|
|
2742
|
+
y: !1
|
|
2743
|
+
},
|
|
2744
|
+
orientation: "horizontal",
|
|
2745
|
+
bullets: O,
|
|
2746
|
+
valueTicks: k,
|
|
2747
|
+
catTicks: A,
|
|
2748
|
+
legend: [{
|
|
2749
|
+
label: u.label,
|
|
2750
|
+
color: u.color
|
|
2751
|
+
}]
|
|
2752
|
+
};
|
|
2753
|
+
}
|
|
2754
|
+
//#endregion
|
|
2755
|
+
//#region ../grid/dist/chart-polar.js
|
|
2756
|
+
function ct(e) {
|
|
2757
|
+
let { spec: t, series: n, width: r, height: i, empty: a, frame: o } = e;
|
|
2758
|
+
if (!n.length || !t.categories.length) return { ...a };
|
|
2759
|
+
let l = 24 + o.top, u = 24 + o.bottom, d = Math.max(1, r - 30 - 30), f = Math.max(1, i - l - u), p = {
|
|
2760
|
+
x: 30,
|
|
2761
|
+
y: l,
|
|
2762
|
+
w: d,
|
|
2763
|
+
h: f
|
|
2764
|
+
}, m = 30 + d / 2, h = l + f / 2, g = Math.max(20, Math.min(d, f) / 2 - 20), _ = t.categories, v = _.length, y = 0;
|
|
2765
|
+
for (let e of n) for (let t of e.values) Number.isFinite(t) && t > y && (y = t);
|
|
2766
|
+
y === 0 && (y = 1);
|
|
2767
|
+
let b = t.yAxis?.min ?? 0, x = t.yAxis?.max ?? Math.max(y, b + 1), S = x > b ? x - b : 1, C = Array.from({ length: 5 }, (e, t) => b + (t + 1) / 5 * S), w = (e) => -Math.PI / 2 + e / v * Math.PI * 2, T = (e, t) => {
|
|
2768
|
+
let n = Math.max(0, Math.min(1, (t - b) / S)), r = w(e);
|
|
2769
|
+
return {
|
|
2770
|
+
x: c(m + g * n * Math.cos(r)),
|
|
2771
|
+
y: c(h + g * n * Math.sin(r))
|
|
2772
|
+
};
|
|
2773
|
+
}, E = _.map((e, t) => {
|
|
2774
|
+
let n = T(t, x);
|
|
2775
|
+
return {
|
|
2776
|
+
label: e,
|
|
2777
|
+
x: n.x,
|
|
2778
|
+
y: n.y
|
|
2779
|
+
};
|
|
2780
|
+
}), D = n.map((e, n) => {
|
|
2781
|
+
let r = e.values.map((e, t) => {
|
|
2782
|
+
let n = T(t, Number.isFinite(e) ? e : b);
|
|
2783
|
+
return {
|
|
2784
|
+
x: n.x,
|
|
2785
|
+
y: n.y,
|
|
2786
|
+
value: e,
|
|
2787
|
+
axis: _[t] ?? ""
|
|
2788
|
+
};
|
|
2789
|
+
}), i = r.length ? r.map((e, t) => `${t === 0 ? "M" : "L"}${e.x},${e.y}`).join(" ") + " Z" : "", a = t.palette ?? s;
|
|
2790
|
+
return {
|
|
2791
|
+
label: e.label,
|
|
2792
|
+
color: e.color ?? a[n % a.length],
|
|
2793
|
+
path: i,
|
|
2794
|
+
points: r
|
|
2795
|
+
};
|
|
2796
|
+
});
|
|
2797
|
+
return {
|
|
2798
|
+
...a,
|
|
2799
|
+
plot: p,
|
|
2800
|
+
radarRings: C,
|
|
2801
|
+
radarAxes: E,
|
|
2802
|
+
radarSeries: D,
|
|
2803
|
+
radarCenter: {
|
|
2804
|
+
cx: m,
|
|
2805
|
+
cy: h,
|
|
2806
|
+
r: g
|
|
2807
|
+
}
|
|
2808
|
+
};
|
|
2809
|
+
}
|
|
2810
|
+
function lt(e) {
|
|
2811
|
+
let { spec: t, width: n, height: r, empty: i, frame: a } = e, o = t.gaugeMin ?? 0, s = t.gaugeMax ?? 100, l = Math.max(o, Math.min(s, t.gaugeValue ?? 0)), u = t.gaugeTarget, d = n / 2, f = Math.max(1, r - a.top - a.bottom), p = a.top + f * .78, m = Math.min(n * .42, f * .65), h = Math.PI, g = 2 * Math.PI, _ = (e) => h + (e - o) / (s - o || 1) * (g - h), v = (e, t, n) => {
|
|
2812
|
+
let r = d + n * Math.cos(e), i = p + n * Math.sin(e), a = d + n * Math.cos(t), o = p + n * Math.sin(t);
|
|
2813
|
+
return `M${r},${i} A${n},${n} 0 ${+(t - e > Math.PI)} 1 ${a},${o}`;
|
|
2814
|
+
}, y = v(h, g, m), b = v(h, _(l), m), x = (t.gaugeRanges ?? []).map((e) => ({
|
|
2815
|
+
path: v(_(e.from), _(e.to), m - 16),
|
|
2816
|
+
color: e.color,
|
|
2817
|
+
from: e.from,
|
|
2818
|
+
to: e.to
|
|
2819
|
+
})), S = null;
|
|
2820
|
+
if (u != null && Number.isFinite(u)) {
|
|
2821
|
+
let e = _(Math.max(o, Math.min(s, u))), t = m - 12, n = m + 4;
|
|
2822
|
+
S = {
|
|
2823
|
+
x1: d + t * Math.cos(e),
|
|
2824
|
+
y1: p + t * Math.sin(e),
|
|
2825
|
+
x2: d + n * Math.cos(e),
|
|
2826
|
+
y2: p + n * Math.sin(e)
|
|
2827
|
+
};
|
|
2828
|
+
}
|
|
2829
|
+
let C = [];
|
|
2830
|
+
for (let e = 0; e <= 20; e++) {
|
|
2831
|
+
let t = h + e / 20 * (g - h), n = e % 5 == 0, r = m + 9, i = m + (n ? 17 : 13);
|
|
2832
|
+
C.push({
|
|
2833
|
+
x1: d + r * Math.cos(t),
|
|
2834
|
+
y1: p + r * Math.sin(t),
|
|
2835
|
+
x2: d + i * Math.cos(t),
|
|
2836
|
+
y2: p + i * Math.sin(t),
|
|
2837
|
+
major: n
|
|
2838
|
+
});
|
|
2839
|
+
}
|
|
2840
|
+
let w = _(l), T = m - 14, E = w + Math.PI / 2, D = (e, t) => `${c(d + e * Math.cos(t))},${c(p + e * Math.sin(t))}`, O = `M${D(9, E)} L${D(T, w)} L${D(9, E + Math.PI)} L${D(5, w + Math.PI)} Z`, k = null, A = t.gaugeRanges ?? [];
|
|
2841
|
+
for (let e of A) if (l >= e.from && l < e.to) {
|
|
2842
|
+
k = e.color;
|
|
2843
|
+
break;
|
|
2844
|
+
}
|
|
2845
|
+
if (k == null) for (let e of A) l >= e.from && l <= e.to && (k = e.color);
|
|
2846
|
+
return {
|
|
2847
|
+
...i,
|
|
2848
|
+
plot: {
|
|
2849
|
+
x: 0,
|
|
2850
|
+
y: 0,
|
|
2851
|
+
w: n,
|
|
2852
|
+
h: r
|
|
2853
|
+
},
|
|
2854
|
+
gauge: {
|
|
2855
|
+
cx: d,
|
|
2856
|
+
cy: p,
|
|
2857
|
+
r: m,
|
|
2858
|
+
trackPath: y,
|
|
2859
|
+
valuePath: b,
|
|
2860
|
+
rangePaths: x,
|
|
2861
|
+
target: S,
|
|
2862
|
+
ticks: C,
|
|
2863
|
+
needle: {
|
|
2864
|
+
path: O,
|
|
2865
|
+
hubR: 6
|
|
2866
|
+
},
|
|
2867
|
+
valueColor: k,
|
|
2868
|
+
minLabel: {
|
|
2869
|
+
x: d - m,
|
|
2870
|
+
y: p + 20
|
|
2871
|
+
},
|
|
2872
|
+
maxLabel: {
|
|
2873
|
+
x: d + m,
|
|
2874
|
+
y: p + 20
|
|
2875
|
+
},
|
|
2876
|
+
value: l,
|
|
2877
|
+
min: o,
|
|
2878
|
+
max: s,
|
|
2879
|
+
unit: t.gaugeUnit ?? ""
|
|
2880
|
+
}
|
|
2881
|
+
};
|
|
2882
|
+
}
|
|
2883
|
+
function ut(e) {
|
|
2884
|
+
let { spec: t, series: n, empty: r, width: i, height: a, palette: o, frame: s } = e, l = n[0];
|
|
2885
|
+
if (!l) return r;
|
|
2886
|
+
let u = l.values.reduce((e, t) => e + Math.max(0, t), 0) || 1, d = Math.max(1, a - s.top - s.bottom), f = s.top + d / 2, p = t.dataLabels?.placement === "outside" && t.dataLabels.show !== !1, m = 0, h = 0;
|
|
2887
|
+
if (p) {
|
|
2888
|
+
let e = -Math.PI / 2;
|
|
2889
|
+
t.categories.forEach((t, n) => {
|
|
2890
|
+
let r = Math.max(0, l.values[n] ?? 0) / u, i = e + r * Math.PI * 2 / 2;
|
|
2891
|
+
if (e += r * Math.PI * 2, r < .015) return;
|
|
2892
|
+
let a = (Math.min(t.length, 18) + 4) * 6.3;
|
|
2893
|
+
Math.cos(i) >= 0 ? h = Math.max(h, a) : m = Math.max(m, a);
|
|
2894
|
+
});
|
|
2895
|
+
}
|
|
2896
|
+
let g = p ? 26 + m : 10, _ = p ? 26 + h : 10, v = Math.max(12, Math.min(i, d) * .25), y = (i - g - _) / 2, b = Math.max(v, Math.min(d / 2 - (p ? 34 : 10), y)), x = p && y >= b ? g + y : i / 2, S = b * Math.min(.9, Math.max(0, t.innerRadius ?? 0)), C = -Math.PI / 2, w = l.values.map((e, n) => {
|
|
2897
|
+
let r = Math.max(0, e) / u, i = C, a = C + r * Math.PI * 2;
|
|
2898
|
+
C = a;
|
|
2899
|
+
let s = +(a - i > Math.PI), d = (i + a) / 2, p = (b + S) / 2 || b * .6, m = x + b * Math.cos(i), h = f + b * Math.sin(i), g = x + b * Math.cos(a), _ = f + b * Math.sin(a), v;
|
|
2900
|
+
if (r >= .999) v = S ? `M${c(x - b)},${c(f)} A${b},${b} 0 1 1 ${c(x + b)},${c(f)} A${b},${b} 0 1 1 ${c(x - b)},${c(f)} ZM${c(x - S)},${c(f)} A${S},${S} 0 1 0 ${c(x + S)},${c(f)} A${S},${S} 0 1 0 ${c(x - S)},${c(f)} Z` : `M${c(x - b)},${c(f)} A${b},${b} 0 1 1 ${c(x + b)},${c(f)} A${b},${b} 0 1 1 ${c(x - b)},${c(f)} Z`;
|
|
2901
|
+
else if (S > 0) {
|
|
2902
|
+
let e = x + S * Math.cos(i), t = f + S * Math.sin(i), n = x + S * Math.cos(a), r = f + S * Math.sin(a);
|
|
2903
|
+
v = `M${c(m)},${c(h)} A${b},${b} 0 ${s} 1 ${c(g)},${c(_)} L${c(n)},${c(r)} A${S},${S} 0 ${s} 0 ${c(e)},${c(t)} Z`;
|
|
2904
|
+
} else v = `M${c(x)},${c(f)} L${c(m)},${c(h)} A${b},${b} 0 ${s} 1 ${c(g)},${c(_)} Z`;
|
|
2905
|
+
let y = t.categories[n] ?? String(n);
|
|
2906
|
+
return {
|
|
2907
|
+
path: v,
|
|
2908
|
+
color: t.categoryColors?.[y] ?? l.colors?.[n] ?? o[n % o.length],
|
|
2909
|
+
label: y,
|
|
2910
|
+
value: e,
|
|
2911
|
+
percent: r * 100,
|
|
2912
|
+
cx: c(x + p * Math.cos(d)),
|
|
2913
|
+
cy: c(f + p * Math.sin(d)),
|
|
2914
|
+
arc: {
|
|
2915
|
+
a0: i,
|
|
2916
|
+
a1: a,
|
|
2917
|
+
r: b,
|
|
2918
|
+
ir: S,
|
|
2919
|
+
cx: x,
|
|
2920
|
+
cy: f
|
|
2921
|
+
}
|
|
2922
|
+
};
|
|
2923
|
+
});
|
|
2924
|
+
return p && dt(w, x, f, b, s.top, s.top + d, i), {
|
|
2925
|
+
...r,
|
|
2926
|
+
slices: w,
|
|
2927
|
+
legend: t.categories.map((e, n) => ({
|
|
2928
|
+
label: e,
|
|
2929
|
+
color: t.categoryColors?.[e] ?? l.colors?.[n] ?? o[n % o.length]
|
|
2930
|
+
})),
|
|
2931
|
+
donut: S > 0 ? {
|
|
2932
|
+
cx: c(x),
|
|
2933
|
+
cy: c(f),
|
|
2934
|
+
r: c(S),
|
|
2935
|
+
total: l.values.reduce((e, t) => e + Math.max(0, t), 0)
|
|
2936
|
+
} : null
|
|
2937
|
+
};
|
|
2938
|
+
}
|
|
2939
|
+
function dt(e, t, n, r, i, a, o) {
|
|
2940
|
+
let s = (e) => Math.max(4, Math.floor((e - r - 26) / 6.3) - 4), l = s(o - t), u = s(t), d = [];
|
|
2941
|
+
for (let t of e) {
|
|
2942
|
+
if (!t.arc || t.percent < 1.5) continue;
|
|
2943
|
+
let e = (t.arc.a0 + t.arc.a1) / 2;
|
|
2944
|
+
d.push({
|
|
2945
|
+
slice: t,
|
|
2946
|
+
mid: e,
|
|
2947
|
+
ty: n + Math.sin(e) * (r + 16),
|
|
2948
|
+
right: Math.cos(e) >= 0
|
|
2949
|
+
});
|
|
2950
|
+
}
|
|
2951
|
+
for (let e of [!0, !1]) {
|
|
2952
|
+
let o = d.filter((t) => t.right === e).sort((e, t) => e.ty - t.ty);
|
|
2953
|
+
for (let e = 1; e < o.length; e += 1) o[e].ty = Math.max(o[e].ty, o[e - 1].ty + 13);
|
|
2954
|
+
let s = a - 6;
|
|
2955
|
+
for (let e = o.length - 1; e >= 0; --e) {
|
|
2956
|
+
let t = e === o.length - 1 ? s : o[e + 1].ty - 13;
|
|
2957
|
+
o[e].ty = Math.min(o[e].ty, t);
|
|
2958
|
+
}
|
|
2959
|
+
for (let e of o) e.ty < i + 6 && (e.ty = i + 6);
|
|
2960
|
+
for (let i of o) {
|
|
2961
|
+
let a = t + Math.cos(i.mid) * (r + 2), o = n + Math.sin(i.mid) * (r + 2), s = t + Math.cos(i.mid) * (r + 12), d = i.ty, f = e ? t + r + 22 : t - r - 22;
|
|
2962
|
+
i.slice.callout = {
|
|
2963
|
+
x1: c(a),
|
|
2964
|
+
y1: c(o),
|
|
2965
|
+
x2: c(s),
|
|
2966
|
+
y2: c(d),
|
|
2967
|
+
x3: c(f),
|
|
2968
|
+
tx: c(f + (e ? 4 : -4)),
|
|
2969
|
+
ty: c(i.ty),
|
|
2970
|
+
anchor: e ? "start" : "end",
|
|
2971
|
+
maxChars: e ? l : u
|
|
2972
|
+
};
|
|
2973
|
+
}
|
|
2974
|
+
}
|
|
2975
|
+
}
|
|
2976
|
+
function Z(e, t, n, r, i, a) {
|
|
2977
|
+
let o = Math.PI * 2, s = Math.max(0, Math.min(o, a - i));
|
|
2978
|
+
if (s <= 0 || r <= 0) return "";
|
|
2979
|
+
let l = (n, r) => `${c(e + n * Math.cos(r))},${c(t + n * Math.sin(r))}`;
|
|
2980
|
+
if (s >= o - 1e-6) {
|
|
2981
|
+
let e = `M${l(r, i)} A${c(r)},${c(r)} 0 1 1 ${l(r, i + Math.PI)} A${c(r)},${c(r)} 0 1 1 ${l(r, i)} Z`;
|
|
2982
|
+
return n <= 0 ? e : `${e} M${l(n, i)} A${c(n)},${c(n)} 0 1 0 ${l(n, i + Math.PI)} A${c(n)},${c(n)} 0 1 0 ${l(n, i)} Z`;
|
|
2983
|
+
}
|
|
2984
|
+
let u = +(s > Math.PI);
|
|
2985
|
+
return n <= 0 ? `M${c(e)},${c(t)} L${l(r, i)} A${c(r)},${c(r)} 0 ${u} 1 ${l(r, a)} Z` : `M${l(r, i)} A${c(r)},${c(r)} 0 ${u} 1 ${l(r, a)} L${l(n, a)} A${c(n)},${c(n)} 0 ${u} 0 ${l(n, i)} Z`;
|
|
2986
|
+
}
|
|
2987
|
+
function ft(e, t = 24) {
|
|
2988
|
+
let { width: n, height: r, frame: i } = e, a = Math.max(1, r - i.top - i.bottom), o = n / 2, s = i.top + a / 2, c = Math.max(10, Math.min(n, a) / 2 - t);
|
|
2989
|
+
return {
|
|
2990
|
+
cx: o,
|
|
2991
|
+
cy: s,
|
|
2992
|
+
r: c,
|
|
2993
|
+
plot: {
|
|
2994
|
+
x: o - c,
|
|
2995
|
+
y: s - c,
|
|
2996
|
+
w: 2 * c,
|
|
2997
|
+
h: 2 * c
|
|
2998
|
+
}
|
|
2999
|
+
};
|
|
3000
|
+
}
|
|
3001
|
+
function pt(e, t, n) {
|
|
3002
|
+
return t <= 0 ? e : h([e, n === "dark" ? "#111827" : "#ffffff"], Math.min(.6, t * .22));
|
|
3003
|
+
}
|
|
3004
|
+
var Q = -Math.PI / 2, $ = Math.PI * 2;
|
|
3005
|
+
function mt(e) {
|
|
3006
|
+
let { spec: t, empty: n, palette: r, theme: i } = e, a = t.tree ?? t.treemap;
|
|
3007
|
+
if (!a) return { ...n };
|
|
3008
|
+
let { cx: o, cy: s, r: l, plot: u } = ft(e, 12), d = (e) => e.children?.length ? e.children.reduce((e, t) => e + d(t), 0) : Math.max(0, e.value ?? 0), f = (e) => e.children?.length ? 1 + Math.max(...e.children.map(f)) : 0, p = a.children ?? [a], m = p.reduce((e, t) => e + d(t), 0);
|
|
3009
|
+
if (m <= 0) return {
|
|
3010
|
+
...n,
|
|
3011
|
+
plot: u
|
|
3012
|
+
};
|
|
3013
|
+
let h = Math.max(1, f({
|
|
3014
|
+
name: "",
|
|
3015
|
+
children: p
|
|
3016
|
+
})), g = l * Math.min(.6, Math.max(0, t.innerRadius ?? .18)), v = (l - g) / h, y = [], b = (e, t, n, a, l, u) => {
|
|
3017
|
+
let f = e.reduce((e, t) => e + d(t), 0);
|
|
3018
|
+
if (f <= 0) return;
|
|
3019
|
+
let p = t;
|
|
3020
|
+
e.forEach((e, m) => {
|
|
3021
|
+
let h = d(e);
|
|
3022
|
+
if (h <= 0) return;
|
|
3023
|
+
let x = (n - t) * h / f, S = e.color ?? (a === 0 ? r[m % r.length] : l), C = a === 0 ? S : pt(S, a, i), w = g + v * a, T = w + v - 1, E = p + x / 2, D = (w + T) / 2, O = [...u, e.name];
|
|
3024
|
+
y.push({
|
|
3025
|
+
path: Z(o, s, w, T, p, p + x),
|
|
3026
|
+
color: C,
|
|
3027
|
+
textColor: _(C),
|
|
3028
|
+
label: e.name,
|
|
3029
|
+
series: u[u.length - 1] ?? "",
|
|
3030
|
+
value: h,
|
|
3031
|
+
a0: p,
|
|
3032
|
+
a1: p + x,
|
|
3033
|
+
r0: w,
|
|
3034
|
+
r1: T,
|
|
3035
|
+
cx: o,
|
|
3036
|
+
cy: s,
|
|
3037
|
+
depth: a,
|
|
3038
|
+
nodePath: O,
|
|
3039
|
+
lx: c(o + D * Math.cos(E)),
|
|
3040
|
+
ly: c(s + D * Math.sin(E))
|
|
3041
|
+
}), e.children?.length && b(e.children, p, p + x, a + 1, S, O), p += x;
|
|
3042
|
+
});
|
|
3043
|
+
};
|
|
3044
|
+
return b(p, Q, Q + $, 0, null, []), {
|
|
3045
|
+
...n,
|
|
3046
|
+
plot: u,
|
|
3047
|
+
arcs: y,
|
|
3048
|
+
legend: p.map((e, t) => ({
|
|
3049
|
+
label: e.name,
|
|
3050
|
+
color: e.color ?? r[t % r.length]
|
|
3051
|
+
})),
|
|
3052
|
+
donut: g > 0 ? {
|
|
3053
|
+
cx: c(o),
|
|
3054
|
+
cy: c(s),
|
|
3055
|
+
r: c(g),
|
|
3056
|
+
total: m
|
|
3057
|
+
} : null
|
|
3058
|
+
};
|
|
3059
|
+
}
|
|
3060
|
+
function ht(e) {
|
|
3061
|
+
let { spec: t, series: n, empty: r, palette: i } = e;
|
|
3062
|
+
if (!n.length || !t.categories.length) return { ...r };
|
|
3063
|
+
let { cx: a, cy: o, r: s, plot: l } = ft(e, 12), u = 0;
|
|
3064
|
+
for (let e of n) for (let t of e.values) Number.isFinite(t) && t > u && (u = t);
|
|
3065
|
+
u <= 0 && (u = 1);
|
|
3066
|
+
let d = t.categories.length, f = d * n.length, p = s * Math.min(.6, Math.max(0, t.innerRadius ?? .2)), m = (s - p) / Math.max(1, f), h = Math.min(3, m * .2), g = [];
|
|
3067
|
+
for (let e = 0; e < d; e += 1) n.forEach((r, s) => {
|
|
3068
|
+
let l = r.values[e];
|
|
3069
|
+
if (!Number.isFinite(l) || l <= 0) return;
|
|
3070
|
+
let d = e * n.length + s, f = p + m * d + h / 2, v = f + m - h, y = Math.min($ * .9999, Math.max(0, l) / u * $), b = n.length === 1 ? t.categoryColors?.[t.categories[e]] ?? r.colors?.[e] ?? i[e % i.length] : r.colors?.[e] ?? r.color, x = Q + y / 2, S = (f + v) / 2;
|
|
3071
|
+
g.push({
|
|
3072
|
+
path: Z(a, o, f, v, Q, Q + y),
|
|
3073
|
+
trackPath: Z(a, o, f, v, Q, Q + $),
|
|
3074
|
+
color: b,
|
|
3075
|
+
textColor: _(b),
|
|
3076
|
+
label: t.categories[e],
|
|
3077
|
+
series: r.label,
|
|
3078
|
+
value: l,
|
|
3079
|
+
a0: Q,
|
|
3080
|
+
a1: Q + y,
|
|
3081
|
+
r0: f,
|
|
3082
|
+
r1: v,
|
|
3083
|
+
cx: a,
|
|
3084
|
+
cy: o,
|
|
3085
|
+
lx: c(a + S * Math.cos(x)),
|
|
3086
|
+
ly: c(o + S * Math.sin(x))
|
|
3087
|
+
});
|
|
3088
|
+
});
|
|
3089
|
+
return {
|
|
3090
|
+
...r,
|
|
3091
|
+
plot: l,
|
|
3092
|
+
arcs: g,
|
|
3093
|
+
legend: n.length === 1 ? t.categories.map((e, n) => ({
|
|
3094
|
+
label: e,
|
|
3095
|
+
color: t.categoryColors?.[e] ?? i[n % i.length]
|
|
3096
|
+
})) : r.legend
|
|
3097
|
+
};
|
|
3098
|
+
}
|
|
3099
|
+
function gt(e) {
|
|
3100
|
+
let { spec: t, series: n, empty: r, palette: i, stacked: a } = e;
|
|
3101
|
+
if (!n.length || !t.categories.length) return { ...r };
|
|
3102
|
+
let o = t.type === "nightingale", { cx: s, cy: l, r: u, plot: d } = ft(e, 22), f = t.categories.length, p = a || o && n.length > 1, m = 0;
|
|
3103
|
+
if (p) for (let e = 0; e < f; e += 1) {
|
|
3104
|
+
let t = 0;
|
|
3105
|
+
for (let r of n) t += Number.isFinite(r.values[e]) ? Math.max(0, r.values[e]) : 0;
|
|
3106
|
+
t > m && (m = t);
|
|
3107
|
+
}
|
|
3108
|
+
else for (let e of n) for (let t of e.values) Number.isFinite(t) && t > m && (m = t);
|
|
3109
|
+
let h = S(0, m > 0 ? m : 1, t.yAxis ?? {}), g = u * Math.min(.5, Math.max(0, t.innerRadius ?? (o ? 0 : .12))), v = (e) => {
|
|
3110
|
+
let t = Math.max(0, Math.min(1, (e - h.min) / (h.max - h.min || 1)));
|
|
3111
|
+
return g + (u - g) * (o ? Math.sqrt(t) : t);
|
|
3112
|
+
}, y = $ / f, b = o ? 0 : y * .15, x = [];
|
|
3113
|
+
for (let e = 0; e < f; e += 1) {
|
|
3114
|
+
let r = Q + y * e + b / 2, a = Q + y * (e + 1) - b / 2;
|
|
3115
|
+
if (p) {
|
|
3116
|
+
let o = 0;
|
|
3117
|
+
n.forEach((u) => {
|
|
3118
|
+
let d = u.values[e];
|
|
3119
|
+
if (!Number.isFinite(d) || d <= 0) return;
|
|
3120
|
+
let f = v(o);
|
|
3121
|
+
o += d;
|
|
3122
|
+
let p = v(o), m = n.length === 1 ? t.categoryColors?.[t.categories[e]] ?? u.colors?.[e] ?? i[e % i.length] : u.colors?.[e] ?? u.color, h = (r + a) / 2, g = (f + p) / 2;
|
|
3123
|
+
x.push({
|
|
3124
|
+
path: Z(s, l, f, p, r, a),
|
|
3125
|
+
color: m,
|
|
3126
|
+
textColor: _(m),
|
|
3127
|
+
label: t.categories[e],
|
|
3128
|
+
series: u.label,
|
|
3129
|
+
value: d,
|
|
3130
|
+
a0: r,
|
|
3131
|
+
a1: a,
|
|
3132
|
+
r0: f,
|
|
3133
|
+
r1: p,
|
|
3134
|
+
cx: s,
|
|
3135
|
+
cy: l,
|
|
3136
|
+
lx: c(s + g * Math.cos(h)),
|
|
3137
|
+
ly: c(l + g * Math.sin(h))
|
|
3138
|
+
});
|
|
3139
|
+
});
|
|
3140
|
+
} else {
|
|
3141
|
+
let o = (a - r) / n.length;
|
|
3142
|
+
n.forEach((a, u) => {
|
|
3143
|
+
let d = a.values[e];
|
|
3144
|
+
if (!Number.isFinite(d) || d <= 0) return;
|
|
3145
|
+
let f = r + o * u, p = f + o * (n.length > 1 ? .92 : 1), m = v(d), h = n.length === 1 ? t.categoryColors?.[t.categories[e]] ?? a.colors?.[e] ?? i[e % i.length] : a.colors?.[e] ?? a.color, y = (f + p) / 2, b = (g + m) / 2;
|
|
3146
|
+
x.push({
|
|
3147
|
+
path: Z(s, l, g, m, f, p),
|
|
3148
|
+
color: h,
|
|
3149
|
+
textColor: _(h),
|
|
3150
|
+
label: t.categories[e],
|
|
3151
|
+
series: a.label,
|
|
3152
|
+
value: d,
|
|
3153
|
+
a0: f,
|
|
3154
|
+
a1: p,
|
|
3155
|
+
r0: g,
|
|
3156
|
+
r1: m,
|
|
3157
|
+
cx: s,
|
|
3158
|
+
cy: l,
|
|
3159
|
+
lx: c(s + b * Math.cos(y)),
|
|
3160
|
+
ly: c(l + b * Math.sin(y))
|
|
3161
|
+
});
|
|
3162
|
+
});
|
|
3163
|
+
}
|
|
3164
|
+
}
|
|
3165
|
+
let C = e.axes.x.labels ? t.categories.map((e, t) => {
|
|
3166
|
+
let n = Q + y * t + y / 2, r = u + 10;
|
|
3167
|
+
return {
|
|
3168
|
+
label: e,
|
|
3169
|
+
x: c(s + r * Math.cos(n)),
|
|
3170
|
+
y: c(l + r * Math.sin(n))
|
|
3171
|
+
};
|
|
3172
|
+
}) : [];
|
|
3173
|
+
return {
|
|
3174
|
+
...r,
|
|
3175
|
+
plot: d,
|
|
3176
|
+
arcs: x,
|
|
3177
|
+
polarAxes: C,
|
|
3178
|
+
polarRings: h.ticks.filter((e) => e > h.min).map((e) => v(e)),
|
|
3179
|
+
radarCenter: {
|
|
3180
|
+
cx: s,
|
|
3181
|
+
cy: l,
|
|
3182
|
+
r: u
|
|
3183
|
+
},
|
|
3184
|
+
legend: n.length === 1 ? t.categories.map((e, n) => ({
|
|
3185
|
+
label: e,
|
|
3186
|
+
color: t.categoryColors?.[e] ?? i[n % i.length]
|
|
3187
|
+
})) : r.legend
|
|
3188
|
+
};
|
|
3189
|
+
}
|
|
3190
|
+
function _t(e) {
|
|
3191
|
+
let { spec: t, empty: n, palette: r } = e, i = t.sankeyNodes ?? [], a = (t.sankeyLinks ?? []).filter((e) => Number.isFinite(e.value) && e.value > 0);
|
|
3192
|
+
if (!i.length || !a.length) return { ...n };
|
|
3193
|
+
let { cx: o, cy: s, r: l, plot: u } = ft(e, 28), d = /* @__PURE__ */ new Map();
|
|
3194
|
+
for (let e of a) d.set(e.source, (d.get(e.source) ?? 0) + e.value), e.target !== e.source && d.set(e.target, (d.get(e.target) ?? 0) + e.value);
|
|
3195
|
+
let f = i.filter((e) => (d.get(e.id) ?? 0) > 0), p = f.reduce((e, t) => e + (d.get(t.id) ?? 0), 0);
|
|
3196
|
+
if (p <= 0) return {
|
|
3197
|
+
...n,
|
|
3198
|
+
plot: u
|
|
3199
|
+
};
|
|
3200
|
+
let m = Math.min(.06, $ / (f.length * 8)), h = $ - m * f.length, g = l - Math.max(8, l * .09), v = [], y = /* @__PURE__ */ new Map(), b = Q;
|
|
3201
|
+
f.forEach((e, t) => {
|
|
3202
|
+
let n = d.get(e.id) ?? 0, i = h * n / p, a = e.color ?? r[t % r.length];
|
|
3203
|
+
y.set(e.id, {
|
|
3204
|
+
a0: b,
|
|
3205
|
+
a1: b + i,
|
|
3206
|
+
cursor: b,
|
|
3207
|
+
color: a
|
|
3208
|
+
});
|
|
3209
|
+
let u = b + i / 2, f = l + 12;
|
|
3210
|
+
v.push({
|
|
3211
|
+
path: Z(o, s, g, l, b, b + i),
|
|
3212
|
+
color: a,
|
|
3213
|
+
textColor: _(a),
|
|
3214
|
+
label: e.label ?? e.id,
|
|
3215
|
+
series: "",
|
|
3216
|
+
value: n,
|
|
3217
|
+
a0: b,
|
|
3218
|
+
a1: b + i,
|
|
3219
|
+
r0: g,
|
|
3220
|
+
r1: l,
|
|
3221
|
+
cx: o,
|
|
3222
|
+
cy: s,
|
|
3223
|
+
lx: c(o + f * Math.cos(u)),
|
|
3224
|
+
ly: c(s + f * Math.sin(u))
|
|
3225
|
+
}), b += i + m;
|
|
3226
|
+
});
|
|
3227
|
+
let x = (e, t) => `${c(o + e * Math.cos(t))},${c(s + e * Math.sin(t))}`, S = [], C = (e, t) => {
|
|
3228
|
+
let n = y.get(e);
|
|
3229
|
+
if (!n) return null;
|
|
3230
|
+
let r = (n.a1 - n.a0) * t / (d.get(e) ?? 1), i = {
|
|
3231
|
+
a0: n.cursor,
|
|
3232
|
+
a1: n.cursor + r
|
|
3233
|
+
};
|
|
3234
|
+
return n.cursor += r, i;
|
|
3235
|
+
}, w = a.slice().sort((e, t) => t.value - e.value);
|
|
3236
|
+
for (let e of w) {
|
|
3237
|
+
let t = C(e.source, e.value), n = e.target === e.source ? t : C(e.target, e.value);
|
|
3238
|
+
if (!t || !n) continue;
|
|
3239
|
+
let r = +(t.a1 - t.a0 > Math.PI), i = +(n.a1 - n.a0 > Math.PI), a = `M${x(g, t.a0)} A${c(g)},${c(g)} 0 ${r} 1 ${x(g, t.a1)} Q${c(o)},${c(s)} ${x(g, n.a0)} A${c(g)},${c(g)} 0 ${i} 1 ${x(g, n.a1)} Q${c(o)},${c(s)} ${x(g, t.a0)} Z`;
|
|
3240
|
+
S.push({
|
|
3241
|
+
path: a,
|
|
3242
|
+
color: e.color ?? y.get(e.source).color,
|
|
3243
|
+
source: e.source,
|
|
3244
|
+
target: e.target,
|
|
3245
|
+
value: e.value
|
|
3246
|
+
});
|
|
3247
|
+
}
|
|
3248
|
+
return {
|
|
3249
|
+
...n,
|
|
3250
|
+
plot: u,
|
|
3251
|
+
arcs: v,
|
|
3252
|
+
chordRibbons: S,
|
|
3253
|
+
legend: f.map((e, t) => ({
|
|
3254
|
+
label: e.label ?? e.id,
|
|
3255
|
+
color: e.color ?? r[t % r.length]
|
|
3256
|
+
}))
|
|
3257
|
+
};
|
|
3258
|
+
}
|
|
3259
|
+
//#endregion
|
|
3260
|
+
//#region ../grid/dist/chart-flow.js
|
|
3261
|
+
function vt(e) {
|
|
3262
|
+
let { spec: t, series: n, width: r, height: a, empty: o, frame: s, axes: l } = e, u = n[0];
|
|
3263
|
+
if (!u) return { ...o };
|
|
3264
|
+
let d = t.waterfallColors ?? {}, f = d.positive ?? "#16a34a", p = d.negative ?? "#ef4444", m = d.total ?? "#475569", h = t.categories.reduce((e, t) => Math.max(e, t.length), 0), g = 48 + (l.y.title ? 16 : 0), _ = 10 + s.top, v = Math.max(1, r - g - 12), y = typeof l.x.labelRotation == "number" ? l.x.labelRotation !== 0 : h * 6.2 + 8 > v / Math.max(1, t.categories.length), b = typeof l.x.labelRotation == "number" ? l.x.labelRotation : y ? -40 : 0, S = (y ? 54 : 28) + (l.x.title ? 16 : 0) + s.bottom, C = Math.max(1, a - _ - S), w = {
|
|
3265
|
+
x: g,
|
|
3266
|
+
y: _,
|
|
3267
|
+
w: v,
|
|
3268
|
+
h: C
|
|
3269
|
+
}, T = t.waterfallTotals ?? [], E = [], D = 0;
|
|
3270
|
+
t.categories.forEach((e, t) => {
|
|
3271
|
+
let n = u.values[t] ?? 0;
|
|
3272
|
+
T[t] ? (Number.isFinite(n) && n !== 0 && (D = n), E.push({
|
|
3273
|
+
from: 0,
|
|
3274
|
+
to: D,
|
|
3275
|
+
value: D,
|
|
3276
|
+
isTotal: !0
|
|
3277
|
+
})) : (E.push({
|
|
3278
|
+
from: D,
|
|
3279
|
+
to: D + n,
|
|
3280
|
+
value: n,
|
|
3281
|
+
isTotal: !1
|
|
3282
|
+
}), D += n);
|
|
3283
|
+
});
|
|
3284
|
+
let O = 0, k = 0;
|
|
3285
|
+
for (let e of E) e.from < O && (O = e.from), e.to < O && (O = e.to), e.from > k && (k = e.from), e.to > k && (k = e.to);
|
|
3286
|
+
let A = x(O, k), j = (e) => c(_ + C - (e - A.min) / (A.max - A.min || 1) * C), M = v / Math.max(1, t.categories.length), N = M * .2, P = Math.max(1, M - N), F = E.map((e, n) => {
|
|
3287
|
+
let r = j(Math.max(e.from, e.to)), i = j(Math.min(e.from, e.to)), a = g + M * n + N / 2, o = e.isTotal ? m : e.value >= 0 ? f : p;
|
|
3288
|
+
return {
|
|
3289
|
+
x: c(a),
|
|
3290
|
+
y: r,
|
|
3291
|
+
w: c(P),
|
|
3292
|
+
h: Math.max(1, i - r),
|
|
3293
|
+
color: o,
|
|
3294
|
+
label: t.categories[n] ?? String(n),
|
|
3295
|
+
series: u.label,
|
|
3296
|
+
value: e.value,
|
|
3297
|
+
index: n
|
|
3298
|
+
};
|
|
3299
|
+
}), I = [{
|
|
3300
|
+
path: E.map((e, t) => {
|
|
3301
|
+
let n = g + M * t + N / 2 + P, r = j(e.to), i = g + M * (t + 1) + N / 2;
|
|
3302
|
+
return t < E.length - 1 ? `M${n},${r} L${i},${r}` : "";
|
|
3303
|
+
}).filter(Boolean).join(" "),
|
|
3304
|
+
areaPath: "",
|
|
3305
|
+
color: "var(--sg-muted, #94a3b8)",
|
|
3306
|
+
label: "",
|
|
3307
|
+
points: []
|
|
3308
|
+
}], L = t.categories.map((e, t) => ({
|
|
3309
|
+
label: e,
|
|
3310
|
+
x: c(g + M * t + M / 2)
|
|
3311
|
+
})), R = A.ticks.map((e) => ({
|
|
3312
|
+
value: e,
|
|
3313
|
+
y: j(e),
|
|
3314
|
+
label: i(e, t.valueFormat, t)
|
|
3315
|
+
}));
|
|
3316
|
+
return {
|
|
3317
|
+
...o,
|
|
3318
|
+
plot: w,
|
|
3319
|
+
bars: F,
|
|
3320
|
+
lines: I,
|
|
3321
|
+
yTicks: R,
|
|
3322
|
+
xTicks: L,
|
|
3323
|
+
xLabelRotated: y,
|
|
3324
|
+
xLabelAngle: b
|
|
3325
|
+
};
|
|
3326
|
+
}
|
|
3327
|
+
function yt(e) {
|
|
3328
|
+
let { spec: t, series: n, width: r, height: i, empty: a, frame: o } = e, c = n[0];
|
|
3329
|
+
if (!c || !c.values.length) return { ...a };
|
|
3330
|
+
let l = 16 + o.top, u = 16 + o.bottom, d = Math.max(1, r - 20 - 20), f = Math.max(1, i - l - u), p = {
|
|
3331
|
+
x: 20,
|
|
3332
|
+
y: l,
|
|
3333
|
+
w: d,
|
|
3334
|
+
h: f
|
|
3335
|
+
}, m = c.values.length, h = f / m, g = Math.max(...c.values.map((e) => Number.isFinite(e) ? e : 0)), v = c.values[0] ?? 0, y = (e) => g > 0 ? e / g * d : 0, b = 20 + d / 2, x = t.palette ?? s, S = t.funnelShape ?? "trapezoid", C = c.values.map((e, n) => {
|
|
3336
|
+
let r = c.values[n + 1] ?? e * .8, i = l + h * n, a = i + h, o;
|
|
3337
|
+
if (S === "pyramid") {
|
|
3338
|
+
let e = d * n / m, t = d * (n + 1) / m;
|
|
3339
|
+
o = `M${b - e / 2},${i} L${b + e / 2},${i} L${b + t / 2},${a} L${b - t / 2},${a} Z`;
|
|
3340
|
+
} else if (S === "cone") {
|
|
3341
|
+
let e = d * (1 - n / m), t = d * (1 - (n + 1) / m);
|
|
3342
|
+
o = `M${b - e / 2},${i} L${b + e / 2},${i} L${b + t / 2},${a} L${b - t / 2},${a} Z`;
|
|
3343
|
+
} else {
|
|
3344
|
+
let t = y(e), n = y(r);
|
|
3345
|
+
o = `M${b - t / 2},${i} L${b + t / 2},${i} L${b + n / 2},${a} L${b - n / 2},${a} Z`;
|
|
3346
|
+
}
|
|
3347
|
+
let s = c.color ?? x[n % x.length];
|
|
3348
|
+
return {
|
|
3349
|
+
path: o,
|
|
3350
|
+
color: s,
|
|
3351
|
+
label: t.categories[n] ?? c.label,
|
|
3352
|
+
value: e,
|
|
3353
|
+
conversion: v > 0 ? e / v : 0,
|
|
3354
|
+
dropoff: n === 0 ? 0 : (c.values[n - 1] ?? e) > 0 ? 1 - e / (c.values[n - 1] ?? e) : 0,
|
|
3355
|
+
cx: b,
|
|
3356
|
+
cy: (i + a) / 2,
|
|
3357
|
+
textColor: _(s)
|
|
3358
|
+
};
|
|
3359
|
+
});
|
|
3360
|
+
return {
|
|
3361
|
+
...a,
|
|
3362
|
+
plot: p,
|
|
3363
|
+
funnelSegments: C
|
|
3364
|
+
};
|
|
3365
|
+
}
|
|
3366
|
+
function bt(e) {
|
|
3367
|
+
let { spec: t, width: n, height: r, empty: i, frame: a } = e, o = t.sankeyNodes ?? [], c = t.sankeyLinks ?? [];
|
|
3368
|
+
if (!o.length || !c.length) return { ...i };
|
|
3369
|
+
let l = 14 + a.top, u = 14 + a.bottom, d = Math.max(1, n - 10 - 10), f = Math.max(1, r - l - u), p = {
|
|
3370
|
+
x: 10,
|
|
3371
|
+
y: l,
|
|
3372
|
+
w: d,
|
|
3373
|
+
h: f
|
|
3374
|
+
}, m = t.palette ?? s, h = new Map(o.map((e) => [e.id, e])), g = new Set(c.map((e) => e.target)), _ = o.filter((e) => !g.has(e.id)), v = /* @__PURE__ */ new Map();
|
|
3375
|
+
function y(e, t, n) {
|
|
3376
|
+
if (!n.has(e)) {
|
|
3377
|
+
n.add(e), (t > (v.get(e) ?? 0) || !v.has(e)) && v.set(e, t);
|
|
3378
|
+
for (let r of c) r.source === e && y(r.target, t + 1, n);
|
|
3379
|
+
n.delete(e);
|
|
3380
|
+
}
|
|
3381
|
+
}
|
|
3382
|
+
for (let e of _) y(e.id, 0, /* @__PURE__ */ new Set());
|
|
3383
|
+
for (let e of o) v.has(e.id) || v.set(e.id, 0);
|
|
3384
|
+
let b = Math.max(...v.values()) + 1, x = b > 1 ? (d - 14 * b) / (b - 1) : 0, S = /* @__PURE__ */ new Map(), C = /* @__PURE__ */ new Map();
|
|
3385
|
+
for (let e of c) S.set(e.target, (S.get(e.target) ?? 0) + e.value), C.set(e.source, (C.get(e.source) ?? 0) + e.value);
|
|
3386
|
+
let w = /* @__PURE__ */ new Map();
|
|
3387
|
+
for (let e of o) {
|
|
3388
|
+
let t = v.get(e.id) ?? 0, n = w.get(t) ?? [];
|
|
3389
|
+
n.push(e.id), w.set(t, n);
|
|
3390
|
+
}
|
|
3391
|
+
let T = 0;
|
|
3392
|
+
for (let e of w.values()) {
|
|
3393
|
+
let t = e.reduce((e, t) => e + Math.max(S.get(t) ?? 0, C.get(t) ?? 0), 0);
|
|
3394
|
+
t > T && (T = t);
|
|
3395
|
+
}
|
|
3396
|
+
if (T === 0) return {
|
|
3397
|
+
...i,
|
|
3398
|
+
plot: p
|
|
3399
|
+
};
|
|
3400
|
+
let E = (f - 64) / T, D = [];
|
|
3401
|
+
for (let [e, t] of w) {
|
|
3402
|
+
let n = t.map((e) => Math.max(8, Math.max(S.get(e) ?? 0, C.get(e) ?? 0) * E)), r = l + (f - (n.reduce((e, t) => e + t, 0) + 8 * (t.length - 1))) / 2, i = 10 + e * (14 + x);
|
|
3403
|
+
t.forEach((t, a) => {
|
|
3404
|
+
let o = h.get(t), s = n[a];
|
|
3405
|
+
D.push({
|
|
3406
|
+
id: t,
|
|
3407
|
+
label: o.label ?? t,
|
|
3408
|
+
color: o.color ?? m[D.length % m.length],
|
|
3409
|
+
x: i,
|
|
3410
|
+
y: r,
|
|
3411
|
+
w: 14,
|
|
3412
|
+
h: s,
|
|
3413
|
+
column: e,
|
|
3414
|
+
totalIn: S.get(t) ?? 0,
|
|
3415
|
+
totalOut: C.get(t) ?? 0
|
|
3416
|
+
}), r += s + 8;
|
|
3417
|
+
});
|
|
3418
|
+
}
|
|
3419
|
+
let O = new Map(D.map((e) => [e.id, e])), k = /* @__PURE__ */ new Map(), A = /* @__PURE__ */ new Map(), j = [], M = c.slice().sort((e, t) => t.value - e.value);
|
|
3420
|
+
for (let e of M) {
|
|
3421
|
+
let t = O.get(e.source), n = O.get(e.target);
|
|
3422
|
+
if (!t || !n) continue;
|
|
3423
|
+
let r = Math.max(1, e.value * E), i = t.y + (A.get(t.id) ?? 0) + r / 2, a = n.y + (k.get(n.id) ?? 0) + r / 2;
|
|
3424
|
+
A.set(t.id, (A.get(t.id) ?? 0) + r), k.set(n.id, (k.get(n.id) ?? 0) + r);
|
|
3425
|
+
let o = t.x + t.w, s = n.x, c = (o + s) / 2, l = `M${o},${i} C${c},${i} ${c},${a} ${s},${a}`;
|
|
3426
|
+
j.push({
|
|
3427
|
+
path: l,
|
|
3428
|
+
color: e.color ?? t.color,
|
|
3429
|
+
width: r,
|
|
3430
|
+
source: e.source,
|
|
3431
|
+
target: e.target,
|
|
3432
|
+
value: e.value
|
|
3433
|
+
});
|
|
3434
|
+
}
|
|
3435
|
+
return {
|
|
3436
|
+
...i,
|
|
3437
|
+
plot: p,
|
|
3438
|
+
sankeyNodes: D,
|
|
3439
|
+
sankeyLinks: j
|
|
3440
|
+
};
|
|
3441
|
+
}
|
|
3442
|
+
//#endregion
|
|
3443
|
+
//#region ../grid/dist/chart-grid.js
|
|
3444
|
+
function xt(e) {
|
|
3445
|
+
let { spec: t, width: n, height: r, theme: a, empty: o, frame: s } = e, c = t.calendarValues ?? [];
|
|
3446
|
+
if (!c.length && !t.calendarStart) return { ...o };
|
|
3447
|
+
let l = /* @__PURE__ */ new Map(), u = Infinity, d = -Infinity;
|
|
3448
|
+
for (let e of c) l.set(e.date, e.value), Number.isFinite(e.value) && (e.value < u && (u = e.value), e.value > d && (d = e.value));
|
|
3449
|
+
u === Infinity && (u = 0, d = 1), u === d && (d = u + 1);
|
|
3450
|
+
let f = m(t.colorScale, u, d, a), p = (e) => h(f, (e - u) / (d - u)), g = c.map((e) => e.date).sort(), _ = t.calendarStart ?? g[0] ?? "2026-01-01", v = t.calendarEnd ?? g[g.length - 1] ?? _, y = /* @__PURE__ */ new Date(_ + "T00:00:00Z"), b = /* @__PURE__ */ new Date(v + "T00:00:00Z");
|
|
3451
|
+
y.setUTCDate(y.getUTCDate() - y.getUTCDay()), b.setUTCDate(b.getUTCDate() + (6 - b.getUTCDay()));
|
|
3452
|
+
let x = Math.round((b.getTime() - y.getTime()) / 864e5) + 1, S = Math.ceil(x / 7), C = 26 + s.top, w = 16 + s.bottom, T = Math.max(1, n - 36 - 80), E = Math.max(1, r - C - w), D = Math.floor(T / S), O = Math.floor(E / 7), k = Math.max(6, Math.min(D, O)), A = {
|
|
3453
|
+
x: 36,
|
|
3454
|
+
y: C,
|
|
3455
|
+
w: k * S,
|
|
3456
|
+
h: k * 7
|
|
3457
|
+
}, j = [], M = -1, N = [];
|
|
3458
|
+
for (let e = 0; e < x; e += 1) {
|
|
3459
|
+
let t = new Date(y.getTime() + e * 864e5), n = Math.floor(e / 7), r = e % 7, i = t.toISOString().slice(0, 10), a = l.has(i), o = l.get(i) ?? 0;
|
|
3460
|
+
j.push({
|
|
3461
|
+
x: 36 + n * k,
|
|
3462
|
+
y: C + r * k,
|
|
3463
|
+
size: k,
|
|
3464
|
+
date: i,
|
|
3465
|
+
value: o,
|
|
3466
|
+
defined: a,
|
|
3467
|
+
color: a ? p(o) : "transparent"
|
|
3468
|
+
}), t.getUTCDate() === 1 && t.getUTCMonth() !== M && i >= _ && i <= v && (M = t.getUTCMonth(), N.push({
|
|
3469
|
+
label: t.toLocaleDateString(void 0, { month: "short" }),
|
|
3470
|
+
x: 36 + n * k
|
|
3471
|
+
}));
|
|
3472
|
+
}
|
|
3473
|
+
let P = Array.from({ length: 5 }, (e, n) => {
|
|
3474
|
+
let r = n / 4, a = St(u, d, r);
|
|
3475
|
+
return {
|
|
3476
|
+
value: a,
|
|
3477
|
+
color: p(a),
|
|
3478
|
+
label: i(a, t.valueFormat, t)
|
|
3479
|
+
};
|
|
3480
|
+
});
|
|
3481
|
+
return {
|
|
3482
|
+
...o,
|
|
3483
|
+
plot: A,
|
|
3484
|
+
calendarCells: j,
|
|
3485
|
+
calendarMonthTicks: N,
|
|
3486
|
+
calendarLegend: P
|
|
3487
|
+
};
|
|
3488
|
+
}
|
|
3489
|
+
function St(e, t, n) {
|
|
3490
|
+
let r = e + (t - e) * n, i = Math.abs(t - e) / 4;
|
|
3491
|
+
if (!(i > 0)) return r;
|
|
3492
|
+
let a = i >= 1 ? 0 : Math.min(6, Math.ceil(-Math.log10(i)) + 1);
|
|
3493
|
+
return Number(r.toFixed(a));
|
|
3494
|
+
}
|
|
3495
|
+
function Ct(e) {
|
|
3496
|
+
let { spec: t, series: n, width: r, height: a, theme: o, empty: s, frame: l } = e;
|
|
3497
|
+
if (!n.length || !t.categories.length) return {
|
|
3498
|
+
...s,
|
|
3499
|
+
plot: {
|
|
3500
|
+
x: 0,
|
|
3501
|
+
y: 0,
|
|
3502
|
+
w: r,
|
|
3503
|
+
h: a
|
|
3504
|
+
}
|
|
3505
|
+
};
|
|
3506
|
+
let u = n.reduce((e, t) => Math.max(e, t.label.length), 0), d = 12 + Math.min(180, Math.max(60, u * 7)), f = 12 + l.top, p = 32 + l.bottom, g = Math.max(1, r - d - 64), v = Math.max(1, a - f - p), y = {
|
|
3507
|
+
x: d,
|
|
3508
|
+
y: f,
|
|
3509
|
+
w: g,
|
|
3510
|
+
h: v
|
|
3511
|
+
}, b = g / t.categories.length, x = v / n.length, S = Infinity, C = -Infinity;
|
|
3512
|
+
for (let e of n) for (let t of e.values) Number.isFinite(t) && (t < S && (S = t), t > C && (C = t));
|
|
3513
|
+
S === Infinity && (S = 0, C = 1), S === C && (C = S + 1);
|
|
3514
|
+
let w = m(t.colorScale, S, C, o), T = (e) => h(w, (e - S) / (C - S)), E = [];
|
|
3515
|
+
n.forEach((e, n) => {
|
|
3516
|
+
e.values.forEach((r, i) => {
|
|
3517
|
+
if (!Number.isFinite(r)) return;
|
|
3518
|
+
let a = T(r);
|
|
3519
|
+
E.push({
|
|
3520
|
+
x: c(d + b * i),
|
|
3521
|
+
y: c(f + x * n),
|
|
3522
|
+
w: c(b),
|
|
3523
|
+
h: c(x),
|
|
3524
|
+
color: a,
|
|
3525
|
+
textColor: _(a),
|
|
3526
|
+
value: r,
|
|
3527
|
+
rowLabel: e.label,
|
|
3528
|
+
colLabel: t.categories[i] ?? ""
|
|
3529
|
+
});
|
|
3530
|
+
});
|
|
3531
|
+
});
|
|
3532
|
+
let D = n.map((e, t) => ({
|
|
3533
|
+
value: t,
|
|
3534
|
+
y: c(f + x * t + x / 2),
|
|
3535
|
+
label: e.label
|
|
3536
|
+
})), O = k(t.categories, (e) => c(d + b * e + b / 2), b, !1), A = Array.from({ length: 5 }, (e, n) => {
|
|
3537
|
+
let r = n / 4, a = St(S, C, r);
|
|
3538
|
+
return {
|
|
3539
|
+
value: a,
|
|
3540
|
+
color: T(a),
|
|
3541
|
+
label: i(a, t.valueFormat, t)
|
|
3542
|
+
};
|
|
3543
|
+
});
|
|
3544
|
+
return {
|
|
3545
|
+
...s,
|
|
3546
|
+
plot: y,
|
|
3547
|
+
heatmapCells: E,
|
|
3548
|
+
heatmapRowTicks: D,
|
|
3549
|
+
heatmapColTicks: O,
|
|
3550
|
+
heatmapLegend: A
|
|
3551
|
+
};
|
|
3552
|
+
}
|
|
3553
|
+
//#endregion
|
|
3554
|
+
//#region ../grid/dist/chart-hierarchy.js
|
|
3555
|
+
function wt(e) {
|
|
3556
|
+
let { spec: t, width: n, height: r, empty: i, frame: a } = e, o = t.treemap ?? t.tree;
|
|
3557
|
+
if (!o) return { ...i };
|
|
3558
|
+
let l = 4 + a.top, u = 4 + a.bottom, d = Math.max(1, n - 4 - 4), f = Math.max(1, r - l - u), p = {
|
|
3559
|
+
x: 4,
|
|
3560
|
+
y: l,
|
|
3561
|
+
w: d,
|
|
3562
|
+
h: f
|
|
3563
|
+
}, m = t.palette ?? s, h = [];
|
|
3564
|
+
function g(e) {
|
|
3565
|
+
return e.children?.length ? e.children.reduce((e, t) => e + g(t), 0) : Math.max(0, e.value ?? 0);
|
|
3566
|
+
}
|
|
3567
|
+
function v(e, t, n, r, i, a) {
|
|
3568
|
+
if (!e.length || r <= 0 || i <= 0) return;
|
|
3569
|
+
let o = e.map(g), s = o.reduce((e, t) => e + t, 0);
|
|
3570
|
+
if (s <= 0) return;
|
|
3571
|
+
let l = e.map((e, t) => ({
|
|
3572
|
+
node: e,
|
|
3573
|
+
value: o[t]
|
|
3574
|
+
})).sort((e, t) => t.value - e.value), u = t, d = n, f = r, p = i, y = s, b = [], x = (e, t, n, r) => {
|
|
3575
|
+
if (n <= 0) return Infinity;
|
|
3576
|
+
let i = n * r / t, a = 0;
|
|
3577
|
+
for (let n of e) {
|
|
3578
|
+
let e = n * r / i, o = Math.max(t / e, e / t);
|
|
3579
|
+
o > a && (a = o);
|
|
3580
|
+
}
|
|
3581
|
+
return a;
|
|
3582
|
+
};
|
|
3583
|
+
function S() {
|
|
3584
|
+
if (!b.length) return;
|
|
3585
|
+
let e = b.reduce((e, t) => e + t.value, 0), t = f * p / y, n = f >= p, r = n ? p : f, i = e * t / r, o = 0;
|
|
3586
|
+
for (let e of b) {
|
|
3587
|
+
let r = e.value * t / i, s = n ? u : u + o, l = n ? d + o : d, f = n ? i : r, p = n ? r : i, g = e.node.color ?? m[(a + h.length) % m.length];
|
|
3588
|
+
if (e.node.children?.length) {
|
|
3589
|
+
h.push({
|
|
3590
|
+
x: c(s),
|
|
3591
|
+
y: c(l),
|
|
3592
|
+
w: c(f),
|
|
3593
|
+
h: c(p),
|
|
3594
|
+
color: g,
|
|
3595
|
+
textColor: _(g),
|
|
3596
|
+
name: e.node.name,
|
|
3597
|
+
value: e.value,
|
|
3598
|
+
depth: a
|
|
3599
|
+
});
|
|
3600
|
+
let t = Math.min(18, p * .25);
|
|
3601
|
+
v(e.node.children, s + 1, l + t, f - 2, p - t - 1, a + 1);
|
|
3602
|
+
} else h.push({
|
|
3603
|
+
x: c(s),
|
|
3604
|
+
y: c(l),
|
|
3605
|
+
w: c(f),
|
|
3606
|
+
h: c(p),
|
|
3607
|
+
color: g,
|
|
3608
|
+
textColor: _(g),
|
|
3609
|
+
name: e.node.name,
|
|
3610
|
+
value: e.value,
|
|
3611
|
+
depth: a
|
|
3612
|
+
});
|
|
3613
|
+
o += r;
|
|
3614
|
+
}
|
|
3615
|
+
n ? (u += i, f -= i) : (d += i, p -= i), y -= e, b = [];
|
|
3616
|
+
}
|
|
3617
|
+
for (let e of l) {
|
|
3618
|
+
let t = f * p / y, n = Math.min(f, p), r = b.reduce((e, t) => e + t.value, 0), i = x(b.map((e) => e.value), n, r, t), a = x([...b.map((e) => e.value), e.value], n, r + e.value, t);
|
|
3619
|
+
b.length && a > i && S(), b.push(e);
|
|
3620
|
+
}
|
|
3621
|
+
S();
|
|
3622
|
+
}
|
|
3623
|
+
return v(o.children ?? [o], 4, l, d, f, 0), {
|
|
3624
|
+
...i,
|
|
3625
|
+
plot: p,
|
|
3626
|
+
treemapCells: h
|
|
3627
|
+
};
|
|
3628
|
+
}
|
|
3629
|
+
function Tt(e, t) {
|
|
3630
|
+
let n = e;
|
|
3631
|
+
for (let e of t) if (n = n?.children?.find((t) => t.name === e), !n) return null;
|
|
3632
|
+
return n ?? null;
|
|
3633
|
+
}
|
|
3634
|
+
function Et(e, t) {
|
|
3635
|
+
let n = (e, r) => {
|
|
3636
|
+
for (let i of e.children ?? []) {
|
|
3637
|
+
let e = [...r, i.name];
|
|
3638
|
+
if (i.name === t) return e;
|
|
3639
|
+
let a = n(i, e);
|
|
3640
|
+
if (a) return a;
|
|
3641
|
+
}
|
|
3642
|
+
return null;
|
|
3643
|
+
};
|
|
3644
|
+
return n(e, []);
|
|
3645
|
+
}
|
|
3646
|
+
//#endregion
|
|
3647
|
+
//#region ../grid/dist/chart-pivot.js
|
|
3648
|
+
var Dt = /* @__PURE__ */ new Set([
|
|
3649
|
+
"scatter",
|
|
3650
|
+
"gauge",
|
|
3651
|
+
"boxplot",
|
|
3652
|
+
"histogram",
|
|
3653
|
+
"range-bar",
|
|
3654
|
+
"range-area",
|
|
3655
|
+
"dumbbell",
|
|
3656
|
+
"bullet",
|
|
3657
|
+
"candlestick",
|
|
3658
|
+
"ohlc"
|
|
3659
|
+
]);
|
|
3660
|
+
function Ot(e) {
|
|
3661
|
+
return !e || Dt.has(e) ? "bar" : e;
|
|
3662
|
+
}
|
|
3663
|
+
function kt(e, t, n) {
|
|
3664
|
+
let r = e[e.length - 1];
|
|
3665
|
+
return r && t.find((e) => n(e.id) === r)?.id || null;
|
|
3666
|
+
}
|
|
3667
|
+
function At(e, t, n) {
|
|
3668
|
+
let r = [], i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map();
|
|
3669
|
+
for (let t of e) {
|
|
3670
|
+
let e = i.get(t.category);
|
|
3671
|
+
e === void 0 && (e = r.length, i.set(t.category, e), r.push(t.category));
|
|
3672
|
+
let o = n ? t.series ?? "" : "value", s = a.get(o);
|
|
3673
|
+
s || (s = [], a.set(o, s)), s[e] = (s[e] ?? 0) + t.value;
|
|
3674
|
+
}
|
|
3675
|
+
return {
|
|
3676
|
+
type: t,
|
|
3677
|
+
categories: r,
|
|
3678
|
+
series: [...a.entries()].map(([e, t]) => ({
|
|
3679
|
+
label: e,
|
|
3680
|
+
values: r.map((e, n) => t[n] ?? 0)
|
|
3681
|
+
}))
|
|
3682
|
+
};
|
|
3683
|
+
}
|
|
3684
|
+
function jt(e) {
|
|
3685
|
+
if (!e) return {};
|
|
3686
|
+
let t = Array.isArray(e.locales) ? e.locales[0] : e.locales, n = t ? { locale: t } : {};
|
|
3687
|
+
return e.type === "number" ? {
|
|
3688
|
+
...n,
|
|
3689
|
+
valueFormat: "number"
|
|
3690
|
+
} : e.type === "currency" ? {
|
|
3691
|
+
...n,
|
|
3692
|
+
valueFormat: "currency",
|
|
3693
|
+
currency: e.currency ?? "USD"
|
|
3694
|
+
} : e.type === "percent" ? e.valueIsPercentPoints ? {
|
|
3695
|
+
...n,
|
|
3696
|
+
yAxis: { formatter: (e) => `${e}%` }
|
|
3697
|
+
} : {
|
|
3698
|
+
...n,
|
|
3699
|
+
valueFormat: "percent"
|
|
3700
|
+
} : {};
|
|
3701
|
+
}
|
|
3702
|
+
function Mt(e, t = {}) {
|
|
3703
|
+
let n = Ot(t.type), r = e.rows.filter((e) => e.__pivotKind === "leaf");
|
|
3704
|
+
r.length || (r = e.rows.filter((e) => e.__pivotKind === "grandTotal")), r.length || (r = e.rows.slice()), t.maxCategories && r.length > t.maxCategories && (r = r.slice(0, t.maxCategories));
|
|
3705
|
+
let i = new Map(e.rows.map((e) => [e.__pivotId, e])), a = (e) => String(e.__pivotLabel ?? "").trim() || "(blank)", o = r.map(a), s = (e) => e.__pivotParentId ? i.get(e.__pivotParentId) : void 0, c = r.length > 0 && r.every((e) => s(e) !== void 0), l;
|
|
3706
|
+
if (c) {
|
|
3707
|
+
l = [];
|
|
3708
|
+
let e;
|
|
3709
|
+
for (let t of r) {
|
|
3710
|
+
let n = t.__pivotParentId, r = l[l.length - 1];
|
|
3711
|
+
r && n === e ? r.span += 1 : (l.push({
|
|
3712
|
+
label: a(s(t)),
|
|
3713
|
+
span: 1
|
|
3714
|
+
}), e = n);
|
|
3715
|
+
}
|
|
3716
|
+
}
|
|
3717
|
+
let u = [], d = (e, n) => {
|
|
3718
|
+
for (let r of e ?? []) !r || r.id === "__pivotRowHeader" || !t.includeTotals && typeof r.id == "string" && r.id.startsWith("pv_group__grand") || (Array.isArray(r.columns) ? d(r.columns, [...n, String(r.header ?? "")]) : typeof r.id == "string" && u.push({
|
|
3719
|
+
id: r.id,
|
|
3720
|
+
path: n,
|
|
3721
|
+
header: String(r.header ?? "")
|
|
3722
|
+
}));
|
|
3723
|
+
};
|
|
3724
|
+
d(e.columns, []);
|
|
3725
|
+
let f = t.includeTotals ? u : u.filter((e) => !e.id.includes("__total")), p = new Set(f.map((e) => e.header)), m = f.map((e) => ({
|
|
3726
|
+
label: e.path.length === 0 ? e.header : p.size > 1 ? [...e.path, e.header].join(" · ") : e.path.join(" · "),
|
|
3727
|
+
values: r.map((t) => {
|
|
3728
|
+
let n = t[e.id];
|
|
3729
|
+
return n == null || n === "" ? NaN : typeof n == "number" ? n : Number(n);
|
|
3730
|
+
})
|
|
3731
|
+
})), h = p.size === 1 && f.length ? f[0].header : "", g = t.yAxisTitle === void 0 ? h : t.yAxisTitle, _ = (t.measures ?? []).map((e) => e.format), v = _[0] && _.every((e) => e && JSON.stringify(e) === JSON.stringify(_[0])) ? _[0] : void 0, y = jt(t.format ?? v);
|
|
3732
|
+
return {
|
|
3733
|
+
type: n,
|
|
3734
|
+
categories: o,
|
|
3735
|
+
series: m,
|
|
3736
|
+
...l && l.length > 1 ? { categoryGroups: l } : {},
|
|
3737
|
+
...t.stacked || t.stacked100 ? { stacked: !0 } : {},
|
|
3738
|
+
...t.stacked100 ? { stacked100: !0 } : {},
|
|
3739
|
+
...t.palette ? { palette: t.palette } : {},
|
|
3740
|
+
...y,
|
|
3741
|
+
...g ? { yAxis: {
|
|
3742
|
+
...y.yAxis,
|
|
3743
|
+
title: g
|
|
3744
|
+
} } : {}
|
|
3745
|
+
};
|
|
3746
|
+
}
|
|
3747
|
+
//#endregion
|
|
3748
|
+
//#region ../grid/dist/chart.js
|
|
3749
|
+
var Nt = /* @__PURE__ */ n({
|
|
3750
|
+
CHART_RESPONSIVE_PRESETS: () => Kt,
|
|
3751
|
+
DEFAULT_PALETTE: () => s,
|
|
3752
|
+
PER_CATEGORY_SERIES_KEYS: () => K,
|
|
3753
|
+
PER_CATEGORY_SPEC_KEYS: () => pe,
|
|
3754
|
+
applyChartFormat: () => qt,
|
|
3755
|
+
arcPath: () => Z,
|
|
3756
|
+
atr: () => we,
|
|
3757
|
+
binValues: () => ae,
|
|
3758
|
+
bollingerBands: () => ve,
|
|
3759
|
+
boxStats: () => j,
|
|
3760
|
+
bucketStart: () => U,
|
|
3761
|
+
bucketsToChartSpec: () => At,
|
|
3762
|
+
buildChart: () => Lt,
|
|
3763
|
+
buildLinePath: () => Ve,
|
|
3764
|
+
chartScales: () => G,
|
|
3765
|
+
chartStyleVars: () => Pt,
|
|
3766
|
+
computeOverlay: () => De,
|
|
3767
|
+
computeOverlayFit: () => Oe,
|
|
3768
|
+
decimateSpec: () => ge,
|
|
3769
|
+
exponentialFit: () => ee,
|
|
3770
|
+
exponentialMovingAverage: () => V,
|
|
3771
|
+
formatChartValue: () => i,
|
|
3772
|
+
guessOhlcColumns: () => Le,
|
|
3773
|
+
heikinAshi: () => Fe,
|
|
3774
|
+
indicatorPane: () => Pe,
|
|
3775
|
+
layoutDataLabels: () => Ze,
|
|
3776
|
+
linearFit: () => R,
|
|
3777
|
+
linearTrend: () => a,
|
|
3778
|
+
logarithmicFit: () => te,
|
|
3779
|
+
lttb: () => me,
|
|
3780
|
+
macd: () => be,
|
|
3781
|
+
markerPath: () => Je,
|
|
3782
|
+
matchResponsiveRules: () => Ft,
|
|
3783
|
+
minMaxIndices: () => J,
|
|
3784
|
+
niceLogScale: () => v,
|
|
3785
|
+
niceScale: () => x,
|
|
3786
|
+
obv: () => Ee,
|
|
3787
|
+
ohlcDirectOptions: () => Re,
|
|
3788
|
+
ordinalDateTicks: () => T,
|
|
3789
|
+
overlayName: () => Ae,
|
|
3790
|
+
paretoSpec: () => Bt,
|
|
3791
|
+
pearson: () => o,
|
|
3792
|
+
percentile: () => H,
|
|
3793
|
+
pickCategories: () => q,
|
|
3794
|
+
pickContrastText: () => _,
|
|
3795
|
+
pivotChartType: () => Ot,
|
|
3796
|
+
pivotFilterColumn: () => kt,
|
|
3797
|
+
pivotResultToChartSpec: () => Mt,
|
|
3798
|
+
polynomialFit: () => L,
|
|
3799
|
+
powerFit: () => ne,
|
|
3800
|
+
rSquared: () => P,
|
|
3801
|
+
reduceValues: () => ie,
|
|
3802
|
+
regressionFit: () => ke,
|
|
3803
|
+
resampleOhlc: () => Ie,
|
|
3804
|
+
resolveResponsive: () => It,
|
|
3805
|
+
rowsToBoxSpec: () => Yt,
|
|
3806
|
+
rowsToChartSpec: () => zt,
|
|
3807
|
+
rowsToDirectSpec: () => Jt,
|
|
3808
|
+
rowsToGaugeSpec: () => Zt,
|
|
3809
|
+
rowsToHistogramSpec: () => Vt,
|
|
3810
|
+
rowsToOhlcSpec: () => Be,
|
|
3811
|
+
rowsToRangeSpec: () => Ht,
|
|
3812
|
+
rowsToScatterSpec: () => Xt,
|
|
3813
|
+
rsi: () => ye,
|
|
3814
|
+
sampleGradient: () => h,
|
|
3815
|
+
simpleMovingAverage: () => B,
|
|
3816
|
+
sliceChartWindow: () => Rt,
|
|
3817
|
+
specToCalendar: () => Wt,
|
|
3818
|
+
specToSankey: () => Gt,
|
|
3819
|
+
specToTreemap: () => Ut,
|
|
3820
|
+
splitPanelIndicators: () => ze,
|
|
3821
|
+
stochastic: () => Te,
|
|
3822
|
+
streamBaseline: () => Ke,
|
|
3823
|
+
vwap: () => Se,
|
|
3824
|
+
wma: () => _e
|
|
3825
|
+
});
|
|
3826
|
+
function Pt(e) {
|
|
3827
|
+
if (!e) return "";
|
|
3828
|
+
let t = [];
|
|
3829
|
+
return e.background && t.push(`--sg-chart-bg:${e.background}`, `--sg-bg:${e.background}`), e.textColor && t.push(`--sg-fg:${e.textColor}`, `--sg-muted:${e.textColor}`), e.gridColor && t.push(`--sg-border:${e.gridColor}`), e.fontSize && Number.isFinite(e.fontSize) && e.fontSize > 0 && t.push(`--sg-chart-font-scale:${Math.round(e.fontSize / 12 * 1e3) / 1e3}`), e.fontFamily && t.push(`font-family:${e.fontFamily}`), t.join(";");
|
|
3830
|
+
}
|
|
3831
|
+
function Ft(e, t, n) {
|
|
3832
|
+
return e?.length ? e.filter((e) => (e.maxWidth == null || t <= e.maxWidth) && (e.minWidth == null || t >= e.minWidth) && (e.maxHeight == null || n <= e.maxHeight)) : [];
|
|
3833
|
+
}
|
|
3834
|
+
function It(e, t, n) {
|
|
3835
|
+
let r = Ft(e.responsive, t, n);
|
|
3836
|
+
if (!r.length) return e;
|
|
3837
|
+
let i = e;
|
|
3838
|
+
for (let e of r) {
|
|
3839
|
+
if (!e.spec) continue;
|
|
3840
|
+
let { width: t, height: n, responsive: r, ...a } = e.spec, o = {
|
|
3841
|
+
...i,
|
|
3842
|
+
...a
|
|
3843
|
+
};
|
|
3844
|
+
for (let e of [
|
|
3845
|
+
"xAxis",
|
|
3846
|
+
"yAxis",
|
|
3847
|
+
"y2Axis"
|
|
3848
|
+
]) a[e] && (o[e] = {
|
|
3849
|
+
...i[e] ?? {},
|
|
3850
|
+
...a[e]
|
|
3851
|
+
});
|
|
3852
|
+
i = o;
|
|
3853
|
+
}
|
|
3854
|
+
return i;
|
|
3855
|
+
}
|
|
3856
|
+
function Lt(e, t = "light") {
|
|
3857
|
+
let n = e.width ?? 520, r = e.height ?? 300, i = It(e, n, r);
|
|
3858
|
+
if (i.type === "pareto") return Lt(Bt(i), t);
|
|
3859
|
+
let a = i.palette ?? s, o = !!(i.stacked || i.stacked100), c = i.series.map((e, t) => ({
|
|
3860
|
+
...e,
|
|
3861
|
+
values: (e.nullAs ?? i.nullAs) === "zero" ? e.values.map((e) => Number.isFinite(e) ? e : 0) : e.values,
|
|
3862
|
+
color: e.color ?? a[t % a.length],
|
|
3863
|
+
kind: W(e, i.type),
|
|
3864
|
+
axis: e.axis ?? "left"
|
|
3865
|
+
})), l = de(i, n, r), u = se(i), d = c.map((e) => ({
|
|
3866
|
+
label: e.label,
|
|
3867
|
+
color: e.color
|
|
3868
|
+
})), f = {
|
|
3869
|
+
spec: i,
|
|
3870
|
+
theme: t,
|
|
3871
|
+
width: n,
|
|
3872
|
+
height: r,
|
|
3873
|
+
palette: a,
|
|
3874
|
+
stacked: o,
|
|
3875
|
+
series: c,
|
|
3876
|
+
legend: d,
|
|
3877
|
+
empty: {
|
|
3878
|
+
type: i.type,
|
|
3879
|
+
width: n,
|
|
3880
|
+
height: r,
|
|
3881
|
+
plot: {
|
|
3882
|
+
x: 0,
|
|
3883
|
+
y: 0,
|
|
3884
|
+
w: n,
|
|
3885
|
+
h: r
|
|
3886
|
+
},
|
|
3887
|
+
axes: null,
|
|
3888
|
+
frame: l,
|
|
3889
|
+
grid: {
|
|
3890
|
+
x: !1,
|
|
3891
|
+
y: !1
|
|
3892
|
+
},
|
|
3893
|
+
referenceBands: [],
|
|
3894
|
+
bars: [],
|
|
3895
|
+
candles: [],
|
|
3896
|
+
boxes: [],
|
|
3897
|
+
errorBars: [],
|
|
3898
|
+
stems: [],
|
|
3899
|
+
arcs: [],
|
|
3900
|
+
chordRibbons: [],
|
|
3901
|
+
bullets: [],
|
|
3902
|
+
drawings: [],
|
|
3903
|
+
seriesLabels: [],
|
|
3904
|
+
polarAxes: [],
|
|
3905
|
+
polarRings: [],
|
|
3906
|
+
lines: [],
|
|
3907
|
+
slices: [],
|
|
3908
|
+
yTicks: [],
|
|
3909
|
+
y2Ticks: [],
|
|
3910
|
+
hasRightAxis: !1,
|
|
3911
|
+
xTicks: [],
|
|
3912
|
+
categoryGroupTicks: [],
|
|
3913
|
+
xLabelRotated: !1,
|
|
3914
|
+
xLabelAngle: 0,
|
|
3915
|
+
legend: d,
|
|
3916
|
+
donut: null,
|
|
3917
|
+
referenceLines: [],
|
|
3918
|
+
scatterPoints: [],
|
|
3919
|
+
orientation: "vertical",
|
|
3920
|
+
valueTicks: [],
|
|
3921
|
+
catTicks: [],
|
|
3922
|
+
referenceLinesV: [],
|
|
3923
|
+
overlays: [],
|
|
3924
|
+
annotations: [],
|
|
3925
|
+
heatmapCells: [],
|
|
3926
|
+
heatmapRowTicks: [],
|
|
3927
|
+
heatmapColTicks: [],
|
|
3928
|
+
heatmapLegend: [],
|
|
3929
|
+
funnelSegments: [],
|
|
3930
|
+
radarRings: [],
|
|
3931
|
+
radarAxes: [],
|
|
3932
|
+
radarSeries: [],
|
|
3933
|
+
radarCenter: null,
|
|
3934
|
+
treemapCells: [],
|
|
3935
|
+
calendarCells: [],
|
|
3936
|
+
calendarMonthTicks: [],
|
|
3937
|
+
calendarLegend: [],
|
|
3938
|
+
gauge: null,
|
|
3939
|
+
sankeyNodes: [],
|
|
3940
|
+
sankeyLinks: []
|
|
3941
|
+
},
|
|
3942
|
+
frame: l,
|
|
3943
|
+
axes: u
|
|
3944
|
+
};
|
|
3945
|
+
return i.type === "waterfall" ? vt(f) : i.type === "funnel" ? yt(f) : i.type === "radar" ? ct(f) : i.type === "calendar" ? xt(f) : i.type === "gauge" ? lt(f) : i.type === "treemap" ? wt(f) : i.type === "sankey" ? bt(f) : i.type === "heatmap" ? Ct(f) : i.type === "pie" ? ut(f) : i.type === "scatter" ? nt(f) : i.type === "sunburst" ? mt(f) : i.type === "radial-bar" ? ht(f) : i.type === "radial-column" || i.type === "nightingale" ? gt(f) : i.type === "chord" ? _t(f) : i.type === "bullet" ? st(f) : i.orientation === "horizontal" && i.type !== "histogram" && c.length > 0 && c.every((e) => e.kind === "bar") ? rt(f) : it(f);
|
|
3946
|
+
}
|
|
3947
|
+
function Rt(e, t, n) {
|
|
3948
|
+
let r = Math.max(0, t), i = Math.min(e.categories.length - 1, n);
|
|
3949
|
+
if (i < r) return {
|
|
3950
|
+
...e,
|
|
3951
|
+
categories: [],
|
|
3952
|
+
series: e.series.map((e) => ({
|
|
3953
|
+
...e,
|
|
3954
|
+
values: []
|
|
3955
|
+
}))
|
|
3956
|
+
};
|
|
3957
|
+
let a = Array(i - r + 1);
|
|
3958
|
+
for (let e = r; e <= i; e += 1) a[e - r] = e;
|
|
3959
|
+
return q(e, a);
|
|
3960
|
+
}
|
|
3961
|
+
function zt(e, t) {
|
|
3962
|
+
let n = t.reduce ?? "sum", r = re(n), i = Array.isArray(t.value) ? t.value : [t.value], a = (e) => r ? ie(e.samples, n) : n === "count" ? e.count : n === "avg" ? e.count ? e.sum / e.count : 0 : e.sum, o = [], s = /* @__PURE__ */ new Map(), c = (e) => {
|
|
3963
|
+
let t = s.get(e);
|
|
3964
|
+
return t === void 0 && (t = o.length, s.set(e, t), o.push(e)), t;
|
|
3965
|
+
}, l = /* @__PURE__ */ new Map(), u = (e) => {
|
|
3966
|
+
let t = l.get(e);
|
|
3967
|
+
return t || (t = [], l.set(e, t)), t;
|
|
3968
|
+
}, d = (e, t, n) => {
|
|
3969
|
+
e.sum += t, e.count += 1, r && e.samples.push(t), n !== void 0 && e.rowIds.push(n);
|
|
3970
|
+
}, f = () => ({
|
|
3971
|
+
sum: 0,
|
|
3972
|
+
count: 0,
|
|
3973
|
+
rowIds: [],
|
|
3974
|
+
samples: []
|
|
3975
|
+
}), p = t.idField !== void 0;
|
|
3976
|
+
for (let n of e) {
|
|
3977
|
+
let e = n[t.category], r = t.bucket ? U(e, t.bucket) : String(e ?? "");
|
|
3978
|
+
if (t.bucket && !r) continue;
|
|
3979
|
+
let a = c(r), o = p ? n[t.idField] : void 0;
|
|
3980
|
+
if (t.series) {
|
|
3981
|
+
let e = u(String(n[t.series] ?? "")), r = Number(n[i[0]]), s = e[a] ?? (e[a] = f());
|
|
3982
|
+
Number.isFinite(r) && d(s, r, o);
|
|
3983
|
+
} else for (let e of i) {
|
|
3984
|
+
let t = u(e), r = Number(n[e]), i = t[a] ?? (t[a] = f());
|
|
3985
|
+
Number.isFinite(r) && d(i, r, o);
|
|
3986
|
+
}
|
|
3987
|
+
}
|
|
3988
|
+
let m = [...l.entries()].map(([e, n]) => ({
|
|
3989
|
+
label: t.series ? e : t.seriesLabel && i.length === 1 ? t.seriesLabel : e,
|
|
3990
|
+
values: o.map((e, t) => a(n[t] ?? f())),
|
|
3991
|
+
rowIds: p ? o.map((e, t) => (n[t]?.rowIds ?? []).slice()) : void 0
|
|
3992
|
+
})), h = o.map((e, t) => m.reduce((e, n) => e + (Number.isFinite(n.values[t]) ? n.values[t] : 0), 0)), g = t.sort ?? (t.topN ? "value-desc" : t.bucket ? "category" : "none"), _ = o.map((e, t) => t);
|
|
3993
|
+
g === "value-desc" ? _.sort((e, t) => h[t] - h[e]) : g === "value-asc" ? _.sort((e, t) => h[e] - h[t]) : g === "category" && _.sort((e, t) => o[e].localeCompare(o[t]));
|
|
3994
|
+
let v, y;
|
|
3995
|
+
if (t.topN && _.length > t.topN) {
|
|
3996
|
+
let e = t.otherLabel ?? "Other", n = _.find((t) => o[t] === e), r = _.slice(0, t.topN).filter((e) => e !== n), i = _.filter((e) => !r.includes(e));
|
|
3997
|
+
v = r.map((e) => o[e]).concat(e), y = m.map((e) => ({
|
|
3998
|
+
label: e.label,
|
|
3999
|
+
values: r.map((t) => e.values[t]).concat(i.reduce((t, n) => t + (Number.isFinite(e.values[n]) ? e.values[n] : 0), 0)),
|
|
4000
|
+
rowIds: e.rowIds ? r.map((t) => e.rowIds[t]).concat([i.flatMap((t) => e.rowIds[t] ?? [])]) : void 0
|
|
4001
|
+
}));
|
|
4002
|
+
} else v = _.map((e) => o[e]), y = m.map((e) => ({
|
|
4003
|
+
label: e.label,
|
|
4004
|
+
values: _.map((t) => e.values[t]),
|
|
4005
|
+
rowIds: e.rowIds ? _.map((t) => e.rowIds[t]) : void 0
|
|
4006
|
+
}));
|
|
4007
|
+
return {
|
|
4008
|
+
type: t.type,
|
|
4009
|
+
categories: v,
|
|
4010
|
+
series: y,
|
|
4011
|
+
width: t.width,
|
|
4012
|
+
height: t.height,
|
|
4013
|
+
stacked: t.stacked,
|
|
4014
|
+
stacked100: t.stacked100,
|
|
4015
|
+
palette: t.palette,
|
|
4016
|
+
...t.bucket ? { xType: "ordinal-time" } : {}
|
|
4017
|
+
};
|
|
4018
|
+
}
|
|
4019
|
+
function Bt(e, t = 80) {
|
|
4020
|
+
let n = e.series[0];
|
|
4021
|
+
if (!n) return {
|
|
4022
|
+
...e,
|
|
4023
|
+
type: "bar"
|
|
4024
|
+
};
|
|
4025
|
+
let r = q(e, e.categories.map((e, t) => t).sort((e, t) => (n.values[t] ?? 0) - (n.values[e] ?? 0))), i = r.series[0].values.map((e) => Number.isFinite(e) ? Math.max(0, e) : 0), a = i.reduce((e, t) => e + t, 0) || 1, o = 0, s = i.map((e) => (o += e, Math.round(o / a * 1e3) / 10));
|
|
4026
|
+
return {
|
|
4027
|
+
...r,
|
|
4028
|
+
type: "bar",
|
|
4029
|
+
series: [{
|
|
4030
|
+
...r.series[0],
|
|
4031
|
+
type: "bar"
|
|
4032
|
+
}, {
|
|
4033
|
+
label: "Cumulative %",
|
|
4034
|
+
values: s,
|
|
4035
|
+
type: "line",
|
|
4036
|
+
axis: "right",
|
|
4037
|
+
marker: "circle",
|
|
4038
|
+
color: r.series[0].overlayColor ?? "#ef4444"
|
|
4039
|
+
}],
|
|
4040
|
+
y2Axis: {
|
|
4041
|
+
min: 0,
|
|
4042
|
+
max: 100,
|
|
4043
|
+
tickInterval: 25,
|
|
4044
|
+
formatter: (e) => `${e}%`,
|
|
4045
|
+
...e.y2Axis ?? {}
|
|
4046
|
+
},
|
|
4047
|
+
referenceLines: [...e.referenceLines ?? [], ...t > 0 ? [{
|
|
4048
|
+
value: t,
|
|
4049
|
+
axis: "right",
|
|
4050
|
+
label: `${t}%`,
|
|
4051
|
+
dashed: !0
|
|
4052
|
+
}] : []]
|
|
4053
|
+
};
|
|
4054
|
+
}
|
|
4055
|
+
function Vt(e, t) {
|
|
4056
|
+
let n = ae(e.map((e) => Number(e[t.value])).filter(Number.isFinite), {
|
|
4057
|
+
bins: t.bins,
|
|
4058
|
+
binWidth: t.binWidth,
|
|
4059
|
+
method: t.method,
|
|
4060
|
+
min: t.min,
|
|
4061
|
+
max: t.max
|
|
4062
|
+
}), r = (t.series ? [...new Set(e.map((e) => String(e[t.series] ?? "")))].map((n) => ({
|
|
4063
|
+
label: n,
|
|
4064
|
+
rows: e.filter((e) => String(e[t.series] ?? "") === n)
|
|
4065
|
+
})) : [{
|
|
4066
|
+
label: t.seriesLabel ?? String(t.value),
|
|
4067
|
+
rows: e
|
|
4068
|
+
}]).map((e) => {
|
|
4069
|
+
let r = Array(n.counts.length).fill(0), i = n.edges[0] ?? 0;
|
|
4070
|
+
for (let a of e.rows) {
|
|
4071
|
+
let e = Number(a[t.value]);
|
|
4072
|
+
if (!Number.isFinite(e) || !n.width) continue;
|
|
4073
|
+
let o = Math.floor((e - i) / n.width);
|
|
4074
|
+
o >= r.length && (o = r.length - 1), o < 0 && (o = 0), r[o] = (r[o] ?? 0) + 1;
|
|
4075
|
+
}
|
|
4076
|
+
return {
|
|
4077
|
+
label: e.label,
|
|
4078
|
+
values: r
|
|
4079
|
+
};
|
|
4080
|
+
});
|
|
4081
|
+
return {
|
|
4082
|
+
type: "histogram",
|
|
4083
|
+
categories: n.categories,
|
|
4084
|
+
series: r,
|
|
4085
|
+
binEdges: n.edges,
|
|
4086
|
+
xType: "number",
|
|
4087
|
+
...t.palette ? { palette: t.palette } : {},
|
|
4088
|
+
...t.width ? { width: t.width } : {},
|
|
4089
|
+
...t.height ? { height: t.height } : {}
|
|
4090
|
+
};
|
|
4091
|
+
}
|
|
4092
|
+
function Ht(e, t) {
|
|
4093
|
+
let n = [], r = /* @__PURE__ */ new Set();
|
|
4094
|
+
for (let i of e) {
|
|
4095
|
+
let e = String(i[t.category] ?? "");
|
|
4096
|
+
r.has(e) || (r.add(e), n.push(e));
|
|
4097
|
+
}
|
|
4098
|
+
let i = (t.series ? [...new Set(e.map((e) => String(e[t.series] ?? "")))] : [t.seriesLabel ?? `${String(t.low)} to ${String(t.high)}`]).map((r) => {
|
|
4099
|
+
let i = Array(n.length).fill(NaN), a = Array(n.length).fill(NaN);
|
|
4100
|
+
for (let o of e) {
|
|
4101
|
+
if (t.series && String(o[t.series] ?? "") !== r) continue;
|
|
4102
|
+
let e = n.indexOf(String(o[t.category] ?? "")), s = Number(o[t.low]), c = Number(o[t.high]);
|
|
4103
|
+
e < 0 || !Number.isFinite(s) || !Number.isFinite(c) || (i[e] = Math.min(s, c), a[e] = Math.max(s, c));
|
|
4104
|
+
}
|
|
4105
|
+
return {
|
|
4106
|
+
label: r,
|
|
4107
|
+
values: a,
|
|
4108
|
+
lowValues: i
|
|
4109
|
+
};
|
|
4110
|
+
});
|
|
4111
|
+
return {
|
|
4112
|
+
type: t.type ?? "range-bar",
|
|
4113
|
+
categories: n,
|
|
4114
|
+
series: i,
|
|
4115
|
+
...t.palette ? { palette: t.palette } : {},
|
|
4116
|
+
...t.width ? { width: t.width } : {},
|
|
4117
|
+
...t.height ? { height: t.height } : {}
|
|
4118
|
+
};
|
|
4119
|
+
}
|
|
4120
|
+
function Ut(e, t = "Total") {
|
|
4121
|
+
let n = (e) => typeof e == "number" && Number.isFinite(e) && e > 0 ? e : 0;
|
|
4122
|
+
if (e.series.length <= 1) {
|
|
4123
|
+
let r = e.series[0];
|
|
4124
|
+
return {
|
|
4125
|
+
name: t,
|
|
4126
|
+
children: e.categories.map((e, t) => ({
|
|
4127
|
+
name: e,
|
|
4128
|
+
value: n(r?.values[t])
|
|
4129
|
+
})).filter((e) => e.value > 0)
|
|
4130
|
+
};
|
|
4131
|
+
}
|
|
4132
|
+
return {
|
|
4133
|
+
name: t,
|
|
4134
|
+
children: e.categories.map((t, r) => ({
|
|
4135
|
+
name: t,
|
|
4136
|
+
children: e.series.map((e) => ({
|
|
4137
|
+
name: e.label,
|
|
4138
|
+
value: n(e.values[r])
|
|
4139
|
+
})).filter((e) => e.value > 0)
|
|
4140
|
+
})).filter((e) => e.children.length > 0)
|
|
4141
|
+
};
|
|
4142
|
+
}
|
|
4143
|
+
function Wt(e) {
|
|
4144
|
+
let t = e.series[0], n = [];
|
|
4145
|
+
return e.categories.forEach((e, r) => {
|
|
4146
|
+
let i = Date.parse(e);
|
|
4147
|
+
if (!Number.isFinite(i)) return;
|
|
4148
|
+
let a = t?.values[r];
|
|
4149
|
+
typeof a != "number" || !Number.isFinite(a) || n.push({
|
|
4150
|
+
date: new Date(i).toISOString().slice(0, 10),
|
|
4151
|
+
value: a
|
|
4152
|
+
});
|
|
4153
|
+
}), n;
|
|
4154
|
+
}
|
|
4155
|
+
function Gt(e) {
|
|
4156
|
+
let t = [], n = /* @__PURE__ */ new Set();
|
|
4157
|
+
return e.categories.forEach((r, i) => {
|
|
4158
|
+
for (let a of e.series) {
|
|
4159
|
+
let e = a.values[i];
|
|
4160
|
+
if (typeof e != "number" || !Number.isFinite(e) || e <= 0) continue;
|
|
4161
|
+
let o = `from:${r}`, s = `to:${a.label}`;
|
|
4162
|
+
o !== s && (n.add(o), n.add(s), t.push({
|
|
4163
|
+
source: o,
|
|
4164
|
+
target: s,
|
|
4165
|
+
value: e
|
|
4166
|
+
}));
|
|
4167
|
+
}
|
|
4168
|
+
}), {
|
|
4169
|
+
nodes: [...n].map((e) => ({
|
|
4170
|
+
id: e,
|
|
4171
|
+
label: e.slice(e.indexOf(":") + 1)
|
|
4172
|
+
})),
|
|
4173
|
+
links: t
|
|
4174
|
+
};
|
|
4175
|
+
}
|
|
4176
|
+
var Kt = { compact: (e) => ({
|
|
4177
|
+
maxWidth: e,
|
|
4178
|
+
spec: {
|
|
4179
|
+
seriesLabels: !1,
|
|
4180
|
+
dataLabels: { show: !1 },
|
|
4181
|
+
xAxis: { labelRotation: 90 }
|
|
4182
|
+
},
|
|
4183
|
+
legend: !1
|
|
4184
|
+
}) };
|
|
4185
|
+
function qt(e, t) {
|
|
4186
|
+
if (!t) return e;
|
|
4187
|
+
let n = { ...e };
|
|
4188
|
+
t.title !== void 0 && (n.title = t.title || void 0), t.subtitle !== void 0 && (n.subtitle = t.subtitle || void 0), t.caption !== void 0 && (n.caption = t.caption || void 0), t.palette && (n.palette = t.palette), t.seriesLabels !== void 0 && (n.seriesLabels = t.seriesLabels), t.style && (n.style = {
|
|
4189
|
+
...e.style,
|
|
4190
|
+
...t.style
|
|
4191
|
+
}), t.compactBelow != null && t.compactBelow > 0 && (n.responsive = [...e.responsive ?? [], Kt.compact(t.compactBelow)]);
|
|
4192
|
+
let r = (e, t) => {
|
|
4193
|
+
if (!t) return e;
|
|
4194
|
+
let n = { ...e };
|
|
4195
|
+
return t.min !== void 0 && (t.min === null ? delete n.min : n.min = t.min), t.max !== void 0 && (t.max === null ? delete n.max : n.max = t.max), t.title !== void 0 && (n.title = t.title || void 0), t.gridLines !== void 0 && (n.gridLines = t.gridLines), t.format !== void 0 && (n.format = t.format), n;
|
|
4196
|
+
};
|
|
4197
|
+
if (t.xAxis) {
|
|
4198
|
+
let e = { ...n.xAxis };
|
|
4199
|
+
t.xAxis.title !== void 0 && (e.title = t.xAxis.title || void 0), t.xAxis.gridLines !== void 0 && (e.gridLines = t.xAxis.gridLines), t.xAxis.labelRotation !== void 0 && (e.labelRotation = t.xAxis.labelRotation), n.xAxis = e;
|
|
4200
|
+
}
|
|
4201
|
+
return t.yAxis && (n.yAxis = r(n.yAxis, t.yAxis)), t.y2Axis && (n.y2Axis = r(n.y2Axis, t.y2Axis)), t.series && (n.series = e.series.map((e) => {
|
|
4202
|
+
let n = t.series[e.label];
|
|
4203
|
+
if (!n) return e;
|
|
4204
|
+
let r = { ...e };
|
|
4205
|
+
return n.color && (r.color = n.color), n.type && (r.type = n.type), n.axis && (r.axis = n.axis), n.marker && (r.marker = n.marker), n.strokeWidth !== void 0 && (r.strokeWidth = n.strokeWidth), n.dash !== void 0 && (r.dash = n.dash || void 0), n.smooth !== void 0 && (r.smooth = n.smooth), n.stack !== void 0 && (r.stack = n.stack || void 0), r;
|
|
4206
|
+
})), n;
|
|
4207
|
+
}
|
|
4208
|
+
function Jt(e, t, n) {
|
|
4209
|
+
let r = n.category, i = n.value, a = n.series;
|
|
4210
|
+
if (e === "candlestick" || e === "ohlc") {
|
|
4211
|
+
let i = n.ohlc;
|
|
4212
|
+
if (!r || !i) return null;
|
|
4213
|
+
let a = (e) => e;
|
|
4214
|
+
return Be(t, {
|
|
4215
|
+
date: r,
|
|
4216
|
+
open: a(i.open),
|
|
4217
|
+
high: a(i.high),
|
|
4218
|
+
low: a(i.low),
|
|
4219
|
+
close: a(i.close),
|
|
4220
|
+
...i.volume ? { volume: a(i.volume) } : {},
|
|
4221
|
+
...i.bucket ? { bucket: i.bucket } : {},
|
|
4222
|
+
...i.candleStyle ? { candleStyle: i.candleStyle } : {},
|
|
4223
|
+
...i.lastPriceLine ? { lastPriceLine: !0 } : {},
|
|
4224
|
+
type: e
|
|
4225
|
+
});
|
|
4226
|
+
}
|
|
4227
|
+
if (e === "scatter") {
|
|
4228
|
+
let e = n.value2;
|
|
4229
|
+
return !i || !e ? null : Xt(t, {
|
|
4230
|
+
x: i,
|
|
4231
|
+
y: e,
|
|
4232
|
+
...a ? { series: a } : {},
|
|
4233
|
+
...n.palette ? { palette: n.palette } : {}
|
|
4234
|
+
});
|
|
4235
|
+
}
|
|
4236
|
+
if (e === "gauge") return i ? Zt(t, {
|
|
4237
|
+
value: i,
|
|
4238
|
+
...n.reduce ? { reduce: n.reduce } : {}
|
|
4239
|
+
}) : null;
|
|
4240
|
+
if (e === "boxplot") {
|
|
4241
|
+
if (!r || !i) return null;
|
|
4242
|
+
let e = Yt(t, {
|
|
4243
|
+
category: r,
|
|
4244
|
+
value: i,
|
|
4245
|
+
...a ? { series: a } : {}
|
|
4246
|
+
});
|
|
4247
|
+
return n.palette && (e.palette = n.palette), e;
|
|
4248
|
+
}
|
|
4249
|
+
if (e === "histogram") return i ? Vt(t, {
|
|
4250
|
+
value: i,
|
|
4251
|
+
...a ? { series: a } : {},
|
|
4252
|
+
...n.bins ? { bins: n.bins } : {},
|
|
4253
|
+
...n.palette ? { palette: n.palette } : {}
|
|
4254
|
+
}) : null;
|
|
4255
|
+
if (e === "range-bar" || e === "range-area" || e === "dumbbell") {
|
|
4256
|
+
let o = n.value2;
|
|
4257
|
+
if (!r || !i || !o) return null;
|
|
4258
|
+
let s = zt(t, {
|
|
4259
|
+
type: "bar",
|
|
4260
|
+
category: r,
|
|
4261
|
+
value: i,
|
|
4262
|
+
...a ? { series: a } : {},
|
|
4263
|
+
reduce: n.reduce ?? "sum"
|
|
4264
|
+
}), c = zt(t, {
|
|
4265
|
+
type: "bar",
|
|
4266
|
+
category: r,
|
|
4267
|
+
value: o,
|
|
4268
|
+
...a ? { series: a } : {},
|
|
4269
|
+
reduce: n.reduce ?? "sum"
|
|
4270
|
+
});
|
|
4271
|
+
return {
|
|
4272
|
+
type: e,
|
|
4273
|
+
categories: c.categories,
|
|
4274
|
+
series: c.series.map((e, t) => ({
|
|
4275
|
+
...e,
|
|
4276
|
+
label: a ? e.label : `${String(i)} to ${String(o)}`,
|
|
4277
|
+
lowValues: s.series[t]?.values.map((t, n) => Math.min(t, e.values[n] ?? t)) ?? [],
|
|
4278
|
+
values: e.values.map((e, n) => Math.max(e, s.series[t]?.values[n] ?? e))
|
|
4279
|
+
})),
|
|
4280
|
+
...n.palette ? { palette: n.palette } : {}
|
|
4281
|
+
};
|
|
4282
|
+
}
|
|
4283
|
+
if (e === "bullet") {
|
|
4284
|
+
if (!r || !i) return null;
|
|
4285
|
+
let e = zt(t, {
|
|
4286
|
+
type: "bar",
|
|
4287
|
+
category: r,
|
|
4288
|
+
value: i,
|
|
4289
|
+
reduce: n.reduce ?? "sum"
|
|
4290
|
+
}), a = n.value2, o = a ? zt(t, {
|
|
4291
|
+
type: "bar",
|
|
4292
|
+
category: r,
|
|
4293
|
+
value: a,
|
|
4294
|
+
reduce: n.reduce ?? "sum"
|
|
4295
|
+
}) : null;
|
|
4296
|
+
return {
|
|
4297
|
+
type: "bullet",
|
|
4298
|
+
categories: e.categories,
|
|
4299
|
+
series: [{
|
|
4300
|
+
...e.series[0],
|
|
4301
|
+
...o ? { targets: o.series[0].values } : {}
|
|
4302
|
+
}],
|
|
4303
|
+
...n.palette ? { palette: n.palette } : {}
|
|
4304
|
+
};
|
|
4305
|
+
}
|
|
4306
|
+
return null;
|
|
4307
|
+
}
|
|
4308
|
+
function Yt(e, t) {
|
|
4309
|
+
let n = [], r = /* @__PURE__ */ new Set();
|
|
4310
|
+
for (let i of e) {
|
|
4311
|
+
let e = String(i[t.category] ?? "");
|
|
4312
|
+
r.has(e) || (r.add(e), n.push(e));
|
|
4313
|
+
}
|
|
4314
|
+
let i = [], a = /* @__PURE__ */ new Set();
|
|
4315
|
+
if (t.series) for (let n of e) {
|
|
4316
|
+
let e = String(n[t.series] ?? "");
|
|
4317
|
+
a.has(e) || (a.add(e), i.push(e));
|
|
4318
|
+
}
|
|
4319
|
+
else i.push(t.seriesLabel ?? String(t.value));
|
|
4320
|
+
return {
|
|
4321
|
+
type: "boxplot",
|
|
4322
|
+
categories: n,
|
|
4323
|
+
series: i.map((r) => {
|
|
4324
|
+
let i = n.map((n) => {
|
|
4325
|
+
let i = [];
|
|
4326
|
+
for (let a of e) {
|
|
4327
|
+
if (String(a[t.category] ?? "") !== n || t.series && String(a[t.series] ?? "") !== r) continue;
|
|
4328
|
+
let e = a[t.value];
|
|
4329
|
+
if (e == null || e === "") continue;
|
|
4330
|
+
let o = Number(e);
|
|
4331
|
+
Number.isFinite(o) && i.push(o);
|
|
4332
|
+
}
|
|
4333
|
+
return j(i, t.whisker);
|
|
4334
|
+
});
|
|
4335
|
+
return {
|
|
4336
|
+
label: r,
|
|
4337
|
+
values: i.map((e) => e ? e.median : NaN),
|
|
4338
|
+
boxes: i
|
|
4339
|
+
};
|
|
4340
|
+
}),
|
|
4341
|
+
...t.width ? { width: t.width } : {},
|
|
4342
|
+
...t.height ? { height: t.height } : {}
|
|
4343
|
+
};
|
|
4344
|
+
}
|
|
4345
|
+
function Xt(e, t) {
|
|
4346
|
+
let n = /* @__PURE__ */ new Map();
|
|
4347
|
+
for (let r of e) {
|
|
4348
|
+
let e = Number(r[t.x]), i = Number(r[t.y]);
|
|
4349
|
+
if (!Number.isFinite(e) || !Number.isFinite(i)) continue;
|
|
4350
|
+
let a = t.series ? String(r[t.series] ?? "") : t.y, o = {
|
|
4351
|
+
x: e,
|
|
4352
|
+
y: i
|
|
4353
|
+
};
|
|
4354
|
+
if (t.r) {
|
|
4355
|
+
let e = Number(r[t.r]);
|
|
4356
|
+
Number.isFinite(e) && (o.r = e);
|
|
4357
|
+
}
|
|
4358
|
+
t.label && (o.label = String(r[t.label] ?? ""));
|
|
4359
|
+
let s = n.get(a);
|
|
4360
|
+
s ? s.push(o) : n.set(a, [o]);
|
|
4361
|
+
}
|
|
4362
|
+
return {
|
|
4363
|
+
type: "scatter",
|
|
4364
|
+
categories: [],
|
|
4365
|
+
series: [...n].map(([e, t]) => ({
|
|
4366
|
+
label: e,
|
|
4367
|
+
values: [],
|
|
4368
|
+
points: t
|
|
4369
|
+
})),
|
|
4370
|
+
palette: t.palette,
|
|
4371
|
+
width: t.width,
|
|
4372
|
+
height: t.height,
|
|
4373
|
+
xAxisTitle: t.x,
|
|
4374
|
+
yAxisTitle: t.y
|
|
4375
|
+
};
|
|
4376
|
+
}
|
|
4377
|
+
function Zt(e, t) {
|
|
4378
|
+
let n = [];
|
|
4379
|
+
for (let r of e) {
|
|
4380
|
+
let e = Number(r[t.value]);
|
|
4381
|
+
Number.isFinite(e) && n.push(e);
|
|
4382
|
+
}
|
|
4383
|
+
let r = ie(n, t.reduce ?? "sum"), i = Number.isFinite(r) ? r : 0, a = t.min ?? Math.min(0, i);
|
|
4384
|
+
return {
|
|
4385
|
+
type: "gauge",
|
|
4386
|
+
categories: [],
|
|
4387
|
+
series: [],
|
|
4388
|
+
gaugeValue: i,
|
|
4389
|
+
gaugeMin: a,
|
|
4390
|
+
gaugeMax: t.max ?? (i > a ? x(a, i).max : a + 1),
|
|
4391
|
+
gaugeTarget: t.target,
|
|
4392
|
+
gaugeUnit: t.unit,
|
|
4393
|
+
width: t.width,
|
|
4394
|
+
height: t.height
|
|
4395
|
+
};
|
|
4396
|
+
}
|
|
4397
|
+
//#endregion
|
|
4398
|
+
export { o as A, Ae as C, O as D, s as E, D as O, Pe as S, G as T, Et as _, It as a, Ze as b, Vt as c, Rt as d, Wt as f, Tt as g, Ot as h, Ft as i, i as j, a as k, Ht as l, Ut as m, Pt as n, Yt as o, Gt as p, Nt as r, zt as s, Lt as t, Xt as u, Z as v, ge as w, Je as x, Ve as y };
|