@martinomagnifico/tablechart 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/tablechart-core.d.ts +5 -0
- package/dist/tablechart-shared.mjs +434 -377
- package/dist/tablechart.css +1 -1
- package/dist/tablechart.js +1 -1
- package/package.json +1 -1
|
@@ -19,22 +19,25 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
19
19
|
threshold: .5,
|
|
20
20
|
replay: !1,
|
|
21
21
|
langattribute: "data-i18n"
|
|
22
|
-
}, N = (e, t) => `${e}:${t}`, P = "http://www.w3.org/2000/svg", F = (e, t = {}) => {
|
|
22
|
+
}, N = (e, t) => `${e}:${t}`, P = "http://www.w3.org/2000/svg", F = (e) => Math.round(e * 100) / 100, I = (e, t = {}) => {
|
|
23
23
|
let n = document.createElementNS(P, e);
|
|
24
|
-
for (let e in t)
|
|
24
|
+
for (let e in t) {
|
|
25
|
+
let r = t[e];
|
|
26
|
+
n.setAttribute(e, String(typeof r == "number" ? F(r) : r));
|
|
27
|
+
}
|
|
25
28
|
return n;
|
|
26
|
-
},
|
|
29
|
+
}, L = (e, t) => [e, ...t.classes].join(" "), R = (e, t) => {
|
|
27
30
|
let n = document.createElement("span");
|
|
28
31
|
return n.className = e, n.inert = !0, t.appendChild(n), n;
|
|
29
|
-
},
|
|
32
|
+
}, z = (e, t, n, r, i) => {
|
|
30
33
|
e.style.left = `${t / r * 100}%`, e.style.top = `${n / i * 100}%`;
|
|
31
|
-
},
|
|
34
|
+
}, B = 0, ee = (e, t, n, r) => {
|
|
32
35
|
if (!t.length) return;
|
|
33
|
-
let i = `tablechart-cut-${++
|
|
36
|
+
let i = `tablechart-cut-${++B}`, a = I("mask", {
|
|
34
37
|
id: i,
|
|
35
38
|
maskUnits: "userSpaceOnUse"
|
|
36
39
|
});
|
|
37
|
-
a.appendChild(
|
|
40
|
+
a.appendChild(I("rect", {
|
|
38
41
|
x: -n,
|
|
39
42
|
y: -r,
|
|
40
43
|
width: n * 3,
|
|
@@ -43,11 +46,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
43
46
|
}));
|
|
44
47
|
for (let e of t) e.setAttribute("fill", "black"), a.appendChild(e);
|
|
45
48
|
let o = e.querySelector(":scope > defs");
|
|
46
|
-
o || (o =
|
|
47
|
-
let s =
|
|
49
|
+
o || (o = I("defs"), e.prepend(o)), o.appendChild(a);
|
|
50
|
+
let s = I("g", { mask: `url(#${i})` });
|
|
48
51
|
for (let t of Array.from(e.childNodes)) t !== o && s.appendChild(t);
|
|
49
52
|
e.appendChild(s);
|
|
50
|
-
},
|
|
53
|
+
}, te = 0, V = (e) => Array.from(e.querySelectorAll(`.${i}`)).map((e) => {
|
|
51
54
|
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")));
|
|
52
55
|
return {
|
|
53
56
|
row: Number(e.dataset.row),
|
|
@@ -57,7 +60,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
57
60
|
height: o - i,
|
|
58
61
|
sideways: e.dataset.grow === "right"
|
|
59
62
|
};
|
|
60
|
-
}),
|
|
63
|
+
}), ne = {
|
|
61
64
|
create: () => null,
|
|
62
65
|
draw(e, t, n) {
|
|
63
66
|
let { rows: r, y: i, svg: a, breakAt: o } = n;
|
|
@@ -84,11 +87,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
84
87
|
[c + 2 * l, t + o],
|
|
85
88
|
[c + i, t - o]
|
|
86
89
|
];
|
|
87
|
-
}, 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-${++
|
|
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-${++te}`, d = I("mask", {
|
|
88
91
|
id: u,
|
|
89
92
|
maskUnits: "userSpaceOnUse"
|
|
90
93
|
});
|
|
91
|
-
d.appendChild(
|
|
94
|
+
d.appendChild(I("rect", {
|
|
92
95
|
x: -j,
|
|
93
96
|
y: -n.height,
|
|
94
97
|
width: j * 3,
|
|
@@ -100,12 +103,12 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
100
103
|
let t = e.sideways ? n.breakX : p;
|
|
101
104
|
if (t === void 0 || !(e.sideways ? e.x < t && e.x + e.width > t : e.y < p && e.y + e.height > p)) continue;
|
|
102
105
|
let [i, o] = e.sideways ? [c(e, t), c(e, t + n.breakGap)] : [c(e, p - n.breakGap), c(e, p)];
|
|
103
|
-
d.appendChild(
|
|
106
|
+
d.appendChild(I("path", {
|
|
104
107
|
d: l([...i, ...o.slice().reverse()], !0),
|
|
105
108
|
fill: "black"
|
|
106
109
|
})), f.push(i, o);
|
|
107
110
|
let s = N("--after", r[e.row - 1]?.slot ?? 0);
|
|
108
|
-
for (let e of [i, o]) a.appendChild(
|
|
111
|
+
for (let e of [i, o]) a.appendChild(I("path", {
|
|
109
112
|
class: C,
|
|
110
113
|
"data-part": "edge",
|
|
111
114
|
"data-note": n.note,
|
|
@@ -114,20 +117,20 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
114
117
|
}));
|
|
115
118
|
}
|
|
116
119
|
if (!f.length) return;
|
|
117
|
-
let m = Array.from(a.querySelectorAll(`.${C}`)), h =
|
|
120
|
+
let m = Array.from(a.querySelectorAll(`.${C}`)), h = I("g", { mask: `url(#${u})` });
|
|
118
121
|
for (let e of Array.from(a.childNodes)) m.includes(e) || h.appendChild(e);
|
|
119
|
-
let g =
|
|
122
|
+
let g = I("defs");
|
|
120
123
|
g.appendChild(d), a.prepend(g, h);
|
|
121
124
|
}
|
|
122
|
-
},
|
|
125
|
+
}, H = (e) => {
|
|
123
126
|
let t = -Infinity;
|
|
124
127
|
for (let n of e) t = Math.max(t, n);
|
|
125
128
|
return t;
|
|
126
|
-
},
|
|
129
|
+
}, U = (e) => (e.split(/[.,]/)[1] || "").length, W = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
|
|
127
130
|
minimumFractionDigits: e,
|
|
128
131
|
maximumFractionDigits: e
|
|
129
132
|
}), G = (e, t, n) => {
|
|
130
|
-
let r =
|
|
133
|
+
let r = W(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
|
|
131
134
|
return [i, r.slice(+!!i).map((e) => e.value).join("")];
|
|
132
135
|
}, K = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), q = (e, t) => {
|
|
133
136
|
let n = document.createElement("span");
|
|
@@ -146,45 +149,45 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
146
149
|
agrees: o
|
|
147
150
|
};
|
|
148
151
|
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.`);
|
|
149
|
-
},
|
|
152
|
+
}, re = (e, t) => (t - e) / Math.abs(e) * 100, ie = (e, t) => {
|
|
150
153
|
let n = (t, n) => {
|
|
151
154
|
let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
|
|
152
155
|
return Number.isFinite(r) ? r - 1 : n;
|
|
153
156
|
};
|
|
154
157
|
return [n("data-from", 0), n("data-to", t - 1)];
|
|
155
|
-
},
|
|
158
|
+
}, ae = {
|
|
156
159
|
create: q,
|
|
157
160
|
draw(t, n, r) {
|
|
158
|
-
let { rows: i, cx: a, y: o, unit: s, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] =
|
|
161
|
+
let { rows: i, cx: a, y: o, unit: s, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = ie(t, i.length), _ = i[h], v = i[g];
|
|
159
162
|
if (!_ || !v) {
|
|
160
163
|
console.warn(`[${e}] A bracket points at a row that is not there (row ${h + 1} to ${g + 1}, of ${i.length}).`);
|
|
161
164
|
return;
|
|
162
165
|
}
|
|
163
166
|
let y = 7 * s, b = 4 * s, x = a(h), S = a(g), C = Math.min(o(_.value), o(v.value)) - u - b - d * .9, w = (e) => o(e) - u - b, T = `M ${x} ${w(_.value)} L ${x} ${C} L ${S} ${C} L ${S} ${w(v.value) - y}`, E = (w(_.value) - C + Math.abs(S - x) + (w(v.value) - y - C)) / s + 1;
|
|
164
|
-
p.appendChild(
|
|
167
|
+
p.appendChild(I("path", {
|
|
165
168
|
class: c,
|
|
166
169
|
"data-note": r.note,
|
|
167
170
|
d: T,
|
|
168
171
|
style: `--len:${E.toFixed(1)}; ${N("--after", m)}`
|
|
169
172
|
}));
|
|
170
173
|
let D = w(v.value);
|
|
171
|
-
p.appendChild(
|
|
174
|
+
p.appendChild(I("polygon", {
|
|
172
175
|
class: l,
|
|
173
176
|
"data-note": r.note,
|
|
174
177
|
points: `${S},${D} ${S - y * .45},${D - y} ${S + y * .45},${D - y}`,
|
|
175
178
|
style: N("--after", m)
|
|
176
|
-
})), n && (
|
|
179
|
+
})), n && (z(n, (x + S) / 2, C, j, f), n.style.setProperty("--after", String(m))), J(n, re(_.value, v.value), `${_.value} to ${v.value}`, r);
|
|
177
180
|
}
|
|
178
|
-
},
|
|
181
|
+
}, oe = /* @__PURE__ */ new WeakMap(), se = (e) => {
|
|
179
182
|
let t = [...e].filter((e) => !!e), n = t.map((e) => ({
|
|
180
183
|
width: e.offsetWidth,
|
|
181
184
|
height: e.offsetHeight
|
|
182
185
|
}));
|
|
183
|
-
t.forEach((e, t) =>
|
|
184
|
-
}, Y = (e) =>
|
|
186
|
+
t.forEach((e, t) => oe.set(e, n[t]));
|
|
187
|
+
}, Y = (e) => oe.get(e) ?? {
|
|
185
188
|
width: e.offsetWidth,
|
|
186
189
|
height: e.offsetHeight
|
|
187
|
-
},
|
|
190
|
+
}, ce = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, le = {
|
|
188
191
|
create: q,
|
|
189
192
|
draw(e, t, n) {
|
|
190
193
|
let { rows: r, cx: i, y: a, unit: o, labelHeight: s, height: u, svg: d, values: f, after: p } = n, m = r[0], h = r[r.length - 1];
|
|
@@ -207,7 +210,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
207
210
|
}), b -= u, S -= u;
|
|
208
211
|
}
|
|
209
212
|
let A = x - D * v, M = S - O * v, P = Math.hypot(A - y, M - b) / o + 1;
|
|
210
|
-
d.appendChild(
|
|
213
|
+
d.appendChild(I("line", {
|
|
211
214
|
class: c,
|
|
212
215
|
"data-note": n.note,
|
|
213
216
|
x1: y,
|
|
@@ -216,39 +219,39 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
216
219
|
y2: M,
|
|
217
220
|
style: `--len:${P.toFixed(1)}; ${N("--after", p)}`
|
|
218
221
|
}));
|
|
219
|
-
let
|
|
220
|
-
d.appendChild(
|
|
222
|
+
let F = -O, L = D, R = v * .42;
|
|
223
|
+
d.appendChild(I("polygon", {
|
|
221
224
|
class: l,
|
|
222
225
|
"data-note": n.note,
|
|
223
226
|
points: [
|
|
224
227
|
`${x},${S}`,
|
|
225
|
-
`${A +
|
|
226
|
-
`${A -
|
|
228
|
+
`${A + F * R},${M + L * R}`,
|
|
229
|
+
`${A - F * R},${M - L * R}`
|
|
227
230
|
].join(" "),
|
|
228
231
|
style: N("--after", p)
|
|
229
|
-
})), t && (
|
|
232
|
+
})), t && (z(t, y + (x - y) * k, b + (S - b) * k, j, u), t.style.setProperty("--after", String(p)));
|
|
230
233
|
let B = Number.parseFloat(e.getAttribute("data-years") || "");
|
|
231
|
-
!Number.isNaN(B) && B > 0 && J(t,
|
|
234
|
+
!Number.isNaN(B) && B > 0 && J(t, ce(m.value, h.value, B), `${m.value} to ${h.value} over ${B} years`, n);
|
|
232
235
|
}
|
|
233
|
-
},
|
|
236
|
+
}, ue = (e, t, n, r, i) => {
|
|
234
237
|
if (!r) return e / t * n;
|
|
235
238
|
let { lo: a, hi: o, gap: s, share: c } = r, l = n * c, u = (n - l - i) / (a + (t - o)), d = l / (o - a);
|
|
236
239
|
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;
|
|
237
|
-
},
|
|
240
|
+
}, de = (e, t, n) => {
|
|
238
241
|
let r = .15, i = Math.min(e * .7 / (t + (t - 1) * r), n), a = t * i + (t - 1) * i * r;
|
|
239
242
|
return {
|
|
240
243
|
size: i,
|
|
241
244
|
gap: i * r,
|
|
242
245
|
offset: (e) => -a / 2 + e * i * 1.15
|
|
243
246
|
};
|
|
244
|
-
},
|
|
247
|
+
}, fe = (e, t, n) => {
|
|
245
248
|
let r = e.series[n], i = e.series.some((e) => e.focus) && !r.focus;
|
|
246
249
|
return {
|
|
247
250
|
"data-series": n + 1,
|
|
248
251
|
...i && { "data-muted": "" },
|
|
249
252
|
style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${N("--i", t.slot)}`
|
|
250
253
|
};
|
|
251
|
-
},
|
|
254
|
+
}, pe = (e, t) => {
|
|
252
255
|
let n = 0;
|
|
253
256
|
return Array.from({ length: t }, (t, r) => {
|
|
254
257
|
let i = e.cells[r] ?? e.cells[0], a = n;
|
|
@@ -258,26 +261,29 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
258
261
|
cell: i
|
|
259
262
|
};
|
|
260
263
|
});
|
|
261
|
-
},
|
|
264
|
+
}, me = (e, t) => pe(e, t).at(-1)?.to ?? 0, he = (e, t, n) => {
|
|
262
265
|
let r = t.series.some((e) => e.focus);
|
|
263
266
|
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})`);
|
|
264
|
-
},
|
|
265
|
-
let o =
|
|
266
|
-
class:
|
|
267
|
+
}, ge = (e, t, n, r = {}) => {
|
|
268
|
+
let o = I("g", {
|
|
269
|
+
class: L(i, t),
|
|
267
270
|
"data-kind": "bar",
|
|
268
271
|
"data-row": n + 1,
|
|
269
272
|
...r,
|
|
270
273
|
"data-stack": "",
|
|
271
274
|
style: N("--i", t.slot)
|
|
272
275
|
});
|
|
273
|
-
return e.svg.appendChild(o), (
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
276
|
+
return e.svg.appendChild(o), (i, s) => {
|
|
277
|
+
let c = r["data-grow"] === void 0 ? {} : { "data-grow": r["data-grow"] };
|
|
278
|
+
o.appendChild(I("rect", {
|
|
279
|
+
...s,
|
|
280
|
+
class: L(a, t),
|
|
281
|
+
"data-row": n + 1,
|
|
282
|
+
...c,
|
|
283
|
+
...fe(e, t, i)
|
|
278
284
|
}));
|
|
279
285
|
};
|
|
280
|
-
},
|
|
286
|
+
}, _e = 6, ve = (e, t, n) => e.some((e) => Y(e).width * n > t - _e * n), ye = (e, t, n) => t >= Y(e).height * n * 1.6, be = (e, t, n) => t >= Y(e).width * n * 1.5, xe = (e, t, n, r, i = .7) => {
|
|
281
287
|
e.style.setProperty(r, "1");
|
|
282
288
|
let a = 1;
|
|
283
289
|
for (let e of t) {
|
|
@@ -286,10 +292,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
286
292
|
}
|
|
287
293
|
let o = a >= i ? a : 0;
|
|
288
294
|
return e.style.setProperty(r, String(o || i)), o;
|
|
289
|
-
},
|
|
295
|
+
}, Se = (e, t) => (e.sort((e, t) => e.y - t.y), e.forEach((n, r) => {
|
|
290
296
|
let i = e[r - 1];
|
|
291
297
|
i && n.y < i.y + t && (n.y = i.y + t);
|
|
292
|
-
}), e),
|
|
298
|
+
}), e), Ce = {
|
|
293
299
|
segments: (e) => e.map((e) => ({
|
|
294
300
|
...e,
|
|
295
301
|
from: 0,
|
|
@@ -309,19 +315,19 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
309
315
|
categories: "beside",
|
|
310
316
|
headroom: () => 0,
|
|
311
317
|
draw(e) {
|
|
312
|
-
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(
|
|
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(H(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(H(e.rows.map((t) => me(t, e.series.length))), 0) || 1 : Math.max(H(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = Math.max(h, e.squeeze?.hi ?? 0), _ = (t, n) => ue(Math.abs(t), g, n, e.squeeze, e.breakGap), v = n / t.length, y = (e) => (e + .5) * v, b = Math.min(v * l.barfill, u), x = de(v, e.series.length, u), S = s[0] ?? e.totals[0], C = S ? Y(S).height * r * .56 : 0, w = Math.max(((d && !e.stacked ? x.size : b) - C) / 2, 5 * r), T = (e) => Y(e).width * r, E = (e) => e.length ? H(e.map(T)) + w + 4 * r : 0, D = e.stacked ? E(e.totals) : d ? E(e.seriesValues.flat()) : 0;
|
|
313
319
|
if (!d) for (let e = 0; e < 3; e++) {
|
|
314
320
|
let e = m - p - D, n = E(t.map((e, t) => ({
|
|
315
321
|
seg: e,
|
|
316
322
|
label: s[t]
|
|
317
|
-
})).filter(({ seg: t, label: n }) => !
|
|
323
|
+
})).filter(({ seg: t, label: n }) => !be(n, _(t.value, e), r)).map(({ label: e }) => e));
|
|
318
324
|
if (n <= D) break;
|
|
319
325
|
D = n;
|
|
320
326
|
}
|
|
321
327
|
let O = m - p - D, k = (e) => p + _(e, O);
|
|
322
328
|
if (e.squeeze && (e.breakX = k(e.squeeze.gap)), e.stacked) {
|
|
323
329
|
e.rows.forEach((t, i) => {
|
|
324
|
-
let a =
|
|
330
|
+
let a = ge(e, t, i, { "data-grow": "right" }), o = y(i) - b / 2, s = pe(t, e.series.length);
|
|
325
331
|
s.forEach(({ from: t, to: s, cell: c }, l) => {
|
|
326
332
|
let u = e.seriesValues[l][i];
|
|
327
333
|
if (u.dataset.place = "none", c.missing || s === t) return;
|
|
@@ -331,13 +337,13 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
331
337
|
y: o,
|
|
332
338
|
width: Math.max(f - d, 1),
|
|
333
339
|
height: b
|
|
334
|
-
}), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !
|
|
340
|
+
}), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !be(u, f - d, r) || Y(u).height * r > b), he(u, e, l), z(u, (d + f) / 2, y(i), j, n);
|
|
335
341
|
});
|
|
336
342
|
let l = e.totals[i];
|
|
337
|
-
l && (l.dataset.place = "after",
|
|
343
|
+
l && (l.dataset.place = "after", z(l, k(s.at(-1)?.to ?? 0) + w, y(i), j, n));
|
|
338
344
|
let u = c[i];
|
|
339
|
-
u &&
|
|
340
|
-
}), a.appendChild(
|
|
345
|
+
u && z(u, p - 8 * r, y(i), j, n);
|
|
346
|
+
}), a.appendChild(I("line", {
|
|
341
347
|
class: o,
|
|
342
348
|
x1: p,
|
|
343
349
|
x2: p,
|
|
@@ -348,7 +354,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
348
354
|
}
|
|
349
355
|
if (d) {
|
|
350
356
|
e.plot.dataset.grouped = "";
|
|
351
|
-
let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s =
|
|
357
|
+
let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = xe(e.plot, t, (e) => ({
|
|
352
358
|
size: Y(e).height * r,
|
|
353
359
|
room: x.size + x.gap * .5
|
|
354
360
|
}), "--tablechart-fit");
|
|
@@ -360,8 +366,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
360
366
|
return;
|
|
361
367
|
}
|
|
362
368
|
let d = k(l.value), f = y(o) + x.offset(c);
|
|
363
|
-
a.appendChild(
|
|
364
|
-
class:
|
|
369
|
+
a.appendChild(I("rect", {
|
|
370
|
+
class: L(i, t),
|
|
365
371
|
"data-kind": "bar",
|
|
366
372
|
"data-row": o + 1,
|
|
367
373
|
"data-grow": "right",
|
|
@@ -369,12 +375,12 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
369
375
|
y: f,
|
|
370
376
|
width: Math.max(d - p, 1),
|
|
371
377
|
height: x.size,
|
|
372
|
-
...
|
|
373
|
-
})), u.dataset.place = "after", u.toggleAttribute("data-left-out", !s),
|
|
378
|
+
...fe(e, t, c)
|
|
379
|
+
})), u.dataset.place = "after", u.toggleAttribute("data-left-out", !s), z(u, d + w, f + x.size / 2, j, n);
|
|
374
380
|
});
|
|
375
381
|
let l = c[o];
|
|
376
|
-
l &&
|
|
377
|
-
}), a.appendChild(
|
|
382
|
+
l && z(l, p - 8 * r, y(o), j, n);
|
|
383
|
+
}), a.appendChild(I("line", {
|
|
378
384
|
class: o,
|
|
379
385
|
x1: p,
|
|
380
386
|
x2: p,
|
|
@@ -383,11 +389,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
383
389
|
}));
|
|
384
390
|
return;
|
|
385
391
|
}
|
|
386
|
-
let A = t.map((e, t) =>
|
|
392
|
+
let A = t.map((e, t) => be(s[t], k(e.value) - p, r));
|
|
387
393
|
t.forEach((t, o) => {
|
|
388
394
|
let l = k(t.value), u = y(o);
|
|
389
|
-
a.appendChild(
|
|
390
|
-
class:
|
|
395
|
+
a.appendChild(I("rect", {
|
|
396
|
+
class: L(i, t),
|
|
391
397
|
"data-kind": t.kind,
|
|
392
398
|
"data-row": o + 1,
|
|
393
399
|
"data-grow": "right",
|
|
@@ -398,10 +404,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
398
404
|
style: N("--i", t.slot)
|
|
399
405
|
}));
|
|
400
406
|
let d = s[o], f = Math.max(Math.min(w, l - p - T(d) - 6 * r), 6 * r);
|
|
401
|
-
d.dataset.place = A[o] ? "inside" : "after", d.dataset.kind = t.kind,
|
|
407
|
+
d.dataset.place = A[o] ? "inside" : "after", d.dataset.kind = t.kind, z(d, A[o] ? e.insideAlign === "center" ? (p + l) / 2 : e.insideAlign === "start" ? p + f + T(d) / 2 : l - f - T(d) / 2 : l + w, u, j, n);
|
|
402
408
|
let m = c[o];
|
|
403
|
-
m &&
|
|
404
|
-
}), a.appendChild(
|
|
409
|
+
m && z(m, p - 8 * r, u, j, n);
|
|
410
|
+
}), a.appendChild(I("line", {
|
|
405
411
|
class: o,
|
|
406
412
|
x1: p,
|
|
407
413
|
x2: p,
|
|
@@ -409,7 +415,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
409
415
|
y2: n
|
|
410
416
|
}));
|
|
411
417
|
}
|
|
412
|
-
},
|
|
418
|
+
}, we = {
|
|
413
419
|
segments: (e) => e.map((e) => ({
|
|
414
420
|
...e,
|
|
415
421
|
from: 0,
|
|
@@ -426,8 +432,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
426
432
|
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);
|
|
427
433
|
if (e.stacked) {
|
|
428
434
|
e.rows.forEach((t, i) => {
|
|
429
|
-
let o =
|
|
430
|
-
|
|
435
|
+
let o = ge(e, t, i), l = n(i) - a / 2;
|
|
436
|
+
pe(t, e.series.length).forEach(({ from: t, to: u, cell: d }, f) => {
|
|
431
437
|
let p = e.seriesValues[f][i];
|
|
432
438
|
if (p.dataset.place = "none", d.missing || u === t) return;
|
|
433
439
|
let m = r(u), h = r(t);
|
|
@@ -436,11 +442,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
436
442
|
y: m,
|
|
437
443
|
width: a,
|
|
438
444
|
height: Math.max(h - m, 1)
|
|
439
|
-
}), p.dataset.place = "inside", p.toggleAttribute("data-left-out", !
|
|
445
|
+
}), 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);
|
|
440
446
|
});
|
|
441
|
-
let u = e.totals[i], d =
|
|
442
|
-
u && (u.dataset.place = "outside",
|
|
443
|
-
}), l.appendChild(
|
|
447
|
+
let u = e.totals[i], d = pe(t, e.series.length).at(-1)?.to ?? 0;
|
|
448
|
+
u && (u.dataset.place = "outside", z(u, n(i), r(d) - 4 * c, j, s));
|
|
449
|
+
}), l.appendChild(I("line", {
|
|
444
450
|
class: o,
|
|
445
451
|
x1: 0,
|
|
446
452
|
x2: j,
|
|
@@ -450,9 +456,9 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
450
456
|
return;
|
|
451
457
|
}
|
|
452
458
|
if (e.series.length > 1) {
|
|
453
|
-
let t =
|
|
459
|
+
let t = de(n(1) - n(0) || n(0) * 2, e.series.length, e.barMax);
|
|
454
460
|
e.plot.dataset.grouped = "";
|
|
455
|
-
let a = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), u =
|
|
461
|
+
let a = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), u = xe(e.plot, a, (e) => ({
|
|
456
462
|
size: Y(e).width * c,
|
|
457
463
|
room: t.size + t.gap * .5
|
|
458
464
|
}), "--tablechart-fit");
|
|
@@ -464,18 +470,18 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
464
470
|
return;
|
|
465
471
|
}
|
|
466
472
|
let _ = r(m.value);
|
|
467
|
-
l.appendChild(
|
|
468
|
-
class:
|
|
473
|
+
l.appendChild(I("rect", {
|
|
474
|
+
class: L(i, a),
|
|
469
475
|
"data-kind": "bar",
|
|
470
476
|
"data-row": o + 1,
|
|
471
477
|
x: g,
|
|
472
478
|
y: _,
|
|
473
479
|
width: t.size,
|
|
474
480
|
height: Math.max(p - _, 1),
|
|
475
|
-
...
|
|
476
|
-
})), h.dataset.place = "outside", h.toggleAttribute("data-left-out", !u),
|
|
481
|
+
...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);
|
|
477
483
|
});
|
|
478
|
-
}), l.appendChild(
|
|
484
|
+
}), l.appendChild(I("line", {
|
|
479
485
|
class: o,
|
|
480
486
|
x1: 0,
|
|
481
487
|
x2: j,
|
|
@@ -484,16 +490,16 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
484
490
|
}));
|
|
485
491
|
return;
|
|
486
492
|
}
|
|
487
|
-
let m =
|
|
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;
|
|
488
494
|
for (let [e, t] of u.entries()) h[e] && (_ = Math.min(_, (a - Y(t).width * c) / 2));
|
|
489
495
|
t.forEach((e, t) => {
|
|
490
496
|
let o = r(e.value);
|
|
491
497
|
if (e.missing) {
|
|
492
|
-
|
|
498
|
+
z(u[t], n(t), p - 4 * c, j, s), u[t].dataset.place = "outside";
|
|
493
499
|
return;
|
|
494
500
|
}
|
|
495
|
-
l.appendChild(
|
|
496
|
-
class:
|
|
501
|
+
l.appendChild(I("rect", {
|
|
502
|
+
class: L(i, e),
|
|
497
503
|
"data-kind": e.kind,
|
|
498
504
|
"data-row": t + 1,
|
|
499
505
|
x: n(t) - a / 2,
|
|
@@ -503,8 +509,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
503
509
|
style: N("--i", e.slot)
|
|
504
510
|
}));
|
|
505
511
|
let d = Math.min(_, (p - o - g) / 2), m = f === "center" ? (o + p) / 2 : f === "start" ? p - d - g / 2 : o + d + g / 2;
|
|
506
|
-
|
|
507
|
-
}), l.appendChild(
|
|
512
|
+
z(u[t], n(t), h[t] ? m : o - 4 * c, j, s), u[t].dataset.place = h[t] ? "inside" : "outside";
|
|
513
|
+
}), l.appendChild(I("line", {
|
|
508
514
|
class: o,
|
|
509
515
|
x1: 0,
|
|
510
516
|
x2: j,
|
|
@@ -512,7 +518,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
512
518
|
y2: p
|
|
513
519
|
}));
|
|
514
520
|
}
|
|
515
|
-
},
|
|
521
|
+
}, Te = 0, Ee = (e) => e.filter((e) => !e.isTotal), De = {
|
|
516
522
|
aspect: .66,
|
|
517
523
|
centre: !0,
|
|
518
524
|
headroom: () => 0,
|
|
@@ -523,7 +529,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
523
529
|
kind: "bar"
|
|
524
530
|
})),
|
|
525
531
|
draw({ rows: e, height: t, unit: n, labelHeight: r, svg: i, values: a, config: o, centre: s }) {
|
|
526
|
-
let c = j / 2, l = t / 2, u =
|
|
532
|
+
let c = j / 2, l = t / 2, u = Ee(e).reduce((e, t) => e + Math.abs(t.value), 0);
|
|
527
533
|
if (!u) return;
|
|
528
534
|
let d = r * 1.2 + 10 * n, m = Math.max(Math.min(j, t) / 2 - d, 10), h = m * o.ringfill, g = m - h / 2, _ = 2 * Math.PI * g, v = [], y = 0, b = 0;
|
|
529
535
|
if (e.forEach((e, o) => {
|
|
@@ -533,8 +539,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
533
539
|
return;
|
|
534
540
|
}
|
|
535
541
|
let d = Math.abs(e.value) / u * _, p = y / _ * 2 * Math.PI - Math.PI / 2;
|
|
536
|
-
v.push(p), i.appendChild(
|
|
537
|
-
class:
|
|
542
|
+
v.push(p), i.appendChild(I("circle", {
|
|
543
|
+
class: L(f, e),
|
|
538
544
|
"data-slice": b + 1,
|
|
539
545
|
"data-row": o + 1,
|
|
540
546
|
cx: c,
|
|
@@ -547,7 +553,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
547
553
|
style: `--n:${b}; --palette:var(--tablechart-color-${b + 1}); --arc:${d.toFixed(1)}; --circ:${_.toFixed(1)}; ${N("--i", e.slot)}`
|
|
548
554
|
}));
|
|
549
555
|
let x = p + d / _ * Math.PI, C = Math.cos(x), w = Math.sin(x);
|
|
550
|
-
i.appendChild(
|
|
556
|
+
i.appendChild(I("line", {
|
|
551
557
|
class: S,
|
|
552
558
|
x1: c + C * (m + 2 * n),
|
|
553
559
|
y1: l + w * (m + 2 * n),
|
|
@@ -557,47 +563,47 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
557
563
|
style: N("--i", e.slot)
|
|
558
564
|
}));
|
|
559
565
|
let T = m + 9 * n, E = Y(s).width * n / 2;
|
|
560
|
-
|
|
566
|
+
z(s, c + C * (T + Math.abs(C) * E), l + w * (T + Math.abs(w) * r * .7), j, t), s.dataset.place = "around", y += d, b += 1;
|
|
561
567
|
}), v.length > 1) {
|
|
562
|
-
let e = g - h / 2 - 1, n = g + h / 2 + 1, r = `tablechart-slices-${++
|
|
568
|
+
let e = g - h / 2 - 1, n = g + h / 2 + 1, r = `tablechart-slices-${++Te}`, a = I("mask", {
|
|
563
569
|
id: r,
|
|
564
570
|
maskUnits: "userSpaceOnUse"
|
|
565
571
|
});
|
|
566
|
-
a.appendChild(
|
|
572
|
+
a.appendChild(I("rect", {
|
|
567
573
|
x: 0,
|
|
568
574
|
y: 0,
|
|
569
575
|
width: j,
|
|
570
576
|
height: t,
|
|
571
577
|
fill: "white"
|
|
572
578
|
}));
|
|
573
|
-
for (let t of v) a.appendChild(
|
|
579
|
+
for (let t of v) a.appendChild(I("line", {
|
|
574
580
|
class: p,
|
|
575
581
|
x1: c + Math.cos(t) * e,
|
|
576
582
|
y1: l + Math.sin(t) * e,
|
|
577
583
|
x2: c + Math.cos(t) * n,
|
|
578
584
|
y2: l + Math.sin(t) * n
|
|
579
585
|
}));
|
|
580
|
-
let o =
|
|
586
|
+
let o = I("g", { mask: `url(#${r})` });
|
|
581
587
|
for (let e of Array.from(i.querySelectorAll(`.${f}`))) o.appendChild(e);
|
|
582
|
-
let s =
|
|
588
|
+
let s = I("defs");
|
|
583
589
|
s.appendChild(a), i.prepend(s, o);
|
|
584
590
|
}
|
|
585
|
-
s &&
|
|
591
|
+
s && z(s, c, l, j, t);
|
|
586
592
|
}
|
|
587
|
-
},
|
|
593
|
+
}, Oe = [
|
|
588
594
|
"circle",
|
|
589
595
|
"square",
|
|
590
596
|
"diamond"
|
|
591
|
-
],
|
|
592
|
-
let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r =
|
|
597
|
+
], ke = (e, t) => {
|
|
598
|
+
let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = Oe.find((e) => n.includes(e));
|
|
593
599
|
return {
|
|
594
|
-
shape: r ??
|
|
600
|
+
shape: r ?? Oe[Math.floor(t / 2) % Oe.length],
|
|
595
601
|
open: n.includes("open") || !n.includes("filled") && !r && t % 2 == 1
|
|
596
602
|
};
|
|
597
|
-
},
|
|
603
|
+
}, Ae = (e, t, n, r, i = {}) => {
|
|
598
604
|
if (e === "square") {
|
|
599
605
|
let e = r * .88;
|
|
600
|
-
return
|
|
606
|
+
return I("rect", {
|
|
601
607
|
x: t - e,
|
|
602
608
|
y: n - e,
|
|
603
609
|
width: e * 2,
|
|
@@ -607,19 +613,19 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
|
|
|
607
613
|
}
|
|
608
614
|
if (e === "diamond") {
|
|
609
615
|
let e = r * 1.2;
|
|
610
|
-
return
|
|
616
|
+
return I("polygon", {
|
|
611
617
|
points: `${t},${n - e} ${t + e},${n} ${t},${n + e} ${t - e},${n}`,
|
|
612
618
|
...i
|
|
613
619
|
});
|
|
614
620
|
}
|
|
615
|
-
return
|
|
621
|
+
return I("circle", {
|
|
616
622
|
cx: t,
|
|
617
623
|
cy: n,
|
|
618
624
|
r,
|
|
619
625
|
...i
|
|
620
626
|
});
|
|
621
627
|
}, X = (e) => Number(e.toFixed(2));
|
|
622
|
-
function
|
|
628
|
+
function je(e, t) {
|
|
623
629
|
let n = e.length;
|
|
624
630
|
if (n < 2) return e.map(() => 0);
|
|
625
631
|
let r = (n) => (t[n + 1] - t[n]) / (e[n + 1] - e[n] || 1), i = Array(n).fill(0);
|
|
@@ -636,17 +642,17 @@ function Ae(e, t) {
|
|
|
636
642
|
};
|
|
637
643
|
return i[0] = a(0, 1, i[1]), i[n - 1] = a(n - 2, n - 1, i[n - 2]), i;
|
|
638
644
|
}
|
|
639
|
-
function
|
|
645
|
+
function Me(e, t, n, r) {
|
|
640
646
|
let i = (t[0] - e[0]) / 3;
|
|
641
647
|
return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
|
|
642
648
|
}
|
|
643
|
-
function
|
|
644
|
-
let [i, a] =
|
|
649
|
+
function Ne(e, t, n, r) {
|
|
650
|
+
let [i, a] = Me(e, t, n, r), o = ([e, t]) => `${X(e)},${X(t)}`;
|
|
645
651
|
return `C${o(i)} ${o(a)} ${o(t)}`;
|
|
646
652
|
}
|
|
647
|
-
function
|
|
653
|
+
function Pe(e, t, n) {
|
|
648
654
|
let r = Array(e).fill(0), i = [], a = () => {
|
|
649
|
-
|
|
655
|
+
je(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
|
|
650
656
|
r[i[t]] = e;
|
|
651
657
|
}), i = [];
|
|
652
658
|
};
|
|
@@ -655,13 +661,13 @@ function Ne(e, t, n) {
|
|
|
655
661
|
}
|
|
656
662
|
//#endregion
|
|
657
663
|
//#region src/js/charts/line.ts
|
|
658
|
-
var
|
|
664
|
+
var Fe = (e) => e.map((e) => ({
|
|
659
665
|
...e,
|
|
660
666
|
from: 0,
|
|
661
667
|
to: e.value,
|
|
662
668
|
kind: "bar"
|
|
663
|
-
})),
|
|
664
|
-
segments:
|
|
669
|
+
})), Ie = (e) => ({
|
|
670
|
+
segments: Fe,
|
|
665
671
|
series: !0,
|
|
666
672
|
stackable: !0,
|
|
667
673
|
swatch: e ? "box" : void 0,
|
|
@@ -670,7 +676,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
670
676
|
draw(t) {
|
|
671
677
|
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;
|
|
672
678
|
f.style.setProperty("--tablechart-base", `${X(w)}px`);
|
|
673
|
-
let E = (e) => `--rise:${X(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 ?
|
|
679
|
+
let E = (e) => `--rise:${X(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) : 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) => {
|
|
674
680
|
if (!x) return {
|
|
675
681
|
attrs: {},
|
|
676
682
|
ink: ""
|
|
@@ -683,73 +689,73 @@ var Pe = (e) => e.map((e) => ({
|
|
|
683
689
|
},
|
|
684
690
|
ink: `--n:${t}; --m:${+!!n}; --palette:var(--tablechart-color-${t + 1}); `
|
|
685
691
|
};
|
|
686
|
-
}),
|
|
692
|
+
}), F = Math.min(C, 6), L = C > 0 ? F / (_ ? n.length : C) : 1, R = (e) => e * L, B = (e) => `--i:${X(R(e))}`, te = (e) => {
|
|
687
693
|
let t = [], r = -1;
|
|
688
694
|
return n.forEach((n, i) => {
|
|
689
695
|
O(e, i) || (r < 0 && (r = i), (i === C || O(e, i + 1)) && ((_ || i > r) && t.push([r, i]), r = -1));
|
|
690
696
|
}), t;
|
|
691
|
-
},
|
|
697
|
+
}, V = (e, t) => `--i:${X(R(e) + 1)}; --d:${X(R(_ ? t + 1 : t) - R(e))}`, ne = (e, t) => ({
|
|
692
698
|
"data-from": e + 1,
|
|
693
699
|
"data-to": t + 1,
|
|
694
700
|
..._ && { "data-flat": "" }
|
|
695
|
-
}),
|
|
701
|
+
}), H = v ? r.map((e, t) => Pe(n.length, (e) => O(t, e), (e) => N(t, e))) : [], U = v && e ? r.map((e, t) => Pe(n.length, (e) => O(t, e), (e) => [s(e), c(M(t, e))])) : [], W = (e, t, n) => {
|
|
696
702
|
let r = [];
|
|
697
703
|
return e.forEach(([i, a], o) => {
|
|
698
|
-
_ ? (r.push(`H${X(i + n * T / 2)}`), o < e.length - 1 && r.push(`V${X(e[o + 1][1])}`)) : o > 0 && r.push(t ?
|
|
704
|
+
_ ? (r.push(`H${X(i + n * T / 2)}`), o < e.length - 1 && r.push(`V${X(e[o + 1][1])}`)) : o > 0 && r.push(t ? Ne(e[o - 1], [i, a], t[o - 1], t[o]) : `L${X(i)},${X(a)}`);
|
|
699
705
|
}), r;
|
|
700
|
-
},
|
|
701
|
-
let t =
|
|
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), J = (e) => s(e) + (_ ? T / 2 : 0), re = (e) => {
|
|
707
|
+
let t = I("g", {
|
|
702
708
|
class: h,
|
|
703
709
|
...P[e].attrs,
|
|
704
710
|
...p && { "data-stacked": "" },
|
|
705
711
|
style: P[e].ink
|
|
706
|
-
}), n =
|
|
712
|
+
}), n = te(e), r = I("g", {
|
|
707
713
|
class: g,
|
|
708
|
-
style: `--rows:${X(
|
|
714
|
+
style: `--rows:${X(F + 1)}; ${n.length ? V(...n[0]) : ""}`
|
|
709
715
|
});
|
|
710
716
|
t.appendChild(r);
|
|
711
717
|
for (let [t, i] of n) {
|
|
712
|
-
let n =
|
|
713
|
-
`M${X(
|
|
714
|
-
`L${X(
|
|
715
|
-
...
|
|
716
|
-
`L${X(
|
|
717
|
-
...
|
|
718
|
+
let n = G(e, t, i, A), a = G(e, t, i, M), o = K(U, e, t, i)?.reverse() ?? null, s = [
|
|
719
|
+
`M${X(q(t))},${X(a[0][1])}`,
|
|
720
|
+
`L${X(q(t))},${X(n[0][1])}`,
|
|
721
|
+
...W(n, K(H, e, t, i), 1),
|
|
722
|
+
`L${X(J(i))},${X(a[a.length - 1][1])}`,
|
|
723
|
+
...W(a.reverse(), o, -1),
|
|
718
724
|
"Z"
|
|
719
725
|
].join(" ");
|
|
720
|
-
r.appendChild(
|
|
726
|
+
r.appendChild(I("path", {
|
|
721
727
|
d: s,
|
|
722
|
-
...
|
|
723
|
-
style:
|
|
728
|
+
...ne(t, i),
|
|
729
|
+
style: V(t, i)
|
|
724
730
|
}));
|
|
725
731
|
}
|
|
726
732
|
f.appendChild(t);
|
|
727
733
|
}, ie = (e) => {
|
|
728
734
|
let t = r[e];
|
|
729
|
-
for (let [n, r] of
|
|
730
|
-
let i =
|
|
731
|
-
f.appendChild(
|
|
735
|
+
for (let [n, r] of te(e)) {
|
|
736
|
+
let i = G(e, n, r, A), a = [`M${X(q(n))},${X(i[0][1])}`, ...W(i, K(H, e, n, r), 1)].join(" ");
|
|
737
|
+
f.appendChild(I("path", {
|
|
732
738
|
class: m,
|
|
733
739
|
...P[e].attrs,
|
|
734
740
|
d: a,
|
|
735
741
|
...t.line && { "data-line": t.line },
|
|
736
|
-
...
|
|
737
|
-
style: `${P[e].ink}${
|
|
742
|
+
...ne(n, r),
|
|
743
|
+
style: `${P[e].ink}${V(n, r)}`
|
|
738
744
|
}));
|
|
739
745
|
}
|
|
740
746
|
};
|
|
741
747
|
e && r.forEach((e, t) => re(t)), r.forEach((e, t) => ie(t)), _ || (() => {
|
|
742
|
-
let e = r.map((e, t) => x ?
|
|
748
|
+
let e = r.map((e, t) => x ? ke(r, t) : {
|
|
743
749
|
shape: "circle",
|
|
744
750
|
open: !1
|
|
745
751
|
}), t = (t, n, r) => {
|
|
746
752
|
let [i, a] = N(t, n);
|
|
747
|
-
return
|
|
753
|
+
return Ae(e[t].shape, i, a, 4 * u, {
|
|
748
754
|
...r,
|
|
749
|
-
style: `${r.style ?? ""}${E(a)}${
|
|
755
|
+
style: `${r.style ?? ""}${E(a)}${B(n)}`
|
|
750
756
|
});
|
|
751
757
|
}, i = (e) => n.map((e, t) => t).filter((t) => !O(e, t));
|
|
752
|
-
|
|
758
|
+
ee(f, r.flatMap((n, r) => e[r].open ? i(r).map((e) => t(r, e, {
|
|
753
759
|
class: b,
|
|
754
760
|
"data-row": e + 1,
|
|
755
761
|
...x && { "data-series": r + 1 }
|
|
@@ -778,7 +784,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
778
784
|
}, se = (e, t) => !p && !_ ? x && !S && r.length > 2 : Y(i[e][t]).width * u > (_ ? ae(e, t) - t + 1 : 1) * T - 4 * u ? !0 : p && c(M(e, t)) - c(A(e, t)) < d * 1.2;
|
|
779
785
|
i.forEach((e, t) => {
|
|
780
786
|
e.forEach((e, n) => {
|
|
781
|
-
e.style.setProperty("--i", String(X(_ ? (
|
|
787
|
+
e.style.setProperty("--i", String(X(_ ? (R(n) + R(n + 1)) / 2 : R(n))));
|
|
782
788
|
let r = oe(t, n);
|
|
783
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(ae(t, n) + 1) : delete e.dataset.rowEnd, r === "none") return;
|
|
784
790
|
let i = Y(e).width * u / 2 + 4 * u, a = s(n);
|
|
@@ -788,7 +794,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
788
794
|
above: -7 * u,
|
|
789
795
|
below: 7 * u
|
|
790
796
|
};
|
|
791
|
-
|
|
797
|
+
z(e, a, o + d[r], j, l);
|
|
792
798
|
});
|
|
793
799
|
});
|
|
794
800
|
let ce = a.map((e, t) => {
|
|
@@ -801,9 +807,9 @@ var Pe = (e) => e.map((e) => ({
|
|
|
801
807
|
y: p ? (i + c(M(t, n))) / 2 : i
|
|
802
808
|
};
|
|
803
809
|
}), le = (a[0] ? Y(a[0]).height : 0) * u;
|
|
804
|
-
for (let e of
|
|
810
|
+
for (let e of Se(ce, le)) z(e.name, e.x, e.y, j, l);
|
|
805
811
|
let ue = !e && !p && r.length === 2 && !S ? l - 2 * u : w;
|
|
806
|
-
f.appendChild(
|
|
812
|
+
f.appendChild(I("line", {
|
|
807
813
|
class: o,
|
|
808
814
|
x1: 0,
|
|
809
815
|
x2: s(C) + s(0),
|
|
@@ -811,20 +817,24 @@ var Pe = (e) => e.map((e) => ({
|
|
|
811
817
|
y2: ue
|
|
812
818
|
}));
|
|
813
819
|
}
|
|
814
|
-
}),
|
|
820
|
+
}), Le = Ie(!1), Re = Ie(!0), ze = /* @__PURE__ */ new Set(), Be = (t, n) => {
|
|
821
|
+
if (Math.abs(t - n) <= Math.abs(n) / 100) return;
|
|
822
|
+
let r = `[${e}] A total reads ${t}, but the steps before it add up to ${Number(n.toFixed(6))}. The chart shows what you wrote; this is only a check.`;
|
|
823
|
+
ze.has(r) || (ze.add(r), console.warn(r));
|
|
824
|
+
}, Ve = {
|
|
815
825
|
segments: (e) => {
|
|
816
|
-
let t = 0;
|
|
826
|
+
let t = 0, n = !1;
|
|
817
827
|
return e.map((e) => {
|
|
818
|
-
if (e.isTotal) return t = e.value, {
|
|
828
|
+
if (e.isTotal) return n && Be(e.value, t), n = !1, t = e.value, {
|
|
819
829
|
...e,
|
|
820
830
|
from: 0,
|
|
821
831
|
to: e.value,
|
|
822
832
|
kind: "total"
|
|
823
833
|
};
|
|
824
|
-
let
|
|
825
|
-
return t += e.value, {
|
|
834
|
+
let r = t;
|
|
835
|
+
return t += e.value, n = !0, {
|
|
826
836
|
...e,
|
|
827
|
-
from:
|
|
837
|
+
from: r,
|
|
828
838
|
to: t,
|
|
829
839
|
kind: e.value >= 0 ? "up" : "down"
|
|
830
840
|
};
|
|
@@ -833,13 +843,13 @@ var Pe = (e) => e.map((e) => ({
|
|
|
833
843
|
breakable: !0,
|
|
834
844
|
headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
|
|
835
845
|
draw({ segments: e, cx: t, y: n, barWidth: r, height: a, unit: c, svg: l, values: u, breakAt: d, closing: f, insideAlign: p }) {
|
|
836
|
-
let m = n(0), h =
|
|
846
|
+
let m = n(0), h = ve(u, r, c), g = p ?? "center", _ = e.map((t, r) => {
|
|
837
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;
|
|
838
848
|
return {
|
|
839
849
|
top: i,
|
|
840
850
|
length: a,
|
|
841
851
|
down: t.kind === "down" || t.kind === "total" && r > 0 && r === e.length - 1 && f === "down",
|
|
842
|
-
inside: !o && !h &&
|
|
852
|
+
inside: !o && !h && ye(u[r], a, c)
|
|
843
853
|
};
|
|
844
854
|
}), v = u[0] ? Y(u[0]).height * c * .56 : 0, y = Infinity;
|
|
845
855
|
for (let [e, t] of _.entries()) t.inside && (y = Math.min(y, (r - Y(u[e]).width * c) / 2));
|
|
@@ -847,7 +857,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
847
857
|
let o = e[a + 1];
|
|
848
858
|
if (!o) return;
|
|
849
859
|
let c = n(i.to), u = t(a) + r / 2, d = t(a + 1) - r / 2;
|
|
850
|
-
l.appendChild(
|
|
860
|
+
l.appendChild(I("line", {
|
|
851
861
|
class: s,
|
|
852
862
|
x1: u,
|
|
853
863
|
x2: d,
|
|
@@ -858,8 +868,8 @@ var Pe = (e) => e.map((e) => ({
|
|
|
858
868
|
}));
|
|
859
869
|
}), e.forEach((e, n) => {
|
|
860
870
|
let { top: o, length: s, down: d, inside: f } = _[n];
|
|
861
|
-
l.appendChild(
|
|
862
|
-
class:
|
|
871
|
+
l.appendChild(I("rect", {
|
|
872
|
+
class: L(i, e),
|
|
863
873
|
"data-kind": e.kind,
|
|
864
874
|
"data-row": n + 1,
|
|
865
875
|
"data-grow": d ? "down" : "up",
|
|
@@ -872,8 +882,8 @@ var Pe = (e) => e.map((e) => ({
|
|
|
872
882
|
let p = u[n], m = Math.min(y, (s - v) / 2), h = o + m + v / 2, b = o + s - m - v / 2, x = g === "center" ? o + s / 2 : g === "end" === d ? b : h;
|
|
873
883
|
p.dataset.place = f ? "inside" : "outside", p.dataset.kind = e.kind;
|
|
874
884
|
let S = f ? x : e.kind === "down" ? o + s + Y(p).height * c + 3 * c : o - 3 * c;
|
|
875
|
-
|
|
876
|
-
}), l.appendChild(
|
|
885
|
+
z(p, t(n), S, j, a);
|
|
886
|
+
}), l.appendChild(I("line", {
|
|
877
887
|
class: o,
|
|
878
888
|
x1: 0,
|
|
879
889
|
x2: j,
|
|
@@ -891,7 +901,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
891
901
|
let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
|
|
892
902
|
return o > 50 ? console.warn(`[${e}] ${t} took ${o.toFixed(1)} ms for ${s} rows, more than 50 ms.`, n) : Z.log(`${t} took ${o.toFixed(1)} ms for ${s} rows.`, n), a;
|
|
893
903
|
}
|
|
894
|
-
},
|
|
904
|
+
}, He = (e) => {
|
|
895
905
|
let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
|
|
896
906
|
return {
|
|
897
907
|
raw: t,
|
|
@@ -901,9 +911,9 @@ var Pe = (e) => e.map((e) => ({
|
|
|
901
911
|
missing: !n,
|
|
902
912
|
value: n ? Number.parseFloat(n[2].replace(",", ".")) : 0
|
|
903
913
|
};
|
|
904
|
-
},
|
|
905
|
-
let r = e.querySelector("th"), i = Array.from(e.querySelectorAll("td")).map(
|
|
906
|
-
return i.length || i.push(
|
|
914
|
+
}, Ue = (e, t = "data-i18n") => Array.from(e.querySelectorAll("tbody tr")).map((e, n) => {
|
|
915
|
+
let r = e.querySelector("th"), i = Array.from(e.querySelectorAll("td")).map(He);
|
|
916
|
+
return i.length || i.push(He(null)), {
|
|
907
917
|
...i[0],
|
|
908
918
|
label: (r?.textContent || "").trim(),
|
|
909
919
|
key: t && r?.getAttribute(t) || null,
|
|
@@ -912,8 +922,8 @@ var Pe = (e) => e.map((e) => ({
|
|
|
912
922
|
isTotal: e.getAttribute("data-kind") === "total",
|
|
913
923
|
slot: n
|
|
914
924
|
};
|
|
915
|
-
}),
|
|
916
|
-
let r =
|
|
925
|
+
}), 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, H(t.map((e) => e.cells.length)));
|
|
917
927
|
return Array.from({ length: i }, (e, t) => {
|
|
918
928
|
let i = r[t];
|
|
919
929
|
return {
|
|
@@ -921,10 +931,10 @@ var Pe = (e) => e.map((e) => ({
|
|
|
921
931
|
key: n && i?.getAttribute(n) || null,
|
|
922
932
|
focus: i?.getAttribute("data-kind") === "focus",
|
|
923
933
|
marker: i?.getAttribute("data-marker") ?? null,
|
|
924
|
-
line:
|
|
934
|
+
line: Ge(i?.getAttribute("data-line"))
|
|
925
935
|
};
|
|
926
936
|
});
|
|
927
|
-
},
|
|
937
|
+
}, qe = (t, n) => {
|
|
928
938
|
if (!n) return;
|
|
929
939
|
let r = /* @__PURE__ */ new Map();
|
|
930
940
|
for (let i of t) {
|
|
@@ -937,98 +947,145 @@ var Pe = (e) => e.map((e) => ({
|
|
|
937
947
|
i.querySelectorAll("tbody th").forEach((e, r) => {
|
|
938
948
|
e.getAttribute(n) || e.setAttribute(n, `${t}-row${r + 1}`);
|
|
939
949
|
});
|
|
940
|
-
let a =
|
|
950
|
+
let a = We(i);
|
|
941
951
|
a.length > 1 && a.forEach((e, r) => {
|
|
942
952
|
e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
|
|
943
953
|
}), Z?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
|
|
944
954
|
}
|
|
945
|
-
},
|
|
955
|
+
}, Je = [
|
|
946
956
|
"axis-break",
|
|
947
957
|
"trend",
|
|
948
958
|
"bracket"
|
|
949
|
-
],
|
|
950
|
-
let t = e.hasAttribute("data-fragment"), n = Array.from(e.querySelectorAll("tbody tr")), r = Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), i = Array.from(e.querySelectorAll("[data-annotation]")).filter((e) =>
|
|
951
|
-
if (!t && !n.some(a) && !r.some(a) && !i.some(a)) return null;
|
|
952
|
-
let
|
|
953
|
-
let t = e === null ? void 0 :
|
|
954
|
-
return t === void 0 && (t =
|
|
955
|
-
},
|
|
959
|
+
], Ye = (e) => {
|
|
960
|
+
let t = e.hasAttribute("data-fragment"), n = Array.from(e.querySelectorAll("tbody tr")), r = Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), i = Array.from(e.querySelectorAll("[data-annotation]")).filter((e) => Je.includes(e.getAttribute("data-annotation") ?? "")), a = (e) => e.hasAttribute("data-fragment"), o = n.map((e) => Array.from(e.querySelectorAll(":scope > td")));
|
|
961
|
+
if (!t && !n.some(a) && !r.some(a) && !o.flat().some(a) && !i.some(a)) return null;
|
|
962
|
+
let s = [], c = /* @__PURE__ */ new Map(), l = [], u = (e) => {
|
|
963
|
+
let t = e === null ? void 0 : c.get(e);
|
|
964
|
+
return t === void 0 && (t = s.length, s.push(e), l.push(0), e !== null && c.set(e, t)), t;
|
|
965
|
+
}, d = 0, f = e.getAttribute("data-chart") === "donut", p = (e) => f && e.getAttribute("data-kind") === "total", m = n.map((e) => {
|
|
966
|
+
if (p(e)) return {
|
|
967
|
+
step: null,
|
|
968
|
+
slot: 0
|
|
969
|
+
};
|
|
956
970
|
if (!t && !a(e)) return {
|
|
957
971
|
step: null,
|
|
958
|
-
slot:
|
|
972
|
+
slot: d++
|
|
959
973
|
};
|
|
960
|
-
let n =
|
|
974
|
+
let n = u(e.getAttribute("data-fragment-index"));
|
|
961
975
|
return {
|
|
962
976
|
step: n,
|
|
963
|
-
slot:
|
|
977
|
+
slot: l[n]++
|
|
978
|
+
};
|
|
979
|
+
}), h = Math.max(-1, ...m.map((e) => e.step ?? -1));
|
|
980
|
+
if (h >= 0) for (let [e, t] of n.entries()) p(t) && (m[e] = {
|
|
981
|
+
step: h,
|
|
982
|
+
slot: l[h]++
|
|
983
|
+
});
|
|
984
|
+
let g = r.map((e) => ({ step: a(e) ? u(e.getAttribute("data-fragment-index")) : null })), _ = o.map((e) => e.map(() => ({
|
|
985
|
+
step: null,
|
|
986
|
+
slot: 0
|
|
987
|
+
}))), v = Math.max(0, ...o.map((e) => e.length));
|
|
988
|
+
for (let e = 0; e < v; e++) for (let [t, n] of o.entries()) {
|
|
989
|
+
let r = n[e];
|
|
990
|
+
if (!r || !a(r)) continue;
|
|
991
|
+
let i = u(r.getAttribute("data-fragment-index"));
|
|
992
|
+
_[t][e] = {
|
|
993
|
+
step: i,
|
|
994
|
+
slot: l[i]++
|
|
964
995
|
};
|
|
965
|
-
}
|
|
996
|
+
}
|
|
966
997
|
return {
|
|
967
|
-
rows:
|
|
968
|
-
series:
|
|
998
|
+
rows: m,
|
|
999
|
+
series: g,
|
|
1000
|
+
cells: _,
|
|
969
1001
|
notes: i.map((e) => {
|
|
970
1002
|
let t = (t, n) => {
|
|
971
1003
|
let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
|
|
972
1004
|
return Number.isFinite(r) ? r - 1 : n;
|
|
973
|
-
}, [n, r] = e.getAttribute("data-annotation") === "bracket" ? [t("data-from", 0), t("data-to",
|
|
974
|
-
for (let e = Math.min(n, r); e <= Math.max(n, r); e++)
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
let o = f[t("data-series", 0)]?.step ?? null;
|
|
979
|
-
o !== null && (i === null || o > i) && (i = o), a(e) && (i = l(e.getAttribute("data-fragment-index")));
|
|
980
|
-
let s = i === null ? d.length : d.filter((e) => e.step === i).length;
|
|
1005
|
+
}, [n, r] = e.getAttribute("data-annotation") === "bracket" ? [t("data-from", 0), t("data-to", m.length - 1)] : [0, m.length - 1], i = null;
|
|
1006
|
+
for (let e = Math.min(n, r); e <= Math.max(n, r); e++) for (let t of [m[e]?.step ?? null, ...(_[e] ?? []).map((e) => e.step)]) t !== null && (i === null || t > i) && (i = t);
|
|
1007
|
+
let o = g[t("data-series", 0)]?.step ?? null;
|
|
1008
|
+
o !== null && (i === null || o > i) && (i = o), a(e) && (i = u(e.getAttribute("data-fragment-index")));
|
|
1009
|
+
let s = i === null ? m.length : m.filter((e) => e.step === i).length;
|
|
981
1010
|
return {
|
|
982
1011
|
step: i,
|
|
983
1012
|
after: s
|
|
984
1013
|
};
|
|
985
1014
|
}),
|
|
986
|
-
count:
|
|
987
|
-
indexes:
|
|
1015
|
+
count: s.length,
|
|
1016
|
+
indexes: s
|
|
988
1017
|
};
|
|
989
|
-
},
|
|
1018
|
+
}, Xe = (e) => {
|
|
990
1019
|
let t = e.plan;
|
|
991
1020
|
if (!t) return;
|
|
992
1021
|
let n = (t) => t === null || e.step - t >= 1;
|
|
993
1022
|
for (let r of e.figure.querySelectorAll("[data-from]")) {
|
|
994
|
-
let e = Number(r.dataset.from) - 1, i = Number(r.dataset.to) - 1, a = r.closest("[data-series]")?.dataset.series, o = a ?
|
|
995
|
-
if (
|
|
996
|
-
else for (;
|
|
997
|
-
let
|
|
998
|
-
r.style.setProperty("--reveal", String(
|
|
1023
|
+
let e = Number(r.dataset.from) - 1, i = Number(r.dataset.to) - 1, a = r.closest("[data-series]")?.dataset.series, o = a ? Number(a) - 1 : 0, s = t.series[o], c = (e) => t.cells[e]?.[o]?.step ?? t.rows[e]?.step ?? null, l = e - 1;
|
|
1024
|
+
if (s && s.step !== null) l = n(s.step) ? i : e - 1;
|
|
1025
|
+
else for (; l < i && n(c(l + 1));) l++;
|
|
1026
|
+
let u = r.hasAttribute("data-flat") ? (l - e + 1) / (i - e + 1) : i > e ? Math.max(0, l - e) / (i - e) : 0;
|
|
1027
|
+
r.style.setProperty("--reveal", String(u));
|
|
999
1028
|
}
|
|
1000
|
-
},
|
|
1029
|
+
}, Ze = (e) => {
|
|
1001
1030
|
let t = e.plan;
|
|
1002
1031
|
if (!t) return;
|
|
1003
|
-
let n = t.rows.length - 1, r = (e
|
|
1032
|
+
let n = t.rows.length - 1, r = (e) => t.series.map((n, r) => t.cells[e]?.[r]?.step ?? n.step ?? t.rows[e]?.step ?? null), i = (e) => {
|
|
1033
|
+
let t = r(e);
|
|
1034
|
+
return t.some((e) => e === null) ? null : Math.min(...t);
|
|
1035
|
+
}, a = new Set(e.totals), o = (e, t, n, r) => {
|
|
1004
1036
|
e.style.setProperty(n, String(r)), e.style.removeProperty("--d"), t === null ? e.style.removeProperty("--step") : e.style.setProperty("--step", String(t));
|
|
1005
1037
|
};
|
|
1006
|
-
for (let
|
|
1007
|
-
if (
|
|
1008
|
-
let e = Number(
|
|
1038
|
+
for (let s of e.figure.querySelectorAll("[data-row], [data-series], [data-note]")) {
|
|
1039
|
+
if (s.closest("table, .tablechart-controls") || s.hasAttribute("data-from")) continue;
|
|
1040
|
+
let e = Number(s.dataset.note);
|
|
1009
1041
|
if (e > 0) {
|
|
1010
1042
|
let n = t.notes[e - 1];
|
|
1011
|
-
n &&
|
|
1043
|
+
n && o(s, n.step, "--after", n.after);
|
|
1012
1044
|
continue;
|
|
1013
1045
|
}
|
|
1014
|
-
let
|
|
1015
|
-
if (
|
|
1016
|
-
let e = t.rows[
|
|
1046
|
+
let c = s.dataset.row ? Number(s.dataset.row) - 1 : n;
|
|
1047
|
+
if (s.classList.contains("tablechart-connector")) {
|
|
1048
|
+
let e = t.rows[c - 1], n = t.rows[c];
|
|
1017
1049
|
if (e && n) {
|
|
1018
1050
|
let t = (e.step ?? -1) > (n.step ?? -1);
|
|
1019
|
-
|
|
1051
|
+
o(s, t ? e.step : n.step, "--i", t ? e.slot + 1 : n.slot);
|
|
1020
1052
|
}
|
|
1021
1053
|
continue;
|
|
1022
1054
|
}
|
|
1023
|
-
|
|
1024
|
-
|
|
1055
|
+
if (a.has(s)) {
|
|
1056
|
+
let e = r(c).filter((e) => e !== null);
|
|
1057
|
+
o(s, e.length ? Math.max(...e) : null, "--i", t.rows[c]?.slot ?? 0);
|
|
1058
|
+
continue;
|
|
1059
|
+
}
|
|
1060
|
+
if (s.hasAttribute("data-stack")) {
|
|
1061
|
+
o(s, i(c), "--i", t.rows[c]?.slot ?? 0);
|
|
1062
|
+
continue;
|
|
1063
|
+
}
|
|
1064
|
+
let l = s.dataset.series ? Number(s.dataset.series) - 1 : 0, u = s.dataset.series ? t.series[l] : void 0;
|
|
1065
|
+
if (s.classList.contains("tablechart-piece")) {
|
|
1066
|
+
let e = r(c)[l] ?? null, n = t.cells[c]?.[l];
|
|
1067
|
+
o(s, e === i(c) ? null : e, "--i", n && n.step !== null ? n.slot : c);
|
|
1068
|
+
continue;
|
|
1069
|
+
}
|
|
1070
|
+
if (s.dataset.place === "legend") {
|
|
1071
|
+
let e = Math.min(...t.cells.map((e) => e[l]?.step ?? Infinity));
|
|
1072
|
+
o(s, u?.step ?? (Number.isFinite(e) ? e : null), "--i", 0);
|
|
1073
|
+
continue;
|
|
1074
|
+
}
|
|
1075
|
+
let d = t.cells[c]?.[l];
|
|
1076
|
+
d && d.step !== null ? o(s, d.step, "--i", d.slot) : u && u.step !== null ? o(s, u.step, "--i", c) : t.rows[c] && o(s, t.rows[c].step, "--i", t.rows[c].slot);
|
|
1077
|
+
}
|
|
1078
|
+
let s = e.figure.querySelector(`.${x}`);
|
|
1079
|
+
if (s) {
|
|
1080
|
+
let e = [...t.rows, ...t.cells.flat()].map((e) => e.step ?? -1), n = Math.max(-1, ...e);
|
|
1081
|
+
n < 0 ? o(s, null, "--i", 0) : o(s, n, "--i", e.filter((e) => e === n).length);
|
|
1025
1082
|
}
|
|
1026
|
-
|
|
1083
|
+
Xe(e);
|
|
1027
1084
|
}, Q = (e, t, n = !1) => {
|
|
1028
1085
|
let r = e.plan;
|
|
1029
1086
|
if (!r) return;
|
|
1030
1087
|
let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
|
|
1031
|
-
e.step = i, e.figure.style.setProperty("--tablechart-step", String(i)),
|
|
1088
|
+
e.step = i, e.figure.style.setProperty("--tablechart-step", String(i)), Xe(e);
|
|
1032
1089
|
let [o, s] = e.controls?.querySelectorAll("button") ?? [];
|
|
1033
1090
|
o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
|
|
1034
1091
|
bubbles: !0,
|
|
@@ -1037,7 +1094,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1037
1094
|
steps: r.count
|
|
1038
1095
|
}
|
|
1039
1096
|
}));
|
|
1040
|
-
},
|
|
1097
|
+
}, Qe = (e, t, n) => {
|
|
1041
1098
|
let r = document.createElement("div");
|
|
1042
1099
|
r.className = A;
|
|
1043
1100
|
let i = (r) => {
|
|
@@ -1045,11 +1102,11 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1045
1102
|
i.type = "button", i.className = `tablechart-${r}`, i.dataset.go = r;
|
|
1046
1103
|
let a = document.createElement("span");
|
|
1047
1104
|
a.className = "tablechart-control-icon", a.setAttribute("aria-hidden", "true");
|
|
1048
|
-
let o =
|
|
1105
|
+
let o = I("svg", {
|
|
1049
1106
|
viewBox: "0 0 16 16",
|
|
1050
1107
|
focusable: "false"
|
|
1051
1108
|
});
|
|
1052
|
-
o.appendChild(
|
|
1109
|
+
o.appendChild(I("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
|
|
1053
1110
|
let s = document.createElement("span");
|
|
1054
1111
|
s.className = "tablechart-control-label", s.textContent = e[r];
|
|
1055
1112
|
let c = t[r];
|
|
@@ -1066,35 +1123,35 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1066
1123
|
]), i;
|
|
1067
1124
|
};
|
|
1068
1125
|
return r.append(i("previous"), i("next")), r;
|
|
1069
|
-
},
|
|
1070
|
-
area:
|
|
1071
|
-
bar:
|
|
1072
|
-
column:
|
|
1073
|
-
donut:
|
|
1074
|
-
line:
|
|
1075
|
-
waterfall:
|
|
1076
|
-
},
|
|
1077
|
-
"axis-break":
|
|
1078
|
-
trend:
|
|
1079
|
-
bracket:
|
|
1080
|
-
},
|
|
1126
|
+
}, $e = {
|
|
1127
|
+
area: Re,
|
|
1128
|
+
bar: Ce,
|
|
1129
|
+
column: we,
|
|
1130
|
+
donut: De,
|
|
1131
|
+
line: Le,
|
|
1132
|
+
waterfall: Ve
|
|
1133
|
+
}, et = {
|
|
1134
|
+
"axis-break": ne,
|
|
1135
|
+
trend: le,
|
|
1136
|
+
bracket: ae
|
|
1137
|
+
}, tt = Object.keys(et), nt = (e) => {
|
|
1081
1138
|
let t = "";
|
|
1082
1139
|
for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
|
|
1083
1140
|
return t.trim();
|
|
1084
|
-
},
|
|
1141
|
+
}, rt = [
|
|
1085
1142
|
"straight",
|
|
1086
1143
|
"step",
|
|
1087
1144
|
"smooth"
|
|
1088
|
-
],
|
|
1145
|
+
], it = (e, t) => {
|
|
1089
1146
|
let n = e.dataset.chartShape;
|
|
1090
|
-
return n &&
|
|
1091
|
-
},
|
|
1147
|
+
return n && rt.includes(n) ? n : rt.includes(t.shape) ? t.shape : "straight";
|
|
1148
|
+
}, at = (e) => {
|
|
1092
1149
|
for (let t of e.querySelectorAll("br")) {
|
|
1093
|
-
if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(
|
|
1150
|
+
if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(nt(t))) continue;
|
|
1094
1151
|
let e = document.createElement("span");
|
|
1095
1152
|
e.className = E, e.textContent = ". ", t.before(e);
|
|
1096
1153
|
}
|
|
1097
|
-
},
|
|
1154
|
+
}, ot = (e, t, n) => {
|
|
1098
1155
|
let r = e.querySelector("table");
|
|
1099
1156
|
if (!r) return null;
|
|
1100
1157
|
let i = r.querySelector("tfoot [data-chart-total]");
|
|
@@ -1105,23 +1162,23 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1105
1162
|
s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
|
|
1106
1163
|
let c = a.insertCell();
|
|
1107
1164
|
return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
|
|
1108
|
-
},
|
|
1165
|
+
}, st = 0, ct = (e) => {
|
|
1109
1166
|
let t = e.querySelector(":scope > figcaption");
|
|
1110
1167
|
if (!t) return;
|
|
1111
|
-
|
|
1168
|
+
at(t);
|
|
1112
1169
|
let n = (e) => e.hasAttribute("aria-label") || e.hasAttribute("aria-labelledby"), r = (e) => {
|
|
1113
|
-
t.id || (t.id = `tablechart-caption-${++
|
|
1170
|
+
t.id || (t.id = `tablechart-caption-${++st}`), e.setAttribute("aria-labelledby", t.id);
|
|
1114
1171
|
};
|
|
1115
1172
|
e.tagName === "FIGURE" && !n(e) && r(e);
|
|
1116
1173
|
let i = e.querySelector("table");
|
|
1117
1174
|
i && !n(i) && !i.querySelector(":scope > caption") && r(i);
|
|
1118
|
-
},
|
|
1119
|
-
let s = o ?? (i.getAttribute("data-chart") || "column"), c =
|
|
1120
|
-
if (!c) return console.warn(`[${e}] Unknown chart type "${s}". Known types: ${Object.keys(
|
|
1121
|
-
let l =
|
|
1175
|
+
}, lt = (i, a, o = null) => {
|
|
1176
|
+
let s = o ?? (i.getAttribute("data-chart") || "column"), c = $e[s];
|
|
1177
|
+
if (!c) return console.warn(`[${e}] Unknown chart type "${s}". Known types: ${Object.keys($e).join(", ")}.`), i.setAttribute("data-chart-empty", ""), null;
|
|
1178
|
+
let l = Ue(i, a.langattribute);
|
|
1122
1179
|
if (!l.length) return console.warn(`[${e}] A chart has no rows in its table, so there is nothing to draw.`), i.setAttribute("data-chart-empty", ""), null;
|
|
1123
|
-
|
|
1124
|
-
let u =
|
|
1180
|
+
ct(i);
|
|
1181
|
+
let u = Ke(i, l, a.langattribute);
|
|
1125
1182
|
u.length > 1 && !c.series && (console.warn(`[${e}] A ${s} chart draws one series; only the first of the table's ${u.length} value columns is used.`), u = u.slice(0, 1));
|
|
1126
1183
|
let d = u.length > 1;
|
|
1127
1184
|
d && i.style.setProperty("--tablechart-series-count", String(u.length));
|
|
@@ -1131,36 +1188,36 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1131
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.`);
|
|
1132
1189
|
let m = document.createElement("div");
|
|
1133
1190
|
m.className = t, m.setAttribute("aria-hidden", "true");
|
|
1134
|
-
let h =
|
|
1191
|
+
let h = I("svg", {
|
|
1135
1192
|
role: "presentation",
|
|
1136
1193
|
focusable: "false"
|
|
1137
1194
|
});
|
|
1138
1195
|
m.appendChild(h), i.appendChild(m);
|
|
1139
|
-
let g = c.centre ? l.filter((e) => !e.isTotal) : l, y = Math.max(0,
|
|
1140
|
-
let i = e.cells[t] ?? e.cells[0], a =
|
|
1196
|
+
let g = c.centre ? l.filter((e) => !e.isTotal) : l, y = Math.max(0, H(g.flatMap((e) => e.cells.slice(0, u.length).map((e) => U(e.number))))), b = u.map((e, t) => l.map((e, n) => {
|
|
1197
|
+
let i = e.cells[t] ?? e.cells[0], a = R(r, m);
|
|
1141
1198
|
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;
|
|
1142
1199
|
})), S = b[0], C = p && c.totals ? l.map((e, t) => {
|
|
1143
|
-
let n =
|
|
1144
|
-
n.classList.add(...e.classes), n.dataset.kind = "total", n.dataset.row = String(t + 1), n.dataset.value = String(
|
|
1200
|
+
let n = R(r, m);
|
|
1201
|
+
n.classList.add(...e.classes), n.dataset.kind = "total", n.dataset.row = String(t + 1), n.dataset.value = String(me(e, u.length));
|
|
1145
1202
|
let i = e.cells[0];
|
|
1146
1203
|
return i.prefix && (n.dataset.prefix = i.prefix), i.suffix && (n.dataset.suffix = i.suffix), n.style.setProperty("--i", String(e.slot)), n;
|
|
1147
1204
|
}) : [], w = l[l.length - 1], T = u.some((e) => e.focus), E = i.getAttribute("data-chart-legend"), D = d && (E === null ? a.legend || c.legend !== void 0 : E !== "false") ? document.createElement("div") : null;
|
|
1148
1205
|
D && (D.className = v, D.setAttribute("aria-hidden", "true"), D.inert = !0);
|
|
1149
1206
|
let O = d ? u.map((e, t) => {
|
|
1150
|
-
let n =
|
|
1207
|
+
let n = R(_, D ?? m);
|
|
1151
1208
|
D && (n.dataset.place = "legend");
|
|
1152
1209
|
let r = c.legend ?? c.swatch;
|
|
1153
|
-
if (r && (n.dataset.swatch = r), n.textContent = e.name, !r &&
|
|
1154
|
-
let e =
|
|
1210
|
+
if (r && (n.dataset.swatch = r), n.textContent = e.name, !r && it(i, a) !== "step") {
|
|
1211
|
+
let e = ke(u, t);
|
|
1155
1212
|
n.dataset.marker = e.shape, n.toggleAttribute("data-open", e.open);
|
|
1156
1213
|
}
|
|
1157
1214
|
return e.line && !r && (n.dataset.line = e.line), e.key && a.langattribute && n.setAttribute(a.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", T && !e.focus ? "1" : "0"), n.style.setProperty("--i", String(w.slot)), n;
|
|
1158
|
-
}) : [], k = c.centre ?
|
|
1215
|
+
}) : [], k = c.centre ? R(x, m) : null;
|
|
1159
1216
|
if (k) {
|
|
1160
1217
|
let e = l.find((e) => e.isTotal), t = e ? e.value : l.reduce((e, t) => e + Math.abs(t.value), 0);
|
|
1161
|
-
k.dataset.value = String(t), e && (k.dataset.decimals = String(
|
|
1218
|
+
k.dataset.value = String(t), e && (k.dataset.decimals = String(U(e.number)));
|
|
1162
1219
|
}
|
|
1163
|
-
let A = k && !l.some((e) => e.isTotal) ?
|
|
1220
|
+
let A = k && !l.some((e) => e.isTotal) ? ot(i, k, a) : null, j = c.categories === "beside", M = document.createElement("div");
|
|
1164
1221
|
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));
|
|
1165
1222
|
let N = 0;
|
|
1166
1223
|
for (let [e, t] of l.entries()) {
|
|
@@ -1168,21 +1225,21 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1168
1225
|
n.classList.add(...t.classes), n.textContent = t.label, t.key && a.langattribute && n.setAttribute(a.langattribute, t.key), c.centre && (n.dataset.kind = t.isTotal ? "total" : "slice", t.isTotal || (n.dataset.slice = String(N + 1), n.style.setProperty("--n", String(N)), n.style.setProperty("--palette", `var(--tablechart-color-${N + 1})`), N += 1)), n.style.setProperty("--i", String(t.slot)), n.dataset.row = String(e + 1), M.appendChild(n);
|
|
1169
1226
|
}
|
|
1170
1227
|
(j ? m : i).appendChild(M), D && i.appendChild(D);
|
|
1171
|
-
let P = a.animate ?
|
|
1228
|
+
let P = a.animate ? Ye(i) : null;
|
|
1172
1229
|
P && (i.setAttribute("data-steps", ""), i.setAttribute("data-chart-animate", "across"));
|
|
1173
|
-
let
|
|
1230
|
+
let F = i.getAttribute("data-chart-keys"), L = P && a.controls ? Qe({
|
|
1174
1231
|
previous: a.previouslabel,
|
|
1175
1232
|
next: a.nextlabel,
|
|
1176
1233
|
hint: a.stephint
|
|
1177
1234
|
}, {
|
|
1178
|
-
previous:
|
|
1179
|
-
next:
|
|
1180
|
-
hint:
|
|
1235
|
+
previous: F && `${F}-previous`,
|
|
1236
|
+
next: F && `${F}-next`,
|
|
1237
|
+
hint: F && `${F}-step`
|
|
1181
1238
|
}, a.langattribute) : null;
|
|
1182
|
-
|
|
1239
|
+
L && i.appendChild(L);
|
|
1183
1240
|
let z = Array.from(i.querySelectorAll("[data-annotation]")).map((t) => {
|
|
1184
|
-
let n = t.getAttribute("data-annotation"), r =
|
|
1185
|
-
if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(
|
|
1241
|
+
let n = t.getAttribute("data-annotation"), r = et[n];
|
|
1242
|
+
if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(et).join(", ")}.`), null;
|
|
1186
1243
|
let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= u.length ? i - 1 : 0;
|
|
1187
1244
|
return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which the chart does not have; it reads the first.`), {
|
|
1188
1245
|
spec: t,
|
|
@@ -1218,42 +1275,42 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1218
1275
|
checks: [],
|
|
1219
1276
|
plan: P,
|
|
1220
1277
|
step: 0,
|
|
1221
|
-
controls:
|
|
1278
|
+
controls: L
|
|
1222
1279
|
};
|
|
1223
|
-
return
|
|
1280
|
+
return L?.addEventListener("click", (e) => {
|
|
1224
1281
|
let t = e.target.closest("button")?.dataset.go;
|
|
1225
1282
|
t && Q(B, B.step + (t === "next" ? 1 : -1));
|
|
1226
|
-
}), Q(B, 0, !0), a.hover && i.getAttribute("data-chart-hover") !== "false" &&
|
|
1227
|
-
},
|
|
1283
|
+
}), Q(B, 0, !0), a.hover && i.getAttribute("data-chart-hover") !== "false" && _t(B), mt(B, a), B;
|
|
1284
|
+
}, ut = (e) => {
|
|
1228
1285
|
let t = getComputedStyle(e).getPropertyValue("--tablechart-inside-align").trim();
|
|
1229
1286
|
return t === "start" || t === "center" || t === "end" ? t : null;
|
|
1230
|
-
},
|
|
1287
|
+
}, dt = (e, t, n, r) => {
|
|
1231
1288
|
let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
|
|
1232
1289
|
if (!a) return null;
|
|
1233
1290
|
let o = Number(a[1]);
|
|
1234
1291
|
return a[2] === "%" ? o / 100 * j : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
|
|
1235
|
-
},
|
|
1292
|
+
}, ft = (e, t) => dt(e, t, "--tablechart-bar-max", "60px") ?? Infinity, pt = (t, n) => {
|
|
1236
1293
|
let { plot: r, svg: i, rows: a, type: o, values: s, series: c, seriesValues: l, names: u, annotations: d } = t, f = r.clientWidth;
|
|
1237
1294
|
if (!f) return !1;
|
|
1238
1295
|
let p = j / f, m = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), h = j * (m > 0 ? m : o.aspect ?? n.aspect);
|
|
1239
1296
|
r.classList.add(w);
|
|
1240
1297
|
for (let e of [...l.flat(), ...t.totals]) delete e.dataset.place;
|
|
1241
|
-
r.style.removeProperty("--tablechart-fit"),
|
|
1298
|
+
r.style.removeProperty("--tablechart-fit"), se([
|
|
1242
1299
|
...l.flat(),
|
|
1243
1300
|
...t.totals,
|
|
1244
1301
|
...u,
|
|
1245
1302
|
...t.categories,
|
|
1246
1303
|
...d.map((e) => e.badge)
|
|
1247
1304
|
]);
|
|
1248
|
-
let g = (s[0] ? Y(s[0]).height : 0) * p, _ = d[0]?.badge ? Y(d[0].badge).height * p : 0, v = Math.max(h,
|
|
1305
|
+
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?.({
|
|
1249
1306
|
labelHeight: g,
|
|
1250
|
-
nameHeight: Math.max(0,
|
|
1307
|
+
nameHeight: Math.max(0, H(t.categories.map((e) => Y(e).height))) * p,
|
|
1251
1308
|
unit: p,
|
|
1252
1309
|
rows: a.length,
|
|
1253
1310
|
series: c.length,
|
|
1254
1311
|
stacked: t.stacked
|
|
1255
1312
|
}) ?? 0), y = t.stacked ? a.map((e) => {
|
|
1256
|
-
let t =
|
|
1313
|
+
let t = me(e, c.length);
|
|
1257
1314
|
return {
|
|
1258
1315
|
...e,
|
|
1259
1316
|
value: t,
|
|
@@ -1278,35 +1335,35 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1278
1335
|
series: c.length,
|
|
1279
1336
|
focused: c.some((e) => e.focus),
|
|
1280
1337
|
stacked: t.stacked
|
|
1281
|
-
}, C = o.headroom?.(S) ?? g, T = 2 * p + (o.footroom?.(S) ?? 0), E = C, D = t.stacked ? Math.max(
|
|
1338
|
+
}, C = o.headroom?.(S) ?? g, T = 2 * p + (o.footroom?.(S) ?? 0), E = C, D = t.stacked ? Math.max(H(y.map((e) => e.value)), 0) : Math.max(H(x.flatMap((e) => [
|
|
1282
1339
|
e.from,
|
|
1283
1340
|
e.to,
|
|
1284
1341
|
e.value
|
|
1285
|
-
])),
|
|
1342
|
+
])), H(a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value)))), O = v - E - T, k = D * 1.02, A = d.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, M = (e) => {
|
|
1286
1343
|
let t = Number.parseFloat(A?.getAttribute(e) ?? "");
|
|
1287
1344
|
return Number.isFinite(t) ? t : null;
|
|
1288
|
-
}, N = M("data-from") ?? M("data-at"), P = M("data-to"),
|
|
1345
|
+
}, N = M("data-from") ?? M("data-at"), P = M("data-to"), L = null;
|
|
1289
1346
|
if (A && (N !== null || P !== null)) {
|
|
1290
1347
|
let t = N ?? 0, n = P ?? k, r = P === null ? t : N === null ? n : (t + n) / 2, i = A.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
|
|
1291
1348
|
i !== null && !a && console.warn(`[${e}] data-size="${i}" is not a percentage, such as 30%. Using the default.`);
|
|
1292
1349
|
let s = Math.min(Math.max(a ? Number(a[1]) / 100 : P === 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);
|
|
1293
|
-
o.breakable ? t < 0 || n <= t || n > k || t === 0 && n === k ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${D}.`) : c.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) :
|
|
1350
|
+
o.breakable ? t < 0 || n <= t || n > k || t === 0 && n === k ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${D}.`) : c.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : L = {
|
|
1294
1351
|
lo: t,
|
|
1295
1352
|
hi: n,
|
|
1296
1353
|
gap: r,
|
|
1297
1354
|
share: s
|
|
1298
1355
|
} : console.warn(`[${e}] This kind of chart cannot break its scale.`);
|
|
1299
1356
|
}
|
|
1300
|
-
let
|
|
1301
|
-
if (
|
|
1302
|
-
let { lo: e, hi: t, gap: n, share: r } =
|
|
1303
|
-
|
|
1357
|
+
let R = L ? L.gap : null, z = (L && dt(t.figure, p, "--tablechart-break-gap", "")) ?? 13, B = v - T, te = (e) => B - e / k * O;
|
|
1358
|
+
if (L) {
|
|
1359
|
+
let { lo: e, hi: t, gap: n, share: r } = L, i = O * r, a = (O - i - z) / (e + (k - t)), o = i / (t - e);
|
|
1360
|
+
te = (r) => r <= e ? B - r * a : r <= n ? B - e * a - (r - e) * o : r <= t ? B - e * a - (r - e) * o - z : B - e * a - i - z - (r - t) * a;
|
|
1304
1361
|
}
|
|
1305
|
-
let V = u.length ?
|
|
1306
|
-
|
|
1307
|
-
let
|
|
1308
|
-
t.rowAt = o.centre ? null : o.categories === "beside" ? (e, t) => G(Math.floor(t * p / (v / a.length))) : (e) => G(Math.floor(e * p /
|
|
1309
|
-
let K =
|
|
1362
|
+
let V = u.length ? H(u.map((e) => Y(e).width)) * p + 12 * p : 0, ne = t.categories[0]?.parentElement;
|
|
1363
|
+
ne && (ne.style.paddingRight = V ? `${V / j * 100}%` : "");
|
|
1364
|
+
let U = (j - V) / a.length, W = (e) => (e + .5) * U, G = (e) => e >= 0 && e < a.length ? e : null;
|
|
1365
|
+
t.rowAt = o.centre ? null : o.categories === "beside" ? (e, t) => G(Math.floor(t * p / (v / a.length))) : (e) => G(Math.floor(e * p / U));
|
|
1366
|
+
let K = U / j * 100, q = 100 / a.length;
|
|
1310
1367
|
t.rowBox = o.categories === "beside" ? (e) => [
|
|
1311
1368
|
0,
|
|
1312
1369
|
e * q,
|
|
@@ -1317,14 +1374,14 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1317
1374
|
0,
|
|
1318
1375
|
K,
|
|
1319
1376
|
100
|
|
1320
|
-
], i.setAttribute("viewBox", `0 0 ${j} ${v}`), i.textContent = "", t.checks = [];
|
|
1377
|
+
], i.setAttribute("viewBox", `0 0 ${j} ${F(v)}`), i.textContent = "", t.checks = [];
|
|
1321
1378
|
let J = {
|
|
1322
1379
|
rows: a,
|
|
1323
1380
|
segments: x,
|
|
1324
|
-
cx:
|
|
1325
|
-
y:
|
|
1326
|
-
barWidth: Math.min(
|
|
1327
|
-
barMax:
|
|
1381
|
+
cx: W,
|
|
1382
|
+
y: te,
|
|
1383
|
+
barWidth: Math.min(U * n.barfill, ft(t.figure, p)),
|
|
1384
|
+
barMax: ft(t.figure, p),
|
|
1328
1385
|
height: v,
|
|
1329
1386
|
unit: p,
|
|
1330
1387
|
labelHeight: g,
|
|
@@ -1333,12 +1390,12 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1333
1390
|
note: 0,
|
|
1334
1391
|
labels: t.figure.dataset.chartLabels === "inside" || t.figure.dataset.chartLabels !== "outside" && n.labels === "inside" ? "inside" : "outside",
|
|
1335
1392
|
closing: (t.figure.dataset.chartClosing ?? n.closing) === "up" ? "up" : "down",
|
|
1336
|
-
insideAlign:
|
|
1337
|
-
breakAt:
|
|
1338
|
-
squeeze:
|
|
1339
|
-
breakGap:
|
|
1393
|
+
insideAlign: ut(t.figure),
|
|
1394
|
+
breakAt: R,
|
|
1395
|
+
squeeze: L,
|
|
1396
|
+
breakGap: z,
|
|
1340
1397
|
stacked: t.stacked,
|
|
1341
|
-
shape:
|
|
1398
|
+
shape: it(t.figure, n),
|
|
1342
1399
|
totals: t.totals,
|
|
1343
1400
|
svg: i,
|
|
1344
1401
|
plot: r,
|
|
@@ -1379,15 +1436,15 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1379
1436
|
note: e + 1
|
|
1380
1437
|
});
|
|
1381
1438
|
}
|
|
1382
|
-
|
|
1383
|
-
let
|
|
1384
|
-
return
|
|
1439
|
+
Ze(t);
|
|
1440
|
+
let re = t.categories[0]?.parentElement;
|
|
1441
|
+
return re && o.categories !== "beside" && !o.centre && xe(re, t.categories.filter((e) => e.offsetParent !== null), (e) => ({
|
|
1385
1442
|
size: e.scrollWidth,
|
|
1386
1443
|
room: e.clientWidth
|
|
1387
|
-
}), "--tablechart-name-fit"),
|
|
1444
|
+
}), "--tablechart-name-fit"), ee(i, d.flatMap(({ badge: e }) => {
|
|
1388
1445
|
if (!(e instanceof HTMLElement) || !e.offsetWidth) return [];
|
|
1389
1446
|
let t = e.offsetWidth * p, n = e.offsetHeight * p, r = Number.parseFloat(e.style.left) / 100 * j, i = Number.parseFloat(e.style.top) / 100 * v, a = getComputedStyle(e).borderTopLeftRadius, o = a.endsWith("%") ? Number.parseFloat(a) / 100 : null, s = (Number.parseFloat(a) || 0) * p;
|
|
1390
|
-
return [
|
|
1447
|
+
return [I("rect", {
|
|
1391
1448
|
class: b,
|
|
1392
1449
|
"data-for": "badge",
|
|
1393
1450
|
"data-note": e.dataset.note ?? "",
|
|
@@ -1400,7 +1457,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1400
1457
|
style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
|
|
1401
1458
|
})];
|
|
1402
1459
|
}), j, v), !0;
|
|
1403
|
-
},
|
|
1460
|
+
}, mt = (e, t) => {
|
|
1404
1461
|
let n = [
|
|
1405
1462
|
...e.seriesValues.flat(),
|
|
1406
1463
|
...e.totals,
|
|
@@ -1418,11 +1475,11 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1418
1475
|
e.className = D, e.textContent = o, r.prepend(e);
|
|
1419
1476
|
}
|
|
1420
1477
|
}
|
|
1421
|
-
},
|
|
1478
|
+
}, ht = (e) => {
|
|
1422
1479
|
e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${v}`)?.remove(), e.controls?.remove();
|
|
1423
|
-
},
|
|
1480
|
+
}, gt = (e, t) => {
|
|
1424
1481
|
e.figure.classList.toggle(O, t), t || e.plot.removeAttribute("data-pointed");
|
|
1425
|
-
},
|
|
1482
|
+
}, _t = (e) => {
|
|
1426
1483
|
let { plot: t } = e, n = () => [...e.seriesValues.flat(), ...e.totals], r = (e, t) => {
|
|
1427
1484
|
let n = Number(e.dataset.row), r = Number(e.dataset.rowEnd ?? n);
|
|
1428
1485
|
return t >= n && t <= r;
|
|
@@ -1457,25 +1514,25 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1457
1514
|
}), document.addEventListener("pointerdown", (e) => {
|
|
1458
1515
|
t.contains(e.target) || a();
|
|
1459
1516
|
});
|
|
1460
|
-
},
|
|
1517
|
+
}, vt = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), yt = /^\s*(?:Table)?:\s+/, bt = (e) => e?.tagName === "P" && yt.test(e.textContent ?? ""), xt = (e) => {
|
|
1461
1518
|
let t = document.createElement("figcaption");
|
|
1462
1519
|
for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
|
|
1463
1520
|
let n = e.firstChild;
|
|
1464
|
-
n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(
|
|
1521
|
+
n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(yt, ""), n.textContent || n.remove());
|
|
1465
1522
|
let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
|
|
1466
1523
|
if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
|
|
1467
1524
|
let e = document.createElement("span");
|
|
1468
1525
|
e.append(...r.slice(i + 1)), t.append(e);
|
|
1469
1526
|
}
|
|
1470
1527
|
return e.remove(), t;
|
|
1471
|
-
},
|
|
1472
|
-
let t =
|
|
1528
|
+
}, St = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Ct = (e) => {
|
|
1529
|
+
let t = At(e);
|
|
1473
1530
|
return t?.tagName === "P" ? t : e;
|
|
1474
|
-
},
|
|
1475
|
-
let t =
|
|
1531
|
+
}, wt = (e) => {
|
|
1532
|
+
let t = Ct(e).firstChild;
|
|
1476
1533
|
if (t?.nodeType !== Node.TEXT_NODE) return null;
|
|
1477
|
-
let n =
|
|
1478
|
-
if (!n || !
|
|
1534
|
+
let n = St.exec(t.textContent ?? "");
|
|
1535
|
+
if (!n || !tt.includes(n[1]) || !n[3] && t.nextSibling) return null;
|
|
1479
1536
|
let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
|
|
1480
1537
|
return {
|
|
1481
1538
|
name: n[1],
|
|
@@ -1483,11 +1540,11 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1483
1540
|
text: t,
|
|
1484
1541
|
length: n[0].length
|
|
1485
1542
|
};
|
|
1486
|
-
},
|
|
1543
|
+
}, Tt = (e) => {
|
|
1487
1544
|
if (e?.tagName !== "UL" && e?.tagName !== "OL") return null;
|
|
1488
|
-
let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null :
|
|
1545
|
+
let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : wt(e));
|
|
1489
1546
|
return !t.length || t.some((e, t) => !n[t] && !e.hasAttribute("data-annotation")) ? null : (t.forEach((e, t) => {
|
|
1490
|
-
let r = n[t], i =
|
|
1547
|
+
let r = n[t], i = Ct(e);
|
|
1491
1548
|
if (i !== e && i.replaceWith(...i.childNodes), r) {
|
|
1492
1549
|
e.setAttribute("data-annotation", r.name);
|
|
1493
1550
|
for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
|
|
@@ -1498,18 +1555,18 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1498
1555
|
t === 0 && e instanceof HTMLElement && e.matches("em, i") ? (n.className = d, n.append(...e.childNodes), e.replaceWith(n)) : e.nodeType === Node.TEXT_NODE && (n.textContent = (e.textContent ?? "").trim(), e.replaceWith(n));
|
|
1499
1556
|
});
|
|
1500
1557
|
}), e.classList.add("chart-annotations"), e);
|
|
1501
|
-
},
|
|
1502
|
-
for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" ||
|
|
1503
|
-
},
|
|
1504
|
-
let t = e.closest("p"), n =
|
|
1558
|
+
}, Et = (e, t) => {
|
|
1559
|
+
for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || vt(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
|
|
1560
|
+
}, Dt = (e) => e.map((e) => {
|
|
1561
|
+
let t = e.closest("p"), n = bt(t) ? t : e;
|
|
1505
1562
|
if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
|
|
1506
1563
|
let r = document.createElement("div");
|
|
1507
|
-
|
|
1508
|
-
let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ?
|
|
1564
|
+
Et(e, r), e.classList.length || e.removeAttribute("class");
|
|
1565
|
+
let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? bt(a) ? a : bt(o) ? o : null : n;
|
|
1509
1566
|
i && s === o && (o = o?.nextElementSibling ?? null);
|
|
1510
|
-
let c = o?.classList.contains("chart-annotations") ? o :
|
|
1511
|
-
return n.replaceWith(r), s && r.append(
|
|
1512
|
-
}),
|
|
1567
|
+
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), Z?.log?.(`A ${i ? "table" : "caption"} with chart attributes was wrapped in a figure of its own`), r;
|
|
1569
|
+
}), Ot = (e, t = []) => {
|
|
1513
1570
|
let n = document.createElement("table");
|
|
1514
1571
|
if (t.length) {
|
|
1515
1572
|
let e = n.createTHead().insertRow();
|
|
@@ -1528,7 +1585,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1528
1585
|
for (let n of t.values ?? [t.value ?? null]) e.insertCell().textContent = n === null ? "" : String(n);
|
|
1529
1586
|
}
|
|
1530
1587
|
return n;
|
|
1531
|
-
},
|
|
1588
|
+
}, kt = async (t) => {
|
|
1532
1589
|
await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
|
|
1533
1590
|
let n = t.getAttribute("data-chart-src");
|
|
1534
1591
|
for (let e of t.querySelectorAll("table")) e.remove();
|
|
@@ -1537,17 +1594,17 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1537
1594
|
if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
|
|
1538
1595
|
let r = await e.json(), i = Array.isArray(r) ? r : r?.rows;
|
|
1539
1596
|
if (!Array.isArray(i)) throw Error("no array of rows in it");
|
|
1540
|
-
let a = Array.isArray(r?.series) ? r.series.map(String) : [], o = t.querySelector(":scope > figcaption"), s =
|
|
1597
|
+
let a = Array.isArray(r?.series) ? r.series.map(String) : [], o = t.querySelector(":scope > figcaption"), s = Ot(i, a);
|
|
1541
1598
|
o ? o.after(s) : t.prepend(s), Z?.log?.(`Read ${i.length} rows from "${n}"`);
|
|
1542
1599
|
} catch (t) {
|
|
1543
1600
|
let r = window.location.protocol === "file:";
|
|
1544
1601
|
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." : ""));
|
|
1545
1602
|
}
|
|
1546
1603
|
}));
|
|
1547
|
-
},
|
|
1604
|
+
}, At = (e) => {
|
|
1548
1605
|
let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
|
|
1549
1606
|
return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
|
|
1550
|
-
},
|
|
1607
|
+
}, jt = "strong, b, span.total", Mt = (e) => {
|
|
1551
1608
|
for (let t of e) {
|
|
1552
1609
|
for (let e of t.querySelectorAll("tbody tr")) {
|
|
1553
1610
|
let t = e.cells[0];
|
|
@@ -1555,16 +1612,16 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1555
1612
|
let n = document.createElement("th");
|
|
1556
1613
|
for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
|
|
1557
1614
|
n.append(...t.childNodes), t.replaceWith(n);
|
|
1558
|
-
for (let t =
|
|
1615
|
+
for (let t = At(n); t?.matches(jt); t = At(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
|
|
1559
1616
|
}
|
|
1560
1617
|
let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
|
|
1561
|
-
for (let t of e.slice(1)) for (let e =
|
|
1618
|
+
for (let t of e.slice(1)) for (let e = At(t); e?.matches(jt); e = At(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
|
|
1562
1619
|
}
|
|
1563
|
-
},
|
|
1620
|
+
}, Nt = "data-chart-made", Pt = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Ft = (e) => new Promise((t) => setTimeout(t, e)), It = (e, t) => {
|
|
1564
1621
|
let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
|
|
1565
1622
|
return Math.min(Math.max(r, 0), 1);
|
|
1566
|
-
},
|
|
1567
|
-
if (
|
|
1623
|
+
}, Lt = async (e, t) => {
|
|
1624
|
+
if (Pt()) return;
|
|
1568
1625
|
await new Promise(requestAnimationFrame);
|
|
1569
1626
|
let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
|
|
1570
1627
|
for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
|
|
@@ -1575,11 +1632,11 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1575
1632
|
let a = Number(n.delay ?? 0) + i * t;
|
|
1576
1633
|
r = Math.max(r, a - Number(e.currentTime ?? 0));
|
|
1577
1634
|
}
|
|
1578
|
-
r > 0 && await
|
|
1579
|
-
},
|
|
1635
|
+
r > 0 && await Ft(r);
|
|
1636
|
+
}, Rt = (e) => {
|
|
1580
1637
|
for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
|
|
1581
1638
|
return null;
|
|
1582
|
-
},
|
|
1639
|
+
}, zt = (e) => new Promise((t) => {
|
|
1583
1640
|
let n = ["animationstart", "transitionrun"], r = () => {
|
|
1584
1641
|
for (let e of n) document.removeEventListener(e, i, !0);
|
|
1585
1642
|
a.disconnect(), t();
|
|
@@ -1593,54 +1650,54 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1593
1650
|
attributes: !0,
|
|
1594
1651
|
attributeFilter: ["class", "style"]
|
|
1595
1652
|
});
|
|
1596
|
-
}),
|
|
1597
|
-
|
|
1598
|
-
for (let e of
|
|
1653
|
+
}), Bt = /* @__PURE__ */ new Set(), $ = null, Vt = (e) => {
|
|
1654
|
+
Bt.add(e), !$ && ($ = new MutationObserver(() => {
|
|
1655
|
+
for (let e of Bt) e.relabel();
|
|
1599
1656
|
requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
1600
|
-
for (let e of
|
|
1657
|
+
for (let e of Bt) e.refresh();
|
|
1601
1658
|
}));
|
|
1602
1659
|
}), $.observe(document.documentElement, {
|
|
1603
1660
|
attributes: !0,
|
|
1604
1661
|
attributeFilter: ["lang"]
|
|
1605
1662
|
}));
|
|
1606
|
-
},
|
|
1607
|
-
|
|
1608
|
-
},
|
|
1663
|
+
}, Ht = (e) => {
|
|
1664
|
+
Bt.delete(e), !(Bt.size || !$) && ($.disconnect(), $ = null);
|
|
1665
|
+
}, Ut = ["column", "bar"], Wt = (e) => {
|
|
1609
1666
|
let t = e.getAttribute("data-chart") || "column";
|
|
1610
|
-
if (!
|
|
1667
|
+
if (!Ut.includes(t)) return null;
|
|
1611
1668
|
let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
|
|
1612
|
-
return
|
|
1613
|
-
},
|
|
1614
|
-
let n = e, r =
|
|
1615
|
-
if (!t.animate) return
|
|
1669
|
+
return Ut.includes(n) ? n : t;
|
|
1670
|
+
}, Gt = (e, t) => {
|
|
1671
|
+
let n = e, r = Wt(n.figure), i = null, a = !1, o = !1, s = async () => {
|
|
1672
|
+
if (!t.animate) return gt(n, !0);
|
|
1616
1673
|
let e = n.figure.classList.contains("is-shown");
|
|
1617
1674
|
if (a && i !== null && !e && !o) {
|
|
1618
1675
|
o = !0;
|
|
1619
|
-
let e =
|
|
1620
|
-
e && await
|
|
1621
|
-
} else !a && t.replay && e &&
|
|
1676
|
+
let e = Pt() ? null : Rt(n.figure);
|
|
1677
|
+
e && await zt(e), await Lt(n.figure, It(n.figure, t)), o = !1, (a || !t.replay) && gt(n, !0);
|
|
1678
|
+
} else !a && t.replay && e && gt(n, !1);
|
|
1622
1679
|
}, c = () => {
|
|
1623
|
-
let e =
|
|
1680
|
+
let e = Wt(n.figure);
|
|
1624
1681
|
if (!e || e === r) return;
|
|
1625
|
-
let a = Z.timed("Building", n.figure, () =>
|
|
1626
|
-
a && (
|
|
1682
|
+
let a = Z.timed("Building", n.figure, () => lt(n.figure, t, e));
|
|
1683
|
+
a && (ht(n), Q(a, n.step, !0), n = a, r = e, i = null);
|
|
1627
1684
|
}, l = () => {
|
|
1628
1685
|
c();
|
|
1629
1686
|
let e = n.plot.clientWidth;
|
|
1630
|
-
!e || e === i || Z.timed("Layout", n.figure, () =>
|
|
1687
|
+
!e || e === i || Z.timed("Layout", n.figure, () => pt(n, t)) && (i = e, s());
|
|
1631
1688
|
}, u = !1, d = new ResizeObserver(() => {
|
|
1632
1689
|
u || (u = !0, requestAnimationFrame(() => {
|
|
1633
1690
|
u = !1, l();
|
|
1634
1691
|
}));
|
|
1635
1692
|
}), f = new IntersectionObserver((e) => {
|
|
1636
1693
|
for (let t of e) a = t.isIntersecting, s();
|
|
1637
|
-
}, { threshold: t.threshold }), p = () =>
|
|
1694
|
+
}, { threshold: t.threshold }), p = () => gt(n, !0), m = () => {
|
|
1638
1695
|
i = null, l();
|
|
1639
1696
|
}, h = {
|
|
1640
|
-
relabel: () =>
|
|
1697
|
+
relabel: () => mt(n, t),
|
|
1641
1698
|
refresh: m
|
|
1642
1699
|
};
|
|
1643
|
-
c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p),
|
|
1700
|
+
c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), Vt(h);
|
|
1644
1701
|
let g = {
|
|
1645
1702
|
figure: n.figure,
|
|
1646
1703
|
refresh: m,
|
|
@@ -1654,32 +1711,32 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1654
1711
|
return n.plan?.count ?? 0;
|
|
1655
1712
|
},
|
|
1656
1713
|
destroy() {
|
|
1657
|
-
d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p),
|
|
1714
|
+
d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), Ht(h), n.figure.tablechart === g && delete n.figure.tablechart;
|
|
1658
1715
|
}
|
|
1659
1716
|
};
|
|
1660
1717
|
return n.figure.tablechart = g, g;
|
|
1661
|
-
},
|
|
1662
|
-
let n =
|
|
1663
|
-
return await
|
|
1664
|
-
},
|
|
1665
|
-
let n = Z.timed("Building", e, () =>
|
|
1666
|
-
return n ? (e.setAttribute(
|
|
1667
|
-
},
|
|
1718
|
+
}, Kt = async (e, t) => {
|
|
1719
|
+
let n = Dt(e.filter((e) => !e.hasAttribute(Nt)));
|
|
1720
|
+
return await kt(n), Mt(n), qe(n, t.langattribute), n;
|
|
1721
|
+
}, qt = (e, t) => {
|
|
1722
|
+
let n = Z.timed("Building", e, () => lt(e, t));
|
|
1723
|
+
return n ? (e.setAttribute(Nt, ""), Gt(n, t)) : null;
|
|
1724
|
+
}, Jt = async (e, t = {}) => {
|
|
1668
1725
|
if (e.tablechart) return e.tablechart;
|
|
1669
1726
|
let n = {
|
|
1670
1727
|
...M,
|
|
1671
1728
|
...t
|
|
1672
1729
|
};
|
|
1673
1730
|
n.debug && (Z.enabled = !0);
|
|
1674
|
-
let [r] = await
|
|
1675
|
-
return r ?
|
|
1676
|
-
},
|
|
1731
|
+
let [r] = await Kt([e], n);
|
|
1732
|
+
return r ? qt(r, n) : null;
|
|
1733
|
+
}, Yt = async (e = {}, t = document) => {
|
|
1677
1734
|
let n = {
|
|
1678
1735
|
...M,
|
|
1679
1736
|
...e
|
|
1680
1737
|
};
|
|
1681
1738
|
n.debug && (Z.enabled = !0);
|
|
1682
|
-
let r = (await
|
|
1739
|
+
let r = (await Kt(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => qt(e, n)).filter((e) => e !== null);
|
|
1683
1740
|
return Z.log(`Made ${r.length} chart(s).`), {
|
|
1684
1741
|
charts: r,
|
|
1685
1742
|
refresh: () => {
|
|
@@ -1691,4 +1748,4 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1691
1748
|
};
|
|
1692
1749
|
};
|
|
1693
1750
|
//#endregion
|
|
1694
|
-
export { k as _,
|
|
1751
|
+
export { k as _, Dt as a, lt as c, gt as d, ht as f, t as g, w as h, Kt as i, pt as l, qe as m, It as n, kt as o, Q as p, Yt as r, Mt as s, Jt as t, mt as u, O as v, M as y };
|