@martinomagnifico/tablechart 1.0.7 → 1.1.1

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