@martinomagnifico/tablechart 1.0.4 → 1.0.5

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,170 @@ 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 = () => {
1219
+ clearTimeout(Xe), Xe = window.setTimeout($, 120);
1220
+ }, Qe = () => {
1221
+ let e = document.createElement("div");
1222
+ 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" && Ze()), document.addEventListener("keydown", (e) => e.key === "Escape" && $()), document.addEventListener("pointerdown", (t) => {
1223
+ let n = t.target;
1224
+ Q && !Q.plot.contains(n) && !e.contains(n) && $();
1225
+ }), window.addEventListener("scroll", $, {
1226
+ capture: !0,
1227
+ passive: !0
1228
+ }), window.addEventListener("resize", $), e;
1229
+ }, $e = (e, t) => {
1230
+ let n = t ? t.style.getPropertyValue("--step") : "x";
1231
+ return n === "" || Number(n) < e.step;
1232
+ }, et = (e, t) => {
1233
+ let n = e.svg.querySelector(`[data-series="${t + 1}"]:not(.tablechart-hole)`);
1234
+ if (!n) return;
1235
+ let r = getComputedStyle(n);
1236
+ return r.fill && r.fill !== "none" ? r.fill : r.stroke;
1237
+ }, tt = (e, t, n) => {
1238
+ let r = e.series.length > 1, i = [];
1239
+ for (let [n, a] of e.seriesValues.entries()) {
1240
+ if (!$e(e, a[t])) continue;
1241
+ let o = r ? e.figure.querySelector(`.tablechart-name[data-series="${n + 1}"]`) : null;
1242
+ i.push({
1243
+ name: r ? o?.textContent ?? e.series[n].name : "",
1244
+ value: a[t].textContent ?? "",
1245
+ colour: r ? et(e, n) : void 0,
1246
+ sample: o ? {
1247
+ marker: o.dataset.marker ?? null,
1248
+ open: o.hasAttribute("data-open"),
1249
+ line: o.dataset.line ?? null,
1250
+ box: o.dataset.swatch === "box"
1251
+ } : void 0
1252
+ });
1253
+ }
1254
+ let a = e.totals[t];
1255
+ return i.length > 1 && $e(e, a) && i.push({
1256
+ name: n.totallabel,
1257
+ value: a.textContent ?? ""
1258
+ }), i;
1259
+ }, nt = (e, t) => {
1260
+ if (e.type.centre && e.values[t]) return e.values[t].getBoundingClientRect();
1261
+ let n = e.svg.querySelectorAll(`[data-row="${t + 1}"]:not(.tablechart-connector, .tablechart-leader)`), r = null;
1262
+ for (let e of n) {
1263
+ let t = e.getBoundingClientRect();
1264
+ (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);
1265
+ }
1266
+ if (r) return r;
1267
+ let i = e.plot.getBoundingClientRect(), [a, o, s, c] = e.rowBox?.(t) ?? [
1268
+ 0,
1269
+ 0,
1270
+ 100,
1271
+ 100
1272
+ ];
1273
+ return new DOMRect(i.left + i.width * a / 100, i.top + i.height * o / 100, i.width * s / 100, i.height * c / 100);
1274
+ }, rt = (e, t, n) => {
1275
+ if (clearTimeout(Xe), Q === e && Ye === t) return;
1276
+ let r = (e.type.tooltip ?? tt)(e, t, n);
1277
+ if (!r.length) return $();
1278
+ Q && Q !== e && $(), Z ?? (Z = Qe());
1279
+ let i = (e, t, n, r = !1, i) => {
1280
+ let a = document.createElement("div");
1281
+ if (a.className = `${Ge}-line`, n) {
1282
+ let e = document.createElement("span");
1283
+ 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);
1284
+ }
1285
+ let o = document.createElement("span");
1286
+ if (o.className = `${Ge}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
1287
+ e && o.append(":");
1288
+ let n = document.createElement("span");
1289
+ n.className = `${Ge}-value`, n.textContent = t, a.append(n);
1290
+ }
1291
+ return a;
1292
+ }, a = e.categories[t]?.textContent ?? e.rows[t].label, o = r.length === 1 && !r[0].name;
1293
+ 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)));
1294
+ let s = getComputedStyle(e.figure);
1295
+ for (let e of Ke) {
1296
+ let t = s.getPropertyValue(e).trim();
1297
+ t ? Z.style.setProperty(e, t) : Z.style.removeProperty(e);
1298
+ }
1299
+ 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, nt(e, t));
1300
+ }, it = (e, t, n = !1) => {
1301
+ let { plot: r } = e;
1302
+ r.setAttribute("data-hover", "");
1303
+ let i = (t) => {
1304
+ if (e.rowAt) {
1305
+ let n = r.getBoundingClientRect(), i = n.width / r.offsetWidth || 1;
1306
+ return e.rowAt((t.clientX - n.left) / i, (t.clientY - n.top) / i);
1307
+ }
1308
+ let n = t.target.closest?.("[data-row]")?.getAttribute("data-row");
1309
+ return n ? Number(n) - 1 : null;
1310
+ }, a = /* @__PURE__ */ new Set(), o = (e) => {
1311
+ for (let t of a) if (!t.isConnected) a.delete(t);
1312
+ else if (t.getAttribute("data-row") === String(e + 1)) return !0;
1313
+ return !1;
1314
+ }, s = null, c = (a) => {
1315
+ if (!r.classList.contains("is-placed") || !e.figure.classList.contains("is-shown")) return;
1316
+ if (n && !e.figure.hasAttribute("data-left-out")) return Q === e ? $() : void 0;
1317
+ let c = i(a);
1318
+ if (s = c, c === null || o(c)) return Q === e ? Ze() : void 0;
1319
+ rt(e, c, t);
1320
+ }, l = (t) => {
1321
+ let n = t.target;
1322
+ return e.svg.contains(n) && n.hasAttribute("data-row") ? n : null;
1323
+ };
1324
+ e.svg.addEventListener("transitionrun", (e) => {
1325
+ let t = l(e);
1326
+ t && a.add(t);
1327
+ });
1328
+ let u = (n) => {
1329
+ let r = l(n);
1330
+ if (!r) return;
1331
+ a.delete(r);
1332
+ let i = Number(r.getAttribute("data-row")) - 1;
1333
+ s === i && !o(i) && rt(e, i, t);
1334
+ };
1335
+ e.svg.addEventListener("transitionend", u), e.svg.addEventListener("transitioncancel", u), r.addEventListener("pointermove", c), r.addEventListener("pointerdown", c), r.addEventListener("pointerleave", (t) => {
1336
+ t.pointerType === "mouse" && (s = null, Q === e && Ze());
1337
+ });
1338
+ }, at = (e) => {
1339
+ Q === e && $();
1340
+ }, ot = {
1341
+ area: Oe,
1342
+ bar: pe,
1343
+ column: me,
1344
+ donut: _e,
1345
+ line: De,
1346
+ waterfall: je
1347
+ }, st = {
1348
+ "axis-break": M,
1349
+ trend: te,
1350
+ bracket: H
1351
+ }, ct = Object.keys(st), lt = (e) => {
1214
1352
  let t = "";
1215
1353
  for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
1216
1354
  return t.trim();
1217
- }, We = [
1355
+ }, ut = [
1218
1356
  "straight",
1219
1357
  "step",
1220
1358
  "smooth"
1221
- ], Ge = (e, t) => {
1359
+ ], dt = (e, t) => {
1222
1360
  let n = e.dataset.chartShape;
1223
- return n && We.includes(n) ? n : We.includes(t.shape) ? t.shape : "straight";
1224
- }, Ke = (e) => {
1361
+ return n && ut.includes(n) ? n : ut.includes(t.shape) ? t.shape : "straight";
1362
+ }, ft = (e) => {
1225
1363
  for (let t of e.querySelectorAll("br")) {
1226
- if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(Ue(t))) continue;
1364
+ if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(lt(t))) continue;
1227
1365
  let e = document.createElement("span");
1228
1366
  e.className = p, e.textContent = ". ", t.before(e);
1229
1367
  }
1230
- }, qe = (e, t, n) => {
1368
+ }, pt = (e, t, n) => {
1231
1369
  let r = e.querySelector("table");
1232
1370
  if (!r) return null;
1233
1371
  let i = r.querySelector("tfoot [data-chart-total]");
@@ -1238,23 +1376,23 @@ var Se = (e) => e.map((e) => ({
1238
1376
  s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
1239
1377
  let c = a.insertCell();
1240
1378
  return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
1241
- }, Je = 0, Ye = (e) => {
1379
+ }, mt = 0, ht = (e) => {
1242
1380
  let t = e.querySelector(":scope > figcaption");
1243
1381
  if (!t) return;
1244
- Ke(t);
1382
+ ft(t);
1245
1383
  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);
1384
+ t.id || (t.id = `tablechart-caption-${++mt}`), e.setAttribute("aria-labelledby", t.id);
1247
1385
  };
1248
1386
  e.tagName === "FIGURE" && !n(e) && r(e);
1249
1387
  let i = e.querySelector("table");
1250
1388
  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);
1389
+ }, gt = (r, i, a = null) => {
1390
+ let o = a ?? (r.getAttribute("data-chart") || "column"), s = ot[o];
1391
+ if (!s) return console.warn(`[${e}] Unknown chart type "${o}". Known types: ${Object.keys(ot).join(", ")}.`), r.setAttribute("data-chart-empty", ""), null;
1392
+ let l = Ne(r, i.langattribute);
1255
1393
  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);
1394
+ ht(r);
1395
+ let d = Ie(r, l, i.langattribute);
1258
1396
  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
1397
  let f = d.length > 1;
1260
1398
  f && r.style.setProperty("--_series-count", String(d.length));
@@ -1262,46 +1400,46 @@ var Se = (e) => e.map((e) => ({
1262
1400
  p && !s.stackable && console.warn(`[${e}] A ${o} chart cannot be stacked.`);
1263
1401
  let m = p && !!s.stackable && f, h = document.createElement("div");
1264
1402
  h.className = t, h.setAttribute("aria-hidden", "true");
1265
- let g = C("svg", {
1403
+ let g = w("svg", {
1266
1404
  role: "presentation",
1267
1405
  focusable: "false"
1268
1406
  });
1269
1407
  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);
1408
+ 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) => {
1409
+ let i = e.cells[t] ?? e.cells[0], a = E(n, h);
1272
1410
  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
1411
  })), 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));
1412
+ let r = E(n, h);
1413
+ r.classList.add(...e.classes), r.dataset.kind = "total", r.dataset.row = String(t + 1), r.dataset.value = String(ae(e, d.length));
1276
1414
  let i = e.cells[0];
1277
1415
  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;
1416
+ }) : [], 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
1417
  D && (D.className = c, D.setAttribute("aria-hidden", "true"), D.inert = !0);
1280
1418
  let O = f ? d.map((e, t) => {
1281
- let n = T("tablechart-name", D ?? h);
1419
+ let n = E("tablechart-name", D ?? h);
1282
1420
  D && (n.dataset.place = "legend");
1283
1421
  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);
1422
+ if (a && (n.dataset.swatch = a), n.textContent = e.name, !a && dt(r, i) !== "step") {
1423
+ let e = ye(d, t);
1286
1424
  n.dataset.marker = e.shape, n.toggleAttribute("data-open", e.open);
1287
1425
  }
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;
1426
+ 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;
1427
+ }) : [], k = s.centre ? E(u, h) : null;
1290
1428
  if (k) {
1291
1429
  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)));
1430
+ k.dataset.value = String(t), e && (k.dataset.decimals = String(P(e.number)));
1293
1431
  }
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));
1432
+ let A = k && !l.some((e) => e.isTotal) ? pt(r, k, i) : null, j = s.categories === "beside", M = document.createElement("div");
1433
+ 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
1434
  let F = 0;
1297
1435
  for (let [e, t] of l.entries()) {
1298
1436
  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);
1437
+ 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
1438
  }
1301
- (j ? h : r).appendChild(P), D && r.appendChild(D);
1302
- let I = i.animate ? Ie(r) : null;
1439
+ (j ? h : r).appendChild(M), D && r.appendChild(D);
1440
+ let I = i.animate ? ze(r) : null;
1303
1441
  I && r.setAttribute("data-steps", "");
1304
- let L = r.getAttribute("data-chart-keys"), R = I && i.controls ? ze({
1442
+ let L = r.getAttribute("data-chart-keys"), R = I && i.controls ? Ue({
1305
1443
  previous: i.previouslabel,
1306
1444
  next: i.nextlabel,
1307
1445
  hint: i.stephint
@@ -1311,9 +1449,16 @@ var Se = (e) => e.map((e) => ({
1311
1449
  hint: L && `${L}-step`
1312
1450
  }, i.langattribute) : null;
1313
1451
  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;
1452
+ let z = r.getAttribute("data-chart-table"), B = z && vt.includes(z) ? z : i.table;
1453
+ if (B === "never") r.removeAttribute("data-table");
1454
+ else {
1455
+ r.setAttribute("data-table", B);
1456
+ let e = r.querySelector(":scope > table");
1457
+ e && r.append(e);
1458
+ }
1459
+ let V = Array.from(r.querySelectorAll("[data-annotation]")).map((t) => {
1460
+ let n = t.getAttribute("data-annotation"), r = st[n];
1461
+ if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(st).join(", ")}.`), null;
1317
1462
  let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= d.length ? i - 1 : 0;
1318
1463
  return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which is not there; it reads line 1.`), {
1319
1464
  spec: t,
@@ -1323,8 +1468,8 @@ var Se = (e) => e.map((e) => ({
1323
1468
  after: l.length
1324
1469
  };
1325
1470
  }).filter((e) => e !== null);
1326
- i.animate && r.setAttribute("data-animate", $e(r, o, i, !!I));
1327
- let B = {
1471
+ i.animate && r.setAttribute("data-animate", bt(r, o, i, !!I));
1472
+ let H = {
1328
1473
  figure: r,
1329
1474
  plot: h,
1330
1475
  svg: g,
@@ -1335,63 +1480,70 @@ var Se = (e) => e.map((e) => ({
1335
1480
  series: d,
1336
1481
  seriesValues: y,
1337
1482
  names: D ? [] : O,
1338
- categories: Array.from(P.children),
1483
+ categories: Array.from(M.children),
1339
1484
  centre: k,
1340
1485
  stacked: m,
1341
1486
  totals: x,
1342
1487
  totalCell: A,
1343
1488
  rowAt: null,
1344
1489
  rowBox: null,
1345
- annotations: z,
1490
+ annotations: V,
1346
1491
  checks: [],
1347
1492
  plan: I,
1348
1493
  step: 0,
1349
1494
  controls: R
1350
1495
  };
1351
- return R?.addEventListener("click", (e) => {
1496
+ R?.addEventListener("click", (e) => {
1352
1497
  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 = {
1498
+ t && He(H, H.step + (t === "next" ? 1 : -1));
1499
+ }), He(H, 0, !0);
1500
+ 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;
1501
+ return ee && it(H, i, ee === "auto"), Tt(H, i), H;
1502
+ }, _t = {
1356
1503
  grow: "grow",
1357
1504
  sweep: "sweep"
1358
- }, Qe = {
1359
- ...Ze,
1505
+ }, vt = [
1506
+ "never",
1507
+ "auto",
1508
+ "print",
1509
+ "always"
1510
+ ], yt = {
1511
+ ..._t,
1360
1512
  up: "grow",
1361
1513
  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)];
1514
+ }, bt = (e, t, n, r) => {
1515
+ let i = t === "line" || t === "area", a = i ? yt : _t, o = a[e.getAttribute("data-chart-animate") ?? ""] ?? a[String(n.animate)];
1364
1516
  return i ? r ? "sweep" : o ?? "sweep" : t === "donut" || t === "waterfall" ? o ?? "grow" : "grow";
1365
- }, et = (e) => {
1517
+ }, xt = (e) => {
1366
1518
  let t = getComputedStyle(e), n = (t.getPropertyValue("--tablechart-value-align") || t.getPropertyValue("--tablechart-inside-align")).trim();
1367
1519
  return n === "start" || n === "center" || n === "end" ? n : null;
1368
- }, tt = (e, t, n, r) => {
1520
+ }, St = (e, t, n, r) => {
1369
1521
  let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
1370
1522
  if (!a) return null;
1371
1523
  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) => {
1524
+ return a[2] === "%" ? o / 100 * _ : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
1525
+ }, Ct = (e, t) => St(e, t, "--tablechart-bar-max", "60px") ?? Infinity, wt = (t, n) => {
1374
1526
  let { plot: r, svg: i, rows: a, type: o, values: s, series: c, seriesValues: u, names: d, annotations: p } = t, m = r.clientWidth;
1375
1527
  if (!m) return !1;
1376
- let h = g / m, _ = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), v = g * (_ > 0 ? _ : o.aspect ?? n.aspect);
1528
+ let h = _ / m, g = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), v = _ * (g > 0 ? g : o.aspect ?? n.aspect);
1377
1529
  r.classList.add(f);
1378
1530
  for (let e of [...u.flat(), ...t.totals]) delete e.dataset.place;
1379
- r.style.removeProperty("--_fit"), te([
1531
+ r.style.removeProperty("--_fit"), t.categories[0]?.parentElement?.style.removeProperty("--_beside"), ee([
1380
1532
  ...u.flat(),
1381
1533
  ...t.totals,
1382
1534
  ...d,
1383
1535
  ...t.categories,
1384
1536
  ...p.map((e) => e.badge)
1385
1537
  ]);
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?.({
1538
+ 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, St(t.figure, h, "--tablechart-min-height", "200px") ?? 0, o.minHeight?.({
1387
1539
  labelHeight: y,
1388
- nameHeight: Math.max(0, M(t.categories.map((e) => H(e).height))) * h,
1540
+ nameHeight: Math.max(0, N(t.categories.map((e) => W(e).height))) * h,
1389
1541
  unit: h,
1390
1542
  rows: a.length,
1391
1543
  series: c.length,
1392
1544
  stacked: t.stacked
1393
- }) ?? 0), w = t.stacked ? a.map((e) => {
1394
- let t = ie(e, c.length);
1545
+ }) ?? 0), S = t.stacked ? a.map((e) => {
1546
+ let t = ae(e, c.length);
1395
1547
  return {
1396
1548
  ...e,
1397
1549
  value: t,
@@ -1405,7 +1557,7 @@ var Se = (e) => e.map((e) => ({
1405
1557
  from: 0,
1406
1558
  to: e.value,
1407
1559
  kind: "bar"
1408
- }))))(t.stacked ? w.map((e) => ({
1560
+ }))))(t.stacked ? S.map((e) => ({
1409
1561
  ...e,
1410
1562
  cells: [e.cells[0]]
1411
1563
  })) : a), E = {
@@ -1420,7 +1572,7 @@ var Se = (e) => e.map((e) => ({
1420
1572
  e.from,
1421
1573
  e.to,
1422
1574
  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) => {
1575
+ ]), ...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
1576
  let t = Number.parseFloat(L?.getAttribute(e) ?? "");
1425
1577
  return Number.isFinite(t) ? t : null;
1426
1578
  }, z = R("data-from") ?? R("data-at"), B = R("data-to"), V = null;
@@ -1435,34 +1587,34 @@ var Se = (e) => e.map((e) => ({
1435
1587
  share: s
1436
1588
  } : console.warn(`[${e}] This kind of chart cannot break its scale.`);
1437
1589
  }
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;
1590
+ let H = V ? V.gap : null, U = (V && St(t.figure, h, "--tablechart-break-gap", "")) ?? 13, G = x - M, te = F - I || 1, ne = (e) => G - (e - I) / te * P;
1439
1591
  if (V) {
1440
1592
  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;
1593
+ 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
1594
  }
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;
1595
+ let re = d.length ? N(d.map((e) => W(e).width)) * h + 12 * h : 0, ie = t.categories[0]?.parentElement;
1596
+ ie && (ie.style.paddingRight = re ? `${re / _ * 100}%` : "");
1597
+ let K = (_ - re) / a.length, oe = (e) => (e + .5) * K, se = (e) => e >= 0 && e < a.length ? e : null;
1598
+ 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));
1599
+ let ce = K / _ * 100, le = 100 / a.length;
1448
1600
  t.rowBox = o.categories === "beside" ? (e) => [
1449
1601
  0,
1450
- e * Y,
1602
+ e * le,
1451
1603
  100,
1452
- Y
1604
+ le
1453
1605
  ] : (e) => [
1454
- e * se,
1606
+ e * ce,
1455
1607
  0,
1456
- se,
1608
+ ce,
1457
1609
  100
1458
- ], i.setAttribute("viewBox", `0 0 ${g} ${S(x)}`), i.textContent = "", t.checks = [];
1459
- let X = {
1610
+ ], i.setAttribute("viewBox", `0 0 ${_} ${C(x)}`), i.textContent = "", t.checks = [];
1611
+ let J = {
1460
1612
  rows: a,
1461
1613
  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),
1614
+ cx: oe,
1615
+ y: ne,
1616
+ barWidth: Math.min(K * n.barfill, Ct(t.figure, h)),
1617
+ barMax: Ct(t.figure, h),
1466
1618
  height: x,
1467
1619
  unit: h,
1468
1620
  labelHeight: y,
@@ -1470,12 +1622,12 @@ var Se = (e) => e.map((e) => ({
1470
1622
  after: a.length,
1471
1623
  note: 0,
1472
1624
  labels: t.figure.dataset.chartLabels === "inside" || t.figure.dataset.chartLabels !== "outside" && n.labels === "inside" ? "inside" : "outside",
1473
- insideAlign: et(t.figure),
1474
- breakAt: ee,
1625
+ insideAlign: xt(t.figure),
1626
+ breakAt: H,
1475
1627
  squeeze: V,
1476
1628
  breakGap: U,
1477
1629
  stacked: t.stacked,
1478
- shape: Ge(t.figure, n),
1630
+ shape: dt(t.figure, n),
1479
1631
  totals: t.totals,
1480
1632
  svg: i,
1481
1633
  plot: r,
@@ -1488,7 +1640,7 @@ var Se = (e) => e.map((e) => ({
1488
1640
  config: n,
1489
1641
  checks: t.checks
1490
1642
  };
1491
- r.style.setProperty("--count", String(Math.max(1, ...a.map((e) => e.slot + 1)))), o.draw(X);
1643
+ r.style.setProperty("--count", String(Math.max(1, ...a.map((e) => e.slot + 1)))), o.draw(J);
1492
1644
  for (let [e, n] of p.entries()) {
1493
1645
  n.badge?.setAttribute("data-note", String(e + 1));
1494
1646
  let r = n.series, i = (e) => ({
@@ -1496,9 +1648,9 @@ var Se = (e) => e.map((e) => ({
1496
1648
  ...e.cells[r] ?? e.cells[0]
1497
1649
  });
1498
1650
  n.type.draw(n.spec, n.badge, {
1499
- ...X,
1651
+ ...J,
1500
1652
  ...t.stacked && {
1501
- rows: w,
1653
+ rows: S,
1502
1654
  ...t.totals.length && { values: t.totals }
1503
1655
  },
1504
1656
  ...r > 0 && !t.stacked && {
@@ -1516,15 +1668,15 @@ var Se = (e) => e.map((e) => ({
1516
1668
  note: e + 1
1517
1669
  });
1518
1670
  }
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) => ({
1671
+ Ve(t);
1672
+ let ue = t.categories[0]?.parentElement;
1673
+ ue && o.categories !== "beside" && !o.centre && de(ue, t.categories.filter((e) => e.offsetParent !== null), (e) => ({
1522
1674
  size: e.scrollWidth,
1523
1675
  room: e.clientWidth
1524
- }), "--_name-fit"), O(i, p.flatMap(({ badge: e }) => {
1676
+ }), "--_name-fit"), k(i, p.flatMap(({ badge: e }) => {
1525
1677
  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", {
1678
+ 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;
1679
+ return [w("rect", {
1528
1680
  class: l,
1529
1681
  "data-for": "badge",
1530
1682
  "data-note": e.dataset.note ?? "",
@@ -1536,8 +1688,13 @@ var Se = (e) => e.map((e) => ({
1536
1688
  ry: o === null ? s : n * o,
1537
1689
  style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
1538
1690
  })];
1539
- }), g, x), !0;
1540
- }, it = (e, t) => {
1691
+ }), _, x);
1692
+ 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) => {
1693
+ let n = Number(e.dataset.row);
1694
+ return t.some((e) => pe(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
1695
+ };
1696
+ return t.figure.toggleAttribute("data-left-out", [...u, t.totals].some((e) => e.some((t) => !fe(t) && !pe(t) && !me(t, e)))), !0;
1697
+ }, Tt = (e, t) => {
1541
1698
  let n = [
1542
1699
  ...e.seriesValues.flat(),
1543
1700
  ...e.totals,
@@ -1549,70 +1706,35 @@ var Se = (e) => e.map((e) => ({
1549
1706
  r.textContent = n;
1550
1707
  continue;
1551
1708
  }
1552
- let [o, s] = F(Number.parseFloat(r.dataset.value || "0"), r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale);
1709
+ let [o, s] = I(Number.parseFloat(r.dataset.value || "0"), r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale);
1553
1710
  if (r.textContent = i + (i ? o : "") + s + a, o && !i) {
1554
1711
  let e = document.createElement("span");
1555
1712
  e.className = "tablechart-minus", e.textContent = o, r.prepend(e);
1556
1713
  }
1557
1714
  }
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) => {
1715
+ }, Et = (e) => {
1716
+ at(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${c}`)?.remove(), e.controls?.remove();
1717
+ }, Dt = (e, t) => {
1718
+ e.figure.classList.toggle(m, t);
1719
+ }, Ot = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), kt = /^\s*(?:Table)?:\s+/, At = (e) => e?.tagName === "P" && kt.test(e.textContent ?? ""), jt = (e) => {
1598
1720
  let t = document.createElement("figcaption");
1599
1721
  for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
1600
1722
  let n = e.firstChild;
1601
- n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(lt, ""), n.textContent || n.remove());
1723
+ n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(kt, ""), n.textContent || n.remove());
1602
1724
  let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
1603
1725
  if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
1604
1726
  let e = document.createElement("span");
1605
1727
  e.append(...r.slice(i + 1)), t.append(e);
1606
1728
  }
1607
1729
  return e.remove(), t;
1608
- }, ft = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, pt = (e) => {
1609
- let t = xt(e);
1730
+ }, Mt = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Nt = (e) => {
1731
+ let t = Vt(e);
1610
1732
  return t?.tagName === "P" ? t : e;
1611
- }, mt = (e) => {
1612
- let t = pt(e).firstChild;
1733
+ }, Pt = (e) => {
1734
+ let t = Nt(e).firstChild;
1613
1735
  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;
1736
+ let n = Mt.exec(t.textContent ?? "");
1737
+ if (!n || !ct.includes(n[1]) || !n[3] && t.nextSibling) return null;
1616
1738
  let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
1617
1739
  return {
1618
1740
  name: n[1],
@@ -1620,11 +1742,11 @@ var Se = (e) => e.map((e) => ({
1620
1742
  text: t,
1621
1743
  length: n[0].length
1622
1744
  };
1623
- }, ht = (e) => {
1745
+ }, Ft = (e) => {
1624
1746
  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));
1747
+ let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : Pt(e));
1626
1748
  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);
1749
+ let r = n[t], i = Nt(e);
1628
1750
  if (i !== e && i.replaceWith(...i.childNodes), r) {
1629
1751
  e.setAttribute("data-annotation", r.name);
1630
1752
  for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
@@ -1635,18 +1757,18 @@ var Se = (e) => e.map((e) => ({
1635
1757
  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
1758
  });
1637
1759
  }), 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;
1760
+ }, It = (e, t) => {
1761
+ for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || Ot(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
1762
+ }, Lt = (e) => e.map((e) => {
1763
+ let t = e.closest("p"), n = At(t) ? t : e;
1642
1764
  if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
1643
1765
  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;
1766
+ It(e, r), e.classList.length || e.removeAttribute("class");
1767
+ let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? At(a) ? a : At(o) ? o : null : n;
1646
1768
  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")) => {
1769
+ let c = o?.classList.contains("chart-annotations") ? o : Ft(o);
1770
+ return n.replaceWith(r), s && r.append(jt(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;
1771
+ }), Rt = (e, t, n, r = document.createElement("table")) => {
1650
1772
  for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
1651
1773
  if (!r.tHead && (t.length || n)) {
1652
1774
  let e = r.createTHead().insertRow(), i = document.createElement("th");
@@ -1666,7 +1788,7 @@ var Se = (e) => e.map((e) => ({
1666
1788
  for (let n of t.values ?? [t.value ?? null]) e.insertCell().textContent = n === null ? "" : String(n);
1667
1789
  }
1668
1790
  return r;
1669
- }, yt = (e) => {
1791
+ }, zt = (e) => {
1670
1792
  if (!e || typeof e != "object") return;
1671
1793
  let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
1672
1794
  if (t.length && t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n))) return t.map(([e, t]) => Array.isArray(t) ? {
@@ -1676,30 +1798,30 @@ var Se = (e) => e.map((e) => ({
1676
1798
  label: e,
1677
1799
  value: t
1678
1800
  });
1679
- }, bt = async (t) => {
1801
+ }, Bt = async (t) => {
1680
1802
  await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
1681
1803
  let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
1682
1804
  for (let e of t.querySelectorAll("table")) e !== r && e.remove();
1683
1805
  try {
1684
1806
  let e = await fetch(n);
1685
1807
  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);
1808
+ let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : zt(i.rows) : zt(i);
1687
1809
  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);
1810
+ let o = Rt(a, Array.isArray(i?.series) ? i.series.map(String) : [], typeof i?.label == "string" ? i.label : "", r ?? void 0);
1689
1811
  if (!r) {
1690
1812
  let e = t.querySelector(":scope > figcaption");
1691
1813
  e ? e.after(o) : t.prepend(o);
1692
1814
  }
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}"`);
1815
+ 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
1816
  } catch (t) {
1695
1817
  let r = window.location.protocol === "file:";
1696
1818
  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
1819
  }
1698
1820
  }));
1699
- }, xt = (e) => {
1821
+ }, Vt = (e) => {
1700
1822
  let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
1701
1823
  return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
1702
- }, St = "strong, b, span.total", Ct = (e) => {
1824
+ }, Ht = "strong, b, span.total", Ut = (e) => {
1703
1825
  for (let t of e) {
1704
1826
  for (let e of t.querySelectorAll("tbody tr")) {
1705
1827
  let t = e.cells[0];
@@ -1707,16 +1829,16 @@ var Se = (e) => e.map((e) => ({
1707
1829
  let n = document.createElement("th");
1708
1830
  for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
1709
1831
  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);
1832
+ for (let t = Vt(n); t?.matches(Ht); t = Vt(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
1711
1833
  }
1712
1834
  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);
1835
+ for (let t of e.slice(1)) for (let e = Vt(t); e?.matches(Ht); e = Vt(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
1714
1836
  }
1715
- }, wt = "data-chart-made", Tt = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Et = (e) => new Promise((t) => setTimeout(t, e)), Dt = (e, t) => {
1837
+ }, Wt = "data-chart-made", Gt = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Kt = (e) => new Promise((t) => setTimeout(t, e)), qt = (e, t) => {
1716
1838
  let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
1717
1839
  return Math.min(Math.max(r, 0), 1);
1718
- }, Ot = async (e, t) => {
1719
- if (Tt()) return;
1840
+ }, Jt = async (e, t) => {
1841
+ if (Gt()) return;
1720
1842
  await new Promise(requestAnimationFrame);
1721
1843
  let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
1722
1844
  for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
@@ -1727,11 +1849,11 @@ var Se = (e) => e.map((e) => ({
1727
1849
  let a = Number(n.delay ?? 0) + i * t;
1728
1850
  r = Math.max(r, a - Number(e.currentTime ?? 0));
1729
1851
  }
1730
- r > 0 && await Et(r);
1731
- }, kt = (e) => {
1852
+ r > 0 && await Kt(r);
1853
+ }, Yt = (e) => {
1732
1854
  for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
1733
1855
  return null;
1734
- }, At = (e) => new Promise((t) => {
1856
+ }, Xt = (e) => new Promise((t) => {
1735
1857
  let n = ["animationstart", "transitionrun"], r = () => {
1736
1858
  for (let e of n) document.removeEventListener(e, i, !0);
1737
1859
  a.disconnect(), t();
@@ -1745,60 +1867,62 @@ var Se = (e) => e.map((e) => ({
1745
1867
  attributes: !0,
1746
1868
  attributeFilter: ["class", "style"]
1747
1869
  });
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();
1870
+ }), Zt = /* @__PURE__ */ new Set(), Qt = null, $t = (e) => {
1871
+ Zt.add(e), !Qt && (Qt = new MutationObserver(() => {
1872
+ for (let e of Zt) e.relabel();
1751
1873
  requestAnimationFrame(() => requestAnimationFrame(() => {
1752
- for (let e of jt) e.refresh();
1874
+ for (let e of Zt) e.refresh();
1753
1875
  }));
1754
- }), Mt.observe(document.documentElement, {
1876
+ }), Qt.observe(document.documentElement, {
1755
1877
  attributes: !0,
1756
1878
  attributeFilter: ["lang"]
1757
1879
  }));
1758
- }, Pt = (e) => {
1759
- jt.delete(e), !jt.size && Mt && (Mt.disconnect(), Mt = null);
1760
- }, Ft = ["column", "bar"], It = (e) => {
1880
+ }, en = (e) => {
1881
+ Zt.delete(e), !Zt.size && Qt && (Qt.disconnect(), Qt = null);
1882
+ }, tn = ["column", "bar"], nn = (e) => {
1761
1883
  let t = e.getAttribute("data-chart") || "column";
1762
- if (!Ft.includes(t)) return null;
1884
+ if (!tn.includes(t)) return null;
1763
1885
  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);
1886
+ return tn.includes(n) ? n : t;
1887
+ }, rn = (e, t) => {
1888
+ let n = e, r = nn(n.figure), i = null, a = !1, o = !1, s = async () => {
1889
+ if (!t.animate) return Dt(n, !0);
1768
1890
  let e = n.figure.classList.contains("is-shown");
1769
1891
  if (a && i !== null && !e && !o) {
1770
1892
  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);
1893
+ let e = Gt() ? null : Yt(n.figure);
1894
+ e && await Xt(e), await Jt(n.figure, qt(n.figure, t)), o = !1, (a || !t.replay) && Dt(n, !0);
1895
+ } else !a && t.replay && e && Dt(n, !1);
1774
1896
  }, c = () => {
1775
- let e = It(n.figure);
1897
+ let e = nn(n.figure);
1776
1898
  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);
1899
+ let a = X.timed("Building", n.figure, () => gt(n.figure, t, e));
1900
+ a && (Et(n), He(a, n.step, !0), n = a, r = e, i = null);
1779
1901
  }, l = () => {
1780
1902
  c();
1781
1903
  let e = n.plot.clientWidth;
1782
- e && e !== i && Q.timed("Layout", n.figure, () => rt(n, t)) && (i = e, s());
1904
+ e && e !== i && X.timed("Layout", n.figure, () => wt(n, t)) && (i = e, s());
1783
1905
  }, u = !1, d = new ResizeObserver(() => {
1784
1906
  u || (u = !0, requestAnimationFrame(() => {
1785
1907
  u = !1, l();
1786
1908
  }));
1787
1909
  }), f = new IntersectionObserver((e) => {
1788
1910
  for (let t of e) a = t.isIntersecting, s();
1789
- }, { threshold: t.threshold }), p = () => ot(n, !0), m = () => {
1911
+ }, { threshold: t.threshold }), p = () => {
1912
+ n.figure.classList.add(h), Dt(n, !0), n.figure.offsetWidth;
1913
+ }, m = () => n.figure.classList.remove(h), g = () => {
1790
1914
  i = null, l();
1791
- }, h = {
1792
- relabel: () => it(n, t),
1793
- refresh: m
1915
+ }, _ = {
1916
+ relabel: () => Tt(n, t),
1917
+ refresh: g
1794
1918
  };
1795
- c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), Nt(h);
1796
- let g = {
1919
+ c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), window.addEventListener("afterprint", m), $t(_);
1920
+ let v = {
1797
1921
  figure: n.figure,
1798
- refresh: m,
1799
- next: () => $(n, n.step + 1),
1800
- previous: () => $(n, n.step - 1),
1801
- stepTo: (e) => $(n, e),
1922
+ refresh: g,
1923
+ next: () => He(n, n.step + 1),
1924
+ previous: () => He(n, n.step - 1),
1925
+ stepTo: (e) => He(n, e),
1802
1926
  get step() {
1803
1927
  return n.step;
1804
1928
  },
@@ -1806,26 +1930,26 @@ var Se = (e) => e.map((e) => ({
1806
1930
  return n.plan?.count ?? 0;
1807
1931
  },
1808
1932
  destroy() {
1809
- d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), Pt(h), n.figure.tablechart === g && delete n.figure.tablechart;
1933
+ d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), window.removeEventListener("afterprint", m), en(_), at(n), n.figure.tablechart === v && delete n.figure.tablechart;
1810
1934
  }
1811
1935
  };
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 = {}) => {
1936
+ return n.figure.tablechart = v, v;
1937
+ }, an = async (e, t) => {
1938
+ let n = Lt(e.filter((e) => !e.hasAttribute(Wt)));
1939
+ return await Bt(n), Ut(n), Le(n, t.langattribute), n;
1940
+ }, on = (e, t) => {
1941
+ let n = X.timed("Building", e, () => gt(e, t));
1942
+ return n ? (e.setAttribute(Wt, ""), rn(n, t)) : null;
1943
+ }, sn = async (e, t = {}) => {
1820
1944
  if (e.tablechart) return e.tablechart;
1821
1945
  let n = {
1822
- ..._,
1946
+ ...v,
1823
1947
  ...t
1824
1948
  };
1825
- n.debug && (Q.enabled = !0);
1826
- let [r] = await Rt([e], n);
1827
- return r ? zt(r, n) : null;
1828
- }, Vt = [
1949
+ n.debug && (X.enabled = !0);
1950
+ let [r] = await an([e], n);
1951
+ return r ? on(r, n) : null;
1952
+ }, cn = [
1829
1953
  ["--tablechart-duration", "--tablechart-animation-element-duration"],
1830
1954
  ["--tablechart-stagger", "--tablechart-animation-stagger, a share of the element time"],
1831
1955
  ["--tablechart-easing", "--tablechart-animation-ease"],
@@ -1848,31 +1972,33 @@ var Se = (e) => e.map((e) => ({
1848
1972
  ["--tablechart-key-size", "--tablechart-legend-key-size"],
1849
1973
  ["--tablechart-controls-justify", "--tablechart-control-justify"],
1850
1974
  ["--tablechart-controls-gap", "--tablechart-control-gap"]
1851
- ], Ht = {
1975
+ ], ln = {
1852
1976
  up: "grow",
1853
1977
  across: "sweep"
1854
- }, Ut = !1, Wt = (t, n) => {
1855
- if (Ut) return;
1978
+ }, un = !1, dn = (t, n) => {
1979
+ if (un) return;
1856
1980
  let r = (e) => {
1857
- let t = Ht[String(e)];
1981
+ let t = ln[String(e)];
1858
1982
  return t ? [`"${e}" is now "${t}"`] : [];
1859
1983
  }, i = new Set(r(n.animate));
1984
+ n.hover !== void 0 && i.add("the \"hover\" option is now \"tooltip\"");
1860
1985
  for (let e of t) {
1986
+ e.hasAttribute("data-chart-hover") && i.add("data-chart-hover is now data-chart-tooltip");
1861
1987
  let t = getComputedStyle(e);
1862
- for (let [e, n] of Vt) t.getPropertyValue(e).trim() && i.add(`${e} is now ${n}`);
1988
+ for (let [e, n] of cn) t.getPropertyValue(e).trim() && i.add(`${e} is now ${n}`);
1863
1989
  for (let t of r(e.getAttribute("data-chart-animate"))) i.add(t);
1864
1990
  }
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) => {
1991
+ i.size && (un = !0, console.warn(`[${e}] ${[...i].join("; ")}. The old names work until the next minor version.`));
1992
+ }, fn = async (e = {}, t = document) => {
1867
1993
  let n = {
1868
- ..._,
1994
+ ...v,
1869
1995
  ...e
1870
1996
  };
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).`), {
1997
+ n.debug && (X.enabled = !0);
1998
+ let r = await an(Array.from(t.querySelectorAll(n.selector)), n);
1999
+ dn(r, n);
2000
+ let i = r.map((e) => on(e, n)).filter((e) => e !== null);
2001
+ return X.log(`Made ${i.length} chart(s).`), {
1876
2002
  charts: i,
1877
2003
  refresh: () => {
1878
2004
  for (let e of i) e.refresh();
@@ -1883,4 +2009,4 @@ var Se = (e) => e.map((e) => ({
1883
2009
  };
1884
2010
  };
1885
2011
  //#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 };
2012
+ export { h as _, Lt as a, v as b, gt as c, Dt as d, Et as f, t as g, f as h, an as i, wt as l, Le as m, qt as n, Bt as o, He as p, fn as r, Ut as s, sn as t, Tt as u, g as v, m as y };