@martinomagnifico/tablechart 1.0.4 → 1.0.6

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