@martinomagnifico/tablechart 1.0.2 → 1.0.3
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 +20 -0
- package/README.md +66 -39
- package/dist/tablechart-core.d.ts +3 -4
- package/dist/tablechart-shared.mjs +305 -251
- package/dist/tablechart.css +1 -1
- package/dist/tablechart.d.ts +0 -2
- package/dist/tablechart.js +1 -1
- package/package.json +1 -1
|
@@ -8,7 +8,6 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
8
8
|
entrance: .5,
|
|
9
9
|
labels: "outside",
|
|
10
10
|
shape: "straight",
|
|
11
|
-
closing: "down",
|
|
12
11
|
legend: !1,
|
|
13
12
|
hover: !0,
|
|
14
13
|
totallabel: "Total",
|
|
@@ -50,7 +49,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
50
49
|
let s = I("g", { mask: `url(#${i})` });
|
|
51
50
|
for (let t of Array.from(e.childNodes)) t !== o && s.appendChild(t);
|
|
52
51
|
e.appendChild(s);
|
|
53
|
-
},
|
|
52
|
+
}, V = 0, H = (e) => Array.from(e.querySelectorAll(`.${i}`)).map((e) => {
|
|
54
53
|
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")));
|
|
55
54
|
return {
|
|
56
55
|
row: Number(e.dataset.row),
|
|
@@ -60,7 +59,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
60
59
|
height: o - i,
|
|
61
60
|
sideways: e.dataset.grow === "right"
|
|
62
61
|
};
|
|
63
|
-
}),
|
|
62
|
+
}), te = {
|
|
64
63
|
create: () => null,
|
|
65
64
|
draw(e, t, n) {
|
|
66
65
|
let { rows: r, y: i, svg: a, breakAt: o } = n;
|
|
@@ -87,7 +86,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
87
86
|
[c + 2 * l, t + o],
|
|
88
87
|
[c + i, t - o]
|
|
89
88
|
];
|
|
90
|
-
}, l = (e, t = !1) => e.map(([e, t], n) => `${n === 0 ? "M" : "L"} ${e.toFixed(1)} ${t.toFixed(1)}`).join(" ") + (t ? " Z" : ""), u = `tablechart-break-${++
|
|
89
|
+
}, l = (e, t = !1) => e.map(([e, t], n) => `${n === 0 ? "M" : "L"} ${e.toFixed(1)} ${t.toFixed(1)}`).join(" ") + (t ? " Z" : ""), u = `tablechart-break-${++V}`, d = I("mask", {
|
|
91
90
|
id: u,
|
|
92
91
|
maskUnits: "userSpaceOnUse"
|
|
93
92
|
});
|
|
@@ -99,7 +98,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
99
98
|
fill: "white"
|
|
100
99
|
}));
|
|
101
100
|
let f = [], p = i(o);
|
|
102
|
-
for (let e of
|
|
101
|
+
for (let e of H(a)) {
|
|
103
102
|
let t = e.sideways ? n.breakX : p;
|
|
104
103
|
if (t === void 0 || !(e.sideways ? e.x < t && e.x + e.width > t : e.y < p && e.y + e.height > p)) continue;
|
|
105
104
|
let [i, o] = e.sideways ? [c(e, t), c(e, t + n.breakGap)] : [c(e, p - n.breakGap), c(e, p)];
|
|
@@ -122,11 +121,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
122
121
|
let g = I("defs");
|
|
123
122
|
g.appendChild(d), a.prepend(g, h);
|
|
124
123
|
}
|
|
125
|
-
},
|
|
124
|
+
}, U = (e) => {
|
|
126
125
|
let t = -Infinity;
|
|
127
126
|
for (let n of e) t = Math.max(t, n);
|
|
128
127
|
return t;
|
|
129
|
-
},
|
|
128
|
+
}, ne = (e) => (e.split(/[.,]/)[1] || "").length, W = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
|
|
130
129
|
minimumFractionDigits: e,
|
|
131
130
|
maximumFractionDigits: e
|
|
132
131
|
}), G = (e, t, n) => {
|
|
@@ -141,7 +140,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
141
140
|
t && n.setAttribute("data-i18n", t);
|
|
142
141
|
}
|
|
143
142
|
return t.appendChild(n), n;
|
|
144
|
-
},
|
|
143
|
+
}, re = (t, n, r, i) => {
|
|
145
144
|
let a = K(t?.textContent || ""), o = Number.isNaN(a) ? !0 : Math.abs(n - a) <= .5, s = {
|
|
146
145
|
label: r,
|
|
147
146
|
computed: n,
|
|
@@ -149,16 +148,16 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
149
148
|
agrees: o
|
|
150
149
|
};
|
|
151
150
|
i.checks.push(s), o || console.warn(`[${e}] An annotation reads ${a}%, but ${r} is ${n.toFixed(1)}%. The chart shows what you wrote; this is only a check.`);
|
|
152
|
-
},
|
|
151
|
+
}, ie = (e, t) => (t - e) / Math.abs(e) * 100, ae = (e, t) => {
|
|
153
152
|
let n = (t, n) => {
|
|
154
153
|
let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
|
|
155
154
|
return Number.isFinite(r) ? r - 1 : n;
|
|
156
155
|
};
|
|
157
156
|
return [n("data-from", 0), n("data-to", t - 1)];
|
|
158
|
-
},
|
|
157
|
+
}, J = {
|
|
159
158
|
create: q,
|
|
160
159
|
draw(t, n, r) {
|
|
161
|
-
let { rows: i, cx: a, y: o, unit: s, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] =
|
|
160
|
+
let { rows: i, cx: a, y: o, unit: s, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = ae(t, i.length), _ = i[h], v = i[g];
|
|
162
161
|
if (!_ || !v) {
|
|
163
162
|
console.warn(`[${e}] A bracket points at a row that is not there (row ${h + 1} to ${g + 1}, of ${i.length}).`);
|
|
164
163
|
return;
|
|
@@ -176,7 +175,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
176
175
|
"data-note": r.note,
|
|
177
176
|
points: `${S},${D} ${S - y * .45},${D - y} ${S + y * .45},${D - y}`,
|
|
178
177
|
style: N("--after", m)
|
|
179
|
-
})), n && (z(n, (x + S) / 2, C, j, f), n.style.setProperty("--after", String(m))),
|
|
178
|
+
})), n && (z(n, (x + S) / 2, C, j, f), n.style.setProperty("--after", String(m))), re(n, ie(_.value, v.value), `${_.value} to ${v.value}`, r);
|
|
180
179
|
}
|
|
181
180
|
}, oe = /* @__PURE__ */ new WeakMap(), se = (e) => {
|
|
182
181
|
let t = [...e].filter((e) => !!e), n = t.map((e) => ({
|
|
@@ -231,7 +230,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
231
230
|
style: N("--after", p)
|
|
232
231
|
})), t && (z(t, y + (x - y) * k, b + (S - b) * k, j, u), t.style.setProperty("--after", String(p)));
|
|
233
232
|
let B = Number.parseFloat(e.getAttribute("data-years") || "");
|
|
234
|
-
!Number.isNaN(B) && B > 0 &&
|
|
233
|
+
!Number.isNaN(B) && B > 0 && re(t, ce(m.value, h.value, B), `${m.value} to ${h.value} over ${B} years`, n);
|
|
235
234
|
}
|
|
236
235
|
}, ue = (e, t, n, r, i) => {
|
|
237
236
|
if (!r) return e / t * n;
|
|
@@ -251,35 +250,63 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
251
250
|
...i && { "data-muted": "" },
|
|
252
251
|
style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${N("--i", t.slot)}`
|
|
253
252
|
};
|
|
254
|
-
}, pe = (e, t) => {
|
|
255
|
-
let
|
|
256
|
-
return Array.from({ length: t }, (t,
|
|
257
|
-
let
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
253
|
+
}, pe = (e, t, n = !1) => {
|
|
254
|
+
let r = 0, i = 0;
|
|
255
|
+
return Array.from({ length: t }, (t, a) => {
|
|
256
|
+
let o = e.cells[a] ?? e.cells[0], s = o.missing ? 0 : o.value;
|
|
257
|
+
if (n) {
|
|
258
|
+
let e = r;
|
|
259
|
+
return r += s, {
|
|
260
|
+
from: e,
|
|
261
|
+
to: r,
|
|
262
|
+
cell: o
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
if (s < 0) {
|
|
266
|
+
let e = i;
|
|
267
|
+
return i += s, {
|
|
268
|
+
from: e,
|
|
269
|
+
to: i,
|
|
270
|
+
cell: o
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
let c = r;
|
|
274
|
+
return r += s, {
|
|
275
|
+
from: c,
|
|
276
|
+
to: r,
|
|
277
|
+
cell: o
|
|
262
278
|
};
|
|
263
279
|
});
|
|
264
|
-
},
|
|
280
|
+
}, X = (e, t, n = !1) => {
|
|
281
|
+
let r = pe(e, t, n);
|
|
282
|
+
return {
|
|
283
|
+
top: Math.max(0, ...r.map((e) => e.to)),
|
|
284
|
+
bottom: Math.min(0, ...r.map((e) => e.to))
|
|
285
|
+
};
|
|
286
|
+
}, me = (e, t) => {
|
|
287
|
+
let { top: n, bottom: r } = X(e, t);
|
|
288
|
+
return n + r;
|
|
289
|
+
}, he = (e, t, n) => {
|
|
265
290
|
let r = t.series.some((e) => e.focus);
|
|
266
291
|
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})`);
|
|
267
|
-
}, ge = (e, t, n, r = {}) => {
|
|
268
|
-
let
|
|
292
|
+
}, ge = (e, t, n, r = {}, o = "") => {
|
|
293
|
+
let s = {
|
|
269
294
|
class: L(i, t),
|
|
270
295
|
"data-kind": "bar",
|
|
271
296
|
"data-row": n + 1,
|
|
272
|
-
...r
|
|
297
|
+
...r
|
|
298
|
+
}, c = N("--i", t.slot) + (o ? `; transform-origin: ${o}` : ""), l = I("g", {
|
|
299
|
+
...s,
|
|
273
300
|
"data-stack": "",
|
|
274
|
-
style:
|
|
301
|
+
style: c
|
|
275
302
|
});
|
|
276
|
-
return e.svg.appendChild(
|
|
277
|
-
let
|
|
278
|
-
|
|
303
|
+
return e.svg.appendChild(l), (i, o) => {
|
|
304
|
+
let s = r["data-grow"] === void 0 ? {} : { "data-grow": r["data-grow"] };
|
|
305
|
+
l.appendChild(I("rect", {
|
|
279
306
|
...s,
|
|
307
|
+
...o,
|
|
280
308
|
class: L(a, t),
|
|
281
309
|
"data-row": n + 1,
|
|
282
|
-
...c,
|
|
283
310
|
...fe(e, t, i)
|
|
284
311
|
}));
|
|
285
312
|
};
|
|
@@ -315,38 +342,45 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
315
342
|
categories: "beside",
|
|
316
343
|
headroom: () => 0,
|
|
317
344
|
draw(e) {
|
|
318
|
-
let { segments: t, height: n, unit: r, svg: a, values: s, categories: c, config: l, barMax: u } = e, d = e.series.length > 1, f = Math.max(
|
|
319
|
-
|
|
320
|
-
|
|
345
|
+
let { segments: t, height: n, unit: r, svg: a, values: s, categories: c, config: l, barMax: u } = e, d = e.series.length > 1, f = Math.max(U(c.map((e) => Y(e).width * r)), 0), p = Math.min(f + 10 * r, j * .42), m = j - 4 * r, h = e.stacked ? Math.max(U(e.rows.map((t) => X(t, e.series.length).top)), 0) || 1 : Math.max(U(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = e.stacked ? Math.max(U(e.rows.map((t) => -X(t, e.series.length).bottom)), 0) : Math.max(U(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => -e.value))), 0), _ = Math.max(h, e.squeeze?.hi ?? 0) + g, v = (t, n) => ue(Math.abs(t), _, n, e.squeeze, e.breakGap), y = n / t.length, b = (e) => (e + .5) * y, x = Math.min(y * l.barfill, u), S = de(y, e.series.length, u), C = s[0] ?? e.totals[0], w = C ? Y(C).height * r * .56 : 0, T = Math.max(((d && !e.stacked ? S.size : x) - w) / 2, 5 * r), E = (e) => Y(e).width * r, D = (e) => e.length ? U(e.map(E)) + T + 4 * r : 0, O = (t, n) => (e.rows[n].cells[t] ?? e.rows[n].cells[0]).value, k = e.seriesValues.flatMap((e, t) => e.map((e, n) => ({
|
|
346
|
+
label: e,
|
|
347
|
+
value: O(t, n)
|
|
348
|
+
}))), A = (t) => {
|
|
349
|
+
let n = X(e.rows[t], e.series.length);
|
|
350
|
+
return n.top === 0 && n.bottom < 0;
|
|
351
|
+
}, M = e.stacked ? D(e.totals.filter((e, t) => !A(t))) : d ? D(k.filter((e) => e.value >= 0).map((e) => e.label)) : 0, P = e.stacked ? D(e.totals.filter((e, t) => A(t))) : d ? D(k.filter((e) => e.value < 0).map((e) => e.label)) : 0;
|
|
352
|
+
if (!d && !e.stacked) for (let e = 0; e < 3; e++) {
|
|
353
|
+
let e = m - p - M - P, n = t.map((e, t) => ({
|
|
321
354
|
seg: e,
|
|
322
355
|
label: s[t]
|
|
323
|
-
})).filter(({ seg: t, label: n }) => !be(n,
|
|
324
|
-
if (
|
|
325
|
-
|
|
356
|
+
})).filter(({ seg: t, label: n }) => !be(n, v(t.value, e), r)), i = D(n.filter(({ seg: e }) => e.value >= 0).map(({ label: e }) => e)), a = D(n.filter(({ seg: e }) => e.value < 0).map(({ label: e }) => e));
|
|
357
|
+
if (i <= M && a <= P) break;
|
|
358
|
+
M = Math.max(M, i), P = Math.max(P, a);
|
|
326
359
|
}
|
|
327
|
-
let
|
|
328
|
-
if (e.squeeze && (e.breakX =
|
|
360
|
+
let F = m - p - M - P, R = p + P + v(g, F), B = (e) => e < 0 ? R - v(e, F) : R + v(e, F);
|
|
361
|
+
if (e.squeeze && (e.breakX = B(e.squeeze.gap)), e.stacked) {
|
|
329
362
|
e.rows.forEach((t, i) => {
|
|
330
|
-
let a = ge(e, t, i, { "data-grow": "right" }
|
|
331
|
-
|
|
363
|
+
let a = X(t, e.series.length), o = ge(e, t, i, { "data-grow": "right" }, a.bottom < 0 ? `${R - B(a.bottom)}px center` : ""), s = b(i) - x / 2;
|
|
364
|
+
pe(t, e.series.length).forEach(({ from: t, to: a, cell: c }, l) => {
|
|
332
365
|
let u = e.seriesValues[l][i];
|
|
333
|
-
if (u.dataset.place = "none", c.missing ||
|
|
334
|
-
let d =
|
|
335
|
-
|
|
366
|
+
if (u.dataset.place = "none", c.missing || a === t) return;
|
|
367
|
+
let d = Math.min(B(t), B(a)), f = Math.max(B(t), B(a));
|
|
368
|
+
o(l, {
|
|
336
369
|
x: d,
|
|
337
|
-
y:
|
|
370
|
+
y: s,
|
|
338
371
|
width: Math.max(f - d, 1),
|
|
339
|
-
height:
|
|
340
|
-
|
|
372
|
+
height: x,
|
|
373
|
+
...a < t && { "data-grow": "left" }
|
|
374
|
+
}), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !be(u, f - d, r) || Y(u).height * r > x), he(u, e, l), z(u, (d + f) / 2, b(i), j, n);
|
|
341
375
|
});
|
|
342
376
|
let l = e.totals[i];
|
|
343
|
-
l && (l.dataset.place = "after", z(l,
|
|
377
|
+
l && (l.dataset.place = A(i) ? "before" : "after", z(l, A(i) ? B(a.bottom) - T : B(a.top) + T, b(i), j, n));
|
|
344
378
|
let u = c[i];
|
|
345
|
-
u && z(u, p - 8 * r,
|
|
379
|
+
u && z(u, p - 8 * r, b(i), j, n);
|
|
346
380
|
}), a.appendChild(I("line", {
|
|
347
381
|
class: o,
|
|
348
|
-
x1:
|
|
349
|
-
x2:
|
|
382
|
+
x1: R,
|
|
383
|
+
x2: R,
|
|
350
384
|
y1: 0,
|
|
351
385
|
y2: n
|
|
352
386
|
}));
|
|
@@ -356,7 +390,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
356
390
|
e.plot.dataset.grouped = "";
|
|
357
391
|
let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = xe(e.plot, t, (e) => ({
|
|
358
392
|
size: Y(e).height * r,
|
|
359
|
-
room:
|
|
393
|
+
room: S.size + S.gap * .5
|
|
360
394
|
}), "--tablechart-fit");
|
|
361
395
|
e.rows.forEach((t, o) => {
|
|
362
396
|
e.series.forEach((r, c) => {
|
|
@@ -365,52 +399,52 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
365
399
|
u.dataset.place = "none";
|
|
366
400
|
return;
|
|
367
401
|
}
|
|
368
|
-
let d =
|
|
402
|
+
let d = B(l.value), f = l.value < 0, p = b(o) + S.offset(c);
|
|
369
403
|
a.appendChild(I("rect", {
|
|
370
404
|
class: L(i, t),
|
|
371
405
|
"data-kind": "bar",
|
|
372
406
|
"data-row": o + 1,
|
|
373
|
-
"data-grow": "right",
|
|
374
|
-
x:
|
|
375
|
-
y:
|
|
376
|
-
width: Math.max(d -
|
|
377
|
-
height:
|
|
407
|
+
"data-grow": f ? "left" : "right",
|
|
408
|
+
x: Math.min(d, R),
|
|
409
|
+
y: p,
|
|
410
|
+
width: Math.max(Math.abs(d - R), 1),
|
|
411
|
+
height: S.size,
|
|
378
412
|
...fe(e, t, c)
|
|
379
|
-
})), u.dataset.place = "after", u.toggleAttribute("data-left-out", !s), z(u, d +
|
|
413
|
+
})), u.dataset.place = f ? "before" : "after", u.toggleAttribute("data-left-out", !s), z(u, f ? d - T : d + T, p + S.size / 2, j, n);
|
|
380
414
|
});
|
|
381
415
|
let l = c[o];
|
|
382
|
-
l && z(l, p - 8 * r,
|
|
416
|
+
l && z(l, p - 8 * r, b(o), j, n);
|
|
383
417
|
}), a.appendChild(I("line", {
|
|
384
418
|
class: o,
|
|
385
|
-
x1:
|
|
386
|
-
x2:
|
|
419
|
+
x1: R,
|
|
420
|
+
x2: R,
|
|
387
421
|
y1: 0,
|
|
388
422
|
y2: n
|
|
389
423
|
}));
|
|
390
424
|
return;
|
|
391
425
|
}
|
|
392
|
-
let
|
|
426
|
+
let ee = t.map((e, t) => be(s[t], Math.abs(B(e.value) - R), r));
|
|
393
427
|
t.forEach((t, o) => {
|
|
394
|
-
let l =
|
|
428
|
+
let l = B(t.value), u = b(o), d = t.value < 0, f = Math.abs(l - R);
|
|
395
429
|
a.appendChild(I("rect", {
|
|
396
430
|
class: L(i, t),
|
|
397
431
|
"data-kind": t.kind,
|
|
398
432
|
"data-row": o + 1,
|
|
399
|
-
"data-grow": "right",
|
|
400
|
-
x:
|
|
401
|
-
y: u -
|
|
402
|
-
width: Math.max(
|
|
403
|
-
height:
|
|
433
|
+
"data-grow": d ? "left" : "right",
|
|
434
|
+
x: Math.min(l, R),
|
|
435
|
+
y: u - x / 2,
|
|
436
|
+
width: Math.max(f, 1),
|
|
437
|
+
height: x,
|
|
404
438
|
style: N("--i", t.slot)
|
|
405
439
|
}));
|
|
406
|
-
let
|
|
407
|
-
|
|
408
|
-
let
|
|
409
|
-
|
|
440
|
+
let m = s[o], h = Math.max(Math.min(T, f - E(m) - 6 * r), 6 * r), g = d ? 1 : -1;
|
|
441
|
+
m.dataset.place = ee[o] ? "inside" : d ? "before" : "after", m.dataset.kind = t.kind, z(m, ee[o] ? e.insideAlign === "center" ? (R + l) / 2 : e.insideAlign === "start" ? R - g * (h + E(m) / 2) : l + g * (h + E(m) / 2) : l - g * T, u, j, n);
|
|
442
|
+
let _ = c[o];
|
|
443
|
+
_ && z(_, p - 8 * r, u, j, n);
|
|
410
444
|
}), a.appendChild(I("line", {
|
|
411
445
|
class: o,
|
|
412
|
-
x1:
|
|
413
|
-
x2:
|
|
446
|
+
x1: R,
|
|
447
|
+
x2: R,
|
|
414
448
|
y1: 0,
|
|
415
449
|
y2: n
|
|
416
450
|
}));
|
|
@@ -432,20 +466,24 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
432
466
|
let { segments: t, cx: n, y: r, barWidth: a, height: s, unit: c, svg: l, values: u, labels: d, insideAlign: f } = e, p = r(0);
|
|
433
467
|
if (e.stacked) {
|
|
434
468
|
e.rows.forEach((t, i) => {
|
|
435
|
-
let o = ge(e, t, i),
|
|
436
|
-
pe(t, e.series.length).forEach(({ from: t, to:
|
|
469
|
+
let o = X(t, e.series.length), l = ge(e, t, i, {}, o.bottom < 0 ? `center ${p - r(o.top)}px` : ""), u = n(i) - a / 2;
|
|
470
|
+
pe(t, e.series.length).forEach(({ from: t, to: o, cell: d }, f) => {
|
|
437
471
|
let p = e.seriesValues[f][i];
|
|
438
|
-
if (p.dataset.place = "none", d.missing ||
|
|
439
|
-
let m = r(
|
|
440
|
-
|
|
441
|
-
x:
|
|
472
|
+
if (p.dataset.place = "none", d.missing || o === t) return;
|
|
473
|
+
let m = Math.min(r(o), r(t)), h = Math.max(r(o), r(t));
|
|
474
|
+
l(f, {
|
|
475
|
+
x: u,
|
|
442
476
|
y: m,
|
|
443
477
|
width: a,
|
|
444
|
-
height: Math.max(h - m, 1)
|
|
478
|
+
height: Math.max(h - m, 1),
|
|
479
|
+
...o < t && { "data-grow": "down" }
|
|
445
480
|
}), p.dataset.place = "inside", p.toggleAttribute("data-left-out", !ye(p, h - m, c) || Y(p).width * c > a - 4 * c), he(p, e, f), z(p, n(i), (m + h) / 2, j, s);
|
|
446
481
|
});
|
|
447
|
-
let
|
|
448
|
-
|
|
482
|
+
let d = e.totals[i];
|
|
483
|
+
if (d) {
|
|
484
|
+
let e = o.top === 0 && o.bottom < 0;
|
|
485
|
+
d.dataset.place = e ? "below" : "outside", z(d, n(i), e ? r(o.bottom) + 4 * c : r(o.top) - 4 * c, j, s);
|
|
486
|
+
}
|
|
449
487
|
}), l.appendChild(I("line", {
|
|
450
488
|
class: o,
|
|
451
489
|
x1: 0,
|
|
@@ -469,17 +507,18 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
469
507
|
h.dataset.place = "none";
|
|
470
508
|
return;
|
|
471
509
|
}
|
|
472
|
-
let _ = r(m.value);
|
|
510
|
+
let _ = r(m.value), v = m.value < 0;
|
|
473
511
|
l.appendChild(I("rect", {
|
|
474
512
|
class: L(i, a),
|
|
475
513
|
"data-kind": "bar",
|
|
476
514
|
"data-row": o + 1,
|
|
515
|
+
...v && { "data-grow": "down" },
|
|
477
516
|
x: g,
|
|
478
|
-
y: _,
|
|
517
|
+
y: Math.min(_, p),
|
|
479
518
|
width: t.size,
|
|
480
|
-
height: Math.max(p - _, 1),
|
|
519
|
+
height: Math.max(Math.abs(p - _), 1),
|
|
481
520
|
...fe(e, a, f)
|
|
482
|
-
})), h.dataset.place = "outside", h.toggleAttribute("data-left-out", !u), z(h, g + t.size / 2, _ - 4 * c, j, s);
|
|
521
|
+
})), h.dataset.place = v ? "below" : "outside", h.toggleAttribute("data-left-out", !u), z(h, g + t.size / 2, v ? _ + 4 * c : _ - 4 * c, j, s);
|
|
483
522
|
});
|
|
484
523
|
}), l.appendChild(I("line", {
|
|
485
524
|
class: o,
|
|
@@ -490,10 +529,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
490
529
|
}));
|
|
491
530
|
return;
|
|
492
531
|
}
|
|
493
|
-
let m = ve(u, a, c), h = t.map((e, t) => d === "inside" && !m && !e.missing && ye(u[t], p - r(e.value), c)), g = u[0] ? Y(u[0]).height * c * .56 : 0, _ = Infinity;
|
|
532
|
+
let m = ve(u, a, c), h = t.map((e, t) => d === "inside" && !m && !e.missing && ye(u[t], Math.abs(p - r(e.value)), c)), g = u[0] ? Y(u[0]).height * c * .56 : 0, _ = Infinity;
|
|
494
533
|
for (let [e, t] of u.entries()) h[e] && (_ = Math.min(_, (a - Y(t).width * c) / 2));
|
|
495
534
|
t.forEach((e, t) => {
|
|
496
|
-
let o = r(e.value);
|
|
535
|
+
let o = r(e.value), d = e.value < 0;
|
|
497
536
|
if (e.missing) {
|
|
498
537
|
z(u[t], n(t), p - 4 * c, j, s), u[t].dataset.place = "outside";
|
|
499
538
|
return;
|
|
@@ -502,14 +541,15 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
502
541
|
class: L(i, e),
|
|
503
542
|
"data-kind": e.kind,
|
|
504
543
|
"data-row": t + 1,
|
|
544
|
+
...d && { "data-grow": "down" },
|
|
505
545
|
x: n(t) - a / 2,
|
|
506
|
-
y: o,
|
|
546
|
+
y: Math.min(o, p),
|
|
507
547
|
width: a,
|
|
508
|
-
height: Math.max(p - o, 1),
|
|
548
|
+
height: Math.max(Math.abs(p - o), 1),
|
|
509
549
|
style: N("--i", e.slot)
|
|
510
550
|
}));
|
|
511
|
-
let d = Math.min(_, (p - o - g) / 2),
|
|
512
|
-
z(u[t], n(t), h[t] ?
|
|
551
|
+
let m = d ? -1 : 1, v = Math.min(_, (Math.abs(p - o) - g) / 2), y = f === "center" ? (o + p) / 2 : f === "start" ? p - m * (v + g / 2) : o + m * (v + g / 2), b = d ? o + 4 * c : o - 4 * c;
|
|
552
|
+
z(u[t], n(t), h[t] ? y : b, j, s), u[t].dataset.place = h[t] ? "inside" : d ? "below" : "outside";
|
|
513
553
|
}), l.appendChild(I("line", {
|
|
514
554
|
class: o,
|
|
515
555
|
x1: 0,
|
|
@@ -624,7 +664,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
624
664
|
r,
|
|
625
665
|
...i
|
|
626
666
|
});
|
|
627
|
-
},
|
|
667
|
+
}, Z = (e) => Number(e.toFixed(2));
|
|
628
668
|
function je(e, t) {
|
|
629
669
|
let n = e.length;
|
|
630
670
|
if (n < 2) return e.map(() => 0);
|
|
@@ -647,7 +687,7 @@ function Me(e, t, n, r) {
|
|
|
647
687
|
return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
|
|
648
688
|
}
|
|
649
689
|
function Ne(e, t, n, r) {
|
|
650
|
-
let [i, a] = Me(e, t, n, r), o = ([e, t]) => `${
|
|
690
|
+
let [i, a] = Me(e, t, n, r), o = ([e, t]) => `${Z(e)},${Z(t)}`;
|
|
651
691
|
return `C${o(i)} ${o(a)} ${o(t)}`;
|
|
652
692
|
}
|
|
653
693
|
function Pe(e, t, n) {
|
|
@@ -670,13 +710,14 @@ var Fe = (e) => e.map((e) => ({
|
|
|
670
710
|
segments: Fe,
|
|
671
711
|
series: !0,
|
|
672
712
|
stackable: !0,
|
|
713
|
+
running: !0,
|
|
673
714
|
swatch: e ? "box" : void 0,
|
|
674
715
|
headroom: ({ labelHeight: e, unit: t }) => e * 1.6 + 6 * t,
|
|
675
716
|
footroom: ({ labelHeight: t, unit: n, series: r, focused: i, stacked: a }) => !e && !a && r === 2 && !i ? t + 7 * n : 0,
|
|
676
717
|
draw(t) {
|
|
677
718
|
let { rows: n, series: r, seriesValues: i, names: a, cx: s, y: c, height: l, unit: u, labelHeight: d, svg: f, stacked: p } = t, _ = t.shape === "step", v = t.shape === "smooth", x = r.length > 1, S = r.some((e) => e.focus), C = n.length - 1, w = c(0), T = n.length > 1 ? s(1) - s(0) : s(0) * 2;
|
|
678
|
-
f.style.setProperty("--tablechart-base", `${
|
|
679
|
-
let E = (e) => `--rise:${
|
|
719
|
+
f.style.setProperty("--tablechart-base", `${Z(w)}px`);
|
|
720
|
+
let E = (e) => `--rise:${Z(w - e)}px; `, D = (e, t) => n[t]?.cells[e] ?? n[t]?.cells[0], O = (e, t) => !D(e, t) || !!D(e, t)?.missing, k = n.map((e) => p ? pe(e, r.length, !0) : null), A = (e, t) => k[t]?.[e].to ?? D(e, t)?.value ?? 0, M = (e, t) => k[t]?.[e].from ?? 0, N = (e, t) => [s(t), c(A(e, t))], P = r.map((e, t) => {
|
|
680
721
|
if (!x) return {
|
|
681
722
|
attrs: {},
|
|
682
723
|
ink: ""
|
|
@@ -689,62 +730,62 @@ var Fe = (e) => e.map((e) => ({
|
|
|
689
730
|
},
|
|
690
731
|
ink: `--n:${t}; --m:${+!!n}; --palette:var(--tablechart-color-${t + 1}); `
|
|
691
732
|
};
|
|
692
|
-
}), F = Math.min(C, 6), L = C > 0 ? F / (_ ? n.length : C) : 1, R = (e) => e * L, B = (e) => `--i:${
|
|
733
|
+
}), F = Math.min(C, 6), L = C > 0 ? F / (_ ? n.length : C) : 1, R = (e) => e * L, B = (e) => `--i:${Z(R(e))}`, V = (e) => {
|
|
693
734
|
let t = [], r = -1;
|
|
694
735
|
return n.forEach((n, i) => {
|
|
695
736
|
O(e, i) || (r < 0 && (r = i), (i === C || O(e, i + 1)) && ((_ || i > r) && t.push([r, i]), r = -1));
|
|
696
737
|
}), t;
|
|
697
|
-
},
|
|
738
|
+
}, H = (e, t) => `--i:${Z(R(e) + 1)}; --d:${Z(R(_ ? t + 1 : t) - R(e))}`, te = (e, t) => ({
|
|
698
739
|
"data-from": e + 1,
|
|
699
740
|
"data-to": t + 1,
|
|
700
741
|
..._ && { "data-flat": "" }
|
|
701
|
-
}),
|
|
742
|
+
}), U = v ? r.map((e, t) => Pe(n.length, (e) => O(t, e), (e) => N(t, e))) : [], ne = v && e ? r.map((e, t) => Pe(n.length, (e) => O(t, e), (e) => [s(e), c(M(t, e))])) : [], W = (e, t, n) => {
|
|
702
743
|
let r = [];
|
|
703
744
|
return e.forEach(([i, a], o) => {
|
|
704
|
-
_ ? (r.push(`H${
|
|
745
|
+
_ ? (r.push(`H${Z(i + n * T / 2)}`), o < e.length - 1 && r.push(`V${Z(e[o + 1][1])}`)) : o > 0 && r.push(t ? Ne(e[o - 1], [i, a], t[o - 1], t[o]) : `L${Z(i)},${Z(a)}`);
|
|
705
746
|
}), r;
|
|
706
|
-
}, G = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [s(t + r), c(i(e, t + r))]), K = (e, t, n, r) => v ? e[t].slice(n, r + 1) : null, q = (e) => s(e) - (_ ? T / 2 : 0),
|
|
747
|
+
}, G = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [s(t + r), c(i(e, t + r))]), K = (e, t, n, r) => v ? e[t].slice(n, r + 1) : null, q = (e) => s(e) - (_ ? T / 2 : 0), re = (e) => s(e) + (_ ? T / 2 : 0), ie = (e) => {
|
|
707
748
|
let t = I("g", {
|
|
708
749
|
class: h,
|
|
709
750
|
...P[e].attrs,
|
|
710
751
|
...p && { "data-stacked": "" },
|
|
711
752
|
style: P[e].ink
|
|
712
|
-
}), n =
|
|
753
|
+
}), n = V(e), r = I("g", {
|
|
713
754
|
class: g,
|
|
714
|
-
style: `--rows:${
|
|
755
|
+
style: `--rows:${Z(F + 1)}; ${n.length ? H(...n[0]) : ""}`
|
|
715
756
|
});
|
|
716
757
|
t.appendChild(r);
|
|
717
758
|
for (let [t, i] of n) {
|
|
718
|
-
let n = G(e, t, i, A), a = G(e, t, i, M), o = K(
|
|
719
|
-
`M${
|
|
720
|
-
`L${
|
|
721
|
-
...W(n, K(
|
|
722
|
-
`L${
|
|
759
|
+
let n = G(e, t, i, A), a = G(e, t, i, M), o = K(ne, e, t, i)?.reverse() ?? null, s = [
|
|
760
|
+
`M${Z(q(t))},${Z(a[0][1])}`,
|
|
761
|
+
`L${Z(q(t))},${Z(n[0][1])}`,
|
|
762
|
+
...W(n, K(U, e, t, i), 1),
|
|
763
|
+
`L${Z(re(i))},${Z(a[a.length - 1][1])}`,
|
|
723
764
|
...W(a.reverse(), o, -1),
|
|
724
765
|
"Z"
|
|
725
766
|
].join(" ");
|
|
726
767
|
r.appendChild(I("path", {
|
|
727
768
|
d: s,
|
|
728
|
-
...
|
|
729
|
-
style:
|
|
769
|
+
...te(t, i),
|
|
770
|
+
style: H(t, i)
|
|
730
771
|
}));
|
|
731
772
|
}
|
|
732
773
|
f.appendChild(t);
|
|
733
|
-
},
|
|
774
|
+
}, ae = (e) => {
|
|
734
775
|
let t = r[e];
|
|
735
|
-
for (let [n, r] of
|
|
736
|
-
let i = G(e, n, r, A), a = [`M${
|
|
776
|
+
for (let [n, r] of V(e)) {
|
|
777
|
+
let i = G(e, n, r, A), a = [`M${Z(q(n))},${Z(i[0][1])}`, ...W(i, K(U, e, n, r), 1)].join(" ");
|
|
737
778
|
f.appendChild(I("path", {
|
|
738
779
|
class: m,
|
|
739
780
|
...P[e].attrs,
|
|
740
781
|
d: a,
|
|
741
782
|
...t.line && { "data-line": t.line },
|
|
742
|
-
...
|
|
743
|
-
style: `${P[e].ink}${
|
|
783
|
+
...te(n, r),
|
|
784
|
+
style: `${P[e].ink}${H(n, r)}`
|
|
744
785
|
}));
|
|
745
786
|
}
|
|
746
787
|
};
|
|
747
|
-
e && r.forEach((e, t) =>
|
|
788
|
+
e && r.forEach((e, t) => ie(t)), r.forEach((e, t) => ae(t)), _ || (() => {
|
|
748
789
|
let e = r.map((e, t) => x ? ke(r, t) : {
|
|
749
790
|
shape: "circle",
|
|
750
791
|
open: !1
|
|
@@ -770,7 +811,7 @@ var Fe = (e) => e.map((e) => ({
|
|
|
770
811
|
}));
|
|
771
812
|
});
|
|
772
813
|
})();
|
|
773
|
-
let
|
|
814
|
+
let J = (e, t) => {
|
|
774
815
|
let n = t;
|
|
775
816
|
for (; n < C && !O(e, n + 1) && D(e, n + 1)?.value === D(e, t)?.value;) n++;
|
|
776
817
|
return n;
|
|
@@ -778,17 +819,18 @@ var Fe = (e) => e.map((e) => ({
|
|
|
778
819
|
let i = D(t, n);
|
|
779
820
|
if (!i || i.missing || _ && n > 0 && !O(t, n - 1) && D(t, n - 1)?.value === i.value || S && !r[t].focus) return "none";
|
|
780
821
|
if (p) return "middle";
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
822
|
+
let a = i.value < 0 ? "below" : "above";
|
|
823
|
+
if (!x || S || r.length > 2) return a;
|
|
824
|
+
let o = D(1 - t, n);
|
|
825
|
+
return !o || o.missing ? a : i.value > o.value || i.value === o.value && t === 0 || e && i.value >= 0 && N(t, n)[1] + 7 * u + d > w ? "above" : "below";
|
|
826
|
+
}, se = (e, t) => !p && !_ ? x && !S && r.length > 2 : Y(i[e][t]).width * u > (_ ? J(e, t) - t + 1 : 1) * T - 4 * u || p && e > 0 && A(e, t) < M(e, t) ? !0 : p && Math.abs(c(M(e, t)) - c(A(e, t))) < d * 1.2;
|
|
785
827
|
i.forEach((e, t) => {
|
|
786
828
|
e.forEach((e, n) => {
|
|
787
|
-
e.style.setProperty("--i", String(
|
|
829
|
+
e.style.setProperty("--i", String(Z(_ ? (R(n) + R(n + 1)) / 2 : R(n))));
|
|
788
830
|
let r = oe(t, n);
|
|
789
|
-
if (e.dataset.place = r === "above" ? "outside" : r, e.toggleAttribute("data-left-out", r !== "none" && se(t, n)), _ && r !== "none" ? e.dataset.rowEnd = String(
|
|
831
|
+
if (e.dataset.place = r === "above" ? "outside" : r, e.toggleAttribute("data-left-out", r !== "none" && se(t, n)), _ && r !== "none" ? e.dataset.rowEnd = String(J(t, n) + 1) : delete e.dataset.rowEnd, r === "none") return;
|
|
790
832
|
let i = Y(e).width * u / 2 + 4 * u, a = s(n);
|
|
791
|
-
_ ? a = (s(n) + s(
|
|
833
|
+
_ ? a = (s(n) + s(J(t, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === C && (a -= i);
|
|
792
834
|
let o = c(A(t, n)), d = {
|
|
793
835
|
middle: (c(M(t, n)) - o) / 2,
|
|
794
836
|
above: -7 * u,
|
|
@@ -808,13 +850,13 @@ var Fe = (e) => e.map((e) => ({
|
|
|
808
850
|
};
|
|
809
851
|
}), le = (a[0] ? Y(a[0]).height : 0) * u;
|
|
810
852
|
for (let e of Se(ce, le)) z(e.name, e.x, e.y, j, l);
|
|
811
|
-
let ue = !e && !p && r.length === 2 && !S ? l - 2 * u : w;
|
|
853
|
+
let ue = n.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), de = !e && !p && r.length === 2 && !S && !ue ? l - 2 * u : w;
|
|
812
854
|
f.appendChild(I("line", {
|
|
813
855
|
class: o,
|
|
814
856
|
x1: 0,
|
|
815
857
|
x2: s(C) + s(0),
|
|
816
|
-
y1:
|
|
817
|
-
y2:
|
|
858
|
+
y1: de,
|
|
859
|
+
y2: de
|
|
818
860
|
}));
|
|
819
861
|
}
|
|
820
862
|
}), Le = Ie(!1), Re = Ie(!0), ze = /* @__PURE__ */ new Set(), Be = (t, n) => {
|
|
@@ -842,17 +884,17 @@ var Fe = (e) => e.map((e) => ({
|
|
|
842
884
|
},
|
|
843
885
|
breakable: !0,
|
|
844
886
|
headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
|
|
845
|
-
draw({ segments: e, cx: t, y: n, barWidth: r, height: a, unit: c, svg: l, values: u, breakAt: d,
|
|
846
|
-
let
|
|
847
|
-
let i = n(Math.max(t.from, t.to)), a = Math.abs(n(t.from) - n(t.to)), o = d !== null && Math.min(t.from, t.to) < d && Math.max(t.from, t.to) > d;
|
|
887
|
+
draw({ segments: e, cx: t, y: n, barWidth: r, height: a, unit: c, svg: l, values: u, breakAt: d, insideAlign: f }) {
|
|
888
|
+
let p = n(0), m = ve(u, r, c), h = f ?? "center", g = e.map((t, r) => {
|
|
889
|
+
let i = n(Math.max(t.from, t.to)), a = Math.abs(n(t.from) - n(t.to)), o = d !== null && Math.min(t.from, t.to) < d && Math.max(t.from, t.to) > d, s = t.kind === "total" && r > 0 && r === e.length - 1;
|
|
848
890
|
return {
|
|
849
891
|
top: i,
|
|
850
892
|
length: a,
|
|
851
|
-
down: t.kind === "down" || t.kind === "total" &&
|
|
852
|
-
inside: !o && !
|
|
893
|
+
down: t.kind === "down" || t.kind === "total" && (s ? t.to >= 0 : t.to < 0),
|
|
894
|
+
inside: !o && !m && ye(u[r], a, c)
|
|
853
895
|
};
|
|
854
|
-
}),
|
|
855
|
-
for (let [e, t] of
|
|
896
|
+
}), _ = u[0] ? Y(u[0]).height * c * .56 : 0, v = Infinity;
|
|
897
|
+
for (let [e, t] of g.entries()) t.inside && (v = Math.min(v, (r - Y(u[e]).width * c) / 2));
|
|
856
898
|
e.forEach((i, a) => {
|
|
857
899
|
let o = e[a + 1];
|
|
858
900
|
if (!o) return;
|
|
@@ -867,7 +909,7 @@ var Fe = (e) => e.map((e) => ({
|
|
|
867
909
|
style: N("--i", o.slot)
|
|
868
910
|
}));
|
|
869
911
|
}), e.forEach((e, n) => {
|
|
870
|
-
let { top: o, length: s, down: d, inside: f } =
|
|
912
|
+
let { top: o, length: s, down: d, inside: f } = g[n];
|
|
871
913
|
l.appendChild(I("rect", {
|
|
872
914
|
class: L(i, e),
|
|
873
915
|
"data-kind": e.kind,
|
|
@@ -879,7 +921,7 @@ var Fe = (e) => e.map((e) => ({
|
|
|
879
921
|
height: Math.max(s, 1),
|
|
880
922
|
style: N("--i", e.slot)
|
|
881
923
|
}));
|
|
882
|
-
let p = u[n], m = Math.min(
|
|
924
|
+
let p = u[n], m = Math.min(v, (s - _) / 2), y = o + m + _ / 2, b = o + s - m - _ / 2, x = h === "center" ? o + s / 2 : h === "end" === d ? b : y;
|
|
883
925
|
p.dataset.place = f ? "inside" : "outside", p.dataset.kind = e.kind;
|
|
884
926
|
let S = f ? x : e.kind === "down" ? o + s + Y(p).height * c + 3 * c : o - 3 * c;
|
|
885
927
|
z(p, t(n), S, j, a);
|
|
@@ -887,19 +929,19 @@ var Fe = (e) => e.map((e) => ({
|
|
|
887
929
|
class: o,
|
|
888
930
|
x1: 0,
|
|
889
931
|
x2: j,
|
|
890
|
-
y1:
|
|
891
|
-
y2:
|
|
932
|
+
y1: p,
|
|
933
|
+
y2: p
|
|
892
934
|
}));
|
|
893
935
|
}
|
|
894
|
-
},
|
|
936
|
+
}, Q = {
|
|
895
937
|
enabled: !1,
|
|
896
938
|
log(...t) {
|
|
897
|
-
|
|
939
|
+
Q.enabled && console.log(`[${e}]`, ...t);
|
|
898
940
|
},
|
|
899
941
|
timed(t, n, r) {
|
|
900
|
-
if (!
|
|
942
|
+
if (!Q.enabled) return r();
|
|
901
943
|
let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
|
|
902
|
-
return o > 50 ? console.warn(`[${e}] ${t} took ${o.toFixed(1)} ms for ${s} rows, more than 50 ms.`, n) :
|
|
944
|
+
return o > 50 ? console.warn(`[${e}] ${t} took ${o.toFixed(1)} ms for ${s} rows, more than 50 ms.`, n) : Q.log(`${t} took ${o.toFixed(1)} ms for ${s} rows.`, n), a;
|
|
903
945
|
}
|
|
904
946
|
}, He = (e) => {
|
|
905
947
|
let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
|
|
@@ -923,7 +965,7 @@ var Fe = (e) => e.map((e) => ({
|
|
|
923
965
|
slot: n
|
|
924
966
|
};
|
|
925
967
|
}), We = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), Ge = (e) => e === "dashed" || e === "dotted" ? e : null, Ke = (e, t, n = "data-i18n") => {
|
|
926
|
-
let r = We(e), i = Math.max(1,
|
|
968
|
+
let r = We(e), i = Math.max(1, U(t.map((e) => e.cells.length)));
|
|
927
969
|
return Array.from({ length: i }, (e, t) => {
|
|
928
970
|
let i = r[t];
|
|
929
971
|
return {
|
|
@@ -950,7 +992,7 @@ var Fe = (e) => e.map((e) => ({
|
|
|
950
992
|
let a = We(i);
|
|
951
993
|
a.length > 1 && a.forEach((e, r) => {
|
|
952
994
|
e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
|
|
953
|
-
}),
|
|
995
|
+
}), Q?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
|
|
954
996
|
}
|
|
955
997
|
}, Je = [
|
|
956
998
|
"axis-break",
|
|
@@ -1081,7 +1123,7 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1081
1123
|
n < 0 ? o(s, null, "--i", 0) : o(s, n, "--i", e.filter((e) => e === n).length);
|
|
1082
1124
|
}
|
|
1083
1125
|
Xe(e);
|
|
1084
|
-
},
|
|
1126
|
+
}, $ = (e, t, n = !1) => {
|
|
1085
1127
|
let r = e.plan;
|
|
1086
1128
|
if (!r) return;
|
|
1087
1129
|
let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
|
|
@@ -1131,9 +1173,9 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1131
1173
|
line: Le,
|
|
1132
1174
|
waterfall: Ve
|
|
1133
1175
|
}, et = {
|
|
1134
|
-
"axis-break":
|
|
1176
|
+
"axis-break": te,
|
|
1135
1177
|
trend: le,
|
|
1136
|
-
bracket:
|
|
1178
|
+
bracket: J
|
|
1137
1179
|
}, tt = Object.keys(et), nt = (e) => {
|
|
1138
1180
|
let t = "";
|
|
1139
1181
|
for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
|
|
@@ -1184,16 +1226,14 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1184
1226
|
d && i.style.setProperty("--tablechart-series-count", String(u.length));
|
|
1185
1227
|
let f = i.hasAttribute("data-chart-stack");
|
|
1186
1228
|
f && !c.stackable && console.warn(`[${e}] A ${s} chart cannot be stacked.`);
|
|
1187
|
-
let p = f && !!c.stackable && d;
|
|
1188
|
-
p && l.some((e) => e.cells.slice(0, u.length).some((e) => e.value < 0)) && console.warn(`[${e}] A stacked chart has a value below zero. It takes no room in the stack.`);
|
|
1189
|
-
let m = document.createElement("div");
|
|
1229
|
+
let p = f && !!c.stackable && d, m = document.createElement("div");
|
|
1190
1230
|
m.className = t, m.setAttribute("aria-hidden", "true");
|
|
1191
1231
|
let h = I("svg", {
|
|
1192
1232
|
role: "presentation",
|
|
1193
1233
|
focusable: "false"
|
|
1194
1234
|
});
|
|
1195
1235
|
m.appendChild(h), i.appendChild(m);
|
|
1196
|
-
let g = c.centre ? l.filter((e) => !e.isTotal) : l, y = Math.max(0,
|
|
1236
|
+
let g = c.centre ? l.filter((e) => !e.isTotal) : l, y = Math.max(0, U(g.flatMap((e) => e.cells.slice(0, u.length).map((e) => ne(e.number))))), b = u.map((e, t) => l.map((e, n) => {
|
|
1197
1237
|
let i = e.cells[t] ?? e.cells[0], a = R(r, m);
|
|
1198
1238
|
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)), a.dataset.row = String(n + 1), a.style.setProperty("--i", String(e.slot)), a;
|
|
1199
1239
|
})), S = b[0], C = p && c.totals ? l.map((e, t) => {
|
|
@@ -1215,7 +1255,7 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1215
1255
|
}) : [], k = c.centre ? R(x, m) : null;
|
|
1216
1256
|
if (k) {
|
|
1217
1257
|
let e = l.find((e) => e.isTotal), t = e ? e.value : l.reduce((e, t) => e + Math.abs(t.value), 0);
|
|
1218
|
-
k.dataset.value = String(t), e && (k.dataset.decimals = String(
|
|
1258
|
+
k.dataset.value = String(t), e && (k.dataset.decimals = String(ne(e.number)));
|
|
1219
1259
|
}
|
|
1220
1260
|
let A = k && !l.some((e) => e.isTotal) ? ot(i, k, a) : null, j = c.categories === "beside", M = document.createElement("div");
|
|
1221
1261
|
M.className = n, M.setAttribute("aria-hidden", "true"), M.inert = !0, j ? M.dataset.place = "beside" : c.centre && (M.dataset.place = "key"), M.style.setProperty("--tablechart-columns", String(l.length));
|
|
@@ -1279,8 +1319,8 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1279
1319
|
};
|
|
1280
1320
|
return L?.addEventListener("click", (e) => {
|
|
1281
1321
|
let t = e.target.closest("button")?.dataset.go;
|
|
1282
|
-
t &&
|
|
1283
|
-
}),
|
|
1322
|
+
t && $(B, B.step + (t === "next" ? 1 : -1));
|
|
1323
|
+
}), $(B, 0, !0), a.hover && i.getAttribute("data-chart-hover") !== "false" && _t(B), mt(B, a), B;
|
|
1284
1324
|
}, ut = (e) => {
|
|
1285
1325
|
let t = getComputedStyle(e).getPropertyValue("--tablechart-inside-align").trim();
|
|
1286
1326
|
return t === "start" || t === "center" || t === "end" ? t : null;
|
|
@@ -1304,7 +1344,7 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1304
1344
|
]);
|
|
1305
1345
|
let g = (s[0] ? Y(s[0]).height : 0) * p, _ = d[0]?.badge ? Y(d[0].badge).height * p : 0, v = Math.max(h, dt(t.figure, p, "--tablechart-min-height", "200px") ?? 0, o.minHeight?.({
|
|
1306
1346
|
labelHeight: g,
|
|
1307
|
-
nameHeight: Math.max(0,
|
|
1347
|
+
nameHeight: Math.max(0, U(t.categories.map((e) => Y(e).height))) * p,
|
|
1308
1348
|
unit: p,
|
|
1309
1349
|
rows: a.length,
|
|
1310
1350
|
series: c.length,
|
|
@@ -1335,52 +1375,52 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1335
1375
|
series: c.length,
|
|
1336
1376
|
focused: c.some((e) => e.focus),
|
|
1337
1377
|
stacked: t.stacked
|
|
1338
|
-
}, C =
|
|
1378
|
+
}, C = Math.max(((e) => t.stacked ? e(a.map((e) => X(e, c.length, o.running).top)) : e([...x.flatMap((e) => [
|
|
1339
1379
|
e.from,
|
|
1340
1380
|
e.to,
|
|
1341
1381
|
e.value
|
|
1342
|
-
])),
|
|
1343
|
-
let t = Number.parseFloat(
|
|
1382
|
+
]), ...a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value))]))(U), 0), T = x.some((e) => e.kind === "up" || e.kind === "down") ? x.flatMap((e) => [e.from, e.to]) : t.stacked ? a.map((e) => X(e, c.length, o.running).bottom) : a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value)), E = Math.min(-U(T.map((e) => -e)), 0), D = o.headroom?.(S) ?? g, O = 2 * p + (o.footroom?.(S) ?? 0) + (E < 0 ? g + 4 * p : 0), k = v - D - O, A = C * 1.02, M = E * 1.02, N = d.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, P = (e) => {
|
|
1383
|
+
let t = Number.parseFloat(N?.getAttribute(e) ?? "");
|
|
1344
1384
|
return Number.isFinite(t) ? t : null;
|
|
1345
|
-
},
|
|
1346
|
-
if (
|
|
1347
|
-
let t =
|
|
1385
|
+
}, L = P("data-from") ?? P("data-at"), R = P("data-to"), z = null;
|
|
1386
|
+
if (N && (L !== null || R !== null)) {
|
|
1387
|
+
let t = L ?? 0, n = R ?? A, r = R === null ? t : L === null ? n : (t + n) / 2, i = N.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
|
|
1348
1388
|
i !== null && !a && console.warn(`[${e}] data-size="${i}" is not a percentage, such as 30%. Using the default.`);
|
|
1349
|
-
let s = Math.min(Math.max(a ? Number(a[1]) / 100 :
|
|
1350
|
-
o.breakable ? t < 0 || n <= t || n >
|
|
1389
|
+
let s = Math.min(Math.max(a ? Number(a[1]) / 100 : R === null ? .22 : .3, .05), .8), c = x.filter((e) => (e.kind === "up" || e.kind === "down") && Math.max(e.from, e.to) > t && Math.min(e.from, e.to) < n);
|
|
1390
|
+
o.breakable ? E < 0 ? console.warn(`[${e}] A chart with values below zero cannot break its scale.`) : t < 0 || n <= t || n > A || t === 0 && n === A ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${C}.`) : c.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : z = {
|
|
1351
1391
|
lo: t,
|
|
1352
1392
|
hi: n,
|
|
1353
1393
|
gap: r,
|
|
1354
1394
|
share: s
|
|
1355
1395
|
} : console.warn(`[${e}] This kind of chart cannot break its scale.`);
|
|
1356
1396
|
}
|
|
1357
|
-
let
|
|
1358
|
-
if (
|
|
1359
|
-
let { lo: e, hi: t, gap: n, share: r } =
|
|
1360
|
-
|
|
1397
|
+
let B = z ? z.gap : null, V = (z && dt(t.figure, p, "--tablechart-break-gap", "")) ?? 13, H = v - O, te = A - M || 1, ne = (e) => H - (e - M) / te * k;
|
|
1398
|
+
if (z) {
|
|
1399
|
+
let { lo: e, hi: t, gap: n, share: r } = z, i = k * r, a = (k - i - V) / (e + (A - t)), o = i / (t - e);
|
|
1400
|
+
ne = (r) => r <= e ? H - r * a : r <= n ? H - e * a - (r - e) * o : r <= t ? H - e * a - (r - e) * o - V : H - e * a - i - V - (r - t) * a;
|
|
1361
1401
|
}
|
|
1362
|
-
let
|
|
1363
|
-
|
|
1364
|
-
let
|
|
1365
|
-
t.rowAt = o.centre ? null : o.categories === "beside" ? (e, t) =>
|
|
1366
|
-
let
|
|
1402
|
+
let W = u.length ? U(u.map((e) => Y(e).width)) * p + 12 * p : 0, G = t.categories[0]?.parentElement;
|
|
1403
|
+
G && (G.style.paddingRight = W ? `${W / j * 100}%` : "");
|
|
1404
|
+
let K = (j - W) / a.length, q = (e) => (e + .5) * K, re = (e) => e >= 0 && e < a.length ? e : null;
|
|
1405
|
+
t.rowAt = o.centre ? null : o.categories === "beside" ? (e, t) => re(Math.floor(t * p / (v / a.length))) : (e) => re(Math.floor(e * p / K));
|
|
1406
|
+
let ie = K / j * 100, ae = 100 / a.length;
|
|
1367
1407
|
t.rowBox = o.categories === "beside" ? (e) => [
|
|
1368
1408
|
0,
|
|
1369
|
-
e *
|
|
1409
|
+
e * ae,
|
|
1370
1410
|
100,
|
|
1371
|
-
|
|
1411
|
+
ae
|
|
1372
1412
|
] : (e) => [
|
|
1373
|
-
e *
|
|
1413
|
+
e * ie,
|
|
1374
1414
|
0,
|
|
1375
|
-
|
|
1415
|
+
ie,
|
|
1376
1416
|
100
|
|
1377
1417
|
], i.setAttribute("viewBox", `0 0 ${j} ${F(v)}`), i.textContent = "", t.checks = [];
|
|
1378
1418
|
let J = {
|
|
1379
1419
|
rows: a,
|
|
1380
1420
|
segments: x,
|
|
1381
|
-
cx:
|
|
1382
|
-
y:
|
|
1383
|
-
barWidth: Math.min(
|
|
1421
|
+
cx: q,
|
|
1422
|
+
y: ne,
|
|
1423
|
+
barWidth: Math.min(K * n.barfill, ft(t.figure, p)),
|
|
1384
1424
|
barMax: ft(t.figure, p),
|
|
1385
1425
|
height: v,
|
|
1386
1426
|
unit: p,
|
|
@@ -1389,11 +1429,10 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1389
1429
|
after: a.length,
|
|
1390
1430
|
note: 0,
|
|
1391
1431
|
labels: t.figure.dataset.chartLabels === "inside" || t.figure.dataset.chartLabels !== "outside" && n.labels === "inside" ? "inside" : "outside",
|
|
1392
|
-
closing: (t.figure.dataset.chartClosing ?? n.closing) === "up" ? "up" : "down",
|
|
1393
1432
|
insideAlign: ut(t.figure),
|
|
1394
|
-
breakAt:
|
|
1395
|
-
squeeze:
|
|
1396
|
-
breakGap:
|
|
1433
|
+
breakAt: B,
|
|
1434
|
+
squeeze: z,
|
|
1435
|
+
breakGap: V,
|
|
1397
1436
|
stacked: t.stacked,
|
|
1398
1437
|
shape: it(t.figure, n),
|
|
1399
1438
|
totals: t.totals,
|
|
@@ -1437,8 +1476,8 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1437
1476
|
});
|
|
1438
1477
|
}
|
|
1439
1478
|
Ze(t);
|
|
1440
|
-
let
|
|
1441
|
-
return
|
|
1479
|
+
let oe = t.categories[0]?.parentElement;
|
|
1480
|
+
return oe && o.categories !== "beside" && !o.centre && xe(oe, t.categories.filter((e) => e.offsetParent !== null), (e) => ({
|
|
1442
1481
|
size: e.scrollWidth,
|
|
1443
1482
|
room: e.clientWidth
|
|
1444
1483
|
}), "--tablechart-name-fit"), ee(i, d.flatMap(({ badge: e }) => {
|
|
@@ -1526,7 +1565,7 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1526
1565
|
}
|
|
1527
1566
|
return e.remove(), t;
|
|
1528
1567
|
}, St = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Ct = (e) => {
|
|
1529
|
-
let t =
|
|
1568
|
+
let t = jt(e);
|
|
1530
1569
|
return t?.tagName === "P" ? t : e;
|
|
1531
1570
|
}, wt = (e) => {
|
|
1532
1571
|
let t = Ct(e).firstChild;
|
|
@@ -1565,46 +1604,61 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1565
1604
|
let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? bt(a) ? a : bt(o) ? o : null : n;
|
|
1566
1605
|
i && s === o && (o = o?.nextElementSibling ?? null);
|
|
1567
1606
|
let c = o?.classList.contains("chart-annotations") ? o : Tt(o);
|
|
1568
|
-
return n.replaceWith(r), s && r.append(xt(s)), i && r.append(i), c && r.append(c),
|
|
1569
|
-
}), Ot = (e, t =
|
|
1570
|
-
let
|
|
1571
|
-
if (t.length) {
|
|
1572
|
-
let e =
|
|
1573
|
-
e.append(
|
|
1607
|
+
return n.replaceWith(r), s && r.append(xt(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;
|
|
1608
|
+
}), Ot = (e, t, n, r = document.createElement("table")) => {
|
|
1609
|
+
for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
|
|
1610
|
+
if (!r.tHead && (t.length || n)) {
|
|
1611
|
+
let e = r.createTHead().insertRow(), i = document.createElement("th");
|
|
1612
|
+
i.textContent = n, e.append(i);
|
|
1574
1613
|
for (let n of t) {
|
|
1575
1614
|
let t = document.createElement("th");
|
|
1576
1615
|
t.textContent = n, e.append(t);
|
|
1577
1616
|
}
|
|
1578
1617
|
}
|
|
1579
|
-
let
|
|
1618
|
+
let i = document.createElement("tbody");
|
|
1619
|
+
r.append(i);
|
|
1580
1620
|
for (let t of e) {
|
|
1581
|
-
let e =
|
|
1621
|
+
let e = i.insertRow();
|
|
1582
1622
|
t.kind === "total" && (e.dataset.kind = "total");
|
|
1583
1623
|
let n = document.createElement("th");
|
|
1584
1624
|
n.textContent = String(t.label ?? ""), e.append(n);
|
|
1585
1625
|
for (let n of t.values ?? [t.value ?? null]) e.insertCell().textContent = n === null ? "" : String(n);
|
|
1586
1626
|
}
|
|
1587
|
-
return
|
|
1588
|
-
}, kt =
|
|
1627
|
+
return r;
|
|
1628
|
+
}, kt = (e) => {
|
|
1629
|
+
if (!e || typeof e != "object") return;
|
|
1630
|
+
let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
|
|
1631
|
+
if (!(!t.length || !t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n)))) return t.map(([e, t]) => Array.isArray(t) ? {
|
|
1632
|
+
label: e,
|
|
1633
|
+
values: t
|
|
1634
|
+
} : {
|
|
1635
|
+
label: e,
|
|
1636
|
+
value: t
|
|
1637
|
+
});
|
|
1638
|
+
}, At = async (t) => {
|
|
1589
1639
|
await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
|
|
1590
|
-
let n = t.getAttribute("data-chart-src");
|
|
1591
|
-
for (let e of t.querySelectorAll("table")) e.remove();
|
|
1640
|
+
let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
|
|
1641
|
+
for (let e of t.querySelectorAll("table")) e !== r && e.remove();
|
|
1592
1642
|
try {
|
|
1593
1643
|
let e = await fetch(n);
|
|
1594
1644
|
if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
|
|
1595
|
-
let
|
|
1596
|
-
if (!Array.isArray(
|
|
1597
|
-
let
|
|
1598
|
-
|
|
1645
|
+
let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : kt(i.rows) : kt(i);
|
|
1646
|
+
if (!Array.isArray(a)) throw Error("no rows in it: a list of rows, an object with rows, or names with their values");
|
|
1647
|
+
let o = Ot(a, Array.isArray(i?.series) ? i.series.map(String) : [], typeof i?.label == "string" ? i.label : "", r ?? void 0);
|
|
1648
|
+
if (!r) {
|
|
1649
|
+
let e = t.querySelector(":scope > figcaption");
|
|
1650
|
+
e ? e.after(o) : t.prepend(o);
|
|
1651
|
+
}
|
|
1652
|
+
o.tHead || Q?.log?.(`The table from "${n}" has no header row, so a screen reader cannot name its columns.`), Q?.log?.(`Read ${a.length} rows from "${n}"`);
|
|
1599
1653
|
} catch (t) {
|
|
1600
1654
|
let r = window.location.protocol === "file:";
|
|
1601
1655
|
console.warn(`[${e}] Could not read the chart data in "${n}": ${t.message}.` + (r ? " A page opened from the file system cannot fetch files; open the page from a server instead." : ""));
|
|
1602
1656
|
}
|
|
1603
1657
|
}));
|
|
1604
|
-
},
|
|
1658
|
+
}, jt = (e) => {
|
|
1605
1659
|
let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
|
|
1606
1660
|
return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
|
|
1607
|
-
},
|
|
1661
|
+
}, Mt = "strong, b, span.total", Nt = (e) => {
|
|
1608
1662
|
for (let t of e) {
|
|
1609
1663
|
for (let e of t.querySelectorAll("tbody tr")) {
|
|
1610
1664
|
let t = e.cells[0];
|
|
@@ -1612,16 +1666,16 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1612
1666
|
let n = document.createElement("th");
|
|
1613
1667
|
for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
|
|
1614
1668
|
n.append(...t.childNodes), t.replaceWith(n);
|
|
1615
|
-
for (let t =
|
|
1669
|
+
for (let t = jt(n); t?.matches(Mt); t = jt(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
|
|
1616
1670
|
}
|
|
1617
1671
|
let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
|
|
1618
|
-
for (let t of e.slice(1)) for (let e =
|
|
1672
|
+
for (let t of e.slice(1)) for (let e = jt(t); e?.matches(Mt); e = jt(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
|
|
1619
1673
|
}
|
|
1620
|
-
},
|
|
1674
|
+
}, Pt = "data-chart-made", Ft = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, It = (e) => new Promise((t) => setTimeout(t, e)), Lt = (e, t) => {
|
|
1621
1675
|
let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
|
|
1622
1676
|
return Math.min(Math.max(r, 0), 1);
|
|
1623
|
-
},
|
|
1624
|
-
if (
|
|
1677
|
+
}, Rt = async (e, t) => {
|
|
1678
|
+
if (Ft()) return;
|
|
1625
1679
|
await new Promise(requestAnimationFrame);
|
|
1626
1680
|
let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
|
|
1627
1681
|
for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
|
|
@@ -1632,11 +1686,11 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1632
1686
|
let a = Number(n.delay ?? 0) + i * t;
|
|
1633
1687
|
r = Math.max(r, a - Number(e.currentTime ?? 0));
|
|
1634
1688
|
}
|
|
1635
|
-
r > 0 && await
|
|
1636
|
-
},
|
|
1689
|
+
r > 0 && await It(r);
|
|
1690
|
+
}, zt = (e) => {
|
|
1637
1691
|
for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
|
|
1638
1692
|
return null;
|
|
1639
|
-
},
|
|
1693
|
+
}, Bt = (e) => new Promise((t) => {
|
|
1640
1694
|
let n = ["animationstart", "transitionrun"], r = () => {
|
|
1641
1695
|
for (let e of n) document.removeEventListener(e, i, !0);
|
|
1642
1696
|
a.disconnect(), t();
|
|
@@ -1650,41 +1704,41 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1650
1704
|
attributes: !0,
|
|
1651
1705
|
attributeFilter: ["class", "style"]
|
|
1652
1706
|
});
|
|
1653
|
-
}),
|
|
1654
|
-
|
|
1655
|
-
for (let e of
|
|
1707
|
+
}), Vt = /* @__PURE__ */ new Set(), Ht = null, Ut = (e) => {
|
|
1708
|
+
Vt.add(e), !Ht && (Ht = new MutationObserver(() => {
|
|
1709
|
+
for (let e of Vt) e.relabel();
|
|
1656
1710
|
requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
1657
|
-
for (let e of
|
|
1711
|
+
for (let e of Vt) e.refresh();
|
|
1658
1712
|
}));
|
|
1659
|
-
}),
|
|
1713
|
+
}), Ht.observe(document.documentElement, {
|
|
1660
1714
|
attributes: !0,
|
|
1661
1715
|
attributeFilter: ["lang"]
|
|
1662
1716
|
}));
|
|
1663
|
-
},
|
|
1664
|
-
|
|
1665
|
-
},
|
|
1717
|
+
}, Wt = (e) => {
|
|
1718
|
+
Vt.delete(e), !(Vt.size || !Ht) && (Ht.disconnect(), Ht = null);
|
|
1719
|
+
}, Gt = ["column", "bar"], Kt = (e) => {
|
|
1666
1720
|
let t = e.getAttribute("data-chart") || "column";
|
|
1667
|
-
if (!
|
|
1721
|
+
if (!Gt.includes(t)) return null;
|
|
1668
1722
|
let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
|
|
1669
|
-
return
|
|
1670
|
-
},
|
|
1671
|
-
let n = e, r =
|
|
1723
|
+
return Gt.includes(n) ? n : t;
|
|
1724
|
+
}, qt = (e, t) => {
|
|
1725
|
+
let n = e, r = Kt(n.figure), i = null, a = !1, o = !1, s = async () => {
|
|
1672
1726
|
if (!t.animate) return gt(n, !0);
|
|
1673
1727
|
let e = n.figure.classList.contains("is-shown");
|
|
1674
1728
|
if (a && i !== null && !e && !o) {
|
|
1675
1729
|
o = !0;
|
|
1676
|
-
let e =
|
|
1677
|
-
e && await
|
|
1730
|
+
let e = Ft() ? null : zt(n.figure);
|
|
1731
|
+
e && await Bt(e), await Rt(n.figure, Lt(n.figure, t)), o = !1, (a || !t.replay) && gt(n, !0);
|
|
1678
1732
|
} else !a && t.replay && e && gt(n, !1);
|
|
1679
1733
|
}, c = () => {
|
|
1680
|
-
let e =
|
|
1734
|
+
let e = Kt(n.figure);
|
|
1681
1735
|
if (!e || e === r) return;
|
|
1682
|
-
let a =
|
|
1683
|
-
a && (ht(n),
|
|
1736
|
+
let a = Q.timed("Building", n.figure, () => lt(n.figure, t, e));
|
|
1737
|
+
a && (ht(n), $(a, n.step, !0), n = a, r = e, i = null);
|
|
1684
1738
|
}, l = () => {
|
|
1685
1739
|
c();
|
|
1686
1740
|
let e = n.plot.clientWidth;
|
|
1687
|
-
!e || e === i ||
|
|
1741
|
+
!e || e === i || Q.timed("Layout", n.figure, () => pt(n, t)) && (i = e, s());
|
|
1688
1742
|
}, u = !1, d = new ResizeObserver(() => {
|
|
1689
1743
|
u || (u = !0, requestAnimationFrame(() => {
|
|
1690
1744
|
u = !1, l();
|
|
@@ -1697,13 +1751,13 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1697
1751
|
relabel: () => mt(n, t),
|
|
1698
1752
|
refresh: m
|
|
1699
1753
|
};
|
|
1700
|
-
c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p),
|
|
1754
|
+
c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), Ut(h);
|
|
1701
1755
|
let g = {
|
|
1702
1756
|
figure: n.figure,
|
|
1703
1757
|
refresh: m,
|
|
1704
|
-
next: () =>
|
|
1705
|
-
previous: () =>
|
|
1706
|
-
stepTo: (e) =>
|
|
1758
|
+
next: () => $(n, n.step + 1),
|
|
1759
|
+
previous: () => $(n, n.step - 1),
|
|
1760
|
+
stepTo: (e) => $(n, e),
|
|
1707
1761
|
get step() {
|
|
1708
1762
|
return n.step;
|
|
1709
1763
|
},
|
|
@@ -1711,33 +1765,33 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1711
1765
|
return n.plan?.count ?? 0;
|
|
1712
1766
|
},
|
|
1713
1767
|
destroy() {
|
|
1714
|
-
d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p),
|
|
1768
|
+
d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), Wt(h), n.figure.tablechart === g && delete n.figure.tablechart;
|
|
1715
1769
|
}
|
|
1716
1770
|
};
|
|
1717
1771
|
return n.figure.tablechart = g, g;
|
|
1718
|
-
},
|
|
1719
|
-
let n = Dt(e.filter((e) => !e.hasAttribute(
|
|
1720
|
-
return await
|
|
1721
|
-
},
|
|
1722
|
-
let n =
|
|
1723
|
-
return n ? (e.setAttribute(
|
|
1724
|
-
},
|
|
1772
|
+
}, Jt = async (e, t) => {
|
|
1773
|
+
let n = Dt(e.filter((e) => !e.hasAttribute(Pt)));
|
|
1774
|
+
return await At(n), Nt(n), qe(n, t.langattribute), n;
|
|
1775
|
+
}, Yt = (e, t) => {
|
|
1776
|
+
let n = Q.timed("Building", e, () => lt(e, t));
|
|
1777
|
+
return n ? (e.setAttribute(Pt, ""), qt(n, t)) : null;
|
|
1778
|
+
}, Xt = async (e, t = {}) => {
|
|
1725
1779
|
if (e.tablechart) return e.tablechart;
|
|
1726
1780
|
let n = {
|
|
1727
1781
|
...M,
|
|
1728
1782
|
...t
|
|
1729
1783
|
};
|
|
1730
|
-
n.debug && (
|
|
1731
|
-
let [r] = await
|
|
1732
|
-
return r ?
|
|
1733
|
-
},
|
|
1784
|
+
n.debug && (Q.enabled = !0);
|
|
1785
|
+
let [r] = await Jt([e], n);
|
|
1786
|
+
return r ? Yt(r, n) : null;
|
|
1787
|
+
}, Zt = async (e = {}, t = document) => {
|
|
1734
1788
|
let n = {
|
|
1735
1789
|
...M,
|
|
1736
1790
|
...e
|
|
1737
1791
|
};
|
|
1738
|
-
n.debug && (
|
|
1739
|
-
let r = (await
|
|
1740
|
-
return
|
|
1792
|
+
n.debug && (Q.enabled = !0);
|
|
1793
|
+
let r = (await Jt(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => Yt(e, n)).filter((e) => e !== null);
|
|
1794
|
+
return Q.log(`Made ${r.length} chart(s).`), {
|
|
1741
1795
|
charts: r,
|
|
1742
1796
|
refresh: () => {
|
|
1743
1797
|
for (let e of r) e.refresh();
|
|
@@ -1748,4 +1802,4 @@ var Fe = (e) => e.map((e) => ({
|
|
|
1748
1802
|
};
|
|
1749
1803
|
};
|
|
1750
1804
|
//#endregion
|
|
1751
|
-
export { k as _, Dt as a, lt as c, gt as d, ht as f, t as g, w as h,
|
|
1805
|
+
export { k as _, Dt as a, lt as c, gt as d, ht as f, t as g, w as h, Jt as i, pt as l, qe as m, Lt as n, At as o, $ as p, Zt as r, Nt as s, Xt as t, mt as u, O as v, M as y };
|