@martinomagnifico/tablechart 1.1.0 → 1.1.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.
@@ -1,10 +1,66 @@
1
- import { A as e, B as t, C as n, D as r, E as i, F as a, G as o, I as s, J as c, K as l, L as u, M as d, N as f, O as p, P as m, Q as h, R as g, S as _, T as v, U as y, V as b, W as x, X as S, Y as C, Z as w, _ as T, a as E, b as D, c as O, d as k, f as A, g as j, h as M, i as N, j as P, k as F, l as I, m as L, n as R, o as z, p as B, q as V, r as H, s as U, t as ee, u as te, v as ne, w as W, x as G, y as re, z as ie } from "./tablechart-shared2.mjs";
2
- //#region src/js/functions/timing.ts
3
- var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
1
+ //#region src/js/config.ts
2
+ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablechart-bar", i = "tablechart-rule", a = "tablechart-line", o = "tablechart-reference", s = "tablechart-head", c = "tablechart-slice", l = "tablechart-name", u = "tablechart-legend", d = "tablechart-point", f = "tablechart-hole", p = "tablechart-centre", m = "tablechart-break", h = "is-placed", g = "tablechart-sr", _ = "is-shown", v = "is-printing", y = "tablechart-queued", b = "tablechart-axis", x = "tablechart-tick", S = "tablechart-grid", C = 1e3, w = {
3
+ selector: "[data-chart]",
4
+ aspect: .38,
5
+ barfill: .58,
6
+ ringfill: .42,
7
+ animate: !0,
8
+ entrance: .5,
9
+ labels: "outside",
10
+ shape: "straight",
11
+ legend: !1,
12
+ axis: !1,
13
+ grid: !1,
14
+ names: !0,
15
+ tooltip: "auto",
16
+ tooltipparent: null,
17
+ table: "never",
18
+ totallabel: "Total",
19
+ controls: !0,
20
+ previouslabel: "Previous",
21
+ nextlabel: "Next",
22
+ stephint: "step of the chart",
23
+ threshold: .5,
24
+ replay: !1,
25
+ langattribute: "data-i18n"
26
+ }, T = "cubic-bezier(0.3, 0.3, 0.6, 1)", E = (e, t, n = 1) => ({
4
27
  start: e,
5
28
  span: t,
6
- easing: e + t >= n - 1e-4 ? K : "linear"
7
- }), J = (e, t) => `${e}:${t}`, ae = 0, oe = (e) => Array.from(e.querySelectorAll(`.${G}`)).map((e) => {
29
+ easing: e + t >= n - 1e-4 ? T : "linear"
30
+ }), D = (e, t) => `${e}:${t}`, O = "http://www.w3.org/2000/svg", k = (e) => Math.round(e * 100) / 100, A = (e, t = {}) => {
31
+ let n = document.createElementNS(O, e);
32
+ for (let e in t) {
33
+ let r = t[e];
34
+ n.setAttribute(e, String(typeof r == "number" ? k(r) : r));
35
+ }
36
+ return n;
37
+ }, j = (e, t) => [e, ...t.classes].join(" "), M = (e, t) => {
38
+ let n = document.createElement("span");
39
+ return n.className = e, n.inert = !0, t.appendChild(n), n;
40
+ }, N = (e, t, n, r, i) => {
41
+ e.style.left = `${t / r * 100}%`, e.style.top = `${n / i * 100}%`;
42
+ }, P = 0, ee = (e, t, n, r, i, a) => {
43
+ if (!t.length) return;
44
+ let o = `tablechart-cut-${++P}`, s = A("mask", {
45
+ id: o,
46
+ maskUnits: "userSpaceOnUse"
47
+ });
48
+ s.appendChild(A("rect", {
49
+ x: -n,
50
+ y: -r,
51
+ width: n * 3,
52
+ height: r * 3,
53
+ fill: "white"
54
+ }));
55
+ for (let e of t) e.setAttribute("fill", "black"), s.appendChild(e);
56
+ let c = e.querySelector(":scope > defs");
57
+ if (c || (c = A("defs"), e.prepend(c)), c.appendChild(s), i) {
58
+ for (let e of i) e.setAttribute("mask", `url(#${o})`);
59
+ return;
60
+ }
61
+ let l = null;
62
+ for (let t of Array.from(e.childNodes)) t !== c && (a && t instanceof Element && t.matches(a) ? (l = null, e.appendChild(t)) : (l ?? (l = e.appendChild(A("g", { mask: `url(#${o})` }))), l.appendChild(t)));
63
+ }, F = 0, I = (e) => Array.from(e.querySelectorAll(`.${r}`)).map((e) => {
8
64
  let t = e.tagName === "rect" ? [e] : Array.from(e.querySelectorAll("rect")), n = (e, t) => Number(e.getAttribute(t)), r = Math.min(...t.map((e) => n(e, "x"))), i = Math.min(...t.map((e) => n(e, "y"))), a = Math.max(...t.map((e) => n(e, "x") + n(e, "width"))), o = Math.max(...t.map((e) => n(e, "y") + n(e, "height"))), s = ["--start", "--span"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ");
9
65
  return {
10
66
  row: Number(e.dataset.row),
@@ -15,7 +71,7 @@ var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
15
71
  sideways: e.dataset.grow === "right",
16
72
  part: s
17
73
  };
18
- }), se = {
74
+ }), L = {
19
75
  create: () => null,
20
76
  draw(e, t, n) {
21
77
  let { rows: r, y: i, svg: a, breakAt: o } = n;
@@ -42,29 +98,29 @@ var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
42
98
  [c + 2 * l, t + o],
43
99
  [c + i, t - o]
44
100
  ];
45
- }, 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-${++ae}`, d = L("mask", {
101
+ }, 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-${++F}`, d = A("mask", {
46
102
  id: u,
47
103
  maskUnits: "userSpaceOnUse"
48
104
  });
49
- d.appendChild(L("rect", {
50
- x: -w,
105
+ d.appendChild(A("rect", {
106
+ x: -C,
51
107
  y: -n.height,
52
- width: w * 3,
108
+ width: C * 3,
53
109
  height: n.height * 3,
54
110
  fill: "white"
55
111
  }));
56
112
  let f = [], p = i(o);
57
- for (let e of oe(a)) {
113
+ for (let e of I(a)) {
58
114
  let t = e.sideways ? n.breakX : p;
59
115
  if (t === void 0 || !(e.sideways ? e.x < t && e.x + e.width > t : e.y < p && e.y + e.height > p)) continue;
60
116
  let [i, o] = e.sideways ? [c(e, t), c(e, t + n.breakGap)] : [c(e, p - n.breakGap), c(e, p)];
61
- d.appendChild(L("path", {
117
+ d.appendChild(A("path", {
62
118
  d: l([...i, ...o.slice().reverse()], !0),
63
119
  fill: "black"
64
120
  })), f.push(i, o);
65
- let s = [J("--after", r[e.row - 1]?.slot ?? 0), e.part].filter(Boolean).join("; ");
66
- for (let e of [i, o]) a.appendChild(L("path", {
67
- class: _,
121
+ let s = [D("--after", r[e.row - 1]?.slot ?? 0), e.part].filter(Boolean).join("; ");
122
+ for (let e of [i, o]) a.appendChild(A("path", {
123
+ class: m,
68
124
  "data-part": "edge",
69
125
  "data-note": n.note,
70
126
  d: l(e),
@@ -72,58 +128,92 @@ var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
72
128
  }));
73
129
  }
74
130
  if (!f.length) return;
75
- let m = Array.from(a.querySelectorAll(`.${_}`)), h = L("g", { mask: `url(#${u})` });
76
- for (let e of Array.from(a.childNodes)) m.includes(e) || h.appendChild(e);
77
- let g = L("defs");
78
- g.appendChild(d), a.prepend(g, h);
131
+ let h = Array.from(a.querySelectorAll(`.${m}`)), g = A("g", { mask: `url(#${u})` });
132
+ for (let e of Array.from(a.childNodes)) h.includes(e) || g.appendChild(e);
133
+ let _ = A("defs");
134
+ _.appendChild(d), a.prepend(_, g);
79
135
  }
80
- }, Y = (e, t) => {
136
+ }, R = (e) => {
137
+ let t = -Infinity;
138
+ for (let n of e) t = Math.max(t, n);
139
+ return t;
140
+ }, z = (e) => (e.split(/[.,]/)[1] || "").length, te = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
141
+ minimumFractionDigits: e,
142
+ maximumFractionDigits: e
143
+ }), B = (e, t, n) => {
144
+ let r = te(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
145
+ return [i, r.slice(+!!i).map((e) => e.value).join("")];
146
+ }, V = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), H = (e, t) => {
81
147
  let n = document.createElement("span");
82
- if (n.className = D, n.inert = !0, e.childElementCount > 0) for (let t of Array.from(e.children)) n.appendChild(t.cloneNode(!0));
148
+ if (n.className = "tablechart-badge", n.inert = !0, e.childElementCount > 0) for (let t of Array.from(e.children)) n.appendChild(t.cloneNode(!0));
83
149
  else {
84
150
  n.textContent = (e.textContent || "").trim();
85
151
  let t = e.getAttribute("data-i18n");
86
152
  t && n.setAttribute("data-i18n", t);
87
153
  }
88
154
  return t.appendChild(n), n;
89
- }, ce = (e, t, n, r, i = "%") => {
90
- let a = e?.textContent || "", o = O(a), s = i ? .5 : .5 * 10 ** -z(a.match(/-?[\d.,]+/)?.[0] ?? ""), c = Number.isNaN(o) ? !0 : Math.abs(t - o) <= s + 1e-9, l = {
91
- label: n,
92
- computed: t,
93
- stated: o,
94
- agrees: c
155
+ }, U = (t, n, r, i, a = "%") => {
156
+ let o = t?.textContent || "", s = V(o), c = a ? .5 : .5 * 10 ** -z(o.match(/-?[\d.,]+/)?.[0] ?? ""), l = Number.isNaN(s) ? !0 : Math.abs(n - s) <= c + 1e-9, u = {
157
+ label: r,
158
+ computed: n,
159
+ stated: s,
160
+ agrees: l
95
161
  };
96
- r.checks.push(l), c || console.warn(`[${f}] An annotation reads ${o}${i}, but ${n} is ${Number(t.toFixed(2))}${i}. The chart shows your number.`);
97
- }, le = (e, t) => (t - e) / Math.abs(e) * 100, ue = (e, t) => {
162
+ i.checks.push(u), l || console.warn(`[${e}] An annotation reads ${s}${a}, but ${r} is ${Number(n.toFixed(2))}${a}. The chart shows your number.`);
163
+ }, W = (e, t) => (t - e) / Math.abs(e) * 100, ne = (e, t) => {
98
164
  let n = (t, n) => {
99
165
  let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
100
166
  return Number.isFinite(r) ? r - 1 : n;
101
167
  };
102
168
  return [n("data-from", 0), n("data-to", t - 1)];
103
- }, de = {
104
- create: Y,
105
- draw(e, t, n) {
106
- let { rows: r, cx: i, y: a, unit: o, labelHeight: s, badgeHeight: c, height: l, svg: u, after: d } = n, [p, h] = ue(e, r.length), g = r[p], _ = r[h];
107
- if (!g || !_) {
108
- console.warn(`[${f}] A bracket points at a row that is not there (row ${p + 1} to ${h + 1}, of ${r.length}).`);
169
+ }, re = {
170
+ create: H,
171
+ draw(t, n, r) {
172
+ let { rows: i, cx: o, y: c, unit: l, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = ne(t, i.length), _ = i[h], v = i[g];
173
+ if (!_ || !v) {
174
+ console.warn(`[${e}] A bracket points at a row that is not there (row ${h + 1} to ${g + 1}, of ${i.length}).`);
109
175
  return;
110
176
  }
111
- let v = 7 * o, y = 4 * o, b = i(p), x = i(h), S = Math.min(a(g.value), a(_.value)) - s - y - c * .9, C = (e) => a(e) - s - y, T = `M ${b} ${C(g.value)} L ${b} ${S} L ${x} ${S} L ${x} ${C(_.value) - v}`, E = (C(g.value) - S + Math.abs(x - b) + (C(_.value) - v - S)) / o + 1;
112
- u.appendChild(L("path", {
113
- class: m,
114
- "data-note": n.note,
115
- d: T,
116
- style: `--len:${E.toFixed(1)}; ${J("--after", d)}`
177
+ let y = 7 * l, b = 4 * l, x = o(h), S = o(g), w = Math.min(c(_.value), c(v.value)) - u - b - d * .9, T = (e) => c(e) - u - b, E = `M ${x} ${T(_.value)} L ${x} ${w} L ${S} ${w} L ${S} ${T(v.value) - y}`, O = (T(_.value) - w + Math.abs(S - x) + (T(v.value) - y - w)) / l + 1;
178
+ p.appendChild(A("path", {
179
+ class: a,
180
+ "data-note": r.note,
181
+ d: E,
182
+ style: `--len:${O.toFixed(1)}; ${D("--after", m)}`
117
183
  }));
118
- let D = C(_.value);
119
- u.appendChild(L("polygon", {
120
- class: F,
121
- "data-note": n.note,
122
- points: `${x},${D} ${x - v * .45},${D - v} ${x + v * .45},${D - v}`,
123
- style: J("--after", d)
124
- })), t && (A(t, (b + x) / 2, S, w, l), t.style.setProperty("--after", String(d))), ce(t, le(g.value, _.value), `${g.value} to ${_.value}`, n);
184
+ let k = T(v.value);
185
+ p.appendChild(A("polygon", {
186
+ class: s,
187
+ "data-note": r.note,
188
+ points: `${S},${k} ${S - y * .45},${k - y} ${S + y * .45},${k - y}`,
189
+ style: D("--after", m)
190
+ })), n && (N(n, (x + S) / 2, w, C, f), n.style.setProperty("--after", String(m))), U(n, W(_.value, v.value), `${_.value} to ${v.value}`, r);
125
191
  }
126
- }, fe = (e, t, n) => {
192
+ }, ie = (e, t) => e[0] < t[0] + t[2] && t[0] < e[0] + e[2] && e[1] < t[1] + t[3] && t[1] < e[1] + e[3], G = (e, t) => e[0] >= t[0] && e[1] >= t[1] && e[0] + e[2] <= t[0] + t[2] && e[1] + e[3] <= t[1] + t[3], ae = (e, t, n) => {
193
+ if (e.length > 400) return e.map(() => null);
194
+ let r = 1;
195
+ for (let t of e) for (let [, , e, n] of t) r = Math.max(r, e, n);
196
+ let i = /* @__PURE__ */ new Map(), a = ([e, t, n, i]) => {
197
+ let a = [];
198
+ for (let o = Math.floor(e / r); o <= Math.floor((e + n) / r); o++) for (let e = Math.floor(t / r); e <= Math.floor((t + i) / r); e++) a.push(`${o} ${e}`);
199
+ return a;
200
+ }, o = (e) => {
201
+ for (let t of a(e)) i.get(t)?.push(e) ?? i.set(t, [e]);
202
+ }, s = (e) => G(e, n) && a(e).every((t) => !i.get(t)?.some((t) => ie(e, t)));
203
+ return t.forEach(o), e.map((e) => {
204
+ let t = e.findIndex(s);
205
+ return t < 0 ? null : (o(e[t]), t);
206
+ });
207
+ }, K = /* @__PURE__ */ new WeakMap(), oe = (e) => {
208
+ let t = [...e].filter((e) => !!e), n = t.map((e) => ({
209
+ width: e.offsetWidth,
210
+ height: e.offsetHeight
211
+ }));
212
+ t.forEach((e, t) => K.set(e, n[t]));
213
+ }, q = (e) => K.get(e) ?? {
214
+ width: e.offsetWidth,
215
+ height: e.offsetHeight
216
+ }, se = (e, t, n) => {
127
217
  let r = n.reduce((e, t) => e + t, 0);
128
218
  if (e === "mean") return r ? t.reduce((e, t, r) => e + t * n[r], 0) / r : null;
129
219
  if (e === "median") {
@@ -136,161 +226,174 @@ var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
136
226
  }
137
227
  let i = Number.parseFloat(e);
138
228
  return Number.isFinite(i) ? i : null;
139
- }, pe = {
229
+ }, ce = {
140
230
  create(e, t) {
141
231
  if (!e.textContent?.trim()) return null;
142
- let n = Y(e, t);
232
+ let n = H(e, t);
143
233
  return n.dataset.kind = "reference", n;
144
234
  },
145
- draw(e, t, n) {
146
- let { rows: r, cx: i, y: a, x: o, height: s, unit: c, svg: l, after: u } = n, d = r.filter((e) => !e.isTotal && !e.missing), p = e.hasAttribute("data-name"), m = (e.getAttribute(p ? "data-name" : "data-value") ?? "").trim(), h, g, _;
147
- if (p) {
148
- let e = d.map((e) => O(e.label));
149
- if (n.categories[0]?.parentElement?.dataset.place === "beside" || e.some(Number.isNaN)) {
150
- console.warn(`[${f}] A reference line among the names needs names that are numbers, under columns or points.`);
235
+ draw(t, n, r) {
236
+ let { rows: i, cx: a, y: s, x: c, height: l, unit: u, svg: f, after: p } = r, m = i.filter((e) => !e.isTotal && !e.missing), h = t.hasAttribute("data-name"), g = (t.getAttribute(h ? "data-name" : "data-value") ?? "").trim(), _, v, y;
237
+ if (h) {
238
+ let t = m.map((e) => V(e.label));
239
+ if (r.categories[0]?.parentElement?.dataset.place === "beside" || t.some(Number.isNaN)) {
240
+ console.warn(`[${e}] A reference line among the names needs names that are numbers, under columns or points.`);
151
241
  return;
152
242
  }
153
- let t = fe(m, e, d.map((e) => e.value)), a = t === null ? -1 : e.findIndex((n, r) => n <= t && t <= (e[r + 1] ?? n)), [o, s] = [d[a], d[a + 1] ?? d[a]].map((e) => i(r.indexOf(e))), c = t === null || a < 0 || e[a + 1] === void 0 || e[a + 1] === e[a] ? 0 : (t - e[a]) / (e[a + 1] - e[a]);
154
- _ = t, g = a < 0 ? null : o + c * (s - o), h = !1;
155
- } else _ = fe(m, d.map((e) => e.value), d.map(() => 1)), h = !o, g = _ === null ? null : o ? o(_) : a(_);
156
- if (g === null || _ === null) {
157
- console.warn(`[${f}] A reference line needs a number, "mean" or "median", not "${m}".`);
243
+ let n = se(g, t, m.map((e) => e.value)), o = n === null ? -1 : t.findIndex((e, r) => e <= n && n <= (t[r + 1] ?? e)), [s, c] = [m[o], m[o + 1] ?? m[o]].map((e) => a(i.indexOf(e))), l = n === null || o < 0 || t[o + 1] === void 0 || t[o + 1] === t[o] ? 0 : (n - t[o]) / (t[o + 1] - t[o]);
244
+ y = n, v = o < 0 ? null : s + l * (c - s), _ = !1;
245
+ } else {
246
+ let e = !!r.frame && t.getAttribute("data-axis") === "y", n = r.frame ? r.series.flatMap((e, t) => e.group ? [] : [t])[+!!e] ?? 0 : 0;
247
+ y = se(g, m.map((e) => e.cells[n]?.value ?? e.value), m.map(() => 1)), _ = e || !c, v = y === null ? null : c && !e ? c(y) : s(y);
248
+ }
249
+ if (v === null || y === null) {
250
+ console.warn(`[${e}] A reference line needs a number, "mean" or "median", not "${g}".`);
158
251
  return;
159
252
  }
160
- let v = r.length > 0 ? i(r.length - 1) + i(0) : w, b = o ? s : a(0);
161
- if (l.appendChild(L("line", {
162
- class: y,
163
- "data-note": n.note,
164
- ...e.getAttribute("data-line") === "dotted" && { "data-line": "dotted" },
165
- ...h ? {
166
- x1: 0,
167
- x2: v,
168
- y1: g,
169
- y2: g
253
+ let [b, x, S, w] = r.frame ? [
254
+ r.frame[0],
255
+ r.frame[1],
256
+ r.frame[0] + r.frame[2],
257
+ r.frame[1] + r.frame[3]
258
+ ] : [
259
+ 0,
260
+ 0,
261
+ i.length > 0 ? a(i.length - 1) + a(0) : C,
262
+ c ? l : s(0)
263
+ ];
264
+ if (f.insertBefore(A("line", {
265
+ class: o,
266
+ "data-note": r.note,
267
+ ...t.getAttribute("data-line") === "dotted" && { "data-line": "dotted" },
268
+ ..._ ? {
269
+ x1: b,
270
+ x2: S,
271
+ y1: v,
272
+ y2: v
170
273
  } : {
171
- x1: g,
172
- x2: g,
173
- y1: 0,
174
- y2: b
274
+ x1: v,
275
+ x2: v,
276
+ y1: x,
277
+ y2: w
175
278
  },
176
- style: J("--after", u)
177
- })), t) {
178
- let e = N(t).width * c, r = N(t).height * c, i = 4 * c, a = h ? [
279
+ style: D("--after", p)
280
+ }), f.querySelector(`:scope > .${d}`)), n) {
281
+ let e = q(n).width * u, t = q(n).height * u, i = 4 * u, a = _ ? [
179
282
  [
180
- v - e,
181
- g - r / 2,
283
+ S - e,
284
+ v - t / 2,
182
285
  e,
183
- r
286
+ t
184
287
  ],
185
288
  [
186
- v - e,
187
- g - r - i,
289
+ S - e,
290
+ v - t - i,
188
291
  e,
189
- r
292
+ t
190
293
  ],
191
294
  [
192
- v - e,
193
- g + i,
295
+ S - e,
296
+ v + i,
194
297
  e,
195
- r
298
+ t
196
299
  ]
197
300
  ] : [
198
- 0,
199
- r,
200
- 2 * r
201
- ].flatMap((t) => [
301
+ x,
302
+ x + t,
303
+ x + 2 * t
304
+ ].flatMap((n) => [
202
305
  [
203
- g - e / 2,
204
- t,
306
+ v - e / 2,
307
+ n,
205
308
  e,
206
- r
309
+ t
207
310
  ],
208
311
  [
209
- g + i,
210
- t,
312
+ v + i,
313
+ n,
211
314
  e,
212
- r
315
+ t
213
316
  ],
214
317
  [
215
- g - i - e,
216
- t,
318
+ v - i - e,
319
+ n,
217
320
  e,
218
- r
321
+ t
219
322
  ]
220
- ]), [o] = E([a], n.taken, [
323
+ ]), [o] = ae([a], r.taken, [
221
324
  0,
222
325
  0,
223
- w,
224
- s
225
- ]), l = a[o ?? 0];
226
- n.taken.push(l), A(t, l[0] + e / 2, l[1] + r / 2, w, s), t.style.setProperty("--after", String(u)), (m === "mean" || m === "median") && ce(t, _, `the ${m}`, n, "");
326
+ C,
327
+ l
328
+ ]), s = a[o ?? 0];
329
+ r.taken.push(s), N(n, s[0] + e / 2, s[1] + t / 2, C, l), n.style.setProperty("--after", String(p)), (g === "mean" || g === "median") && U(n, y, `the ${g}`, r, "");
227
330
  }
228
331
  }
229
- }, me = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, he = {
230
- create: Y,
332
+ }, le = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, J = {
333
+ create: H,
231
334
  draw(e, t, n) {
232
- let { rows: r, cx: i, y: a, unit: o, labelHeight: s, height: c, svg: l, values: u, after: d } = n, f = r[0], p = r[r.length - 1];
233
- if (!f || !p) return;
234
- let h = s + 18 * o, g = 10 * o, _ = 10 * o, v = i(0), y = a(f.value) - h, b = i(r.length - 1), x = a(p.value) - h, S = 0;
335
+ let { rows: r, cx: i, y: o, unit: c, labelHeight: l, height: u, svg: d, values: f, after: p } = n, m = r[0], h = r[r.length - 1];
336
+ if (!m || !h) return;
337
+ let g = l + 18 * c, _ = 10 * c, v = 10 * c, y = i(0), b = o(m.value) - g, x = i(r.length - 1), S = o(h.value) - g, w = 0;
235
338
  r.forEach((e, t) => {
236
- let n = b === v ? 0 : (i(t) - v) / (b - v), r = y + n * (x - y) - (a(e.value) - h);
237
- r > S && (S = r);
238
- }), y -= S, x -= S;
239
- let C = b - v, T = x - y, E = Math.hypot(C, T) || 1, D = C / E, O = T / E;
240
- v -= D * g, y -= O * g, b += D * g, x += O * g;
241
- let k = Number.parseFloat(e.getAttribute("data-at") || "0.5");
339
+ let n = x === y ? 0 : (i(t) - y) / (x - y), r = b + n * (S - b) - (o(e.value) - g);
340
+ r > w && (w = r);
341
+ }), b -= w, S -= w;
342
+ let T = x - y, E = S - b, O = Math.hypot(T, E) || 1, k = T / O, j = E / O;
343
+ y -= k * _, b -= j * _, x += k * _, S += j * _;
344
+ let M = Number.parseFloat(e.getAttribute("data-at") || "0.5");
242
345
  if (t) {
243
- let e = v + (b - v) * k, n = y + (x - y) * k, c = N(t).width * o / 2, l = n + N(t).height * o / 2 + 8 * o, d = 0;
346
+ let e = y + (x - y) * M, n = b + (S - b) * M, a = q(t).width * c / 2, s = n + q(t).height * c / 2 + 8 * c, u = 0;
244
347
  r.forEach((t, n) => {
245
- let r = (u[n] ? N(u[n]).width : 0) * o / 2;
246
- if (Math.abs(i(n) - e) >= c + r) return;
247
- let f = a(t.value) - 7 * o - s;
248
- d = Math.max(d, l - f);
249
- }), y -= d, x -= d;
348
+ let r = (f[n] ? q(f[n]).width : 0) * c / 2;
349
+ if (Math.abs(i(n) - e) >= a + r) return;
350
+ let d = o(t.value) - 7 * c - l;
351
+ u = Math.max(u, s - d);
352
+ }), b -= u, S -= u;
250
353
  }
251
- let j = b - D * _, M = x - O * _, P = Math.hypot(j - v, M - y) / o + 1;
252
- l.appendChild(L("line", {
253
- class: m,
354
+ let P = x - k * v, ee = S - j * v, F = Math.hypot(P - y, ee - b) / c + 1;
355
+ d.appendChild(A("line", {
356
+ class: a,
254
357
  "data-note": n.note,
255
- x1: v,
256
- y1: y,
257
- x2: j,
258
- y2: M,
259
- style: `--len:${P.toFixed(1)}; ${J("--after", d)}`
358
+ x1: y,
359
+ y1: b,
360
+ x2: P,
361
+ y2: ee,
362
+ style: `--len:${F.toFixed(1)}; ${D("--after", p)}`
260
363
  }));
261
- let I = -O, R = D, z = _ * .42;
262
- l.appendChild(L("polygon", {
263
- class: F,
364
+ let I = -j, L = k, R = v * .42;
365
+ d.appendChild(A("polygon", {
366
+ class: s,
264
367
  "data-note": n.note,
265
368
  points: [
266
- `${b},${x}`,
267
- `${j + I * z},${M + R * z}`,
268
- `${j - I * z},${M - R * z}`
369
+ `${x},${S}`,
370
+ `${P + I * R},${ee + L * R}`,
371
+ `${P - I * R},${ee - L * R}`
269
372
  ].join(" "),
270
- style: J("--after", d)
271
- })), t && (A(t, v + (b - v) * k, y + (x - y) * k, w, c), t.style.setProperty("--after", String(d)));
272
- let B = Number.parseFloat(e.getAttribute("data-years") || "");
273
- !Number.isNaN(B) && B > 0 && ce(t, me(f.value, p.value, B), `${f.value} to ${p.value} over ${B} years`, n);
373
+ style: D("--after", p)
374
+ })), t && (N(t, y + (x - y) * M, b + (S - b) * M, C, u), t.style.setProperty("--after", String(p)));
375
+ let z = Number.parseFloat(e.getAttribute("data-years") || "");
376
+ !Number.isNaN(z) && z > 0 && U(t, le(m.value, h.value, z), `${m.value} to ${h.value} over ${z} years`, n);
274
377
  }
275
- }, ge = (e, t, n, r, i) => {
378
+ }, ue = (e, t, n, r, i) => {
276
379
  if (!r) return e / t * n;
277
380
  let { lo: a, hi: o, gap: s, share: c } = r, l = n * c, u = (n - l - i) / (a + (t - o)), d = l / (o - a);
278
381
  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;
279
- }, _e = (e, t, n) => {
382
+ }, de = (e, t, n) => {
280
383
  let r = .15, i = Math.min(e * .7 / (t + (t - 1) * r), n), a = t * i + (t - 1) * i * r;
281
384
  return {
282
385
  size: i,
283
386
  gap: i * r,
284
387
  offset: (e) => -a / 2 + e * i * 1.15
285
388
  };
286
- }, ve = (e, t, n) => {
389
+ }, Y = (e, t, n) => {
287
390
  let r = e.series[n], i = e.series.some((e) => e.focus) && !r.focus;
288
391
  return {
289
392
  "data-series": n + 1,
290
393
  ...i && { "data-muted": "" },
291
- style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${J("--i", t.slot)}`
394
+ style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${D("--i", t.slot)}`
292
395
  };
293
- }, ye = (e, t, n = !1) => {
396
+ }, fe = (e, t, n = !1) => {
294
397
  let r = 0, i = 0;
295
398
  return Array.from({ length: t }, (t, a) => {
296
399
  let o = e.cells[a] ?? e.cells[0], s = o.missing ? 0 : o.value;
@@ -317,40 +420,40 @@ var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
317
420
  cell: o
318
421
  };
319
422
  });
320
- }, be = (e, t, n = !1) => {
321
- let r = ye(e, t, n);
423
+ }, pe = (e, t, n = !1) => {
424
+ let r = fe(e, t, n);
322
425
  return {
323
426
  top: Math.max(0, ...r.map((e) => e.to)),
324
427
  bottom: Math.min(0, ...r.map((e) => e.to))
325
428
  };
326
- }, xe = (e, t) => {
327
- let { top: n, bottom: r } = be(e, t);
429
+ }, me = (e, t) => {
430
+ let { top: n, bottom: r } = pe(e, t);
328
431
  return n + r;
329
- }, Se = (e, t, n) => {
432
+ }, he = (e, t, n) => {
330
433
  let r = t.series.some((e) => e.focus);
331
434
  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})`);
332
- }, Ce = (e, t, n, r = {}, i = "") => {
333
- let a = {
334
- class: M(G, t),
435
+ }, ge = (e, t, n, i = {}, a = "") => {
436
+ let o = {
437
+ class: j(r, t),
335
438
  "data-kind": "bar",
336
439
  "data-row": n + 1,
337
- ...r
338
- }, o = J("--i", t.slot) + (i ? `; transform-origin: ${i}` : ""), s = L("g", {
339
- ...a,
440
+ ...i
441
+ }, s = D("--i", t.slot) + (a ? `; transform-origin: ${a}` : ""), c = A("g", {
442
+ ...o,
340
443
  "data-stack": "",
341
- style: o
444
+ style: s
342
445
  });
343
- return e.svg.appendChild(s), (i, a) => {
344
- let o = r["data-grow"] === void 0 ? {} : { "data-grow": r["data-grow"] };
345
- s.appendChild(L("rect", {
446
+ return e.svg.appendChild(c), (r, a) => {
447
+ let o = i["data-grow"] === void 0 ? {} : { "data-grow": i["data-grow"] };
448
+ c.appendChild(A("rect", {
346
449
  ...o,
347
450
  ...a,
348
- class: M(u, t),
451
+ class: j("tablechart-piece", t),
349
452
  "data-row": n + 1,
350
- ...ve(e, t, i)
453
+ ...Y(e, t, r)
351
454
  }));
352
455
  };
353
- }, we = 6, Te = (e, t, n) => e.some((e) => N(e).width * n > t - we * n), Ee = (e, t, n) => t >= N(e).height * n * 1.6, De = (e, t, n) => t >= N(e).width * n * 1.5, Oe = (e, t, n, r, i = .7) => {
456
+ }, _e = 6, ve = (e, t, n) => e.some((e) => q(e).width * n > t - _e * n), ye = (e, t, n) => t >= q(e).height * n * 1.6, be = (e, t, n) => t >= q(e).width * n * 1.5, xe = (e, t, n, r, i = .7) => {
354
457
  e.style.setProperty(r, "1");
355
458
  let a = 1;
356
459
  for (let e of t) {
@@ -359,10 +462,10 @@ var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
359
462
  }
360
463
  let o = a >= i ? a : 0;
361
464
  return e.style.setProperty(r, String(o || i)), o;
362
- }, ke = (e, t) => (e.sort((e, t) => e.y - t.y), e.forEach((n, r) => {
465
+ }, Se = (e, t) => (e.sort((e, t) => e.y - t.y), e.forEach((n, r) => {
363
466
  let i = e[r - 1];
364
467
  i && n.y < i.y + t && (n.y = i.y + t);
365
- }), e), Ae = {
468
+ }), e), Ce = {
366
469
  segments: (e) => e.map((e) => ({
367
470
  ...e,
368
471
  from: 0,
@@ -382,45 +485,45 @@ var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
382
485
  categories: "beside",
383
486
  headroom: () => 0,
384
487
  draw(e) {
385
- let { segments: t, height: n, unit: r, svg: i, values: a, categories: o, config: s, barMax: c } = e, l = e.series.length > 1, u = Math.max(U(o.map((e) => N(e).width * r)), 0), d = Math.min(u + 10 * r, w * .42);
386
- o[0]?.parentElement?.style.setProperty("--_beside", `${((d - 8 * r) / w * 100).toFixed(2)}%`);
387
- let f = w - 4 * r, p = e.stacked ? Math.max(U(e.rows.map((t) => be(t, e.series.length).top)), 0) || 1 : Math.max(U(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, m = e.stacked ? Math.max(U(e.rows.map((t) => -be(t, e.series.length).bottom)), 0) : Math.max(U(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => -e.value))), 0), h = Math.max(p, e.domain?.[1] ?? 0), g = Math.max(m, -(e.domain?.[0] ?? 0)), _ = Math.max(h, e.squeeze?.hi ?? 0) + g, v = (t, n) => ge(Math.abs(t), _, n, e.squeeze, e.breakGap), y = n / t.length, b = (e) => (e + .5) * y, S = Math.min(y * s.barfill, c), C = _e(y, e.series.length, c), T = a[0] ?? e.totals[0], E = T ? N(T).height * r * .56 : 0, D = Math.max(((l && !e.stacked ? C.size : S) - E) / 2, 5 * r), O = (e) => N(e).width * r, k = (e) => e.length ? U(e.map(O)) + D + 4 * r : 0, j = (t, n) => (e.rows[n].cells[t] ?? e.rows[n].cells[0]).value, P = e.seriesValues.flatMap((e, t) => e.map((e, n) => ({
488
+ let { segments: t, height: n, unit: a, svg: o, values: s, categories: c, config: l, barMax: u } = e, d = e.series.length > 1, f = Math.max(R(c.map((e) => q(e).width * a)), 0), p = Math.min(f + 10 * a, C * .42);
489
+ c[0]?.parentElement?.style.setProperty("--_beside", `${((p - 8 * a) / C * 100).toFixed(2)}%`);
490
+ let m = C - 4 * a, h = e.stacked ? Math.max(R(e.rows.map((t) => pe(t, e.series.length).top)), 0) || 1 : Math.max(R(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = e.stacked ? Math.max(R(e.rows.map((t) => -pe(t, e.series.length).bottom)), 0) : Math.max(R(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => -e.value))), 0), _ = Math.max(h, e.domain?.[1] ?? 0), v = Math.max(g, -(e.domain?.[0] ?? 0)), y = Math.max(_, e.squeeze?.hi ?? 0) + v, b = (t, n) => ue(Math.abs(t), y, n, e.squeeze, e.breakGap), x = n / t.length, S = (e) => (e + .5) * x, w = Math.min(x * l.barfill, u), T = de(x, e.series.length, u), E = s[0] ?? e.totals[0], O = E ? q(E).height * a * .56 : 0, k = Math.max(((d && !e.stacked ? T.size : w) - O) / 2, 5 * a), M = (e) => q(e).width * a, P = (e) => e.length ? R(e.map(M)) + k + 4 * a : 0, ee = (t, n) => (e.rows[n].cells[t] ?? e.rows[n].cells[0]).value, F = e.seriesValues.flatMap((e, t) => e.map((e, n) => ({
388
491
  label: e,
389
- value: j(t, n)
390
- }))), F = (t) => {
391
- let n = be(e.rows[t], e.series.length);
492
+ value: ee(t, n)
493
+ }))), I = (t) => {
494
+ let n = pe(e.rows[t], e.series.length);
392
495
  return n.top === 0 && n.bottom < 0;
393
- }, I = e.stacked ? k(e.totals.filter((e, t) => !F(t))) : l ? k(P.filter((e) => e.value >= 0).map((e) => e.label)) : 0, R = e.stacked ? k(e.totals.filter((e, t) => F(t))) : l ? k(P.filter((e) => e.value < 0).map((e) => e.label)) : 0;
394
- if (!l && !e.stacked) for (let e = 0; e < 3; e++) {
395
- let e = f - d - I - R, n = t.map((e, t) => ({
496
+ }, L = e.stacked ? P(e.totals.filter((e, t) => !I(t))) : d ? P(F.filter((e) => e.value >= 0).map((e) => e.label)) : 0, z = e.stacked ? P(e.totals.filter((e, t) => I(t))) : d ? P(F.filter((e) => e.value < 0).map((e) => e.label)) : 0;
497
+ if (!d && !e.stacked) for (let e = 0; e < 3; e++) {
498
+ let e = m - p - L - z, n = t.map((e, t) => ({
396
499
  seg: e,
397
- label: a[t]
398
- })).filter(({ seg: t, label: n }) => !De(n, v(t.value, e), r)), i = k(n.filter(({ seg: e }) => e.value >= 0).map(({ label: e }) => e)), o = k(n.filter(({ seg: e }) => e.value < 0).map(({ label: e }) => e));
399
- if (i <= I && o <= R) break;
400
- I = Math.max(I, i), R = Math.max(R, o);
500
+ label: s[t]
501
+ })).filter(({ seg: t, label: n }) => !be(n, b(t.value, e), a)), r = P(n.filter(({ seg: e }) => e.value >= 0).map(({ label: e }) => e)), i = P(n.filter(({ seg: e }) => e.value < 0).map(({ label: e }) => e));
502
+ if (r <= L && i <= z) break;
503
+ L = Math.max(L, r), z = Math.max(z, i);
401
504
  }
402
- let z = f - d - I - R, B = d + R + v(g, z), V = (e) => e < 0 ? B - v(e, z) : B + v(e, z);
505
+ let te = m - p - L - z, B = p + z + b(v, te), V = (e) => e < 0 ? B - b(e, te) : B + b(e, te);
403
506
  if (e.squeeze && (e.breakX = V(e.squeeze.gap)), e.x = V, e.stacked) {
404
- e.rows.forEach((t, i) => {
405
- let a = be(t, e.series.length), s = Ce(e, t, i, { "data-grow": "right" }, a.bottom < 0 ? `${B - V(a.bottom)}px center` : ""), c = b(i) - S / 2;
406
- ye(t, e.series.length).forEach(({ from: t, to: a, cell: o }, l) => {
407
- let u = e.seriesValues[l][i];
408
- if (u.dataset.place = "none", o.missing || a === t) return;
409
- let d = Math.min(V(t), V(a)), f = Math.max(V(t), V(a));
410
- s(l, {
507
+ e.rows.forEach((t, r) => {
508
+ let i = pe(t, e.series.length), o = ge(e, t, r, { "data-grow": "right" }, i.bottom < 0 ? `${B - V(i.bottom)}px center` : ""), s = S(r) - w / 2;
509
+ fe(t, e.series.length).forEach(({ from: t, to: i, cell: c }, l) => {
510
+ let u = e.seriesValues[l][r];
511
+ if (u.dataset.place = "none", c.missing || i === t) return;
512
+ let d = Math.min(V(t), V(i)), f = Math.max(V(t), V(i));
513
+ o(l, {
411
514
  x: d,
412
- y: c,
515
+ y: s,
413
516
  width: Math.max(f - d, 1),
414
- height: S,
415
- ...a < t && { "data-grow": "left" }
416
- }), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !De(u, f - d, r) || N(u).height * r > S), Se(u, e, l), A(u, (d + f) / 2, b(i), w, n);
517
+ height: w,
518
+ ...i < t && { "data-grow": "left" }
519
+ }), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !be(u, f - d, a) || q(u).height * a > w), he(u, e, l), N(u, (d + f) / 2, S(r), C, n);
417
520
  });
418
- let l = e.totals[i];
419
- l && (l.dataset.place = F(i) ? "before" : "after", A(l, F(i) ? V(a.bottom) - D : V(a.top) + D, b(i), w, n));
420
- let u = o[i];
421
- u && A(u, d - 8 * r, b(i), w, n);
422
- }), i.appendChild(L("line", {
423
- class: x,
521
+ let l = e.totals[r];
522
+ l && (l.dataset.place = I(r) ? "before" : "after", N(l, I(r) ? V(i.bottom) - k : V(i.top) + k, S(r), C, n));
523
+ let u = c[r];
524
+ u && N(u, p - 8 * a, S(r), C, n);
525
+ }), o.appendChild(A("line", {
526
+ class: i,
424
527
  x1: B,
425
528
  x2: B,
426
529
  y1: 0,
@@ -428,36 +531,36 @@ var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
428
531
  }));
429
532
  return;
430
533
  }
431
- if (l) {
534
+ if (d) {
432
535
  e.plot.dataset.grouped = "";
433
- let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), a = Oe(e.plot, t, (e) => ({
434
- size: N(e).height * r,
435
- room: C.size + C.gap * .5
536
+ let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = xe(e.plot, t, (e) => ({
537
+ size: q(e).height * a,
538
+ room: T.size + T.gap * .5
436
539
  }), "--_fit");
437
- e.rows.forEach((t, s) => {
438
- e.series.forEach((r, o) => {
439
- let c = t.cells[o] ?? t.cells[0], l = e.seriesValues[o][s];
440
- if (c.missing) {
441
- l.dataset.place = "none";
540
+ e.rows.forEach((t, i) => {
541
+ e.series.forEach((a, c) => {
542
+ let l = t.cells[c] ?? t.cells[0], u = e.seriesValues[c][i];
543
+ if (l.missing) {
544
+ u.dataset.place = "none";
442
545
  return;
443
546
  }
444
- let u = V(c.value), d = c.value < 0, f = b(s) + C.offset(o);
445
- i.appendChild(L("rect", {
446
- class: M(G, t),
547
+ let d = V(l.value), f = l.value < 0, p = S(i) + T.offset(c), m = Math.max(Math.abs(d - B), 1);
548
+ l.value !== 0 && o.appendChild(A("rect", {
549
+ class: j(r, t),
447
550
  "data-kind": "bar",
448
- "data-row": s + 1,
449
- "data-grow": d ? "left" : "right",
450
- x: Math.min(u, B),
451
- y: f,
452
- width: Math.max(Math.abs(u - B), 1),
453
- height: C.size,
454
- ...ve(e, t, o)
455
- })), l.dataset.place = d ? "before" : "after", l.toggleAttribute("data-left-out", !a), A(l, d ? u - D : u + D, f + C.size / 2, w, n);
551
+ "data-row": i + 1,
552
+ "data-grow": f ? "left" : "right",
553
+ x: f ? B - m : B,
554
+ y: p,
555
+ width: m,
556
+ height: T.size,
557
+ ...Y(e, t, c)
558
+ })), u.dataset.place = f ? "before" : "after", u.toggleAttribute("data-left-out", !s), N(u, f ? d - k : d + k, p + T.size / 2, C, n);
456
559
  });
457
- let c = o[s];
458
- c && A(c, d - 8 * r, b(s), w, n);
459
- }), i.appendChild(L("line", {
460
- class: x,
560
+ let l = c[i];
561
+ l && N(l, p - 8 * a, S(i), C, n);
562
+ }), o.appendChild(A("line", {
563
+ class: i,
461
564
  x1: B,
462
565
  x2: B,
463
566
  y1: 0,
@@ -465,33 +568,33 @@ var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
465
568
  }));
466
569
  return;
467
570
  }
468
- let H = t.map((e, t) => De(a[t], Math.abs(V(e.value) - B), r));
469
- t.forEach((t, s) => {
470
- let c = V(t.value), l = b(s), u = t.value < 0, f = Math.abs(c - B);
471
- i.appendChild(L("rect", {
472
- class: M(G, t),
571
+ let H = t.map((e, t) => be(s[t], Math.abs(V(e.value) - B), a));
572
+ t.forEach((t, i) => {
573
+ let l = V(t.value), u = S(i), d = t.value < 0, f = Math.abs(l - B), m = Math.max(f, 1);
574
+ t.value !== 0 && o.appendChild(A("rect", {
575
+ class: j(r, t),
473
576
  "data-kind": t.kind,
474
- "data-row": s + 1,
475
- "data-grow": u ? "left" : "right",
476
- x: Math.min(c, B),
477
- y: l - S / 2,
478
- width: Math.max(f, 1),
479
- height: S,
480
- style: J("--i", t.slot)
577
+ "data-row": i + 1,
578
+ "data-grow": d ? "left" : "right",
579
+ x: d ? B - m : B,
580
+ y: u - w / 2,
581
+ width: m,
582
+ height: w,
583
+ style: D("--i", t.slot)
481
584
  }));
482
- let p = a[s], m = Math.max(Math.min(D, f - O(p) - 6 * r), 6 * r), h = u ? 1 : -1;
483
- p.dataset.place = H[s] ? "inside" : u ? "before" : "after", p.dataset.kind = t.kind, A(p, H[s] ? e.insideAlign === "center" ? (B + c) / 2 : e.insideAlign === "start" ? B - h * (m + O(p) / 2) : c + h * (m + O(p) / 2) : c - h * D, l, w, n);
484
- let g = o[s];
485
- g && A(g, d - 8 * r, l, w, n);
486
- }), i.appendChild(L("line", {
487
- class: x,
585
+ let h = s[i], g = Math.max(Math.min(k, f - M(h) - 6 * a), 6 * a), _ = d ? 1 : -1;
586
+ h.dataset.place = H[i] ? "inside" : d ? "before" : "after", h.dataset.kind = t.kind, N(h, H[i] ? e.insideAlign === "center" ? (B + l) / 2 : e.insideAlign === "start" ? B - _ * (g + M(h) / 2) : l + _ * (g + M(h) / 2) : l - _ * k, u, C, n);
587
+ let v = c[i];
588
+ v && N(v, p - 8 * a, u, C, n);
589
+ }), o.appendChild(A("line", {
590
+ class: i,
488
591
  x1: B,
489
592
  x2: B,
490
593
  y1: 0,
491
594
  y2: n
492
595
  }));
493
596
  }
494
- }, je = {
597
+ }, we = {
495
598
  segments: (e) => e.map((e) => ({
496
599
  ...e,
497
600
  from: 0,
@@ -505,102 +608,103 @@ var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
505
608
  breakable: !0,
506
609
  headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 4 * r + (n ? t * 1.6 : 0),
507
610
  draw(e) {
508
- let { segments: t, cx: n, y: r, barWidth: i, height: a, unit: o, svg: s, values: c, labels: l, insideAlign: u } = e, d = r(0);
611
+ let { segments: t, cx: n, y: a, barWidth: o, height: s, unit: c, svg: l, values: u, labels: d, insideAlign: f } = e, p = a(0);
509
612
  if (e.stacked) {
510
- e.rows.forEach((t, s) => {
511
- let c = be(t, e.series.length), l = Ce(e, t, s, {}, c.bottom < 0 ? `center ${d - r(c.top)}px` : ""), u = n(s) - i / 2;
512
- ye(t, e.series.length).forEach(({ from: t, to: c, cell: d }, f) => {
513
- let p = e.seriesValues[f][s];
514
- if (p.dataset.place = "none", d.missing || c === t) return;
515
- let m = Math.min(r(c), r(t)), h = Math.max(r(c), r(t));
613
+ e.rows.forEach((t, r) => {
614
+ let i = pe(t, e.series.length), l = ge(e, t, r, {}, i.bottom < 0 ? `center ${p - a(i.top)}px` : ""), u = n(r) - o / 2;
615
+ fe(t, e.series.length).forEach(({ from: t, to: i, cell: d }, f) => {
616
+ let p = e.seriesValues[f][r];
617
+ if (p.dataset.place = "none", d.missing || i === t) return;
618
+ let m = Math.min(a(i), a(t)), h = Math.max(a(i), a(t));
516
619
  l(f, {
517
620
  x: u,
518
621
  y: m,
519
- width: i,
622
+ width: o,
520
623
  height: Math.max(h - m, 1),
521
- ...c < t && { "data-grow": "down" }
522
- }), p.dataset.place = "inside", p.toggleAttribute("data-left-out", !Ee(p, h - m, o) || N(p).width * o > i - 4 * o), Se(p, e, f), A(p, n(s), (m + h) / 2, w, a);
624
+ ...i < t && { "data-grow": "down" }
625
+ }), p.dataset.place = "inside", p.toggleAttribute("data-left-out", !ye(p, h - m, c) || q(p).width * c > o - 4 * c), he(p, e, f), N(p, n(r), (m + h) / 2, C, s);
523
626
  });
524
- let f = e.totals[s];
525
- if (f) {
526
- let e = c.top === 0 && c.bottom < 0;
527
- f.dataset.place = e ? "below" : "outside", A(f, n(s), e ? r(c.bottom) + 4 * o : r(c.top) - 4 * o, w, a);
627
+ let d = e.totals[r];
628
+ if (d) {
629
+ let e = i.top === 0 && i.bottom < 0;
630
+ d.dataset.place = e ? "below" : "outside", N(d, n(r), e ? a(i.bottom) + 4 * c : a(i.top) - 4 * c, C, s);
528
631
  }
529
- }), s.appendChild(L("line", {
530
- class: x,
632
+ }), l.appendChild(A("line", {
633
+ class: i,
531
634
  x1: 0,
532
- x2: w,
533
- y1: d,
534
- y2: d
635
+ x2: C,
636
+ y1: p,
637
+ y2: p
535
638
  }));
536
639
  return;
537
640
  }
538
641
  if (e.series.length > 1) {
539
- let t = _e(n(1) - n(0) || n(0) * 2, e.series.length, e.barMax);
642
+ let t = de(n(1) - n(0) || n(0) * 2, e.series.length, e.barMax);
540
643
  e.plot.dataset.grouped = "";
541
- let i = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), c = Oe(e.plot, i, (e) => ({
542
- size: N(e).width * o,
644
+ let o = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), u = xe(e.plot, o, (e) => ({
645
+ size: q(e).width * c,
543
646
  room: t.size + t.gap * .5
544
647
  }), "--_fit");
545
- e.rows.forEach((i, l) => {
546
- e.series.forEach((u, f) => {
547
- let p = i.cells[f] ?? i.cells[0], m = e.seriesValues[f][l], h = n(l) + t.offset(f);
548
- if (p.missing) {
549
- m.dataset.place = "none";
648
+ e.rows.forEach((i, o) => {
649
+ e.series.forEach((d, f) => {
650
+ let m = i.cells[f] ?? i.cells[0], h = e.seriesValues[f][o], g = n(o) + t.offset(f);
651
+ if (m.missing) {
652
+ h.dataset.place = "none";
550
653
  return;
551
654
  }
552
- let g = r(p.value), _ = p.value < 0;
553
- s.appendChild(L("rect", {
554
- class: M(G, i),
655
+ let _ = a(m.value), v = m.value < 0, y = Math.max(Math.abs(p - _), 1);
656
+ m.value !== 0 && l.appendChild(A("rect", {
657
+ class: j(r, i),
555
658
  "data-kind": "bar",
556
- "data-row": l + 1,
557
- ..._ && { "data-grow": "down" },
558
- x: h,
559
- y: Math.min(g, d),
659
+ "data-row": o + 1,
660
+ ...v && { "data-grow": "down" },
661
+ x: g,
662
+ y: v ? p : p - y,
560
663
  width: t.size,
561
- height: Math.max(Math.abs(d - g), 1),
562
- ...ve(e, i, f)
563
- })), m.dataset.place = _ ? "below" : "outside", m.toggleAttribute("data-left-out", !c), A(m, h + t.size / 2, _ ? g + 4 * o : g - 4 * o, w, a);
664
+ height: y,
665
+ ...Y(e, i, f)
666
+ })), h.dataset.place = v ? "below" : "outside", h.toggleAttribute("data-left-out", !u), N(h, g + t.size / 2, v ? _ + 4 * c : _ - 4 * c, C, s);
564
667
  });
565
- }), s.appendChild(L("line", {
566
- class: x,
668
+ }), l.appendChild(A("line", {
669
+ class: i,
567
670
  x1: 0,
568
- x2: w,
569
- y1: d,
570
- y2: d
671
+ x2: C,
672
+ y1: p,
673
+ y2: p
571
674
  }));
572
675
  return;
573
676
  }
574
- let f = Te(c, i, o), p = t.map((e, t) => l === "inside" && !f && !e.missing && Ee(c[t], Math.abs(d - r(e.value)), o)), m = c[0] ? N(c[0]).height * o * .56 : 0, h = Infinity;
575
- for (let [e, t] of c.entries()) p[e] && (h = Math.min(h, (i - N(t).width * o) / 2));
677
+ let m = ve(u, o, c), h = t.map((e, t) => d === "inside" && !m && !e.missing && ye(u[t], Math.abs(p - a(e.value)), c)), g = u[0] ? q(u[0]).height * c * .56 : 0, _ = Infinity;
678
+ for (let [e, t] of u.entries()) h[e] && (_ = Math.min(_, (o - q(t).width * c) / 2));
576
679
  t.forEach((e, t) => {
577
- let l = r(e.value), f = e.value < 0;
680
+ let i = a(e.value), d = e.value < 0;
578
681
  if (e.missing) {
579
- A(c[t], n(t), d - 4 * o, w, a), c[t].dataset.place = "outside";
682
+ N(u[t], n(t), p - 4 * c, C, s), u[t].dataset.place = "outside";
580
683
  return;
581
684
  }
582
- s.appendChild(L("rect", {
583
- class: M(G, e),
685
+ let m = Math.max(Math.abs(p - i), 1);
686
+ e.value !== 0 && l.appendChild(A("rect", {
687
+ class: j(r, e),
584
688
  "data-kind": e.kind,
585
689
  "data-row": t + 1,
586
- ...f && { "data-grow": "down" },
587
- x: n(t) - i / 2,
588
- y: Math.min(l, d),
589
- width: i,
590
- height: Math.max(Math.abs(d - l), 1),
591
- style: J("--i", e.slot)
690
+ ...d && { "data-grow": "down" },
691
+ x: n(t) - o / 2,
692
+ y: d ? p : p - m,
693
+ width: o,
694
+ height: m,
695
+ style: D("--i", e.slot)
592
696
  }));
593
- let g = f ? -1 : 1, _ = Math.min(h, (Math.abs(d - l) - m) / 2), v = u === "center" ? (l + d) / 2 : u === "start" ? d - g * (_ + m / 2) : l + g * (_ + m / 2), y = f ? l + 4 * o : l - 4 * o;
594
- A(c[t], n(t), p[t] ? v : y, w, a), c[t].dataset.place = p[t] ? "inside" : f ? "below" : "outside";
595
- }), s.appendChild(L("line", {
596
- class: x,
697
+ let v = d ? -1 : 1, y = Math.min(_, (Math.abs(p - i) - g) / 2), b = f === "center" ? (i + p) / 2 : f === "start" ? p - v * (y + g / 2) : i + v * (y + g / 2), x = d ? i + 4 * c : i - 4 * c;
698
+ N(u[t], n(t), h[t] ? b : x, C, s), u[t].dataset.place = h[t] ? "inside" : d ? "below" : "outside";
699
+ }), l.appendChild(A("line", {
700
+ class: i,
597
701
  x1: 0,
598
- x2: w,
599
- y1: d,
600
- y2: d
702
+ x2: C,
703
+ y1: p,
704
+ y2: p
601
705
  }));
602
706
  }
603
- }, Me = 0, Ne = (e) => e.filter((e) => !e.isTotal), Pe = {
707
+ }, Te = 0, Ee = (e) => e.filter((e) => !e.isTotal), De = {
604
708
  aspect: .66,
605
709
  centre: !0,
606
710
  headroom: () => 0,
@@ -610,70 +714,111 @@ var K = "cubic-bezier(0.3, 0.3, 0.6, 1)", q = (e, t, n = 1) => ({
610
714
  to: e.value,
611
715
  kind: "bar"
612
716
  })),
613
- draw({ rows: e, height: t, unit: n, labelHeight: i, svg: a, values: o, config: s, centre: c }) {
614
- let l = w / 2, u = t / 2, d = Ne(e).reduce((e, t) => e + Math.abs(t.value), 0);
717
+ draw({ rows: e, height: t, unit: n, labelHeight: r, svg: i, values: a, config: o, centre: s }) {
718
+ let l = C / 2, u = t / 2, d = Ee(e).reduce((e, t) => e + Math.abs(t.value), 0);
615
719
  if (!d) return;
616
- let f = i * 1.2 + 10 * n, p = Math.max(Math.min(w, t) / 2 - f, 10), m = p * s.ringfill, h = p - m / 2, g = 2 * Math.PI * h, _ = [], v = 0, y = 0, b = 0;
617
- if (e.forEach((e, r) => {
618
- let s = o[r];
720
+ let f = r * 1.2 + 10 * n, p = Math.max(Math.min(C, t) / 2 - f, 10), m = p * o.ringfill, h = p - m / 2, g = 2 * Math.PI * h, _ = [], v = 0, y = 0, b = 0;
721
+ if (e.forEach((e, o) => {
722
+ let s = a[o];
619
723
  if (e.isTotal) {
620
724
  s.dataset.place = "none";
621
725
  return;
622
726
  }
623
- let c = Math.abs(e.value) / d, f = q(b, c), x = `--share:${c.toFixed(4)}; --start:${f.start.toFixed(4)}; --span:${f.span.toFixed(4)};`, S = c * g, C = v / g * 2 * Math.PI - Math.PI / 2;
624
- _.push(C), a.appendChild(L("circle", {
625
- class: M(V, e),
727
+ let f = Math.abs(e.value) / d, x = E(b, f), S = `--share:${f.toFixed(4)}; --start:${x.start.toFixed(4)}; --span:${x.span.toFixed(4)};`, w = f * g, T = v / g * 2 * Math.PI - Math.PI / 2;
728
+ _.push(T), i.appendChild(A("circle", {
729
+ class: j(c, e),
626
730
  "data-slice": y + 1,
627
- "data-row": r + 1,
731
+ "data-row": o + 1,
628
732
  cx: l,
629
733
  cy: u,
630
734
  r: h,
631
735
  "stroke-width": m,
632
736
  transform: `rotate(-90 ${l} ${u})`,
633
- "stroke-dasharray": `${S.toFixed(1)} ${(g - S).toFixed(1)}`,
737
+ "stroke-dasharray": `${w.toFixed(1)} ${(g - w).toFixed(1)}`,
634
738
  "stroke-dashoffset": (-v).toFixed(1),
635
- style: `--n:${y}; --palette:var(--tablechart-color-${y + 1}); --arc:${S.toFixed(1)}; --circ:${g.toFixed(1)}; ${x} --ease:${f.easing}; ${J("--i", e.slot)}`
739
+ style: `--n:${y}; --palette:var(--tablechart-color-${y + 1}); --arc:${w.toFixed(1)}; --circ:${g.toFixed(1)}; ${S} --ease:${x.easing}; ${D("--i", e.slot)}`
636
740
  }));
637
- let T = C + S / g * Math.PI, E = Math.cos(T), D = Math.sin(T);
638
- a.appendChild(L("line", {
639
- class: P,
640
- x1: l + E * (p + 2 * n),
641
- y1: u + D * (p + 2 * n),
642
- x2: l + E * (p + 7 * n),
643
- y2: u + D * (p + 7 * n),
644
- "data-row": r + 1,
645
- style: `${x} ${J("--i", e.slot)}`
646
- })), s.style.setProperty("--start", f.start.toFixed(4)), s.style.setProperty("--span", f.span.toFixed(4));
647
- let O = p + 9 * n, k = N(s).width * n / 2;
648
- A(s, l + E * (O + Math.abs(E) * k), u + D * (O + Math.abs(D) * i * .7), w, t), s.dataset.place = "around", v += S, b += c, y += 1;
741
+ let O = T + w / g * Math.PI, k = Math.cos(O), M = Math.sin(O);
742
+ i.appendChild(A("line", {
743
+ class: "tablechart-leader",
744
+ x1: l + k * (p + 2 * n),
745
+ y1: u + M * (p + 2 * n),
746
+ x2: l + k * (p + 7 * n),
747
+ y2: u + M * (p + 7 * n),
748
+ "data-row": o + 1,
749
+ style: `${S} ${D("--i", e.slot)}`
750
+ })), s.style.setProperty("--start", x.start.toFixed(4)), s.style.setProperty("--span", x.span.toFixed(4));
751
+ let P = p + 9 * n, ee = q(s).width * n / 2;
752
+ N(s, l + k * (P + Math.abs(k) * ee), u + M * (P + Math.abs(M) * r * .7), C, t), s.dataset.place = "around", v += w, b += f, y += 1;
649
753
  }), _.length > 1) {
650
- let e = h - m / 2 - 1, n = h + m / 2 + 1, i = `tablechart-slices-${++Me}`, o = L("mask", {
651
- id: i,
754
+ let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++Te}`, a = A("mask", {
755
+ id: r,
652
756
  maskUnits: "userSpaceOnUse"
653
757
  });
654
- o.appendChild(L("rect", {
758
+ a.appendChild(A("rect", {
655
759
  x: 0,
656
760
  y: 0,
657
- width: w,
761
+ width: C,
658
762
  height: t,
659
763
  fill: "white"
660
764
  }));
661
- for (let t of _) o.appendChild(L("line", {
662
- class: r,
765
+ for (let t of _) a.appendChild(A("line", {
766
+ class: "tablechart-divide",
663
767
  x1: l + Math.cos(t) * e,
664
768
  y1: u + Math.sin(t) * e,
665
769
  x2: l + Math.cos(t) * n,
666
770
  y2: u + Math.sin(t) * n
667
771
  }));
668
- let s = L("g", { mask: `url(#${i})` });
669
- for (let e of Array.from(a.querySelectorAll(`.${V}`))) s.appendChild(e);
670
- let c = L("defs");
671
- c.appendChild(o), a.prepend(c, s);
772
+ let o = A("g", { mask: `url(#${r})` });
773
+ for (let e of Array.from(i.querySelectorAll(`.${c}`))) o.appendChild(e);
774
+ let s = A("defs");
775
+ s.appendChild(a), i.prepend(s, o);
672
776
  }
673
- c && A(c, l, u, w, t);
777
+ s && N(s, l, u, C, t);
778
+ }
779
+ }, Oe = [
780
+ "circle",
781
+ "square",
782
+ "diamond"
783
+ ], ke = (e, t) => {
784
+ let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = Oe.find((e) => n.includes(e));
785
+ return {
786
+ shape: r ?? Oe[Math.floor(t / 2) % Oe.length],
787
+ open: n.includes("open") || !n.includes("filled") && !r && t % 2 == 1
788
+ };
789
+ }, Ae = (e, t, n, r, i = {}) => {
790
+ if (e === "square") {
791
+ let e = r * .88;
792
+ return A("rect", {
793
+ x: t - e,
794
+ y: n - e,
795
+ width: e * 2,
796
+ height: e * 2,
797
+ ...i
798
+ });
799
+ }
800
+ if (e === "diamond") {
801
+ let e = r * 1.2;
802
+ return A("polygon", {
803
+ points: `${t},${n - e} ${t + e},${n} ${t},${n + e} ${t - e},${n}`,
804
+ ...i
805
+ });
806
+ }
807
+ if (e === "triangle") {
808
+ let e = r * 1.3;
809
+ return A("polygon", {
810
+ points: `${t},${n - e} ${t + e * .87},${n + e / 2} ${t - e * .87},${n + e / 2}`,
811
+ ...i
812
+ });
674
813
  }
814
+ return A("circle", {
815
+ cx: t,
816
+ cy: n,
817
+ r,
818
+ ...i
819
+ });
675
820
  }, X = (e) => Number(e.toFixed(2));
676
- function Fe(e, t) {
821
+ function je(e, t) {
677
822
  let n = e.length;
678
823
  if (n < 2) return e.map(() => 0);
679
824
  let r = (n) => (t[n + 1] - t[n]) / (e[n + 1] - e[n] || 1), i = Array(n).fill(0);
@@ -690,17 +835,17 @@ function Fe(e, t) {
690
835
  };
691
836
  return i[0] = a(0, 1, i[1]), i[n - 1] = a(n - 2, n - 1, i[n - 2]), i;
692
837
  }
693
- function Ie(e, t, n, r) {
838
+ function Me(e, t, n, r) {
694
839
  let i = (t[0] - e[0]) / 3;
695
840
  return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
696
841
  }
697
- function Le(e, t, n, r) {
698
- let [i, a] = Ie(e, t, n, r), o = ([e, t]) => `${X(e)},${X(t)}`;
842
+ function Ne(e, t, n, r) {
843
+ let [i, a] = Me(e, t, n, r), o = ([e, t]) => `${X(e)},${X(t)}`;
699
844
  return `C${o(i)} ${o(a)} ${o(t)}`;
700
845
  }
701
- function Re(e, t, n) {
846
+ function Pe(e, t, n) {
702
847
  let r = Array(e).fill(0), i = [], a = () => {
703
- Fe(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
848
+ je(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
704
849
  r[i[t]] = e;
705
850
  }), i = [];
706
851
  };
@@ -709,23 +854,23 @@ function Re(e, t, n) {
709
854
  }
710
855
  //#endregion
711
856
  //#region src/js/charts/line.ts
712
- var ze = (e) => e.map((e) => ({
857
+ var Fe = (e) => e.map((e) => ({
713
858
  ...e,
714
859
  from: 0,
715
860
  to: e.value,
716
861
  kind: "bar"
717
- })), Be = (n) => ({
718
- segments: ze,
862
+ })), Ie = (e) => ({
863
+ segments: Fe,
719
864
  series: !0,
720
865
  stackable: !0,
721
866
  running: !0,
722
- swatch: n ? "box" : void 0,
867
+ swatch: e ? "box" : void 0,
723
868
  headroom: ({ labelHeight: e, unit: t }) => e * 1.6 + 6 * t,
724
- footroom: ({ labelHeight: e, unit: t, series: r, focused: i, stacked: a }) => !n && !a && r === 2 && !i ? e + 7 * t : 0,
725
- draw(r) {
726
- let { rows: i, series: a, seriesValues: s, names: c, cx: l, y: u, height: d, unit: f, labelHeight: p, svg: m, stacked: h } = r, g = r.shape === "step", _ = r.shape === "smooth", v = a.length > 1, y = a.some((e) => e.focus), b = i.length - 1, S = u(0), C = i.length > 1 ? l(1) - l(0) : l(0) * 2;
727
- m.style.setProperty("--_base", `${X(S)}px`);
728
- let D = (e) => `--rise:${X(S - e)}px; `, O = (e, t) => i[t]?.cells[e] ?? i[t]?.cells[0], k = (e, t) => !O(e, t) || !!O(e, t)?.missing, M = i.map((e) => h ? ye(e, a.length, !0) : null), P = (e, t) => M[t]?.[e].to ?? O(e, t)?.value ?? 0, F = (e, t) => M[t]?.[e].from ?? 0, I = (e, t) => [l(t), u(P(e, t))], z = a.map((e, t) => {
869
+ footroom: ({ labelHeight: t, unit: n, series: r, focused: i, stacked: a }) => !e && !a && r === 2 && !i ? t + 7 * n : 0,
870
+ draw(t) {
871
+ let { rows: n, series: r, seriesValues: a, names: o, cx: s, y: c, height: l, unit: u, labelHeight: p, svg: m, stacked: h } = t, g = t.shape === "step", _ = t.shape === "smooth", v = r.length > 1, y = r.some((e) => e.focus), b = n.length - 1, x = c(0), S = n.length > 1 ? s(1) - s(0) : s(0) * 2;
872
+ m.style.setProperty("--_base", `${X(x)}px`);
873
+ let w = (e) => `--rise:${X(x - e)}px; `, T = (e, t) => n[t]?.cells[e] ?? n[t]?.cells[0], E = (e, t) => !T(e, t) || !!T(e, t)?.missing, D = n.map((e) => h ? fe(e, r.length, !0) : null), O = (e, t) => D[t]?.[e].to ?? T(e, t)?.value ?? 0, k = (e, t) => D[t]?.[e].from ?? 0, j = (e, t) => [s(t), c(O(e, t))], M = r.map((e, t) => {
729
874
  if (!v) return {
730
875
  attrs: {},
731
876
  ink: ""
@@ -738,177 +883,177 @@ var ze = (e) => e.map((e) => ({
738
883
  },
739
884
  ink: `--n:${t}; --m:${+!!n}; --palette:var(--tablechart-color-${t + 1}); `
740
885
  };
741
- }), B = Math.min(b, 6);
742
- r.plot.style.setProperty("--count", String(B + 1));
743
- let V = b > 0 ? B / (g ? i.length : b) : 1, H = (e) => e * V, U = (e) => `--i:${X(H(e))}`, ne = (e) => {
744
- let t = [], n = -1;
745
- return i.forEach((r, i) => {
746
- k(e, i) || (n < 0 && (n = i), (i === b || k(e, i + 1)) && ((g || i > n) && t.push([n, i]), n = -1));
886
+ }), P = Math.min(b, 6);
887
+ t.plot.style.setProperty("--count", String(P + 1));
888
+ let F = b > 0 ? P / (g ? n.length : b) : 1, I = (e) => e * F, L = (e) => `--i:${X(I(e))}`, R = (e) => {
889
+ let t = [], r = -1;
890
+ return n.forEach((n, i) => {
891
+ E(e, i) || (r < 0 && (r = i), (i === b || E(e, i + 1)) && ((g || i > r) && t.push([r, i]), r = -1));
747
892
  }), t;
748
- }, W = (e, t) => `--i:${X(H(e) + 1)}; --d:${X(H(g ? t + 1 : t) - H(e))}`, G = (e, t) => ({
893
+ }, z = (e, t) => `--i:${X(I(e) + 1)}; --d:${X(I(g ? t + 1 : t) - I(e))}`, te = (e, t) => ({
749
894
  "data-from": e + 1,
750
895
  "data-to": t + 1,
751
896
  ...g && { "data-flat": "" }
752
- }), re = _ ? a.map((e, t) => Re(i.length, (e) => k(t, e), (e) => I(t, e))) : [], ie = _ && n ? a.map((e, t) => Re(i.length, (e) => k(t, e), (e) => [l(e), u(F(t, e))])) : [], K = (e, t, n) => {
897
+ }), B = _ ? r.map((e, t) => Pe(n.length, (e) => E(t, e), (e) => j(t, e))) : [], V = _ && e ? r.map((e, t) => Pe(n.length, (e) => E(t, e), (e) => [s(e), c(k(t, e))])) : [], H = (e, t, n) => {
753
898
  let r = [];
754
899
  return e.forEach(([i, a], o) => {
755
- g ? (r.push(`H${X(i + n * C / 2)}`), o < e.length - 1 && r.push(`V${X(e[o + 1][1])}`)) : o > 0 && r.push(t ? Le(e[o - 1], [i, a], t[o - 1], t[o]) : `L${X(i)},${X(a)}`);
900
+ g ? (r.push(`H${X(i + n * S / 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)}`);
756
901
  }), r;
757
- }, q = (e, t, n, r) => i.slice(t, n + 1).map((n, i) => [l(t + i), u(r(e, t + i))]), J = (e, t, n, r) => _ ? e[t].slice(n, r + 1) : null, ae = (e) => l(e) - (g ? C / 2 : 0), oe = (e) => l(e) + (g ? C / 2 : 0), se = (e) => {
758
- let t = L("g", {
759
- class: j,
760
- ...z[e].attrs,
902
+ }, U = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [s(t + r), c(i(e, t + r))]), W = (e, t, n, r) => _ ? e[t].slice(n, r + 1) : null, ne = (e) => s(e) - (g ? S / 2 : 0), re = (e) => s(e) + (g ? S / 2 : 0), ie = (e) => {
903
+ let t = A("g", {
904
+ class: "tablechart-area",
905
+ ...M[e].attrs,
761
906
  ...h && { "data-stacked": "" },
762
- style: z[e].ink
763
- }), n = ne(e), r = L("g", {
764
- class: T,
765
- style: `--rows:${X(B + 1)}; ${n.length ? W(...n[0]) : ""}`
907
+ style: M[e].ink
908
+ }), n = R(e), r = A("g", {
909
+ class: "tablechart-area-fill",
910
+ style: `--rows:${X(P + 1)}; ${n.length ? z(...n[0]) : ""}`
766
911
  });
767
912
  t.appendChild(r);
768
913
  for (let [t, i] of n) {
769
- let n = q(e, t, i, P), a = q(e, t, i, F), o = J(ie, e, t, i)?.reverse() ?? null, s = [
770
- `M${X(ae(t))},${X(a[0][1])}`,
771
- `L${X(ae(t))},${X(n[0][1])}`,
772
- ...K(n, J(re, e, t, i), 1),
773
- `L${X(oe(i))},${X(a[a.length - 1][1])}`,
774
- ...K(a.reverse(), o, -1),
914
+ let n = U(e, t, i, O), a = U(e, t, i, k), o = W(V, e, t, i)?.reverse() ?? null, s = [
915
+ `M${X(ne(t))},${X(a[0][1])}`,
916
+ `L${X(ne(t))},${X(n[0][1])}`,
917
+ ...H(n, W(B, e, t, i), 1),
918
+ `L${X(re(i))},${X(a[a.length - 1][1])}`,
919
+ ...H(a.reverse(), o, -1),
775
920
  "Z"
776
921
  ].join(" ");
777
- r.appendChild(L("path", {
922
+ r.appendChild(A("path", {
778
923
  d: s,
779
- ...G(t, i),
780
- style: W(t, i)
924
+ ...te(t, i),
925
+ style: z(t, i)
781
926
  }));
782
927
  }
783
928
  m.appendChild(t);
784
- }, Y = (e) => {
785
- let t = a[e];
786
- for (let [n, r] of ne(e)) {
787
- let i = q(e, n, r, P), a = [`M${X(ae(n))},${X(i[0][1])}`, ...K(i, J(re, e, n, r), 1)].join(" ");
788
- m.appendChild(L("path", {
789
- class: o,
790
- ...z[e].attrs,
929
+ }, G = (e) => {
930
+ let t = r[e];
931
+ for (let [n, r] of R(e)) {
932
+ let i = U(e, n, r, O), a = [`M${X(ne(n))},${X(i[0][1])}`, ...H(i, W(B, e, n, r), 1)].join(" ");
933
+ m.appendChild(A("path", {
934
+ class: "tablechart-series",
935
+ ...M[e].attrs,
791
936
  d: a,
792
937
  ...t.line && { "data-line": t.line },
793
- ...G(n, r),
794
- style: `${z[e].ink}${W(n, r)}`
938
+ ...te(n, r),
939
+ style: `${M[e].ink}${z(n, r)}`
795
940
  }));
796
941
  }
797
942
  };
798
- n && a.forEach((e, t) => se(t)), a.forEach((e, t) => Y(t)), g || (() => {
799
- let n = a.map((e, t) => v ? R(a, t) : {
943
+ e && r.forEach((e, t) => ie(t)), r.forEach((e, t) => G(t)), g || (() => {
944
+ let e = r.map((e, t) => v ? ke(r, t) : {
800
945
  shape: "circle",
801
946
  open: !1
802
- }), r = (e, t, r) => {
803
- let [i, a] = I(e, t);
804
- return ee(n[e].shape, i, a, 4 * f, {
947
+ }), t = (t, n, r) => {
948
+ let [i, a] = j(t, n);
949
+ return Ae(e[t].shape, i, a, 4 * u, {
805
950
  ...r,
806
- style: `${r.style ?? ""}${D(a)}${U(t)}`
951
+ style: `${r.style ?? ""}${w(a)}${L(n)}`
807
952
  });
808
- }, o = (e) => i.map((e, t) => t).filter((t) => !k(e, t)), s = a.flatMap((t, i) => n[i].open ? o(i).map((t) => r(i, t, {
809
- class: e,
810
- "data-row": t + 1,
811
- ...v && { "data-series": i + 1 }
953
+ }, i = (e) => n.map((e, t) => t).filter((t) => !E(e, t)), a = r.flatMap((n, r) => e[r].open ? i(r).map((e) => t(r, e, {
954
+ class: f,
955
+ "data-row": e + 1,
956
+ ...v && { "data-series": r + 1 }
812
957
  })) : []);
813
- te(m, s, w, d), a.forEach((e, i) => {
814
- for (let e of o(i)) m.appendChild(r(i, e, {
815
- class: t,
816
- ...z[i].attrs,
817
- "data-marker": n[i].shape,
818
- ...n[i].open && { "data-open": "" },
819
- "data-row": e + 1,
820
- style: z[i].ink
958
+ ee(m, a, C, l), r.forEach((n, r) => {
959
+ for (let n of i(r)) m.appendChild(t(r, n, {
960
+ class: d,
961
+ ...M[r].attrs,
962
+ "data-marker": e[r].shape,
963
+ ...e[r].open && { "data-open": "" },
964
+ "data-row": n + 1,
965
+ style: M[r].ink
821
966
  }));
822
967
  });
823
968
  })();
824
- let ce = (e, t) => {
969
+ let K = (e, t) => {
825
970
  let n = t;
826
- for (; n < b && !k(e, n + 1) && O(e, n + 1)?.value === O(e, t)?.value;) n++;
971
+ for (; n < b && !E(e, n + 1) && T(e, n + 1)?.value === T(e, t)?.value;) n++;
827
972
  return n;
828
- }, le = (e, t) => {
829
- let r = O(e, t);
830
- if (!r || r.missing || g && t > 0 && !k(e, t - 1) && O(e, t - 1)?.value === r.value || y && !a[e].focus) return "none";
973
+ }, oe = (t, n) => {
974
+ let i = T(t, n);
975
+ if (!i || i.missing || g && n > 0 && !E(t, n - 1) && T(t, n - 1)?.value === i.value || y && !r[t].focus) return "none";
831
976
  if (h) return "middle";
832
- let i = r.value < 0 ? "below" : "above";
833
- if (!v || y || a.length > 2) return i;
834
- let o = O(1 - e, t);
835
- return !o || o.missing ? i : r.value > o.value || r.value === o.value && e === 0 || n && r.value >= 0 && I(e, t)[1] + 7 * f + p > S ? "above" : "below";
836
- }, ue = v && !y && a.length > 2 && !h && !g, de = /* @__PURE__ */ new Map();
837
- if (ue) {
838
- let e = i.flatMap((e, t) => a.map((e, n) => ({
977
+ let a = i.value < 0 ? "below" : "above";
978
+ if (!v || y || r.length > 2) return a;
979
+ let o = T(1 - t, n);
980
+ return !o || o.missing ? a : i.value > o.value || i.value === o.value && t === 0 || e && i.value >= 0 && j(t, n)[1] + 7 * u + p > x ? "above" : "below";
981
+ }, se = v && !y && r.length > 2 && !h && !g, ce = /* @__PURE__ */ new Map();
982
+ if (se) {
983
+ let e = n.flatMap((e, t) => r.map((e, n) => ({
839
984
  s: n,
840
985
  i: t,
841
- value: O(n, t)?.value ?? 0
842
- }))).filter(({ s: e, i: t }) => le(e, t) !== "none").sort((e, t) => e.i - t.i || t.value - e.value || e.s - t.s), t = (e) => e < 0 ? ["below", "above"] : ["above", "below"], n = e.map(({ s: e, i: n, value: r }) => {
843
- let i = N(s[e][n]).width * f, [a, o] = I(e, n);
986
+ value: T(n, t)?.value ?? 0
987
+ }))).filter(({ s: e, i: t }) => oe(e, t) !== "none").sort((e, t) => e.i - t.i || t.value - e.value || e.s - t.s), t = (e) => e < 0 ? ["below", "above"] : ["above", "below"], i = ae(e.map(({ s: e, i: n, value: r }) => {
988
+ let i = q(a[e][n]).width * u, [o, s] = j(e, n);
844
989
  return t(r).map((e) => [
845
- a - i / 2,
846
- e === "above" ? o - 7 * f - p : o + 7 * f,
990
+ o - i / 2,
991
+ e === "above" ? s - 7 * u - p : s + 7 * u,
847
992
  i,
848
993
  p
849
994
  ]);
850
- }), r = a.flatMap((e, t) => i.flatMap((e, n) => {
851
- if (k(t, n)) return [];
852
- let [r, i] = I(t, n);
995
+ }), r.flatMap((e, t) => n.flatMap((e, n) => {
996
+ if (E(t, n)) return [];
997
+ let [r, i] = j(t, n);
853
998
  return [[
854
- r - 4 * f,
855
- i - 4 * f,
856
- 8 * f,
857
- 8 * f
999
+ r - 4 * u,
1000
+ i - 4 * u,
1001
+ 8 * u,
1002
+ 8 * u
858
1003
  ]];
859
- })), o = E(n, r, [
1004
+ })), [
860
1005
  0,
861
1006
  0,
862
- l(b) + l(0),
863
- d
1007
+ s(b) + s(0),
1008
+ l
864
1009
  ]);
865
- e.forEach(({ s: e, i: n, value: r }, i) => de.set(s[e][n], o[i] === null ? null : t(r)[o[i]]));
1010
+ e.forEach(({ s: e, i: n, value: r }, o) => ce.set(a[e][n], i[o] === null ? null : t(r)[i[o]]));
866
1011
  }
867
- let fe = (e, t) => ue ? de.get(s[e][t]) === null : !h && !g ? !1 : N(s[e][t]).width * f > (g ? ce(e, t) - t + 1 : 1) * C - 4 * f || h && e > 0 && P(e, t) < F(e, t) ? !0 : h && Math.abs(u(F(e, t)) - u(P(e, t))) < p * 1.2;
868
- s.forEach((e, t) => {
1012
+ let le = (e, t) => se ? ce.get(a[e][t]) === null : !h && !g ? !1 : q(a[e][t]).width * u > (g ? K(e, t) - t + 1 : 1) * S - 4 * u || h && e > 0 && O(e, t) < k(e, t) ? !0 : h && Math.abs(c(k(e, t)) - c(O(e, t))) < p * 1.2;
1013
+ a.forEach((e, t) => {
869
1014
  e.forEach((e, n) => {
870
- e.style.setProperty("--i", String(X(g ? (H(n) + H(n + 1)) / 2 : H(n))));
871
- let r = de.get(e) ?? le(t, n);
872
- if (e.dataset.place = r === "above" ? "outside" : r, e.toggleAttribute("data-left-out", r !== "none" && fe(t, n)), g && r !== "none" ? e.dataset.rowEnd = String(ce(t, n) + 1) : delete e.dataset.rowEnd, r === "none") return;
873
- let i = N(e).width * f / 2 + 4 * f, a = l(n);
874
- g ? a = (l(n) + l(ce(t, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === b && (a -= i);
875
- let o = u(P(t, n)), s = {
876
- middle: (u(F(t, n)) - o) / 2,
877
- above: -7 * f,
878
- below: 7 * f
1015
+ e.style.setProperty("--i", String(X(g ? (I(n) + I(n + 1)) / 2 : I(n))));
1016
+ let r = ce.get(e) ?? oe(t, n);
1017
+ if (e.dataset.place = r === "above" ? "outside" : r, e.toggleAttribute("data-left-out", r !== "none" && le(t, n)), g && r !== "none" ? e.dataset.rowEnd = String(K(t, n) + 1) : delete e.dataset.rowEnd, r === "none") return;
1018
+ let i = q(e).width * u / 2 + 4 * u, a = s(n);
1019
+ g ? a = (s(n) + s(K(t, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === b && (a -= i);
1020
+ let o = c(O(t, n)), d = {
1021
+ middle: (c(k(t, n)) - o) / 2,
1022
+ above: -7 * u,
1023
+ below: 7 * u
879
1024
  };
880
- A(e, a, o + s[r], w, d);
1025
+ N(e, a, o + d[r], C, l);
881
1026
  });
882
1027
  });
883
- let pe = c.map((e, t) => {
1028
+ let J = o.map((e, t) => {
884
1029
  let n = b;
885
- for (; n > 0 && k(t, n);) n--;
886
- let [r, i] = I(t, n);
1030
+ for (; n > 0 && E(t, n);) n--;
1031
+ let [r, i] = j(t, n);
887
1032
  return {
888
1033
  name: e,
889
- x: (g ? r + C / 2 : r) + 10 * f,
890
- y: h ? (i + u(F(t, n))) / 2 : i
1034
+ x: (g ? r + S / 2 : r) + 10 * u,
1035
+ y: h ? (i + c(k(t, n))) / 2 : i
891
1036
  };
892
- }), me = (c[0] ? N(c[0]).height : 0) * f;
893
- for (let e of ke(pe, me)) A(e.name, e.x, e.y, w, d);
894
- let he = i.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), ge = !n && !h && a.length === 2 && !y && !he ? d - 2 * f : S;
895
- m.appendChild(L("line", {
896
- class: x,
1037
+ }), ue = (o[0] ? q(o[0]).height : 0) * u;
1038
+ for (let e of Se(J, ue)) N(e.name, e.x, e.y, C, l);
1039
+ let de = n.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), Y = !e && !h && r.length === 2 && !y && !de ? l - 2 * u : x;
1040
+ m.appendChild(A("line", {
1041
+ class: i,
897
1042
  x1: 0,
898
- x2: l(b) + l(0),
899
- y1: ge,
900
- y2: ge
1043
+ x2: s(b) + s(0),
1044
+ y1: Y,
1045
+ y2: Y
901
1046
  }));
902
1047
  }
903
- }), Ve = Be(!1), He = Be(!0), Ue = /* @__PURE__ */ new Set(), We = (e, t) => {
904
- if (Math.abs(e - t) <= Math.abs(t) / 100) return;
905
- let n = `[${f}] A total reads ${e}, but the steps before it add up to ${Number(t.toFixed(6))}. The chart shows your number.`;
906
- Ue.has(n) || (Ue.add(n), console.warn(n));
907
- }, Ge = {
1048
+ }), Le = Ie(!1), Re = Ie(!0), ze = /* @__PURE__ */ new Set(), Be = (t, n) => {
1049
+ if (Math.abs(t - n) <= Math.abs(n) / 100) return;
1050
+ let r = `[${e}] A total reads ${t}, but the steps before it add up to ${Number(n.toFixed(6))}. The chart shows your number.`;
1051
+ ze.has(r) || (ze.add(r), console.warn(r));
1052
+ }, Ve = {
908
1053
  segments: (e) => {
909
1054
  let t = 0, n = !1;
910
1055
  return e.map((e) => {
911
- if (e.isTotal) return n && We(e.value, t), n = !1, t = e.value, {
1056
+ if (e.isTotal) return n && Be(e.value, t), n = !1, t = e.value, {
912
1057
  ...e,
913
1058
  from: 0,
914
1059
  to: e.value,
@@ -925,69 +1070,69 @@ var ze = (e) => e.map((e) => ({
925
1070
  },
926
1071
  breakable: !0,
927
1072
  headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
928
- draw({ segments: e, cx: t, y: n, barWidth: r, height: i, unit: a, svg: o, values: s, breakAt: c, insideAlign: l }) {
929
- let u = n(0), d = Te(s, r, a), f = l ?? "center", p = e.map((t, r) => {
930
- let i = n(Math.max(t.from, t.to)), o = Math.abs(n(t.from) - n(t.to)), l = c !== null && Math.min(t.from, t.to) < c && Math.max(t.from, t.to) > c, u = t.kind === "total" && r > 0 && r === e.length - 1;
1073
+ draw({ segments: e, cx: t, y: n, barWidth: a, height: o, unit: s, svg: c, values: l, breakAt: u, insideAlign: d }) {
1074
+ let f = n(0), p = ve(l, a, s), m = d ?? "center", h = e.map((t, r) => {
1075
+ let i = n(Math.max(t.from, t.to)), a = Math.abs(n(t.from) - n(t.to)), o = u !== null && Math.min(t.from, t.to) < u && Math.max(t.from, t.to) > u, c = t.kind === "total" && r > 0 && r === e.length - 1;
931
1076
  return {
932
1077
  top: i,
933
- length: o,
934
- down: t.kind === "down" || t.kind === "total" && (u ? t.to >= 0 : t.to < 0),
935
- inside: !l && !d && Ee(s[r], o, a)
1078
+ length: a,
1079
+ down: t.kind === "down" || t.kind === "total" && (c ? t.to >= 0 : t.to < 0),
1080
+ inside: !o && !p && ye(l[r], a, s)
936
1081
  };
937
- }), m = s[0] ? N(s[0]).height * a * .56 : 0, h = Infinity;
938
- for (let [e, t] of p.entries()) t.inside && (h = Math.min(h, (r - N(s[e]).width * a) / 2));
939
- let g = e.length, _ = (e, t, n = !1) => `--start:${(e / g).toFixed(4)}; --span:${(t / g).toFixed(4)}; --ease:${n ? K : "linear"};`;
940
- e.forEach((i, a) => {
941
- let s = e[a + 1];
942
- if (!s) return;
943
- let c = n(i.to), l = t(a) + r / 2, u = t(a + 1) - r / 2;
944
- o.appendChild(L("line", {
945
- class: v,
1082
+ }), g = l[0] ? q(l[0]).height * s * .56 : 0, _ = Infinity;
1083
+ for (let [e, t] of h.entries()) t.inside && (_ = Math.min(_, (a - q(l[e]).width * s) / 2));
1084
+ let v = e.length, y = (e, t, n = !1) => `--start:${(e / v).toFixed(4)}; --span:${(t / v).toFixed(4)}; --ease:${n ? T : "linear"};`;
1085
+ e.forEach((r, i) => {
1086
+ let o = e[i + 1];
1087
+ if (!o) return;
1088
+ let s = n(r.to), l = t(i) + a / 2, u = t(i + 1) - a / 2;
1089
+ c.appendChild(A("line", {
1090
+ class: "tablechart-connector",
946
1091
  x1: l,
947
1092
  x2: u,
948
- y1: c,
949
- y2: c,
950
- "data-row": a + 2,
951
- style: `${J("--i", s.slot)}; ${_(a + 1, 1 / 3)}`
1093
+ y1: s,
1094
+ y2: s,
1095
+ "data-row": i + 2,
1096
+ style: `${D("--i", o.slot)}; ${y(i + 1, 1 / 3)}`
952
1097
  }));
953
- }), e.forEach((n, c) => {
954
- let { top: l, length: u, down: d, inside: v } = p[c];
955
- o.appendChild(L("rect", {
956
- class: M(G, n),
1098
+ }), e.forEach((n, i) => {
1099
+ let { top: u, length: d, down: f, inside: p } = h[i];
1100
+ c.appendChild(A("rect", {
1101
+ class: j(r, n),
957
1102
  "data-kind": n.kind,
958
- "data-row": c + 1,
959
- "data-grow": d ? "down" : "up",
960
- x: t(c) - r / 2,
961
- y: l,
962
- width: r,
963
- height: Math.max(u, 1),
964
- style: `${J("--i", n.slot)}; ${_(c, 1, c === e.length - 1)}`
1103
+ "data-row": i + 1,
1104
+ "data-grow": f ? "down" : "up",
1105
+ x: t(i) - a / 2,
1106
+ y: u,
1107
+ width: a,
1108
+ height: Math.max(d, 1),
1109
+ style: `${D("--i", n.slot)}; ${y(i, 1, i === e.length - 1)}`
965
1110
  }));
966
- let y = s[c];
967
- y.style.setProperty("--start", (c / g).toFixed(4)), y.style.setProperty("--span", (1 / g).toFixed(4));
968
- let b = Math.min(h, (u - m) / 2), x = l + b + m / 2, S = l + u - b - m / 2, C = f === "center" ? l + u / 2 : f === "end" === d ? S : x;
969
- y.dataset.place = v ? "inside" : "outside", y.dataset.kind = n.kind;
970
- let T = v ? C : n.kind === "down" ? l + u + N(y).height * a + 3 * a : l - 3 * a;
971
- A(y, t(c), T, w, i);
972
- }), o.appendChild(L("line", {
973
- class: x,
1111
+ let b = l[i];
1112
+ b.style.setProperty("--start", (i / v).toFixed(4)), b.style.setProperty("--span", (1 / v).toFixed(4));
1113
+ let x = Math.min(_, (d - g) / 2), S = u + x + g / 2, w = u + d - x - g / 2, T = m === "center" ? u + d / 2 : m === "end" === f ? w : S;
1114
+ b.dataset.place = p ? "inside" : "outside", b.dataset.kind = n.kind;
1115
+ let E = p ? T : n.kind === "down" ? u + d + q(b).height * s + 3 * s : u - 3 * s;
1116
+ N(b, t(i), E, C, o);
1117
+ }), c.appendChild(A("line", {
1118
+ class: i,
974
1119
  x1: 0,
975
- x2: w,
976
- y1: u,
977
- y2: u
1120
+ x2: C,
1121
+ y1: f,
1122
+ y2: f
978
1123
  }));
979
1124
  }
980
1125
  }, Z = {
981
1126
  enabled: !1,
982
- log(...e) {
983
- Z.enabled && console.log(`[${f}]`, ...e);
1127
+ log(...t) {
1128
+ Z.enabled && console.log(`[${e}]`, ...t);
984
1129
  },
985
- timed(e, t, n) {
986
- if (!Z.enabled) return n();
987
- let r = performance.now(), i = n(), a = performance.now() - r, o = t.querySelectorAll("tbody tr").length;
988
- return a > 50 ? console.warn(`[${f}] ${e} took ${a.toFixed(1)} ms for ${o} rows, more than 50 ms.`, t) : Z.log(`${e} took ${a.toFixed(1)} ms for ${o} rows.`, t), i;
1130
+ timed(t, n, r) {
1131
+ if (!Z.enabled) return r();
1132
+ let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
1133
+ 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;
989
1134
  }
990
- }, Ke = (e) => {
1135
+ }, He = (e) => {
991
1136
  let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
992
1137
  return {
993
1138
  raw: t,
@@ -997,9 +1142,9 @@ var ze = (e) => e.map((e) => ({
997
1142
  missing: !n,
998
1143
  value: n ? Number.parseFloat(n[2].replace(",", ".")) : 0
999
1144
  };
1000
- }, qe = (e, t = "data-i18n") => Array.from(e.querySelectorAll("tbody tr")).map((e, n) => {
1001
- let r = e.querySelector("th"), i = Array.from(e.querySelectorAll("td")).map(Ke);
1002
- return i.length || i.push(Ke(null)), {
1145
+ }, Ue = (e, t = "data-i18n") => Array.from(e.querySelectorAll("tbody tr")).map((e, n) => {
1146
+ let r = e.querySelector("th"), i = Array.from(e.querySelectorAll("td")).map(He);
1147
+ return i.length || i.push(He(null)), {
1003
1148
  ...i[0],
1004
1149
  label: (r?.textContent || "").trim(),
1005
1150
  key: t && r?.getAttribute(t) || null,
@@ -1008,8 +1153,8 @@ var ze = (e) => e.map((e) => ({
1008
1153
  isTotal: e.getAttribute("data-kind") === "total",
1009
1154
  slot: n
1010
1155
  };
1011
- }), Je = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), Ye = (e) => e === "dashed" || e === "dotted" ? e : null, Xe = (e, t, n = "data-i18n") => {
1012
- let r = Je(e), i = Math.max(1, U(t.map((e) => e.cells.length)));
1156
+ }), 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") => {
1157
+ let r = We(e), i = Math.max(1, R(t.map((e) => e.cells.length)));
1013
1158
  return Array.from({ length: i }, (e, t) => {
1014
1159
  let i = r[t];
1015
1160
  return {
@@ -1017,84 +1162,84 @@ var ze = (e) => e.map((e) => ({
1017
1162
  key: n && i?.getAttribute(n) || null,
1018
1163
  focus: i?.getAttribute("data-kind") === "focus",
1019
1164
  marker: i?.getAttribute("data-marker") ?? null,
1020
- line: Ye(i?.getAttribute("data-line")),
1165
+ line: Ge(i?.getAttribute("data-line")),
1021
1166
  group: !!i?.hasAttribute("data-group")
1022
1167
  };
1023
1168
  });
1024
- }, Ze = (e, t) => {
1025
- if (!t) return;
1026
- let n = /* @__PURE__ */ new Map();
1027
- for (let r of e) {
1028
- let e = r.getAttribute("data-chart-keys") || null;
1029
- if (!e) continue;
1030
- if (n.has(e)) {
1031
- let t = n.get(e) + 1;
1032
- n.set(e, t), console.warn(`[${f}] Two charts have data-chart-keys="${e}", so this one uses "${e}-${t}" to keep their translations apart.`), e = `${e}-${t}`;
1033
- } else n.set(e, 1);
1034
- r.querySelectorAll("tbody th").forEach((n, r) => {
1035
- n.getAttribute(t) || n.setAttribute(t, `${e}-row${r + 1}`);
1169
+ }, qe = (t, n) => {
1170
+ if (!n) return;
1171
+ let r = /* @__PURE__ */ new Map();
1172
+ for (let i of t) {
1173
+ let t = i.getAttribute("data-chart-keys") || null;
1174
+ if (!t) continue;
1175
+ if (r.has(t)) {
1176
+ let n = r.get(t) + 1;
1177
+ r.set(t, n), console.warn(`[${e}] Two charts have data-chart-keys="${t}", so this one uses "${t}-${n}" to keep their translations apart.`), t = `${t}-${n}`;
1178
+ } else r.set(t, 1);
1179
+ i.querySelectorAll("tbody th").forEach((e, r) => {
1180
+ e.getAttribute(n) || e.setAttribute(n, `${t}-row${r + 1}`);
1036
1181
  });
1037
- let i = Je(r);
1038
- i.length > 1 && i.forEach((n, r) => {
1039
- n.getAttribute(t) || n.setAttribute(t, `${e}-col${r + 1}`);
1040
- }), i.forEach((n, i) => {
1041
- if (!n.hasAttribute("data-group")) return;
1182
+ let a = We(i);
1183
+ a.length > 1 && a.forEach((e, r) => {
1184
+ e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
1185
+ }), a.forEach((e, r) => {
1186
+ if (!e.hasAttribute("data-group")) return;
1042
1187
  let a = [];
1043
- r.querySelectorAll(`tbody tr > td:nth-of-type(${i + 1})`).forEach((n) => {
1044
- let r = (n.textContent || "").trim();
1045
- a.includes(r) || a.push(r), n.getAttribute(t) || n.setAttribute(t, `${e}-group${a.indexOf(r) + 1}`);
1188
+ i.querySelectorAll(`tbody tr > td:nth-of-type(${r + 1})`).forEach((e) => {
1189
+ let r = (e.textContent || "").trim();
1190
+ a.includes(r) || a.push(r), e.getAttribute(n) || e.setAttribute(n, `${t}-group${a.indexOf(r) + 1}`);
1046
1191
  });
1047
- }), Z?.log?.(`Keys for "${e}" written onto ${r.querySelectorAll("tbody th").length} rows`);
1192
+ }), Z?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
1048
1193
  }
1049
- }, Qe = (e) => Number(e.toPrecision(12)), $e = (e, t) => {
1194
+ }, Je = (e) => Number(e.toPrecision(12)), Ye = (e, t) => {
1050
1195
  let n = e / Math.max(1, t) || 1, r = 10 ** Math.floor(Math.log10(n)), i = n / r;
1051
- return Qe((i < 1.42 ? 1 : i < 3.17 ? 2 : i < 7.08 ? 5 : 10) * r);
1052
- }, et = (e, t, n) => {
1196
+ return Je((i < 1.42 ? 1 : i < 3.17 ? 2 : i < 7.08 ? 5 : 10) * r);
1197
+ }, Xe = (e, t, n) => {
1053
1198
  let r = [];
1054
- for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(Qe(i * n));
1199
+ for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(Je(i * n));
1055
1200
  return r;
1056
- }, tt = (e, t = e) => {
1201
+ }, Ze = (e, t = e) => {
1057
1202
  do {
1058
1203
  let t = Math.round(e / 10 ** Math.floor(Math.log10(e) + 1e-9));
1059
- e = Qe(e * (t === 2 ? 2.5 : 2));
1204
+ e = Je(e * (t === 2 ? 2.5 : 2));
1060
1205
  } while (Math.abs(e / t - Math.round(e / t)) > 1e-9);
1061
1206
  return e;
1062
- }, nt = (e) => {
1207
+ }, Qe = (e) => {
1063
1208
  let t = (e ?? "").trim().split(/\s+/).map(Number.parseFloat);
1064
1209
  return t.length > 1 && t.every(Number.isFinite) ? t.sort((e, t) => e - t) : null;
1065
- }, rt = (e, t, n) => {
1210
+ }, $e = (e, t, n) => {
1066
1211
  if (n && n.length > 2) return {
1067
1212
  min: n[0],
1068
1213
  max: n[n.length - 1],
1069
1214
  step: 0,
1070
1215
  ticks: n
1071
1216
  };
1072
- let r = n?.[0] ?? -U(e.map((e) => -e)), i = n?.[1] ?? U(e);
1217
+ let r = n?.[0] ?? -R(e.map((e) => -e)), i = n?.[1] ?? R(e);
1073
1218
  if (!n) {
1074
1219
  let e = (i - r || Math.abs(i) || 1) * .05;
1075
1220
  r -= e, i += e;
1076
1221
  }
1077
- let a = $e(i - r, t);
1222
+ let a = Ye(i - r, t);
1078
1223
  return {
1079
1224
  min: r,
1080
1225
  max: i,
1081
1226
  step: a,
1082
- ticks: et(r, i, a)
1227
+ ticks: Xe(r, i, a)
1083
1228
  };
1084
- }, it = (e, t) => {
1229
+ }, et = (e, t) => {
1085
1230
  let { step: n, ticks: r } = e;
1086
- for (; n && r.length > 2 && !t(r);) n = tt(n, e.step), r = et(e.min, e.max, n);
1231
+ for (; n && r.length > 2 && !t(r);) n = Ze(n, e.step), r = Xe(e.min, e.max, n);
1087
1232
  return {
1088
1233
  ...e,
1089
1234
  step: n,
1090
1235
  ticks: r
1091
1236
  };
1092
- }, at = [
1237
+ }, tt = [
1093
1238
  "axis-break",
1094
1239
  "trend",
1095
1240
  "bracket"
1096
- ], ot = (e) => {
1097
- 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) => at.includes(e.getAttribute("data-annotation") ?? "")), a = (e) => e.hasAttribute("data-fragment"), o = n.map((e) => Array.from(e.querySelectorAll(":scope > td")));
1241
+ ], nt = (e) => {
1242
+ 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) => tt.includes(e.getAttribute("data-annotation") ?? "")), a = (e) => e.hasAttribute("data-fragment"), o = n.map((e) => Array.from(e.querySelectorAll(":scope > td")));
1098
1243
  if (!t && !n.some(a) && !r.some(a) && !o.flat().some(a) && !i.some(a)) return null;
1099
1244
  let s = [], c = /* @__PURE__ */ new Map(), l = [], u = (e) => {
1100
1245
  let t = e === null ? void 0 : c.get(e);
@@ -1152,7 +1297,7 @@ var ze = (e) => e.map((e) => ({
1152
1297
  count: s.length,
1153
1298
  indexes: s
1154
1299
  };
1155
- }, st = (e) => {
1300
+ }, rt = (e) => {
1156
1301
  let t = e.plan;
1157
1302
  if (!t) return;
1158
1303
  let n = (t) => t === null || e.step - t >= 1;
@@ -1163,90 +1308,90 @@ var ze = (e) => e.map((e) => ({
1163
1308
  let u = r.hasAttribute("data-flat") ? (l - e + 1) / (i - e + 1) : i > e ? Math.max(0, l - e) / (i - e) : 0;
1164
1309
  r.style.setProperty("--reveal", String(u));
1165
1310
  }
1166
- }, ct = (e) => {
1311
+ }, it = (e) => {
1167
1312
  let t = e.plan;
1168
1313
  if (!t) return;
1169
- 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) => {
1170
- let t = r(e);
1314
+ let n = t.rows.length - 1, i = (e) => t.series.map((n, r) => t.cells[e]?.[r]?.step ?? n.step ?? t.rows[e]?.step ?? null), a = (e) => {
1315
+ let t = i(e);
1171
1316
  return t.some((e) => e === null) ? null : Math.min(...t);
1172
- }, a = new Set(e.totals), o = (e, t, n, r) => {
1317
+ }, o = new Set(e.totals), s = (e, t, n, r) => {
1173
1318
  e.style.setProperty(n, String(r)), e.style.removeProperty("--d"), t === null ? e.style.removeProperty("--step") : e.style.setProperty("--step", String(t));
1174
1319
  };
1175
- for (let s of e.figure.querySelectorAll("[data-row], [data-series], [data-note]")) {
1176
- if (s.closest("table, .tablechart-controls") || s.hasAttribute("data-from")) continue;
1177
- let e = Number(s.dataset.note);
1320
+ for (let r of e.figure.querySelectorAll("[data-row], [data-series], [data-note]")) {
1321
+ if (r.closest("table, .tablechart-controls") || r.hasAttribute("data-from")) continue;
1322
+ let e = Number(r.dataset.note);
1178
1323
  if (e > 0) {
1179
1324
  let n = t.notes[e - 1];
1180
- n && o(s, n.step, "--after", n.after);
1325
+ n && s(r, n.step, "--after", n.after);
1181
1326
  continue;
1182
1327
  }
1183
- let c = s.dataset.row ? Number(s.dataset.row) - 1 : n;
1184
- if (s.classList.contains("tablechart-connector")) {
1328
+ let c = r.dataset.row ? Number(r.dataset.row) - 1 : n;
1329
+ if (r.classList.contains("tablechart-connector")) {
1185
1330
  let e = t.rows[c - 1], n = t.rows[c];
1186
1331
  if (e && n) {
1187
1332
  let t = (e.step ?? -1) > (n.step ?? -1);
1188
- o(s, t ? e.step : n.step, "--i", t ? e.slot + 1 : n.slot);
1333
+ s(r, t ? e.step : n.step, "--i", t ? e.slot + 1 : n.slot);
1189
1334
  }
1190
1335
  continue;
1191
1336
  }
1192
- if (a.has(s)) {
1193
- let e = r(c).filter((e) => e !== null);
1194
- o(s, e.length ? Math.max(...e) : null, "--i", t.rows[c]?.slot ?? 0);
1337
+ if (o.has(r)) {
1338
+ let e = i(c).filter((e) => e !== null);
1339
+ s(r, e.length ? Math.max(...e) : null, "--i", t.rows[c]?.slot ?? 0);
1195
1340
  continue;
1196
1341
  }
1197
- if (s.hasAttribute("data-stack")) {
1198
- o(s, i(c), "--i", t.rows[c]?.slot ?? 0);
1342
+ if (r.hasAttribute("data-stack")) {
1343
+ s(r, a(c), "--i", t.rows[c]?.slot ?? 0);
1199
1344
  continue;
1200
1345
  }
1201
- let l = s.dataset.series ? Number(s.dataset.series) - 1 : 0, u = s.dataset.series ? t.series[l] : void 0;
1202
- if (s.classList.contains("tablechart-piece")) {
1203
- let e = r(c)[l] ?? null, n = t.cells[c]?.[l];
1204
- o(s, e === i(c) ? null : e, "--i", n && n.step !== null ? n.slot : c);
1346
+ let l = r.dataset.series ? Number(r.dataset.series) - 1 : 0, u = r.dataset.series ? t.series[l] : void 0;
1347
+ if (r.classList.contains("tablechart-piece")) {
1348
+ let e = i(c)[l] ?? null, n = t.cells[c]?.[l];
1349
+ s(r, e === a(c) ? null : e, "--i", n && n.step !== null ? n.slot : c);
1205
1350
  continue;
1206
1351
  }
1207
- if (s.dataset.place === "legend") {
1352
+ if (r.dataset.place === "legend") {
1208
1353
  let e = Math.min(...t.cells.map((e) => e[l]?.step ?? Infinity));
1209
- o(s, u?.step ?? (Number.isFinite(e) ? e : null), "--i", 0);
1354
+ s(r, u?.step ?? (Number.isFinite(e) ? e : null), "--i", 0);
1210
1355
  continue;
1211
1356
  }
1212
1357
  let d = t.cells[c]?.[l];
1213
- 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);
1358
+ d && d.step !== null ? s(r, d.step, "--i", d.slot) : u && u.step !== null ? s(r, u.step, "--i", c) : t.rows[c] && s(r, t.rows[c].step, "--i", t.rows[c].slot);
1214
1359
  }
1215
- let s = e.figure.querySelector(`.${W}`);
1216
- if (s) {
1360
+ let l = e.figure.querySelector(`.${p}`);
1361
+ if (l) {
1217
1362
  let e = [...t.rows, ...t.cells.flat()].map((e) => e.step ?? -1), n = Math.max(-1, ...e);
1218
- n < 0 ? o(s, null, "--i", 0) : o(s, n, "--i", e.filter((e) => e === n).length);
1363
+ n < 0 ? s(l, null, "--i", 0) : s(l, n, "--i", e.filter((e) => e === n).length);
1219
1364
  }
1220
- let c = [...t.rows, ...t.cells.flat()].map((e) => e.slot + 1), l = t.series.some((e) => e.step !== null) ? t.rows.length : 1;
1221
- e.plot.style.setProperty("--count", String(Math.max(l, ...c)));
1222
- let u = e.figure.querySelectorAll(`.${G}`), d = u[u.length - 1];
1223
- if (e.figure.dataset.chart === "waterfall" && d?.dataset.kind === "total" && u.length > 1) {
1224
- let e = Number(d.dataset.row) - 1;
1225
- (t.rows[e - 1]?.step ?? -1) > (t.rows[e]?.step ?? -1) && (d.dataset.grow = d.dataset.grow === "down" ? "up" : "down");
1365
+ let u = [...t.rows, ...t.cells.flat()].map((e) => e.slot + 1), d = t.series.some((e) => e.step !== null) ? t.rows.length : 1;
1366
+ e.plot.style.setProperty("--count", String(Math.max(d, ...u)));
1367
+ let f = e.figure.querySelectorAll(`.${r}`), m = f[f.length - 1];
1368
+ if (e.figure.dataset.chart === "waterfall" && m?.dataset.kind === "total" && f.length > 1) {
1369
+ let e = Number(m.dataset.row) - 1;
1370
+ (t.rows[e - 1]?.step ?? -1) > (t.rows[e]?.step ?? -1) && (m.dataset.grow = m.dataset.grow === "down" ? "up" : "down");
1226
1371
  }
1227
- let f = Array.from(e.figure.querySelectorAll(`.${V}`));
1228
- if (f.length) {
1229
- let t = (e) => e.style.getPropertyValue("--step") || "none", n = (e) => Number(e.style.getPropertyValue("--share") || 0), r = f.length, i = Math.max(0, f.findIndex((e, n) => t(e) !== t(f[(n - 1 + r) % r]))), a = [];
1372
+ let h = Array.from(e.figure.querySelectorAll(`.${c}`));
1373
+ if (h.length) {
1374
+ let t = (e) => e.style.getPropertyValue("--step") || "none", n = (e) => Number(e.style.getPropertyValue("--share") || 0), r = h.length, i = Math.max(0, h.findIndex((e, n) => t(e) !== t(h[(n - 1 + r) % r]))), a = [];
1230
1375
  for (let e = 0; e < r; e++) {
1231
- let n = f[(i + e) % r], o = a[a.length - 1];
1376
+ let n = h[(i + e) % r], o = a[a.length - 1];
1232
1377
  o && t(o[0]) === t(n) ? o.push(n) : a.push([n]);
1233
1378
  }
1234
1379
  let o = /* @__PURE__ */ new Map();
1235
1380
  for (let e of a) {
1236
1381
  let t = e.reduce((e, t) => e + n(t), 0), r = 0;
1237
- for (let i of e) o.set(i.dataset.row ?? "", q(r, n(i), t)), r += n(i);
1382
+ for (let i of e) o.set(i.dataset.row ?? "", E(r, n(i), t)), r += n(i);
1238
1383
  }
1239
1384
  for (let t of e.figure.querySelectorAll("[data-row]")) {
1240
1385
  let e = o.get(t.dataset.row ?? "");
1241
1386
  e && t.style.getPropertyValue("--start") && (t.style.setProperty("--start", e.start.toFixed(4)), t.style.setProperty("--span", e.span.toFixed(4)), t.classList.contains("tablechart-slice") && t.style.setProperty("--ease", e.easing));
1242
1387
  }
1243
1388
  }
1244
- st(e);
1245
- }, lt = (e, t, n = !1) => {
1389
+ rt(e);
1390
+ }, at = (e, t, n = !1) => {
1246
1391
  let r = e.plan;
1247
1392
  if (!r) return;
1248
1393
  let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
1249
- e.step = i, e.figure.style.setProperty("--_step", String(i)), st(e);
1394
+ e.step = i, e.figure.style.setProperty("--_step", String(i)), rt(e);
1250
1395
  let [o, s] = e.controls?.querySelectorAll("button") ?? [];
1251
1396
  o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
1252
1397
  bubbles: !0,
@@ -1255,43 +1400,43 @@ var ze = (e) => e.map((e) => ({
1255
1400
  steps: r.count
1256
1401
  }
1257
1402
  }));
1258
- }, ut = (e, t, n) => {
1403
+ }, ot = (e, t, n) => {
1259
1404
  let r = document.createElement("div");
1260
- r.className = i;
1261
- let a = (r) => {
1405
+ r.className = "tablechart-controls";
1406
+ let i = (r) => {
1262
1407
  let i = document.createElement("button");
1263
1408
  i.type = "button", i.className = `tablechart-${r}`, i.dataset.go = r;
1264
1409
  let a = document.createElement("span");
1265
1410
  a.className = "tablechart-control-icon", a.setAttribute("aria-hidden", "true");
1266
- let o = L("svg", {
1411
+ let o = A("svg", {
1267
1412
  viewBox: "0 0 16 16",
1268
1413
  focusable: "false"
1269
1414
  });
1270
- o.appendChild(L("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
1415
+ o.appendChild(A("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
1271
1416
  let s = document.createElement("span");
1272
1417
  s.className = "tablechart-control-label", s.textContent = e[r];
1273
- let l = t[r];
1274
- l && n && s.setAttribute(n, l);
1275
- let u = document.createElement("span");
1276
- return u.className = c, u.textContent = e.hint, t.hint && n && u.setAttribute(n, t.hint), i.append(...r === "next" ? [
1418
+ let c = t[r];
1419
+ c && n && s.setAttribute(n, c);
1420
+ let l = document.createElement("span");
1421
+ return l.className = g, l.textContent = e.hint, t.hint && n && l.setAttribute(n, t.hint), i.append(...r === "next" ? [
1277
1422
  s,
1278
- u,
1423
+ l,
1279
1424
  a
1280
1425
  ] : [
1281
1426
  a,
1282
1427
  s,
1283
- u
1428
+ l
1284
1429
  ]), i;
1285
1430
  };
1286
- return r.append(a("previous"), a("next")), r;
1287
- }, dt = (e, t, n, r = {
1431
+ return r.append(i("previous"), i("next")), r;
1432
+ }, st = (e, t, n, r = {
1288
1433
  x: 0,
1289
1434
  y: 0,
1290
1435
  scale: 1
1291
1436
  }, i = 2, a = 8, o = 12) => {
1292
1437
  let s = e.getBoundingClientRect(), c = s.width, l = s.height, u = Number.parseFloat(getComputedStyle(e).borderLeftWidth) || 0, d = t.getBoundingClientRect().height / 2 + (i - u) * r.scale, f = o * r.scale, { clientWidth: p, clientHeight: m } = document.documentElement, h = n.top - a, g = m - n.bottom - a, _ = l + d <= h ? !0 : l + d <= g ? !1 : h >= g, v = _ ? n.top - d - l : n.bottom + d, y = n.left + n.width / 2, b = Math.max(a, Math.min(y - c / 2, p - c - a));
1293
1438
  e.style.left = `${(b - r.x) / r.scale}px`, e.style.top = `${(Math.max(a, Math.min(v, m - l - a)) - r.y) / r.scale}px`, e.dataset.side = _ ? "top" : "bottom", t.style.left = `${Math.max(f, Math.min(y - b, c - f)) / r.scale - u}px`;
1294
- }, ft = "tablechart-tooltip", pt = [
1439
+ }, ct = "tablechart-tooltip", lt = [
1295
1440
  "--tablechart-surface",
1296
1441
  "--tablechart-tooltip-surface",
1297
1442
  "--tablechart-tooltip-color",
@@ -1299,51 +1444,51 @@ var ze = (e) => e.map((e) => ({
1299
1444
  "--tablechart-tooltip-radius",
1300
1445
  "--tablechart-tooltip-padding",
1301
1446
  "--tablechart-tooltip-shadow"
1302
- ], Q = null, mt, ht, $ = null, gt = null, _t = 0, vt = () => {
1303
- clearTimeout(_t), Q && $ && (Q.hidden = !0, $ = null, gt = null);
1304
- }, yt = !1, bt = !0, xt = NaN, St = NaN, Ct = !1, wt = () => {
1305
- if (Ct) return;
1306
- Ct = !0, document.addEventListener("pointermove", (e) => {
1307
- e.pointerType === "mouse" && (bt = e.screenX !== xt || e.screenY !== St, xt = e.screenX, St = e.screenY, bt && (yt = !1));
1447
+ ], Q = null, ut, dt, $ = null, ft = null, pt = 0, mt = () => {
1448
+ clearTimeout(pt), Q && $ && (Q.hidden = !0, $ = null, ft = null);
1449
+ }, ht = !1, gt = !0, _t = NaN, vt = NaN, yt = !1, bt = () => {
1450
+ if (yt) return;
1451
+ yt = !0, document.addEventListener("pointermove", (e) => {
1452
+ e.pointerType === "mouse" && (gt = e.screenX !== _t || e.screenY !== vt, _t = e.screenX, vt = e.screenY, gt && (ht = !1));
1308
1453
  }, {
1309
1454
  capture: !0,
1310
1455
  passive: !0
1311
1456
  });
1312
1457
  let e = () => {
1313
- yt = !0, vt();
1458
+ ht = !0, mt();
1314
1459
  };
1315
1460
  document.addEventListener("keydown", e, !0), window.addEventListener("scroll", e, {
1316
1461
  capture: !0,
1317
1462
  passive: !0
1318
1463
  });
1319
- }, Tt = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, Et = (e) => {
1464
+ }, xt = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, St = (e) => {
1320
1465
  let t = e.tooltipparent;
1321
1466
  return (typeof t == "string" ? document.querySelector(t) : t) ?? document.body;
1322
- }, Dt = () => {
1323
- clearTimeout(_t), _t = window.setTimeout(vt, 120);
1324
- }, Ot = () => {
1467
+ }, Ct = () => {
1468
+ clearTimeout(pt), pt = window.setTimeout(mt, 120);
1469
+ }, wt = () => {
1325
1470
  let e = document.createElement("div");
1326
- return e.className = ft, e.setAttribute("aria-hidden", "true"), e.hidden = !0, mt = document.createElement("div"), ht = document.createElement("div"), ht.className = `${ft}-arrow`, e.append(mt, ht), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout(_t)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && Dt()), document.addEventListener("pointerdown", (t) => {
1471
+ return e.className = ct, e.setAttribute("aria-hidden", "true"), e.hidden = !0, ut = document.createElement("div"), dt = document.createElement("div"), dt.className = `${ct}-arrow`, e.append(ut, dt), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout(pt)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && Ct()), document.addEventListener("pointerdown", (t) => {
1327
1472
  let n = t.target;
1328
- $ && !$.plot.contains(n) && !e.contains(n) && vt();
1329
- }), window.addEventListener("resize", vt), e;
1330
- }, kt = (e, t) => {
1473
+ $ && !$.plot.contains(n) && !e.contains(n) && mt();
1474
+ }), window.addEventListener("resize", mt), e;
1475
+ }, Tt = (e, t) => {
1331
1476
  let n = t ? t.style.getPropertyValue("--step") : "x";
1332
1477
  return n === "" || Number(n) < e.step;
1333
- }, At = (e, t) => {
1478
+ }, Et = (e, t) => {
1334
1479
  let n = e.svg.querySelector(`[data-series="${t + 1}"]:not(.tablechart-hole)`);
1335
1480
  if (!n) return;
1336
1481
  let r = getComputedStyle(n);
1337
1482
  return r.fill && r.fill !== "none" ? r.fill : r.stroke;
1338
- }, jt = (e, t, n) => {
1483
+ }, Dt = (e, t, n) => {
1339
1484
  let r = e.series.length > 1, i = [];
1340
1485
  for (let [n, a] of e.seriesValues.entries()) {
1341
- if (!kt(e, a[t])) continue;
1486
+ if (!Tt(e, a[t])) continue;
1342
1487
  let o = r ? e.figure.querySelector(`.tablechart-name[data-series="${n + 1}"]`) : null;
1343
1488
  i.push({
1344
1489
  name: r ? o?.textContent ?? e.series[n].name : "",
1345
1490
  value: a[t].textContent ?? "",
1346
- colour: r ? At(e, n) : void 0,
1491
+ colour: r ? Et(e, n) : void 0,
1347
1492
  sample: o ? {
1348
1493
  marker: o.dataset.marker ?? null,
1349
1494
  open: o.hasAttribute("data-open"),
@@ -1353,11 +1498,11 @@ var ze = (e) => e.map((e) => ({
1353
1498
  });
1354
1499
  }
1355
1500
  let a = e.totals[t];
1356
- return i.length > 1 && kt(e, a) && i.push({
1501
+ return i.length > 1 && Tt(e, a) && i.push({
1357
1502
  name: n.totallabel,
1358
1503
  value: a.textContent ?? ""
1359
1504
  }), i;
1360
- }, Mt = (e, t) => {
1505
+ }, Ot = (e, t) => {
1361
1506
  if (e.type.centre && e.values[t]) return e.values[t].getBoundingClientRect();
1362
1507
  let n = e.svg.querySelectorAll(`[data-row="${t + 1}"]:not(.tablechart-connector, .tablechart-leader)`), r = null;
1363
1508
  for (let e of n) {
@@ -1372,46 +1517,46 @@ var ze = (e) => e.map((e) => ({
1372
1517
  100
1373
1518
  ];
1374
1519
  return new DOMRect(i.left + i.width * a / 100, i.top + i.height * o / 100, i.width * s / 100, i.height * c / 100);
1375
- }, Nt = (e, t, n) => {
1376
- if (clearTimeout(_t), $ === e && gt === t) return;
1377
- let r = (e.type.tooltip ?? jt)(e, t, n);
1378
- if (!r.length) return vt();
1379
- $ && $ !== e && vt(), Q ?? (Q = Ot());
1520
+ }, kt = (e, t, n) => {
1521
+ if (clearTimeout(pt), $ === e && ft === t) return;
1522
+ let r = (e.type.tooltip ?? Dt)(e, t, n);
1523
+ if (!r.length) return mt();
1524
+ $ && $ !== e && mt(), Q ?? (Q = wt());
1380
1525
  let i = (e, t, n, r = !1, i) => {
1381
1526
  let a = document.createElement("div");
1382
- if (a.className = `${ft}-line`, n) {
1527
+ if (a.className = `${ct}-line`, n) {
1383
1528
  let e = document.createElement("span");
1384
- e.className = `${ft}-key`, e.style.background = n, i?.box ? e.dataset.sample = "box" : i && (e.dataset.sample = "line", i.marker && (e.dataset.marker = i.marker), i.line && (e.dataset.line = i.line), e.toggleAttribute("data-open", i.open)), a.append(e);
1529
+ e.className = `${ct}-key`, e.style.background = n, i?.box ? e.dataset.sample = "box" : i && (e.dataset.sample = "line", i.marker && (e.dataset.marker = i.marker), i.line && (e.dataset.line = i.line), e.toggleAttribute("data-open", i.open)), a.append(e);
1385
1530
  }
1386
1531
  let o = document.createElement("span");
1387
- if (o.className = `${ft}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
1532
+ if (o.className = `${ct}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
1388
1533
  e && o.append(":");
1389
1534
  let n = document.createElement("span");
1390
- n.className = `${ft}-value`, n.textContent = t, a.append(n);
1535
+ n.className = `${ct}-value`, n.textContent = t, a.append(n);
1391
1536
  }
1392
1537
  return a;
1393
1538
  }, a = e.categories[t]?.textContent ?? e.rows[t].label, o = r.length === 1 && !r[0].name, s = r.every((e) => e.name && !e.value);
1394
- mt.replaceChildren(...s ? [] : [i(a, o ? r[0].value : "", void 0, !0)], ...o ? [] : r.map(({ name: e, value: t, colour: n, sample: r }) => i(e, t, n, !1, r)));
1539
+ ut.replaceChildren(...s ? [] : [i(a, o ? r[0].value : "", void 0, !0)], ...o ? [] : r.map(({ name: e, value: t, colour: n, sample: r }) => i(e, t, n, !1, r)));
1395
1540
  let c = getComputedStyle(e.figure);
1396
- for (let e of pt) {
1541
+ for (let e of lt) {
1397
1542
  let t = c.getPropertyValue(e).trim();
1398
1543
  t ? Q.style.setProperty(e, t) : Q.style.removeProperty(e);
1399
1544
  }
1400
1545
  Q.style.setProperty("--_color", c.color), Q.style.colorScheme = c.colorScheme, Q.style.fontFamily = c.fontFamily;
1401
- let l = Et(n);
1402
- Q.parentElement !== l && l.append(Q), $ = e, gt = t, Q.hidden = !1, Q.style.left = "0px", Q.style.top = "0px";
1546
+ let l = St(n);
1547
+ Q.parentElement !== l && l.append(Q), $ = e, ft = t, Q.hidden = !1, Q.style.left = "0px", Q.style.top = "0px";
1403
1548
  let u = Q.getBoundingClientRect(), d = {
1404
1549
  x: u.left,
1405
1550
  y: u.top,
1406
- scale: Tt(Q, u.width)
1407
- }, f = Tt(e.plot, e.plot.getBoundingClientRect().width);
1408
- Q.style.fontSize = `${Number.parseFloat(c.fontSize) * f / d.scale}px`, dt(Q, ht, Mt(e, t), d);
1409
- }, Pt = (e, t, n = !1) => {
1551
+ scale: xt(Q, u.width)
1552
+ }, f = xt(e.plot, e.plot.getBoundingClientRect().width);
1553
+ Q.style.fontSize = `${Number.parseFloat(c.fontSize) * f / d.scale}px`, st(Q, dt, Ot(e, t), d);
1554
+ }, At = (e, t, n = !1) => {
1410
1555
  let { plot: r } = e;
1411
- r.setAttribute("data-hover", ""), wt();
1556
+ r.setAttribute("data-hover", ""), bt();
1412
1557
  let i = (t) => {
1413
1558
  if (e.rowAt) {
1414
- let n = r.getBoundingClientRect(), i = Tt(r, n.width);
1559
+ let n = r.getBoundingClientRect(), i = xt(r, n.width);
1415
1560
  return e.rowAt((t.clientX - n.left) / i, (t.clientY - n.top) / i);
1416
1561
  }
1417
1562
  let n = t.target.closest?.("[data-row]")?.getAttribute("data-row");
@@ -1421,13 +1566,13 @@ var ze = (e) => e.map((e) => ({
1421
1566
  else if (t.getAttribute("data-row") === String(e + 1)) return !0;
1422
1567
  return !1;
1423
1568
  }, s = null, c = (a) => {
1424
- if (a.type === "pointerdown") yt = !1;
1425
- else if (a.pointerType === "mouse" && (!bt || yt)) return;
1569
+ if (a.type === "pointerdown") ht = !1;
1570
+ else if (a.pointerType === "mouse" && (!gt || ht)) return;
1426
1571
  if (!r.classList.contains("is-placed") || !e.figure.classList.contains("is-shown")) return;
1427
- if (n && !e.figure.hasAttribute("data-left-out")) return $ === e ? vt() : void 0;
1572
+ if (n && !e.figure.hasAttribute("data-left-out")) return $ === e ? mt() : void 0;
1428
1573
  let c = i(a);
1429
- if (s = c, c === null || o(c)) return $ === e ? vt() : void 0;
1430
- Nt(e, c, t);
1574
+ if (s = c, c === null || o(c)) return $ === e ? mt() : void 0;
1575
+ kt(e, c, t);
1431
1576
  }, l = (t) => {
1432
1577
  let n = t.target;
1433
1578
  return e.svg.contains(n) && n.hasAttribute("data-row") ? n : null;
@@ -1441,46 +1586,77 @@ var ze = (e) => e.map((e) => ({
1441
1586
  if (!r) return;
1442
1587
  a.delete(r);
1443
1588
  let i = Number(r.getAttribute("data-row")) - 1;
1444
- s === i && !o(i) && !yt && Nt(e, i, t);
1589
+ s === i && !o(i) && !ht && kt(e, i, t);
1445
1590
  };
1446
1591
  e.svg.addEventListener("transitionend", u), e.svg.addEventListener("transitioncancel", u), r.addEventListener("pointermove", c), r.addEventListener("pointerdown", c), r.addEventListener("pointerleave", (t) => {
1447
- t.pointerType === "mouse" && (s = null, $ === e && Dt());
1592
+ t.pointerType === "mouse" && (s = null, $ === e && Ct());
1448
1593
  });
1449
- }, Ft = (e) => {
1450
- $ === e && vt();
1451
- }, It = {
1452
- area: He,
1453
- bar: Ae,
1454
- column: je,
1455
- donut: Pe,
1456
- line: Ve,
1457
- waterfall: Ge
1458
- }, Lt = (e, t) => {
1459
- It[e] = t;
1460
- }, Rt = {
1461
- "axis-break": se,
1462
- trend: he,
1463
- bracket: de,
1464
- reference: pe
1465
- }, zt = Object.keys(Rt), Bt = (e) => {
1594
+ }, jt = (e) => {
1595
+ $ === e && mt();
1596
+ }, Mt = {
1597
+ area: Re,
1598
+ bar: Ce,
1599
+ column: we,
1600
+ donut: De,
1601
+ line: Le,
1602
+ waterfall: Ve
1603
+ }, Nt = (e, t) => {
1604
+ Mt[e] = t;
1605
+ }, Pt = {
1606
+ "axis-break": L,
1607
+ trend: J,
1608
+ bracket: re,
1609
+ reference: ce
1610
+ }, Ft = Object.keys(Pt), It = (e) => {
1466
1611
  let t = "";
1467
1612
  for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
1468
1613
  return t.trim();
1469
- }, Vt = [
1614
+ }, Lt = [
1470
1615
  "straight",
1471
1616
  "step",
1472
1617
  "smooth"
1473
- ], Ht = (e, t, n) => {
1618
+ ], Rt = (e, t, n, r, i) => {
1619
+ let a = t === r, [o, s, c] = a ? [
1620
+ Math.min(e, n),
1621
+ Math.max(e, n),
1622
+ t
1623
+ ] : [
1624
+ Math.min(t, r),
1625
+ Math.max(t, r),
1626
+ e
1627
+ ], l = i.filter(([e, t, n, r]) => a ? t <= c && c <= t + r : e <= c && c <= e + n).map(([e, t, n, r]) => a ? [e, e + n] : [t, t + r]).sort((e, t) => e[0] - t[0]), u = [], d = o;
1628
+ for (let [e, t] of l) e > d && u.push([d, Math.min(e, s)]), d = Math.max(d, t);
1629
+ return d < s && u.push([d, s]), u.map(([e, t]) => a ? `M${k(e)},${k(c)}H${k(t)}` : `M${k(c)},${k(e)}V${k(t)}`).join("");
1630
+ }, zt = (e, t) => {
1631
+ let [n, r, i, a] = [
1632
+ "x1",
1633
+ "y1",
1634
+ "x2",
1635
+ "y2"
1636
+ ].map((t) => Number(e.getAttribute(t))), o = A("path", { d: Rt(n, r, i, a, t) });
1637
+ for (let { name: t, value: n } of Array.from(e.attributes)) /^[xy][12]$/.test(t) || o.setAttribute(t, n);
1638
+ e.replaceWith(o);
1639
+ }, Bt = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
1640
+ +e,
1641
+ +t,
1642
+ +r,
1643
+ +t
1644
+ ] : [
1645
+ +e,
1646
+ +t,
1647
+ +e,
1648
+ +r
1649
+ ]), Vt = (e, [t, n, r, i]) => e.map(([e, a, o, s]) => a === s ? n <= a && a <= n + i && Math.max(e, t) < Math.min(o, t + r) ? `M${k(Math.max(e, t))},${k(a)}H${k(Math.min(o, t + r))}` : "" : t <= e && e <= t + r && Math.max(a, n) < Math.min(s, n + i) ? `M${k(e)},${k(Math.max(a, n))}V${k(Math.min(s, n + i))}` : "").join(""), Ht = (e, t, n) => {
1474
1650
  let r = e.getAttribute(t);
1475
1651
  return r === null ? n : r !== "false";
1476
1652
  }, Ut = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", Wt = (e, t) => {
1477
1653
  let n = e.dataset.chartShape;
1478
- return n && Vt.includes(n) ? n : Vt.includes(t.shape) ? t.shape : "straight";
1654
+ return n && Lt.includes(n) ? n : Lt.includes(t.shape) ? t.shape : "straight";
1479
1655
  }, Gt = (e) => {
1480
1656
  for (let t of e.querySelectorAll("br")) {
1481
- if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(Bt(t))) continue;
1657
+ if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(It(t))) continue;
1482
1658
  let e = document.createElement("span");
1483
- e.className = c, e.textContent = ". ", t.before(e);
1659
+ e.className = g, e.textContent = ". ", t.before(e);
1484
1660
  }
1485
1661
  }, Kt = (e, t, n) => {
1486
1662
  let r = e.querySelector("table");
@@ -1503,139 +1679,141 @@ var ze = (e) => e.map((e) => ({
1503
1679
  e.tagName === "FIGURE" && !n(e) && r(e);
1504
1680
  let i = e.querySelector("table");
1505
1681
  i && !n(i) && !i.querySelector(":scope > caption") && r(i);
1506
- }, Yt = (e, t, r = null) => {
1507
- let i = r ?? (e.getAttribute("data-chart") || "column"), a = It[i];
1508
- if (!a) return console.warn(`[${f}] Unknown chart type "${i}". Known types: ${Object.keys(It).join(", ")}.`), e.setAttribute("data-chart-empty", ""), null;
1509
- let o = qe(e, t.langattribute);
1510
- if (!o.length) return console.warn(e.querySelector("table") ? `[${f}] A chart has no rows in its table, so there is nothing to draw.` : `[${f}] A chart has no table, so there is nothing to draw.`, e), e.setAttribute("data-chart-empty", ""), null;
1511
- Jt(e);
1512
- let c = Xe(e, o, t.langattribute);
1513
- c.length > 1 && !a.series && !a.columns && (console.warn(`[${f}] A ${i} chart uses only the first of its ${c.length} value columns.`), c = c.slice(0, 1));
1514
- let l = c.length > 1;
1515
- l && e.style.setProperty("--_series-count", String(c.length));
1516
- let u = e.hasAttribute("data-chart-stack");
1517
- u && !a.stackable && console.warn(`[${f}] A ${i} chart cannot be stacked.`);
1518
- let p = u && !!a.stackable && l, m = document.createElement("div");
1519
- m.className = ie, m.setAttribute("aria-hidden", "true");
1520
- let h = L("svg", {
1682
+ }, Yt = (r, i, a = null) => {
1683
+ let o = a ?? (r.getAttribute("data-chart") || "column"), s = Mt[o];
1684
+ if (!s) return console.warn(`[${e}] Unknown chart type "${o}". Known types: ${Object.keys(Mt).join(", ")}.`), r.setAttribute("data-chart-empty", ""), null;
1685
+ let c = Ue(r, i.langattribute);
1686
+ if (!c.length) return console.warn(r.querySelector("table") ? `[${e}] A chart has no rows in its table, so there is nothing to draw.` : `[${e}] A chart has no table, so there is nothing to draw.`, r), r.setAttribute("data-chart-empty", ""), null;
1687
+ Jt(r);
1688
+ let d = Ke(r, c, i.langattribute);
1689
+ d.length > 1 && !s.series && !s.columns && (console.warn(`[${e}] A ${o} chart uses only the first of its ${d.length} value columns.`), d = d.slice(0, 1));
1690
+ let f = d.length > 1;
1691
+ f && r.style.setProperty("--_series-count", String(d.length));
1692
+ let m = r.hasAttribute("data-chart-stack");
1693
+ m && !s.stackable && console.warn(`[${e}] A ${o} chart cannot be stacked.`);
1694
+ let h = m && !!s.stackable && f, g = document.createElement("div");
1695
+ g.className = t, g.setAttribute("aria-hidden", "true");
1696
+ let _ = A("svg", {
1521
1697
  role: "presentation",
1522
1698
  focusable: "false"
1523
1699
  });
1524
- m.appendChild(h), e.appendChild(m);
1525
- let g = a.centre ? o.filter((e) => !e.isTotal) : o, _ = Math.max(0, U(g.flatMap((e) => e.cells.slice(0, c.length).map((e) => z(e.number))))), v = c.map((e, t) => Math.max(0, U(o.map((e) => z(e.cells[t]?.number ?? ""))))), y = c.map((e, t) => o.map((e, n) => {
1526
- let r = e.cells[t] ?? e.cells[0], i = k(S, m);
1527
- return i.classList.add(...e.classes), i.dataset.value = String(r.value), r.prefix && (i.dataset.prefix = r.prefix), r.suffix && (i.dataset.suffix = r.suffix), r.missing && (i.dataset.missing = r.raw), l && (i.dataset.series = String(t + 1)), a.columns && (i.dataset.decimals = String(v[t])), i.dataset.row = String(n + 1), i.style.setProperty("--i", String(e.slot)), i;
1528
- })), b = y[0], x = p && a.totals ? o.map((e, t) => {
1529
- let n = k(S, m);
1530
- n.classList.add(...e.classes), n.dataset.kind = "total", n.dataset.row = String(t + 1), n.dataset.value = String(xe(e, c.length));
1531
- let r = e.cells[0];
1532
- return r.prefix && (n.dataset.prefix = r.prefix), r.suffix && (n.dataset.suffix = r.suffix), n.style.setProperty("--i", String(e.slot)), n;
1533
- }) : [], w = o[o.length - 1], T = c.some((e) => e.focus), E = e.getAttribute("data-chart-legend"), D = l && !a.columns && (E === null ? t.legend || a.legend !== void 0 : E !== "false") ? document.createElement("div") : null;
1534
- D && (D.className = d, D.setAttribute("aria-hidden", "true"), D.inert = !0);
1535
- let O = l && !a.columns ? c.map((n, r) => {
1536
- let i = k(s, D ?? m);
1537
- D && (i.dataset.place = "legend");
1538
- let o = a.legend ?? a.swatch;
1539
- if (o && (i.dataset.swatch = o), i.textContent = n.name, !o && Wt(e, t) !== "step") {
1540
- let e = R(c, r);
1541
- i.dataset.marker = e.shape, i.toggleAttribute("data-open", e.open);
1700
+ g.appendChild(_), r.appendChild(g);
1701
+ let v = s.centre ? c.filter((e) => !e.isTotal) : c, y = Math.max(0, R(v.flatMap((e) => e.cells.slice(0, d.length).map((e) => z(e.number))))), S = d.map((e, t) => Math.max(0, R(c.map((e) => z(e.cells[t]?.number ?? ""))))), C = document.createElement("div");
1702
+ C.className = "tablechart-values", g.appendChild(C);
1703
+ let w = d.map((e, t) => c.map((e, r) => {
1704
+ let i = e.cells[t] ?? e.cells[0], a = M(n, C);
1705
+ 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), f && (a.dataset.series = String(t + 1)), s.columns && (a.dataset.decimals = String(S[t])), a.dataset.row = String(r + 1), a.style.setProperty("--i", String(e.slot)), a;
1706
+ })), T = w[0], E = h && s.totals ? c.map((e, t) => {
1707
+ let r = M(n, C);
1708
+ r.classList.add(...e.classes), r.dataset.kind = "total", r.dataset.row = String(t + 1), r.dataset.value = String(me(e, d.length));
1709
+ let i = e.cells[0];
1710
+ return i.prefix && (r.dataset.prefix = i.prefix), i.suffix && (r.dataset.suffix = i.suffix), r.style.setProperty("--i", String(e.slot)), r;
1711
+ }) : [], D = c[c.length - 1], O = d.some((e) => e.focus), k = r.getAttribute("data-chart-legend"), j = f && !s.columns && (k === null ? i.legend || s.legend !== void 0 : k !== "false") ? document.createElement("div") : null;
1712
+ j && (j.className = u, j.setAttribute("aria-hidden", "true"), j.inert = !0);
1713
+ let N = f && !s.columns ? d.map((e, t) => {
1714
+ let n = M(l, j ?? g);
1715
+ j && (n.dataset.place = "legend");
1716
+ let a = s.legend ?? s.swatch;
1717
+ if (a && (n.dataset.swatch = a), n.textContent = e.name, !a && Wt(r, i) !== "step") {
1718
+ let e = ke(d, t);
1719
+ n.dataset.marker = e.shape, n.toggleAttribute("data-open", e.open);
1542
1720
  }
1543
- return n.line && !o && (i.dataset.line = n.line), n.key && t.langattribute && i.setAttribute(t.langattribute, n.key), i.dataset.series = String(r + 1), i.style.setProperty("--n", String(r)), i.style.setProperty("--palette", `var(--tablechart-color-${r + 1})`), i.style.setProperty("--m", T && !n.focus ? "1" : "0"), i.style.setProperty("--i", String(w.slot)), i;
1544
- }) : [], A = a.centre ? k(W, m) : null;
1545
- if (A) {
1546
- let e = o.find((e) => e.isTotal), t = e ? e.value : o.reduce((e, t) => e + Math.abs(t.value), 0);
1547
- A.dataset.value = String(t), e && (A.dataset.decimals = String(z(e.number)));
1721
+ return e.line && !a && (n.dataset.line = e.line), e.key && i.langattribute && n.setAttribute(i.langattribute, e.key), n.dataset.series = String(t + 1), n.style.setProperty("--n", String(t)), n.style.setProperty("--palette", `var(--tablechart-color-${t + 1})`), n.style.setProperty("--m", O && !e.focus ? "1" : "0"), n.style.setProperty("--i", String(D.slot)), n;
1722
+ }) : [], P = s.centre ? M(p, g) : null;
1723
+ if (P) {
1724
+ let e = c.find((e) => e.isTotal), t = e ? e.value : c.reduce((e, t) => e + Math.abs(t.value), 0);
1725
+ P.dataset.value = String(t), e && (P.dataset.decimals = String(z(e.number)));
1548
1726
  }
1549
- let j = A && !o.some((e) => e.isTotal) ? Kt(e, A, t) : null, M = a.categories === "beside", N = document.createElement("div");
1550
- N.className = n, N.setAttribute("aria-hidden", "true"), N.inert = !0, M ? N.dataset.place = "beside" : a.centre && (N.dataset.place = "key"), N.style.setProperty("--_columns", String(o.length));
1551
- let P = 0;
1552
- for (let [e, n] of o.entries()) {
1553
- let r = document.createElement("span");
1554
- r.classList.add(...n.classes), r.textContent = n.label, n.key && t.langattribute && r.setAttribute(t.langattribute, n.key), a.centre && (r.dataset.kind = n.isTotal ? "total" : "slice", n.isTotal || (r.dataset.slice = String(P + 1), r.style.setProperty("--n", String(P)), r.style.setProperty("--palette", `var(--tablechart-color-${P + 1})`), P += 1)), r.style.setProperty("--i", String(n.slot)), r.dataset.row = String(e + 1), N.appendChild(r);
1727
+ let ee = P && !c.some((e) => e.isTotal) ? Kt(r, P, i) : null, F = s.categories === "beside", I = document.createElement("div");
1728
+ I.className = "tablechart-categories", I.setAttribute("aria-hidden", "true"), I.inert = !0, F ? I.dataset.place = "beside" : s.centre && (I.dataset.place = "key"), I.style.setProperty("--_columns", String(c.length));
1729
+ let L = 0;
1730
+ for (let [e, t] of c.entries()) {
1731
+ let n = document.createElement("span");
1732
+ n.classList.add(...t.classes), n.textContent = t.label, t.key && i.langattribute && n.setAttribute(i.langattribute, t.key), s.centre && (n.dataset.kind = t.isTotal ? "total" : "slice", t.isTotal || (n.dataset.slice = String(L + 1), n.style.setProperty("--n", String(L)), n.style.setProperty("--palette", `var(--tablechart-color-${L + 1})`), L += 1)), n.style.setProperty("--i", String(t.slot)), n.dataset.row = String(e + 1), I.appendChild(n);
1555
1733
  }
1556
- (M ? m : e).appendChild(N), D && e.appendChild(D);
1557
- let F = c.filter((e) => !e.group), I = !a.axes && !a.centre && Ht(e, "data-chart-axis", t.axis), B = a.axes ? {
1558
- titles: F.slice(0, 2).map((e, n) => {
1559
- let r = k(`${ne}-title`, m);
1560
- return r.dataset.axis = n ? "y" : "x", r.textContent = e.name, e.key && t.langattribute && r.setAttribute(t.langattribute, e.key), r;
1734
+ (F ? g : r).appendChild(I), j && r.appendChild(j);
1735
+ let te = d.filter((e) => !e.group), B = !s.axes && !s.centre && Ht(r, "data-chart-axis", i.axis), V = s.axes ? {
1736
+ titles: te.slice(0, 2).map((e, t) => {
1737
+ let n = M(`${b}-title`, g);
1738
+ return n.dataset.axis = t ? "y" : "x", n.textContent = e.name, e.key && i.langattribute && n.setAttribute(i.langattribute, e.key), n;
1561
1739
  }),
1562
- ticks: k(`${C}s`, m),
1740
+ ticks: M(`${x}s`, g),
1563
1741
  numbers: !0
1564
- } : I || !a.centre && Ht(e, "data-chart-grid", t.grid) ? {
1742
+ } : B || !s.centre && Ht(r, "data-chart-grid", i.grid) ? {
1565
1743
  titles: [],
1566
- ticks: k(`${C}s`, m),
1567
- numbers: I
1744
+ ticks: M(`${x}s`, g),
1745
+ numbers: B
1568
1746
  } : null;
1569
- a.text?.({
1570
- figure: e,
1571
- plot: m,
1572
- rows: o,
1573
- series: c,
1574
- config: t
1747
+ s.text?.({
1748
+ figure: r,
1749
+ plot: g,
1750
+ rows: c,
1751
+ series: d,
1752
+ config: i
1575
1753
  });
1576
- let V = Ut(e, t) && !a.axes ? ot(e) : null;
1577
- a.axes && e.querySelector("[data-fragment]") && Z.log(`A ${i} chart has no steps, so it is shown whole.`, e), V && e.setAttribute("data-steps", "");
1578
- let H = e.getAttribute("data-chart-keys"), ee = V && t.controls ? ut({
1579
- previous: t.previouslabel,
1580
- next: t.nextlabel,
1581
- hint: t.stephint
1754
+ let H = Ut(r, i) && !s.axes ? nt(r) : null;
1755
+ s.axes && r.querySelector("[data-fragment]") && Z.log(`A ${o} chart has no steps, so it is shown whole.`, r), H && r.setAttribute("data-steps", "");
1756
+ let U = r.getAttribute("data-chart-keys"), W = H && i.controls ? ot({
1757
+ previous: i.previouslabel,
1758
+ next: i.nextlabel,
1759
+ hint: i.stephint
1582
1760
  }, {
1583
- previous: H && `${H}-previous`,
1584
- next: H && `${H}-next`,
1585
- hint: H && `${H}-step`
1586
- }, t.langattribute) : null;
1587
- ee && e.appendChild(ee);
1588
- let te = e.getAttribute("data-chart-table"), G = te && Zt.includes(te) ? te : t.table;
1589
- if (G === "never") e.removeAttribute("data-table");
1761
+ previous: U && `${U}-previous`,
1762
+ next: U && `${U}-next`,
1763
+ hint: U && `${U}-step`
1764
+ }, i.langattribute) : null;
1765
+ W && r.appendChild(W);
1766
+ let ne = r.getAttribute("data-chart-table"), re = ne && Zt.includes(ne) ? ne : i.table;
1767
+ if (re === "never") r.removeAttribute("data-table");
1590
1768
  else {
1591
- e.setAttribute("data-table", G);
1592
- let t = e.querySelector(":scope > table");
1593
- t && e.append(t);
1769
+ r.setAttribute("data-table", re);
1770
+ let e = r.querySelector(":scope > table");
1771
+ e && r.append(e);
1594
1772
  }
1595
- let re = Array.from(e.querySelectorAll("[data-annotation]")).map((e) => {
1596
- let t = e.getAttribute("data-annotation"), n = Rt[t];
1597
- if (!n) return console.warn(`[${f}] Unknown annotation "${t}". Known annotations: ${Object.keys(Rt).join(", ")}.`), null;
1598
- let r = Number.parseInt(e.getAttribute("data-series") ?? "1", 10), i = r >= 1 && r <= c.length ? r - 1 : 0;
1599
- return r !== i + 1 && console.warn(`[${f}] An annotation reads line ${r}, which is not there; it reads line 1.`), {
1600
- spec: e,
1601
- type: n,
1602
- badge: n.create(e, m),
1603
- series: i,
1604
- after: o.length
1773
+ let ie = Array.from(r.querySelectorAll("[data-annotation]")).map((t) => {
1774
+ let n = t.getAttribute("data-annotation"), r = Pt[n];
1775
+ if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(Pt).join(", ")}.`), null;
1776
+ let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= d.length ? i - 1 : 0;
1777
+ return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which is not there; it reads line 1.`), {
1778
+ spec: t,
1779
+ type: r,
1780
+ badge: r.create(t, g),
1781
+ series: a,
1782
+ after: c.length
1605
1783
  };
1606
1784
  }).filter((e) => e !== null);
1607
- Ut(e, t) && e.setAttribute("data-animate", Qt(e, i, t, !!V));
1608
- let K = {
1609
- figure: e,
1610
- plot: m,
1611
- svg: h,
1612
- rows: o,
1613
- decimals: _,
1614
- type: a,
1615
- values: b,
1616
- series: c,
1617
- seriesValues: y,
1618
- names: D ? [] : O,
1619
- categories: Array.from(N.children),
1620
- centre: A,
1621
- axes: B,
1622
- stacked: p,
1623
- totals: x,
1624
- totalCell: j,
1785
+ Ut(r, i) && r.setAttribute("data-animate", Qt(r, o, i, !!H));
1786
+ let G = {
1787
+ figure: r,
1788
+ plot: g,
1789
+ svg: _,
1790
+ rows: c,
1791
+ decimals: y,
1792
+ type: s,
1793
+ values: T,
1794
+ series: d,
1795
+ seriesValues: w,
1796
+ names: j ? [] : N,
1797
+ categories: Array.from(I.children),
1798
+ centre: P,
1799
+ axes: V,
1800
+ stacked: h,
1801
+ totals: E,
1802
+ totalCell: ee,
1625
1803
  rowAt: null,
1626
1804
  rowBox: null,
1627
- annotations: re,
1805
+ annotations: ie,
1628
1806
  checks: [],
1629
- plan: V,
1807
+ plan: H,
1630
1808
  step: 0,
1631
- controls: ee
1632
- };
1633
- ee?.addEventListener("click", (e) => {
1809
+ controls: W
1810
+ }, ae = () => cn(r, _);
1811
+ _.addEventListener("transitionend", ae), _.addEventListener("transitioncancel", ae), W?.addEventListener("click", (e) => {
1634
1812
  let t = e.target.closest("button")?.dataset.go;
1635
- t && lt(K, K.step + (t === "next" ? 1 : -1));
1636
- }), lt(K, 0, !0);
1637
- let q = e.getAttribute("data-chart-tooltip"), J = q === "false" ? !1 : q === "auto" ? "auto" : q !== null || t.tooltip;
1638
- return J && Pt(K, t, J === "auto"), rn(K, t), K;
1813
+ t && at(G, G.step + (t === "next" ? 1 : -1));
1814
+ }), at(G, 0, !0);
1815
+ let K = r.getAttribute("data-chart-tooltip"), oe = K === "false" ? !1 : K === "auto" ? "auto" : K !== null || i.tooltip;
1816
+ return oe && At(G, i, oe === "auto"), rn(G, i), G;
1639
1817
  }, Xt = {
1640
1818
  grow: "grow",
1641
1819
  sweep: "sweep"
@@ -1654,77 +1832,77 @@ var ze = (e) => e.map((e) => ({
1654
1832
  let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
1655
1833
  if (!a) return null;
1656
1834
  let o = Number(a[1]);
1657
- return a[2] === "%" ? o / 100 * w : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
1835
+ return a[2] === "%" ? o / 100 * C : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
1658
1836
  }, tn = (e, t) => en(e, t, "--tablechart-bar-max", "60px") ?? Infinity, nn = (t, n) => {
1659
- let { plot: r, svg: i, rows: a, type: o, values: s, series: c, seriesValues: l, names: u, annotations: d } = t, m = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), h = m > 0 ? m : o.aspect ?? n.aspect, _ = o.categories === "beside", v = t.axes && !o.axes ? t.axes : null, y = _ ? null : t.categories[0]?.parentElement, b = null;
1837
+ let { plot: r, svg: i, rows: a, type: s, values: c, series: l, seriesValues: u, names: d, annotations: p } = t, m = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), g = m > 0 ? m : s.aspect ?? n.aspect, _ = s.categories === "beside", v = t.axes && !s.axes ? t.axes : null, y = _ ? null : t.categories[0]?.parentElement, w = null;
1660
1838
  if (v) {
1661
1839
  r.style.margin = "", y && (y.style.marginLeft = "");
1662
1840
  let e = r.clientWidth;
1663
1841
  if (!e) return !1;
1664
- let i = o.segments?.(a) ?? [], s = t.stacked ? a.flatMap((e) => Object.values(be(e, c.length, o.running))) : i.some((e) => e.kind === "up" || e.kind === "down") ? i.flatMap((e) => [e.from, e.to]) : a.flatMap((e) => e.cells.slice(0, c.length).filter((e) => !e.missing).map((e) => e.value)), l = Math.min(0, -U(s.map((e) => -e))), u = Math.max(0, U(s)), d = Number.parseFloat(getComputedStyle(r).fontSize) || 16, { chartScaleY: f, chartScale: p } = t.figure.dataset, m = nt(f ?? p);
1665
- if (m && m.length > 2) b = {
1842
+ let i = s.segments?.(a) ?? [], o = t.stacked ? a.flatMap((e) => Object.values(pe(e, l.length, s.running))) : i.some((e) => e.kind === "up" || e.kind === "down") ? i.flatMap((e) => [e.from, e.to]) : a.flatMap((e) => e.cells.slice(0, l.length).filter((e) => !e.missing).map((e) => e.value)), c = Math.min(0, -R(o.map((e) => -e))), u = Math.max(0, R(o)), d = Number.parseFloat(getComputedStyle(r).fontSize) || 16, { chartScaleY: f, chartScale: p } = t.figure.dataset, m = Qe(f ?? p);
1843
+ if (m && m.length > 2) w = {
1666
1844
  min: m[0],
1667
1845
  max: m[m.length - 1],
1668
1846
  step: 0,
1669
1847
  ticks: m
1670
1848
  };
1671
1849
  else {
1672
- let [t, n] = m ?? [l, u], r = $e(n - t, Math.max((_ ? e / 9 : e * h / 3) / d, 2)), i = (e, t) => m ? e : Number(((t ? Math.ceil : Math.floor)(e / r - 1e-9 * (t ? 1 : -1)) * r).toPrecision(12)), a = i(t, !1), o = i(n, !0);
1673
- b = {
1850
+ let [t, n] = m ?? [c, u], r = Ye(n - t, Math.max((_ ? e / 9 : e * g / 3) / d, 2)), i = (e, t) => m ? e : Number(((t ? Math.ceil : Math.floor)(e / r - 1e-9 * (t ? 1 : -1)) * r).toPrecision(12)), a = i(t, !1), o = i(n, !0);
1851
+ w = {
1674
1852
  min: a,
1675
1853
  max: o,
1676
1854
  step: r,
1677
- ticks: et(a, o, r)
1855
+ ticks: Xe(a, o, r)
1678
1856
  };
1679
1857
  }
1680
1858
  v.ticks.textContent = "";
1681
- let g = a.find((e) => !e.missing), x = U(b.ticks.map((e) => z(String(e))));
1682
- for (let e of b.ticks) {
1683
- let t = k(C, v.ticks);
1684
- t.dataset.value = String(e), t.dataset.place = "none", g?.prefix && (t.dataset.prefix = g.prefix), g?.suffix && (t.dataset.suffix = g.suffix), an(t, x, n.locale);
1859
+ let h = a.find((e) => !e.missing), b = R(w.ticks.map((e) => z(String(e))));
1860
+ for (let e of w.ticks) {
1861
+ let t = M(x, v.ticks);
1862
+ t.dataset.value = String(e), t.dataset.place = "none", h?.prefix && (t.dataset.prefix = h.prefix), h?.suffix && (t.dataset.suffix = h.suffix), an(t, b, n.locale);
1685
1863
  }
1686
1864
  if (v.numbers) {
1687
1865
  let e = Array.from(v.ticks.children);
1688
1866
  for (let t of e) delete t.dataset.place;
1689
- H(e), _ ? r.style.marginBottom = `${(e[0] ? N(e[0]).height : 0) + 6}px` : (r.style.marginLeft = `${U([0, ...e.map((e) => N(e).width)]) + 10}px`, y && (y.style.marginLeft = r.style.marginLeft));
1867
+ oe(e), _ ? r.style.marginBottom = `${(e[0] ? q(e[0]).height : 0) + 6}px` : (r.style.marginLeft = `${R([0, ...e.map((e) => q(e).width)]) + 10}px`, y && (y.style.marginLeft = r.style.marginLeft));
1690
1868
  }
1691
1869
  }
1692
- let x = r.clientWidth;
1693
- if (!x) return !1;
1694
- let S = w / x, T = w * h;
1695
- r.classList.add(g);
1696
- for (let e of [...l.flat(), ...t.totals]) delete e.dataset.place;
1870
+ let T = r.clientWidth;
1871
+ if (!T) return !1;
1872
+ let E = C / T, D = C * g;
1873
+ r.classList.add(h);
1874
+ for (let e of [...u.flat(), ...t.totals]) delete e.dataset.place;
1697
1875
  r.style.removeProperty("--_fit"), t.categories[0]?.parentElement?.style.removeProperty("--_beside");
1698
- let E = o.axes ? t.axes : null, D = [];
1699
- if (E) {
1700
- let e = Number.parseFloat(getComputedStyle(r).fontSize) || 16, i = c.flatMap((e, t) => e.group ? [] : [t]).slice(0, 2), o = a.filter((e) => i.every((t) => e.cells[t] && !e.cells[t].missing)), { chartScaleX: s, chartScaleY: l, chartScale: u } = t.figure.dataset, d = [nt(s), nt(l ?? u)];
1701
- D = i.map((t, n) => rt(o.length ? o.map((e) => e.cells[t].value) : [0, 1], Math.max(n ? T / S / (e * 4) : x / (e * 9), 4), d[n])), E.ticks.textContent = "", D.forEach((e, t) => {
1702
- let r = o[0]?.cells[i[t]], a = U(e.ticks.map((e) => z(String(e))));
1876
+ let O = s.axes ? t.axes : null, j = [];
1877
+ if (O) {
1878
+ let e = Number.parseFloat(getComputedStyle(r).fontSize) || 16, i = l.flatMap((e, t) => e.group ? [] : [t]).slice(0, 2), o = a.filter((e) => i.every((t) => e.cells[t] && !e.cells[t].missing)), { chartScaleX: s, chartScaleY: c, chartScale: u } = t.figure.dataset, d = [Qe(s), Qe(c ?? u)];
1879
+ j = i.map((t, n) => $e(o.length ? o.map((e) => e.cells[t].value) : [0, 1], Math.max(n ? D / E / (e * 4) : T / (e * 9), 4), d[n])), O.ticks.textContent = "", j.forEach((e, t) => {
1880
+ let r = o[0]?.cells[i[t]], a = R(e.ticks.map((e) => z(String(e))));
1703
1881
  for (let i of e.ticks) {
1704
- let e = k(C, E.ticks);
1882
+ let e = M(x, O.ticks);
1705
1883
  e.dataset.axis = t ? "y" : "x", e.dataset.value = String(i), r?.prefix && (e.dataset.prefix = r.prefix), r?.suffix && (e.dataset.suffix = r.suffix), an(e, a, n.locale);
1706
1884
  }
1707
1885
  });
1708
1886
  }
1709
- let O = E ? Array.from(E.ticks.children) : [];
1710
- H([
1711
- ...l.flat(),
1887
+ let P = O ? Array.from(O.ticks.children) : [];
1888
+ oe([
1889
+ ...u.flat(),
1712
1890
  ...t.totals,
1713
- ...u,
1891
+ ...d,
1714
1892
  ...t.categories,
1715
- ...d.map((e) => e.badge),
1716
- ...E?.titles ?? [],
1717
- ...O
1893
+ ...p.map((e) => e.badge),
1894
+ ...O?.titles ?? [],
1895
+ ...P
1718
1896
  ]);
1719
- let j = (s[0] ? N(s[0]).height : 0) * S, M = d[0]?.badge ? N(d[0].badge).height * S : 0, P = Math.max(T, en(t.figure, S, "--tablechart-min-height", "200px") ?? 0, o.minHeight?.({
1720
- labelHeight: j,
1721
- nameHeight: Math.max(0, U(t.categories.map((e) => N(e).height))) * S,
1722
- unit: S,
1897
+ let F = (c[0] ? q(c[0]).height : 0) * E, I = p[0]?.badge ? q(p[0].badge).height * E : 0, L = Math.max(D, en(t.figure, E, "--tablechart-min-height", "200px") ?? 0, s.minHeight?.({
1898
+ labelHeight: F,
1899
+ nameHeight: Math.max(0, R(t.categories.map((e) => q(e).height))) * E,
1900
+ unit: E,
1723
1901
  rows: a.length,
1724
- series: c.length,
1902
+ series: l.length,
1725
1903
  stacked: t.stacked
1726
- }) ?? 0), F = t.stacked ? a.map((e) => {
1727
- let t = xe(e, c.length);
1904
+ }) ?? 0), te = t.stacked ? a.map((e) => {
1905
+ let t = me(e, l.length);
1728
1906
  return {
1729
1907
  ...e,
1730
1908
  value: t,
@@ -1733,222 +1911,241 @@ var ze = (e) => e.map((e) => ({
1733
1911
  value: t
1734
1912
  } : e)
1735
1913
  };
1736
- }) : a, I = (o.segments ?? ((e) => e.map((e) => ({
1914
+ }) : a, B = (s.segments ?? ((e) => e.map((e) => ({
1737
1915
  ...e,
1738
1916
  from: 0,
1739
1917
  to: e.value,
1740
1918
  kind: "bar"
1741
- }))))(t.stacked ? F.map((e) => ({
1919
+ }))))(t.stacked ? te.map((e) => ({
1742
1920
  ...e,
1743
1921
  cells: [e.cells[0]]
1744
- })) : a), R = {
1745
- labelHeight: j,
1746
- badgeHeight: M,
1747
- hasAnnotations: d.length > 0,
1748
- unit: S,
1749
- series: c.length,
1750
- focused: c.some((e) => e.focus),
1922
+ })) : a), V = {
1923
+ labelHeight: F,
1924
+ badgeHeight: I,
1925
+ hasAnnotations: p.length > 0,
1926
+ unit: E,
1927
+ series: l.length,
1928
+ focused: l.some((e) => e.focus),
1751
1929
  stacked: t.stacked
1752
- }, V = Math.max(((e) => t.stacked ? e(a.map((e) => be(e, c.length, o.running).top)) : e([...I.flatMap((e) => [
1930
+ }, H = Math.max(((e) => t.stacked ? e(a.map((e) => pe(e, l.length, s.running).top)) : e([...B.flatMap((e) => [
1753
1931
  e.from,
1754
1932
  e.to,
1755
1933
  e.value
1756
- ]), ...a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value))]))(U), 0), ee = I.some((e) => e.kind === "up" || e.kind === "down") ? I.flatMap((e) => [e.from, e.to]) : t.stacked ? a.map((e) => be(e, c.length, o.running).bottom) : a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value)), W = Math.min(-U(ee.map((e) => -e)), 0), G = o.headroom?.(R) ?? j, re = 2 * S + (o.footroom?.(R) ?? 0) + (W < 0 ? j + 4 * S : 0), ie = P - G - re, K = b ? Math.max(b.max, V) : V * 1.02, q = b ? Math.min(b.min, W) : W * 1.02, J = d.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, ae = (e) => {
1757
- let t = Number.parseFloat(J?.getAttribute(e) ?? "");
1934
+ ]), ...a.flatMap((e) => e.cells.slice(0, l.length).map((e) => e.value))]))(R), 0), U = B.some((e) => e.kind === "up" || e.kind === "down") ? B.flatMap((e) => [e.from, e.to]) : t.stacked ? a.map((e) => pe(e, l.length, s.running).bottom) : a.flatMap((e) => e.cells.slice(0, l.length).map((e) => e.value)), W = Math.min(-R(U.map((e) => -e)), 0), ne = s.headroom?.(V) ?? F, re = 2 * E + (s.footroom?.(V) ?? 0) + (W < 0 ? F + 4 * E : 0), ie = L - ne - re, G = w ? Math.max(w.max, H) : H * 1.02, ae = w ? Math.min(w.min, W) : W * 1.02, K = p.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, se = (e) => {
1935
+ let t = Number.parseFloat(K?.getAttribute(e) ?? "");
1758
1936
  return Number.isFinite(t) ? t : null;
1759
- }, oe = ae("data-from") ?? ae("data-at"), se = ae("data-to"), Y = null;
1760
- if (J && (oe !== null || se !== null)) {
1761
- let e = oe ?? 0, t = se ?? K, n = se === null ? e : oe === null ? t : (e + t) / 2, r = J.getAttribute("data-size"), i = r?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
1762
- r !== null && !i && console.warn(`[${f}] data-size="${r}" is not a percentage, such as 30%. Using the default.`);
1763
- let a = Math.min(Math.max(i ? Number(i[1]) / 100 : se === null ? .22 : .3, .05), .8), s = I.filter((n) => (n.kind === "up" || n.kind === "down") && Math.max(n.from, n.to) > e && Math.min(n.from, n.to) < t);
1764
- o.breakable ? W < 0 ? console.warn(`[${f}] A chart with values below zero cannot break its scale.`) : e < 0 || t <= e || t > K || e === 0 && t === K ? console.warn(`[${f}] A break from ${e} to ${t} does not fit a scale that runs from 0 to ${V}.`) : s.length ? console.warn(`[${f}] A break from ${e} to ${t} would cut a step that floats. Keep it below or above the steps.`) : Y = {
1765
- lo: e,
1766
- hi: t,
1767
- gap: n,
1768
- share: a
1769
- } : console.warn(`[${f}] This kind of chart cannot break its scale.`);
1937
+ }, ce = se("data-from") ?? se("data-at"), le = se("data-to"), J = null;
1938
+ if (K && (ce !== null || le !== null)) {
1939
+ let t = ce ?? 0, n = le ?? G, r = le === null ? t : ce === null ? n : (t + n) / 2, i = K.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
1940
+ i !== null && !a && console.warn(`[${e}] data-size="${i}" is not a percentage, such as 30%. Using the default.`);
1941
+ let o = Math.min(Math.max(a ? Number(a[1]) / 100 : le === null ? .22 : .3, .05), .8), c = B.filter((e) => (e.kind === "up" || e.kind === "down") && Math.max(e.from, e.to) > t && Math.min(e.from, e.to) < n);
1942
+ s.breakable ? W < 0 ? console.warn(`[${e}] A chart with values below zero cannot break its scale.`) : t < 0 || n <= t || n > G || t === 0 && n === G ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${H}.`) : c.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : J = {
1943
+ lo: t,
1944
+ hi: n,
1945
+ gap: r,
1946
+ share: o
1947
+ } : console.warn(`[${e}] This kind of chart cannot break its scale.`);
1770
1948
  }
1771
- let ce = Y ? Y.gap : null, le = (Y && en(t.figure, S, "--tablechart-break-gap", "")) ?? 13, ue = P - re, de = K - q || 1, fe = (e) => ue - (e - q) / de * ie;
1772
- if (Y) {
1773
- let { lo: e, hi: t, gap: n, share: r } = Y, i = ie * r, a = (ie - i - le) / (e + (K - t)), o = i / (t - e);
1774
- fe = (r) => r <= e ? ue - r * a : r <= n ? ue - e * a - (r - e) * o : r <= t ? ue - e * a - (r - e) * o - le : ue - e * a - i - le - (r - t) * a;
1949
+ let ue = J ? J.gap : null, de = (J && en(t.figure, E, "--tablechart-break-gap", "")) ?? 13, Y = L - re, fe = G - ae || 1, he = (e) => Y - (e - ae) / fe * ie;
1950
+ if (J) {
1951
+ let { lo: e, hi: t, gap: n, share: r } = J, i = ie * r, a = (ie - i - de) / (e + (G - t)), o = i / (t - e);
1952
+ he = (r) => r <= e ? Y - r * a : r <= n ? Y - e * a - (r - e) * o : r <= t ? Y - e * a - (r - e) * o - de : Y - e * a - i - de - (r - t) * a;
1775
1953
  }
1776
- let pe, me, he = [];
1777
- if (E) {
1778
- let e = 6 * S, [t, n] = E.titles, r = (e) => e ? N(e).width * S : 0, i = (e) => e ? N(e).height * S : 0, a = O.filter((e) => e.dataset.axis === "x"), o = O.filter((e) => e.dataset.axis === "y"), s = i(O[0]), c = r(n) + U([0, ...o.map(r)]) + 2 * e, l = s / 2;
1779
- me = [
1954
+ let ge, _e, ve = [];
1955
+ if (O) {
1956
+ let e = 6 * E, [t, n] = O.titles, r = (e) => e ? q(e).width * E : 0, i = (e) => e ? q(e).height * E : 0, a = P.filter((e) => e.dataset.axis === "x"), o = P.filter((e) => e.dataset.axis === "y"), s = i(P[0]), c = r(n) + R([0, ...o.map(r)]) + 2 * e, l = s / 2;
1957
+ _e = [
1780
1958
  c,
1781
1959
  l,
1782
- w - c - U([0, ...a.map(r)]) / 2,
1783
- P - l - i(t) - s - 2 * e
1960
+ C - c - R([0, ...a.map(r)]) / 2,
1961
+ L - l - i(t) - s - 2 * e
1784
1962
  ];
1785
- let [u, d, f, p] = me, [m, h] = D, g = (e) => u + (e - m.min) / (m.max - m.min || 1) * f, _ = (e) => d + p - (e - h.min) / (h.max - h.min || 1) * p;
1786
- pe = g, fe = _;
1963
+ let [u, d, f, p] = _e, [m, h] = j, g = (e) => u + (e - m.min) / (m.max - m.min || 1) * f, _ = (e) => d + p - (e - h.min) / (h.max - h.min || 1) * p;
1964
+ ge = g, he = _;
1787
1965
  let v = (e) => r(a.find((t) => Number(t.dataset.value) === e));
1788
- he = [it(m, (t) => t.every((n, r) => !r || g(n) - g(t[r - 1]) > (v(n) + v(t[r - 1])) / 2 + e)).ticks, it(h, (t) => t.every((n, r) => !r || _(t[r - 1]) - _(n) > s + e / 2)).ticks];
1789
- for (let t of O) {
1790
- let n = Number(t.dataset.value), r = t.dataset.axis === "x" ? 0 : 1, i = he[r].includes(n);
1791
- t.dataset.place = i ? r ? "before" : "below" : "none", i && A(t, r ? u - e : g(n), r ? _(n) : d + p + e, w, P);
1966
+ ve = [et(m, (t) => t.every((n, r) => !r || g(n) - g(t[r - 1]) > (v(n) + v(t[r - 1])) / 2 + e)).ticks, et(h, (t) => t.every((n, r) => !r || _(t[r - 1]) - _(n) > s + e / 2)).ticks];
1967
+ for (let t of P) {
1968
+ let n = Number(t.dataset.value), r = t.dataset.axis === "x" ? 0 : 1, i = ve[r].includes(n);
1969
+ t.dataset.place = i ? r ? "before" : "below" : "none", i && N(t, r ? u - e : g(n), r ? _(n) : d + p + e, C, L);
1792
1970
  }
1793
- t && A(t, u + f / 2, P - i(t), w, P), n && A(n, 0, d + p / 2, w, P);
1971
+ t && N(t, u + f / 2, L - i(t), C, L), n && N(n, 0, d + p / 2, C, L);
1794
1972
  }
1795
- let ge = u.length ? U(u.map((e) => N(e).width)) * S + 12 * S : 0, _e = t.categories[0]?.parentElement;
1796
- _e && (_e.style.paddingRight = ge ? `${ge / w * 100}%` : "");
1797
- let ve = (w - ge) / a.length, ye = (e) => (e + .5) * ve, Se = (e) => e >= 0 && e < a.length ? e : null;
1798
- t.rowAt = o.centre ? null : o.categories === "beside" ? (e, t) => Se(Math.floor(t * S / (P / a.length))) : (e) => Se(Math.floor(e * S / ve));
1799
- let Ce = ve / w * 100, we = 100 / a.length;
1800
- if (t.rowBox = o.categories === "beside" ? (e) => [
1973
+ let ye = d.length ? R(d.map((e) => q(e).width)) * E + 12 * E : 0, be = t.categories[0]?.parentElement;
1974
+ be && (be.style.paddingRight = ye ? `${ye / C * 100}%` : "");
1975
+ let Se = (C - ye) / a.length, Ce = (e) => (e + .5) * Se, we = (e) => e >= 0 && e < a.length ? e : null;
1976
+ t.rowAt = s.centre ? null : s.categories === "beside" ? (e, t) => we(Math.floor(t * E / (L / a.length))) : (e) => we(Math.floor(e * E / Se));
1977
+ let Te = Se / C * 100, Ee = 100 / a.length;
1978
+ if (t.rowBox = s.categories === "beside" ? (e) => [
1801
1979
  0,
1802
- e * we,
1980
+ e * Ee,
1803
1981
  100,
1804
- we
1982
+ Ee
1805
1983
  ] : (e) => [
1806
- e * Ce,
1984
+ e * Te,
1807
1985
  0,
1808
- Ce,
1986
+ Te,
1809
1987
  100
1810
- ], i.setAttribute("viewBox", `0 0 ${w} ${B(P)}`), i.textContent = "", me && pe) {
1811
- let [e, r, a, o] = me, [s, c] = he, l = pe;
1812
- Ht(t.figure, "data-chart-grid", n.grid) && i.appendChild(L("path", {
1813
- class: p,
1814
- d: [...s.map((e) => `M${B(l(e))},${B(r)}V${B(r + o)}`), ...c.map((t) => `M${B(e)},${B(fe(t))}H${B(e + a)}`)].join("")
1815
- })), i.appendChild(L("path", {
1816
- class: ne,
1988
+ ], i.setAttribute("viewBox", `0 0 ${C} ${k(L)}`), i.textContent = "", _e && ge) {
1989
+ let [e, r, a, o] = _e, [s, c] = ve, l = ge;
1990
+ Ht(t.figure, "data-chart-grid", n.grid) && i.appendChild(A("path", {
1991
+ class: S,
1992
+ d: [...s.map((e) => `M${k(l(e))},${k(r)}V${k(r + o)}`), ...c.map((t) => `M${k(e)},${k(he(t))}H${k(e + a)}`)].join("")
1993
+ })), i.appendChild(A("path", {
1994
+ class: b,
1817
1995
  d: [
1818
- `M${B(e)},${B(r)}V${B(r + o)}H${B(e + a)}`,
1819
- ...s.map((e) => `M${B(l(e))},${B(r + o)}v${B(4 * S)}`),
1820
- ...c.map((t) => `M${B(e)},${B(fe(t))}h${B(-4 * S)}`)
1996
+ `M${k(e)},${k(r)}V${k(r + o)}H${k(e + a)}`,
1997
+ ...s.map((e) => `M${k(l(e))},${k(r + o)}v${k(4 * E)}`),
1998
+ ...c.map((t) => `M${k(e)},${k(he(t))}h${k(-4 * E)}`)
1821
1999
  ].join("")
1822
2000
  }));
1823
2001
  }
1824
2002
  t.checks = [];
1825
- let Te = {
2003
+ let De = {
1826
2004
  rows: a,
1827
- segments: I,
1828
- cx: ye,
1829
- y: fe,
1830
- x: pe,
1831
- frame: me,
1832
- length: (e, n) => en(t.figure, S, e, n),
1833
- barWidth: Math.min(ve * n.barfill, tn(t.figure, S)),
1834
- barMax: tn(t.figure, S),
1835
- height: P,
1836
- unit: S,
1837
- labelHeight: j,
1838
- badgeHeight: M,
2005
+ segments: B,
2006
+ cx: Ce,
2007
+ y: he,
2008
+ x: ge,
2009
+ frame: _e,
2010
+ length: (e, n) => en(t.figure, E, e, n),
2011
+ barWidth: Math.min(Se * n.barfill, tn(t.figure, E)),
2012
+ barMax: tn(t.figure, E),
2013
+ height: L,
2014
+ unit: E,
2015
+ labelHeight: F,
2016
+ badgeHeight: I,
1839
2017
  after: a.length,
1840
2018
  note: 0,
1841
2019
  labels: t.figure.dataset.chartLabels === "inside" || t.figure.dataset.chartLabels !== "outside" && n.labels === "inside" ? "inside" : "outside",
1842
2020
  insideAlign: $t(t.figure),
1843
- breakAt: ce,
1844
- squeeze: Y,
1845
- breakGap: le,
1846
- domain: b ? [b.min, b.max] : null,
2021
+ breakAt: ue,
2022
+ squeeze: J,
2023
+ breakGap: de,
2024
+ domain: w ? [w.min, w.max] : null,
1847
2025
  stacked: t.stacked,
1848
2026
  shape: Wt(t.figure, n),
1849
2027
  totals: t.totals,
1850
2028
  svg: i,
1851
2029
  plot: r,
1852
- values: s,
1853
- series: c,
1854
- seriesValues: l,
1855
- names: u,
2030
+ values: c,
2031
+ series: l,
2032
+ seriesValues: u,
2033
+ names: d,
1856
2034
  categories: t.categories,
1857
2035
  centre: t.centre,
1858
2036
  config: n,
1859
2037
  checks: t.checks,
1860
2038
  taken: []
1861
2039
  };
1862
- if (r.style.setProperty("--count", String(Math.max(1, ...a.map((e) => e.slot + 1)))), o.draw(Te), Te.rowAt && (t.rowAt = Te.rowAt), v && b) {
1863
- let e = 6 * S, r = _ && Te.x ? Te.x : fe, a = Array.from(v.ticks.children), o = (e) => N(a.find((t) => Number(t.dataset.value) === e) ?? a[0]), s = it(b, (t) => t.every((n, i) => !i || (_ ? r(n) - r(t[i - 1]) > (o(n).width + o(t[i - 1]).width) / 2 * S + e : r(t[i - 1]) - r(n) > o(n).height * S + e / 2))).ticks.filter((e) => !Y || e <= Y.lo || e >= Y.hi);
2040
+ if (r.style.setProperty("--count", String(Math.max(1, ...a.map((e) => e.slot + 1)))), s.draw(De), De.rowAt && (t.rowAt = De.rowAt), v && w) {
2041
+ let e = 6 * E, r = _ && De.x ? De.x : he, a = Array.from(v.ticks.children), o = (e) => q(a.find((t) => Number(t.dataset.value) === e) ?? a[0]), s = et(w, (t) => t.every((n, i) => !i || (_ ? r(n) - r(t[i - 1]) > (o(n).width + o(t[i - 1]).width) / 2 * E + e : r(t[i - 1]) - r(n) > o(n).height * E + e / 2))).ticks.filter((e) => !J || e <= J.lo || e >= J.hi);
1864
2042
  for (let t of a) {
1865
2043
  let n = Number(t.dataset.value), i = v.numbers && s.includes(n);
1866
- t.dataset.place = i ? _ ? "below" : "before" : "none", i && A(t, _ ? r(n) : -e, _ ? P + e : r(n), w, P);
2044
+ t.dataset.place = i ? _ ? "below" : "before" : "none", i && N(t, _ ? r(n) : -e, _ ? L + e : r(n), C, L);
1867
2045
  }
1868
- let c = w - ge;
1869
- Ht(t.figure, "data-chart-grid", n.grid) && i.prepend(L("path", {
1870
- class: p,
1871
- d: s.map((e) => _ ? `M${B(r(e))},0V${B(P)}` : `M0,${B(r(e))}H${B(c)}`).join("")
1872
- })), v.numbers && i.appendChild(L("path", {
1873
- class: ne,
1874
- d: [_ ? `M${B(r(b.min))},${B(P)}H${B(r(b.max))}` : `M0,${B(r(b.max))}V${B(r(b.min))}`, ...s.map((e) => _ ? `M${B(r(e))},${B(P)}v${B(4 * S)}` : `M0,${B(r(e))}h${B(-4 * S)}`)].join("")
2046
+ let c = C - ye;
2047
+ Ht(t.figure, "data-chart-grid", n.grid) && i.prepend(A("path", {
2048
+ class: S,
2049
+ d: s.map((e) => _ ? `M${k(r(e))},0V${k(L)}` : `M0,${k(r(e))}H${k(c)}`).join("")
2050
+ })), v.numbers && i.appendChild(A("path", {
2051
+ class: b,
2052
+ d: [_ ? `M${k(r(w.min))},${k(L)}H${k(r(w.max))}` : `M0,${k(r(w.max))}V${k(r(w.min))}`, ...s.map((e) => _ ? `M${k(r(e))},${k(L)}v${k(4 * E)}` : `M0,${k(r(e))}h${k(-4 * E)}`)].join("")
1875
2053
  }));
1876
2054
  }
1877
- for (let [e, n] of d.entries()) {
2055
+ for (let [e, n] of p.entries()) {
1878
2056
  n.badge?.setAttribute("data-note", String(e + 1));
1879
- let r = n.series, i = (e) => ({
2057
+ let i = n.series, o = (e) => ({
1880
2058
  ...e,
1881
- ...e.cells[r] ?? e.cells[0]
2059
+ ...e.cells[i] ?? e.cells[0]
1882
2060
  });
1883
2061
  n.type.draw(n.spec, n.badge, {
1884
- ...Te,
2062
+ ...De,
1885
2063
  ...t.stacked && {
1886
- rows: F,
2064
+ rows: te,
1887
2065
  ...t.totals.length && { values: t.totals }
1888
2066
  },
1889
- ...r > 0 && !t.stacked && {
1890
- rows: a.map(i),
1891
- segments: I.map((e) => {
1892
- let t = i(e);
2067
+ ...i > 0 && !t.stacked && {
2068
+ rows: a.map(o),
2069
+ segments: B.map((e) => {
2070
+ let t = o(e);
1893
2071
  return e.kind === "bar" ? {
1894
2072
  ...t,
1895
2073
  to: t.value
1896
2074
  } : t;
1897
2075
  }),
1898
- values: l[r]
2076
+ values: u[i]
1899
2077
  },
1900
- after: n.after,
2078
+ after: t.plan ? n.after : Math.min(n.after, Number(r.style.getPropertyValue("--count")) || n.after),
1901
2079
  note: e + 1
1902
2080
  });
1903
2081
  }
1904
- ct(t);
1905
- let Ee = t.categories[0]?.parentElement;
1906
- Ee && o.categories !== "beside" && !o.centre && Oe(Ee, t.categories.filter((e) => e.offsetParent !== null), (e) => ({
2082
+ it(t);
2083
+ let Oe = t.categories[0]?.parentElement;
2084
+ Oe && s.categories !== "beside" && !s.centre && xe(Oe, t.categories.filter((e) => e.offsetParent !== null), (e) => ({
1907
2085
  size: e.scrollWidth,
1908
2086
  room: e.clientWidth
1909
2087
  }), "--_name-fit");
1910
- let De = d.flatMap(({ badge: t }) => {
1911
- if (!(t instanceof HTMLElement) || !t.offsetWidth) return [];
1912
- let n = t.offsetWidth * S, r = t.offsetHeight * S, i = Number.parseFloat(t.style.left) / 100 * w, a = Number.parseFloat(t.style.top) / 100 * P, o = getComputedStyle(t).borderTopLeftRadius, s = o.endsWith("%") ? Number.parseFloat(o) / 100 : null, c = (Number.parseFloat(o) || 0) * S;
1913
- return [L("rect", {
1914
- class: e,
2088
+ let ke = p.flatMap(({ badge: e }) => {
2089
+ if (!(e instanceof HTMLElement) || !e.offsetWidth) return [];
2090
+ let t = e.offsetWidth * E, n = e.offsetHeight * E, r = Number.parseFloat(e.style.left) / 100 * C, i = Number.parseFloat(e.style.top) / 100 * L, a = getComputedStyle(e).borderTopLeftRadius, o = a.endsWith("%") ? Number.parseFloat(a) / 100 : null, s = (Number.parseFloat(a) || 0) * E;
2091
+ return [A("rect", {
2092
+ class: f,
1915
2093
  "data-for": "badge",
1916
- "data-note": t.dataset.note ?? "",
1917
- x: i - n / 2,
1918
- y: a - r / 2,
1919
- width: n,
1920
- height: r,
1921
- rx: s === null ? c : n * s,
1922
- ry: s === null ? c : r * s,
1923
- style: ["--after", "--step"].map((e) => t.style.getPropertyValue(e) && `${e}:${t.style.getPropertyValue(e)}`).filter(Boolean).join("; ")
2094
+ "data-note": e.dataset.note ?? "",
2095
+ x: r - t / 2,
2096
+ y: i - n / 2,
2097
+ width: t,
2098
+ height: n,
2099
+ rx: o === null ? s : t * o,
2100
+ ry: o === null ? s : n * o,
2101
+ style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
1924
2102
  })];
1925
- }), ke = i.querySelector(`.${p}`);
1926
- if (ke) {
1927
- let n = r.getBoundingClientRect(), a = w / n.width, s = getComputedStyle(r), c = Number.parseFloat(s.lineHeight) / Number.parseFloat(s.fontSize) || 1.2, u = [
1928
- ...l.flat(),
2103
+ }), Ae = i.querySelector(`.${S}`), X = Array.from(i.querySelectorAll(`.${o}`));
2104
+ if (Ae || X.length) {
2105
+ let e = r.getBoundingClientRect(), n = C / e.width, a = getComputedStyle(r), o = Number.parseFloat(a.lineHeight) / Number.parseFloat(a.fontSize) || 1.2, c = [
2106
+ ...u.flat(),
1929
2107
  ...t.totals,
1930
- ...o.categories === "beside" ? t.categories : []
2108
+ ...s.categories === "beside" ? t.categories : []
1931
2109
  ].flatMap((t) => {
1932
2110
  if (t.dataset.place === "none" || t.hidden || t.hasAttribute("data-left-out")) return [];
1933
- let r = t.getBoundingClientRect(), i = r.height * a / c, o = Array.from(t.style).filter((e) => e.startsWith("--")).map((e) => `${e}:${t.style.getPropertyValue(e)}`);
1934
- return r.width ? [L("rect", {
1935
- class: e,
2111
+ let r = t.getBoundingClientRect(), i = r.height * n / o, a = Array.from(t.style).filter((e) => e.startsWith("--")).map((e) => `${e}:${t.style.getPropertyValue(e)}`);
2112
+ return r.width ? [A("rect", {
2113
+ class: f,
1936
2114
  "data-for": "text",
1937
- x: (r.left - n.left) * a - 3 * S,
1938
- y: (r.top - n.top) * a + (r.height * a - i) / 2 - S,
1939
- width: r.width * a + 6 * S,
1940
- height: i + 2 * S,
1941
- style: o.join("; ")
2115
+ x: (r.left - e.left) * n - 3 * E,
2116
+ y: (r.top - e.top) * n + (r.height * n - i) / 2 - E,
2117
+ width: r.width * n + 6 * E,
2118
+ height: i + 2 * E,
2119
+ style: a.join("; ")
1942
2120
  })] : [];
1943
- });
1944
- te(i, u, w, P, ke);
2121
+ }), l = (e) => [
2122
+ "x",
2123
+ "y",
2124
+ "width",
2125
+ "height"
2126
+ ].map((t) => Number(e.getAttribute(t)));
2127
+ for (let e of X) zt(e, [...c, ...ke].map(l));
2128
+ if (Ae && t.plan) ee(i, c, C, L, [Ae]);
2129
+ else if (Ae) {
2130
+ let e = Bt(Ae);
2131
+ Ae.setAttribute("d", e.map(([e, t, n, r]) => Rt(e, t, n, r, c.map(l))).join(""));
2132
+ for (let t of c) {
2133
+ let n = Vt(e, l(t));
2134
+ n && Ae.after(A("path", {
2135
+ class: S,
2136
+ "data-gap": "",
2137
+ d: n,
2138
+ style: t.getAttribute("style") ?? ""
2139
+ }));
2140
+ }
2141
+ }
1945
2142
  }
1946
- te(i, De, w, P);
1947
- let Ae = (e) => e.dataset.missing !== void 0 || o.centre && a[Number(e.dataset.row) - 1]?.isTotal, je = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), Me = (e, t) => {
2143
+ ee(i, ke, C, L, void 0, `.${o}`), t.figure.hasAttribute("data-animate") && !t.figure.hasAttribute("data-steps") && !t.figure.classList.contains("is-shown") && ln(i);
2144
+ let je = (e) => e.dataset.missing !== void 0 || s.centre && a[Number(e.dataset.row) - 1]?.isTotal, Me = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), Ne = (e, t) => {
1948
2145
  let n = Number(e.dataset.row);
1949
- return t.some((e) => je(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
2146
+ return t.some((e) => Me(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
1950
2147
  };
1951
- return t.figure.toggleAttribute("data-left-out", (o.columns ? [t.categories] : [...l, t.totals]).some((e) => e.some((t) => !Ae(t) && !je(t) && !Me(t, e)))), !0;
2148
+ return t.figure.toggleAttribute("data-left-out", (s.columns ? [t.categories] : [...u, t.totals]).some((e) => e.some((t) => !je(t) && !Me(t) && !Ne(t, e)))), !0;
1952
2149
  }, rn = (e, t) => {
1953
2150
  let n = [
1954
2151
  ...e.seriesValues.flat(),
@@ -1957,34 +2154,40 @@ var ze = (e) => e.map((e) => ({
1957
2154
  ];
1958
2155
  for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ? an(r, r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale) : r.textContent = r.dataset.missing;
1959
2156
  }, an = (e, t, n) => {
1960
- let { prefix: r = "", suffix: i = "" } = e.dataset, [o, s] = I(Number.parseFloat(e.dataset.value || "0"), t, n);
1961
- if (e.textContent = r + (r ? o : "") + s + i, o && !r) {
2157
+ let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] = B(Number.parseFloat(e.dataset.value || "0"), t, n);
2158
+ if (e.textContent = r + (r ? a : "") + o + i, a && !r) {
1962
2159
  let t = document.createElement("span");
1963
- t.className = a, t.textContent = o, e.prepend(t);
2160
+ t.className = "tablechart-minus", t.textContent = a, e.prepend(t);
1964
2161
  }
1965
2162
  }, on = (e) => {
1966
- Ft(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${d}`)?.remove(), e.controls?.remove();
2163
+ jt(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${u}`)?.remove(), e.controls?.remove();
1967
2164
  }, sn = (e, t) => {
1968
- e.figure.classList.toggle(l, t);
1969
- }, cn = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), ln = /^\s*(?:Table)?:\s+/, un = (e) => e?.tagName === "P" && ln.test(e.textContent ?? ""), dn = (e) => {
2165
+ !t && !e.figure.hasAttribute("data-steps") && ln(e.svg), e.figure.classList.toggle(_, t), t && requestAnimationFrame(() => requestAnimationFrame(() => cn(e.figure, e.svg)));
2166
+ }, cn = (e, t) => {
2167
+ e.classList.contains("is-shown") && !t.getAnimations({ subtree: !0 }).length && un(t);
2168
+ }, ln = (e) => {
2169
+ for (let t of e.querySelectorAll("[mask^=\"url(#tablechart-cut-\"]")) t.dataset.mask = t.getAttribute("mask") ?? "", t.removeAttribute("mask");
2170
+ }, un = (e) => {
2171
+ for (let t of e.querySelectorAll("[data-mask]")) t.setAttribute("mask", t.dataset.mask ?? ""), t.removeAttribute("data-mask");
2172
+ }, dn = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), fn = /^\s*(?:Table)?:\s+/, pn = (e) => e?.tagName === "P" && fn.test(e.textContent ?? ""), mn = (e) => {
1970
2173
  let t = document.createElement("figcaption");
1971
2174
  for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
1972
2175
  let n = e.firstChild;
1973
- n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(ln, ""), n.textContent || n.remove());
2176
+ n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(fn, ""), n.textContent || n.remove());
1974
2177
  let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
1975
2178
  if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
1976
2179
  let e = document.createElement("span");
1977
2180
  e.append(...r.slice(i + 1)), t.append(e);
1978
2181
  }
1979
2182
  return e.remove(), t;
1980
- }, fn = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, pn = (e) => {
1981
- let t = xn(e);
2183
+ }, hn = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, gn = (e) => {
2184
+ let t = wn(e);
1982
2185
  return t?.tagName === "P" ? t : e;
1983
- }, mn = (e) => {
1984
- let t = pn(e).firstChild;
2186
+ }, _n = (e) => {
2187
+ let t = gn(e).firstChild;
1985
2188
  if (t?.nodeType !== Node.TEXT_NODE) return null;
1986
- let n = fn.exec(t.textContent ?? "");
1987
- if (!n || !zt.includes(n[1]) || !n[3] && t.nextSibling) return null;
2189
+ let n = hn.exec(t.textContent ?? "");
2190
+ if (!n || !Ft.includes(n[1]) || !n[3] && t.nextSibling) return null;
1988
2191
  let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
1989
2192
  return {
1990
2193
  name: n[1],
@@ -1992,11 +2195,11 @@ var ze = (e) => e.map((e) => ({
1992
2195
  text: t,
1993
2196
  length: n[0].length
1994
2197
  };
1995
- }, hn = (e) => {
2198
+ }, vn = (e) => {
1996
2199
  if (e?.tagName !== "UL" && e?.tagName !== "OL") return null;
1997
- let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : mn(e));
2200
+ let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : _n(e));
1998
2201
  return !t.length || t.some((e, t) => !n[t] && !e.hasAttribute("data-annotation")) ? null : (t.forEach((e, t) => {
1999
- let r = n[t], i = pn(e);
2202
+ let r = n[t], i = gn(e);
2000
2203
  if (i !== e && i.replaceWith(...i.childNodes), r) {
2001
2204
  e.setAttribute("data-annotation", r.name);
2002
2205
  for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
@@ -2004,21 +2207,21 @@ var ze = (e) => e.map((e) => ({
2004
2207
  }
2005
2208
  e.children.length && Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.textContent?.trim()).forEach((e, t) => {
2006
2209
  let n = document.createElement("span");
2007
- t === 0 && e instanceof HTMLElement && e.matches("em, i") ? (n.className = re, n.append(...e.childNodes), e.replaceWith(n)) : e.nodeType === Node.TEXT_NODE && (n.textContent = (e.textContent ?? "").trim(), e.replaceWith(n));
2210
+ t === 0 && e instanceof HTMLElement && e.matches("em, i") ? (n.className = "tablechart-caption", n.append(...e.childNodes), e.replaceWith(n)) : e.nodeType === Node.TEXT_NODE && (n.textContent = (e.textContent ?? "").trim(), e.replaceWith(n));
2008
2211
  });
2009
2212
  }), e.classList.add("chart-annotations"), e);
2010
- }, gn = (e, t) => {
2011
- for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || cn(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
2012
- }, _n = (e) => e.map((e) => {
2013
- let t = e.closest("p"), n = un(t) ? t : e;
2213
+ }, yn = (e, t) => {
2214
+ for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || dn(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
2215
+ }, bn = (e) => e.map((e) => {
2216
+ let t = e.closest("p"), n = pn(t) ? t : e;
2014
2217
  if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
2015
2218
  let r = document.createElement("figure");
2016
- gn(e, r), e.classList.length || e.removeAttribute("class");
2017
- let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? un(a) ? a : un(o) ? o : null : n;
2219
+ yn(e, r), e.classList.length || e.removeAttribute("class");
2220
+ let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? pn(a) ? a : pn(o) ? o : null : n;
2018
2221
  i && s === o && (o = o?.nextElementSibling ?? null);
2019
- let c = o?.classList.contains("chart-annotations") ? o : hn(o);
2020
- return n.replaceWith(r), s && r.append(dn(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;
2021
- }), vn = (e, t, n, r = document.createElement("table")) => {
2222
+ let c = o?.classList.contains("chart-annotations") ? o : vn(o);
2223
+ return n.replaceWith(r), s && r.append(mn(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;
2224
+ }), xn = (e, t, n, r = document.createElement("table")) => {
2022
2225
  for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
2023
2226
  if (!r.tHead && (t.length || n)) {
2024
2227
  let e = r.createTHead().insertRow(), i = document.createElement("th");
@@ -2038,7 +2241,7 @@ var ze = (e) => e.map((e) => ({
2038
2241
  for (let n of t.values ?? [t.value ?? null]) e.insertCell().textContent = n === null ? "" : String(n);
2039
2242
  }
2040
2243
  return r;
2041
- }, yn = (e) => {
2244
+ }, Sn = (e) => {
2042
2245
  if (!e || typeof e != "object") return;
2043
2246
  let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
2044
2247
  if (t.length && t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n))) return t.map(([e, t]) => Array.isArray(t) ? {
@@ -2048,30 +2251,30 @@ var ze = (e) => e.map((e) => ({
2048
2251
  label: e,
2049
2252
  value: t
2050
2253
  });
2051
- }, bn = async (e) => {
2052
- await Promise.all(e.filter((e) => e.hasAttribute("data-chart-src")).map(async (e) => {
2053
- let t = e.getAttribute("data-chart-src"), n = Array.from(e.querySelectorAll("table")).find((e) => e.tHead) ?? null;
2054
- for (let t of e.querySelectorAll("table")) t !== n && t.remove();
2254
+ }, Cn = async (t) => {
2255
+ await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
2256
+ let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
2257
+ for (let e of t.querySelectorAll("table")) e !== r && e.remove();
2055
2258
  try {
2056
- let r = await fetch(t);
2057
- if (!r.ok) throw Error(`${r.status} ${r.statusText}`);
2058
- let i = await r.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : yn(i.rows) : yn(i);
2259
+ let e = await fetch(n);
2260
+ if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
2261
+ let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : Sn(i.rows) : Sn(i);
2059
2262
  if (!Array.isArray(a)) throw Error("no rows in it: a list of rows, an object with rows, or names with their values");
2060
- let o = vn(a, Array.isArray(i?.series) ? i.series.map(String) : [], typeof i?.label == "string" ? i.label : "", n ?? void 0);
2061
- if (!n) {
2062
- let t = e.querySelector(":scope > figcaption");
2063
- t ? t.after(o) : e.prepend(o);
2263
+ let o = xn(a, Array.isArray(i?.series) ? i.series.map(String) : [], typeof i?.label == "string" ? i.label : "", r ?? void 0);
2264
+ if (!r) {
2265
+ let e = t.querySelector(":scope > figcaption");
2266
+ e ? e.after(o) : t.prepend(o);
2064
2267
  }
2065
- o.tHead || Z?.log?.(`The table from "${t}" has no header row, so a screen reader cannot name its columns.`), Z?.log?.(`Read ${a.length} rows from "${t}"`);
2066
- } catch (e) {
2067
- let n = window.location.protocol === "file:";
2068
- console.warn(`[${f}] Could not read the chart data in "${t}": ${e.message}.` + (n ? " A page opened as a file cannot fetch files; open it from a server." : ""));
2268
+ o.tHead || Z?.log?.(`The table from "${n}" has no header row, so a screen reader cannot name its columns.`), Z?.log?.(`Read ${a.length} rows from "${n}"`);
2269
+ } catch (t) {
2270
+ let r = window.location.protocol === "file:";
2271
+ console.warn(`[${e}] Could not read the chart data in "${n}": ${t.message}.` + (r ? " A page opened as a file cannot fetch files; open it from a server." : ""));
2069
2272
  }
2070
2273
  }));
2071
- }, xn = (e) => {
2274
+ }, wn = (e) => {
2072
2275
  let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
2073
2276
  return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
2074
- }, Sn = "strong, b, span.total", Cn = (e) => {
2277
+ }, Tn = "strong, b, span.total", En = (e) => {
2075
2278
  for (let t of e) {
2076
2279
  for (let e of t.querySelectorAll("tbody tr")) {
2077
2280
  let t = e.cells[0];
@@ -2079,16 +2282,16 @@ var ze = (e) => e.map((e) => ({
2079
2282
  let n = document.createElement("th");
2080
2283
  for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
2081
2284
  n.append(...t.childNodes), t.replaceWith(n);
2082
- for (let t = xn(n); t?.matches(Sn); t = xn(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
2285
+ for (let t = wn(n); t?.matches(Tn); t = wn(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
2083
2286
  }
2084
2287
  let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
2085
- for (let t of e.slice(1)) for (let e = xn(t); e?.matches(Sn); e = xn(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
2288
+ for (let t of e.slice(1)) for (let e = wn(t); e?.matches(Tn); e = wn(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
2086
2289
  }
2087
- }, wn = "data-chart-made", Tn = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, En = (e) => new Promise((t) => setTimeout(t, e)), Dn = (e, t) => {
2290
+ }, Dn = "data-chart-made", On = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, kn = (e) => new Promise((t) => setTimeout(t, e)), An = (e, t) => {
2088
2291
  let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
2089
2292
  return Math.min(Math.max(r, 0), 1);
2090
- }, On = async (e, t) => {
2091
- if (Tn()) return;
2293
+ }, jn = async (e, t) => {
2294
+ if (On()) return;
2092
2295
  await new Promise(requestAnimationFrame);
2093
2296
  let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
2094
2297
  for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
@@ -2099,11 +2302,11 @@ var ze = (e) => e.map((e) => ({
2099
2302
  let a = Number(n.delay ?? 0) + i * t;
2100
2303
  r = Math.max(r, a - Number(e.currentTime ?? 0));
2101
2304
  }
2102
- r > 0 && await En(r);
2103
- }, kn = (e) => {
2305
+ r > 0 && await kn(r);
2306
+ }, Mn = (e) => {
2104
2307
  for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
2105
2308
  return null;
2106
- }, An = (e) => new Promise((t) => {
2309
+ }, Nn = (e) => new Promise((t) => {
2107
2310
  let n = ["animationstart", "transitionrun"], r = () => {
2108
2311
  for (let e of n) document.removeEventListener(e, i, !0);
2109
2312
  a.disconnect(), t();
@@ -2117,37 +2320,37 @@ var ze = (e) => e.map((e) => ({
2117
2320
  attributes: !0,
2118
2321
  attributeFilter: ["class", "style"]
2119
2322
  });
2120
- }), jn = /* @__PURE__ */ new Set(), Mn = null, Nn = (e) => {
2121
- jn.add(e), !Mn && (Mn = new MutationObserver(() => {
2122
- for (let e of jn) e.relabel();
2323
+ }), Pn = /* @__PURE__ */ new Set(), Fn = null, In = (e) => {
2324
+ Pn.add(e), !Fn && (Fn = new MutationObserver(() => {
2325
+ for (let e of Pn) e.relabel();
2123
2326
  requestAnimationFrame(() => requestAnimationFrame(() => {
2124
- for (let e of jn) e.refresh();
2327
+ for (let e of Pn) e.refresh();
2125
2328
  }));
2126
- }), Mn.observe(document.documentElement, {
2329
+ }), Fn.observe(document.documentElement, {
2127
2330
  attributes: !0,
2128
2331
  attributeFilter: ["lang"]
2129
2332
  }));
2130
- }, Pn = (e) => {
2131
- jn.delete(e), !jn.size && Mn && (Mn.disconnect(), Mn = null);
2132
- }, Fn = ["column", "bar"], In = (e) => {
2333
+ }, Ln = (e) => {
2334
+ Pn.delete(e), !Pn.size && Fn && (Fn.disconnect(), Fn = null);
2335
+ }, Rn = ["column", "bar"], zn = (e) => {
2133
2336
  let t = e.getAttribute("data-chart") || "column";
2134
- if (!Fn.includes(t)) return null;
2337
+ if (!Rn.includes(t)) return null;
2135
2338
  let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
2136
- return Fn.includes(n) ? n : t;
2137
- }, Ln = (e, t) => {
2138
- let n = e, r = In(n.figure), i = null, a = !1, o = !1, s = async () => {
2339
+ return Rn.includes(n) ? n : t;
2340
+ }, Bn = (e, t) => {
2341
+ let n = e, r = zn(n.figure), i = null, a = !1, o = !1, s = async () => {
2139
2342
  if (!Ut(n.figure, t)) return sn(n, !0);
2140
2343
  let e = n.figure.classList.contains("is-shown");
2141
2344
  if (a && i !== null && !e && !o) {
2142
2345
  o = !0;
2143
- let e = Tn() ? null : kn(n.figure);
2144
- e && await An(e), await On(n.figure, Dn(n.figure, t)), o = !1, (a || !t.replay) && sn(n, !0);
2346
+ let e = On() ? null : Mn(n.figure);
2347
+ e && await Nn(e), await jn(n.figure, An(n.figure, t)), o = !1, (a || !t.replay) && sn(n, !0);
2145
2348
  } else !a && t.replay && e && sn(n, !1);
2146
2349
  }, c = () => {
2147
- let e = In(n.figure);
2350
+ let e = zn(n.figure);
2148
2351
  if (!e || e === r) return;
2149
2352
  let a = Z.timed("Building", n.figure, () => Yt(n.figure, t, e));
2150
- a && (on(n), lt(a, n.step, !0), n = a, r = e, i = null);
2353
+ a && (on(n), at(a, n.step, !0), n = a, r = e, i = null);
2151
2354
  }, l = () => {
2152
2355
  c();
2153
2356
  let e = n.plot.clientWidth;
@@ -2159,20 +2362,20 @@ var ze = (e) => e.map((e) => ({
2159
2362
  }), f = new IntersectionObserver((e) => {
2160
2363
  for (let t of e) a = t.isIntersecting, s();
2161
2364
  }, { threshold: t.threshold }), p = () => {
2162
- n.figure.classList.add(b), sn(n, !0), n.figure.offsetWidth;
2163
- }, m = () => n.figure.classList.remove(b), h = () => {
2365
+ n.figure.classList.add(v), sn(n, !0), un(n.svg), n.figure.offsetWidth;
2366
+ }, m = () => n.figure.classList.remove(v), h = () => {
2164
2367
  i = null, l();
2165
2368
  }, g = {
2166
2369
  relabel: () => rn(n, t),
2167
2370
  refresh: h
2168
2371
  };
2169
- c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), window.addEventListener("afterprint", m), Nn(g);
2372
+ c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), window.addEventListener("afterprint", m), In(g);
2170
2373
  let _ = {
2171
2374
  figure: n.figure,
2172
2375
  refresh: h,
2173
- next: () => lt(n, n.step + 1),
2174
- previous: () => lt(n, n.step - 1),
2175
- stepTo: (e) => lt(n, e),
2376
+ next: () => at(n, n.step + 1),
2377
+ previous: () => at(n, n.step - 1),
2378
+ stepTo: (e) => at(n, e),
2176
2379
  get step() {
2177
2380
  return n.step;
2178
2381
  },
@@ -2180,35 +2383,35 @@ var ze = (e) => e.map((e) => ({
2180
2383
  return n.plan?.count ?? 0;
2181
2384
  },
2182
2385
  destroy() {
2183
- d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), window.removeEventListener("afterprint", m), Pn(g), Ft(n), n.figure.tablechart === _ && delete n.figure.tablechart;
2386
+ d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), window.removeEventListener("afterprint", m), Ln(g), jt(n), n.figure.tablechart === _ && delete n.figure.tablechart;
2184
2387
  }
2185
2388
  };
2186
2389
  return n.figure.tablechart = _, _;
2187
- }, Rn = !1, zn = (e) => {
2188
- let t = e.find((e) => e.tagName !== "FIGURE");
2189
- !Rn && t && (Rn = !0, console.warn(`[${f}] A chart is a <${t.tagName.toLowerCase()}>. Use a <figure> with a <figcaption>, so the chart has a title, also for screen readers.`, t));
2190
- }, Bn = async (e, t) => {
2191
- let n = _n(e.filter((e) => !e.hasAttribute(wn)));
2192
- return zn(n), await bn(n), Cn(n), Ze(n, t.langattribute), n;
2193
- }, Vn = (e, t) => {
2390
+ }, Vn = !1, Hn = (t) => {
2391
+ let n = t.find((e) => e.tagName !== "FIGURE");
2392
+ !Vn && n && (Vn = !0, console.warn(`[${e}] A chart is a <${n.tagName.toLowerCase()}>. Use a <figure> with a <figcaption>, so the chart has a title, also for screen readers.`, n));
2393
+ }, Un = async (e, t) => {
2394
+ let n = bn(e.filter((e) => !e.hasAttribute(Dn)));
2395
+ return Hn(n), await Cn(n), En(n), qe(n, t.langattribute), n;
2396
+ }, Wn = (e, t) => {
2194
2397
  let n = Z.timed("Building", e, () => Yt(e, t));
2195
- return n ? (e.setAttribute(wn, ""), Ln(n, t)) : null;
2196
- }, Hn = async (e, t = {}) => {
2398
+ return n ? (e.setAttribute(Dn, ""), Bn(n, t)) : null;
2399
+ }, Gn = async (e, t = {}) => {
2197
2400
  if (e.tablechart) return e.tablechart;
2198
2401
  let n = {
2199
- ...h,
2402
+ ...w,
2200
2403
  ...t
2201
2404
  };
2202
2405
  n.debug && (Z.enabled = !0);
2203
- let [r] = await Bn([e], n);
2204
- return r ? Vn(r, n) : null;
2205
- }, Un = async (e = {}, t = document) => {
2406
+ let [r] = await Un([e], n);
2407
+ return r ? Wn(r, n) : null;
2408
+ }, Kn = async (e = {}, t = document) => {
2206
2409
  let n = {
2207
- ...h,
2410
+ ...w,
2208
2411
  ...e
2209
2412
  };
2210
2413
  n.debug && (Z.enabled = !0);
2211
- let r = (await Bn(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => Vn(e, n)).filter((e) => e !== null);
2414
+ let r = (await Un(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => Wn(e, n)).filter((e) => e !== null);
2212
2415
  return Z.log(`Made ${r.length} chart(s).`), {
2213
2416
  charts: r,
2214
2417
  refresh: () => {
@@ -2220,4 +2423,4 @@ var ze = (e) => e.map((e) => ({
2220
2423
  };
2221
2424
  };
2222
2425
  //#endregion
2223
- export { _n as a, Lt as c, rn as d, sn as f, Ze as h, Bn as i, Yt as l, lt as m, Dn as n, bn as o, on as p, Un as r, Cn as s, Hn as t, nn as u };
2426
+ export { _ as A, u as C, d as D, t as E, w as M, v as O, k as S, h as T, q as _, bn as a, M as b, Nt as c, rn as d, sn as f, Ae as g, qe as h, Un as i, C as j, y as k, Yt as l, at as m, An as n, Cn as o, on as p, Kn as r, En as s, Gn as t, nn as u, ae as v, l as w, N as x, R as y };