@martinomagnifico/tablechart 1.3.0 → 1.4.0

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.
@@ -28,7 +28,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
28
28
  threshold: .5,
29
29
  replay: !1,
30
30
  langattribute: "data-i18n"
31
- }, j = (e, t) => e[0] < t[0] + t[2] && t[0] < e[0] + e[2] && e[1] < t[1] + t[3] && t[1] < e[1] + e[3], ee = (e, t) => e[0] >= t[0] && e[1] >= t[1] && e[0] + e[2] <= t[0] + t[2] && e[1] + e[3] <= t[1] + t[3], te = (e, t, n) => {
31
+ }, j = (e, t) => e[0] < t[0] + t[2] && t[0] < e[0] + e[2] && e[1] < t[1] + t[3] && t[1] < e[1] + e[3], M = (e, t) => e[0] >= t[0] && e[1] >= t[1] && e[0] + e[2] <= t[0] + t[2] && e[1] + e[3] <= t[1] + t[3], N = (e, t, n) => {
32
32
  if (e.length > 400) return e.map(() => null);
33
33
  let r = 1;
34
34
  for (let t of e) for (let [, , e, n] of t) r = Math.max(r, e, n);
@@ -38,21 +38,21 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
38
38
  return a;
39
39
  }, o = (e) => {
40
40
  for (let t of a(e)) i.get(t)?.push(e) ?? i.set(t, [e]);
41
- }, s = (e) => ee(e, n) && a(e).every((t) => !i.get(t)?.some((t) => j(e, t)));
41
+ }, s = (e) => M(e, n) && a(e).every((t) => !i.get(t)?.some((t) => j(e, t)));
42
42
  return t.forEach(o), e.map((e) => {
43
43
  let t = e.findIndex(s);
44
44
  return t < 0 ? null : (o(e[t]), t);
45
45
  });
46
- }, M = /* @__PURE__ */ new WeakMap(), N = (e) => {
46
+ }, P = /* @__PURE__ */ new WeakMap(), F = (e) => {
47
47
  let t = [...e].filter((e) => !!e), n = t.map((e) => ({
48
48
  width: e.offsetWidth,
49
49
  height: e.offsetHeight
50
50
  }));
51
- t.forEach((e, t) => M.set(e, n[t]));
52
- }, P = (e) => M.get(e) ?? {
51
+ t.forEach((e, t) => P.set(e, n[t]));
52
+ }, I = (e) => P.get(e) ?? {
53
53
  width: e.offsetWidth,
54
54
  height: e.offsetHeight
55
- }, F = 6, I = (e, t, n) => e.some((e) => P(e).width * n > t - F * n), L = (e, t, n) => t >= P(e).height * n * 1.6, R = (e, t, n) => t >= P(e).width * n * 1.5, z = (e, t, n, r, i = .7) => {
55
+ }, L = 6, R = (e, t, n) => e.some((e) => I(e).width * n > t - L * n), ee = (e, t, n) => t >= I(e).height * n * 1.6, z = (e, t, n) => t >= I(e).width * n * 1.5, B = (e, t, n, r, i = .7) => {
56
56
  e.style.setProperty(r, "1");
57
57
  let a = 1;
58
58
  for (let e of t) {
@@ -61,7 +61,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
61
61
  }
62
62
  let o = a >= i ? a : 0;
63
63
  return e.style.setProperty(r, String(o || i)), o;
64
- }, B = (e, t) => {
64
+ }, V = (e, t) => {
65
65
  e.sort((e, t) => e.y - t.y);
66
66
  let n = [], r = (e) => e.sum / e.items.length - (e.items.length - 1) * t / 2;
67
67
  for (let i of e) {
@@ -77,55 +77,69 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
77
77
  }
78
78
  for (let e of n) e.items.forEach((n, i) => n.y = r(e) + i * t);
79
79
  return e;
80
- }, V = {
80
+ }, H = {
81
81
  outside: [.5, 1],
82
82
  below: [.5, 0],
83
83
  after: [0, .5],
84
84
  before: [1, .5]
85
- }, ne = (e, t, n, r, i = [.5, .5]) => {
86
- let [a, o] = V[e.dataset.place ?? ""] ?? i, { width: s, height: c } = P(e);
85
+ }, te = (e, t, n, r, i = [.5, .5]) => {
86
+ let [a, o] = H[e.dataset.place ?? ""] ?? i, { width: s, height: c } = I(e);
87
87
  return [
88
88
  Number.parseFloat(e.style.left) / 100 * n - s * t * a,
89
89
  Number.parseFloat(e.style.top) / 100 * r - c * t * o,
90
90
  s * t,
91
91
  c * t
92
92
  ];
93
- }, re = (e, t, n) => {
93
+ }, ne = (e, t, n) => {
94
94
  for (let r of e) {
95
95
  if (r.dataset.place === "none" || !r.style.left) continue;
96
- let [e] = V[r.dataset.place ?? ""] ?? [.5, .5], i = P(r).width * t, a = Number.parseFloat(r.style.left) / 100 * n, o = Math.min(Math.max(a, i * e), n - i * (1 - e));
96
+ let [e] = H[r.dataset.place ?? ""] ?? [.5, .5], i = I(r).width * t, a = Number.parseFloat(r.style.left) / 100 * n, o = Math.min(Math.max(a, i * e), n - i * (1 - e));
97
97
  o !== a && (r.style.left = `${o / n * 100}%`);
98
98
  }
99
- }, ie = (e, t, n, r) => {
99
+ }, re = (e, t, n, r) => {
100
100
  let i = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), a = ae(i, t, n, r);
101
101
  i.forEach((e, t) => {
102
102
  t % a && e.setAttribute("data-left-out", "");
103
103
  });
104
- }, ae = (e, t, n, r) => {
104
+ }, ie = (e, t, n) => e[0] + e[2] + n <= t[0] || t[0] + t[2] + n <= e[0] || e[1] + e[3] <= t[1] || t[1] + t[3] <= e[1], ae = (e, t, n, r) => {
105
105
  if (e.length < 2) return 1;
106
- let i = e.map((e) => ne(e, t, n, r)), a = 2 * t, o = (e, t) => e[0] + e[2] + a <= t[0] || t[0] + t[2] + a <= e[0] || e[1] + e[3] <= t[1] || t[1] + t[3] <= e[1], s = 1;
107
- for (; s < e.length && i.some((e, t) => t >= s && t % s === 0 && !o(i[t - s], e));) s++;
108
- return s;
109
- }, oe = "cubic-bezier(0.3, 0.3, 0.6, 1)", H = (e, t, n = 1) => ({
106
+ let i = e.map((e) => te(e, t, n, r)), a = 2 * t, o = 1;
107
+ for (; o < e.length && i.some((e, t) => t >= o && t % o === 0 && !ie(i[t - o], e, a));) o++;
108
+ return o;
109
+ }, oe = (e, t, n, r, i, a) => {
110
+ let o = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), s = o.map((e) => te(e, r, i, a)), c = 2 * r, l = [...t.keys()].sort((e, t) => e - t), u = !n, d = (e, t, n) => u ? n > 0 ? t[0] >= e[0] + e[2] : t[0] + t[2] <= e[0] : n > 0 ? t[1] >= e[1] + e[3] : t[1] + t[3] <= e[1], f = new Map(l.map((e, t) => [e, t])), p = (e) => {
111
+ if (o[e].dataset.place === "inside") return !1;
112
+ let n = s[e], r = f.get(Number(o[e].dataset.row)) ?? -1;
113
+ for (let e of [-1, 1]) for (let i = r + e; i >= 0 && i < l.length; i += e) {
114
+ let r = t.get(l[i]);
115
+ if (d(n, r, e)) break;
116
+ if (j(r, n)) return !0;
117
+ }
118
+ return !1;
119
+ };
120
+ if (ae(o, r, i, a) === 1 && !o.some((e, t) => p(t))) return;
121
+ let m = (e) => Math.abs(Number(o[e].dataset.value) || 0), h = [];
122
+ for (let e of o.map((e, t) => t).sort((e, t) => m(t) - m(e) || e - t)) !p(e) && h.every((t) => ie(s[t], s[e], c)) ? h.push(e) : o[e].setAttribute("data-left-out", "");
123
+ }, se = "cubic-bezier(0.3, 0.3, 0.6, 1)", ce = (e, t, n = 1) => ({
110
124
  start: e,
111
125
  span: t,
112
- easing: e + t >= n - 1e-4 ? oe : "linear"
113
- }), U = (e, t) => `${e}:${t}`, se = "http://www.w3.org/2000/svg", W = (e) => Math.round(e * 100) / 100, G = (e, t = {}) => {
114
- let n = document.createElementNS(se, e);
126
+ easing: e + t >= n - 1e-4 ? se : "linear"
127
+ }), U = (e, t) => `${e}:${t}`, le = "http://www.w3.org/2000/svg", W = (e) => Math.round(e * 100) / 100, G = (e, t = {}) => {
128
+ let n = document.createElementNS(le, e);
115
129
  for (let e in t) {
116
130
  let r = t[e];
117
131
  n.setAttribute(e, String(typeof r == "number" ? W(r) : r));
118
132
  }
119
133
  return n;
120
- }, K = (e, t) => [e, ...t.classes].join(" "), q = (e, t) => {
134
+ }, K = (e, t) => [e, ...t.classes].join(" "), ue = (e, t) => {
121
135
  let n = document.createElement("span");
122
136
  return n.className = e, n.inert = !0, t.appendChild(n), n;
123
- }, J = (e, t, n, r, i) => {
137
+ }, q = (e, t, n, r, i) => {
124
138
  e.style.left = `${t / r * 100}%`, e.style.top = `${n / i * 100}%`;
125
- }, ce = 0, le = 0, ue = 0, de = (e) => {
139
+ }, de = 0, fe = 0, pe = 0, me = (e) => {
126
140
  let t = e.querySelector(":scope > defs");
127
141
  return t || (t = G("defs"), e.prepend(t)), t;
128
- }, fe = (e, t) => {
142
+ }, he = (e, t) => {
129
143
  for (let n of e.querySelectorAll("rect[data-end]")) {
130
144
  let [e, r, i, a] = [
131
145
  "x",
@@ -146,8 +160,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
146
160
  ].includes(e) || d.setAttribute(e, t);
147
161
  n.replaceWith(d);
148
162
  }
149
- }, pe = (e, t, n, r, i) => {
150
- let a = `tablechart-fade-${++ue}`, o = G("linearGradient", {
163
+ }, ge = (e, t, n, r, i) => {
164
+ let a = `tablechart-fade-${++pe}`, o = G("linearGradient", {
151
165
  id: a,
152
166
  gradientUnits: "userSpaceOnUse",
153
167
  x1: 0,
@@ -174,8 +188,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
174
188
  offset: W(e),
175
189
  ...t && { "data-faded": "" }
176
190
  }));
177
- return de(e).appendChild(o), a;
178
- }, me = (e) => {
191
+ return me(e).appendChild(o), a;
192
+ }, _e = (e) => {
179
193
  if (e.tagName === "circle") {
180
194
  let [t, n, r] = [
181
195
  "cx",
@@ -194,20 +208,20 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
194
208
  "ry"
195
209
  ].map((t) => Number(e.getAttribute(t)) || 0), s = Math.min(a, r / 2), c = Math.min(o, i / 2), l = (e, t) => s && c ? `a${W(s)},${W(c)} 0 0 1 ${W(e)},${W(t)}` : "";
196
210
  return `M${W(t + s)},${W(n)}h${W(r - 2 * s)}${l(s, c)}v${W(i - 2 * c)}${l(-s, c)}h${W(2 * s - r)}${l(-s, -c)}v${W(2 * c - i)}${l(s, -c)}z`;
197
- }, he = (e, t, n, r, i) => {
211
+ }, ve = (e, t, n, r, i) => {
198
212
  if (!t.length || !i.length) return;
199
- let a = `tablechart-clip-${++le}`, o = G("clipPath", {
213
+ let a = `tablechart-clip-${++fe}`, o = G("clipPath", {
200
214
  id: a,
201
215
  clipPathUnits: "userSpaceOnUse"
202
216
  }), s = `M${-n},${-r}h${n * 3}v${r * 3}h${-n * 3}z`;
203
217
  o.appendChild(G("path", {
204
- d: s + t.map(me).join(""),
218
+ d: s + t.map(_e).join(""),
205
219
  "clip-rule": "evenodd"
206
- })), de(e).appendChild(o);
220
+ })), me(e).appendChild(o);
207
221
  for (let e of i) e.setAttribute("clip-path", `url(#${a})`);
208
- }, ge = (e, t, n, r, i, a) => {
222
+ }, ye = (e, t, n, r, i, a) => {
209
223
  if (!t.length) return;
210
- let o = `tablechart-cut-${++ce}`, s = G("mask", {
224
+ let o = `tablechart-cut-${++de}`, s = G("mask", {
211
225
  id: o,
212
226
  maskUnits: "userSpaceOnUse"
213
227
  });
@@ -219,24 +233,24 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
219
233
  fill: "white"
220
234
  }));
221
235
  for (let e of t) e.setAttribute("fill", "black"), s.appendChild(e);
222
- let c = de(e);
236
+ let c = me(e);
223
237
  if (c.appendChild(s), i) {
224
238
  for (let e of i) e.setAttribute("mask", `url(#${o})`);
225
239
  return;
226
240
  }
227
241
  let l = null;
228
242
  for (let t of Array.from(e.childNodes)) t !== c && (a && t instanceof Element && t.matches(a) ? (l = null, e.appendChild(t)) : (l ?? (l = e.appendChild(G("g", { mask: `url(#${o})` }))), l.appendChild(t)));
229
- }, Y = (e) => {
243
+ }, J = (e) => {
230
244
  let t = -Infinity;
231
245
  for (let n of e) t = Math.max(t, n);
232
246
  return t;
233
- }, _e = (e) => (e.split(/[.,]/)[1] || "").length, ve = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
247
+ }, be = (e) => (e.split(/[.,]/)[1] || "").length, xe = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
234
248
  minimumFractionDigits: e,
235
249
  maximumFractionDigits: e
236
- }), ye = (e, t, n) => {
237
- let r = ve(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
250
+ }), Se = (e, t, n) => {
251
+ let r = xe(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
238
252
  return [i, r.slice(+!!i).map((e) => e.value).join("")];
239
- }, be = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), xe = (e, t) => {
253
+ }, Ce = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), we = (e, t) => {
240
254
  let n = document.createElement("span");
241
255
  if (n.className = "tablechart-badge", n.inert = !0, e.childElementCount > 0) for (let t of Array.from(e.children)) n.appendChild(t.cloneNode(!0));
242
256
  else {
@@ -245,18 +259,18 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
245
259
  t && n.setAttribute("data-i18n", t);
246
260
  }
247
261
  return t.appendChild(n), n;
248
- }, Se = (t, n, r, i, a = "%") => {
249
- let o = t?.textContent || "", s = be(o), c = a ? .5 : .5 * 10 ** -_e(o.match(/-?[\d.,]+/)?.[0] ?? ""), l = Number.isNaN(s) ? !0 : Math.abs(n - s) <= c + 1e-9, u = {
262
+ }, Te = (t, n, r, i, a = "%") => {
263
+ let o = t?.textContent || "", s = Ce(o), c = a ? .5 : .5 * 10 ** -be(o.match(/-?[\d.,]+/)?.[0] ?? ""), l = Number.isNaN(s) ? !0 : Math.abs(n - s) <= c + 1e-9, u = {
250
264
  label: r,
251
265
  computed: n,
252
266
  stated: s,
253
267
  agrees: l
254
268
  };
255
269
  i.checks.push(u), l || console.warn(`[${e}] An annotation reads ${s}${a}, but ${r} is ${Number(n.toFixed(2))}${a}. The chart shows your number.`);
256
- }, Ce = {
270
+ }, Ee = {
257
271
  create(e, t) {
258
272
  if (!e.textContent?.trim()) return null;
259
- let n = xe(e, t);
273
+ let n = we(e, t);
260
274
  return n.dataset.kind = "note", n;
261
275
  },
262
276
  draw(t, n, r) {
@@ -281,9 +295,9 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
281
295
  y2: _,
282
296
  style: U("--after", d)
283
297
  }), u.querySelector(`:scope > .${h}`)), !n) return;
284
- let v = P(n).width * l, y = P(n).height * l, b = 4 * l, x = f.flat().flatMap((e) => !e.style.left || e.dataset.place === "none" || e.hasAttribute("data-left-out") ? [] : [{
298
+ let v = I(n).width * l, y = I(n).height * l, b = 4 * l, x = f.flat().flatMap((e) => !e.style.left || e.dataset.place === "none" || e.hasAttribute("data-left-out") ? [] : [{
285
299
  label: e,
286
- box: ne(e, l, k, c)
300
+ box: te(e, l, k, c)
287
301
  }]), S = [0, y + b / 2].flatMap((e) => [
288
302
  [
289
303
  g - v / 2,
@@ -303,30 +317,30 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
303
317
  v,
304
318
  y
305
319
  ]
306
- ]), [C] = te([S], [...r.taken, ...x.map((e) => e.box)], [
320
+ ]), [C] = N([S], [...r.taken, ...x.map((e) => e.box)], [
307
321
  0,
308
322
  0,
309
323
  k,
310
324
  c
311
325
  ]), w = S[C ?? 0];
312
- if (r.taken.push(w), J(n, w[0] + v / 2, w[1] + y / 2, k, c), n.style.setProperty("--after", String(d)), C === null) for (let e of x) j(e.box, w) && e.label.setAttribute("data-left-out", "");
326
+ if (r.taken.push(w), q(n, w[0] + v / 2, w[1] + y / 2, k, c), n.style.setProperty("--after", String(d)), C === null) for (let e of x) j(e.box, w) && e.label.setAttribute("data-left-out", "");
313
327
  }
314
- }, we = [
328
+ }, De = [
315
329
  "circle",
316
330
  "square",
317
331
  "diamond"
318
- ], Te = (e, t) => {
332
+ ], Oe = (e, t) => {
319
333
  let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [];
320
334
  if (n.includes("none")) return {
321
335
  shape: "none",
322
336
  open: !1
323
337
  };
324
- let r = we.find((e) => n.includes(e));
338
+ let r = De.find((e) => n.includes(e));
325
339
  return {
326
- shape: r ?? we[Math.floor(t / 2) % we.length],
340
+ shape: r ?? De[Math.floor(t / 2) % De.length],
327
341
  open: n.includes("open") || !n.includes("filled") && !r && t % 2 == 1
328
342
  };
329
- }, Ee = (e, t, n, r, i = {}) => {
343
+ }, ke = (e, t, n, r, i = {}) => {
330
344
  if (e === "square") {
331
345
  let e = r * .88;
332
346
  return G("rect", {
@@ -357,21 +371,21 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
357
371
  r,
358
372
  ...i
359
373
  });
360
- }, De = (e, t, n) => {
374
+ }, Ae = (e, t, n) => {
361
375
  let r = .15, i = Math.min(e * .7 / (t + (t - 1) * r), n), a = t * i + (t - 1) * i * r;
362
376
  return {
363
377
  size: i,
364
378
  gap: i * r,
365
379
  offset: (e) => -a / 2 + e * i * 1.15
366
380
  };
367
- }, Oe = (e, t, n) => {
381
+ }, je = (e, t, n) => {
368
382
  let r = e.series[n], i = e.series.some((e) => e.focus) && !r.focus;
369
383
  return {
370
384
  "data-series": n + 1,
371
385
  ...i && { "data-muted": "" },
372
386
  style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${U("--i", t.slot)}`
373
387
  };
374
- }, ke = (e, t, n = !1) => {
388
+ }, Me = (e, t, n = !1) => {
375
389
  let r = 0, i = 0;
376
390
  return Array.from({ length: t }, (t, a) => {
377
391
  let o = e.cells[a] ?? e.cells[0], s = o.missing ? 0 : o.value;
@@ -398,19 +412,19 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
398
412
  cell: o
399
413
  };
400
414
  });
401
- }, Ae = (e, t, n = !1) => {
402
- let r = ke(e, t, n);
415
+ }, Ne = (e, t, n = !1) => {
416
+ let r = Me(e, t, n);
403
417
  return {
404
418
  top: Math.max(0, ...r.map((e) => e.to)),
405
419
  bottom: Math.min(0, ...r.map((e) => e.to))
406
420
  };
407
- }, je = (e, t) => {
408
- let { top: n, bottom: r } = Ae(e, t);
421
+ }, Pe = (e, t) => {
422
+ let { top: n, bottom: r } = Ne(e, t);
409
423
  return n + r;
410
- }, Me = (e, t, n) => {
424
+ }, Fe = (e, t, n) => {
411
425
  let r = t.series.some((e) => e.focus);
412
426
  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})`);
413
- }, Ne = (e, t) => e.barRadius ? { "data-end": t } : {}, Pe = (e, t) => e.some((n, r) => r !== t && !n.cell.missing && n.to !== n.from && n.from === e[t].to), Fe = (e, t, n, r = {}, a = "") => {
427
+ }, Ie = (e, t) => e.barRadius ? { "data-end": t } : {}, Le = (e, t) => e.some((n, r) => r !== t && !n.cell.missing && n.to !== n.from && n.from === e[t].to), Re = (e, t, n, r = {}, a = "") => {
414
428
  let o = {
415
429
  class: K(i, t),
416
430
  "data-kind": "bar",
@@ -428,20 +442,20 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
428
442
  ...a,
429
443
  class: K("tablechart-piece", t),
430
444
  "data-row": n + 1,
431
- ...Oe(e, t, i)
445
+ ...je(e, t, i)
432
446
  }));
433
447
  };
434
- }, X = {
448
+ }, Y = (e) => Array.from(e.querySelectorAll("table")).find((e) => !e.closest(".chart-summary")) ?? null, X = {
435
449
  enabled: !1,
436
450
  log(...t) {
437
451
  X.enabled && console.log(`[${e}]`, ...t);
438
452
  },
439
453
  timed(t, n, r) {
440
454
  if (!X.enabled) return r();
441
- let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
455
+ let i = performance.now(), a = r(), o = performance.now() - i, s = Y(n)?.querySelectorAll("tbody tr").length ?? 0;
442
456
  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;
443
457
  }
444
- }, Ie = (e) => {
458
+ }, ze = (e) => {
445
459
  let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
446
460
  return {
447
461
  raw: t,
@@ -451,14 +465,14 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
451
465
  missing: !n,
452
466
  value: n ? Number.parseFloat(n[2].replace(",", ".")) : 0
453
467
  };
454
- }, Le = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).flatMap((e, t) => e.hasAttribute("data-note") ? [t] : []), Re = (e, t) => {
455
- let n = Le(e), r = e.querySelectorAll("tbody tr")[t]?.querySelectorAll("td") ?? [];
468
+ }, Be = (e) => Array.from(Y(e)?.querySelector("thead tr:last-child")?.children ?? []).slice(1).flatMap((e, t) => e.hasAttribute("data-note") ? [t] : []), Ve = (e, t) => {
469
+ let n = Be(e), r = Y(e)?.querySelectorAll("tbody tr")[t]?.querySelectorAll("td") ?? [];
456
470
  return n.map((e) => r[e]).find((e) => e?.textContent?.trim()) ?? null;
457
- }, ze = (e, t = "data-i18n") => {
458
- let n = Le(e);
459
- return Array.from(e.querySelectorAll("tbody tr")).map((e, r) => {
460
- let i = e.querySelector("th"), a = Array.from(e.querySelectorAll("td")), o = a.filter((e, t) => !n.includes(t)).map(Ie);
461
- o.length || o.push(Ie(null));
471
+ }, He = (e, t = "data-i18n") => {
472
+ let n = Be(e);
473
+ return Array.from(Y(e)?.querySelectorAll("tbody tr") ?? []).map((e, r) => {
474
+ let i = e.querySelector("th"), a = Array.from(e.querySelectorAll("td")), o = a.filter((e, t) => !n.includes(t)).map(ze);
475
+ o.length || o.push(ze(null));
462
476
  let s = n.map((e) => a[e]).find((e) => e?.textContent?.trim());
463
477
  return {
464
478
  ...o[0],
@@ -474,8 +488,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
474
488
  slot: r
475
489
  };
476
490
  });
477
- }, Be = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).filter((e) => !e.hasAttribute("data-note")), Z = (e) => e === "dashed" || e === "dotted" || e === "dash-dot" ? e : null, Ve = (e, t, n = "data-i18n") => {
478
- let r = Be(e), i = Math.max(1, Y(t.map((e) => e.cells.length)));
491
+ }, Ue = (e) => Array.from(Y(e)?.querySelector("thead tr:last-child")?.children ?? []).slice(1).filter((e) => !e.hasAttribute("data-note")), We = (e) => e === "dashed" || e === "dotted" || e === "dash-dot" ? e : null, Ge = (e, t, n = "data-i18n") => {
492
+ let r = Ue(e), i = Math.max(1, J(t.map((e) => e.cells.length)));
479
493
  return Array.from({ length: i }, (e, t) => {
480
494
  let i = r[t];
481
495
  return {
@@ -483,12 +497,12 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
483
497
  key: n && i?.getAttribute(n) || null,
484
498
  focus: i?.getAttribute("data-kind") === "focus",
485
499
  marker: i?.getAttribute("data-marker") ?? null,
486
- line: Z(i?.getAttribute("data-line")),
500
+ line: We(i?.getAttribute("data-line")),
487
501
  group: !!i?.hasAttribute("data-group"),
488
502
  chart: i?.getAttribute("data-chart") === "line" ? "line" : null
489
503
  };
490
504
  });
491
- }, He = (t, n) => {
505
+ }, Z = (t, n) => {
492
506
  if (!n) return;
493
507
  let r = /* @__PURE__ */ new Map();
494
508
  for (let i of t) {
@@ -498,40 +512,40 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
498
512
  let n = r.get(t) + 1;
499
513
  r.set(t, n), console.warn(`[${e}] Two charts have data-chart-keys="${t}", so this one uses "${t}-${n}" to keep their translations apart.`), t = `${t}-${n}`;
500
514
  } else r.set(t, 1);
501
- i.querySelectorAll("tbody th").forEach((e, r) => {
515
+ Y(i)?.querySelectorAll("tbody th").forEach((e, r) => {
502
516
  e.getAttribute(n) || e.setAttribute(n, `${t}-row${r + 1}`);
503
517
  });
504
- let a = Be(i);
518
+ let a = Ue(i);
505
519
  a.length > 1 && a.forEach((e, r) => {
506
520
  e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
507
521
  }), a.forEach((e, r) => {
508
522
  if (!e.hasAttribute("data-group")) return;
509
523
  let a = [];
510
- i.querySelectorAll(`tbody tr > td:nth-of-type(${r + 1})`).forEach((e) => {
524
+ Y(i)?.querySelectorAll(`tbody tr > td:nth-of-type(${r + 1})`).forEach((e) => {
511
525
  let r = (e.textContent || "").trim();
512
526
  a.includes(r) || a.push(r), e.getAttribute(n) || e.setAttribute(n, `${t}-group${a.indexOf(r) + 1}`);
513
527
  });
514
528
  });
515
- let o = Le(i);
516
- i.querySelectorAll("tbody tr").forEach((e, r) => {
529
+ let o = Be(i);
530
+ Y(i)?.querySelectorAll("tbody tr").forEach((e, r) => {
517
531
  let i = e.querySelectorAll("td");
518
532
  for (let e of o) {
519
533
  let a = i[e];
520
534
  a?.textContent?.trim() && !a.getAttribute(n) && a.setAttribute(n, `${t}-note${r + 1}`);
521
535
  }
522
- }), X?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
536
+ }), X?.log?.(`Keys for "${t}" written onto ${Y(i)?.querySelectorAll("tbody th").length ?? 0} rows`);
523
537
  }
524
- }, Ue = [
538
+ }, Ke = [
525
539
  "axis-break",
526
540
  "trend",
527
541
  "bracket"
528
- ], We = (e, t = !1) => {
529
- let n = e.hasAttribute("data-fragment"), r = Array.from(e.querySelectorAll("tbody tr")), i = Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), a = Array.from(e.querySelectorAll("[data-annotation]")).filter((e) => Ue.includes(e.getAttribute("data-annotation") ?? "")), o = (e) => e.hasAttribute("data-fragment"), s = r.map((e) => Array.from(e.querySelectorAll(":scope > td")));
542
+ ], qe = (e, t = !1) => {
543
+ let n = e.hasAttribute("data-fragment"), r = Array.from(Y(e)?.querySelectorAll("tbody tr") ?? []), i = Array.from(Y(e)?.querySelector("thead tr:last-child")?.children ?? []).slice(1), a = Array.from(e.querySelectorAll("[data-annotation]")).filter((e) => Ke.includes(e.getAttribute("data-annotation") ?? "")), o = (e) => e.hasAttribute("data-fragment"), s = r.map((e) => Array.from(e.querySelectorAll(":scope > td")));
530
544
  if (!n && !r.some(o) && !i.some(o) && !s.flat().some(o) && !a.some(o) || t && !n) return null;
531
545
  let c = [], l = /* @__PURE__ */ new Map(), u = [], d = (e) => {
532
546
  let t = e === null ? void 0 : l.get(e);
533
547
  return t === void 0 && (t = c.length, c.push(e), u.push(0), e !== null && l.set(e, t)), t;
534
- }, f = 0, p = e.getAttribute("data-chart") === "donut", m = (e) => p && e.getAttribute("data-kind") === "total", h = t ? d(e.getAttribute("data-fragment-index")) : -1, g = r.map((e) => {
548
+ }, f = 0, p = ["donut", "pie"].includes(e.getAttribute("data-chart") ?? ""), m = (e) => p && e.getAttribute("data-kind") === "total", h = t ? d(e.getAttribute("data-fragment-index")) : -1, g = r.map((e) => {
535
549
  if (m(e)) return {
536
550
  step: null,
537
551
  slot: 0
@@ -588,7 +602,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
588
602
  count: c.length,
589
603
  indexes: c
590
604
  };
591
- }, Ge = (e) => {
605
+ }, Je = (e) => {
592
606
  let t = e.plan;
593
607
  if (!t) return;
594
608
  let n = (t) => t === null || e.step - t >= 1;
@@ -599,7 +613,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
599
613
  let u = r.hasAttribute("data-flat") ? (l - e + 1) / (i - e + 1) : i > e ? Math.max(0, l - e) / (i - e) : 0;
600
614
  r.style.setProperty("--reveal", String(u));
601
615
  }
602
- }, Ke = (e) => {
616
+ }, Ye = (e) => {
603
617
  let t = e.plan;
604
618
  if (!t) return;
605
619
  let n = t.rows.length - 1, r = (e) => t.series.map((n, r) => t.cells[e]?.[r]?.step ?? n.step ?? t.rows[e]?.step ?? null), a = (e) => {
@@ -670,19 +684,19 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
670
684
  let o = /* @__PURE__ */ new Map();
671
685
  for (let e of a) {
672
686
  let t = e.reduce((e, t) => e + n(t), 0), r = 0;
673
- for (let i of e) o.set(i.dataset.row ?? "", H(r, n(i), t)), r += n(i);
687
+ for (let i of e) o.set(i.dataset.row ?? "", ce(r, n(i), t)), r += n(i);
674
688
  }
675
689
  for (let t of e.figure.querySelectorAll("[data-row]")) {
676
690
  let e = o.get(t.dataset.row ?? "");
677
691
  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));
678
692
  }
679
693
  }
680
- Ge(e);
681
- }, qe = (e, t, n = !1) => {
694
+ Je(e);
695
+ }, Xe = (e, t, n = !1) => {
682
696
  let r = e.plan;
683
697
  if (!r) return;
684
698
  let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
685
- e.step = i, e.figure.style.setProperty("--_step", String(i)), Ge(e);
699
+ e.step = i, e.figure.style.setProperty("--_step", String(i)), Je(e);
686
700
  let [o, s] = e.controls?.querySelectorAll("button") ?? [];
687
701
  o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
688
702
  bubbles: !0,
@@ -691,7 +705,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
691
705
  steps: r.count
692
706
  }
693
707
  }));
694
- }, Je = (e, t, n) => {
708
+ }, Ze = (e, t, n) => {
695
709
  let r = document.createElement("div");
696
710
  r.className = "tablechart-controls";
697
711
  let i = (r) => {
@@ -720,14 +734,14 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
720
734
  ]), i;
721
735
  };
722
736
  return r.append(i("previous"), i("next")), r;
723
- }, Ye = (e, t, n, r = {
737
+ }, Qe = (e, t, n, r = {
724
738
  x: 0,
725
739
  y: 0,
726
740
  scale: 1
727
741
  }, i = 2, a = 8, o = 12) => {
728
742
  let s = e.getBoundingClientRect(), c = s.width, l = s.height, u = Number.parseFloat(getComputedStyle(e).borderLeftWidth) || 0, d = t.getBoundingClientRect().height / 2 + (i - u) * r.scale, f = o * r.scale, { clientWidth: p, clientHeight: m } = document.documentElement, h = n.top - a, g = m - n.bottom - a, _ = l + d <= h ? !0 : l + d <= g ? !1 : h >= g, v = _ ? n.top - d - l : n.bottom + d, y = n.left + n.width / 2, b = Math.max(a, Math.min(y - c / 2, p - c - a));
729
743
  e.style.left = `${(b - r.x) / r.scale}px`, e.style.top = `${(Math.max(a, Math.min(v, m - l - a)) - r.y) / r.scale}px`, e.dataset.side = _ ? "top" : "bottom", t.style.left = `${Math.max(f, Math.min(y - b, c - f)) / r.scale - u}px`;
730
- }, Xe = "tablechart-tooltip", Ze = [
744
+ }, $e = "tablechart-tooltip", et = [
731
745
  "--tablechart-surface",
732
746
  "--_surface",
733
747
  "--tablechart-tooltip-surface",
@@ -736,51 +750,51 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
736
750
  "--tablechart-tooltip-radius",
737
751
  "--tablechart-tooltip-padding",
738
752
  "--tablechart-tooltip-shadow"
739
- ], Q = null, Qe, $e, et = null, tt = null, nt = 0, rt = () => {
740
- clearTimeout(nt), Q && et && (Q.hidden = !0, et = null, tt = null);
741
- }, it = !1, at = !0, ot = NaN, st = NaN, ct = !1, lt = () => {
742
- if (ct) return;
743
- ct = !0, document.addEventListener("pointermove", (e) => {
744
- e.pointerType === "mouse" && (at = e.screenX !== ot || e.screenY !== st, ot = e.screenX, st = e.screenY, at && (it = !1));
753
+ ], Q = null, tt, nt, rt = null, it = null, at = 0, ot = () => {
754
+ clearTimeout(at), Q && rt && (Q.hidden = !0, rt = null, it = null);
755
+ }, st = !1, ct = !0, lt = NaN, ut = NaN, dt = !1, ft = () => {
756
+ if (dt) return;
757
+ dt = !0, document.addEventListener("pointermove", (e) => {
758
+ e.pointerType === "mouse" && (ct = e.screenX !== lt || e.screenY !== ut, lt = e.screenX, ut = e.screenY, ct && (st = !1));
745
759
  }, {
746
760
  capture: !0,
747
761
  passive: !0
748
762
  });
749
763
  let e = () => {
750
- it = !0, rt();
764
+ st = !0, ot();
751
765
  };
752
766
  document.addEventListener("keydown", e, !0), window.addEventListener("scroll", e, {
753
767
  capture: !0,
754
768
  passive: !0
755
769
  });
756
- }, ut = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, dt = (e) => {
770
+ }, pt = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, mt = (e) => {
757
771
  let t = e.tooltipparent;
758
772
  return (typeof t == "string" ? document.querySelector(t) : t) ?? document.body;
759
- }, ft = () => {
760
- clearTimeout(nt), nt = window.setTimeout(rt, 120);
761
- }, pt = () => {
773
+ }, ht = () => {
774
+ clearTimeout(at), at = window.setTimeout(ot, 120);
775
+ }, gt = () => {
762
776
  let e = document.createElement("div");
763
- return e.className = Xe, e.setAttribute("aria-hidden", "true"), e.hidden = !0, Qe = document.createElement("div"), $e = document.createElement("div"), $e.className = `${Xe}-arrow`, e.append(Qe, $e), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout(nt)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && ft()), document.addEventListener("pointerdown", (t) => {
777
+ return e.className = $e, e.setAttribute("aria-hidden", "true"), e.hidden = !0, tt = document.createElement("div"), nt = document.createElement("div"), nt.className = `${$e}-arrow`, e.append(tt, nt), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout(at)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && ht()), document.addEventListener("pointerdown", (t) => {
764
778
  let n = t.target;
765
- et && !et.plot.contains(n) && !e.contains(n) && rt();
766
- }), window.addEventListener("resize", rt), e;
767
- }, mt = (e, t) => {
779
+ rt && !rt.plot.contains(n) && !e.contains(n) && ot();
780
+ }), window.addEventListener("resize", ot), e;
781
+ }, _t = (e, t) => {
768
782
  let n = t ? t.style.getPropertyValue("--step") : "x";
769
783
  return n === "" || Number(n) < e.step;
770
- }, ht = (e, t) => {
784
+ }, vt = (e, t) => {
771
785
  let n = e.svg.querySelector(`[data-series="${t + 1}"]:not(.tablechart-hole, .tablechart-area:not([data-stacked]))`);
772
786
  if (!n) return;
773
787
  let r = getComputedStyle(n);
774
788
  return r.fill && r.fill !== "none" ? r.fill : r.stroke;
775
- }, gt = (e, t, n) => {
789
+ }, yt = (e, t, n) => {
776
790
  let r = e.series.length > 1, i = [];
777
791
  for (let [n, a] of e.seriesValues.entries()) {
778
- if (!mt(e, a[t])) continue;
792
+ if (!_t(e, a[t])) continue;
779
793
  let o = r ? e.figure.querySelector(`.tablechart-name[data-series="${n + 1}"]`) : null;
780
794
  i.push({
781
795
  name: r ? o?.textContent ?? e.series[n].name : "",
782
796
  value: a[t].textContent ?? "",
783
- colour: r ? ht(e, n) : void 0,
797
+ colour: r ? vt(e, n) : void 0,
784
798
  sample: o ? {
785
799
  marker: o.dataset.marker ?? null,
786
800
  open: o.hasAttribute("data-open"),
@@ -791,11 +805,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
791
805
  });
792
806
  }
793
807
  let a = e.totals[t];
794
- return i.length > 1 && mt(e, a) && i.push({
808
+ return i.length > 1 && _t(e, a) && i.push({
795
809
  name: n.totallabel,
796
810
  value: a.textContent ?? ""
797
811
  }), i;
798
- }, _t = (e, t) => {
812
+ }, bt = (e, t) => {
799
813
  if (e.type.centre && e.values[t]) return e.values[t].getBoundingClientRect();
800
814
  let n = e.pointOf?.(t);
801
815
  if (n) {
@@ -815,49 +829,49 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
815
829
  100
816
830
  ];
817
831
  return new DOMRect(a.left + a.width * o / 100, a.top + a.height * s / 100, a.width * c / 100, a.height * l / 100);
818
- }, vt = (e, t, n) => {
819
- if (clearTimeout(nt), et === e && tt === t) return;
820
- let r = (e.type.tooltip ?? gt)(e, t, n);
821
- if (!r.length) return rt();
822
- et && et !== e && rt(), Q ?? (Q = pt());
832
+ }, xt = (e, t, n) => {
833
+ if (clearTimeout(at), rt === e && it === t) return;
834
+ let r = (e.type.tooltip ?? yt)(e, t, n);
835
+ if (!r.length) return ot();
836
+ rt && rt !== e && ot(), Q ?? (Q = gt());
823
837
  let i = (e, t, n, r = !1, i) => {
824
838
  let a = document.createElement("div");
825
- if (a.className = `${Xe}-line`, n) {
839
+ if (a.className = `${$e}-line`, n) {
826
840
  let e = document.createElement("span");
827
- e.className = `${Xe}-key`, e.style.backgroundColor = 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), i.point && e.style.setProperty("--tablechart-point-color", i.point), e.toggleAttribute("data-open", i.open)), a.append(e);
841
+ e.className = `${$e}-key`, e.style.backgroundColor = 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), i.point && e.style.setProperty("--tablechart-point-color", i.point), e.toggleAttribute("data-open", i.open)), a.append(e);
828
842
  }
829
843
  let o = document.createElement("span");
830
- if (o.className = `${Xe}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
844
+ if (o.className = `${$e}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
831
845
  e && o.append(":");
832
846
  let n = document.createElement("span");
833
- n.className = `${Xe}-value`, n.textContent = t, a.append(n);
847
+ n.className = `${$e}-value`, n.textContent = t, a.append(n);
834
848
  }
835
849
  return a;
836
- }, a = (e.figure.querySelectorAll("tbody tr")[t]?.querySelector("th"))?.textContent?.trim() || e.categories[t]?.textContent || e.rows[t].label, o = r.length === 1 && !r[0].name, s = r.every((e) => e.name && !e.value), c = Re(e.figure, t)?.textContent?.trim(), l = c ? [Object.assign(document.createElement("div"), {
837
- className: `${Xe}-note`,
850
+ }, a = (Y(e.figure)?.querySelectorAll("tbody tr")[t]?.querySelector("th"))?.textContent?.trim() || e.categories[t]?.textContent || e.rows[t].label, o = r.length === 1 && !r[0].name, s = r.every((e) => e.name && !e.value), c = Ve(e.figure, t)?.textContent?.trim(), l = c ? [Object.assign(document.createElement("div"), {
851
+ className: `${$e}-note`,
838
852
  textContent: c
839
853
  })] : [];
840
- Qe.replaceChildren(...s ? [] : [i(a, o ? r[0].value : "", void 0, !0)], ...o ? [] : r.map(({ name: e, value: t, colour: n, sample: r }) => i(e, t, n, !1, r)), ...l);
854
+ tt.replaceChildren(...s ? [] : [i(a, o ? r[0].value : "", void 0, !0)], ...o ? [] : r.map(({ name: e, value: t, colour: n, sample: r }) => i(e, t, n, !1, r)), ...l);
841
855
  let u = getComputedStyle(e.figure);
842
- for (let e of Ze) {
856
+ for (let e of et) {
843
857
  let t = u.getPropertyValue(e).trim();
844
858
  t ? Q.style.setProperty(e, t) : Q.style.removeProperty(e);
845
859
  }
846
860
  Q.style.setProperty("--_color", u.color), Q.style.colorScheme = u.colorScheme, Q.style.fontFamily = u.fontFamily;
847
- let d = dt(n);
848
- Q.parentElement !== d && d.append(Q), et = e, tt = t, Q.hidden = !1, Q.style.left = "0px", Q.style.top = "0px";
861
+ let d = mt(n);
862
+ Q.parentElement !== d && d.append(Q), rt = e, it = t, Q.hidden = !1, Q.style.left = "0px", Q.style.top = "0px";
849
863
  let f = Q.getBoundingClientRect(), p = {
850
864
  x: f.left,
851
865
  y: f.top,
852
- scale: ut(Q, f.width)
853
- }, m = ut(e.plot, e.plot.getBoundingClientRect().width);
854
- Q.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`, Ye(Q, $e, _t(e, t), p);
855
- }, yt = (e, t, n = !1) => {
866
+ scale: pt(Q, f.width)
867
+ }, m = pt(e.plot, e.plot.getBoundingClientRect().width);
868
+ Q.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`, Qe(Q, nt, bt(e, t), p);
869
+ }, St = (e, t, n = !1) => {
856
870
  let { plot: r } = e;
857
- r.setAttribute("data-hover", ""), lt();
871
+ r.setAttribute("data-hover", ""), ft();
858
872
  let i = (t) => {
859
873
  if (e.rowAt) {
860
- let n = r.getBoundingClientRect(), i = ut(r, n.width);
874
+ let n = r.getBoundingClientRect(), i = pt(r, n.width);
861
875
  return e.rowAt((t.clientX - n.left) / i, (t.clientY - n.top) / i);
862
876
  }
863
877
  let n = t.target.closest?.("[data-row]")?.getAttribute("data-row");
@@ -867,13 +881,13 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
867
881
  else if (t.getAttribute("data-row") === String(e + 1)) return !0;
868
882
  return !1;
869
883
  }, s = null, c = (a) => {
870
- if (a.type === "pointerdown") it = !1;
871
- else if (a.pointerType === "mouse" && (!at || it)) return;
884
+ if (a.type === "pointerdown") st = !1;
885
+ else if (a.pointerType === "mouse" && (!ct || st)) return;
872
886
  if (!r.classList.contains("is-placed") || !e.figure.classList.contains("is-shown")) return;
873
- if (n && !e.figure.hasAttribute("data-left-out")) return et === e ? rt() : void 0;
887
+ if (n && !e.figure.hasAttribute("data-left-out")) return rt === e ? ot() : void 0;
874
888
  let c = i(a);
875
- if (s = c, c === null || o(c)) return et === e ? rt() : void 0;
876
- vt(e, c, t);
889
+ if (s = c, c === null || o(c)) return rt === e ? ot() : void 0;
890
+ xt(e, c, t);
877
891
  }, l = (t) => {
878
892
  let n = t.target;
879
893
  return e.svg.contains(n) && n.hasAttribute("data-row") ? n : null;
@@ -887,38 +901,225 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
887
901
  if (!r) return;
888
902
  a.delete(r);
889
903
  let i = Number(r.getAttribute("data-row")) - 1;
890
- s === i && !o(i) && !it && vt(e, i, t);
904
+ s === i && !o(i) && !st && xt(e, i, t);
891
905
  };
892
906
  e.svg.addEventListener("transitionend", u), e.svg.addEventListener("transitioncancel", u), r.addEventListener("pointermove", c), r.addEventListener("pointerdown", c), r.addEventListener("pointerleave", (t) => {
893
- t.pointerType === "mouse" && (s = null, et === e && ft());
907
+ t.pointerType === "mouse" && (s = null, rt === e && ht());
894
908
  });
895
- }, bt = (e) => {
896
- et === e && rt();
897
- }, xt = (e, t, n) => {
898
- let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] = ye(Number.parseFloat(e.dataset.value || "0"), t, n);
909
+ }, Ct = (e) => {
910
+ rt === e && ot();
911
+ }, wt = null, Tt = (e) => {
912
+ if (wt ?? (wt = document.createElement("canvas").getContext("2d", { willReadFrequently: !0 })), !wt) return [
913
+ 0,
914
+ 0,
915
+ 0,
916
+ 1
917
+ ];
918
+ wt.clearRect(0, 0, 1, 1), wt.fillStyle = e, wt.fillRect(0, 0, 1, 1);
919
+ let [t, n, r, i] = wt.getImageData(0, 0, 1, 1).data;
920
+ return [
921
+ t,
922
+ n,
923
+ r,
924
+ i / 255
925
+ ];
926
+ }, Et = ([e, t, n]) => {
927
+ let r = (e) => {
928
+ let t = e / 255;
929
+ return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
930
+ };
931
+ return .2126 * r(e) + .7152 * r(t) + .0722 * r(n);
932
+ }, Dt = (e) => getComputedStyle(e).getPropertyValue("--tablechart-contrast-wcag").trim() === "3" ? 3 : 2, Ot = ([e, t, n]) => {
933
+ let r = .2126729 * (e / 255) ** 2.4 + .7151522 * (t / 255) ** 2.4 + .072175 * (n / 255) ** 2.4;
934
+ return r < .022 ? r + (.022 - r) ** 1.414 : r;
935
+ }, kt = (e, t) => {
936
+ let n = Ot(e), r = Ot(t);
937
+ if (Math.abs(r - n) < 5e-4) return 0;
938
+ let i = r > n ? (r ** .56 - n ** .57) * 1.14 : (r ** .65 - n ** .62) * 1.14;
939
+ return Math.abs(i) < .1 ? 0 : (Math.abs(i) - .027) * 100;
940
+ }, At = (e, t, n) => e === 3 ? kt(t, n) : jt(t, n), jt = (e, t) => {
941
+ let [n, r] = [Et(e), Et(t)].sort((e, t) => t - e);
942
+ return (n + .05) / (r + .05);
943
+ }, Mt = (e, t) => {
944
+ let n = document.createElement("span");
945
+ n.style.color = t, e.append(n);
946
+ let r = Tt(getComputedStyle(n).color);
947
+ return n.remove(), r;
948
+ }, Nt = (e) => {
949
+ let t = [], n = null;
950
+ for (let r = e; r && !n; r = r.parentElement) {
951
+ let { background: e, backgroundColor: i } = r.dataset, a = Tt(i || (e && CSS.supports("color", e) ? e : "") || getComputedStyle(r).backgroundColor);
952
+ a[3] >= 1 ? n = a : a[3] > 0 && t.push(a);
953
+ }
954
+ n ?? (n = Mt(e, "Canvas"));
955
+ for (let [e, r, i, a] of t.reverse()) n = [
956
+ e,
957
+ r,
958
+ i
959
+ ].map((e, t) => e * a + n[t] * (1 - a));
960
+ let r = `rgb(${n.slice(0, 3).map(Math.round).join(" ")})`;
961
+ return e.style.getPropertyValue("--_surface") !== r && (e.style.setProperty("--_surface", r), !0);
962
+ }, Pt = (e) => Mt(e, "var(--tablechart-surface, var(--_surface, Canvas))"), Ft = (e, t) => e.querySelector(`:is(.tablechart-bar, .tablechart-piece, .tablechart-slice)[data-row="${t.dataset.row}"]${t.dataset.series ? `[data-series="${t.dataset.series}"]` : ""}`), It = (e) => {
963
+ let t = getComputedStyle(e);
964
+ return e.classList.contains("tablechart-slice") ? t.stroke : t.fill;
965
+ }, Lt = [
966
+ 255,
967
+ 255,
968
+ 255
969
+ ], Rt = [
970
+ 0,
971
+ 0,
972
+ 0
973
+ ], zt = (e, t, n) => {
974
+ let r = At(n, Lt, e), i = At(n, Rt, e);
975
+ return r >= t ? Lt : i >= t ? Rt : n === 2 && r >= 4.5 || r > i ? Lt : Rt;
976
+ }, Bt = (e) => {
977
+ let t = e.querySelectorAll(".tablechart-value[data-place='inside']");
978
+ if (!t.length) return;
979
+ let n = Ht(e);
980
+ for (let r of t) {
981
+ let t = Ft(e, r);
982
+ !t || r.hasAttribute("data-left-out") || t.classList.contains("tablechart-slice") || r.style.setProperty("--_ink", n(Tt(It(t))));
983
+ }
984
+ }, Vt = (e) => {
985
+ let t = Pt(e).slice(0, 3), n = Et(t) > .179, r = (t, n) => {
986
+ let [r, i, a, o] = Mt(e, `var(${t}, transparent)`);
987
+ return o > 0 ? [
988
+ r,
989
+ i,
990
+ a
991
+ ] : n;
992
+ }, i = Dt(e), a = Number.parseFloat(getComputedStyle(e).getPropertyValue("--tablechart-value-contrast")) || (i === 3 ? 60 : 5), o = Tt(getComputedStyle(e).color).slice(0, 3);
993
+ return {
994
+ method: i,
995
+ needed: a,
996
+ onDark: r("--tablechart-value-on-dark", n ? t : o),
997
+ onLight: r("--tablechart-value-on-light", n ? o : t)
998
+ };
999
+ }, Ht = (e) => {
1000
+ let { method: t, needed: n, onDark: r, onLight: i } = Vt(e);
1001
+ return (e) => {
1002
+ let a = At(t, r, e) > At(t, i, e) ? r : i;
1003
+ return `rgb(${(At(t, a, e) >= n ? a : zt(e, n, t)).join(" ")})`;
1004
+ };
1005
+ }, Ut = (e) => {
1006
+ let t = e.querySelectorAll(".tablechart-name:not([data-place='legend'])");
1007
+ if (!t.length) return;
1008
+ let n = Dt(e), r = n === 3 ? 60 : 4.5, i = Pt(e).slice(0, 3), a = Tt(getComputedStyle(e).color).slice(0, 3);
1009
+ for (let o of t) {
1010
+ let t = e.querySelector(`.tablechart-series[data-series="${o.dataset.series}"]:not([data-muted])`);
1011
+ if (o.style.removeProperty("--_ink"), !t) continue;
1012
+ let s = Tt(getComputedStyle(t).stroke).slice(0, 3);
1013
+ for (let e = 0; e <= 20; e++) {
1014
+ let t = s.map((t, n) => Math.round(t + (a[n] - t) * e / 20));
1015
+ if (!(At(n, t, i) < r && e < 20)) {
1016
+ e && o.style.setProperty("--_ink", `rgb(${t.join(" ")})`);
1017
+ break;
1018
+ }
1019
+ }
1020
+ }
1021
+ }, Wt = (e, t) => {
1022
+ let { method: n, needed: r, onDark: i, onLight: a } = Vt(e), o = {
1023
+ ink: i,
1024
+ fits: t.map(() => !1),
1025
+ count: -1
1026
+ };
1027
+ for (let e of [
1028
+ i,
1029
+ a,
1030
+ Lt,
1031
+ Rt
1032
+ ]) {
1033
+ let i = t.map((t) => At(n, e, t) >= r), a = i.filter(Boolean).length;
1034
+ a > o.count && (o = {
1035
+ ink: e,
1036
+ fits: i,
1037
+ count: a
1038
+ });
1039
+ }
1040
+ return {
1041
+ ink: `rgb(${o.ink.join(" ")})`,
1042
+ fits: o.fits
1043
+ };
1044
+ }, Gt = "tablechart-crosshair", Kt = (e) => {
1045
+ for (let t of e.figure.querySelectorAll(`.${Gt}, .${Gt}-labels`)) t.remove();
1046
+ for (let t of e.categories) t.removeAttribute("data-crossed");
1047
+ }, qt = (e, t) => {
1048
+ let n = e.svg.querySelector(e.series.length > 1 ? `.tablechart-series[data-series="${t + 1}"]` : ".tablechart-series");
1049
+ return n ? getComputedStyle(n).stroke : getComputedStyle(e.figure).color;
1050
+ }, Jt = (e, t, n) => {
1051
+ Kt(e);
1052
+ let r = e.crossingOf?.(t);
1053
+ if (!r || !r.points.length && !r.textAt) return null;
1054
+ let { x: i, from: a, to: o, edge: s, end: c, axis: l, height: u, points: d, textAt: f, snap: p = 0, around: m } = r, h = k / e.plot.clientWidth, g = d.length ? d.reduce((e, t) => Math.abs(t.y - n) < Math.abs(e.y - n) ? t : e) : null, _ = !g || !!f && Math.abs(g.y - n) > p * h, v = g && !_ ? g.y : Math.min(Math.max(n, a), o), y = _ ? [] : f && g ? [g] : d, b = G("g", { class: Gt }), x = m ? [[a, m[0] - 4 * h], [m[1] + 4 * h, o]] : [[a, o]];
1055
+ b.append(...x.filter(([e, t]) => t > e).map(([e, t]) => G("line", {
1056
+ class: `${Gt}-line`,
1057
+ x1: i,
1058
+ x2: i,
1059
+ y1: e,
1060
+ y2: t
1061
+ })), G("line", {
1062
+ class: `${Gt}-line`,
1063
+ x1: s,
1064
+ x2: c,
1065
+ y1: v,
1066
+ y2: v
1067
+ }));
1068
+ let S = e.svg.querySelector(":scope > .tablechart-grid");
1069
+ S ? S.after(b) : e.svg.prepend(b);
1070
+ let C = G("g", { class: Gt });
1071
+ C.append(...y.map((e) => e.dot)), e.svg.append(C);
1072
+ let w = document.createElement("div");
1073
+ w.className = `${Gt}-labels`, w.setAttribute("aria-hidden", "true"), w.inert = !0;
1074
+ let T = Ht(e.figure), E = (e, t, n) => {
1075
+ let r = document.createElement("span");
1076
+ return r.className = `${Gt}-value`, r.textContent = e, r.style.setProperty("--_line", t), r.style.setProperty("--_ink", T(Tt(t))), l && (r.dataset.axis = l), w.append(r), {
1077
+ label: r,
1078
+ y: n
1079
+ };
1080
+ }, D = _ && f ? [E(f(v), getComputedStyle(e.figure).color, v)] : y.map((n) => E(e.seriesValues[n.series]?.[t]?.textContent ?? "", n.colour ?? qt(e, n.series), n.y)), O = document.createElement("span");
1081
+ O.className = `${Gt}-name`, O.style.setProperty("--_text", getComputedStyle(e.figure).color), O.textContent = (Y(e.figure)?.querySelectorAll("tbody tr")[t]?.querySelector("th"))?.textContent?.trim() || e.rows[t].label;
1082
+ let A = e.categories.find((e) => e.getClientRects().length && getComputedStyle(e).visibility !== "hidden");
1083
+ A && O.style.setProperty("--_name-size", getComputedStyle(A).fontSize), w.append(O), e.plot.append(w);
1084
+ let j = Math.max(...D.map(({ label: e }) => e.offsetHeight)) * h + 2 * h, M = (e, t) => {
1085
+ let n = getComputedStyle(e);
1086
+ return Number.parseFloat(n[`padding${t}`]) + Number.parseFloat(n[`border${t}Width`]);
1087
+ }, N = l && D[0] ? Math.max(1, 6 - M(D[0].label, l === "right" ? "Left" : "Right")) : 0;
1088
+ for (let { label: e, y: t } of V(D, j)) e.style.setProperty("--_shift", `${N}px`), q(e, s, Math.min(Math.max(t, a + j / 2), o - j / 2), k, u);
1089
+ let P = O.offsetWidth * h / 2, F = e.plot.getBoundingClientRect().top, I = A ? A.getBoundingClientRect().top + M(A, "Top") - F - M(O, "Top") : 0;
1090
+ q(O, Math.min(Math.max(i, P), k - P), o, k, u), O.style.top = `${Math.max(o / h + 2, I)}px`;
1091
+ let L = O.getBoundingClientRect();
1092
+ for (let t of e.categories) {
1093
+ let e = t.getBoundingClientRect();
1094
+ e.width && e.left < L.right && e.right > L.left && e.top < L.bottom && e.bottom > L.top && t.setAttribute("data-crossed", "");
1095
+ }
1096
+ return _ || !g ? -1 : g.series;
1097
+ }, Yt = (e) => {
1098
+ let { plot: t, figure: n } = e;
1099
+ t.setAttribute("data-hover", "");
1100
+ let r = null, i = () => {
1101
+ r = null, Kt(e);
1102
+ };
1103
+ e.crosshair = { hide: i };
1104
+ let a = (a) => {
1105
+ if (!t.classList.contains("is-placed") || !n.classList.contains("is-built") || !e.rowAt) return;
1106
+ let o = t.getBoundingClientRect(), s = o.width / t.offsetWidth || 1, c = e.rowAt((a.clientX - o.left) / s, (a.clientY - o.top) / s);
1107
+ if (c === null) return i();
1108
+ let l = e.svg.getBoundingClientRect(), u = (a.clientY - l.top) / l.height * e.svg.viewBox.baseVal.height, d = e.crossingOf?.(c), f = d?.points.reduce((e, t) => Math.abs(t.y - u) < Math.abs(e.y - u) ? t : e), p = `${c} ${d?.textAt ? Math.round(u) : f?.series}`;
1109
+ p !== r && (r = Jt(e, c, u) === null ? null : p);
1110
+ };
1111
+ t.addEventListener("pointermove", a), t.addEventListener("pointerdown", a), t.addEventListener("pointerleave", (e) => {
1112
+ e.pointerType === "mouse" && i();
1113
+ }), document.addEventListener("pointerdown", (e) => {
1114
+ r !== null && !t.contains(e.target) && i();
1115
+ });
1116
+ }, Xt = (e, t, n) => {
1117
+ let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] = Se(Number.parseFloat(e.dataset.value || "0"), t, n);
899
1118
  if (e.textContent = r + (r ? a : "") + o + i, a && !r) {
900
1119
  let t = document.createElement("span");
901
1120
  t.className = "tablechart-minus", t.textContent = a, e.prepend(t);
902
1121
  }
903
- }, St = (e, t, n, r) => {
904
- let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
905
- if (!a) return null;
906
- let o = Number(a[1]);
907
- return a[2] === "%" ? o / 100 * k : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
908
- }, Ct = (e, t) => {
909
- let n = St(e, t, "--tablechart-height", "none");
910
- return [n ?? St(e, t, "--tablechart-min-height", "200px") ?? 0, n ?? St(e, t, "--tablechart-max-height", "none") ?? Infinity];
911
- }, wt = (e, t, n) => St(e, t, getComputedStyle(e).getPropertyValue(n).trim() ? n : "--tablechart-corner-radius", "0px") ?? 0, Tt = (e, t, n) => {
912
- let r = e.getAttribute(t);
913
- return r === null ? n : r !== "false";
914
- }, Et = [
915
- "straight",
916
- "step",
917
- "smooth"
918
- ], Dt = (e, t) => {
919
- let n = e.dataset.chartShape;
920
- return n && Et.includes(n) ? n : Et.includes(t.shape) ? t.shape : "straight";
921
- }, Ot = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", kt = 0, At = (e) => Array.from(e.querySelectorAll(`.${i}`)).map((e) => {
1122
+ }, Zt = 0, Qt = (e) => Array.from(e.querySelectorAll(`.${i}`)).map((e) => {
922
1123
  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("; ");
923
1124
  return {
924
1125
  row: Number(e.dataset.row),
@@ -929,7 +1130,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
929
1130
  sideways: e.dataset.grow === "right",
930
1131
  part: s
931
1132
  };
932
- }), jt = {
1133
+ }), $t = {
933
1134
  create: () => null,
934
1135
  draw(e, t, n) {
935
1136
  let { rows: r, y: i, svg: a, breakAt: o } = n;
@@ -956,7 +1157,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
956
1157
  [c + 2 * l, t + o],
957
1158
  [c + i, t - o]
958
1159
  ];
959
- }, 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-${++kt}`, d = G("mask", {
1160
+ }, 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-${++Zt}`, d = G("mask", {
960
1161
  id: u,
961
1162
  maskUnits: "userSpaceOnUse"
962
1163
  });
@@ -968,7 +1169,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
968
1169
  fill: "white"
969
1170
  }));
970
1171
  let f = [], p = i(o);
971
- for (let e of At(a)) {
1172
+ for (let e of Qt(a)) {
972
1173
  let t = e.sideways ? n.breakX : p;
973
1174
  if (t === void 0 || !(e.sideways ? e.x < t && e.x + e.width > t : e.y < p && e.y + e.height > p)) continue;
974
1175
  let [i, o] = e.sideways ? [c(e, t), c(e, t + n.breakGap)] : [c(e, p - n.breakGap), c(e, p)];
@@ -991,16 +1192,16 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
991
1192
  let g = G("defs");
992
1193
  g.appendChild(d), a.prepend(g, h);
993
1194
  }
994
- }, Mt = (e, t) => (t - e) / Math.abs(e) * 100, Nt = (e, t) => {
1195
+ }, en = (e, t) => (t - e) / Math.abs(e) * 100, tn = (e, t) => {
995
1196
  let n = (t, n) => {
996
1197
  let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
997
1198
  return Number.isFinite(r) ? r - 1 : n;
998
1199
  };
999
1200
  return [n("data-from", 0), n("data-to", t - 1)];
1000
- }, Pt = {
1001
- create: xe,
1201
+ }, nn = {
1202
+ create: we,
1002
1203
  draw(t, n, r) {
1003
- let { rows: i, cx: a, y: s, unit: c, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = Nt(t, i.length), _ = i[h], v = i[g];
1204
+ let { rows: i, cx: a, y: s, unit: c, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = tn(t, i.length), _ = i[h], v = i[g];
1004
1205
  if (!_ || !v) {
1005
1206
  console.warn(`[${e}] A bracket points at a row that is not there (row ${h + 1} to ${g + 1}, of ${i.length}).`);
1006
1207
  return;
@@ -1018,9 +1219,9 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1018
1219
  "data-note": r.note,
1019
1220
  points: `${S},${D} ${S - y * .45},${D - y} ${S + y * .45},${D - y}`,
1020
1221
  style: U("--after", m)
1021
- })), n && (J(n, (x + S) / 2, C, k, f), n.style.setProperty("--after", String(m))), Se(n, Mt(_.value, v.value), `${_.value} to ${v.value}`, r);
1222
+ })), n && (q(n, (x + S) / 2, C, k, f), n.style.setProperty("--after", String(m))), Te(n, en(_.value, v.value), `${_.value} to ${v.value}`, r);
1022
1223
  }
1023
- }, Ft = (e, t, n) => {
1224
+ }, rn = (e, t, n) => {
1024
1225
  let r = n.reduce((e, t) => e + t, 0);
1025
1226
  if (e === "mean") return r ? t.reduce((e, t, r) => e + t * n[r], 0) / r : null;
1026
1227
  if (e === "median") {
@@ -1033,25 +1234,25 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1033
1234
  }
1034
1235
  let i = Number.parseFloat(e);
1035
1236
  return Number.isFinite(i) ? i : null;
1036
- }, It = {
1237
+ }, an = {
1037
1238
  create(e, t) {
1038
1239
  if (!e.textContent?.trim()) return null;
1039
- let n = xe(e, t);
1240
+ let n = we(e, t);
1040
1241
  return n.dataset.kind = "reference", n;
1041
1242
  },
1042
1243
  draw(t, n, r) {
1043
1244
  let { rows: i, cx: a, y: o, x: c, height: l, unit: u, svg: d, after: f } = r, p = i.filter((e) => !e.isTotal && !e.missing), m = t.hasAttribute("data-name"), g = (t.getAttribute(m ? "data-name" : "data-value") ?? "").trim(), _, v, y;
1044
1245
  if (m) {
1045
- let t = p.map((e) => be(e.label));
1246
+ let t = p.map((e) => Ce(e.label));
1046
1247
  if (r.categories[0]?.parentElement?.dataset.place === "beside" || t.some(Number.isNaN)) {
1047
1248
  console.warn(`[${e}] A reference line among the names needs names that are numbers, under columns or points.`);
1048
1249
  return;
1049
1250
  }
1050
- let n = Ft(g, t, p.map((e) => e.value)), o = n === null ? -1 : t.findIndex((e, r) => e <= n && n <= (t[r + 1] ?? e)), [s, c] = [p[o], p[o + 1] ?? p[o]].map((e) => a(i.indexOf(e))), l = n === null || o < 0 || t[o + 1] === void 0 || t[o + 1] === t[o] ? 0 : (n - t[o]) / (t[o + 1] - t[o]);
1251
+ let n = rn(g, t, p.map((e) => e.value)), o = n === null ? -1 : t.findIndex((e, r) => e <= n && n <= (t[r + 1] ?? e)), [s, c] = [p[o], p[o + 1] ?? p[o]].map((e) => a(i.indexOf(e))), l = n === null || o < 0 || t[o + 1] === void 0 || t[o + 1] === t[o] ? 0 : (n - t[o]) / (t[o + 1] - t[o]);
1051
1252
  y = n, v = o < 0 ? null : s + l * (c - s), _ = !1;
1052
1253
  } else {
1053
1254
  let e = !!r.frame && t.getAttribute("data-axis") === "y", n = r.frame ? r.series.flatMap((e, t) => e.group ? [] : [t])[+!!e] ?? 0 : 0;
1054
- y = Ft(g, p.map((e) => e.cells[n]?.value ?? e.value), p.map(() => 1)), _ = e || !c, v = y === null ? null : c && !e ? c(y) : o(y);
1255
+ y = rn(g, p.map((e) => e.cells[n]?.value ?? e.value), p.map(() => 1)), _ = e || !c, v = y === null ? null : c && !e ? c(y) : o(y);
1055
1256
  }
1056
1257
  if (v === null || y === null) {
1057
1258
  console.warn(`[${e}] A reference line needs a number, "mean" or "median", not "${g}".`);
@@ -1085,7 +1286,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1085
1286
  },
1086
1287
  style: U("--after", f)
1087
1288
  }), d.querySelector(`:scope > .${h}`)), n) {
1088
- let e = P(n).width * u, t = P(n).height * u, i = 4 * u, a = _ ? [
1289
+ let e = I(n).width * u, t = I(n).height * u, i = 4 * u, a = _ ? [
1089
1290
  [
1090
1291
  S - e,
1091
1292
  v - t / 2,
@@ -1127,17 +1328,17 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1127
1328
  e,
1128
1329
  t
1129
1330
  ]
1130
- ]), [o] = te([a], r.taken, [
1331
+ ]), [o] = N([a], r.taken, [
1131
1332
  0,
1132
1333
  0,
1133
1334
  k,
1134
1335
  l
1135
1336
  ]), s = a[o ?? 0];
1136
- r.taken.push(s), J(n, s[0] + e / 2, s[1] + t / 2, k, l), n.style.setProperty("--after", String(f)), (g === "mean" || g === "median") && Se(n, y, `the ${g}`, r, "");
1337
+ r.taken.push(s), q(n, s[0] + e / 2, s[1] + t / 2, k, l), n.style.setProperty("--after", String(f)), (g === "mean" || g === "median") && Te(n, y, `the ${g}`, r, "");
1137
1338
  }
1138
1339
  }
1139
- }, Lt = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, Rt = {
1140
- create: xe,
1340
+ }, on = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, sn = {
1341
+ create: we,
1141
1342
  draw(e, t, n) {
1142
1343
  let { rows: r, cx: i, y: a, unit: s, labelHeight: c, height: u, svg: d, values: f, after: p } = n, m = r[0], h = r[r.length - 1];
1143
1344
  if (!m || !h) return;
@@ -1150,54 +1351,54 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1150
1351
  y -= D * _, b -= O * _, x += D * _, S += O * _;
1151
1352
  let A = Number.parseFloat(e.getAttribute("data-at") || "0.5");
1152
1353
  if (t) {
1153
- let e = y + (x - y) * A, n = b + (S - b) * A, o = P(t).width * s / 2, l = n + P(t).height * s / 2 + 8 * s, u = 0;
1354
+ let e = y + (x - y) * A, n = b + (S - b) * A, o = I(t).width * s / 2, l = n + I(t).height * s / 2 + 8 * s, u = 0;
1154
1355
  r.forEach((t, n) => {
1155
- let r = (f[n] ? P(f[n]).width : 0) * s / 2;
1356
+ let r = (f[n] ? I(f[n]).width : 0) * s / 2;
1156
1357
  if (Math.abs(i(n) - e) >= o + r) return;
1157
1358
  let d = a(t.value) - 7 * s - c;
1158
1359
  u = Math.max(u, l - d);
1159
1360
  }), b -= u, S -= u;
1160
1361
  }
1161
- let j = x - D * v, ee = S - O * v, te = Math.hypot(j - y, ee - b) / s + 1;
1362
+ let j = x - D * v, M = S - O * v, N = Math.hypot(j - y, M - b) / s + 1;
1162
1363
  d.appendChild(G("line", {
1163
1364
  class: o,
1164
1365
  "data-note": n.note,
1165
1366
  x1: y,
1166
1367
  y1: b,
1167
1368
  x2: j,
1168
- y2: ee,
1169
- style: `--len:${te.toFixed(1)}; ${U("--after", p)}`
1369
+ y2: M,
1370
+ style: `--len:${N.toFixed(1)}; ${U("--after", p)}`
1170
1371
  }));
1171
- let M = -O, N = D, F = v * .42;
1372
+ let P = -O, F = D, L = v * .42;
1172
1373
  d.appendChild(G("polygon", {
1173
1374
  class: l,
1174
1375
  "data-note": n.note,
1175
1376
  points: [
1176
1377
  `${x},${S}`,
1177
- `${j + M * F},${ee + N * F}`,
1178
- `${j - M * F},${ee - N * F}`
1378
+ `${j + P * L},${M + F * L}`,
1379
+ `${j - P * L},${M - F * L}`
1179
1380
  ].join(" "),
1180
1381
  style: U("--after", p)
1181
- })), t && (J(t, y + (x - y) * A, b + (S - b) * A, k, u), t.style.setProperty("--after", String(p)));
1182
- let I = Number.parseFloat(e.getAttribute("data-years") || "");
1183
- !Number.isNaN(I) && I > 0 && Se(t, Lt(m.value, h.value, I), `${m.value} to ${h.value} over ${I} years`, n);
1382
+ })), t && (q(t, y + (x - y) * A, b + (S - b) * A, k, u), t.style.setProperty("--after", String(p)));
1383
+ let R = Number.parseFloat(e.getAttribute("data-years") || "");
1384
+ !Number.isNaN(R) && R > 0 && Te(t, on(m.value, h.value, R), `${m.value} to ${h.value} over ${R} years`, n);
1184
1385
  }
1185
- }, zt = (e, t, n, r, i) => {
1386
+ }, cn = (e, t, n, r, i) => {
1186
1387
  if (!r) return e / t * n;
1187
1388
  let { lo: a, hi: o, gap: s, share: c } = r, l = n * c, u = (n - l - i) / (a + (t - o)), d = l / (o - a);
1188
1389
  return e <= a ? e * u : e <= s ? a * u + (e - a) * d : e <= o ? a * u + (e - a) * d + i : a * u + l + i + (e - o) * u;
1189
- }, Bt = (e, t, n) => {
1390
+ }, ln = (e, t, n) => {
1190
1391
  let r = e.some((e) => e.kind === "up" || e.kind === "down"), i = n ? n.map((e) => e.top) : [...e.flatMap((e) => [
1191
1392
  e.from,
1192
1393
  e.to,
1193
1394
  e.value
1194
1395
  ]), ...t], a = r ? e.flatMap((e) => [e.from, e.to]) : n ? n.map((e) => e.bottom) : t;
1195
1396
  return {
1196
- extent: Math.max(Y(i), 0),
1197
- depth: Math.min(-Y(a.map((e) => -e)), 0),
1397
+ extent: Math.max(J(i), 0),
1398
+ depth: Math.min(-J(a.map((e) => -e)), 0),
1198
1399
  steps: r
1199
1400
  };
1200
- }, Vt = (e) => {
1401
+ }, un = (e) => {
1201
1402
  let { from: t, to: n, size: r, ceiling: i, extent: a, depth: o, breakable: s, segments: c } = e, l = [];
1202
1403
  if (t === null && n === null) return {
1203
1404
  squeeze: null,
@@ -1223,7 +1424,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1223
1424
  squeeze: null,
1224
1425
  problems: l
1225
1426
  };
1226
- }, Ht = {
1427
+ }, dn = {
1227
1428
  segments: (e) => e.map((e) => ({
1228
1429
  ...e,
1229
1430
  from: 0,
@@ -1244,60 +1445,60 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1244
1445
  categories: "beside",
1245
1446
  headroom: () => 0,
1246
1447
  draw(e) {
1247
- let { segments: t, height: n, unit: r, svg: o, values: s, categories: c, config: l, barMax: u } = e, d = e.series.length > 1, f = Math.max(Y(c.map((e) => P(e).width * r)), 0), p = Math.min(f + 10 * r, k * .42);
1448
+ let { segments: t, height: n, unit: r, svg: o, values: s, categories: c, config: l, barMax: u } = e, d = e.series.length > 1, f = Math.max(J(c.map((e) => I(e).width * r)), 0), p = Math.min(f + 10 * r, k * .42);
1248
1449
  c[0]?.parentElement?.style.setProperty("--_beside", `${((p - 8 * r) / k * 100).toFixed(2)}%`);
1249
- let m = k - 4 * r, h = e.stacked ? Math.max(Y(e.rows.map((t) => Ae(t, e.series.length).top)), 0) || 1 : Math.max(Y(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = e.stacked ? Math.max(Y(e.rows.map((t) => -Ae(t, e.series.length).bottom)), 0) : Math.max(Y(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => -e.value))), 0), _ = Math.max(h, e.domain?.[1] ?? 0), v = Math.max(g, -(e.domain?.[0] ?? 0)), y = Math.max(_, e.squeeze?.hi ?? 0) + v, b = (t, n) => zt(Math.abs(t), y, n, e.squeeze, e.breakGap), x = n / t.length, S = (e) => (e + .5) * x, C = Math.min(x * l.barfill, u), w = De(x, e.series.length, u), T = s[0] ?? e.totals[0], E = T ? P(T).height * r * .56 : 0, D = Math.max(((d && !e.stacked ? w.size : C) - E) / 2, 5 * r), O = (e) => P(e).width * r, A = (e) => e.length ? Y(e.map(O)) + D + 4 * r : 0, j = (t, n) => (e.rows[n].cells[t] ?? e.rows[n].cells[0]).value, ee = e.seriesValues.flatMap((e, t) => e.map((e, n) => ({
1450
+ let m = k - 4 * r, h = e.stacked ? Math.max(J(e.rows.map((t) => Ne(t, e.series.length).top)), 0) || 1 : Math.max(J(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = e.stacked ? Math.max(J(e.rows.map((t) => -Ne(t, e.series.length).bottom)), 0) : Math.max(J(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => -e.value))), 0), _ = Math.max(h, e.domain?.[1] ?? 0), v = Math.max(g, -(e.domain?.[0] ?? 0)), y = Math.max(_, e.squeeze?.hi ?? 0) + v, b = (t, n) => cn(Math.abs(t), y, n, e.squeeze, e.breakGap), x = n / t.length, S = (e) => (e + .5) * x, C = Math.min(x * l.barfill, u), w = Ae(x, e.series.length, u), T = s[0] ?? e.totals[0], E = T ? I(T).height * r * .56 : 0, D = Math.max(((d && !e.stacked ? w.size : C) - E) / 2, 5 * r), O = (e) => I(e).width * r, A = (e) => e.length ? J(e.map(O)) + D + 4 * r : 0, j = (t, n) => (e.rows[n].cells[t] ?? e.rows[n].cells[0]).value, M = e.seriesValues.flatMap((e, t) => e.map((e, n) => ({
1250
1451
  label: e,
1251
1452
  value: j(t, n)
1252
- }))), te = (t) => {
1253
- let n = Ae(e.rows[t], e.series.length);
1453
+ }))), N = (t) => {
1454
+ let n = Ne(e.rows[t], e.series.length);
1254
1455
  return n.top === 0 && n.bottom < 0;
1255
- }, M = e.stacked ? A(e.totals.filter((e, t) => !te(t))) : d ? A(ee.filter((e) => e.value >= 0).map((e) => e.label)) : 0, N = e.stacked ? A(e.totals.filter((e, t) => te(t))) : d ? A(ee.filter((e) => e.value < 0).map((e) => e.label)) : 0, F = (t, n) => e.labels === "inside" && R(t, n, r), I = d && !e.stacked && e.labels === "inside" && !!T && P(T).height * r <= w.size;
1256
- if (I && (M = N = 0), I || !d && !e.stacked) {
1257
- let e = d ? ee.filter(({ label: e }) => e.dataset.missing === void 0) : t.map((e, t) => ({
1456
+ }, P = e.stacked ? A(e.totals.filter((e, t) => !N(t))) : d ? A(M.filter((e) => e.value >= 0).map((e) => e.label)) : 0, F = e.stacked ? A(e.totals.filter((e, t) => N(t))) : d ? A(M.filter((e) => e.value < 0).map((e) => e.label)) : 0, L = (t, n) => e.labels === "inside" && z(t, n, r), R = d && !e.stacked && e.labels === "inside" && !!T && I(T).height * r <= w.size;
1457
+ if (R && (P = F = 0), R || !d && !e.stacked) {
1458
+ let e = d ? M.filter(({ label: e }) => e.dataset.missing === void 0) : t.map((e, t) => ({
1258
1459
  label: s[t],
1259
1460
  value: e.value
1260
1461
  }));
1261
1462
  for (let t = 0; t < 3; t++) {
1262
- let t = m - p - M - N, n = e.filter(({ label: e, value: n }) => !F(e, b(n, t))), r = A(n.filter(({ value: e }) => e >= 0).map(({ label: e }) => e)), i = A(n.filter(({ value: e }) => e < 0).map(({ label: e }) => e));
1263
- if (r <= M && i <= N) break;
1264
- M = Math.max(M, r), N = Math.max(N, i);
1463
+ let t = m - p - P - F, n = e.filter(({ label: e, value: n }) => !L(e, b(n, t))), r = A(n.filter(({ value: e }) => e >= 0).map(({ label: e }) => e)), i = A(n.filter(({ value: e }) => e < 0).map(({ label: e }) => e));
1464
+ if (r <= P && i <= F) break;
1465
+ P = Math.max(P, r), F = Math.max(F, i);
1265
1466
  }
1266
1467
  }
1267
- let L = m - p - M - N, B = p + N + b(v, L), V = (e) => e < 0 ? B - b(e, L) : B + b(e, L);
1268
- if (e.squeeze && (e.breakX = V(e.squeeze.gap)), e.x = V, e.stacked) {
1468
+ let ee = m - p - P - F, V = p + F + b(v, ee), H = (e) => e < 0 ? V - b(e, ee) : V + b(e, ee);
1469
+ if (e.squeeze && (e.breakX = H(e.squeeze.gap)), e.x = H, e.stacked) {
1269
1470
  let t = e.length("--tablechart-stack-gap", "1px") ?? r;
1270
1471
  e.rows.forEach((i, a) => {
1271
- let o = Ae(i, e.series.length), s = Fe(e, i, a, { "data-grow": "right" }, o.bottom < 0 ? `${B - V(o.bottom)}px center` : ""), l = S(a) - C / 2, u = ke(i, e.series.length);
1472
+ let o = Ne(i, e.series.length), s = Re(e, i, a, { "data-grow": "right" }, o.bottom < 0 ? `${V - H(o.bottom)}px center` : ""), l = S(a) - C / 2, u = Me(i, e.series.length);
1272
1473
  u.forEach(({ from: i, to: o, cell: c }, d) => {
1273
1474
  let f = e.seriesValues[d][a];
1274
1475
  if (f.dataset.place = "none", c.missing || o === i) return;
1275
- let p = Math.min(V(i), V(o)), m = Math.max(V(i), V(o)), h = Pe(u, d) ? Math.min(t, (m - p) / 2) : 0, [g, _] = V(o) > V(i) ? [p, m - h] : [p + h, m];
1476
+ let p = Math.min(H(i), H(o)), m = Math.max(H(i), H(o)), h = Le(u, d) ? Math.min(t, (m - p) / 2) : 0, [g, _] = H(o) > H(i) ? [p, m - h] : [p + h, m];
1276
1477
  s(d, {
1277
1478
  x: g,
1278
1479
  y: l,
1279
1480
  width: Math.max(_ - g, 1),
1280
1481
  height: C,
1281
1482
  ...o < i && { "data-grow": "left" },
1282
- ...!Pe(u, d) && Ne(e, o < i ? "left" : "right")
1283
- }), f.dataset.place = "inside", f.toggleAttribute("data-left-out", !R(f, m - p, r) || P(f).height * r > C), Me(f, e, d), J(f, (p + m) / 2, S(a), k, n);
1483
+ ...!Le(u, d) && Ie(e, o < i ? "left" : "right")
1484
+ }), f.dataset.place = "inside", f.toggleAttribute("data-left-out", !z(f, m - p, r) || I(f).height * r > C), Fe(f, e, d), q(f, (p + m) / 2, S(a), k, n);
1284
1485
  });
1285
1486
  let d = e.totals[a];
1286
- d && (d.dataset.place = te(a) ? "before" : "after", J(d, te(a) ? V(o.bottom) - D : V(o.top) + D, S(a), k, n));
1487
+ d && (d.dataset.place = N(a) ? "before" : "after", q(d, N(a) ? H(o.bottom) - D : H(o.top) + D, S(a), k, n));
1287
1488
  let f = c[a];
1288
- f && J(f, p - 8 * r, S(a), k, n);
1489
+ f && q(f, p - 8 * r, S(a), k, n);
1289
1490
  }), o.appendChild(G("line", {
1290
1491
  class: a,
1291
- x1: B,
1292
- x2: B,
1492
+ x1: V,
1493
+ x2: V,
1293
1494
  y1: 0,
1294
1495
  y2: n
1295
1496
  }));
1296
1497
  return;
1297
1498
  }
1298
1499
  if (d) {
1299
- let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = z(e.plot, t, (e) => ({
1300
- size: P(e).height * r,
1500
+ let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = B(e.plot, t, (e) => ({
1501
+ size: I(e).height * r,
1301
1502
  room: w.size + w.gap * .5
1302
1503
  }), "--_fit");
1303
1504
  e.rows.forEach((t, a) => {
@@ -1307,61 +1508,61 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1307
1508
  d.dataset.place = "none";
1308
1509
  return;
1309
1510
  }
1310
- let f = V(u.value), p = u.value < 0, m = S(a) + w.offset(l), h = Math.max(Math.abs(f - B), 1);
1511
+ let f = H(u.value), p = u.value < 0, m = S(a) + w.offset(l), h = Math.max(Math.abs(f - V), 1);
1311
1512
  u.value !== 0 && o.appendChild(G("rect", {
1312
1513
  class: K(i, t),
1313
1514
  "data-kind": "bar",
1314
1515
  "data-row": a + 1,
1315
1516
  "data-grow": p ? "left" : "right",
1316
- x: p ? B - h : B,
1517
+ x: p ? V - h : V,
1317
1518
  y: m,
1318
1519
  width: h,
1319
1520
  height: w.size,
1320
- ...Ne(e, p ? "left" : "right"),
1321
- ...Oe(e, t, l)
1521
+ ...Ie(e, p ? "left" : "right"),
1522
+ ...je(e, t, l)
1322
1523
  }));
1323
- let g = I && F(d, Math.abs(f - B)), _ = Math.max(Math.min(D, Math.abs(f - B) - O(d) - 6 * r), 6 * r), v = p ? 1 : -1;
1324
- d.dataset.place = g ? "inside" : p ? "before" : "after", d.toggleAttribute("data-left-out", !s), g && Me(d, e, l), J(d, g ? e.insideAlign === "center" ? (B + f) / 2 : e.insideAlign === "start" ? B - v * (_ + O(d) / 2) : f + v * (_ + O(d) / 2) : p ? f - D : f + D, m + w.size / 2, k, n);
1524
+ let g = R && L(d, Math.abs(f - V)), _ = Math.max(Math.min(D, Math.abs(f - V) - O(d) - 6 * r), 6 * r), v = p ? 1 : -1;
1525
+ d.dataset.place = g ? "inside" : p ? "before" : "after", d.toggleAttribute("data-left-out", !s), g && Fe(d, e, l), q(d, g ? e.insideAlign === "center" ? (V + f) / 2 : e.insideAlign === "start" ? V - v * (_ + O(d) / 2) : f + v * (_ + O(d) / 2) : p ? f - D : f + D, m + w.size / 2, k, n);
1325
1526
  });
1326
1527
  let l = c[a];
1327
- l && J(l, p - 8 * r, S(a), k, n);
1528
+ l && q(l, p - 8 * r, S(a), k, n);
1328
1529
  }), o.appendChild(G("line", {
1329
1530
  class: a,
1330
- x1: B,
1331
- x2: B,
1531
+ x1: V,
1532
+ x2: V,
1332
1533
  y1: 0,
1333
1534
  y2: n
1334
1535
  }));
1335
1536
  return;
1336
1537
  }
1337
- let ne = t.map((e, t) => F(s[t], Math.abs(V(e.value) - B)));
1538
+ let te = t.map((e, t) => L(s[t], Math.abs(H(e.value) - V)));
1338
1539
  t.forEach((t, a) => {
1339
- let l = V(t.value), u = S(a), d = t.value < 0, f = Math.abs(l - B), m = Math.max(f, 1);
1540
+ let l = H(t.value), u = S(a), d = t.value < 0, f = Math.abs(l - V), m = Math.max(f, 1);
1340
1541
  t.value !== 0 && o.appendChild(G("rect", {
1341
1542
  class: K(i, t),
1342
1543
  "data-kind": t.kind,
1343
1544
  "data-row": a + 1,
1344
1545
  "data-grow": d ? "left" : "right",
1345
- x: d ? B - m : B,
1546
+ x: d ? V - m : V,
1346
1547
  y: u - C / 2,
1347
1548
  width: m,
1348
1549
  height: C,
1349
- ...Ne(e, d ? "left" : "right"),
1550
+ ...Ie(e, d ? "left" : "right"),
1350
1551
  style: U("--i", t.slot)
1351
1552
  }));
1352
1553
  let h = s[a], g = Math.max(Math.min(D, f - O(h) - 6 * r), 6 * r), _ = d ? 1 : -1;
1353
- h.dataset.place = ne[a] ? "inside" : d ? "before" : "after", h.dataset.kind = t.kind, J(h, ne[a] ? e.insideAlign === "center" ? (B + l) / 2 : e.insideAlign === "start" ? B - _ * (g + O(h) / 2) : l + _ * (g + O(h) / 2) : l - _ * D, u, k, n);
1554
+ h.dataset.place = te[a] ? "inside" : d ? "before" : "after", h.dataset.kind = t.kind, q(h, te[a] ? e.insideAlign === "center" ? (V + l) / 2 : e.insideAlign === "start" ? V - _ * (g + O(h) / 2) : l + _ * (g + O(h) / 2) : l - _ * D, u, k, n);
1354
1555
  let v = c[a];
1355
- v && J(v, p - 8 * r, u, k, n);
1556
+ v && q(v, p - 8 * r, u, k, n);
1356
1557
  }), o.appendChild(G("line", {
1357
1558
  class: a,
1358
- x1: B,
1359
- x2: B,
1559
+ x1: V,
1560
+ x2: V,
1360
1561
  y1: 0,
1361
1562
  y2: n
1362
1563
  }));
1363
1564
  }
1364
- }, Ut = {
1565
+ }, fn = {
1365
1566
  segments: (e) => e.map((e) => ({
1366
1567
  ...e,
1367
1568
  from: 0,
@@ -1381,24 +1582,24 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1381
1582
  if (e.stacked) {
1382
1583
  let t = e.length("--tablechart-stack-gap", "1px") ?? c;
1383
1584
  e.rows.forEach((i, a) => {
1384
- let l = Ae(i, e.series.length), u = Fe(e, i, a, {}, l.bottom < 0 ? `center ${p - r(l.top)}px` : ""), d = n(a) - o / 2, f = ke(i, e.series.length);
1585
+ let l = Ne(i, e.series.length), u = Re(e, i, a, {}, l.bottom < 0 ? `center ${p - r(l.top)}px` : ""), d = n(a) - o / 2, f = Me(i, e.series.length);
1385
1586
  f.forEach(({ from: i, to: l, cell: p }, m) => {
1386
1587
  let h = e.seriesValues[m][a];
1387
1588
  if (h.dataset.place = "none", p.missing || l === i) return;
1388
- let g = Math.min(r(l), r(i)), _ = Math.max(r(l), r(i)), v = Pe(f, m) ? Math.min(t, (_ - g) / 2) : 0, [y, b] = r(l) < r(i) ? [g + v, _] : [g, _ - v];
1589
+ let g = Math.min(r(l), r(i)), _ = Math.max(r(l), r(i)), v = Le(f, m) ? Math.min(t, (_ - g) / 2) : 0, [y, b] = r(l) < r(i) ? [g + v, _] : [g, _ - v];
1389
1590
  u(m, {
1390
1591
  x: d,
1391
1592
  y,
1392
1593
  width: o,
1393
1594
  height: Math.max(b - y, 1),
1394
1595
  ...l < i && { "data-grow": "down" },
1395
- ...!Pe(f, m) && Ne(e, l < i ? "bottom" : "top")
1396
- }), h.dataset.place = "inside", h.toggleAttribute("data-left-out", !L(h, _ - g, c) || P(h).width * c > o - 4 * c), Me(h, e, m), J(h, n(a), (g + _) / 2, k, s);
1596
+ ...!Le(f, m) && Ie(e, l < i ? "bottom" : "top")
1597
+ }), h.dataset.place = "inside", h.toggleAttribute("data-left-out", !ee(h, _ - g, c) || I(h).width * c > o - 4 * c), Fe(h, e, m), q(h, n(a), (g + _) / 2, k, s);
1397
1598
  });
1398
1599
  let m = e.totals[a];
1399
1600
  if (m) {
1400
1601
  let e = l.top === 0 && l.bottom < 0;
1401
- m.dataset.place = e ? "below" : "outside", J(m, n(a), e ? r(l.bottom) + 4 * c : r(l.top) - 4 * c, k, s);
1602
+ m.dataset.place = e ? "below" : "outside", q(m, n(a), e ? r(l.bottom) + 4 * c : r(l.top) - 4 * c, k, s);
1402
1603
  }
1403
1604
  }), l.appendChild(G("line", {
1404
1605
  class: a,
@@ -1410,10 +1611,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1410
1611
  return;
1411
1612
  }
1412
1613
  if (e.own.length > 1) {
1413
- let t = De(n(1) - n(0) || n(0) * 2, e.own.length, e.barMax), o = e.own.flatMap((t) => e.seriesValues[t]).filter((e) => e.dataset.missing === void 0), u = z(e.plot, o, (e) => ({
1414
- size: P(e).width * c,
1614
+ let t = Ae(n(1) - n(0) || n(0) * 2, e.own.length, e.barMax), o = e.own.flatMap((t) => e.seriesValues[t]).filter((e) => e.dataset.missing === void 0), u = B(e.plot, o, (e) => ({
1615
+ size: I(e).width * c,
1415
1616
  room: t.size + t.gap * .5
1416
- }), "--_fit"), m = d === "inside" && !I(o, t.size, c), h = o[0] ? P(o[0]).height * c * .56 : 0, g = Math.min(...o.map((e) => (t.size - P(e).width * c) / 2));
1617
+ }), "--_fit"), m = d === "inside" && !R(o, t.size, c), h = o[0] ? I(o[0]).height * c * .56 : 0, g = Math.min(...o.map((e) => (t.size - I(e).width * c) / 2));
1417
1618
  e.rows.forEach((a, o) => {
1418
1619
  e.own.forEach((d, _) => {
1419
1620
  let v = a.cells[d] ?? a.cells[0], y = e.seriesValues[d][o], b = n(o) + t.offset(_);
@@ -1431,11 +1632,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1431
1632
  y: S ? p : p - C,
1432
1633
  width: t.size,
1433
1634
  height: C,
1434
- ...Ne(e, S ? "bottom" : "top"),
1435
- ...Oe(e, a, d)
1635
+ ...Ie(e, S ? "bottom" : "top"),
1636
+ ...je(e, a, d)
1436
1637
  }));
1437
- let w = m && L(y, Math.abs(p - x), c), T = S ? -1 : 1, E = Math.min(g, (Math.abs(p - x) - h) / 2), D = f === "center" ? (x + p) / 2 : f === "start" ? p - T * (E + h / 2) : x + T * (E + h / 2);
1438
- y.dataset.place = w ? "inside" : S ? "below" : "outside", y.toggleAttribute("data-left-out", !u), w && Me(y, e, d), J(y, b + t.size / 2, w ? D : S ? x + 4 * c : x - 4 * c, k, s);
1638
+ let w = m && ee(y, Math.abs(p - x), c), T = S ? -1 : 1, E = Math.min(g, (Math.abs(p - x) - h) / 2), D = f === "center" ? (x + p) / 2 : f === "start" ? p - T * (E + h / 2) : x + T * (E + h / 2);
1639
+ y.dataset.place = w ? "inside" : S ? "below" : "outside", y.toggleAttribute("data-left-out", !u), w && Fe(y, e, d), q(y, b + t.size / 2, w ? D : S ? x + 4 * c : x - 4 * c, k, s);
1439
1640
  });
1440
1641
  }), l.appendChild(G("line", {
1441
1642
  class: a,
@@ -1446,12 +1647,12 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1446
1647
  }));
1447
1648
  return;
1448
1649
  }
1449
- let m = e.own[0], h = e.own.length < e.series.length, g = I(u, o, c), _ = t.map((e, t) => d === "inside" && !g && !e.missing && L(u[t], Math.abs(p - r(e.value)), c)), v = u[0] ? P(u[0]).height * c * .56 : 0, y = Infinity;
1450
- for (let [e, t] of u.entries()) _[e] && (y = Math.min(y, (o - P(t).width * c) / 2));
1650
+ let m = e.own[0], h = e.own.length < e.series.length, g = R(u, o, c), _ = t.map((e, t) => d === "inside" && !g && !e.missing && ee(u[t], Math.abs(p - r(e.value)), c)), v = u[0] ? I(u[0]).height * c * .56 : 0, y = Infinity;
1651
+ for (let [e, t] of u.entries()) _[e] && (y = Math.min(y, (o - I(t).width * c) / 2));
1451
1652
  t.forEach((t, a) => {
1452
1653
  let d = r(t.value), g = t.value < 0;
1453
1654
  if (t.missing) {
1454
- J(u[a], n(a), p - 4 * c, k, s), u[a].dataset.place = "outside";
1655
+ q(u[a], n(a), p - 4 * c, k, s), u[a].dataset.place = "outside";
1455
1656
  return;
1456
1657
  }
1457
1658
  let b = Math.max(Math.abs(p - d), 1);
@@ -1464,12 +1665,12 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1464
1665
  y: g ? p : p - b,
1465
1666
  width: o,
1466
1667
  height: b,
1467
- ...Ne(e, g ? "bottom" : "top"),
1668
+ ...Ie(e, g ? "bottom" : "top"),
1468
1669
  style: U("--i", t.slot),
1469
- ...h && Oe(e, t, m)
1670
+ ...h && je(e, t, m)
1470
1671
  }));
1471
1672
  let x = g ? -1 : 1, S = Math.min(y, (Math.abs(p - d) - v) / 2), C = f === "center" ? (d + p) / 2 : f === "start" ? p - x * (S + v / 2) : d + x * (S + v / 2), w = g ? d + 4 * c : d - 4 * c;
1472
- J(u[a], n(a), _[a] ? C : w, k, s), u[a].dataset.place = _[a] ? "inside" : g ? "below" : "outside", h && _[a] && Me(u[a], e, m);
1673
+ q(u[a], n(a), _[a] ? C : w, k, s), u[a].dataset.place = _[a] ? "inside" : g ? "below" : "outside", h && _[a] && Fe(u[a], e, m);
1473
1674
  }), l.appendChild(G("line", {
1474
1675
  class: a,
1475
1676
  x1: 0,
@@ -1478,10 +1679,13 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1478
1679
  y2: p
1479
1680
  }));
1480
1681
  }
1481
- }, Wt = (e, t, n, r, i, a, o, s) => {
1682
+ }, pn = (e, t, n, r, i, a, o, s) => {
1482
1683
  let c = (r, a) => [e + r * Math.cos(n) - i * a * Math.sin(n), t + r * Math.sin(n) + i * a * Math.cos(n)], l = s ? r - o : r + o, u = Math.sqrt(Math.max(l ** 2 - (a + o) ** 2, 0)), d = r / l, f = s ? r + 8 : r - 3, p = f / l, m = Math.max(a - 1, 0), [h, g] = c(u * d, (a + o) * d), [_, v] = c(u, a), [y, b] = c(u, a + o), x = +((h - y) * (v - b) - (g - b) * (_ - y) > 0), S = (e) => `${W(e[0])},${W(e[1])}`;
1483
1684
  return `M${S([h, g])}A${W(o)},${W(o)} 0 0 ${x} ${S([_, v])}L${S(c(u, m))}L${S(c(f, m))}L${S(c(u * p, (a + o) * p))}Z`;
1484
- }, Gt = 0, Kt = (e) => e.filter((e) => !e.isTotal), qt = {
1685
+ }, mn = 0, hn = (e, t, n, r, i, a, o, s, c) => [-1, 1].every((l) => [-1, 1].every((u) => {
1686
+ let d = e[0] + l * t / 2 - r, f = e[1] + u * n / 2 - i, p = Math.hypot(d, f), m = ((Math.atan2(f, d) - a) % (2 * Math.PI) + 2 * Math.PI) % (2 * Math.PI), h = Math.min(m, o - m);
1687
+ return p <= s - c && m <= o && (h >= Math.PI / 2 || p * Math.sin(h) >= c);
1688
+ })), gn = (e) => e.filter((e) => !e.isTotal), _n = (e) => ({
1485
1689
  aspect: .66,
1486
1690
  centre: !0,
1487
1691
  headroom: () => 0,
@@ -1491,80 +1695,98 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
1491
1695
  to: e.value,
1492
1696
  kind: "bar"
1493
1697
  })),
1494
- draw({ rows: e, height: t, unit: n, labelHeight: r, svg: i, values: a, config: o, centre: s, sliceRadius: c }) {
1495
- let l = k / 2, d = t / 2, f = Kt(e).reduce((e, t) => e + Math.abs(t.value), 0);
1496
- if (!f) return;
1497
- let p = r * 1.2 + 10 * n, m = Math.max(Math.min(k, t) / 2 - p, 10), h = m * o.ringfill, g = m - h / 2, _ = 2 * Math.PI * g, v = [], y = [], b = 0, x = 0, S = 0;
1498
- if (e.forEach((e, o) => {
1499
- let s = a[o];
1698
+ draw({ rows: t, height: n, unit: r, labelHeight: i, svg: a, values: o, config: s, centre: c, sliceRadius: l }) {
1699
+ let d = k / 2, f = n / 2, p = gn(t), m = e === 1 && a.closest("[data-chart]")?.getAttribute("data-chart-labels") !== "outside", h = p.reduce((e, t) => e + Math.abs(t.value), 0);
1700
+ if (!h) return;
1701
+ let g = i * 1.2 + 10 * r, _ = Math.max(Math.min(k, n) / 2 - g, 10), v = e === 1 ? _ - r / 100 : _ * (e ?? s.ringfill), y = _ - v / 2, b = 2 * Math.PI * y, x = [], S = [], C = 0, w = 0, T = 0, E = [];
1702
+ if (t.forEach((e, t) => {
1703
+ let s = o[t];
1500
1704
  if (e.isTotal) {
1501
1705
  s.dataset.place = "none";
1502
1706
  return;
1503
1707
  }
1504
- let c = Math.abs(e.value) / f, p = H(S, c), C = `--share:${c.toFixed(4)}; --start:${p.start.toFixed(4)}; --span:${p.span.toFixed(4)};`, w = c * _, T = b / _ * 2 * Math.PI - Math.PI / 2;
1505
- v.push(T), y.push(w / _ * 2 * Math.PI), i.appendChild(G("circle", {
1708
+ let c = Math.abs(e.value) / h, l = ce(T, c), p = `--share:${c.toFixed(4)}; --start:${l.start.toFixed(4)}; --span:${l.span.toFixed(4)};`, g = c * b, D = C / b * 2 * Math.PI - Math.PI / 2;
1709
+ x.push(D), S.push(g / b * 2 * Math.PI);
1710
+ let O = G("circle", {
1506
1711
  class: K(u, e),
1507
- "data-slice": x + 1,
1508
- "data-row": o + 1,
1509
- cx: l,
1510
- cy: d,
1511
- r: g,
1512
- "stroke-width": h,
1513
- transform: `rotate(-90 ${l} ${d})`,
1514
- "stroke-dasharray": `${w.toFixed(1)} ${(_ - w).toFixed(1)}`,
1515
- "stroke-dashoffset": (-b).toFixed(1),
1516
- style: `--n:${x}; --palette:var(--tablechart-color-${x + 1}); --arc:${w.toFixed(1)}; --circ:${_.toFixed(1)}; ${C} --ease:${p.easing}; ${U("--i", e.slot)}`
1517
- }));
1518
- let E = T + w / _ * Math.PI, D = Math.cos(E), O = Math.sin(E);
1519
- i.appendChild(G("line", {
1520
- class: "tablechart-leader",
1521
- x1: l + D * (m + 2 * n),
1522
- y1: d + O * (m + 2 * n),
1523
- x2: l + D * (m + 7 * n),
1524
- y2: d + O * (m + 7 * n),
1525
- "data-row": o + 1,
1526
- style: `${C} ${U("--i", e.slot)}`
1527
- })), s.style.setProperty("--start", p.start.toFixed(4)), s.style.setProperty("--span", p.span.toFixed(4));
1528
- let A = m + 9 * n, j = P(s).width * n / 2;
1529
- J(s, l + D * (A + Math.abs(D) * j), d + O * (A + Math.abs(O) * r * .7), k, t), s.dataset.place = "around", b += w, S += c, x += 1;
1530
- }), v.length > 1) {
1531
- let e = g - h / 2 - 1, n = g + h / 2 + 1, r = `tablechart-slices-${++Gt}`, a = G("mask", {
1532
- id: r,
1712
+ "data-slice": w + 1,
1713
+ "data-row": t + 1,
1714
+ cx: d,
1715
+ cy: f,
1716
+ r: y,
1717
+ "stroke-width": v,
1718
+ transform: `rotate(-90 ${d} ${f})`,
1719
+ "stroke-dasharray": `${g.toFixed(1)} ${(b - g).toFixed(1)}`,
1720
+ "stroke-dashoffset": (-C).toFixed(1),
1721
+ style: `--n:${w}; --palette:var(--tablechart-color-${w + 1}); --arc:${g.toFixed(1)}; --circ:${b.toFixed(1)}; ${p} --ease:${l.easing}; ${U("--i", e.slot)}`
1722
+ });
1723
+ a.appendChild(O);
1724
+ let A = D + g / b * Math.PI, j = Math.cos(A), M = Math.sin(A);
1725
+ s.style.setProperty("--start", l.start.toFixed(4)), s.style.setProperty("--span", l.span.toFixed(4));
1726
+ let N = I(s).width * r, P = () => {
1727
+ a.appendChild(G("line", {
1728
+ class: "tablechart-leader",
1729
+ x1: d + j * (_ + 2 * r),
1730
+ y1: f + M * (_ + 2 * r),
1731
+ x2: d + j * (_ + 7 * r),
1732
+ y2: f + M * (_ + 7 * r),
1733
+ "data-row": t + 1,
1734
+ style: `${p} ${U("--i", e.slot)}`
1735
+ }));
1736
+ let o = _ + 9 * r;
1737
+ q(s, d + j * (o + Math.abs(j) * N / 2), f + M * (o + Math.abs(M) * i * .7), k, n), s.dataset.place = "around";
1738
+ }, F = _ * .62, L = g / b * 2 * Math.PI;
1739
+ m && hn([d + j * F, f + M * F], N, i, d, f, D, L, _, 6 * r) ? (q(s, d + j * F, f + M * F, k, n), s.dataset.place = "inside", E.push({
1740
+ label: s,
1741
+ slice: O,
1742
+ outside: P
1743
+ })) : P(), C += g, T += c, w += 1;
1744
+ }), E.length) {
1745
+ let e = a.closest("[data-chart]");
1746
+ if (e) {
1747
+ Nt(e);
1748
+ let { ink: t, fits: n } = Wt(e, E.map(({ slice: e }) => Tt(It(e))));
1749
+ E.forEach(({ label: e, outside: r }, i) => n[i] ? e.style.setProperty("--_ink", t) : r());
1750
+ }
1751
+ }
1752
+ if (x.length > 1) {
1753
+ let e = y - v / 2 - 1, t = y + v / 2 + 1, i = `tablechart-slices-${++mn}`, o = G("mask", {
1754
+ id: i,
1533
1755
  maskUnits: "userSpaceOnUse"
1534
1756
  });
1535
- a.appendChild(G("rect", {
1757
+ o.appendChild(G("rect", {
1536
1758
  x: 0,
1537
1759
  y: 0,
1538
1760
  width: k,
1539
- height: t,
1761
+ height: n,
1540
1762
  fill: "white"
1541
1763
  }));
1542
- for (let t of v) a.appendChild(G("line", {
1764
+ for (let n of x) o.appendChild(G("line", {
1543
1765
  class: "tablechart-divide",
1544
- x1: l + Math.cos(t) * e,
1545
- y1: d + Math.sin(t) * e,
1546
- x2: l + Math.cos(t) * n,
1547
- y2: d + Math.sin(t) * n
1766
+ x1: d + Math.cos(n) * e,
1767
+ y1: f + Math.sin(n) * e,
1768
+ x2: d + Math.cos(n) * t,
1769
+ y2: f + Math.sin(n) * t
1548
1770
  }));
1549
- if (c > 0) {
1550
- let e = Number.parseFloat(getComputedStyle(i).getPropertyValue("--tablechart-slice-gap").trim() || "4"), t = [g - h / 2, g + h / 2], n = (n) => Math.min(c, h / 2, Math.max((y[n] * t[0] - e) / 2, 0));
1551
- v.forEach((r, i) => {
1552
- let o = n((i - 1 + v.length) % v.length);
1553
- for (let [s, c] of [[1, n(i)], [-1, o]]) if (c > 0) for (let n of t) a.appendChild(G("path", {
1554
- d: Wt(l, d, r, n, s, e / 2, c, n === t[1]),
1771
+ if (l > 0) {
1772
+ let e = Number.parseFloat(getComputedStyle(a).getPropertyValue("--tablechart-slice-gap").trim() || "4"), t = y - v / 2 > r ? [y - v / 2, y + v / 2] : [y + v / 2], n = (n) => Math.min(l, v / 2, Math.max((S[n] * t[0] - e) / 2, 0));
1773
+ x.forEach((r, i) => {
1774
+ let a = n((i - 1 + x.length) % x.length);
1775
+ for (let [s, c] of [[1, n(i)], [-1, a]]) if (c > 0) for (let n of t) o.appendChild(G("path", {
1776
+ d: pn(d, f, r, n, s, e / 2, c, n === t.at(-1)),
1555
1777
  fill: "black"
1556
1778
  }));
1557
1779
  });
1558
1780
  }
1559
- let o = G("g", { mask: `url(#${r})` });
1560
- for (let e of Array.from(i.querySelectorAll(`.${u}`))) o.appendChild(e);
1561
- let s = G("defs");
1562
- s.appendChild(a), i.prepend(s, o);
1781
+ let s = G("g", { mask: `url(#${i})` });
1782
+ for (let e of Array.from(a.querySelectorAll(`.${u}`))) s.appendChild(e);
1783
+ let c = G("defs");
1784
+ c.appendChild(o), a.prepend(c, s);
1563
1785
  }
1564
- s && J(s, l, d, k, t);
1786
+ c && (c.hidden = e === 1, q(c, d, f, k, n));
1565
1787
  }
1566
- }, $ = (e) => Number(e.toFixed(2));
1567
- function Jt(e, t) {
1788
+ }), vn = _n(), yn = _n(1), $ = (e) => Number(e.toFixed(2));
1789
+ function bn(e, t) {
1568
1790
  let n = e.length;
1569
1791
  if (n < 2) return e.map(() => 0);
1570
1792
  let r = (n) => (t[n + 1] - t[n]) / (e[n + 1] - e[n] || 1), i = Array(n).fill(0);
@@ -1581,24 +1803,24 @@ function Jt(e, t) {
1581
1803
  };
1582
1804
  return i[0] = a(0, 1, i[1]), i[n - 1] = a(n - 2, n - 1, i[n - 2]), i;
1583
1805
  }
1584
- function Yt(e, t, n, r) {
1806
+ function xn(e, t, n, r) {
1585
1807
  let i = (t[0] - e[0]) / 3;
1586
1808
  return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
1587
1809
  }
1588
- function Xt(e, t, n, r) {
1589
- let [i, a] = Yt(e, t, n, r), o = ([e, t]) => `${$(e)},${$(t)}`;
1810
+ function Sn(e, t, n, r) {
1811
+ let [i, a] = xn(e, t, n, r), o = ([e, t]) => `${$(e)},${$(t)}`;
1590
1812
  return `C${o(i)} ${o(a)} ${o(t)}`;
1591
1813
  }
1592
- function Zt(e, t, n) {
1814
+ function Cn(e, t, n) {
1593
1815
  let r = Array(e).fill(0), i = [], a = () => {
1594
- Jt(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
1816
+ bn(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
1595
1817
  r[i[t]] = e;
1596
1818
  }), i = [];
1597
1819
  };
1598
1820
  for (let n = 0; n < e; n++) t(n) ? a() : i.push(n);
1599
1821
  return a(), r;
1600
1822
  }
1601
- var Qt = (e) => {
1823
+ var wn = (e) => {
1602
1824
  let t = e.length, n = e.reduce((e, t) => e + t.x, 0) / t, r = e.reduce((e, t) => e + t.y, 0) / t, i = e.reduce((e, t) => e + (t.x - n) ** 2, 0), a = i ? e.reduce((e, t) => e + (t.x - n) * (t.y - r), 0) / i : 0, o = (e) => r + a * (e - n), s = t > 2 ? Math.sqrt(e.reduce((e, t) => e + (t.y - o(t.x)) ** 2, 0) / (t - 2)) : 0, c = i ? s / Math.sqrt(i) : 0;
1603
1825
  return {
1604
1826
  at: o,
@@ -1606,7 +1828,7 @@ var Qt = (e) => {
1606
1828
  t: c ? a / c : a ? Infinity : 0,
1607
1829
  n: t
1608
1830
  };
1609
- }, $t = [
1831
+ }, Tn = [
1610
1832
  12.71,
1611
1833
  4.3,
1612
1834
  3.18,
@@ -1622,39 +1844,39 @@ var Qt = (e) => {
1622
1844
  2.16,
1623
1845
  2.14,
1624
1846
  2.13
1625
- ], en = (e) => $t[e - 1] ?? (e < 30 ? 2.1 : 2), tn = (e) => {
1847
+ ], En = (e) => Tn[e - 1] ?? (e < 30 ? 2.1 : 2), Dn = (e) => {
1626
1848
  let t = e.map((e) => e.y), n = Math.min(...t), r = Math.max(...t), i = n < 0 && r > 0, a = r - n || 1;
1627
1849
  return {
1628
1850
  mean: t.reduce((e, t) => e + t, 0) / t.length,
1629
1851
  share: (e, t) => e / (i ? a : Math.abs(t) || a) * 100
1630
1852
  };
1631
- }, nn = (e, t = 5, n = 25) => {
1853
+ }, On = (e, t = 5, n = 25) => {
1632
1854
  if (e.length < 4) return null;
1633
- let { mean: r, share: i } = tn(e), a = (t) => e.filter((e) => Math.abs(i(e.y - t(e.x), t(e.x))) > n), o = (t) => t.length <= e.length / 5, s = Qt(e), c = a(s.at);
1634
- c.length && o(c) && (s = Qt(e.filter((e) => !c.includes(e))), c = a(s.at)), o(c) || (s = Qt(e), c = []);
1635
- let l = s.at, u = e[0], d = e[e.length - 1], f = i(l(d.x) - l(u.x), r), p = Math.abs(s.t) >= en(s.n - 2), m = Math.abs(i(s.spread, r)) < t, h = Math.abs(f) < t ? "flat" : f > 0 ? "up" : "down", g = h === "flat" ? m ? "flat" : "unclear" : p ? h : "unclear";
1855
+ let { mean: r, share: i } = Dn(e), a = (t) => e.filter((e) => Math.abs(i(e.y - t(e.x), t(e.x))) > n), o = (t) => t.length <= e.length / 5, s = wn(e), c = a(s.at);
1856
+ c.length && o(c) && (s = wn(e.filter((e) => !c.includes(e))), c = a(s.at)), o(c) || (s = wn(e), c = []);
1857
+ let l = s.at, u = e[0], d = e[e.length - 1], f = i(l(d.x) - l(u.x), r), p = Math.abs(s.t) >= En(s.n - 2), m = Math.abs(i(s.spread, r)) < t, h = Math.abs(f) < t ? "flat" : f > 0 ? "up" : "down", g = h === "flat" ? m ? "flat" : "unclear" : p ? h : "unclear";
1636
1858
  return {
1637
1859
  course: g,
1638
1860
  line: l,
1639
1861
  outside: g === "unclear" ? [] : c
1640
1862
  };
1641
- }, rn = (e) => e.map((e) => ({
1863
+ }, kn = (e) => e.map((e) => ({
1642
1864
  ...e,
1643
1865
  from: 0,
1644
1866
  to: e.value,
1645
1867
  kind: "bar"
1646
- })), an = (e) => ({
1647
- segments: rn,
1868
+ })), An = (e) => ({
1869
+ segments: kn,
1648
1870
  series: !0,
1649
1871
  stackable: !0,
1650
1872
  running: !0,
1651
1873
  swatch: e ? "box" : void 0,
1652
- headroom: ({ labelHeight: e, unit: t }) => e * 1.6 + 6 * t,
1653
- footroom: ({ labelHeight: t, unit: n, series: r, focused: i, stacked: a }) => !e && !a && r === 2 && !i ? t + 7 * n : 0,
1874
+ headroom: ({ labelHeight: e, unit: t, numbers: n }) => n ? e * 1.6 + 6 * t : 6 * t,
1875
+ footroom: ({ labelHeight: t, unit: n, series: r, focused: i, stacked: a, numbers: o }) => o && !e && !a && r === 2 && !i ? t + 7 * n : 0,
1654
1876
  draw(t) {
1655
- let { rows: n, series: r, own: i, seriesValues: o, names: s, cx: c, y: l, height: u, unit: p, labelHeight: m, svg: _, stacked: v } = t, y = i.length < r.length, b = t.shape === "step", x = t.shape === "smooth", S = r.length > 1, C = r.some((e) => e.focus), w = n.length - 1, T = l(0), E = n.length > 1 ? c(1) - c(0) : c(0) * 2;
1877
+ let { rows: n, series: r, own: i, seriesValues: o, names: s, cx: c, y: l, height: u, unit: p, labelHeight: m, svg: _, stacked: v } = t, y = i.length < r.length, b = t.shape === "step", x = t.shape === "smooth", S = r.length > 1, C = r.some((e) => e.focus), w = n.length - 1, T = l(Math.max(0, t.domain?.[0] ?? 0)), E = n.length > 1 ? c(1) - c(0) : c(0) * 2;
1656
1878
  _.style.setProperty("--_base", `${$(T)}px`);
1657
- let D = (e) => `--rise:${$(T - e)}px; `, O = (e, t) => n[t]?.cells[e] ?? n[t]?.cells[0], A = (e, t) => !O(e, t) || !!O(e, t)?.missing, ee = n.map((e) => v ? ke(e, r.length, !0) : null), M = (e, t) => ee[t]?.[e].to ?? O(e, t)?.value ?? 0, N = (e, t) => ee[t]?.[e].from ?? 0, F = (e, t) => [c(t), l(M(e, t))], I = r.map((e, t) => {
1879
+ let D = (e) => `--rise:${$(T - e)}px; `, O = (e, t) => n[t]?.cells[e] ?? n[t]?.cells[0], A = (e, t) => !O(e, t) || !!O(e, t)?.missing, M = n.map((e) => v ? Me(e, r.length, !0) : null), P = (e, t) => M[t]?.[e].to ?? O(e, t)?.value ?? 0, F = (e, t) => M[t]?.[e].from ?? 0, L = (e, t) => [c(t), l(P(e, t))], R = r.map((e, t) => {
1658
1880
  if (!S) return {
1659
1881
  attrs: {},
1660
1882
  ink: ""
@@ -1667,96 +1889,96 @@ var Qt = (e) => {
1667
1889
  },
1668
1890
  ink: `--n:${t}; --m:${+!!n}; --palette:var(--tablechart-color-${t + 1}); `
1669
1891
  };
1670
- }), L = y ? w : Math.min(w, 6);
1671
- t.plot.style.setProperty("--count", String(L + 1));
1672
- let R = w > 0 ? L / (b ? n.length : w) : 1, z = (e) => e * R, V = (e) => `--i:${$(z(e))}`, re = (e) => {
1892
+ }), ee = y ? w : Math.min(w, 6);
1893
+ t.plot.style.setProperty("--count", String(ee + 1));
1894
+ let z = w > 0 ? ee / (b ? n.length : w) : 1, B = (e) => e * z, H = (e) => `--i:${$(B(e))}`, ne = (e) => {
1673
1895
  let t = [], r = -1;
1674
1896
  return n.forEach((n, i) => {
1675
1897
  A(e, i) || (r < 0 && (r = i), (i === w || A(e, i + 1)) && ((b || i > r) && t.push([r, i]), r = -1));
1676
1898
  }), t;
1677
- }, ie = (e, t) => `--i:${$(z(e) + 1)}; --d:${$(z(b ? t + 1 : t) - z(e))}`, oe = (e, t) => ({
1899
+ }, re = (e, t) => `--i:${$(B(e) + 1)}; --d:${$(B(b ? t + 1 : t) - B(e))}`, ie = (e, t) => ({
1678
1900
  "data-from": e + 1,
1679
1901
  "data-to": t + 1,
1680
1902
  ...b && { "data-flat": "" }
1681
- }), H = x ? r.map((e, t) => Zt(n.length, (e) => A(t, e), (e) => F(t, e))) : [], U = x && e ? r.map((e, t) => Zt(n.length, (e) => A(t, e), (e) => [c(e), l(N(t, e))])) : [], se = (e, t, n) => {
1903
+ }), oe = x ? r.map((e, t) => Cn(n.length, (e) => A(t, e), (e) => L(t, e))) : [], se = x && e ? r.map((e, t) => Cn(n.length, (e) => A(t, e), (e) => [c(e), l(F(t, e))])) : [], ce = (e, t, n) => {
1682
1904
  let r = [];
1683
1905
  return e.forEach(([i, a], o) => {
1684
- b ? (r.push(`H${$(i + n * E / 2)}`), o < e.length - 1 && r.push(`V${$(e[o + 1][1])}`)) : o > 0 && r.push(t ? Xt(e[o - 1], [i, a], t[o - 1], t[o]) : `L${$(i)},${$(a)}`);
1906
+ b ? (r.push(`H${$(i + n * E / 2)}`), o < e.length - 1 && r.push(`V${$(e[o + 1][1])}`)) : o > 0 && r.push(t ? Sn(e[o - 1], [i, a], t[o - 1], t[o]) : `L${$(i)},${$(a)}`);
1685
1907
  }), r;
1686
- }, W = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [c(t + r), l(i(e, t + r))]), K = (e, t, n, r) => x ? e[t].slice(n, r + 1) : null, q = (e) => c(e) - (b ? E / 2 : 0), ce = (e) => c(e) + (b ? E / 2 : 0), [le, ue] = (v ? [] : i.flatMap((e) => n.flatMap((t, n) => A(e, n) ? [] : [l(M(e, n))]))).reduce(([e, t], n) => [Math.min(e, n), Math.max(t, n)], [T, T]), de = (e) => `fill:url(#${pe(_, le, T, ue, {
1687
- style: I[e].ink,
1908
+ }, U = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [c(t + r), l(i(e, t + r))]), le = (e, t, n, r) => x ? e[t].slice(n, r + 1) : null, W = (e) => c(e) - (b ? E / 2 : 0), K = (e) => c(e) + (b ? E / 2 : 0), [ue, de] = (v ? [] : i.flatMap((e) => n.flatMap((t, n) => A(e, n) ? [] : [l(P(e, n))]))).reduce(([e, t], n) => [Math.min(e, n), Math.max(t, n)], [T, T]), fe = (e) => `fill:url(#${ge(_, ue, T, de, {
1909
+ style: R[e].ink,
1688
1910
  ...C && !r[e].focus && { "data-muted": "" }
1689
- })}); `, fe = (e) => {
1911
+ })}); `, pe = (e) => {
1690
1912
  let t = G("g", {
1691
1913
  class: f,
1692
- ...I[e].attrs,
1914
+ ...R[e].attrs,
1693
1915
  ...v && { "data-stacked": "" },
1694
- style: `${I[e].ink}${v ? "" : de(e)}`
1695
- }), n = re(e), r = G("g", {
1916
+ style: `${R[e].ink}${v ? "" : fe(e)}`
1917
+ }), n = ne(e), r = G("g", {
1696
1918
  class: "tablechart-area-fill",
1697
- style: `--rows:${$(L + 1)}; ${n.length ? ie(...n[0]) : ""}`
1919
+ style: `--rows:${$(ee + 1)}; ${n.length ? re(...n[0]) : ""}`
1698
1920
  });
1699
1921
  t.appendChild(r);
1700
1922
  for (let [t, i] of n) {
1701
- let n = W(e, t, i, M), a = W(e, t, i, N), o = K(U, e, t, i)?.reverse() ?? null, s = [
1702
- `M${$(q(t))},${$(a[0][1])}`,
1703
- `L${$(q(t))},${$(n[0][1])}`,
1704
- ...se(n, K(H, e, t, i), 1),
1705
- `L${$(ce(i))},${$(a[a.length - 1][1])}`,
1706
- ...se(a.reverse(), o, -1),
1923
+ let n = U(e, t, i, P), a = U(e, t, i, F), o = le(se, e, t, i)?.reverse() ?? null, s = [
1924
+ `M${$(W(t))},${$(a[0][1])}`,
1925
+ `L${$(W(t))},${$(n[0][1])}`,
1926
+ ...ce(n, le(oe, e, t, i), 1),
1927
+ `L${$(K(i))},${$(a[a.length - 1][1])}`,
1928
+ ...ce(a.reverse(), o, -1),
1707
1929
  "Z"
1708
1930
  ].join(" ");
1709
1931
  r.appendChild(G("path", {
1710
1932
  d: s,
1711
- ...oe(t, i),
1712
- style: ie(t, i)
1933
+ ...ie(t, i),
1934
+ style: re(t, i)
1713
1935
  }));
1714
1936
  }
1715
1937
  _.appendChild(t);
1716
1938
  }, me = (e) => {
1717
1939
  let t = r[e];
1718
- for (let [n, r] of re(e)) {
1719
- let i = W(e, n, r, M), a = [`M${$(q(n))},${$(i[0][1])}`, ...se(i, K(H, e, n, r), 1)].join(" ");
1940
+ for (let [n, r] of ne(e)) {
1941
+ let i = U(e, n, r, P), a = [`M${$(W(n))},${$(i[0][1])}`, ...ce(i, le(oe, e, n, r), 1)].join(" ");
1720
1942
  _.appendChild(G("path", {
1721
1943
  class: d,
1722
- ...I[e].attrs,
1944
+ ...R[e].attrs,
1723
1945
  d: a,
1724
1946
  ...t.line && { "data-line": t.line },
1725
- ...oe(n, r),
1726
- style: `${I[e].ink}${ie(n, r)}`
1947
+ ...ie(n, r),
1948
+ style: `${R[e].ink}${re(n, r)}`
1727
1949
  }));
1728
1950
  }
1729
- }, he = (e) => {
1730
- let a = i.map((e) => r[e]), o = r.map((e, t) => y ? Te(a, i.indexOf(t)) : S ? Te(r, t) : {
1731
- shape: "circle",
1732
- open: !1
1733
- }), s = (e, t, n) => {
1734
- let [r, i] = F(e, t);
1735
- return Ee(o[e].shape, r, i, 3 * p, {
1951
+ }, he = i.map((e) => r[e]), _e = r.map((e, t) => y ? Oe(he, i.indexOf(t)) : S ? Oe(r, t) : {
1952
+ shape: "circle",
1953
+ open: !1
1954
+ }), ve = (e) => {
1955
+ let a = (e, t, n) => {
1956
+ let [r, i] = L(e, t);
1957
+ return ke(_e[e].shape, r, i, 3 * p, {
1736
1958
  ...n,
1737
- style: `${n.style ?? ""}${D(i)}${V(t)}`
1959
+ style: `${n.style ?? ""}${D(i)}${H(t)}`
1738
1960
  });
1739
- }, c = (t) => /\bnone\b/.test(r[t].marker ?? "") ? [] : n.map((e, t) => t).filter((n) => !A(t, n) && e(t, n)), l = i.flatMap((e) => o[e].open ? c(e).map((t) => s(e, t, {
1961
+ }, o = (t) => /\bnone\b/.test(r[t].marker ?? "") ? [] : n.map((e, t) => t).filter((n) => !A(t, n) && e(t, n)), s = i.flatMap((e) => _e[e].open ? o(e).map((t) => a(e, t, {
1740
1962
  class: g,
1741
1963
  "data-row": t + 1,
1742
1964
  ...S && { "data-series": e + 1 }
1743
1965
  })) : []);
1744
- _.closest("[data-animate]")?.getAttribute("data-animate") === "grow" ? ge(_, l, k, u) : t.lineHoles.push(...l), i.forEach((e) => {
1745
- for (let t of c(e)) _.appendChild(s(e, t, {
1966
+ _.closest("[data-animate]")?.getAttribute("data-animate") === "grow" ? ye(_, s, k, u) : t.lineHoles.push(...s), i.forEach((e) => {
1967
+ for (let t of o(e)) _.appendChild(a(e, t, {
1746
1968
  class: h,
1747
- ...I[e].attrs,
1748
- "data-marker": o[e].shape,
1749
- ...o[e].open && { "data-open": "" },
1969
+ ...R[e].attrs,
1970
+ "data-marker": _e[e].shape,
1971
+ ..._e[e].open && { "data-open": "" },
1750
1972
  "data-row": t + 1,
1751
- style: I[e].ink
1973
+ style: R[e].ink
1752
1974
  }));
1753
1975
  });
1754
1976
  };
1755
- e && i.forEach((e) => fe(e)), i.forEach((e) => me(e));
1756
- let Y = y ? r.flatMap((e, t) => i.includes(t) ? [] : o[t].flatMap((e) => {
1977
+ e && i.forEach((e) => pe(e)), i.forEach((e) => me(e));
1978
+ let J = y ? r.flatMap((e, t) => i.includes(t) ? [] : o[t].flatMap((e) => {
1757
1979
  let t = e.dataset.place;
1758
1980
  if (!t || t === "none" || e.hasAttribute("data-left-out")) return [];
1759
- let [n, r, i, a] = ne(e, p, k, u);
1981
+ let [n, r, i, a] = te(e, p, k, u);
1760
1982
  return [{
1761
1983
  label: e,
1762
1984
  box: [
@@ -1766,32 +1988,32 @@ var Qt = (e) => {
1766
1988
  a + 6 * p
1767
1989
  ]
1768
1990
  }];
1769
- })) : [], _e = b ? [] : i.flatMap((e) => n.flatMap((t, n) => {
1991
+ })) : [], be = b ? [] : i.flatMap((e) => n.flatMap((t, n) => {
1770
1992
  if (A(e, n)) return [];
1771
- let [r, i] = F(e, n);
1993
+ let [r, i] = L(e, n);
1772
1994
  return [[
1773
1995
  r - 4 * p,
1774
1996
  i - 4 * p,
1775
1997
  8 * p,
1776
1998
  8 * p
1777
1999
  ]];
1778
- })), ve = Y.filter(({ label: e, box: t }) => {
1779
- let n = _e.some((e) => j(e, t));
2000
+ })), xe = J.filter(({ label: e, box: t }) => {
2001
+ let n = be.some((e) => j(e, t));
1780
2002
  return n && e.setAttribute("data-left-out", ""), !n;
1781
- }), ye = (e, t) => {
2003
+ }), Se = (e, t) => {
1782
2004
  let n = t;
1783
2005
  for (; n < w && !A(e, n + 1) && O(e, n + 1)?.value === O(e, t)?.value;) n++;
1784
2006
  return n;
1785
- }, be = (e) => e === "above" ? "below" : "above", xe = (e, t, n) => {
1786
- let [r, i] = F(e, t), a = P(o[e][t]).width * p, s = [
2007
+ }, Ce = (e) => e === "above" ? "below" : "above", we = (e, t, n) => {
2008
+ let [r, i] = L(e, t), a = I(o[e][t]).width * p, s = [
1787
2009
  r - a / 2,
1788
2010
  n === "above" ? i - 7 * p - m : i + 7 * p,
1789
2011
  a,
1790
2012
  m
1791
2013
  ];
1792
- return s[1] + m > u ? Infinity : [t - 1, t + 1].filter((t) => t >= 0 && t <= w && !A(e, t)).flatMap((n) => Se(e, t, n, 0)).filter((e) => j(e, s)).length;
1793
- }, Se = (e, t, n, r) => {
1794
- let [i, a] = F(e, t), [o, s] = F(e, n), c = Math.max(1, Math.ceil(Math.hypot(o - i, s - a) / (3 * p)));
2014
+ return s[1] + m > u ? Infinity : [t - 1, t + 1].filter((t) => t >= 0 && t <= w && !A(e, t)).flatMap((n) => Te(e, t, n, 0)).filter((e) => j(e, s)).length;
2015
+ }, Te = (e, t, n, r) => {
2016
+ let [i, a] = L(e, t), [o, s] = L(e, n), c = Math.max(1, Math.ceil(Math.hypot(o - i, s - a) / (3 * p)));
1795
2017
  return Array.from({ length: c + 1 }, (e, t) => {
1796
2018
  let n = t / c;
1797
2019
  return [
@@ -1801,43 +2023,43 @@ var Qt = (e) => {
1801
2023
  2 * r
1802
2024
  ];
1803
2025
  });
1804
- }, Ce = (t, n) => {
2026
+ }, Ee = (t, n) => {
1805
2027
  let i = O(t, n);
1806
2028
  if (!i || i.missing || b && n > 0 && !A(t, n - 1) && O(t, n - 1)?.value === i.value || C && !r[t].focus) return "none";
1807
2029
  if (v) return "middle";
1808
2030
  let a = i.value < 0 ? "below" : "above";
1809
- if (!S || C || r.length > 2) return e || b || xe(t, n, a) <= xe(t, n, be(a)) ? a : be(a);
2031
+ if (!S || C || r.length > 2) return e || b || we(t, n, a) <= we(t, n, Ce(a)) ? a : Ce(a);
1810
2032
  let o = O(1 - t, n);
1811
- return !o || o.missing ? a : i.value > o.value || i.value === o.value && t === 0 || e && i.value >= 0 && F(t, n)[1] + 7 * p + m > T ? "above" : "below";
1812
- }, we = (e) => {
2033
+ return !o || o.missing ? a : i.value > o.value || i.value === o.value && t === 0 || e && i.value >= 0 && L(t, n)[1] + 7 * p + m > T ? "above" : "below";
2034
+ }, De = (e) => {
1813
2035
  let t = w;
1814
2036
  for (; t > 0 && A(e, t);) t--;
1815
2037
  return t;
1816
- }, De = b || v ? 10 * p : Math.max(10 * p, ...i.map((e) => P(o[e][w]).width * p / 2 + 6 * p)), Oe = t.numbersAtEnd ? Math.max(...i.map((e) => P(o[e][we(e)]).width * p)) + 11 * p : De, Ae = () => {
1817
- let e = (s[0] ? P(s[0]).height : 0) * p, n = 2 * p, r = i.flatMap((e) => {
2038
+ }, Ae = b || v ? 10 * p : Math.max(10 * p, ...i.map((e) => I(o[e][w]).width * p / 2 + 6 * p)), je = t.numbersAtEnd ? Math.max(...i.map((e) => I(o[e][De(e)]).width * p)) + 11 * p : Ae, Ne = () => {
2039
+ let e = (s[0] ? I(s[0]).height : 0) * p, n = 2 * p, r = i.flatMap((e) => {
1818
2040
  let t = s[e];
1819
2041
  if (!t) return [];
1820
- let [n, r] = F(e, we(e));
2042
+ let [n, r] = L(e, De(e));
1821
2043
  return [{
1822
2044
  name: t,
1823
- x: n + Oe,
2045
+ x: n + je,
1824
2046
  y: r
1825
2047
  }];
1826
- }), a = t.numbersAtEnd ? Oe - 7 * p : 0;
1827
- return B(r, e).map((t) => [
2048
+ }), a = t.numbersAtEnd ? je - 7 * p : 0;
2049
+ return V(r, e).map((t) => [
1828
2050
  t.x - n - a,
1829
2051
  t.y - e / 2 - n,
1830
- P(t.name).width * p + 2 * n + a,
2052
+ I(t.name).width * p + 2 * n + a,
1831
2053
  e + 2 * n
1832
2054
  ]);
1833
- }, je = (y || S && !C && r.length > 2 && !v) && !b, Me = /* @__PURE__ */ new Map();
1834
- if (je) {
2055
+ }, Pe = (y || S && !C && r.length > 2 && !v) && !b, Fe = /* @__PURE__ */ new Map();
2056
+ if (Pe) {
1835
2057
  let e = n.flatMap((e, t) => i.map((e) => ({
1836
2058
  s: e,
1837
2059
  i: t,
1838
2060
  value: O(e, t)?.value ?? 0
1839
- }))).filter(({ s: e, i: t }) => Ce(e, t) !== "none").sort((e, t) => e.i - t.i || t.value - e.value || e.s - t.s), t = (e) => e < 0 ? ["below", "above"] : ["above", "below"], r = te(e.map(({ s: e, i: n, value: r }) => {
1840
- let i = P(o[e][n]).width * p, [a, s] = F(e, n);
2061
+ }))).filter(({ s: e, i: t }) => Ee(e, t) !== "none").sort((e, t) => e.i - t.i || t.value - e.value || e.s - t.s), t = (e) => e < 0 ? ["below", "above"] : ["above", "below"], r = N(e.map(({ s: e, i: n, value: r }) => {
2062
+ let i = I(o[e][n]).width * p, [a, s] = L(e, n);
1841
2063
  return t(r).map((e) => [
1842
2064
  a - i / 2,
1843
2065
  e === "above" ? s - 7 * p - m : s + 7 * p,
@@ -1847,7 +2069,7 @@ var Qt = (e) => {
1847
2069
  }), [
1848
2070
  ...i.flatMap((e) => n.flatMap((t, n) => {
1849
2071
  if (A(e, n)) return [];
1850
- let [r, i] = F(e, n);
2072
+ let [r, i] = L(e, n);
1851
2073
  return [[
1852
2074
  r - 4 * p,
1853
2075
  i - 4 * p,
@@ -1855,30 +2077,30 @@ var Qt = (e) => {
1855
2077
  8 * p
1856
2078
  ]];
1857
2079
  })),
1858
- ...Ae(),
1859
- ...ve.map(({ box: e }) => e)
2080
+ ...Ne(),
2081
+ ...xe.map(({ box: e }) => e)
1860
2082
  ], [
1861
2083
  0,
1862
2084
  0,
1863
2085
  c(w) + c(0),
1864
2086
  u
1865
2087
  ]);
1866
- e.forEach(({ s: e, i: n, value: i }, a) => Me.set(o[e][n], r[a] === null ? null : t(i)[r[a]]));
2088
+ e.forEach(({ s: e, i: n, value: i }, a) => Fe.set(o[e][n], r[a] === null ? null : t(i)[r[a]]));
1867
2089
  }
1868
- let Ne = (e, t) => {
1869
- if (je) return Me.get(o[e][t]) === null;
2090
+ let Ie = (e, t) => {
2091
+ if (Pe) return Fe.get(o[e][t]) === null;
1870
2092
  if (!v && !b) return !1;
1871
- let n = P(o[e][t]).width * p;
1872
- if (n > (b ? ye(e, t) - t + 1 : 1) * E - 4 * p || v && e > 0 && M(e, t) < N(e, t)) return !0;
2093
+ let n = I(o[e][t]).width * p;
2094
+ if (n > (b ? Se(e, t) - t + 1 : 1) * E - 4 * p || v && e > 0 && P(e, t) < F(e, t)) return !0;
1873
2095
  if (v && !b && t > 0 && t < w) {
1874
- let r = (l(N(e, t)) + l(M(e, t))) / 2, a = [
2096
+ let r = (l(F(e, t)) + l(P(e, t))) / 2, a = [
1875
2097
  c(t) - n / 2,
1876
2098
  r - m / 2,
1877
2099
  n,
1878
2100
  m
1879
2101
  ];
1880
2102
  if (i.some((e) => {
1881
- let [n, r] = F(e, t);
2103
+ let [n, r] = L(e, t);
1882
2104
  return !A(e, t) && j([
1883
2105
  n - 4 * p,
1884
2106
  r - 4 * p,
@@ -1887,65 +2109,61 @@ var Qt = (e) => {
1887
2109
  ], a);
1888
2110
  })) return !0;
1889
2111
  }
1890
- return v && Math.abs(l(N(e, t)) - l(M(e, t))) < m * 1.2;
2112
+ return v && Math.abs(l(F(e, t)) - l(P(e, t))) < m * 1.2;
1891
2113
  };
1892
2114
  i.forEach((e) => {
1893
2115
  o[e].forEach((t, n) => {
1894
- t.style.setProperty("--i", String($(b ? (z(n) + z(n + 1)) / 2 : z(n))));
1895
- let r = Me.get(t) ?? Ce(e, n);
1896
- if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" && Ne(e, n)), b && r !== "none" ? t.dataset.rowEnd = String(ye(e, n) + 1) : delete t.dataset.rowEnd, r === "none") return;
1897
- let i = P(t).width * p / 2 + 4 * p, a = c(n);
1898
- b ? a = (c(n) + c(ye(e, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === w && (a -= i);
1899
- let o = l(M(e, n)), s = {
1900
- middle: (l(N(e, n)) - o) / 2,
2116
+ t.style.setProperty("--i", String($(b ? (B(n) + B(n + 1)) / 2 : B(n))));
2117
+ let r = Fe.get(t) ?? Ee(e, n);
2118
+ if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" && Ie(e, n)), b && r !== "none" ? t.dataset.rowEnd = String(Se(e, n) + 1) : delete t.dataset.rowEnd, r === "none") return;
2119
+ let i = I(t).width * p / 2 + 4 * p, a = c(n);
2120
+ b ? a = (c(n) + c(Se(e, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === w && (a -= i);
2121
+ let o = l(P(e, n)), s = {
2122
+ middle: (l(F(e, n)) - o) / 2,
1901
2123
  above: -7 * p,
1902
2124
  below: 7 * p
1903
2125
  };
1904
- J(t, a, o + s[r], k, u);
2126
+ q(t, a, o + s[r], k, u);
1905
2127
  });
1906
2128
  });
1907
- let Pe = (e) => {
2129
+ let Le = (e) => {
1908
2130
  let r = n.flatMap((t, n) => t.pinned && !A(e, n) ? [n] : []), i = n.map((e, t) => t).filter((t) => !A(e, t)), a = (t) => O(e, t)?.value ?? 0, { keys: s } = t.pick;
1909
- i.length && (s.includes("last") && r.push(i[i.length - 1]), s.includes("first") && r.push(i[0]), s.includes("highest") && r.push(i.reduce((e, t) => a(t) > a(e) ? t : e)), s.includes("lowest") && r.push(i.reduce((e, t) => a(t) < a(e) ? t : e)), s.includes("outliers") && r.push(...nn(i.map((e) => ({
2131
+ i.length && (s.includes("last") && r.push(i[i.length - 1]), s.includes("first") && r.push(i[0]), s.includes("highest") && r.push(i.reduce((e, t) => a(t) > a(e) ? t : e)), s.includes("lowest") && r.push(i.reduce((e, t) => a(t) < a(e) ? t : e)), s.includes("outliers") && r.push(...On(i.map((e) => ({
1910
2132
  x: e,
1911
2133
  y: a(e)
1912
2134
  })))?.outside.map((e) => e.x) ?? []));
1913
- let c = [];
2135
+ let c = [], l = (n) => t.numbersAtEnd && n === De(e);
1914
2136
  for (let t of r) {
1915
2137
  let n = o[e][t];
1916
- c.includes(t) || n.dataset.place === "none" || c.every((t) => ae([o[e][t], n], p, 1e3, u) === 1) && c.push(t);
2138
+ c.includes(t) || n.dataset.place === "none" || (l(t) || c.filter((e) => !l(e)).every((t) => ae([o[e][t], n], p, 1e3, u) === 1)) && c.push(t);
1917
2139
  }
1918
2140
  return new Set(c);
1919
- }, Fe = (e) => ae(o[e].filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), p, k, u) === 1, X = /* @__PURE__ */ new Map();
2141
+ }, Re = (e) => ae(o[e].filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), p, k, u) === 1, Y = /* @__PURE__ */ new Map();
1920
2142
  for (let e of i) {
1921
- let n = t.pick.mode === "all" || t.pick.mode === "auto" && Fe(e) ? null : Pe(e);
1922
- X.set(e, n), n && o[e].forEach((e, t) => {
2143
+ let n = t.pick.mode === "all" || t.pick.mode === "auto" && Re(e) ? null : Le(e);
2144
+ Y.set(e, n), n && o[e].forEach((e, t) => {
1923
2145
  e.dataset.place !== "none" && !n.has(t) && e.setAttribute("data-left-out", "");
1924
2146
  });
1925
2147
  }
1926
- if (!v && !b && i.some((e) => X.get(e))) {
1927
- let e = c(w) + c(0), r = 2 * p, a = (e) => n.flatMap((t, n) => n === w || A(e, n) || A(e, n + 1) ? [] : Se(e, n, n + 1, r)), s = i.flatMap(a), l = Ae(), d = i.flatMap((e) => [...X.get(e) ?? []].map((t) => ({
2148
+ if (!v && !b && i.some((e) => Y.get(e))) {
2149
+ let e = c(w) + c(0), r = 2 * p, a = i.flatMap((e) => n.flatMap((t, n) => n === w || A(e, n) || A(e, n + 1) ? [] : Te(e, n, n + 1, r))), s = Ne(), l = i.flatMap((e) => [...Y.get(e) ?? []].map((t) => ({
1928
2150
  s: e,
1929
2151
  i: t
1930
- }))), f = ({ s: e, i: n }) => t.numbersAtEnd && n === we(e), h = d.filter((e) => !f(e)), g = ({ s: e, i: t }) => {
2152
+ }))), d = ({ s: e, i: n }) => t.numbersAtEnd && n === De(e), f = l.filter((e) => !d(e)), h = ({ s: e, i: t }) => {
1931
2153
  let n = O(e, t)?.value ?? 0, r = t > 0 && !A(e, t - 1) ? O(e, t - 1)?.value : void 0, i = t < w && !A(e, t + 1) ? O(e, t + 1)?.value : void 0;
1932
2154
  return (r ?? i) !== void 0 && (r === void 0 || n <= r) && (i === void 0 || n <= i) ? [
1933
2155
  "below",
1934
2156
  "outside",
1935
- "below far",
1936
- "outside far",
1937
2157
  "after",
1938
2158
  "before"
1939
2159
  ] : [
1940
2160
  "outside",
1941
2161
  "below",
1942
- "outside far",
1943
- "below far",
1944
2162
  "after",
1945
2163
  "before"
1946
2164
  ];
1947
- }, _ = ({ s: t, i: n }, r) => {
1948
- let i = P(o[t][n]).width * p, a = m, [s, c] = F(t, n), l = Math.min(Math.max(s - i / 2, 0), e - i);
2165
+ }, g = ({ s: t, i: n }, r) => {
2166
+ let i = I(o[t][n]).width * p, a = m, [s, c] = L(t, n), l = Math.min(Math.max(s - i / 2, 0), e - i);
1949
2167
  return r === "outside" ? [
1950
2168
  l,
1951
2169
  c - 7 * p - a,
@@ -1956,16 +2174,6 @@ var Qt = (e) => {
1956
2174
  c + 7 * p,
1957
2175
  i,
1958
2176
  a
1959
- ] : r === "outside far" ? [
1960
- l,
1961
- c - 7 * p - 2 * a,
1962
- i,
1963
- a
1964
- ] : r === "below far" ? [
1965
- l,
1966
- c + 7 * p + a,
1967
- i,
1968
- a
1969
2177
  ] : r === "after" ? [
1970
2178
  s + 7 * p,
1971
2179
  c - a / 2,
@@ -1977,76 +2185,102 @@ var Qt = (e) => {
1977
2185
  i,
1978
2186
  a
1979
2187
  ];
1980
- }, v = h.map(g), y = (t) => t[0] >= 0 && t[1] >= 0 && t[0] + t[2] <= e && t[1] + t[3] <= u - 2 * p, b = d.map(({ s: e, i: t }) => {
1981
- let [n, r] = F(e, t);
2188
+ }, _ = f.map(h), v = (t) => t[0] >= 0 && t[1] >= 0 && t[0] + t[2] <= e && t[1] + t[3] <= u - 2 * p, y = l.map(({ s: e, i: t }) => {
2189
+ let [n, r] = L(e, t);
1982
2190
  return [
1983
2191
  n - 6 * p,
1984
2192
  r - 6 * p,
1985
2193
  12 * p,
1986
2194
  12 * p
1987
2195
  ];
1988
- }), x = [], S = /* @__PURE__ */ new Set(), C = h.map((e, t) => {
1989
- let n = v[t].map((t) => _(e, t)), r = (e) => y(e) && ![
1990
- ...x,
1991
- ...l,
1992
- ...b
1993
- ].some((t) => j(e, t)), o = i.filter((t) => t !== e.s).flatMap(a), c = (n) => !v[t][n].endsWith("far") || !o.some((r) => j(_(e, v[t][n].split(" ")[0]), r)), u = n.findIndex((e, t) => r(e) && c(t) && !s.some((t) => j(e, t)));
1994
- return u < 0 && (u = n.findIndex((e, t) => r(e) && c(t)), u >= 0 && S.add(t)), u >= 0 && x.push(n[u]), u < 0 ? null : u;
2196
+ }), b = [], x = /* @__PURE__ */ new Set(), S = f.map((e, t) => {
2197
+ let n = _[t].map((t) => g(e, t)), r = (e) => v(e) && ![
2198
+ ...b,
2199
+ ...s,
2200
+ ...y
2201
+ ].some((t) => j(e, t)), i = n.findIndex((e) => r(e) && !a.some((t) => j(e, t)));
2202
+ return i < 0 && (i = n.findIndex(r), i >= 0 && x.add(t)), i >= 0 && b.push(n[i]), i < 0 ? null : i;
1995
2203
  });
1996
- h.forEach((e, t) => {
2204
+ f.forEach((e, t) => {
1997
2205
  let n = o[e.s][e.i];
1998
- n.toggleAttribute("data-cut", S.has(t));
1999
- let r = C[t];
2206
+ n.toggleAttribute("data-cut", x.has(t));
2207
+ let r = S[t];
2000
2208
  if (n.toggleAttribute("data-left-out", r === null), r === null) return;
2001
- let i = v[t][r], [a, s, c, l] = _(e, i), d = i.split(" ")[0];
2002
- n.dataset.place = d, J(n, d === "after" ? a : d === "before" ? a + c : a + c / 2, d === "outside" ? s + l : d === "below" ? s : s + l / 2, k, u);
2209
+ let i = _[t][r], [a, s, c, l] = g(e, i), d = i;
2210
+ n.dataset.place = d, q(n, d === "after" ? a : d === "before" ? a + c : a + c / 2, d === "outside" ? s + l : d === "below" ? s : s + l / 2, k, u);
2003
2211
  });
2004
2212
  }
2005
- b || he((e, t) => {
2006
- let n = X.get(e);
2213
+ b || ve((e, t) => {
2214
+ let n = Y.get(e);
2007
2215
  return n ? n.has(t) : E >= 10 * p;
2008
2216
  }), t.pointOf = (e) => {
2009
- let t = i.filter((t) => !A(t, e)).map((t) => F(t, e));
2217
+ let t = i.filter((t) => !A(t, e)).map((t) => L(t, e));
2010
2218
  return t.length ? t.reduce((e, t) => t[1] < e[1] ? t : e) : null;
2219
+ }, t.crossingOf = (e) => {
2220
+ if (e < 0 || e > w) return null;
2221
+ let [n, r] = t.frame ? [t.frame[1], t.frame[1] + t.frame[3]] : [t.domain ? l(t.domain[1]) : 0, Ve], a = i.filter((t) => !A(t, e)).map((t) => {
2222
+ let [n, r] = L(t, e);
2223
+ return {
2224
+ series: t,
2225
+ y: r,
2226
+ dot: ke(_e[t].shape === "none" ? "circle" : _e[t].shape, n, r, 4.5 * p, {
2227
+ class: "tablechart-crosshair-point",
2228
+ ...R[t].attrs,
2229
+ ..._e[t].open && { "data-open": "" },
2230
+ style: R[t].ink
2231
+ })
2232
+ };
2233
+ }), o = t.axisSide === "right";
2234
+ return {
2235
+ x: c(e),
2236
+ from: n,
2237
+ to: r,
2238
+ edge: o ? k : t.frame?.[0] ?? 0,
2239
+ end: c(o ? 0 : w),
2240
+ axis: t.axisSide,
2241
+ height: u,
2242
+ points: a
2243
+ };
2011
2244
  };
2012
- let Ie = (y ? [] : s).map((e, t) => {
2013
- let n = we(t), [r, i] = F(t, n);
2245
+ let X = (y ? [] : s).map((e, t) => {
2246
+ let n = De(t), [r, i] = L(t, n);
2014
2247
  return {
2015
2248
  name: e,
2016
2249
  s: t,
2017
- x: (b ? r + E / 2 : r) + Oe,
2018
- y: v ? (i + l(N(t, n))) / 2 : i
2250
+ x: (b ? r + E / 2 : r) + je,
2251
+ y: v ? (i + l(F(t, n))) / 2 : i
2019
2252
  };
2020
- }), Le = (s[0] ? P(s[0]).height : 0) * p;
2021
- for (let e of B(Ie, Le)) {
2022
- if (J(e.name, e.x, e.y, k, u), !t.numbersAtEnd) continue;
2023
- let n = o[e.s][we(e.s)];
2024
- n.dataset.place = "before", n.removeAttribute("data-left-out"), n.removeAttribute("data-cut"), J(n, e.x - 4 * p, e.y, k, u);
2253
+ }), ze = (s[0] ? I(s[0]).height : 0) * p;
2254
+ for (let e of V(X, ze)) {
2255
+ if (q(e.name, e.x, e.y, k, u), !t.numbersAtEnd) continue;
2256
+ let n = o[e.s][De(e.s)];
2257
+ n.dataset.place = "before", n.removeAttribute("data-left-out"), n.removeAttribute("data-cut"), q(n, e.x - 4 * p, e.y, k, u);
2025
2258
  }
2026
- let Re = n.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), ze = !e && !v && r.length === 2 && !C && !Re ? u - 2 * p : T;
2259
+ let Be = n.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), Ve = !e && !v && r.length === 2 && !C && !Be ? u - 2 * p : T;
2027
2260
  y || _.appendChild(G("line", {
2028
2261
  class: a,
2029
2262
  x1: 0,
2030
- x2: c(w) + c(0),
2031
- y1: ze,
2032
- y2: ze
2263
+ x2: t.axisSide === "right" ? k : c(w) + c(0),
2264
+ y1: Ve,
2265
+ y2: Ve
2033
2266
  }));
2034
2267
  }
2035
- }), on = an(!1), sn = an(!0), cn = /* @__PURE__ */ new Set(), ln = (t, n) => {
2268
+ }), jn = An(!1), Mn = An(!0), Nn = /* @__PURE__ */ new Set(), Pn = (t, n) => {
2036
2269
  if (Math.abs(t - n) <= Math.abs(n) / 100) return;
2037
2270
  let r = `[${e}] A total reads ${t}, but the steps before it add up to ${Number(n.toFixed(6))}. The chart shows your number.`;
2038
- cn.has(r) || (cn.add(r), console.warn(r));
2039
- }, un = {
2040
- area: sn,
2041
- bar: Ht,
2042
- column: Ut,
2043
- donut: qt,
2044
- line: on,
2271
+ Nn.has(r) || (Nn.add(r), console.warn(r));
2272
+ }, Fn = {
2273
+ area: Mn,
2274
+ bar: dn,
2275
+ column: fn,
2276
+ donut: vn,
2277
+ line: jn,
2278
+ pie: yn,
2045
2279
  waterfall: {
2046
2280
  segments: (e) => {
2047
2281
  let t = 0, n = !1;
2048
2282
  return e.map((e) => {
2049
- if (e.isTotal) return n && ln(e.value, t), n = !1, t = e.value, {
2283
+ if (e.isTotal) return n && Pn(e.value, t), n = !1, t = e.value, {
2050
2284
  ...e,
2051
2285
  from: 0,
2052
2286
  to: e.value,
@@ -2064,17 +2298,17 @@ var Qt = (e) => {
2064
2298
  breakable: !0,
2065
2299
  headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
2066
2300
  draw({ segments: e, cx: t, y: n, barWidth: r, height: o, unit: s, svg: c, values: l, breakAt: u, insideAlign: d }) {
2067
- let f = n(0), p = I(l, r, s), m = d ?? "center", h = e.map((t, r) => {
2301
+ let f = n(0), p = R(l, r, s), m = d ?? "center", h = e.map((t, r) => {
2068
2302
  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;
2069
2303
  return {
2070
2304
  top: i,
2071
2305
  length: a,
2072
2306
  down: t.kind === "down" || t.kind === "total" && (c ? t.to >= 0 : t.to < 0),
2073
- inside: !o && !p && L(l[r], a, s)
2307
+ inside: !o && !p && ee(l[r], a, s)
2074
2308
  };
2075
- }), g = l[0] ? P(l[0]).height * s * .56 : 0, _ = Infinity;
2076
- for (let [e, t] of h.entries()) t.inside && (_ = Math.min(_, (r - P(l[e]).width * s) / 2));
2077
- let v = e.length, y = (e, t, n = !1) => `--start:${(e / v).toFixed(4)}; --span:${(t / v).toFixed(4)}; --ease:${n ? oe : "linear"};`;
2309
+ }), g = l[0] ? I(l[0]).height * s * .56 : 0, _ = Infinity;
2310
+ for (let [e, t] of h.entries()) t.inside && (_ = Math.min(_, (r - I(l[e]).width * s) / 2));
2311
+ let v = e.length, y = (e, t, n = !1) => `--start:${(e / v).toFixed(4)}; --span:${(t / v).toFixed(4)}; --ease:${n ? se : "linear"};`;
2078
2312
  e.forEach((i, a) => {
2079
2313
  let o = e[a + 1];
2080
2314
  if (!o) return;
@@ -2105,8 +2339,8 @@ var Qt = (e) => {
2105
2339
  b.style.setProperty("--start", (a / v).toFixed(4)), b.style.setProperty("--span", (1 / v).toFixed(4));
2106
2340
  let x = Math.min(_, (d - g) / 2), S = u + x + g / 2, C = u + d - x - g / 2, w = m === "center" ? u + d / 2 : m === "end" === f ? C : S;
2107
2341
  b.dataset.place = p ? "inside" : "outside", b.dataset.kind = n.kind;
2108
- let T = p ? w : n.kind === "down" ? u + d + P(b).height * s + 3 * s : u - 3 * s;
2109
- J(b, t(a), T, k, o);
2342
+ let T = p ? w : n.kind === "down" ? u + d + I(b).height * s + 3 * s : u - 3 * s;
2343
+ q(b, t(a), T, k, o);
2110
2344
  }), c.appendChild(G("line", {
2111
2345
  class: a,
2112
2346
  x1: 0,
@@ -2116,41 +2350,62 @@ var Qt = (e) => {
2116
2350
  }));
2117
2351
  }
2118
2352
  }
2119
- }, dn = (e, t) => {
2120
- un[e] = t, Object.assign(fn, t.annotations), pn.splice(0, Infinity, ...Object.keys(fn));
2121
- }, fn = {
2122
- "axis-break": jt,
2123
- trend: Rt,
2124
- bracket: Pt,
2125
- reference: It,
2126
- note: Ce
2127
- }, pn = Object.keys(fn), mn = (e, t, n = !1) => {
2128
- !t && !e.figure.hasAttribute("data-steps") && _n(e.svg), e.figure.classList.remove(w), n ? (e.figure.classList.add(C), e.figure.classList.toggle(x, t), e.figure.offsetWidth, t && vn(e.svg), e.figure.classList.toggle(w, t), requestAnimationFrame(() => e.figure.classList.remove(C))) : (e.figure.classList.toggle(x, t), t && requestAnimationFrame(() => requestAnimationFrame(() => {
2129
- gn(e.figure, e.svg), hn(e.figure);
2353
+ }, In = (e, t) => {
2354
+ Fn[e] = t, Object.assign(Ln, t.annotations), Rn.splice(0, Infinity, ...Object.keys(Ln));
2355
+ }, Ln = {
2356
+ "axis-break": $t,
2357
+ trend: sn,
2358
+ bracket: nn,
2359
+ reference: an,
2360
+ note: Ee
2361
+ }, Rn = Object.keys(Ln), zn = (e, t, n, r) => {
2362
+ let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
2363
+ if (!a) return null;
2364
+ let o = Number(a[1]);
2365
+ return a[2] === "%" ? o / 100 * k : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
2366
+ }, Bn = (e, t) => {
2367
+ let n = zn(e, t, "--tablechart-height", "none");
2368
+ return [n ?? zn(e, t, "--tablechart-min-height", "200px") ?? 0, n ?? zn(e, t, "--tablechart-max-height", "none") ?? Infinity];
2369
+ }, Vn = (e, t, n) => zn(e, t, getComputedStyle(e).getPropertyValue(n).trim() ? n : "--tablechart-corner-radius", "0px") ?? 0, Hn = (e, t, n) => {
2370
+ let r = e.getAttribute(t);
2371
+ return r === null ? !!n : r !== "false";
2372
+ }, Un = (e, t) => {
2373
+ let n = e.getAttribute("data-chart-axis");
2374
+ return n === "right" || n !== "left" && t.axis === "right";
2375
+ }, Wn = [
2376
+ "straight",
2377
+ "step",
2378
+ "smooth"
2379
+ ], Gn = (e, t) => {
2380
+ let n = e.dataset.chartShape;
2381
+ return n && Wn.includes(n) ? n : Wn.includes(t.shape) ? t.shape : "straight";
2382
+ }, Kn = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", qn = (e, t, n = !1) => {
2383
+ !t && !e.figure.hasAttribute("data-steps") && Xn(e.svg), e.figure.classList.remove(w), n ? (e.figure.classList.add(C), e.figure.classList.toggle(x, t), e.figure.offsetWidth, t && Zn(e.svg), e.figure.classList.toggle(w, t), requestAnimationFrame(() => e.figure.classList.remove(C))) : (e.figure.classList.toggle(x, t), t && requestAnimationFrame(() => requestAnimationFrame(() => {
2384
+ Yn(e.figure, e.svg), Jn(e.figure);
2130
2385
  })));
2131
- }, hn = (e) => {
2386
+ }, Jn = (e) => {
2132
2387
  let t = e.getAnimations({ subtree: !0 }).map((e) => e.finished.catch(() => void 0));
2133
2388
  Promise.all(t).then(() => {
2134
2389
  e.classList.contains("is-shown") && e.classList.add(w);
2135
2390
  });
2136
- }, gn = (e, t) => {
2137
- e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) && vn(t);
2138
- }, _n = (e) => {
2391
+ }, Yn = (e, t) => {
2392
+ e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) && Zn(t);
2393
+ }, Xn = (e) => {
2139
2394
  for (let t of e.querySelectorAll("[mask^=\"url(#tablechart-cut-\"]")) t.dataset.mask = t.getAttribute("mask") ?? "", t.removeAttribute("mask");
2140
- }, vn = (e) => {
2395
+ }, Zn = (e) => {
2141
2396
  for (let t of e.querySelectorAll("[data-mask]")) t.setAttribute("mask", t.dataset.mask ?? ""), t.removeAttribute("data-mask");
2142
- }, yn = (e) => {
2397
+ }, Qn = (e) => {
2143
2398
  let t = "";
2144
2399
  for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
2145
2400
  return t.trim();
2146
- }, bn = (e) => {
2401
+ }, $n = (e) => {
2147
2402
  for (let t of e.querySelectorAll("br")) {
2148
- if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(yn(t))) continue;
2403
+ if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(Qn(t))) continue;
2149
2404
  let e = document.createElement("span");
2150
2405
  e.className = b, e.textContent = ". ", t.before(e);
2151
2406
  }
2152
- }, xn = (e, t, n) => {
2153
- let r = e.querySelector("table");
2407
+ }, er = (e, t, n) => {
2408
+ let r = Y(e);
2154
2409
  if (!r) return null;
2155
2410
  let i = r.querySelector("tfoot [data-chart-total]");
2156
2411
  if (i) return i.dataset.value = t.dataset.value ?? "0", i;
@@ -2160,22 +2415,22 @@ var Qt = (e) => {
2160
2415
  s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
2161
2416
  let c = a.insertCell();
2162
2417
  return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
2163
- }, Sn = 0, Cn = (e) => {
2418
+ }, tr = 0, nr = (e) => {
2164
2419
  let t = e.querySelector(":scope > figcaption");
2165
2420
  if (!t) return;
2166
- bn(t);
2421
+ $n(t);
2167
2422
  let n = (e) => e.hasAttribute("aria-label") || e.hasAttribute("aria-labelledby"), r = (e) => {
2168
- t.id || (t.id = `tablechart-caption-${++Sn}`), e.setAttribute("aria-labelledby", t.id);
2423
+ t.id || (t.id = `tablechart-caption-${++tr}`), e.setAttribute("aria-labelledby", t.id);
2169
2424
  };
2170
2425
  e.tagName === "FIGURE" && !n(e) && r(e);
2171
- let i = e.querySelector("table");
2426
+ let i = Y(e);
2172
2427
  i && !n(i) && !i.querySelector(":scope > caption") && r(i);
2173
- }, wn = [
2428
+ }, rr = [
2174
2429
  null,
2175
2430
  "dashed",
2176
2431
  "dotted",
2177
2432
  "dash-dot"
2178
- ], Tn = (t, n, r, i) => {
2433
+ ], ir = (t, n, r, i) => {
2179
2434
  let a = t.closest("[data-chart-lines]")?.getAttribute("data-chart-lines"), o = i.lines;
2180
2435
  if (a) try {
2181
2436
  o = JSON.parse(a);
@@ -2184,19 +2439,19 @@ var Qt = (e) => {
2184
2439
  }
2185
2440
  (r === "line" || r === "area" ? n : n.filter((e) => e.chart)).forEach((e, t) => {
2186
2441
  if (!o?.length) {
2187
- e.line ?? (e.line = wn[Math.floor(t / 6) % wn.length]);
2442
+ e.line ?? (e.line = rr[Math.floor(t / 6) % rr.length]);
2188
2443
  return;
2189
2444
  }
2190
2445
  let n = o[t % o.length];
2191
2446
  e.marker ?? (e.marker = n.marker || n.open !== void 0 ? [n.marker, n.open ? "open" : "filled"].filter(Boolean).join(" ") : null), e.line === null && n.line !== "solid" && (e.line = n.line ?? null);
2192
2447
  });
2193
- }, En = (i, a, o = null) => {
2194
- let s = o ?? (i.getAttribute("data-chart") || "column"), c = un[s];
2195
- if (!c) return console.warn(`[${e}] Unknown chart type "${s}". Known types: ${Object.keys(un).join(", ")}.`), i.setAttribute("data-chart-empty", ""), null;
2196
- let l = ze(i, a.langattribute);
2197
- if (!l.length) return console.warn(i.querySelector("table") ? `[${e}] A chart has no rows in its table, so there is nothing to draw.` : `[${e}] A chart has no table, so there is nothing to draw.`, i), i.setAttribute("data-chart-empty", ""), null;
2198
- Cn(i);
2199
- let u = Ve(i, l, a.langattribute);
2448
+ }, ar = (i, a, o = null) => {
2449
+ let s = o ?? (i.getAttribute("data-chart") || "column"), c = Fn[s];
2450
+ if (!c) return console.warn(`[${e}] Unknown chart type "${s}". Known types: ${Object.keys(Fn).join(", ")}.`), i.setAttribute("data-chart-empty", ""), null;
2451
+ let l = He(i, a.langattribute);
2452
+ if (!l.length) return console.warn(Y(i) ? `[${e}] A chart has no rows in its table, so there is nothing to draw.` : `[${e}] A chart has no table, so there is nothing to draw.`, i), i.setAttribute("data-chart-empty", ""), null;
2453
+ nr(i);
2454
+ let u = Ge(i, l, a.langattribute);
2200
2455
  if (u.length > 1 && !c.series && !c.columns && (console.warn(`[${e}] A ${s} chart uses only the first of its ${u.length} value columns.`), u = u.slice(0, 1)), u.some((e) => e.chart)) {
2201
2456
  let t = c.lines ? u.every((e) => e.chart) ? "Every series has data-chart=\"line\", so the chart is a line chart: set data-chart=\"line\" on the figure." : null : `A ${s} chart cannot draw a series as a line.`;
2202
2457
  t && (console.warn(`[${e}] ${t}`), u = u.map((e) => ({
@@ -2204,7 +2459,7 @@ var Qt = (e) => {
2204
2459
  chart: null
2205
2460
  })));
2206
2461
  }
2207
- Tn(i, u, s, a);
2462
+ ir(i, u, s, a);
2208
2463
  let d = u.some((e) => e.chart), f = u.length > 1;
2209
2464
  f && i.style.setProperty("--_series-count", String(u.length));
2210
2465
  let h = i.hasAttribute("data-chart-stack");
@@ -2218,51 +2473,53 @@ var Qt = (e) => {
2218
2473
  v.appendChild(y);
2219
2474
  let b = i.querySelector(":scope > table"), x = (e) => b ? b.before(e) : i.append(e);
2220
2475
  x(v);
2221
- let S = c.centre ? l.filter((e) => !e.isTotal) : l, C = Math.max(0, Y(S.flatMap((e) => e.cells.slice(0, u.length).map((e) => _e(e.number))))), w = u.map((e, t) => Math.max(0, Y(l.map((e) => _e(e.cells[t]?.number ?? ""))))), T = document.createElement("div");
2476
+ let S = c.centre ? l.filter((e) => !e.isTotal) : l, C = Math.max(0, J(S.flatMap((e) => e.cells.slice(0, u.length).map((e) => be(e.number))))), w = u.map((e, t) => Math.max(0, J(l.map((e) => be(e.cells[t]?.number ?? ""))))), T = document.createElement("div");
2222
2477
  T.className = "tablechart-values", v.appendChild(T);
2223
2478
  let O = u.map((e, t) => l.map((e, n) => {
2224
- let i = e.cells[t] ?? e.cells[0], a = q(r, T);
2479
+ let i = e.cells[t] ?? e.cells[0], a = ue(r, T);
2225
2480
  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)), c.columns && (a.dataset.decimals = String(w[t])), a.dataset.row = String(n + 1), a.style.setProperty("--i", String(e.slot)), c.numbers === !1 && (t || n) && (a.dataset.place = "none"), a;
2226
2481
  })), k = O[0], A = g && c.totals ? l.map((e, t) => {
2227
- let n = q(r, T);
2228
- n.classList.add(...e.classes), n.dataset.kind = "total", n.dataset.row = String(t + 1), n.dataset.value = String(je(e, u.length));
2482
+ let n = ue(r, T);
2483
+ n.classList.add(...e.classes), n.dataset.kind = "total", n.dataset.row = String(t + 1), n.dataset.value = String(Pe(e, u.length));
2229
2484
  let i = e.cells[0];
2230
2485
  return i.prefix && (n.dataset.prefix = i.prefix), i.suffix && (n.dataset.suffix = i.suffix), n.style.setProperty("--i", String(e.slot)), n;
2231
- }) : [], j = l[l.length - 1], ee = u.some((e) => e.focus), te = i.getAttribute("data-chart-legend"), M = f && !c.columns && (te === null ? a.legend || c.legend !== void 0 : te !== "false") ? document.createElement("div") : null;
2232
- M && (M.className = m, M.setAttribute("aria-hidden", "true"), M.inert = !0);
2233
- let N = u.filter((e) => e.chart), P = f && !c.columns ? u.map((e, t) => {
2234
- let n = q(p, M ?? v);
2235
- M && (n.dataset.place = "legend");
2486
+ }) : [], j = l[l.length - 1], M = u.some((e) => e.focus), N = i.getAttribute("data-chart-legend"), P = f && !c.columns && (N === null ? a.legend || c.legend !== void 0 : N !== "false") ? document.createElement("div") : null;
2487
+ P && (P.className = m, P.setAttribute("aria-hidden", "true"), P.inert = !0);
2488
+ let F = u.filter((e) => e.chart), I = f && !c.columns ? u.map((e, t) => {
2489
+ let n = ue(p, P ?? v);
2490
+ P && (n.dataset.place = "legend");
2236
2491
  let r = e.chart ? void 0 : c.legend ?? c.swatch;
2237
- if (r && (n.dataset.swatch = r), n.textContent = e.name, !r && Dt(i, a) !== "step") {
2238
- let r = e.chart ? Te(N, N.indexOf(e)) : Te(u, t);
2492
+ if (r && (n.dataset.swatch = r), n.textContent = e.name, !r && Gn(i, a) !== "step") {
2493
+ let r = e.chart ? Oe(F, F.indexOf(e)) : Oe(u, t);
2239
2494
  n.dataset.marker = r.shape, n.toggleAttribute("data-open", r.open);
2240
2495
  }
2241
- return e.line && !r && (n.dataset.line = e.line), e.key && a.langattribute && n.setAttribute(a.langattribute, e.key), n.dataset.series = String(t + 1), n.style.setProperty("--n", String(t)), n.style.setProperty("--palette", `var(--tablechart-color-${t + 1})`), n.style.setProperty("--m", ee && !e.focus ? "1" : "0"), n.style.setProperty("--i", String(j.slot)), n;
2242
- }) : [], F = c.centre ? q(_, v) : null;
2243
- if (F) {
2496
+ return e.line && !r && (n.dataset.line = e.line), e.key && a.langattribute && n.setAttribute(a.langattribute, e.key), n.dataset.series = String(t + 1), n.style.setProperty("--n", String(t)), n.style.setProperty("--palette", `var(--tablechart-color-${t + 1})`), n.style.setProperty("--m", M && !e.focus ? "1" : "0"), n.style.setProperty("--i", String(j.slot)), n;
2497
+ }) : [], L = c.centre ? ue(_, v) : null;
2498
+ if (L) {
2244
2499
  let e = l.find((e) => e.isTotal), t = e ? e.value : l.reduce((e, t) => e + Math.abs(t.value), 0);
2245
- F.dataset.value = String(t), e && (F.dataset.decimals = String(_e(e.number)));
2500
+ L.dataset.value = String(t), e && (L.dataset.decimals = String(be(e.number)));
2246
2501
  }
2247
- let I = F && !l.some((e) => e.isTotal) ? xn(i, F, a) : null, L = c.categories === "beside", R = document.createElement("div");
2248
- R.className = n, R.setAttribute("aria-hidden", "true"), R.inert = !0, L ? R.dataset.place = "beside" : c.centre && (R.dataset.place = "key"), R.style.setProperty("--_columns", String(l.length));
2249
- let z = 0;
2502
+ let R = L && !l.some((e) => e.isTotal) ? er(i, L, a) : null, ee = c.categories === "beside", z = document.createElement("div");
2503
+ z.className = n, z.setAttribute("aria-hidden", "true"), z.inert = !0, ee ? z.dataset.place = "beside" : c.centre && (z.dataset.place = "key"), z.style.setProperty("--_columns", String(l.length));
2504
+ let B = 0;
2250
2505
  for (let [e, t] of l.entries()) {
2251
2506
  let n = document.createElement("span");
2252
- n.classList.add(...t.classes), n.textContent = t.short ?? t.label, t.key && a.langattribute && n.setAttribute(a.langattribute, t.short ? `${t.key}-short` : t.key), c.centre && (n.dataset.kind = t.isTotal ? "total" : "slice", t.isTotal || (n.dataset.slice = String(z + 1), n.style.setProperty("--n", String(z)), n.style.setProperty("--palette", `var(--tablechart-color-${z + 1})`), z += 1)), n.style.setProperty("--i", String(t.slot)), n.dataset.row = String(e + 1), R.appendChild(n);
2507
+ n.classList.add(...t.classes), n.textContent = t.short ?? t.label, t.key && a.langattribute && n.setAttribute(a.langattribute, t.short ? `${t.key}-short` : t.key), c.centre && (n.dataset.kind = t.isTotal ? "total" : "slice", t.isTotal || (n.dataset.slice = String(B + 1), n.style.setProperty("--n", String(B)), n.style.setProperty("--palette", `var(--tablechart-color-${B + 1})`), B += 1)), n.style.setProperty("--i", String(t.slot)), n.dataset.row = String(e + 1), z.appendChild(n);
2253
2508
  }
2254
- c.centre && i.style.setProperty("--_slice-count", String(z)), L ? v.appendChild(R) : x(R), M && x(M);
2255
- let B = u.filter((e) => !e.group), V = !c.axes && !c.centre && Tt(i, "data-chart-axis", a.axis), ne = c.axes ? {
2256
- titles: B.slice(0, 2).map((e, t) => {
2257
- let n = q(`${E}-title`, v);
2509
+ c.centre && i.style.setProperty("--_slice-count", String(B)), ee ? v.appendChild(z) : x(z), P && x(P);
2510
+ let V = u.filter((e) => !e.group), H = !c.axes && !c.centre && Hn(i, "data-chart-axis", a.axis || !!c.valueAxis), te = c.axes ? {
2511
+ titles: V.slice(0, 2).map((e, t) => {
2512
+ let n = ue(`${E}-title`, v);
2258
2513
  return n.dataset.axis = t ? "y" : "x", n.textContent = e.name, e.key && a.langattribute && n.setAttribute(a.langattribute, e.key), n;
2259
2514
  }),
2260
- ticks: q(`${D}s`, v),
2261
- numbers: !0
2262
- } : V || !c.centre && Tt(i, "data-chart-grid", a.grid) ? {
2515
+ ticks: ue(`${D}s`, v),
2516
+ numbers: !0,
2517
+ right: !1
2518
+ } : H || !c.centre && Hn(i, "data-chart-grid", a.grid) ? {
2263
2519
  titles: [],
2264
- ticks: q(`${D}s`, v),
2265
- numbers: V
2520
+ ticks: ue(`${D}s`, v),
2521
+ numbers: H,
2522
+ right: c.categories !== "beside" && Un(i, a)
2266
2523
  } : null;
2267
2524
  c.text?.({
2268
2525
  figure: i,
@@ -2271,21 +2528,21 @@ var Qt = (e) => {
2271
2528
  series: u,
2272
2529
  config: a
2273
2530
  });
2274
- let re = Ot(i, a) ? We(i, !!c.axes) : null;
2275
- c.axes && i.querySelector("tbody [data-fragment], thead [data-fragment]") && X.log(`A ${s} chart has one step, with data-fragment on the figure; its rows and columns have no steps of their own.`, i), re && i.setAttribute("data-steps", "");
2276
- let ie = i.getAttribute("data-chart-keys"), ae = re && a.controls ? Je({
2531
+ let ne = Kn(i, a) ? qe(i, !!c.axes) : null;
2532
+ c.axes && Y(i)?.querySelector("tbody [data-fragment], thead [data-fragment]") && X.log(`A ${s} chart has one step, with data-fragment on the figure; its rows and columns have no steps of their own.`, i), ne && i.setAttribute("data-steps", "");
2533
+ let re = i.getAttribute("data-chart-keys"), ie = ne && a.controls ? Ze({
2277
2534
  previous: a.previouslabel,
2278
2535
  next: a.nextlabel,
2279
2536
  hint: a.stephint
2280
2537
  }, {
2281
- previous: ie && `${ie}-previous`,
2282
- next: ie && `${ie}-next`,
2283
- hint: ie && `${ie}-step`
2538
+ previous: re && `${re}-previous`,
2539
+ next: re && `${re}-next`,
2540
+ hint: re && `${re}-step`
2284
2541
  }, a.langattribute) : null;
2285
- ae && x(ae);
2286
- let oe = Array.from(i.querySelectorAll("[data-annotation]")).map((t) => {
2287
- let n = t.getAttribute("data-annotation"), r = fn[n];
2288
- if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(fn).join(", ")}.`), null;
2542
+ ie && x(ie);
2543
+ let ae = Array.from(i.querySelectorAll("[data-annotation]")).map((t) => {
2544
+ let n = t.getAttribute("data-annotation"), r = Ln[n];
2545
+ if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(Ln).join(", ")}.`), null;
2289
2546
  let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= u.length ? i - 1 : 0;
2290
2547
  return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which is not there; it reads line 1.`), {
2291
2548
  spec: t,
@@ -2295,19 +2552,19 @@ var Qt = (e) => {
2295
2552
  after: l.length
2296
2553
  };
2297
2554
  }).filter((e) => e !== null);
2298
- if (!L && !c.centre && !c.axes) for (let [e, t] of l.entries()) {
2555
+ if (!ee && !c.centre && !c.axes) for (let [e, t] of l.entries()) {
2299
2556
  if (!t.note) continue;
2300
2557
  let n = document.createElement("span");
2301
- n.dataset.annotation = "note", n.dataset.row = String(e + 1), n.textContent = t.note, t.noteKey && n.setAttribute("data-i18n", t.noteKey), oe.push({
2558
+ n.dataset.annotation = "note", n.dataset.row = String(e + 1), n.textContent = t.note, t.noteKey && n.setAttribute("data-i18n", t.noteKey), ae.push({
2302
2559
  spec: n,
2303
- type: Ce,
2304
- badge: Ce.create(n, v),
2560
+ type: Ee,
2561
+ badge: Ee.create(n, v),
2305
2562
  series: 0,
2306
2563
  after: l.length
2307
2564
  });
2308
2565
  }
2309
- Ot(i, a) && i.setAttribute("data-animate", On(i, s, a, !!re));
2310
- let H = {
2566
+ Kn(i, a) && i.setAttribute("data-animate", sr(i, s, a, !!ne));
2567
+ let oe = {
2311
2568
  figure: i,
2312
2569
  plot: v,
2313
2570
  svg: y,
@@ -2317,243 +2574,158 @@ var Qt = (e) => {
2317
2574
  values: k,
2318
2575
  series: u,
2319
2576
  seriesValues: O,
2320
- names: M ? [] : P,
2321
- categories: Array.from(R.children),
2322
- centre: F,
2323
- axes: ne,
2577
+ names: P ? [] : I,
2578
+ categories: Array.from(z.children),
2579
+ centre: L,
2580
+ axes: te,
2324
2581
  stacked: g,
2325
2582
  totals: A,
2326
- totalCell: I,
2583
+ totalCell: R,
2327
2584
  rowAt: null,
2328
2585
  rowBox: null,
2329
2586
  pointOf: null,
2330
- annotations: oe,
2587
+ crossingOf: null,
2588
+ crosshair: null,
2589
+ annotations: ae,
2331
2590
  checks: [],
2332
- plan: re,
2591
+ plan: ne,
2333
2592
  step: 0,
2334
- controls: ae
2335
- }, U = () => gn(i, y);
2336
- y.addEventListener("transitionend", U), y.addEventListener("transitioncancel", U), ae?.addEventListener("click", (e) => {
2593
+ controls: ie
2594
+ }, se = () => Yn(i, y);
2595
+ y.addEventListener("transitionend", se), y.addEventListener("transitioncancel", se), ie?.addEventListener("click", (e) => {
2337
2596
  let t = e.target.closest("button")?.dataset.go;
2338
- t && qe(H, H.step + (t === "next" ? 1 : -1));
2339
- }), qe(H, 0, !0);
2340
- let se = i.getAttribute("data-chart-tooltip"), W = se === "false" ? !1 : se === "auto" ? "auto" : se !== null || a.tooltip;
2341
- return W && yt(H, a, W === "auto"), kn(H, a), H;
2342
- }, Dn = {
2597
+ t && Xe(oe, oe.step + (t === "next" ? 1 : -1));
2598
+ }), Xe(oe, 0, !0);
2599
+ let ce = i.getAttribute("data-chart-tooltip"), U = ce === "false" ? !1 : ce === "auto" || ce === "crosshair" ? ce : ce !== null || a.tooltip;
2600
+ return U === "crosshair" && (s === "line" || s === "area" || c.crosshair) ? Yt(oe) : U && St(oe, a, U === "auto"), cr(oe, a), oe;
2601
+ }, or = {
2343
2602
  grow: "grow",
2344
2603
  sweep: "sweep"
2345
- }, On = (e, t, n, r) => {
2346
- let i = t === "line" || t === "area", a = Dn[e.getAttribute("data-chart-animate") ?? ""] ?? Dn[String(n.animate)];
2347
- return i ? r ? "sweep" : a ?? "sweep" : t === "donut" || t === "waterfall" ? a ?? "grow" : "grow";
2348
- }, kn = (e, t) => {
2604
+ }, sr = (e, t, n, r) => {
2605
+ let i = t === "line" || t === "area", a = or[e.getAttribute("data-chart-animate") ?? ""] ?? or[String(n.animate)];
2606
+ return i ? r ? "sweep" : a ?? "sweep" : [
2607
+ "donut",
2608
+ "pie",
2609
+ "waterfall"
2610
+ ].includes(t) ? a ?? "grow" : "grow";
2611
+ }, cr = (e, t) => {
2349
2612
  let n = [
2350
2613
  ...e.seriesValues.flat(),
2351
2614
  ...e.totals,
2352
2615
  ...e.totalCell ? [e.totalCell] : []
2353
2616
  ];
2354
- for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ? xt(r, r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale) : r.textContent = r.dataset.missing;
2355
- }, An = (e) => {
2356
- bt(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${m}`)?.remove(), e.controls?.remove();
2357
- }, jn = null, Mn = (e) => {
2358
- if (jn ?? (jn = document.createElement("canvas").getContext("2d", { willReadFrequently: !0 })), !jn) return [
2359
- 0,
2360
- 0,
2361
- 0,
2362
- 1
2363
- ];
2364
- jn.clearRect(0, 0, 1, 1), jn.fillStyle = e, jn.fillRect(0, 0, 1, 1);
2365
- let [t, n, r, i] = jn.getImageData(0, 0, 1, 1).data;
2366
- return [
2367
- t,
2368
- n,
2369
- r,
2370
- i / 255
2371
- ];
2372
- }, Nn = ([e, t, n]) => {
2373
- let r = (e) => {
2374
- let t = e / 255;
2375
- return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
2376
- };
2377
- return .2126 * r(e) + .7152 * r(t) + .0722 * r(n);
2378
- }, Pn = (e) => getComputedStyle(e).getPropertyValue("--tablechart-contrast-wcag").trim() === "3" ? 3 : 2, Fn = ([e, t, n]) => {
2379
- let r = .2126729 * (e / 255) ** 2.4 + .7151522 * (t / 255) ** 2.4 + .072175 * (n / 255) ** 2.4;
2380
- return r < .022 ? r + (.022 - r) ** 1.414 : r;
2381
- }, In = (e, t) => {
2382
- let n = Fn(e), r = Fn(t);
2383
- if (Math.abs(r - n) < 5e-4) return 0;
2384
- let i = r > n ? (r ** .56 - n ** .57) * 1.14 : (r ** .65 - n ** .62) * 1.14;
2385
- return Math.abs(i) < .1 ? 0 : (Math.abs(i) - .027) * 100;
2386
- }, Ln = (e, t, n) => e === 3 ? In(t, n) : Rn(t, n), Rn = (e, t) => {
2387
- let [n, r] = [Nn(e), Nn(t)].sort((e, t) => t - e);
2388
- return (n + .05) / (r + .05);
2389
- }, zn = (e, t) => {
2390
- let n = document.createElement("span");
2391
- n.style.color = t, e.append(n);
2392
- let r = Mn(getComputedStyle(n).color);
2393
- return n.remove(), r;
2394
- }, Bn = (e) => {
2395
- let t = [], n = null;
2396
- for (let r = e; r && !n; r = r.parentElement) {
2397
- let { background: e, backgroundColor: i } = r.dataset, a = Mn(i || (e && CSS.supports("color", e) ? e : "") || getComputedStyle(r).backgroundColor);
2398
- a[3] >= 1 ? n = a : a[3] > 0 && t.push(a);
2399
- }
2400
- n ?? (n = zn(e, "Canvas"));
2401
- for (let [e, r, i, a] of t.reverse()) n = [
2402
- e,
2403
- r,
2404
- i
2405
- ].map((e, t) => e * a + n[t] * (1 - a));
2406
- let r = `rgb(${n.slice(0, 3).map(Math.round).join(" ")})`;
2407
- return e.style.getPropertyValue("--_surface") !== r && (e.style.setProperty("--_surface", r), !0);
2408
- }, Vn = (e) => zn(e, "var(--tablechart-surface, var(--_surface, Canvas))"), Hn = (e, t) => e.querySelector(`:is(.tablechart-bar, .tablechart-piece)[data-row="${t.dataset.row}"]${t.dataset.series ? `[data-series="${t.dataset.series}"]` : ""}`), Un = [
2409
- 255,
2410
- 255,
2411
- 255
2412
- ], Wn = [
2413
- 0,
2414
- 0,
2415
- 0
2416
- ], Gn = (e, t, n) => {
2417
- let r = Ln(n, Un, e), i = Ln(n, Wn, e);
2418
- return r >= t ? Un : i >= t ? Wn : n === 2 && r >= 4.5 || r > i ? Un : Wn;
2419
- }, Kn = (e) => {
2420
- let t = e.querySelectorAll(".tablechart-value[data-place='inside']");
2421
- if (!t.length) return;
2422
- let n = Vn(e).slice(0, 3), r = Nn(n) > .179, i = (t, n) => {
2423
- let [r, i, a, o] = zn(e, `var(${t}, transparent)`);
2424
- return o > 0 ? [
2425
- r,
2426
- i,
2427
- a
2428
- ] : n;
2429
- }, a = Pn(e), o = Number.parseFloat(getComputedStyle(e).getPropertyValue("--tablechart-value-contrast")) || (a === 3 ? 60 : 5), s = Mn(getComputedStyle(e).color).slice(0, 3), c = i("--tablechart-value-on-dark", r ? n : s), l = i("--tablechart-value-on-light", r ? s : n);
2430
- for (let n of t) {
2431
- let t = Hn(e, n);
2432
- if (!t || n.hasAttribute("data-left-out")) continue;
2433
- let r = Mn(getComputedStyle(t).fill), i = Ln(a, c, r) > Ln(a, l, r) ? c : l, s = Ln(a, i, r) >= o ? i : Gn(r, o, a);
2434
- n.style.setProperty("--_ink", `rgb(${s.join(" ")})`);
2435
- }
2436
- }, qn = (e) => {
2437
- let t = e.querySelectorAll(".tablechart-name:not([data-place='legend'])");
2438
- if (!t.length) return;
2439
- let n = Pn(e), r = n === 3 ? 60 : 4.5, i = Vn(e).slice(0, 3), a = Mn(getComputedStyle(e).color).slice(0, 3);
2440
- for (let o of t) {
2441
- let t = e.querySelector(`.tablechart-series[data-series="${o.dataset.series}"]:not([data-muted])`);
2442
- if (o.style.removeProperty("--_ink"), !t) continue;
2443
- let s = Mn(getComputedStyle(t).stroke).slice(0, 3);
2444
- for (let e = 0; e <= 20; e++) {
2445
- let t = s.map((t, n) => Math.round(t + (a[n] - t) * e / 20));
2446
- if (!(Ln(n, t, i) < r && e < 20)) {
2447
- e && o.style.setProperty("--_ink", `rgb(${t.join(" ")})`);
2448
- break;
2449
- }
2450
- }
2451
- }
2452
- }, Jn = (e) => Number(e.toPrecision(12)), Yn = (e, t) => {
2617
+ for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ? Xt(r, r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale) : r.textContent = r.dataset.missing;
2618
+ }, lr = (e) => {
2619
+ Ct(e), e.crosshair?.hide(), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${m}`)?.remove(), e.controls?.remove();
2620
+ }, ur = (e) => Number(e.toPrecision(12)), dr = (e, t) => {
2453
2621
  let n = e / Math.max(1, t) || 1, r = 10 ** Math.floor(Math.log10(n)), i = n / r;
2454
- return Jn((i < 1.42 ? 1 : i < 3.17 ? 2 : i < 7.08 ? 5 : 10) * r);
2455
- }, Xn = (e, t, n) => {
2622
+ return ur((i < 1.42 ? 1 : i < 3.17 ? 2 : i < 7.08 ? 5 : 10) * r);
2623
+ }, fr = (e, t, n) => {
2456
2624
  let r = [];
2457
- for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(Jn(i * n));
2625
+ for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(ur(i * n));
2458
2626
  return r;
2459
- }, Zn = (e, t = e) => {
2627
+ }, pr = (e, t = e) => {
2460
2628
  do {
2461
2629
  let t = Math.round(e / 10 ** Math.floor(Math.log10(e) + 1e-9));
2462
- e = Jn(e * (t === 2 ? 2.5 : 2));
2630
+ e = ur(e * (t === 2 ? 2.5 : 2));
2463
2631
  } while (Math.abs(e / t - Math.round(e / t)) > 1e-9);
2464
2632
  return e;
2465
- }, Qn = (e) => {
2633
+ }, mr = (e) => {
2466
2634
  let t = (e ?? "").trim().split(/\s+/).map(Number.parseFloat);
2467
2635
  return t.length > 1 && t.every(Number.isFinite) ? t.sort((e, t) => e - t) : null;
2468
- }, $n = (e, t, n) => {
2636
+ }, hr = (e, t, n) => {
2469
2637
  if (n && n.length > 2) return {
2470
2638
  min: n[0],
2471
2639
  max: n[n.length - 1],
2472
2640
  step: 0,
2473
2641
  ticks: n
2474
2642
  };
2475
- let r = n?.[0] ?? -Y(e.map((e) => -e)), i = n?.[1] ?? Y(e);
2643
+ let r = n?.[0] ?? -J(e.map((e) => -e)), i = n?.[1] ?? J(e);
2476
2644
  if (!n) {
2477
2645
  let e = (i - r || Math.abs(i) || 1) * .05;
2478
2646
  r -= e, i += e;
2479
2647
  }
2480
- let a = Yn(i - r, t);
2648
+ let a = dr(i - r, t);
2481
2649
  return {
2482
2650
  min: r,
2483
2651
  max: i,
2484
2652
  step: a,
2485
- ticks: Xn(r, i, a)
2653
+ ticks: fr(r, i, a)
2486
2654
  };
2487
- }, er = (e, t) => {
2655
+ }, gr = (e, t) => {
2488
2656
  let { step: n, ticks: r } = e;
2489
- for (; n && r.length > 2 && !t(r);) n = Zn(n, e.step), r = Xn(e.min, e.max, n);
2657
+ for (; n && r.length > 2 && !t(r);) n = pr(n, e.step), r = fr(e.min, e.max, n);
2490
2658
  return {
2491
2659
  ...e,
2492
2660
  step: n,
2493
2661
  ticks: r
2494
2662
  };
2495
- }, tr = (e, t, n, r) => {
2663
+ }, _r = (e, t, n, r) => {
2496
2664
  let { plot: i, rows: a, type: o, series: s } = e, c = o.categories === "beside", l = c ? null : e.categories[0]?.parentElement, u;
2497
- i.style.margin = "", l && (l.style.marginLeft = "");
2665
+ i.style.margin = "", l && (l.style.margin = "");
2498
2666
  let d = i.clientWidth;
2499
2667
  if (!d) return null;
2500
- let f = o.segments?.(a) ?? [], p = e.stacked ? a.flatMap((e) => Object.values(Ae(e, s.length, o.running))) : f.some((e) => e.kind === "up" || e.kind === "down") ? f.flatMap((e) => [e.from, e.to]) : a.flatMap((e) => e.cells.slice(0, s.length).filter((e) => !e.missing).map((e) => e.value)), m = Math.min(0, -Y(p.map((e) => -e))), h = Math.max(0, Y(p)), g = Number.parseFloat(getComputedStyle(i).fontSize) || 16, { chartScaleY: _, chartScale: v } = e.figure.dataset, y = Qn(_ ?? v);
2501
- if (y && y.length > 2) u = {
2502
- min: y[0],
2503
- max: y[y.length - 1],
2668
+ let f = o.segments?.(a) ?? [], p = e.stacked ? a.flatMap((e) => Object.values(Ne(e, s.length, o.running))) : f.some((e) => e.kind === "up" || e.kind === "down") ? f.flatMap((e) => [e.from, e.to]) : a.flatMap((e) => e.cells.slice(0, s.length).filter((e) => !e.missing).map((e) => e.value)), m = o.floats ? [] : [0], h = Math.min(...m, -J(p.map((e) => -e))), g = Math.max(...m, J(p)), _ = Number.parseFloat(getComputedStyle(i).fontSize) || 16, { chartScaleY: v, chartScale: y } = e.figure.dataset, b = mr(v ?? y);
2669
+ if (b && b.length > 2) u = {
2670
+ min: b[0],
2671
+ max: b[b.length - 1],
2504
2672
  step: 0,
2505
- ticks: y
2673
+ ticks: b
2506
2674
  };
2507
2675
  else {
2508
- let [t, n] = y ?? [Math.min(m, e.agreed?.bottom ?? m), Math.max(h, e.agreed?.ceiling ?? h)], i = Yn(n - t, Math.max((c ? d / 9 : Math.min(d * r, Ct(e.figure, 1)[1]) / 3) / g, 2)), a = (e, t) => y ? e : Number(((t ? Math.ceil : Math.floor)(e / i - 1e-9 * (t ? 1 : -1)) * i).toPrecision(12)), o = a(t, !1), s = a(n, !0);
2676
+ let [t, n] = b ?? [Math.min(h, e.agreed?.bottom ?? h), Math.max(g, e.agreed?.ceiling ?? g)], i = dr(n - t, Math.max((c ? d / 9 : Math.min(d * r, Bn(e.figure, 1)[1]) / 3) / _, 2)), a = (e, t) => b ? e : Number(((t ? Math.ceil : Math.floor)(e / i - 1e-9 * (t ? 1 : -1)) * i).toPrecision(12)), o = a(t, !1), s = a(n, !0);
2509
2677
  u = {
2510
2678
  min: o,
2511
2679
  max: s,
2512
2680
  step: i,
2513
- ticks: Xn(o, s, i)
2681
+ ticks: fr(o, s, i)
2514
2682
  };
2515
2683
  }
2516
2684
  n.ticks.textContent = "";
2517
- let b = a.find((e) => !e.missing), x = Y(u.ticks.map((e) => _e(String(e))));
2685
+ let x = a.find((e) => !e.missing), S = o.floats ? a.flatMap((e) => e.cells.slice(0, s.length).map((e) => be(e.number))) : [], C = J([...u.ticks.map((e) => be(String(e))), ...S]);
2518
2686
  for (let e of u.ticks) {
2519
- let r = q(D, n.ticks);
2520
- r.dataset.value = String(e), r.dataset.place = "none", b?.prefix && (r.dataset.prefix = b.prefix), b?.suffix && (r.dataset.suffix = b.suffix), xt(r, x, t.locale);
2687
+ let r = ue(D, n.ticks);
2688
+ r.dataset.value = String(e), r.dataset.place = "none", x?.prefix && (r.dataset.prefix = x.prefix), x?.suffix && (r.dataset.suffix = x.suffix), Xt(r, C, t.locale);
2521
2689
  }
2522
2690
  if (n.numbers) {
2523
2691
  let e = Array.from(n.ticks.children);
2524
2692
  for (let t of e) delete t.dataset.place;
2525
- N(e), c ? i.style.marginBottom = `${(e[0] ? P(e[0]).height : 0) + 6}px` : (i.style.marginLeft = `${Y([0, ...e.map((e) => P(e).width)]) + 10}px`, l && (l.style.marginLeft = i.style.marginLeft));
2693
+ if (F(e), c) i.style.marginBottom = `${(e[0] ? I(e[0]).height : 0) + 6}px`;
2694
+ else {
2695
+ let t = n.right ? "marginRight" : "marginLeft";
2696
+ i.style[t] = `${J([0, ...e.map((e) => I(e).width)]) + 10}px`, l && (l.style[t] = i.style[t]);
2697
+ }
2526
2698
  }
2527
2699
  return u;
2528
- }, nr = (e, t, n, r, i, a) => {
2529
- let { plot: o, rows: s, series: c } = e, l = Number.parseFloat(getComputedStyle(o).fontSize) || 16, u = c.flatMap((e, t) => e.group ? [] : [t]).slice(0, 2), d = s.filter((e) => u.every((t) => e.cells[t] && !e.cells[t].missing)), { chartScaleX: f, chartScaleY: p, chartScale: m } = e.figure.dataset, h = [Qn(f), Qn(p ?? m)], g = u.map((e, t) => $n(d.length ? d.map((t) => t.cells[e].value) : [0, 1], Math.max(t ? r / i / (l * 4) : a / (l * 9), 4), h[t]));
2700
+ }, vr = (e, t, n, r, i, a) => {
2701
+ let { plot: o, rows: s, series: c } = e, l = Number.parseFloat(getComputedStyle(o).fontSize) || 16, u = c.flatMap((e, t) => e.group ? [] : [t]).slice(0, 2), d = s.filter((e) => u.every((t) => e.cells[t] && !e.cells[t].missing)), { chartScaleX: f, chartScaleY: p, chartScale: m } = e.figure.dataset, h = [mr(f), mr(p ?? m)], g = u.map((e, t) => hr(d.length ? d.map((t) => t.cells[e].value) : [0, 1], Math.max(t ? r / i / (l * 4) : a / (l * 9), 4), h[t]));
2530
2702
  return n.ticks.textContent = "", g.forEach((e, r) => {
2531
- let i = d[0]?.cells[u[r]], a = Y(e.ticks.map((e) => _e(String(e))));
2703
+ let i = d[0]?.cells[u[r]], a = J(e.ticks.map((e) => be(String(e))));
2532
2704
  for (let o of e.ticks) {
2533
- let e = q(D, n.ticks);
2534
- e.dataset.axis = r ? "y" : "x", e.dataset.value = String(o), i?.prefix && (e.dataset.prefix = i.prefix), i?.suffix && (e.dataset.suffix = i.suffix), xt(e, a, t.locale);
2705
+ let e = ue(D, n.ticks);
2706
+ e.dataset.axis = r ? "y" : "x", e.dataset.value = String(o), i?.prefix && (e.dataset.prefix = i.prefix), i?.suffix && (e.dataset.suffix = i.suffix), Xt(e, a, t.locale);
2535
2707
  }
2536
2708
  }), g;
2537
- }, rr = (e, t, n, r, i) => {
2538
- let a = 6 * i, [o, s] = e.titles, c = (e) => e ? P(e).width * i : 0, l = (e) => e ? P(e).height * i : 0, u = t.filter((e) => e.dataset.axis === "x"), d = t.filter((e) => e.dataset.axis === "y"), f = l(t[0]), p = c(s) + Y([0, ...d.map(c)]) + 2 * a, m = f / 2, h = [
2709
+ }, yr = (e, t, n, r, i) => {
2710
+ let a = 6 * i, [o, s] = e.titles, c = (e) => e ? I(e).width * i : 0, l = (e) => e ? I(e).height * i : 0, u = t.filter((e) => e.dataset.axis === "x"), d = t.filter((e) => e.dataset.axis === "y"), f = l(t[0]), p = c(s) + J([0, ...d.map(c)]) + 2 * a, m = f / 2, h = [
2539
2711
  p,
2540
2712
  m,
2541
- k - p - Y([0, ...u.map(c)]) / 2,
2713
+ k - p - J([0, ...u.map(c)]) / 2,
2542
2714
  r - m - l(o) - f - 2 * a
2543
- ], [g, _, v, y] = h, [b, x] = n, S = (e) => g + (e - b.min) / (b.max - b.min || 1) * v, C = (e) => _ + y - (e - x.min) / (x.max - x.min || 1) * y, w = (e) => c(u.find((t) => Number(t.dataset.value) === e)), T = [er(b, (e) => e.every((t, n) => !n || S(t) - S(e[n - 1]) > (w(t) + w(e[n - 1])) / 2 + a)).ticks, er(x, (e) => e.every((t, n) => !n || C(e[n - 1]) - C(t) > f + a / 2)).ticks];
2715
+ ], [g, _, v, y] = h, [b, x] = n, S = (e) => g + (e - b.min) / (b.max - b.min || 1) * v, C = (e) => _ + y - (e - x.min) / (x.max - x.min || 1) * y, w = (e) => c(u.find((t) => Number(t.dataset.value) === e)), T = [gr(b, (e) => e.every((t, n) => !n || S(t) - S(e[n - 1]) > (w(t) + w(e[n - 1])) / 2 + a)).ticks, gr(x, (e) => e.every((t, n) => !n || C(e[n - 1]) - C(t) > f + a / 2)).ticks];
2544
2716
  for (let e of t) {
2545
2717
  let t = Number(e.dataset.value), n = e.dataset.axis === "x" ? 0 : 1, i = T[n].includes(t);
2546
- e.dataset.place = i ? n ? "before" : "below" : "none", i && J(e, n ? g - a : S(t), n ? C(t) : _ + y + a, k, r);
2718
+ e.dataset.place = i ? n ? "before" : "below" : "none", i && q(e, n ? g - a : S(t), n ? C(t) : _ + y + a, k, r);
2547
2719
  }
2548
- return o && J(o, g + v / 2, r - l(o), k, r), s && J(s, 0, _ + y / 2, k, r), {
2720
+ return o && q(o, g + v / 2, r - l(o), k, r), s && q(s, 0, _ + y / 2, k, r), {
2549
2721
  frame: h,
2550
2722
  x: S,
2551
2723
  y: C,
2552
2724
  shownTicks: T
2553
2725
  };
2554
- }, ir = (e, t, n, r, i, a, o) => {
2726
+ }, br = (e, t, n, r, i, a, o) => {
2555
2727
  let { svg: s } = e, [c, l, u, d] = n, [f, p] = a;
2556
- Tt(e.figure, "data-chart-grid", t.grid) && s.appendChild(G("path", {
2728
+ Hn(e.figure, "data-chart-grid", t.grid) && s.appendChild(G("path", {
2557
2729
  class: O,
2558
2730
  d: [...f.map((e) => `M${W(r(e))},${W(l)}V${W(l + d)}`), ...p.map((e) => `M${W(c)},${W(i(e))}H${W(c + u)}`)].join("")
2559
2731
  })), s.appendChild(G("path", {
@@ -2564,21 +2736,23 @@ var Qt = (e) => {
2564
2736
  ...p.map((e) => `M${W(c)},${W(i(e))}h${W(-4 * o)}`)
2565
2737
  ].join("")
2566
2738
  }));
2567
- }, ar = (e, t, n, r, i, a, o, s, c) => {
2568
- let { svg: l, type: u } = e, d = u.categories === "beside", f = 6 * s, p = Array.from(n.ticks.children), m = (e) => P(p.find((t) => Number(t.dataset.value) === e) ?? p[0]), h = er(r, (e) => e.every((t, n) => !n || (d ? i(t) - i(e[n - 1]) > (m(t).width + m(e[n - 1]).width) / 2 * s + f : i(e[n - 1]) - i(t) > m(t).height * s + f / 2))).ticks.filter((e) => !a || e <= a.lo || e >= a.hi);
2739
+ }, xr = (e, t, n, r, i, a, o, s, c) => {
2740
+ let { svg: l, type: u } = e, d = u.categories === "beside", f = 6 * s, p = Array.from(n.ticks.children), m = (e) => I(p.find((t) => Number(t.dataset.value) === e) ?? p[0]), h = gr(r, (e) => e.every((t, n) => !n || (d ? i(t) - i(e[n - 1]) > (m(t).width + m(e[n - 1]).width) / 2 * s + f : i(e[n - 1]) - i(t) > m(t).height * s + f / 2))).ticks.filter((e) => !a || e <= a.lo || e >= a.hi), g = n.right && !d, _ = g ? k : 0;
2569
2741
  for (let e of p) {
2570
2742
  let t = Number(e.dataset.value), r = n.numbers && h.includes(t);
2571
- e.dataset.place = r ? d ? "below" : "before" : "none", r && J(e, d ? i(t) : -f, d ? o + f : i(t), k, o);
2743
+ e.dataset.place = r ? d ? "below" : g ? "after" : "before" : "none", r && q(e, d ? i(t) : g ? _ + f : -f, d ? o + f : i(t), k, o);
2572
2744
  }
2573
- let g = k - c;
2574
- Tt(e.figure, "data-chart-grid", t.grid) && l.prepend(G("path", {
2745
+ let v = g && n.numbers ? k : k - c;
2746
+ Hn(e.figure, "data-chart-grid", t.grid) && l.prepend(G("path", {
2575
2747
  class: O,
2576
- d: h.map((e) => d ? `M${W(i(e))},0V${W(o)}` : `M0,${W(i(e))}H${W(g)}`).join("")
2577
- })), n.numbers && l.appendChild(G("path", {
2748
+ d: h.map((e) => d ? `M${W(i(e))},0V${W(o)}` : `M0,${W(i(e))}H${W(v)}`).join("")
2749
+ }));
2750
+ let y = Number(l.querySelector(".tablechart-rule")?.getAttribute("y1")), b = Math.max(i(r.min), Number.isFinite(y) ? y : 0);
2751
+ n.numbers && l.appendChild(G("path", {
2578
2752
  class: E,
2579
- d: [d ? `M${W(i(r.min))},${W(o)}H${W(i(r.max))}` : `M0,${W(i(r.max))}V${W(i(r.min))}`, ...h.map((e) => d ? `M${W(i(e))},${W(o)}v${W(4 * s)}` : `M0,${W(i(e))}h${W(-4 * s)}`)].join("")
2753
+ d: [d ? `M${W(i(r.min))},${W(o)}H${W(i(r.max))}` : `M${_},${W(i(r.max))}V${W(b)}`, ...h.map((e) => d ? `M${W(i(e))},${W(o)}v${W(4 * s)}` : `M${_},${W(i(e))}h${W((g ? 4 : -4) * s)}`)].join("")
2580
2754
  }));
2581
- }, or = (e) => {
2755
+ }, Sr = (e) => {
2582
2756
  let t = e.closest("[data-chart-group]");
2583
2757
  if (!t) return null;
2584
2758
  let n = t.getAttribute("data-chart-group"), r = n ? Array.from(document.querySelectorAll(`[data-chart-group="${CSS.escape(n)}"]`)) : [t];
@@ -2586,36 +2760,36 @@ var Qt = (e) => {
2586
2760
  figures: r.flatMap((e) => e.matches("figure") ? [e] : Array.from(e.querySelectorAll("figure"))),
2587
2761
  shared: r.some((e) => e.hasAttribute("data-chart-group-scale"))
2588
2762
  };
2589
- }, sr = /* @__PURE__ */ new WeakMap(), cr = /* @__PURE__ */ new WeakMap(), lr = !1, ur = (e, t) => {
2590
- let n = or(e);
2591
- if (!n?.shared || lr) return;
2592
- let r = n.figures.flatMap((e) => sr.get(e) ?? []).filter(({ state: e }) => e.plot.clientWidth), i = r.map(({ state: e }) => `${e.plot.clientWidth}:${e.rows.map((e) => e.cells.map((e) => e.value)).join()}`).join("|"), a = n.figures[0];
2593
- if (cr.get(a) === i) return;
2594
- cr.set(a, i), lr = !0;
2763
+ }, Cr = /* @__PURE__ */ new WeakMap(), wr = /* @__PURE__ */ new WeakMap(), Tr = !1, Er = (e, t) => {
2764
+ let n = Sr(e);
2765
+ if (!n?.shared || Tr) return;
2766
+ let r = n.figures.flatMap((e) => Cr.get(e) ?? []).filter(({ state: e }) => e.plot.clientWidth), i = r.map(({ state: e }) => `${e.plot.clientWidth}:${e.rows.map((e) => e.cells.map((e) => e.value)).join()}`).join("|"), a = n.figures[0];
2767
+ if (wr.get(a) === i) return;
2768
+ wr.set(a, i), Tr = !0;
2595
2769
  for (let { state: e, config: n } of r) e.agreed = void 0, t(e, n);
2596
2770
  let o = r.flatMap(({ state: e }) => e.measured ? [{
2597
2771
  state: e,
2598
2772
  ...e.measured,
2599
2773
  top: e.figure.getBoundingClientRect().top
2600
- }] : []), s = Y(o.map((e) => e.ceiling)), c = -Y(o.map((e) => -e.bottom));
2774
+ }] : []), s = J(o.map((e) => e.ceiling)), c = -J(o.map((e) => -e.bottom));
2601
2775
  for (let e of o) {
2602
2776
  let t = o.filter((t) => Math.abs(t.top - e.top) < 4);
2603
2777
  e.state.agreed = {
2604
2778
  ceiling: s,
2605
2779
  bottom: c,
2606
- height: Y(t.map((e) => e.height)),
2607
- room: Y(t.map((e) => e.room)),
2608
- floor: Y(t.map((e) => e.floor))
2780
+ height: J(t.map((e) => e.height)),
2781
+ room: J(t.map((e) => e.room)),
2782
+ floor: J(t.map((e) => e.floor))
2609
2783
  };
2610
2784
  }
2611
2785
  for (let { state: e, config: n } of r) t(e, n);
2612
- lr = !1;
2613
- }, dr = (e, t) => {
2614
- sr.set(e.figure, {
2786
+ Tr = !1;
2787
+ }, Dr = (e, t) => {
2788
+ Cr.set(e.figure, {
2615
2789
  state: e,
2616
2790
  config: t
2617
2791
  });
2618
- }, fr = (e) => {
2792
+ }, Or = (e) => {
2619
2793
  let t = e.closest("[data-chart-group]");
2620
2794
  if (!t) return;
2621
2795
  let r = t.getAttribute("data-chart-group"), i = (r ? Array.from(document.querySelectorAll(`[data-chart-group="${CSS.escape(r)}"]`)) : [t]).flatMap((e) => Array.from(e.querySelectorAll(`.${n}:not([data-place])`)));
@@ -2628,35 +2802,44 @@ var Qt = (e) => {
2628
2802
  for (let e = 0; e < a.length;) {
2629
2803
  let t = e;
2630
2804
  for (; t + 1 < a.length && a[t + 1].top - a[e].top < 4;) t++;
2631
- let n = a.slice(e, t + 1), r = Y(n.map(({ tall: e }) => e));
2805
+ let n = a.slice(e, t + 1), r = J(n.map(({ tall: e }) => e));
2632
2806
  if (n.length > 1) for (let { row: e, tall: t } of n) t < r && (e.style.minHeight = `${r}px`);
2633
2807
  e = t + 1;
2634
2808
  }
2635
- }, pr = (e, t, n, r) => {
2809
+ }, kr = (e) => {
2810
+ let t = Infinity;
2811
+ for (let t of e) t.removeAttribute("data-repeat"), t.removeAttribute("data-run"), t.style.removeProperty("--_run");
2812
+ for (let n = 0; n < e.length;) {
2813
+ let r = e[n].textContent?.trim() ?? "", i = n + 1;
2814
+ for (; i < e.length && r && e[i].textContent?.trim() === r;) e[i++].setAttribute("data-repeat", "");
2815
+ i - n > 1 && (e[n].setAttribute("data-run", ""), e[n].style.setProperty("--_run", String(i - n))), t = Math.min(t, i - n), n = i;
2816
+ }
2817
+ return e.some((e) => e.hasAttribute("data-run")) ? t : 1;
2818
+ }, Ar = (e, t, n, r) => {
2636
2819
  let { rows: i, svg: a, type: o } = e, s = e.categories[0]?.parentElement;
2637
2820
  if (s && o.categories !== "beside" && !o.centre) {
2638
2821
  s.style.height = `${s.offsetHeight}px`, s.removeAttribute("data-thinned");
2639
2822
  for (let t of e.categories) t.removeAttribute("data-left-out"), t.removeAttribute("data-edge");
2640
- let c = e.categories.filter((e) => e.offsetParent !== null);
2641
- if (!z(s, c, (e) => ({
2823
+ let c = kr(e.categories), l = e.categories.filter((e) => e.offsetParent !== null), u = getComputedStyle(s), d = (s.clientWidth - Number.parseFloat(u.paddingLeft) - Number.parseFloat(u.paddingRight)) / i.length, f = (e) => e.hasAttribute("data-run") ? d * Number(e.style.getPropertyValue("--_run")) : e.clientWidth;
2824
+ if (!B(s, l, (e) => ({
2642
2825
  size: e.scrollWidth,
2643
- room: e.clientWidth
2644
- }), "--_name-fit") && c.length > 1) {
2645
- let e = getComputedStyle(s), t = (s.clientWidth - Number.parseFloat(e.paddingLeft) - Number.parseFloat(e.paddingRight)) / i.length;
2826
+ room: f(e)
2827
+ }), "--_name-fit") && l.length > 1) {
2828
+ let e = getComputedStyle(s), t = (s.clientWidth - Number.parseFloat(e.paddingLeft) - Number.parseFloat(e.paddingRight)) / i.length * c;
2646
2829
  s.style.setProperty("--_name-fit", "1"), s.setAttribute("data-thinned", "");
2647
- let n = Y(c.map((e) => e.offsetWidth)), r = Math.max(Math.ceil((n + 8) / t), Math.ceil((1.5 * n + 8) / t - .5), 1);
2648
- c.forEach((e, t) => {
2830
+ let n = J(l.map((e) => e.offsetWidth)), r = Math.max(Math.ceil((n + 8) / t), Math.ceil((1.5 * n + 8) / t - .5), 1);
2831
+ l.forEach((e, t) => {
2649
2832
  t % r && e.setAttribute("data-left-out", "");
2650
2833
  });
2651
- let a = c.filter((e) => !e.hasAttribute("data-left-out")), o = a[0], l = a.at(-1), u = s.getBoundingClientRect(), d = [o, l].map((e) => e?.getBoundingClientRect());
2652
- if (o && d[0] && d[0].left < u.left && o.setAttribute("data-edge", "start"), l && l !== o && d[1] && d[1].right > u.right - Number.parseFloat(e.paddingRight)) {
2653
- l.setAttribute("data-edge", "end");
2834
+ let a = l.filter((e) => !e.hasAttribute("data-left-out")), o = a[0], u = a.at(-1), d = s.getBoundingClientRect(), f = [o, u].map((e) => e?.getBoundingClientRect());
2835
+ if (o && f[0] && f[0].left < d.left && o.setAttribute("data-edge", "start"), u && u !== o && f[1] && f[1].right > d.right - Number.parseFloat(e.paddingRight)) {
2836
+ u.setAttribute("data-edge", "end");
2654
2837
  let e = a.at(-2);
2655
- e && e.getBoundingClientRect().right + 8 > l.getBoundingClientRect().left && l.setAttribute("data-left-out", "");
2838
+ e && e.getBoundingClientRect().right + 8 > u.getBoundingClientRect().left && u.setAttribute("data-left-out", "");
2656
2839
  }
2657
2840
  }
2658
- let l = (o === on || o === sn) && Tt(e.figure, "data-chart-ticks", t.ticks);
2659
- if (s.toggleAttribute("data-ticks", l), s.style.removeProperty("--_tick-reach"), l) {
2841
+ let p = (o === jn || o === Mn || !!o.ticks) && Hn(e.figure, "data-chart-ticks", t.ticks);
2842
+ if (s.toggleAttribute("data-ticks", p), s.style.removeProperty("--_tick-reach"), p) {
2660
2843
  let t = n - Number(a.querySelector(".tablechart-rule")?.getAttribute("y1") ?? n);
2661
2844
  t > 0 && t < 10 * r && s.style.setProperty("--_tick-reach", `${W(t / r)}px`);
2662
2845
  let o = s.getBoundingClientRect(), c = o.width / (s.offsetWidth || 1), l = getComputedStyle(s), u = Number.parseFloat(l.paddingLeft), d = (s.clientWidth - u - Number.parseFloat(l.paddingRight)) / i.length;
@@ -2670,7 +2853,7 @@ var Qt = (e) => {
2670
2853
  }
2671
2854
  s.style.height = "";
2672
2855
  }
2673
- }, mr = (e, t, n, r, i) => {
2856
+ }, jr = (e, t, n, r, i) => {
2674
2857
  let a = t === r, [o, s, c] = a ? [
2675
2858
  Math.min(e, n),
2676
2859
  Math.max(e, n),
@@ -2682,16 +2865,16 @@ var Qt = (e) => {
2682
2865
  ], l = i.filter(([e, t, n, r]) => a ? t <= c && c <= t + r : e <= c && c <= e + n).map(([e, t, n, r]) => a ? [e, e + n] : [t, t + r]).sort((e, t) => e[0] - t[0]), u = [], d = o;
2683
2866
  for (let [e, t] of l) e > d && u.push([d, Math.min(e, s)]), d = Math.max(d, t);
2684
2867
  return d < s && u.push([d, s]), u.map(([e, t]) => a ? `M${W(e)},${W(c)}H${W(t)}` : `M${W(c)},${W(e)}V${W(t)}`).join("");
2685
- }, hr = (e, t) => {
2868
+ }, Mr = (e, t) => {
2686
2869
  let [n, r, i, a] = [
2687
2870
  "x1",
2688
2871
  "y1",
2689
2872
  "x2",
2690
2873
  "y2"
2691
- ].map((t) => Number(e.getAttribute(t))), o = G("path", { d: mr(n, r, i, a, t) });
2874
+ ].map((t) => Number(e.getAttribute(t))), o = G("path", { d: jr(n, r, i, a, t) });
2692
2875
  for (let { name: t, value: n } of Array.from(e.attributes)) /^[xy][12]$/.test(t) || o.setAttribute(t, n);
2693
2876
  e.replaceWith(o);
2694
- }, gr = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
2877
+ }, Nr = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
2695
2878
  +e,
2696
2879
  +t,
2697
2880
  +r,
@@ -2701,10 +2884,10 @@ var Qt = (e) => {
2701
2884
  +t,
2702
2885
  +e,
2703
2886
  +r
2704
- ]), _r = (e, [t, n, r, i]) => e.map(([e, a, o, s]) => a === s ? n <= a && a <= n + i && Math.max(e, t) < Math.min(o, t + r) ? `M${W(Math.max(e, t))},${W(a)}H${W(Math.min(o, t + r))}` : "" : t <= e && e <= t + r && Math.max(a, n) < Math.min(s, n + i) ? `M${W(e)},${W(Math.max(a, n))}V${W(Math.min(s, n + i))}` : "").join(""), vr = (e) => {
2887
+ ]), Pr = (e, [t, n, r, i]) => e.map(([e, a, o, s]) => a === s ? n <= a && a <= n + i && Math.max(e, t) < Math.min(o, t + r) ? `M${W(Math.max(e, t))},${W(a)}H${W(Math.min(o, t + r))}` : "" : t <= e && e <= t + r && Math.max(a, n) < Math.min(s, n + i) ? `M${W(e)},${W(Math.max(a, n))}V${W(Math.min(s, n + i))}` : "").join(""), Fr = (e) => {
2705
2888
  let t = getComputedStyle(e).getPropertyValue("--tablechart-value-align").trim();
2706
2889
  return t === "start" || t === "center" || t === "end" ? t : null;
2707
- }, yr = (e, t, n) => e.dataset.chartLabels === "inside" || e.dataset.chartLabels !== "outside" && (t.labels === "inside" || n) ? "inside" : "outside", br = (e, t) => St(e, t, "--tablechart-bar-max", "60px") ?? Infinity, xr = (e, t) => {
2890
+ }, Ir = (e, t, n) => e.dataset.chartLabels === "inside" || e.dataset.chartLabels !== "outside" && (t.labels === "inside" || n) ? "inside" : "outside", Lr = (e, t) => zn(e, t, "--tablechart-bar-max", "60px") ?? Infinity, Rr = (e, t) => {
2708
2891
  let n = e.getBoundingClientRect(), r = k / n.width, i = getComputedStyle(e), a = Number.parseFloat(i.lineHeight) / Number.parseFloat(i.fontSize) || 1.2;
2709
2892
  return (e) => {
2710
2893
  if (e.dataset.place === "none" || e.hidden || e.hasAttribute("data-left-out")) return [];
@@ -2719,21 +2902,21 @@ var Qt = (e) => {
2719
2902
  style: s.join("; ")
2720
2903
  })] : [];
2721
2904
  };
2722
- }, Sr = [
2905
+ }, zr = [
2723
2906
  "first",
2724
2907
  "last",
2725
2908
  "highest",
2726
2909
  "lowest",
2727
2910
  "outliers"
2728
- ], Cr = (t, n) => {
2911
+ ], Br = (t, n) => {
2729
2912
  let r = (t.getAttribute("data-chart-values") ?? n.values).trim().toLowerCase().split(/\s+/).filter(Boolean);
2730
2913
  for (let t of r) [
2731
2914
  "auto",
2732
2915
  "all",
2733
2916
  "none",
2734
- ...Sr
2735
- ].includes(t) || console.warn(`[${e}] data-chart-values knows no "${t}". It takes auto, all, none, ${Sr.join(", ")}.`);
2736
- let i = r.filter((e) => Sr.includes(e));
2917
+ ...zr
2918
+ ].includes(t) || console.warn(`[${e}] data-chart-values knows no "${t}". It takes auto, all, none, ${zr.join(", ")}.`);
2919
+ let i = r.filter((e) => zr.includes(e));
2737
2920
  return r.includes("all") ? {
2738
2921
  mode: "all",
2739
2922
  keys: []
@@ -2742,61 +2925,61 @@ var Qt = (e) => {
2742
2925
  keys: []
2743
2926
  } : r.includes("auto") || !i.length ? {
2744
2927
  mode: "auto",
2745
- keys: i.length ? i : Sr
2928
+ keys: i.length ? i : zr
2746
2929
  } : {
2747
2930
  mode: "set",
2748
2931
  keys: i
2749
2932
  };
2750
- }, wr = [
2933
+ }, Vr = [
2751
2934
  "never",
2752
2935
  "auto",
2753
2936
  "print",
2754
2937
  "always"
2755
- ], Tr = ({ figure: e, rows: t, series: n }, r) => {
2756
- let i = e.getAttribute("data-chart-table"), a = i && wr.includes(i) ? i : r.table;
2938
+ ], Hr = ({ figure: e, rows: t, series: n }, r) => {
2939
+ let i = e.getAttribute("data-chart-table"), a = i && Vr.includes(i) ? i : r.table;
2757
2940
  a === "never" ? e.removeAttribute("data-table") : e.setAttribute("data-table", a);
2758
2941
  let o = e.getAttribute("data-chart-summary");
2759
- e.setAttribute("data-summary", o && wr.includes(o) ? o : r.summary), e.toggleAttribute("data-long", t.length * n.filter((e) => !e.group).length > r.tablelimit);
2760
- }, Er = (e, t) => {
2761
- dr(e, t);
2762
- let n = Dr(e, t);
2763
- return n && ur(e.figure, Dr), n;
2764
- }, Dr = (t, n) => {
2942
+ e.setAttribute("data-summary", o && Vr.includes(o) ? o : r.summary), e.toggleAttribute("data-long", t.length * n.filter((e) => !e.group).length > r.tablelimit);
2943
+ }, Ur = (e, t) => {
2944
+ Dr(e, t);
2945
+ let n = Wr(e, t);
2946
+ return n && Er(e.figure, Wr), n;
2947
+ }, Wr = (t, n) => {
2765
2948
  let { plot: r, svg: i, rows: a, type: u, values: h, series: _, seriesValues: v, names: b, annotations: x } = t;
2766
- Tr(t, n);
2949
+ t.crosshair?.hide(), Hr(t, n);
2767
2950
  let S = getComputedStyle(t.figure);
2768
2951
  t.figure.toggleAttribute("data-series-range", !!S.getPropertyValue("--tablechart-series-color-end").trim()), t.figure.toggleAttribute("data-slice-range", !!S.getPropertyValue("--tablechart-slice-color-end").trim());
2769
2952
  let C = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), w = C > 0 ? C : u.aspect ?? n.aspect, T = u.categories === "beside", E = t.axes && !u.axes ? t.axes : null, D = null;
2770
- if (E && (D = tr(t, n, E, w), !D)) return !1;
2953
+ if (E && (D = _r(t, n, E, w), !D)) return !1;
2771
2954
  let A = r.clientWidth;
2772
2955
  if (!A) return !1;
2773
- let j = k / A, [ee, te] = Ct(t.figure, j), M = Math.min(k * w, te);
2956
+ let j = k / A, [M, N] = Bn(t.figure, j), P = Math.min(k * w, N);
2774
2957
  r.classList.add(y);
2775
- let F = u.numbers === !1 ? h.slice(0, 1) : [...v.flat(), ...t.totals];
2776
- for (let e of F) delete e.dataset.place, e.removeAttribute("data-left-out"), e.removeAttribute("data-cut");
2958
+ let L = u.numbers === !1 ? h.slice(0, 1) : [...v.flat(), ...t.totals];
2959
+ for (let e of L) delete e.dataset.place, e.removeAttribute("data-left-out"), e.removeAttribute("data-cut");
2777
2960
  r.style.removeProperty("--_fit"), r.toggleAttribute("data-grouped", !!u.groups && !t.stacked && _.filter((e) => !e.chart && !e.group).length > 1), t.categories[0]?.parentElement?.style.removeProperty("--_beside");
2778
- let I = u.axes ? t.axes : null, L = I ? nr(t, n, I, M, j, A) : [], R = I ? Array.from(I.ticks.children) : [];
2779
- N([
2961
+ let R = u.axes ? t.axes : null, ee = R ? vr(t, n, R, P, j, A) : [], z = R ? Array.from(R.ticks.children) : [];
2962
+ F([
2780
2963
  ...v.flat(),
2781
2964
  ...t.totals,
2782
2965
  ...b,
2783
2966
  ...t.categories,
2784
2967
  ...x.map((e) => e.badge),
2785
- ...I?.titles ?? [],
2786
- ...R
2968
+ ...R?.titles ?? [],
2969
+ ...z
2787
2970
  ]);
2788
- let z = (h[0] ? P(h[0]).height : 0) * j;
2971
+ let B = (h[0] ? I(h[0]).height : 0) * j;
2789
2972
  u.numbers === !1 && h[0] && (h[0].dataset.place = "none");
2790
- let B = x[0]?.badge ? P(x[0].badge).height * j : 0, V = Math.max(M, ee, t.agreed?.height ?? 0, u.minHeight?.({
2791
- labelHeight: z,
2792
- nameHeight: Math.max(0, Y(t.categories.map((e) => P(e).height))) * j,
2973
+ let V = x[0]?.badge ? I(x[0].badge).height * j : 0, H = Math.max(P, M, t.agreed?.height ?? 0, u.minHeight?.({
2974
+ labelHeight: B,
2975
+ nameHeight: Math.max(0, J(t.categories.map((e) => I(e).height))) * j,
2793
2976
  unit: j,
2794
2977
  rows: a.length,
2795
2978
  series: _.length,
2796
2979
  stacked: t.stacked,
2797
- labels: yr(t.figure, n, _.some((e) => e.chart))
2798
- }) ?? 0), ne = t.stacked ? a.map((e) => {
2799
- let t = je(e, _.length);
2980
+ labels: Ir(t.figure, n, _.some((e) => e.chart))
2981
+ }) ?? 0), te = t.stacked ? a.map((e) => {
2982
+ let t = Pe(e, _.length);
2800
2983
  return {
2801
2984
  ...e,
2802
2985
  value: t,
@@ -2805,95 +2988,97 @@ var Qt = (e) => {
2805
2988
  value: t
2806
2989
  } : e)
2807
2990
  };
2808
- }) : a, ae = (u.segments ?? ((e) => e.map((e) => ({
2991
+ }) : a, ie = (u.segments ?? ((e) => e.map((e) => ({
2809
2992
  ...e,
2810
2993
  from: 0,
2811
2994
  to: e.value,
2812
2995
  kind: "bar"
2813
- }))))(t.stacked ? ne.map((e) => ({
2996
+ }))))(t.stacked ? te.map((e) => ({
2814
2997
  ...e,
2815
2998
  cells: [e.cells[0]]
2816
- })) : a), oe = {
2817
- labelHeight: z,
2818
- badgeHeight: B,
2999
+ })) : a), ae = Br(t.figure, n), se = {
3000
+ labelHeight: B,
3001
+ badgeHeight: V,
2819
3002
  hasAnnotations: x.length > 0,
2820
3003
  unit: j,
2821
3004
  series: _.length,
2822
3005
  focused: _.some((e) => e.focus),
2823
- stacked: t.stacked
2824
- }, { extent: H, depth: U, steps: se } = Bt(ae, a.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value)), t.stacked ? a.map((e) => Ae(e, _.length, u.running)) : null), K = _.flatMap((e, t) => e.chart ? [t] : []), q = a.some((e) => e.note) ? B + 4 * j : 0, J = Math.max(u.headroom?.(oe) ?? z, K.length ? on.headroom?.(oe) ?? 0 : 0) + q, ce = 2 * j + (u.footroom?.(oe) ?? 0) + (U < 0 ? z + 4 * j : 0), le = Math.max(J, t.agreed?.room ?? 0), ue = Math.max(ce, t.agreed?.floor ?? 0), de = V - le - ue, pe = Math.max(D ? Math.max(D.max, H) : H * 1.02, t.agreed?.ceiling ?? 0), me = Math.min(D ? Math.min(D.min, U) : U * 1.02, t.agreed?.bottom ?? 0), _e = x.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, ve = (e) => {
2825
- let t = Number.parseFloat(_e?.getAttribute(e) ?? "");
3006
+ stacked: t.stacked,
3007
+ numbers: !(ae.mode === "set" && !ae.keys.length && !a.some((e) => e.pinned))
3008
+ }, { extent: ce, depth: U, steps: le } = ln(ie, a.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value)), t.stacked ? a.map((e) => Ne(e, _.length, u.running)) : null), K = _.flatMap((e, t) => e.chart ? [t] : []), ue = a.some((e) => e.note) ? V + 4 * j : 0, q = Math.max(u.headroom?.(se) ?? B, K.length ? jn.headroom?.(se) ?? 0 : 0) + ue, de = 2 * j + (u.footroom?.(se) ?? 0) + (U < 0 ? B + 4 * j : 0), fe = E?.numbers && !T ? B / 2 + 2 * j : 0, pe = Math.max(q, fe, t.agreed?.room ?? 0), me = Math.max(de, t.agreed?.floor ?? 0), ge = H - pe - me, _e = Math.max(D ? Math.max(D.max, ce) : ce * 1.02, t.agreed?.ceiling ?? 0), be = a.flatMap((e) => e.cells.slice(0, _.length).flatMap((e) => e.missing ? [] : [e.value])), xe = !t.stacked && !t.agreed && (u.floats || D && u === jn && D.min > 0) ? Math.min(D?.min ?? Infinity, ...be) : Math.min(D ? Math.min(D.min, U) : U * 1.02, t.agreed?.bottom ?? 0), Se = x.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, Ce = (e) => {
3009
+ let t = Number.parseFloat(Se?.getAttribute(e) ?? "");
2826
3010
  return Number.isFinite(t) ? t : null;
2827
- }, { squeeze: ye, problems: be } = Vt({
2828
- from: ve("data-from") ?? ve("data-at"),
2829
- to: ve("data-to"),
2830
- size: _e?.getAttribute("data-size") ?? null,
2831
- ceiling: pe,
2832
- extent: H,
3011
+ }, { squeeze: we, problems: Te } = un({
3012
+ from: Ce("data-from") ?? Ce("data-at"),
3013
+ to: Ce("data-to"),
3014
+ size: Se?.getAttribute("data-size") ?? null,
3015
+ ceiling: _e,
3016
+ extent: ce,
2833
3017
  depth: U,
2834
3018
  breakable: !!u.breakable,
2835
- segments: ae
3019
+ segments: ie
2836
3020
  });
2837
- for (let t of be) console.warn(`[${e}] ${t}`);
2838
- let xe = ye ? ye.gap : null;
3021
+ for (let t of Te) console.warn(`[${e}] ${t}`);
3022
+ let Ee = we ? we.gap : null;
2839
3023
  t.measured = [
2840
- Ut,
2841
- Ht,
2842
- on,
2843
- sn
2844
- ].includes(u) && !ye && !se ? {
2845
- height: V,
2846
- room: le,
2847
- floor: ue,
2848
- ceiling: pe,
2849
- bottom: me
3024
+ fn,
3025
+ dn,
3026
+ jn,
3027
+ Mn
3028
+ ].includes(u) && !we && !le ? {
3029
+ height: H,
3030
+ room: pe,
3031
+ floor: me,
3032
+ ceiling: _e,
3033
+ bottom: xe
2850
3034
  } : null;
2851
- let Se = (ye && St(t.figure, j, "--tablechart-break-gap", "")) ?? 13, Ce = V - ue, we = pe - me || 1, Te = ye ? (e) => Ce - zt(e, pe, de, ye, Se) : (e) => Ce - (e - me) / we * de, Ee, De, Oe = [];
2852
- I && ({frame: De, x: Ee, y: Te, shownTicks: Oe} = rr(I, R, L, V, j));
2853
- let ke = Cr(t.figure, n), Me = Dt(t.figure, n), Ne = !!u.running && b.length > 0 && !t.stacked && Me !== "step" && ke.mode === "set" && ke.keys.includes("last"), Pe = Ne ? Y(v.flat().map((e) => P(e).width)) * j : 0, Fe = b.length ? Y(b.map((e) => P(e).width)) * j + 12 * j + Pe : 0, X = t.categories[0]?.parentElement;
2854
- X && (X.style.paddingRight = Fe ? `${Fe / k * 100}%` : "");
2855
- let Ie = (k - Fe) / a.length, Le = (e) => (e + .5) * Ie, Re = (e) => e >= 0 && e < a.length ? e : null;
2856
- t.rowAt = u.centre ? null : u.categories === "beside" ? (e, t) => Re(Math.floor(t * j / (V / a.length))) : (e) => Re(Math.floor(e * j / Ie));
2857
- let ze = Ie / k * 100, Be = 100 / a.length;
3035
+ let De = (we && zn(t.figure, j, "--tablechart-break-gap", "")) ?? 13, Oe = H - me, ke = _e - xe || 1, Ae = we ? (e) => Oe - cn(e, _e, ge, we, De) : (e) => Oe - (e - xe) / ke * ge, je, Me, Fe = [];
3036
+ R && ({frame: Me, x: je, y: Ae, shownTicks: Fe} = yr(R, z, ee, H, j));
3037
+ let Ie = Gn(t.figure, n), Le = J(v.flat().map((e) => I(e).width)), Re = a.length * (Le + 4) > A, Y = !!u.running && b.length > 0 && !t.stacked && Ie !== "step" && ae.keys.includes("last") && (ae.mode === "set" || ae.mode === "auto" && Re), X = Y ? Le * j : 0, ze = b.length ? J(b.map((e) => I(e).width)) * j + 12 * j + X + (E?.numbers && E.right && !T ? 6 * j : 0) : 0, Be = t.categories[0]?.parentElement;
3038
+ Be && (Be.style.paddingRight = ze ? `${ze / k * 100}%` : "");
3039
+ let Ve = (k - ze) / a.length, He = (e) => (e + .5) * Ve, Ue = (e) => e >= 0 && e < a.length ? e : null;
3040
+ t.rowAt = u.centre ? null : u.categories === "beside" ? (e, t) => Ue(Math.floor(t * j / (H / a.length))) : (e) => Ue(Math.floor(e * j / Ve));
3041
+ let We = Ve / k * 100, Ge = 100 / a.length;
2858
3042
  t.rowBox = u.categories === "beside" ? (e) => [
2859
3043
  0,
2860
- e * Be,
3044
+ e * Ge,
2861
3045
  100,
2862
- Be
3046
+ Ge
2863
3047
  ] : (e) => [
2864
- e * ze,
3048
+ e * We,
2865
3049
  0,
2866
- ze,
3050
+ We,
2867
3051
  100
2868
- ], i.setAttribute("viewBox", `0 0 ${k} ${W(V)}`), i.textContent = "", De && Ee && ir(t, n, De, Ee, Te, Oe, j), t.checks = [];
3052
+ ], i.setAttribute("viewBox", `0 0 ${k} ${W(H)}`), i.textContent = "", Me && je && br(t, n, Me, je, Ae, Fe, j), t.checks = [];
2869
3053
  let Z = {
2870
3054
  rows: a,
2871
- segments: ae,
2872
- cx: Le,
2873
- y: Te,
2874
- x: Ee,
2875
- frame: De,
2876
- length: (e, n) => St(t.figure, j, e, n),
2877
- barWidth: Math.min(Ie * n.barfill, br(t.figure, j)),
2878
- barMax: br(t.figure, j),
2879
- barRadius: wt(t.figure, j, "--tablechart-bar-radius"),
2880
- sliceRadius: wt(t.figure, j, "--tablechart-slice-radius"),
2881
- height: V,
3055
+ segments: ie,
3056
+ cx: He,
3057
+ y: Ae,
3058
+ x: je,
3059
+ frame: Me,
3060
+ axisSide: Me ? "left" : E?.numbers && !T ? E.right ? "right" : "left" : null,
3061
+ length: (e, n) => zn(t.figure, j, e, n),
3062
+ barWidth: Math.min(Ve * n.barfill, Lr(t.figure, j)),
3063
+ barMax: Lr(t.figure, j),
3064
+ barRadius: Vn(t.figure, j, "--tablechart-bar-radius"),
3065
+ sliceRadius: Vn(t.figure, j, "--tablechart-slice-radius"),
3066
+ height: H,
2882
3067
  unit: j,
2883
- labelHeight: z,
2884
- badgeHeight: B,
3068
+ labelHeight: B,
3069
+ badgeHeight: V,
2885
3070
  after: a.length,
2886
3071
  note: 0,
2887
- labels: yr(t.figure, n, K.length > 0),
2888
- insideAlign: vr(t.figure),
2889
- breakAt: xe,
2890
- squeeze: ye,
2891
- breakGap: Se,
2892
- domain: t.agreed ? [me, pe] : D ? [D.min, D.max] : null,
3072
+ labels: Ir(t.figure, n, K.length > 0),
3073
+ insideAlign: Fr(t.figure),
3074
+ breakAt: Ee,
3075
+ squeeze: we,
3076
+ breakGap: De,
3077
+ domain: t.agreed ? [xe, _e] : D ? [D.min, D.max] : null,
2893
3078
  stacked: t.stacked,
2894
- shape: Me,
2895
- pick: ke,
2896
- numbersAtEnd: Ne,
3079
+ shape: Ie,
3080
+ pick: ae,
3081
+ numbersAtEnd: Y,
2897
3082
  totals: t.totals,
2898
3083
  svg: i,
2899
3084
  plot: r,
@@ -2910,14 +3095,14 @@ var Qt = (e) => {
2910
3095
  lineHoles: []
2911
3096
  };
2912
3097
  r.style.setProperty("--count", String(Math.max(1, ...a.map((e) => e.slot + 1))));
2913
- let Ve = (e) => {
3098
+ let Ke = (e) => {
2914
3099
  let t = (t) => ({
2915
3100
  ...t,
2916
3101
  ...t.cells[e] ?? t.cells[0]
2917
3102
  });
2918
3103
  return {
2919
3104
  rows: a.map(t),
2920
- segments: ae.map((e) => {
3105
+ segments: ie.map((e) => {
2921
3106
  let n = t(e);
2922
3107
  return e.kind === "bar" ? {
2923
3108
  ...n,
@@ -2932,42 +3117,53 @@ var Qt = (e) => {
2932
3117
  u.draw({
2933
3118
  ...Z,
2934
3119
  own: e,
2935
- ...e.length === 1 && Ve(e[0])
2936
- }), on.draw({
3120
+ ...e.length === 1 && Ke(e[0])
3121
+ }), jn.draw({
2937
3122
  ...Z,
2938
3123
  own: K
2939
3124
  });
2940
3125
  } else u.draw(Z);
2941
- Z.rowAt && (t.rowAt = Z.rowAt), t.pointOf = Z.pointOf ?? null;
2942
- let He = Number(r.style.getPropertyValue("--count")) || a.length;
2943
- for (let e of t.figure.querySelectorAll(`.${p}`)) e.style.setProperty("--i", String(Math.min(a[a.length - 1].slot, He - 1)));
2944
- if (!t.stacked && !r.hasAttribute("data-grouped")) for (let e of v) re(e, j, k), ie(e, j, k, V);
2945
- E && D && ar(t, n, E, D, T && Z.x ? Z.x : Te, ye, V, j, Fe);
3126
+ Z.rowAt && (t.rowAt = Z.rowAt), t.pointOf = Z.pointOf ?? null, t.crossingOf = Z.crossingOf ?? null;
3127
+ let qe = Number(r.style.getPropertyValue("--count")) || a.length;
3128
+ for (let e of t.figure.querySelectorAll(`.${p}`)) e.style.setProperty("--i", String(Math.min(a[a.length - 1].slot, qe - 1)));
3129
+ if (!t.stacked && !r.hasAttribute("data-grouped")) {
3130
+ let e = new Map(Array.from(i.querySelectorAll(".tablechart-bar")).map((e) => {
3131
+ let { x: t, y: n, width: r, height: i } = e.getBBox();
3132
+ return [Number(e.dataset.row), [
3133
+ t,
3134
+ n,
3135
+ r,
3136
+ i
3137
+ ]];
3138
+ }));
3139
+ for (let t of v) ne(t, j, k), e.size && !K.length ? oe(t, e, T, j, k, H) : re(t, j, k, H);
3140
+ }
3141
+ E && D && xr(t, n, E, D, T && Z.x ? Z.x : Ae, we, H, j, ze);
2946
3142
  for (let [e, n] of x.entries()) {
2947
3143
  n.badge?.setAttribute("data-note", String(e + 1));
2948
3144
  let i = n.series;
2949
3145
  n.type.draw(n.spec, n.badge, {
2950
3146
  ...Z,
2951
3147
  ...t.stacked && {
2952
- rows: ne,
3148
+ rows: te,
2953
3149
  ...t.totals.length && { values: t.totals }
2954
3150
  },
2955
- ...i > 0 && !t.stacked && Ve(i),
3151
+ ...i > 0 && !t.stacked && Ke(i),
2956
3152
  after: t.plan ? n.after : Math.min(n.after, Number(r.style.getPropertyValue("--count")) || n.after),
2957
3153
  note: e + 1
2958
3154
  });
2959
3155
  }
2960
- Ke(t);
3156
+ Ye(t);
2961
3157
  for (let e of t.figure.querySelectorAll(`.${m}`)) {
2962
3158
  let n = Array.from(e.children);
2963
- if (t.plan) for (let e of n) e.style.getPropertyValue("--step") || e.style.setProperty("--i", "0");
3159
+ for (let e of n) t.plan && e.style.getPropertyValue("--step") || e.style.setProperty("--i", "0");
2964
3160
  let r = n.map((e) => Number.parseFloat(e.style.getPropertyValue("--step")));
2965
3161
  e.style.setProperty("--i", String(Math.min(...n.map((e) => Number(e.style.getPropertyValue("--i")) || 0)))), r.length && r.every(Number.isFinite) ? e.style.setProperty("--step", String(Math.min(...r))) : e.style.removeProperty("--step");
2966
3162
  }
2967
- pr(t, n, V, j);
2968
- let Ue = x.flatMap(({ badge: e }) => {
3163
+ Ar(t, n, H, j);
3164
+ let Je = x.flatMap(({ badge: e }) => {
2969
3165
  if (!(e instanceof HTMLElement) || !e.offsetWidth) return [];
2970
- let t = e.offsetWidth * j, n = e.offsetHeight * j, r = Number.parseFloat(e.style.left) / 100 * k, i = Number.parseFloat(e.style.top) / 100 * V, a = getComputedStyle(e).borderTopLeftRadius, o = a.endsWith("%") ? Number.parseFloat(a) / 100 : null, s = (Number.parseFloat(a) || 0) * j;
3166
+ let t = e.offsetWidth * j, n = e.offsetHeight * j, r = Number.parseFloat(e.style.left) / 100 * k, i = Number.parseFloat(e.style.top) / 100 * H, a = getComputedStyle(e).borderTopLeftRadius, o = a.endsWith("%") ? Number.parseFloat(a) / 100 : null, s = (Number.parseFloat(a) || 0) * j;
2971
3167
  return [G("rect", {
2972
3168
  class: g,
2973
3169
  "data-for": "badge",
@@ -2980,24 +3176,24 @@ var Qt = (e) => {
2980
3176
  ry: o === null ? s : n * o,
2981
3177
  style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
2982
3178
  })];
2983
- }), We = i.querySelector(`.${O}`), Ge = Array.from(i.querySelectorAll(`.${s}`)), qe = [...We ? [We] : [], ...i.querySelectorAll(`:scope > .${c}`)], Je = xr(r, j), Ye = t.figure.getAttribute("data-animate") === "grow", Xe = v.flat().filter((e) => e.hasAttribute("data-cut")).flatMap(Je), Ze = [...K.flatMap((e) => v[e].flatMap(Je)), ...Ye ? Xe : []];
2984
- if (qe.length || Ge.length) {
3179
+ }), Xe = i.querySelector(`.${O}`), Ze = Array.from(i.querySelectorAll(`.${s}`)), Qe = [...Xe ? [Xe] : [], ...i.querySelectorAll(`:scope > .${c}`)], $e = Rr(r, j), et = t.figure.getAttribute("data-animate") === "grow", Q = v.flat().filter((e) => e.hasAttribute("data-cut")).flatMap($e), tt = [...K.flatMap((e) => v[e].flatMap($e)), ...et ? Q : []];
3180
+ if (Qe.length || Ze.length) {
2985
3181
  let e = [
2986
3182
  ...v.flat(),
2987
3183
  ...t.totals,
2988
3184
  ...u.categories === "beside" ? t.categories : []
2989
- ].flatMap(Je), n = (e) => [
3185
+ ].flatMap($e), n = (e) => [
2990
3186
  "x",
2991
3187
  "y",
2992
3188
  "width",
2993
3189
  "height"
2994
3190
  ].map((t) => Number(e.getAttribute(t)));
2995
- for (let t of Ge) hr(t, [...e, ...Ue].map(n));
2996
- for (let t of qe) {
2997
- let r = [...e, ...Ue], i = gr(t);
2998
- t.setAttribute("d", i.map(([e, t, i, a]) => mr(e, t, i, a, r.map(n))).join(""));
3191
+ for (let t of Ze) Mr(t, [...e, ...Je].map(n));
3192
+ for (let t of Qe) {
3193
+ let r = [...e, ...Je], i = Nr(t);
3194
+ t.setAttribute("d", i.map(([e, t, i, a]) => jr(e, t, i, a, r.map(n))).join(""));
2999
3195
  for (let e of r) {
3000
- let r = _r(i, n(e)), a = e.dataset.for === "badge" ? "badge" : "";
3196
+ let r = Pr(i, n(e)), a = e.dataset.for === "badge" ? "badge" : "";
3001
3197
  r && t.after(G("path", {
3002
3198
  class: t.getAttribute("class") ?? "tablechart-grid",
3003
3199
  "data-gap": a,
@@ -3007,27 +3203,27 @@ var Qt = (e) => {
3007
3203
  }
3008
3204
  }
3009
3205
  }
3010
- if (he(i, Ue, k, V, Array.from(i.querySelectorAll(`.${o}, .${l}`))), !Ye && (Z.lineHoles.length || Xe.length)) {
3206
+ if (ve(i, Je, k, H, Array.from(i.querySelectorAll(`.${o}, .${l}`))), !et && (Z.lineHoles.length || Q.length)) {
3011
3207
  let e = Array.from(i.querySelectorAll(`.${d}`)).map((e) => {
3012
3208
  let t = G("g", {});
3013
3209
  return e.before(t), t.append(e), t;
3014
3210
  });
3015
- he(i, [...Z.lineHoles, ...Xe], k, V, [...e, ...i.querySelectorAll(`.${f}`)]);
3211
+ ve(i, [...Z.lineHoles, ...Q], k, H, [...e, ...i.querySelectorAll(`.${f}`)]);
3016
3212
  }
3017
- let Q = [
3213
+ let nt = [
3018
3214
  s,
3019
3215
  c,
3020
3216
  o,
3021
3217
  l,
3022
3218
  O
3023
3219
  ];
3024
- ge(i, [...Ue, ...Ze], k, V, void 0, Q.map((e) => `.${e}`).join(", ")), t.figure.hasAttribute("data-animate") && !t.figure.hasAttribute("data-steps") && !t.figure.classList.contains("is-shown") && _n(i);
3025
- let Qe = (e) => e.dataset.missing !== void 0 || u.centre && a[Number(e.dataset.row) - 1]?.isTotal, $e = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), et = (e, t) => {
3220
+ ye(i, [...Je, ...tt], k, H, void 0, nt.map((e) => `.${e}`).join(", ")), t.figure.hasAttribute("data-animate") && !t.figure.hasAttribute("data-steps") && !t.figure.classList.contains("is-shown") && Xn(i);
3221
+ let rt = (e) => e.dataset.missing !== void 0 || u.centre && a[Number(e.dataset.row) - 1]?.isTotal, it = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), at = (e, t) => {
3026
3222
  let n = Number(e.dataset.row);
3027
- return t.some((e) => $e(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
3223
+ return t.some((e) => it(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
3028
3224
  };
3029
- return t.figure.toggleAttribute("data-left-out", (u.columns ? [t.categories] : [...v, t.totals]).some((e) => e.some((t) => !Qe(t) && !$e(t) && !et(t, e)))), Z.barRadius && fe(i, Z.barRadius), Bn(t.figure), Kn(t.figure), qn(t.figure), fr(t.figure), !0;
3030
- }, Or = {
3225
+ return t.figure.toggleAttribute("data-left-out", u.numbers === !1 && !u.axes || (u.columns ? [t.categories] : [...v, t.totals]).some((e) => e.some((t) => !rt(t) && !it(t) && !at(t, e)))), Z.barRadius && he(i, Z.barRadius), Nt(t.figure), Bt(t.figure), Ut(t.figure), Or(t.figure), !0;
3226
+ }, Gr = {
3031
3227
  2: {
3032
3228
  part: 3,
3033
3229
  text: 4.5,
@@ -3046,8 +3242,8 @@ var Qt = (e) => {
3046
3242
  partRule: "APCA, WCAG 3 draft",
3047
3243
  textRule: "APCA, WCAG 3 draft"
3048
3244
  }
3049
- }, kr = (t) => {
3050
- let n = Vn(t), r = Or[Pn(t)], i = Array.from(t.querySelectorAll("table thead tr:first-child > *")).map((e) => (e.textContent ?? "").trim()), a = Array.from(t.querySelectorAll("tbody tr > :first-child")).map((e) => (e.textContent ?? "").trim()), o = [
3245
+ }, Kr = (t) => {
3246
+ let n = Pt(t), r = Gr[Dt(t)], i = Array.from(Y(t)?.querySelectorAll("thead tr:first-child > *") ?? []).map((e) => (e.textContent ?? "").trim()), a = Array.from(Y(t)?.querySelectorAll("tbody tr > :first-child") ?? []).map((e) => (e.textContent ?? "").trim()), o = [
3051
3247
  [
3052
3248
  ".tablechart-series",
3053
3249
  "Line",
@@ -3067,11 +3263,11 @@ var Qt = (e) => {
3067
3263
  for (let [e, c, l] of o) {
3068
3264
  let o = Array.from(t.querySelectorAll(`${e}:not([data-muted])`));
3069
3265
  for (let e of o) {
3070
- let u = l(e), [d, f, p, m] = Mn(u), h = [
3266
+ let u = l(e), [d, f, p, m] = Tt(u), h = [
3071
3267
  d,
3072
3268
  f,
3073
3269
  p
3074
- ].map((e, t) => e * m + n[t] * (1 - m)), g = Ln(Pn(t), h, n);
3270
+ ].map((e, t) => e * m + n[t] * (1 - m)), g = At(Dt(t), h, n);
3075
3271
  if (g >= r.part) continue;
3076
3272
  let _ = e.getAttribute("data-series"), v = a[Number(e.getAttribute("data-row") ?? 0) - 1] ?? "", y = c === "Slice" ? "" : _ ? i[Number(_)] : "", b = `${c}|${y}|${u}`, x = s.get(b) ?? {
3077
3273
  kind: c,
@@ -3087,20 +3283,20 @@ var Qt = (e) => {
3087
3283
  let s = Array.from(a).filter(Boolean).map((e) => `"${e}"`), l = s.join(", "), u = s.length > 1, d = n === "Line" ? i ? `Line "${i}" has` : "The line has" : n === "Slice" ? `${u ? "Slices" : "Slice"} ${l} ${u ? "have" : "has"}` : a.size >= o || !l ? `The bars${i ? ` of column "${i}"` : ""} have` : `${u ? "Bars" : "Bar"} ${l}${i ? ` in column "${i}"` : ""} ${u ? "have" : "has"}`;
3088
3284
  console.warn(`[${e}] ${d} a contrast of ${r.show(c)} with the background. It needs at least ${r.need(r.part)} (${r.partRule}).`, t);
3089
3285
  }
3090
- }, Ar = ".tablechart-name, .tablechart-value:not([data-place='inside'], [data-place='middle']), .tablechart-categories span, .tablechart-centre, .tablechart-tick, .tablechart-quadrant-name, figcaption b, figcaption span", jr = (t) => {
3286
+ }, qr = ".tablechart-name, .tablechart-value:not([data-place='inside'], [data-place='middle']), .tablechart-categories span, .tablechart-centre, .tablechart-tick, .tablechart-quadrant-name, figcaption b, figcaption span", Jr = (t) => {
3091
3287
  let n = 0, r = () => {
3092
- let r = Array.from(t.querySelectorAll(".tablechart-value[data-place='inside'], .tablechart-value[data-place='middle']")).filter((e) => !e.hasAttribute("data-left-out") && !e.hidden), a = Array.from(t.querySelectorAll(Ar)).filter((e) => !e.hasAttribute("data-left-out") && !e.hidden && e.style.getPropertyValue("--m") !== "1" && (e.textContent ?? "").trim() && getComputedStyle(e).visibility !== "hidden");
3093
- if ([...r, ...a].some((e) => Mn(getComputedStyle(e).color)[3] === 0 && n < 20)) {
3288
+ let r = Array.from(t.querySelectorAll(".tablechart-value[data-place='inside'], .tablechart-value[data-place='middle']")).filter((e) => !e.hasAttribute("data-left-out") && !e.hidden), a = Array.from(t.querySelectorAll(qr)).filter((e) => !e.hasAttribute("data-left-out") && !e.hidden && e.style.getPropertyValue("--m") !== "1" && (e.textContent ?? "").trim() && getComputedStyle(e).visibility !== "hidden");
3289
+ if ([...r, ...a].some((e) => Tt(getComputedStyle(e).color)[3] === 0 && n < 20)) {
3094
3290
  n++, setTimeout(i, 500);
3095
3291
  return;
3096
3292
  }
3097
- let o = Array.from(t.querySelectorAll("tbody tr > :first-child")).map((e) => (e.textContent ?? "").trim()), s = Or[Pn(t)], c = t.dataset.chart === "bar" ? "bar" : "column", l = /* @__PURE__ */ new Map();
3293
+ let o = Array.from(Y(t)?.querySelectorAll("tbody tr > :first-child") ?? []).map((e) => (e.textContent ?? "").trim()), s = Gr[Dt(t)], c = t.dataset.chart === "bar" ? "bar" : "column", l = /* @__PURE__ */ new Map();
3098
3294
  for (let e of r) {
3099
- let n = Hn(t, e);
3295
+ let n = Ft(t, e);
3100
3296
  if (!n) continue;
3101
- let r = getComputedStyle(e), i = getComputedStyle(n).fill, a = Ln(Pn(t), Mn(r.color), Mn(i)), u = Number.parseFloat(r.fontSize), d = u >= 24 || u >= 18.66 && Number(r.fontWeight) >= 700 ? s.large : s.text;
3297
+ let r = getComputedStyle(e), i = It(n), a = At(Dt(t), Tt(r.color), Tt(i)), u = Number.parseFloat(r.fontSize), d = u >= 24 || u >= 18.66 && Number(r.fontWeight) >= 700 ? s.large : s.text;
3102
3298
  if (a >= d) continue;
3103
- let f = n.classList.contains("tablechart-piece") ? `${c} part` : c, p = `${r.color}|${i}`, m = l.get(p) ?? {
3299
+ let f = n.classList.contains("tablechart-slice") ? "slice" : n.classList.contains("tablechart-piece") ? `${c} part` : c, p = `${r.color}|${i}`, m = l.get(p) ?? {
3104
3300
  what: f,
3105
3301
  names: [],
3106
3302
  contrast: a,
@@ -3108,13 +3304,13 @@ var Qt = (e) => {
3108
3304
  };
3109
3305
  m.names.push(`"${o[Number(e.dataset.row) - 1] ?? ""}" ("${e.textContent?.trim()}")`), l.set(p, m);
3110
3306
  }
3111
- let u = Vn(t), d = /* @__PURE__ */ new Map();
3307
+ let u = Pt(t), d = /* @__PURE__ */ new Map();
3112
3308
  for (let e of a) {
3113
- let n = getComputedStyle(e), [r, i, a, o] = Mn(n.color), c = [
3309
+ let n = getComputedStyle(e), [r, i, a, o] = Tt(n.color), c = [
3114
3310
  r,
3115
3311
  i,
3116
3312
  a
3117
- ].map((e, t) => e * o + u[t] * (1 - o)), l = Ln(Pn(t), c, u), f = Number.parseFloat(n.fontSize), p = f >= 24 || f >= 18.66 && Number(n.fontWeight) >= 700 ? s.large : s.text;
3313
+ ].map((e, t) => e * o + u[t] * (1 - o)), l = At(Dt(t), c, u), f = Number.parseFloat(n.fontSize), p = f >= 24 || f >= 18.66 && Number(n.fontWeight) >= 700 ? s.large : s.text;
3118
3314
  if (l >= p) continue;
3119
3315
  let m = d.get(n.color) ?? {
3120
3316
  names: [],
@@ -3140,34 +3336,34 @@ var Qt = (e) => {
3140
3336
  attributes: !0,
3141
3337
  attributeFilter: ["class"]
3142
3338
  });
3143
- }, Mr = [
3339
+ }, Yr = [
3144
3340
  "bar",
3145
3341
  "piece",
3146
3342
  "up",
3147
3343
  "down",
3148
3344
  "total"
3149
- ].map((e) => `--tablechart-${e}-value-color`), Nr = /* @__PURE__ */ new Set(), Pr = (t) => {
3345
+ ].map((e) => `--tablechart-${e}-value-color`), Xr = /* @__PURE__ */ new Set(), Zr = (t) => {
3150
3346
  let n = getComputedStyle(t);
3151
- for (let r of Mr) !Nr.has(r) && n.getPropertyValue(r).trim() && (Nr.add(r), console.warn(`[${e}] ${r} is old and goes in 1.3.0. --tablechart-value-on-dark and --tablechart-value-on-light set the colour of the numbers inside bars, with a contrast check.`, t));
3152
- }, Fr = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), Ir = /^\s*(?:Table)?:\s+/, Lr = (e) => e?.tagName === "P" && Ir.test(e.textContent ?? ""), Rr = (e) => {
3347
+ for (let r of Yr) !Xr.has(r) && n.getPropertyValue(r).trim() && (Xr.add(r), console.warn(`[${e}] ${r} is old and goes in 1.3.0. --tablechart-value-on-dark and --tablechart-value-on-light set the colour of the numbers inside bars, with a contrast check.`, t));
3348
+ }, Qr = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), $r = /^\s*(?:Table)?:\s+/, ei = (e) => e?.tagName === "P" && $r.test(e.textContent ?? ""), ti = (e) => {
3153
3349
  let t = document.createElement("figcaption");
3154
3350
  for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
3155
3351
  let n = e.firstChild;
3156
- n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(Ir, ""), n.textContent || n.remove());
3352
+ n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace($r, ""), n.textContent || n.remove());
3157
3353
  let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
3158
3354
  if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
3159
3355
  let e = document.createElement("span");
3160
3356
  e.append(...r.slice(i + 1)), t.append(e);
3161
3357
  }
3162
3358
  return e.remove(), t;
3163
- }, zr = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Br = (e) => {
3164
- let t = Jr(e);
3359
+ }, ni = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, ri = (e) => {
3360
+ let t = di(e);
3165
3361
  return t?.tagName === "P" ? t : e;
3166
- }, Vr = (e) => {
3167
- let t = Br(e).firstChild;
3362
+ }, ii = (e) => {
3363
+ let t = ri(e).firstChild;
3168
3364
  if (t?.nodeType !== Node.TEXT_NODE) return null;
3169
- let n = zr.exec(t.textContent ?? "");
3170
- if (!n || !pn.includes(n[1]) || !n[3] && t.nextSibling) return null;
3365
+ let n = ni.exec(t.textContent ?? "");
3366
+ if (!n || !Rn.includes(n[1]) || !n[3] && t.nextSibling) return null;
3171
3367
  let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
3172
3368
  return {
3173
3369
  name: n[1],
@@ -3175,11 +3371,11 @@ var Qt = (e) => {
3175
3371
  text: t,
3176
3372
  length: n[0].length
3177
3373
  };
3178
- }, Hr = (e) => {
3374
+ }, ai = (e) => {
3179
3375
  if (e?.tagName !== "UL" && e?.tagName !== "OL") return null;
3180
- let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : Vr(e));
3376
+ let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : ii(e));
3181
3377
  return !t.length || t.some((e, t) => !n[t] && !e.hasAttribute("data-annotation")) ? null : (t.forEach((e, t) => {
3182
- let r = n[t], i = Br(e);
3378
+ let r = n[t], i = ri(e);
3183
3379
  if (i !== e && i.replaceWith(...i.childNodes), r) {
3184
3380
  e.setAttribute("data-annotation", r.name);
3185
3381
  for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
@@ -3190,18 +3386,18 @@ var Qt = (e) => {
3190
3386
  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));
3191
3387
  });
3192
3388
  }), e.classList.add("chart-annotations"), e);
3193
- }, Ur = (e, t) => {
3194
- for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || Fr(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
3195
- }, Wr = (e) => e.map((e) => {
3196
- let t = e.closest("p"), n = Lr(t) ? t : e;
3389
+ }, oi = (e, t) => {
3390
+ for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || Qr(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
3391
+ }, si = (e) => e.map((e) => {
3392
+ let t = e.closest("p"), n = ei(t) ? t : e;
3197
3393
  if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
3198
3394
  let r = document.createElement("figure");
3199
- Ur(e, r), e.classList.length || e.removeAttribute("class");
3200
- let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? Lr(a) ? a : Lr(o) ? o : null : n;
3395
+ oi(e, r), e.classList.length || e.removeAttribute("class");
3396
+ let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? ei(a) ? a : ei(o) ? o : null : n;
3201
3397
  i && s === o && (o = o?.nextElementSibling ?? null);
3202
- let c = o?.classList.contains("chart-annotations") ? o : Hr(o);
3203
- return n.replaceWith(r), s && r.append(Rr(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;
3204
- }), Gr = (e, t, n, r = document.createElement("table"), i = "Note") => {
3398
+ let c = o?.classList.contains("chart-annotations") ? o : ai(o);
3399
+ return n.replaceWith(r), s && r.append(ti(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;
3400
+ }), ci = (e, t, n, r = document.createElement("table"), i = "Note") => {
3205
3401
  for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
3206
3402
  let a = e.some((e) => e.note);
3207
3403
  if (!r.tHead && (t.length || n || a)) {
@@ -3230,7 +3426,7 @@ var Qt = (e) => {
3230
3426
  n.dataset.note = "", n.textContent = i, s.append(n);
3231
3427
  }
3232
3428
  return r;
3233
- }, Kr = (e) => {
3429
+ }, li = (e) => {
3234
3430
  if (!e || typeof e != "object") return;
3235
3431
  let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
3236
3432
  if (t.length && t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n))) return t.map(([e, t]) => Array.isArray(t) ? {
@@ -3240,17 +3436,17 @@ var Qt = (e) => {
3240
3436
  label: e,
3241
3437
  value: t
3242
3438
  });
3243
- }, qr = async (t) => {
3439
+ }, ui = async (t) => {
3244
3440
  await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
3245
- let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
3246
- for (let e of t.querySelectorAll("table")) e !== r && e.remove();
3441
+ let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).filter((e) => !e.closest(".chart-summary")), i = r.find((e) => e.tHead) ?? null;
3442
+ for (let e of r) e !== i && e.remove();
3247
3443
  try {
3248
3444
  let e = await fetch(n);
3249
3445
  if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
3250
- let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : Kr(i.rows) : Kr(i);
3446
+ let r = await e.json(), a = Array.isArray(r) ? r : r?.rows ? Array.isArray(r.rows) ? r.rows : li(r.rows) : li(r);
3251
3447
  if (!Array.isArray(a)) throw Error("no rows in it: a list of rows, an object with rows, or names with their values");
3252
- let o = Gr(a, Array.isArray(i?.series) ? i.series.map(String) : [], typeof i?.label == "string" ? i.label : "", r ?? void 0, typeof i?.note == "string" ? i.note : void 0);
3253
- if (!r) {
3448
+ let o = ci(a, Array.isArray(r?.series) ? r.series.map(String) : [], typeof r?.label == "string" ? r.label : "", i ?? void 0, typeof r?.note == "string" ? r.note : void 0);
3449
+ if (!i) {
3254
3450
  let e = t.querySelector(":scope > figcaption");
3255
3451
  e ? e.after(o) : t.prepend(o);
3256
3452
  }
@@ -3260,10 +3456,10 @@ var Qt = (e) => {
3260
3456
  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." : ""));
3261
3457
  }
3262
3458
  }));
3263
- }, Jr = (e) => {
3459
+ }, di = (e) => {
3264
3460
  let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
3265
3461
  return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
3266
- }, Yr = "strong, b, span.total", Xr = (e) => {
3462
+ }, fi = "strong, b, span.total", pi = (e) => {
3267
3463
  for (let t of e) {
3268
3464
  for (let e of t.querySelectorAll("tbody tr")) {
3269
3465
  let t = e.cells[0];
@@ -3271,16 +3467,16 @@ var Qt = (e) => {
3271
3467
  let n = document.createElement("th");
3272
3468
  for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
3273
3469
  n.append(...t.childNodes), t.replaceWith(n);
3274
- for (let t = Jr(n); t?.matches(Yr); t = Jr(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
3470
+ for (let t = di(n); t?.matches(fi); t = di(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
3275
3471
  }
3276
- let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
3277
- for (let t of e.slice(1)) for (let e = Jr(t); e?.matches(Yr); e = Jr(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
3472
+ let e = Array.from(Y(t)?.querySelector("thead tr:last-child")?.children ?? []);
3473
+ for (let t of e.slice(1)) for (let e = di(t); e?.matches(fi); e = di(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
3278
3474
  }
3279
- }, Zr = "data-chart-made", Qr = "data-tablechart-ready", $r = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, ei = (e) => new Promise((t) => setTimeout(t, e)), ti = (e, t) => {
3475
+ }, mi = "data-chart-made", hi = "data-tablechart-ready", gi = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, _i = (e) => new Promise((t) => setTimeout(t, e)), vi = (e, t) => {
3280
3476
  let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
3281
3477
  return Math.min(Math.max(r, 0), 1);
3282
- }, ni = async (e, t) => {
3283
- if ($r()) return;
3478
+ }, yi = async (e, t) => {
3479
+ if (gi()) return;
3284
3480
  await new Promise(requestAnimationFrame);
3285
3481
  let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
3286
3482
  for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
@@ -3291,11 +3487,11 @@ var Qt = (e) => {
3291
3487
  let a = Number(n.delay ?? 0) + i * t;
3292
3488
  r = Math.max(r, a - Number(e.currentTime ?? 0));
3293
3489
  }
3294
- r > 0 && await ei(r);
3295
- }, ri = (e) => {
3490
+ r > 0 && await _i(r);
3491
+ }, bi = (e) => {
3296
3492
  for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
3297
3493
  return null;
3298
- }, ii = (e) => new Promise((t) => {
3494
+ }, xi = (e) => new Promise((t) => {
3299
3495
  let n = ["animationstart", "transitionrun"], r = () => {
3300
3496
  for (let e of n) document.removeEventListener(e, i, !0);
3301
3497
  a.disconnect(), t();
@@ -3309,72 +3505,72 @@ var Qt = (e) => {
3309
3505
  attributes: !0,
3310
3506
  attributeFilter: ["class", "style"]
3311
3507
  });
3312
- }), ai = /* @__PURE__ */ new Set(), oi = null, si = (e) => {
3313
- ai.add(e), !oi && (oi = new MutationObserver(() => {
3314
- for (let e of ai) e.relabel();
3508
+ }), Si = /* @__PURE__ */ new Set(), Ci = null, wi = (e) => {
3509
+ Si.add(e), !Ci && (Ci = new MutationObserver(() => {
3510
+ for (let e of Si) e.relabel();
3315
3511
  requestAnimationFrame(() => requestAnimationFrame(() => {
3316
- for (let e of ai) e.refresh();
3512
+ for (let e of Si) e.refresh();
3317
3513
  }));
3318
- }), oi.observe(document.documentElement, {
3514
+ }), Ci.observe(document.documentElement, {
3319
3515
  attributes: !0,
3320
3516
  attributeFilter: ["lang"]
3321
3517
  }));
3322
- }, ci = (e) => {
3323
- ai.delete(e), !ai.size && oi && (oi.disconnect(), oi = null);
3324
- }, li = ["column", "bar"], ui = (e) => {
3518
+ }, Ti = (e) => {
3519
+ Si.delete(e), !Si.size && Ci && (Ci.disconnect(), Ci = null);
3520
+ }, Ei = ["column", "bar"], Di = (e) => {
3325
3521
  let t = e.getAttribute("data-chart") || "column";
3326
- if (!li.includes(t)) return null;
3522
+ if (!Ei.includes(t)) return null;
3327
3523
  let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
3328
- return li.includes(n) ? n : t;
3329
- }, di = (e, t) => {
3330
- let n = e, r = ui(n.figure), i = null, a = !1, o = !1, s = !1, c = !1, l = () => {
3524
+ return Ei.includes(n) ? n : t;
3525
+ }, Oi = (e, t) => {
3526
+ let n = e, r = Di(n.figure), i = null, a = !1, o = !1, s = !1, c = !1, l = () => {
3331
3527
  t.replay || h.unobserve(n.figure);
3332
3528
  }, u = async () => {
3333
- if (!Ot(n.figure, t)) return mn(n, !0), l();
3529
+ if (!Kn(n.figure, t)) return qn(n, !0), l();
3334
3530
  let e = n.figure.classList.contains("is-shown");
3335
3531
  if (o && i !== null && !e && !s) {
3336
3532
  s = !0;
3337
- let e = $r() ? null : ri(n.figure);
3338
- e && await ii(e), await ni(n.figure, ti(n.figure, t)), s = !1, (o || !t.replay) && mn(n, !0), l();
3339
- } else !o && t.replay && e && mn(n, !1);
3533
+ let e = gi() ? null : bi(n.figure);
3534
+ e && await xi(e), await yi(n.figure, vi(n.figure, t)), s = !1, (o || !t.replay) && qn(n, !0), l();
3535
+ } else !o && t.replay && e && qn(n, !1);
3340
3536
  }, d = () => {
3341
- let e = ui(n.figure);
3537
+ let e = Di(n.figure);
3342
3538
  if (!e || e === r) return;
3343
- let a = X.timed("Building", n.figure, () => En(n.figure, t, e));
3344
- a && (An(n), qe(a, n.step, !0), n = a, r = e, i = null);
3539
+ let a = X.timed("Building", n.figure, () => ar(n.figure, t, e));
3540
+ a && (lr(n), Xe(a, n.step, !0), n = a, r = e, i = null);
3345
3541
  }, f = () => {
3346
3542
  d();
3347
3543
  let e = n.plot.clientWidth;
3348
- e && e !== i && X.timed("Layout", n.figure, () => Er(n, t)) && (a || (a = !0, kr(n.figure), jr(n.figure), Pr(n.figure)), i = e, u());
3544
+ e && e !== i && X.timed("Layout", n.figure, () => Ur(n, t)) && (a || (a = !0, Kr(n.figure), Jr(n.figure), Zr(n.figure)), i = e, u());
3349
3545
  }, p = !1, m = new ResizeObserver(() => {
3350
3546
  f(), m.unobserve(n.figure), requestAnimationFrame(() => p || m.observe(n.figure));
3351
3547
  }), h = new IntersectionObserver((e) => {
3352
3548
  for (let t of e) o = t.isIntersecting, u();
3353
3549
  }, { threshold: t.threshold }), g = () => {
3354
- n.figure.classList.add(S), mn(n, !0), vn(n.svg), n.figure.offsetWidth, hi(n, !0);
3550
+ n.figure.classList.add(S), qn(n, !0), Zn(n.svg), n.figure.offsetWidth, Mi(n, !0);
3355
3551
  let e = document.documentElement, r = e.style.width;
3356
- e.style.width = "700px", c = i !== null && n.plot.clientWidth < i * .9, c && Er(n, t), e.style.width = r;
3552
+ e.style.width = "700px", c = i !== null && n.plot.clientWidth < i * .9, c && Ur(n, t), e.style.width = r;
3357
3553
  }, _ = () => {
3358
- n.figure.classList.remove(S), hi(n, !1), c && Er(n, t), c = !1;
3554
+ n.figure.classList.remove(S), Mi(n, !1), c && Ur(n, t), c = !1;
3359
3555
  }, v = () => {
3360
3556
  i = null, f();
3361
3557
  }, y = {
3362
- relabel: () => kn(n, t),
3558
+ relabel: () => cr(n, t),
3363
3559
  refresh: v
3364
3560
  };
3365
- d(), f(), m.observe(n.figure), h.observe(n.figure), window.addEventListener("beforeprint", g), window.addEventListener("afterprint", _), si(y);
3561
+ d(), f(), m.observe(n.figure), h.observe(n.figure), window.addEventListener("beforeprint", g), window.addEventListener("afterprint", _), wi(y);
3366
3562
  let b = {
3367
3563
  figure: n.figure,
3368
3564
  refresh: v,
3369
- next: () => qe(n, n.step + 1),
3370
- previous: () => qe(n, n.step - 1),
3371
- stepTo: (e) => qe(n, e),
3565
+ next: () => Xe(n, n.step + 1),
3566
+ previous: () => Xe(n, n.step - 1),
3567
+ stepTo: (e) => Xe(n, e),
3372
3568
  replay() {
3373
- if (n.plan) return qe(n, 0);
3374
- Ot(n.figure, t) && (mn(n, !1, !0), requestAnimationFrame(() => p || mn(n, !0)));
3569
+ if (n.plan) return Xe(n, 0);
3570
+ Kn(n.figure, t) && (qn(n, !1, !0), requestAnimationFrame(() => p || qn(n, !0)));
3375
3571
  },
3376
3572
  reset() {
3377
- !n.plan && Ot(n.figure, t) && (o = !1, mn(n, !1, !0), h.observe(n.figure));
3573
+ !n.plan && Kn(n.figure, t) && (o = !1, qn(n, !1, !0), h.observe(n.figure));
3378
3574
  },
3379
3575
  get step() {
3380
3576
  return n.step;
@@ -3383,36 +3579,36 @@ var Qt = (e) => {
3383
3579
  return n.plan?.count ?? 0;
3384
3580
  },
3385
3581
  destroy() {
3386
- p = !0, m.disconnect(), h.disconnect(), window.removeEventListener("beforeprint", g), window.removeEventListener("afterprint", _), ci(y), bt(n), n.figure.tablechart === b && delete n.figure.tablechart;
3582
+ p = !0, m.disconnect(), h.disconnect(), window.removeEventListener("beforeprint", g), window.removeEventListener("afterprint", _), Ti(y), Ct(n), n.figure.tablechart === b && delete n.figure.tablechart;
3387
3583
  }
3388
3584
  };
3389
3585
  return n.figure.tablechart = b, b;
3390
- }, fi = !1, pi = (t) => {
3586
+ }, ki = !1, Ai = (t) => {
3391
3587
  let n = t.find((e) => e.tagName !== "FIGURE");
3392
- !fi && n && (fi = !0, console.warn(`[${e}] A chart is a <${n.tagName.toLowerCase()}>. Use a <figure> with a <figcaption>, so the chart has a title, also for screen readers.`, n));
3393
- }, mi = async (e, t) => {
3394
- let n = Wr(e.filter((e) => !e.hasAttribute(Zr) && e.tagName !== "TH"));
3395
- pi(n);
3588
+ !ki && n && (ki = !0, console.warn(`[${e}] A chart is a <${n.tagName.toLowerCase()}>. Use a <figure> with a <figcaption>, so the chart has a title, also for screen readers.`, n));
3589
+ }, ji = async (e, t) => {
3590
+ let n = si(e.filter((e) => !e.hasAttribute(mi) && e.tagName !== "TH"));
3591
+ Ai(n);
3396
3592
  for (let e of n) {
3397
3593
  let t = Number.parseFloat(e.getAttribute("data-chart-aspect") ?? "");
3398
3594
  t > 0 && e.style.setProperty("--_room", String(t));
3399
3595
  }
3400
- await qr(n), Xr(n), He(n, t.langattribute);
3596
+ await ui(n), pi(n), Z(n, t.langattribute);
3401
3597
  for (let e of n) e.dispatchEvent(new CustomEvent("tablechart:table", { bubbles: !0 }));
3402
3598
  return n;
3403
- }, hi = ({ figure: e, plot: t, svg: n }, r) => {
3599
+ }, Mi = ({ figure: e, plot: t, svg: n }, r) => {
3404
3600
  let i = ["aria-labelledby", "aria-label"].find((t) => e.hasAttribute(t));
3405
3601
  e.tagName !== "FIGURE" || !i || e.hasAttribute("role") && e.getAttribute("role") !== "group" || (r ? (e.setAttribute("role", "group"), t.removeAttribute("aria-hidden"), n.setAttribute("role", "img"), n.setAttribute(i, e.getAttribute(i) ?? "")) : (e.removeAttribute("role"), t.setAttribute("aria-hidden", "true"), n.setAttribute("role", "presentation"), n.removeAttribute(i)));
3406
- }, gi = (e, t) => {
3407
- let n = X.timed("Building", e, () => En(e, t));
3408
- return n ? (e.setAttribute(Zr, ""), yi(), di(n, t)) : null;
3409
- }, _i = !1, vi = /* @__PURE__ */ new WeakMap(), yi = () => {
3410
- if (_i || typeof matchMedia != "function") return;
3411
- _i = !0;
3602
+ }, Ni = (e, t) => {
3603
+ let n = X.timed("Building", e, () => ar(e, t));
3604
+ return n ? (e.setAttribute(mi, ""), Ii(), Oi(n, t)) : null;
3605
+ }, Pi = !1, Fi = /* @__PURE__ */ new WeakMap(), Ii = () => {
3606
+ if (Pi || typeof matchMedia != "function") return;
3607
+ Pi = !0;
3412
3608
  let e = () => {
3413
- for (let e of document.querySelectorAll(`[${Zr}]`)) {
3414
- let t = getComputedStyle(e).color, n = Bn(e) || vi.get(e) !== t;
3415
- vi.set(e, t), n && (Kn(e), qn(e));
3609
+ for (let e of document.querySelectorAll(`[${mi}]`)) {
3610
+ let t = getComputedStyle(e).color, n = Nt(e) || Fi.get(e) !== t;
3611
+ Fi.set(e, t), n && (Bt(e), Ut(e));
3416
3612
  }
3417
3613
  };
3418
3614
  matchMedia("(prefers-color-scheme: dark)").addEventListener("change", e);
@@ -3421,23 +3617,23 @@ var Qt = (e) => {
3421
3617
  document.addEventListener("transitionend", (t) => {
3422
3618
  (t.target === document.documentElement || t.target === document.body) && e();
3423
3619
  });
3424
- }, bi = async (e, t = {}) => {
3620
+ }, Li = async (e, t = {}) => {
3425
3621
  if (e.tablechart) return e.tablechart;
3426
3622
  let n = {
3427
3623
  ...A,
3428
3624
  ...t
3429
3625
  };
3430
3626
  n.debug && (X.enabled = !0);
3431
- let [r] = await mi([e], n);
3432
- return r ? gi(r, n) : null;
3433
- }, xi = 0, Si = async (e = {}, t = document) => {
3627
+ let [r] = await ji([e], n);
3628
+ return r ? Ni(r, n) : null;
3629
+ }, Ri = 0, zi = async (e = {}, t = document) => {
3434
3630
  let n = {
3435
3631
  ...A,
3436
3632
  ...e
3437
3633
  };
3438
- n.debug && (X.enabled = !0), xi += 1, document.documentElement.removeAttribute(Qr);
3439
- let r = (await mi(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => gi(e, n)).filter((e) => e !== null);
3440
- return X.log(`Made ${r.length} chart(s).`), --xi, xi || (document.documentElement.setAttribute(Qr, ""), document.dispatchEvent(new CustomEvent("tablechart:ready"))), {
3634
+ n.debug && (X.enabled = !0), Ri += 1, document.documentElement.removeAttribute(hi);
3635
+ let r = (await ji(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => Ni(e, n)).filter((e) => e !== null);
3636
+ return X.log(`Made ${r.length} chart(s).`), --Ri, Ri || (document.documentElement.setAttribute(hi, ""), document.dispatchEvent(new CustomEvent("tablechart:ready"))), {
3441
3637
  charts: r,
3442
3638
  refresh: () => {
3443
3639
  for (let e of r) e.refresh();
@@ -3447,4 +3643,4 @@ var Qt = (e) => {
3447
3643
  }
3448
3644
  };
3449
3645
  };
3450
- export { ne as A, t as B, _e as C, J as D, q as E, O as F, x as G, S as H, m as I, k as K, e as L, te as M, j as N, W as O, C as P, p as R, Ee as S, ye as T, c as U, h as V, T as W, nn as _, Wr as a, Ve as b, kr as c, En as d, kn as f, tn as g, dn as h, mi as i, P as j, G as k, jr as l, mn as m, ti as n, qr as o, An as p, A as q, Si as r, Xr as s, bi as t, Er as u, qe as v, Y as w, ze as x, He as y, y as z };
3646
+ export { G as A, m as B, ke as C, ue as D, Se as E, N as F, h as G, p as H, j as I, T as J, S as K, C as L, U as M, te as N, q as O, I as P, A as Q, i as R, Y as S, J as T, y as U, e as V, t as W, x as X, a as Y, k as Z, On as _, si as a, Ge as b, Kr as c, ar as d, cr as f, Dn as g, In as h, ji as i, K as j, W as k, Jr as l, qn as m, vi as n, ui as o, lr as p, c as q, zi as r, pi as s, Li as t, Ur as u, Xe as v, be as w, He as x, Z as y, O as z };