@martinomagnifico/tablechart 1.2.0 → 1.2.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/CHANGELOG.md +23 -0
- package/dist/tablechart-shared.d.mts +1 -0
- package/dist/tablechart-shared.mjs +619 -481
- package/dist/tablechart.css +1 -1
- package/dist/tablechart.js +1 -1
- package/package.json +1 -1
|
@@ -177,10 +177,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
177
177
|
}, re = (e) => (e.split(/[.,]/)[1] || "").length, G = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
|
|
178
178
|
minimumFractionDigits: e,
|
|
179
179
|
maximumFractionDigits: e
|
|
180
|
-
}),
|
|
180
|
+
}), K = (e, t, n) => {
|
|
181
181
|
let r = G(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
|
|
182
182
|
return [i, r.slice(+!!i).map((e) => e.value).join("")];
|
|
183
|
-
},
|
|
183
|
+
}, ie = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), q = (e, t) => {
|
|
184
184
|
let n = document.createElement("span");
|
|
185
185
|
if (n.className = "tablechart-badge", n.inert = !0, e.childElementCount > 0) for (let t of Array.from(e.children)) n.appendChild(t.cloneNode(!0));
|
|
186
186
|
else {
|
|
@@ -190,7 +190,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
190
190
|
}
|
|
191
191
|
return t.appendChild(n), n;
|
|
192
192
|
}, ae = (t, n, r, i, a = "%") => {
|
|
193
|
-
let o = t?.textContent || "", s =
|
|
193
|
+
let o = t?.textContent || "", s = ie(o), c = a ? .5 : .5 * 10 ** -re(o.match(/-?[\d.,]+/)?.[0] ?? ""), l = Number.isNaN(s) ? !0 : Math.abs(n - s) <= c + 1e-9, u = {
|
|
194
194
|
label: r,
|
|
195
195
|
computed: n,
|
|
196
196
|
stated: s,
|
|
@@ -267,7 +267,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
267
267
|
below: [.5, 0],
|
|
268
268
|
after: [0, .5],
|
|
269
269
|
before: [1, .5]
|
|
270
|
-
},
|
|
270
|
+
}, xe = (e, t, n, r, i = [.5, .5]) => {
|
|
271
271
|
let [a, o] = be[e.dataset.place ?? ""] ?? i, { width: s, height: c } = J(e);
|
|
272
272
|
return [
|
|
273
273
|
Number.parseFloat(e.style.left) / 100 * n - s * t * a,
|
|
@@ -275,20 +275,20 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
275
275
|
s * t,
|
|
276
276
|
c * t
|
|
277
277
|
];
|
|
278
|
-
},
|
|
278
|
+
}, Se = (e, t, n) => {
|
|
279
279
|
for (let r of e) {
|
|
280
280
|
if (r.dataset.place === "none" || !r.style.left) continue;
|
|
281
281
|
let [e] = be[r.dataset.place ?? ""] ?? [.5, .5], i = J(r).width * t, a = Number.parseFloat(r.style.left) / 100 * n, o = Math.min(Math.max(a, i * e), n - i * (1 - e));
|
|
282
282
|
o !== a && (r.style.left = `${o / n * 100}%`);
|
|
283
283
|
}
|
|
284
|
-
},
|
|
285
|
-
let i = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), a =
|
|
284
|
+
}, Ce = (e, t, n, r) => {
|
|
285
|
+
let i = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), a = Y(i, t, n, r);
|
|
286
286
|
i.forEach((e, t) => {
|
|
287
287
|
t % a && e.setAttribute("data-left-out", "");
|
|
288
288
|
});
|
|
289
|
-
},
|
|
289
|
+
}, Y = (e, t, n, r) => {
|
|
290
290
|
if (e.length < 2) return 1;
|
|
291
|
-
let i = e.map((e) =>
|
|
291
|
+
let i = e.map((e) => xe(e, t, n, r)), a = 2 * t, o = (e, t) => e[0] + e[2] + a <= t[0] || t[0] + t[2] + a <= e[0] || e[1] + e[3] <= t[1] || t[1] + t[3] <= e[1], s = 1;
|
|
292
292
|
for (; s < e.length && i.some((e, t) => t >= s && t % s === 0 && !o(i[t - s], e));) s++;
|
|
293
293
|
return s;
|
|
294
294
|
}, we = {
|
|
@@ -321,7 +321,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
321
321
|
}), u.querySelector(`:scope > .${m}`)), !n) return;
|
|
322
322
|
let v = J(n).width * l, y = J(n).height * l, b = 4 * l, x = f.flat().flatMap((e) => !e.style.left || e.dataset.place === "none" || e.hasAttribute("data-left-out") ? [] : [{
|
|
323
323
|
label: e,
|
|
324
|
-
box:
|
|
324
|
+
box: xe(e, l, D, c)
|
|
325
325
|
}]), S = [0, y + b / 2].flatMap((e) => [
|
|
326
326
|
[
|
|
327
327
|
g - v / 2,
|
|
@@ -371,7 +371,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
371
371
|
draw(t, n, r) {
|
|
372
372
|
let { rows: i, cx: a, y: s, x: c, height: l, unit: u, svg: d, after: f } = r, p = i.filter((e) => !e.isTotal && !e.missing), h = t.hasAttribute("data-name"), g = (t.getAttribute(h ? "data-name" : "data-value") ?? "").trim(), _, v, y;
|
|
373
373
|
if (h) {
|
|
374
|
-
let t = p.map((e) =>
|
|
374
|
+
let t = p.map((e) => ie(e.label));
|
|
375
375
|
if (r.categories[0]?.parentElement?.dataset.place === "beside" || t.some(Number.isNaN)) {
|
|
376
376
|
console.warn(`[${e}] A reference line among the names needs names that are numbers, under columns or points.`);
|
|
377
377
|
return;
|
|
@@ -568,7 +568,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
568
568
|
}, Fe = (e, t, n) => {
|
|
569
569
|
let r = t.series.some((e) => e.focus);
|
|
570
570
|
e.style.setProperty("--n", String(n)), e.style.setProperty("--m", r && !t.series[n].focus ? "1" : "0"), e.style.setProperty("--palette", `var(--tablechart-color-${n + 1})`);
|
|
571
|
-
}, Ie = (e, t, n, i = {}, a = "") => {
|
|
571
|
+
}, Ie = (e, t) => e.some((n, r) => r !== t && !n.cell.missing && n.to !== n.from && n.from === e[t].to), Le = (e, t, n, i = {}, a = "") => {
|
|
572
572
|
let o = {
|
|
573
573
|
class: F(r, t),
|
|
574
574
|
"data-kind": "bar",
|
|
@@ -589,7 +589,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
589
589
|
...je(e, t, r)
|
|
590
590
|
}));
|
|
591
591
|
};
|
|
592
|
-
},
|
|
592
|
+
}, Re = {
|
|
593
593
|
segments: (e) => e.map((e) => ({
|
|
594
594
|
...e,
|
|
595
595
|
from: 0,
|
|
@@ -603,9 +603,9 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
603
603
|
totals: !0,
|
|
604
604
|
breakable: !0,
|
|
605
605
|
aspect: .5,
|
|
606
|
-
minHeight: ({ labelHeight: e, nameHeight: t, rows: n, series: r, stacked: i }) => {
|
|
607
|
-
let
|
|
608
|
-
return n * Math.max(
|
|
606
|
+
minHeight: ({ labelHeight: e, nameHeight: t, rows: n, series: r, stacked: i, labels: a }) => {
|
|
607
|
+
let o = e * 1.1, s = r > 1 && !i ? o * (r + .15 * (r - 1)) / .7 : i || a === "inside" ? o / .58 : o;
|
|
608
|
+
return n * Math.max(s, t * 1.2);
|
|
609
609
|
},
|
|
610
610
|
categories: "beside",
|
|
611
611
|
headroom: () => 0,
|
|
@@ -629,24 +629,25 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
629
629
|
}
|
|
630
630
|
let V = m - p - R - z, H = p + z + b(v, V), U = (e) => e < 0 ? H - b(e, V) : H + b(e, V);
|
|
631
631
|
if (e.squeeze && (e.breakX = U(e.squeeze.gap)), e.x = U, e.stacked) {
|
|
632
|
-
e.
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
o(
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
632
|
+
let t = e.length("--tablechart-stack-gap", "1px") ?? a;
|
|
633
|
+
e.rows.forEach((r, i) => {
|
|
634
|
+
let o = Ne(r, e.series.length), s = Le(e, r, i, { "data-grow": "right" }, o.bottom < 0 ? `${H - U(o.bottom)}px center` : ""), l = S(i) - C / 2, u = Me(r, e.series.length);
|
|
635
|
+
u.forEach(({ from: r, to: o, cell: c }, d) => {
|
|
636
|
+
let f = e.seriesValues[d][i];
|
|
637
|
+
if (f.dataset.place = "none", c.missing || o === r) return;
|
|
638
|
+
let p = Math.min(U(r), U(o)), m = Math.max(U(r), U(o)), h = Ie(u, d) ? Math.min(t, (m - p) / 2) : 0, [g, _] = U(o) > U(r) ? [p, m - h] : [p + h, m];
|
|
639
|
+
s(d, {
|
|
640
|
+
x: g,
|
|
641
|
+
y: l,
|
|
642
|
+
width: Math.max(_ - g, 1),
|
|
642
643
|
height: C,
|
|
643
|
-
...
|
|
644
|
-
}),
|
|
644
|
+
...o < r && { "data-grow": "left" }
|
|
645
|
+
}), f.dataset.place = "inside", f.toggleAttribute("data-left-out", !_e(f, m - p, a) || J(f).height * a > C), Fe(f, e, d), L(f, (p + m) / 2, S(i), D, n);
|
|
645
646
|
});
|
|
646
|
-
let
|
|
647
|
-
|
|
648
|
-
let
|
|
649
|
-
|
|
647
|
+
let d = e.totals[i];
|
|
648
|
+
d && (d.dataset.place = I(i) ? "before" : "after", L(d, I(i) ? U(o.bottom) - O : U(o.top) + O, S(i), D, n));
|
|
649
|
+
let f = c[i];
|
|
650
|
+
f && L(f, p - 8 * a, S(i), D, n);
|
|
650
651
|
}), o.appendChild(P("line", {
|
|
651
652
|
class: i,
|
|
652
653
|
x1: H,
|
|
@@ -718,7 +719,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
718
719
|
y2: n
|
|
719
720
|
}));
|
|
720
721
|
}
|
|
721
|
-
},
|
|
722
|
+
}, ze = {
|
|
722
723
|
segments: (e) => e.map((e) => ({
|
|
723
724
|
...e,
|
|
724
725
|
from: 0,
|
|
@@ -736,24 +737,25 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
736
737
|
draw(e) {
|
|
737
738
|
let { segments: t, cx: n, y: a, barWidth: o, height: s, unit: c, svg: l, values: u, labels: d, insideAlign: f } = e, p = a(0);
|
|
738
739
|
if (e.stacked) {
|
|
739
|
-
e.
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
l(f,
|
|
746
|
-
|
|
747
|
-
|
|
740
|
+
let t = e.length("--tablechart-stack-gap", "1px") ?? c;
|
|
741
|
+
e.rows.forEach((r, i) => {
|
|
742
|
+
let l = Ne(r, e.series.length), u = Le(e, r, i, {}, l.bottom < 0 ? `center ${p - a(l.top)}px` : ""), d = n(i) - o / 2, f = Me(r, e.series.length);
|
|
743
|
+
f.forEach(({ from: r, to: l, cell: p }, m) => {
|
|
744
|
+
let h = e.seriesValues[m][i];
|
|
745
|
+
if (h.dataset.place = "none", p.missing || l === r) return;
|
|
746
|
+
let g = Math.min(a(l), a(r)), _ = Math.max(a(l), a(r)), v = Ie(f, m) ? Math.min(t, (_ - g) / 2) : 0, [y, b] = a(l) < a(r) ? [g + v, _] : [g, _ - v];
|
|
747
|
+
u(m, {
|
|
748
|
+
x: d,
|
|
749
|
+
y,
|
|
748
750
|
width: o,
|
|
749
|
-
height: Math.max(
|
|
750
|
-
...
|
|
751
|
-
}),
|
|
751
|
+
height: Math.max(b - y, 1),
|
|
752
|
+
...l < r && { "data-grow": "down" }
|
|
753
|
+
}), h.dataset.place = "inside", h.toggleAttribute("data-left-out", !ge(h, _ - g, c) || J(h).width * c > o - 4 * c), Fe(h, e, m), L(h, n(i), (g + _) / 2, D, s);
|
|
752
754
|
});
|
|
753
|
-
let
|
|
754
|
-
if (
|
|
755
|
-
let e =
|
|
756
|
-
|
|
755
|
+
let m = e.totals[i];
|
|
756
|
+
if (m) {
|
|
757
|
+
let e = l.top === 0 && l.bottom < 0;
|
|
758
|
+
m.dataset.place = e ? "below" : "outside", L(m, n(i), e ? a(l.bottom) + 4 * c : a(l.top) - 4 * c, D, s);
|
|
757
759
|
}
|
|
758
760
|
}), l.appendChild(P("line", {
|
|
759
761
|
class: i,
|
|
@@ -829,7 +831,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
829
831
|
y2: p
|
|
830
832
|
}));
|
|
831
833
|
}
|
|
832
|
-
},
|
|
834
|
+
}, Be = 0, Ve = (e) => e.filter((e) => !e.isTotal), He = {
|
|
833
835
|
aspect: .66,
|
|
834
836
|
centre: !0,
|
|
835
837
|
headroom: () => 0,
|
|
@@ -840,7 +842,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
840
842
|
kind: "bar"
|
|
841
843
|
})),
|
|
842
844
|
draw({ rows: e, height: t, unit: n, labelHeight: r, svg: i, values: a, config: o, centre: s }) {
|
|
843
|
-
let c = D / 2, u = t / 2, d =
|
|
845
|
+
let c = D / 2, u = t / 2, d = Ve(e).reduce((e, t) => e + Math.abs(t.value), 0);
|
|
844
846
|
if (!d) return;
|
|
845
847
|
let f = r * 1.2 + 10 * n, p = Math.max(Math.min(D, t) / 2 - f, 10), m = p * o.ringfill, h = p - m / 2, g = 2 * Math.PI * h, _ = [], v = 0, y = 0, b = 0;
|
|
846
848
|
if (e.forEach((e, o) => {
|
|
@@ -876,7 +878,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
876
878
|
let k = p + 9 * n, M = J(s).width * n / 2;
|
|
877
879
|
L(s, c + E * (k + Math.abs(E) * M), u + O * (k + Math.abs(O) * r * .7), D, t), s.dataset.place = "around", v += C, b += f, y += 1;
|
|
878
880
|
}), _.length > 1) {
|
|
879
|
-
let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++
|
|
881
|
+
let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++Be}`, a = P("mask", {
|
|
880
882
|
id: r,
|
|
881
883
|
maskUnits: "userSpaceOnUse"
|
|
882
884
|
});
|
|
@@ -901,17 +903,17 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
901
903
|
}
|
|
902
904
|
s && L(s, c, u, D, t);
|
|
903
905
|
}
|
|
904
|
-
},
|
|
906
|
+
}, Ue = [
|
|
905
907
|
"circle",
|
|
906
908
|
"square",
|
|
907
909
|
"diamond"
|
|
908
910
|
], X = (e, t) => {
|
|
909
|
-
let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r =
|
|
911
|
+
let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = Ue.find((e) => n.includes(e));
|
|
910
912
|
return {
|
|
911
|
-
shape: r ??
|
|
913
|
+
shape: r ?? Ue[Math.floor(t / 2) % Ue.length],
|
|
912
914
|
open: n.includes("open") || !n.includes("filled") && !r && t % 2 == 1
|
|
913
915
|
};
|
|
914
|
-
},
|
|
916
|
+
}, We = (e, t, n, r, i = {}) => {
|
|
915
917
|
if (e === "square") {
|
|
916
918
|
let e = r * .88;
|
|
917
919
|
return P("rect", {
|
|
@@ -943,7 +945,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
943
945
|
...i
|
|
944
946
|
});
|
|
945
947
|
}, Z = (e) => Number(e.toFixed(2));
|
|
946
|
-
function
|
|
948
|
+
function Ge(e, t) {
|
|
947
949
|
let n = e.length;
|
|
948
950
|
if (n < 2) return e.map(() => 0);
|
|
949
951
|
let r = (n) => (t[n + 1] - t[n]) / (e[n + 1] - e[n] || 1), i = Array(n).fill(0);
|
|
@@ -960,24 +962,24 @@ function We(e, t) {
|
|
|
960
962
|
};
|
|
961
963
|
return i[0] = a(0, 1, i[1]), i[n - 1] = a(n - 2, n - 1, i[n - 2]), i;
|
|
962
964
|
}
|
|
963
|
-
function
|
|
965
|
+
function Ke(e, t, n, r) {
|
|
964
966
|
let i = (t[0] - e[0]) / 3;
|
|
965
967
|
return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
|
|
966
968
|
}
|
|
967
|
-
function
|
|
968
|
-
let [i, a] =
|
|
969
|
+
function qe(e, t, n, r) {
|
|
970
|
+
let [i, a] = Ke(e, t, n, r), o = ([e, t]) => `${Z(e)},${Z(t)}`;
|
|
969
971
|
return `C${o(i)} ${o(a)} ${o(t)}`;
|
|
970
972
|
}
|
|
971
|
-
function
|
|
973
|
+
function Je(e, t, n) {
|
|
972
974
|
let r = Array(e).fill(0), i = [], a = () => {
|
|
973
|
-
|
|
975
|
+
Ge(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
|
|
974
976
|
r[i[t]] = e;
|
|
975
977
|
}), i = [];
|
|
976
978
|
};
|
|
977
979
|
for (let n = 0; n < e; n++) t(n) ? a() : i.push(n);
|
|
978
980
|
return a(), r;
|
|
979
981
|
}
|
|
980
|
-
var
|
|
982
|
+
var Ye = (e) => {
|
|
981
983
|
let t = e.length, n = e.reduce((e, t) => e + t.x, 0) / t, r = e.reduce((e, t) => e + t.y, 0) / t, i = e.reduce((e, t) => e + (t.x - n) ** 2, 0), a = i ? e.reduce((e, t) => e + (t.x - n) * (t.y - r), 0) / i : 0, o = (e) => r + a * (e - n), s = t > 2 ? Math.sqrt(e.reduce((e, t) => e + (t.y - o(t.x)) ** 2, 0) / (t - 2)) : 0, c = i ? s / Math.sqrt(i) : 0;
|
|
982
984
|
return {
|
|
983
985
|
at: o,
|
|
@@ -985,7 +987,7 @@ var Je = (e) => {
|
|
|
985
987
|
t: c ? a / c : a ? Infinity : 0,
|
|
986
988
|
n: t
|
|
987
989
|
};
|
|
988
|
-
},
|
|
990
|
+
}, Xe = [
|
|
989
991
|
12.71,
|
|
990
992
|
4.3,
|
|
991
993
|
3.18,
|
|
@@ -1001,29 +1003,29 @@ var Je = (e) => {
|
|
|
1001
1003
|
2.16,
|
|
1002
1004
|
2.14,
|
|
1003
1005
|
2.13
|
|
1004
|
-
],
|
|
1006
|
+
], Ze = (e) => Xe[e - 1] ?? (e < 30 ? 2.1 : 2), Qe = (e) => {
|
|
1005
1007
|
let t = e.map((e) => e.y), n = Math.min(...t), r = Math.max(...t), i = n < 0 && r > 0, a = r - n || 1;
|
|
1006
1008
|
return {
|
|
1007
1009
|
mean: t.reduce((e, t) => e + t, 0) / t.length,
|
|
1008
1010
|
share: (e, t) => e / (i ? a : Math.abs(t) || a) * 100
|
|
1009
1011
|
};
|
|
1010
|
-
},
|
|
1012
|
+
}, $e = (e, t = 5, n = 25) => {
|
|
1011
1013
|
if (e.length < 4) return null;
|
|
1012
|
-
let { mean: r, share: i } =
|
|
1013
|
-
c.length && o(c) && (s =
|
|
1014
|
-
let l = s.at, u = e[0], d = e[e.length - 1], f = i(l(d.x) - l(u.x), r), p = Math.abs(s.t) >=
|
|
1014
|
+
let { mean: r, share: i } = Qe(e), a = (t) => e.filter((e) => Math.abs(i(e.y - t(e.x), t(e.x))) > n), o = (t) => t.length <= e.length / 5, s = Ye(e), c = a(s.at);
|
|
1015
|
+
c.length && o(c) && (s = Ye(e.filter((e) => !c.includes(e))), c = a(s.at)), o(c) || (s = Ye(e), c = []);
|
|
1016
|
+
let l = s.at, u = e[0], d = e[e.length - 1], f = i(l(d.x) - l(u.x), r), p = Math.abs(s.t) >= Ze(s.n - 2), m = Math.abs(i(s.spread, r)) < t, h = Math.abs(f) < t ? "flat" : f > 0 ? "up" : "down", g = h === "flat" ? m ? "flat" : "unclear" : p ? h : "unclear";
|
|
1015
1017
|
return {
|
|
1016
1018
|
course: g,
|
|
1017
1019
|
line: l,
|
|
1018
1020
|
outside: g === "unclear" ? [] : c
|
|
1019
1021
|
};
|
|
1020
|
-
},
|
|
1022
|
+
}, et = (e) => e.map((e) => ({
|
|
1021
1023
|
...e,
|
|
1022
1024
|
from: 0,
|
|
1023
1025
|
to: e.value,
|
|
1024
1026
|
kind: "bar"
|
|
1025
|
-
})),
|
|
1026
|
-
segments:
|
|
1027
|
+
})), tt = (e) => ({
|
|
1028
|
+
segments: et,
|
|
1027
1029
|
series: !0,
|
|
1028
1030
|
stackable: !0,
|
|
1029
1031
|
running: !0,
|
|
@@ -1057,12 +1059,12 @@ var Je = (e) => {
|
|
|
1057
1059
|
"data-from": e + 1,
|
|
1058
1060
|
"data-to": t + 1,
|
|
1059
1061
|
...b && { "data-flat": "" }
|
|
1060
|
-
}), ne = x ? r.map((e, t) =>
|
|
1062
|
+
}), ne = x ? r.map((e, t) => Je(n.length, (e) => A(t, e), (e) => F(t, e))) : [], W = x && e ? r.map((e, t) => Je(n.length, (e) => A(t, e), (e) => [c(e), l(N(t, e))])) : [], re = (e, t, n) => {
|
|
1061
1063
|
let r = [];
|
|
1062
1064
|
return e.forEach(([i, a], o) => {
|
|
1063
|
-
b ? (r.push(`H${Z(i + n * E / 2)}`), o < e.length - 1 && r.push(`V${Z(e[o + 1][1])}`)) : o > 0 && r.push(t ?
|
|
1065
|
+
b ? (r.push(`H${Z(i + n * E / 2)}`), o < e.length - 1 && r.push(`V${Z(e[o + 1][1])}`)) : o > 0 && r.push(t ? qe(e[o - 1], [i, a], t[o - 1], t[o]) : `L${Z(i)},${Z(a)}`);
|
|
1064
1066
|
}), r;
|
|
1065
|
-
}, G = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [c(t + r), l(i(e, t + r))]),
|
|
1067
|
+
}, G = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [c(t + r), l(i(e, t + r))]), K = (e, t, n, r) => x ? e[t].slice(n, r + 1) : null, ie = (e) => c(e) - (b ? E / 2 : 0), q = (e) => c(e) + (b ? E / 2 : 0), ae = (e) => {
|
|
1066
1068
|
let t = P("g", {
|
|
1067
1069
|
class: d,
|
|
1068
1070
|
...I[e].attrs,
|
|
@@ -1074,10 +1076,10 @@ var Je = (e) => {
|
|
|
1074
1076
|
});
|
|
1075
1077
|
t.appendChild(r);
|
|
1076
1078
|
for (let [t, i] of n) {
|
|
1077
|
-
let n = G(e, t, i, M), a = G(e, t, i, N), o =
|
|
1078
|
-
`M${Z(
|
|
1079
|
-
`L${Z(
|
|
1080
|
-
...re(n,
|
|
1079
|
+
let n = G(e, t, i, M), a = G(e, t, i, N), o = K(W, e, t, i)?.reverse() ?? null, s = [
|
|
1080
|
+
`M${Z(ie(t))},${Z(a[0][1])}`,
|
|
1081
|
+
`L${Z(ie(t))},${Z(n[0][1])}`,
|
|
1082
|
+
...re(n, K(ne, e, t, i), 1),
|
|
1081
1083
|
`L${Z(q(i))},${Z(a[a.length - 1][1])}`,
|
|
1082
1084
|
...re(a.reverse(), o, -1),
|
|
1083
1085
|
"Z"
|
|
@@ -1092,7 +1094,7 @@ var Je = (e) => {
|
|
|
1092
1094
|
}, oe = (e) => {
|
|
1093
1095
|
let t = r[e];
|
|
1094
1096
|
for (let [n, r] of H(e)) {
|
|
1095
|
-
let i = G(e, n, r, M), a = [`M${Z(
|
|
1097
|
+
let i = G(e, n, r, M), a = [`M${Z(ie(n))},${Z(i[0][1])}`, ...re(i, K(ne, e, n, r), 1)].join(" ");
|
|
1096
1098
|
_.appendChild(P("path", {
|
|
1097
1099
|
class: u,
|
|
1098
1100
|
...I[e].attrs,
|
|
@@ -1108,7 +1110,7 @@ var Je = (e) => {
|
|
|
1108
1110
|
open: !1
|
|
1109
1111
|
}), s = (e, t, n) => {
|
|
1110
1112
|
let [r, i] = F(e, t);
|
|
1111
|
-
return
|
|
1113
|
+
return We(o[e].shape, r, i, 4 * p, {
|
|
1112
1114
|
...n,
|
|
1113
1115
|
style: `${n.style ?? ""}${O(i)}${V(t)}`
|
|
1114
1116
|
});
|
|
@@ -1132,7 +1134,7 @@ var Je = (e) => {
|
|
|
1132
1134
|
let ce = y ? r.flatMap((e, t) => a.includes(t) ? [] : o[t].flatMap((e) => {
|
|
1133
1135
|
let t = e.dataset.place;
|
|
1134
1136
|
if (!t || t === "none" || e.hasAttribute("data-left-out")) return [];
|
|
1135
|
-
let [n, r, i, a] =
|
|
1137
|
+
let [n, r, i, a] = xe(e, p, D, f);
|
|
1136
1138
|
return [{
|
|
1137
1139
|
label: e,
|
|
1138
1140
|
box: [
|
|
@@ -1216,12 +1218,12 @@ var Je = (e) => {
|
|
|
1216
1218
|
]);
|
|
1217
1219
|
e.forEach(({ s: e, i: n, value: i }, a) => be.set(o[e][n], r[a] === null ? null : t(i)[r[a]]));
|
|
1218
1220
|
}
|
|
1219
|
-
let
|
|
1221
|
+
let Se = (e, t) => ve ? be.get(o[e][t]) === null : !v && !b ? !1 : J(o[e][t]).width * p > (b ? pe(e, t) - t + 1 : 1) * E - 4 * p || v && e > 0 && M(e, t) < N(e, t) ? !0 : v && Math.abs(l(N(e, t)) - l(M(e, t))) < g * 1.2;
|
|
1220
1222
|
a.forEach((e) => {
|
|
1221
1223
|
o[e].forEach((t, n) => {
|
|
1222
1224
|
t.style.setProperty("--i", String(Z(b ? (B(n) + B(n + 1)) / 2 : B(n))));
|
|
1223
1225
|
let r = be.get(t) ?? _e(e, n);
|
|
1224
|
-
if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" &&
|
|
1226
|
+
if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" && Se(e, n)), b && r !== "none" ? t.dataset.rowEnd = String(pe(e, n) + 1) : delete t.dataset.rowEnd, r === "none") return;
|
|
1225
1227
|
let i = J(t).width * p / 2 + 4 * p, a = c(n);
|
|
1226
1228
|
b ? a = (c(n) + c(pe(e, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === w && (a -= i);
|
|
1227
1229
|
let o = l(M(e, n)), s = {
|
|
@@ -1232,25 +1234,25 @@ var Je = (e) => {
|
|
|
1232
1234
|
L(t, a, o + s[r], D, f);
|
|
1233
1235
|
});
|
|
1234
1236
|
});
|
|
1235
|
-
let
|
|
1237
|
+
let Ce = (e) => {
|
|
1236
1238
|
let r = n.flatMap((t, n) => t.pinned && !A(e, n) ? [n] : []), i = n.map((e, t) => t).filter((t) => !A(e, t)), a = (t) => k(e, t)?.value ?? 0, { keys: s } = t.pick;
|
|
1237
|
-
i.length && (s.includes("last") && r.push(i[i.length - 1]), s.includes("first") && r.push(i[0]), s.includes("highest") && r.push(i.reduce((e, t) => a(t) > a(e) ? t : e)), s.includes("lowest") && r.push(i.reduce((e, t) => a(t) < a(e) ? t : e)), s.includes("outliers") && r.push(
|
|
1239
|
+
i.length && (s.includes("last") && r.push(i[i.length - 1]), s.includes("first") && r.push(i[0]), s.includes("highest") && r.push(i.reduce((e, t) => a(t) > a(e) ? t : e)), s.includes("lowest") && r.push(i.reduce((e, t) => a(t) < a(e) ? t : e)), s.includes("outliers") && r.push(...$e(i.map((e) => ({
|
|
1238
1240
|
x: e,
|
|
1239
1241
|
y: a(e)
|
|
1240
1242
|
})))?.outside.map((e) => e.x) ?? []));
|
|
1241
1243
|
let c = [];
|
|
1242
1244
|
for (let t of r) {
|
|
1243
1245
|
let n = o[e][t];
|
|
1244
|
-
c.includes(t) || n.dataset.place === "none" || c.every((t) =>
|
|
1246
|
+
c.includes(t) || n.dataset.place === "none" || c.every((t) => Y([o[e][t], n], p, 1e3, f) === 1) && c.push(t);
|
|
1245
1247
|
}
|
|
1246
1248
|
return new Set(c);
|
|
1247
|
-
}, we = (e) =>
|
|
1249
|
+
}, we = (e) => Y(o[e].filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), p, D, f) === 1, Te = (e) => {
|
|
1248
1250
|
let t = w;
|
|
1249
1251
|
for (; t > 0 && A(e, t);) t--;
|
|
1250
1252
|
return t;
|
|
1251
1253
|
}, Ee = /* @__PURE__ */ new Map();
|
|
1252
1254
|
for (let e of a) {
|
|
1253
|
-
let n = t.pick.mode === "all" || t.pick.mode === "auto" && we(e) ? null :
|
|
1255
|
+
let n = t.pick.mode === "all" || t.pick.mode === "auto" && we(e) ? null : Ce(e);
|
|
1254
1256
|
Ee.set(e, n), n && o[e].forEach((e, t) => {
|
|
1255
1257
|
e.dataset.place !== "none" && !n.has(t) && e.setAttribute("data-left-out", "");
|
|
1256
1258
|
});
|
|
@@ -1371,15 +1373,15 @@ var Je = (e) => {
|
|
|
1371
1373
|
y2: Ae
|
|
1372
1374
|
}));
|
|
1373
1375
|
}
|
|
1374
|
-
}),
|
|
1376
|
+
}), nt = tt(!1), rt = tt(!0), it = /* @__PURE__ */ new Set(), at = (t, n) => {
|
|
1375
1377
|
if (Math.abs(t - n) <= Math.abs(n) / 100) return;
|
|
1376
1378
|
let r = `[${e}] A total reads ${t}, but the steps before it add up to ${Number(n.toFixed(6))}. The chart shows your number.`;
|
|
1377
|
-
|
|
1378
|
-
},
|
|
1379
|
+
it.has(r) || (it.add(r), console.warn(r));
|
|
1380
|
+
}, ot = {
|
|
1379
1381
|
segments: (e) => {
|
|
1380
1382
|
let t = 0, n = !1;
|
|
1381
1383
|
return e.map((e) => {
|
|
1382
|
-
if (e.isTotal) return n &&
|
|
1384
|
+
if (e.isTotal) return n && at(e.value, t), n = !1, t = e.value, {
|
|
1383
1385
|
...e,
|
|
1384
1386
|
from: 0,
|
|
1385
1387
|
to: e.value,
|
|
@@ -1458,7 +1460,7 @@ var Je = (e) => {
|
|
|
1458
1460
|
let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
|
|
1459
1461
|
return o > 50 ? console.warn(`[${e}] ${t} took ${o.toFixed(1)} ms for ${s} rows, more than 50 ms.`, n) : Q.log(`${t} took ${o.toFixed(1)} ms for ${s} rows.`, n), a;
|
|
1460
1462
|
}
|
|
1461
|
-
},
|
|
1463
|
+
}, st = (e) => {
|
|
1462
1464
|
let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
|
|
1463
1465
|
return {
|
|
1464
1466
|
raw: t,
|
|
@@ -1468,14 +1470,14 @@ var Je = (e) => {
|
|
|
1468
1470
|
missing: !n,
|
|
1469
1471
|
value: n ? Number.parseFloat(n[2].replace(",", ".")) : 0
|
|
1470
1472
|
};
|
|
1471
|
-
},
|
|
1472
|
-
let n =
|
|
1473
|
+
}, ct = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).flatMap((e, t) => e.hasAttribute("data-note") ? [t] : []), lt = (e, t) => {
|
|
1474
|
+
let n = ct(e), r = e.querySelectorAll("tbody tr")[t]?.querySelectorAll("td") ?? [];
|
|
1473
1475
|
return n.map((e) => r[e]).find((e) => e?.textContent?.trim()) ?? null;
|
|
1474
|
-
},
|
|
1475
|
-
let n =
|
|
1476
|
+
}, ut = (e, t = "data-i18n") => {
|
|
1477
|
+
let n = ct(e);
|
|
1476
1478
|
return Array.from(e.querySelectorAll("tbody tr")).map((e, r) => {
|
|
1477
|
-
let i = e.querySelector("th"), a = Array.from(e.querySelectorAll("td")), o = a.filter((e, t) => !n.includes(t)).map(
|
|
1478
|
-
o.length || o.push(
|
|
1479
|
+
let i = e.querySelector("th"), a = Array.from(e.querySelectorAll("td")), o = a.filter((e, t) => !n.includes(t)).map(st);
|
|
1480
|
+
o.length || o.push(st(null));
|
|
1479
1481
|
let s = n.map((e) => a[e]).find((e) => e?.textContent?.trim());
|
|
1480
1482
|
return {
|
|
1481
1483
|
...o[0],
|
|
@@ -1491,8 +1493,8 @@ var Je = (e) => {
|
|
|
1491
1493
|
slot: r
|
|
1492
1494
|
};
|
|
1493
1495
|
});
|
|
1494
|
-
},
|
|
1495
|
-
let r =
|
|
1496
|
+
}, dt = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).filter((e) => !e.hasAttribute("data-note")), ft = (e) => e === "dashed" || e === "dotted" ? e : null, pt = (e, t, n = "data-i18n") => {
|
|
1497
|
+
let r = dt(e), i = Math.max(1, W(t.map((e) => e.cells.length)));
|
|
1496
1498
|
return Array.from({ length: i }, (e, t) => {
|
|
1497
1499
|
let i = r[t];
|
|
1498
1500
|
return {
|
|
@@ -1500,12 +1502,12 @@ var Je = (e) => {
|
|
|
1500
1502
|
key: n && i?.getAttribute(n) || null,
|
|
1501
1503
|
focus: i?.getAttribute("data-kind") === "focus",
|
|
1502
1504
|
marker: i?.getAttribute("data-marker") ?? null,
|
|
1503
|
-
line:
|
|
1505
|
+
line: ft(i?.getAttribute("data-line")),
|
|
1504
1506
|
group: !!i?.hasAttribute("data-group"),
|
|
1505
1507
|
chart: i?.getAttribute("data-chart") === "line" ? "line" : null
|
|
1506
1508
|
};
|
|
1507
1509
|
});
|
|
1508
|
-
},
|
|
1510
|
+
}, mt = (t, n) => {
|
|
1509
1511
|
if (!n) return;
|
|
1510
1512
|
let r = /* @__PURE__ */ new Map();
|
|
1511
1513
|
for (let i of t) {
|
|
@@ -1518,7 +1520,7 @@ var Je = (e) => {
|
|
|
1518
1520
|
i.querySelectorAll("tbody th").forEach((e, r) => {
|
|
1519
1521
|
e.getAttribute(n) || e.setAttribute(n, `${t}-row${r + 1}`);
|
|
1520
1522
|
});
|
|
1521
|
-
let a =
|
|
1523
|
+
let a = dt(i);
|
|
1522
1524
|
a.length > 1 && a.forEach((e, r) => {
|
|
1523
1525
|
e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
|
|
1524
1526
|
}), a.forEach((e, r) => {
|
|
@@ -1529,7 +1531,7 @@ var Je = (e) => {
|
|
|
1529
1531
|
a.includes(r) || a.push(r), e.getAttribute(n) || e.setAttribute(n, `${t}-group${a.indexOf(r) + 1}`);
|
|
1530
1532
|
});
|
|
1531
1533
|
});
|
|
1532
|
-
let o =
|
|
1534
|
+
let o = ct(i);
|
|
1533
1535
|
i.querySelectorAll("tbody tr").forEach((e, r) => {
|
|
1534
1536
|
let i = e.querySelectorAll("td");
|
|
1535
1537
|
for (let e of o) {
|
|
@@ -1538,23 +1540,23 @@ var Je = (e) => {
|
|
|
1538
1540
|
}
|
|
1539
1541
|
}), Q?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
|
|
1540
1542
|
}
|
|
1541
|
-
},
|
|
1543
|
+
}, ht = (e) => Number(e.toPrecision(12)), gt = (e, t) => {
|
|
1542
1544
|
let n = e / Math.max(1, t) || 1, r = 10 ** Math.floor(Math.log10(n)), i = n / r;
|
|
1543
|
-
return
|
|
1544
|
-
},
|
|
1545
|
+
return ht((i < 1.42 ? 1 : i < 3.17 ? 2 : i < 7.08 ? 5 : 10) * r);
|
|
1546
|
+
}, _t = (e, t, n) => {
|
|
1545
1547
|
let r = [];
|
|
1546
|
-
for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(
|
|
1548
|
+
for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(ht(i * n));
|
|
1547
1549
|
return r;
|
|
1548
|
-
},
|
|
1550
|
+
}, vt = (e, t = e) => {
|
|
1549
1551
|
do {
|
|
1550
1552
|
let t = Math.round(e / 10 ** Math.floor(Math.log10(e) + 1e-9));
|
|
1551
|
-
e =
|
|
1553
|
+
e = ht(e * (t === 2 ? 2.5 : 2));
|
|
1552
1554
|
} while (Math.abs(e / t - Math.round(e / t)) > 1e-9);
|
|
1553
1555
|
return e;
|
|
1554
|
-
},
|
|
1556
|
+
}, yt = (e) => {
|
|
1555
1557
|
let t = (e ?? "").trim().split(/\s+/).map(Number.parseFloat);
|
|
1556
1558
|
return t.length > 1 && t.every(Number.isFinite) ? t.sort((e, t) => e - t) : null;
|
|
1557
|
-
},
|
|
1559
|
+
}, bt = (e, t, n) => {
|
|
1558
1560
|
if (n && n.length > 2) return {
|
|
1559
1561
|
min: n[0],
|
|
1560
1562
|
max: n[n.length - 1],
|
|
@@ -1566,27 +1568,89 @@ var Je = (e) => {
|
|
|
1566
1568
|
let e = (i - r || Math.abs(i) || 1) * .05;
|
|
1567
1569
|
r -= e, i += e;
|
|
1568
1570
|
}
|
|
1569
|
-
let a =
|
|
1571
|
+
let a = gt(i - r, t);
|
|
1570
1572
|
return {
|
|
1571
1573
|
min: r,
|
|
1572
1574
|
max: i,
|
|
1573
1575
|
step: a,
|
|
1574
|
-
ticks:
|
|
1576
|
+
ticks: _t(r, i, a)
|
|
1575
1577
|
};
|
|
1576
|
-
},
|
|
1578
|
+
}, xt = (e, t) => {
|
|
1577
1579
|
let { step: n, ticks: r } = e;
|
|
1578
|
-
for (; n && r.length > 2 && !t(r);) n =
|
|
1580
|
+
for (; n && r.length > 2 && !t(r);) n = vt(n, e.step), r = _t(e.min, e.max, n);
|
|
1579
1581
|
return {
|
|
1580
1582
|
...e,
|
|
1581
1583
|
step: n,
|
|
1582
1584
|
ticks: r
|
|
1583
1585
|
};
|
|
1584
|
-
},
|
|
1586
|
+
}, St = null, Ct = (e) => {
|
|
1587
|
+
if (St ?? (St = document.createElement("canvas").getContext("2d", { willReadFrequently: !0 })), !St) return [
|
|
1588
|
+
0,
|
|
1589
|
+
0,
|
|
1590
|
+
0,
|
|
1591
|
+
1
|
|
1592
|
+
];
|
|
1593
|
+
St.clearRect(0, 0, 1, 1), St.fillStyle = e, St.fillRect(0, 0, 1, 1);
|
|
1594
|
+
let [t, n, r, i] = St.getImageData(0, 0, 1, 1).data;
|
|
1595
|
+
return [
|
|
1596
|
+
t,
|
|
1597
|
+
n,
|
|
1598
|
+
r,
|
|
1599
|
+
i / 255
|
|
1600
|
+
];
|
|
1601
|
+
}, wt = ([e, t, n]) => {
|
|
1602
|
+
let r = (e) => {
|
|
1603
|
+
let t = e / 255;
|
|
1604
|
+
return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
|
|
1605
|
+
};
|
|
1606
|
+
return .2126 * r(e) + .7152 * r(t) + .0722 * r(n);
|
|
1607
|
+
}, Tt = (e, t) => {
|
|
1608
|
+
let [n, r] = [wt(e), wt(t)].sort((e, t) => t - e);
|
|
1609
|
+
return (n + .05) / (r + .05);
|
|
1610
|
+
}, Et = (e) => {
|
|
1611
|
+
let t = document.createElement("span");
|
|
1612
|
+
t.style.color = "var(--tablechart-surface, Canvas)", e.append(t);
|
|
1613
|
+
let n = Ct(getComputedStyle(t).color);
|
|
1614
|
+
return t.remove(), n;
|
|
1615
|
+
}, Dt = (e, t) => e.querySelector(`:is(.tablechart-bar, .tablechart-piece)[data-row="${t.dataset.row}"]${t.dataset.series ? `[data-series="${t.dataset.series}"]` : ""}`), Ot = (e) => {
|
|
1616
|
+
let t = e.querySelectorAll(".tablechart-value[data-place='inside']");
|
|
1617
|
+
if (!t.length) return;
|
|
1618
|
+
let n = Et(e);
|
|
1619
|
+
for (let r of t) {
|
|
1620
|
+
let t = Dt(e, r);
|
|
1621
|
+
if (!t || r.hasAttribute("data-left-out")) continue;
|
|
1622
|
+
let i = Ct(getComputedStyle(t).fill), a = wt(n) > wt(i), o = a ? [
|
|
1623
|
+
255,
|
|
1624
|
+
255,
|
|
1625
|
+
255
|
|
1626
|
+
] : [
|
|
1627
|
+
0,
|
|
1628
|
+
0,
|
|
1629
|
+
0
|
|
1630
|
+
], s = a ? [
|
|
1631
|
+
0,
|
|
1632
|
+
0,
|
|
1633
|
+
0
|
|
1634
|
+
] : [
|
|
1635
|
+
255,
|
|
1636
|
+
255,
|
|
1637
|
+
255
|
|
1638
|
+
];
|
|
1639
|
+
for (let e = 0; e <= 20; e++) {
|
|
1640
|
+
let t = n.slice(0, 3).map((t, n) => Math.round(t + (o[n] - t) * e / 20));
|
|
1641
|
+
if (Tt(t, i) >= 4.5) {
|
|
1642
|
+
s = t;
|
|
1643
|
+
break;
|
|
1644
|
+
}
|
|
1645
|
+
}
|
|
1646
|
+
r.style.setProperty("--_ink", `rgb(${s.join(" ")})`);
|
|
1647
|
+
}
|
|
1648
|
+
}, kt = [
|
|
1585
1649
|
"axis-break",
|
|
1586
1650
|
"trend",
|
|
1587
1651
|
"bracket"
|
|
1588
|
-
],
|
|
1589
|
-
let n = e.hasAttribute("data-fragment"), r = Array.from(e.querySelectorAll("tbody tr")), i = Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), a = Array.from(e.querySelectorAll("[data-annotation]")).filter((e) =>
|
|
1652
|
+
], At = (e, t = !1) => {
|
|
1653
|
+
let n = e.hasAttribute("data-fragment"), r = Array.from(e.querySelectorAll("tbody tr")), i = Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), a = Array.from(e.querySelectorAll("[data-annotation]")).filter((e) => kt.includes(e.getAttribute("data-annotation") ?? "")), o = (e) => e.hasAttribute("data-fragment"), s = r.map((e) => Array.from(e.querySelectorAll(":scope > td")));
|
|
1590
1654
|
if (!n && !r.some(o) && !i.some(o) && !s.flat().some(o) && !a.some(o) || t && !n) return null;
|
|
1591
1655
|
let c = [], l = /* @__PURE__ */ new Map(), u = [], d = (e) => {
|
|
1592
1656
|
let t = e === null ? void 0 : l.get(e);
|
|
@@ -1648,7 +1712,7 @@ var Je = (e) => {
|
|
|
1648
1712
|
count: c.length,
|
|
1649
1713
|
indexes: c
|
|
1650
1714
|
};
|
|
1651
|
-
},
|
|
1715
|
+
}, jt = (e) => {
|
|
1652
1716
|
let t = e.plan;
|
|
1653
1717
|
if (!t) return;
|
|
1654
1718
|
let n = (t) => t === null || e.step - t >= 1;
|
|
@@ -1659,7 +1723,7 @@ var Je = (e) => {
|
|
|
1659
1723
|
let u = r.hasAttribute("data-flat") ? (l - e + 1) / (i - e + 1) : i > e ? Math.max(0, l - e) / (i - e) : 0;
|
|
1660
1724
|
r.style.setProperty("--reveal", String(u));
|
|
1661
1725
|
}
|
|
1662
|
-
},
|
|
1726
|
+
}, Mt = (e) => {
|
|
1663
1727
|
let t = e.plan;
|
|
1664
1728
|
if (!t) return;
|
|
1665
1729
|
let n = t.rows.length - 1, i = (e) => t.series.map((n, r) => t.cells[e]?.[r]?.step ?? n.step ?? t.rows[e]?.step ?? null), a = (e) => {
|
|
@@ -1737,12 +1801,12 @@ var Je = (e) => {
|
|
|
1737
1801
|
e && t.style.getPropertyValue("--start") && (t.style.setProperty("--start", e.start.toFixed(4)), t.style.setProperty("--span", e.span.toFixed(4)), t.classList.contains("tablechart-slice") && t.style.setProperty("--ease", e.easing));
|
|
1738
1802
|
}
|
|
1739
1803
|
}
|
|
1740
|
-
|
|
1741
|
-
},
|
|
1804
|
+
jt(e);
|
|
1805
|
+
}, Nt = (e, t, n = !1) => {
|
|
1742
1806
|
let r = e.plan;
|
|
1743
1807
|
if (!r) return;
|
|
1744
1808
|
let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
|
|
1745
|
-
e.step = i, e.figure.style.setProperty("--_step", String(i)),
|
|
1809
|
+
e.step = i, e.figure.style.setProperty("--_step", String(i)), jt(e);
|
|
1746
1810
|
let [o, s] = e.controls?.querySelectorAll("button") ?? [];
|
|
1747
1811
|
o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
|
|
1748
1812
|
bubbles: !0,
|
|
@@ -1751,7 +1815,7 @@ var Je = (e) => {
|
|
|
1751
1815
|
steps: r.count
|
|
1752
1816
|
}
|
|
1753
1817
|
}));
|
|
1754
|
-
},
|
|
1818
|
+
}, Pt = (e, t, n) => {
|
|
1755
1819
|
let r = document.createElement("div");
|
|
1756
1820
|
r.className = "tablechart-controls";
|
|
1757
1821
|
let i = (r) => {
|
|
@@ -1780,14 +1844,14 @@ var Je = (e) => {
|
|
|
1780
1844
|
]), i;
|
|
1781
1845
|
};
|
|
1782
1846
|
return r.append(i("previous"), i("next")), r;
|
|
1783
|
-
},
|
|
1847
|
+
}, Ft = (e, t, n, r = {
|
|
1784
1848
|
x: 0,
|
|
1785
1849
|
y: 0,
|
|
1786
1850
|
scale: 1
|
|
1787
1851
|
}, i = 2, a = 8, o = 12) => {
|
|
1788
1852
|
let s = e.getBoundingClientRect(), c = s.width, l = s.height, u = Number.parseFloat(getComputedStyle(e).borderLeftWidth) || 0, d = t.getBoundingClientRect().height / 2 + (i - u) * r.scale, f = o * r.scale, { clientWidth: p, clientHeight: m } = document.documentElement, h = n.top - a, g = m - n.bottom - a, _ = l + d <= h ? !0 : l + d <= g ? !1 : h >= g, v = _ ? n.top - d - l : n.bottom + d, y = n.left + n.width / 2, b = Math.max(a, Math.min(y - c / 2, p - c - a));
|
|
1789
1853
|
e.style.left = `${(b - r.x) / r.scale}px`, e.style.top = `${(Math.max(a, Math.min(v, m - l - a)) - r.y) / r.scale}px`, e.dataset.side = _ ? "top" : "bottom", t.style.left = `${Math.max(f, Math.min(y - b, c - f)) / r.scale - u}px`;
|
|
1790
|
-
},
|
|
1854
|
+
}, It = "tablechart-tooltip", Lt = [
|
|
1791
1855
|
"--tablechart-surface",
|
|
1792
1856
|
"--tablechart-tooltip-surface",
|
|
1793
1857
|
"--tablechart-tooltip-color",
|
|
@@ -1795,51 +1859,51 @@ var Je = (e) => {
|
|
|
1795
1859
|
"--tablechart-tooltip-radius",
|
|
1796
1860
|
"--tablechart-tooltip-padding",
|
|
1797
1861
|
"--tablechart-tooltip-shadow"
|
|
1798
|
-
], $ = null,
|
|
1799
|
-
clearTimeout(
|
|
1800
|
-
},
|
|
1801
|
-
if (
|
|
1802
|
-
|
|
1803
|
-
e.pointerType === "mouse" && (
|
|
1862
|
+
], $ = null, Rt, zt, Bt = null, Vt = null, Ht = 0, Ut = () => {
|
|
1863
|
+
clearTimeout(Ht), $ && Bt && ($.hidden = !0, Bt = null, Vt = null);
|
|
1864
|
+
}, Wt = !1, Gt = !0, Kt = NaN, qt = NaN, Jt = !1, Yt = () => {
|
|
1865
|
+
if (Jt) return;
|
|
1866
|
+
Jt = !0, document.addEventListener("pointermove", (e) => {
|
|
1867
|
+
e.pointerType === "mouse" && (Gt = e.screenX !== Kt || e.screenY !== qt, Kt = e.screenX, qt = e.screenY, Gt && (Wt = !1));
|
|
1804
1868
|
}, {
|
|
1805
1869
|
capture: !0,
|
|
1806
1870
|
passive: !0
|
|
1807
1871
|
});
|
|
1808
1872
|
let e = () => {
|
|
1809
|
-
|
|
1873
|
+
Wt = !0, Ut();
|
|
1810
1874
|
};
|
|
1811
1875
|
document.addEventListener("keydown", e, !0), window.addEventListener("scroll", e, {
|
|
1812
1876
|
capture: !0,
|
|
1813
1877
|
passive: !0
|
|
1814
1878
|
});
|
|
1815
|
-
},
|
|
1879
|
+
}, Xt = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, Zt = (e) => {
|
|
1816
1880
|
let t = e.tooltipparent;
|
|
1817
1881
|
return (typeof t == "string" ? document.querySelector(t) : t) ?? document.body;
|
|
1818
|
-
},
|
|
1819
|
-
clearTimeout(
|
|
1820
|
-
},
|
|
1882
|
+
}, Qt = () => {
|
|
1883
|
+
clearTimeout(Ht), Ht = window.setTimeout(Ut, 120);
|
|
1884
|
+
}, $t = () => {
|
|
1821
1885
|
let e = document.createElement("div");
|
|
1822
|
-
return e.className =
|
|
1886
|
+
return e.className = It, e.setAttribute("aria-hidden", "true"), e.hidden = !0, Rt = document.createElement("div"), zt = document.createElement("div"), zt.className = `${It}-arrow`, e.append(Rt, zt), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout(Ht)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && Qt()), document.addEventListener("pointerdown", (t) => {
|
|
1823
1887
|
let n = t.target;
|
|
1824
|
-
|
|
1825
|
-
}), window.addEventListener("resize",
|
|
1826
|
-
},
|
|
1888
|
+
Bt && !Bt.plot.contains(n) && !e.contains(n) && Ut();
|
|
1889
|
+
}), window.addEventListener("resize", Ut), e;
|
|
1890
|
+
}, en = (e, t) => {
|
|
1827
1891
|
let n = t ? t.style.getPropertyValue("--step") : "x";
|
|
1828
1892
|
return n === "" || Number(n) < e.step;
|
|
1829
|
-
},
|
|
1893
|
+
}, tn = (e, t) => {
|
|
1830
1894
|
let n = e.svg.querySelector(`[data-series="${t + 1}"]:not(.tablechart-hole)`);
|
|
1831
1895
|
if (!n) return;
|
|
1832
1896
|
let r = getComputedStyle(n);
|
|
1833
1897
|
return r.fill && r.fill !== "none" ? r.fill : r.stroke;
|
|
1834
|
-
},
|
|
1898
|
+
}, nn = (e, t, n) => {
|
|
1835
1899
|
let r = e.series.length > 1, i = [];
|
|
1836
1900
|
for (let [n, a] of e.seriesValues.entries()) {
|
|
1837
|
-
if (!
|
|
1901
|
+
if (!en(e, a[t])) continue;
|
|
1838
1902
|
let o = r ? e.figure.querySelector(`.tablechart-name[data-series="${n + 1}"]`) : null;
|
|
1839
1903
|
i.push({
|
|
1840
1904
|
name: r ? o?.textContent ?? e.series[n].name : "",
|
|
1841
1905
|
value: a[t].textContent ?? "",
|
|
1842
|
-
colour: r ?
|
|
1906
|
+
colour: r ? tn(e, n) : void 0,
|
|
1843
1907
|
sample: o ? {
|
|
1844
1908
|
marker: o.dataset.marker ?? null,
|
|
1845
1909
|
open: o.hasAttribute("data-open"),
|
|
@@ -1849,11 +1913,11 @@ var Je = (e) => {
|
|
|
1849
1913
|
});
|
|
1850
1914
|
}
|
|
1851
1915
|
let a = e.totals[t];
|
|
1852
|
-
return i.length > 1 &&
|
|
1916
|
+
return i.length > 1 && en(e, a) && i.push({
|
|
1853
1917
|
name: n.totallabel,
|
|
1854
1918
|
value: a.textContent ?? ""
|
|
1855
1919
|
}), i;
|
|
1856
|
-
},
|
|
1920
|
+
}, rn = (e, t) => {
|
|
1857
1921
|
if (e.type.centre && e.values[t]) return e.values[t].getBoundingClientRect();
|
|
1858
1922
|
let n = e.pointOf?.(t);
|
|
1859
1923
|
if (n) {
|
|
@@ -1873,49 +1937,49 @@ var Je = (e) => {
|
|
|
1873
1937
|
100
|
|
1874
1938
|
];
|
|
1875
1939
|
return new DOMRect(a.left + a.width * o / 100, a.top + a.height * s / 100, a.width * c / 100, a.height * l / 100);
|
|
1876
|
-
},
|
|
1877
|
-
if (clearTimeout(
|
|
1878
|
-
let r = (e.type.tooltip ??
|
|
1879
|
-
if (!r.length) return
|
|
1880
|
-
|
|
1940
|
+
}, an = (e, t, n) => {
|
|
1941
|
+
if (clearTimeout(Ht), Bt === e && Vt === t) return;
|
|
1942
|
+
let r = (e.type.tooltip ?? nn)(e, t, n);
|
|
1943
|
+
if (!r.length) return Ut();
|
|
1944
|
+
Bt && Bt !== e && Ut(), $ ?? ($ = $t());
|
|
1881
1945
|
let i = (e, t, n, r = !1, i) => {
|
|
1882
1946
|
let a = document.createElement("div");
|
|
1883
|
-
if (a.className = `${
|
|
1947
|
+
if (a.className = `${It}-line`, n) {
|
|
1884
1948
|
let e = document.createElement("span");
|
|
1885
|
-
e.className = `${
|
|
1949
|
+
e.className = `${It}-key`, e.style.background = n, i?.box ? e.dataset.sample = "box" : i && (e.dataset.sample = "line", i.marker && (e.dataset.marker = i.marker), i.line && (e.dataset.line = i.line), e.toggleAttribute("data-open", i.open)), a.append(e);
|
|
1886
1950
|
}
|
|
1887
1951
|
let o = document.createElement("span");
|
|
1888
|
-
if (o.className = `${
|
|
1952
|
+
if (o.className = `${It}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
|
|
1889
1953
|
e && o.append(":");
|
|
1890
1954
|
let n = document.createElement("span");
|
|
1891
|
-
n.className = `${
|
|
1955
|
+
n.className = `${It}-value`, n.textContent = t, a.append(n);
|
|
1892
1956
|
}
|
|
1893
1957
|
return a;
|
|
1894
|
-
}, a = (e.figure.querySelectorAll("tbody tr")[t]?.querySelector("th"))?.textContent?.trim() || e.categories[t]?.textContent || e.rows[t].label, o = r.length === 1 && !r[0].name, s = r.every((e) => e.name && !e.value), c =
|
|
1895
|
-
className: `${
|
|
1958
|
+
}, a = (e.figure.querySelectorAll("tbody tr")[t]?.querySelector("th"))?.textContent?.trim() || e.categories[t]?.textContent || e.rows[t].label, o = r.length === 1 && !r[0].name, s = r.every((e) => e.name && !e.value), c = lt(e.figure, t)?.textContent?.trim(), l = c ? [Object.assign(document.createElement("div"), {
|
|
1959
|
+
className: `${It}-note`,
|
|
1896
1960
|
textContent: c
|
|
1897
1961
|
})] : [];
|
|
1898
|
-
|
|
1962
|
+
Rt.replaceChildren(...s ? [] : [i(a, o ? r[0].value : "", void 0, !0)], ...o ? [] : r.map(({ name: e, value: t, colour: n, sample: r }) => i(e, t, n, !1, r)), ...l);
|
|
1899
1963
|
let u = getComputedStyle(e.figure);
|
|
1900
|
-
for (let e of
|
|
1964
|
+
for (let e of Lt) {
|
|
1901
1965
|
let t = u.getPropertyValue(e).trim();
|
|
1902
1966
|
t ? $.style.setProperty(e, t) : $.style.removeProperty(e);
|
|
1903
1967
|
}
|
|
1904
1968
|
$.style.setProperty("--_color", u.color), $.style.colorScheme = u.colorScheme, $.style.fontFamily = u.fontFamily;
|
|
1905
|
-
let d =
|
|
1906
|
-
$.parentElement !== d && d.append($),
|
|
1969
|
+
let d = Zt(n);
|
|
1970
|
+
$.parentElement !== d && d.append($), Bt = e, Vt = t, $.hidden = !1, $.style.left = "0px", $.style.top = "0px";
|
|
1907
1971
|
let f = $.getBoundingClientRect(), p = {
|
|
1908
1972
|
x: f.left,
|
|
1909
1973
|
y: f.top,
|
|
1910
|
-
scale:
|
|
1911
|
-
}, m =
|
|
1912
|
-
$.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`,
|
|
1913
|
-
},
|
|
1974
|
+
scale: Xt($, f.width)
|
|
1975
|
+
}, m = Xt(e.plot, e.plot.getBoundingClientRect().width);
|
|
1976
|
+
$.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`, Ft($, zt, rn(e, t), p);
|
|
1977
|
+
}, on = (e, t, n = !1) => {
|
|
1914
1978
|
let { plot: r } = e;
|
|
1915
|
-
r.setAttribute("data-hover", ""),
|
|
1979
|
+
r.setAttribute("data-hover", ""), Yt();
|
|
1916
1980
|
let i = (t) => {
|
|
1917
1981
|
if (e.rowAt) {
|
|
1918
|
-
let n = r.getBoundingClientRect(), i =
|
|
1982
|
+
let n = r.getBoundingClientRect(), i = Xt(r, n.width);
|
|
1919
1983
|
return e.rowAt((t.clientX - n.left) / i, (t.clientY - n.top) / i);
|
|
1920
1984
|
}
|
|
1921
1985
|
let n = t.target.closest?.("[data-row]")?.getAttribute("data-row");
|
|
@@ -1925,13 +1989,13 @@ var Je = (e) => {
|
|
|
1925
1989
|
else if (t.getAttribute("data-row") === String(e + 1)) return !0;
|
|
1926
1990
|
return !1;
|
|
1927
1991
|
}, s = null, c = (a) => {
|
|
1928
|
-
if (a.type === "pointerdown")
|
|
1929
|
-
else if (a.pointerType === "mouse" && (!
|
|
1992
|
+
if (a.type === "pointerdown") Wt = !1;
|
|
1993
|
+
else if (a.pointerType === "mouse" && (!Gt || Wt)) return;
|
|
1930
1994
|
if (!r.classList.contains("is-placed") || !e.figure.classList.contains("is-shown")) return;
|
|
1931
|
-
if (n && !e.figure.hasAttribute("data-left-out")) return
|
|
1995
|
+
if (n && !e.figure.hasAttribute("data-left-out")) return Bt === e ? Ut() : void 0;
|
|
1932
1996
|
let c = i(a);
|
|
1933
|
-
if (s = c, c === null || o(c)) return
|
|
1934
|
-
|
|
1997
|
+
if (s = c, c === null || o(c)) return Bt === e ? Ut() : void 0;
|
|
1998
|
+
an(e, c, t);
|
|
1935
1999
|
}, l = (t) => {
|
|
1936
2000
|
let n = t.target;
|
|
1937
2001
|
return e.svg.contains(n) && n.hasAttribute("data-row") ? n : null;
|
|
@@ -1945,37 +2009,37 @@ var Je = (e) => {
|
|
|
1945
2009
|
if (!r) return;
|
|
1946
2010
|
a.delete(r);
|
|
1947
2011
|
let i = Number(r.getAttribute("data-row")) - 1;
|
|
1948
|
-
s === i && !o(i) && !
|
|
2012
|
+
s === i && !o(i) && !Wt && an(e, i, t);
|
|
1949
2013
|
};
|
|
1950
2014
|
e.svg.addEventListener("transitionend", u), e.svg.addEventListener("transitioncancel", u), r.addEventListener("pointermove", c), r.addEventListener("pointerdown", c), r.addEventListener("pointerleave", (t) => {
|
|
1951
|
-
t.pointerType === "mouse" && (s = null,
|
|
2015
|
+
t.pointerType === "mouse" && (s = null, Bt === e && Qt());
|
|
1952
2016
|
});
|
|
1953
|
-
},
|
|
1954
|
-
|
|
1955
|
-
},
|
|
1956
|
-
area:
|
|
1957
|
-
bar:
|
|
1958
|
-
column:
|
|
1959
|
-
donut:
|
|
1960
|
-
line:
|
|
1961
|
-
waterfall:
|
|
1962
|
-
},
|
|
1963
|
-
|
|
1964
|
-
},
|
|
2017
|
+
}, sn = (e) => {
|
|
2018
|
+
Bt === e && Ut();
|
|
2019
|
+
}, cn = {
|
|
2020
|
+
area: rt,
|
|
2021
|
+
bar: Re,
|
|
2022
|
+
column: ze,
|
|
2023
|
+
donut: He,
|
|
2024
|
+
line: nt,
|
|
2025
|
+
waterfall: ot
|
|
2026
|
+
}, ln = (e, t) => {
|
|
2027
|
+
cn[e] = t, Object.assign(un, t.annotations), dn.splice(0, Infinity, ...Object.keys(un));
|
|
2028
|
+
}, un = {
|
|
1965
2029
|
"axis-break": ne,
|
|
1966
2030
|
trend: Oe,
|
|
1967
2031
|
bracket: ce,
|
|
1968
2032
|
reference: Ee,
|
|
1969
2033
|
note: we
|
|
1970
|
-
},
|
|
2034
|
+
}, dn = Object.keys(un), fn = (e) => {
|
|
1971
2035
|
let t = "";
|
|
1972
2036
|
for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
|
|
1973
2037
|
return t.trim();
|
|
1974
|
-
},
|
|
2038
|
+
}, pn = [
|
|
1975
2039
|
"straight",
|
|
1976
2040
|
"step",
|
|
1977
2041
|
"smooth"
|
|
1978
|
-
],
|
|
2042
|
+
], mn = (e, t, n, r, i) => {
|
|
1979
2043
|
let a = t === r, [o, s, c] = a ? [
|
|
1980
2044
|
Math.min(e, n),
|
|
1981
2045
|
Math.max(e, n),
|
|
@@ -1987,16 +2051,16 @@ var Je = (e) => {
|
|
|
1987
2051
|
], l = i.filter(([e, t, n, r]) => a ? t <= c && c <= t + r : e <= c && c <= e + n).map(([e, t, n, r]) => a ? [e, e + n] : [t, t + r]).sort((e, t) => e[0] - t[0]), u = [], d = o;
|
|
1988
2052
|
for (let [e, t] of l) e > d && u.push([d, Math.min(e, s)]), d = Math.max(d, t);
|
|
1989
2053
|
return d < s && u.push([d, s]), u.map(([e, t]) => a ? `M${N(e)},${N(c)}H${N(t)}` : `M${N(c)},${N(e)}V${N(t)}`).join("");
|
|
1990
|
-
},
|
|
2054
|
+
}, hn = (e, t) => {
|
|
1991
2055
|
let [n, r, i, a] = [
|
|
1992
2056
|
"x1",
|
|
1993
2057
|
"y1",
|
|
1994
2058
|
"x2",
|
|
1995
2059
|
"y2"
|
|
1996
|
-
].map((t) => Number(e.getAttribute(t))), o = P("path", { d:
|
|
2060
|
+
].map((t) => Number(e.getAttribute(t))), o = P("path", { d: mn(n, r, i, a, t) });
|
|
1997
2061
|
for (let { name: t, value: n } of Array.from(e.attributes)) /^[xy][12]$/.test(t) || o.setAttribute(t, n);
|
|
1998
2062
|
e.replaceWith(o);
|
|
1999
|
-
},
|
|
2063
|
+
}, gn = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
|
|
2000
2064
|
+e,
|
|
2001
2065
|
+t,
|
|
2002
2066
|
+r,
|
|
@@ -2006,19 +2070,19 @@ var Je = (e) => {
|
|
|
2006
2070
|
+t,
|
|
2007
2071
|
+e,
|
|
2008
2072
|
+r
|
|
2009
|
-
]),
|
|
2073
|
+
]), _n = (e, [t, n, r, i]) => e.map(([e, a, o, s]) => a === s ? n <= a && a <= n + i && Math.max(e, t) < Math.min(o, t + r) ? `M${N(Math.max(e, t))},${N(a)}H${N(Math.min(o, t + r))}` : "" : t <= e && e <= t + r && Math.max(a, n) < Math.min(s, n + i) ? `M${N(e)},${N(Math.max(a, n))}V${N(Math.min(s, n + i))}` : "").join(""), vn = (e, t, n) => {
|
|
2010
2074
|
let r = e.getAttribute(t);
|
|
2011
2075
|
return r === null ? n : r !== "false";
|
|
2012
|
-
},
|
|
2076
|
+
}, yn = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", bn = (e, t) => {
|
|
2013
2077
|
let n = e.dataset.chartShape;
|
|
2014
|
-
return n &&
|
|
2015
|
-
},
|
|
2078
|
+
return n && pn.includes(n) ? n : pn.includes(t.shape) ? t.shape : "straight";
|
|
2079
|
+
}, xn = (e) => {
|
|
2016
2080
|
for (let t of e.querySelectorAll("br")) {
|
|
2017
|
-
if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(
|
|
2081
|
+
if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(fn(t))) continue;
|
|
2018
2082
|
let e = document.createElement("span");
|
|
2019
2083
|
e.className = y, e.textContent = ". ", t.before(e);
|
|
2020
2084
|
}
|
|
2021
|
-
},
|
|
2085
|
+
}, Sn = (e, t, n) => {
|
|
2022
2086
|
let r = e.querySelector("table");
|
|
2023
2087
|
if (!r) return null;
|
|
2024
2088
|
let i = r.querySelector("tfoot [data-chart-total]");
|
|
@@ -2029,23 +2093,23 @@ var Je = (e) => {
|
|
|
2029
2093
|
s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
|
|
2030
2094
|
let c = a.insertCell();
|
|
2031
2095
|
return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
|
|
2032
|
-
},
|
|
2096
|
+
}, Cn = 0, wn = (e) => {
|
|
2033
2097
|
let t = e.querySelector(":scope > figcaption");
|
|
2034
2098
|
if (!t) return;
|
|
2035
|
-
|
|
2099
|
+
xn(t);
|
|
2036
2100
|
let n = (e) => e.hasAttribute("aria-label") || e.hasAttribute("aria-labelledby"), r = (e) => {
|
|
2037
|
-
t.id || (t.id = `tablechart-caption-${++
|
|
2101
|
+
t.id || (t.id = `tablechart-caption-${++Cn}`), e.setAttribute("aria-labelledby", t.id);
|
|
2038
2102
|
};
|
|
2039
2103
|
e.tagName === "FIGURE" && !n(e) && r(e);
|
|
2040
2104
|
let i = e.querySelector("table");
|
|
2041
2105
|
i && !n(i) && !i.querySelector(":scope > caption") && r(i);
|
|
2042
|
-
},
|
|
2043
|
-
let o = a ?? (r.getAttribute("data-chart") || "column"), s =
|
|
2044
|
-
if (!s) return console.warn(`[${e}] Unknown chart type "${o}". Known types: ${Object.keys(
|
|
2045
|
-
let c =
|
|
2106
|
+
}, Tn = (r, i, a = null) => {
|
|
2107
|
+
let o = a ?? (r.getAttribute("data-chart") || "column"), s = cn[o];
|
|
2108
|
+
if (!s) return console.warn(`[${e}] Unknown chart type "${o}". Known types: ${Object.keys(cn).join(", ")}.`), r.setAttribute("data-chart-empty", ""), null;
|
|
2109
|
+
let c = ut(r, i.langattribute);
|
|
2046
2110
|
if (!c.length) return console.warn(r.querySelector("table") ? `[${e}] A chart has no rows in its table, so there is nothing to draw.` : `[${e}] A chart has no table, so there is nothing to draw.`, r), r.setAttribute("data-chart-empty", ""), null;
|
|
2047
|
-
|
|
2048
|
-
let l =
|
|
2111
|
+
wn(r);
|
|
2112
|
+
let l = pt(r, c, i.langattribute);
|
|
2049
2113
|
if (l.length > 1 && !s.series && !s.columns && (console.warn(`[${e}] A ${o} chart uses only the first of its ${l.length} value columns.`), l = l.slice(0, 1)), l.some((e) => e.chart)) {
|
|
2050
2114
|
let t = s.lines ? l.every((e) => e.chart) ? "Every series has data-chart=\"line\", so the chart is a line chart: set data-chart=\"line\" on the figure." : null : `A ${o} chart cannot draw a series as a line.`;
|
|
2051
2115
|
t && (console.warn(`[${e}] ${t}`), l = l.map((e) => ({
|
|
@@ -2082,7 +2146,7 @@ var Je = (e) => {
|
|
|
2082
2146
|
let n = I(f, N ?? _);
|
|
2083
2147
|
N && (n.dataset.place = "legend");
|
|
2084
2148
|
let a = e.chart ? void 0 : s.legend ?? s.swatch;
|
|
2085
|
-
if (a && (n.dataset.swatch = a), n.textContent = e.name, !a &&
|
|
2149
|
+
if (a && (n.dataset.swatch = a), n.textContent = e.name, !a && bn(r, i) !== "step") {
|
|
2086
2150
|
let r = e.chart ? X(F, F.indexOf(e)) : X(l, t);
|
|
2087
2151
|
n.dataset.marker = r.shape, n.toggleAttribute("data-open", r.open);
|
|
2088
2152
|
}
|
|
@@ -2092,22 +2156,22 @@ var Je = (e) => {
|
|
|
2092
2156
|
let e = c.find((e) => e.isTotal), t = e ? e.value : c.reduce((e, t) => e + Math.abs(t.value), 0);
|
|
2093
2157
|
R.dataset.value = String(t), e && (R.dataset.decimals = String(re(e.number)));
|
|
2094
2158
|
}
|
|
2095
|
-
let z = R && !c.some((e) => e.isTotal) ?
|
|
2159
|
+
let z = R && !c.some((e) => e.isTotal) ? Sn(r, R, i) : null, B = s.categories === "beside", V = document.createElement("div");
|
|
2096
2160
|
V.className = "tablechart-categories", V.setAttribute("aria-hidden", "true"), V.inert = !0, B ? V.dataset.place = "beside" : s.centre && (V.dataset.place = "key"), V.style.setProperty("--_columns", String(c.length));
|
|
2097
2161
|
let H = 0;
|
|
2098
2162
|
for (let [e, t] of c.entries()) {
|
|
2099
2163
|
let n = document.createElement("span");
|
|
2100
2164
|
n.classList.add(...t.classes), n.textContent = t.short ?? t.label, t.key && i.langattribute && n.setAttribute(i.langattribute, t.short ? `${t.key}-short` : t.key), s.centre && (n.dataset.kind = t.isTotal ? "total" : "slice", t.isTotal || (n.dataset.slice = String(H + 1), n.style.setProperty("--n", String(H)), n.style.setProperty("--palette", `var(--tablechart-color-${H + 1})`), H += 1)), n.style.setProperty("--i", String(t.slot)), n.dataset.row = String(e + 1), V.appendChild(n);
|
|
2101
2165
|
}
|
|
2102
|
-
B ? _.appendChild(V) : b(V), N && b(N);
|
|
2103
|
-
let U = l.filter((e) => !e.group), ee = !s.axes && !s.centre &&
|
|
2166
|
+
s.centre && r.style.setProperty("--_slice-count", String(H)), B ? _.appendChild(V) : b(V), N && b(N);
|
|
2167
|
+
let U = l.filter((e) => !e.group), ee = !s.axes && !s.centre && vn(r, "data-chart-axis", i.axis), te = s.axes ? {
|
|
2104
2168
|
titles: U.slice(0, 2).map((e, t) => {
|
|
2105
2169
|
let n = I(`${w}-title`, _);
|
|
2106
2170
|
return n.dataset.axis = t ? "y" : "x", n.textContent = e.name, e.key && i.langattribute && n.setAttribute(i.langattribute, e.key), n;
|
|
2107
2171
|
}),
|
|
2108
2172
|
ticks: I(`${T}s`, _),
|
|
2109
2173
|
numbers: !0
|
|
2110
|
-
} : ee || !s.centre &&
|
|
2174
|
+
} : ee || !s.centre && vn(r, "data-chart-grid", i.grid) ? {
|
|
2111
2175
|
titles: [],
|
|
2112
2176
|
ticks: I(`${T}s`, _),
|
|
2113
2177
|
numbers: ee
|
|
@@ -2119,9 +2183,9 @@ var Je = (e) => {
|
|
|
2119
2183
|
series: l,
|
|
2120
2184
|
config: i
|
|
2121
2185
|
});
|
|
2122
|
-
let ne =
|
|
2186
|
+
let ne = yn(r, i) ? At(r, !!s.axes) : null;
|
|
2123
2187
|
s.axes && r.querySelector("tbody [data-fragment], thead [data-fragment]") && Q.log(`A ${o} chart has one step, with data-fragment on the figure; its rows and columns have no steps of their own.`, r), ne && r.setAttribute("data-steps", "");
|
|
2124
|
-
let G = r.getAttribute("data-chart-keys"),
|
|
2188
|
+
let G = r.getAttribute("data-chart-keys"), K = ne && i.controls ? Pt({
|
|
2125
2189
|
previous: i.previouslabel,
|
|
2126
2190
|
next: i.nextlabel,
|
|
2127
2191
|
hint: i.stephint
|
|
@@ -2130,10 +2194,10 @@ var Je = (e) => {
|
|
|
2130
2194
|
next: G && `${G}-next`,
|
|
2131
2195
|
hint: G && `${G}-step`
|
|
2132
2196
|
}, i.langattribute) : null;
|
|
2133
|
-
|
|
2134
|
-
let
|
|
2135
|
-
let n = t.getAttribute("data-annotation"), r =
|
|
2136
|
-
if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(
|
|
2197
|
+
K && b(K);
|
|
2198
|
+
let ie = Array.from(r.querySelectorAll("[data-annotation]")).map((t) => {
|
|
2199
|
+
let n = t.getAttribute("data-annotation"), r = un[n];
|
|
2200
|
+
if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(un).join(", ")}.`), null;
|
|
2137
2201
|
let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= l.length ? i - 1 : 0;
|
|
2138
2202
|
return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which is not there; it reads line 1.`), {
|
|
2139
2203
|
spec: t,
|
|
@@ -2146,7 +2210,7 @@ var Je = (e) => {
|
|
|
2146
2210
|
if (!B && !s.centre && !s.axes) for (let [e, t] of c.entries()) {
|
|
2147
2211
|
if (!t.note) continue;
|
|
2148
2212
|
let n = document.createElement("span");
|
|
2149
|
-
n.dataset.annotation = "note", n.dataset.row = String(e + 1), n.textContent = t.note, t.noteKey && n.setAttribute("data-i18n", t.noteKey),
|
|
2213
|
+
n.dataset.annotation = "note", n.dataset.row = String(e + 1), n.textContent = t.note, t.noteKey && n.setAttribute("data-i18n", t.noteKey), ie.push({
|
|
2150
2214
|
spec: n,
|
|
2151
2215
|
type: we,
|
|
2152
2216
|
badge: we.create(n, _),
|
|
@@ -2154,7 +2218,7 @@ var Je = (e) => {
|
|
|
2154
2218
|
after: c.length
|
|
2155
2219
|
});
|
|
2156
2220
|
}
|
|
2157
|
-
|
|
2221
|
+
yn(r, i) && r.setAttribute("data-animate", On(r, o, i, !!ne));
|
|
2158
2222
|
let q = {
|
|
2159
2223
|
figure: r,
|
|
2160
2224
|
plot: _,
|
|
@@ -2175,38 +2239,38 @@ var Je = (e) => {
|
|
|
2175
2239
|
rowAt: null,
|
|
2176
2240
|
rowBox: null,
|
|
2177
2241
|
pointOf: null,
|
|
2178
|
-
annotations:
|
|
2242
|
+
annotations: ie,
|
|
2179
2243
|
checks: [],
|
|
2180
2244
|
plan: ne,
|
|
2181
2245
|
step: 0,
|
|
2182
|
-
controls:
|
|
2183
|
-
}, ae = () =>
|
|
2184
|
-
v.addEventListener("transitionend", ae), v.addEventListener("transitioncancel", ae),
|
|
2246
|
+
controls: K
|
|
2247
|
+
}, ae = () => Hn(r, v);
|
|
2248
|
+
v.addEventListener("transitionend", ae), v.addEventListener("transitioncancel", ae), K?.addEventListener("click", (e) => {
|
|
2185
2249
|
let t = e.target.closest("button")?.dataset.go;
|
|
2186
|
-
t &&
|
|
2187
|
-
}),
|
|
2250
|
+
t && Nt(q, q.step + (t === "next" ? 1 : -1));
|
|
2251
|
+
}), Nt(q, 0, !0);
|
|
2188
2252
|
let oe = r.getAttribute("data-chart-tooltip"), se = oe === "false" ? !1 : oe === "auto" ? "auto" : oe !== null || i.tooltip;
|
|
2189
|
-
return se &&
|
|
2190
|
-
},
|
|
2253
|
+
return se && on(q, i, se === "auto"), Rn(q, i), q;
|
|
2254
|
+
}, En = {
|
|
2191
2255
|
grow: "grow",
|
|
2192
2256
|
sweep: "sweep"
|
|
2193
|
-
},
|
|
2257
|
+
}, Dn = [
|
|
2194
2258
|
"never",
|
|
2195
2259
|
"auto",
|
|
2196
2260
|
"print",
|
|
2197
2261
|
"always"
|
|
2198
|
-
],
|
|
2199
|
-
let i = t === "line" || t === "area", a =
|
|
2262
|
+
], On = (e, t, n, r) => {
|
|
2263
|
+
let i = t === "line" || t === "area", a = En[e.getAttribute("data-chart-animate") ?? ""] ?? En[String(n.animate)];
|
|
2200
2264
|
return i ? r ? "sweep" : a ?? "sweep" : t === "donut" || t === "waterfall" ? a ?? "grow" : "grow";
|
|
2201
|
-
},
|
|
2265
|
+
}, kn = (e) => {
|
|
2202
2266
|
let t = getComputedStyle(e).getPropertyValue("--tablechart-value-align").trim();
|
|
2203
2267
|
return t === "start" || t === "center" || t === "end" ? t : null;
|
|
2204
|
-
},
|
|
2268
|
+
}, An = (e, t, n) => e.dataset.chartLabels === "inside" || e.dataset.chartLabels !== "outside" && (t.labels === "inside" || n) ? "inside" : "outside", jn = (e, t, n, r) => {
|
|
2205
2269
|
let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
|
|
2206
2270
|
if (!a) return null;
|
|
2207
2271
|
let o = Number(a[1]);
|
|
2208
2272
|
return a[2] === "%" ? o / 100 * D : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
|
|
2209
|
-
},
|
|
2273
|
+
}, Mn = (e, t) => jn(e, t, "--tablechart-bar-max", "60px") ?? Infinity, Nn = (e, t) => {
|
|
2210
2274
|
let n = e.getBoundingClientRect(), r = D / n.width, i = getComputedStyle(e), a = Number.parseFloat(i.lineHeight) / Number.parseFloat(i.fontSize) || 1.2;
|
|
2211
2275
|
return (e) => {
|
|
2212
2276
|
if (e.dataset.place === "none" || e.hidden || e.hasAttribute("data-left-out")) return [];
|
|
@@ -2221,21 +2285,21 @@ var Je = (e) => {
|
|
|
2221
2285
|
style: s.join("; ")
|
|
2222
2286
|
})] : [];
|
|
2223
2287
|
};
|
|
2224
|
-
},
|
|
2288
|
+
}, Pn = [
|
|
2225
2289
|
"first",
|
|
2226
2290
|
"last",
|
|
2227
2291
|
"highest",
|
|
2228
2292
|
"lowest",
|
|
2229
2293
|
"outliers"
|
|
2230
|
-
],
|
|
2294
|
+
], Fn = (t, n) => {
|
|
2231
2295
|
let r = (t.getAttribute("data-chart-values") ?? n.values).trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
2232
2296
|
for (let t of r) [
|
|
2233
2297
|
"auto",
|
|
2234
2298
|
"all",
|
|
2235
2299
|
"none",
|
|
2236
|
-
...
|
|
2237
|
-
].includes(t) || console.warn(`[${e}] data-chart-values knows no "${t}". It takes auto, all, none, ${
|
|
2238
|
-
let i = r.filter((e) =>
|
|
2300
|
+
...Pn
|
|
2301
|
+
].includes(t) || console.warn(`[${e}] data-chart-values knows no "${t}". It takes auto, all, none, ${Pn.join(", ")}.`);
|
|
2302
|
+
let i = r.filter((e) => Pn.includes(e));
|
|
2239
2303
|
return r.includes("all") ? {
|
|
2240
2304
|
mode: "all",
|
|
2241
2305
|
keys: []
|
|
@@ -2244,89 +2308,92 @@ var Je = (e) => {
|
|
|
2244
2308
|
keys: []
|
|
2245
2309
|
} : r.includes("auto") || !i.length ? {
|
|
2246
2310
|
mode: "auto",
|
|
2247
|
-
keys: i.length ? i :
|
|
2311
|
+
keys: i.length ? i : Pn
|
|
2248
2312
|
} : {
|
|
2249
2313
|
mode: "set",
|
|
2250
2314
|
keys: i
|
|
2251
2315
|
};
|
|
2252
|
-
},
|
|
2253
|
-
let i = e.getAttribute("data-chart-table"), a = i &&
|
|
2316
|
+
}, In = ({ figure: e, rows: t, series: n }, r) => {
|
|
2317
|
+
let i = e.getAttribute("data-chart-table"), a = i && Dn.includes(i) ? i : r.table;
|
|
2254
2318
|
a === "never" ? e.removeAttribute("data-table") : e.setAttribute("data-table", a);
|
|
2255
2319
|
let o = e.getAttribute("data-chart-summary");
|
|
2256
|
-
e.setAttribute("data-summary", o &&
|
|
2257
|
-
},
|
|
2320
|
+
e.setAttribute("data-summary", o && Dn.includes(o) ? o : r.summary), e.toggleAttribute("data-long", t.length * n.filter((e) => !e.group).length > r.tablelimit);
|
|
2321
|
+
}, Ln = (t, n) => {
|
|
2258
2322
|
let { plot: r, svg: i, rows: l, type: m, values: g, series: _, seriesValues: y, names: b, annotations: x } = t;
|
|
2259
|
-
|
|
2260
|
-
let S =
|
|
2261
|
-
|
|
2262
|
-
|
|
2323
|
+
In(t, n);
|
|
2324
|
+
let S = getComputedStyle(t.figure);
|
|
2325
|
+
t.figure.toggleAttribute("data-series-range", !!S.getPropertyValue("--tablechart-series-color-end").trim()), t.figure.toggleAttribute("data-slice-range", !!S.getPropertyValue("--tablechart-slice-color-end").trim());
|
|
2326
|
+
let C = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), O = C > 0 ? C : m.aspect ?? n.aspect, k = m.categories === "beside", A = t.axes && !m.axes ? t.axes : null, j = k ? null : t.categories[0]?.parentElement, M = null;
|
|
2327
|
+
if (A) {
|
|
2328
|
+
r.style.margin = "", j && (j.style.marginLeft = "");
|
|
2263
2329
|
let e = r.clientWidth;
|
|
2264
2330
|
if (!e) return !1;
|
|
2265
|
-
let i = m.segments?.(l) ?? [], a = t.stacked ? l.flatMap((e) => Object.values(Ne(e, _.length, m.running))) : i.some((e) => e.kind === "up" || e.kind === "down") ? i.flatMap((e) => [e.from, e.to]) : l.flatMap((e) => e.cells.slice(0, _.length).filter((e) => !e.missing).map((e) => e.value)), o = Math.min(0, -W(a.map((e) => -e))), s = Math.max(0, W(a)), c = Number.parseFloat(getComputedStyle(r).fontSize) || 16, { chartScaleY: u, chartScale: d } = t.figure.dataset, f =
|
|
2266
|
-
if (f && f.length > 2)
|
|
2331
|
+
let i = m.segments?.(l) ?? [], a = t.stacked ? l.flatMap((e) => Object.values(Ne(e, _.length, m.running))) : i.some((e) => e.kind === "up" || e.kind === "down") ? i.flatMap((e) => [e.from, e.to]) : l.flatMap((e) => e.cells.slice(0, _.length).filter((e) => !e.missing).map((e) => e.value)), o = Math.min(0, -W(a.map((e) => -e))), s = Math.max(0, W(a)), c = Number.parseFloat(getComputedStyle(r).fontSize) || 16, { chartScaleY: u, chartScale: d } = t.figure.dataset, f = yt(u ?? d);
|
|
2332
|
+
if (f && f.length > 2) M = {
|
|
2267
2333
|
min: f[0],
|
|
2268
2334
|
max: f[f.length - 1],
|
|
2269
2335
|
step: 0,
|
|
2270
2336
|
ticks: f
|
|
2271
2337
|
};
|
|
2272
2338
|
else {
|
|
2273
|
-
let [t, n] = f ?? [o, s], r =
|
|
2274
|
-
|
|
2339
|
+
let [t, n] = f ?? [o, s], r = gt(n - t, Math.max((k ? e / 9 : e * O / 3) / c, 2)), i = (e, t) => f ? e : Number(((t ? Math.ceil : Math.floor)(e / r - 1e-9 * (t ? 1 : -1)) * r).toPrecision(12)), a = i(t, !1), l = i(n, !0);
|
|
2340
|
+
M = {
|
|
2275
2341
|
min: a,
|
|
2276
2342
|
max: l,
|
|
2277
2343
|
step: r,
|
|
2278
|
-
ticks:
|
|
2344
|
+
ticks: _t(a, l, r)
|
|
2279
2345
|
};
|
|
2280
2346
|
}
|
|
2281
|
-
|
|
2282
|
-
let p = l.find((e) => !e.missing), h = W(
|
|
2283
|
-
for (let e of
|
|
2284
|
-
let t = I(T,
|
|
2285
|
-
t.dataset.value = String(e), t.dataset.place = "none", p?.prefix && (t.dataset.prefix = p.prefix), p?.suffix && (t.dataset.suffix = p.suffix),
|
|
2347
|
+
A.ticks.textContent = "";
|
|
2348
|
+
let p = l.find((e) => !e.missing), h = W(M.ticks.map((e) => re(String(e))));
|
|
2349
|
+
for (let e of M.ticks) {
|
|
2350
|
+
let t = I(T, A.ticks);
|
|
2351
|
+
t.dataset.value = String(e), t.dataset.place = "none", p?.prefix && (t.dataset.prefix = p.prefix), p?.suffix && (t.dataset.suffix = p.suffix), zn(t, h, n.locale);
|
|
2286
2352
|
}
|
|
2287
|
-
if (
|
|
2288
|
-
let e = Array.from(
|
|
2353
|
+
if (A.numbers) {
|
|
2354
|
+
let e = Array.from(A.ticks.children);
|
|
2289
2355
|
for (let t of e) delete t.dataset.place;
|
|
2290
|
-
pe(e),
|
|
2356
|
+
pe(e), k ? r.style.marginBottom = `${(e[0] ? J(e[0]).height : 0) + 6}px` : (r.style.marginLeft = `${W([0, ...e.map((e) => J(e).width)]) + 10}px`, j && (j.style.marginLeft = r.style.marginLeft));
|
|
2291
2357
|
}
|
|
2292
2358
|
}
|
|
2293
|
-
let
|
|
2294
|
-
if (!
|
|
2295
|
-
let
|
|
2359
|
+
let F = r.clientWidth;
|
|
2360
|
+
if (!F) return !1;
|
|
2361
|
+
let R = D / F, z = D * O;
|
|
2296
2362
|
r.classList.add(v);
|
|
2297
|
-
let
|
|
2298
|
-
for (let e of
|
|
2363
|
+
let B = m.numbers === !1 ? g.slice(0, 1) : [...y.flat(), ...t.totals];
|
|
2364
|
+
for (let e of B) delete e.dataset.place, e.removeAttribute("data-left-out"), e.removeAttribute("data-cut");
|
|
2299
2365
|
r.style.removeProperty("--_fit"), r.toggleAttribute("data-grouped", !!m.groups && !t.stacked && _.filter((e) => !e.chart && !e.group).length > 1), t.categories[0]?.parentElement?.style.removeProperty("--_beside");
|
|
2300
|
-
let
|
|
2301
|
-
if (
|
|
2302
|
-
let e = Number.parseFloat(getComputedStyle(r).fontSize) || 16, i = _.flatMap((e, t) => e.group ? [] : [t]).slice(0, 2), a = l.filter((e) => i.every((t) => e.cells[t] && !e.cells[t].missing)), { chartScaleX: o, chartScaleY: s, chartScale: c } = t.figure.dataset, u = [
|
|
2303
|
-
|
|
2366
|
+
let V = m.axes ? t.axes : null, ee = [];
|
|
2367
|
+
if (V) {
|
|
2368
|
+
let e = Number.parseFloat(getComputedStyle(r).fontSize) || 16, i = _.flatMap((e, t) => e.group ? [] : [t]).slice(0, 2), a = l.filter((e) => i.every((t) => e.cells[t] && !e.cells[t].missing)), { chartScaleX: o, chartScaleY: s, chartScale: c } = t.figure.dataset, u = [yt(o), yt(s ?? c)];
|
|
2369
|
+
ee = i.map((t, n) => bt(a.length ? a.map((e) => e.cells[t].value) : [0, 1], Math.max(n ? z / R / (e * 4) : F / (e * 9), 4), u[n])), V.ticks.textContent = "", ee.forEach((e, t) => {
|
|
2304
2370
|
let r = a[0]?.cells[i[t]], o = W(e.ticks.map((e) => re(String(e))));
|
|
2305
2371
|
for (let i of e.ticks) {
|
|
2306
|
-
let e = I(T,
|
|
2307
|
-
e.dataset.axis = t ? "y" : "x", e.dataset.value = String(i), r?.prefix && (e.dataset.prefix = r.prefix), r?.suffix && (e.dataset.suffix = r.suffix),
|
|
2372
|
+
let e = I(T, V.ticks);
|
|
2373
|
+
e.dataset.axis = t ? "y" : "x", e.dataset.value = String(i), r?.prefix && (e.dataset.prefix = r.prefix), r?.suffix && (e.dataset.suffix = r.suffix), zn(e, o, n.locale);
|
|
2308
2374
|
}
|
|
2309
2375
|
});
|
|
2310
2376
|
}
|
|
2311
|
-
let
|
|
2377
|
+
let te = V ? Array.from(V.ticks.children) : [];
|
|
2312
2378
|
pe([
|
|
2313
2379
|
...y.flat(),
|
|
2314
2380
|
...t.totals,
|
|
2315
2381
|
...b,
|
|
2316
2382
|
...t.categories,
|
|
2317
2383
|
...x.map((e) => e.badge),
|
|
2318
|
-
...
|
|
2319
|
-
...
|
|
2384
|
+
...V?.titles ?? [],
|
|
2385
|
+
...te
|
|
2320
2386
|
]);
|
|
2321
|
-
let
|
|
2387
|
+
let ne = (g[0] ? J(g[0]).height : 0) * R;
|
|
2322
2388
|
m.numbers === !1 && g[0] && (g[0].dataset.place = "none");
|
|
2323
|
-
let
|
|
2324
|
-
labelHeight:
|
|
2325
|
-
nameHeight: Math.max(0, W(t.categories.map((e) => J(e).height))) *
|
|
2326
|
-
unit:
|
|
2389
|
+
let G = x[0]?.badge ? J(x[0].badge).height * R : 0, K = Math.max(z, jn(t.figure, R, "--tablechart-min-height", "200px") ?? 0, m.minHeight?.({
|
|
2390
|
+
labelHeight: ne,
|
|
2391
|
+
nameHeight: Math.max(0, W(t.categories.map((e) => J(e).height))) * R,
|
|
2392
|
+
unit: R,
|
|
2327
2393
|
rows: l.length,
|
|
2328
2394
|
series: _.length,
|
|
2329
|
-
stacked: t.stacked
|
|
2395
|
+
stacked: t.stacked,
|
|
2396
|
+
labels: An(t.figure, n, _.some((e) => e.chart))
|
|
2330
2397
|
}) ?? 0), ie = t.stacked ? l.map((e) => {
|
|
2331
2398
|
let t = Pe(e, _.length);
|
|
2332
2399
|
return {
|
|
@@ -2337,7 +2404,7 @@ var Je = (e) => {
|
|
|
2337
2404
|
value: t
|
|
2338
2405
|
} : e)
|
|
2339
2406
|
};
|
|
2340
|
-
}) : l,
|
|
2407
|
+
}) : l, q = (m.segments ?? ((e) => e.map((e) => ({
|
|
2341
2408
|
...e,
|
|
2342
2409
|
from: 0,
|
|
2343
2410
|
to: e.value,
|
|
@@ -2345,112 +2412,112 @@ var Je = (e) => {
|
|
|
2345
2412
|
}))))(t.stacked ? ie.map((e) => ({
|
|
2346
2413
|
...e,
|
|
2347
2414
|
cells: [e.cells[0]]
|
|
2348
|
-
})) : l),
|
|
2349
|
-
labelHeight:
|
|
2350
|
-
badgeHeight:
|
|
2415
|
+
})) : l), ae = {
|
|
2416
|
+
labelHeight: ne,
|
|
2417
|
+
badgeHeight: G,
|
|
2351
2418
|
hasAnnotations: x.length > 0,
|
|
2352
|
-
unit:
|
|
2419
|
+
unit: R,
|
|
2353
2420
|
series: _.length,
|
|
2354
2421
|
focused: _.some((e) => e.focus),
|
|
2355
2422
|
stacked: t.stacked
|
|
2356
|
-
},
|
|
2423
|
+
}, oe = Math.max(((e) => t.stacked ? e(l.map((e) => Ne(e, _.length, m.running).top)) : e([...q.flatMap((e) => [
|
|
2357
2424
|
e.from,
|
|
2358
2425
|
e.to,
|
|
2359
2426
|
e.value
|
|
2360
|
-
]), ...l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value))]))(W), 0),
|
|
2361
|
-
let t = Number.parseFloat(
|
|
2427
|
+
]), ...l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value))]))(W), 0), se = q.some((e) => e.kind === "up" || e.kind === "down") ? q.flatMap((e) => [e.from, e.to]) : t.stacked ? l.map((e) => Ne(e, _.length, m.running).bottom) : l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value)), ce = Math.min(-W(se.map((e) => -e)), 0), le = _.flatMap((e, t) => e.chart ? [t] : []), ue = l.some((e) => e.note) ? G + 4 * R : 0, de = Math.max(m.headroom?.(ae) ?? ne, le.length ? nt.headroom?.(ae) ?? 0 : 0) + ue, fe = 2 * R + (m.footroom?.(ae) ?? 0) + (ce < 0 ? ne + 4 * R : 0), me = K - de - fe, he = M ? Math.max(M.max, oe) : oe * 1.02, ge = M ? Math.min(M.min, ce) : ce * 1.02, _e = x.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, ye = (e) => {
|
|
2428
|
+
let t = Number.parseFloat(_e?.getAttribute(e) ?? "");
|
|
2362
2429
|
return Number.isFinite(t) ? t : null;
|
|
2363
|
-
},
|
|
2364
|
-
if (
|
|
2365
|
-
let t =
|
|
2430
|
+
}, be = ye("data-from") ?? ye("data-at"), xe = ye("data-to"), Y = null;
|
|
2431
|
+
if (_e && (be !== null || xe !== null)) {
|
|
2432
|
+
let t = be ?? 0, n = xe ?? he, r = xe === null ? t : be === null ? n : (t + n) / 2, i = _e.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
|
|
2366
2433
|
i !== null && !a && console.warn(`[${e}] data-size="${i}" is not a percentage, such as 30%. Using the default.`);
|
|
2367
|
-
let o = Math.min(Math.max(a ? Number(a[1]) / 100 :
|
|
2368
|
-
m.breakable ?
|
|
2434
|
+
let o = Math.min(Math.max(a ? Number(a[1]) / 100 : xe === null ? .22 : .3, .05), .8), s = q.filter((e) => (e.kind === "up" || e.kind === "down") && Math.max(e.from, e.to) > t && Math.min(e.from, e.to) < n);
|
|
2435
|
+
m.breakable ? ce < 0 ? console.warn(`[${e}] A chart with values below zero cannot break its scale.`) : t < 0 || n <= t || n > he || t === 0 && n === he ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${oe}.`) : s.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : Y = {
|
|
2369
2436
|
lo: t,
|
|
2370
2437
|
hi: n,
|
|
2371
2438
|
gap: r,
|
|
2372
2439
|
share: o
|
|
2373
2440
|
} : console.warn(`[${e}] This kind of chart cannot break its scale.`);
|
|
2374
2441
|
}
|
|
2375
|
-
let
|
|
2442
|
+
let we = Y ? Y.gap : null, Te = (Y && jn(t.figure, R, "--tablechart-break-gap", "")) ?? 13, Ee = K - fe, De = he - ge || 1, Oe = (e) => Ee - (e - ge) / De * me;
|
|
2376
2443
|
if (Y) {
|
|
2377
|
-
let { lo: e, hi: t, gap: n, share: r } = Y, i =
|
|
2378
|
-
|
|
2444
|
+
let { lo: e, hi: t, gap: n, share: r } = Y, i = me * r, a = (me - i - Te) / (e + (he - t)), o = i / (t - e);
|
|
2445
|
+
Oe = (r) => r <= e ? Ee - r * a : r <= n ? Ee - e * a - (r - e) * o : r <= t ? Ee - e * a - (r - e) * o - Te : Ee - e * a - i - Te - (r - t) * a;
|
|
2379
2446
|
}
|
|
2380
|
-
let
|
|
2381
|
-
if (
|
|
2382
|
-
let e = 6 *
|
|
2383
|
-
|
|
2447
|
+
let ke, Ae, je = [];
|
|
2448
|
+
if (V) {
|
|
2449
|
+
let e = 6 * R, [t, n] = V.titles, r = (e) => e ? J(e).width * R : 0, i = (e) => e ? J(e).height * R : 0, a = te.filter((e) => e.dataset.axis === "x"), o = te.filter((e) => e.dataset.axis === "y"), s = i(te[0]), c = r(n) + W([0, ...o.map(r)]) + 2 * e, l = s / 2;
|
|
2450
|
+
Ae = [
|
|
2384
2451
|
c,
|
|
2385
2452
|
l,
|
|
2386
2453
|
D - c - W([0, ...a.map(r)]) / 2,
|
|
2387
|
-
|
|
2454
|
+
K - l - i(t) - s - 2 * e
|
|
2388
2455
|
];
|
|
2389
|
-
let [u, d, f, p] =
|
|
2390
|
-
|
|
2456
|
+
let [u, d, f, p] = Ae, [m, h] = ee, g = (e) => u + (e - m.min) / (m.max - m.min || 1) * f, _ = (e) => d + p - (e - h.min) / (h.max - h.min || 1) * p;
|
|
2457
|
+
ke = g, Oe = _;
|
|
2391
2458
|
let v = (e) => r(a.find((t) => Number(t.dataset.value) === e));
|
|
2392
|
-
|
|
2393
|
-
for (let t of
|
|
2394
|
-
let n = Number(t.dataset.value), r = t.dataset.axis === "x" ? 0 : 1, i =
|
|
2395
|
-
t.dataset.place = i ? r ? "before" : "below" : "none", i && L(t, r ? u - e : g(n), r ? _(n) : d + p + e, D,
|
|
2459
|
+
je = [xt(m, (t) => t.every((n, r) => !r || g(n) - g(t[r - 1]) > (v(n) + v(t[r - 1])) / 2 + e)).ticks, xt(h, (t) => t.every((n, r) => !r || _(t[r - 1]) - _(n) > s + e / 2)).ticks];
|
|
2460
|
+
for (let t of te) {
|
|
2461
|
+
let n = Number(t.dataset.value), r = t.dataset.axis === "x" ? 0 : 1, i = je[r].includes(n);
|
|
2462
|
+
t.dataset.place = i ? r ? "before" : "below" : "none", i && L(t, r ? u - e : g(n), r ? _(n) : d + p + e, D, K);
|
|
2396
2463
|
}
|
|
2397
|
-
t && L(t, u + f / 2,
|
|
2464
|
+
t && L(t, u + f / 2, K - i(t), D, K), n && L(n, 0, d + p / 2, D, K);
|
|
2398
2465
|
}
|
|
2399
|
-
let
|
|
2400
|
-
|
|
2401
|
-
let
|
|
2402
|
-
t.rowAt = m.centre ? null : m.categories === "beside" ? (e, t) =>
|
|
2403
|
-
let
|
|
2466
|
+
let Me = b.length ? W(b.map((e) => J(e).width)) * R + 12 * R : 0, Fe = t.categories[0]?.parentElement;
|
|
2467
|
+
Fe && (Fe.style.paddingRight = Me ? `${Me / D * 100}%` : "");
|
|
2468
|
+
let Ie = (D - Me) / l.length, Le = (e) => (e + .5) * Ie, Re = (e) => e >= 0 && e < l.length ? e : null;
|
|
2469
|
+
t.rowAt = m.centre ? null : m.categories === "beside" ? (e, t) => Re(Math.floor(t * R / (K / l.length))) : (e) => Re(Math.floor(e * R / Ie));
|
|
2470
|
+
let ze = Ie / D * 100, Be = 100 / l.length;
|
|
2404
2471
|
if (t.rowBox = m.categories === "beside" ? (e) => [
|
|
2405
2472
|
0,
|
|
2406
|
-
e *
|
|
2473
|
+
e * Be,
|
|
2407
2474
|
100,
|
|
2408
|
-
|
|
2475
|
+
Be
|
|
2409
2476
|
] : (e) => [
|
|
2410
|
-
e *
|
|
2477
|
+
e * ze,
|
|
2411
2478
|
0,
|
|
2412
|
-
|
|
2479
|
+
ze,
|
|
2413
2480
|
100
|
|
2414
|
-
], i.setAttribute("viewBox", `0 0 ${D} ${N(
|
|
2415
|
-
let [e, r, a, o] =
|
|
2416
|
-
|
|
2481
|
+
], i.setAttribute("viewBox", `0 0 ${D} ${N(K)}`), i.textContent = "", Ae && ke) {
|
|
2482
|
+
let [e, r, a, o] = Ae, [s, c] = je, l = ke;
|
|
2483
|
+
vn(t.figure, "data-chart-grid", n.grid) && i.appendChild(P("path", {
|
|
2417
2484
|
class: E,
|
|
2418
|
-
d: [...s.map((e) => `M${N(l(e))},${N(r)}V${N(r + o)}`), ...c.map((t) => `M${N(e)},${N(
|
|
2485
|
+
d: [...s.map((e) => `M${N(l(e))},${N(r)}V${N(r + o)}`), ...c.map((t) => `M${N(e)},${N(Oe(t))}H${N(e + a)}`)].join("")
|
|
2419
2486
|
})), i.appendChild(P("path", {
|
|
2420
2487
|
class: w,
|
|
2421
2488
|
d: [
|
|
2422
2489
|
`M${N(e)},${N(r)}V${N(r + o)}H${N(e + a)}`,
|
|
2423
|
-
...s.map((e) => `M${N(l(e))},${N(r + o)}v${N(4 *
|
|
2424
|
-
...c.map((t) => `M${N(e)},${N(
|
|
2490
|
+
...s.map((e) => `M${N(l(e))},${N(r + o)}v${N(4 * R)}`),
|
|
2491
|
+
...c.map((t) => `M${N(e)},${N(Oe(t))}h${N(-4 * R)}`)
|
|
2425
2492
|
].join("")
|
|
2426
2493
|
}));
|
|
2427
2494
|
}
|
|
2428
2495
|
t.checks = [];
|
|
2429
|
-
let
|
|
2496
|
+
let Ve = {
|
|
2430
2497
|
rows: l,
|
|
2431
|
-
segments:
|
|
2432
|
-
cx:
|
|
2433
|
-
y:
|
|
2434
|
-
x:
|
|
2435
|
-
frame:
|
|
2436
|
-
length: (e, n) =>
|
|
2437
|
-
barWidth: Math.min(
|
|
2438
|
-
barMax:
|
|
2439
|
-
height:
|
|
2440
|
-
unit:
|
|
2441
|
-
labelHeight:
|
|
2442
|
-
badgeHeight:
|
|
2498
|
+
segments: q,
|
|
2499
|
+
cx: Le,
|
|
2500
|
+
y: Oe,
|
|
2501
|
+
x: ke,
|
|
2502
|
+
frame: Ae,
|
|
2503
|
+
length: (e, n) => jn(t.figure, R, e, n),
|
|
2504
|
+
barWidth: Math.min(Ie * n.barfill, Mn(t.figure, R)),
|
|
2505
|
+
barMax: Mn(t.figure, R),
|
|
2506
|
+
height: K,
|
|
2507
|
+
unit: R,
|
|
2508
|
+
labelHeight: ne,
|
|
2509
|
+
badgeHeight: G,
|
|
2443
2510
|
after: l.length,
|
|
2444
2511
|
note: 0,
|
|
2445
|
-
labels: t.figure
|
|
2446
|
-
insideAlign:
|
|
2447
|
-
breakAt:
|
|
2512
|
+
labels: An(t.figure, n, le.length > 0),
|
|
2513
|
+
insideAlign: kn(t.figure),
|
|
2514
|
+
breakAt: we,
|
|
2448
2515
|
squeeze: Y,
|
|
2449
|
-
breakGap:
|
|
2450
|
-
domain:
|
|
2516
|
+
breakGap: Te,
|
|
2517
|
+
domain: M ? [M.min, M.max] : null,
|
|
2451
2518
|
stacked: t.stacked,
|
|
2452
|
-
shape:
|
|
2453
|
-
pick:
|
|
2519
|
+
shape: bn(t.figure, n),
|
|
2520
|
+
pick: Fn(t.figure, n),
|
|
2454
2521
|
totals: t.totals,
|
|
2455
2522
|
svg: i,
|
|
2456
2523
|
plot: r,
|
|
@@ -2467,14 +2534,14 @@ var Je = (e) => {
|
|
|
2467
2534
|
lineHoles: []
|
|
2468
2535
|
};
|
|
2469
2536
|
r.style.setProperty("--count", String(Math.max(1, ...l.map((e) => e.slot + 1))));
|
|
2470
|
-
let
|
|
2537
|
+
let He = (e) => {
|
|
2471
2538
|
let t = (t) => ({
|
|
2472
2539
|
...t,
|
|
2473
2540
|
...t.cells[e] ?? t.cells[0]
|
|
2474
2541
|
});
|
|
2475
2542
|
return {
|
|
2476
2543
|
rows: l.map(t),
|
|
2477
|
-
segments:
|
|
2544
|
+
segments: q.map((e) => {
|
|
2478
2545
|
let n = t(e);
|
|
2479
2546
|
return e.kind === "bar" ? {
|
|
2480
2547
|
...n,
|
|
@@ -2484,51 +2551,51 @@ var Je = (e) => {
|
|
|
2484
2551
|
values: y[e]
|
|
2485
2552
|
};
|
|
2486
2553
|
};
|
|
2487
|
-
if (
|
|
2554
|
+
if (le.length) {
|
|
2488
2555
|
let e = _.flatMap((e, t) => e.chart ? [] : [t]);
|
|
2489
2556
|
m.draw({
|
|
2490
|
-
...
|
|
2557
|
+
...Ve,
|
|
2491
2558
|
own: e,
|
|
2492
|
-
...e.length === 1 &&
|
|
2493
|
-
}),
|
|
2494
|
-
...
|
|
2495
|
-
own:
|
|
2559
|
+
...e.length === 1 && He(e[0])
|
|
2560
|
+
}), nt.draw({
|
|
2561
|
+
...Ve,
|
|
2562
|
+
own: le
|
|
2496
2563
|
});
|
|
2497
|
-
} else m.draw(
|
|
2498
|
-
|
|
2499
|
-
let
|
|
2500
|
-
for (let e of t.figure.querySelectorAll(`.${f}`)) e.style.setProperty("--i", String(Math.min(l[l.length - 1].slot,
|
|
2501
|
-
if (!t.stacked && !r.hasAttribute("data-grouped")) for (let e of y)
|
|
2502
|
-
if (
|
|
2503
|
-
let e = 6 *
|
|
2564
|
+
} else m.draw(Ve);
|
|
2565
|
+
Ve.rowAt && (t.rowAt = Ve.rowAt), t.pointOf = Ve.pointOf ?? null;
|
|
2566
|
+
let Ue = Number(r.style.getPropertyValue("--count")) || l.length;
|
|
2567
|
+
for (let e of t.figure.querySelectorAll(`.${f}`)) e.style.setProperty("--i", String(Math.min(l[l.length - 1].slot, Ue - 1)));
|
|
2568
|
+
if (!t.stacked && !r.hasAttribute("data-grouped")) for (let e of y) Se(e, R, D), Ce(e, R, D, K);
|
|
2569
|
+
if (A && M) {
|
|
2570
|
+
let e = 6 * R, r = k && Ve.x ? Ve.x : Oe, a = Array.from(A.ticks.children), o = (e) => J(a.find((t) => Number(t.dataset.value) === e) ?? a[0]), s = xt(M, (t) => t.every((n, i) => !i || (k ? r(n) - r(t[i - 1]) > (o(n).width + o(t[i - 1]).width) / 2 * R + e : r(t[i - 1]) - r(n) > o(n).height * R + e / 2))).ticks.filter((e) => !Y || e <= Y.lo || e >= Y.hi);
|
|
2504
2571
|
for (let t of a) {
|
|
2505
|
-
let n = Number(t.dataset.value), i =
|
|
2506
|
-
t.dataset.place = i ?
|
|
2572
|
+
let n = Number(t.dataset.value), i = A.numbers && s.includes(n);
|
|
2573
|
+
t.dataset.place = i ? k ? "below" : "before" : "none", i && L(t, k ? r(n) : -e, k ? K + e : r(n), D, K);
|
|
2507
2574
|
}
|
|
2508
|
-
let c = D -
|
|
2509
|
-
|
|
2575
|
+
let c = D - Me;
|
|
2576
|
+
vn(t.figure, "data-chart-grid", n.grid) && i.prepend(P("path", {
|
|
2510
2577
|
class: E,
|
|
2511
|
-
d: s.map((e) =>
|
|
2512
|
-
})),
|
|
2578
|
+
d: s.map((e) => k ? `M${N(r(e))},0V${N(K)}` : `M0,${N(r(e))}H${N(c)}`).join("")
|
|
2579
|
+
})), A.numbers && i.appendChild(P("path", {
|
|
2513
2580
|
class: w,
|
|
2514
|
-
d: [
|
|
2581
|
+
d: [k ? `M${N(r(M.min))},${N(K)}H${N(r(M.max))}` : `M0,${N(r(M.max))}V${N(r(M.min))}`, ...s.map((e) => k ? `M${N(r(e))},${N(K)}v${N(4 * R)}` : `M0,${N(r(e))}h${N(-4 * R)}`)].join("")
|
|
2515
2582
|
}));
|
|
2516
2583
|
}
|
|
2517
2584
|
for (let [e, n] of x.entries()) {
|
|
2518
2585
|
n.badge?.setAttribute("data-note", String(e + 1));
|
|
2519
2586
|
let i = n.series;
|
|
2520
2587
|
n.type.draw(n.spec, n.badge, {
|
|
2521
|
-
...
|
|
2588
|
+
...Ve,
|
|
2522
2589
|
...t.stacked && {
|
|
2523
2590
|
rows: ie,
|
|
2524
2591
|
...t.totals.length && { values: t.totals }
|
|
2525
2592
|
},
|
|
2526
|
-
...i > 0 && !t.stacked &&
|
|
2593
|
+
...i > 0 && !t.stacked && He(i),
|
|
2527
2594
|
after: t.plan ? n.after : Math.min(n.after, Number(r.style.getPropertyValue("--count")) || n.after),
|
|
2528
2595
|
note: e + 1
|
|
2529
2596
|
});
|
|
2530
2597
|
}
|
|
2531
|
-
|
|
2598
|
+
Mt(t);
|
|
2532
2599
|
for (let e of t.figure.querySelectorAll(`.${p}`)) {
|
|
2533
2600
|
let n = Array.from(e.children);
|
|
2534
2601
|
if (t.plan) for (let e of n) e.style.getPropertyValue("--step") || e.style.setProperty("--i", "0");
|
|
@@ -2557,10 +2624,10 @@ var Je = (e) => {
|
|
|
2557
2624
|
e && e.getBoundingClientRect().right + 8 > s.getBoundingClientRect().left && s.setAttribute("data-left-out", "");
|
|
2558
2625
|
}
|
|
2559
2626
|
}
|
|
2560
|
-
let r = (m ===
|
|
2627
|
+
let r = (m === nt || m === rt) && vn(t.figure, "data-chart-ticks", n.ticks);
|
|
2561
2628
|
if (X.toggleAttribute("data-ticks", r), X.style.removeProperty("--_tick-reach"), r) {
|
|
2562
|
-
let e =
|
|
2563
|
-
e > 0 && e < 10 *
|
|
2629
|
+
let e = K - Number(i.querySelector(".tablechart-rule")?.getAttribute("y1") ?? K);
|
|
2630
|
+
e > 0 && e < 10 * R && X.style.setProperty("--_tick-reach", `${N(e / R)}px`);
|
|
2564
2631
|
let n = X.getBoundingClientRect(), r = n.width / (X.offsetWidth || 1), a = getComputedStyle(X), o = Number.parseFloat(a.paddingLeft), s = (X.clientWidth - o - Number.parseFloat(a.paddingRight)) / l.length;
|
|
2565
2632
|
t.categories.forEach((e, t) => {
|
|
2566
2633
|
if (e.hasAttribute("data-left-out")) e.style.removeProperty("--_tick");
|
|
@@ -2572,9 +2639,9 @@ var Je = (e) => {
|
|
|
2572
2639
|
}
|
|
2573
2640
|
X.style.height = "";
|
|
2574
2641
|
}
|
|
2575
|
-
let
|
|
2642
|
+
let We = x.flatMap(({ badge: e }) => {
|
|
2576
2643
|
if (!(e instanceof HTMLElement) || !e.offsetWidth) return [];
|
|
2577
|
-
let t = e.offsetWidth *
|
|
2644
|
+
let t = e.offsetWidth * R, n = e.offsetHeight * R, r = Number.parseFloat(e.style.left) / 100 * D, i = Number.parseFloat(e.style.top) / 100 * K, a = getComputedStyle(e).borderTopLeftRadius, o = a.endsWith("%") ? Number.parseFloat(a) / 100 : null, s = (Number.parseFloat(a) || 0) * R;
|
|
2578
2645
|
return [P("rect", {
|
|
2579
2646
|
class: h,
|
|
2580
2647
|
"data-for": "badge",
|
|
@@ -2587,25 +2654,25 @@ var Je = (e) => {
|
|
|
2587
2654
|
ry: o === null ? s : n * o,
|
|
2588
2655
|
style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
|
|
2589
2656
|
})];
|
|
2590
|
-
}), Z = i.querySelector(`.${E}`),
|
|
2591
|
-
if (
|
|
2657
|
+
}), Z = i.querySelector(`.${E}`), Ge = Array.from(i.querySelectorAll(`.${o}`)), Ke = [...Z ? [Z] : [], ...i.querySelectorAll(`:scope > .${s}`)], qe = Nn(r, R), Je = t.figure.getAttribute("data-animate") === "grow", Ye = y.flat().filter((e) => e.hasAttribute("data-cut")).flatMap(qe), Xe = [...le.flatMap((e) => y[e].flatMap(qe)), ...Je ? Ye : []];
|
|
2658
|
+
if (Ke.length || Ge.length) {
|
|
2592
2659
|
let e = [
|
|
2593
2660
|
...y.flat(),
|
|
2594
2661
|
...t.totals,
|
|
2595
2662
|
...m.categories === "beside" ? t.categories : []
|
|
2596
|
-
].flatMap(
|
|
2663
|
+
].flatMap(qe), n = (e) => [
|
|
2597
2664
|
"x",
|
|
2598
2665
|
"y",
|
|
2599
2666
|
"width",
|
|
2600
2667
|
"height"
|
|
2601
2668
|
].map((t) => Number(e.getAttribute(t)));
|
|
2602
|
-
for (let t of
|
|
2603
|
-
if (
|
|
2604
|
-
else for (let t of
|
|
2605
|
-
let r = [...e, ...
|
|
2606
|
-
t.setAttribute("d", i.map(([e, t, i, a]) =>
|
|
2669
|
+
for (let t of Ge) hn(t, [...e, ...We].map(n));
|
|
2670
|
+
if (Ke.length && t.plan) U(i, e, D, K, Ke);
|
|
2671
|
+
else for (let t of Ke) {
|
|
2672
|
+
let r = [...e, ...We], i = gn(t);
|
|
2673
|
+
t.setAttribute("d", i.map(([e, t, i, a]) => mn(e, t, i, a, r.map(n))).join(""));
|
|
2607
2674
|
for (let e of r) {
|
|
2608
|
-
let r =
|
|
2675
|
+
let r = _n(i, n(e)), a = e.dataset.for === "badge" ? "badge" : "";
|
|
2609
2676
|
r && t.after(P("path", {
|
|
2610
2677
|
class: t.getAttribute("class") ?? "tablechart-grid",
|
|
2611
2678
|
"data-gap": a,
|
|
@@ -2615,68 +2682,135 @@ var Je = (e) => {
|
|
|
2615
2682
|
}
|
|
2616
2683
|
}
|
|
2617
2684
|
}
|
|
2618
|
-
if (H(i,
|
|
2685
|
+
if (H(i, We, D, K, Array.from(i.querySelectorAll(`.${a}, .${c}`))), !Je && (Ve.lineHoles.length || Ye.length)) {
|
|
2619
2686
|
let e = Array.from(i.querySelectorAll(`.${u}`)).map((e) => {
|
|
2620
2687
|
let t = P("g", {});
|
|
2621
2688
|
return e.before(t), t.append(e), t;
|
|
2622
2689
|
});
|
|
2623
|
-
H(i, [...
|
|
2690
|
+
H(i, [...Ve.lineHoles, ...Ye], D, K, [...e, ...i.querySelectorAll(`.${d}`)]);
|
|
2624
2691
|
}
|
|
2625
|
-
let
|
|
2692
|
+
let Ze = [
|
|
2626
2693
|
o,
|
|
2627
2694
|
s,
|
|
2628
2695
|
a,
|
|
2629
2696
|
c,
|
|
2630
2697
|
...t.plan ? [] : [E]
|
|
2631
2698
|
];
|
|
2632
|
-
U(i, [...
|
|
2633
|
-
let
|
|
2699
|
+
U(i, [...We, ...Xe], D, K, void 0, Ze.map((e) => `.${e}`).join(", ")), t.figure.hasAttribute("data-animate") && !t.figure.hasAttribute("data-steps") && !t.figure.classList.contains("is-shown") && Un(i);
|
|
2700
|
+
let Qe = (e) => e.dataset.missing !== void 0 || m.centre && l[Number(e.dataset.row) - 1]?.isTotal, $e = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), et = (e, t) => {
|
|
2634
2701
|
let n = Number(e.dataset.row);
|
|
2635
|
-
return t.some((e) =>
|
|
2702
|
+
return t.some((e) => $e(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
|
|
2636
2703
|
};
|
|
2637
|
-
return t.figure.toggleAttribute("data-left-out", (m.columns ? [t.categories] : [...y, t.totals]).some((e) => e.some((t) => !
|
|
2638
|
-
},
|
|
2704
|
+
return t.figure.toggleAttribute("data-left-out", (m.columns ? [t.categories] : [...y, t.totals]).some((e) => e.some((t) => !Qe(t) && !$e(t) && !et(t, e)))), Ot(t.figure), !0;
|
|
2705
|
+
}, Rn = (e, t) => {
|
|
2639
2706
|
let n = [
|
|
2640
2707
|
...e.seriesValues.flat(),
|
|
2641
2708
|
...e.totals,
|
|
2642
2709
|
...e.totalCell ? [e.totalCell] : []
|
|
2643
2710
|
];
|
|
2644
|
-
for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ?
|
|
2645
|
-
},
|
|
2646
|
-
let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] =
|
|
2711
|
+
for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ? zn(r, r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale) : r.textContent = r.dataset.missing;
|
|
2712
|
+
}, zn = (e, t, n) => {
|
|
2713
|
+
let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] = K(Number.parseFloat(e.dataset.value || "0"), t, n);
|
|
2647
2714
|
if (e.textContent = r + (r ? a : "") + o + i, a && !r) {
|
|
2648
2715
|
let t = document.createElement("span");
|
|
2649
2716
|
t.className = "tablechart-minus", t.textContent = a, e.prepend(t);
|
|
2650
2717
|
}
|
|
2651
|
-
},
|
|
2652
|
-
|
|
2653
|
-
},
|
|
2654
|
-
!t && !e.figure.hasAttribute("data-steps") &&
|
|
2655
|
-
},
|
|
2656
|
-
e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) &&
|
|
2657
|
-
},
|
|
2718
|
+
}, Bn = (e) => {
|
|
2719
|
+
sn(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${p}`)?.remove(), e.controls?.remove();
|
|
2720
|
+
}, Vn = (e, t, n = !1) => {
|
|
2721
|
+
!t && !e.figure.hasAttribute("data-steps") && Un(e.svg), n ? (e.figure.classList.add(S), e.figure.classList.toggle(b, t), e.figure.offsetWidth, t && Wn(e.svg), requestAnimationFrame(() => e.figure.classList.remove(S))) : (e.figure.classList.toggle(b, t), t && requestAnimationFrame(() => requestAnimationFrame(() => Hn(e.figure, e.svg))));
|
|
2722
|
+
}, Hn = (e, t) => {
|
|
2723
|
+
e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) && Wn(t);
|
|
2724
|
+
}, Un = (e) => {
|
|
2658
2725
|
for (let t of e.querySelectorAll("[mask^=\"url(#tablechart-cut-\"]")) t.dataset.mask = t.getAttribute("mask") ?? "", t.removeAttribute("mask");
|
|
2659
|
-
},
|
|
2726
|
+
}, Wn = (e) => {
|
|
2660
2727
|
for (let t of e.querySelectorAll("[data-mask]")) t.setAttribute("mask", t.dataset.mask ?? ""), t.removeAttribute("data-mask");
|
|
2661
|
-
},
|
|
2728
|
+
}, Gn = 3, Kn = (t) => {
|
|
2729
|
+
let n = Et(t), r = Array.from(t.querySelectorAll("table thead tr:first-child > *")).map((e) => (e.textContent ?? "").trim()), i = Array.from(t.querySelectorAll("tbody tr > :first-child")).map((e) => (e.textContent ?? "").trim()), a = [
|
|
2730
|
+
[
|
|
2731
|
+
".tablechart-series",
|
|
2732
|
+
"Line",
|
|
2733
|
+
(e) => getComputedStyle(e).stroke
|
|
2734
|
+
],
|
|
2735
|
+
[
|
|
2736
|
+
".tablechart-slice",
|
|
2737
|
+
"Slice",
|
|
2738
|
+
(e) => getComputedStyle(e).stroke
|
|
2739
|
+
],
|
|
2740
|
+
[
|
|
2741
|
+
".tablechart-bar, .tablechart-piece",
|
|
2742
|
+
"Bar",
|
|
2743
|
+
(e) => getComputedStyle(e).fill
|
|
2744
|
+
]
|
|
2745
|
+
], o = /* @__PURE__ */ new Map();
|
|
2746
|
+
for (let [e, s, c] of a) {
|
|
2747
|
+
let a = Array.from(t.querySelectorAll(`${e}:not([data-muted])`));
|
|
2748
|
+
for (let e of a) {
|
|
2749
|
+
let t = c(e), [l, u, d, f] = Ct(t), p = Tt([
|
|
2750
|
+
l,
|
|
2751
|
+
u,
|
|
2752
|
+
d
|
|
2753
|
+
].map((e, t) => e * f + n[t] * (1 - f)), n);
|
|
2754
|
+
if (p >= Gn) continue;
|
|
2755
|
+
let m = e.getAttribute("data-series"), h = i[Number(e.getAttribute("data-row") ?? 0) - 1] ?? "", g = s === "Slice" ? "" : m ? r[Number(m)] : "", _ = `${s}|${g}|${t}`, v = o.get(_) ?? {
|
|
2756
|
+
kind: s,
|
|
2757
|
+
column: g,
|
|
2758
|
+
rows: /* @__PURE__ */ new Set(),
|
|
2759
|
+
all: 0,
|
|
2760
|
+
contrast: p
|
|
2761
|
+
};
|
|
2762
|
+
v.rows.add(h), v.all = a.filter((e) => e.getAttribute("data-series") === m).length, o.set(_, v);
|
|
2763
|
+
}
|
|
2764
|
+
}
|
|
2765
|
+
for (let { kind: n, column: r, rows: i, all: a, contrast: s } of o.values()) {
|
|
2766
|
+
let o = Array.from(i).filter(Boolean).map((e) => `"${e}"`), c = o.join(", "), l = o.length > 1, u = n === "Line" ? r ? `Line "${r}" has` : "The line has" : n === "Slice" ? `${l ? "Slices" : "Slice"} ${c} ${l ? "have" : "has"}` : i.size >= a || !c ? `The bars${r ? ` of column "${r}"` : ""} have` : `${l ? "Bars" : "Bar"} ${c}${r ? ` in column "${r}"` : ""} ${l ? "have" : "has"}`;
|
|
2767
|
+
console.warn(`[${e}] ${u} a contrast of ${(Math.floor(s * 100) / 100).toFixed(2)}:1 with the background. It needs at least ${Gn}:1 (WCAG 1.4.11).`, t);
|
|
2768
|
+
}
|
|
2769
|
+
}, qn = 4.5, Jn = 3, Yn = (t) => {
|
|
2770
|
+
let n = () => {
|
|
2771
|
+
let n = Array.from(t.querySelectorAll("tbody tr > :first-child")).map((e) => (e.textContent ?? "").trim()), r = /* @__PURE__ */ new Map();
|
|
2772
|
+
for (let e of t.querySelectorAll(".tablechart-value[data-place='inside'], .tablechart-value[data-place='middle']")) {
|
|
2773
|
+
if (e.hasAttribute("data-left-out") || e.hidden) continue;
|
|
2774
|
+
let i = e.dataset.row, a = Dt(t, e);
|
|
2775
|
+
if (!a) continue;
|
|
2776
|
+
let o = getComputedStyle(e), s = getComputedStyle(a).fill, c = Tt(Ct(o.color), Ct(s)), l = Number.parseFloat(o.fontSize), u = l >= 24 || l >= 18.66 && Number(o.fontWeight) >= 700 ? Jn : qn;
|
|
2777
|
+
if (c >= u) continue;
|
|
2778
|
+
let d = `${o.color}|${s}`, f = r.get(d) ?? {
|
|
2779
|
+
names: [],
|
|
2780
|
+
contrast: c,
|
|
2781
|
+
needed: u
|
|
2782
|
+
};
|
|
2783
|
+
f.names.push(`"${e.textContent?.trim()}" (${n[Number(i) - 1] ?? ""})`), r.set(d, f);
|
|
2784
|
+
}
|
|
2785
|
+
for (let { names: n, contrast: i, needed: a } of r.values()) console.warn(`[${e}] ${n.length > 1 ? "Numbers" : "Number"} ${n.join(", ")} inside ${n.length > 1 ? "their bars have" : "its bar has"} a contrast of ${(Math.floor(i * 100) / 100).toFixed(2)}:1 with the bar. Text needs at least ${a}:1 (WCAG 1.4.3).`, t);
|
|
2786
|
+
}, r = () => setTimeout(n, 3e3);
|
|
2787
|
+
if (t.classList.contains("is-shown")) return void r();
|
|
2788
|
+
let i = new MutationObserver(() => {
|
|
2789
|
+
t.classList.contains("is-shown") && (i.disconnect(), r());
|
|
2790
|
+
});
|
|
2791
|
+
i.observe(t, {
|
|
2792
|
+
attributes: !0,
|
|
2793
|
+
attributeFilter: ["class"]
|
|
2794
|
+
});
|
|
2795
|
+
}, Xn = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), Zn = /^\s*(?:Table)?:\s+/, Qn = (e) => e?.tagName === "P" && Zn.test(e.textContent ?? ""), $n = (e) => {
|
|
2662
2796
|
let t = document.createElement("figcaption");
|
|
2663
2797
|
for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
|
|
2664
2798
|
let n = e.firstChild;
|
|
2665
|
-
n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(
|
|
2799
|
+
n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(Zn, ""), n.textContent || n.remove());
|
|
2666
2800
|
let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
|
|
2667
2801
|
if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
|
|
2668
2802
|
let e = document.createElement("span");
|
|
2669
2803
|
e.append(...r.slice(i + 1)), t.append(e);
|
|
2670
2804
|
}
|
|
2671
2805
|
return e.remove(), t;
|
|
2672
|
-
},
|
|
2673
|
-
let t =
|
|
2806
|
+
}, er = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, tr = (e) => {
|
|
2807
|
+
let t = lr(e);
|
|
2674
2808
|
return t?.tagName === "P" ? t : e;
|
|
2675
|
-
},
|
|
2676
|
-
let t =
|
|
2809
|
+
}, nr = (e) => {
|
|
2810
|
+
let t = tr(e).firstChild;
|
|
2677
2811
|
if (t?.nodeType !== Node.TEXT_NODE) return null;
|
|
2678
|
-
let n =
|
|
2679
|
-
if (!n || !
|
|
2812
|
+
let n = er.exec(t.textContent ?? "");
|
|
2813
|
+
if (!n || !dn.includes(n[1]) || !n[3] && t.nextSibling) return null;
|
|
2680
2814
|
let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
|
|
2681
2815
|
return {
|
|
2682
2816
|
name: n[1],
|
|
@@ -2684,11 +2818,11 @@ var Je = (e) => {
|
|
|
2684
2818
|
text: t,
|
|
2685
2819
|
length: n[0].length
|
|
2686
2820
|
};
|
|
2687
|
-
},
|
|
2821
|
+
}, rr = (e) => {
|
|
2688
2822
|
if (e?.tagName !== "UL" && e?.tagName !== "OL") return null;
|
|
2689
|
-
let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null :
|
|
2823
|
+
let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : nr(e));
|
|
2690
2824
|
return !t.length || t.some((e, t) => !n[t] && !e.hasAttribute("data-annotation")) ? null : (t.forEach((e, t) => {
|
|
2691
|
-
let r = n[t], i =
|
|
2825
|
+
let r = n[t], i = tr(e);
|
|
2692
2826
|
if (i !== e && i.replaceWith(...i.childNodes), r) {
|
|
2693
2827
|
e.setAttribute("data-annotation", r.name);
|
|
2694
2828
|
for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
|
|
@@ -2699,18 +2833,18 @@ var Je = (e) => {
|
|
|
2699
2833
|
t === 0 && e instanceof HTMLElement && e.matches("em, i") ? (n.className = "tablechart-caption", n.append(...e.childNodes), e.replaceWith(n)) : e.nodeType === Node.TEXT_NODE && (n.textContent = (e.textContent ?? "").trim(), e.replaceWith(n));
|
|
2700
2834
|
});
|
|
2701
2835
|
}), e.classList.add("chart-annotations"), e);
|
|
2702
|
-
},
|
|
2703
|
-
for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" ||
|
|
2704
|
-
},
|
|
2705
|
-
let t = e.closest("p"), n =
|
|
2836
|
+
}, ir = (e, t) => {
|
|
2837
|
+
for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || Xn(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
|
|
2838
|
+
}, ar = (e) => e.map((e) => {
|
|
2839
|
+
let t = e.closest("p"), n = Qn(t) ? t : e;
|
|
2706
2840
|
if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
|
|
2707
2841
|
let r = document.createElement("figure");
|
|
2708
|
-
|
|
2709
|
-
let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ?
|
|
2842
|
+
ir(e, r), e.classList.length || e.removeAttribute("class");
|
|
2843
|
+
let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? Qn(a) ? a : Qn(o) ? o : null : n;
|
|
2710
2844
|
i && s === o && (o = o?.nextElementSibling ?? null);
|
|
2711
|
-
let c = o?.classList.contains("chart-annotations") ? o :
|
|
2712
|
-
return n.replaceWith(r), s && r.append(
|
|
2713
|
-
}),
|
|
2845
|
+
let c = o?.classList.contains("chart-annotations") ? o : rr(o);
|
|
2846
|
+
return n.replaceWith(r), s && r.append($n(s)), i && r.append(i), c && r.append(c), Q?.log?.(`A ${i ? "table" : "caption"} with chart attributes was wrapped in a figure of its own`), r;
|
|
2847
|
+
}), or = (e, t, n, r = document.createElement("table"), i = "Note") => {
|
|
2714
2848
|
for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
|
|
2715
2849
|
let a = e.some((e) => e.note);
|
|
2716
2850
|
if (!r.tHead && (t.length || n || a)) {
|
|
@@ -2739,7 +2873,7 @@ var Je = (e) => {
|
|
|
2739
2873
|
n.dataset.note = "", n.textContent = i, s.append(n);
|
|
2740
2874
|
}
|
|
2741
2875
|
return r;
|
|
2742
|
-
},
|
|
2876
|
+
}, sr = (e) => {
|
|
2743
2877
|
if (!e || typeof e != "object") return;
|
|
2744
2878
|
let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
|
|
2745
2879
|
if (t.length && t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n))) return t.map(([e, t]) => Array.isArray(t) ? {
|
|
@@ -2749,16 +2883,16 @@ var Je = (e) => {
|
|
|
2749
2883
|
label: e,
|
|
2750
2884
|
value: t
|
|
2751
2885
|
});
|
|
2752
|
-
},
|
|
2886
|
+
}, cr = async (t) => {
|
|
2753
2887
|
await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
|
|
2754
2888
|
let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
|
|
2755
2889
|
for (let e of t.querySelectorAll("table")) e !== r && e.remove();
|
|
2756
2890
|
try {
|
|
2757
2891
|
let e = await fetch(n);
|
|
2758
2892
|
if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
|
|
2759
|
-
let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows :
|
|
2893
|
+
let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : sr(i.rows) : sr(i);
|
|
2760
2894
|
if (!Array.isArray(a)) throw Error("no rows in it: a list of rows, an object with rows, or names with their values");
|
|
2761
|
-
let o =
|
|
2895
|
+
let o = or(a, Array.isArray(i?.series) ? i.series.map(String) : [], typeof i?.label == "string" ? i.label : "", r ?? void 0, typeof i?.note == "string" ? i.note : void 0);
|
|
2762
2896
|
if (!r) {
|
|
2763
2897
|
let e = t.querySelector(":scope > figcaption");
|
|
2764
2898
|
e ? e.after(o) : t.prepend(o);
|
|
@@ -2769,10 +2903,10 @@ var Je = (e) => {
|
|
|
2769
2903
|
console.warn(`[${e}] Could not read the chart data in "${n}": ${t.message}.` + (r ? " A page opened as a file cannot fetch files; open it from a server." : ""));
|
|
2770
2904
|
}
|
|
2771
2905
|
}));
|
|
2772
|
-
},
|
|
2906
|
+
}, lr = (e) => {
|
|
2773
2907
|
let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
|
|
2774
2908
|
return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
|
|
2775
|
-
},
|
|
2909
|
+
}, ur = "strong, b, span.total", dr = (e) => {
|
|
2776
2910
|
for (let t of e) {
|
|
2777
2911
|
for (let e of t.querySelectorAll("tbody tr")) {
|
|
2778
2912
|
let t = e.cells[0];
|
|
@@ -2780,16 +2914,16 @@ var Je = (e) => {
|
|
|
2780
2914
|
let n = document.createElement("th");
|
|
2781
2915
|
for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
|
|
2782
2916
|
n.append(...t.childNodes), t.replaceWith(n);
|
|
2783
|
-
for (let t =
|
|
2917
|
+
for (let t = lr(n); t?.matches(ur); t = lr(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
|
|
2784
2918
|
}
|
|
2785
2919
|
let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
|
|
2786
|
-
for (let t of e.slice(1)) for (let e =
|
|
2920
|
+
for (let t of e.slice(1)) for (let e = lr(t); e?.matches(ur); e = lr(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
|
|
2787
2921
|
}
|
|
2788
|
-
},
|
|
2922
|
+
}, fr = "data-chart-made", pr = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, mr = (e) => new Promise((t) => setTimeout(t, e)), hr = (e, t) => {
|
|
2789
2923
|
let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
|
|
2790
2924
|
return Math.min(Math.max(r, 0), 1);
|
|
2791
|
-
},
|
|
2792
|
-
if (
|
|
2925
|
+
}, gr = async (e, t) => {
|
|
2926
|
+
if (pr()) return;
|
|
2793
2927
|
await new Promise(requestAnimationFrame);
|
|
2794
2928
|
let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
|
|
2795
2929
|
for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
|
|
@@ -2800,11 +2934,11 @@ var Je = (e) => {
|
|
|
2800
2934
|
let a = Number(n.delay ?? 0) + i * t;
|
|
2801
2935
|
r = Math.max(r, a - Number(e.currentTime ?? 0));
|
|
2802
2936
|
}
|
|
2803
|
-
r > 0 && await
|
|
2804
|
-
},
|
|
2937
|
+
r > 0 && await mr(r);
|
|
2938
|
+
}, _r = (e) => {
|
|
2805
2939
|
for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
|
|
2806
2940
|
return null;
|
|
2807
|
-
},
|
|
2941
|
+
}, vr = (e) => new Promise((t) => {
|
|
2808
2942
|
let n = ["animationstart", "transitionrun"], r = () => {
|
|
2809
2943
|
for (let e of n) document.removeEventListener(e, i, !0);
|
|
2810
2944
|
a.disconnect(), t();
|
|
@@ -2818,41 +2952,41 @@ var Je = (e) => {
|
|
|
2818
2952
|
attributes: !0,
|
|
2819
2953
|
attributeFilter: ["class", "style"]
|
|
2820
2954
|
});
|
|
2821
|
-
}),
|
|
2822
|
-
|
|
2823
|
-
for (let e of
|
|
2955
|
+
}), yr = /* @__PURE__ */ new Set(), br = null, xr = (e) => {
|
|
2956
|
+
yr.add(e), !br && (br = new MutationObserver(() => {
|
|
2957
|
+
for (let e of yr) e.relabel();
|
|
2824
2958
|
requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
2825
|
-
for (let e of
|
|
2959
|
+
for (let e of yr) e.refresh();
|
|
2826
2960
|
}));
|
|
2827
|
-
}),
|
|
2961
|
+
}), br.observe(document.documentElement, {
|
|
2828
2962
|
attributes: !0,
|
|
2829
2963
|
attributeFilter: ["lang"]
|
|
2830
2964
|
}));
|
|
2831
|
-
},
|
|
2832
|
-
|
|
2833
|
-
},
|
|
2965
|
+
}, Sr = (e) => {
|
|
2966
|
+
yr.delete(e), !yr.size && br && (br.disconnect(), br = null);
|
|
2967
|
+
}, Cr = ["column", "bar"], wr = (e) => {
|
|
2834
2968
|
let t = e.getAttribute("data-chart") || "column";
|
|
2835
|
-
if (!
|
|
2969
|
+
if (!Cr.includes(t)) return null;
|
|
2836
2970
|
let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
|
|
2837
|
-
return
|
|
2838
|
-
},
|
|
2839
|
-
let n = e, r =
|
|
2840
|
-
if (!
|
|
2971
|
+
return Cr.includes(n) ? n : t;
|
|
2972
|
+
}, Tr = (e, t) => {
|
|
2973
|
+
let n = e, r = wr(n.figure), i = null, a = !1, o = !1, s = async () => {
|
|
2974
|
+
if (!yn(n.figure, t)) return Vn(n, !0);
|
|
2841
2975
|
let e = n.figure.classList.contains("is-shown");
|
|
2842
2976
|
if (a && i !== null && !e && !o) {
|
|
2843
2977
|
o = !0;
|
|
2844
|
-
let e =
|
|
2845
|
-
e && await
|
|
2846
|
-
} else !a && t.replay && e &&
|
|
2978
|
+
let e = pr() ? null : _r(n.figure);
|
|
2979
|
+
e && await vr(e), await gr(n.figure, hr(n.figure, t)), o = !1, (a || !t.replay) && Vn(n, !0);
|
|
2980
|
+
} else !a && t.replay && e && Vn(n, !1);
|
|
2847
2981
|
}, c = () => {
|
|
2848
|
-
let e =
|
|
2982
|
+
let e = wr(n.figure);
|
|
2849
2983
|
if (!e || e === r) return;
|
|
2850
|
-
let a = Q.timed("Building", n.figure, () =>
|
|
2851
|
-
a && (
|
|
2984
|
+
let a = Q.timed("Building", n.figure, () => Tn(n.figure, t, e));
|
|
2985
|
+
a && (Bn(n), Nt(a, n.step, !0), n = a, r = e, i = null);
|
|
2852
2986
|
}, l = () => {
|
|
2853
2987
|
c();
|
|
2854
2988
|
let e = n.plot.clientWidth;
|
|
2855
|
-
e && e !== i && Q.timed("Layout", n.figure, () =>
|
|
2989
|
+
e && e !== i && Q.timed("Layout", n.figure, () => Ln(n, t)) && (Q.enabled && !i && (Kn(n.figure), Yn(n.figure)), i = e, s());
|
|
2856
2990
|
}, u = !1, d = new ResizeObserver(() => {
|
|
2857
2991
|
u || (u = !0, requestAnimationFrame(() => {
|
|
2858
2992
|
u = !1, l();
|
|
@@ -2860,20 +2994,20 @@ var Je = (e) => {
|
|
|
2860
2994
|
}), f = new IntersectionObserver((e) => {
|
|
2861
2995
|
for (let t of e) a = t.isIntersecting, s();
|
|
2862
2996
|
}, { threshold: t.threshold }), p = () => {
|
|
2863
|
-
n.figure.classList.add(x),
|
|
2997
|
+
n.figure.classList.add(x), Vn(n, !0), Wn(n.svg), n.figure.offsetWidth;
|
|
2864
2998
|
}, m = () => n.figure.classList.remove(x), h = () => {
|
|
2865
2999
|
i = null, l();
|
|
2866
3000
|
}, g = {
|
|
2867
|
-
relabel: () =>
|
|
3001
|
+
relabel: () => Rn(n, t),
|
|
2868
3002
|
refresh: h
|
|
2869
3003
|
};
|
|
2870
|
-
c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), window.addEventListener("afterprint", m),
|
|
3004
|
+
c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), window.addEventListener("afterprint", m), xr(g);
|
|
2871
3005
|
let _ = {
|
|
2872
3006
|
figure: n.figure,
|
|
2873
3007
|
refresh: h,
|
|
2874
|
-
next: () =>
|
|
2875
|
-
previous: () =>
|
|
2876
|
-
stepTo: (e) =>
|
|
3008
|
+
next: () => Nt(n, n.step + 1),
|
|
3009
|
+
previous: () => Nt(n, n.step - 1),
|
|
3010
|
+
stepTo: (e) => Nt(n, e),
|
|
2877
3011
|
get step() {
|
|
2878
3012
|
return n.step;
|
|
2879
3013
|
},
|
|
@@ -2881,37 +3015,41 @@ var Je = (e) => {
|
|
|
2881
3015
|
return n.plan?.count ?? 0;
|
|
2882
3016
|
},
|
|
2883
3017
|
destroy() {
|
|
2884
|
-
d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), window.removeEventListener("afterprint", m),
|
|
3018
|
+
d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), window.removeEventListener("afterprint", m), Sr(g), sn(n), n.figure.tablechart === _ && delete n.figure.tablechart;
|
|
2885
3019
|
}
|
|
2886
3020
|
};
|
|
2887
3021
|
return n.figure.tablechart = _, _;
|
|
2888
|
-
},
|
|
3022
|
+
}, Er = !1, Dr = (t) => {
|
|
2889
3023
|
let n = t.find((e) => e.tagName !== "FIGURE");
|
|
2890
|
-
!
|
|
2891
|
-
},
|
|
2892
|
-
let n =
|
|
2893
|
-
|
|
3024
|
+
!Er && n && (Er = !0, console.warn(`[${e}] A chart is a <${n.tagName.toLowerCase()}>. Use a <figure> with a <figcaption>, so the chart has a title, also for screen readers.`, n));
|
|
3025
|
+
}, Or = async (e, t) => {
|
|
3026
|
+
let n = ar(e.filter((e) => !e.hasAttribute(fr) && e.tagName !== "TH"));
|
|
3027
|
+
Dr(n), await cr(n), dr(n), mt(n, t.langattribute);
|
|
2894
3028
|
for (let e of n) e.dispatchEvent(new CustomEvent("tablechart:table", { bubbles: !0 }));
|
|
2895
3029
|
return n;
|
|
2896
|
-
},
|
|
2897
|
-
let n = Q.timed("Building", e, () =>
|
|
2898
|
-
return n ? (e.setAttribute(
|
|
2899
|
-
},
|
|
3030
|
+
}, kr = (e, t) => {
|
|
3031
|
+
let n = Q.timed("Building", e, () => Tn(e, t));
|
|
3032
|
+
return n ? (e.setAttribute(fr, ""), jr(), Tr(n, t)) : null;
|
|
3033
|
+
}, Ar = !1, jr = () => {
|
|
3034
|
+
Ar || typeof matchMedia != "function" || (Ar = !0, matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
|
|
3035
|
+
for (let e of document.querySelectorAll(`[${fr}]`)) Ot(e);
|
|
3036
|
+
}));
|
|
3037
|
+
}, Mr = async (e, t = {}) => {
|
|
2900
3038
|
if (e.tablechart) return e.tablechart;
|
|
2901
3039
|
let n = {
|
|
2902
3040
|
...O,
|
|
2903
3041
|
...t
|
|
2904
3042
|
};
|
|
2905
3043
|
n.debug && (Q.enabled = !0);
|
|
2906
|
-
let [r] = await
|
|
2907
|
-
return r ?
|
|
2908
|
-
},
|
|
3044
|
+
let [r] = await Or([e], n);
|
|
3045
|
+
return r ? kr(r, n) : null;
|
|
3046
|
+
}, Nr = async (e = {}, t = document) => {
|
|
2909
3047
|
let n = {
|
|
2910
3048
|
...O,
|
|
2911
3049
|
...e
|
|
2912
3050
|
};
|
|
2913
3051
|
n.debug && (Q.enabled = !0);
|
|
2914
|
-
let r = (await
|
|
3052
|
+
let r = (await Or(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => kr(e, n)).filter((e) => e !== null);
|
|
2915
3053
|
return Q.log(`Made ${r.length} chart(s).`), {
|
|
2916
3054
|
charts: r,
|
|
2917
3055
|
refresh: () => {
|
|
@@ -2922,4 +3060,4 @@ var Je = (e) => {
|
|
|
2922
3060
|
}
|
|
2923
3061
|
};
|
|
2924
3062
|
};
|
|
2925
|
-
export { N as A, x as B, de as C,
|
|
3063
|
+
export { N as A, x as B, de as C, K as D, W as E, e as F, O as G, C as H, f as I, v as L, S as M, E as N, I as O, p as P, t as R, J as S, re as T, b as U, s as V, D as W, ut as _, ar as a, We as b, ln as c, Rn as d, Vn as f, pt as g, mt as h, Or as i, P as j, L as k, Tn as l, Nt as m, hr as n, cr as o, Bn as p, Nr as r, dr as s, Mr as t, Ln as u, Qe as v, le as w, xe as x, $e as y, m as z };
|