@martinomagnifico/tablechart 1.2.3 → 1.2.5
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 +43 -0
- package/dist/tablechart-shared.d.mts +15 -2
- package/dist/tablechart-shared.mjs +919 -715
- package/dist/tablechart.css +1 -1
- package/dist/tablechart.js +1 -1
- package/package.json +1 -1
|
@@ -18,6 +18,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
18
18
|
tooltipparent: null,
|
|
19
19
|
table: "never",
|
|
20
20
|
tablelimit: 15,
|
|
21
|
+
lines: null,
|
|
21
22
|
summary: "auto",
|
|
22
23
|
totallabel: "Total",
|
|
23
24
|
controls: !0,
|
|
@@ -43,10 +44,60 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
43
44
|
return n.className = e, n.inert = !0, t.appendChild(n), n;
|
|
44
45
|
}, R = (e, t, n, r, i) => {
|
|
45
46
|
e.style.left = `${t / r * 100}%`, e.style.top = `${n / i * 100}%`;
|
|
46
|
-
}, z = 0, B = 0, V = (e) => {
|
|
47
|
+
}, z = 0, B = 0, V = 0, H = (e) => {
|
|
47
48
|
let t = e.querySelector(":scope > defs");
|
|
48
49
|
return t || (t = F("defs"), e.prepend(t)), t;
|
|
49
|
-
},
|
|
50
|
+
}, U = (e, t) => {
|
|
51
|
+
for (let n of e.querySelectorAll("rect[data-end]")) {
|
|
52
|
+
let [e, r, i, a] = [
|
|
53
|
+
"x",
|
|
54
|
+
"y",
|
|
55
|
+
"width",
|
|
56
|
+
"height"
|
|
57
|
+
].map((e) => Number(n.getAttribute(e))), o = n.getAttribute("data-end"), s = o === "left" || o === "right", c = P(Math.min(t, s ? a / 2 : i / 2, s ? i : a)), l = (e, t) => `a${c},${c} 0 0 1 ${e},${t}`, u = {
|
|
58
|
+
top: `M${e},${P(r + a)}v${P(c - a)}${l(c, -c)}h${P(i - 2 * c)}${l(c, c)}v${P(a - c)}z`,
|
|
59
|
+
bottom: `M${P(e + i)},${r}v${P(a - c)}${l(-c, c)}h${P(2 * c - i)}${l(-c, -c)}v${P(c - a)}z`,
|
|
60
|
+
right: `M${e},${r}h${P(i - c)}${l(c, c)}v${P(a - 2 * c)}${l(-c, c)}h${P(c - i)}z`,
|
|
61
|
+
left: `M${P(e + i)},${P(r + a)}h${P(c - i)}${l(-c, -c)}v${P(2 * c - a)}${l(c, -c)}h${P(i - c)}z`
|
|
62
|
+
}[o], d = F("path", { d: u });
|
|
63
|
+
for (let { name: e, value: t } of Array.from(n.attributes)) [
|
|
64
|
+
"x",
|
|
65
|
+
"y",
|
|
66
|
+
"width",
|
|
67
|
+
"height"
|
|
68
|
+
].includes(e) || d.setAttribute(e, t);
|
|
69
|
+
n.replaceWith(d);
|
|
70
|
+
}
|
|
71
|
+
}, W = (e, t, n, r, i) => {
|
|
72
|
+
let a = `tablechart-fade-${++V}`, o = F("linearGradient", {
|
|
73
|
+
id: a,
|
|
74
|
+
gradientUnits: "userSpaceOnUse",
|
|
75
|
+
x1: 0,
|
|
76
|
+
x2: 0,
|
|
77
|
+
y1: P(t),
|
|
78
|
+
y2: P(r),
|
|
79
|
+
...i
|
|
80
|
+
}), s = [
|
|
81
|
+
...t < n ? [{
|
|
82
|
+
offset: 0,
|
|
83
|
+
faded: !1
|
|
84
|
+
}] : [],
|
|
85
|
+
{
|
|
86
|
+
offset: r > t ? (n - t) / (r - t) : 0,
|
|
87
|
+
faded: !0
|
|
88
|
+
},
|
|
89
|
+
...r > n ? [{
|
|
90
|
+
offset: 1,
|
|
91
|
+
faded: !1
|
|
92
|
+
}] : []
|
|
93
|
+
];
|
|
94
|
+
for (let { offset: e, faded: t } of s) o.appendChild(F("stop", {
|
|
95
|
+
class: "tablechart-area-stop",
|
|
96
|
+
offset: P(e),
|
|
97
|
+
...t && { "data-faded": "" }
|
|
98
|
+
}));
|
|
99
|
+
return H(e).appendChild(o), a;
|
|
100
|
+
}, ee = (e) => {
|
|
50
101
|
if (e.tagName === "circle") {
|
|
51
102
|
let [t, n, r] = [
|
|
52
103
|
"cx",
|
|
@@ -65,18 +116,18 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
65
116
|
"ry"
|
|
66
117
|
].map((t) => Number(e.getAttribute(t)) || 0), s = Math.min(a, r / 2), c = Math.min(o, i / 2), l = (e, t) => s && c ? `a${P(s)},${P(c)} 0 0 1 ${P(e)},${P(t)}` : "";
|
|
67
118
|
return `M${P(t + s)},${P(n)}h${P(r - 2 * s)}${l(s, c)}v${P(i - 2 * c)}${l(-s, c)}h${P(2 * s - r)}${l(-s, -c)}v${P(2 * c - i)}${l(s, -c)}z`;
|
|
68
|
-
},
|
|
119
|
+
}, te = (e, t, n, r, i) => {
|
|
69
120
|
if (!t.length || !i.length) return;
|
|
70
121
|
let a = `tablechart-clip-${++B}`, o = F("clipPath", {
|
|
71
122
|
id: a,
|
|
72
123
|
clipPathUnits: "userSpaceOnUse"
|
|
73
124
|
}), s = `M${-n},${-r}h${n * 3}v${r * 3}h${-n * 3}z`;
|
|
74
125
|
o.appendChild(F("path", {
|
|
75
|
-
d: s + t.map(
|
|
126
|
+
d: s + t.map(ee).join(""),
|
|
76
127
|
"clip-rule": "evenodd"
|
|
77
|
-
})),
|
|
128
|
+
})), H(e).appendChild(o);
|
|
78
129
|
for (let e of i) e.setAttribute("clip-path", `url(#${a})`);
|
|
79
|
-
},
|
|
130
|
+
}, ne = (e, t, n, r, i, a) => {
|
|
80
131
|
if (!t.length) return;
|
|
81
132
|
let o = `tablechart-cut-${++z}`, s = F("mask", {
|
|
82
133
|
id: o,
|
|
@@ -90,14 +141,14 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
90
141
|
fill: "white"
|
|
91
142
|
}));
|
|
92
143
|
for (let e of t) e.setAttribute("fill", "black"), s.appendChild(e);
|
|
93
|
-
let c =
|
|
144
|
+
let c = H(e);
|
|
94
145
|
if (c.appendChild(s), i) {
|
|
95
146
|
for (let e of i) e.setAttribute("mask", `url(#${o})`);
|
|
96
147
|
return;
|
|
97
148
|
}
|
|
98
149
|
let l = null;
|
|
99
150
|
for (let t of Array.from(e.childNodes)) t !== c && (a && t instanceof Element && t.matches(a) ? (l = null, e.appendChild(t)) : (l ?? (l = e.appendChild(F("g", { mask: `url(#${o})` }))), l.appendChild(t)));
|
|
100
|
-
},
|
|
151
|
+
}, re = 0, G = (e) => Array.from(e.querySelectorAll(`.${r}`)).map((e) => {
|
|
101
152
|
let t = e.tagName === "rect" ? [e] : Array.from(e.querySelectorAll("rect")), n = (e, t) => Number(e.getAttribute(t)), r = Math.min(...t.map((e) => n(e, "x"))), i = Math.min(...t.map((e) => n(e, "y"))), a = Math.max(...t.map((e) => n(e, "x") + n(e, "width"))), o = Math.max(...t.map((e) => n(e, "y") + n(e, "height"))), s = ["--start", "--span"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ");
|
|
102
153
|
return {
|
|
103
154
|
row: Number(e.dataset.row),
|
|
@@ -108,7 +159,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
108
159
|
sideways: e.dataset.grow === "right",
|
|
109
160
|
part: s
|
|
110
161
|
};
|
|
111
|
-
}),
|
|
162
|
+
}), K = {
|
|
112
163
|
create: () => null,
|
|
113
164
|
draw(e, t, n) {
|
|
114
165
|
let { rows: r, y: i, svg: a, breakAt: o } = n;
|
|
@@ -135,7 +186,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
135
186
|
[c + 2 * l, t + o],
|
|
136
187
|
[c + i, t - o]
|
|
137
188
|
];
|
|
138
|
-
}, l = (e, t = !1) => e.map(([e, t], n) => `${n === 0 ? "M" : "L"} ${e.toFixed(1)} ${t.toFixed(1)}`).join(" ") + (t ? " Z" : ""), u = `tablechart-break-${++
|
|
189
|
+
}, l = (e, t = !1) => e.map(([e, t], n) => `${n === 0 ? "M" : "L"} ${e.toFixed(1)} ${t.toFixed(1)}`).join(" ") + (t ? " Z" : ""), u = `tablechart-break-${++re}`, d = F("mask", {
|
|
139
190
|
id: u,
|
|
140
191
|
maskUnits: "userSpaceOnUse"
|
|
141
192
|
});
|
|
@@ -147,7 +198,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
147
198
|
fill: "white"
|
|
148
199
|
}));
|
|
149
200
|
let f = [], p = i(o);
|
|
150
|
-
for (let e of
|
|
201
|
+
for (let e of G(a)) {
|
|
151
202
|
let t = e.sideways ? n.breakX : p;
|
|
152
203
|
if (t === void 0 || !(e.sideways ? e.x < t && e.x + e.width > t : e.y < p && e.y + e.height > p)) continue;
|
|
153
204
|
let [i, o] = e.sideways ? [c(e, t), c(e, t + n.breakGap)] : [c(e, p - n.breakGap), c(e, p)];
|
|
@@ -170,17 +221,17 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
170
221
|
let g = F("defs");
|
|
171
222
|
g.appendChild(d), a.prepend(g, h);
|
|
172
223
|
}
|
|
173
|
-
},
|
|
224
|
+
}, q = (e) => {
|
|
174
225
|
let t = -Infinity;
|
|
175
226
|
for (let n of e) t = Math.max(t, n);
|
|
176
227
|
return t;
|
|
177
|
-
},
|
|
228
|
+
}, ie = (e) => (e.split(/[.,]/)[1] || "").length, ae = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
|
|
178
229
|
minimumFractionDigits: e,
|
|
179
230
|
maximumFractionDigits: e
|
|
180
|
-
}),
|
|
181
|
-
let r =
|
|
231
|
+
}), oe = (e, t, n) => {
|
|
232
|
+
let r = ae(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
|
|
182
233
|
return [i, r.slice(+!!i).map((e) => e.value).join("")];
|
|
183
|
-
},
|
|
234
|
+
}, se = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), ce = (e, t) => {
|
|
184
235
|
let n = document.createElement("span");
|
|
185
236
|
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
237
|
else {
|
|
@@ -189,24 +240,24 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
189
240
|
t && n.setAttribute("data-i18n", t);
|
|
190
241
|
}
|
|
191
242
|
return t.appendChild(n), n;
|
|
192
|
-
},
|
|
193
|
-
let o = t?.textContent || "", s =
|
|
243
|
+
}, le = (t, n, r, i, a = "%") => {
|
|
244
|
+
let o = t?.textContent || "", s = se(o), c = a ? .5 : .5 * 10 ** -ie(o.match(/-?[\d.,]+/)?.[0] ?? ""), l = Number.isNaN(s) ? !0 : Math.abs(n - s) <= c + 1e-9, u = {
|
|
194
245
|
label: r,
|
|
195
246
|
computed: n,
|
|
196
247
|
stated: s,
|
|
197
248
|
agrees: l
|
|
198
249
|
};
|
|
199
250
|
i.checks.push(u), l || console.warn(`[${e}] An annotation reads ${s}${a}, but ${r} is ${Number(n.toFixed(2))}${a}. The chart shows your number.`);
|
|
200
|
-
},
|
|
251
|
+
}, ue = (e, t) => (t - e) / Math.abs(e) * 100, de = (e, t) => {
|
|
201
252
|
let n = (t, n) => {
|
|
202
253
|
let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
|
|
203
254
|
return Number.isFinite(r) ? r - 1 : n;
|
|
204
255
|
};
|
|
205
256
|
return [n("data-from", 0), n("data-to", t - 1)];
|
|
206
|
-
},
|
|
207
|
-
create:
|
|
257
|
+
}, fe = {
|
|
258
|
+
create: ce,
|
|
208
259
|
draw(t, n, r) {
|
|
209
|
-
let { rows: i, cx: o, y: s, unit: l, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] =
|
|
260
|
+
let { rows: i, cx: o, y: s, unit: l, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = de(t, i.length), _ = i[h], v = i[g];
|
|
210
261
|
if (!_ || !v) {
|
|
211
262
|
console.warn(`[${e}] A bracket points at a row that is not there (row ${h + 1} to ${g + 1}, of ${i.length}).`);
|
|
212
263
|
return;
|
|
@@ -224,9 +275,9 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
224
275
|
"data-note": r.note,
|
|
225
276
|
points: `${S},${D} ${S - y * .45},${D - y} ${S + y * .45},${D - y}`,
|
|
226
277
|
style: M("--after", m)
|
|
227
|
-
})), n && (R(n, (x + S) / 2, C, O, f), n.style.setProperty("--after", String(m))),
|
|
278
|
+
})), n && (R(n, (x + S) / 2, C, O, f), n.style.setProperty("--after", String(m))), le(n, ue(_.value, v.value), `${_.value} to ${v.value}`, r);
|
|
228
279
|
}
|
|
229
|
-
},
|
|
280
|
+
}, pe = (e, t) => e[0] < t[0] + t[2] && t[0] < e[0] + e[2] && e[1] < t[1] + t[3] && t[1] < e[1] + e[3], me = (e, t) => e[0] >= t[0] && e[1] >= t[1] && e[0] + e[2] <= t[0] + t[2] && e[1] + e[3] <= t[1] + t[3], he = (e, t, n) => {
|
|
230
281
|
if (e.length > 400) return e.map(() => null);
|
|
231
282
|
let r = 1;
|
|
232
283
|
for (let t of e) for (let [, , e, n] of t) r = Math.max(r, e, n);
|
|
@@ -236,21 +287,21 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
236
287
|
return a;
|
|
237
288
|
}, o = (e) => {
|
|
238
289
|
for (let t of a(e)) i.get(t)?.push(e) ?? i.set(t, [e]);
|
|
239
|
-
}, s = (e) =>
|
|
290
|
+
}, s = (e) => me(e, n) && a(e).every((t) => !i.get(t)?.some((t) => pe(e, t)));
|
|
240
291
|
return t.forEach(o), e.map((e) => {
|
|
241
292
|
let t = e.findIndex(s);
|
|
242
293
|
return t < 0 ? null : (o(e[t]), t);
|
|
243
294
|
});
|
|
244
|
-
},
|
|
295
|
+
}, ge = /* @__PURE__ */ new WeakMap(), _e = (e) => {
|
|
245
296
|
let t = [...e].filter((e) => !!e), n = t.map((e) => ({
|
|
246
297
|
width: e.offsetWidth,
|
|
247
298
|
height: e.offsetHeight
|
|
248
299
|
}));
|
|
249
|
-
t.forEach((e, t) =>
|
|
250
|
-
}, J = (e) =>
|
|
300
|
+
t.forEach((e, t) => ge.set(e, n[t]));
|
|
301
|
+
}, J = (e) => ge.get(e) ?? {
|
|
251
302
|
width: e.offsetWidth,
|
|
252
303
|
height: e.offsetHeight
|
|
253
|
-
},
|
|
304
|
+
}, ve = 6, ye = (e, t, n) => e.some((e) => J(e).width * n > t - ve * n), be = (e, t, n) => t >= J(e).height * n * 1.6, xe = (e, t, n) => t >= J(e).width * n * 1.5, Se = (e, t, n, r, i = .7) => {
|
|
254
305
|
e.style.setProperty(r, "1");
|
|
255
306
|
let a = 1;
|
|
256
307
|
for (let e of t) {
|
|
@@ -259,42 +310,55 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
259
310
|
}
|
|
260
311
|
let o = a >= i ? a : 0;
|
|
261
312
|
return e.style.setProperty(r, String(o || i)), o;
|
|
262
|
-
},
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
313
|
+
}, Ce = (e, t) => {
|
|
314
|
+
e.sort((e, t) => e.y - t.y);
|
|
315
|
+
let n = [], r = (e) => e.sum / e.items.length - (e.items.length - 1) * t / 2;
|
|
316
|
+
for (let i of e) {
|
|
317
|
+
let e = {
|
|
318
|
+
items: [i],
|
|
319
|
+
sum: i.y
|
|
320
|
+
};
|
|
321
|
+
for (let i = n.at(-1); i && r(i) + i.items.length * t > r(e); i = n.at(-1)) n.pop(), e = {
|
|
322
|
+
items: [...i.items, ...e.items],
|
|
323
|
+
sum: i.sum + e.sum
|
|
324
|
+
};
|
|
325
|
+
n.push(e);
|
|
326
|
+
}
|
|
327
|
+
for (let e of n) e.items.forEach((n, i) => n.y = r(e) + i * t);
|
|
328
|
+
return e;
|
|
329
|
+
}, we = {
|
|
266
330
|
outside: [.5, 1],
|
|
267
331
|
below: [.5, 0],
|
|
268
332
|
after: [0, .5],
|
|
269
333
|
before: [1, .5]
|
|
270
|
-
},
|
|
271
|
-
let [a, o] =
|
|
334
|
+
}, Te = (e, t, n, r, i = [.5, .5]) => {
|
|
335
|
+
let [a, o] = we[e.dataset.place ?? ""] ?? i, { width: s, height: c } = J(e);
|
|
272
336
|
return [
|
|
273
337
|
Number.parseFloat(e.style.left) / 100 * n - s * t * a,
|
|
274
338
|
Number.parseFloat(e.style.top) / 100 * r - c * t * o,
|
|
275
339
|
s * t,
|
|
276
340
|
c * t
|
|
277
341
|
];
|
|
278
|
-
},
|
|
342
|
+
}, Ee = (e, t, n) => {
|
|
279
343
|
for (let r of e) {
|
|
280
344
|
if (r.dataset.place === "none" || !r.style.left) continue;
|
|
281
|
-
let [e] =
|
|
345
|
+
let [e] = we[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
346
|
o !== a && (r.style.left = `${o / n * 100}%`);
|
|
283
347
|
}
|
|
284
|
-
},
|
|
285
|
-
let i = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), a =
|
|
348
|
+
}, De = (e, t, n, r) => {
|
|
349
|
+
let i = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), a = Oe(i, t, n, r);
|
|
286
350
|
i.forEach((e, t) => {
|
|
287
351
|
t % a && e.setAttribute("data-left-out", "");
|
|
288
352
|
});
|
|
289
|
-
},
|
|
353
|
+
}, Oe = (e, t, n, r) => {
|
|
290
354
|
if (e.length < 2) return 1;
|
|
291
|
-
let i = e.map((e) =>
|
|
355
|
+
let i = e.map((e) => Te(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
356
|
for (; s < e.length && i.some((e, t) => t >= s && t % s === 0 && !o(i[t - s], e));) s++;
|
|
293
357
|
return s;
|
|
294
|
-
},
|
|
358
|
+
}, ke = {
|
|
295
359
|
create(e, t) {
|
|
296
360
|
if (!e.textContent?.trim()) return null;
|
|
297
|
-
let n =
|
|
361
|
+
let n = ce(e, t);
|
|
298
362
|
return n.dataset.kind = "note", n;
|
|
299
363
|
},
|
|
300
364
|
draw(t, n, r) {
|
|
@@ -321,7 +385,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
321
385
|
}), u.querySelector(`:scope > .${m}`)), !n) return;
|
|
322
386
|
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
387
|
label: e,
|
|
324
|
-
box:
|
|
388
|
+
box: Te(e, l, O, c)
|
|
325
389
|
}]), S = [0, y + b / 2].flatMap((e) => [
|
|
326
390
|
[
|
|
327
391
|
g - v / 2,
|
|
@@ -341,15 +405,15 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
341
405
|
v,
|
|
342
406
|
y
|
|
343
407
|
]
|
|
344
|
-
]), [C] =
|
|
408
|
+
]), [C] = he([S], [...r.taken, ...x.map((e) => e.box)], [
|
|
345
409
|
0,
|
|
346
410
|
0,
|
|
347
411
|
O,
|
|
348
412
|
c
|
|
349
413
|
]), w = S[C ?? 0];
|
|
350
|
-
if (r.taken.push(w), R(n, w[0] + v / 2, w[1] + y / 2, O, c), n.style.setProperty("--after", String(d)), C === null) for (let e of x)
|
|
414
|
+
if (r.taken.push(w), R(n, w[0] + v / 2, w[1] + y / 2, O, c), n.style.setProperty("--after", String(d)), C === null) for (let e of x) pe(e.box, w) && e.label.setAttribute("data-left-out", "");
|
|
351
415
|
}
|
|
352
|
-
},
|
|
416
|
+
}, Ae = (e, t, n) => {
|
|
353
417
|
let r = n.reduce((e, t) => e + t, 0);
|
|
354
418
|
if (e === "mean") return r ? t.reduce((e, t, r) => e + t * n[r], 0) / r : null;
|
|
355
419
|
if (e === "median") {
|
|
@@ -362,25 +426,25 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
362
426
|
}
|
|
363
427
|
let i = Number.parseFloat(e);
|
|
364
428
|
return Number.isFinite(i) ? i : null;
|
|
365
|
-
},
|
|
429
|
+
}, je = {
|
|
366
430
|
create(e, t) {
|
|
367
431
|
if (!e.textContent?.trim()) return null;
|
|
368
|
-
let n =
|
|
432
|
+
let n = ce(e, t);
|
|
369
433
|
return n.dataset.kind = "reference", n;
|
|
370
434
|
},
|
|
371
435
|
draw(t, n, r) {
|
|
372
436
|
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
437
|
if (h) {
|
|
374
|
-
let t = p.map((e) =>
|
|
438
|
+
let t = p.map((e) => se(e.label));
|
|
375
439
|
if (r.categories[0]?.parentElement?.dataset.place === "beside" || t.some(Number.isNaN)) {
|
|
376
440
|
console.warn(`[${e}] A reference line among the names needs names that are numbers, under columns or points.`);
|
|
377
441
|
return;
|
|
378
442
|
}
|
|
379
|
-
let n =
|
|
443
|
+
let n = Ae(g, t, p.map((e) => e.value)), o = n === null ? -1 : t.findIndex((e, r) => e <= n && n <= (t[r + 1] ?? e)), [s, c] = [p[o], p[o + 1] ?? p[o]].map((e) => a(i.indexOf(e))), l = n === null || o < 0 || t[o + 1] === void 0 || t[o + 1] === t[o] ? 0 : (n - t[o]) / (t[o + 1] - t[o]);
|
|
380
444
|
y = n, v = o < 0 ? null : s + l * (c - s), _ = !1;
|
|
381
445
|
} else {
|
|
382
446
|
let e = !!r.frame && t.getAttribute("data-axis") === "y", n = r.frame ? r.series.flatMap((e, t) => e.group ? [] : [t])[+!!e] ?? 0 : 0;
|
|
383
|
-
y =
|
|
447
|
+
y = Ae(g, p.map((e) => e.cells[n]?.value ?? e.value), p.map(() => 1)), _ = e || !c, v = y === null ? null : c && !e ? c(y) : s(y);
|
|
384
448
|
}
|
|
385
449
|
if (v === null || y === null) {
|
|
386
450
|
console.warn(`[${e}] A reference line needs a number, "mean" or "median", not "${g}".`);
|
|
@@ -456,17 +520,17 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
456
520
|
e,
|
|
457
521
|
t
|
|
458
522
|
]
|
|
459
|
-
]), [o] =
|
|
523
|
+
]), [o] = he([a], r.taken, [
|
|
460
524
|
0,
|
|
461
525
|
0,
|
|
462
526
|
O,
|
|
463
527
|
l
|
|
464
528
|
]), s = a[o ?? 0];
|
|
465
|
-
r.taken.push(s), R(n, s[0] + e / 2, s[1] + t / 2, O, l), n.style.setProperty("--after", String(f)), (g === "mean" || g === "median") &&
|
|
529
|
+
r.taken.push(s), R(n, s[0] + e / 2, s[1] + t / 2, O, l), n.style.setProperty("--after", String(f)), (g === "mean" || g === "median") && le(n, y, `the ${g}`, r, "");
|
|
466
530
|
}
|
|
467
531
|
}
|
|
468
|
-
},
|
|
469
|
-
create:
|
|
532
|
+
}, Me = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, Ne = {
|
|
533
|
+
create: ce,
|
|
470
534
|
draw(e, t, n) {
|
|
471
535
|
let { rows: r, cx: i, y: o, unit: s, labelHeight: l, height: u, svg: d, values: f, after: p } = n, m = r[0], h = r[r.length - 1];
|
|
472
536
|
if (!m || !h) return;
|
|
@@ -509,27 +573,27 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
509
573
|
style: M("--after", p)
|
|
510
574
|
})), t && (R(t, y + (x - y) * A, b + (S - b) * A, O, u), t.style.setProperty("--after", String(p)));
|
|
511
575
|
let B = Number.parseFloat(e.getAttribute("data-years") || "");
|
|
512
|
-
!Number.isNaN(B) && B > 0 &&
|
|
576
|
+
!Number.isNaN(B) && B > 0 && le(t, Me(m.value, h.value, B), `${m.value} to ${h.value} over ${B} years`, n);
|
|
513
577
|
}
|
|
514
|
-
},
|
|
578
|
+
}, Pe = (e, t, n, r, i) => {
|
|
515
579
|
if (!r) return e / t * n;
|
|
516
580
|
let { lo: a, hi: o, gap: s, share: c } = r, l = n * c, u = (n - l - i) / (a + (t - o)), d = l / (o - a);
|
|
517
581
|
return e <= a ? e * u : e <= s ? a * u + (e - a) * d : e <= o ? a * u + (e - a) * d + i : a * u + l + i + (e - o) * u;
|
|
518
|
-
},
|
|
582
|
+
}, Fe = (e, t, n) => {
|
|
519
583
|
let r = .15, i = Math.min(e * .7 / (t + (t - 1) * r), n), a = t * i + (t - 1) * i * r;
|
|
520
584
|
return {
|
|
521
585
|
size: i,
|
|
522
586
|
gap: i * r,
|
|
523
587
|
offset: (e) => -a / 2 + e * i * 1.15
|
|
524
588
|
};
|
|
525
|
-
},
|
|
589
|
+
}, Ie = (e, t, n) => {
|
|
526
590
|
let r = e.series[n], i = e.series.some((e) => e.focus) && !r.focus;
|
|
527
591
|
return {
|
|
528
592
|
"data-series": n + 1,
|
|
529
593
|
...i && { "data-muted": "" },
|
|
530
594
|
style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${M("--i", t.slot)}`
|
|
531
595
|
};
|
|
532
|
-
},
|
|
596
|
+
}, Le = (e, t, n = !1) => {
|
|
533
597
|
let r = 0, i = 0;
|
|
534
598
|
return Array.from({ length: t }, (t, a) => {
|
|
535
599
|
let o = e.cells[a] ?? e.cells[0], s = o.missing ? 0 : o.value;
|
|
@@ -556,19 +620,19 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
556
620
|
cell: o
|
|
557
621
|
};
|
|
558
622
|
});
|
|
559
|
-
},
|
|
560
|
-
let r =
|
|
623
|
+
}, Re = (e, t, n = !1) => {
|
|
624
|
+
let r = Le(e, t, n);
|
|
561
625
|
return {
|
|
562
626
|
top: Math.max(0, ...r.map((e) => e.to)),
|
|
563
627
|
bottom: Math.min(0, ...r.map((e) => e.to))
|
|
564
628
|
};
|
|
565
|
-
},
|
|
566
|
-
let { top: n, bottom: r } =
|
|
629
|
+
}, ze = (e, t) => {
|
|
630
|
+
let { top: n, bottom: r } = Re(e, t);
|
|
567
631
|
return n + r;
|
|
568
|
-
},
|
|
632
|
+
}, Be = (e, t, n) => {
|
|
569
633
|
let r = t.series.some((e) => e.focus);
|
|
570
634
|
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
|
-
},
|
|
635
|
+
}, Ve = (e, t) => e.barRadius ? { "data-end": t } : {}, He = (e, t) => e.some((n, r) => r !== t && !n.cell.missing && n.to !== n.from && n.from === e[t].to), Ue = (e, t, n, i = {}, a = "") => {
|
|
572
636
|
let o = {
|
|
573
637
|
class: I(r, t),
|
|
574
638
|
"data-kind": "bar",
|
|
@@ -586,10 +650,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
586
650
|
...a,
|
|
587
651
|
class: I("tablechart-piece", t),
|
|
588
652
|
"data-row": n + 1,
|
|
589
|
-
...
|
|
653
|
+
...Ie(e, t, r)
|
|
590
654
|
}));
|
|
591
655
|
};
|
|
592
|
-
},
|
|
656
|
+
}, We = {
|
|
593
657
|
segments: (e) => e.map((e) => ({
|
|
594
658
|
...e,
|
|
595
659
|
from: 0,
|
|
@@ -610,116 +674,124 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
610
674
|
categories: "beside",
|
|
611
675
|
headroom: () => 0,
|
|
612
676
|
draw(e) {
|
|
613
|
-
let { segments: t, height: n, unit: a, svg: o, values: s, categories: c, config: l, barMax: u } = e, d = e.series.length > 1, f = Math.max(
|
|
677
|
+
let { segments: t, height: n, unit: a, svg: o, values: s, categories: c, config: l, barMax: u } = e, d = e.series.length > 1, f = Math.max(q(c.map((e) => J(e).width * a)), 0), p = Math.min(f + 10 * a, O * .42);
|
|
614
678
|
c[0]?.parentElement?.style.setProperty("--_beside", `${((p - 8 * a) / O * 100).toFixed(2)}%`);
|
|
615
|
-
let m = O - 4 * a, h = e.stacked ? Math.max(
|
|
679
|
+
let m = O - 4 * a, h = e.stacked ? Math.max(q(e.rows.map((t) => Re(t, e.series.length).top)), 0) || 1 : Math.max(q(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = e.stacked ? Math.max(q(e.rows.map((t) => -Re(t, e.series.length).bottom)), 0) : Math.max(q(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => -e.value))), 0), _ = Math.max(h, e.domain?.[1] ?? 0), v = Math.max(g, -(e.domain?.[0] ?? 0)), y = Math.max(_, e.squeeze?.hi ?? 0) + v, b = (t, n) => Pe(Math.abs(t), y, n, e.squeeze, e.breakGap), x = n / t.length, S = (e) => (e + .5) * x, C = Math.min(x * l.barfill, u), w = Fe(x, e.series.length, u), T = s[0] ?? e.totals[0], E = T ? J(T).height * a * .56 : 0, D = Math.max(((d && !e.stacked ? w.size : C) - E) / 2, 5 * a), k = (e) => J(e).width * a, A = (e) => e.length ? q(e.map(k)) + D + 4 * a : 0, j = (t, n) => (e.rows[n].cells[t] ?? e.rows[n].cells[0]).value, N = e.seriesValues.flatMap((e, t) => e.map((e, n) => ({
|
|
616
680
|
label: e,
|
|
617
681
|
value: j(t, n)
|
|
618
682
|
}))), P = (t) => {
|
|
619
|
-
let n =
|
|
683
|
+
let n = Re(e.rows[t], e.series.length);
|
|
620
684
|
return n.top === 0 && n.bottom < 0;
|
|
621
|
-
}, L = e.stacked ? A(e.totals.filter((e, t) => !P(t))) : d ? A(N.filter((e) => e.value >= 0).map((e) => e.label)) : 0, z = e.stacked ? A(e.totals.filter((e, t) => P(t))) : d ? A(N.filter((e) => e.value < 0).map((e) => e.label)) : 0, B = (t, n) => e.labels === "inside" &&
|
|
622
|
-
if (
|
|
623
|
-
let e =
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
}))
|
|
627
|
-
|
|
628
|
-
|
|
685
|
+
}, L = e.stacked ? A(e.totals.filter((e, t) => !P(t))) : d ? A(N.filter((e) => e.value >= 0).map((e) => e.label)) : 0, z = e.stacked ? A(e.totals.filter((e, t) => P(t))) : d ? A(N.filter((e) => e.value < 0).map((e) => e.label)) : 0, B = (t, n) => e.labels === "inside" && xe(t, n, a), V = d && !e.stacked && e.labels === "inside" && !!T && J(T).height * a <= w.size;
|
|
686
|
+
if (V && (L = z = 0), V || !d && !e.stacked) {
|
|
687
|
+
let e = d ? N.filter(({ label: e }) => e.dataset.missing === void 0) : t.map((e, t) => ({
|
|
688
|
+
label: s[t],
|
|
689
|
+
value: e.value
|
|
690
|
+
}));
|
|
691
|
+
for (let t = 0; t < 3; t++) {
|
|
692
|
+
let t = m - p - L - z, n = e.filter(({ label: e, value: n }) => !B(e, b(n, t))), r = A(n.filter(({ value: e }) => e >= 0).map(({ label: e }) => e)), i = A(n.filter(({ value: e }) => e < 0).map(({ label: e }) => e));
|
|
693
|
+
if (r <= L && i <= z) break;
|
|
694
|
+
L = Math.max(L, r), z = Math.max(z, i);
|
|
695
|
+
}
|
|
629
696
|
}
|
|
630
|
-
let
|
|
631
|
-
if (e.squeeze && (e.breakX =
|
|
697
|
+
let H = m - p - L - z, U = p + z + b(v, H), W = (e) => e < 0 ? U - b(e, H) : U + b(e, H);
|
|
698
|
+
if (e.squeeze && (e.breakX = W(e.squeeze.gap)), e.x = W, e.stacked) {
|
|
632
699
|
let t = e.length("--tablechart-stack-gap", "1px") ?? a;
|
|
633
700
|
e.rows.forEach((r, i) => {
|
|
634
|
-
let o =
|
|
701
|
+
let o = Re(r, e.series.length), s = Ue(e, r, i, { "data-grow": "right" }, o.bottom < 0 ? `${U - W(o.bottom)}px center` : ""), l = S(i) - C / 2, u = Le(r, e.series.length);
|
|
635
702
|
u.forEach(({ from: r, to: o, cell: c }, d) => {
|
|
636
703
|
let f = e.seriesValues[d][i];
|
|
637
704
|
if (f.dataset.place = "none", c.missing || o === r) return;
|
|
638
|
-
let p = Math.min(
|
|
705
|
+
let p = Math.min(W(r), W(o)), m = Math.max(W(r), W(o)), h = He(u, d) ? Math.min(t, (m - p) / 2) : 0, [g, _] = W(o) > W(r) ? [p, m - h] : [p + h, m];
|
|
639
706
|
s(d, {
|
|
640
707
|
x: g,
|
|
641
708
|
y: l,
|
|
642
709
|
width: Math.max(_ - g, 1),
|
|
643
710
|
height: C,
|
|
644
|
-
...o < r && { "data-grow": "left" }
|
|
645
|
-
|
|
711
|
+
...o < r && { "data-grow": "left" },
|
|
712
|
+
...!He(u, d) && Ve(e, o < r ? "left" : "right")
|
|
713
|
+
}), f.dataset.place = "inside", f.toggleAttribute("data-left-out", !xe(f, m - p, a) || J(f).height * a > C), Be(f, e, d), R(f, (p + m) / 2, S(i), O, n);
|
|
646
714
|
});
|
|
647
715
|
let d = e.totals[i];
|
|
648
|
-
d && (d.dataset.place = P(i) ? "before" : "after", R(d, P(i) ?
|
|
716
|
+
d && (d.dataset.place = P(i) ? "before" : "after", R(d, P(i) ? W(o.bottom) - D : W(o.top) + D, S(i), O, n));
|
|
649
717
|
let f = c[i];
|
|
650
718
|
f && R(f, p - 8 * a, S(i), O, n);
|
|
651
719
|
}), o.appendChild(F("line", {
|
|
652
720
|
class: i,
|
|
653
|
-
x1:
|
|
654
|
-
x2:
|
|
721
|
+
x1: U,
|
|
722
|
+
x2: U,
|
|
655
723
|
y1: 0,
|
|
656
724
|
y2: n
|
|
657
725
|
}));
|
|
658
726
|
return;
|
|
659
727
|
}
|
|
660
728
|
if (d) {
|
|
661
|
-
let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s =
|
|
729
|
+
let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = Se(e.plot, t, (e) => ({
|
|
662
730
|
size: J(e).height * a,
|
|
663
731
|
room: w.size + w.gap * .5
|
|
664
732
|
}), "--_fit");
|
|
665
733
|
e.rows.forEach((t, i) => {
|
|
666
|
-
e.series.forEach((
|
|
667
|
-
let
|
|
668
|
-
if (
|
|
669
|
-
|
|
734
|
+
e.series.forEach((c, l) => {
|
|
735
|
+
let u = t.cells[l] ?? t.cells[0], d = e.seriesValues[l][i];
|
|
736
|
+
if (u.missing) {
|
|
737
|
+
d.dataset.place = "none";
|
|
670
738
|
return;
|
|
671
739
|
}
|
|
672
|
-
let
|
|
673
|
-
|
|
740
|
+
let f = W(u.value), p = u.value < 0, m = S(i) + w.offset(l), h = Math.max(Math.abs(f - U), 1);
|
|
741
|
+
u.value !== 0 && o.appendChild(F("rect", {
|
|
674
742
|
class: I(r, t),
|
|
675
743
|
"data-kind": "bar",
|
|
676
744
|
"data-row": i + 1,
|
|
677
|
-
"data-grow":
|
|
678
|
-
x:
|
|
679
|
-
y:
|
|
680
|
-
width:
|
|
745
|
+
"data-grow": p ? "left" : "right",
|
|
746
|
+
x: p ? U - h : U,
|
|
747
|
+
y: m,
|
|
748
|
+
width: h,
|
|
681
749
|
height: w.size,
|
|
682
|
-
...
|
|
683
|
-
|
|
750
|
+
...Ve(e, p ? "left" : "right"),
|
|
751
|
+
...Ie(e, t, l)
|
|
752
|
+
}));
|
|
753
|
+
let g = V && B(d, Math.abs(f - U)), _ = Math.max(Math.min(D, Math.abs(f - U) - k(d) - 6 * a), 6 * a), v = p ? 1 : -1;
|
|
754
|
+
d.dataset.place = g ? "inside" : p ? "before" : "after", d.toggleAttribute("data-left-out", !s), g && Be(d, e, l), R(d, g ? e.insideAlign === "center" ? (U + f) / 2 : e.insideAlign === "start" ? U - v * (_ + k(d) / 2) : f + v * (_ + k(d) / 2) : p ? f - D : f + D, m + w.size / 2, O, n);
|
|
684
755
|
});
|
|
685
756
|
let l = c[i];
|
|
686
757
|
l && R(l, p - 8 * a, S(i), O, n);
|
|
687
758
|
}), o.appendChild(F("line", {
|
|
688
759
|
class: i,
|
|
689
|
-
x1:
|
|
690
|
-
x2:
|
|
760
|
+
x1: U,
|
|
761
|
+
x2: U,
|
|
691
762
|
y1: 0,
|
|
692
763
|
y2: n
|
|
693
764
|
}));
|
|
694
765
|
return;
|
|
695
766
|
}
|
|
696
|
-
let ee = t.map((e, t) => B(s[t], Math.abs(
|
|
767
|
+
let ee = t.map((e, t) => B(s[t], Math.abs(W(e.value) - U)));
|
|
697
768
|
t.forEach((t, i) => {
|
|
698
|
-
let l =
|
|
769
|
+
let l = W(t.value), u = S(i), d = t.value < 0, f = Math.abs(l - U), m = Math.max(f, 1);
|
|
699
770
|
t.value !== 0 && o.appendChild(F("rect", {
|
|
700
771
|
class: I(r, t),
|
|
701
772
|
"data-kind": t.kind,
|
|
702
773
|
"data-row": i + 1,
|
|
703
774
|
"data-grow": d ? "left" : "right",
|
|
704
|
-
x: d ?
|
|
775
|
+
x: d ? U - m : U,
|
|
705
776
|
y: u - C / 2,
|
|
706
777
|
width: m,
|
|
707
778
|
height: C,
|
|
779
|
+
...Ve(e, d ? "left" : "right"),
|
|
708
780
|
style: M("--i", t.slot)
|
|
709
781
|
}));
|
|
710
782
|
let h = s[i], g = Math.max(Math.min(D, f - k(h) - 6 * a), 6 * a), _ = d ? 1 : -1;
|
|
711
|
-
h.dataset.place = ee[i] ? "inside" : d ? "before" : "after", h.dataset.kind = t.kind, R(h, ee[i] ? e.insideAlign === "center" ? (
|
|
783
|
+
h.dataset.place = ee[i] ? "inside" : d ? "before" : "after", h.dataset.kind = t.kind, R(h, ee[i] ? e.insideAlign === "center" ? (U + l) / 2 : e.insideAlign === "start" ? U - _ * (g + k(h) / 2) : l + _ * (g + k(h) / 2) : l - _ * D, u, O, n);
|
|
712
784
|
let v = c[i];
|
|
713
785
|
v && R(v, p - 8 * a, u, O, n);
|
|
714
786
|
}), o.appendChild(F("line", {
|
|
715
787
|
class: i,
|
|
716
|
-
x1:
|
|
717
|
-
x2:
|
|
788
|
+
x1: U,
|
|
789
|
+
x2: U,
|
|
718
790
|
y1: 0,
|
|
719
791
|
y2: n
|
|
720
792
|
}));
|
|
721
793
|
}
|
|
722
|
-
},
|
|
794
|
+
}, Ge = {
|
|
723
795
|
segments: (e) => e.map((e) => ({
|
|
724
796
|
...e,
|
|
725
797
|
from: 0,
|
|
@@ -739,18 +811,19 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
739
811
|
if (e.stacked) {
|
|
740
812
|
let t = e.length("--tablechart-stack-gap", "1px") ?? c;
|
|
741
813
|
e.rows.forEach((r, i) => {
|
|
742
|
-
let l =
|
|
814
|
+
let l = Re(r, e.series.length), u = Ue(e, r, i, {}, l.bottom < 0 ? `center ${p - a(l.top)}px` : ""), d = n(i) - o / 2, f = Le(r, e.series.length);
|
|
743
815
|
f.forEach(({ from: r, to: l, cell: p }, m) => {
|
|
744
816
|
let h = e.seriesValues[m][i];
|
|
745
817
|
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 =
|
|
818
|
+
let g = Math.min(a(l), a(r)), _ = Math.max(a(l), a(r)), v = He(f, m) ? Math.min(t, (_ - g) / 2) : 0, [y, b] = a(l) < a(r) ? [g + v, _] : [g, _ - v];
|
|
747
819
|
u(m, {
|
|
748
820
|
x: d,
|
|
749
821
|
y,
|
|
750
822
|
width: o,
|
|
751
823
|
height: Math.max(b - y, 1),
|
|
752
|
-
...l < r && { "data-grow": "down" }
|
|
753
|
-
|
|
824
|
+
...l < r && { "data-grow": "down" },
|
|
825
|
+
...!He(f, m) && Ve(e, l < r ? "bottom" : "top")
|
|
826
|
+
}), h.dataset.place = "inside", h.toggleAttribute("data-left-out", !be(h, _ - g, c) || J(h).width * c > o - 4 * c), Be(h, e, m), R(h, n(i), (g + _) / 2, O, s);
|
|
754
827
|
});
|
|
755
828
|
let m = e.totals[i];
|
|
756
829
|
if (m) {
|
|
@@ -767,29 +840,32 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
767
840
|
return;
|
|
768
841
|
}
|
|
769
842
|
if (e.own.length > 1) {
|
|
770
|
-
let t =
|
|
843
|
+
let t = Fe(n(1) - n(0) || n(0) * 2, e.own.length, e.barMax), o = e.own.flatMap((t) => e.seriesValues[t]).filter((e) => e.dataset.missing === void 0), u = Se(e.plot, o, (e) => ({
|
|
771
844
|
size: J(e).width * c,
|
|
772
845
|
room: t.size + t.gap * .5
|
|
773
|
-
}), "--_fit");
|
|
846
|
+
}), "--_fit"), m = d === "inside" && !ye(o, t.size, c), h = o[0] ? J(o[0]).height * c * .56 : 0, g = Math.min(...o.map((e) => (t.size - J(e).width * c) / 2));
|
|
774
847
|
e.rows.forEach((i, o) => {
|
|
775
|
-
e.own.forEach((d,
|
|
776
|
-
let
|
|
777
|
-
if (
|
|
778
|
-
|
|
848
|
+
e.own.forEach((d, _) => {
|
|
849
|
+
let v = i.cells[d] ?? i.cells[0], y = e.seriesValues[d][o], b = n(o) + t.offset(_);
|
|
850
|
+
if (v.missing) {
|
|
851
|
+
y.dataset.place = "none";
|
|
779
852
|
return;
|
|
780
853
|
}
|
|
781
|
-
let
|
|
782
|
-
|
|
854
|
+
let x = a(v.value), S = v.value < 0, C = Math.max(Math.abs(p - x), 1);
|
|
855
|
+
v.value !== 0 && l.appendChild(F("rect", {
|
|
783
856
|
class: I(r, i),
|
|
784
857
|
"data-kind": "bar",
|
|
785
858
|
"data-row": o + 1,
|
|
786
|
-
...
|
|
787
|
-
x:
|
|
788
|
-
y:
|
|
859
|
+
...S && { "data-grow": "down" },
|
|
860
|
+
x: b,
|
|
861
|
+
y: S ? p : p - C,
|
|
789
862
|
width: t.size,
|
|
790
|
-
height:
|
|
791
|
-
...
|
|
792
|
-
|
|
863
|
+
height: C,
|
|
864
|
+
...Ve(e, S ? "bottom" : "top"),
|
|
865
|
+
...Ie(e, i, d)
|
|
866
|
+
}));
|
|
867
|
+
let w = m && be(y, Math.abs(p - x), c), T = S ? -1 : 1, E = Math.min(g, (Math.abs(p - x) - h) / 2), D = f === "center" ? (x + p) / 2 : f === "start" ? p - T * (E + h / 2) : x + T * (E + h / 2);
|
|
868
|
+
y.dataset.place = w ? "inside" : S ? "below" : "outside", y.toggleAttribute("data-left-out", !u), w && Be(y, e, d), R(y, b + t.size / 2, w ? D : S ? x + 4 * c : x - 4 * c, O, s);
|
|
793
869
|
});
|
|
794
870
|
}), l.appendChild(F("line", {
|
|
795
871
|
class: i,
|
|
@@ -800,7 +876,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
800
876
|
}));
|
|
801
877
|
return;
|
|
802
878
|
}
|
|
803
|
-
let m = e.own[0], h = e.own.length < e.series.length, g =
|
|
879
|
+
let m = e.own[0], h = e.own.length < e.series.length, g = ye(u, o, c), _ = t.map((e, t) => d === "inside" && !g && !e.missing && be(u[t], Math.abs(p - a(e.value)), c)), v = u[0] ? J(u[0]).height * c * .56 : 0, y = Infinity;
|
|
804
880
|
for (let [e, t] of u.entries()) _[e] && (y = Math.min(y, (o - J(t).width * c) / 2));
|
|
805
881
|
t.forEach((t, i) => {
|
|
806
882
|
let d = a(t.value), g = t.value < 0;
|
|
@@ -818,11 +894,12 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
818
894
|
y: g ? p : p - b,
|
|
819
895
|
width: o,
|
|
820
896
|
height: b,
|
|
897
|
+
...Ve(e, g ? "bottom" : "top"),
|
|
821
898
|
style: M("--i", t.slot),
|
|
822
|
-
...h &&
|
|
899
|
+
...h && Ie(e, t, m)
|
|
823
900
|
}));
|
|
824
901
|
let x = g ? -1 : 1, S = Math.min(y, (Math.abs(p - d) - v) / 2), C = f === "center" ? (d + p) / 2 : f === "start" ? p - x * (S + v / 2) : d + x * (S + v / 2), w = g ? d + 4 * c : d - 4 * c;
|
|
825
|
-
R(u[i], n(i), _[i] ? C : w, O, s), u[i].dataset.place = _[i] ? "inside" : g ? "below" : "outside", h && _[i] &&
|
|
902
|
+
R(u[i], n(i), _[i] ? C : w, O, s), u[i].dataset.place = _[i] ? "inside" : g ? "below" : "outside", h && _[i] && Be(u[i], e, m);
|
|
826
903
|
}), l.appendChild(F("line", {
|
|
827
904
|
class: i,
|
|
828
905
|
x1: 0,
|
|
@@ -831,7 +908,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
831
908
|
y2: p
|
|
832
909
|
}));
|
|
833
910
|
}
|
|
834
|
-
},
|
|
911
|
+
}, Ke = (e, t, n, r, i, a, o, s) => {
|
|
912
|
+
let c = (r, a) => [e + r * Math.cos(n) - i * a * Math.sin(n), t + r * Math.sin(n) + i * a * Math.cos(n)], l = s ? r - o : r + o, u = Math.sqrt(Math.max(l ** 2 - (a + o) ** 2, 0)), d = r / l, f = s ? r + 8 : r - 3, p = f / l, m = Math.max(a - 1, 0), [h, g] = c(u * d, (a + o) * d), [_, v] = c(u, a), [y, b] = c(u, a + o), x = +((h - y) * (v - b) - (g - b) * (_ - y) > 0), S = (e) => `${P(e[0])},${P(e[1])}`;
|
|
913
|
+
return `M${S([h, g])}A${P(o)},${P(o)} 0 0 ${x} ${S([_, v])}L${S(c(u, m))}L${S(c(f, m))}L${S(c(u * p, (a + o) * p))}Z`;
|
|
914
|
+
}, Y = 0, qe = (e) => e.filter((e) => !e.isTotal), Je = {
|
|
835
915
|
aspect: .66,
|
|
836
916
|
centre: !0,
|
|
837
917
|
headroom: () => 0,
|
|
@@ -842,43 +922,43 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
842
922
|
kind: "bar"
|
|
843
923
|
})),
|
|
844
924
|
draw({ rows: e, height: t, unit: n, labelHeight: r, svg: i, values: a, config: o, centre: s }) {
|
|
845
|
-
let c = O / 2, u = t / 2, d =
|
|
925
|
+
let c = O / 2, u = t / 2, d = qe(e).reduce((e, t) => e + Math.abs(t.value), 0);
|
|
846
926
|
if (!d) return;
|
|
847
|
-
let f = r * 1.2 + 10 * n, p = Math.max(Math.min(O, t) / 2 - f, 10), m = p * o.ringfill, h = p - m / 2, g = 2 * Math.PI * h, _ = [], v =
|
|
927
|
+
let f = r * 1.2 + 10 * n, p = Math.max(Math.min(O, t) / 2 - f, 10), m = p * o.ringfill, h = p - m / 2, g = 2 * Math.PI * h, _ = [], v = [], y = 0, b = 0, x = 0;
|
|
848
928
|
if (e.forEach((e, o) => {
|
|
849
929
|
let s = a[o];
|
|
850
930
|
if (e.isTotal) {
|
|
851
931
|
s.dataset.place = "none";
|
|
852
932
|
return;
|
|
853
933
|
}
|
|
854
|
-
let f = Math.abs(e.value) / d,
|
|
855
|
-
_.push(w), i.appendChild(F("circle", {
|
|
934
|
+
let f = Math.abs(e.value) / d, S = j(x, f), C = `--share:${f.toFixed(4)}; --start:${S.start.toFixed(4)}; --span:${S.span.toFixed(4)};`, w = f * g, T = y / g * 2 * Math.PI - Math.PI / 2;
|
|
935
|
+
_.push(T), v.push(w / g * 2 * Math.PI), i.appendChild(F("circle", {
|
|
856
936
|
class: I(l, e),
|
|
857
|
-
"data-slice":
|
|
937
|
+
"data-slice": b + 1,
|
|
858
938
|
"data-row": o + 1,
|
|
859
939
|
cx: c,
|
|
860
940
|
cy: u,
|
|
861
941
|
r: h,
|
|
862
942
|
"stroke-width": m,
|
|
863
943
|
transform: `rotate(-90 ${c} ${u})`,
|
|
864
|
-
"stroke-dasharray": `${
|
|
865
|
-
"stroke-dashoffset": (-
|
|
866
|
-
style: `--n:${
|
|
944
|
+
"stroke-dasharray": `${w.toFixed(1)} ${(g - w).toFixed(1)}`,
|
|
945
|
+
"stroke-dashoffset": (-y).toFixed(1),
|
|
946
|
+
style: `--n:${b}; --palette:var(--tablechart-color-${b + 1}); --arc:${w.toFixed(1)}; --circ:${g.toFixed(1)}; ${C} --ease:${S.easing}; ${M("--i", e.slot)}`
|
|
867
947
|
}));
|
|
868
|
-
let
|
|
948
|
+
let E = T + w / g * Math.PI, D = Math.cos(E), k = Math.sin(E);
|
|
869
949
|
i.appendChild(F("line", {
|
|
870
950
|
class: "tablechart-leader",
|
|
871
|
-
x1: c +
|
|
872
|
-
y1: u +
|
|
873
|
-
x2: c +
|
|
874
|
-
y2: u +
|
|
951
|
+
x1: c + D * (p + 2 * n),
|
|
952
|
+
y1: u + k * (p + 2 * n),
|
|
953
|
+
x2: c + D * (p + 7 * n),
|
|
954
|
+
y2: u + k * (p + 7 * n),
|
|
875
955
|
"data-row": o + 1,
|
|
876
|
-
style: `${
|
|
877
|
-
})), s.style.setProperty("--start",
|
|
878
|
-
let
|
|
879
|
-
R(s, c +
|
|
956
|
+
style: `${C} ${M("--i", e.slot)}`
|
|
957
|
+
})), s.style.setProperty("--start", S.start.toFixed(4)), s.style.setProperty("--span", S.span.toFixed(4));
|
|
958
|
+
let A = p + 9 * n, N = J(s).width * n / 2;
|
|
959
|
+
R(s, c + D * (A + Math.abs(D) * N), u + k * (A + Math.abs(k) * r * .7), O, t), s.dataset.place = "around", y += w, x += f, b += 1;
|
|
880
960
|
}), _.length > 1) {
|
|
881
|
-
let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++
|
|
961
|
+
let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++Y}`, a = F("mask", {
|
|
882
962
|
id: r,
|
|
883
963
|
maskUnits: "userSpaceOnUse"
|
|
884
964
|
});
|
|
@@ -896,10 +976,21 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
896
976
|
x2: c + Math.cos(t) * n,
|
|
897
977
|
y2: u + Math.sin(t) * n
|
|
898
978
|
}));
|
|
899
|
-
let o =
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
979
|
+
let o = getComputedStyle(i), s = Number.parseFloat(o.getPropertyValue("--tablechart-slice-radius")) || 0;
|
|
980
|
+
if (s > 0) {
|
|
981
|
+
let e = Number.parseFloat(o.getPropertyValue("--tablechart-slice-gap").trim() || "4"), t = [h - m / 2, h + m / 2], n = (n) => Math.min(s, m / 2, Math.max((v[n] * t[0] - e) / 2, 0));
|
|
982
|
+
_.forEach((r, i) => {
|
|
983
|
+
let o = n((i - 1 + _.length) % _.length);
|
|
984
|
+
for (let [s, l] of [[1, n(i)], [-1, o]]) if (l > 0) for (let n of t) a.appendChild(F("path", {
|
|
985
|
+
d: Ke(c, u, r, n, s, e / 2, l, n === t[1]),
|
|
986
|
+
fill: "black"
|
|
987
|
+
}));
|
|
988
|
+
});
|
|
989
|
+
}
|
|
990
|
+
let d = F("g", { mask: `url(#${r})` });
|
|
991
|
+
for (let e of Array.from(i.querySelectorAll(`.${l}`))) d.appendChild(e);
|
|
992
|
+
let f = F("defs");
|
|
993
|
+
f.appendChild(a), i.prepend(f, d);
|
|
903
994
|
}
|
|
904
995
|
s && R(s, c, u, O, t);
|
|
905
996
|
}
|
|
@@ -907,13 +998,18 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
907
998
|
"circle",
|
|
908
999
|
"square",
|
|
909
1000
|
"diamond"
|
|
910
|
-
],
|
|
911
|
-
let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? []
|
|
1001
|
+
], Ye = (e, t) => {
|
|
1002
|
+
let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [];
|
|
1003
|
+
if (n.includes("none")) return {
|
|
1004
|
+
shape: "none",
|
|
1005
|
+
open: !1
|
|
1006
|
+
};
|
|
1007
|
+
let r = X.find((e) => n.includes(e));
|
|
912
1008
|
return {
|
|
913
1009
|
shape: r ?? X[Math.floor(t / 2) % X.length],
|
|
914
1010
|
open: n.includes("open") || !n.includes("filled") && !r && t % 2 == 1
|
|
915
1011
|
};
|
|
916
|
-
},
|
|
1012
|
+
}, Xe = (e, t, n, r, i = {}) => {
|
|
917
1013
|
if (e === "square") {
|
|
918
1014
|
let e = r * .88;
|
|
919
1015
|
return F("rect", {
|
|
@@ -945,7 +1041,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
945
1041
|
...i
|
|
946
1042
|
});
|
|
947
1043
|
}, Z = (e) => Number(e.toFixed(2));
|
|
948
|
-
function
|
|
1044
|
+
function Ze(e, t) {
|
|
949
1045
|
let n = e.length;
|
|
950
1046
|
if (n < 2) return e.map(() => 0);
|
|
951
1047
|
let r = (n) => (t[n + 1] - t[n]) / (e[n + 1] - e[n] || 1), i = Array(n).fill(0);
|
|
@@ -962,24 +1058,24 @@ function Ke(e, t) {
|
|
|
962
1058
|
};
|
|
963
1059
|
return i[0] = a(0, 1, i[1]), i[n - 1] = a(n - 2, n - 1, i[n - 2]), i;
|
|
964
1060
|
}
|
|
965
|
-
function
|
|
1061
|
+
function Qe(e, t, n, r) {
|
|
966
1062
|
let i = (t[0] - e[0]) / 3;
|
|
967
1063
|
return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
|
|
968
1064
|
}
|
|
969
|
-
function
|
|
970
|
-
let [i, a] =
|
|
1065
|
+
function $e(e, t, n, r) {
|
|
1066
|
+
let [i, a] = Qe(e, t, n, r), o = ([e, t]) => `${Z(e)},${Z(t)}`;
|
|
971
1067
|
return `C${o(i)} ${o(a)} ${o(t)}`;
|
|
972
1068
|
}
|
|
973
|
-
function
|
|
1069
|
+
function et(e, t, n) {
|
|
974
1070
|
let r = Array(e).fill(0), i = [], a = () => {
|
|
975
|
-
|
|
1071
|
+
Ze(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
|
|
976
1072
|
r[i[t]] = e;
|
|
977
1073
|
}), i = [];
|
|
978
1074
|
};
|
|
979
1075
|
for (let n = 0; n < e; n++) t(n) ? a() : i.push(n);
|
|
980
1076
|
return a(), r;
|
|
981
1077
|
}
|
|
982
|
-
var
|
|
1078
|
+
var tt = (e) => {
|
|
983
1079
|
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;
|
|
984
1080
|
return {
|
|
985
1081
|
at: o,
|
|
@@ -987,7 +1083,7 @@ var Xe = (e) => {
|
|
|
987
1083
|
t: c ? a / c : a ? Infinity : 0,
|
|
988
1084
|
n: t
|
|
989
1085
|
};
|
|
990
|
-
},
|
|
1086
|
+
}, nt = [
|
|
991
1087
|
12.71,
|
|
992
1088
|
4.3,
|
|
993
1089
|
3.18,
|
|
@@ -1003,29 +1099,29 @@ var Xe = (e) => {
|
|
|
1003
1099
|
2.16,
|
|
1004
1100
|
2.14,
|
|
1005
1101
|
2.13
|
|
1006
|
-
],
|
|
1102
|
+
], rt = (e) => nt[e - 1] ?? (e < 30 ? 2.1 : 2), it = (e) => {
|
|
1007
1103
|
let t = e.map((e) => e.y), n = Math.min(...t), r = Math.max(...t), i = n < 0 && r > 0, a = r - n || 1;
|
|
1008
1104
|
return {
|
|
1009
1105
|
mean: t.reduce((e, t) => e + t, 0) / t.length,
|
|
1010
1106
|
share: (e, t) => e / (i ? a : Math.abs(t) || a) * 100
|
|
1011
1107
|
};
|
|
1012
|
-
},
|
|
1108
|
+
}, at = (e, t = 5, n = 25) => {
|
|
1013
1109
|
if (e.length < 4) return null;
|
|
1014
|
-
let { mean: r, share: i } =
|
|
1015
|
-
c.length && o(c) && (s =
|
|
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) >=
|
|
1110
|
+
let { mean: r, share: i } = it(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 = tt(e), c = a(s.at);
|
|
1111
|
+
c.length && o(c) && (s = tt(e.filter((e) => !c.includes(e))), c = a(s.at)), o(c) || (s = tt(e), c = []);
|
|
1112
|
+
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) >= rt(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";
|
|
1017
1113
|
return {
|
|
1018
1114
|
course: g,
|
|
1019
1115
|
line: l,
|
|
1020
1116
|
outside: g === "unclear" ? [] : c
|
|
1021
1117
|
};
|
|
1022
|
-
},
|
|
1118
|
+
}, ot = (e) => e.map((e) => ({
|
|
1023
1119
|
...e,
|
|
1024
1120
|
from: 0,
|
|
1025
1121
|
to: e.value,
|
|
1026
1122
|
kind: "bar"
|
|
1027
|
-
})),
|
|
1028
|
-
segments:
|
|
1123
|
+
})), st = (e) => ({
|
|
1124
|
+
segments: ot,
|
|
1029
1125
|
series: !0,
|
|
1030
1126
|
stackable: !0,
|
|
1031
1127
|
running: !0,
|
|
@@ -1035,7 +1131,7 @@ var Xe = (e) => {
|
|
|
1035
1131
|
draw(t) {
|
|
1036
1132
|
let { rows: n, series: r, own: a, seriesValues: o, names: s, cx: c, y: l, height: f, unit: p, labelHeight: g, svg: _, stacked: v } = t, y = a.length < r.length, b = t.shape === "step", x = t.shape === "smooth", S = r.length > 1, C = r.some((e) => e.focus), w = n.length - 1, T = l(0), E = n.length > 1 ? c(1) - c(0) : c(0) * 2;
|
|
1037
1133
|
_.style.setProperty("--_base", `${Z(T)}px`);
|
|
1038
|
-
let D = (e) => `--rise:${Z(T - e)}px; `, k = (e, t) => n[t]?.cells[e] ?? n[t]?.cells[0], A = (e, t) => !k(e, t) || !!k(e, t)?.missing, j = n.map((e) => v ?
|
|
1134
|
+
let D = (e) => `--rise:${Z(T - e)}px; `, k = (e, t) => n[t]?.cells[e] ?? n[t]?.cells[0], A = (e, t) => !k(e, t) || !!k(e, t)?.missing, j = n.map((e) => v ? Le(e, r.length, !0) : null), M = (e, t) => j[t]?.[e].to ?? k(e, t)?.value ?? 0, N = (e, t) => j[t]?.[e].from ?? 0, P = (e, t) => [c(t), l(M(e, t))], I = r.map((e, t) => {
|
|
1039
1135
|
if (!S) return {
|
|
1040
1136
|
attrs: {},
|
|
1041
1137
|
ink: ""
|
|
@@ -1055,71 +1151,74 @@ var Xe = (e) => {
|
|
|
1055
1151
|
return n.forEach((n, i) => {
|
|
1056
1152
|
A(e, i) || (r < 0 && (r = i), (i === w || A(e, i + 1)) && ((b || i > r) && t.push([r, i]), r = -1));
|
|
1057
1153
|
}), t;
|
|
1058
|
-
}, U = (e, t) => `--i:${Z(B(e) + 1)}; --d:${Z(B(b ? t + 1 : t) - B(e))}`,
|
|
1154
|
+
}, U = (e, t) => `--i:${Z(B(e) + 1)}; --d:${Z(B(b ? t + 1 : t) - B(e))}`, ee = (e, t) => ({
|
|
1059
1155
|
"data-from": e + 1,
|
|
1060
1156
|
"data-to": t + 1,
|
|
1061
1157
|
...b && { "data-flat": "" }
|
|
1062
|
-
}),
|
|
1158
|
+
}), te = x ? r.map((e, t) => et(n.length, (e) => A(t, e), (e) => P(t, e))) : [], re = x && e ? r.map((e, t) => et(n.length, (e) => A(t, e), (e) => [c(e), l(N(t, e))])) : [], G = (e, t, n) => {
|
|
1063
1159
|
let r = [];
|
|
1064
1160
|
return e.forEach(([i, a], o) => {
|
|
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 ?
|
|
1161
|
+
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 ? $e(e[o - 1], [i, a], t[o - 1], t[o]) : `L${Z(i)},${Z(a)}`);
|
|
1066
1162
|
}), r;
|
|
1067
|
-
},
|
|
1163
|
+
}, K = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [c(t + r), l(i(e, t + r))]), q = (e, t, n, r) => x ? e[t].slice(n, r + 1) : null, ie = (e) => c(e) - (b ? E / 2 : 0), ae = (e) => c(e) + (b ? E / 2 : 0), [oe, se] = (v ? [] : a.flatMap((e) => n.flatMap((t, n) => A(e, n) ? [] : [l(M(e, n))]))).reduce(([e, t], n) => [Math.min(e, n), Math.max(t, n)], [T, T]), ce = (e) => `fill:url(#${W(_, oe, T, se, {
|
|
1164
|
+
style: I[e].ink,
|
|
1165
|
+
...C && !r[e].focus && { "data-muted": "" }
|
|
1166
|
+
})}); `, le = (e) => {
|
|
1068
1167
|
let t = F("g", {
|
|
1069
1168
|
class: d,
|
|
1070
1169
|
...I[e].attrs,
|
|
1071
1170
|
...v && { "data-stacked": "" },
|
|
1072
|
-
style: I[e].ink
|
|
1171
|
+
style: `${I[e].ink}${v ? "" : ce(e)}`
|
|
1073
1172
|
}), n = H(e), r = F("g", {
|
|
1074
1173
|
class: "tablechart-area-fill",
|
|
1075
1174
|
style: `--rows:${Z(L + 1)}; ${n.length ? U(...n[0]) : ""}`
|
|
1076
1175
|
});
|
|
1077
1176
|
t.appendChild(r);
|
|
1078
1177
|
for (let [t, i] of n) {
|
|
1079
|
-
let n =
|
|
1178
|
+
let n = K(e, t, i, M), a = K(e, t, i, N), o = q(re, e, t, i)?.reverse() ?? null, s = [
|
|
1080
1179
|
`M${Z(ie(t))},${Z(a[0][1])}`,
|
|
1081
1180
|
`L${Z(ie(t))},${Z(n[0][1])}`,
|
|
1082
|
-
...G(n,
|
|
1083
|
-
`L${Z(
|
|
1181
|
+
...G(n, q(te, e, t, i), 1),
|
|
1182
|
+
`L${Z(ae(i))},${Z(a[a.length - 1][1])}`,
|
|
1084
1183
|
...G(a.reverse(), o, -1),
|
|
1085
1184
|
"Z"
|
|
1086
1185
|
].join(" ");
|
|
1087
1186
|
r.appendChild(F("path", {
|
|
1088
1187
|
d: s,
|
|
1089
|
-
...
|
|
1188
|
+
...ee(t, i),
|
|
1090
1189
|
style: U(t, i)
|
|
1091
1190
|
}));
|
|
1092
1191
|
}
|
|
1093
1192
|
_.appendChild(t);
|
|
1094
|
-
},
|
|
1193
|
+
}, ue = (e) => {
|
|
1095
1194
|
let t = r[e];
|
|
1096
1195
|
for (let [n, r] of H(e)) {
|
|
1097
|
-
let i =
|
|
1196
|
+
let i = K(e, n, r, M), a = [`M${Z(ie(n))},${Z(i[0][1])}`, ...G(i, q(te, e, n, r), 1)].join(" ");
|
|
1098
1197
|
_.appendChild(F("path", {
|
|
1099
1198
|
class: u,
|
|
1100
1199
|
...I[e].attrs,
|
|
1101
1200
|
d: a,
|
|
1102
1201
|
...t.line && { "data-line": t.line },
|
|
1103
|
-
...
|
|
1202
|
+
...ee(n, r),
|
|
1104
1203
|
style: `${I[e].ink}${U(n, r)}`
|
|
1105
1204
|
}));
|
|
1106
1205
|
}
|
|
1107
|
-
},
|
|
1108
|
-
let i = a.map((e) => r[e]), o = r.map((e, t) => y ?
|
|
1206
|
+
}, de = (e) => {
|
|
1207
|
+
let i = a.map((e) => r[e]), o = r.map((e, t) => y ? Ye(i, a.indexOf(t)) : S ? Ye(r, t) : {
|
|
1109
1208
|
shape: "circle",
|
|
1110
1209
|
open: !1
|
|
1111
1210
|
}), s = (e, t, n) => {
|
|
1112
1211
|
let [r, i] = P(e, t);
|
|
1113
|
-
return
|
|
1212
|
+
return Xe(o[e].shape, r, i, 3 * p, {
|
|
1114
1213
|
...n,
|
|
1115
1214
|
style: `${n.style ?? ""}${D(i)}${V(t)}`
|
|
1116
1215
|
});
|
|
1117
|
-
}, c = (t) => n.map((e, t) => t).filter((n) => !A(t, n) && e(t, n)), l = a.flatMap((e) => o[e].open ? c(e).map((t) => s(e, t, {
|
|
1216
|
+
}, c = (t) => /\bnone\b/.test(r[t].marker ?? "") ? [] : n.map((e, t) => t).filter((n) => !A(t, n) && e(t, n)), l = a.flatMap((e) => o[e].open ? c(e).map((t) => s(e, t, {
|
|
1118
1217
|
class: h,
|
|
1119
1218
|
"data-row": t + 1,
|
|
1120
1219
|
...S && { "data-series": e + 1 }
|
|
1121
1220
|
})) : []);
|
|
1122
|
-
_.closest("[data-animate]")?.getAttribute("data-animate") === "grow" ?
|
|
1221
|
+
_.closest("[data-animate]")?.getAttribute("data-animate") === "grow" ? ne(_, l, O, f) : t.lineHoles.push(...l), a.forEach((e) => {
|
|
1123
1222
|
for (let t of c(e)) _.appendChild(s(e, t, {
|
|
1124
1223
|
class: m,
|
|
1125
1224
|
...I[e].attrs,
|
|
@@ -1130,11 +1229,11 @@ var Xe = (e) => {
|
|
|
1130
1229
|
}));
|
|
1131
1230
|
});
|
|
1132
1231
|
};
|
|
1133
|
-
e && a.forEach((e) =>
|
|
1134
|
-
let
|
|
1232
|
+
e && a.forEach((e) => le(e)), a.forEach((e) => ue(e));
|
|
1233
|
+
let fe = y ? r.flatMap((e, t) => a.includes(t) ? [] : o[t].flatMap((e) => {
|
|
1135
1234
|
let t = e.dataset.place;
|
|
1136
1235
|
if (!t || t === "none" || e.hasAttribute("data-left-out")) return [];
|
|
1137
|
-
let [n, r, i, a] =
|
|
1236
|
+
let [n, r, i, a] = Te(e, p, O, f);
|
|
1138
1237
|
return [{
|
|
1139
1238
|
label: e,
|
|
1140
1239
|
box: [
|
|
@@ -1144,7 +1243,7 @@ var Xe = (e) => {
|
|
|
1144
1243
|
a + 6 * p
|
|
1145
1244
|
]
|
|
1146
1245
|
}];
|
|
1147
|
-
})) : [],
|
|
1246
|
+
})) : [], me = b ? [] : a.flatMap((e) => n.flatMap((t, n) => {
|
|
1148
1247
|
if (A(e, n)) return [];
|
|
1149
1248
|
let [r, i] = P(e, n);
|
|
1150
1249
|
return [[
|
|
@@ -1153,22 +1252,22 @@ var Xe = (e) => {
|
|
|
1153
1252
|
8 * p,
|
|
1154
1253
|
8 * p
|
|
1155
1254
|
]];
|
|
1156
|
-
})),
|
|
1157
|
-
let n =
|
|
1255
|
+
})), ge = fe.filter(({ label: e, box: t }) => {
|
|
1256
|
+
let n = me.some((e) => pe(e, t));
|
|
1158
1257
|
return n && e.setAttribute("data-left-out", ""), !n;
|
|
1159
|
-
}),
|
|
1258
|
+
}), _e = (e, t) => {
|
|
1160
1259
|
let n = t;
|
|
1161
1260
|
for (; n < w && !A(e, n + 1) && k(e, n + 1)?.value === k(e, t)?.value;) n++;
|
|
1162
1261
|
return n;
|
|
1163
|
-
},
|
|
1262
|
+
}, ve = (e) => e === "above" ? "below" : "above", ye = (e, t, n) => {
|
|
1164
1263
|
let [r, i] = P(e, t), a = J(o[e][t]).width * p, s = [
|
|
1165
1264
|
r - a / 2,
|
|
1166
1265
|
n === "above" ? i - 7 * p - g : i + 7 * p,
|
|
1167
1266
|
a,
|
|
1168
1267
|
g
|
|
1169
1268
|
];
|
|
1170
|
-
return s[1] + g > f ? Infinity : [t - 1, t + 1].filter((t) => t >= 0 && t <= w && !A(e, t)).flatMap((n) =>
|
|
1171
|
-
},
|
|
1269
|
+
return s[1] + g > f ? Infinity : [t - 1, t + 1].filter((t) => t >= 0 && t <= w && !A(e, t)).flatMap((n) => be(e, t, n, 0)).filter((e) => pe(e, s)).length;
|
|
1270
|
+
}, be = (e, t, n, r) => {
|
|
1172
1271
|
let [i, a] = P(e, t), [o, s] = P(e, n), c = Math.max(1, Math.ceil(Math.hypot(o - i, s - a) / (3 * p)));
|
|
1173
1272
|
return Array.from({ length: c + 1 }, (e, t) => {
|
|
1174
1273
|
let n = t / c;
|
|
@@ -1179,21 +1278,42 @@ var Xe = (e) => {
|
|
|
1179
1278
|
2 * r
|
|
1180
1279
|
];
|
|
1181
1280
|
});
|
|
1182
|
-
},
|
|
1281
|
+
}, xe = (t, n) => {
|
|
1183
1282
|
let i = k(t, n);
|
|
1184
1283
|
if (!i || i.missing || b && n > 0 && !A(t, n - 1) && k(t, n - 1)?.value === i.value || C && !r[t].focus) return "none";
|
|
1185
1284
|
if (v) return "middle";
|
|
1186
1285
|
let a = i.value < 0 ? "below" : "above";
|
|
1187
|
-
if (!S || C || r.length > 2) return e || b ||
|
|
1286
|
+
if (!S || C || r.length > 2) return e || b || ye(t, n, a) <= ye(t, n, ve(a)) ? a : ve(a);
|
|
1188
1287
|
let o = k(1 - t, n);
|
|
1189
1288
|
return !o || o.missing ? a : i.value > o.value || i.value === o.value && t === 0 || e && i.value >= 0 && P(t, n)[1] + 7 * p + g > T ? "above" : "below";
|
|
1190
|
-
},
|
|
1191
|
-
|
|
1289
|
+
}, Se = (e) => {
|
|
1290
|
+
let t = w;
|
|
1291
|
+
for (; t > 0 && A(e, t);) t--;
|
|
1292
|
+
return t;
|
|
1293
|
+
}, we = b || v ? 10 * p : Math.max(10 * p, ...a.map((e) => J(o[e][w]).width * p / 2 + 6 * p)), Ee = t.numbersAtEnd ? Math.max(...a.map((e) => J(o[e][Se(e)]).width * p)) + 11 * p : we, De = () => {
|
|
1294
|
+
let e = (s[0] ? J(s[0]).height : 0) * p, n = 2 * p, r = a.flatMap((e) => {
|
|
1295
|
+
let t = s[e];
|
|
1296
|
+
if (!t) return [];
|
|
1297
|
+
let [n, r] = P(e, Se(e));
|
|
1298
|
+
return [{
|
|
1299
|
+
name: t,
|
|
1300
|
+
x: n + Ee,
|
|
1301
|
+
y: r
|
|
1302
|
+
}];
|
|
1303
|
+
}), i = t.numbersAtEnd ? Ee - 7 * p : 0;
|
|
1304
|
+
return Ce(r, e).map((t) => [
|
|
1305
|
+
t.x - n - i,
|
|
1306
|
+
t.y - e / 2 - n,
|
|
1307
|
+
J(t.name).width * p + 2 * n + i,
|
|
1308
|
+
e + 2 * n
|
|
1309
|
+
]);
|
|
1310
|
+
}, ke = (y || S && !C && r.length > 2 && !v) && !b, Ae = /* @__PURE__ */ new Map();
|
|
1311
|
+
if (ke) {
|
|
1192
1312
|
let e = n.flatMap((e, t) => a.map((e) => ({
|
|
1193
1313
|
s: e,
|
|
1194
1314
|
i: t,
|
|
1195
1315
|
value: k(e, t)?.value ?? 0
|
|
1196
|
-
}))).filter(({ s: e, i: t }) =>
|
|
1316
|
+
}))).filter(({ s: e, i: t }) => xe(e, t) !== "none").sort((e, t) => e.i - t.i || t.value - e.value || e.s - t.s), t = (e) => e < 0 ? ["below", "above"] : ["above", "below"], r = he(e.map(({ s: e, i: n, value: r }) => {
|
|
1197
1317
|
let i = J(o[e][n]).width * p, [a, s] = P(e, n);
|
|
1198
1318
|
return t(r).map((e) => [
|
|
1199
1319
|
a - i / 2,
|
|
@@ -1201,31 +1321,58 @@ var Xe = (e) => {
|
|
|
1201
1321
|
i,
|
|
1202
1322
|
g
|
|
1203
1323
|
]);
|
|
1204
|
-
}), [
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1324
|
+
}), [
|
|
1325
|
+
...a.flatMap((e) => n.flatMap((t, n) => {
|
|
1326
|
+
if (A(e, n)) return [];
|
|
1327
|
+
let [r, i] = P(e, n);
|
|
1328
|
+
return [[
|
|
1329
|
+
r - 4 * p,
|
|
1330
|
+
i - 4 * p,
|
|
1331
|
+
8 * p,
|
|
1332
|
+
8 * p
|
|
1333
|
+
]];
|
|
1334
|
+
})),
|
|
1335
|
+
...De(),
|
|
1336
|
+
...ge.map(({ box: e }) => e)
|
|
1337
|
+
], [
|
|
1214
1338
|
0,
|
|
1215
1339
|
0,
|
|
1216
1340
|
c(w) + c(0),
|
|
1217
1341
|
f
|
|
1218
1342
|
]);
|
|
1219
|
-
e.forEach(({ s: e, i: n, value: i }, a) =>
|
|
1343
|
+
e.forEach(({ s: e, i: n, value: i }, a) => Ae.set(o[e][n], r[a] === null ? null : t(i)[r[a]]));
|
|
1220
1344
|
}
|
|
1221
|
-
let
|
|
1345
|
+
let je = (e, t) => {
|
|
1346
|
+
if (ke) return Ae.get(o[e][t]) === null;
|
|
1347
|
+
if (!v && !b) return !1;
|
|
1348
|
+
let n = J(o[e][t]).width * p;
|
|
1349
|
+
if (n > (b ? _e(e, t) - t + 1 : 1) * E - 4 * p || v && e > 0 && M(e, t) < N(e, t)) return !0;
|
|
1350
|
+
if (v && !b && t > 0 && t < w) {
|
|
1351
|
+
let r = (l(N(e, t)) + l(M(e, t))) / 2, i = [
|
|
1352
|
+
c(t) - n / 2,
|
|
1353
|
+
r - g / 2,
|
|
1354
|
+
n,
|
|
1355
|
+
g
|
|
1356
|
+
];
|
|
1357
|
+
if (a.some((e) => {
|
|
1358
|
+
let [n, r] = P(e, t);
|
|
1359
|
+
return !A(e, t) && pe([
|
|
1360
|
+
n - 4 * p,
|
|
1361
|
+
r - 4 * p,
|
|
1362
|
+
8 * p,
|
|
1363
|
+
8 * p
|
|
1364
|
+
], i);
|
|
1365
|
+
})) return !0;
|
|
1366
|
+
}
|
|
1367
|
+
return v && Math.abs(l(N(e, t)) - l(M(e, t))) < g * 1.2;
|
|
1368
|
+
};
|
|
1222
1369
|
a.forEach((e) => {
|
|
1223
1370
|
o[e].forEach((t, n) => {
|
|
1224
1371
|
t.style.setProperty("--i", String(Z(b ? (B(n) + B(n + 1)) / 2 : B(n))));
|
|
1225
|
-
let r =
|
|
1226
|
-
if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" &&
|
|
1372
|
+
let r = Ae.get(t) ?? xe(e, n);
|
|
1373
|
+
if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" && je(e, n)), b && r !== "none" ? t.dataset.rowEnd = String(_e(e, n) + 1) : delete t.dataset.rowEnd, r === "none") return;
|
|
1227
1374
|
let i = J(t).width * p / 2 + 4 * p, a = c(n);
|
|
1228
|
-
b ? a = (c(n) + c(
|
|
1375
|
+
b ? a = (c(n) + c(_e(e, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === w && (a -= i);
|
|
1229
1376
|
let o = l(M(e, n)), s = {
|
|
1230
1377
|
middle: (l(N(e, n)) - o) / 2,
|
|
1231
1378
|
above: -7 * p,
|
|
@@ -1234,46 +1381,30 @@ var Xe = (e) => {
|
|
|
1234
1381
|
R(t, a, o + s[r], O, f);
|
|
1235
1382
|
});
|
|
1236
1383
|
});
|
|
1237
|
-
let
|
|
1384
|
+
let Me = (e) => {
|
|
1238
1385
|
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;
|
|
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(...
|
|
1386
|
+
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(...at(i.map((e) => ({
|
|
1240
1387
|
x: e,
|
|
1241
1388
|
y: a(e)
|
|
1242
1389
|
})))?.outside.map((e) => e.x) ?? []));
|
|
1243
1390
|
let c = [];
|
|
1244
1391
|
for (let t of r) {
|
|
1245
1392
|
let n = o[e][t];
|
|
1246
|
-
c.includes(t) || n.dataset.place === "none" || c.every((t) =>
|
|
1393
|
+
c.includes(t) || n.dataset.place === "none" || c.every((t) => Oe([o[e][t], n], p, 1e3, f) === 1) && c.push(t);
|
|
1247
1394
|
}
|
|
1248
1395
|
return new Set(c);
|
|
1249
|
-
},
|
|
1250
|
-
let t = w;
|
|
1251
|
-
for (; t > 0 && A(e, t);) t--;
|
|
1252
|
-
return t;
|
|
1253
|
-
}, Ee = /* @__PURE__ */ new Map();
|
|
1396
|
+
}, Ne = (e) => Oe(o[e].filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), p, O, f) === 1, Pe = /* @__PURE__ */ new Map();
|
|
1254
1397
|
for (let e of a) {
|
|
1255
|
-
let n = t.pick.mode === "all" || t.pick.mode === "auto" &&
|
|
1256
|
-
|
|
1398
|
+
let n = t.pick.mode === "all" || t.pick.mode === "auto" && Ne(e) ? null : Me(e);
|
|
1399
|
+
Pe.set(e, n), n && o[e].forEach((e, t) => {
|
|
1257
1400
|
e.dataset.place !== "none" && !n.has(t) && e.setAttribute("data-left-out", "");
|
|
1258
1401
|
});
|
|
1259
1402
|
}
|
|
1260
|
-
if (!v && !b && a.some((e) =>
|
|
1261
|
-
let e = c(w) + c(0),
|
|
1262
|
-
let t = s[e];
|
|
1263
|
-
if (!t) return [];
|
|
1264
|
-
let n = w;
|
|
1265
|
-
for (; n > 0 && A(e, n);) n--;
|
|
1266
|
-
let [r, a] = P(e, n);
|
|
1267
|
-
return [[
|
|
1268
|
-
r + 10 * p,
|
|
1269
|
-
a - i / 2,
|
|
1270
|
-
J(t).width * p,
|
|
1271
|
-
i
|
|
1272
|
-
]];
|
|
1273
|
-
}), u = a.flatMap((e) => [...Ee.get(e) ?? []].map((t) => ({
|
|
1403
|
+
if (!v && !b && a.some((e) => Pe.get(e))) {
|
|
1404
|
+
let e = c(w) + c(0), r = 2 * p, i = (e) => n.flatMap((t, n) => n === w || A(e, n) || A(e, n + 1) ? [] : be(e, n, n + 1, r)), s = a.flatMap(i), l = De(), u = a.flatMap((e) => [...Pe.get(e) ?? []].map((t) => ({
|
|
1274
1405
|
s: e,
|
|
1275
1406
|
i: t
|
|
1276
|
-
}))), d = ({ s: e, i: t }) => {
|
|
1407
|
+
}))), d = ({ s: e, i: n }) => t.numbersAtEnd && n === Se(e), m = u.filter((e) => !d(e)), h = ({ s: e, i: t }) => {
|
|
1277
1408
|
let n = k(e, t)?.value ?? 0, r = t > 0 && !A(e, t - 1) ? k(e, t - 1)?.value : void 0, i = t < w && !A(e, t + 1) ? k(e, t + 1)?.value : void 0;
|
|
1278
1409
|
return (r ?? i) !== void 0 && (r === void 0 || n <= r) && (i === void 0 || n <= i) ? [
|
|
1279
1410
|
"below",
|
|
@@ -1290,7 +1421,7 @@ var Xe = (e) => {
|
|
|
1290
1421
|
"after",
|
|
1291
1422
|
"before"
|
|
1292
1423
|
];
|
|
1293
|
-
},
|
|
1424
|
+
}, _ = ({ s: t, i: n }, r) => {
|
|
1294
1425
|
let i = J(o[t][n]).width * p, a = g, [s, c] = P(t, n), l = Math.min(Math.max(s - i / 2, 0), e - i);
|
|
1295
1426
|
return r === "outside" ? [
|
|
1296
1427
|
l,
|
|
@@ -1323,7 +1454,7 @@ var Xe = (e) => {
|
|
|
1323
1454
|
i,
|
|
1324
1455
|
a
|
|
1325
1456
|
];
|
|
1326
|
-
},
|
|
1457
|
+
}, v = m.map(h), y = (t) => t[0] >= 0 && t[1] >= 0 && t[0] + t[2] <= e && t[1] + t[3] <= f - 2 * p, b = u.map(({ s: e, i: t }) => {
|
|
1327
1458
|
let [n, r] = P(e, t);
|
|
1328
1459
|
return [
|
|
1329
1460
|
n - 6 * p,
|
|
@@ -1331,57 +1462,62 @@ var Xe = (e) => {
|
|
|
1331
1462
|
12 * p,
|
|
1332
1463
|
12 * p
|
|
1333
1464
|
];
|
|
1334
|
-
}),
|
|
1335
|
-
let n =
|
|
1336
|
-
...
|
|
1465
|
+
}), x = [], S = /* @__PURE__ */ new Set(), C = m.map((e, t) => {
|
|
1466
|
+
let n = v[t].map((t) => _(e, t)), r = (e) => y(e) && ![
|
|
1467
|
+
...x,
|
|
1337
1468
|
...l,
|
|
1338
|
-
...
|
|
1339
|
-
].some((t) =>
|
|
1340
|
-
return
|
|
1469
|
+
...b
|
|
1470
|
+
].some((t) => pe(e, t)), o = a.filter((t) => t !== e.s).flatMap(i), c = (n) => !v[t][n].endsWith("far") || !o.some((r) => pe(_(e, v[t][n].split(" ")[0]), r)), u = n.findIndex((e, t) => r(e) && c(t) && !s.some((t) => pe(e, t)));
|
|
1471
|
+
return u < 0 && (u = n.findIndex((e, t) => r(e) && c(t)), u >= 0 && S.add(t)), u >= 0 && x.push(n[u]), u < 0 ? null : u;
|
|
1341
1472
|
});
|
|
1342
|
-
|
|
1473
|
+
m.forEach((e, t) => {
|
|
1343
1474
|
let n = o[e.s][e.i];
|
|
1344
|
-
n.toggleAttribute("data-cut",
|
|
1345
|
-
let r =
|
|
1346
|
-
if (
|
|
1347
|
-
let i =
|
|
1475
|
+
n.toggleAttribute("data-cut", S.has(t));
|
|
1476
|
+
let r = C[t];
|
|
1477
|
+
if (n.toggleAttribute("data-left-out", r === null), r === null) return;
|
|
1478
|
+
let i = v[t][r], [a, s, c, l] = _(e, i), u = i.split(" ")[0];
|
|
1348
1479
|
n.dataset.place = u, R(n, u === "after" ? a : u === "before" ? a + c : a + c / 2, u === "outside" ? s + l : u === "below" ? s : s + l / 2, O, f);
|
|
1349
1480
|
});
|
|
1350
1481
|
}
|
|
1351
|
-
b ||
|
|
1352
|
-
let n =
|
|
1482
|
+
b || de((e, t) => {
|
|
1483
|
+
let n = Pe.get(e);
|
|
1353
1484
|
return n ? n.has(t) : E >= 10 * p;
|
|
1354
1485
|
}), t.pointOf = (e) => {
|
|
1355
1486
|
let t = a.filter((t) => !A(t, e)).map((t) => P(t, e));
|
|
1356
1487
|
return t.length ? t.reduce((e, t) => t[1] < e[1] ? t : e) : null;
|
|
1357
1488
|
};
|
|
1358
|
-
let
|
|
1359
|
-
let n =
|
|
1489
|
+
let Fe = (y ? [] : s).map((e, t) => {
|
|
1490
|
+
let n = Se(t), [r, i] = P(t, n);
|
|
1360
1491
|
return {
|
|
1361
1492
|
name: e,
|
|
1362
|
-
|
|
1493
|
+
s: t,
|
|
1494
|
+
x: (b ? r + E / 2 : r) + Ee,
|
|
1363
1495
|
y: v ? (i + l(N(t, n))) / 2 : i
|
|
1364
1496
|
};
|
|
1365
|
-
}),
|
|
1366
|
-
for (let e of
|
|
1367
|
-
|
|
1497
|
+
}), Ie = (s[0] ? J(s[0]).height : 0) * p;
|
|
1498
|
+
for (let e of Ce(Fe, Ie)) {
|
|
1499
|
+
if (R(e.name, e.x, e.y, O, f), !t.numbersAtEnd) continue;
|
|
1500
|
+
let n = o[e.s][Se(e.s)];
|
|
1501
|
+
n.dataset.place = "before", n.removeAttribute("data-left-out"), n.removeAttribute("data-cut"), R(n, e.x - 4 * p, e.y, O, f);
|
|
1502
|
+
}
|
|
1503
|
+
let Re = n.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), ze = !e && !v && r.length === 2 && !C && !Re ? f - 2 * p : T;
|
|
1368
1504
|
y || _.appendChild(F("line", {
|
|
1369
1505
|
class: i,
|
|
1370
1506
|
x1: 0,
|
|
1371
1507
|
x2: c(w) + c(0),
|
|
1372
|
-
y1:
|
|
1373
|
-
y2:
|
|
1508
|
+
y1: ze,
|
|
1509
|
+
y2: ze
|
|
1374
1510
|
}));
|
|
1375
1511
|
}
|
|
1376
|
-
}),
|
|
1512
|
+
}), ct = st(!1), lt = st(!0), ut = /* @__PURE__ */ new Set(), dt = (t, n) => {
|
|
1377
1513
|
if (Math.abs(t - n) <= Math.abs(n) / 100) return;
|
|
1378
1514
|
let r = `[${e}] A total reads ${t}, but the steps before it add up to ${Number(n.toFixed(6))}. The chart shows your number.`;
|
|
1379
|
-
|
|
1380
|
-
},
|
|
1515
|
+
ut.has(r) || (ut.add(r), console.warn(r));
|
|
1516
|
+
}, ft = {
|
|
1381
1517
|
segments: (e) => {
|
|
1382
1518
|
let t = 0, n = !1;
|
|
1383
1519
|
return e.map((e) => {
|
|
1384
|
-
if (e.isTotal) return n &&
|
|
1520
|
+
if (e.isTotal) return n && dt(e.value, t), n = !1, t = e.value, {
|
|
1385
1521
|
...e,
|
|
1386
1522
|
from: 0,
|
|
1387
1523
|
to: e.value,
|
|
@@ -1399,13 +1535,13 @@ var Xe = (e) => {
|
|
|
1399
1535
|
breakable: !0,
|
|
1400
1536
|
headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
|
|
1401
1537
|
draw({ segments: e, cx: t, y: n, barWidth: a, height: o, unit: s, svg: c, values: l, breakAt: u, insideAlign: d }) {
|
|
1402
|
-
let f = n(0), p =
|
|
1538
|
+
let f = n(0), p = ye(l, a, s), m = d ?? "center", h = e.map((t, r) => {
|
|
1403
1539
|
let i = n(Math.max(t.from, t.to)), a = Math.abs(n(t.from) - n(t.to)), o = u !== null && Math.min(t.from, t.to) < u && Math.max(t.from, t.to) > u, c = t.kind === "total" && r > 0 && r === e.length - 1;
|
|
1404
1540
|
return {
|
|
1405
1541
|
top: i,
|
|
1406
1542
|
length: a,
|
|
1407
1543
|
down: t.kind === "down" || t.kind === "total" && (c ? t.to >= 0 : t.to < 0),
|
|
1408
|
-
inside: !o && !p &&
|
|
1544
|
+
inside: !o && !p && be(l[r], a, s)
|
|
1409
1545
|
};
|
|
1410
1546
|
}), g = l[0] ? J(l[0]).height * s * .56 : 0, _ = Infinity;
|
|
1411
1547
|
for (let [e, t] of h.entries()) t.inside && (_ = Math.min(_, (a - J(l[e]).width * s) / 2));
|
|
@@ -1460,7 +1596,7 @@ var Xe = (e) => {
|
|
|
1460
1596
|
let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
|
|
1461
1597
|
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;
|
|
1462
1598
|
}
|
|
1463
|
-
},
|
|
1599
|
+
}, pt = (e) => {
|
|
1464
1600
|
let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
|
|
1465
1601
|
return {
|
|
1466
1602
|
raw: t,
|
|
@@ -1470,14 +1606,14 @@ var Xe = (e) => {
|
|
|
1470
1606
|
missing: !n,
|
|
1471
1607
|
value: n ? Number.parseFloat(n[2].replace(",", ".")) : 0
|
|
1472
1608
|
};
|
|
1473
|
-
},
|
|
1474
|
-
let n =
|
|
1609
|
+
}, mt = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).flatMap((e, t) => e.hasAttribute("data-note") ? [t] : []), ht = (e, t) => {
|
|
1610
|
+
let n = mt(e), r = e.querySelectorAll("tbody tr")[t]?.querySelectorAll("td") ?? [];
|
|
1475
1611
|
return n.map((e) => r[e]).find((e) => e?.textContent?.trim()) ?? null;
|
|
1476
|
-
},
|
|
1477
|
-
let n =
|
|
1612
|
+
}, gt = (e, t = "data-i18n") => {
|
|
1613
|
+
let n = mt(e);
|
|
1478
1614
|
return Array.from(e.querySelectorAll("tbody tr")).map((e, r) => {
|
|
1479
|
-
let i = e.querySelector("th"), a = Array.from(e.querySelectorAll("td")), o = a.filter((e, t) => !n.includes(t)).map(
|
|
1480
|
-
o.length || o.push(
|
|
1615
|
+
let i = e.querySelector("th"), a = Array.from(e.querySelectorAll("td")), o = a.filter((e, t) => !n.includes(t)).map(pt);
|
|
1616
|
+
o.length || o.push(pt(null));
|
|
1481
1617
|
let s = n.map((e) => a[e]).find((e) => e?.textContent?.trim());
|
|
1482
1618
|
return {
|
|
1483
1619
|
...o[0],
|
|
@@ -1493,8 +1629,8 @@ var Xe = (e) => {
|
|
|
1493
1629
|
slot: r
|
|
1494
1630
|
};
|
|
1495
1631
|
});
|
|
1496
|
-
},
|
|
1497
|
-
let r =
|
|
1632
|
+
}, _t = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).filter((e) => !e.hasAttribute("data-note")), vt = (e) => e === "dashed" || e === "dotted" || e === "dash-dot" ? e : null, yt = (e, t, n = "data-i18n") => {
|
|
1633
|
+
let r = _t(e), i = Math.max(1, q(t.map((e) => e.cells.length)));
|
|
1498
1634
|
return Array.from({ length: i }, (e, t) => {
|
|
1499
1635
|
let i = r[t];
|
|
1500
1636
|
return {
|
|
@@ -1502,12 +1638,12 @@ var Xe = (e) => {
|
|
|
1502
1638
|
key: n && i?.getAttribute(n) || null,
|
|
1503
1639
|
focus: i?.getAttribute("data-kind") === "focus",
|
|
1504
1640
|
marker: i?.getAttribute("data-marker") ?? null,
|
|
1505
|
-
line:
|
|
1641
|
+
line: vt(i?.getAttribute("data-line")),
|
|
1506
1642
|
group: !!i?.hasAttribute("data-group"),
|
|
1507
1643
|
chart: i?.getAttribute("data-chart") === "line" ? "line" : null
|
|
1508
1644
|
};
|
|
1509
1645
|
});
|
|
1510
|
-
},
|
|
1646
|
+
}, bt = (t, n) => {
|
|
1511
1647
|
if (!n) return;
|
|
1512
1648
|
let r = /* @__PURE__ */ new Map();
|
|
1513
1649
|
for (let i of t) {
|
|
@@ -1520,7 +1656,7 @@ var Xe = (e) => {
|
|
|
1520
1656
|
i.querySelectorAll("tbody th").forEach((e, r) => {
|
|
1521
1657
|
e.getAttribute(n) || e.setAttribute(n, `${t}-row${r + 1}`);
|
|
1522
1658
|
});
|
|
1523
|
-
let a =
|
|
1659
|
+
let a = _t(i);
|
|
1524
1660
|
a.length > 1 && a.forEach((e, r) => {
|
|
1525
1661
|
e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
|
|
1526
1662
|
}), a.forEach((e, r) => {
|
|
@@ -1531,7 +1667,7 @@ var Xe = (e) => {
|
|
|
1531
1667
|
a.includes(r) || a.push(r), e.getAttribute(n) || e.setAttribute(n, `${t}-group${a.indexOf(r) + 1}`);
|
|
1532
1668
|
});
|
|
1533
1669
|
});
|
|
1534
|
-
let o =
|
|
1670
|
+
let o = mt(i);
|
|
1535
1671
|
i.querySelectorAll("tbody tr").forEach((e, r) => {
|
|
1536
1672
|
let i = e.querySelectorAll("td");
|
|
1537
1673
|
for (let e of o) {
|
|
@@ -1540,133 +1676,150 @@ var Xe = (e) => {
|
|
|
1540
1676
|
}
|
|
1541
1677
|
}), Q?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
|
|
1542
1678
|
}
|
|
1543
|
-
},
|
|
1679
|
+
}, xt = (e) => Number(e.toPrecision(12)), St = (e, t) => {
|
|
1544
1680
|
let n = e / Math.max(1, t) || 1, r = 10 ** Math.floor(Math.log10(n)), i = n / r;
|
|
1545
|
-
return
|
|
1546
|
-
},
|
|
1681
|
+
return xt((i < 1.42 ? 1 : i < 3.17 ? 2 : i < 7.08 ? 5 : 10) * r);
|
|
1682
|
+
}, Ct = (e, t, n) => {
|
|
1547
1683
|
let r = [];
|
|
1548
|
-
for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(
|
|
1684
|
+
for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(xt(i * n));
|
|
1549
1685
|
return r;
|
|
1550
|
-
},
|
|
1686
|
+
}, wt = (e, t = e) => {
|
|
1551
1687
|
do {
|
|
1552
1688
|
let t = Math.round(e / 10 ** Math.floor(Math.log10(e) + 1e-9));
|
|
1553
|
-
e =
|
|
1689
|
+
e = xt(e * (t === 2 ? 2.5 : 2));
|
|
1554
1690
|
} while (Math.abs(e / t - Math.round(e / t)) > 1e-9);
|
|
1555
1691
|
return e;
|
|
1556
|
-
},
|
|
1692
|
+
}, Tt = (e) => {
|
|
1557
1693
|
let t = (e ?? "").trim().split(/\s+/).map(Number.parseFloat);
|
|
1558
1694
|
return t.length > 1 && t.every(Number.isFinite) ? t.sort((e, t) => e - t) : null;
|
|
1559
|
-
},
|
|
1695
|
+
}, Et = (e, t, n) => {
|
|
1560
1696
|
if (n && n.length > 2) return {
|
|
1561
1697
|
min: n[0],
|
|
1562
1698
|
max: n[n.length - 1],
|
|
1563
1699
|
step: 0,
|
|
1564
1700
|
ticks: n
|
|
1565
1701
|
};
|
|
1566
|
-
let r = n?.[0] ?? -
|
|
1702
|
+
let r = n?.[0] ?? -q(e.map((e) => -e)), i = n?.[1] ?? q(e);
|
|
1567
1703
|
if (!n) {
|
|
1568
1704
|
let e = (i - r || Math.abs(i) || 1) * .05;
|
|
1569
1705
|
r -= e, i += e;
|
|
1570
1706
|
}
|
|
1571
|
-
let a =
|
|
1707
|
+
let a = St(i - r, t);
|
|
1572
1708
|
return {
|
|
1573
1709
|
min: r,
|
|
1574
1710
|
max: i,
|
|
1575
1711
|
step: a,
|
|
1576
|
-
ticks:
|
|
1712
|
+
ticks: Ct(r, i, a)
|
|
1577
1713
|
};
|
|
1578
|
-
},
|
|
1714
|
+
}, Dt = (e, t) => {
|
|
1579
1715
|
let { step: n, ticks: r } = e;
|
|
1580
|
-
for (; n && r.length > 2 && !t(r);) n =
|
|
1716
|
+
for (; n && r.length > 2 && !t(r);) n = wt(n, e.step), r = Ct(e.min, e.max, n);
|
|
1581
1717
|
return {
|
|
1582
1718
|
...e,
|
|
1583
1719
|
step: n,
|
|
1584
1720
|
ticks: r
|
|
1585
1721
|
};
|
|
1586
|
-
},
|
|
1587
|
-
if (
|
|
1722
|
+
}, Ot = null, kt = (e) => {
|
|
1723
|
+
if (Ot ?? (Ot = document.createElement("canvas").getContext("2d", { willReadFrequently: !0 })), !Ot) return [
|
|
1588
1724
|
0,
|
|
1589
1725
|
0,
|
|
1590
1726
|
0,
|
|
1591
1727
|
1
|
|
1592
1728
|
];
|
|
1593
|
-
|
|
1594
|
-
let [t, n, r, i] =
|
|
1729
|
+
Ot.clearRect(0, 0, 1, 1), Ot.fillStyle = e, Ot.fillRect(0, 0, 1, 1);
|
|
1730
|
+
let [t, n, r, i] = Ot.getImageData(0, 0, 1, 1).data;
|
|
1595
1731
|
return [
|
|
1596
1732
|
t,
|
|
1597
1733
|
n,
|
|
1598
1734
|
r,
|
|
1599
1735
|
i / 255
|
|
1600
1736
|
];
|
|
1601
|
-
},
|
|
1737
|
+
}, At = ([e, t, n]) => {
|
|
1602
1738
|
let r = (e) => {
|
|
1603
1739
|
let t = e / 255;
|
|
1604
1740
|
return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
|
|
1605
1741
|
};
|
|
1606
1742
|
return .2126 * r(e) + .7152 * r(t) + .0722 * r(n);
|
|
1607
|
-
},
|
|
1743
|
+
}, jt = (e) => getComputedStyle(e).getPropertyValue("--tablechart-contrast-wcag").trim() === "3" ? 3 : 2, Mt = ([e, t, n]) => {
|
|
1608
1744
|
let r = .2126729 * (e / 255) ** 2.4 + .7151522 * (t / 255) ** 2.4 + .072175 * (n / 255) ** 2.4;
|
|
1609
1745
|
return r < .022 ? r + (.022 - r) ** 1.414 : r;
|
|
1610
|
-
},
|
|
1611
|
-
let n =
|
|
1746
|
+
}, Nt = (e, t) => {
|
|
1747
|
+
let n = Mt(e), r = Mt(t);
|
|
1612
1748
|
if (Math.abs(r - n) < 5e-4) return 0;
|
|
1613
1749
|
let i = r > n ? (r ** .56 - n ** .57) * 1.14 : (r ** .65 - n ** .62) * 1.14;
|
|
1614
1750
|
return Math.abs(i) < .1 ? 0 : (Math.abs(i) - .027) * 100;
|
|
1615
|
-
},
|
|
1616
|
-
let [n, r] = [
|
|
1751
|
+
}, Pt = (e, t, n) => e === 3 ? Nt(t, n) : Ft(t, n), Ft = (e, t) => {
|
|
1752
|
+
let [n, r] = [At(e), At(t)].sort((e, t) => t - e);
|
|
1617
1753
|
return (n + .05) / (r + .05);
|
|
1618
|
-
},
|
|
1754
|
+
}, It = (e, t) => {
|
|
1619
1755
|
let n = document.createElement("span");
|
|
1620
1756
|
n.style.color = t, e.append(n);
|
|
1621
|
-
let r =
|
|
1757
|
+
let r = kt(getComputedStyle(n).color);
|
|
1622
1758
|
return n.remove(), r;
|
|
1623
|
-
},
|
|
1759
|
+
}, Lt = (e) => {
|
|
1624
1760
|
let t = [], n = null;
|
|
1625
1761
|
for (let r = e; r && !n; r = r.parentElement) {
|
|
1626
|
-
let { background: e, backgroundColor: i } = r.dataset, a =
|
|
1762
|
+
let { background: e, backgroundColor: i } = r.dataset, a = kt(i || (e && CSS.supports("color", e) ? e : "") || getComputedStyle(r).backgroundColor);
|
|
1627
1763
|
a[3] >= 1 ? n = a : a[3] > 0 && t.push(a);
|
|
1628
1764
|
}
|
|
1629
|
-
n ?? (n =
|
|
1765
|
+
n ?? (n = It(e, "Canvas"));
|
|
1630
1766
|
for (let [e, r, i, a] of t.reverse()) n = [
|
|
1631
1767
|
e,
|
|
1632
1768
|
r,
|
|
1633
1769
|
i
|
|
1634
1770
|
].map((e, t) => e * a + n[t] * (1 - a));
|
|
1635
|
-
|
|
1636
|
-
|
|
1771
|
+
let r = `rgb(${n.slice(0, 3).map(Math.round).join(" ")})`;
|
|
1772
|
+
return e.style.getPropertyValue("--_surface") !== r && (e.style.setProperty("--_surface", r), !0);
|
|
1773
|
+
}, Rt = (e) => It(e, "var(--tablechart-surface, var(--_surface, Canvas))"), zt = (e, t) => e.querySelector(`:is(.tablechart-bar, .tablechart-piece)[data-row="${t.dataset.row}"]${t.dataset.series ? `[data-series="${t.dataset.series}"]` : ""}`), Bt = [
|
|
1637
1774
|
255,
|
|
1638
1775
|
255,
|
|
1639
1776
|
255
|
|
1640
|
-
],
|
|
1777
|
+
], Vt = [
|
|
1641
1778
|
0,
|
|
1642
1779
|
0,
|
|
1643
1780
|
0
|
|
1644
|
-
],
|
|
1645
|
-
let r =
|
|
1646
|
-
return r >= t ?
|
|
1647
|
-
},
|
|
1781
|
+
], Ht = (e, t, n) => {
|
|
1782
|
+
let r = Pt(n, Bt, e), i = Pt(n, Vt, e);
|
|
1783
|
+
return r >= t ? Bt : i >= t ? Vt : n === 2 && r >= 4.5 || r > i ? Bt : Vt;
|
|
1784
|
+
}, Ut = (e) => {
|
|
1648
1785
|
let t = e.querySelectorAll(".tablechart-value[data-place='inside']");
|
|
1649
1786
|
if (!t.length) return;
|
|
1650
|
-
let n =
|
|
1651
|
-
let [r, i, a, o] =
|
|
1787
|
+
let n = Rt(e).slice(0, 3), r = At(n) > .179, i = (t, n) => {
|
|
1788
|
+
let [r, i, a, o] = It(e, `var(${t}, transparent)`);
|
|
1652
1789
|
return o > 0 ? [
|
|
1653
1790
|
r,
|
|
1654
1791
|
i,
|
|
1655
1792
|
a
|
|
1656
1793
|
] : n;
|
|
1657
|
-
}, a =
|
|
1794
|
+
}, a = jt(e), o = Number.parseFloat(getComputedStyle(e).getPropertyValue("--tablechart-value-contrast")) || (a === 3 ? 60 : 5), s = kt(getComputedStyle(e).color).slice(0, 3), c = i("--tablechart-value-on-dark", r ? n : s), l = i("--tablechart-value-on-light", r ? s : n);
|
|
1658
1795
|
for (let n of t) {
|
|
1659
|
-
let t =
|
|
1796
|
+
let t = zt(e, n);
|
|
1660
1797
|
if (!t || n.hasAttribute("data-left-out")) continue;
|
|
1661
|
-
let r =
|
|
1798
|
+
let r = kt(getComputedStyle(t).fill), i = Pt(a, c, r) > Pt(a, l, r) ? c : l, s = Pt(a, i, r) >= o ? i : Ht(r, o, a);
|
|
1662
1799
|
n.style.setProperty("--_ink", `rgb(${s.join(" ")})`);
|
|
1663
1800
|
}
|
|
1664
|
-
},
|
|
1801
|
+
}, Wt = (e) => {
|
|
1802
|
+
let t = e.querySelectorAll(".tablechart-name:not([data-place='legend'])");
|
|
1803
|
+
if (!t.length) return;
|
|
1804
|
+
let n = jt(e), r = n === 3 ? 60 : 4.5, i = Rt(e).slice(0, 3), a = kt(getComputedStyle(e).color).slice(0, 3);
|
|
1805
|
+
for (let o of t) {
|
|
1806
|
+
let t = e.querySelector(`.tablechart-series[data-series="${o.dataset.series}"]:not([data-muted])`);
|
|
1807
|
+
if (o.style.removeProperty("--_ink"), !t) continue;
|
|
1808
|
+
let s = kt(getComputedStyle(t).stroke).slice(0, 3);
|
|
1809
|
+
for (let e = 0; e <= 20; e++) {
|
|
1810
|
+
let t = s.map((t, n) => Math.round(t + (a[n] - t) * e / 20));
|
|
1811
|
+
if (!(Pt(n, t, i) < r && e < 20)) {
|
|
1812
|
+
e && o.style.setProperty("--_ink", `rgb(${t.join(" ")})`);
|
|
1813
|
+
break;
|
|
1814
|
+
}
|
|
1815
|
+
}
|
|
1816
|
+
}
|
|
1817
|
+
}, Gt = [
|
|
1665
1818
|
"axis-break",
|
|
1666
1819
|
"trend",
|
|
1667
1820
|
"bracket"
|
|
1668
|
-
],
|
|
1669
|
-
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) =>
|
|
1821
|
+
], Kt = (e, t = !1) => {
|
|
1822
|
+
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) => Gt.includes(e.getAttribute("data-annotation") ?? "")), o = (e) => e.hasAttribute("data-fragment"), s = r.map((e) => Array.from(e.querySelectorAll(":scope > td")));
|
|
1670
1823
|
if (!n && !r.some(o) && !i.some(o) && !s.flat().some(o) && !a.some(o) || t && !n) return null;
|
|
1671
1824
|
let c = [], l = /* @__PURE__ */ new Map(), u = [], d = (e) => {
|
|
1672
1825
|
let t = e === null ? void 0 : l.get(e);
|
|
@@ -1728,7 +1881,7 @@ var Xe = (e) => {
|
|
|
1728
1881
|
count: c.length,
|
|
1729
1882
|
indexes: c
|
|
1730
1883
|
};
|
|
1731
|
-
},
|
|
1884
|
+
}, qt = (e) => {
|
|
1732
1885
|
let t = e.plan;
|
|
1733
1886
|
if (!t) return;
|
|
1734
1887
|
let n = (t) => t === null || e.step - t >= 1;
|
|
@@ -1739,7 +1892,7 @@ var Xe = (e) => {
|
|
|
1739
1892
|
let u = r.hasAttribute("data-flat") ? (l - e + 1) / (i - e + 1) : i > e ? Math.max(0, l - e) / (i - e) : 0;
|
|
1740
1893
|
r.style.setProperty("--reveal", String(u));
|
|
1741
1894
|
}
|
|
1742
|
-
},
|
|
1895
|
+
}, Jt = (e) => {
|
|
1743
1896
|
let t = e.plan;
|
|
1744
1897
|
if (!t) return;
|
|
1745
1898
|
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) => {
|
|
@@ -1817,12 +1970,12 @@ var Xe = (e) => {
|
|
|
1817
1970
|
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));
|
|
1818
1971
|
}
|
|
1819
1972
|
}
|
|
1820
|
-
|
|
1821
|
-
},
|
|
1973
|
+
qt(e);
|
|
1974
|
+
}, Yt = (e, t, n = !1) => {
|
|
1822
1975
|
let r = e.plan;
|
|
1823
1976
|
if (!r) return;
|
|
1824
1977
|
let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
|
|
1825
|
-
e.step = i, e.figure.style.setProperty("--_step", String(i)),
|
|
1978
|
+
e.step = i, e.figure.style.setProperty("--_step", String(i)), qt(e);
|
|
1826
1979
|
let [o, s] = e.controls?.querySelectorAll("button") ?? [];
|
|
1827
1980
|
o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
|
|
1828
1981
|
bubbles: !0,
|
|
@@ -1831,7 +1984,7 @@ var Xe = (e) => {
|
|
|
1831
1984
|
steps: r.count
|
|
1832
1985
|
}
|
|
1833
1986
|
}));
|
|
1834
|
-
},
|
|
1987
|
+
}, Xt = (e, t, n) => {
|
|
1835
1988
|
let r = document.createElement("div");
|
|
1836
1989
|
r.className = "tablechart-controls";
|
|
1837
1990
|
let i = (r) => {
|
|
@@ -1860,14 +2013,14 @@ var Xe = (e) => {
|
|
|
1860
2013
|
]), i;
|
|
1861
2014
|
};
|
|
1862
2015
|
return r.append(i("previous"), i("next")), r;
|
|
1863
|
-
},
|
|
2016
|
+
}, Zt = (e, t, n, r = {
|
|
1864
2017
|
x: 0,
|
|
1865
2018
|
y: 0,
|
|
1866
2019
|
scale: 1
|
|
1867
2020
|
}, i = 2, a = 8, o = 12) => {
|
|
1868
2021
|
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));
|
|
1869
2022
|
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`;
|
|
1870
|
-
},
|
|
2023
|
+
}, Qt = "tablechart-tooltip", $t = [
|
|
1871
2024
|
"--tablechart-surface",
|
|
1872
2025
|
"--_surface",
|
|
1873
2026
|
"--tablechart-tooltip-surface",
|
|
@@ -1876,65 +2029,66 @@ var Xe = (e) => {
|
|
|
1876
2029
|
"--tablechart-tooltip-radius",
|
|
1877
2030
|
"--tablechart-tooltip-padding",
|
|
1878
2031
|
"--tablechart-tooltip-shadow"
|
|
1879
|
-
], $ = null,
|
|
1880
|
-
clearTimeout(
|
|
1881
|
-
},
|
|
1882
|
-
if (
|
|
1883
|
-
|
|
1884
|
-
e.pointerType === "mouse" && (
|
|
2032
|
+
], $ = null, en, tn, nn = null, rn = null, an = 0, on = () => {
|
|
2033
|
+
clearTimeout(an), $ && nn && ($.hidden = !0, nn = null, rn = null);
|
|
2034
|
+
}, sn = !1, cn = !0, ln = NaN, un = NaN, dn = !1, fn = () => {
|
|
2035
|
+
if (dn) return;
|
|
2036
|
+
dn = !0, document.addEventListener("pointermove", (e) => {
|
|
2037
|
+
e.pointerType === "mouse" && (cn = e.screenX !== ln || e.screenY !== un, ln = e.screenX, un = e.screenY, cn && (sn = !1));
|
|
1885
2038
|
}, {
|
|
1886
2039
|
capture: !0,
|
|
1887
2040
|
passive: !0
|
|
1888
2041
|
});
|
|
1889
2042
|
let e = () => {
|
|
1890
|
-
|
|
2043
|
+
sn = !0, on();
|
|
1891
2044
|
};
|
|
1892
2045
|
document.addEventListener("keydown", e, !0), window.addEventListener("scroll", e, {
|
|
1893
2046
|
capture: !0,
|
|
1894
2047
|
passive: !0
|
|
1895
2048
|
});
|
|
1896
|
-
},
|
|
2049
|
+
}, pn = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, mn = (e) => {
|
|
1897
2050
|
let t = e.tooltipparent;
|
|
1898
2051
|
return (typeof t == "string" ? document.querySelector(t) : t) ?? document.body;
|
|
1899
|
-
},
|
|
1900
|
-
clearTimeout(
|
|
1901
|
-
},
|
|
2052
|
+
}, hn = () => {
|
|
2053
|
+
clearTimeout(an), an = window.setTimeout(on, 120);
|
|
2054
|
+
}, gn = () => {
|
|
1902
2055
|
let e = document.createElement("div");
|
|
1903
|
-
return e.className =
|
|
2056
|
+
return e.className = Qt, e.setAttribute("aria-hidden", "true"), e.hidden = !0, en = document.createElement("div"), tn = document.createElement("div"), tn.className = `${Qt}-arrow`, e.append(en, tn), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout(an)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && hn()), document.addEventListener("pointerdown", (t) => {
|
|
1904
2057
|
let n = t.target;
|
|
1905
|
-
|
|
1906
|
-
}), window.addEventListener("resize",
|
|
1907
|
-
},
|
|
2058
|
+
nn && !nn.plot.contains(n) && !e.contains(n) && on();
|
|
2059
|
+
}), window.addEventListener("resize", on), e;
|
|
2060
|
+
}, _n = (e, t) => {
|
|
1908
2061
|
let n = t ? t.style.getPropertyValue("--step") : "x";
|
|
1909
2062
|
return n === "" || Number(n) < e.step;
|
|
1910
|
-
},
|
|
1911
|
-
let n = e.svg.querySelector(`[data-series="${t + 1}"]:not(.tablechart-hole)`);
|
|
2063
|
+
}, vn = (e, t) => {
|
|
2064
|
+
let n = e.svg.querySelector(`[data-series="${t + 1}"]:not(.tablechart-hole, .tablechart-area:not([data-stacked]))`);
|
|
1912
2065
|
if (!n) return;
|
|
1913
2066
|
let r = getComputedStyle(n);
|
|
1914
2067
|
return r.fill && r.fill !== "none" ? r.fill : r.stroke;
|
|
1915
|
-
},
|
|
2068
|
+
}, yn = (e, t, n) => {
|
|
1916
2069
|
let r = e.series.length > 1, i = [];
|
|
1917
2070
|
for (let [n, a] of e.seriesValues.entries()) {
|
|
1918
|
-
if (!
|
|
2071
|
+
if (!_n(e, a[t])) continue;
|
|
1919
2072
|
let o = r ? e.figure.querySelector(`.tablechart-name[data-series="${n + 1}"]`) : null;
|
|
1920
2073
|
i.push({
|
|
1921
2074
|
name: r ? o?.textContent ?? e.series[n].name : "",
|
|
1922
2075
|
value: a[t].textContent ?? "",
|
|
1923
|
-
colour: r ?
|
|
2076
|
+
colour: r ? vn(e, n) : void 0,
|
|
1924
2077
|
sample: o ? {
|
|
1925
2078
|
marker: o.dataset.marker ?? null,
|
|
1926
2079
|
open: o.hasAttribute("data-open"),
|
|
1927
2080
|
line: o.dataset.line ?? null,
|
|
2081
|
+
point: getComputedStyle(o).getPropertyValue("--tablechart-point-color").trim(),
|
|
1928
2082
|
box: o.dataset.swatch === "box"
|
|
1929
2083
|
} : void 0
|
|
1930
2084
|
});
|
|
1931
2085
|
}
|
|
1932
2086
|
let a = e.totals[t];
|
|
1933
|
-
return i.length > 1 &&
|
|
2087
|
+
return i.length > 1 && _n(e, a) && i.push({
|
|
1934
2088
|
name: n.totallabel,
|
|
1935
2089
|
value: a.textContent ?? ""
|
|
1936
2090
|
}), i;
|
|
1937
|
-
},
|
|
2091
|
+
}, bn = (e, t) => {
|
|
1938
2092
|
if (e.type.centre && e.values[t]) return e.values[t].getBoundingClientRect();
|
|
1939
2093
|
let n = e.pointOf?.(t);
|
|
1940
2094
|
if (n) {
|
|
@@ -1954,49 +2108,49 @@ var Xe = (e) => {
|
|
|
1954
2108
|
100
|
|
1955
2109
|
];
|
|
1956
2110
|
return new DOMRect(a.left + a.width * o / 100, a.top + a.height * s / 100, a.width * c / 100, a.height * l / 100);
|
|
1957
|
-
},
|
|
1958
|
-
if (clearTimeout(
|
|
1959
|
-
let r = (e.type.tooltip ??
|
|
1960
|
-
if (!r.length) return
|
|
1961
|
-
|
|
2111
|
+
}, xn = (e, t, n) => {
|
|
2112
|
+
if (clearTimeout(an), nn === e && rn === t) return;
|
|
2113
|
+
let r = (e.type.tooltip ?? yn)(e, t, n);
|
|
2114
|
+
if (!r.length) return on();
|
|
2115
|
+
nn && nn !== e && on(), $ ?? ($ = gn());
|
|
1962
2116
|
let i = (e, t, n, r = !1, i) => {
|
|
1963
2117
|
let a = document.createElement("div");
|
|
1964
|
-
if (a.className = `${
|
|
2118
|
+
if (a.className = `${Qt}-line`, n) {
|
|
1965
2119
|
let e = document.createElement("span");
|
|
1966
|
-
e.className = `${
|
|
2120
|
+
e.className = `${Qt}-key`, e.style.backgroundColor = 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), i.point && e.style.setProperty("--tablechart-point-color", i.point), e.toggleAttribute("data-open", i.open)), a.append(e);
|
|
1967
2121
|
}
|
|
1968
2122
|
let o = document.createElement("span");
|
|
1969
|
-
if (o.className = `${
|
|
2123
|
+
if (o.className = `${Qt}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
|
|
1970
2124
|
e && o.append(":");
|
|
1971
2125
|
let n = document.createElement("span");
|
|
1972
|
-
n.className = `${
|
|
2126
|
+
n.className = `${Qt}-value`, n.textContent = t, a.append(n);
|
|
1973
2127
|
}
|
|
1974
2128
|
return a;
|
|
1975
|
-
}, 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 =
|
|
1976
|
-
className: `${
|
|
2129
|
+
}, 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 = ht(e.figure, t)?.textContent?.trim(), l = c ? [Object.assign(document.createElement("div"), {
|
|
2130
|
+
className: `${Qt}-note`,
|
|
1977
2131
|
textContent: c
|
|
1978
2132
|
})] : [];
|
|
1979
|
-
|
|
2133
|
+
en.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);
|
|
1980
2134
|
let u = getComputedStyle(e.figure);
|
|
1981
|
-
for (let e of
|
|
2135
|
+
for (let e of $t) {
|
|
1982
2136
|
let t = u.getPropertyValue(e).trim();
|
|
1983
2137
|
t ? $.style.setProperty(e, t) : $.style.removeProperty(e);
|
|
1984
2138
|
}
|
|
1985
2139
|
$.style.setProperty("--_color", u.color), $.style.colorScheme = u.colorScheme, $.style.fontFamily = u.fontFamily;
|
|
1986
|
-
let d =
|
|
1987
|
-
$.parentElement !== d && d.append($),
|
|
2140
|
+
let d = mn(n);
|
|
2141
|
+
$.parentElement !== d && d.append($), nn = e, rn = t, $.hidden = !1, $.style.left = "0px", $.style.top = "0px";
|
|
1988
2142
|
let f = $.getBoundingClientRect(), p = {
|
|
1989
2143
|
x: f.left,
|
|
1990
2144
|
y: f.top,
|
|
1991
|
-
scale:
|
|
1992
|
-
}, m =
|
|
1993
|
-
$.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`,
|
|
1994
|
-
},
|
|
2145
|
+
scale: pn($, f.width)
|
|
2146
|
+
}, m = pn(e.plot, e.plot.getBoundingClientRect().width);
|
|
2147
|
+
$.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`, Zt($, tn, bn(e, t), p);
|
|
2148
|
+
}, Sn = (e, t, n = !1) => {
|
|
1995
2149
|
let { plot: r } = e;
|
|
1996
|
-
r.setAttribute("data-hover", ""),
|
|
2150
|
+
r.setAttribute("data-hover", ""), fn();
|
|
1997
2151
|
let i = (t) => {
|
|
1998
2152
|
if (e.rowAt) {
|
|
1999
|
-
let n = r.getBoundingClientRect(), i =
|
|
2153
|
+
let n = r.getBoundingClientRect(), i = pn(r, n.width);
|
|
2000
2154
|
return e.rowAt((t.clientX - n.left) / i, (t.clientY - n.top) / i);
|
|
2001
2155
|
}
|
|
2002
2156
|
let n = t.target.closest?.("[data-row]")?.getAttribute("data-row");
|
|
@@ -2006,13 +2160,13 @@ var Xe = (e) => {
|
|
|
2006
2160
|
else if (t.getAttribute("data-row") === String(e + 1)) return !0;
|
|
2007
2161
|
return !1;
|
|
2008
2162
|
}, s = null, c = (a) => {
|
|
2009
|
-
if (a.type === "pointerdown")
|
|
2010
|
-
else if (a.pointerType === "mouse" && (!
|
|
2163
|
+
if (a.type === "pointerdown") sn = !1;
|
|
2164
|
+
else if (a.pointerType === "mouse" && (!cn || sn)) return;
|
|
2011
2165
|
if (!r.classList.contains("is-placed") || !e.figure.classList.contains("is-shown")) return;
|
|
2012
|
-
if (n && !e.figure.hasAttribute("data-left-out")) return
|
|
2166
|
+
if (n && !e.figure.hasAttribute("data-left-out")) return nn === e ? on() : void 0;
|
|
2013
2167
|
let c = i(a);
|
|
2014
|
-
if (s = c, c === null || o(c)) return
|
|
2015
|
-
|
|
2168
|
+
if (s = c, c === null || o(c)) return nn === e ? on() : void 0;
|
|
2169
|
+
xn(e, c, t);
|
|
2016
2170
|
}, l = (t) => {
|
|
2017
2171
|
let n = t.target;
|
|
2018
2172
|
return e.svg.contains(n) && n.hasAttribute("data-row") ? n : null;
|
|
@@ -2026,37 +2180,37 @@ var Xe = (e) => {
|
|
|
2026
2180
|
if (!r) return;
|
|
2027
2181
|
a.delete(r);
|
|
2028
2182
|
let i = Number(r.getAttribute("data-row")) - 1;
|
|
2029
|
-
s === i && !o(i) && !
|
|
2183
|
+
s === i && !o(i) && !sn && xn(e, i, t);
|
|
2030
2184
|
};
|
|
2031
2185
|
e.svg.addEventListener("transitionend", u), e.svg.addEventListener("transitioncancel", u), r.addEventListener("pointermove", c), r.addEventListener("pointerdown", c), r.addEventListener("pointerleave", (t) => {
|
|
2032
|
-
t.pointerType === "mouse" && (s = null,
|
|
2186
|
+
t.pointerType === "mouse" && (s = null, nn === e && hn());
|
|
2033
2187
|
});
|
|
2034
|
-
},
|
|
2035
|
-
|
|
2036
|
-
},
|
|
2037
|
-
area:
|
|
2038
|
-
bar:
|
|
2039
|
-
column:
|
|
2040
|
-
donut:
|
|
2041
|
-
line:
|
|
2042
|
-
waterfall:
|
|
2043
|
-
},
|
|
2044
|
-
|
|
2045
|
-
},
|
|
2046
|
-
"axis-break":
|
|
2047
|
-
trend:
|
|
2048
|
-
bracket:
|
|
2049
|
-
reference:
|
|
2050
|
-
note:
|
|
2051
|
-
},
|
|
2188
|
+
}, Cn = (e) => {
|
|
2189
|
+
nn === e && on();
|
|
2190
|
+
}, wn = {
|
|
2191
|
+
area: lt,
|
|
2192
|
+
bar: We,
|
|
2193
|
+
column: Ge,
|
|
2194
|
+
donut: Je,
|
|
2195
|
+
line: ct,
|
|
2196
|
+
waterfall: ft
|
|
2197
|
+
}, Tn = (e, t) => {
|
|
2198
|
+
wn[e] = t, Object.assign(En, t.annotations), Dn.splice(0, Infinity, ...Object.keys(En));
|
|
2199
|
+
}, En = {
|
|
2200
|
+
"axis-break": K,
|
|
2201
|
+
trend: Ne,
|
|
2202
|
+
bracket: fe,
|
|
2203
|
+
reference: je,
|
|
2204
|
+
note: ke
|
|
2205
|
+
}, Dn = Object.keys(En), On = (e) => {
|
|
2052
2206
|
let t = "";
|
|
2053
2207
|
for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
|
|
2054
2208
|
return t.trim();
|
|
2055
|
-
},
|
|
2209
|
+
}, kn = [
|
|
2056
2210
|
"straight",
|
|
2057
2211
|
"step",
|
|
2058
2212
|
"smooth"
|
|
2059
|
-
],
|
|
2213
|
+
], An = (e, t, n, r, i) => {
|
|
2060
2214
|
let a = t === r, [o, s, c] = a ? [
|
|
2061
2215
|
Math.min(e, n),
|
|
2062
2216
|
Math.max(e, n),
|
|
@@ -2068,16 +2222,16 @@ var Xe = (e) => {
|
|
|
2068
2222
|
], 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;
|
|
2069
2223
|
for (let [e, t] of l) e > d && u.push([d, Math.min(e, s)]), d = Math.max(d, t);
|
|
2070
2224
|
return d < s && u.push([d, s]), u.map(([e, t]) => a ? `M${P(e)},${P(c)}H${P(t)}` : `M${P(c)},${P(e)}V${P(t)}`).join("");
|
|
2071
|
-
},
|
|
2225
|
+
}, jn = (e, t) => {
|
|
2072
2226
|
let [n, r, i, a] = [
|
|
2073
2227
|
"x1",
|
|
2074
2228
|
"y1",
|
|
2075
2229
|
"x2",
|
|
2076
2230
|
"y2"
|
|
2077
|
-
].map((t) => Number(e.getAttribute(t))), o = F("path", { d:
|
|
2231
|
+
].map((t) => Number(e.getAttribute(t))), o = F("path", { d: An(n, r, i, a, t) });
|
|
2078
2232
|
for (let { name: t, value: n } of Array.from(e.attributes)) /^[xy][12]$/.test(t) || o.setAttribute(t, n);
|
|
2079
2233
|
e.replaceWith(o);
|
|
2080
|
-
},
|
|
2234
|
+
}, Mn = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
|
|
2081
2235
|
+e,
|
|
2082
2236
|
+t,
|
|
2083
2237
|
+r,
|
|
@@ -2087,19 +2241,19 @@ var Xe = (e) => {
|
|
|
2087
2241
|
+t,
|
|
2088
2242
|
+e,
|
|
2089
2243
|
+r
|
|
2090
|
-
]),
|
|
2244
|
+
]), Nn = (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${P(Math.max(e, t))},${P(a)}H${P(Math.min(o, t + r))}` : "" : t <= e && e <= t + r && Math.max(a, n) < Math.min(s, n + i) ? `M${P(e)},${P(Math.max(a, n))}V${P(Math.min(s, n + i))}` : "").join(""), Pn = (e, t, n) => {
|
|
2091
2245
|
let r = e.getAttribute(t);
|
|
2092
2246
|
return r === null ? n : r !== "false";
|
|
2093
|
-
},
|
|
2247
|
+
}, Fn = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", In = (e, t) => {
|
|
2094
2248
|
let n = e.dataset.chartShape;
|
|
2095
|
-
return n &&
|
|
2096
|
-
},
|
|
2249
|
+
return n && kn.includes(n) ? n : kn.includes(t.shape) ? t.shape : "straight";
|
|
2250
|
+
}, Ln = (e) => {
|
|
2097
2251
|
for (let t of e.querySelectorAll("br")) {
|
|
2098
|
-
if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(
|
|
2252
|
+
if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(On(t))) continue;
|
|
2099
2253
|
let e = document.createElement("span");
|
|
2100
2254
|
e.className = y, e.textContent = ". ", t.before(e);
|
|
2101
2255
|
}
|
|
2102
|
-
},
|
|
2256
|
+
}, Rn = (e, t, n) => {
|
|
2103
2257
|
let r = e.querySelector("table");
|
|
2104
2258
|
if (!r) return null;
|
|
2105
2259
|
let i = r.querySelector("tfoot [data-chart-total]");
|
|
@@ -2110,23 +2264,43 @@ var Xe = (e) => {
|
|
|
2110
2264
|
s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
|
|
2111
2265
|
let c = a.insertCell();
|
|
2112
2266
|
return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
|
|
2113
|
-
},
|
|
2267
|
+
}, zn = 0, Bn = (e) => {
|
|
2114
2268
|
let t = e.querySelector(":scope > figcaption");
|
|
2115
2269
|
if (!t) return;
|
|
2116
|
-
|
|
2270
|
+
Ln(t);
|
|
2117
2271
|
let n = (e) => e.hasAttribute("aria-label") || e.hasAttribute("aria-labelledby"), r = (e) => {
|
|
2118
|
-
t.id || (t.id = `tablechart-caption-${++
|
|
2272
|
+
t.id || (t.id = `tablechart-caption-${++zn}`), e.setAttribute("aria-labelledby", t.id);
|
|
2119
2273
|
};
|
|
2120
2274
|
e.tagName === "FIGURE" && !n(e) && r(e);
|
|
2121
2275
|
let i = e.querySelector("table");
|
|
2122
2276
|
i && !n(i) && !i.querySelector(":scope > caption") && r(i);
|
|
2123
|
-
},
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2277
|
+
}, Vn = [
|
|
2278
|
+
null,
|
|
2279
|
+
"dashed",
|
|
2280
|
+
"dotted",
|
|
2281
|
+
"dash-dot"
|
|
2282
|
+
], Hn = (t, n, r, i) => {
|
|
2283
|
+
let a = t.closest("[data-chart-lines]")?.getAttribute("data-chart-lines"), o = i.lines;
|
|
2284
|
+
if (a) try {
|
|
2285
|
+
o = JSON.parse(a);
|
|
2286
|
+
} catch {
|
|
2287
|
+
console.warn(`[${e}] data-chart-lines needs a JSON list, such as [{"marker":"none"}].`, t);
|
|
2288
|
+
}
|
|
2289
|
+
(r === "line" || r === "area" ? n : n.filter((e) => e.chart)).forEach((e, t) => {
|
|
2290
|
+
if (!o?.length) {
|
|
2291
|
+
e.line ?? (e.line = Vn[Math.floor(t / 6) % Vn.length]);
|
|
2292
|
+
return;
|
|
2293
|
+
}
|
|
2294
|
+
let n = o[t % o.length];
|
|
2295
|
+
e.marker ?? (e.marker = n.marker || n.open !== void 0 ? [n.marker, n.open ? "open" : "filled"].filter(Boolean).join(" ") : null), e.line === null && n.line !== "solid" && (e.line = n.line ?? null);
|
|
2296
|
+
});
|
|
2297
|
+
}, Un = (r, i, a = null) => {
|
|
2298
|
+
let o = a ?? (r.getAttribute("data-chart") || "column"), s = wn[o];
|
|
2299
|
+
if (!s) return console.warn(`[${e}] Unknown chart type "${o}". Known types: ${Object.keys(wn).join(", ")}.`), r.setAttribute("data-chart-empty", ""), null;
|
|
2300
|
+
let c = gt(r, i.langattribute);
|
|
2127
2301
|
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;
|
|
2128
|
-
|
|
2129
|
-
let l =
|
|
2302
|
+
Bn(r);
|
|
2303
|
+
let l = yt(r, c, i.langattribute);
|
|
2130
2304
|
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)) {
|
|
2131
2305
|
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.`;
|
|
2132
2306
|
t && (console.warn(`[${e}] ${t}`), l = l.map((e) => ({
|
|
@@ -2134,6 +2308,7 @@ var Xe = (e) => {
|
|
|
2134
2308
|
chart: null
|
|
2135
2309
|
})));
|
|
2136
2310
|
}
|
|
2311
|
+
Hn(r, l, o, i);
|
|
2137
2312
|
let u = l.some((e) => e.chart), d = l.length > 1;
|
|
2138
2313
|
d && r.style.setProperty("--_series-count", String(l.length));
|
|
2139
2314
|
let m = r.hasAttribute("data-chart-stack");
|
|
@@ -2147,14 +2322,14 @@ var Xe = (e) => {
|
|
|
2147
2322
|
_.appendChild(v);
|
|
2148
2323
|
let y = r.querySelector(":scope > table"), b = (e) => y ? y.before(e) : r.append(e);
|
|
2149
2324
|
b(_);
|
|
2150
|
-
let x = s.centre ? c.filter((e) => !e.isTotal) : c, S = Math.max(0,
|
|
2325
|
+
let x = s.centre ? c.filter((e) => !e.isTotal) : c, S = Math.max(0, q(x.flatMap((e) => e.cells.slice(0, l.length).map((e) => ie(e.number))))), C = l.map((e, t) => Math.max(0, q(c.map((e) => ie(e.cells[t]?.number ?? ""))))), w = document.createElement("div");
|
|
2151
2326
|
w.className = "tablechart-values", _.appendChild(w);
|
|
2152
2327
|
let D = l.map((e, t) => c.map((e, r) => {
|
|
2153
2328
|
let i = e.cells[t] ?? e.cells[0], a = L(n, w);
|
|
2154
2329
|
return a.classList.add(...e.classes), a.dataset.value = String(i.value), i.prefix && (a.dataset.prefix = i.prefix), i.suffix && (a.dataset.suffix = i.suffix), i.missing && (a.dataset.missing = i.raw), d && (a.dataset.series = String(t + 1)), s.columns && (a.dataset.decimals = String(C[t])), a.dataset.row = String(r + 1), a.style.setProperty("--i", String(e.slot)), s.numbers === !1 && (t || r) && (a.dataset.place = "none"), a;
|
|
2155
2330
|
})), O = D[0], k = h && s.totals ? c.map((e, t) => {
|
|
2156
2331
|
let r = L(n, w);
|
|
2157
|
-
r.classList.add(...e.classes), r.dataset.kind = "total", r.dataset.row = String(t + 1), r.dataset.value = String(
|
|
2332
|
+
r.classList.add(...e.classes), r.dataset.kind = "total", r.dataset.row = String(t + 1), r.dataset.value = String(ze(e, l.length));
|
|
2158
2333
|
let i = e.cells[0];
|
|
2159
2334
|
return i.prefix && (r.dataset.prefix = i.prefix), i.suffix && (r.dataset.suffix = i.suffix), r.style.setProperty("--i", String(e.slot)), r;
|
|
2160
2335
|
}) : [], A = c[c.length - 1], j = l.some((e) => e.focus), M = r.getAttribute("data-chart-legend"), N = d && !s.columns && (M === null ? i.legend || s.legend !== void 0 : M !== "false") ? document.createElement("div") : null;
|
|
@@ -2163,17 +2338,17 @@ var Xe = (e) => {
|
|
|
2163
2338
|
let n = L(f, N ?? _);
|
|
2164
2339
|
N && (n.dataset.place = "legend");
|
|
2165
2340
|
let a = e.chart ? void 0 : s.legend ?? s.swatch;
|
|
2166
|
-
if (a && (n.dataset.swatch = a), n.textContent = e.name, !a &&
|
|
2167
|
-
let r = e.chart ?
|
|
2341
|
+
if (a && (n.dataset.swatch = a), n.textContent = e.name, !a && In(r, i) !== "step") {
|
|
2342
|
+
let r = e.chart ? Ye(P, P.indexOf(e)) : Ye(l, t);
|
|
2168
2343
|
n.dataset.marker = r.shape, n.toggleAttribute("data-open", r.open);
|
|
2169
2344
|
}
|
|
2170
2345
|
return e.line && !a && (n.dataset.line = e.line), e.key && i.langattribute && n.setAttribute(i.langattribute, e.key), n.dataset.series = String(t + 1), n.style.setProperty("--n", String(t)), n.style.setProperty("--palette", `var(--tablechart-color-${t + 1})`), n.style.setProperty("--m", j && !e.focus ? "1" : "0"), n.style.setProperty("--i", String(A.slot)), n;
|
|
2171
2346
|
}) : [], R = s.centre ? L(g, _) : null;
|
|
2172
2347
|
if (R) {
|
|
2173
2348
|
let e = c.find((e) => e.isTotal), t = e ? e.value : c.reduce((e, t) => e + Math.abs(t.value), 0);
|
|
2174
|
-
R.dataset.value = String(t), e && (R.dataset.decimals = String(
|
|
2349
|
+
R.dataset.value = String(t), e && (R.dataset.decimals = String(ie(e.number)));
|
|
2175
2350
|
}
|
|
2176
|
-
let z = R && !c.some((e) => e.isTotal) ?
|
|
2351
|
+
let z = R && !c.some((e) => e.isTotal) ? Rn(r, R, i) : null, B = s.categories === "beside", V = document.createElement("div");
|
|
2177
2352
|
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));
|
|
2178
2353
|
let H = 0;
|
|
2179
2354
|
for (let [e, t] of c.entries()) {
|
|
@@ -2181,17 +2356,17 @@ var Xe = (e) => {
|
|
|
2181
2356
|
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);
|
|
2182
2357
|
}
|
|
2183
2358
|
s.centre && r.style.setProperty("--_slice-count", String(H)), B ? _.appendChild(V) : b(V), N && b(N);
|
|
2184
|
-
let U = l.filter((e) => !e.group),
|
|
2359
|
+
let U = l.filter((e) => !e.group), W = !s.axes && !s.centre && Pn(r, "data-chart-axis", i.axis), ee = s.axes ? {
|
|
2185
2360
|
titles: U.slice(0, 2).map((e, t) => {
|
|
2186
2361
|
let n = L(`${T}-title`, _);
|
|
2187
2362
|
return n.dataset.axis = t ? "y" : "x", n.textContent = e.name, e.key && i.langattribute && n.setAttribute(i.langattribute, e.key), n;
|
|
2188
2363
|
}),
|
|
2189
2364
|
ticks: L(`${E}s`, _),
|
|
2190
2365
|
numbers: !0
|
|
2191
|
-
} :
|
|
2366
|
+
} : W || !s.centre && Pn(r, "data-chart-grid", i.grid) ? {
|
|
2192
2367
|
titles: [],
|
|
2193
2368
|
ticks: L(`${E}s`, _),
|
|
2194
|
-
numbers:
|
|
2369
|
+
numbers: W
|
|
2195
2370
|
} : null;
|
|
2196
2371
|
s.text?.({
|
|
2197
2372
|
figure: r,
|
|
@@ -2200,9 +2375,9 @@ var Xe = (e) => {
|
|
|
2200
2375
|
series: l,
|
|
2201
2376
|
config: i
|
|
2202
2377
|
});
|
|
2203
|
-
let
|
|
2204
|
-
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),
|
|
2205
|
-
let ne = r.getAttribute("data-chart-keys"),
|
|
2378
|
+
let te = Fn(r, i) ? Kt(r, !!s.axes) : null;
|
|
2379
|
+
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), te && r.setAttribute("data-steps", "");
|
|
2380
|
+
let ne = r.getAttribute("data-chart-keys"), re = te && i.controls ? Xt({
|
|
2206
2381
|
previous: i.previouslabel,
|
|
2207
2382
|
next: i.nextlabel,
|
|
2208
2383
|
hint: i.stephint
|
|
@@ -2211,10 +2386,10 @@ var Xe = (e) => {
|
|
|
2211
2386
|
next: ne && `${ne}-next`,
|
|
2212
2387
|
hint: ne && `${ne}-step`
|
|
2213
2388
|
}, i.langattribute) : null;
|
|
2214
|
-
|
|
2215
|
-
let
|
|
2216
|
-
let n = t.getAttribute("data-annotation"), r =
|
|
2217
|
-
if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(
|
|
2389
|
+
re && b(re);
|
|
2390
|
+
let G = Array.from(r.querySelectorAll("[data-annotation]")).map((t) => {
|
|
2391
|
+
let n = t.getAttribute("data-annotation"), r = En[n];
|
|
2392
|
+
if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(En).join(", ")}.`), null;
|
|
2218
2393
|
let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= l.length ? i - 1 : 0;
|
|
2219
2394
|
return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which is not there; it reads line 1.`), {
|
|
2220
2395
|
spec: t,
|
|
@@ -2227,16 +2402,16 @@ var Xe = (e) => {
|
|
|
2227
2402
|
if (!B && !s.centre && !s.axes) for (let [e, t] of c.entries()) {
|
|
2228
2403
|
if (!t.note) continue;
|
|
2229
2404
|
let n = document.createElement("span");
|
|
2230
|
-
n.dataset.annotation = "note", n.dataset.row = String(e + 1), n.textContent = t.note, t.noteKey && n.setAttribute("data-i18n", t.noteKey),
|
|
2405
|
+
n.dataset.annotation = "note", n.dataset.row = String(e + 1), n.textContent = t.note, t.noteKey && n.setAttribute("data-i18n", t.noteKey), G.push({
|
|
2231
2406
|
spec: n,
|
|
2232
|
-
type:
|
|
2233
|
-
badge:
|
|
2407
|
+
type: ke,
|
|
2408
|
+
badge: ke.create(n, _),
|
|
2234
2409
|
series: 0,
|
|
2235
2410
|
after: c.length
|
|
2236
2411
|
});
|
|
2237
2412
|
}
|
|
2238
|
-
|
|
2239
|
-
let
|
|
2413
|
+
Fn(r, i) && r.setAttribute("data-animate", Kn(r, o, i, !!te));
|
|
2414
|
+
let K = {
|
|
2240
2415
|
figure: r,
|
|
2241
2416
|
plot: _,
|
|
2242
2417
|
svg: v,
|
|
@@ -2249,45 +2424,45 @@ var Xe = (e) => {
|
|
|
2249
2424
|
names: N ? [] : I,
|
|
2250
2425
|
categories: Array.from(V.children),
|
|
2251
2426
|
centre: R,
|
|
2252
|
-
axes:
|
|
2427
|
+
axes: ee,
|
|
2253
2428
|
stacked: h,
|
|
2254
2429
|
totals: k,
|
|
2255
2430
|
totalCell: z,
|
|
2256
2431
|
rowAt: null,
|
|
2257
2432
|
rowBox: null,
|
|
2258
2433
|
pointOf: null,
|
|
2259
|
-
annotations:
|
|
2434
|
+
annotations: G,
|
|
2260
2435
|
checks: [],
|
|
2261
|
-
plan:
|
|
2436
|
+
plan: te,
|
|
2262
2437
|
step: 0,
|
|
2263
|
-
controls:
|
|
2264
|
-
}, ae = () =>
|
|
2265
|
-
v.addEventListener("transitionend", ae), v.addEventListener("transitioncancel", ae),
|
|
2438
|
+
controls: re
|
|
2439
|
+
}, ae = () => sr(r, v);
|
|
2440
|
+
v.addEventListener("transitionend", ae), v.addEventListener("transitioncancel", ae), re?.addEventListener("click", (e) => {
|
|
2266
2441
|
let t = e.target.closest("button")?.dataset.go;
|
|
2267
|
-
t &&
|
|
2268
|
-
}),
|
|
2442
|
+
t && Yt(K, K.step + (t === "next" ? 1 : -1));
|
|
2443
|
+
}), Yt(K, 0, !0);
|
|
2269
2444
|
let oe = r.getAttribute("data-chart-tooltip"), se = oe === "false" ? !1 : oe === "auto" ? "auto" : oe !== null || i.tooltip;
|
|
2270
|
-
return se &&
|
|
2271
|
-
},
|
|
2445
|
+
return se && Sn(K, i, se === "auto"), nr(K, i), K;
|
|
2446
|
+
}, Wn = {
|
|
2272
2447
|
grow: "grow",
|
|
2273
2448
|
sweep: "sweep"
|
|
2274
|
-
},
|
|
2449
|
+
}, Gn = [
|
|
2275
2450
|
"never",
|
|
2276
2451
|
"auto",
|
|
2277
2452
|
"print",
|
|
2278
2453
|
"always"
|
|
2279
|
-
],
|
|
2280
|
-
let i = t === "line" || t === "area", a =
|
|
2454
|
+
], Kn = (e, t, n, r) => {
|
|
2455
|
+
let i = t === "line" || t === "area", a = Wn[e.getAttribute("data-chart-animate") ?? ""] ?? Wn[String(n.animate)];
|
|
2281
2456
|
return i ? r ? "sweep" : a ?? "sweep" : t === "donut" || t === "waterfall" ? a ?? "grow" : "grow";
|
|
2282
|
-
},
|
|
2457
|
+
}, qn = (e) => {
|
|
2283
2458
|
let t = getComputedStyle(e).getPropertyValue("--tablechart-value-align").trim();
|
|
2284
2459
|
return t === "start" || t === "center" || t === "end" ? t : null;
|
|
2285
|
-
},
|
|
2460
|
+
}, Jn = (e, t, n) => e.dataset.chartLabels === "inside" || e.dataset.chartLabels !== "outside" && (t.labels === "inside" || n) ? "inside" : "outside", Yn = (e, t, n, r) => {
|
|
2286
2461
|
let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
|
|
2287
2462
|
if (!a) return null;
|
|
2288
2463
|
let o = Number(a[1]);
|
|
2289
2464
|
return a[2] === "%" ? o / 100 * O : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
|
|
2290
|
-
},
|
|
2465
|
+
}, Xn = (e, t) => Yn(e, t, "--tablechart-bar-max", "60px") ?? Infinity, Zn = (e, t) => {
|
|
2291
2466
|
let n = e.getBoundingClientRect(), r = O / n.width, i = getComputedStyle(e), a = Number.parseFloat(i.lineHeight) / Number.parseFloat(i.fontSize) || 1.2;
|
|
2292
2467
|
return (e) => {
|
|
2293
2468
|
if (e.dataset.place === "none" || e.hidden || e.hasAttribute("data-left-out")) return [];
|
|
@@ -2302,21 +2477,21 @@ var Xe = (e) => {
|
|
|
2302
2477
|
style: s.join("; ")
|
|
2303
2478
|
})] : [];
|
|
2304
2479
|
};
|
|
2305
|
-
},
|
|
2480
|
+
}, Qn = [
|
|
2306
2481
|
"first",
|
|
2307
2482
|
"last",
|
|
2308
2483
|
"highest",
|
|
2309
2484
|
"lowest",
|
|
2310
2485
|
"outliers"
|
|
2311
|
-
],
|
|
2486
|
+
], $n = (t, n) => {
|
|
2312
2487
|
let r = (t.getAttribute("data-chart-values") ?? n.values).trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
2313
2488
|
for (let t of r) [
|
|
2314
2489
|
"auto",
|
|
2315
2490
|
"all",
|
|
2316
2491
|
"none",
|
|
2317
|
-
...
|
|
2318
|
-
].includes(t) || console.warn(`[${e}] data-chart-values knows no "${t}". It takes auto, all, none, ${
|
|
2319
|
-
let i = r.filter((e) =>
|
|
2492
|
+
...Qn
|
|
2493
|
+
].includes(t) || console.warn(`[${e}] data-chart-values knows no "${t}". It takes auto, all, none, ${Qn.join(", ")}.`);
|
|
2494
|
+
let i = r.filter((e) => Qn.includes(e));
|
|
2320
2495
|
return r.includes("all") ? {
|
|
2321
2496
|
mode: "all",
|
|
2322
2497
|
keys: []
|
|
@@ -2325,19 +2500,19 @@ var Xe = (e) => {
|
|
|
2325
2500
|
keys: []
|
|
2326
2501
|
} : r.includes("auto") || !i.length ? {
|
|
2327
2502
|
mode: "auto",
|
|
2328
|
-
keys: i.length ? i :
|
|
2503
|
+
keys: i.length ? i : Qn
|
|
2329
2504
|
} : {
|
|
2330
2505
|
mode: "set",
|
|
2331
2506
|
keys: i
|
|
2332
2507
|
};
|
|
2333
|
-
},
|
|
2334
|
-
let i = e.getAttribute("data-chart-table"), a = i &&
|
|
2508
|
+
}, er = ({ figure: e, rows: t, series: n }, r) => {
|
|
2509
|
+
let i = e.getAttribute("data-chart-table"), a = i && Gn.includes(i) ? i : r.table;
|
|
2335
2510
|
a === "never" ? e.removeAttribute("data-table") : e.setAttribute("data-table", a);
|
|
2336
2511
|
let o = e.getAttribute("data-chart-summary");
|
|
2337
|
-
e.setAttribute("data-summary", o &&
|
|
2338
|
-
},
|
|
2512
|
+
e.setAttribute("data-summary", o && Gn.includes(o) ? o : r.summary), e.toggleAttribute("data-long", t.length * n.filter((e) => !e.group).length > r.tablelimit);
|
|
2513
|
+
}, tr = (t, n) => {
|
|
2339
2514
|
let { plot: r, svg: i, rows: l, type: m, values: g, series: _, seriesValues: y, names: b, annotations: x } = t;
|
|
2340
|
-
|
|
2515
|
+
er(t, n);
|
|
2341
2516
|
let S = getComputedStyle(t.figure);
|
|
2342
2517
|
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());
|
|
2343
2518
|
let C = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), w = 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;
|
|
@@ -2345,7 +2520,7 @@ var Xe = (e) => {
|
|
|
2345
2520
|
r.style.margin = "", j && (j.style.marginLeft = "");
|
|
2346
2521
|
let e = r.clientWidth;
|
|
2347
2522
|
if (!e) return !1;
|
|
2348
|
-
let i = m.segments?.(l) ?? [], a = t.stacked ? l.flatMap((e) => Object.values(
|
|
2523
|
+
let i = m.segments?.(l) ?? [], a = t.stacked ? l.flatMap((e) => Object.values(Re(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, -q(a.map((e) => -e))), s = Math.max(0, q(a)), c = Number.parseFloat(getComputedStyle(r).fontSize) || 16, { chartScaleY: u, chartScale: d } = t.figure.dataset, f = Tt(u ?? d);
|
|
2349
2524
|
if (f && f.length > 2) M = {
|
|
2350
2525
|
min: f[0],
|
|
2351
2526
|
max: f[f.length - 1],
|
|
@@ -2353,24 +2528,24 @@ var Xe = (e) => {
|
|
|
2353
2528
|
ticks: f
|
|
2354
2529
|
};
|
|
2355
2530
|
else {
|
|
2356
|
-
let [t, n] = f ?? [o, s], r =
|
|
2531
|
+
let [t, n] = f ?? [o, s], r = St(n - t, Math.max((k ? e / 9 : e * w / 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);
|
|
2357
2532
|
M = {
|
|
2358
2533
|
min: a,
|
|
2359
2534
|
max: l,
|
|
2360
2535
|
step: r,
|
|
2361
|
-
ticks:
|
|
2536
|
+
ticks: Ct(a, l, r)
|
|
2362
2537
|
};
|
|
2363
2538
|
}
|
|
2364
2539
|
A.ticks.textContent = "";
|
|
2365
|
-
let p = l.find((e) => !e.missing), h =
|
|
2540
|
+
let p = l.find((e) => !e.missing), h = q(M.ticks.map((e) => ie(String(e))));
|
|
2366
2541
|
for (let e of M.ticks) {
|
|
2367
2542
|
let t = L(E, A.ticks);
|
|
2368
|
-
t.dataset.value = String(e), t.dataset.place = "none", p?.prefix && (t.dataset.prefix = p.prefix), p?.suffix && (t.dataset.suffix = p.suffix),
|
|
2543
|
+
t.dataset.value = String(e), t.dataset.place = "none", p?.prefix && (t.dataset.prefix = p.prefix), p?.suffix && (t.dataset.suffix = p.suffix), rr(t, h, n.locale);
|
|
2369
2544
|
}
|
|
2370
2545
|
if (A.numbers) {
|
|
2371
2546
|
let e = Array.from(A.ticks.children);
|
|
2372
2547
|
for (let t of e) delete t.dataset.place;
|
|
2373
|
-
|
|
2548
|
+
_e(e), k ? r.style.marginBottom = `${(e[0] ? J(e[0]).height : 0) + 6}px` : (r.style.marginLeft = `${q([0, ...e.map((e) => J(e).width)]) + 10}px`, j && (j.style.marginLeft = r.style.marginLeft));
|
|
2374
2549
|
}
|
|
2375
2550
|
}
|
|
2376
2551
|
let N = r.clientWidth;
|
|
@@ -2382,37 +2557,37 @@ var Xe = (e) => {
|
|
|
2382
2557
|
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");
|
|
2383
2558
|
let V = m.axes ? t.axes : null, H = [];
|
|
2384
2559
|
if (V) {
|
|
2385
|
-
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 = [
|
|
2386
|
-
H = i.map((t, n) =>
|
|
2387
|
-
let r = a[0]?.cells[i[t]], o =
|
|
2560
|
+
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 = [Tt(o), Tt(s ?? c)];
|
|
2561
|
+
H = i.map((t, n) => Et(a.length ? a.map((e) => e.cells[t].value) : [0, 1], Math.max(n ? z / I / (e * 4) : N / (e * 9), 4), u[n])), V.ticks.textContent = "", H.forEach((e, t) => {
|
|
2562
|
+
let r = a[0]?.cells[i[t]], o = q(e.ticks.map((e) => ie(String(e))));
|
|
2388
2563
|
for (let i of e.ticks) {
|
|
2389
2564
|
let e = L(E, V.ticks);
|
|
2390
|
-
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),
|
|
2565
|
+
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), rr(e, o, n.locale);
|
|
2391
2566
|
}
|
|
2392
2567
|
});
|
|
2393
2568
|
}
|
|
2394
|
-
let
|
|
2395
|
-
|
|
2569
|
+
let W = V ? Array.from(V.ticks.children) : [];
|
|
2570
|
+
_e([
|
|
2396
2571
|
...y.flat(),
|
|
2397
2572
|
...t.totals,
|
|
2398
2573
|
...b,
|
|
2399
2574
|
...t.categories,
|
|
2400
2575
|
...x.map((e) => e.badge),
|
|
2401
2576
|
...V?.titles ?? [],
|
|
2402
|
-
...
|
|
2577
|
+
...W
|
|
2403
2578
|
]);
|
|
2404
|
-
let
|
|
2579
|
+
let ee = (g[0] ? J(g[0]).height : 0) * I;
|
|
2405
2580
|
m.numbers === !1 && g[0] && (g[0].dataset.place = "none");
|
|
2406
|
-
let
|
|
2407
|
-
labelHeight:
|
|
2408
|
-
nameHeight: Math.max(0,
|
|
2581
|
+
let re = x[0]?.badge ? J(x[0].badge).height * I : 0, G = Math.max(z, Yn(t.figure, I, "--tablechart-min-height", "200px") ?? 0, m.minHeight?.({
|
|
2582
|
+
labelHeight: ee,
|
|
2583
|
+
nameHeight: Math.max(0, q(t.categories.map((e) => J(e).height))) * I,
|
|
2409
2584
|
unit: I,
|
|
2410
2585
|
rows: l.length,
|
|
2411
2586
|
series: _.length,
|
|
2412
2587
|
stacked: t.stacked,
|
|
2413
|
-
labels:
|
|
2414
|
-
}) ?? 0),
|
|
2415
|
-
let t =
|
|
2588
|
+
labels: Jn(t.figure, n, _.some((e) => e.chart))
|
|
2589
|
+
}) ?? 0), K = t.stacked ? l.map((e) => {
|
|
2590
|
+
let t = ze(e, _.length);
|
|
2416
2591
|
return {
|
|
2417
2592
|
...e,
|
|
2418
2593
|
value: t,
|
|
@@ -2421,120 +2596,122 @@ var Xe = (e) => {
|
|
|
2421
2596
|
value: t
|
|
2422
2597
|
} : e)
|
|
2423
2598
|
};
|
|
2424
|
-
}) : l,
|
|
2599
|
+
}) : l, ae = (m.segments ?? ((e) => e.map((e) => ({
|
|
2425
2600
|
...e,
|
|
2426
2601
|
from: 0,
|
|
2427
2602
|
to: e.value,
|
|
2428
2603
|
kind: "bar"
|
|
2429
|
-
}))))(t.stacked ?
|
|
2604
|
+
}))))(t.stacked ? K.map((e) => ({
|
|
2430
2605
|
...e,
|
|
2431
2606
|
cells: [e.cells[0]]
|
|
2432
|
-
})) : l),
|
|
2433
|
-
labelHeight:
|
|
2434
|
-
badgeHeight:
|
|
2607
|
+
})) : l), oe = {
|
|
2608
|
+
labelHeight: ee,
|
|
2609
|
+
badgeHeight: re,
|
|
2435
2610
|
hasAnnotations: x.length > 0,
|
|
2436
2611
|
unit: I,
|
|
2437
2612
|
series: _.length,
|
|
2438
2613
|
focused: _.some((e) => e.focus),
|
|
2439
2614
|
stacked: t.stacked
|
|
2440
|
-
},
|
|
2615
|
+
}, se = Math.max(((e) => t.stacked ? e(l.map((e) => Re(e, _.length, m.running).top)) : e([...ae.flatMap((e) => [
|
|
2441
2616
|
e.from,
|
|
2442
2617
|
e.to,
|
|
2443
2618
|
e.value
|
|
2444
|
-
]), ...l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value))]))(
|
|
2445
|
-
let t = Number.parseFloat(
|
|
2619
|
+
]), ...l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value))]))(q), 0), ce = ae.some((e) => e.kind === "up" || e.kind === "down") ? ae.flatMap((e) => [e.from, e.to]) : t.stacked ? l.map((e) => Re(e, _.length, m.running).bottom) : l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value)), le = Math.min(-q(ce.map((e) => -e)), 0), ue = _.flatMap((e, t) => e.chart ? [t] : []), de = l.some((e) => e.note) ? re + 4 * I : 0, fe = Math.max(m.headroom?.(oe) ?? ee, ue.length ? ct.headroom?.(oe) ?? 0 : 0) + de, pe = 2 * I + (m.footroom?.(oe) ?? 0) + (le < 0 ? ee + 4 * I : 0), me = G - fe - pe, he = M ? Math.max(M.max, se) : se * 1.02, ge = M ? Math.min(M.min, le) : le * 1.02, ve = x.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, ye = (e) => {
|
|
2620
|
+
let t = Number.parseFloat(ve?.getAttribute(e) ?? "");
|
|
2446
2621
|
return Number.isFinite(t) ? t : null;
|
|
2447
|
-
}, be =
|
|
2448
|
-
if (
|
|
2449
|
-
let t = be ?? 0, n = xe ?? he, r = xe === null ? t : be === null ? n : (t + n) / 2, i =
|
|
2622
|
+
}, be = ye("data-from") ?? ye("data-at"), xe = ye("data-to"), Ce = null;
|
|
2623
|
+
if (ve && (be !== null || xe !== null)) {
|
|
2624
|
+
let t = be ?? 0, n = xe ?? he, r = xe === null ? t : be === null ? n : (t + n) / 2, i = ve.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
|
|
2450
2625
|
i !== null && !a && console.warn(`[${e}] data-size="${i}" is not a percentage, such as 30%. Using the default.`);
|
|
2451
|
-
let o = Math.min(Math.max(a ? Number(a[1]) / 100 : xe === null ? .22 : .3, .05), .8), s =
|
|
2452
|
-
m.breakable ?
|
|
2626
|
+
let o = Math.min(Math.max(a ? Number(a[1]) / 100 : xe === null ? .22 : .3, .05), .8), s = ae.filter((e) => (e.kind === "up" || e.kind === "down") && Math.max(e.from, e.to) > t && Math.min(e.from, e.to) < n);
|
|
2627
|
+
m.breakable ? le < 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 ${se}.`) : s.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : Ce = {
|
|
2453
2628
|
lo: t,
|
|
2454
2629
|
hi: n,
|
|
2455
2630
|
gap: r,
|
|
2456
2631
|
share: o
|
|
2457
2632
|
} : console.warn(`[${e}] This kind of chart cannot break its scale.`);
|
|
2458
2633
|
}
|
|
2459
|
-
let we =
|
|
2460
|
-
if (
|
|
2461
|
-
let { lo: e, hi: t, gap: n, share: r } =
|
|
2462
|
-
|
|
2634
|
+
let we = Ce ? Ce.gap : null, Te = (Ce && Yn(t.figure, I, "--tablechart-break-gap", "")) ?? 13, Oe = G - pe, ke = he - ge || 1, Ae = (e) => Oe - (e - ge) / ke * me;
|
|
2635
|
+
if (Ce) {
|
|
2636
|
+
let { lo: e, hi: t, gap: n, share: r } = Ce, i = me * r, a = (me - i - Te) / (e + (he - t)), o = i / (t - e);
|
|
2637
|
+
Ae = (r) => r <= e ? Oe - r * a : r <= n ? Oe - e * a - (r - e) * o : r <= t ? Oe - e * a - (r - e) * o - Te : Oe - e * a - i - Te - (r - t) * a;
|
|
2463
2638
|
}
|
|
2464
|
-
let
|
|
2639
|
+
let je, Me, Ne = [];
|
|
2465
2640
|
if (V) {
|
|
2466
|
-
let e = 6 * I, [t, n] = V.titles, r = (e) => e ? J(e).width * I : 0, i = (e) => e ? J(e).height * I : 0, a =
|
|
2467
|
-
|
|
2641
|
+
let e = 6 * I, [t, n] = V.titles, r = (e) => e ? J(e).width * I : 0, i = (e) => e ? J(e).height * I : 0, a = W.filter((e) => e.dataset.axis === "x"), o = W.filter((e) => e.dataset.axis === "y"), s = i(W[0]), c = r(n) + q([0, ...o.map(r)]) + 2 * e, l = s / 2;
|
|
2642
|
+
Me = [
|
|
2468
2643
|
c,
|
|
2469
2644
|
l,
|
|
2470
|
-
O - c -
|
|
2471
|
-
|
|
2645
|
+
O - c - q([0, ...a.map(r)]) / 2,
|
|
2646
|
+
G - l - i(t) - s - 2 * e
|
|
2472
2647
|
];
|
|
2473
|
-
let [u, d, f, p] =
|
|
2474
|
-
|
|
2648
|
+
let [u, d, f, p] = Me, [m, h] = H, g = (e) => u + (e - m.min) / (m.max - m.min || 1) * f, _ = (e) => d + p - (e - h.min) / (h.max - h.min || 1) * p;
|
|
2649
|
+
je = g, Ae = _;
|
|
2475
2650
|
let v = (e) => r(a.find((t) => Number(t.dataset.value) === e));
|
|
2476
|
-
|
|
2477
|
-
for (let t of
|
|
2478
|
-
let n = Number(t.dataset.value), r = t.dataset.axis === "x" ? 0 : 1, i =
|
|
2479
|
-
t.dataset.place = i ? r ? "before" : "below" : "none", i && R(t, r ? u - e : g(n), r ? _(n) : d + p + e, O,
|
|
2651
|
+
Ne = [Dt(m, (t) => t.every((n, r) => !r || g(n) - g(t[r - 1]) > (v(n) + v(t[r - 1])) / 2 + e)).ticks, Dt(h, (t) => t.every((n, r) => !r || _(t[r - 1]) - _(n) > s + e / 2)).ticks];
|
|
2652
|
+
for (let t of W) {
|
|
2653
|
+
let n = Number(t.dataset.value), r = t.dataset.axis === "x" ? 0 : 1, i = Ne[r].includes(n);
|
|
2654
|
+
t.dataset.place = i ? r ? "before" : "below" : "none", i && R(t, r ? u - e : g(n), r ? _(n) : d + p + e, O, G);
|
|
2480
2655
|
}
|
|
2481
|
-
t && R(t, u + f / 2,
|
|
2656
|
+
t && R(t, u + f / 2, G - i(t), O, G), n && R(n, 0, d + p / 2, O, G);
|
|
2482
2657
|
}
|
|
2483
|
-
let
|
|
2484
|
-
|
|
2485
|
-
let
|
|
2486
|
-
t.rowAt = m.centre ? null : m.categories === "beside" ? (e, t) =>
|
|
2487
|
-
let
|
|
2658
|
+
let Pe = $n(t.figure, n), Fe = In(t.figure, n), Ie = !!m.running && b.length > 0 && !t.stacked && Fe !== "step" && Pe.mode === "set" && Pe.keys.includes("last"), Le = Ie ? q(y.flat().map((e) => J(e).width)) * I : 0, Be = b.length ? q(b.map((e) => J(e).width)) * I + 12 * I + Le : 0, Ve = t.categories[0]?.parentElement;
|
|
2659
|
+
Ve && (Ve.style.paddingRight = Be ? `${Be / O * 100}%` : "");
|
|
2660
|
+
let He = (O - Be) / l.length, Ue = (e) => (e + .5) * He, We = (e) => e >= 0 && e < l.length ? e : null;
|
|
2661
|
+
t.rowAt = m.centre ? null : m.categories === "beside" ? (e, t) => We(Math.floor(t * I / (G / l.length))) : (e) => We(Math.floor(e * I / He));
|
|
2662
|
+
let Ge = He / O * 100, Ke = 100 / l.length;
|
|
2488
2663
|
if (t.rowBox = m.categories === "beside" ? (e) => [
|
|
2489
2664
|
0,
|
|
2490
|
-
e *
|
|
2665
|
+
e * Ke,
|
|
2491
2666
|
100,
|
|
2492
|
-
|
|
2667
|
+
Ke
|
|
2493
2668
|
] : (e) => [
|
|
2494
|
-
e *
|
|
2669
|
+
e * Ge,
|
|
2495
2670
|
0,
|
|
2496
|
-
|
|
2671
|
+
Ge,
|
|
2497
2672
|
100
|
|
2498
|
-
], i.setAttribute("viewBox", `0 0 ${O} ${P(
|
|
2499
|
-
let [e, r, a, o] =
|
|
2500
|
-
|
|
2673
|
+
], i.setAttribute("viewBox", `0 0 ${O} ${P(G)}`), i.textContent = "", Me && je) {
|
|
2674
|
+
let [e, r, a, o] = Me, [s, c] = Ne, l = je;
|
|
2675
|
+
Pn(t.figure, "data-chart-grid", n.grid) && i.appendChild(F("path", {
|
|
2501
2676
|
class: D,
|
|
2502
|
-
d: [...s.map((e) => `M${P(l(e))},${P(r)}V${P(r + o)}`), ...c.map((t) => `M${P(e)},${P(
|
|
2677
|
+
d: [...s.map((e) => `M${P(l(e))},${P(r)}V${P(r + o)}`), ...c.map((t) => `M${P(e)},${P(Ae(t))}H${P(e + a)}`)].join("")
|
|
2503
2678
|
})), i.appendChild(F("path", {
|
|
2504
2679
|
class: T,
|
|
2505
2680
|
d: [
|
|
2506
2681
|
`M${P(e)},${P(r)}V${P(r + o)}H${P(e + a)}`,
|
|
2507
2682
|
...s.map((e) => `M${P(l(e))},${P(r + o)}v${P(4 * I)}`),
|
|
2508
|
-
...c.map((t) => `M${P(e)},${P(
|
|
2683
|
+
...c.map((t) => `M${P(e)},${P(Ae(t))}h${P(-4 * I)}`)
|
|
2509
2684
|
].join("")
|
|
2510
2685
|
}));
|
|
2511
2686
|
}
|
|
2512
2687
|
t.checks = [];
|
|
2513
|
-
let
|
|
2688
|
+
let Y = {
|
|
2514
2689
|
rows: l,
|
|
2515
|
-
segments:
|
|
2516
|
-
cx:
|
|
2517
|
-
y:
|
|
2518
|
-
x:
|
|
2519
|
-
frame:
|
|
2520
|
-
length: (e, n) =>
|
|
2521
|
-
barWidth: Math.min(
|
|
2522
|
-
barMax:
|
|
2523
|
-
|
|
2690
|
+
segments: ae,
|
|
2691
|
+
cx: Ue,
|
|
2692
|
+
y: Ae,
|
|
2693
|
+
x: je,
|
|
2694
|
+
frame: Me,
|
|
2695
|
+
length: (e, n) => Yn(t.figure, I, e, n),
|
|
2696
|
+
barWidth: Math.min(He * n.barfill, Xn(t.figure, I)),
|
|
2697
|
+
barMax: Xn(t.figure, I),
|
|
2698
|
+
barRadius: Yn(t.figure, I, "--tablechart-bar-radius", "0px") ?? 0,
|
|
2699
|
+
height: G,
|
|
2524
2700
|
unit: I,
|
|
2525
|
-
labelHeight:
|
|
2526
|
-
badgeHeight:
|
|
2701
|
+
labelHeight: ee,
|
|
2702
|
+
badgeHeight: re,
|
|
2527
2703
|
after: l.length,
|
|
2528
2704
|
note: 0,
|
|
2529
|
-
labels:
|
|
2530
|
-
insideAlign:
|
|
2705
|
+
labels: Jn(t.figure, n, ue.length > 0),
|
|
2706
|
+
insideAlign: qn(t.figure),
|
|
2531
2707
|
breakAt: we,
|
|
2532
|
-
squeeze:
|
|
2708
|
+
squeeze: Ce,
|
|
2533
2709
|
breakGap: Te,
|
|
2534
2710
|
domain: M ? [M.min, M.max] : null,
|
|
2535
2711
|
stacked: t.stacked,
|
|
2536
|
-
shape:
|
|
2537
|
-
pick:
|
|
2712
|
+
shape: Fe,
|
|
2713
|
+
pick: Pe,
|
|
2714
|
+
numbersAtEnd: Ie,
|
|
2538
2715
|
totals: t.totals,
|
|
2539
2716
|
svg: i,
|
|
2540
2717
|
plot: r,
|
|
@@ -2551,14 +2728,14 @@ var Xe = (e) => {
|
|
|
2551
2728
|
lineHoles: []
|
|
2552
2729
|
};
|
|
2553
2730
|
r.style.setProperty("--count", String(Math.max(1, ...l.map((e) => e.slot + 1))));
|
|
2554
|
-
let
|
|
2731
|
+
let qe = (e) => {
|
|
2555
2732
|
let t = (t) => ({
|
|
2556
2733
|
...t,
|
|
2557
2734
|
...t.cells[e] ?? t.cells[0]
|
|
2558
2735
|
});
|
|
2559
2736
|
return {
|
|
2560
2737
|
rows: l.map(t),
|
|
2561
|
-
segments:
|
|
2738
|
+
segments: ae.map((e) => {
|
|
2562
2739
|
let n = t(e);
|
|
2563
2740
|
return e.kind === "bar" ? {
|
|
2564
2741
|
...n,
|
|
@@ -2568,51 +2745,51 @@ var Xe = (e) => {
|
|
|
2568
2745
|
values: y[e]
|
|
2569
2746
|
};
|
|
2570
2747
|
};
|
|
2571
|
-
if (
|
|
2748
|
+
if (ue.length) {
|
|
2572
2749
|
let e = _.flatMap((e, t) => e.chart ? [] : [t]);
|
|
2573
2750
|
m.draw({
|
|
2574
|
-
...
|
|
2751
|
+
...Y,
|
|
2575
2752
|
own: e,
|
|
2576
|
-
...e.length === 1 &&
|
|
2577
|
-
}),
|
|
2578
|
-
...
|
|
2579
|
-
own:
|
|
2753
|
+
...e.length === 1 && qe(e[0])
|
|
2754
|
+
}), ct.draw({
|
|
2755
|
+
...Y,
|
|
2756
|
+
own: ue
|
|
2580
2757
|
});
|
|
2581
|
-
} else m.draw(
|
|
2582
|
-
|
|
2583
|
-
let
|
|
2584
|
-
for (let e of t.figure.querySelectorAll(`.${f}`)) e.style.setProperty("--i", String(Math.min(l[l.length - 1].slot,
|
|
2585
|
-
if (!t.stacked && !r.hasAttribute("data-grouped")) for (let e of y)
|
|
2758
|
+
} else m.draw(Y);
|
|
2759
|
+
Y.rowAt && (t.rowAt = Y.rowAt), t.pointOf = Y.pointOf ?? null;
|
|
2760
|
+
let Je = Number(r.style.getPropertyValue("--count")) || l.length;
|
|
2761
|
+
for (let e of t.figure.querySelectorAll(`.${f}`)) e.style.setProperty("--i", String(Math.min(l[l.length - 1].slot, Je - 1)));
|
|
2762
|
+
if (!t.stacked && !r.hasAttribute("data-grouped")) for (let e of y) Ee(e, I, O), De(e, I, O, G);
|
|
2586
2763
|
if (A && M) {
|
|
2587
|
-
let e = 6 * I, r = k &&
|
|
2764
|
+
let e = 6 * I, r = k && Y.x ? Y.x : Ae, a = Array.from(A.ticks.children), o = (e) => J(a.find((t) => Number(t.dataset.value) === e) ?? a[0]), s = Dt(M, (t) => t.every((n, i) => !i || (k ? r(n) - r(t[i - 1]) > (o(n).width + o(t[i - 1]).width) / 2 * I + e : r(t[i - 1]) - r(n) > o(n).height * I + e / 2))).ticks.filter((e) => !Ce || e <= Ce.lo || e >= Ce.hi);
|
|
2588
2765
|
for (let t of a) {
|
|
2589
2766
|
let n = Number(t.dataset.value), i = A.numbers && s.includes(n);
|
|
2590
|
-
t.dataset.place = i ? k ? "below" : "before" : "none", i && R(t, k ? r(n) : -e, k ?
|
|
2767
|
+
t.dataset.place = i ? k ? "below" : "before" : "none", i && R(t, k ? r(n) : -e, k ? G + e : r(n), O, G);
|
|
2591
2768
|
}
|
|
2592
|
-
let c = O -
|
|
2593
|
-
|
|
2769
|
+
let c = O - Be;
|
|
2770
|
+
Pn(t.figure, "data-chart-grid", n.grid) && i.prepend(F("path", {
|
|
2594
2771
|
class: D,
|
|
2595
|
-
d: s.map((e) => k ? `M${P(r(e))},0V${P(
|
|
2772
|
+
d: s.map((e) => k ? `M${P(r(e))},0V${P(G)}` : `M0,${P(r(e))}H${P(c)}`).join("")
|
|
2596
2773
|
})), A.numbers && i.appendChild(F("path", {
|
|
2597
2774
|
class: T,
|
|
2598
|
-
d: [k ? `M${P(r(M.min))},${P(
|
|
2775
|
+
d: [k ? `M${P(r(M.min))},${P(G)}H${P(r(M.max))}` : `M0,${P(r(M.max))}V${P(r(M.min))}`, ...s.map((e) => k ? `M${P(r(e))},${P(G)}v${P(4 * I)}` : `M0,${P(r(e))}h${P(-4 * I)}`)].join("")
|
|
2599
2776
|
}));
|
|
2600
2777
|
}
|
|
2601
2778
|
for (let [e, n] of x.entries()) {
|
|
2602
2779
|
n.badge?.setAttribute("data-note", String(e + 1));
|
|
2603
2780
|
let i = n.series;
|
|
2604
2781
|
n.type.draw(n.spec, n.badge, {
|
|
2605
|
-
...
|
|
2782
|
+
...Y,
|
|
2606
2783
|
...t.stacked && {
|
|
2607
|
-
rows:
|
|
2784
|
+
rows: K,
|
|
2608
2785
|
...t.totals.length && { values: t.totals }
|
|
2609
2786
|
},
|
|
2610
|
-
...i > 0 && !t.stacked &&
|
|
2787
|
+
...i > 0 && !t.stacked && qe(i),
|
|
2611
2788
|
after: t.plan ? n.after : Math.min(n.after, Number(r.style.getPropertyValue("--count")) || n.after),
|
|
2612
2789
|
note: e + 1
|
|
2613
2790
|
});
|
|
2614
2791
|
}
|
|
2615
|
-
|
|
2792
|
+
Jt(t);
|
|
2616
2793
|
for (let e of t.figure.querySelectorAll(`.${p}`)) {
|
|
2617
2794
|
let n = Array.from(e.children);
|
|
2618
2795
|
if (t.plan) for (let e of n) e.style.getPropertyValue("--step") || e.style.setProperty("--i", "0");
|
|
@@ -2624,13 +2801,13 @@ var Xe = (e) => {
|
|
|
2624
2801
|
X.style.height = `${X.offsetHeight}px`, X.removeAttribute("data-thinned");
|
|
2625
2802
|
for (let e of t.categories) e.removeAttribute("data-left-out"), e.removeAttribute("data-edge");
|
|
2626
2803
|
let e = t.categories.filter((e) => e.offsetParent !== null);
|
|
2627
|
-
if (!
|
|
2804
|
+
if (!Se(X, e, (e) => ({
|
|
2628
2805
|
size: e.scrollWidth,
|
|
2629
2806
|
room: e.clientWidth
|
|
2630
2807
|
}), "--_name-fit") && e.length > 1) {
|
|
2631
2808
|
let t = getComputedStyle(X), n = (X.clientWidth - Number.parseFloat(t.paddingLeft) - Number.parseFloat(t.paddingRight)) / l.length;
|
|
2632
2809
|
X.style.setProperty("--_name-fit", "1"), X.setAttribute("data-thinned", "");
|
|
2633
|
-
let r =
|
|
2810
|
+
let r = q(e.map((e) => e.offsetWidth)), i = Math.max(Math.ceil((r + 8) / n), Math.ceil((1.5 * r + 8) / n - .5), 1);
|
|
2634
2811
|
e.forEach((e, t) => {
|
|
2635
2812
|
t % i && e.setAttribute("data-left-out", "");
|
|
2636
2813
|
});
|
|
@@ -2641,9 +2818,9 @@ var Xe = (e) => {
|
|
|
2641
2818
|
e && e.getBoundingClientRect().right + 8 > s.getBoundingClientRect().left && s.setAttribute("data-left-out", "");
|
|
2642
2819
|
}
|
|
2643
2820
|
}
|
|
2644
|
-
let r = (m ===
|
|
2821
|
+
let r = (m === ct || m === lt) && Pn(t.figure, "data-chart-ticks", n.ticks);
|
|
2645
2822
|
if (X.toggleAttribute("data-ticks", r), X.style.removeProperty("--_tick-reach"), r) {
|
|
2646
|
-
let e =
|
|
2823
|
+
let e = G - Number(i.querySelector(".tablechart-rule")?.getAttribute("y1") ?? G);
|
|
2647
2824
|
e > 0 && e < 10 * I && X.style.setProperty("--_tick-reach", `${P(e / I)}px`);
|
|
2648
2825
|
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;
|
|
2649
2826
|
t.categories.forEach((e, t) => {
|
|
@@ -2656,9 +2833,9 @@ var Xe = (e) => {
|
|
|
2656
2833
|
}
|
|
2657
2834
|
X.style.height = "";
|
|
2658
2835
|
}
|
|
2659
|
-
let
|
|
2836
|
+
let Ye = x.flatMap(({ badge: e }) => {
|
|
2660
2837
|
if (!(e instanceof HTMLElement) || !e.offsetWidth) return [];
|
|
2661
|
-
let t = e.offsetWidth * I, n = e.offsetHeight * I, r = Number.parseFloat(e.style.left) / 100 * O, i = Number.parseFloat(e.style.top) / 100 *
|
|
2838
|
+
let t = e.offsetWidth * I, n = e.offsetHeight * I, r = Number.parseFloat(e.style.left) / 100 * O, i = Number.parseFloat(e.style.top) / 100 * G, a = getComputedStyle(e).borderTopLeftRadius, o = a.endsWith("%") ? Number.parseFloat(a) / 100 : null, s = (Number.parseFloat(a) || 0) * I;
|
|
2662
2839
|
return [F("rect", {
|
|
2663
2840
|
class: h,
|
|
2664
2841
|
"data-for": "badge",
|
|
@@ -2671,24 +2848,24 @@ var Xe = (e) => {
|
|
|
2671
2848
|
ry: o === null ? s : n * o,
|
|
2672
2849
|
style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
|
|
2673
2850
|
})];
|
|
2674
|
-
}),
|
|
2675
|
-
if (
|
|
2851
|
+
}), Xe = i.querySelector(`.${D}`), Z = Array.from(i.querySelectorAll(`.${o}`)), Ze = [...Xe ? [Xe] : [], ...i.querySelectorAll(`:scope > .${s}`)], Qe = Zn(r, I), $e = t.figure.getAttribute("data-animate") === "grow", et = y.flat().filter((e) => e.hasAttribute("data-cut")).flatMap(Qe), tt = [...ue.flatMap((e) => y[e].flatMap(Qe)), ...$e ? et : []];
|
|
2852
|
+
if (Ze.length || Z.length) {
|
|
2676
2853
|
let e = [
|
|
2677
2854
|
...y.flat(),
|
|
2678
2855
|
...t.totals,
|
|
2679
2856
|
...m.categories === "beside" ? t.categories : []
|
|
2680
|
-
].flatMap(
|
|
2857
|
+
].flatMap(Qe), n = (e) => [
|
|
2681
2858
|
"x",
|
|
2682
2859
|
"y",
|
|
2683
2860
|
"width",
|
|
2684
2861
|
"height"
|
|
2685
2862
|
].map((t) => Number(e.getAttribute(t)));
|
|
2686
|
-
for (let t of Z)
|
|
2687
|
-
for (let t of
|
|
2688
|
-
let r = [...e, ...
|
|
2689
|
-
t.setAttribute("d", i.map(([e, t, i, a]) =>
|
|
2863
|
+
for (let t of Z) jn(t, [...e, ...Ye].map(n));
|
|
2864
|
+
for (let t of Ze) {
|
|
2865
|
+
let r = [...e, ...Ye], i = Mn(t);
|
|
2866
|
+
t.setAttribute("d", i.map(([e, t, i, a]) => An(e, t, i, a, r.map(n))).join(""));
|
|
2690
2867
|
for (let e of r) {
|
|
2691
|
-
let r =
|
|
2868
|
+
let r = Nn(i, n(e)), a = e.dataset.for === "badge" ? "badge" : "";
|
|
2692
2869
|
r && t.after(F("path", {
|
|
2693
2870
|
class: t.getAttribute("class") ?? "tablechart-grid",
|
|
2694
2871
|
"data-gap": a,
|
|
@@ -2698,57 +2875,57 @@ var Xe = (e) => {
|
|
|
2698
2875
|
}
|
|
2699
2876
|
}
|
|
2700
2877
|
}
|
|
2701
|
-
if (
|
|
2878
|
+
if (te(i, Ye, O, G, Array.from(i.querySelectorAll(`.${a}, .${c}`))), !$e && (Y.lineHoles.length || et.length)) {
|
|
2702
2879
|
let e = Array.from(i.querySelectorAll(`.${u}`)).map((e) => {
|
|
2703
2880
|
let t = F("g", {});
|
|
2704
2881
|
return e.before(t), t.append(e), t;
|
|
2705
2882
|
});
|
|
2706
|
-
|
|
2883
|
+
te(i, [...Y.lineHoles, ...et], O, G, [...e, ...i.querySelectorAll(`.${d}`)]);
|
|
2707
2884
|
}
|
|
2708
|
-
let
|
|
2885
|
+
let nt = [
|
|
2709
2886
|
o,
|
|
2710
2887
|
s,
|
|
2711
2888
|
a,
|
|
2712
2889
|
c,
|
|
2713
2890
|
D
|
|
2714
2891
|
];
|
|
2715
|
-
|
|
2716
|
-
let
|
|
2892
|
+
ne(i, [...Ye, ...tt], O, G, void 0, nt.map((e) => `.${e}`).join(", ")), t.figure.hasAttribute("data-animate") && !t.figure.hasAttribute("data-steps") && !t.figure.classList.contains("is-shown") && cr(i);
|
|
2893
|
+
let rt = (e) => e.dataset.missing !== void 0 || m.centre && l[Number(e.dataset.row) - 1]?.isTotal, it = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), at = (e, t) => {
|
|
2717
2894
|
let n = Number(e.dataset.row);
|
|
2718
|
-
return t.some((e) =>
|
|
2895
|
+
return t.some((e) => it(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
|
|
2719
2896
|
};
|
|
2720
|
-
return t.figure.toggleAttribute("data-left-out", (m.columns ? [t.categories] : [...y, t.totals]).some((e) => e.some((t) => !
|
|
2721
|
-
},
|
|
2897
|
+
return t.figure.toggleAttribute("data-left-out", (m.columns ? [t.categories] : [...y, t.totals]).some((e) => e.some((t) => !rt(t) && !it(t) && !at(t, e)))), Y.barRadius && U(i, Y.barRadius), Lt(t.figure), Ut(t.figure), Wt(t.figure), !0;
|
|
2898
|
+
}, nr = (e, t) => {
|
|
2722
2899
|
let n = [
|
|
2723
2900
|
...e.seriesValues.flat(),
|
|
2724
2901
|
...e.totals,
|
|
2725
2902
|
...e.totalCell ? [e.totalCell] : []
|
|
2726
2903
|
];
|
|
2727
|
-
for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ?
|
|
2728
|
-
},
|
|
2729
|
-
let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] =
|
|
2904
|
+
for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ? rr(r, r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale) : r.textContent = r.dataset.missing;
|
|
2905
|
+
}, rr = (e, t, n) => {
|
|
2906
|
+
let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] = oe(Number.parseFloat(e.dataset.value || "0"), t, n);
|
|
2730
2907
|
if (e.textContent = r + (r ? a : "") + o + i, a && !r) {
|
|
2731
2908
|
let t = document.createElement("span");
|
|
2732
2909
|
t.className = "tablechart-minus", t.textContent = a, e.prepend(t);
|
|
2733
2910
|
}
|
|
2734
|
-
},
|
|
2735
|
-
|
|
2736
|
-
},
|
|
2737
|
-
!t && !e.figure.hasAttribute("data-steps") &&
|
|
2738
|
-
|
|
2911
|
+
}, ir = (e) => {
|
|
2912
|
+
Cn(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${p}`)?.remove(), e.controls?.remove();
|
|
2913
|
+
}, ar = (e, t, n = !1) => {
|
|
2914
|
+
!t && !e.figure.hasAttribute("data-steps") && cr(e.svg), e.figure.classList.remove(C), n ? (e.figure.classList.add(S), e.figure.classList.toggle(b, t), e.figure.offsetWidth, t && lr(e.svg), e.figure.classList.toggle(C, t), requestAnimationFrame(() => e.figure.classList.remove(S))) : (e.figure.classList.toggle(b, t), t && requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
2915
|
+
sr(e.figure, e.svg), or(e.figure);
|
|
2739
2916
|
})));
|
|
2740
|
-
},
|
|
2917
|
+
}, or = (e) => {
|
|
2741
2918
|
let t = e.getAnimations({ subtree: !0 }).map((e) => e.finished.catch(() => void 0));
|
|
2742
2919
|
Promise.all(t).then(() => {
|
|
2743
2920
|
e.classList.contains("is-shown") && e.classList.add(C);
|
|
2744
2921
|
});
|
|
2745
|
-
},
|
|
2746
|
-
e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) &&
|
|
2747
|
-
},
|
|
2922
|
+
}, sr = (e, t) => {
|
|
2923
|
+
e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) && lr(t);
|
|
2924
|
+
}, cr = (e) => {
|
|
2748
2925
|
for (let t of e.querySelectorAll("[mask^=\"url(#tablechart-cut-\"]")) t.dataset.mask = t.getAttribute("mask") ?? "", t.removeAttribute("mask");
|
|
2749
|
-
},
|
|
2926
|
+
}, lr = (e) => {
|
|
2750
2927
|
for (let t of e.querySelectorAll("[data-mask]")) t.setAttribute("mask", t.dataset.mask ?? ""), t.removeAttribute("data-mask");
|
|
2751
|
-
},
|
|
2928
|
+
}, ur = {
|
|
2752
2929
|
2: {
|
|
2753
2930
|
part: 3,
|
|
2754
2931
|
text: 4.5,
|
|
@@ -2767,8 +2944,8 @@ var Xe = (e) => {
|
|
|
2767
2944
|
partRule: "APCA, WCAG 3 draft",
|
|
2768
2945
|
textRule: "APCA, WCAG 3 draft"
|
|
2769
2946
|
}
|
|
2770
|
-
},
|
|
2771
|
-
let n =
|
|
2947
|
+
}, dr = (t) => {
|
|
2948
|
+
let n = Rt(t), r = ur[jt(t)], i = Array.from(t.querySelectorAll("table thead tr:first-child > *")).map((e) => (e.textContent ?? "").trim()), a = Array.from(t.querySelectorAll("tbody tr > :first-child")).map((e) => (e.textContent ?? "").trim()), o = [
|
|
2772
2949
|
[
|
|
2773
2950
|
".tablechart-series",
|
|
2774
2951
|
"Line",
|
|
@@ -2788,11 +2965,11 @@ var Xe = (e) => {
|
|
|
2788
2965
|
for (let [e, c, l] of o) {
|
|
2789
2966
|
let o = Array.from(t.querySelectorAll(`${e}:not([data-muted])`));
|
|
2790
2967
|
for (let e of o) {
|
|
2791
|
-
let u = l(e), [d, f, p, m] =
|
|
2968
|
+
let u = l(e), [d, f, p, m] = kt(u), h = [
|
|
2792
2969
|
d,
|
|
2793
2970
|
f,
|
|
2794
2971
|
p
|
|
2795
|
-
].map((e, t) => e * m + n[t] * (1 - m)), g =
|
|
2972
|
+
].map((e, t) => e * m + n[t] * (1 - m)), g = Pt(jt(t), h, n);
|
|
2796
2973
|
if (g >= r.part) continue;
|
|
2797
2974
|
let _ = e.getAttribute("data-series"), v = a[Number(e.getAttribute("data-row") ?? 0) - 1] ?? "", y = c === "Slice" ? "" : _ ? i[Number(_)] : "", b = `${c}|${y}|${u}`, x = s.get(b) ?? {
|
|
2798
2975
|
kind: c,
|
|
@@ -2808,30 +2985,46 @@ var Xe = (e) => {
|
|
|
2808
2985
|
let s = Array.from(a).filter(Boolean).map((e) => `"${e}"`), l = s.join(", "), u = s.length > 1, d = n === "Line" ? i ? `Line "${i}" has` : "The line has" : n === "Slice" ? `${u ? "Slices" : "Slice"} ${l} ${u ? "have" : "has"}` : a.size >= o || !l ? `The bars${i ? ` of column "${i}"` : ""} have` : `${u ? "Bars" : "Bar"} ${l}${i ? ` in column "${i}"` : ""} ${u ? "have" : "has"}`;
|
|
2809
2986
|
console.warn(`[${e}] ${d} a contrast of ${r.show(c)} with the background. It needs at least ${r.need(r.part)} (${r.partRule}).`, t);
|
|
2810
2987
|
}
|
|
2811
|
-
},
|
|
2988
|
+
}, fr = ".tablechart-name, .tablechart-value:not([data-place='inside'], [data-place='middle']), .tablechart-categories span, .tablechart-centre, .tablechart-tick, .tablechart-quadrant-name, figcaption b, figcaption span", pr = (t) => {
|
|
2812
2989
|
let n = 0, r = () => {
|
|
2813
|
-
let r = Array.from(t.querySelectorAll(".tablechart-value[data-place='inside'], .tablechart-value[data-place='middle']")).filter((e) => !e.hasAttribute("data-left-out") && !e.hidden);
|
|
2814
|
-
if (r.some((e) =>
|
|
2815
|
-
|
|
2990
|
+
let r = Array.from(t.querySelectorAll(".tablechart-value[data-place='inside'], .tablechart-value[data-place='middle']")).filter((e) => !e.hasAttribute("data-left-out") && !e.hidden), a = Array.from(t.querySelectorAll(fr)).filter((e) => !e.hasAttribute("data-left-out") && !e.hidden && e.style.getPropertyValue("--m") !== "1" && (e.textContent ?? "").trim() && getComputedStyle(e).visibility !== "hidden");
|
|
2991
|
+
if ([...r, ...a].some((e) => kt(getComputedStyle(e).color)[3] === 0 && n < 20)) {
|
|
2992
|
+
n++, setTimeout(i, 500);
|
|
2816
2993
|
return;
|
|
2817
2994
|
}
|
|
2818
|
-
let
|
|
2995
|
+
let o = Array.from(t.querySelectorAll("tbody tr > :first-child")).map((e) => (e.textContent ?? "").trim()), s = ur[jt(t)], c = t.dataset.chart === "bar" ? "bar" : "column", l = /* @__PURE__ */ new Map();
|
|
2819
2996
|
for (let e of r) {
|
|
2820
|
-
let n =
|
|
2997
|
+
let n = zt(t, e);
|
|
2821
2998
|
if (!n) continue;
|
|
2822
|
-
let r = getComputedStyle(e), i = getComputedStyle(n).fill,
|
|
2823
|
-
if (
|
|
2824
|
-
let f = n.classList.contains("tablechart-piece") ? `${
|
|
2999
|
+
let r = getComputedStyle(e), i = getComputedStyle(n).fill, a = Pt(jt(t), kt(r.color), kt(i)), u = Number.parseFloat(r.fontSize), d = u >= 24 || u >= 18.66 && Number(r.fontWeight) >= 700 ? s.large : s.text;
|
|
3000
|
+
if (a >= d) continue;
|
|
3001
|
+
let f = n.classList.contains("tablechart-piece") ? `${c} part` : c, p = `${r.color}|${i}`, m = l.get(p) ?? {
|
|
2825
3002
|
what: f,
|
|
2826
3003
|
names: [],
|
|
2827
|
-
contrast:
|
|
3004
|
+
contrast: a,
|
|
2828
3005
|
needed: d
|
|
2829
3006
|
};
|
|
2830
|
-
m.names.push(`"${
|
|
3007
|
+
m.names.push(`"${o[Number(e.dataset.row) - 1] ?? ""}" ("${e.textContent?.trim()}")`), l.set(p, m);
|
|
2831
3008
|
}
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
3009
|
+
let u = Rt(t), d = /* @__PURE__ */ new Map();
|
|
3010
|
+
for (let e of a) {
|
|
3011
|
+
let n = getComputedStyle(e), [r, i, a, o] = kt(n.color), c = [
|
|
3012
|
+
r,
|
|
3013
|
+
i,
|
|
3014
|
+
a
|
|
3015
|
+
].map((e, t) => e * o + u[t] * (1 - o)), l = Pt(jt(t), c, u), f = Number.parseFloat(n.fontSize), p = f >= 24 || f >= 18.66 && Number(n.fontWeight) >= 700 ? s.large : s.text;
|
|
3016
|
+
if (l >= p) continue;
|
|
3017
|
+
let m = d.get(n.color) ?? {
|
|
3018
|
+
names: [],
|
|
3019
|
+
contrast: l,
|
|
3020
|
+
needed: p
|
|
3021
|
+
};
|
|
3022
|
+
m.names.push(`"${e.textContent?.trim()}"`), d.set(n.color, m);
|
|
3023
|
+
}
|
|
3024
|
+
for (let { names: n, contrast: r, needed: i } of d.values()) console.warn(`[${e}] The text ${n.join(", ")} has a contrast of ${s.show(r)} with the background. Text needs at least ${s.need(i)} (${s.textRule}).`, t);
|
|
3025
|
+
for (let { what: n, names: r, contrast: i, needed: a } of l.values()) {
|
|
3026
|
+
let o = r.length > 1;
|
|
3027
|
+
console.warn(`[${e}] The text inside the ${n}${o ? "s" : ""} of ${r.join(", ")} has a contrast of ${s.show(i)} with ${o ? "those" : "that"} ${n}${o ? "s" : ""}. Text needs at least ${s.need(a)} (${s.textRule}).`, t);
|
|
2835
3028
|
}
|
|
2836
3029
|
}, i = () => requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
2837
3030
|
let e = t.getAnimations({ subtree: !0 }).map((e) => e.finished.catch(() => void 0));
|
|
@@ -2845,34 +3038,34 @@ var Xe = (e) => {
|
|
|
2845
3038
|
attributes: !0,
|
|
2846
3039
|
attributeFilter: ["class"]
|
|
2847
3040
|
});
|
|
2848
|
-
},
|
|
3041
|
+
}, mr = [
|
|
2849
3042
|
"bar",
|
|
2850
3043
|
"piece",
|
|
2851
3044
|
"up",
|
|
2852
3045
|
"down",
|
|
2853
3046
|
"total"
|
|
2854
|
-
].map((e) => `--tablechart-${e}-value-color`),
|
|
3047
|
+
].map((e) => `--tablechart-${e}-value-color`), hr = /* @__PURE__ */ new Set(), gr = (t) => {
|
|
2855
3048
|
let n = getComputedStyle(t);
|
|
2856
|
-
for (let r of
|
|
2857
|
-
},
|
|
3049
|
+
for (let r of mr) !hr.has(r) && n.getPropertyValue(r).trim() && (hr.add(r), console.warn(`[${e}] ${r} is old and goes in 1.3.0. --tablechart-value-on-dark and --tablechart-value-on-light set the colour of the numbers inside bars, with a contrast check.`, t));
|
|
3050
|
+
}, _r = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), vr = /^\s*(?:Table)?:\s+/, yr = (e) => e?.tagName === "P" && vr.test(e.textContent ?? ""), br = (e) => {
|
|
2858
3051
|
let t = document.createElement("figcaption");
|
|
2859
3052
|
for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
|
|
2860
3053
|
let n = e.firstChild;
|
|
2861
|
-
n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(
|
|
3054
|
+
n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(vr, ""), n.textContent || n.remove());
|
|
2862
3055
|
let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
|
|
2863
3056
|
if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
|
|
2864
3057
|
let e = document.createElement("span");
|
|
2865
3058
|
e.append(...r.slice(i + 1)), t.append(e);
|
|
2866
3059
|
}
|
|
2867
3060
|
return e.remove(), t;
|
|
2868
|
-
},
|
|
2869
|
-
let t =
|
|
3061
|
+
}, xr = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Sr = (e) => {
|
|
3062
|
+
let t = Ar(e);
|
|
2870
3063
|
return t?.tagName === "P" ? t : e;
|
|
2871
|
-
},
|
|
2872
|
-
let t =
|
|
3064
|
+
}, Cr = (e) => {
|
|
3065
|
+
let t = Sr(e).firstChild;
|
|
2873
3066
|
if (t?.nodeType !== Node.TEXT_NODE) return null;
|
|
2874
|
-
let n =
|
|
2875
|
-
if (!n || !
|
|
3067
|
+
let n = xr.exec(t.textContent ?? "");
|
|
3068
|
+
if (!n || !Dn.includes(n[1]) || !n[3] && t.nextSibling) return null;
|
|
2876
3069
|
let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
|
|
2877
3070
|
return {
|
|
2878
3071
|
name: n[1],
|
|
@@ -2880,11 +3073,11 @@ var Xe = (e) => {
|
|
|
2880
3073
|
text: t,
|
|
2881
3074
|
length: n[0].length
|
|
2882
3075
|
};
|
|
2883
|
-
},
|
|
3076
|
+
}, wr = (e) => {
|
|
2884
3077
|
if (e?.tagName !== "UL" && e?.tagName !== "OL") return null;
|
|
2885
|
-
let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null :
|
|
3078
|
+
let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : Cr(e));
|
|
2886
3079
|
return !t.length || t.some((e, t) => !n[t] && !e.hasAttribute("data-annotation")) ? null : (t.forEach((e, t) => {
|
|
2887
|
-
let r = n[t], i =
|
|
3080
|
+
let r = n[t], i = Sr(e);
|
|
2888
3081
|
if (i !== e && i.replaceWith(...i.childNodes), r) {
|
|
2889
3082
|
e.setAttribute("data-annotation", r.name);
|
|
2890
3083
|
for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
|
|
@@ -2895,18 +3088,18 @@ var Xe = (e) => {
|
|
|
2895
3088
|
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));
|
|
2896
3089
|
});
|
|
2897
3090
|
}), e.classList.add("chart-annotations"), e);
|
|
2898
|
-
},
|
|
2899
|
-
for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" ||
|
|
2900
|
-
},
|
|
2901
|
-
let t = e.closest("p"), n =
|
|
3091
|
+
}, Tr = (e, t) => {
|
|
3092
|
+
for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || _r(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
|
|
3093
|
+
}, Er = (e) => e.map((e) => {
|
|
3094
|
+
let t = e.closest("p"), n = yr(t) ? t : e;
|
|
2902
3095
|
if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
|
|
2903
3096
|
let r = document.createElement("figure");
|
|
2904
|
-
|
|
2905
|
-
let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ?
|
|
3097
|
+
Tr(e, r), e.classList.length || e.removeAttribute("class");
|
|
3098
|
+
let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? yr(a) ? a : yr(o) ? o : null : n;
|
|
2906
3099
|
i && s === o && (o = o?.nextElementSibling ?? null);
|
|
2907
|
-
let c = o?.classList.contains("chart-annotations") ? o :
|
|
2908
|
-
return n.replaceWith(r), s && r.append(
|
|
2909
|
-
}),
|
|
3100
|
+
let c = o?.classList.contains("chart-annotations") ? o : wr(o);
|
|
3101
|
+
return n.replaceWith(r), s && r.append(br(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;
|
|
3102
|
+
}), Dr = (e, t, n, r = document.createElement("table"), i = "Note") => {
|
|
2910
3103
|
for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
|
|
2911
3104
|
let a = e.some((e) => e.note);
|
|
2912
3105
|
if (!r.tHead && (t.length || n || a)) {
|
|
@@ -2935,7 +3128,7 @@ var Xe = (e) => {
|
|
|
2935
3128
|
n.dataset.note = "", n.textContent = i, s.append(n);
|
|
2936
3129
|
}
|
|
2937
3130
|
return r;
|
|
2938
|
-
},
|
|
3131
|
+
}, Or = (e) => {
|
|
2939
3132
|
if (!e || typeof e != "object") return;
|
|
2940
3133
|
let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
|
|
2941
3134
|
if (t.length && t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n))) return t.map(([e, t]) => Array.isArray(t) ? {
|
|
@@ -2945,16 +3138,16 @@ var Xe = (e) => {
|
|
|
2945
3138
|
label: e,
|
|
2946
3139
|
value: t
|
|
2947
3140
|
});
|
|
2948
|
-
},
|
|
3141
|
+
}, kr = async (t) => {
|
|
2949
3142
|
await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
|
|
2950
3143
|
let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
|
|
2951
3144
|
for (let e of t.querySelectorAll("table")) e !== r && e.remove();
|
|
2952
3145
|
try {
|
|
2953
3146
|
let e = await fetch(n);
|
|
2954
3147
|
if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
|
|
2955
|
-
let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows :
|
|
3148
|
+
let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : Or(i.rows) : Or(i);
|
|
2956
3149
|
if (!Array.isArray(a)) throw Error("no rows in it: a list of rows, an object with rows, or names with their values");
|
|
2957
|
-
let o =
|
|
3150
|
+
let o = Dr(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);
|
|
2958
3151
|
if (!r) {
|
|
2959
3152
|
let e = t.querySelector(":scope > figcaption");
|
|
2960
3153
|
e ? e.after(o) : t.prepend(o);
|
|
@@ -2965,10 +3158,10 @@ var Xe = (e) => {
|
|
|
2965
3158
|
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." : ""));
|
|
2966
3159
|
}
|
|
2967
3160
|
}));
|
|
2968
|
-
},
|
|
3161
|
+
}, Ar = (e) => {
|
|
2969
3162
|
let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
|
|
2970
3163
|
return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
|
|
2971
|
-
},
|
|
3164
|
+
}, jr = "strong, b, span.total", Mr = (e) => {
|
|
2972
3165
|
for (let t of e) {
|
|
2973
3166
|
for (let e of t.querySelectorAll("tbody tr")) {
|
|
2974
3167
|
let t = e.cells[0];
|
|
@@ -2976,16 +3169,16 @@ var Xe = (e) => {
|
|
|
2976
3169
|
let n = document.createElement("th");
|
|
2977
3170
|
for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
|
|
2978
3171
|
n.append(...t.childNodes), t.replaceWith(n);
|
|
2979
|
-
for (let t =
|
|
3172
|
+
for (let t = Ar(n); t?.matches(jr); t = Ar(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
|
|
2980
3173
|
}
|
|
2981
3174
|
let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
|
|
2982
|
-
for (let t of e.slice(1)) for (let e =
|
|
3175
|
+
for (let t of e.slice(1)) for (let e = Ar(t); e?.matches(jr); e = Ar(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
|
|
2983
3176
|
}
|
|
2984
|
-
},
|
|
3177
|
+
}, Nr = "data-chart-made", Pr = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Fr = (e) => new Promise((t) => setTimeout(t, e)), Ir = (e, t) => {
|
|
2985
3178
|
let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
|
|
2986
3179
|
return Math.min(Math.max(r, 0), 1);
|
|
2987
|
-
},
|
|
2988
|
-
if (
|
|
3180
|
+
}, Lr = async (e, t) => {
|
|
3181
|
+
if (Pr()) return;
|
|
2989
3182
|
await new Promise(requestAnimationFrame);
|
|
2990
3183
|
let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
|
|
2991
3184
|
for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
|
|
@@ -2996,11 +3189,11 @@ var Xe = (e) => {
|
|
|
2996
3189
|
let a = Number(n.delay ?? 0) + i * t;
|
|
2997
3190
|
r = Math.max(r, a - Number(e.currentTime ?? 0));
|
|
2998
3191
|
}
|
|
2999
|
-
r > 0 && await
|
|
3000
|
-
},
|
|
3192
|
+
r > 0 && await Fr(r);
|
|
3193
|
+
}, Rr = (e) => {
|
|
3001
3194
|
for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
|
|
3002
3195
|
return null;
|
|
3003
|
-
},
|
|
3196
|
+
}, zr = (e) => new Promise((t) => {
|
|
3004
3197
|
let n = ["animationstart", "transitionrun"], r = () => {
|
|
3005
3198
|
for (let e of n) document.removeEventListener(e, i, !0);
|
|
3006
3199
|
a.disconnect(), t();
|
|
@@ -3014,60 +3207,60 @@ var Xe = (e) => {
|
|
|
3014
3207
|
attributes: !0,
|
|
3015
3208
|
attributeFilter: ["class", "style"]
|
|
3016
3209
|
});
|
|
3017
|
-
}),
|
|
3018
|
-
|
|
3019
|
-
for (let e of
|
|
3210
|
+
}), Br = /* @__PURE__ */ new Set(), Vr = null, Hr = (e) => {
|
|
3211
|
+
Br.add(e), !Vr && (Vr = new MutationObserver(() => {
|
|
3212
|
+
for (let e of Br) e.relabel();
|
|
3020
3213
|
requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
3021
|
-
for (let e of
|
|
3214
|
+
for (let e of Br) e.refresh();
|
|
3022
3215
|
}));
|
|
3023
|
-
}),
|
|
3216
|
+
}), Vr.observe(document.documentElement, {
|
|
3024
3217
|
attributes: !0,
|
|
3025
3218
|
attributeFilter: ["lang"]
|
|
3026
3219
|
}));
|
|
3027
|
-
},
|
|
3028
|
-
|
|
3029
|
-
},
|
|
3220
|
+
}, Ur = (e) => {
|
|
3221
|
+
Br.delete(e), !Br.size && Vr && (Vr.disconnect(), Vr = null);
|
|
3222
|
+
}, Wr = ["column", "bar"], Gr = (e) => {
|
|
3030
3223
|
let t = e.getAttribute("data-chart") || "column";
|
|
3031
|
-
if (!
|
|
3224
|
+
if (!Wr.includes(t)) return null;
|
|
3032
3225
|
let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
|
|
3033
|
-
return
|
|
3034
|
-
},
|
|
3035
|
-
let n = e, r =
|
|
3036
|
-
if (!
|
|
3226
|
+
return Wr.includes(n) ? n : t;
|
|
3227
|
+
}, Kr = (e, t) => {
|
|
3228
|
+
let n = e, r = Gr(n.figure), i = null, a = !1, o = !1, s = !1, c = async () => {
|
|
3229
|
+
if (!Fn(n.figure, t)) return ar(n, !0);
|
|
3037
3230
|
let e = n.figure.classList.contains("is-shown");
|
|
3038
3231
|
if (o && i !== null && !e && !s) {
|
|
3039
3232
|
s = !0;
|
|
3040
|
-
let e =
|
|
3041
|
-
e && await
|
|
3042
|
-
} else !o && t.replay && e &&
|
|
3233
|
+
let e = Pr() ? null : Rr(n.figure);
|
|
3234
|
+
e && await zr(e), await Lr(n.figure, Ir(n.figure, t)), s = !1, (o || !t.replay) && ar(n, !0);
|
|
3235
|
+
} else !o && t.replay && e && ar(n, !1);
|
|
3043
3236
|
}, l = () => {
|
|
3044
|
-
let e =
|
|
3237
|
+
let e = Gr(n.figure);
|
|
3045
3238
|
if (!e || e === r) return;
|
|
3046
|
-
let a = Q.timed("Building", n.figure, () =>
|
|
3047
|
-
a && (
|
|
3239
|
+
let a = Q.timed("Building", n.figure, () => Un(n.figure, t, e));
|
|
3240
|
+
a && (ir(n), Yt(a, n.step, !0), n = a, r = e, i = null);
|
|
3048
3241
|
}, u = () => {
|
|
3049
3242
|
l();
|
|
3050
3243
|
let e = n.plot.clientWidth;
|
|
3051
|
-
e && e !== i && Q.timed("Layout", n.figure, () =>
|
|
3244
|
+
e && e !== i && Q.timed("Layout", n.figure, () => tr(n, t)) && (a || (a = !0, dr(n.figure), pr(n.figure), gr(n.figure)), i = e, c());
|
|
3052
3245
|
}, d = !1, f = new ResizeObserver(() => {
|
|
3053
3246
|
u(), f.unobserve(n.figure), requestAnimationFrame(() => d || f.observe(n.figure));
|
|
3054
3247
|
}), p = new IntersectionObserver((e) => {
|
|
3055
3248
|
for (let t of e) o = t.isIntersecting, c();
|
|
3056
3249
|
}, { threshold: t.threshold }), m = () => {
|
|
3057
|
-
n.figure.classList.add(x),
|
|
3250
|
+
n.figure.classList.add(x), ar(n, !0), lr(n.svg), n.figure.offsetWidth;
|
|
3058
3251
|
}, h = () => n.figure.classList.remove(x), g = () => {
|
|
3059
3252
|
i = null, u();
|
|
3060
3253
|
}, _ = {
|
|
3061
|
-
relabel: () =>
|
|
3254
|
+
relabel: () => nr(n, t),
|
|
3062
3255
|
refresh: g
|
|
3063
3256
|
};
|
|
3064
|
-
l(), u(), f.observe(n.figure), p.observe(n.figure), window.addEventListener("beforeprint", m), window.addEventListener("afterprint", h),
|
|
3257
|
+
l(), u(), f.observe(n.figure), p.observe(n.figure), window.addEventListener("beforeprint", m), window.addEventListener("afterprint", h), Hr(_);
|
|
3065
3258
|
let v = {
|
|
3066
3259
|
figure: n.figure,
|
|
3067
3260
|
refresh: g,
|
|
3068
|
-
next: () =>
|
|
3069
|
-
previous: () =>
|
|
3070
|
-
stepTo: (e) =>
|
|
3261
|
+
next: () => Yt(n, n.step + 1),
|
|
3262
|
+
previous: () => Yt(n, n.step - 1),
|
|
3263
|
+
stepTo: (e) => Yt(n, e),
|
|
3071
3264
|
get step() {
|
|
3072
3265
|
return n.step;
|
|
3073
3266
|
},
|
|
@@ -3075,41 +3268,52 @@ var Xe = (e) => {
|
|
|
3075
3268
|
return n.plan?.count ?? 0;
|
|
3076
3269
|
},
|
|
3077
3270
|
destroy() {
|
|
3078
|
-
d = !0, f.disconnect(), p.disconnect(), window.removeEventListener("beforeprint", m), window.removeEventListener("afterprint", h),
|
|
3271
|
+
d = !0, f.disconnect(), p.disconnect(), window.removeEventListener("beforeprint", m), window.removeEventListener("afterprint", h), Ur(_), Cn(n), n.figure.tablechart === v && delete n.figure.tablechart;
|
|
3079
3272
|
}
|
|
3080
3273
|
};
|
|
3081
3274
|
return n.figure.tablechart = v, v;
|
|
3082
|
-
},
|
|
3275
|
+
}, qr = !1, Jr = (t) => {
|
|
3083
3276
|
let n = t.find((e) => e.tagName !== "FIGURE");
|
|
3084
|
-
!
|
|
3085
|
-
},
|
|
3086
|
-
let n =
|
|
3087
|
-
|
|
3277
|
+
!qr && n && (qr = !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));
|
|
3278
|
+
}, Yr = async (e, t) => {
|
|
3279
|
+
let n = Er(e.filter((e) => !e.hasAttribute(Nr) && e.tagName !== "TH"));
|
|
3280
|
+
Jr(n), await kr(n), Mr(n), bt(n, t.langattribute);
|
|
3088
3281
|
for (let e of n) e.dispatchEvent(new CustomEvent("tablechart:table", { bubbles: !0 }));
|
|
3089
3282
|
return n;
|
|
3090
|
-
},
|
|
3091
|
-
let n = Q.timed("Building", e, () =>
|
|
3092
|
-
return n ? (e.setAttribute(
|
|
3093
|
-
},
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
|
|
3283
|
+
}, Xr = (e, t) => {
|
|
3284
|
+
let n = Q.timed("Building", e, () => Un(e, t));
|
|
3285
|
+
return n ? (e.setAttribute(Nr, ""), $r(), Kr(n, t)) : null;
|
|
3286
|
+
}, Zr = !1, Qr = /* @__PURE__ */ new WeakMap(), $r = () => {
|
|
3287
|
+
if (Zr || typeof matchMedia != "function") return;
|
|
3288
|
+
Zr = !0;
|
|
3289
|
+
let e = () => {
|
|
3290
|
+
for (let e of document.querySelectorAll(`[${Nr}]`)) {
|
|
3291
|
+
let t = getComputedStyle(e).color, n = Lt(e) || Qr.get(e) !== t;
|
|
3292
|
+
Qr.set(e, t), n && (Ut(e), Wt(e));
|
|
3293
|
+
}
|
|
3294
|
+
};
|
|
3295
|
+
matchMedia("(prefers-color-scheme: dark)").addEventListener("change", e);
|
|
3296
|
+
let t = new MutationObserver(e);
|
|
3297
|
+
for (let e of [document.documentElement, document.body]) t.observe(e, { attributes: !0 });
|
|
3298
|
+
document.addEventListener("transitionend", (t) => {
|
|
3299
|
+
(t.target === document.documentElement || t.target === document.body) && e();
|
|
3300
|
+
});
|
|
3301
|
+
}, ei = async (e, t = {}) => {
|
|
3098
3302
|
if (e.tablechart) return e.tablechart;
|
|
3099
3303
|
let n = {
|
|
3100
3304
|
...k,
|
|
3101
3305
|
...t
|
|
3102
3306
|
};
|
|
3103
3307
|
n.debug && (Q.enabled = !0);
|
|
3104
|
-
let [r] = await
|
|
3105
|
-
return r ?
|
|
3106
|
-
},
|
|
3308
|
+
let [r] = await Yr([e], n);
|
|
3309
|
+
return r ? Xr(r, n) : null;
|
|
3310
|
+
}, ti = async (e = {}, t = document) => {
|
|
3107
3311
|
let n = {
|
|
3108
3312
|
...k,
|
|
3109
3313
|
...e
|
|
3110
3314
|
};
|
|
3111
3315
|
n.debug && (Q.enabled = !0);
|
|
3112
|
-
let r = (await
|
|
3316
|
+
let r = (await Yr(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => Xr(e, n)).filter((e) => e !== null);
|
|
3113
3317
|
return Q.log(`Made ${r.length} chart(s).`), {
|
|
3114
3318
|
charts: r,
|
|
3115
3319
|
refresh: () => {
|
|
@@ -3120,4 +3324,4 @@ var Xe = (e) => {
|
|
|
3120
3324
|
}
|
|
3121
3325
|
};
|
|
3122
3326
|
};
|
|
3123
|
-
export { L as A, t as B,
|
|
3327
|
+
export { L as A, t as B, Te as C, ie as D, pe as E, D as F, b as G, x as H, p as I, O as K, e as L, P as M, F as N, q as O, S as P, f as R, Xe as S, he as T, s as U, m as V, w as W, bt as _, Er as a, it as b, dr as c, Un as d, tr as f, Yt as g, ir as h, Yr as i, R as j, oe as k, pr as l, ar as m, Ir as n, kr as o, nr as p, k as q, ti as r, Mr as s, ei as t, Tn as u, yt as v, J as w, at as x, gt as y, v as z };
|