@martinomagnifico/tablechart 1.0.1 → 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 +15 -0
- package/dist/tablechart-core.d.ts +5 -0
- package/dist/tablechart-shared.mjs +422 -383
- 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,15 +817,15 @@ 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) => {
|
|
815
821
|
if (Math.abs(t - n) <= Math.abs(n) / 100) return;
|
|
816
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.`;
|
|
817
|
-
|
|
818
|
-
},
|
|
823
|
+
ze.has(r) || (ze.add(r), console.warn(r));
|
|
824
|
+
}, Ve = {
|
|
819
825
|
segments: (e) => {
|
|
820
826
|
let t = 0, n = !1;
|
|
821
827
|
return e.map((e) => {
|
|
822
|
-
if (e.isTotal) return n &&
|
|
828
|
+
if (e.isTotal) return n && Be(e.value, t), n = !1, t = e.value, {
|
|
823
829
|
...e,
|
|
824
830
|
from: 0,
|
|
825
831
|
to: e.value,
|
|
@@ -837,13 +843,13 @@ var Pe = (e) => e.map((e) => ({
|
|
|
837
843
|
breakable: !0,
|
|
838
844
|
headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
|
|
839
845
|
draw({ segments: e, cx: t, y: n, barWidth: r, height: a, unit: c, svg: l, values: u, breakAt: d, closing: f, insideAlign: p }) {
|
|
840
|
-
let m = n(0), h =
|
|
846
|
+
let m = n(0), h = ve(u, r, c), g = p ?? "center", _ = e.map((t, r) => {
|
|
841
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;
|
|
842
848
|
return {
|
|
843
849
|
top: i,
|
|
844
850
|
length: a,
|
|
845
851
|
down: t.kind === "down" || t.kind === "total" && r > 0 && r === e.length - 1 && f === "down",
|
|
846
|
-
inside: !o && !h &&
|
|
852
|
+
inside: !o && !h && ye(u[r], a, c)
|
|
847
853
|
};
|
|
848
854
|
}), v = u[0] ? Y(u[0]).height * c * .56 : 0, y = Infinity;
|
|
849
855
|
for (let [e, t] of _.entries()) t.inside && (y = Math.min(y, (r - Y(u[e]).width * c) / 2));
|
|
@@ -851,7 +857,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
851
857
|
let o = e[a + 1];
|
|
852
858
|
if (!o) return;
|
|
853
859
|
let c = n(i.to), u = t(a) + r / 2, d = t(a + 1) - r / 2;
|
|
854
|
-
l.appendChild(
|
|
860
|
+
l.appendChild(I("line", {
|
|
855
861
|
class: s,
|
|
856
862
|
x1: u,
|
|
857
863
|
x2: d,
|
|
@@ -862,8 +868,8 @@ var Pe = (e) => e.map((e) => ({
|
|
|
862
868
|
}));
|
|
863
869
|
}), e.forEach((e, n) => {
|
|
864
870
|
let { top: o, length: s, down: d, inside: f } = _[n];
|
|
865
|
-
l.appendChild(
|
|
866
|
-
class:
|
|
871
|
+
l.appendChild(I("rect", {
|
|
872
|
+
class: L(i, e),
|
|
867
873
|
"data-kind": e.kind,
|
|
868
874
|
"data-row": n + 1,
|
|
869
875
|
"data-grow": d ? "down" : "up",
|
|
@@ -876,8 +882,8 @@ var Pe = (e) => e.map((e) => ({
|
|
|
876
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;
|
|
877
883
|
p.dataset.place = f ? "inside" : "outside", p.dataset.kind = e.kind;
|
|
878
884
|
let S = f ? x : e.kind === "down" ? o + s + Y(p).height * c + 3 * c : o - 3 * c;
|
|
879
|
-
|
|
880
|
-
}), l.appendChild(
|
|
885
|
+
z(p, t(n), S, j, a);
|
|
886
|
+
}), l.appendChild(I("line", {
|
|
881
887
|
class: o,
|
|
882
888
|
x1: 0,
|
|
883
889
|
x2: j,
|
|
@@ -895,7 +901,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
895
901
|
let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
|
|
896
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;
|
|
897
903
|
}
|
|
898
|
-
},
|
|
904
|
+
}, He = (e) => {
|
|
899
905
|
let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
|
|
900
906
|
return {
|
|
901
907
|
raw: t,
|
|
@@ -905,9 +911,9 @@ var Pe = (e) => e.map((e) => ({
|
|
|
905
911
|
missing: !n,
|
|
906
912
|
value: n ? Number.parseFloat(n[2].replace(",", ".")) : 0
|
|
907
913
|
};
|
|
908
|
-
},
|
|
909
|
-
let r = e.querySelector("th"), i = Array.from(e.querySelectorAll("td")).map(
|
|
910
|
-
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)), {
|
|
911
917
|
...i[0],
|
|
912
918
|
label: (r?.textContent || "").trim(),
|
|
913
919
|
key: t && r?.getAttribute(t) || null,
|
|
@@ -916,8 +922,8 @@ var Pe = (e) => e.map((e) => ({
|
|
|
916
922
|
isTotal: e.getAttribute("data-kind") === "total",
|
|
917
923
|
slot: n
|
|
918
924
|
};
|
|
919
|
-
}),
|
|
920
|
-
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)));
|
|
921
927
|
return Array.from({ length: i }, (e, t) => {
|
|
922
928
|
let i = r[t];
|
|
923
929
|
return {
|
|
@@ -925,10 +931,10 @@ var Pe = (e) => e.map((e) => ({
|
|
|
925
931
|
key: n && i?.getAttribute(n) || null,
|
|
926
932
|
focus: i?.getAttribute("data-kind") === "focus",
|
|
927
933
|
marker: i?.getAttribute("data-marker") ?? null,
|
|
928
|
-
line:
|
|
934
|
+
line: Ge(i?.getAttribute("data-line"))
|
|
929
935
|
};
|
|
930
936
|
});
|
|
931
|
-
},
|
|
937
|
+
}, qe = (t, n) => {
|
|
932
938
|
if (!n) return;
|
|
933
939
|
let r = /* @__PURE__ */ new Map();
|
|
934
940
|
for (let i of t) {
|
|
@@ -941,112 +947,145 @@ var Pe = (e) => e.map((e) => ({
|
|
|
941
947
|
i.querySelectorAll("tbody th").forEach((e, r) => {
|
|
942
948
|
e.getAttribute(n) || e.setAttribute(n, `${t}-row${r + 1}`);
|
|
943
949
|
});
|
|
944
|
-
let a =
|
|
950
|
+
let a = We(i);
|
|
945
951
|
a.length > 1 && a.forEach((e, r) => {
|
|
946
952
|
e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
|
|
947
953
|
}), Z?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
|
|
948
954
|
}
|
|
949
|
-
},
|
|
955
|
+
}, Je = [
|
|
950
956
|
"axis-break",
|
|
951
957
|
"trend",
|
|
952
958
|
"bracket"
|
|
953
|
-
],
|
|
954
|
-
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) =>
|
|
955
|
-
if (!t && !n.some(a) && !r.some(a) && !i.some(a)) return null;
|
|
956
|
-
let
|
|
957
|
-
let t = e === null ? void 0 :
|
|
958
|
-
return t === void 0 && (t =
|
|
959
|
-
},
|
|
960
|
-
if (
|
|
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 {
|
|
961
967
|
step: null,
|
|
962
968
|
slot: 0
|
|
963
969
|
};
|
|
964
970
|
if (!t && !a(e)) return {
|
|
965
971
|
step: null,
|
|
966
|
-
slot:
|
|
972
|
+
slot: d++
|
|
967
973
|
};
|
|
968
|
-
let n =
|
|
974
|
+
let n = u(e.getAttribute("data-fragment-index"));
|
|
969
975
|
return {
|
|
970
976
|
step: n,
|
|
971
|
-
slot:
|
|
977
|
+
slot: l[n]++
|
|
972
978
|
};
|
|
973
|
-
}),
|
|
974
|
-
if (
|
|
975
|
-
step:
|
|
976
|
-
slot:
|
|
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]++
|
|
977
983
|
});
|
|
978
|
-
let
|
|
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]++
|
|
995
|
+
};
|
|
996
|
+
}
|
|
979
997
|
return {
|
|
980
|
-
rows:
|
|
981
|
-
series:
|
|
998
|
+
rows: m,
|
|
999
|
+
series: g,
|
|
1000
|
+
cells: _,
|
|
982
1001
|
notes: i.map((e) => {
|
|
983
1002
|
let t = (t, n) => {
|
|
984
1003
|
let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
|
|
985
1004
|
return Number.isFinite(r) ? r - 1 : n;
|
|
986
|
-
}, [n, r] = e.getAttribute("data-annotation") === "bracket" ? [t("data-from", 0), t("data-to",
|
|
987
|
-
for (let e = Math.min(n, r); e <= Math.max(n, r); e++)
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
let o = h[t("data-series", 0)]?.step ?? null;
|
|
992
|
-
o !== null && (i === null || o > i) && (i = o), a(e) && (i = l(e.getAttribute("data-fragment-index")));
|
|
993
|
-
let s = i === null ? p.length : p.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;
|
|
994
1010
|
return {
|
|
995
1011
|
step: i,
|
|
996
1012
|
after: s
|
|
997
1013
|
};
|
|
998
1014
|
}),
|
|
999
|
-
count:
|
|
1000
|
-
indexes:
|
|
1015
|
+
count: s.length,
|
|
1016
|
+
indexes: s
|
|
1001
1017
|
};
|
|
1002
|
-
},
|
|
1018
|
+
}, Xe = (e) => {
|
|
1003
1019
|
let t = e.plan;
|
|
1004
1020
|
if (!t) return;
|
|
1005
1021
|
let n = (t) => t === null || e.step - t >= 1;
|
|
1006
1022
|
for (let r of e.figure.querySelectorAll("[data-from]")) {
|
|
1007
|
-
let e = Number(r.dataset.from) - 1, i = Number(r.dataset.to) - 1, a = r.closest("[data-series]")?.dataset.series, o = a ?
|
|
1008
|
-
if (
|
|
1009
|
-
else for (;
|
|
1010
|
-
let
|
|
1011
|
-
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));
|
|
1012
1028
|
}
|
|
1013
|
-
},
|
|
1029
|
+
}, Ze = (e) => {
|
|
1014
1030
|
let t = e.plan;
|
|
1015
1031
|
if (!t) return;
|
|
1016
|
-
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) => {
|
|
1017
1036
|
e.style.setProperty(n, String(r)), e.style.removeProperty("--d"), t === null ? e.style.removeProperty("--step") : e.style.setProperty("--step", String(t));
|
|
1018
1037
|
};
|
|
1019
|
-
for (let
|
|
1020
|
-
if (
|
|
1021
|
-
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);
|
|
1022
1041
|
if (e > 0) {
|
|
1023
1042
|
let n = t.notes[e - 1];
|
|
1024
|
-
n &&
|
|
1043
|
+
n && o(s, n.step, "--after", n.after);
|
|
1025
1044
|
continue;
|
|
1026
1045
|
}
|
|
1027
|
-
let
|
|
1028
|
-
if (
|
|
1029
|
-
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];
|
|
1030
1049
|
if (e && n) {
|
|
1031
1050
|
let t = (e.step ?? -1) > (n.step ?? -1);
|
|
1032
|
-
|
|
1051
|
+
o(s, t ? e.step : n.step, "--i", t ? e.slot + 1 : n.slot);
|
|
1033
1052
|
}
|
|
1034
1053
|
continue;
|
|
1035
1054
|
}
|
|
1036
|
-
|
|
1037
|
-
|
|
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);
|
|
1038
1077
|
}
|
|
1039
|
-
let
|
|
1040
|
-
if (
|
|
1041
|
-
let e =
|
|
1042
|
-
|
|
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);
|
|
1043
1082
|
}
|
|
1044
|
-
|
|
1083
|
+
Xe(e);
|
|
1045
1084
|
}, Q = (e, t, n = !1) => {
|
|
1046
1085
|
let r = e.plan;
|
|
1047
1086
|
if (!r) return;
|
|
1048
1087
|
let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
|
|
1049
|
-
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);
|
|
1050
1089
|
let [o, s] = e.controls?.querySelectorAll("button") ?? [];
|
|
1051
1090
|
o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
|
|
1052
1091
|
bubbles: !0,
|
|
@@ -1055,7 +1094,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1055
1094
|
steps: r.count
|
|
1056
1095
|
}
|
|
1057
1096
|
}));
|
|
1058
|
-
},
|
|
1097
|
+
}, Qe = (e, t, n) => {
|
|
1059
1098
|
let r = document.createElement("div");
|
|
1060
1099
|
r.className = A;
|
|
1061
1100
|
let i = (r) => {
|
|
@@ -1063,11 +1102,11 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1063
1102
|
i.type = "button", i.className = `tablechart-${r}`, i.dataset.go = r;
|
|
1064
1103
|
let a = document.createElement("span");
|
|
1065
1104
|
a.className = "tablechart-control-icon", a.setAttribute("aria-hidden", "true");
|
|
1066
|
-
let o =
|
|
1105
|
+
let o = I("svg", {
|
|
1067
1106
|
viewBox: "0 0 16 16",
|
|
1068
1107
|
focusable: "false"
|
|
1069
1108
|
});
|
|
1070
|
-
o.appendChild(
|
|
1109
|
+
o.appendChild(I("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
|
|
1071
1110
|
let s = document.createElement("span");
|
|
1072
1111
|
s.className = "tablechart-control-label", s.textContent = e[r];
|
|
1073
1112
|
let c = t[r];
|
|
@@ -1084,35 +1123,35 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1084
1123
|
]), i;
|
|
1085
1124
|
};
|
|
1086
1125
|
return r.append(i("previous"), i("next")), r;
|
|
1087
|
-
}, Qe = {
|
|
1088
|
-
area: Le,
|
|
1089
|
-
bar: Se,
|
|
1090
|
-
column: Ce,
|
|
1091
|
-
donut: Ee,
|
|
1092
|
-
line: Ie,
|
|
1093
|
-
waterfall: Be
|
|
1094
1126
|
}, $e = {
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
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) => {
|
|
1099
1138
|
let t = "";
|
|
1100
1139
|
for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
|
|
1101
1140
|
return t.trim();
|
|
1102
|
-
},
|
|
1141
|
+
}, rt = [
|
|
1103
1142
|
"straight",
|
|
1104
1143
|
"step",
|
|
1105
1144
|
"smooth"
|
|
1106
|
-
],
|
|
1145
|
+
], it = (e, t) => {
|
|
1107
1146
|
let n = e.dataset.chartShape;
|
|
1108
|
-
return n &&
|
|
1109
|
-
},
|
|
1147
|
+
return n && rt.includes(n) ? n : rt.includes(t.shape) ? t.shape : "straight";
|
|
1148
|
+
}, at = (e) => {
|
|
1110
1149
|
for (let t of e.querySelectorAll("br")) {
|
|
1111
|
-
if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(
|
|
1150
|
+
if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(nt(t))) continue;
|
|
1112
1151
|
let e = document.createElement("span");
|
|
1113
1152
|
e.className = E, e.textContent = ". ", t.before(e);
|
|
1114
1153
|
}
|
|
1115
|
-
},
|
|
1154
|
+
}, ot = (e, t, n) => {
|
|
1116
1155
|
let r = e.querySelector("table");
|
|
1117
1156
|
if (!r) return null;
|
|
1118
1157
|
let i = r.querySelector("tfoot [data-chart-total]");
|
|
@@ -1123,23 +1162,23 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1123
1162
|
s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
|
|
1124
1163
|
let c = a.insertCell();
|
|
1125
1164
|
return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
|
|
1126
|
-
},
|
|
1165
|
+
}, st = 0, ct = (e) => {
|
|
1127
1166
|
let t = e.querySelector(":scope > figcaption");
|
|
1128
1167
|
if (!t) return;
|
|
1129
|
-
|
|
1168
|
+
at(t);
|
|
1130
1169
|
let n = (e) => e.hasAttribute("aria-label") || e.hasAttribute("aria-labelledby"), r = (e) => {
|
|
1131
|
-
t.id || (t.id = `tablechart-caption-${++
|
|
1170
|
+
t.id || (t.id = `tablechart-caption-${++st}`), e.setAttribute("aria-labelledby", t.id);
|
|
1132
1171
|
};
|
|
1133
1172
|
e.tagName === "FIGURE" && !n(e) && r(e);
|
|
1134
1173
|
let i = e.querySelector("table");
|
|
1135
1174
|
i && !n(i) && !i.querySelector(":scope > caption") && r(i);
|
|
1136
|
-
},
|
|
1137
|
-
let s = o ?? (i.getAttribute("data-chart") || "column"), c =
|
|
1138
|
-
if (!c) return console.warn(`[${e}] Unknown chart type "${s}". Known types: ${Object.keys(
|
|
1139
|
-
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);
|
|
1140
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;
|
|
1141
|
-
|
|
1142
|
-
let u =
|
|
1180
|
+
ct(i);
|
|
1181
|
+
let u = Ke(i, l, a.langattribute);
|
|
1143
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));
|
|
1144
1183
|
let d = u.length > 1;
|
|
1145
1184
|
d && i.style.setProperty("--tablechart-series-count", String(u.length));
|
|
@@ -1149,36 +1188,36 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1149
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.`);
|
|
1150
1189
|
let m = document.createElement("div");
|
|
1151
1190
|
m.className = t, m.setAttribute("aria-hidden", "true");
|
|
1152
|
-
let h =
|
|
1191
|
+
let h = I("svg", {
|
|
1153
1192
|
role: "presentation",
|
|
1154
1193
|
focusable: "false"
|
|
1155
1194
|
});
|
|
1156
1195
|
m.appendChild(h), i.appendChild(m);
|
|
1157
|
-
let g = c.centre ? l.filter((e) => !e.isTotal) : l, y = Math.max(0,
|
|
1158
|
-
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);
|
|
1159
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;
|
|
1160
1199
|
})), S = b[0], C = p && c.totals ? l.map((e, t) => {
|
|
1161
|
-
let n =
|
|
1162
|
-
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));
|
|
1163
1202
|
let i = e.cells[0];
|
|
1164
1203
|
return i.prefix && (n.dataset.prefix = i.prefix), i.suffix && (n.dataset.suffix = i.suffix), n.style.setProperty("--i", String(e.slot)), n;
|
|
1165
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;
|
|
1166
1205
|
D && (D.className = v, D.setAttribute("aria-hidden", "true"), D.inert = !0);
|
|
1167
1206
|
let O = d ? u.map((e, t) => {
|
|
1168
|
-
let n =
|
|
1207
|
+
let n = R(_, D ?? m);
|
|
1169
1208
|
D && (n.dataset.place = "legend");
|
|
1170
1209
|
let r = c.legend ?? c.swatch;
|
|
1171
|
-
if (r && (n.dataset.swatch = r), n.textContent = e.name, !r &&
|
|
1172
|
-
let e =
|
|
1210
|
+
if (r && (n.dataset.swatch = r), n.textContent = e.name, !r && it(i, a) !== "step") {
|
|
1211
|
+
let e = ke(u, t);
|
|
1173
1212
|
n.dataset.marker = e.shape, n.toggleAttribute("data-open", e.open);
|
|
1174
1213
|
}
|
|
1175
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;
|
|
1176
|
-
}) : [], k = c.centre ?
|
|
1215
|
+
}) : [], k = c.centre ? R(x, m) : null;
|
|
1177
1216
|
if (k) {
|
|
1178
1217
|
let e = l.find((e) => e.isTotal), t = e ? e.value : l.reduce((e, t) => e + Math.abs(t.value), 0);
|
|
1179
|
-
k.dataset.value = String(t), e && (k.dataset.decimals = String(
|
|
1218
|
+
k.dataset.value = String(t), e && (k.dataset.decimals = String(U(e.number)));
|
|
1180
1219
|
}
|
|
1181
|
-
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");
|
|
1182
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));
|
|
1183
1222
|
let N = 0;
|
|
1184
1223
|
for (let [e, t] of l.entries()) {
|
|
@@ -1186,21 +1225,21 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1186
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);
|
|
1187
1226
|
}
|
|
1188
1227
|
(j ? m : i).appendChild(M), D && i.appendChild(D);
|
|
1189
|
-
let P = a.animate ?
|
|
1228
|
+
let P = a.animate ? Ye(i) : null;
|
|
1190
1229
|
P && (i.setAttribute("data-steps", ""), i.setAttribute("data-chart-animate", "across"));
|
|
1191
|
-
let
|
|
1230
|
+
let F = i.getAttribute("data-chart-keys"), L = P && a.controls ? Qe({
|
|
1192
1231
|
previous: a.previouslabel,
|
|
1193
1232
|
next: a.nextlabel,
|
|
1194
1233
|
hint: a.stephint
|
|
1195
1234
|
}, {
|
|
1196
|
-
previous:
|
|
1197
|
-
next:
|
|
1198
|
-
hint:
|
|
1235
|
+
previous: F && `${F}-previous`,
|
|
1236
|
+
next: F && `${F}-next`,
|
|
1237
|
+
hint: F && `${F}-step`
|
|
1199
1238
|
}, a.langattribute) : null;
|
|
1200
|
-
|
|
1239
|
+
L && i.appendChild(L);
|
|
1201
1240
|
let z = Array.from(i.querySelectorAll("[data-annotation]")).map((t) => {
|
|
1202
|
-
let n = t.getAttribute("data-annotation"), r =
|
|
1203
|
-
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;
|
|
1204
1243
|
let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= u.length ? i - 1 : 0;
|
|
1205
1244
|
return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which the chart does not have; it reads the first.`), {
|
|
1206
1245
|
spec: t,
|
|
@@ -1236,42 +1275,42 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1236
1275
|
checks: [],
|
|
1237
1276
|
plan: P,
|
|
1238
1277
|
step: 0,
|
|
1239
|
-
controls:
|
|
1278
|
+
controls: L
|
|
1240
1279
|
};
|
|
1241
|
-
return
|
|
1280
|
+
return L?.addEventListener("click", (e) => {
|
|
1242
1281
|
let t = e.target.closest("button")?.dataset.go;
|
|
1243
1282
|
t && Q(B, B.step + (t === "next" ? 1 : -1));
|
|
1244
|
-
}), Q(B, 0, !0), a.hover && i.getAttribute("data-chart-hover") !== "false" &&
|
|
1245
|
-
},
|
|
1283
|
+
}), Q(B, 0, !0), a.hover && i.getAttribute("data-chart-hover") !== "false" && _t(B), mt(B, a), B;
|
|
1284
|
+
}, ut = (e) => {
|
|
1246
1285
|
let t = getComputedStyle(e).getPropertyValue("--tablechart-inside-align").trim();
|
|
1247
1286
|
return t === "start" || t === "center" || t === "end" ? t : null;
|
|
1248
|
-
},
|
|
1287
|
+
}, dt = (e, t, n, r) => {
|
|
1249
1288
|
let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
|
|
1250
1289
|
if (!a) return null;
|
|
1251
1290
|
let o = Number(a[1]);
|
|
1252
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;
|
|
1253
|
-
},
|
|
1292
|
+
}, ft = (e, t) => dt(e, t, "--tablechart-bar-max", "60px") ?? Infinity, pt = (t, n) => {
|
|
1254
1293
|
let { plot: r, svg: i, rows: a, type: o, values: s, series: c, seriesValues: l, names: u, annotations: d } = t, f = r.clientWidth;
|
|
1255
1294
|
if (!f) return !1;
|
|
1256
1295
|
let p = j / f, m = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), h = j * (m > 0 ? m : o.aspect ?? n.aspect);
|
|
1257
1296
|
r.classList.add(w);
|
|
1258
1297
|
for (let e of [...l.flat(), ...t.totals]) delete e.dataset.place;
|
|
1259
|
-
r.style.removeProperty("--tablechart-fit"),
|
|
1298
|
+
r.style.removeProperty("--tablechart-fit"), se([
|
|
1260
1299
|
...l.flat(),
|
|
1261
1300
|
...t.totals,
|
|
1262
1301
|
...u,
|
|
1263
1302
|
...t.categories,
|
|
1264
1303
|
...d.map((e) => e.badge)
|
|
1265
1304
|
]);
|
|
1266
|
-
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?.({
|
|
1267
1306
|
labelHeight: g,
|
|
1268
|
-
nameHeight: Math.max(0,
|
|
1307
|
+
nameHeight: Math.max(0, H(t.categories.map((e) => Y(e).height))) * p,
|
|
1269
1308
|
unit: p,
|
|
1270
1309
|
rows: a.length,
|
|
1271
1310
|
series: c.length,
|
|
1272
1311
|
stacked: t.stacked
|
|
1273
1312
|
}) ?? 0), y = t.stacked ? a.map((e) => {
|
|
1274
|
-
let t =
|
|
1313
|
+
let t = me(e, c.length);
|
|
1275
1314
|
return {
|
|
1276
1315
|
...e,
|
|
1277
1316
|
value: t,
|
|
@@ -1296,35 +1335,35 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1296
1335
|
series: c.length,
|
|
1297
1336
|
focused: c.some((e) => e.focus),
|
|
1298
1337
|
stacked: t.stacked
|
|
1299
|
-
}, 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) => [
|
|
1300
1339
|
e.from,
|
|
1301
1340
|
e.to,
|
|
1302
1341
|
e.value
|
|
1303
|
-
])),
|
|
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) => {
|
|
1304
1343
|
let t = Number.parseFloat(A?.getAttribute(e) ?? "");
|
|
1305
1344
|
return Number.isFinite(t) ? t : null;
|
|
1306
|
-
}, 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;
|
|
1307
1346
|
if (A && (N !== null || P !== null)) {
|
|
1308
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*$/);
|
|
1309
1348
|
i !== null && !a && console.warn(`[${e}] data-size="${i}" is not a percentage, such as 30%. Using the default.`);
|
|
1310
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);
|
|
1311
|
-
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 = {
|
|
1312
1351
|
lo: t,
|
|
1313
1352
|
hi: n,
|
|
1314
1353
|
gap: r,
|
|
1315
1354
|
share: s
|
|
1316
1355
|
} : console.warn(`[${e}] This kind of chart cannot break its scale.`);
|
|
1317
1356
|
}
|
|
1318
|
-
let
|
|
1319
|
-
if (
|
|
1320
|
-
let { lo: e, hi: t, gap: n, share: r } =
|
|
1321
|
-
|
|
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;
|
|
1322
1361
|
}
|
|
1323
|
-
let V = u.length ?
|
|
1324
|
-
|
|
1325
|
-
let
|
|
1326
|
-
t.rowAt = o.centre ? null : o.categories === "beside" ? (e, t) => G(Math.floor(t * p / (v / a.length))) : (e) => G(Math.floor(e * p /
|
|
1327
|
-
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;
|
|
1328
1367
|
t.rowBox = o.categories === "beside" ? (e) => [
|
|
1329
1368
|
0,
|
|
1330
1369
|
e * q,
|
|
@@ -1335,14 +1374,14 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1335
1374
|
0,
|
|
1336
1375
|
K,
|
|
1337
1376
|
100
|
|
1338
|
-
], i.setAttribute("viewBox", `0 0 ${j} ${v}`), i.textContent = "", t.checks = [];
|
|
1377
|
+
], i.setAttribute("viewBox", `0 0 ${j} ${F(v)}`), i.textContent = "", t.checks = [];
|
|
1339
1378
|
let J = {
|
|
1340
1379
|
rows: a,
|
|
1341
1380
|
segments: x,
|
|
1342
|
-
cx:
|
|
1343
|
-
y:
|
|
1344
|
-
barWidth: Math.min(
|
|
1345
|
-
barMax:
|
|
1381
|
+
cx: W,
|
|
1382
|
+
y: te,
|
|
1383
|
+
barWidth: Math.min(U * n.barfill, ft(t.figure, p)),
|
|
1384
|
+
barMax: ft(t.figure, p),
|
|
1346
1385
|
height: v,
|
|
1347
1386
|
unit: p,
|
|
1348
1387
|
labelHeight: g,
|
|
@@ -1351,12 +1390,12 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1351
1390
|
note: 0,
|
|
1352
1391
|
labels: t.figure.dataset.chartLabels === "inside" || t.figure.dataset.chartLabels !== "outside" && n.labels === "inside" ? "inside" : "outside",
|
|
1353
1392
|
closing: (t.figure.dataset.chartClosing ?? n.closing) === "up" ? "up" : "down",
|
|
1354
|
-
insideAlign:
|
|
1355
|
-
breakAt:
|
|
1356
|
-
squeeze:
|
|
1357
|
-
breakGap:
|
|
1393
|
+
insideAlign: ut(t.figure),
|
|
1394
|
+
breakAt: R,
|
|
1395
|
+
squeeze: L,
|
|
1396
|
+
breakGap: z,
|
|
1358
1397
|
stacked: t.stacked,
|
|
1359
|
-
shape:
|
|
1398
|
+
shape: it(t.figure, n),
|
|
1360
1399
|
totals: t.totals,
|
|
1361
1400
|
svg: i,
|
|
1362
1401
|
plot: r,
|
|
@@ -1397,15 +1436,15 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1397
1436
|
note: e + 1
|
|
1398
1437
|
});
|
|
1399
1438
|
}
|
|
1400
|
-
|
|
1401
|
-
let
|
|
1402
|
-
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) => ({
|
|
1403
1442
|
size: e.scrollWidth,
|
|
1404
1443
|
room: e.clientWidth
|
|
1405
|
-
}), "--tablechart-name-fit"),
|
|
1444
|
+
}), "--tablechart-name-fit"), ee(i, d.flatMap(({ badge: e }) => {
|
|
1406
1445
|
if (!(e instanceof HTMLElement) || !e.offsetWidth) return [];
|
|
1407
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;
|
|
1408
|
-
return [
|
|
1447
|
+
return [I("rect", {
|
|
1409
1448
|
class: b,
|
|
1410
1449
|
"data-for": "badge",
|
|
1411
1450
|
"data-note": e.dataset.note ?? "",
|
|
@@ -1418,7 +1457,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1418
1457
|
style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
|
|
1419
1458
|
})];
|
|
1420
1459
|
}), j, v), !0;
|
|
1421
|
-
},
|
|
1460
|
+
}, mt = (e, t) => {
|
|
1422
1461
|
let n = [
|
|
1423
1462
|
...e.seriesValues.flat(),
|
|
1424
1463
|
...e.totals,
|
|
@@ -1436,11 +1475,11 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1436
1475
|
e.className = D, e.textContent = o, r.prepend(e);
|
|
1437
1476
|
}
|
|
1438
1477
|
}
|
|
1439
|
-
},
|
|
1478
|
+
}, ht = (e) => {
|
|
1440
1479
|
e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${v}`)?.remove(), e.controls?.remove();
|
|
1441
|
-
},
|
|
1480
|
+
}, gt = (e, t) => {
|
|
1442
1481
|
e.figure.classList.toggle(O, t), t || e.plot.removeAttribute("data-pointed");
|
|
1443
|
-
},
|
|
1482
|
+
}, _t = (e) => {
|
|
1444
1483
|
let { plot: t } = e, n = () => [...e.seriesValues.flat(), ...e.totals], r = (e, t) => {
|
|
1445
1484
|
let n = Number(e.dataset.row), r = Number(e.dataset.rowEnd ?? n);
|
|
1446
1485
|
return t >= n && t <= r;
|
|
@@ -1475,25 +1514,25 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1475
1514
|
}), document.addEventListener("pointerdown", (e) => {
|
|
1476
1515
|
t.contains(e.target) || a();
|
|
1477
1516
|
});
|
|
1478
|
-
},
|
|
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) => {
|
|
1479
1518
|
let t = document.createElement("figcaption");
|
|
1480
1519
|
for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
|
|
1481
1520
|
let n = e.firstChild;
|
|
1482
|
-
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());
|
|
1483
1522
|
let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
|
|
1484
1523
|
if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
|
|
1485
1524
|
let e = document.createElement("span");
|
|
1486
1525
|
e.append(...r.slice(i + 1)), t.append(e);
|
|
1487
1526
|
}
|
|
1488
1527
|
return e.remove(), t;
|
|
1489
|
-
},
|
|
1490
|
-
let t =
|
|
1528
|
+
}, St = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Ct = (e) => {
|
|
1529
|
+
let t = At(e);
|
|
1491
1530
|
return t?.tagName === "P" ? t : e;
|
|
1492
|
-
},
|
|
1493
|
-
let t =
|
|
1531
|
+
}, wt = (e) => {
|
|
1532
|
+
let t = Ct(e).firstChild;
|
|
1494
1533
|
if (t?.nodeType !== Node.TEXT_NODE) return null;
|
|
1495
|
-
let n =
|
|
1496
|
-
if (!n || !
|
|
1534
|
+
let n = St.exec(t.textContent ?? "");
|
|
1535
|
+
if (!n || !tt.includes(n[1]) || !n[3] && t.nextSibling) return null;
|
|
1497
1536
|
let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
|
|
1498
1537
|
return {
|
|
1499
1538
|
name: n[1],
|
|
@@ -1501,11 +1540,11 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1501
1540
|
text: t,
|
|
1502
1541
|
length: n[0].length
|
|
1503
1542
|
};
|
|
1504
|
-
},
|
|
1543
|
+
}, Tt = (e) => {
|
|
1505
1544
|
if (e?.tagName !== "UL" && e?.tagName !== "OL") return null;
|
|
1506
|
-
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));
|
|
1507
1546
|
return !t.length || t.some((e, t) => !n[t] && !e.hasAttribute("data-annotation")) ? null : (t.forEach((e, t) => {
|
|
1508
|
-
let r = n[t], i =
|
|
1547
|
+
let r = n[t], i = Ct(e);
|
|
1509
1548
|
if (i !== e && i.replaceWith(...i.childNodes), r) {
|
|
1510
1549
|
e.setAttribute("data-annotation", r.name);
|
|
1511
1550
|
for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
|
|
@@ -1516,18 +1555,18 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1516
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));
|
|
1517
1556
|
});
|
|
1518
1557
|
}), e.classList.add("chart-annotations"), e);
|
|
1519
|
-
},
|
|
1520
|
-
for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" ||
|
|
1521
|
-
},
|
|
1522
|
-
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;
|
|
1523
1562
|
if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
|
|
1524
1563
|
let r = document.createElement("div");
|
|
1525
|
-
|
|
1526
|
-
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;
|
|
1527
1566
|
i && s === o && (o = o?.nextElementSibling ?? null);
|
|
1528
|
-
let c = o?.classList.contains("chart-annotations") ? o :
|
|
1529
|
-
return n.replaceWith(r), s && r.append(
|
|
1530
|
-
}),
|
|
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 = []) => {
|
|
1531
1570
|
let n = document.createElement("table");
|
|
1532
1571
|
if (t.length) {
|
|
1533
1572
|
let e = n.createTHead().insertRow();
|
|
@@ -1546,7 +1585,7 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1546
1585
|
for (let n of t.values ?? [t.value ?? null]) e.insertCell().textContent = n === null ? "" : String(n);
|
|
1547
1586
|
}
|
|
1548
1587
|
return n;
|
|
1549
|
-
},
|
|
1588
|
+
}, kt = async (t) => {
|
|
1550
1589
|
await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
|
|
1551
1590
|
let n = t.getAttribute("data-chart-src");
|
|
1552
1591
|
for (let e of t.querySelectorAll("table")) e.remove();
|
|
@@ -1555,17 +1594,17 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1555
1594
|
if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
|
|
1556
1595
|
let r = await e.json(), i = Array.isArray(r) ? r : r?.rows;
|
|
1557
1596
|
if (!Array.isArray(i)) throw Error("no array of rows in it");
|
|
1558
|
-
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);
|
|
1559
1598
|
o ? o.after(s) : t.prepend(s), Z?.log?.(`Read ${i.length} rows from "${n}"`);
|
|
1560
1599
|
} catch (t) {
|
|
1561
1600
|
let r = window.location.protocol === "file:";
|
|
1562
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." : ""));
|
|
1563
1602
|
}
|
|
1564
1603
|
}));
|
|
1565
|
-
},
|
|
1604
|
+
}, At = (e) => {
|
|
1566
1605
|
let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
|
|
1567
1606
|
return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
|
|
1568
|
-
},
|
|
1607
|
+
}, jt = "strong, b, span.total", Mt = (e) => {
|
|
1569
1608
|
for (let t of e) {
|
|
1570
1609
|
for (let e of t.querySelectorAll("tbody tr")) {
|
|
1571
1610
|
let t = e.cells[0];
|
|
@@ -1573,16 +1612,16 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1573
1612
|
let n = document.createElement("th");
|
|
1574
1613
|
for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
|
|
1575
1614
|
n.append(...t.childNodes), t.replaceWith(n);
|
|
1576
|
-
for (let t =
|
|
1615
|
+
for (let t = At(n); t?.matches(jt); t = At(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
|
|
1577
1616
|
}
|
|
1578
1617
|
let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
|
|
1579
|
-
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);
|
|
1580
1619
|
}
|
|
1581
|
-
},
|
|
1620
|
+
}, Nt = "data-chart-made", Pt = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Ft = (e) => new Promise((t) => setTimeout(t, e)), It = (e, t) => {
|
|
1582
1621
|
let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
|
|
1583
1622
|
return Math.min(Math.max(r, 0), 1);
|
|
1584
|
-
},
|
|
1585
|
-
if (
|
|
1623
|
+
}, Lt = async (e, t) => {
|
|
1624
|
+
if (Pt()) return;
|
|
1586
1625
|
await new Promise(requestAnimationFrame);
|
|
1587
1626
|
let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
|
|
1588
1627
|
for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
|
|
@@ -1593,11 +1632,11 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1593
1632
|
let a = Number(n.delay ?? 0) + i * t;
|
|
1594
1633
|
r = Math.max(r, a - Number(e.currentTime ?? 0));
|
|
1595
1634
|
}
|
|
1596
|
-
r > 0 && await
|
|
1597
|
-
},
|
|
1635
|
+
r > 0 && await Ft(r);
|
|
1636
|
+
}, Rt = (e) => {
|
|
1598
1637
|
for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
|
|
1599
1638
|
return null;
|
|
1600
|
-
},
|
|
1639
|
+
}, zt = (e) => new Promise((t) => {
|
|
1601
1640
|
let n = ["animationstart", "transitionrun"], r = () => {
|
|
1602
1641
|
for (let e of n) document.removeEventListener(e, i, !0);
|
|
1603
1642
|
a.disconnect(), t();
|
|
@@ -1611,54 +1650,54 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1611
1650
|
attributes: !0,
|
|
1612
1651
|
attributeFilter: ["class", "style"]
|
|
1613
1652
|
});
|
|
1614
|
-
}),
|
|
1615
|
-
|
|
1616
|
-
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();
|
|
1617
1656
|
requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
1618
|
-
for (let e of
|
|
1657
|
+
for (let e of Bt) e.refresh();
|
|
1619
1658
|
}));
|
|
1620
1659
|
}), $.observe(document.documentElement, {
|
|
1621
1660
|
attributes: !0,
|
|
1622
1661
|
attributeFilter: ["lang"]
|
|
1623
1662
|
}));
|
|
1624
|
-
},
|
|
1625
|
-
|
|
1626
|
-
},
|
|
1663
|
+
}, Ht = (e) => {
|
|
1664
|
+
Bt.delete(e), !(Bt.size || !$) && ($.disconnect(), $ = null);
|
|
1665
|
+
}, Ut = ["column", "bar"], Wt = (e) => {
|
|
1627
1666
|
let t = e.getAttribute("data-chart") || "column";
|
|
1628
|
-
if (!
|
|
1667
|
+
if (!Ut.includes(t)) return null;
|
|
1629
1668
|
let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
|
|
1630
|
-
return
|
|
1631
|
-
},
|
|
1632
|
-
let n = e, r =
|
|
1633
|
-
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);
|
|
1634
1673
|
let e = n.figure.classList.contains("is-shown");
|
|
1635
1674
|
if (a && i !== null && !e && !o) {
|
|
1636
1675
|
o = !0;
|
|
1637
|
-
let e =
|
|
1638
|
-
e && await
|
|
1639
|
-
} 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);
|
|
1640
1679
|
}, c = () => {
|
|
1641
|
-
let e =
|
|
1680
|
+
let e = Wt(n.figure);
|
|
1642
1681
|
if (!e || e === r) return;
|
|
1643
|
-
let a = Z.timed("Building", n.figure, () =>
|
|
1644
|
-
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);
|
|
1645
1684
|
}, l = () => {
|
|
1646
1685
|
c();
|
|
1647
1686
|
let e = n.plot.clientWidth;
|
|
1648
|
-
!e || e === i || Z.timed("Layout", n.figure, () =>
|
|
1687
|
+
!e || e === i || Z.timed("Layout", n.figure, () => pt(n, t)) && (i = e, s());
|
|
1649
1688
|
}, u = !1, d = new ResizeObserver(() => {
|
|
1650
1689
|
u || (u = !0, requestAnimationFrame(() => {
|
|
1651
1690
|
u = !1, l();
|
|
1652
1691
|
}));
|
|
1653
1692
|
}), f = new IntersectionObserver((e) => {
|
|
1654
1693
|
for (let t of e) a = t.isIntersecting, s();
|
|
1655
|
-
}, { threshold: t.threshold }), p = () =>
|
|
1694
|
+
}, { threshold: t.threshold }), p = () => gt(n, !0), m = () => {
|
|
1656
1695
|
i = null, l();
|
|
1657
1696
|
}, h = {
|
|
1658
|
-
relabel: () =>
|
|
1697
|
+
relabel: () => mt(n, t),
|
|
1659
1698
|
refresh: m
|
|
1660
1699
|
};
|
|
1661
|
-
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);
|
|
1662
1701
|
let g = {
|
|
1663
1702
|
figure: n.figure,
|
|
1664
1703
|
refresh: m,
|
|
@@ -1672,32 +1711,32 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1672
1711
|
return n.plan?.count ?? 0;
|
|
1673
1712
|
},
|
|
1674
1713
|
destroy() {
|
|
1675
|
-
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;
|
|
1676
1715
|
}
|
|
1677
1716
|
};
|
|
1678
1717
|
return n.figure.tablechart = g, g;
|
|
1679
|
-
},
|
|
1680
|
-
let n =
|
|
1681
|
-
return await
|
|
1682
|
-
},
|
|
1683
|
-
let n = Z.timed("Building", e, () =>
|
|
1684
|
-
return n ? (e.setAttribute(
|
|
1685
|
-
},
|
|
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 = {}) => {
|
|
1686
1725
|
if (e.tablechart) return e.tablechart;
|
|
1687
1726
|
let n = {
|
|
1688
1727
|
...M,
|
|
1689
1728
|
...t
|
|
1690
1729
|
};
|
|
1691
1730
|
n.debug && (Z.enabled = !0);
|
|
1692
|
-
let [r] = await
|
|
1693
|
-
return r ?
|
|
1694
|
-
},
|
|
1731
|
+
let [r] = await Kt([e], n);
|
|
1732
|
+
return r ? qt(r, n) : null;
|
|
1733
|
+
}, Yt = async (e = {}, t = document) => {
|
|
1695
1734
|
let n = {
|
|
1696
1735
|
...M,
|
|
1697
1736
|
...e
|
|
1698
1737
|
};
|
|
1699
1738
|
n.debug && (Z.enabled = !0);
|
|
1700
|
-
let r = (await
|
|
1739
|
+
let r = (await Kt(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => qt(e, n)).filter((e) => e !== null);
|
|
1701
1740
|
return Z.log(`Made ${r.length} chart(s).`), {
|
|
1702
1741
|
charts: r,
|
|
1703
1742
|
refresh: () => {
|
|
@@ -1709,4 +1748,4 @@ var Pe = (e) => e.map((e) => ({
|
|
|
1709
1748
|
};
|
|
1710
1749
|
};
|
|
1711
1750
|
//#endregion
|
|
1712
|
-
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 };
|