@martinomagnifico/tablechart 1.2.3 → 1.2.4
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 +27 -0
- package/dist/tablechart-shared.d.mts +13 -2
- package/dist/tablechart-shared.mjs +748 -641
- 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,
|
|
@@ -46,7 +47,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
46
47
|
}, z = 0, B = 0, V = (e) => {
|
|
47
48
|
let t = e.querySelector(":scope > defs");
|
|
48
49
|
return t || (t = F("defs"), e.prepend(t)), t;
|
|
49
|
-
},
|
|
50
|
+
}, ee = (e) => {
|
|
50
51
|
if (e.tagName === "circle") {
|
|
51
52
|
let [t, n, r] = [
|
|
52
53
|
"cx",
|
|
@@ -65,18 +66,18 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
65
66
|
"ry"
|
|
66
67
|
].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
68
|
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
|
-
},
|
|
69
|
+
}, H = (e, t, n, r, i) => {
|
|
69
70
|
if (!t.length || !i.length) return;
|
|
70
71
|
let a = `tablechart-clip-${++B}`, o = F("clipPath", {
|
|
71
72
|
id: a,
|
|
72
73
|
clipPathUnits: "userSpaceOnUse"
|
|
73
74
|
}), s = `M${-n},${-r}h${n * 3}v${r * 3}h${-n * 3}z`;
|
|
74
75
|
o.appendChild(F("path", {
|
|
75
|
-
d: s + t.map(
|
|
76
|
+
d: s + t.map(ee).join(""),
|
|
76
77
|
"clip-rule": "evenodd"
|
|
77
78
|
})), V(e).appendChild(o);
|
|
78
79
|
for (let e of i) e.setAttribute("clip-path", `url(#${a})`);
|
|
79
|
-
},
|
|
80
|
+
}, U = (e, t, n, r, i, a) => {
|
|
80
81
|
if (!t.length) return;
|
|
81
82
|
let o = `tablechart-cut-${++z}`, s = F("mask", {
|
|
82
83
|
id: o,
|
|
@@ -97,7 +98,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
97
98
|
}
|
|
98
99
|
let l = null;
|
|
99
100
|
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
|
-
}, te = 0,
|
|
101
|
+
}, te = 0, ne = (e) => Array.from(e.querySelectorAll(`.${r}`)).map((e) => {
|
|
101
102
|
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
103
|
return {
|
|
103
104
|
row: Number(e.dataset.row),
|
|
@@ -108,7 +109,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
108
109
|
sideways: e.dataset.grow === "right",
|
|
109
110
|
part: s
|
|
110
111
|
};
|
|
111
|
-
}),
|
|
112
|
+
}), re = {
|
|
112
113
|
create: () => null,
|
|
113
114
|
draw(e, t, n) {
|
|
114
115
|
let { rows: r, y: i, svg: a, breakAt: o } = n;
|
|
@@ -147,7 +148,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
147
148
|
fill: "white"
|
|
148
149
|
}));
|
|
149
150
|
let f = [], p = i(o);
|
|
150
|
-
for (let e of
|
|
151
|
+
for (let e of ne(a)) {
|
|
151
152
|
let t = e.sideways ? n.breakX : p;
|
|
152
153
|
if (t === void 0 || !(e.sideways ? e.x < t && e.x + e.width > t : e.y < p && e.y + e.height > p)) continue;
|
|
153
154
|
let [i, o] = e.sideways ? [c(e, t), c(e, t + n.breakGap)] : [c(e, p - n.breakGap), c(e, p)];
|
|
@@ -170,17 +171,17 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
170
171
|
let g = F("defs");
|
|
171
172
|
g.appendChild(d), a.prepend(g, h);
|
|
172
173
|
}
|
|
173
|
-
},
|
|
174
|
+
}, W = (e) => {
|
|
174
175
|
let t = -Infinity;
|
|
175
176
|
for (let n of e) t = Math.max(t, n);
|
|
176
177
|
return t;
|
|
177
|
-
},
|
|
178
|
+
}, ie = (e) => (e.split(/[.,]/)[1] || "").length, G = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
|
|
178
179
|
minimumFractionDigits: e,
|
|
179
180
|
maximumFractionDigits: e
|
|
180
|
-
}),
|
|
181
|
-
let r =
|
|
181
|
+
}), ae = (e, t, n) => {
|
|
182
|
+
let r = G(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
|
|
182
183
|
return [i, r.slice(+!!i).map((e) => e.value).join("")];
|
|
183
|
-
},
|
|
184
|
+
}, K = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), oe = (e, t) => {
|
|
184
185
|
let n = document.createElement("span");
|
|
185
186
|
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
187
|
else {
|
|
@@ -189,24 +190,24 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
189
190
|
t && n.setAttribute("data-i18n", t);
|
|
190
191
|
}
|
|
191
192
|
return t.appendChild(n), n;
|
|
192
|
-
},
|
|
193
|
-
let o = t?.textContent || "", s =
|
|
193
|
+
}, se = (t, n, r, i, a = "%") => {
|
|
194
|
+
let o = t?.textContent || "", s = K(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
195
|
label: r,
|
|
195
196
|
computed: n,
|
|
196
197
|
stated: s,
|
|
197
198
|
agrees: l
|
|
198
199
|
};
|
|
199
200
|
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
|
-
},
|
|
201
|
+
}, ce = (e, t) => (t - e) / Math.abs(e) * 100, le = (e, t) => {
|
|
201
202
|
let n = (t, n) => {
|
|
202
203
|
let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
|
|
203
204
|
return Number.isFinite(r) ? r - 1 : n;
|
|
204
205
|
};
|
|
205
206
|
return [n("data-from", 0), n("data-to", t - 1)];
|
|
206
|
-
},
|
|
207
|
-
create:
|
|
207
|
+
}, ue = {
|
|
208
|
+
create: oe,
|
|
208
209
|
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] =
|
|
210
|
+
let { rows: i, cx: o, y: s, unit: l, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = le(t, i.length), _ = i[h], v = i[g];
|
|
210
211
|
if (!_ || !v) {
|
|
211
212
|
console.warn(`[${e}] A bracket points at a row that is not there (row ${h + 1} to ${g + 1}, of ${i.length}).`);
|
|
212
213
|
return;
|
|
@@ -224,9 +225,9 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
224
225
|
"data-note": r.note,
|
|
225
226
|
points: `${S},${D} ${S - y * .45},${D - y} ${S + y * .45},${D - y}`,
|
|
226
227
|
style: M("--after", m)
|
|
227
|
-
})), n && (R(n, (x + S) / 2, C, O, f), n.style.setProperty("--after", String(m))),
|
|
228
|
+
})), n && (R(n, (x + S) / 2, C, O, f), n.style.setProperty("--after", String(m))), se(n, ce(_.value, v.value), `${_.value} to ${v.value}`, r);
|
|
228
229
|
}
|
|
229
|
-
},
|
|
230
|
+
}, de = (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], fe = (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], pe = (e, t, n) => {
|
|
230
231
|
if (e.length > 400) return e.map(() => null);
|
|
231
232
|
let r = 1;
|
|
232
233
|
for (let t of e) for (let [, , e, n] of t) r = Math.max(r, e, n);
|
|
@@ -236,21 +237,21 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
236
237
|
return a;
|
|
237
238
|
}, o = (e) => {
|
|
238
239
|
for (let t of a(e)) i.get(t)?.push(e) ?? i.set(t, [e]);
|
|
239
|
-
}, s = (e) =>
|
|
240
|
+
}, s = (e) => fe(e, n) && a(e).every((t) => !i.get(t)?.some((t) => de(e, t)));
|
|
240
241
|
return t.forEach(o), e.map((e) => {
|
|
241
242
|
let t = e.findIndex(s);
|
|
242
243
|
return t < 0 ? null : (o(e[t]), t);
|
|
243
244
|
});
|
|
244
|
-
},
|
|
245
|
+
}, me = /* @__PURE__ */ new WeakMap(), he = (e) => {
|
|
245
246
|
let t = [...e].filter((e) => !!e), n = t.map((e) => ({
|
|
246
247
|
width: e.offsetWidth,
|
|
247
248
|
height: e.offsetHeight
|
|
248
249
|
}));
|
|
249
|
-
t.forEach((e, t) =>
|
|
250
|
-
},
|
|
250
|
+
t.forEach((e, t) => me.set(e, n[t]));
|
|
251
|
+
}, q = (e) => me.get(e) ?? {
|
|
251
252
|
width: e.offsetWidth,
|
|
252
253
|
height: e.offsetHeight
|
|
253
|
-
},
|
|
254
|
+
}, ge = 6, _e = (e, t, n) => e.some((e) => q(e).width * n > t - ge * n), ve = (e, t, n) => t >= q(e).height * n * 1.6, ye = (e, t, n) => t >= q(e).width * n * 1.5, be = (e, t, n, r, i = .7) => {
|
|
254
255
|
e.style.setProperty(r, "1");
|
|
255
256
|
let a = 1;
|
|
256
257
|
for (let e of t) {
|
|
@@ -259,42 +260,55 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
259
260
|
}
|
|
260
261
|
let o = a >= i ? a : 0;
|
|
261
262
|
return e.style.setProperty(r, String(o || i)), o;
|
|
262
|
-
},
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
263
|
+
}, xe = (e, t) => {
|
|
264
|
+
e.sort((e, t) => e.y - t.y);
|
|
265
|
+
let n = [], r = (e) => e.sum / e.items.length - (e.items.length - 1) * t / 2;
|
|
266
|
+
for (let i of e) {
|
|
267
|
+
let e = {
|
|
268
|
+
items: [i],
|
|
269
|
+
sum: i.y
|
|
270
|
+
};
|
|
271
|
+
for (let i = n.at(-1); i && r(i) + i.items.length * t > r(e); i = n.at(-1)) n.pop(), e = {
|
|
272
|
+
items: [...i.items, ...e.items],
|
|
273
|
+
sum: i.sum + e.sum
|
|
274
|
+
};
|
|
275
|
+
n.push(e);
|
|
276
|
+
}
|
|
277
|
+
for (let e of n) e.items.forEach((n, i) => n.y = r(e) + i * t);
|
|
278
|
+
return e;
|
|
279
|
+
}, Se = {
|
|
266
280
|
outside: [.5, 1],
|
|
267
281
|
below: [.5, 0],
|
|
268
282
|
after: [0, .5],
|
|
269
283
|
before: [1, .5]
|
|
270
|
-
},
|
|
271
|
-
let [a, o] =
|
|
284
|
+
}, J = (e, t, n, r, i = [.5, .5]) => {
|
|
285
|
+
let [a, o] = Se[e.dataset.place ?? ""] ?? i, { width: s, height: c } = q(e);
|
|
272
286
|
return [
|
|
273
287
|
Number.parseFloat(e.style.left) / 100 * n - s * t * a,
|
|
274
288
|
Number.parseFloat(e.style.top) / 100 * r - c * t * o,
|
|
275
289
|
s * t,
|
|
276
290
|
c * t
|
|
277
291
|
];
|
|
278
|
-
},
|
|
292
|
+
}, Ce = (e, t, n) => {
|
|
279
293
|
for (let r of e) {
|
|
280
294
|
if (r.dataset.place === "none" || !r.style.left) continue;
|
|
281
|
-
let [e] =
|
|
295
|
+
let [e] = Se[r.dataset.place ?? ""] ?? [.5, .5], i = q(r).width * t, a = Number.parseFloat(r.style.left) / 100 * n, o = Math.min(Math.max(a, i * e), n - i * (1 - e));
|
|
282
296
|
o !== a && (r.style.left = `${o / n * 100}%`);
|
|
283
297
|
}
|
|
284
|
-
},
|
|
285
|
-
let i = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), a =
|
|
298
|
+
}, we = (e, t, n, r) => {
|
|
299
|
+
let i = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), a = Te(i, t, n, r);
|
|
286
300
|
i.forEach((e, t) => {
|
|
287
301
|
t % a && e.setAttribute("data-left-out", "");
|
|
288
302
|
});
|
|
289
|
-
},
|
|
303
|
+
}, Te = (e, t, n, r) => {
|
|
290
304
|
if (e.length < 2) return 1;
|
|
291
|
-
let i = e.map((e) =>
|
|
305
|
+
let i = e.map((e) => J(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
306
|
for (; s < e.length && i.some((e, t) => t >= s && t % s === 0 && !o(i[t - s], e));) s++;
|
|
293
307
|
return s;
|
|
294
|
-
},
|
|
308
|
+
}, Ee = {
|
|
295
309
|
create(e, t) {
|
|
296
310
|
if (!e.textContent?.trim()) return null;
|
|
297
|
-
let n =
|
|
311
|
+
let n = oe(e, t);
|
|
298
312
|
return n.dataset.kind = "note", n;
|
|
299
313
|
},
|
|
300
314
|
draw(t, n, r) {
|
|
@@ -319,9 +333,9 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
319
333
|
y2: _,
|
|
320
334
|
style: M("--after", d)
|
|
321
335
|
}), u.querySelector(`:scope > .${m}`)), !n) return;
|
|
322
|
-
let v =
|
|
336
|
+
let v = q(n).width * l, y = q(n).height * l, b = 4 * l, x = f.flat().flatMap((e) => !e.style.left || e.dataset.place === "none" || e.hasAttribute("data-left-out") ? [] : [{
|
|
323
337
|
label: e,
|
|
324
|
-
box:
|
|
338
|
+
box: J(e, l, O, c)
|
|
325
339
|
}]), S = [0, y + b / 2].flatMap((e) => [
|
|
326
340
|
[
|
|
327
341
|
g - v / 2,
|
|
@@ -341,15 +355,15 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
341
355
|
v,
|
|
342
356
|
y
|
|
343
357
|
]
|
|
344
|
-
]), [C] =
|
|
358
|
+
]), [C] = pe([S], [...r.taken, ...x.map((e) => e.box)], [
|
|
345
359
|
0,
|
|
346
360
|
0,
|
|
347
361
|
O,
|
|
348
362
|
c
|
|
349
363
|
]), 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)
|
|
364
|
+
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) de(e.box, w) && e.label.setAttribute("data-left-out", "");
|
|
351
365
|
}
|
|
352
|
-
},
|
|
366
|
+
}, De = (e, t, n) => {
|
|
353
367
|
let r = n.reduce((e, t) => e + t, 0);
|
|
354
368
|
if (e === "mean") return r ? t.reduce((e, t, r) => e + t * n[r], 0) / r : null;
|
|
355
369
|
if (e === "median") {
|
|
@@ -362,25 +376,25 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
362
376
|
}
|
|
363
377
|
let i = Number.parseFloat(e);
|
|
364
378
|
return Number.isFinite(i) ? i : null;
|
|
365
|
-
},
|
|
379
|
+
}, Oe = {
|
|
366
380
|
create(e, t) {
|
|
367
381
|
if (!e.textContent?.trim()) return null;
|
|
368
|
-
let n =
|
|
382
|
+
let n = oe(e, t);
|
|
369
383
|
return n.dataset.kind = "reference", n;
|
|
370
384
|
},
|
|
371
385
|
draw(t, n, r) {
|
|
372
386
|
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
387
|
if (h) {
|
|
374
|
-
let t = p.map((e) =>
|
|
388
|
+
let t = p.map((e) => K(e.label));
|
|
375
389
|
if (r.categories[0]?.parentElement?.dataset.place === "beside" || t.some(Number.isNaN)) {
|
|
376
390
|
console.warn(`[${e}] A reference line among the names needs names that are numbers, under columns or points.`);
|
|
377
391
|
return;
|
|
378
392
|
}
|
|
379
|
-
let n =
|
|
393
|
+
let n = De(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
394
|
y = n, v = o < 0 ? null : s + l * (c - s), _ = !1;
|
|
381
395
|
} else {
|
|
382
396
|
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 =
|
|
397
|
+
y = De(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
398
|
}
|
|
385
399
|
if (v === null || y === null) {
|
|
386
400
|
console.warn(`[${e}] A reference line needs a number, "mean" or "median", not "${g}".`);
|
|
@@ -414,7 +428,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
414
428
|
},
|
|
415
429
|
style: M("--after", f)
|
|
416
430
|
}), d.querySelector(`:scope > .${m}`)), n) {
|
|
417
|
-
let e =
|
|
431
|
+
let e = q(n).width * u, t = q(n).height * u, i = 4 * u, a = _ ? [
|
|
418
432
|
[
|
|
419
433
|
S - e,
|
|
420
434
|
v - t / 2,
|
|
@@ -456,17 +470,17 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
456
470
|
e,
|
|
457
471
|
t
|
|
458
472
|
]
|
|
459
|
-
]), [o] =
|
|
473
|
+
]), [o] = pe([a], r.taken, [
|
|
460
474
|
0,
|
|
461
475
|
0,
|
|
462
476
|
O,
|
|
463
477
|
l
|
|
464
478
|
]), 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") &&
|
|
479
|
+
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") && se(n, y, `the ${g}`, r, "");
|
|
466
480
|
}
|
|
467
481
|
}
|
|
468
|
-
},
|
|
469
|
-
create:
|
|
482
|
+
}, ke = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, Ae = {
|
|
483
|
+
create: oe,
|
|
470
484
|
draw(e, t, n) {
|
|
471
485
|
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
486
|
if (!m || !h) return;
|
|
@@ -479,9 +493,9 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
479
493
|
y -= D * _, b -= k * _, x += D * _, S += k * _;
|
|
480
494
|
let A = Number.parseFloat(e.getAttribute("data-at") || "0.5");
|
|
481
495
|
if (t) {
|
|
482
|
-
let e = y + (x - y) * A, n = b + (S - b) * A, a =
|
|
496
|
+
let e = y + (x - y) * A, n = b + (S - b) * A, a = q(t).width * s / 2, c = n + q(t).height * s / 2 + 8 * s, u = 0;
|
|
483
497
|
r.forEach((t, n) => {
|
|
484
|
-
let r = (f[n] ?
|
|
498
|
+
let r = (f[n] ? q(f[n]).width : 0) * s / 2;
|
|
485
499
|
if (Math.abs(i(n) - e) >= a + r) return;
|
|
486
500
|
let d = o(t.value) - 7 * s - l;
|
|
487
501
|
u = Math.max(u, c - d);
|
|
@@ -509,27 +523,27 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
509
523
|
style: M("--after", p)
|
|
510
524
|
})), t && (R(t, y + (x - y) * A, b + (S - b) * A, O, u), t.style.setProperty("--after", String(p)));
|
|
511
525
|
let B = Number.parseFloat(e.getAttribute("data-years") || "");
|
|
512
|
-
!Number.isNaN(B) && B > 0 &&
|
|
526
|
+
!Number.isNaN(B) && B > 0 && se(t, ke(m.value, h.value, B), `${m.value} to ${h.value} over ${B} years`, n);
|
|
513
527
|
}
|
|
514
|
-
},
|
|
528
|
+
}, je = (e, t, n, r, i) => {
|
|
515
529
|
if (!r) return e / t * n;
|
|
516
530
|
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
531
|
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
|
-
},
|
|
532
|
+
}, Me = (e, t, n) => {
|
|
519
533
|
let r = .15, i = Math.min(e * .7 / (t + (t - 1) * r), n), a = t * i + (t - 1) * i * r;
|
|
520
534
|
return {
|
|
521
535
|
size: i,
|
|
522
536
|
gap: i * r,
|
|
523
537
|
offset: (e) => -a / 2 + e * i * 1.15
|
|
524
538
|
};
|
|
525
|
-
},
|
|
539
|
+
}, Ne = (e, t, n) => {
|
|
526
540
|
let r = e.series[n], i = e.series.some((e) => e.focus) && !r.focus;
|
|
527
541
|
return {
|
|
528
542
|
"data-series": n + 1,
|
|
529
543
|
...i && { "data-muted": "" },
|
|
530
544
|
style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${M("--i", t.slot)}`
|
|
531
545
|
};
|
|
532
|
-
},
|
|
546
|
+
}, Pe = (e, t, n = !1) => {
|
|
533
547
|
let r = 0, i = 0;
|
|
534
548
|
return Array.from({ length: t }, (t, a) => {
|
|
535
549
|
let o = e.cells[a] ?? e.cells[0], s = o.missing ? 0 : o.value;
|
|
@@ -556,19 +570,19 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
556
570
|
cell: o
|
|
557
571
|
};
|
|
558
572
|
});
|
|
559
|
-
},
|
|
560
|
-
let r =
|
|
573
|
+
}, Fe = (e, t, n = !1) => {
|
|
574
|
+
let r = Pe(e, t, n);
|
|
561
575
|
return {
|
|
562
576
|
top: Math.max(0, ...r.map((e) => e.to)),
|
|
563
577
|
bottom: Math.min(0, ...r.map((e) => e.to))
|
|
564
578
|
};
|
|
565
|
-
},
|
|
566
|
-
let { top: n, bottom: r } =
|
|
579
|
+
}, Ie = (e, t) => {
|
|
580
|
+
let { top: n, bottom: r } = Fe(e, t);
|
|
567
581
|
return n + r;
|
|
568
|
-
},
|
|
582
|
+
}, Le = (e, t, n) => {
|
|
569
583
|
let r = t.series.some((e) => e.focus);
|
|
570
584
|
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
|
-
},
|
|
585
|
+
}, Re = (e, t) => e.some((n, r) => r !== t && !n.cell.missing && n.to !== n.from && n.from === e[t].to), ze = (e, t, n, i = {}, a = "") => {
|
|
572
586
|
let o = {
|
|
573
587
|
class: I(r, t),
|
|
574
588
|
"data-kind": "bar",
|
|
@@ -586,10 +600,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
586
600
|
...a,
|
|
587
601
|
class: I("tablechart-piece", t),
|
|
588
602
|
"data-row": n + 1,
|
|
589
|
-
...
|
|
603
|
+
...Ne(e, t, r)
|
|
590
604
|
}));
|
|
591
605
|
};
|
|
592
|
-
},
|
|
606
|
+
}, Be = {
|
|
593
607
|
segments: (e) => e.map((e) => ({
|
|
594
608
|
...e,
|
|
595
609
|
from: 0,
|
|
@@ -610,39 +624,42 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
610
624
|
categories: "beside",
|
|
611
625
|
headroom: () => 0,
|
|
612
626
|
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(
|
|
627
|
+
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(W(c.map((e) => q(e).width * a)), 0), p = Math.min(f + 10 * a, O * .42);
|
|
614
628
|
c[0]?.parentElement?.style.setProperty("--_beside", `${((p - 8 * a) / O * 100).toFixed(2)}%`);
|
|
615
|
-
let m = O - 4 * a, h = e.stacked ? Math.max(
|
|
629
|
+
let m = O - 4 * a, h = e.stacked ? Math.max(W(e.rows.map((t) => Fe(t, e.series.length).top)), 0) || 1 : Math.max(W(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = e.stacked ? Math.max(W(e.rows.map((t) => -Fe(t, e.series.length).bottom)), 0) : Math.max(W(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) => je(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 = Me(x, e.series.length, u), T = s[0] ?? e.totals[0], E = T ? q(T).height * a * .56 : 0, D = Math.max(((d && !e.stacked ? w.size : C) - E) / 2, 5 * a), k = (e) => q(e).width * a, A = (e) => e.length ? W(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
630
|
label: e,
|
|
617
631
|
value: j(t, n)
|
|
618
632
|
}))), P = (t) => {
|
|
619
|
-
let n =
|
|
633
|
+
let n = Fe(e.rows[t], e.series.length);
|
|
620
634
|
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
|
-
|
|
635
|
+
}, 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" && ye(t, n, a), V = d && !e.stacked && e.labels === "inside" && !!T && q(T).height * a <= w.size;
|
|
636
|
+
if (V && (L = z = 0), V || !d && !e.stacked) {
|
|
637
|
+
let e = d ? N.filter(({ label: e }) => e.dataset.missing === void 0) : t.map((e, t) => ({
|
|
638
|
+
label: s[t],
|
|
639
|
+
value: e.value
|
|
640
|
+
}));
|
|
641
|
+
for (let t = 0; t < 3; t++) {
|
|
642
|
+
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));
|
|
643
|
+
if (r <= L && i <= z) break;
|
|
644
|
+
L = Math.max(L, r), z = Math.max(z, i);
|
|
645
|
+
}
|
|
629
646
|
}
|
|
630
|
-
let
|
|
647
|
+
let ee = m - p - L - z, H = p + z + b(v, ee), U = (e) => e < 0 ? H - b(e, ee) : H + b(e, ee);
|
|
631
648
|
if (e.squeeze && (e.breakX = U(e.squeeze.gap)), e.x = U, e.stacked) {
|
|
632
649
|
let t = e.length("--tablechart-stack-gap", "1px") ?? a;
|
|
633
650
|
e.rows.forEach((r, i) => {
|
|
634
|
-
let o =
|
|
651
|
+
let o = Fe(r, e.series.length), s = ze(e, r, i, { "data-grow": "right" }, o.bottom < 0 ? `${H - U(o.bottom)}px center` : ""), l = S(i) - C / 2, u = Pe(r, e.series.length);
|
|
635
652
|
u.forEach(({ from: r, to: o, cell: c }, d) => {
|
|
636
653
|
let f = e.seriesValues[d][i];
|
|
637
654
|
if (f.dataset.place = "none", c.missing || o === r) return;
|
|
638
|
-
let p = Math.min(U(r), U(o)), m = Math.max(U(r), U(o)), h =
|
|
655
|
+
let p = Math.min(U(r), U(o)), m = Math.max(U(r), U(o)), h = Re(u, d) ? Math.min(t, (m - p) / 2) : 0, [g, _] = U(o) > U(r) ? [p, m - h] : [p + h, m];
|
|
639
656
|
s(d, {
|
|
640
657
|
x: g,
|
|
641
658
|
y: l,
|
|
642
659
|
width: Math.max(_ - g, 1),
|
|
643
660
|
height: C,
|
|
644
661
|
...o < r && { "data-grow": "left" }
|
|
645
|
-
}), f.dataset.place = "inside", f.toggleAttribute("data-left-out", !
|
|
662
|
+
}), f.dataset.place = "inside", f.toggleAttribute("data-left-out", !ye(f, m - p, a) || q(f).height * a > C), Le(f, e, d), R(f, (p + m) / 2, S(i), O, n);
|
|
646
663
|
});
|
|
647
664
|
let d = e.totals[i];
|
|
648
665
|
d && (d.dataset.place = P(i) ? "before" : "after", R(d, P(i) ? U(o.bottom) - D : U(o.top) + D, S(i), O, n));
|
|
@@ -658,29 +675,31 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
658
675
|
return;
|
|
659
676
|
}
|
|
660
677
|
if (d) {
|
|
661
|
-
let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s =
|
|
662
|
-
size:
|
|
678
|
+
let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = be(e.plot, t, (e) => ({
|
|
679
|
+
size: q(e).height * a,
|
|
663
680
|
room: w.size + w.gap * .5
|
|
664
681
|
}), "--_fit");
|
|
665
682
|
e.rows.forEach((t, i) => {
|
|
666
|
-
e.series.forEach((
|
|
667
|
-
let
|
|
668
|
-
if (
|
|
669
|
-
|
|
683
|
+
e.series.forEach((c, l) => {
|
|
684
|
+
let u = t.cells[l] ?? t.cells[0], d = e.seriesValues[l][i];
|
|
685
|
+
if (u.missing) {
|
|
686
|
+
d.dataset.place = "none";
|
|
670
687
|
return;
|
|
671
688
|
}
|
|
672
|
-
let
|
|
673
|
-
|
|
689
|
+
let f = U(u.value), p = u.value < 0, m = S(i) + w.offset(l), h = Math.max(Math.abs(f - H), 1);
|
|
690
|
+
u.value !== 0 && o.appendChild(F("rect", {
|
|
674
691
|
class: I(r, t),
|
|
675
692
|
"data-kind": "bar",
|
|
676
693
|
"data-row": i + 1,
|
|
677
|
-
"data-grow":
|
|
678
|
-
x:
|
|
679
|
-
y:
|
|
680
|
-
width:
|
|
694
|
+
"data-grow": p ? "left" : "right",
|
|
695
|
+
x: p ? H - h : H,
|
|
696
|
+
y: m,
|
|
697
|
+
width: h,
|
|
681
698
|
height: w.size,
|
|
682
|
-
...
|
|
683
|
-
}))
|
|
699
|
+
...Ne(e, t, l)
|
|
700
|
+
}));
|
|
701
|
+
let g = V && B(d, Math.abs(f - H)), _ = Math.max(Math.min(D, Math.abs(f - H) - k(d) - 6 * a), 6 * a), v = p ? 1 : -1;
|
|
702
|
+
d.dataset.place = g ? "inside" : p ? "before" : "after", d.toggleAttribute("data-left-out", !s), g && Le(d, e, l), R(d, g ? e.insideAlign === "center" ? (H + f) / 2 : e.insideAlign === "start" ? H - v * (_ + k(d) / 2) : f + v * (_ + k(d) / 2) : p ? f - D : f + D, m + w.size / 2, O, n);
|
|
684
703
|
});
|
|
685
704
|
let l = c[i];
|
|
686
705
|
l && R(l, p - 8 * a, S(i), O, n);
|
|
@@ -693,7 +712,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
693
712
|
}));
|
|
694
713
|
return;
|
|
695
714
|
}
|
|
696
|
-
let
|
|
715
|
+
let te = t.map((e, t) => B(s[t], Math.abs(U(e.value) - H)));
|
|
697
716
|
t.forEach((t, i) => {
|
|
698
717
|
let l = U(t.value), u = S(i), d = t.value < 0, f = Math.abs(l - H), m = Math.max(f, 1);
|
|
699
718
|
t.value !== 0 && o.appendChild(F("rect", {
|
|
@@ -708,7 +727,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
708
727
|
style: M("--i", t.slot)
|
|
709
728
|
}));
|
|
710
729
|
let h = s[i], g = Math.max(Math.min(D, f - k(h) - 6 * a), 6 * a), _ = d ? 1 : -1;
|
|
711
|
-
h.dataset.place =
|
|
730
|
+
h.dataset.place = te[i] ? "inside" : d ? "before" : "after", h.dataset.kind = t.kind, R(h, te[i] ? e.insideAlign === "center" ? (H + l) / 2 : e.insideAlign === "start" ? H - _ * (g + k(h) / 2) : l + _ * (g + k(h) / 2) : l - _ * D, u, O, n);
|
|
712
731
|
let v = c[i];
|
|
713
732
|
v && R(v, p - 8 * a, u, O, n);
|
|
714
733
|
}), o.appendChild(F("line", {
|
|
@@ -719,7 +738,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
719
738
|
y2: n
|
|
720
739
|
}));
|
|
721
740
|
}
|
|
722
|
-
},
|
|
741
|
+
}, Ve = {
|
|
723
742
|
segments: (e) => e.map((e) => ({
|
|
724
743
|
...e,
|
|
725
744
|
from: 0,
|
|
@@ -739,18 +758,18 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
739
758
|
if (e.stacked) {
|
|
740
759
|
let t = e.length("--tablechart-stack-gap", "1px") ?? c;
|
|
741
760
|
e.rows.forEach((r, i) => {
|
|
742
|
-
let l =
|
|
761
|
+
let l = Fe(r, e.series.length), u = ze(e, r, i, {}, l.bottom < 0 ? `center ${p - a(l.top)}px` : ""), d = n(i) - o / 2, f = Pe(r, e.series.length);
|
|
743
762
|
f.forEach(({ from: r, to: l, cell: p }, m) => {
|
|
744
763
|
let h = e.seriesValues[m][i];
|
|
745
764
|
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 =
|
|
765
|
+
let g = Math.min(a(l), a(r)), _ = Math.max(a(l), a(r)), v = Re(f, m) ? Math.min(t, (_ - g) / 2) : 0, [y, b] = a(l) < a(r) ? [g + v, _] : [g, _ - v];
|
|
747
766
|
u(m, {
|
|
748
767
|
x: d,
|
|
749
768
|
y,
|
|
750
769
|
width: o,
|
|
751
770
|
height: Math.max(b - y, 1),
|
|
752
771
|
...l < r && { "data-grow": "down" }
|
|
753
|
-
}), h.dataset.place = "inside", h.toggleAttribute("data-left-out", !
|
|
772
|
+
}), h.dataset.place = "inside", h.toggleAttribute("data-left-out", !ve(h, _ - g, c) || q(h).width * c > o - 4 * c), Le(h, e, m), R(h, n(i), (g + _) / 2, O, s);
|
|
754
773
|
});
|
|
755
774
|
let m = e.totals[i];
|
|
756
775
|
if (m) {
|
|
@@ -767,29 +786,31 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
767
786
|
return;
|
|
768
787
|
}
|
|
769
788
|
if (e.own.length > 1) {
|
|
770
|
-
let t =
|
|
771
|
-
size:
|
|
789
|
+
let t = Me(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 = be(e.plot, o, (e) => ({
|
|
790
|
+
size: q(e).width * c,
|
|
772
791
|
room: t.size + t.gap * .5
|
|
773
|
-
}), "--_fit");
|
|
792
|
+
}), "--_fit"), m = d === "inside" && !_e(o, t.size, c), h = o[0] ? q(o[0]).height * c * .56 : 0, g = Math.min(...o.map((e) => (t.size - q(e).width * c) / 2));
|
|
774
793
|
e.rows.forEach((i, o) => {
|
|
775
|
-
e.own.forEach((d,
|
|
776
|
-
let
|
|
777
|
-
if (
|
|
778
|
-
|
|
794
|
+
e.own.forEach((d, _) => {
|
|
795
|
+
let v = i.cells[d] ?? i.cells[0], y = e.seriesValues[d][o], b = n(o) + t.offset(_);
|
|
796
|
+
if (v.missing) {
|
|
797
|
+
y.dataset.place = "none";
|
|
779
798
|
return;
|
|
780
799
|
}
|
|
781
|
-
let
|
|
782
|
-
|
|
800
|
+
let x = a(v.value), S = v.value < 0, C = Math.max(Math.abs(p - x), 1);
|
|
801
|
+
v.value !== 0 && l.appendChild(F("rect", {
|
|
783
802
|
class: I(r, i),
|
|
784
803
|
"data-kind": "bar",
|
|
785
804
|
"data-row": o + 1,
|
|
786
|
-
...
|
|
787
|
-
x:
|
|
788
|
-
y:
|
|
805
|
+
...S && { "data-grow": "down" },
|
|
806
|
+
x: b,
|
|
807
|
+
y: S ? p : p - C,
|
|
789
808
|
width: t.size,
|
|
790
|
-
height:
|
|
791
|
-
...
|
|
792
|
-
}))
|
|
809
|
+
height: C,
|
|
810
|
+
...Ne(e, i, d)
|
|
811
|
+
}));
|
|
812
|
+
let w = m && ve(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);
|
|
813
|
+
y.dataset.place = w ? "inside" : S ? "below" : "outside", y.toggleAttribute("data-left-out", !u), w && Le(y, e, d), R(y, b + t.size / 2, w ? D : S ? x + 4 * c : x - 4 * c, O, s);
|
|
793
814
|
});
|
|
794
815
|
}), l.appendChild(F("line", {
|
|
795
816
|
class: i,
|
|
@@ -800,8 +821,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
800
821
|
}));
|
|
801
822
|
return;
|
|
802
823
|
}
|
|
803
|
-
let m = e.own[0], h = e.own.length < e.series.length, g =
|
|
804
|
-
for (let [e, t] of u.entries()) _[e] && (y = Math.min(y, (o -
|
|
824
|
+
let m = e.own[0], h = e.own.length < e.series.length, g = _e(u, o, c), _ = t.map((e, t) => d === "inside" && !g && !e.missing && ve(u[t], Math.abs(p - a(e.value)), c)), v = u[0] ? q(u[0]).height * c * .56 : 0, y = Infinity;
|
|
825
|
+
for (let [e, t] of u.entries()) _[e] && (y = Math.min(y, (o - q(t).width * c) / 2));
|
|
805
826
|
t.forEach((t, i) => {
|
|
806
827
|
let d = a(t.value), g = t.value < 0;
|
|
807
828
|
if (t.missing) {
|
|
@@ -819,10 +840,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
819
840
|
width: o,
|
|
820
841
|
height: b,
|
|
821
842
|
style: M("--i", t.slot),
|
|
822
|
-
...h &&
|
|
843
|
+
...h && Ne(e, t, m)
|
|
823
844
|
}));
|
|
824
845
|
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] &&
|
|
846
|
+
R(u[i], n(i), _[i] ? C : w, O, s), u[i].dataset.place = _[i] ? "inside" : g ? "below" : "outside", h && _[i] && Le(u[i], e, m);
|
|
826
847
|
}), l.appendChild(F("line", {
|
|
827
848
|
class: i,
|
|
828
849
|
x1: 0,
|
|
@@ -831,7 +852,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
831
852
|
y2: p
|
|
832
853
|
}));
|
|
833
854
|
}
|
|
834
|
-
},
|
|
855
|
+
}, He = 0, Ue = (e) => e.filter((e) => !e.isTotal), We = {
|
|
835
856
|
aspect: .66,
|
|
836
857
|
centre: !0,
|
|
837
858
|
headroom: () => 0,
|
|
@@ -842,7 +863,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
842
863
|
kind: "bar"
|
|
843
864
|
})),
|
|
844
865
|
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 =
|
|
866
|
+
let c = O / 2, u = t / 2, d = Ue(e).reduce((e, t) => e + Math.abs(t.value), 0);
|
|
846
867
|
if (!d) return;
|
|
847
868
|
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 = 0, y = 0, b = 0;
|
|
848
869
|
if (e.forEach((e, o) => {
|
|
@@ -875,10 +896,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
875
896
|
"data-row": o + 1,
|
|
876
897
|
style: `${S} ${M("--i", e.slot)}`
|
|
877
898
|
})), s.style.setProperty("--start", x.start.toFixed(4)), s.style.setProperty("--span", x.span.toFixed(4));
|
|
878
|
-
let k = p + 9 * n, A =
|
|
899
|
+
let k = p + 9 * n, A = q(s).width * n / 2;
|
|
879
900
|
R(s, c + E * (k + Math.abs(E) * A), u + D * (k + Math.abs(D) * r * .7), O, t), s.dataset.place = "around", v += C, b += f, y += 1;
|
|
880
901
|
}), _.length > 1) {
|
|
881
|
-
let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++
|
|
902
|
+
let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++He}`, a = F("mask", {
|
|
882
903
|
id: r,
|
|
883
904
|
maskUnits: "userSpaceOnUse"
|
|
884
905
|
});
|
|
@@ -903,17 +924,22 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
903
924
|
}
|
|
904
925
|
s && R(s, c, u, O, t);
|
|
905
926
|
}
|
|
906
|
-
},
|
|
927
|
+
}, Ge = [
|
|
907
928
|
"circle",
|
|
908
929
|
"square",
|
|
909
930
|
"diamond"
|
|
910
|
-
],
|
|
911
|
-
let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? []
|
|
931
|
+
], Y = (e, t) => {
|
|
932
|
+
let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [];
|
|
933
|
+
if (n.includes("none")) return {
|
|
934
|
+
shape: "none",
|
|
935
|
+
open: !1
|
|
936
|
+
};
|
|
937
|
+
let r = Ge.find((e) => n.includes(e));
|
|
912
938
|
return {
|
|
913
|
-
shape: r ??
|
|
939
|
+
shape: r ?? Ge[Math.floor(t / 2) % Ge.length],
|
|
914
940
|
open: n.includes("open") || !n.includes("filled") && !r && t % 2 == 1
|
|
915
941
|
};
|
|
916
|
-
},
|
|
942
|
+
}, Ke = (e, t, n, r, i = {}) => {
|
|
917
943
|
if (e === "square") {
|
|
918
944
|
let e = r * .88;
|
|
919
945
|
return F("rect", {
|
|
@@ -944,8 +970,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
|
|
|
944
970
|
r,
|
|
945
971
|
...i
|
|
946
972
|
});
|
|
947
|
-
},
|
|
948
|
-
function
|
|
973
|
+
}, X = (e) => Number(e.toFixed(2));
|
|
974
|
+
function Z(e, t) {
|
|
949
975
|
let n = e.length;
|
|
950
976
|
if (n < 2) return e.map(() => 0);
|
|
951
977
|
let r = (n) => (t[n + 1] - t[n]) / (e[n + 1] - e[n] || 1), i = Array(n).fill(0);
|
|
@@ -967,12 +993,12 @@ function qe(e, t, n, r) {
|
|
|
967
993
|
return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
|
|
968
994
|
}
|
|
969
995
|
function Je(e, t, n, r) {
|
|
970
|
-
let [i, a] = qe(e, t, n, r), o = ([e, t]) => `${
|
|
996
|
+
let [i, a] = qe(e, t, n, r), o = ([e, t]) => `${X(e)},${X(t)}`;
|
|
971
997
|
return `C${o(i)} ${o(a)} ${o(t)}`;
|
|
972
998
|
}
|
|
973
999
|
function Ye(e, t, n) {
|
|
974
1000
|
let r = Array(e).fill(0), i = [], a = () => {
|
|
975
|
-
|
|
1001
|
+
Z(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
|
|
976
1002
|
r[i[t]] = e;
|
|
977
1003
|
}), i = [];
|
|
978
1004
|
};
|
|
@@ -1034,8 +1060,8 @@ var Xe = (e) => {
|
|
|
1034
1060
|
footroom: ({ labelHeight: t, unit: n, series: r, focused: i, stacked: a }) => !e && !a && r === 2 && !i ? t + 7 * n : 0,
|
|
1035
1061
|
draw(t) {
|
|
1036
1062
|
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
|
-
_.style.setProperty("--_base", `${
|
|
1038
|
-
let D = (e) => `--rise:${
|
|
1063
|
+
_.style.setProperty("--_base", `${X(T)}px`);
|
|
1064
|
+
let D = (e) => `--rise:${X(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 ? Pe(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
1065
|
if (!S) return {
|
|
1040
1066
|
attrs: {},
|
|
1041
1067
|
ink: ""
|
|
@@ -1050,76 +1076,76 @@ var Xe = (e) => {
|
|
|
1050
1076
|
};
|
|
1051
1077
|
}), L = y ? w : Math.min(w, 6);
|
|
1052
1078
|
t.plot.style.setProperty("--count", String(L + 1));
|
|
1053
|
-
let z = w > 0 ? L / (b ? n.length : w) : 1, B = (e) => e * z, V = (e) => `--i:${
|
|
1079
|
+
let z = w > 0 ? L / (b ? n.length : w) : 1, B = (e) => e * z, V = (e) => `--i:${X(B(e))}`, ee = (e) => {
|
|
1054
1080
|
let t = [], r = -1;
|
|
1055
1081
|
return n.forEach((n, i) => {
|
|
1056
1082
|
A(e, i) || (r < 0 && (r = i), (i === w || A(e, i + 1)) && ((b || i > r) && t.push([r, i]), r = -1));
|
|
1057
1083
|
}), t;
|
|
1058
|
-
},
|
|
1084
|
+
}, H = (e, t) => `--i:${X(B(e) + 1)}; --d:${X(B(b ? t + 1 : t) - B(e))}`, te = (e, t) => ({
|
|
1059
1085
|
"data-from": e + 1,
|
|
1060
1086
|
"data-to": t + 1,
|
|
1061
1087
|
...b && { "data-flat": "" }
|
|
1062
|
-
}),
|
|
1088
|
+
}), ne = x ? r.map((e, t) => Ye(n.length, (e) => A(t, e), (e) => P(t, e))) : [], re = x && e ? r.map((e, t) => Ye(n.length, (e) => A(t, e), (e) => [c(e), l(N(t, e))])) : [], W = (e, t, n) => {
|
|
1063
1089
|
let r = [];
|
|
1064
1090
|
return e.forEach(([i, a], o) => {
|
|
1065
|
-
b ? (r.push(`H${
|
|
1091
|
+
b ? (r.push(`H${X(i + n * E / 2)}`), o < e.length - 1 && r.push(`V${X(e[o + 1][1])}`)) : o > 0 && r.push(t ? Je(e[o - 1], [i, a], t[o - 1], t[o]) : `L${X(i)},${X(a)}`);
|
|
1066
1092
|
}), r;
|
|
1067
|
-
},
|
|
1093
|
+
}, ie = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [c(t + r), l(i(e, t + r))]), G = (e, t, n, r) => x ? e[t].slice(n, r + 1) : null, ae = (e) => c(e) - (b ? E / 2 : 0), K = (e) => c(e) + (b ? E / 2 : 0), oe = (e) => {
|
|
1068
1094
|
let t = F("g", {
|
|
1069
1095
|
class: d,
|
|
1070
1096
|
...I[e].attrs,
|
|
1071
1097
|
...v && { "data-stacked": "" },
|
|
1072
1098
|
style: I[e].ink
|
|
1073
|
-
}), n =
|
|
1099
|
+
}), n = ee(e), r = F("g", {
|
|
1074
1100
|
class: "tablechart-area-fill",
|
|
1075
|
-
style: `--rows:${
|
|
1101
|
+
style: `--rows:${X(L + 1)}; ${n.length ? H(...n[0]) : ""}`
|
|
1076
1102
|
});
|
|
1077
1103
|
t.appendChild(r);
|
|
1078
1104
|
for (let [t, i] of n) {
|
|
1079
|
-
let n =
|
|
1080
|
-
`M${
|
|
1081
|
-
`L${
|
|
1082
|
-
...
|
|
1083
|
-
`L${
|
|
1084
|
-
...
|
|
1105
|
+
let n = ie(e, t, i, M), a = ie(e, t, i, N), o = G(re, e, t, i)?.reverse() ?? null, s = [
|
|
1106
|
+
`M${X(ae(t))},${X(a[0][1])}`,
|
|
1107
|
+
`L${X(ae(t))},${X(n[0][1])}`,
|
|
1108
|
+
...W(n, G(ne, e, t, i), 1),
|
|
1109
|
+
`L${X(K(i))},${X(a[a.length - 1][1])}`,
|
|
1110
|
+
...W(a.reverse(), o, -1),
|
|
1085
1111
|
"Z"
|
|
1086
1112
|
].join(" ");
|
|
1087
1113
|
r.appendChild(F("path", {
|
|
1088
1114
|
d: s,
|
|
1089
1115
|
...te(t, i),
|
|
1090
|
-
style:
|
|
1116
|
+
style: H(t, i)
|
|
1091
1117
|
}));
|
|
1092
1118
|
}
|
|
1093
1119
|
_.appendChild(t);
|
|
1094
|
-
},
|
|
1120
|
+
}, se = (e) => {
|
|
1095
1121
|
let t = r[e];
|
|
1096
|
-
for (let [n, r] of
|
|
1097
|
-
let i =
|
|
1122
|
+
for (let [n, r] of ee(e)) {
|
|
1123
|
+
let i = ie(e, n, r, M), a = [`M${X(ae(n))},${X(i[0][1])}`, ...W(i, G(ne, e, n, r), 1)].join(" ");
|
|
1098
1124
|
_.appendChild(F("path", {
|
|
1099
1125
|
class: u,
|
|
1100
1126
|
...I[e].attrs,
|
|
1101
1127
|
d: a,
|
|
1102
1128
|
...t.line && { "data-line": t.line },
|
|
1103
1129
|
...te(n, r),
|
|
1104
|
-
style: `${I[e].ink}${
|
|
1130
|
+
style: `${I[e].ink}${H(n, r)}`
|
|
1105
1131
|
}));
|
|
1106
1132
|
}
|
|
1107
|
-
},
|
|
1108
|
-
let i = a.map((e) => r[e]), o = r.map((e, t) => y ?
|
|
1133
|
+
}, ce = (e) => {
|
|
1134
|
+
let i = a.map((e) => r[e]), o = r.map((e, t) => y ? Y(i, a.indexOf(t)) : S ? Y(r, t) : {
|
|
1109
1135
|
shape: "circle",
|
|
1110
1136
|
open: !1
|
|
1111
1137
|
}), s = (e, t, n) => {
|
|
1112
1138
|
let [r, i] = P(e, t);
|
|
1113
|
-
return
|
|
1139
|
+
return Ke(o[e].shape, r, i, 3 * p, {
|
|
1114
1140
|
...n,
|
|
1115
1141
|
style: `${n.style ?? ""}${D(i)}${V(t)}`
|
|
1116
1142
|
});
|
|
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, {
|
|
1143
|
+
}, 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
1144
|
class: h,
|
|
1119
1145
|
"data-row": t + 1,
|
|
1120
1146
|
...S && { "data-series": e + 1 }
|
|
1121
1147
|
})) : []);
|
|
1122
|
-
_.closest("[data-animate]")?.getAttribute("data-animate") === "grow" ?
|
|
1148
|
+
_.closest("[data-animate]")?.getAttribute("data-animate") === "grow" ? U(_, l, O, f) : t.lineHoles.push(...l), a.forEach((e) => {
|
|
1123
1149
|
for (let t of c(e)) _.appendChild(s(e, t, {
|
|
1124
1150
|
class: m,
|
|
1125
1151
|
...I[e].attrs,
|
|
@@ -1130,11 +1156,11 @@ var Xe = (e) => {
|
|
|
1130
1156
|
}));
|
|
1131
1157
|
});
|
|
1132
1158
|
};
|
|
1133
|
-
e && a.forEach((e) =>
|
|
1134
|
-
let
|
|
1159
|
+
e && a.forEach((e) => oe(e)), a.forEach((e) => se(e));
|
|
1160
|
+
let le = y ? r.flatMap((e, t) => a.includes(t) ? [] : o[t].flatMap((e) => {
|
|
1135
1161
|
let t = e.dataset.place;
|
|
1136
1162
|
if (!t || t === "none" || e.hasAttribute("data-left-out")) return [];
|
|
1137
|
-
let [n, r, i, a] =
|
|
1163
|
+
let [n, r, i, a] = J(e, p, O, f);
|
|
1138
1164
|
return [{
|
|
1139
1165
|
label: e,
|
|
1140
1166
|
box: [
|
|
@@ -1144,7 +1170,7 @@ var Xe = (e) => {
|
|
|
1144
1170
|
a + 6 * p
|
|
1145
1171
|
]
|
|
1146
1172
|
}];
|
|
1147
|
-
})) : [],
|
|
1173
|
+
})) : [], ue = b ? [] : a.flatMap((e) => n.flatMap((t, n) => {
|
|
1148
1174
|
if (A(e, n)) return [];
|
|
1149
1175
|
let [r, i] = P(e, n);
|
|
1150
1176
|
return [[
|
|
@@ -1153,22 +1179,22 @@ var Xe = (e) => {
|
|
|
1153
1179
|
8 * p,
|
|
1154
1180
|
8 * p
|
|
1155
1181
|
]];
|
|
1156
|
-
})),
|
|
1157
|
-
let n =
|
|
1182
|
+
})), fe = le.filter(({ label: e, box: t }) => {
|
|
1183
|
+
let n = ue.some((e) => de(e, t));
|
|
1158
1184
|
return n && e.setAttribute("data-left-out", ""), !n;
|
|
1159
|
-
}),
|
|
1185
|
+
}), me = (e, t) => {
|
|
1160
1186
|
let n = t;
|
|
1161
1187
|
for (; n < w && !A(e, n + 1) && k(e, n + 1)?.value === k(e, t)?.value;) n++;
|
|
1162
1188
|
return n;
|
|
1163
|
-
},
|
|
1164
|
-
let [r, i] = P(e, t), a =
|
|
1189
|
+
}, he = (e) => e === "above" ? "below" : "above", ge = (e, t, n) => {
|
|
1190
|
+
let [r, i] = P(e, t), a = q(o[e][t]).width * p, s = [
|
|
1165
1191
|
r - a / 2,
|
|
1166
1192
|
n === "above" ? i - 7 * p - g : i + 7 * p,
|
|
1167
1193
|
a,
|
|
1168
1194
|
g
|
|
1169
1195
|
];
|
|
1170
|
-
return s[1] + g > f ? Infinity : [t - 1, t + 1].filter((t) => t >= 0 && t <= w && !A(e, t)).flatMap((n) =>
|
|
1171
|
-
},
|
|
1196
|
+
return s[1] + g > f ? Infinity : [t - 1, t + 1].filter((t) => t >= 0 && t <= w && !A(e, t)).flatMap((n) => _e(e, t, n, 0)).filter((e) => de(e, s)).length;
|
|
1197
|
+
}, _e = (e, t, n, r) => {
|
|
1172
1198
|
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
1199
|
return Array.from({ length: c + 1 }, (e, t) => {
|
|
1174
1200
|
let n = t / c;
|
|
@@ -1179,53 +1205,78 @@ var Xe = (e) => {
|
|
|
1179
1205
|
2 * r
|
|
1180
1206
|
];
|
|
1181
1207
|
});
|
|
1182
|
-
},
|
|
1208
|
+
}, ve = (t, n) => {
|
|
1183
1209
|
let i = k(t, n);
|
|
1184
1210
|
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
1211
|
if (v) return "middle";
|
|
1186
1212
|
let a = i.value < 0 ? "below" : "above";
|
|
1187
|
-
if (!S || C || r.length > 2) return e || b ||
|
|
1213
|
+
if (!S || C || r.length > 2) return e || b || ge(t, n, a) <= ge(t, n, he(a)) ? a : he(a);
|
|
1188
1214
|
let o = k(1 - t, n);
|
|
1189
1215
|
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
|
-
|
|
1216
|
+
}, ye = (e) => {
|
|
1217
|
+
let t = w;
|
|
1218
|
+
for (; t > 0 && A(e, t);) t--;
|
|
1219
|
+
return t;
|
|
1220
|
+
}, be = b || v ? 10 * p : Math.max(10 * p, ...a.map((e) => q(o[e][w]).width * p / 2 + 6 * p)), Se = t.numbersAtEnd ? Math.max(...a.map((e) => q(o[e][ye(e)]).width * p)) + 11 * p : be, Ce = () => {
|
|
1221
|
+
let e = (s[0] ? q(s[0]).height : 0) * p, n = 2 * p, r = a.flatMap((e) => {
|
|
1222
|
+
let t = s[e];
|
|
1223
|
+
if (!t) return [];
|
|
1224
|
+
let [n, r] = P(e, ye(e));
|
|
1225
|
+
return [{
|
|
1226
|
+
name: t,
|
|
1227
|
+
x: n + Se,
|
|
1228
|
+
y: r
|
|
1229
|
+
}];
|
|
1230
|
+
}), i = t.numbersAtEnd ? Se - 7 * p : 0;
|
|
1231
|
+
return xe(r, e).map((t) => [
|
|
1232
|
+
t.x - n - i,
|
|
1233
|
+
t.y - e / 2 - n,
|
|
1234
|
+
q(t.name).width * p + 2 * n + i,
|
|
1235
|
+
e + 2 * n
|
|
1236
|
+
]);
|
|
1237
|
+
}, we = (y || S && !C && r.length > 2 && !v) && !b, Ee = /* @__PURE__ */ new Map();
|
|
1238
|
+
if (we) {
|
|
1192
1239
|
let e = n.flatMap((e, t) => a.map((e) => ({
|
|
1193
1240
|
s: e,
|
|
1194
1241
|
i: t,
|
|
1195
1242
|
value: k(e, t)?.value ?? 0
|
|
1196
|
-
}))).filter(({ s: e, i: t }) =>
|
|
1197
|
-
let i =
|
|
1243
|
+
}))).filter(({ s: e, i: t }) => ve(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 = pe(e.map(({ s: e, i: n, value: r }) => {
|
|
1244
|
+
let i = q(o[e][n]).width * p, [a, s] = P(e, n);
|
|
1198
1245
|
return t(r).map((e) => [
|
|
1199
1246
|
a - i / 2,
|
|
1200
1247
|
e === "above" ? s - 7 * p - g : s + 7 * p,
|
|
1201
1248
|
i,
|
|
1202
1249
|
g
|
|
1203
1250
|
]);
|
|
1204
|
-
}), [
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1251
|
+
}), [
|
|
1252
|
+
...a.flatMap((e) => n.flatMap((t, n) => {
|
|
1253
|
+
if (A(e, n)) return [];
|
|
1254
|
+
let [r, i] = P(e, n);
|
|
1255
|
+
return [[
|
|
1256
|
+
r - 4 * p,
|
|
1257
|
+
i - 4 * p,
|
|
1258
|
+
8 * p,
|
|
1259
|
+
8 * p
|
|
1260
|
+
]];
|
|
1261
|
+
})),
|
|
1262
|
+
...Ce(),
|
|
1263
|
+
...fe.map(({ box: e }) => e)
|
|
1264
|
+
], [
|
|
1214
1265
|
0,
|
|
1215
1266
|
0,
|
|
1216
1267
|
c(w) + c(0),
|
|
1217
1268
|
f
|
|
1218
1269
|
]);
|
|
1219
|
-
e.forEach(({ s: e, i: n, value: i }, a) =>
|
|
1270
|
+
e.forEach(({ s: e, i: n, value: i }, a) => Ee.set(o[e][n], r[a] === null ? null : t(i)[r[a]]));
|
|
1220
1271
|
}
|
|
1221
|
-
let
|
|
1272
|
+
let De = (e, t) => we ? Ee.get(o[e][t]) === null : !v && !b ? !1 : q(o[e][t]).width * p > (b ? me(e, t) - t + 1 : 1) * E - 4 * p || v && e > 0 && M(e, t) < N(e, t) ? !0 : v && Math.abs(l(N(e, t)) - l(M(e, t))) < g * 1.2;
|
|
1222
1273
|
a.forEach((e) => {
|
|
1223
1274
|
o[e].forEach((t, n) => {
|
|
1224
|
-
t.style.setProperty("--i", String(
|
|
1225
|
-
let r =
|
|
1226
|
-
if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" &&
|
|
1227
|
-
let i =
|
|
1228
|
-
b ? a = (c(n) + c(
|
|
1275
|
+
t.style.setProperty("--i", String(X(b ? (B(n) + B(n + 1)) / 2 : B(n))));
|
|
1276
|
+
let r = Ee.get(t) ?? ve(e, n);
|
|
1277
|
+
if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" && De(e, n)), b && r !== "none" ? t.dataset.rowEnd = String(me(e, n) + 1) : delete t.dataset.rowEnd, r === "none") return;
|
|
1278
|
+
let i = q(t).width * p / 2 + 4 * p, a = c(n);
|
|
1279
|
+
b ? a = (c(n) + c(me(e, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === w && (a -= i);
|
|
1229
1280
|
let o = l(M(e, n)), s = {
|
|
1230
1281
|
middle: (l(N(e, n)) - o) / 2,
|
|
1231
1282
|
above: -7 * p,
|
|
@@ -1234,7 +1285,7 @@ var Xe = (e) => {
|
|
|
1234
1285
|
R(t, a, o + s[r], O, f);
|
|
1235
1286
|
});
|
|
1236
1287
|
});
|
|
1237
|
-
let
|
|
1288
|
+
let Oe = (e) => {
|
|
1238
1289
|
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
1290
|
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(...et(i.map((e) => ({
|
|
1240
1291
|
x: e,
|
|
@@ -1243,37 +1294,21 @@ var Xe = (e) => {
|
|
|
1243
1294
|
let c = [];
|
|
1244
1295
|
for (let t of r) {
|
|
1245
1296
|
let n = o[e][t];
|
|
1246
|
-
c.includes(t) || n.dataset.place === "none" || c.every((t) =>
|
|
1297
|
+
c.includes(t) || n.dataset.place === "none" || c.every((t) => Te([o[e][t], n], p, 1e3, f) === 1) && c.push(t);
|
|
1247
1298
|
}
|
|
1248
1299
|
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();
|
|
1300
|
+
}, ke = (e) => Te(o[e].filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), p, O, f) === 1, Ae = /* @__PURE__ */ new Map();
|
|
1254
1301
|
for (let e of a) {
|
|
1255
|
-
let n = t.pick.mode === "all" || t.pick.mode === "auto" &&
|
|
1256
|
-
|
|
1302
|
+
let n = t.pick.mode === "all" || t.pick.mode === "auto" && ke(e) ? null : Oe(e);
|
|
1303
|
+
Ae.set(e, n), n && o[e].forEach((e, t) => {
|
|
1257
1304
|
e.dataset.place !== "none" && !n.has(t) && e.setAttribute("data-left-out", "");
|
|
1258
1305
|
});
|
|
1259
1306
|
}
|
|
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) => ({
|
|
1307
|
+
if (!v && !b && a.some((e) => Ae.get(e))) {
|
|
1308
|
+
let e = c(w) + c(0), r = 2 * p, i = (e) => n.flatMap((t, n) => n === w || A(e, n) || A(e, n + 1) ? [] : _e(e, n, n + 1, r)), s = a.flatMap(i), l = Ce(), u = a.flatMap((e) => [...Ae.get(e) ?? []].map((t) => ({
|
|
1274
1309
|
s: e,
|
|
1275
1310
|
i: t
|
|
1276
|
-
}))), d = ({ s: e, i: t }) => {
|
|
1311
|
+
}))), d = ({ s: e, i: n }) => t.numbersAtEnd && n === ye(e), m = u.filter((e) => !d(e)), h = ({ s: e, i: t }) => {
|
|
1277
1312
|
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
1313
|
return (r ?? i) !== void 0 && (r === void 0 || n <= r) && (i === void 0 || n <= i) ? [
|
|
1279
1314
|
"below",
|
|
@@ -1290,8 +1325,8 @@ var Xe = (e) => {
|
|
|
1290
1325
|
"after",
|
|
1291
1326
|
"before"
|
|
1292
1327
|
];
|
|
1293
|
-
},
|
|
1294
|
-
let i =
|
|
1328
|
+
}, _ = ({ s: t, i: n }, r) => {
|
|
1329
|
+
let i = q(o[t][n]).width * p, a = g, [s, c] = P(t, n), l = Math.min(Math.max(s - i / 2, 0), e - i);
|
|
1295
1330
|
return r === "outside" ? [
|
|
1296
1331
|
l,
|
|
1297
1332
|
c - 7 * p - a,
|
|
@@ -1323,7 +1358,7 @@ var Xe = (e) => {
|
|
|
1323
1358
|
i,
|
|
1324
1359
|
a
|
|
1325
1360
|
];
|
|
1326
|
-
},
|
|
1361
|
+
}, 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
1362
|
let [n, r] = P(e, t);
|
|
1328
1363
|
return [
|
|
1329
1364
|
n - 6 * p,
|
|
@@ -1331,46 +1366,51 @@ var Xe = (e) => {
|
|
|
1331
1366
|
12 * p,
|
|
1332
1367
|
12 * p
|
|
1333
1368
|
];
|
|
1334
|
-
}),
|
|
1335
|
-
let n =
|
|
1336
|
-
...
|
|
1369
|
+
}), x = [], S = /* @__PURE__ */ new Set(), C = m.map((e, t) => {
|
|
1370
|
+
let n = v[t].map((t) => _(e, t)), r = (e) => y(e) && ![
|
|
1371
|
+
...x,
|
|
1337
1372
|
...l,
|
|
1338
|
-
...
|
|
1339
|
-
].some((t) =>
|
|
1340
|
-
return
|
|
1373
|
+
...b
|
|
1374
|
+
].some((t) => de(e, t)), o = a.filter((t) => t !== e.s).flatMap(i), c = (n) => !v[t][n].endsWith("far") || !o.some((r) => de(_(e, v[t][n].split(" ")[0]), r)), u = n.findIndex((e, t) => r(e) && c(t) && !s.some((t) => de(e, t)));
|
|
1375
|
+
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
1376
|
});
|
|
1342
|
-
|
|
1377
|
+
m.forEach((e, t) => {
|
|
1343
1378
|
let n = o[e.s][e.i];
|
|
1344
|
-
n.toggleAttribute("data-cut",
|
|
1345
|
-
let r =
|
|
1346
|
-
if (
|
|
1347
|
-
let i =
|
|
1379
|
+
n.toggleAttribute("data-cut", S.has(t));
|
|
1380
|
+
let r = C[t];
|
|
1381
|
+
if (n.toggleAttribute("data-left-out", r === null), r === null) return;
|
|
1382
|
+
let i = v[t][r], [a, s, c, l] = _(e, i), u = i.split(" ")[0];
|
|
1348
1383
|
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
1384
|
});
|
|
1350
1385
|
}
|
|
1351
|
-
b ||
|
|
1352
|
-
let n =
|
|
1386
|
+
b || ce((e, t) => {
|
|
1387
|
+
let n = Ae.get(e);
|
|
1353
1388
|
return n ? n.has(t) : E >= 10 * p;
|
|
1354
1389
|
}), t.pointOf = (e) => {
|
|
1355
1390
|
let t = a.filter((t) => !A(t, e)).map((t) => P(t, e));
|
|
1356
1391
|
return t.length ? t.reduce((e, t) => t[1] < e[1] ? t : e) : null;
|
|
1357
1392
|
};
|
|
1358
|
-
let
|
|
1359
|
-
let n =
|
|
1393
|
+
let je = (y ? [] : s).map((e, t) => {
|
|
1394
|
+
let n = ye(t), [r, i] = P(t, n);
|
|
1360
1395
|
return {
|
|
1361
1396
|
name: e,
|
|
1362
|
-
|
|
1397
|
+
s: t,
|
|
1398
|
+
x: (b ? r + E / 2 : r) + Se,
|
|
1363
1399
|
y: v ? (i + l(N(t, n))) / 2 : i
|
|
1364
1400
|
};
|
|
1365
|
-
}),
|
|
1366
|
-
for (let e of
|
|
1367
|
-
|
|
1401
|
+
}), Me = (s[0] ? q(s[0]).height : 0) * p;
|
|
1402
|
+
for (let e of xe(je, Me)) {
|
|
1403
|
+
if (R(e.name, e.x, e.y, O, f), !t.numbersAtEnd) continue;
|
|
1404
|
+
let n = o[e.s][ye(e.s)];
|
|
1405
|
+
n.dataset.place = "before", n.removeAttribute("data-left-out"), n.removeAttribute("data-cut"), R(n, e.x - 4 * p, e.y, O, f);
|
|
1406
|
+
}
|
|
1407
|
+
let Ne = n.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), Fe = !e && !v && r.length === 2 && !C && !Ne ? f - 2 * p : T;
|
|
1368
1408
|
y || _.appendChild(F("line", {
|
|
1369
1409
|
class: i,
|
|
1370
1410
|
x1: 0,
|
|
1371
1411
|
x2: c(w) + c(0),
|
|
1372
|
-
y1:
|
|
1373
|
-
y2:
|
|
1412
|
+
y1: Fe,
|
|
1413
|
+
y2: Fe
|
|
1374
1414
|
}));
|
|
1375
1415
|
}
|
|
1376
1416
|
}), rt = nt(!1), it = nt(!0), at = /* @__PURE__ */ new Set(), ot = (t, n) => {
|
|
@@ -1399,16 +1439,16 @@ var Xe = (e) => {
|
|
|
1399
1439
|
breakable: !0,
|
|
1400
1440
|
headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
|
|
1401
1441
|
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 =
|
|
1442
|
+
let f = n(0), p = _e(l, a, s), m = d ?? "center", h = e.map((t, r) => {
|
|
1403
1443
|
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
1444
|
return {
|
|
1405
1445
|
top: i,
|
|
1406
1446
|
length: a,
|
|
1407
1447
|
down: t.kind === "down" || t.kind === "total" && (c ? t.to >= 0 : t.to < 0),
|
|
1408
|
-
inside: !o && !p &&
|
|
1448
|
+
inside: !o && !p && ve(l[r], a, s)
|
|
1409
1449
|
};
|
|
1410
|
-
}), g = l[0] ?
|
|
1411
|
-
for (let [e, t] of h.entries()) t.inside && (_ = Math.min(_, (a -
|
|
1450
|
+
}), g = l[0] ? q(l[0]).height * s * .56 : 0, _ = Infinity;
|
|
1451
|
+
for (let [e, t] of h.entries()) t.inside && (_ = Math.min(_, (a - q(l[e]).width * s) / 2));
|
|
1412
1452
|
let v = e.length, y = (e, t, n = !1) => `--start:${(e / v).toFixed(4)}; --span:${(t / v).toFixed(4)}; --ease:${n ? A : "linear"};`;
|
|
1413
1453
|
e.forEach((r, i) => {
|
|
1414
1454
|
let o = e[i + 1];
|
|
@@ -1440,7 +1480,7 @@ var Xe = (e) => {
|
|
|
1440
1480
|
b.style.setProperty("--start", (i / v).toFixed(4)), b.style.setProperty("--span", (1 / v).toFixed(4));
|
|
1441
1481
|
let x = Math.min(_, (d - g) / 2), S = u + x + g / 2, C = u + d - x - g / 2, w = m === "center" ? u + d / 2 : m === "end" === f ? C : S;
|
|
1442
1482
|
b.dataset.place = p ? "inside" : "outside", b.dataset.kind = n.kind;
|
|
1443
|
-
let T = p ? w : n.kind === "down" ? u + d +
|
|
1483
|
+
let T = p ? w : n.kind === "down" ? u + d + q(b).height * s + 3 * s : u - 3 * s;
|
|
1444
1484
|
R(b, t(i), T, O, o);
|
|
1445
1485
|
}), c.appendChild(F("line", {
|
|
1446
1486
|
class: i,
|
|
@@ -1493,8 +1533,8 @@ var Xe = (e) => {
|
|
|
1493
1533
|
slot: r
|
|
1494
1534
|
};
|
|
1495
1535
|
});
|
|
1496
|
-
}, ft = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).filter((e) => !e.hasAttribute("data-note")), pt = (e) => e === "dashed" || e === "dotted" ? e : null, mt = (e, t, n = "data-i18n") => {
|
|
1497
|
-
let r = ft(e), i = Math.max(1,
|
|
1536
|
+
}, ft = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).filter((e) => !e.hasAttribute("data-note")), pt = (e) => e === "dashed" || e === "dotted" || e === "dash-dot" ? e : null, mt = (e, t, n = "data-i18n") => {
|
|
1537
|
+
let r = ft(e), i = Math.max(1, W(t.map((e) => e.cells.length)));
|
|
1498
1538
|
return Array.from({ length: i }, (e, t) => {
|
|
1499
1539
|
let i = r[t];
|
|
1500
1540
|
return {
|
|
@@ -1563,7 +1603,7 @@ var Xe = (e) => {
|
|
|
1563
1603
|
step: 0,
|
|
1564
1604
|
ticks: n
|
|
1565
1605
|
};
|
|
1566
|
-
let r = n?.[0] ?? -
|
|
1606
|
+
let r = n?.[0] ?? -W(e.map((e) => -e)), i = n?.[1] ?? W(e);
|
|
1567
1607
|
if (!n) {
|
|
1568
1608
|
let e = (i - r || Math.abs(i) || 1) * .05;
|
|
1569
1609
|
r -= e, i += e;
|
|
@@ -1632,7 +1672,8 @@ var Xe = (e) => {
|
|
|
1632
1672
|
r,
|
|
1633
1673
|
i
|
|
1634
1674
|
].map((e, t) => e * a + n[t] * (1 - a));
|
|
1635
|
-
|
|
1675
|
+
let r = `rgb(${n.slice(0, 3).map(Math.round).join(" ")})`;
|
|
1676
|
+
return e.style.getPropertyValue("--_surface") !== r && (e.style.setProperty("--_surface", r), !0);
|
|
1636
1677
|
}, Nt = (e) => jt(e, "var(--tablechart-surface, var(--_surface, Canvas))"), Pt = (e, t) => e.querySelector(`:is(.tablechart-bar, .tablechart-piece)[data-row="${t.dataset.row}"]${t.dataset.series ? `[data-series="${t.dataset.series}"]` : ""}`), Ft = [
|
|
1637
1678
|
255,
|
|
1638
1679
|
255,
|
|
@@ -1661,12 +1702,28 @@ var Xe = (e) => {
|
|
|
1661
1702
|
let r = wt(getComputedStyle(t).fill), i = kt(a, c, r) > kt(a, l, r) ? c : l, s = kt(a, i, r) >= o ? i : Lt(r, o, a);
|
|
1662
1703
|
n.style.setProperty("--_ink", `rgb(${s.join(" ")})`);
|
|
1663
1704
|
}
|
|
1664
|
-
}, zt =
|
|
1705
|
+
}, zt = (e) => {
|
|
1706
|
+
let t = e.querySelectorAll(".tablechart-name:not([data-place='legend'])");
|
|
1707
|
+
if (!t.length) return;
|
|
1708
|
+
let n = Et(e), r = n === 3 ? 60 : 4.5, i = Nt(e).slice(0, 3), a = wt(getComputedStyle(e).color).slice(0, 3);
|
|
1709
|
+
for (let o of t) {
|
|
1710
|
+
let t = e.querySelector(`.tablechart-series[data-series="${o.dataset.series}"]:not([data-muted])`);
|
|
1711
|
+
if (o.style.removeProperty("--_ink"), !t) continue;
|
|
1712
|
+
let s = wt(getComputedStyle(t).stroke).slice(0, 3);
|
|
1713
|
+
for (let e = 0; e <= 20; e++) {
|
|
1714
|
+
let t = s.map((t, n) => Math.round(t + (a[n] - t) * e / 20));
|
|
1715
|
+
if (!(kt(n, t, i) < r && e < 20)) {
|
|
1716
|
+
e && o.style.setProperty("--_ink", `rgb(${t.join(" ")})`);
|
|
1717
|
+
break;
|
|
1718
|
+
}
|
|
1719
|
+
}
|
|
1720
|
+
}
|
|
1721
|
+
}, Bt = [
|
|
1665
1722
|
"axis-break",
|
|
1666
1723
|
"trend",
|
|
1667
1724
|
"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) =>
|
|
1725
|
+
], Vt = (e, t = !1) => {
|
|
1726
|
+
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) => Bt.includes(e.getAttribute("data-annotation") ?? "")), o = (e) => e.hasAttribute("data-fragment"), s = r.map((e) => Array.from(e.querySelectorAll(":scope > td")));
|
|
1670
1727
|
if (!n && !r.some(o) && !i.some(o) && !s.flat().some(o) && !a.some(o) || t && !n) return null;
|
|
1671
1728
|
let c = [], l = /* @__PURE__ */ new Map(), u = [], d = (e) => {
|
|
1672
1729
|
let t = e === null ? void 0 : l.get(e);
|
|
@@ -1728,7 +1785,7 @@ var Xe = (e) => {
|
|
|
1728
1785
|
count: c.length,
|
|
1729
1786
|
indexes: c
|
|
1730
1787
|
};
|
|
1731
|
-
},
|
|
1788
|
+
}, Ht = (e) => {
|
|
1732
1789
|
let t = e.plan;
|
|
1733
1790
|
if (!t) return;
|
|
1734
1791
|
let n = (t) => t === null || e.step - t >= 1;
|
|
@@ -1739,7 +1796,7 @@ var Xe = (e) => {
|
|
|
1739
1796
|
let u = r.hasAttribute("data-flat") ? (l - e + 1) / (i - e + 1) : i > e ? Math.max(0, l - e) / (i - e) : 0;
|
|
1740
1797
|
r.style.setProperty("--reveal", String(u));
|
|
1741
1798
|
}
|
|
1742
|
-
},
|
|
1799
|
+
}, Ut = (e) => {
|
|
1743
1800
|
let t = e.plan;
|
|
1744
1801
|
if (!t) return;
|
|
1745
1802
|
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 +1874,12 @@ var Xe = (e) => {
|
|
|
1817
1874
|
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
1875
|
}
|
|
1819
1876
|
}
|
|
1820
|
-
|
|
1821
|
-
},
|
|
1877
|
+
Ht(e);
|
|
1878
|
+
}, Wt = (e, t, n = !1) => {
|
|
1822
1879
|
let r = e.plan;
|
|
1823
1880
|
if (!r) return;
|
|
1824
1881
|
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)),
|
|
1882
|
+
e.step = i, e.figure.style.setProperty("--_step", String(i)), Ht(e);
|
|
1826
1883
|
let [o, s] = e.controls?.querySelectorAll("button") ?? [];
|
|
1827
1884
|
o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
|
|
1828
1885
|
bubbles: !0,
|
|
@@ -1831,7 +1888,7 @@ var Xe = (e) => {
|
|
|
1831
1888
|
steps: r.count
|
|
1832
1889
|
}
|
|
1833
1890
|
}));
|
|
1834
|
-
},
|
|
1891
|
+
}, Gt = (e, t, n) => {
|
|
1835
1892
|
let r = document.createElement("div");
|
|
1836
1893
|
r.className = "tablechart-controls";
|
|
1837
1894
|
let i = (r) => {
|
|
@@ -1860,14 +1917,14 @@ var Xe = (e) => {
|
|
|
1860
1917
|
]), i;
|
|
1861
1918
|
};
|
|
1862
1919
|
return r.append(i("previous"), i("next")), r;
|
|
1863
|
-
},
|
|
1920
|
+
}, Kt = (e, t, n, r = {
|
|
1864
1921
|
x: 0,
|
|
1865
1922
|
y: 0,
|
|
1866
1923
|
scale: 1
|
|
1867
1924
|
}, i = 2, a = 8, o = 12) => {
|
|
1868
1925
|
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
1926
|
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
|
-
},
|
|
1927
|
+
}, qt = "tablechart-tooltip", Jt = [
|
|
1871
1928
|
"--tablechart-surface",
|
|
1872
1929
|
"--_surface",
|
|
1873
1930
|
"--tablechart-tooltip-surface",
|
|
@@ -1876,65 +1933,66 @@ var Xe = (e) => {
|
|
|
1876
1933
|
"--tablechart-tooltip-radius",
|
|
1877
1934
|
"--tablechart-tooltip-padding",
|
|
1878
1935
|
"--tablechart-tooltip-shadow"
|
|
1879
|
-
], $ = null,
|
|
1880
|
-
clearTimeout(
|
|
1881
|
-
},
|
|
1882
|
-
if (
|
|
1883
|
-
|
|
1884
|
-
e.pointerType === "mouse" && (
|
|
1936
|
+
], $ = null, Yt, Xt, Zt = null, Qt = null, $t = 0, en = () => {
|
|
1937
|
+
clearTimeout($t), $ && Zt && ($.hidden = !0, Zt = null, Qt = null);
|
|
1938
|
+
}, tn = !1, nn = !0, rn = NaN, an = NaN, on = !1, sn = () => {
|
|
1939
|
+
if (on) return;
|
|
1940
|
+
on = !0, document.addEventListener("pointermove", (e) => {
|
|
1941
|
+
e.pointerType === "mouse" && (nn = e.screenX !== rn || e.screenY !== an, rn = e.screenX, an = e.screenY, nn && (tn = !1));
|
|
1885
1942
|
}, {
|
|
1886
1943
|
capture: !0,
|
|
1887
1944
|
passive: !0
|
|
1888
1945
|
});
|
|
1889
1946
|
let e = () => {
|
|
1890
|
-
|
|
1947
|
+
tn = !0, en();
|
|
1891
1948
|
};
|
|
1892
1949
|
document.addEventListener("keydown", e, !0), window.addEventListener("scroll", e, {
|
|
1893
1950
|
capture: !0,
|
|
1894
1951
|
passive: !0
|
|
1895
1952
|
});
|
|
1896
|
-
},
|
|
1953
|
+
}, cn = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, ln = (e) => {
|
|
1897
1954
|
let t = e.tooltipparent;
|
|
1898
1955
|
return (typeof t == "string" ? document.querySelector(t) : t) ?? document.body;
|
|
1899
|
-
}, ln = () => {
|
|
1900
|
-
clearTimeout(Qt), Qt = window.setTimeout($t, 120);
|
|
1901
1956
|
}, un = () => {
|
|
1957
|
+
clearTimeout($t), $t = window.setTimeout(en, 120);
|
|
1958
|
+
}, dn = () => {
|
|
1902
1959
|
let e = document.createElement("div");
|
|
1903
|
-
return e.className =
|
|
1960
|
+
return e.className = qt, e.setAttribute("aria-hidden", "true"), e.hidden = !0, Yt = document.createElement("div"), Xt = document.createElement("div"), Xt.className = `${qt}-arrow`, e.append(Yt, Xt), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout($t)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && un()), document.addEventListener("pointerdown", (t) => {
|
|
1904
1961
|
let n = t.target;
|
|
1905
|
-
|
|
1906
|
-
}), window.addEventListener("resize",
|
|
1907
|
-
},
|
|
1962
|
+
Zt && !Zt.plot.contains(n) && !e.contains(n) && en();
|
|
1963
|
+
}), window.addEventListener("resize", en), e;
|
|
1964
|
+
}, fn = (e, t) => {
|
|
1908
1965
|
let n = t ? t.style.getPropertyValue("--step") : "x";
|
|
1909
1966
|
return n === "" || Number(n) < e.step;
|
|
1910
|
-
},
|
|
1967
|
+
}, pn = (e, t) => {
|
|
1911
1968
|
let n = e.svg.querySelector(`[data-series="${t + 1}"]:not(.tablechart-hole)`);
|
|
1912
1969
|
if (!n) return;
|
|
1913
1970
|
let r = getComputedStyle(n);
|
|
1914
1971
|
return r.fill && r.fill !== "none" ? r.fill : r.stroke;
|
|
1915
|
-
},
|
|
1972
|
+
}, mn = (e, t, n) => {
|
|
1916
1973
|
let r = e.series.length > 1, i = [];
|
|
1917
1974
|
for (let [n, a] of e.seriesValues.entries()) {
|
|
1918
|
-
if (!
|
|
1975
|
+
if (!fn(e, a[t])) continue;
|
|
1919
1976
|
let o = r ? e.figure.querySelector(`.tablechart-name[data-series="${n + 1}"]`) : null;
|
|
1920
1977
|
i.push({
|
|
1921
1978
|
name: r ? o?.textContent ?? e.series[n].name : "",
|
|
1922
1979
|
value: a[t].textContent ?? "",
|
|
1923
|
-
colour: r ?
|
|
1980
|
+
colour: r ? pn(e, n) : void 0,
|
|
1924
1981
|
sample: o ? {
|
|
1925
1982
|
marker: o.dataset.marker ?? null,
|
|
1926
1983
|
open: o.hasAttribute("data-open"),
|
|
1927
1984
|
line: o.dataset.line ?? null,
|
|
1985
|
+
point: getComputedStyle(o).getPropertyValue("--tablechart-point-color").trim(),
|
|
1928
1986
|
box: o.dataset.swatch === "box"
|
|
1929
1987
|
} : void 0
|
|
1930
1988
|
});
|
|
1931
1989
|
}
|
|
1932
1990
|
let a = e.totals[t];
|
|
1933
|
-
return i.length > 1 &&
|
|
1991
|
+
return i.length > 1 && fn(e, a) && i.push({
|
|
1934
1992
|
name: n.totallabel,
|
|
1935
1993
|
value: a.textContent ?? ""
|
|
1936
1994
|
}), i;
|
|
1937
|
-
},
|
|
1995
|
+
}, hn = (e, t) => {
|
|
1938
1996
|
if (e.type.centre && e.values[t]) return e.values[t].getBoundingClientRect();
|
|
1939
1997
|
let n = e.pointOf?.(t);
|
|
1940
1998
|
if (n) {
|
|
@@ -1954,49 +2012,49 @@ var Xe = (e) => {
|
|
|
1954
2012
|
100
|
|
1955
2013
|
];
|
|
1956
2014
|
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
|
-
|
|
2015
|
+
}, gn = (e, t, n) => {
|
|
2016
|
+
if (clearTimeout($t), Zt === e && Qt === t) return;
|
|
2017
|
+
let r = (e.type.tooltip ?? mn)(e, t, n);
|
|
2018
|
+
if (!r.length) return en();
|
|
2019
|
+
Zt && Zt !== e && en(), $ ?? ($ = dn());
|
|
1962
2020
|
let i = (e, t, n, r = !1, i) => {
|
|
1963
2021
|
let a = document.createElement("div");
|
|
1964
|
-
if (a.className = `${
|
|
2022
|
+
if (a.className = `${qt}-line`, n) {
|
|
1965
2023
|
let e = document.createElement("span");
|
|
1966
|
-
e.className = `${
|
|
2024
|
+
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
2025
|
}
|
|
1968
2026
|
let o = document.createElement("span");
|
|
1969
|
-
if (o.className = `${
|
|
2027
|
+
if (o.className = `${qt}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
|
|
1970
2028
|
e && o.append(":");
|
|
1971
2029
|
let n = document.createElement("span");
|
|
1972
|
-
n.className = `${
|
|
2030
|
+
n.className = `${qt}-value`, n.textContent = t, a.append(n);
|
|
1973
2031
|
}
|
|
1974
2032
|
return a;
|
|
1975
2033
|
}, 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 = ut(e.figure, t)?.textContent?.trim(), l = c ? [Object.assign(document.createElement("div"), {
|
|
1976
|
-
className: `${
|
|
2034
|
+
className: `${qt}-note`,
|
|
1977
2035
|
textContent: c
|
|
1978
2036
|
})] : [];
|
|
1979
|
-
|
|
2037
|
+
Yt.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
2038
|
let u = getComputedStyle(e.figure);
|
|
1981
|
-
for (let e of
|
|
2039
|
+
for (let e of Jt) {
|
|
1982
2040
|
let t = u.getPropertyValue(e).trim();
|
|
1983
2041
|
t ? $.style.setProperty(e, t) : $.style.removeProperty(e);
|
|
1984
2042
|
}
|
|
1985
2043
|
$.style.setProperty("--_color", u.color), $.style.colorScheme = u.colorScheme, $.style.fontFamily = u.fontFamily;
|
|
1986
|
-
let d =
|
|
1987
|
-
$.parentElement !== d && d.append($),
|
|
2044
|
+
let d = ln(n);
|
|
2045
|
+
$.parentElement !== d && d.append($), Zt = e, Qt = t, $.hidden = !1, $.style.left = "0px", $.style.top = "0px";
|
|
1988
2046
|
let f = $.getBoundingClientRect(), p = {
|
|
1989
2047
|
x: f.left,
|
|
1990
2048
|
y: f.top,
|
|
1991
|
-
scale:
|
|
1992
|
-
}, m =
|
|
1993
|
-
$.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`,
|
|
1994
|
-
},
|
|
2049
|
+
scale: cn($, f.width)
|
|
2050
|
+
}, m = cn(e.plot, e.plot.getBoundingClientRect().width);
|
|
2051
|
+
$.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`, Kt($, Xt, hn(e, t), p);
|
|
2052
|
+
}, _n = (e, t, n = !1) => {
|
|
1995
2053
|
let { plot: r } = e;
|
|
1996
|
-
r.setAttribute("data-hover", ""),
|
|
2054
|
+
r.setAttribute("data-hover", ""), sn();
|
|
1997
2055
|
let i = (t) => {
|
|
1998
2056
|
if (e.rowAt) {
|
|
1999
|
-
let n = r.getBoundingClientRect(), i =
|
|
2057
|
+
let n = r.getBoundingClientRect(), i = cn(r, n.width);
|
|
2000
2058
|
return e.rowAt((t.clientX - n.left) / i, (t.clientY - n.top) / i);
|
|
2001
2059
|
}
|
|
2002
2060
|
let n = t.target.closest?.("[data-row]")?.getAttribute("data-row");
|
|
@@ -2006,13 +2064,13 @@ var Xe = (e) => {
|
|
|
2006
2064
|
else if (t.getAttribute("data-row") === String(e + 1)) return !0;
|
|
2007
2065
|
return !1;
|
|
2008
2066
|
}, s = null, c = (a) => {
|
|
2009
|
-
if (a.type === "pointerdown")
|
|
2010
|
-
else if (a.pointerType === "mouse" && (!
|
|
2067
|
+
if (a.type === "pointerdown") tn = !1;
|
|
2068
|
+
else if (a.pointerType === "mouse" && (!nn || tn)) return;
|
|
2011
2069
|
if (!r.classList.contains("is-placed") || !e.figure.classList.contains("is-shown")) return;
|
|
2012
|
-
if (n && !e.figure.hasAttribute("data-left-out")) return
|
|
2070
|
+
if (n && !e.figure.hasAttribute("data-left-out")) return Zt === e ? en() : void 0;
|
|
2013
2071
|
let c = i(a);
|
|
2014
|
-
if (s = c, c === null || o(c)) return
|
|
2015
|
-
|
|
2072
|
+
if (s = c, c === null || o(c)) return Zt === e ? en() : void 0;
|
|
2073
|
+
gn(e, c, t);
|
|
2016
2074
|
}, l = (t) => {
|
|
2017
2075
|
let n = t.target;
|
|
2018
2076
|
return e.svg.contains(n) && n.hasAttribute("data-row") ? n : null;
|
|
@@ -2026,37 +2084,37 @@ var Xe = (e) => {
|
|
|
2026
2084
|
if (!r) return;
|
|
2027
2085
|
a.delete(r);
|
|
2028
2086
|
let i = Number(r.getAttribute("data-row")) - 1;
|
|
2029
|
-
s === i && !o(i) && !
|
|
2087
|
+
s === i && !o(i) && !tn && gn(e, i, t);
|
|
2030
2088
|
};
|
|
2031
2089
|
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,
|
|
2090
|
+
t.pointerType === "mouse" && (s = null, Zt === e && un());
|
|
2033
2091
|
});
|
|
2034
|
-
},
|
|
2035
|
-
|
|
2036
|
-
},
|
|
2092
|
+
}, vn = (e) => {
|
|
2093
|
+
Zt === e && en();
|
|
2094
|
+
}, yn = {
|
|
2037
2095
|
area: it,
|
|
2038
|
-
bar:
|
|
2039
|
-
column:
|
|
2040
|
-
donut:
|
|
2096
|
+
bar: Be,
|
|
2097
|
+
column: Ve,
|
|
2098
|
+
donut: We,
|
|
2041
2099
|
line: rt,
|
|
2042
2100
|
waterfall: st
|
|
2043
|
-
},
|
|
2044
|
-
|
|
2045
|
-
},
|
|
2046
|
-
"axis-break":
|
|
2047
|
-
trend:
|
|
2048
|
-
bracket:
|
|
2049
|
-
reference:
|
|
2050
|
-
note:
|
|
2051
|
-
},
|
|
2101
|
+
}, bn = (e, t) => {
|
|
2102
|
+
yn[e] = t, Object.assign(xn, t.annotations), Sn.splice(0, Infinity, ...Object.keys(xn));
|
|
2103
|
+
}, xn = {
|
|
2104
|
+
"axis-break": re,
|
|
2105
|
+
trend: Ae,
|
|
2106
|
+
bracket: ue,
|
|
2107
|
+
reference: Oe,
|
|
2108
|
+
note: Ee
|
|
2109
|
+
}, Sn = Object.keys(xn), Cn = (e) => {
|
|
2052
2110
|
let t = "";
|
|
2053
2111
|
for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
|
|
2054
2112
|
return t.trim();
|
|
2055
|
-
},
|
|
2113
|
+
}, wn = [
|
|
2056
2114
|
"straight",
|
|
2057
2115
|
"step",
|
|
2058
2116
|
"smooth"
|
|
2059
|
-
],
|
|
2117
|
+
], Tn = (e, t, n, r, i) => {
|
|
2060
2118
|
let a = t === r, [o, s, c] = a ? [
|
|
2061
2119
|
Math.min(e, n),
|
|
2062
2120
|
Math.max(e, n),
|
|
@@ -2068,16 +2126,16 @@ var Xe = (e) => {
|
|
|
2068
2126
|
], 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
2127
|
for (let [e, t] of l) e > d && u.push([d, Math.min(e, s)]), d = Math.max(d, t);
|
|
2070
2128
|
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
|
-
},
|
|
2129
|
+
}, En = (e, t) => {
|
|
2072
2130
|
let [n, r, i, a] = [
|
|
2073
2131
|
"x1",
|
|
2074
2132
|
"y1",
|
|
2075
2133
|
"x2",
|
|
2076
2134
|
"y2"
|
|
2077
|
-
].map((t) => Number(e.getAttribute(t))), o = F("path", { d:
|
|
2135
|
+
].map((t) => Number(e.getAttribute(t))), o = F("path", { d: Tn(n, r, i, a, t) });
|
|
2078
2136
|
for (let { name: t, value: n } of Array.from(e.attributes)) /^[xy][12]$/.test(t) || o.setAttribute(t, n);
|
|
2079
2137
|
e.replaceWith(o);
|
|
2080
|
-
},
|
|
2138
|
+
}, Dn = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
|
|
2081
2139
|
+e,
|
|
2082
2140
|
+t,
|
|
2083
2141
|
+r,
|
|
@@ -2087,19 +2145,19 @@ var Xe = (e) => {
|
|
|
2087
2145
|
+t,
|
|
2088
2146
|
+e,
|
|
2089
2147
|
+r
|
|
2090
|
-
]),
|
|
2148
|
+
]), On = (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(""), kn = (e, t, n) => {
|
|
2091
2149
|
let r = e.getAttribute(t);
|
|
2092
2150
|
return r === null ? n : r !== "false";
|
|
2093
|
-
},
|
|
2151
|
+
}, An = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", jn = (e, t) => {
|
|
2094
2152
|
let n = e.dataset.chartShape;
|
|
2095
|
-
return n &&
|
|
2096
|
-
},
|
|
2153
|
+
return n && wn.includes(n) ? n : wn.includes(t.shape) ? t.shape : "straight";
|
|
2154
|
+
}, Mn = (e) => {
|
|
2097
2155
|
for (let t of e.querySelectorAll("br")) {
|
|
2098
|
-
if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(
|
|
2156
|
+
if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(Cn(t))) continue;
|
|
2099
2157
|
let e = document.createElement("span");
|
|
2100
2158
|
e.className = y, e.textContent = ". ", t.before(e);
|
|
2101
2159
|
}
|
|
2102
|
-
},
|
|
2160
|
+
}, Nn = (e, t, n) => {
|
|
2103
2161
|
let r = e.querySelector("table");
|
|
2104
2162
|
if (!r) return null;
|
|
2105
2163
|
let i = r.querySelector("tfoot [data-chart-total]");
|
|
@@ -2110,22 +2168,42 @@ var Xe = (e) => {
|
|
|
2110
2168
|
s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
|
|
2111
2169
|
let c = a.insertCell();
|
|
2112
2170
|
return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
|
|
2113
|
-
},
|
|
2171
|
+
}, Pn = 0, Fn = (e) => {
|
|
2114
2172
|
let t = e.querySelector(":scope > figcaption");
|
|
2115
2173
|
if (!t) return;
|
|
2116
|
-
|
|
2174
|
+
Mn(t);
|
|
2117
2175
|
let n = (e) => e.hasAttribute("aria-label") || e.hasAttribute("aria-labelledby"), r = (e) => {
|
|
2118
|
-
t.id || (t.id = `tablechart-caption-${++
|
|
2176
|
+
t.id || (t.id = `tablechart-caption-${++Pn}`), e.setAttribute("aria-labelledby", t.id);
|
|
2119
2177
|
};
|
|
2120
2178
|
e.tagName === "FIGURE" && !n(e) && r(e);
|
|
2121
2179
|
let i = e.querySelector("table");
|
|
2122
2180
|
i && !n(i) && !i.querySelector(":scope > caption") && r(i);
|
|
2123
|
-
},
|
|
2124
|
-
|
|
2125
|
-
|
|
2181
|
+
}, In = [
|
|
2182
|
+
null,
|
|
2183
|
+
"dashed",
|
|
2184
|
+
"dotted",
|
|
2185
|
+
"dash-dot"
|
|
2186
|
+
], Ln = (t, n, r, i) => {
|
|
2187
|
+
let a = t.closest("[data-chart-lines]")?.getAttribute("data-chart-lines"), o = i.lines;
|
|
2188
|
+
if (a) try {
|
|
2189
|
+
o = JSON.parse(a);
|
|
2190
|
+
} catch {
|
|
2191
|
+
console.warn(`[${e}] data-chart-lines needs a JSON list, such as [{"marker":"none"}].`, t);
|
|
2192
|
+
}
|
|
2193
|
+
(r === "line" || r === "area" ? n : n.filter((e) => e.chart)).forEach((e, t) => {
|
|
2194
|
+
if (!o?.length) {
|
|
2195
|
+
e.line ?? (e.line = In[Math.floor(t / 6) % In.length]);
|
|
2196
|
+
return;
|
|
2197
|
+
}
|
|
2198
|
+
let n = o[t % o.length];
|
|
2199
|
+
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);
|
|
2200
|
+
});
|
|
2201
|
+
}, Rn = (r, i, a = null) => {
|
|
2202
|
+
let o = a ?? (r.getAttribute("data-chart") || "column"), s = yn[o];
|
|
2203
|
+
if (!s) return console.warn(`[${e}] Unknown chart type "${o}". Known types: ${Object.keys(yn).join(", ")}.`), r.setAttribute("data-chart-empty", ""), null;
|
|
2126
2204
|
let c = dt(r, i.langattribute);
|
|
2127
2205
|
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
|
-
|
|
2206
|
+
Fn(r);
|
|
2129
2207
|
let l = mt(r, c, i.langattribute);
|
|
2130
2208
|
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
2209
|
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.`;
|
|
@@ -2134,6 +2212,7 @@ var Xe = (e) => {
|
|
|
2134
2212
|
chart: null
|
|
2135
2213
|
})));
|
|
2136
2214
|
}
|
|
2215
|
+
Ln(r, l, o, i);
|
|
2137
2216
|
let u = l.some((e) => e.chart), d = l.length > 1;
|
|
2138
2217
|
d && r.style.setProperty("--_series-count", String(l.length));
|
|
2139
2218
|
let m = r.hasAttribute("data-chart-stack");
|
|
@@ -2147,14 +2226,14 @@ var Xe = (e) => {
|
|
|
2147
2226
|
_.appendChild(v);
|
|
2148
2227
|
let y = r.querySelector(":scope > table"), b = (e) => y ? y.before(e) : r.append(e);
|
|
2149
2228
|
b(_);
|
|
2150
|
-
let x = s.centre ? c.filter((e) => !e.isTotal) : c, S = Math.max(0,
|
|
2229
|
+
let x = s.centre ? c.filter((e) => !e.isTotal) : c, S = Math.max(0, W(x.flatMap((e) => e.cells.slice(0, l.length).map((e) => ie(e.number))))), C = l.map((e, t) => Math.max(0, W(c.map((e) => ie(e.cells[t]?.number ?? ""))))), w = document.createElement("div");
|
|
2151
2230
|
w.className = "tablechart-values", _.appendChild(w);
|
|
2152
2231
|
let D = l.map((e, t) => c.map((e, r) => {
|
|
2153
2232
|
let i = e.cells[t] ?? e.cells[0], a = L(n, w);
|
|
2154
2233
|
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
2234
|
})), O = D[0], k = h && s.totals ? c.map((e, t) => {
|
|
2156
2235
|
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(
|
|
2236
|
+
r.classList.add(...e.classes), r.dataset.kind = "total", r.dataset.row = String(t + 1), r.dataset.value = String(Ie(e, l.length));
|
|
2158
2237
|
let i = e.cells[0];
|
|
2159
2238
|
return i.prefix && (r.dataset.prefix = i.prefix), i.suffix && (r.dataset.suffix = i.suffix), r.style.setProperty("--i", String(e.slot)), r;
|
|
2160
2239
|
}) : [], 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,35 +2242,35 @@ var Xe = (e) => {
|
|
|
2163
2242
|
let n = L(f, N ?? _);
|
|
2164
2243
|
N && (n.dataset.place = "legend");
|
|
2165
2244
|
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 ?
|
|
2245
|
+
if (a && (n.dataset.swatch = a), n.textContent = e.name, !a && jn(r, i) !== "step") {
|
|
2246
|
+
let r = e.chart ? Y(P, P.indexOf(e)) : Y(l, t);
|
|
2168
2247
|
n.dataset.marker = r.shape, n.toggleAttribute("data-open", r.open);
|
|
2169
2248
|
}
|
|
2170
2249
|
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
2250
|
}) : [], R = s.centre ? L(g, _) : null;
|
|
2172
2251
|
if (R) {
|
|
2173
2252
|
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(
|
|
2253
|
+
R.dataset.value = String(t), e && (R.dataset.decimals = String(ie(e.number)));
|
|
2175
2254
|
}
|
|
2176
|
-
let z = R && !c.some((e) => e.isTotal) ?
|
|
2255
|
+
let z = R && !c.some((e) => e.isTotal) ? Nn(r, R, i) : null, B = s.categories === "beside", V = document.createElement("div");
|
|
2177
2256
|
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
|
-
let
|
|
2257
|
+
let ee = 0;
|
|
2179
2258
|
for (let [e, t] of c.entries()) {
|
|
2180
2259
|
let n = document.createElement("span");
|
|
2181
|
-
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(
|
|
2260
|
+
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(ee + 1), n.style.setProperty("--n", String(ee)), n.style.setProperty("--palette", `var(--tablechart-color-${ee + 1})`), ee += 1)), n.style.setProperty("--i", String(t.slot)), n.dataset.row = String(e + 1), V.appendChild(n);
|
|
2182
2261
|
}
|
|
2183
|
-
s.centre && r.style.setProperty("--_slice-count", String(
|
|
2184
|
-
let
|
|
2185
|
-
titles:
|
|
2262
|
+
s.centre && r.style.setProperty("--_slice-count", String(ee)), B ? _.appendChild(V) : b(V), N && b(N);
|
|
2263
|
+
let H = l.filter((e) => !e.group), U = !s.axes && !s.centre && kn(r, "data-chart-axis", i.axis), te = s.axes ? {
|
|
2264
|
+
titles: H.slice(0, 2).map((e, t) => {
|
|
2186
2265
|
let n = L(`${T}-title`, _);
|
|
2187
2266
|
return n.dataset.axis = t ? "y" : "x", n.textContent = e.name, e.key && i.langattribute && n.setAttribute(i.langattribute, e.key), n;
|
|
2188
2267
|
}),
|
|
2189
2268
|
ticks: L(`${E}s`, _),
|
|
2190
2269
|
numbers: !0
|
|
2191
|
-
} :
|
|
2270
|
+
} : U || !s.centre && kn(r, "data-chart-grid", i.grid) ? {
|
|
2192
2271
|
titles: [],
|
|
2193
2272
|
ticks: L(`${E}s`, _),
|
|
2194
|
-
numbers:
|
|
2273
|
+
numbers: U
|
|
2195
2274
|
} : null;
|
|
2196
2275
|
s.text?.({
|
|
2197
2276
|
figure: r,
|
|
@@ -2200,21 +2279,21 @@ var Xe = (e) => {
|
|
|
2200
2279
|
series: l,
|
|
2201
2280
|
config: i
|
|
2202
2281
|
});
|
|
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
|
|
2282
|
+
let ne = An(r, i) ? Vt(r, !!s.axes) : null;
|
|
2283
|
+
s.axes && r.querySelector("tbody [data-fragment], thead [data-fragment]") && Q.log(`A ${o} chart has one step, with data-fragment on the figure; its rows and columns have no steps of their own.`, r), ne && r.setAttribute("data-steps", "");
|
|
2284
|
+
let re = r.getAttribute("data-chart-keys"), G = ne && i.controls ? Gt({
|
|
2206
2285
|
previous: i.previouslabel,
|
|
2207
2286
|
next: i.nextlabel,
|
|
2208
2287
|
hint: i.stephint
|
|
2209
2288
|
}, {
|
|
2210
|
-
previous:
|
|
2211
|
-
next:
|
|
2212
|
-
hint:
|
|
2289
|
+
previous: re && `${re}-previous`,
|
|
2290
|
+
next: re && `${re}-next`,
|
|
2291
|
+
hint: re && `${re}-step`
|
|
2213
2292
|
}, 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(
|
|
2293
|
+
G && b(G);
|
|
2294
|
+
let ae = Array.from(r.querySelectorAll("[data-annotation]")).map((t) => {
|
|
2295
|
+
let n = t.getAttribute("data-annotation"), r = xn[n];
|
|
2296
|
+
if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(xn).join(", ")}.`), null;
|
|
2218
2297
|
let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= l.length ? i - 1 : 0;
|
|
2219
2298
|
return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which is not there; it reads line 1.`), {
|
|
2220
2299
|
spec: t,
|
|
@@ -2227,16 +2306,16 @@ var Xe = (e) => {
|
|
|
2227
2306
|
if (!B && !s.centre && !s.axes) for (let [e, t] of c.entries()) {
|
|
2228
2307
|
if (!t.note) continue;
|
|
2229
2308
|
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),
|
|
2309
|
+
n.dataset.annotation = "note", n.dataset.row = String(e + 1), n.textContent = t.note, t.noteKey && n.setAttribute("data-i18n", t.noteKey), ae.push({
|
|
2231
2310
|
spec: n,
|
|
2232
|
-
type:
|
|
2233
|
-
badge:
|
|
2311
|
+
type: Ee,
|
|
2312
|
+
badge: Ee.create(n, _),
|
|
2234
2313
|
series: 0,
|
|
2235
2314
|
after: c.length
|
|
2236
2315
|
});
|
|
2237
2316
|
}
|
|
2238
|
-
|
|
2239
|
-
let
|
|
2317
|
+
An(r, i) && r.setAttribute("data-animate", Vn(r, o, i, !!ne));
|
|
2318
|
+
let K = {
|
|
2240
2319
|
figure: r,
|
|
2241
2320
|
plot: _,
|
|
2242
2321
|
svg: v,
|
|
@@ -2256,38 +2335,38 @@ var Xe = (e) => {
|
|
|
2256
2335
|
rowAt: null,
|
|
2257
2336
|
rowBox: null,
|
|
2258
2337
|
pointOf: null,
|
|
2259
|
-
annotations:
|
|
2338
|
+
annotations: ae,
|
|
2260
2339
|
checks: [],
|
|
2261
|
-
plan:
|
|
2340
|
+
plan: ne,
|
|
2262
2341
|
step: 0,
|
|
2263
|
-
controls:
|
|
2264
|
-
},
|
|
2265
|
-
v.addEventListener("transitionend",
|
|
2342
|
+
controls: G
|
|
2343
|
+
}, oe = () => nr(r, v);
|
|
2344
|
+
v.addEventListener("transitionend", oe), v.addEventListener("transitioncancel", oe), G?.addEventListener("click", (e) => {
|
|
2266
2345
|
let t = e.target.closest("button")?.dataset.go;
|
|
2267
|
-
t &&
|
|
2268
|
-
}),
|
|
2269
|
-
let
|
|
2270
|
-
return
|
|
2271
|
-
},
|
|
2346
|
+
t && Wt(K, K.step + (t === "next" ? 1 : -1));
|
|
2347
|
+
}), Wt(K, 0, !0);
|
|
2348
|
+
let se = r.getAttribute("data-chart-tooltip"), ce = se === "false" ? !1 : se === "auto" ? "auto" : se !== null || i.tooltip;
|
|
2349
|
+
return ce && _n(K, i, ce === "auto"), Zn(K, i), K;
|
|
2350
|
+
}, zn = {
|
|
2272
2351
|
grow: "grow",
|
|
2273
2352
|
sweep: "sweep"
|
|
2274
|
-
},
|
|
2353
|
+
}, Bn = [
|
|
2275
2354
|
"never",
|
|
2276
2355
|
"auto",
|
|
2277
2356
|
"print",
|
|
2278
2357
|
"always"
|
|
2279
|
-
],
|
|
2280
|
-
let i = t === "line" || t === "area", a =
|
|
2358
|
+
], Vn = (e, t, n, r) => {
|
|
2359
|
+
let i = t === "line" || t === "area", a = zn[e.getAttribute("data-chart-animate") ?? ""] ?? zn[String(n.animate)];
|
|
2281
2360
|
return i ? r ? "sweep" : a ?? "sweep" : t === "donut" || t === "waterfall" ? a ?? "grow" : "grow";
|
|
2282
|
-
},
|
|
2361
|
+
}, Hn = (e) => {
|
|
2283
2362
|
let t = getComputedStyle(e).getPropertyValue("--tablechart-value-align").trim();
|
|
2284
2363
|
return t === "start" || t === "center" || t === "end" ? t : null;
|
|
2285
|
-
},
|
|
2364
|
+
}, Un = (e, t, n) => e.dataset.chartLabels === "inside" || e.dataset.chartLabels !== "outside" && (t.labels === "inside" || n) ? "inside" : "outside", Wn = (e, t, n, r) => {
|
|
2286
2365
|
let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
|
|
2287
2366
|
if (!a) return null;
|
|
2288
2367
|
let o = Number(a[1]);
|
|
2289
2368
|
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
|
-
},
|
|
2369
|
+
}, Gn = (e, t) => Wn(e, t, "--tablechart-bar-max", "60px") ?? Infinity, Kn = (e, t) => {
|
|
2291
2370
|
let n = e.getBoundingClientRect(), r = O / n.width, i = getComputedStyle(e), a = Number.parseFloat(i.lineHeight) / Number.parseFloat(i.fontSize) || 1.2;
|
|
2292
2371
|
return (e) => {
|
|
2293
2372
|
if (e.dataset.place === "none" || e.hidden || e.hasAttribute("data-left-out")) return [];
|
|
@@ -2302,21 +2381,21 @@ var Xe = (e) => {
|
|
|
2302
2381
|
style: s.join("; ")
|
|
2303
2382
|
})] : [];
|
|
2304
2383
|
};
|
|
2305
|
-
},
|
|
2384
|
+
}, qn = [
|
|
2306
2385
|
"first",
|
|
2307
2386
|
"last",
|
|
2308
2387
|
"highest",
|
|
2309
2388
|
"lowest",
|
|
2310
2389
|
"outliers"
|
|
2311
|
-
],
|
|
2390
|
+
], Jn = (t, n) => {
|
|
2312
2391
|
let r = (t.getAttribute("data-chart-values") ?? n.values).trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
2313
2392
|
for (let t of r) [
|
|
2314
2393
|
"auto",
|
|
2315
2394
|
"all",
|
|
2316
2395
|
"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) =>
|
|
2396
|
+
...qn
|
|
2397
|
+
].includes(t) || console.warn(`[${e}] data-chart-values knows no "${t}". It takes auto, all, none, ${qn.join(", ")}.`);
|
|
2398
|
+
let i = r.filter((e) => qn.includes(e));
|
|
2320
2399
|
return r.includes("all") ? {
|
|
2321
2400
|
mode: "all",
|
|
2322
2401
|
keys: []
|
|
@@ -2325,19 +2404,19 @@ var Xe = (e) => {
|
|
|
2325
2404
|
keys: []
|
|
2326
2405
|
} : r.includes("auto") || !i.length ? {
|
|
2327
2406
|
mode: "auto",
|
|
2328
|
-
keys: i.length ? i :
|
|
2407
|
+
keys: i.length ? i : qn
|
|
2329
2408
|
} : {
|
|
2330
2409
|
mode: "set",
|
|
2331
2410
|
keys: i
|
|
2332
2411
|
};
|
|
2333
|
-
},
|
|
2334
|
-
let i = e.getAttribute("data-chart-table"), a = i &&
|
|
2412
|
+
}, Yn = ({ figure: e, rows: t, series: n }, r) => {
|
|
2413
|
+
let i = e.getAttribute("data-chart-table"), a = i && Bn.includes(i) ? i : r.table;
|
|
2335
2414
|
a === "never" ? e.removeAttribute("data-table") : e.setAttribute("data-table", a);
|
|
2336
2415
|
let o = e.getAttribute("data-chart-summary");
|
|
2337
|
-
e.setAttribute("data-summary", o &&
|
|
2338
|
-
},
|
|
2416
|
+
e.setAttribute("data-summary", o && Bn.includes(o) ? o : r.summary), e.toggleAttribute("data-long", t.length * n.filter((e) => !e.group).length > r.tablelimit);
|
|
2417
|
+
}, Xn = (t, n) => {
|
|
2339
2418
|
let { plot: r, svg: i, rows: l, type: m, values: g, series: _, seriesValues: y, names: b, annotations: x } = t;
|
|
2340
|
-
|
|
2419
|
+
Yn(t, n);
|
|
2341
2420
|
let S = getComputedStyle(t.figure);
|
|
2342
2421
|
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
2422
|
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 +2424,7 @@ var Xe = (e) => {
|
|
|
2345
2424
|
r.style.margin = "", j && (j.style.marginLeft = "");
|
|
2346
2425
|
let e = r.clientWidth;
|
|
2347
2426
|
if (!e) return !1;
|
|
2348
|
-
let i = m.segments?.(l) ?? [], a = t.stacked ? l.flatMap((e) => Object.values(
|
|
2427
|
+
let i = m.segments?.(l) ?? [], a = t.stacked ? l.flatMap((e) => Object.values(Fe(e, _.length, m.running))) : i.some((e) => e.kind === "up" || e.kind === "down") ? i.flatMap((e) => [e.from, e.to]) : l.flatMap((e) => e.cells.slice(0, _.length).filter((e) => !e.missing).map((e) => e.value)), o = Math.min(0, -W(a.map((e) => -e))), s = Math.max(0, W(a)), c = Number.parseFloat(getComputedStyle(r).fontSize) || 16, { chartScaleY: u, chartScale: d } = t.figure.dataset, f = bt(u ?? d);
|
|
2349
2428
|
if (f && f.length > 2) M = {
|
|
2350
2429
|
min: f[0],
|
|
2351
2430
|
max: f[f.length - 1],
|
|
@@ -2362,15 +2441,15 @@ var Xe = (e) => {
|
|
|
2362
2441
|
};
|
|
2363
2442
|
}
|
|
2364
2443
|
A.ticks.textContent = "";
|
|
2365
|
-
let p = l.find((e) => !e.missing), h =
|
|
2444
|
+
let p = l.find((e) => !e.missing), h = W(M.ticks.map((e) => ie(String(e))));
|
|
2366
2445
|
for (let e of M.ticks) {
|
|
2367
2446
|
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),
|
|
2447
|
+
t.dataset.value = String(e), t.dataset.place = "none", p?.prefix && (t.dataset.prefix = p.prefix), p?.suffix && (t.dataset.suffix = p.suffix), Qn(t, h, n.locale);
|
|
2369
2448
|
}
|
|
2370
2449
|
if (A.numbers) {
|
|
2371
2450
|
let e = Array.from(A.ticks.children);
|
|
2372
2451
|
for (let t of e) delete t.dataset.place;
|
|
2373
|
-
|
|
2452
|
+
he(e), k ? r.style.marginBottom = `${(e[0] ? q(e[0]).height : 0) + 6}px` : (r.style.marginLeft = `${W([0, ...e.map((e) => q(e).width)]) + 10}px`, j && (j.style.marginLeft = r.style.marginLeft));
|
|
2374
2453
|
}
|
|
2375
2454
|
}
|
|
2376
2455
|
let N = r.clientWidth;
|
|
@@ -2380,19 +2459,19 @@ var Xe = (e) => {
|
|
|
2380
2459
|
let B = m.numbers === !1 ? g.slice(0, 1) : [...y.flat(), ...t.totals];
|
|
2381
2460
|
for (let e of B) delete e.dataset.place, e.removeAttribute("data-left-out"), e.removeAttribute("data-cut");
|
|
2382
2461
|
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
|
-
let V = m.axes ? t.axes : null,
|
|
2462
|
+
let V = m.axes ? t.axes : null, ee = [];
|
|
2384
2463
|
if (V) {
|
|
2385
2464
|
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 = [bt(o), bt(s ?? c)];
|
|
2386
|
-
|
|
2387
|
-
let r = a[0]?.cells[i[t]], o =
|
|
2465
|
+
ee = i.map((t, n) => xt(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 = "", ee.forEach((e, t) => {
|
|
2466
|
+
let r = a[0]?.cells[i[t]], o = W(e.ticks.map((e) => ie(String(e))));
|
|
2388
2467
|
for (let i of e.ticks) {
|
|
2389
2468
|
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),
|
|
2469
|
+
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), Qn(e, o, n.locale);
|
|
2391
2470
|
}
|
|
2392
2471
|
});
|
|
2393
2472
|
}
|
|
2394
2473
|
let te = V ? Array.from(V.ticks.children) : [];
|
|
2395
|
-
|
|
2474
|
+
he([
|
|
2396
2475
|
...y.flat(),
|
|
2397
2476
|
...t.totals,
|
|
2398
2477
|
...b,
|
|
@@ -2401,18 +2480,18 @@ var Xe = (e) => {
|
|
|
2401
2480
|
...V?.titles ?? [],
|
|
2402
2481
|
...te
|
|
2403
2482
|
]);
|
|
2404
|
-
let
|
|
2483
|
+
let ne = (g[0] ? q(g[0]).height : 0) * I;
|
|
2405
2484
|
m.numbers === !1 && g[0] && (g[0].dataset.place = "none");
|
|
2406
|
-
let
|
|
2407
|
-
labelHeight:
|
|
2408
|
-
nameHeight: Math.max(0,
|
|
2485
|
+
let re = x[0]?.badge ? q(x[0].badge).height * I : 0, G = Math.max(z, Wn(t.figure, I, "--tablechart-min-height", "200px") ?? 0, m.minHeight?.({
|
|
2486
|
+
labelHeight: ne,
|
|
2487
|
+
nameHeight: Math.max(0, W(t.categories.map((e) => q(e).height))) * I,
|
|
2409
2488
|
unit: I,
|
|
2410
2489
|
rows: l.length,
|
|
2411
2490
|
series: _.length,
|
|
2412
2491
|
stacked: t.stacked,
|
|
2413
|
-
labels:
|
|
2414
|
-
}) ?? 0),
|
|
2415
|
-
let t =
|
|
2492
|
+
labels: Un(t.figure, n, _.some((e) => e.chart))
|
|
2493
|
+
}) ?? 0), ae = t.stacked ? l.map((e) => {
|
|
2494
|
+
let t = Ie(e, _.length);
|
|
2416
2495
|
return {
|
|
2417
2496
|
...e,
|
|
2418
2497
|
value: t,
|
|
@@ -2421,120 +2500,121 @@ var Xe = (e) => {
|
|
|
2421
2500
|
value: t
|
|
2422
2501
|
} : e)
|
|
2423
2502
|
};
|
|
2424
|
-
}) : l,
|
|
2503
|
+
}) : l, K = (m.segments ?? ((e) => e.map((e) => ({
|
|
2425
2504
|
...e,
|
|
2426
2505
|
from: 0,
|
|
2427
2506
|
to: e.value,
|
|
2428
2507
|
kind: "bar"
|
|
2429
|
-
}))))(t.stacked ?
|
|
2508
|
+
}))))(t.stacked ? ae.map((e) => ({
|
|
2430
2509
|
...e,
|
|
2431
2510
|
cells: [e.cells[0]]
|
|
2432
|
-
})) : l),
|
|
2433
|
-
labelHeight:
|
|
2434
|
-
badgeHeight:
|
|
2511
|
+
})) : l), oe = {
|
|
2512
|
+
labelHeight: ne,
|
|
2513
|
+
badgeHeight: re,
|
|
2435
2514
|
hasAnnotations: x.length > 0,
|
|
2436
2515
|
unit: I,
|
|
2437
2516
|
series: _.length,
|
|
2438
2517
|
focused: _.some((e) => e.focus),
|
|
2439
2518
|
stacked: t.stacked
|
|
2440
|
-
},
|
|
2519
|
+
}, se = Math.max(((e) => t.stacked ? e(l.map((e) => Fe(e, _.length, m.running).top)) : e([...K.flatMap((e) => [
|
|
2441
2520
|
e.from,
|
|
2442
2521
|
e.to,
|
|
2443
2522
|
e.value
|
|
2444
|
-
]), ...l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value))]))(
|
|
2445
|
-
let t = Number.parseFloat(
|
|
2523
|
+
]), ...l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value))]))(W), 0), ce = K.some((e) => e.kind === "up" || e.kind === "down") ? K.flatMap((e) => [e.from, e.to]) : t.stacked ? l.map((e) => Fe(e, _.length, m.running).bottom) : l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value)), le = Math.min(-W(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) ?? ne, ue.length ? rt.headroom?.(oe) ?? 0 : 0) + de, pe = 2 * I + (m.footroom?.(oe) ?? 0) + (le < 0 ? ne + 4 * I : 0), me = G - fe - pe, ge = M ? Math.max(M.max, se) : se * 1.02, _e = M ? Math.min(M.min, le) : le * 1.02, ve = x.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, ye = (e) => {
|
|
2524
|
+
let t = Number.parseFloat(ve?.getAttribute(e) ?? "");
|
|
2446
2525
|
return Number.isFinite(t) ? t : null;
|
|
2447
|
-
},
|
|
2448
|
-
if (
|
|
2449
|
-
let t =
|
|
2526
|
+
}, xe = ye("data-from") ?? ye("data-at"), Se = ye("data-to"), J = null;
|
|
2527
|
+
if (ve && (xe !== null || Se !== null)) {
|
|
2528
|
+
let t = xe ?? 0, n = Se ?? ge, r = Se === null ? t : xe === null ? n : (t + n) / 2, i = ve.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
|
|
2450
2529
|
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 :
|
|
2452
|
-
m.breakable ?
|
|
2530
|
+
let o = Math.min(Math.max(a ? Number(a[1]) / 100 : Se === null ? .22 : .3, .05), .8), s = K.filter((e) => (e.kind === "up" || e.kind === "down") && Math.max(e.from, e.to) > t && Math.min(e.from, e.to) < n);
|
|
2531
|
+
m.breakable ? le < 0 ? console.warn(`[${e}] A chart with values below zero cannot break its scale.`) : t < 0 || n <= t || n > ge || t === 0 && n === ge ? 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.`) : J = {
|
|
2453
2532
|
lo: t,
|
|
2454
2533
|
hi: n,
|
|
2455
2534
|
gap: r,
|
|
2456
2535
|
share: o
|
|
2457
2536
|
} : console.warn(`[${e}] This kind of chart cannot break its scale.`);
|
|
2458
2537
|
}
|
|
2459
|
-
let
|
|
2460
|
-
if (
|
|
2461
|
-
let { lo: e, hi: t, gap: n, share: r } =
|
|
2462
|
-
|
|
2538
|
+
let Te = J ? J.gap : null, Ee = (J && Wn(t.figure, I, "--tablechart-break-gap", "")) ?? 13, De = G - pe, Oe = ge - _e || 1, ke = (e) => De - (e - _e) / Oe * me;
|
|
2539
|
+
if (J) {
|
|
2540
|
+
let { lo: e, hi: t, gap: n, share: r } = J, i = me * r, a = (me - i - Ee) / (e + (ge - t)), o = i / (t - e);
|
|
2541
|
+
ke = (r) => r <= e ? De - r * a : r <= n ? De - e * a - (r - e) * o : r <= t ? De - e * a - (r - e) * o - Ee : De - e * a - i - Ee - (r - t) * a;
|
|
2463
2542
|
}
|
|
2464
|
-
let
|
|
2543
|
+
let Ae, je, Me = [];
|
|
2465
2544
|
if (V) {
|
|
2466
|
-
let e = 6 * I, [t, n] = V.titles, r = (e) => e ?
|
|
2467
|
-
|
|
2545
|
+
let e = 6 * I, [t, n] = V.titles, r = (e) => e ? q(e).width * I : 0, i = (e) => e ? q(e).height * I : 0, a = te.filter((e) => e.dataset.axis === "x"), o = te.filter((e) => e.dataset.axis === "y"), s = i(te[0]), c = r(n) + W([0, ...o.map(r)]) + 2 * e, l = s / 2;
|
|
2546
|
+
je = [
|
|
2468
2547
|
c,
|
|
2469
2548
|
l,
|
|
2470
|
-
O - c -
|
|
2471
|
-
|
|
2549
|
+
O - c - W([0, ...a.map(r)]) / 2,
|
|
2550
|
+
G - l - i(t) - s - 2 * e
|
|
2472
2551
|
];
|
|
2473
|
-
let [u, d, f, p] =
|
|
2474
|
-
|
|
2552
|
+
let [u, d, f, p] = je, [m, h] = ee, g = (e) => u + (e - m.min) / (m.max - m.min || 1) * f, _ = (e) => d + p - (e - h.min) / (h.max - h.min || 1) * p;
|
|
2553
|
+
Ae = g, ke = _;
|
|
2475
2554
|
let v = (e) => r(a.find((t) => Number(t.dataset.value) === e));
|
|
2476
|
-
|
|
2555
|
+
Me = [St(m, (t) => t.every((n, r) => !r || g(n) - g(t[r - 1]) > (v(n) + v(t[r - 1])) / 2 + e)).ticks, St(h, (t) => t.every((n, r) => !r || _(t[r - 1]) - _(n) > s + e / 2)).ticks];
|
|
2477
2556
|
for (let t of te) {
|
|
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,
|
|
2557
|
+
let n = Number(t.dataset.value), r = t.dataset.axis === "x" ? 0 : 1, i = Me[r].includes(n);
|
|
2558
|
+
t.dataset.place = i ? r ? "before" : "below" : "none", i && R(t, r ? u - e : g(n), r ? _(n) : d + p + e, O, G);
|
|
2480
2559
|
}
|
|
2481
|
-
t && R(t, u + f / 2,
|
|
2560
|
+
t && R(t, u + f / 2, G - i(t), O, G), n && R(n, 0, d + p / 2, O, G);
|
|
2482
2561
|
}
|
|
2483
|
-
let
|
|
2484
|
-
|
|
2485
|
-
let
|
|
2486
|
-
t.rowAt = m.centre ? null : m.categories === "beside" ? (e, t) =>
|
|
2487
|
-
let
|
|
2562
|
+
let Ne = Jn(t.figure, n), Pe = jn(t.figure, n), Le = !!m.running && b.length > 0 && !t.stacked && Pe !== "step" && Ne.mode === "set" && Ne.keys.includes("last"), Re = Le ? W(y.flat().map((e) => q(e).width)) * I : 0, ze = b.length ? W(b.map((e) => q(e).width)) * I + 12 * I + Re : 0, Be = t.categories[0]?.parentElement;
|
|
2563
|
+
Be && (Be.style.paddingRight = ze ? `${ze / O * 100}%` : "");
|
|
2564
|
+
let Ve = (O - ze) / l.length, He = (e) => (e + .5) * Ve, Ue = (e) => e >= 0 && e < l.length ? e : null;
|
|
2565
|
+
t.rowAt = m.centre ? null : m.categories === "beside" ? (e, t) => Ue(Math.floor(t * I / (G / l.length))) : (e) => Ue(Math.floor(e * I / Ve));
|
|
2566
|
+
let We = Ve / O * 100, Ge = 100 / l.length;
|
|
2488
2567
|
if (t.rowBox = m.categories === "beside" ? (e) => [
|
|
2489
2568
|
0,
|
|
2490
|
-
e *
|
|
2569
|
+
e * Ge,
|
|
2491
2570
|
100,
|
|
2492
|
-
|
|
2571
|
+
Ge
|
|
2493
2572
|
] : (e) => [
|
|
2494
|
-
e *
|
|
2573
|
+
e * We,
|
|
2495
2574
|
0,
|
|
2496
|
-
|
|
2575
|
+
We,
|
|
2497
2576
|
100
|
|
2498
|
-
], i.setAttribute("viewBox", `0 0 ${O} ${P(
|
|
2499
|
-
let [e, r, a, o] =
|
|
2500
|
-
|
|
2577
|
+
], i.setAttribute("viewBox", `0 0 ${O} ${P(G)}`), i.textContent = "", je && Ae) {
|
|
2578
|
+
let [e, r, a, o] = je, [s, c] = Me, l = Ae;
|
|
2579
|
+
kn(t.figure, "data-chart-grid", n.grid) && i.appendChild(F("path", {
|
|
2501
2580
|
class: D,
|
|
2502
|
-
d: [...s.map((e) => `M${P(l(e))},${P(r)}V${P(r + o)}`), ...c.map((t) => `M${P(e)},${P(
|
|
2581
|
+
d: [...s.map((e) => `M${P(l(e))},${P(r)}V${P(r + o)}`), ...c.map((t) => `M${P(e)},${P(ke(t))}H${P(e + a)}`)].join("")
|
|
2503
2582
|
})), i.appendChild(F("path", {
|
|
2504
2583
|
class: T,
|
|
2505
2584
|
d: [
|
|
2506
2585
|
`M${P(e)},${P(r)}V${P(r + o)}H${P(e + a)}`,
|
|
2507
2586
|
...s.map((e) => `M${P(l(e))},${P(r + o)}v${P(4 * I)}`),
|
|
2508
|
-
...c.map((t) => `M${P(e)},${P(
|
|
2587
|
+
...c.map((t) => `M${P(e)},${P(ke(t))}h${P(-4 * I)}`)
|
|
2509
2588
|
].join("")
|
|
2510
2589
|
}));
|
|
2511
2590
|
}
|
|
2512
2591
|
t.checks = [];
|
|
2513
|
-
let
|
|
2592
|
+
let Y = {
|
|
2514
2593
|
rows: l,
|
|
2515
|
-
segments:
|
|
2516
|
-
cx:
|
|
2517
|
-
y:
|
|
2518
|
-
x:
|
|
2519
|
-
frame:
|
|
2520
|
-
length: (e, n) =>
|
|
2521
|
-
barWidth: Math.min(
|
|
2522
|
-
barMax:
|
|
2523
|
-
height:
|
|
2594
|
+
segments: K,
|
|
2595
|
+
cx: He,
|
|
2596
|
+
y: ke,
|
|
2597
|
+
x: Ae,
|
|
2598
|
+
frame: je,
|
|
2599
|
+
length: (e, n) => Wn(t.figure, I, e, n),
|
|
2600
|
+
barWidth: Math.min(Ve * n.barfill, Gn(t.figure, I)),
|
|
2601
|
+
barMax: Gn(t.figure, I),
|
|
2602
|
+
height: G,
|
|
2524
2603
|
unit: I,
|
|
2525
|
-
labelHeight:
|
|
2526
|
-
badgeHeight:
|
|
2604
|
+
labelHeight: ne,
|
|
2605
|
+
badgeHeight: re,
|
|
2527
2606
|
after: l.length,
|
|
2528
2607
|
note: 0,
|
|
2529
|
-
labels:
|
|
2530
|
-
insideAlign:
|
|
2531
|
-
breakAt:
|
|
2532
|
-
squeeze:
|
|
2533
|
-
breakGap:
|
|
2608
|
+
labels: Un(t.figure, n, ue.length > 0),
|
|
2609
|
+
insideAlign: Hn(t.figure),
|
|
2610
|
+
breakAt: Te,
|
|
2611
|
+
squeeze: J,
|
|
2612
|
+
breakGap: Ee,
|
|
2534
2613
|
domain: M ? [M.min, M.max] : null,
|
|
2535
2614
|
stacked: t.stacked,
|
|
2536
|
-
shape:
|
|
2537
|
-
pick:
|
|
2615
|
+
shape: Pe,
|
|
2616
|
+
pick: Ne,
|
|
2617
|
+
numbersAtEnd: Le,
|
|
2538
2618
|
totals: t.totals,
|
|
2539
2619
|
svg: i,
|
|
2540
2620
|
plot: r,
|
|
@@ -2551,14 +2631,14 @@ var Xe = (e) => {
|
|
|
2551
2631
|
lineHoles: []
|
|
2552
2632
|
};
|
|
2553
2633
|
r.style.setProperty("--count", String(Math.max(1, ...l.map((e) => e.slot + 1))));
|
|
2554
|
-
let
|
|
2634
|
+
let Ke = (e) => {
|
|
2555
2635
|
let t = (t) => ({
|
|
2556
2636
|
...t,
|
|
2557
2637
|
...t.cells[e] ?? t.cells[0]
|
|
2558
2638
|
});
|
|
2559
2639
|
return {
|
|
2560
2640
|
rows: l.map(t),
|
|
2561
|
-
segments:
|
|
2641
|
+
segments: K.map((e) => {
|
|
2562
2642
|
let n = t(e);
|
|
2563
2643
|
return e.kind === "bar" ? {
|
|
2564
2644
|
...n,
|
|
@@ -2568,97 +2648,97 @@ var Xe = (e) => {
|
|
|
2568
2648
|
values: y[e]
|
|
2569
2649
|
};
|
|
2570
2650
|
};
|
|
2571
|
-
if (
|
|
2651
|
+
if (ue.length) {
|
|
2572
2652
|
let e = _.flatMap((e, t) => e.chart ? [] : [t]);
|
|
2573
2653
|
m.draw({
|
|
2574
|
-
...
|
|
2654
|
+
...Y,
|
|
2575
2655
|
own: e,
|
|
2576
|
-
...e.length === 1 &&
|
|
2656
|
+
...e.length === 1 && Ke(e[0])
|
|
2577
2657
|
}), rt.draw({
|
|
2578
|
-
...
|
|
2579
|
-
own:
|
|
2658
|
+
...Y,
|
|
2659
|
+
own: ue
|
|
2580
2660
|
});
|
|
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)
|
|
2661
|
+
} else m.draw(Y);
|
|
2662
|
+
Y.rowAt && (t.rowAt = Y.rowAt), t.pointOf = Y.pointOf ?? null;
|
|
2663
|
+
let X = Number(r.style.getPropertyValue("--count")) || l.length;
|
|
2664
|
+
for (let e of t.figure.querySelectorAll(`.${f}`)) e.style.setProperty("--i", String(Math.min(l[l.length - 1].slot, X - 1)));
|
|
2665
|
+
if (!t.stacked && !r.hasAttribute("data-grouped")) for (let e of y) Ce(e, I, O), we(e, I, O, G);
|
|
2586
2666
|
if (A && M) {
|
|
2587
|
-
let e = 6 * I, r = k &&
|
|
2667
|
+
let e = 6 * I, r = k && Y.x ? Y.x : ke, a = Array.from(A.ticks.children), o = (e) => q(a.find((t) => Number(t.dataset.value) === e) ?? a[0]), s = St(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) => !J || e <= J.lo || e >= J.hi);
|
|
2588
2668
|
for (let t of a) {
|
|
2589
2669
|
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 ?
|
|
2670
|
+
t.dataset.place = i ? k ? "below" : "before" : "none", i && R(t, k ? r(n) : -e, k ? G + e : r(n), O, G);
|
|
2591
2671
|
}
|
|
2592
|
-
let c = O -
|
|
2593
|
-
|
|
2672
|
+
let c = O - ze;
|
|
2673
|
+
kn(t.figure, "data-chart-grid", n.grid) && i.prepend(F("path", {
|
|
2594
2674
|
class: D,
|
|
2595
|
-
d: s.map((e) => k ? `M${P(r(e))},0V${P(
|
|
2675
|
+
d: s.map((e) => k ? `M${P(r(e))},0V${P(G)}` : `M0,${P(r(e))}H${P(c)}`).join("")
|
|
2596
2676
|
})), A.numbers && i.appendChild(F("path", {
|
|
2597
2677
|
class: T,
|
|
2598
|
-
d: [k ? `M${P(r(M.min))},${P(
|
|
2678
|
+
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
2679
|
}));
|
|
2600
2680
|
}
|
|
2601
2681
|
for (let [e, n] of x.entries()) {
|
|
2602
2682
|
n.badge?.setAttribute("data-note", String(e + 1));
|
|
2603
2683
|
let i = n.series;
|
|
2604
2684
|
n.type.draw(n.spec, n.badge, {
|
|
2605
|
-
...
|
|
2685
|
+
...Y,
|
|
2606
2686
|
...t.stacked && {
|
|
2607
|
-
rows:
|
|
2687
|
+
rows: ae,
|
|
2608
2688
|
...t.totals.length && { values: t.totals }
|
|
2609
2689
|
},
|
|
2610
|
-
...i > 0 && !t.stacked &&
|
|
2690
|
+
...i > 0 && !t.stacked && Ke(i),
|
|
2611
2691
|
after: t.plan ? n.after : Math.min(n.after, Number(r.style.getPropertyValue("--count")) || n.after),
|
|
2612
2692
|
note: e + 1
|
|
2613
2693
|
});
|
|
2614
2694
|
}
|
|
2615
|
-
|
|
2695
|
+
Ut(t);
|
|
2616
2696
|
for (let e of t.figure.querySelectorAll(`.${p}`)) {
|
|
2617
2697
|
let n = Array.from(e.children);
|
|
2618
2698
|
if (t.plan) for (let e of n) e.style.getPropertyValue("--step") || e.style.setProperty("--i", "0");
|
|
2619
2699
|
let r = n.map((e) => Number.parseFloat(e.style.getPropertyValue("--step")));
|
|
2620
2700
|
e.style.setProperty("--i", String(Math.min(...n.map((e) => Number(e.style.getPropertyValue("--i")) || 0)))), r.length && r.every(Number.isFinite) ? e.style.setProperty("--step", String(Math.min(...r))) : e.style.removeProperty("--step");
|
|
2621
2701
|
}
|
|
2622
|
-
let
|
|
2623
|
-
if (
|
|
2624
|
-
|
|
2702
|
+
let Z = t.categories[0]?.parentElement;
|
|
2703
|
+
if (Z && m.categories !== "beside" && !m.centre) {
|
|
2704
|
+
Z.style.height = `${Z.offsetHeight}px`, Z.removeAttribute("data-thinned");
|
|
2625
2705
|
for (let e of t.categories) e.removeAttribute("data-left-out"), e.removeAttribute("data-edge");
|
|
2626
2706
|
let e = t.categories.filter((e) => e.offsetParent !== null);
|
|
2627
|
-
if (!
|
|
2707
|
+
if (!be(Z, e, (e) => ({
|
|
2628
2708
|
size: e.scrollWidth,
|
|
2629
2709
|
room: e.clientWidth
|
|
2630
2710
|
}), "--_name-fit") && e.length > 1) {
|
|
2631
|
-
let t = getComputedStyle(
|
|
2632
|
-
|
|
2633
|
-
let r =
|
|
2711
|
+
let t = getComputedStyle(Z), n = (Z.clientWidth - Number.parseFloat(t.paddingLeft) - Number.parseFloat(t.paddingRight)) / l.length;
|
|
2712
|
+
Z.style.setProperty("--_name-fit", "1"), Z.setAttribute("data-thinned", "");
|
|
2713
|
+
let r = W(e.map((e) => e.offsetWidth)), i = Math.max(Math.ceil((r + 8) / n), Math.ceil((1.5 * r + 8) / n - .5), 1);
|
|
2634
2714
|
e.forEach((e, t) => {
|
|
2635
2715
|
t % i && e.setAttribute("data-left-out", "");
|
|
2636
2716
|
});
|
|
2637
|
-
let a = e.filter((e) => !e.hasAttribute("data-left-out")), o = a[0], s = a.at(-1), c =
|
|
2717
|
+
let a = e.filter((e) => !e.hasAttribute("data-left-out")), o = a[0], s = a.at(-1), c = Z.getBoundingClientRect(), u = [o, s].map((e) => e?.getBoundingClientRect());
|
|
2638
2718
|
if (o && u[0] && u[0].left < c.left && o.setAttribute("data-edge", "start"), s && s !== o && u[1] && u[1].right > c.right - Number.parseFloat(t.paddingRight)) {
|
|
2639
2719
|
s.setAttribute("data-edge", "end");
|
|
2640
2720
|
let e = a.at(-2);
|
|
2641
2721
|
e && e.getBoundingClientRect().right + 8 > s.getBoundingClientRect().left && s.setAttribute("data-left-out", "");
|
|
2642
2722
|
}
|
|
2643
2723
|
}
|
|
2644
|
-
let r = (m === rt || m === it) &&
|
|
2645
|
-
if (
|
|
2646
|
-
let e =
|
|
2647
|
-
e > 0 && e < 10 * I &&
|
|
2648
|
-
let n =
|
|
2724
|
+
let r = (m === rt || m === it) && kn(t.figure, "data-chart-ticks", n.ticks);
|
|
2725
|
+
if (Z.toggleAttribute("data-ticks", r), Z.style.removeProperty("--_tick-reach"), r) {
|
|
2726
|
+
let e = G - Number(i.querySelector(".tablechart-rule")?.getAttribute("y1") ?? G);
|
|
2727
|
+
e > 0 && e < 10 * I && Z.style.setProperty("--_tick-reach", `${P(e / I)}px`);
|
|
2728
|
+
let n = Z.getBoundingClientRect(), r = n.width / (Z.offsetWidth || 1), a = getComputedStyle(Z), o = Number.parseFloat(a.paddingLeft), s = (Z.clientWidth - o - Number.parseFloat(a.paddingRight)) / l.length;
|
|
2649
2729
|
t.categories.forEach((e, t) => {
|
|
2650
2730
|
if (e.hasAttribute("data-left-out")) e.style.removeProperty("--_tick");
|
|
2651
2731
|
else {
|
|
2652
|
-
let i = (e.getBoundingClientRect().left - n.left) / r -
|
|
2732
|
+
let i = (e.getBoundingClientRect().left - n.left) / r - Z.clientLeft;
|
|
2653
2733
|
e.style.setProperty("--_tick", `${P(o + (t + .5) * s - i)}px`);
|
|
2654
2734
|
}
|
|
2655
2735
|
});
|
|
2656
2736
|
}
|
|
2657
|
-
|
|
2737
|
+
Z.style.height = "";
|
|
2658
2738
|
}
|
|
2659
|
-
let
|
|
2739
|
+
let qe = x.flatMap(({ badge: e }) => {
|
|
2660
2740
|
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 *
|
|
2741
|
+
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
2742
|
return [F("rect", {
|
|
2663
2743
|
class: h,
|
|
2664
2744
|
"data-for": "badge",
|
|
@@ -2671,24 +2751,24 @@ var Xe = (e) => {
|
|
|
2671
2751
|
ry: o === null ? s : n * o,
|
|
2672
2752
|
style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
|
|
2673
2753
|
})];
|
|
2674
|
-
}),
|
|
2675
|
-
if (
|
|
2754
|
+
}), Je = i.querySelector(`.${D}`), Ye = Array.from(i.querySelectorAll(`.${o}`)), Xe = [...Je ? [Je] : [], ...i.querySelectorAll(`:scope > .${s}`)], Ze = Kn(r, I), Qe = t.figure.getAttribute("data-animate") === "grow", $e = y.flat().filter((e) => e.hasAttribute("data-cut")).flatMap(Ze), et = [...ue.flatMap((e) => y[e].flatMap(Ze)), ...Qe ? $e : []];
|
|
2755
|
+
if (Xe.length || Ye.length) {
|
|
2676
2756
|
let e = [
|
|
2677
2757
|
...y.flat(),
|
|
2678
2758
|
...t.totals,
|
|
2679
2759
|
...m.categories === "beside" ? t.categories : []
|
|
2680
|
-
].flatMap(
|
|
2760
|
+
].flatMap(Ze), n = (e) => [
|
|
2681
2761
|
"x",
|
|
2682
2762
|
"y",
|
|
2683
2763
|
"width",
|
|
2684
2764
|
"height"
|
|
2685
2765
|
].map((t) => Number(e.getAttribute(t)));
|
|
2686
|
-
for (let t of
|
|
2687
|
-
for (let t of
|
|
2688
|
-
let r = [...e, ...
|
|
2689
|
-
t.setAttribute("d", i.map(([e, t, i, a]) =>
|
|
2766
|
+
for (let t of Ye) En(t, [...e, ...qe].map(n));
|
|
2767
|
+
for (let t of Xe) {
|
|
2768
|
+
let r = [...e, ...qe], i = Dn(t);
|
|
2769
|
+
t.setAttribute("d", i.map(([e, t, i, a]) => Tn(e, t, i, a, r.map(n))).join(""));
|
|
2690
2770
|
for (let e of r) {
|
|
2691
|
-
let r =
|
|
2771
|
+
let r = On(i, n(e)), a = e.dataset.for === "badge" ? "badge" : "";
|
|
2692
2772
|
r && t.after(F("path", {
|
|
2693
2773
|
class: t.getAttribute("class") ?? "tablechart-grid",
|
|
2694
2774
|
"data-gap": a,
|
|
@@ -2698,57 +2778,57 @@ var Xe = (e) => {
|
|
|
2698
2778
|
}
|
|
2699
2779
|
}
|
|
2700
2780
|
}
|
|
2701
|
-
if (
|
|
2781
|
+
if (H(i, qe, O, G, Array.from(i.querySelectorAll(`.${a}, .${c}`))), !Qe && (Y.lineHoles.length || $e.length)) {
|
|
2702
2782
|
let e = Array.from(i.querySelectorAll(`.${u}`)).map((e) => {
|
|
2703
2783
|
let t = F("g", {});
|
|
2704
2784
|
return e.before(t), t.append(e), t;
|
|
2705
2785
|
});
|
|
2706
|
-
|
|
2786
|
+
H(i, [...Y.lineHoles, ...$e], O, G, [...e, ...i.querySelectorAll(`.${d}`)]);
|
|
2707
2787
|
}
|
|
2708
|
-
let
|
|
2788
|
+
let tt = [
|
|
2709
2789
|
o,
|
|
2710
2790
|
s,
|
|
2711
2791
|
a,
|
|
2712
2792
|
c,
|
|
2713
2793
|
D
|
|
2714
2794
|
];
|
|
2715
|
-
|
|
2716
|
-
let
|
|
2795
|
+
U(i, [...qe, ...et], O, G, void 0, tt.map((e) => `.${e}`).join(", ")), t.figure.hasAttribute("data-animate") && !t.figure.hasAttribute("data-steps") && !t.figure.classList.contains("is-shown") && rr(i);
|
|
2796
|
+
let nt = (e) => e.dataset.missing !== void 0 || m.centre && l[Number(e.dataset.row) - 1]?.isTotal, at = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), ot = (e, t) => {
|
|
2717
2797
|
let n = Number(e.dataset.row);
|
|
2718
|
-
return t.some((e) =>
|
|
2798
|
+
return t.some((e) => at(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
|
|
2719
2799
|
};
|
|
2720
|
-
return t.figure.toggleAttribute("data-left-out", (m.columns ? [t.categories] : [...y, t.totals]).some((e) => e.some((t) => !
|
|
2721
|
-
},
|
|
2800
|
+
return t.figure.toggleAttribute("data-left-out", (m.columns ? [t.categories] : [...y, t.totals]).some((e) => e.some((t) => !nt(t) && !at(t) && !ot(t, e)))), Mt(t.figure), Rt(t.figure), zt(t.figure), !0;
|
|
2801
|
+
}, Zn = (e, t) => {
|
|
2722
2802
|
let n = [
|
|
2723
2803
|
...e.seriesValues.flat(),
|
|
2724
2804
|
...e.totals,
|
|
2725
2805
|
...e.totalCell ? [e.totalCell] : []
|
|
2726
2806
|
];
|
|
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] =
|
|
2807
|
+
for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ? Qn(r, r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale) : r.textContent = r.dataset.missing;
|
|
2808
|
+
}, Qn = (e, t, n) => {
|
|
2809
|
+
let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] = ae(Number.parseFloat(e.dataset.value || "0"), t, n);
|
|
2730
2810
|
if (e.textContent = r + (r ? a : "") + o + i, a && !r) {
|
|
2731
2811
|
let t = document.createElement("span");
|
|
2732
2812
|
t.className = "tablechart-minus", t.textContent = a, e.prepend(t);
|
|
2733
2813
|
}
|
|
2734
|
-
},
|
|
2735
|
-
|
|
2736
|
-
},
|
|
2737
|
-
!t && !e.figure.hasAttribute("data-steps") &&
|
|
2738
|
-
|
|
2814
|
+
}, $n = (e) => {
|
|
2815
|
+
vn(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${p}`)?.remove(), e.controls?.remove();
|
|
2816
|
+
}, er = (e, t, n = !1) => {
|
|
2817
|
+
!t && !e.figure.hasAttribute("data-steps") && rr(e.svg), e.figure.classList.remove(C), n ? (e.figure.classList.add(S), e.figure.classList.toggle(b, t), e.figure.offsetWidth, t && ir(e.svg), e.figure.classList.toggle(C, t), requestAnimationFrame(() => e.figure.classList.remove(S))) : (e.figure.classList.toggle(b, t), t && requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
2818
|
+
nr(e.figure, e.svg), tr(e.figure);
|
|
2739
2819
|
})));
|
|
2740
|
-
},
|
|
2820
|
+
}, tr = (e) => {
|
|
2741
2821
|
let t = e.getAnimations({ subtree: !0 }).map((e) => e.finished.catch(() => void 0));
|
|
2742
2822
|
Promise.all(t).then(() => {
|
|
2743
2823
|
e.classList.contains("is-shown") && e.classList.add(C);
|
|
2744
2824
|
});
|
|
2745
|
-
},
|
|
2746
|
-
e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) &&
|
|
2747
|
-
},
|
|
2825
|
+
}, nr = (e, t) => {
|
|
2826
|
+
e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) && ir(t);
|
|
2827
|
+
}, rr = (e) => {
|
|
2748
2828
|
for (let t of e.querySelectorAll("[mask^=\"url(#tablechart-cut-\"]")) t.dataset.mask = t.getAttribute("mask") ?? "", t.removeAttribute("mask");
|
|
2749
|
-
},
|
|
2829
|
+
}, ir = (e) => {
|
|
2750
2830
|
for (let t of e.querySelectorAll("[data-mask]")) t.setAttribute("mask", t.dataset.mask ?? ""), t.removeAttribute("data-mask");
|
|
2751
|
-
},
|
|
2831
|
+
}, ar = {
|
|
2752
2832
|
2: {
|
|
2753
2833
|
part: 3,
|
|
2754
2834
|
text: 4.5,
|
|
@@ -2767,8 +2847,8 @@ var Xe = (e) => {
|
|
|
2767
2847
|
partRule: "APCA, WCAG 3 draft",
|
|
2768
2848
|
textRule: "APCA, WCAG 3 draft"
|
|
2769
2849
|
}
|
|
2770
|
-
},
|
|
2771
|
-
let n = Nt(t), r =
|
|
2850
|
+
}, or = (t) => {
|
|
2851
|
+
let n = Nt(t), r = ar[Et(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
2852
|
[
|
|
2773
2853
|
".tablechart-series",
|
|
2774
2854
|
"Line",
|
|
@@ -2808,30 +2888,46 @@ var Xe = (e) => {
|
|
|
2808
2888
|
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
2889
|
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
2890
|
}
|
|
2811
|
-
},
|
|
2891
|
+
}, sr = ".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", cr = (t) => {
|
|
2812
2892
|
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) => wt(getComputedStyle(e).color)[3] <
|
|
2815
|
-
|
|
2893
|
+
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(sr)).filter((e) => !e.hasAttribute("data-left-out") && !e.hidden && e.style.getPropertyValue("--m") !== "1" && (e.textContent ?? "").trim() && getComputedStyle(e).visibility !== "hidden");
|
|
2894
|
+
if ([...r, ...a].some((e) => wt(getComputedStyle(e).color)[3] === 0 && n < 20)) {
|
|
2895
|
+
n++, setTimeout(i, 500);
|
|
2816
2896
|
return;
|
|
2817
2897
|
}
|
|
2818
|
-
let
|
|
2898
|
+
let o = Array.from(t.querySelectorAll("tbody tr > :first-child")).map((e) => (e.textContent ?? "").trim()), s = ar[Et(t)], c = t.dataset.chart === "bar" ? "bar" : "column", l = /* @__PURE__ */ new Map();
|
|
2819
2899
|
for (let e of r) {
|
|
2820
2900
|
let n = Pt(t, e);
|
|
2821
2901
|
if (!n) continue;
|
|
2822
|
-
let r = getComputedStyle(e), i = getComputedStyle(n).fill,
|
|
2823
|
-
if (
|
|
2824
|
-
let f = n.classList.contains("tablechart-piece") ? `${
|
|
2902
|
+
let r = getComputedStyle(e), i = getComputedStyle(n).fill, a = kt(Et(t), wt(r.color), wt(i)), u = Number.parseFloat(r.fontSize), d = u >= 24 || u >= 18.66 && Number(r.fontWeight) >= 700 ? s.large : s.text;
|
|
2903
|
+
if (a >= d) continue;
|
|
2904
|
+
let f = n.classList.contains("tablechart-piece") ? `${c} part` : c, p = `${r.color}|${i}`, m = l.get(p) ?? {
|
|
2825
2905
|
what: f,
|
|
2826
2906
|
names: [],
|
|
2827
|
-
contrast:
|
|
2907
|
+
contrast: a,
|
|
2828
2908
|
needed: d
|
|
2829
2909
|
};
|
|
2830
|
-
m.names.push(`"${
|
|
2910
|
+
m.names.push(`"${o[Number(e.dataset.row) - 1] ?? ""}" ("${e.textContent?.trim()}")`), l.set(p, m);
|
|
2911
|
+
}
|
|
2912
|
+
let u = Nt(t), d = /* @__PURE__ */ new Map();
|
|
2913
|
+
for (let e of a) {
|
|
2914
|
+
let n = getComputedStyle(e), [r, i, a, o] = wt(n.color), c = [
|
|
2915
|
+
r,
|
|
2916
|
+
i,
|
|
2917
|
+
a
|
|
2918
|
+
].map((e, t) => e * o + u[t] * (1 - o)), l = kt(Et(t), c, u), f = Number.parseFloat(n.fontSize), p = f >= 24 || f >= 18.66 && Number(n.fontWeight) >= 700 ? s.large : s.text;
|
|
2919
|
+
if (l >= p) continue;
|
|
2920
|
+
let m = d.get(n.color) ?? {
|
|
2921
|
+
names: [],
|
|
2922
|
+
contrast: l,
|
|
2923
|
+
needed: p
|
|
2924
|
+
};
|
|
2925
|
+
m.names.push(`"${e.textContent?.trim()}"`), d.set(n.color, m);
|
|
2831
2926
|
}
|
|
2832
|
-
for (let {
|
|
2833
|
-
|
|
2834
|
-
|
|
2927
|
+
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);
|
|
2928
|
+
for (let { what: n, names: r, contrast: i, needed: a } of l.values()) {
|
|
2929
|
+
let o = r.length > 1;
|
|
2930
|
+
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
2931
|
}
|
|
2836
2932
|
}, i = () => requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
2837
2933
|
let e = t.getAnimations({ subtree: !0 }).map((e) => e.finished.catch(() => void 0));
|
|
@@ -2845,34 +2941,34 @@ var Xe = (e) => {
|
|
|
2845
2941
|
attributes: !0,
|
|
2846
2942
|
attributeFilter: ["class"]
|
|
2847
2943
|
});
|
|
2848
|
-
},
|
|
2944
|
+
}, lr = [
|
|
2849
2945
|
"bar",
|
|
2850
2946
|
"piece",
|
|
2851
2947
|
"up",
|
|
2852
2948
|
"down",
|
|
2853
2949
|
"total"
|
|
2854
|
-
].map((e) => `--tablechart-${e}-value-color`),
|
|
2950
|
+
].map((e) => `--tablechart-${e}-value-color`), ur = /* @__PURE__ */ new Set(), dr = (t) => {
|
|
2855
2951
|
let n = getComputedStyle(t);
|
|
2856
|
-
for (let r of
|
|
2857
|
-
},
|
|
2952
|
+
for (let r of lr) !ur.has(r) && n.getPropertyValue(r).trim() && (ur.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));
|
|
2953
|
+
}, fr = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), pr = /^\s*(?:Table)?:\s+/, mr = (e) => e?.tagName === "P" && pr.test(e.textContent ?? ""), hr = (e) => {
|
|
2858
2954
|
let t = document.createElement("figcaption");
|
|
2859
2955
|
for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
|
|
2860
2956
|
let n = e.firstChild;
|
|
2861
|
-
n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(
|
|
2957
|
+
n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(pr, ""), n.textContent || n.remove());
|
|
2862
2958
|
let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
|
|
2863
2959
|
if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
|
|
2864
2960
|
let e = document.createElement("span");
|
|
2865
2961
|
e.append(...r.slice(i + 1)), t.append(e);
|
|
2866
2962
|
}
|
|
2867
2963
|
return e.remove(), t;
|
|
2868
|
-
},
|
|
2869
|
-
let t =
|
|
2964
|
+
}, gr = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, _r = (e) => {
|
|
2965
|
+
let t = Tr(e);
|
|
2870
2966
|
return t?.tagName === "P" ? t : e;
|
|
2871
|
-
},
|
|
2872
|
-
let t =
|
|
2967
|
+
}, vr = (e) => {
|
|
2968
|
+
let t = _r(e).firstChild;
|
|
2873
2969
|
if (t?.nodeType !== Node.TEXT_NODE) return null;
|
|
2874
|
-
let n =
|
|
2875
|
-
if (!n || !
|
|
2970
|
+
let n = gr.exec(t.textContent ?? "");
|
|
2971
|
+
if (!n || !Sn.includes(n[1]) || !n[3] && t.nextSibling) return null;
|
|
2876
2972
|
let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
|
|
2877
2973
|
return {
|
|
2878
2974
|
name: n[1],
|
|
@@ -2880,11 +2976,11 @@ var Xe = (e) => {
|
|
|
2880
2976
|
text: t,
|
|
2881
2977
|
length: n[0].length
|
|
2882
2978
|
};
|
|
2883
|
-
},
|
|
2979
|
+
}, yr = (e) => {
|
|
2884
2980
|
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 :
|
|
2981
|
+
let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : vr(e));
|
|
2886
2982
|
return !t.length || t.some((e, t) => !n[t] && !e.hasAttribute("data-annotation")) ? null : (t.forEach((e, t) => {
|
|
2887
|
-
let r = n[t], i =
|
|
2983
|
+
let r = n[t], i = _r(e);
|
|
2888
2984
|
if (i !== e && i.replaceWith(...i.childNodes), r) {
|
|
2889
2985
|
e.setAttribute("data-annotation", r.name);
|
|
2890
2986
|
for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
|
|
@@ -2895,18 +2991,18 @@ var Xe = (e) => {
|
|
|
2895
2991
|
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
2992
|
});
|
|
2897
2993
|
}), 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 =
|
|
2994
|
+
}, br = (e, t) => {
|
|
2995
|
+
for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || fr(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
|
|
2996
|
+
}, xr = (e) => e.map((e) => {
|
|
2997
|
+
let t = e.closest("p"), n = mr(t) ? t : e;
|
|
2902
2998
|
if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
|
|
2903
2999
|
let r = document.createElement("figure");
|
|
2904
|
-
|
|
2905
|
-
let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ?
|
|
3000
|
+
br(e, r), e.classList.length || e.removeAttribute("class");
|
|
3001
|
+
let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? mr(a) ? a : mr(o) ? o : null : n;
|
|
2906
3002
|
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
|
-
}),
|
|
3003
|
+
let c = o?.classList.contains("chart-annotations") ? o : yr(o);
|
|
3004
|
+
return n.replaceWith(r), s && r.append(hr(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;
|
|
3005
|
+
}), Sr = (e, t, n, r = document.createElement("table"), i = "Note") => {
|
|
2910
3006
|
for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
|
|
2911
3007
|
let a = e.some((e) => e.note);
|
|
2912
3008
|
if (!r.tHead && (t.length || n || a)) {
|
|
@@ -2935,7 +3031,7 @@ var Xe = (e) => {
|
|
|
2935
3031
|
n.dataset.note = "", n.textContent = i, s.append(n);
|
|
2936
3032
|
}
|
|
2937
3033
|
return r;
|
|
2938
|
-
},
|
|
3034
|
+
}, Cr = (e) => {
|
|
2939
3035
|
if (!e || typeof e != "object") return;
|
|
2940
3036
|
let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
|
|
2941
3037
|
if (t.length && t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n))) return t.map(([e, t]) => Array.isArray(t) ? {
|
|
@@ -2945,16 +3041,16 @@ var Xe = (e) => {
|
|
|
2945
3041
|
label: e,
|
|
2946
3042
|
value: t
|
|
2947
3043
|
});
|
|
2948
|
-
},
|
|
3044
|
+
}, wr = async (t) => {
|
|
2949
3045
|
await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
|
|
2950
3046
|
let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
|
|
2951
3047
|
for (let e of t.querySelectorAll("table")) e !== r && e.remove();
|
|
2952
3048
|
try {
|
|
2953
3049
|
let e = await fetch(n);
|
|
2954
3050
|
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 :
|
|
3051
|
+
let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : Cr(i.rows) : Cr(i);
|
|
2956
3052
|
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 =
|
|
3053
|
+
let o = Sr(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
3054
|
if (!r) {
|
|
2959
3055
|
let e = t.querySelector(":scope > figcaption");
|
|
2960
3056
|
e ? e.after(o) : t.prepend(o);
|
|
@@ -2965,10 +3061,10 @@ var Xe = (e) => {
|
|
|
2965
3061
|
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
3062
|
}
|
|
2967
3063
|
}));
|
|
2968
|
-
},
|
|
3064
|
+
}, Tr = (e) => {
|
|
2969
3065
|
let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
|
|
2970
3066
|
return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
|
|
2971
|
-
},
|
|
3067
|
+
}, Er = "strong, b, span.total", Dr = (e) => {
|
|
2972
3068
|
for (let t of e) {
|
|
2973
3069
|
for (let e of t.querySelectorAll("tbody tr")) {
|
|
2974
3070
|
let t = e.cells[0];
|
|
@@ -2976,16 +3072,16 @@ var Xe = (e) => {
|
|
|
2976
3072
|
let n = document.createElement("th");
|
|
2977
3073
|
for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
|
|
2978
3074
|
n.append(...t.childNodes), t.replaceWith(n);
|
|
2979
|
-
for (let t =
|
|
3075
|
+
for (let t = Tr(n); t?.matches(Er); t = Tr(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
|
|
2980
3076
|
}
|
|
2981
3077
|
let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
|
|
2982
|
-
for (let t of e.slice(1)) for (let e =
|
|
3078
|
+
for (let t of e.slice(1)) for (let e = Tr(t); e?.matches(Er); e = Tr(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
|
|
2983
3079
|
}
|
|
2984
|
-
},
|
|
3080
|
+
}, Or = "data-chart-made", kr = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Ar = (e) => new Promise((t) => setTimeout(t, e)), jr = (e, t) => {
|
|
2985
3081
|
let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
|
|
2986
3082
|
return Math.min(Math.max(r, 0), 1);
|
|
2987
|
-
},
|
|
2988
|
-
if (
|
|
3083
|
+
}, Mr = async (e, t) => {
|
|
3084
|
+
if (kr()) return;
|
|
2989
3085
|
await new Promise(requestAnimationFrame);
|
|
2990
3086
|
let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
|
|
2991
3087
|
for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
|
|
@@ -2996,11 +3092,11 @@ var Xe = (e) => {
|
|
|
2996
3092
|
let a = Number(n.delay ?? 0) + i * t;
|
|
2997
3093
|
r = Math.max(r, a - Number(e.currentTime ?? 0));
|
|
2998
3094
|
}
|
|
2999
|
-
r > 0 && await
|
|
3000
|
-
},
|
|
3095
|
+
r > 0 && await Ar(r);
|
|
3096
|
+
}, Nr = (e) => {
|
|
3001
3097
|
for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
|
|
3002
3098
|
return null;
|
|
3003
|
-
},
|
|
3099
|
+
}, Pr = (e) => new Promise((t) => {
|
|
3004
3100
|
let n = ["animationstart", "transitionrun"], r = () => {
|
|
3005
3101
|
for (let e of n) document.removeEventListener(e, i, !0);
|
|
3006
3102
|
a.disconnect(), t();
|
|
@@ -3014,60 +3110,60 @@ var Xe = (e) => {
|
|
|
3014
3110
|
attributes: !0,
|
|
3015
3111
|
attributeFilter: ["class", "style"]
|
|
3016
3112
|
});
|
|
3017
|
-
}),
|
|
3018
|
-
|
|
3019
|
-
for (let e of
|
|
3113
|
+
}), Fr = /* @__PURE__ */ new Set(), Ir = null, Lr = (e) => {
|
|
3114
|
+
Fr.add(e), !Ir && (Ir = new MutationObserver(() => {
|
|
3115
|
+
for (let e of Fr) e.relabel();
|
|
3020
3116
|
requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
3021
|
-
for (let e of
|
|
3117
|
+
for (let e of Fr) e.refresh();
|
|
3022
3118
|
}));
|
|
3023
|
-
}),
|
|
3119
|
+
}), Ir.observe(document.documentElement, {
|
|
3024
3120
|
attributes: !0,
|
|
3025
3121
|
attributeFilter: ["lang"]
|
|
3026
3122
|
}));
|
|
3027
|
-
},
|
|
3028
|
-
|
|
3029
|
-
},
|
|
3123
|
+
}, Rr = (e) => {
|
|
3124
|
+
Fr.delete(e), !Fr.size && Ir && (Ir.disconnect(), Ir = null);
|
|
3125
|
+
}, zr = ["column", "bar"], Br = (e) => {
|
|
3030
3126
|
let t = e.getAttribute("data-chart") || "column";
|
|
3031
|
-
if (!
|
|
3127
|
+
if (!zr.includes(t)) return null;
|
|
3032
3128
|
let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
|
|
3033
|
-
return
|
|
3034
|
-
},
|
|
3035
|
-
let n = e, r =
|
|
3036
|
-
if (!
|
|
3129
|
+
return zr.includes(n) ? n : t;
|
|
3130
|
+
}, Vr = (e, t) => {
|
|
3131
|
+
let n = e, r = Br(n.figure), i = null, a = !1, o = !1, s = !1, c = async () => {
|
|
3132
|
+
if (!An(n.figure, t)) return er(n, !0);
|
|
3037
3133
|
let e = n.figure.classList.contains("is-shown");
|
|
3038
3134
|
if (o && i !== null && !e && !s) {
|
|
3039
3135
|
s = !0;
|
|
3040
|
-
let e =
|
|
3041
|
-
e && await
|
|
3042
|
-
} else !o && t.replay && e &&
|
|
3136
|
+
let e = kr() ? null : Nr(n.figure);
|
|
3137
|
+
e && await Pr(e), await Mr(n.figure, jr(n.figure, t)), s = !1, (o || !t.replay) && er(n, !0);
|
|
3138
|
+
} else !o && t.replay && e && er(n, !1);
|
|
3043
3139
|
}, l = () => {
|
|
3044
|
-
let e =
|
|
3140
|
+
let e = Br(n.figure);
|
|
3045
3141
|
if (!e || e === r) return;
|
|
3046
|
-
let a = Q.timed("Building", n.figure, () =>
|
|
3047
|
-
a && (
|
|
3142
|
+
let a = Q.timed("Building", n.figure, () => Rn(n.figure, t, e));
|
|
3143
|
+
a && ($n(n), Wt(a, n.step, !0), n = a, r = e, i = null);
|
|
3048
3144
|
}, u = () => {
|
|
3049
3145
|
l();
|
|
3050
3146
|
let e = n.plot.clientWidth;
|
|
3051
|
-
e && e !== i && Q.timed("Layout", n.figure, () =>
|
|
3147
|
+
e && e !== i && Q.timed("Layout", n.figure, () => Xn(n, t)) && (a || (a = !0, or(n.figure), cr(n.figure), dr(n.figure)), i = e, c());
|
|
3052
3148
|
}, d = !1, f = new ResizeObserver(() => {
|
|
3053
3149
|
u(), f.unobserve(n.figure), requestAnimationFrame(() => d || f.observe(n.figure));
|
|
3054
3150
|
}), p = new IntersectionObserver((e) => {
|
|
3055
3151
|
for (let t of e) o = t.isIntersecting, c();
|
|
3056
3152
|
}, { threshold: t.threshold }), m = () => {
|
|
3057
|
-
n.figure.classList.add(x),
|
|
3153
|
+
n.figure.classList.add(x), er(n, !0), ir(n.svg), n.figure.offsetWidth;
|
|
3058
3154
|
}, h = () => n.figure.classList.remove(x), g = () => {
|
|
3059
3155
|
i = null, u();
|
|
3060
3156
|
}, _ = {
|
|
3061
|
-
relabel: () =>
|
|
3157
|
+
relabel: () => Zn(n, t),
|
|
3062
3158
|
refresh: g
|
|
3063
3159
|
};
|
|
3064
|
-
l(), u(), f.observe(n.figure), p.observe(n.figure), window.addEventListener("beforeprint", m), window.addEventListener("afterprint", h),
|
|
3160
|
+
l(), u(), f.observe(n.figure), p.observe(n.figure), window.addEventListener("beforeprint", m), window.addEventListener("afterprint", h), Lr(_);
|
|
3065
3161
|
let v = {
|
|
3066
3162
|
figure: n.figure,
|
|
3067
3163
|
refresh: g,
|
|
3068
|
-
next: () =>
|
|
3069
|
-
previous: () =>
|
|
3070
|
-
stepTo: (e) =>
|
|
3164
|
+
next: () => Wt(n, n.step + 1),
|
|
3165
|
+
previous: () => Wt(n, n.step - 1),
|
|
3166
|
+
stepTo: (e) => Wt(n, e),
|
|
3071
3167
|
get step() {
|
|
3072
3168
|
return n.step;
|
|
3073
3169
|
},
|
|
@@ -3075,41 +3171,52 @@ var Xe = (e) => {
|
|
|
3075
3171
|
return n.plan?.count ?? 0;
|
|
3076
3172
|
},
|
|
3077
3173
|
destroy() {
|
|
3078
|
-
d = !0, f.disconnect(), p.disconnect(), window.removeEventListener("beforeprint", m), window.removeEventListener("afterprint", h),
|
|
3174
|
+
d = !0, f.disconnect(), p.disconnect(), window.removeEventListener("beforeprint", m), window.removeEventListener("afterprint", h), Rr(_), vn(n), n.figure.tablechart === v && delete n.figure.tablechart;
|
|
3079
3175
|
}
|
|
3080
3176
|
};
|
|
3081
3177
|
return n.figure.tablechart = v, v;
|
|
3082
|
-
},
|
|
3178
|
+
}, Hr = !1, Ur = (t) => {
|
|
3083
3179
|
let n = t.find((e) => e.tagName !== "FIGURE");
|
|
3084
|
-
!
|
|
3085
|
-
},
|
|
3086
|
-
let n =
|
|
3087
|
-
|
|
3180
|
+
!Hr && n && (Hr = !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));
|
|
3181
|
+
}, Wr = async (e, t) => {
|
|
3182
|
+
let n = xr(e.filter((e) => !e.hasAttribute(Or) && e.tagName !== "TH"));
|
|
3183
|
+
Ur(n), await wr(n), Dr(n), ht(n, t.langattribute);
|
|
3088
3184
|
for (let e of n) e.dispatchEvent(new CustomEvent("tablechart:table", { bubbles: !0 }));
|
|
3089
3185
|
return n;
|
|
3090
|
-
},
|
|
3091
|
-
let n = Q.timed("Building", e, () =>
|
|
3092
|
-
return n ? (e.setAttribute(
|
|
3093
|
-
},
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
|
|
3186
|
+
}, Gr = (e, t) => {
|
|
3187
|
+
let n = Q.timed("Building", e, () => Rn(e, t));
|
|
3188
|
+
return n ? (e.setAttribute(Or, ""), Jr(), Vr(n, t)) : null;
|
|
3189
|
+
}, Kr = !1, qr = /* @__PURE__ */ new WeakMap(), Jr = () => {
|
|
3190
|
+
if (Kr || typeof matchMedia != "function") return;
|
|
3191
|
+
Kr = !0;
|
|
3192
|
+
let e = () => {
|
|
3193
|
+
for (let e of document.querySelectorAll(`[${Or}]`)) {
|
|
3194
|
+
let t = getComputedStyle(e).color, n = Mt(e) || qr.get(e) !== t;
|
|
3195
|
+
qr.set(e, t), n && (Rt(e), zt(e));
|
|
3196
|
+
}
|
|
3197
|
+
};
|
|
3198
|
+
matchMedia("(prefers-color-scheme: dark)").addEventListener("change", e);
|
|
3199
|
+
let t = new MutationObserver(e);
|
|
3200
|
+
for (let e of [document.documentElement, document.body]) t.observe(e, { attributes: !0 });
|
|
3201
|
+
document.addEventListener("transitionend", (t) => {
|
|
3202
|
+
(t.target === document.documentElement || t.target === document.body) && e();
|
|
3203
|
+
});
|
|
3204
|
+
}, Yr = async (e, t = {}) => {
|
|
3098
3205
|
if (e.tablechart) return e.tablechart;
|
|
3099
3206
|
let n = {
|
|
3100
3207
|
...k,
|
|
3101
3208
|
...t
|
|
3102
3209
|
};
|
|
3103
3210
|
n.debug && (Q.enabled = !0);
|
|
3104
|
-
let [r] = await
|
|
3105
|
-
return r ?
|
|
3106
|
-
},
|
|
3211
|
+
let [r] = await Wr([e], n);
|
|
3212
|
+
return r ? Gr(r, n) : null;
|
|
3213
|
+
}, Xr = async (e = {}, t = document) => {
|
|
3107
3214
|
let n = {
|
|
3108
3215
|
...k,
|
|
3109
3216
|
...e
|
|
3110
3217
|
};
|
|
3111
3218
|
n.debug && (Q.enabled = !0);
|
|
3112
|
-
let r = (await
|
|
3219
|
+
let r = (await Wr(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => Gr(e, n)).filter((e) => e !== null);
|
|
3113
3220
|
return Q.log(`Made ${r.length} chart(s).`), {
|
|
3114
3221
|
charts: r,
|
|
3115
3222
|
refresh: () => {
|
|
@@ -3120,4 +3227,4 @@ var Xe = (e) => {
|
|
|
3120
3227
|
}
|
|
3121
3228
|
};
|
|
3122
3229
|
};
|
|
3123
|
-
export { L as A, t as B,
|
|
3230
|
+
export { L as A, t as B, J as C, ie as D, de 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, W as O, S as P, f as R, Ke as S, pe as T, s as U, m as V, w as W, ht as _, xr as a, $e as b, or as c, Rn as d, Xn as f, Wt as g, $n as h, Wr as i, R as j, ae as k, cr as l, er as m, jr as n, wr as o, Zn as p, k as q, Xr as r, Dr as s, Yr as t, bn as u, mt as v, q as w, et as x, dt as y, v as z };
|