@martinomagnifico/tablechart 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -177,10 +177,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
177
177
  }, re = (e) => (e.split(/[.,]/)[1] || "").length, G = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
178
178
  minimumFractionDigits: e,
179
179
  maximumFractionDigits: e
180
- }), ie = (e, t, n) => {
180
+ }), K = (e, t, n) => {
181
181
  let r = G(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
182
182
  return [i, r.slice(+!!i).map((e) => e.value).join("")];
183
- }, K = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), q = (e, t) => {
183
+ }, ie = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), q = (e, t) => {
184
184
  let n = document.createElement("span");
185
185
  if (n.className = "tablechart-badge", n.inert = !0, e.childElementCount > 0) for (let t of Array.from(e.children)) n.appendChild(t.cloneNode(!0));
186
186
  else {
@@ -190,7 +190,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
190
190
  }
191
191
  return t.appendChild(n), n;
192
192
  }, ae = (t, n, r, i, a = "%") => {
193
- let o = t?.textContent || "", s = K(o), c = a ? .5 : .5 * 10 ** -re(o.match(/-?[\d.,]+/)?.[0] ?? ""), l = Number.isNaN(s) ? !0 : Math.abs(n - s) <= c + 1e-9, u = {
193
+ let o = t?.textContent || "", s = ie(o), c = a ? .5 : .5 * 10 ** -re(o.match(/-?[\d.,]+/)?.[0] ?? ""), l = Number.isNaN(s) ? !0 : Math.abs(n - s) <= c + 1e-9, u = {
194
194
  label: r,
195
195
  computed: n,
196
196
  stated: s,
@@ -267,7 +267,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
267
267
  below: [.5, 0],
268
268
  after: [0, .5],
269
269
  before: [1, .5]
270
- }, Y = (e, t, n, r, i = [.5, .5]) => {
270
+ }, xe = (e, t, n, r, i = [.5, .5]) => {
271
271
  let [a, o] = be[e.dataset.place ?? ""] ?? i, { width: s, height: c } = J(e);
272
272
  return [
273
273
  Number.parseFloat(e.style.left) / 100 * n - s * t * a,
@@ -275,20 +275,20 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
275
275
  s * t,
276
276
  c * t
277
277
  ];
278
- }, xe = (e, t, n) => {
278
+ }, Se = (e, t, n) => {
279
279
  for (let r of e) {
280
280
  if (r.dataset.place === "none" || !r.style.left) continue;
281
281
  let [e] = be[r.dataset.place ?? ""] ?? [.5, .5], i = J(r).width * t, a = Number.parseFloat(r.style.left) / 100 * n, o = Math.min(Math.max(a, i * e), n - i * (1 - e));
282
282
  o !== a && (r.style.left = `${o / n * 100}%`);
283
283
  }
284
- }, Se = (e, t, n, r) => {
285
- let i = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), a = Ce(i, t, n, r);
284
+ }, Ce = (e, t, n, r) => {
285
+ let i = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), a = Y(i, t, n, r);
286
286
  i.forEach((e, t) => {
287
287
  t % a && e.setAttribute("data-left-out", "");
288
288
  });
289
- }, Ce = (e, t, n, r) => {
289
+ }, Y = (e, t, n, r) => {
290
290
  if (e.length < 2) return 1;
291
- let i = e.map((e) => Y(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;
291
+ let i = e.map((e) => xe(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;
292
292
  for (; s < e.length && i.some((e, t) => t >= s && t % s === 0 && !o(i[t - s], e));) s++;
293
293
  return s;
294
294
  }, we = {
@@ -321,7 +321,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
321
321
  }), u.querySelector(`:scope > .${m}`)), !n) return;
322
322
  let v = J(n).width * l, y = J(n).height * l, b = 4 * l, x = f.flat().flatMap((e) => !e.style.left || e.dataset.place === "none" || e.hasAttribute("data-left-out") ? [] : [{
323
323
  label: e,
324
- box: Y(e, l, D, c)
324
+ box: xe(e, l, D, c)
325
325
  }]), S = [0, y + b / 2].flatMap((e) => [
326
326
  [
327
327
  g - v / 2,
@@ -371,7 +371,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
371
371
  draw(t, n, r) {
372
372
  let { rows: i, cx: a, y: s, x: c, height: l, unit: u, svg: d, after: f } = r, p = i.filter((e) => !e.isTotal && !e.missing), h = t.hasAttribute("data-name"), g = (t.getAttribute(h ? "data-name" : "data-value") ?? "").trim(), _, v, y;
373
373
  if (h) {
374
- let t = p.map((e) => K(e.label));
374
+ let t = p.map((e) => ie(e.label));
375
375
  if (r.categories[0]?.parentElement?.dataset.place === "beside" || t.some(Number.isNaN)) {
376
376
  console.warn(`[${e}] A reference line among the names needs names that are numbers, under columns or points.`);
377
377
  return;
@@ -568,7 +568,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
568
568
  }, Fe = (e, t, n) => {
569
569
  let r = t.series.some((e) => e.focus);
570
570
  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})`);
571
- }, Ie = (e, t, n, i = {}, a = "") => {
571
+ }, Ie = (e, t) => e.some((n, r) => r !== t && !n.cell.missing && n.to !== n.from && n.from === e[t].to), Le = (e, t, n, i = {}, a = "") => {
572
572
  let o = {
573
573
  class: F(r, t),
574
574
  "data-kind": "bar",
@@ -589,7 +589,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
589
589
  ...je(e, t, r)
590
590
  }));
591
591
  };
592
- }, Le = {
592
+ }, Re = {
593
593
  segments: (e) => e.map((e) => ({
594
594
  ...e,
595
595
  from: 0,
@@ -603,9 +603,9 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
603
603
  totals: !0,
604
604
  breakable: !0,
605
605
  aspect: .5,
606
- minHeight: ({ labelHeight: e, nameHeight: t, rows: n, series: r, stacked: i }) => {
607
- let a = e * 1.1, o = r > 1 && !i ? a * (r + .15 * (r - 1)) / .7 : a / .58;
608
- return n * Math.max(o, t * 1.2);
606
+ minHeight: ({ labelHeight: e, nameHeight: t, rows: n, series: r, stacked: i, labels: a }) => {
607
+ let o = e * 1.1, s = r > 1 && !i ? o * (r + .15 * (r - 1)) / .7 : i || a === "inside" ? o / .58 : o;
608
+ return n * Math.max(s, t * 1.2);
609
609
  },
610
610
  categories: "beside",
611
611
  headroom: () => 0,
@@ -629,24 +629,25 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
629
629
  }
630
630
  let V = m - p - R - z, H = p + z + b(v, V), U = (e) => e < 0 ? H - b(e, V) : H + b(e, V);
631
631
  if (e.squeeze && (e.breakX = U(e.squeeze.gap)), e.x = U, e.stacked) {
632
- e.rows.forEach((t, r) => {
633
- let i = Ne(t, e.series.length), o = Ie(e, t, r, { "data-grow": "right" }, i.bottom < 0 ? `${H - U(i.bottom)}px center` : ""), s = S(r) - C / 2;
634
- Me(t, e.series.length).forEach(({ from: t, to: i, cell: c }, l) => {
635
- let u = e.seriesValues[l][r];
636
- if (u.dataset.place = "none", c.missing || i === t) return;
637
- let d = Math.min(U(t), U(i)), f = Math.max(U(t), U(i));
638
- o(l, {
639
- x: d,
640
- y: s,
641
- width: Math.max(f - d, 1),
632
+ let t = e.length("--tablechart-stack-gap", "1px") ?? a;
633
+ e.rows.forEach((r, i) => {
634
+ let o = Ne(r, e.series.length), s = Le(e, r, i, { "data-grow": "right" }, o.bottom < 0 ? `${H - U(o.bottom)}px center` : ""), l = S(i) - C / 2, u = Me(r, e.series.length);
635
+ u.forEach(({ from: r, to: o, cell: c }, d) => {
636
+ let f = e.seriesValues[d][i];
637
+ if (f.dataset.place = "none", c.missing || o === r) return;
638
+ let p = Math.min(U(r), U(o)), m = Math.max(U(r), U(o)), h = Ie(u, d) ? Math.min(t, (m - p) / 2) : 0, [g, _] = U(o) > U(r) ? [p, m - h] : [p + h, m];
639
+ s(d, {
640
+ x: g,
641
+ y: l,
642
+ width: Math.max(_ - g, 1),
642
643
  height: C,
643
- ...i < t && { "data-grow": "left" }
644
- }), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !_e(u, f - d, a) || J(u).height * a > C), Fe(u, e, l), L(u, (d + f) / 2, S(r), D, n);
644
+ ...o < r && { "data-grow": "left" }
645
+ }), f.dataset.place = "inside", f.toggleAttribute("data-left-out", !_e(f, m - p, a) || J(f).height * a > C), Fe(f, e, d), L(f, (p + m) / 2, S(i), D, n);
645
646
  });
646
- let l = e.totals[r];
647
- l && (l.dataset.place = I(r) ? "before" : "after", L(l, I(r) ? U(i.bottom) - O : U(i.top) + O, S(r), D, n));
648
- let u = c[r];
649
- u && L(u, p - 8 * a, S(r), D, n);
647
+ let d = e.totals[i];
648
+ d && (d.dataset.place = I(i) ? "before" : "after", L(d, I(i) ? U(o.bottom) - O : U(o.top) + O, S(i), D, n));
649
+ let f = c[i];
650
+ f && L(f, p - 8 * a, S(i), D, n);
650
651
  }), o.appendChild(P("line", {
651
652
  class: i,
652
653
  x1: H,
@@ -718,7 +719,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
718
719
  y2: n
719
720
  }));
720
721
  }
721
- }, Re = {
722
+ }, ze = {
722
723
  segments: (e) => e.map((e) => ({
723
724
  ...e,
724
725
  from: 0,
@@ -736,24 +737,25 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
736
737
  draw(e) {
737
738
  let { segments: t, cx: n, y: a, barWidth: o, height: s, unit: c, svg: l, values: u, labels: d, insideAlign: f } = e, p = a(0);
738
739
  if (e.stacked) {
739
- e.rows.forEach((t, r) => {
740
- let i = Ne(t, e.series.length), l = Ie(e, t, r, {}, i.bottom < 0 ? `center ${p - a(i.top)}px` : ""), u = n(r) - o / 2;
741
- Me(t, e.series.length).forEach(({ from: t, to: i, cell: d }, f) => {
742
- let p = e.seriesValues[f][r];
743
- if (p.dataset.place = "none", d.missing || i === t) return;
744
- let m = Math.min(a(i), a(t)), h = Math.max(a(i), a(t));
745
- l(f, {
746
- x: u,
747
- y: m,
740
+ let t = e.length("--tablechart-stack-gap", "1px") ?? c;
741
+ e.rows.forEach((r, i) => {
742
+ let l = Ne(r, e.series.length), u = Le(e, r, i, {}, l.bottom < 0 ? `center ${p - a(l.top)}px` : ""), d = n(i) - o / 2, f = Me(r, e.series.length);
743
+ f.forEach(({ from: r, to: l, cell: p }, m) => {
744
+ let h = e.seriesValues[m][i];
745
+ if (h.dataset.place = "none", p.missing || l === r) return;
746
+ let g = Math.min(a(l), a(r)), _ = Math.max(a(l), a(r)), v = Ie(f, m) ? Math.min(t, (_ - g) / 2) : 0, [y, b] = a(l) < a(r) ? [g + v, _] : [g, _ - v];
747
+ u(m, {
748
+ x: d,
749
+ y,
748
750
  width: o,
749
- height: Math.max(h - m, 1),
750
- ...i < t && { "data-grow": "down" }
751
- }), p.dataset.place = "inside", p.toggleAttribute("data-left-out", !ge(p, h - m, c) || J(p).width * c > o - 4 * c), Fe(p, e, f), L(p, n(r), (m + h) / 2, D, s);
751
+ height: Math.max(b - y, 1),
752
+ ...l < r && { "data-grow": "down" }
753
+ }), h.dataset.place = "inside", h.toggleAttribute("data-left-out", !ge(h, _ - g, c) || J(h).width * c > o - 4 * c), Fe(h, e, m), L(h, n(i), (g + _) / 2, D, s);
752
754
  });
753
- let d = e.totals[r];
754
- if (d) {
755
- let e = i.top === 0 && i.bottom < 0;
756
- d.dataset.place = e ? "below" : "outside", L(d, n(r), e ? a(i.bottom) + 4 * c : a(i.top) - 4 * c, D, s);
755
+ let m = e.totals[i];
756
+ if (m) {
757
+ let e = l.top === 0 && l.bottom < 0;
758
+ m.dataset.place = e ? "below" : "outside", L(m, n(i), e ? a(l.bottom) + 4 * c : a(l.top) - 4 * c, D, s);
757
759
  }
758
760
  }), l.appendChild(P("line", {
759
761
  class: i,
@@ -829,7 +831,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
829
831
  y2: p
830
832
  }));
831
833
  }
832
- }, ze = 0, Be = (e) => e.filter((e) => !e.isTotal), Ve = {
834
+ }, Be = 0, Ve = (e) => e.filter((e) => !e.isTotal), He = {
833
835
  aspect: .66,
834
836
  centre: !0,
835
837
  headroom: () => 0,
@@ -840,7 +842,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
840
842
  kind: "bar"
841
843
  })),
842
844
  draw({ rows: e, height: t, unit: n, labelHeight: r, svg: i, values: a, config: o, centre: s }) {
843
- let c = D / 2, u = t / 2, d = Be(e).reduce((e, t) => e + Math.abs(t.value), 0);
845
+ let c = D / 2, u = t / 2, d = Ve(e).reduce((e, t) => e + Math.abs(t.value), 0);
844
846
  if (!d) return;
845
847
  let f = r * 1.2 + 10 * n, p = Math.max(Math.min(D, t) / 2 - f, 10), m = p * o.ringfill, h = p - m / 2, g = 2 * Math.PI * h, _ = [], v = 0, y = 0, b = 0;
846
848
  if (e.forEach((e, o) => {
@@ -876,7 +878,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
876
878
  let k = p + 9 * n, M = J(s).width * n / 2;
877
879
  L(s, c + E * (k + Math.abs(E) * M), u + O * (k + Math.abs(O) * r * .7), D, t), s.dataset.place = "around", v += C, b += f, y += 1;
878
880
  }), _.length > 1) {
879
- let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++ze}`, a = P("mask", {
881
+ let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++Be}`, a = P("mask", {
880
882
  id: r,
881
883
  maskUnits: "userSpaceOnUse"
882
884
  });
@@ -901,17 +903,17 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
901
903
  }
902
904
  s && L(s, c, u, D, t);
903
905
  }
904
- }, He = [
906
+ }, Ue = [
905
907
  "circle",
906
908
  "square",
907
909
  "diamond"
908
910
  ], X = (e, t) => {
909
- let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = He.find((e) => n.includes(e));
911
+ let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = Ue.find((e) => n.includes(e));
910
912
  return {
911
- shape: r ?? He[Math.floor(t / 2) % He.length],
913
+ shape: r ?? Ue[Math.floor(t / 2) % Ue.length],
912
914
  open: n.includes("open") || !n.includes("filled") && !r && t % 2 == 1
913
915
  };
914
- }, Ue = (e, t, n, r, i = {}) => {
916
+ }, We = (e, t, n, r, i = {}) => {
915
917
  if (e === "square") {
916
918
  let e = r * .88;
917
919
  return P("rect", {
@@ -943,7 +945,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
943
945
  ...i
944
946
  });
945
947
  }, Z = (e) => Number(e.toFixed(2));
946
- function We(e, t) {
948
+ function Ge(e, t) {
947
949
  let n = e.length;
948
950
  if (n < 2) return e.map(() => 0);
949
951
  let r = (n) => (t[n + 1] - t[n]) / (e[n + 1] - e[n] || 1), i = Array(n).fill(0);
@@ -960,24 +962,24 @@ function We(e, t) {
960
962
  };
961
963
  return i[0] = a(0, 1, i[1]), i[n - 1] = a(n - 2, n - 1, i[n - 2]), i;
962
964
  }
963
- function Ge(e, t, n, r) {
965
+ function Ke(e, t, n, r) {
964
966
  let i = (t[0] - e[0]) / 3;
965
967
  return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
966
968
  }
967
- function Ke(e, t, n, r) {
968
- let [i, a] = Ge(e, t, n, r), o = ([e, t]) => `${Z(e)},${Z(t)}`;
969
+ function qe(e, t, n, r) {
970
+ let [i, a] = Ke(e, t, n, r), o = ([e, t]) => `${Z(e)},${Z(t)}`;
969
971
  return `C${o(i)} ${o(a)} ${o(t)}`;
970
972
  }
971
- function qe(e, t, n) {
973
+ function Je(e, t, n) {
972
974
  let r = Array(e).fill(0), i = [], a = () => {
973
- We(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
975
+ Ge(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
974
976
  r[i[t]] = e;
975
977
  }), i = [];
976
978
  };
977
979
  for (let n = 0; n < e; n++) t(n) ? a() : i.push(n);
978
980
  return a(), r;
979
981
  }
980
- var Je = (e) => {
982
+ var Ye = (e) => {
981
983
  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;
982
984
  return {
983
985
  at: o,
@@ -985,7 +987,7 @@ var Je = (e) => {
985
987
  t: c ? a / c : a ? Infinity : 0,
986
988
  n: t
987
989
  };
988
- }, Ye = [
990
+ }, Xe = [
989
991
  12.71,
990
992
  4.3,
991
993
  3.18,
@@ -1001,29 +1003,29 @@ var Je = (e) => {
1001
1003
  2.16,
1002
1004
  2.14,
1003
1005
  2.13
1004
- ], Xe = (e) => Ye[e - 1] ?? (e < 30 ? 2.1 : 2), Ze = (e) => {
1006
+ ], Ze = (e) => Xe[e - 1] ?? (e < 30 ? 2.1 : 2), Qe = (e) => {
1005
1007
  let t = e.map((e) => e.y), n = Math.min(...t), r = Math.max(...t), i = n < 0 && r > 0, a = r - n || 1;
1006
1008
  return {
1007
1009
  mean: t.reduce((e, t) => e + t, 0) / t.length,
1008
1010
  share: (e, t) => e / (i ? a : Math.abs(t) || a) * 100
1009
1011
  };
1010
- }, Qe = (e, t = 5, n = 25) => {
1012
+ }, $e = (e, t = 5, n = 25) => {
1011
1013
  if (e.length < 4) return null;
1012
- let { mean: r, share: i } = Ze(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 = Je(e), c = a(s.at);
1013
- c.length && o(c) && (s = Je(e.filter((e) => !c.includes(e))), c = a(s.at)), o(c) || (s = Je(e), c = []);
1014
- 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) >= Xe(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";
1014
+ let { mean: r, share: i } = Qe(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 = Ye(e), c = a(s.at);
1015
+ c.length && o(c) && (s = Ye(e.filter((e) => !c.includes(e))), c = a(s.at)), o(c) || (s = Ye(e), c = []);
1016
+ 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) >= Ze(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";
1015
1017
  return {
1016
1018
  course: g,
1017
1019
  line: l,
1018
1020
  outside: g === "unclear" ? [] : c
1019
1021
  };
1020
- }, $e = (e) => e.map((e) => ({
1022
+ }, et = (e) => e.map((e) => ({
1021
1023
  ...e,
1022
1024
  from: 0,
1023
1025
  to: e.value,
1024
1026
  kind: "bar"
1025
- })), et = (e) => ({
1026
- segments: $e,
1027
+ })), tt = (e) => ({
1028
+ segments: et,
1027
1029
  series: !0,
1028
1030
  stackable: !0,
1029
1031
  running: !0,
@@ -1057,12 +1059,12 @@ var Je = (e) => {
1057
1059
  "data-from": e + 1,
1058
1060
  "data-to": t + 1,
1059
1061
  ...b && { "data-flat": "" }
1060
- }), ne = x ? r.map((e, t) => qe(n.length, (e) => A(t, e), (e) => F(t, e))) : [], W = x && e ? r.map((e, t) => qe(n.length, (e) => A(t, e), (e) => [c(e), l(N(t, e))])) : [], re = (e, t, n) => {
1062
+ }), ne = x ? r.map((e, t) => Je(n.length, (e) => A(t, e), (e) => F(t, e))) : [], W = x && e ? r.map((e, t) => Je(n.length, (e) => A(t, e), (e) => [c(e), l(N(t, e))])) : [], re = (e, t, n) => {
1061
1063
  let r = [];
1062
1064
  return e.forEach(([i, a], o) => {
1063
- b ? (r.push(`H${Z(i + n * E / 2)}`), o < e.length - 1 && r.push(`V${Z(e[o + 1][1])}`)) : o > 0 && r.push(t ? Ke(e[o - 1], [i, a], t[o - 1], t[o]) : `L${Z(i)},${Z(a)}`);
1065
+ b ? (r.push(`H${Z(i + n * E / 2)}`), o < e.length - 1 && r.push(`V${Z(e[o + 1][1])}`)) : o > 0 && r.push(t ? qe(e[o - 1], [i, a], t[o - 1], t[o]) : `L${Z(i)},${Z(a)}`);
1064
1066
  }), r;
1065
- }, G = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [c(t + r), l(i(e, t + r))]), ie = (e, t, n, r) => x ? e[t].slice(n, r + 1) : null, K = (e) => c(e) - (b ? E / 2 : 0), q = (e) => c(e) + (b ? E / 2 : 0), ae = (e) => {
1067
+ }, G = (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, ie = (e) => c(e) - (b ? E / 2 : 0), q = (e) => c(e) + (b ? E / 2 : 0), ae = (e) => {
1066
1068
  let t = P("g", {
1067
1069
  class: d,
1068
1070
  ...I[e].attrs,
@@ -1074,10 +1076,10 @@ var Je = (e) => {
1074
1076
  });
1075
1077
  t.appendChild(r);
1076
1078
  for (let [t, i] of n) {
1077
- let n = G(e, t, i, M), a = G(e, t, i, N), o = ie(W, e, t, i)?.reverse() ?? null, s = [
1078
- `M${Z(K(t))},${Z(a[0][1])}`,
1079
- `L${Z(K(t))},${Z(n[0][1])}`,
1080
- ...re(n, ie(ne, e, t, i), 1),
1079
+ let n = G(e, t, i, M), a = G(e, t, i, N), o = K(W, e, t, i)?.reverse() ?? null, s = [
1080
+ `M${Z(ie(t))},${Z(a[0][1])}`,
1081
+ `L${Z(ie(t))},${Z(n[0][1])}`,
1082
+ ...re(n, K(ne, e, t, i), 1),
1081
1083
  `L${Z(q(i))},${Z(a[a.length - 1][1])}`,
1082
1084
  ...re(a.reverse(), o, -1),
1083
1085
  "Z"
@@ -1092,7 +1094,7 @@ var Je = (e) => {
1092
1094
  }, oe = (e) => {
1093
1095
  let t = r[e];
1094
1096
  for (let [n, r] of H(e)) {
1095
- let i = G(e, n, r, M), a = [`M${Z(K(n))},${Z(i[0][1])}`, ...re(i, ie(ne, e, n, r), 1)].join(" ");
1097
+ let i = G(e, n, r, M), a = [`M${Z(ie(n))},${Z(i[0][1])}`, ...re(i, K(ne, e, n, r), 1)].join(" ");
1096
1098
  _.appendChild(P("path", {
1097
1099
  class: u,
1098
1100
  ...I[e].attrs,
@@ -1108,7 +1110,7 @@ var Je = (e) => {
1108
1110
  open: !1
1109
1111
  }), s = (e, t, n) => {
1110
1112
  let [r, i] = F(e, t);
1111
- return Ue(o[e].shape, r, i, 4 * p, {
1113
+ return We(o[e].shape, r, i, 4 * p, {
1112
1114
  ...n,
1113
1115
  style: `${n.style ?? ""}${O(i)}${V(t)}`
1114
1116
  });
@@ -1132,7 +1134,7 @@ var Je = (e) => {
1132
1134
  let ce = y ? r.flatMap((e, t) => a.includes(t) ? [] : o[t].flatMap((e) => {
1133
1135
  let t = e.dataset.place;
1134
1136
  if (!t || t === "none" || e.hasAttribute("data-left-out")) return [];
1135
- let [n, r, i, a] = Y(e, p, D, f);
1137
+ let [n, r, i, a] = xe(e, p, D, f);
1136
1138
  return [{
1137
1139
  label: e,
1138
1140
  box: [
@@ -1216,12 +1218,12 @@ var Je = (e) => {
1216
1218
  ]);
1217
1219
  e.forEach(({ s: e, i: n, value: i }, a) => be.set(o[e][n], r[a] === null ? null : t(i)[r[a]]));
1218
1220
  }
1219
- let xe = (e, t) => ve ? be.get(o[e][t]) === null : !v && !b ? !1 : J(o[e][t]).width * p > (b ? pe(e, t) - t + 1 : 1) * E - 4 * p || v && e > 0 && M(e, t) < N(e, t) ? !0 : v && Math.abs(l(N(e, t)) - l(M(e, t))) < g * 1.2;
1221
+ let Se = (e, t) => ve ? be.get(o[e][t]) === null : !v && !b ? !1 : J(o[e][t]).width * p > (b ? pe(e, t) - t + 1 : 1) * E - 4 * p || v && e > 0 && M(e, t) < N(e, t) ? !0 : v && Math.abs(l(N(e, t)) - l(M(e, t))) < g * 1.2;
1220
1222
  a.forEach((e) => {
1221
1223
  o[e].forEach((t, n) => {
1222
1224
  t.style.setProperty("--i", String(Z(b ? (B(n) + B(n + 1)) / 2 : B(n))));
1223
1225
  let r = be.get(t) ?? _e(e, n);
1224
- if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" && xe(e, n)), b && r !== "none" ? t.dataset.rowEnd = String(pe(e, n) + 1) : delete t.dataset.rowEnd, r === "none") return;
1226
+ if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" && Se(e, n)), b && r !== "none" ? t.dataset.rowEnd = String(pe(e, n) + 1) : delete t.dataset.rowEnd, r === "none") return;
1225
1227
  let i = J(t).width * p / 2 + 4 * p, a = c(n);
1226
1228
  b ? a = (c(n) + c(pe(e, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === w && (a -= i);
1227
1229
  let o = l(M(e, n)), s = {
@@ -1232,25 +1234,25 @@ var Je = (e) => {
1232
1234
  L(t, a, o + s[r], D, f);
1233
1235
  });
1234
1236
  });
1235
- let Se = (e) => {
1237
+ let Ce = (e) => {
1236
1238
  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) => k(e, t)?.value ?? 0, { keys: s } = t.pick;
1237
- 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(...Qe(i.map((e) => ({
1239
+ 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(...$e(i.map((e) => ({
1238
1240
  x: e,
1239
1241
  y: a(e)
1240
1242
  })))?.outside.map((e) => e.x) ?? []));
1241
1243
  let c = [];
1242
1244
  for (let t of r) {
1243
1245
  let n = o[e][t];
1244
- c.includes(t) || n.dataset.place === "none" || c.every((t) => Ce([o[e][t], n], p, 1e3, f) === 1) && c.push(t);
1246
+ c.includes(t) || n.dataset.place === "none" || c.every((t) => Y([o[e][t], n], p, 1e3, f) === 1) && c.push(t);
1245
1247
  }
1246
1248
  return new Set(c);
1247
- }, we = (e) => Ce(o[e].filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), p, D, f) === 1, Te = (e) => {
1249
+ }, we = (e) => Y(o[e].filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), p, D, f) === 1, Te = (e) => {
1248
1250
  let t = w;
1249
1251
  for (; t > 0 && A(e, t);) t--;
1250
1252
  return t;
1251
1253
  }, Ee = /* @__PURE__ */ new Map();
1252
1254
  for (let e of a) {
1253
- let n = t.pick.mode === "all" || t.pick.mode === "auto" && we(e) ? null : Se(e);
1255
+ let n = t.pick.mode === "all" || t.pick.mode === "auto" && we(e) ? null : Ce(e);
1254
1256
  Ee.set(e, n), n && o[e].forEach((e, t) => {
1255
1257
  e.dataset.place !== "none" && !n.has(t) && e.setAttribute("data-left-out", "");
1256
1258
  });
@@ -1371,15 +1373,15 @@ var Je = (e) => {
1371
1373
  y2: Ae
1372
1374
  }));
1373
1375
  }
1374
- }), tt = et(!1), nt = et(!0), rt = /* @__PURE__ */ new Set(), it = (t, n) => {
1376
+ }), nt = tt(!1), rt = tt(!0), it = /* @__PURE__ */ new Set(), at = (t, n) => {
1375
1377
  if (Math.abs(t - n) <= Math.abs(n) / 100) return;
1376
1378
  let r = `[${e}] A total reads ${t}, but the steps before it add up to ${Number(n.toFixed(6))}. The chart shows your number.`;
1377
- rt.has(r) || (rt.add(r), console.warn(r));
1378
- }, at = {
1379
+ it.has(r) || (it.add(r), console.warn(r));
1380
+ }, ot = {
1379
1381
  segments: (e) => {
1380
1382
  let t = 0, n = !1;
1381
1383
  return e.map((e) => {
1382
- if (e.isTotal) return n && it(e.value, t), n = !1, t = e.value, {
1384
+ if (e.isTotal) return n && at(e.value, t), n = !1, t = e.value, {
1383
1385
  ...e,
1384
1386
  from: 0,
1385
1387
  to: e.value,
@@ -1458,7 +1460,7 @@ var Je = (e) => {
1458
1460
  let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
1459
1461
  return o > 50 ? console.warn(`[${e}] ${t} took ${o.toFixed(1)} ms for ${s} rows, more than 50 ms.`, n) : Q.log(`${t} took ${o.toFixed(1)} ms for ${s} rows.`, n), a;
1460
1462
  }
1461
- }, ot = (e) => {
1463
+ }, st = (e) => {
1462
1464
  let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
1463
1465
  return {
1464
1466
  raw: t,
@@ -1468,14 +1470,14 @@ var Je = (e) => {
1468
1470
  missing: !n,
1469
1471
  value: n ? Number.parseFloat(n[2].replace(",", ".")) : 0
1470
1472
  };
1471
- }, st = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).flatMap((e, t) => e.hasAttribute("data-note") ? [t] : []), ct = (e, t) => {
1472
- let n = st(e), r = e.querySelectorAll("tbody tr")[t]?.querySelectorAll("td") ?? [];
1473
+ }, ct = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).flatMap((e, t) => e.hasAttribute("data-note") ? [t] : []), lt = (e, t) => {
1474
+ let n = ct(e), r = e.querySelectorAll("tbody tr")[t]?.querySelectorAll("td") ?? [];
1473
1475
  return n.map((e) => r[e]).find((e) => e?.textContent?.trim()) ?? null;
1474
- }, lt = (e, t = "data-i18n") => {
1475
- let n = st(e);
1476
+ }, ut = (e, t = "data-i18n") => {
1477
+ let n = ct(e);
1476
1478
  return Array.from(e.querySelectorAll("tbody tr")).map((e, r) => {
1477
- let i = e.querySelector("th"), a = Array.from(e.querySelectorAll("td")), o = a.filter((e, t) => !n.includes(t)).map(ot);
1478
- o.length || o.push(ot(null));
1479
+ let i = e.querySelector("th"), a = Array.from(e.querySelectorAll("td")), o = a.filter((e, t) => !n.includes(t)).map(st);
1480
+ o.length || o.push(st(null));
1479
1481
  let s = n.map((e) => a[e]).find((e) => e?.textContent?.trim());
1480
1482
  return {
1481
1483
  ...o[0],
@@ -1491,8 +1493,8 @@ var Je = (e) => {
1491
1493
  slot: r
1492
1494
  };
1493
1495
  });
1494
- }, ut = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).filter((e) => !e.hasAttribute("data-note")), dt = (e) => e === "dashed" || e === "dotted" ? e : null, ft = (e, t, n = "data-i18n") => {
1495
- let r = ut(e), i = Math.max(1, W(t.map((e) => e.cells.length)));
1496
+ }, dt = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).filter((e) => !e.hasAttribute("data-note")), ft = (e) => e === "dashed" || e === "dotted" ? e : null, pt = (e, t, n = "data-i18n") => {
1497
+ let r = dt(e), i = Math.max(1, W(t.map((e) => e.cells.length)));
1496
1498
  return Array.from({ length: i }, (e, t) => {
1497
1499
  let i = r[t];
1498
1500
  return {
@@ -1500,12 +1502,12 @@ var Je = (e) => {
1500
1502
  key: n && i?.getAttribute(n) || null,
1501
1503
  focus: i?.getAttribute("data-kind") === "focus",
1502
1504
  marker: i?.getAttribute("data-marker") ?? null,
1503
- line: dt(i?.getAttribute("data-line")),
1505
+ line: ft(i?.getAttribute("data-line")),
1504
1506
  group: !!i?.hasAttribute("data-group"),
1505
1507
  chart: i?.getAttribute("data-chart") === "line" ? "line" : null
1506
1508
  };
1507
1509
  });
1508
- }, pt = (t, n) => {
1510
+ }, mt = (t, n) => {
1509
1511
  if (!n) return;
1510
1512
  let r = /* @__PURE__ */ new Map();
1511
1513
  for (let i of t) {
@@ -1518,7 +1520,7 @@ var Je = (e) => {
1518
1520
  i.querySelectorAll("tbody th").forEach((e, r) => {
1519
1521
  e.getAttribute(n) || e.setAttribute(n, `${t}-row${r + 1}`);
1520
1522
  });
1521
- let a = ut(i);
1523
+ let a = dt(i);
1522
1524
  a.length > 1 && a.forEach((e, r) => {
1523
1525
  e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
1524
1526
  }), a.forEach((e, r) => {
@@ -1529,7 +1531,7 @@ var Je = (e) => {
1529
1531
  a.includes(r) || a.push(r), e.getAttribute(n) || e.setAttribute(n, `${t}-group${a.indexOf(r) + 1}`);
1530
1532
  });
1531
1533
  });
1532
- let o = st(i);
1534
+ let o = ct(i);
1533
1535
  i.querySelectorAll("tbody tr").forEach((e, r) => {
1534
1536
  let i = e.querySelectorAll("td");
1535
1537
  for (let e of o) {
@@ -1538,23 +1540,23 @@ var Je = (e) => {
1538
1540
  }
1539
1541
  }), Q?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
1540
1542
  }
1541
- }, mt = (e) => Number(e.toPrecision(12)), ht = (e, t) => {
1543
+ }, ht = (e) => Number(e.toPrecision(12)), gt = (e, t) => {
1542
1544
  let n = e / Math.max(1, t) || 1, r = 10 ** Math.floor(Math.log10(n)), i = n / r;
1543
- return mt((i < 1.42 ? 1 : i < 3.17 ? 2 : i < 7.08 ? 5 : 10) * r);
1544
- }, gt = (e, t, n) => {
1545
+ return ht((i < 1.42 ? 1 : i < 3.17 ? 2 : i < 7.08 ? 5 : 10) * r);
1546
+ }, _t = (e, t, n) => {
1545
1547
  let r = [];
1546
- for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(mt(i * n));
1548
+ for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(ht(i * n));
1547
1549
  return r;
1548
- }, _t = (e, t = e) => {
1550
+ }, vt = (e, t = e) => {
1549
1551
  do {
1550
1552
  let t = Math.round(e / 10 ** Math.floor(Math.log10(e) + 1e-9));
1551
- e = mt(e * (t === 2 ? 2.5 : 2));
1553
+ e = ht(e * (t === 2 ? 2.5 : 2));
1552
1554
  } while (Math.abs(e / t - Math.round(e / t)) > 1e-9);
1553
1555
  return e;
1554
- }, vt = (e) => {
1556
+ }, yt = (e) => {
1555
1557
  let t = (e ?? "").trim().split(/\s+/).map(Number.parseFloat);
1556
1558
  return t.length > 1 && t.every(Number.isFinite) ? t.sort((e, t) => e - t) : null;
1557
- }, yt = (e, t, n) => {
1559
+ }, bt = (e, t, n) => {
1558
1560
  if (n && n.length > 2) return {
1559
1561
  min: n[0],
1560
1562
  max: n[n.length - 1],
@@ -1566,27 +1568,89 @@ var Je = (e) => {
1566
1568
  let e = (i - r || Math.abs(i) || 1) * .05;
1567
1569
  r -= e, i += e;
1568
1570
  }
1569
- let a = ht(i - r, t);
1571
+ let a = gt(i - r, t);
1570
1572
  return {
1571
1573
  min: r,
1572
1574
  max: i,
1573
1575
  step: a,
1574
- ticks: gt(r, i, a)
1576
+ ticks: _t(r, i, a)
1575
1577
  };
1576
- }, bt = (e, t) => {
1578
+ }, xt = (e, t) => {
1577
1579
  let { step: n, ticks: r } = e;
1578
- for (; n && r.length > 2 && !t(r);) n = _t(n, e.step), r = gt(e.min, e.max, n);
1580
+ for (; n && r.length > 2 && !t(r);) n = vt(n, e.step), r = _t(e.min, e.max, n);
1579
1581
  return {
1580
1582
  ...e,
1581
1583
  step: n,
1582
1584
  ticks: r
1583
1585
  };
1584
- }, xt = [
1586
+ }, St = null, Ct = (e) => {
1587
+ if (St ?? (St = document.createElement("canvas").getContext("2d", { willReadFrequently: !0 })), !St) return [
1588
+ 0,
1589
+ 0,
1590
+ 0,
1591
+ 1
1592
+ ];
1593
+ St.clearRect(0, 0, 1, 1), St.fillStyle = e, St.fillRect(0, 0, 1, 1);
1594
+ let [t, n, r, i] = St.getImageData(0, 0, 1, 1).data;
1595
+ return [
1596
+ t,
1597
+ n,
1598
+ r,
1599
+ i / 255
1600
+ ];
1601
+ }, wt = ([e, t, n]) => {
1602
+ let r = (e) => {
1603
+ let t = e / 255;
1604
+ return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
1605
+ };
1606
+ return .2126 * r(e) + .7152 * r(t) + .0722 * r(n);
1607
+ }, Tt = (e, t) => {
1608
+ let [n, r] = [wt(e), wt(t)].sort((e, t) => t - e);
1609
+ return (n + .05) / (r + .05);
1610
+ }, Et = (e) => {
1611
+ let t = document.createElement("span");
1612
+ t.style.color = "var(--tablechart-surface, Canvas)", e.append(t);
1613
+ let n = Ct(getComputedStyle(t).color);
1614
+ return t.remove(), n;
1615
+ }, Dt = (e, t) => e.querySelector(`:is(.tablechart-bar, .tablechart-piece)[data-row="${t.dataset.row}"]${t.dataset.series ? `[data-series="${t.dataset.series}"]` : ""}`), Ot = (e) => {
1616
+ let t = e.querySelectorAll(".tablechart-value[data-place='inside']");
1617
+ if (!t.length) return;
1618
+ let n = Et(e);
1619
+ for (let r of t) {
1620
+ let t = Dt(e, r);
1621
+ if (!t || r.hasAttribute("data-left-out")) continue;
1622
+ let i = Ct(getComputedStyle(t).fill), a = wt(n) > wt(i), o = a ? [
1623
+ 255,
1624
+ 255,
1625
+ 255
1626
+ ] : [
1627
+ 0,
1628
+ 0,
1629
+ 0
1630
+ ], s = a ? [
1631
+ 0,
1632
+ 0,
1633
+ 0
1634
+ ] : [
1635
+ 255,
1636
+ 255,
1637
+ 255
1638
+ ];
1639
+ for (let e = 0; e <= 20; e++) {
1640
+ let t = n.slice(0, 3).map((t, n) => Math.round(t + (o[n] - t) * e / 20));
1641
+ if (Tt(t, i) >= 4.5) {
1642
+ s = t;
1643
+ break;
1644
+ }
1645
+ }
1646
+ r.style.setProperty("--_ink", `rgb(${s.join(" ")})`);
1647
+ }
1648
+ }, kt = [
1585
1649
  "axis-break",
1586
1650
  "trend",
1587
1651
  "bracket"
1588
- ], St = (e, t = !1) => {
1589
- 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) => xt.includes(e.getAttribute("data-annotation") ?? "")), o = (e) => e.hasAttribute("data-fragment"), s = r.map((e) => Array.from(e.querySelectorAll(":scope > td")));
1652
+ ], At = (e, t = !1) => {
1653
+ 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) => kt.includes(e.getAttribute("data-annotation") ?? "")), o = (e) => e.hasAttribute("data-fragment"), s = r.map((e) => Array.from(e.querySelectorAll(":scope > td")));
1590
1654
  if (!n && !r.some(o) && !i.some(o) && !s.flat().some(o) && !a.some(o) || t && !n) return null;
1591
1655
  let c = [], l = /* @__PURE__ */ new Map(), u = [], d = (e) => {
1592
1656
  let t = e === null ? void 0 : l.get(e);
@@ -1648,7 +1712,7 @@ var Je = (e) => {
1648
1712
  count: c.length,
1649
1713
  indexes: c
1650
1714
  };
1651
- }, Ct = (e) => {
1715
+ }, jt = (e) => {
1652
1716
  let t = e.plan;
1653
1717
  if (!t) return;
1654
1718
  let n = (t) => t === null || e.step - t >= 1;
@@ -1659,7 +1723,7 @@ var Je = (e) => {
1659
1723
  let u = r.hasAttribute("data-flat") ? (l - e + 1) / (i - e + 1) : i > e ? Math.max(0, l - e) / (i - e) : 0;
1660
1724
  r.style.setProperty("--reveal", String(u));
1661
1725
  }
1662
- }, wt = (e) => {
1726
+ }, Mt = (e) => {
1663
1727
  let t = e.plan;
1664
1728
  if (!t) return;
1665
1729
  let n = t.rows.length - 1, i = (e) => t.series.map((n, r) => t.cells[e]?.[r]?.step ?? n.step ?? t.rows[e]?.step ?? null), a = (e) => {
@@ -1737,12 +1801,12 @@ var Je = (e) => {
1737
1801
  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));
1738
1802
  }
1739
1803
  }
1740
- Ct(e);
1741
- }, Tt = (e, t, n = !1) => {
1804
+ jt(e);
1805
+ }, Nt = (e, t, n = !1) => {
1742
1806
  let r = e.plan;
1743
1807
  if (!r) return;
1744
1808
  let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
1745
- e.step = i, e.figure.style.setProperty("--_step", String(i)), Ct(e);
1809
+ e.step = i, e.figure.style.setProperty("--_step", String(i)), jt(e);
1746
1810
  let [o, s] = e.controls?.querySelectorAll("button") ?? [];
1747
1811
  o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
1748
1812
  bubbles: !0,
@@ -1751,7 +1815,7 @@ var Je = (e) => {
1751
1815
  steps: r.count
1752
1816
  }
1753
1817
  }));
1754
- }, Et = (e, t, n) => {
1818
+ }, Pt = (e, t, n) => {
1755
1819
  let r = document.createElement("div");
1756
1820
  r.className = "tablechart-controls";
1757
1821
  let i = (r) => {
@@ -1780,14 +1844,14 @@ var Je = (e) => {
1780
1844
  ]), i;
1781
1845
  };
1782
1846
  return r.append(i("previous"), i("next")), r;
1783
- }, Dt = (e, t, n, r = {
1847
+ }, Ft = (e, t, n, r = {
1784
1848
  x: 0,
1785
1849
  y: 0,
1786
1850
  scale: 1
1787
1851
  }, i = 2, a = 8, o = 12) => {
1788
1852
  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));
1789
1853
  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`;
1790
- }, Ot = "tablechart-tooltip", kt = [
1854
+ }, It = "tablechart-tooltip", Lt = [
1791
1855
  "--tablechart-surface",
1792
1856
  "--tablechart-tooltip-surface",
1793
1857
  "--tablechart-tooltip-color",
@@ -1795,51 +1859,51 @@ var Je = (e) => {
1795
1859
  "--tablechart-tooltip-radius",
1796
1860
  "--tablechart-tooltip-padding",
1797
1861
  "--tablechart-tooltip-shadow"
1798
- ], $ = null, At, jt, Mt = null, Nt = null, Pt = 0, Ft = () => {
1799
- clearTimeout(Pt), $ && Mt && ($.hidden = !0, Mt = null, Nt = null);
1800
- }, It = !1, Lt = !0, Rt = NaN, zt = NaN, Bt = !1, Vt = () => {
1801
- if (Bt) return;
1802
- Bt = !0, document.addEventListener("pointermove", (e) => {
1803
- e.pointerType === "mouse" && (Lt = e.screenX !== Rt || e.screenY !== zt, Rt = e.screenX, zt = e.screenY, Lt && (It = !1));
1862
+ ], $ = null, Rt, zt, Bt = null, Vt = null, Ht = 0, Ut = () => {
1863
+ clearTimeout(Ht), $ && Bt && ($.hidden = !0, Bt = null, Vt = null);
1864
+ }, Wt = !1, Gt = !0, Kt = NaN, qt = NaN, Jt = !1, Yt = () => {
1865
+ if (Jt) return;
1866
+ Jt = !0, document.addEventListener("pointermove", (e) => {
1867
+ e.pointerType === "mouse" && (Gt = e.screenX !== Kt || e.screenY !== qt, Kt = e.screenX, qt = e.screenY, Gt && (Wt = !1));
1804
1868
  }, {
1805
1869
  capture: !0,
1806
1870
  passive: !0
1807
1871
  });
1808
1872
  let e = () => {
1809
- It = !0, Ft();
1873
+ Wt = !0, Ut();
1810
1874
  };
1811
1875
  document.addEventListener("keydown", e, !0), window.addEventListener("scroll", e, {
1812
1876
  capture: !0,
1813
1877
  passive: !0
1814
1878
  });
1815
- }, Ht = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, Ut = (e) => {
1879
+ }, Xt = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, Zt = (e) => {
1816
1880
  let t = e.tooltipparent;
1817
1881
  return (typeof t == "string" ? document.querySelector(t) : t) ?? document.body;
1818
- }, Wt = () => {
1819
- clearTimeout(Pt), Pt = window.setTimeout(Ft, 120);
1820
- }, Gt = () => {
1882
+ }, Qt = () => {
1883
+ clearTimeout(Ht), Ht = window.setTimeout(Ut, 120);
1884
+ }, $t = () => {
1821
1885
  let e = document.createElement("div");
1822
- return e.className = Ot, e.setAttribute("aria-hidden", "true"), e.hidden = !0, At = document.createElement("div"), jt = document.createElement("div"), jt.className = `${Ot}-arrow`, e.append(At, jt), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout(Pt)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && Wt()), document.addEventListener("pointerdown", (t) => {
1886
+ return e.className = It, e.setAttribute("aria-hidden", "true"), e.hidden = !0, Rt = document.createElement("div"), zt = document.createElement("div"), zt.className = `${It}-arrow`, e.append(Rt, zt), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout(Ht)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && Qt()), document.addEventListener("pointerdown", (t) => {
1823
1887
  let n = t.target;
1824
- Mt && !Mt.plot.contains(n) && !e.contains(n) && Ft();
1825
- }), window.addEventListener("resize", Ft), e;
1826
- }, Kt = (e, t) => {
1888
+ Bt && !Bt.plot.contains(n) && !e.contains(n) && Ut();
1889
+ }), window.addEventListener("resize", Ut), e;
1890
+ }, en = (e, t) => {
1827
1891
  let n = t ? t.style.getPropertyValue("--step") : "x";
1828
1892
  return n === "" || Number(n) < e.step;
1829
- }, qt = (e, t) => {
1893
+ }, tn = (e, t) => {
1830
1894
  let n = e.svg.querySelector(`[data-series="${t + 1}"]:not(.tablechart-hole)`);
1831
1895
  if (!n) return;
1832
1896
  let r = getComputedStyle(n);
1833
1897
  return r.fill && r.fill !== "none" ? r.fill : r.stroke;
1834
- }, Jt = (e, t, n) => {
1898
+ }, nn = (e, t, n) => {
1835
1899
  let r = e.series.length > 1, i = [];
1836
1900
  for (let [n, a] of e.seriesValues.entries()) {
1837
- if (!Kt(e, a[t])) continue;
1901
+ if (!en(e, a[t])) continue;
1838
1902
  let o = r ? e.figure.querySelector(`.tablechart-name[data-series="${n + 1}"]`) : null;
1839
1903
  i.push({
1840
1904
  name: r ? o?.textContent ?? e.series[n].name : "",
1841
1905
  value: a[t].textContent ?? "",
1842
- colour: r ? qt(e, n) : void 0,
1906
+ colour: r ? tn(e, n) : void 0,
1843
1907
  sample: o ? {
1844
1908
  marker: o.dataset.marker ?? null,
1845
1909
  open: o.hasAttribute("data-open"),
@@ -1849,11 +1913,11 @@ var Je = (e) => {
1849
1913
  });
1850
1914
  }
1851
1915
  let a = e.totals[t];
1852
- return i.length > 1 && Kt(e, a) && i.push({
1916
+ return i.length > 1 && en(e, a) && i.push({
1853
1917
  name: n.totallabel,
1854
1918
  value: a.textContent ?? ""
1855
1919
  }), i;
1856
- }, Yt = (e, t) => {
1920
+ }, rn = (e, t) => {
1857
1921
  if (e.type.centre && e.values[t]) return e.values[t].getBoundingClientRect();
1858
1922
  let n = e.pointOf?.(t);
1859
1923
  if (n) {
@@ -1873,49 +1937,49 @@ var Je = (e) => {
1873
1937
  100
1874
1938
  ];
1875
1939
  return new DOMRect(a.left + a.width * o / 100, a.top + a.height * s / 100, a.width * c / 100, a.height * l / 100);
1876
- }, Xt = (e, t, n) => {
1877
- if (clearTimeout(Pt), Mt === e && Nt === t) return;
1878
- let r = (e.type.tooltip ?? Jt)(e, t, n);
1879
- if (!r.length) return Ft();
1880
- Mt && Mt !== e && Ft(), $ ?? ($ = Gt());
1940
+ }, an = (e, t, n) => {
1941
+ if (clearTimeout(Ht), Bt === e && Vt === t) return;
1942
+ let r = (e.type.tooltip ?? nn)(e, t, n);
1943
+ if (!r.length) return Ut();
1944
+ Bt && Bt !== e && Ut(), $ ?? ($ = $t());
1881
1945
  let i = (e, t, n, r = !1, i) => {
1882
1946
  let a = document.createElement("div");
1883
- if (a.className = `${Ot}-line`, n) {
1947
+ if (a.className = `${It}-line`, n) {
1884
1948
  let e = document.createElement("span");
1885
- e.className = `${Ot}-key`, e.style.background = n, i?.box ? e.dataset.sample = "box" : i && (e.dataset.sample = "line", i.marker && (e.dataset.marker = i.marker), i.line && (e.dataset.line = i.line), e.toggleAttribute("data-open", i.open)), a.append(e);
1949
+ e.className = `${It}-key`, e.style.background = n, i?.box ? e.dataset.sample = "box" : i && (e.dataset.sample = "line", i.marker && (e.dataset.marker = i.marker), i.line && (e.dataset.line = i.line), e.toggleAttribute("data-open", i.open)), a.append(e);
1886
1950
  }
1887
1951
  let o = document.createElement("span");
1888
- if (o.className = `${Ot}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
1952
+ if (o.className = `${It}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
1889
1953
  e && o.append(":");
1890
1954
  let n = document.createElement("span");
1891
- n.className = `${Ot}-value`, n.textContent = t, a.append(n);
1955
+ n.className = `${It}-value`, n.textContent = t, a.append(n);
1892
1956
  }
1893
1957
  return a;
1894
- }, 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 = ct(e.figure, t)?.textContent?.trim(), l = c ? [Object.assign(document.createElement("div"), {
1895
- className: `${Ot}-note`,
1958
+ }, 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 = lt(e.figure, t)?.textContent?.trim(), l = c ? [Object.assign(document.createElement("div"), {
1959
+ className: `${It}-note`,
1896
1960
  textContent: c
1897
1961
  })] : [];
1898
- At.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);
1962
+ Rt.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);
1899
1963
  let u = getComputedStyle(e.figure);
1900
- for (let e of kt) {
1964
+ for (let e of Lt) {
1901
1965
  let t = u.getPropertyValue(e).trim();
1902
1966
  t ? $.style.setProperty(e, t) : $.style.removeProperty(e);
1903
1967
  }
1904
1968
  $.style.setProperty("--_color", u.color), $.style.colorScheme = u.colorScheme, $.style.fontFamily = u.fontFamily;
1905
- let d = Ut(n);
1906
- $.parentElement !== d && d.append($), Mt = e, Nt = t, $.hidden = !1, $.style.left = "0px", $.style.top = "0px";
1969
+ let d = Zt(n);
1970
+ $.parentElement !== d && d.append($), Bt = e, Vt = t, $.hidden = !1, $.style.left = "0px", $.style.top = "0px";
1907
1971
  let f = $.getBoundingClientRect(), p = {
1908
1972
  x: f.left,
1909
1973
  y: f.top,
1910
- scale: Ht($, f.width)
1911
- }, m = Ht(e.plot, e.plot.getBoundingClientRect().width);
1912
- $.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`, Dt($, jt, Yt(e, t), p);
1913
- }, Zt = (e, t, n = !1) => {
1974
+ scale: Xt($, f.width)
1975
+ }, m = Xt(e.plot, e.plot.getBoundingClientRect().width);
1976
+ $.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`, Ft($, zt, rn(e, t), p);
1977
+ }, on = (e, t, n = !1) => {
1914
1978
  let { plot: r } = e;
1915
- r.setAttribute("data-hover", ""), Vt();
1979
+ r.setAttribute("data-hover", ""), Yt();
1916
1980
  let i = (t) => {
1917
1981
  if (e.rowAt) {
1918
- let n = r.getBoundingClientRect(), i = Ht(r, n.width);
1982
+ let n = r.getBoundingClientRect(), i = Xt(r, n.width);
1919
1983
  return e.rowAt((t.clientX - n.left) / i, (t.clientY - n.top) / i);
1920
1984
  }
1921
1985
  let n = t.target.closest?.("[data-row]")?.getAttribute("data-row");
@@ -1925,13 +1989,13 @@ var Je = (e) => {
1925
1989
  else if (t.getAttribute("data-row") === String(e + 1)) return !0;
1926
1990
  return !1;
1927
1991
  }, s = null, c = (a) => {
1928
- if (a.type === "pointerdown") It = !1;
1929
- else if (a.pointerType === "mouse" && (!Lt || It)) return;
1992
+ if (a.type === "pointerdown") Wt = !1;
1993
+ else if (a.pointerType === "mouse" && (!Gt || Wt)) return;
1930
1994
  if (!r.classList.contains("is-placed") || !e.figure.classList.contains("is-shown")) return;
1931
- if (n && !e.figure.hasAttribute("data-left-out")) return Mt === e ? Ft() : void 0;
1995
+ if (n && !e.figure.hasAttribute("data-left-out")) return Bt === e ? Ut() : void 0;
1932
1996
  let c = i(a);
1933
- if (s = c, c === null || o(c)) return Mt === e ? Ft() : void 0;
1934
- Xt(e, c, t);
1997
+ if (s = c, c === null || o(c)) return Bt === e ? Ut() : void 0;
1998
+ an(e, c, t);
1935
1999
  }, l = (t) => {
1936
2000
  let n = t.target;
1937
2001
  return e.svg.contains(n) && n.hasAttribute("data-row") ? n : null;
@@ -1945,37 +2009,37 @@ var Je = (e) => {
1945
2009
  if (!r) return;
1946
2010
  a.delete(r);
1947
2011
  let i = Number(r.getAttribute("data-row")) - 1;
1948
- s === i && !o(i) && !It && Xt(e, i, t);
2012
+ s === i && !o(i) && !Wt && an(e, i, t);
1949
2013
  };
1950
2014
  e.svg.addEventListener("transitionend", u), e.svg.addEventListener("transitioncancel", u), r.addEventListener("pointermove", c), r.addEventListener("pointerdown", c), r.addEventListener("pointerleave", (t) => {
1951
- t.pointerType === "mouse" && (s = null, Mt === e && Wt());
2015
+ t.pointerType === "mouse" && (s = null, Bt === e && Qt());
1952
2016
  });
1953
- }, Qt = (e) => {
1954
- Mt === e && Ft();
1955
- }, $t = {
1956
- area: nt,
1957
- bar: Le,
1958
- column: Re,
1959
- donut: Ve,
1960
- line: tt,
1961
- waterfall: at
1962
- }, en = (e, t) => {
1963
- $t[e] = t, Object.assign(tn, t.annotations), nn.splice(0, Infinity, ...Object.keys(tn));
1964
- }, tn = {
2017
+ }, sn = (e) => {
2018
+ Bt === e && Ut();
2019
+ }, cn = {
2020
+ area: rt,
2021
+ bar: Re,
2022
+ column: ze,
2023
+ donut: He,
2024
+ line: nt,
2025
+ waterfall: ot
2026
+ }, ln = (e, t) => {
2027
+ cn[e] = t, Object.assign(un, t.annotations), dn.splice(0, Infinity, ...Object.keys(un));
2028
+ }, un = {
1965
2029
  "axis-break": ne,
1966
2030
  trend: Oe,
1967
2031
  bracket: ce,
1968
2032
  reference: Ee,
1969
2033
  note: we
1970
- }, nn = Object.keys(tn), rn = (e) => {
2034
+ }, dn = Object.keys(un), fn = (e) => {
1971
2035
  let t = "";
1972
2036
  for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
1973
2037
  return t.trim();
1974
- }, an = [
2038
+ }, pn = [
1975
2039
  "straight",
1976
2040
  "step",
1977
2041
  "smooth"
1978
- ], on = (e, t, n, r, i) => {
2042
+ ], mn = (e, t, n, r, i) => {
1979
2043
  let a = t === r, [o, s, c] = a ? [
1980
2044
  Math.min(e, n),
1981
2045
  Math.max(e, n),
@@ -1987,16 +2051,16 @@ var Je = (e) => {
1987
2051
  ], 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;
1988
2052
  for (let [e, t] of l) e > d && u.push([d, Math.min(e, s)]), d = Math.max(d, t);
1989
2053
  return d < s && u.push([d, s]), u.map(([e, t]) => a ? `M${N(e)},${N(c)}H${N(t)}` : `M${N(c)},${N(e)}V${N(t)}`).join("");
1990
- }, sn = (e, t) => {
2054
+ }, hn = (e, t) => {
1991
2055
  let [n, r, i, a] = [
1992
2056
  "x1",
1993
2057
  "y1",
1994
2058
  "x2",
1995
2059
  "y2"
1996
- ].map((t) => Number(e.getAttribute(t))), o = P("path", { d: on(n, r, i, a, t) });
2060
+ ].map((t) => Number(e.getAttribute(t))), o = P("path", { d: mn(n, r, i, a, t) });
1997
2061
  for (let { name: t, value: n } of Array.from(e.attributes)) /^[xy][12]$/.test(t) || o.setAttribute(t, n);
1998
2062
  e.replaceWith(o);
1999
- }, cn = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
2063
+ }, gn = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
2000
2064
  +e,
2001
2065
  +t,
2002
2066
  +r,
@@ -2006,19 +2070,19 @@ var Je = (e) => {
2006
2070
  +t,
2007
2071
  +e,
2008
2072
  +r
2009
- ]), ln = (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${N(Math.max(e, t))},${N(a)}H${N(Math.min(o, t + r))}` : "" : t <= e && e <= t + r && Math.max(a, n) < Math.min(s, n + i) ? `M${N(e)},${N(Math.max(a, n))}V${N(Math.min(s, n + i))}` : "").join(""), un = (e, t, n) => {
2073
+ ]), _n = (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${N(Math.max(e, t))},${N(a)}H${N(Math.min(o, t + r))}` : "" : t <= e && e <= t + r && Math.max(a, n) < Math.min(s, n + i) ? `M${N(e)},${N(Math.max(a, n))}V${N(Math.min(s, n + i))}` : "").join(""), vn = (e, t, n) => {
2010
2074
  let r = e.getAttribute(t);
2011
2075
  return r === null ? n : r !== "false";
2012
- }, dn = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", fn = (e, t) => {
2076
+ }, yn = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", bn = (e, t) => {
2013
2077
  let n = e.dataset.chartShape;
2014
- return n && an.includes(n) ? n : an.includes(t.shape) ? t.shape : "straight";
2015
- }, pn = (e) => {
2078
+ return n && pn.includes(n) ? n : pn.includes(t.shape) ? t.shape : "straight";
2079
+ }, xn = (e) => {
2016
2080
  for (let t of e.querySelectorAll("br")) {
2017
- if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(rn(t))) continue;
2081
+ if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(fn(t))) continue;
2018
2082
  let e = document.createElement("span");
2019
2083
  e.className = y, e.textContent = ". ", t.before(e);
2020
2084
  }
2021
- }, mn = (e, t, n) => {
2085
+ }, Sn = (e, t, n) => {
2022
2086
  let r = e.querySelector("table");
2023
2087
  if (!r) return null;
2024
2088
  let i = r.querySelector("tfoot [data-chart-total]");
@@ -2029,23 +2093,23 @@ var Je = (e) => {
2029
2093
  s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
2030
2094
  let c = a.insertCell();
2031
2095
  return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
2032
- }, hn = 0, gn = (e) => {
2096
+ }, Cn = 0, wn = (e) => {
2033
2097
  let t = e.querySelector(":scope > figcaption");
2034
2098
  if (!t) return;
2035
- pn(t);
2099
+ xn(t);
2036
2100
  let n = (e) => e.hasAttribute("aria-label") || e.hasAttribute("aria-labelledby"), r = (e) => {
2037
- t.id || (t.id = `tablechart-caption-${++hn}`), e.setAttribute("aria-labelledby", t.id);
2101
+ t.id || (t.id = `tablechart-caption-${++Cn}`), e.setAttribute("aria-labelledby", t.id);
2038
2102
  };
2039
2103
  e.tagName === "FIGURE" && !n(e) && r(e);
2040
2104
  let i = e.querySelector("table");
2041
2105
  i && !n(i) && !i.querySelector(":scope > caption") && r(i);
2042
- }, _n = (r, i, a = null) => {
2043
- let o = a ?? (r.getAttribute("data-chart") || "column"), s = $t[o];
2044
- if (!s) return console.warn(`[${e}] Unknown chart type "${o}". Known types: ${Object.keys($t).join(", ")}.`), r.setAttribute("data-chart-empty", ""), null;
2045
- let c = lt(r, i.langattribute);
2106
+ }, Tn = (r, i, a = null) => {
2107
+ let o = a ?? (r.getAttribute("data-chart") || "column"), s = cn[o];
2108
+ if (!s) return console.warn(`[${e}] Unknown chart type "${o}". Known types: ${Object.keys(cn).join(", ")}.`), r.setAttribute("data-chart-empty", ""), null;
2109
+ let c = ut(r, i.langattribute);
2046
2110
  if (!c.length) return console.warn(r.querySelector("table") ? `[${e}] A chart has no rows in its table, so there is nothing to draw.` : `[${e}] A chart has no table, so there is nothing to draw.`, r), r.setAttribute("data-chart-empty", ""), null;
2047
- gn(r);
2048
- let l = ft(r, c, i.langattribute);
2111
+ wn(r);
2112
+ let l = pt(r, c, i.langattribute);
2049
2113
  if (l.length > 1 && !s.series && !s.columns && (console.warn(`[${e}] A ${o} chart uses only the first of its ${l.length} value columns.`), l = l.slice(0, 1)), l.some((e) => e.chart)) {
2050
2114
  let t = s.lines ? l.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 ${o} chart cannot draw a series as a line.`;
2051
2115
  t && (console.warn(`[${e}] ${t}`), l = l.map((e) => ({
@@ -2082,7 +2146,7 @@ var Je = (e) => {
2082
2146
  let n = I(f, N ?? _);
2083
2147
  N && (n.dataset.place = "legend");
2084
2148
  let a = e.chart ? void 0 : s.legend ?? s.swatch;
2085
- if (a && (n.dataset.swatch = a), n.textContent = e.name, !a && fn(r, i) !== "step") {
2149
+ if (a && (n.dataset.swatch = a), n.textContent = e.name, !a && bn(r, i) !== "step") {
2086
2150
  let r = e.chart ? X(F, F.indexOf(e)) : X(l, t);
2087
2151
  n.dataset.marker = r.shape, n.toggleAttribute("data-open", r.open);
2088
2152
  }
@@ -2092,22 +2156,22 @@ var Je = (e) => {
2092
2156
  let e = c.find((e) => e.isTotal), t = e ? e.value : c.reduce((e, t) => e + Math.abs(t.value), 0);
2093
2157
  R.dataset.value = String(t), e && (R.dataset.decimals = String(re(e.number)));
2094
2158
  }
2095
- let z = R && !c.some((e) => e.isTotal) ? mn(r, R, i) : null, B = s.categories === "beside", V = document.createElement("div");
2159
+ let z = R && !c.some((e) => e.isTotal) ? Sn(r, R, i) : null, B = s.categories === "beside", V = document.createElement("div");
2096
2160
  V.className = "tablechart-categories", V.setAttribute("aria-hidden", "true"), V.inert = !0, B ? V.dataset.place = "beside" : s.centre && (V.dataset.place = "key"), V.style.setProperty("--_columns", String(c.length));
2097
2161
  let H = 0;
2098
2162
  for (let [e, t] of c.entries()) {
2099
2163
  let n = document.createElement("span");
2100
2164
  n.classList.add(...t.classes), n.textContent = t.short ?? t.label, t.key && i.langattribute && n.setAttribute(i.langattribute, t.short ? `${t.key}-short` : t.key), s.centre && (n.dataset.kind = t.isTotal ? "total" : "slice", t.isTotal || (n.dataset.slice = String(H + 1), n.style.setProperty("--n", String(H)), n.style.setProperty("--palette", `var(--tablechart-color-${H + 1})`), H += 1)), n.style.setProperty("--i", String(t.slot)), n.dataset.row = String(e + 1), V.appendChild(n);
2101
2165
  }
2102
- B ? _.appendChild(V) : b(V), N && b(N);
2103
- let U = l.filter((e) => !e.group), ee = !s.axes && !s.centre && un(r, "data-chart-axis", i.axis), te = s.axes ? {
2166
+ s.centre && r.style.setProperty("--_slice-count", String(H)), B ? _.appendChild(V) : b(V), N && b(N);
2167
+ let U = l.filter((e) => !e.group), ee = !s.axes && !s.centre && vn(r, "data-chart-axis", i.axis), te = s.axes ? {
2104
2168
  titles: U.slice(0, 2).map((e, t) => {
2105
2169
  let n = I(`${w}-title`, _);
2106
2170
  return n.dataset.axis = t ? "y" : "x", n.textContent = e.name, e.key && i.langattribute && n.setAttribute(i.langattribute, e.key), n;
2107
2171
  }),
2108
2172
  ticks: I(`${T}s`, _),
2109
2173
  numbers: !0
2110
- } : ee || !s.centre && un(r, "data-chart-grid", i.grid) ? {
2174
+ } : ee || !s.centre && vn(r, "data-chart-grid", i.grid) ? {
2111
2175
  titles: [],
2112
2176
  ticks: I(`${T}s`, _),
2113
2177
  numbers: ee
@@ -2119,9 +2183,9 @@ var Je = (e) => {
2119
2183
  series: l,
2120
2184
  config: i
2121
2185
  });
2122
- let ne = dn(r, i) ? St(r, !!s.axes) : null;
2186
+ let ne = yn(r, i) ? At(r, !!s.axes) : null;
2123
2187
  s.axes && r.querySelector("tbody [data-fragment], thead [data-fragment]") && Q.log(`A ${o} chart has one step, with data-fragment on the figure; its rows and columns have no steps of their own.`, r), ne && r.setAttribute("data-steps", "");
2124
- let G = r.getAttribute("data-chart-keys"), ie = ne && i.controls ? Et({
2188
+ let G = r.getAttribute("data-chart-keys"), K = ne && i.controls ? Pt({
2125
2189
  previous: i.previouslabel,
2126
2190
  next: i.nextlabel,
2127
2191
  hint: i.stephint
@@ -2130,10 +2194,10 @@ var Je = (e) => {
2130
2194
  next: G && `${G}-next`,
2131
2195
  hint: G && `${G}-step`
2132
2196
  }, i.langattribute) : null;
2133
- ie && b(ie);
2134
- let K = Array.from(r.querySelectorAll("[data-annotation]")).map((t) => {
2135
- let n = t.getAttribute("data-annotation"), r = tn[n];
2136
- if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(tn).join(", ")}.`), null;
2197
+ K && b(K);
2198
+ let ie = Array.from(r.querySelectorAll("[data-annotation]")).map((t) => {
2199
+ let n = t.getAttribute("data-annotation"), r = un[n];
2200
+ if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(un).join(", ")}.`), null;
2137
2201
  let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= l.length ? i - 1 : 0;
2138
2202
  return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which is not there; it reads line 1.`), {
2139
2203
  spec: t,
@@ -2146,7 +2210,7 @@ var Je = (e) => {
2146
2210
  if (!B && !s.centre && !s.axes) for (let [e, t] of c.entries()) {
2147
2211
  if (!t.note) continue;
2148
2212
  let n = document.createElement("span");
2149
- n.dataset.annotation = "note", n.dataset.row = String(e + 1), n.textContent = t.note, t.noteKey && n.setAttribute("data-i18n", t.noteKey), K.push({
2213
+ n.dataset.annotation = "note", n.dataset.row = String(e + 1), n.textContent = t.note, t.noteKey && n.setAttribute("data-i18n", t.noteKey), ie.push({
2150
2214
  spec: n,
2151
2215
  type: we,
2152
2216
  badge: we.create(n, _),
@@ -2154,7 +2218,7 @@ var Je = (e) => {
2154
2218
  after: c.length
2155
2219
  });
2156
2220
  }
2157
- dn(r, i) && r.setAttribute("data-animate", bn(r, o, i, !!ne));
2221
+ yn(r, i) && r.setAttribute("data-animate", On(r, o, i, !!ne));
2158
2222
  let q = {
2159
2223
  figure: r,
2160
2224
  plot: _,
@@ -2175,38 +2239,38 @@ var Je = (e) => {
2175
2239
  rowAt: null,
2176
2240
  rowBox: null,
2177
2241
  pointOf: null,
2178
- annotations: K,
2242
+ annotations: ie,
2179
2243
  checks: [],
2180
2244
  plan: ne,
2181
2245
  step: 0,
2182
- controls: ie
2183
- }, ae = () => Nn(r, v);
2184
- v.addEventListener("transitionend", ae), v.addEventListener("transitioncancel", ae), ie?.addEventListener("click", (e) => {
2246
+ controls: K
2247
+ }, ae = () => Hn(r, v);
2248
+ v.addEventListener("transitionend", ae), v.addEventListener("transitioncancel", ae), K?.addEventListener("click", (e) => {
2185
2249
  let t = e.target.closest("button")?.dataset.go;
2186
- t && Tt(q, q.step + (t === "next" ? 1 : -1));
2187
- }), Tt(q, 0, !0);
2250
+ t && Nt(q, q.step + (t === "next" ? 1 : -1));
2251
+ }), Nt(q, 0, !0);
2188
2252
  let oe = r.getAttribute("data-chart-tooltip"), se = oe === "false" ? !1 : oe === "auto" ? "auto" : oe !== null || i.tooltip;
2189
- return se && Zt(q, i, se === "auto"), kn(q, i), q;
2190
- }, vn = {
2253
+ return se && on(q, i, se === "auto"), Rn(q, i), q;
2254
+ }, En = {
2191
2255
  grow: "grow",
2192
2256
  sweep: "sweep"
2193
- }, yn = [
2257
+ }, Dn = [
2194
2258
  "never",
2195
2259
  "auto",
2196
2260
  "print",
2197
2261
  "always"
2198
- ], bn = (e, t, n, r) => {
2199
- let i = t === "line" || t === "area", a = vn[e.getAttribute("data-chart-animate") ?? ""] ?? vn[String(n.animate)];
2262
+ ], On = (e, t, n, r) => {
2263
+ let i = t === "line" || t === "area", a = En[e.getAttribute("data-chart-animate") ?? ""] ?? En[String(n.animate)];
2200
2264
  return i ? r ? "sweep" : a ?? "sweep" : t === "donut" || t === "waterfall" ? a ?? "grow" : "grow";
2201
- }, xn = (e) => {
2265
+ }, kn = (e) => {
2202
2266
  let t = getComputedStyle(e).getPropertyValue("--tablechart-value-align").trim();
2203
2267
  return t === "start" || t === "center" || t === "end" ? t : null;
2204
- }, Sn = (e, t, n, r) => {
2268
+ }, An = (e, t, n) => e.dataset.chartLabels === "inside" || e.dataset.chartLabels !== "outside" && (t.labels === "inside" || n) ? "inside" : "outside", jn = (e, t, n, r) => {
2205
2269
  let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
2206
2270
  if (!a) return null;
2207
2271
  let o = Number(a[1]);
2208
2272
  return a[2] === "%" ? o / 100 * D : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
2209
- }, Cn = (e, t) => Sn(e, t, "--tablechart-bar-max", "60px") ?? Infinity, wn = (e, t) => {
2273
+ }, Mn = (e, t) => jn(e, t, "--tablechart-bar-max", "60px") ?? Infinity, Nn = (e, t) => {
2210
2274
  let n = e.getBoundingClientRect(), r = D / n.width, i = getComputedStyle(e), a = Number.parseFloat(i.lineHeight) / Number.parseFloat(i.fontSize) || 1.2;
2211
2275
  return (e) => {
2212
2276
  if (e.dataset.place === "none" || e.hidden || e.hasAttribute("data-left-out")) return [];
@@ -2221,21 +2285,21 @@ var Je = (e) => {
2221
2285
  style: s.join("; ")
2222
2286
  })] : [];
2223
2287
  };
2224
- }, Tn = [
2288
+ }, Pn = [
2225
2289
  "first",
2226
2290
  "last",
2227
2291
  "highest",
2228
2292
  "lowest",
2229
2293
  "outliers"
2230
- ], En = (t, n) => {
2294
+ ], Fn = (t, n) => {
2231
2295
  let r = (t.getAttribute("data-chart-values") ?? n.values).trim().toLowerCase().split(/\s+/).filter(Boolean);
2232
2296
  for (let t of r) [
2233
2297
  "auto",
2234
2298
  "all",
2235
2299
  "none",
2236
- ...Tn
2237
- ].includes(t) || console.warn(`[${e}] data-chart-values knows no "${t}". It takes auto, all, none, ${Tn.join(", ")}.`);
2238
- let i = r.filter((e) => Tn.includes(e));
2300
+ ...Pn
2301
+ ].includes(t) || console.warn(`[${e}] data-chart-values knows no "${t}". It takes auto, all, none, ${Pn.join(", ")}.`);
2302
+ let i = r.filter((e) => Pn.includes(e));
2239
2303
  return r.includes("all") ? {
2240
2304
  mode: "all",
2241
2305
  keys: []
@@ -2244,89 +2308,92 @@ var Je = (e) => {
2244
2308
  keys: []
2245
2309
  } : r.includes("auto") || !i.length ? {
2246
2310
  mode: "auto",
2247
- keys: i.length ? i : Tn
2311
+ keys: i.length ? i : Pn
2248
2312
  } : {
2249
2313
  mode: "set",
2250
2314
  keys: i
2251
2315
  };
2252
- }, Dn = ({ figure: e, rows: t, series: n }, r) => {
2253
- let i = e.getAttribute("data-chart-table"), a = i && yn.includes(i) ? i : r.table;
2316
+ }, In = ({ figure: e, rows: t, series: n }, r) => {
2317
+ let i = e.getAttribute("data-chart-table"), a = i && Dn.includes(i) ? i : r.table;
2254
2318
  a === "never" ? e.removeAttribute("data-table") : e.setAttribute("data-table", a);
2255
2319
  let o = e.getAttribute("data-chart-summary");
2256
- e.setAttribute("data-summary", o && yn.includes(o) ? o : r.summary), e.toggleAttribute("data-long", t.length * n.filter((e) => !e.group).length > r.tablelimit);
2257
- }, On = (t, n) => {
2320
+ e.setAttribute("data-summary", o && Dn.includes(o) ? o : r.summary), e.toggleAttribute("data-long", t.length * n.filter((e) => !e.group).length > r.tablelimit);
2321
+ }, Ln = (t, n) => {
2258
2322
  let { plot: r, svg: i, rows: l, type: m, values: g, series: _, seriesValues: y, names: b, annotations: x } = t;
2259
- Dn(t, n);
2260
- let S = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), C = S > 0 ? S : m.aspect ?? n.aspect, O = m.categories === "beside", k = t.axes && !m.axes ? t.axes : null, A = O ? null : t.categories[0]?.parentElement, j = null;
2261
- if (k) {
2262
- r.style.margin = "", A && (A.style.marginLeft = "");
2323
+ In(t, n);
2324
+ let S = getComputedStyle(t.figure);
2325
+ 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());
2326
+ let C = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), O = C > 0 ? C : m.aspect ?? n.aspect, k = m.categories === "beside", A = t.axes && !m.axes ? t.axes : null, j = k ? null : t.categories[0]?.parentElement, M = null;
2327
+ if (A) {
2328
+ r.style.margin = "", j && (j.style.marginLeft = "");
2263
2329
  let e = r.clientWidth;
2264
2330
  if (!e) return !1;
2265
- let i = m.segments?.(l) ?? [], a = t.stacked ? l.flatMap((e) => Object.values(Ne(e, _.length, m.running))) : i.some((e) => e.kind === "up" || e.kind === "down") ? i.flatMap((e) => [e.from, e.to]) : l.flatMap((e) => e.cells.slice(0, _.length).filter((e) => !e.missing).map((e) => e.value)), o = Math.min(0, -W(a.map((e) => -e))), s = Math.max(0, W(a)), c = Number.parseFloat(getComputedStyle(r).fontSize) || 16, { chartScaleY: u, chartScale: d } = t.figure.dataset, f = vt(u ?? d);
2266
- if (f && f.length > 2) j = {
2331
+ let i = m.segments?.(l) ?? [], a = t.stacked ? l.flatMap((e) => Object.values(Ne(e, _.length, m.running))) : i.some((e) => e.kind === "up" || e.kind === "down") ? i.flatMap((e) => [e.from, e.to]) : l.flatMap((e) => e.cells.slice(0, _.length).filter((e) => !e.missing).map((e) => e.value)), o = Math.min(0, -W(a.map((e) => -e))), s = Math.max(0, W(a)), c = Number.parseFloat(getComputedStyle(r).fontSize) || 16, { chartScaleY: u, chartScale: d } = t.figure.dataset, f = yt(u ?? d);
2332
+ if (f && f.length > 2) M = {
2267
2333
  min: f[0],
2268
2334
  max: f[f.length - 1],
2269
2335
  step: 0,
2270
2336
  ticks: f
2271
2337
  };
2272
2338
  else {
2273
- let [t, n] = f ?? [o, s], r = ht(n - t, Math.max((O ? e / 9 : e * C / 3) / c, 2)), i = (e, t) => f ? e : Number(((t ? Math.ceil : Math.floor)(e / r - 1e-9 * (t ? 1 : -1)) * r).toPrecision(12)), a = i(t, !1), l = i(n, !0);
2274
- j = {
2339
+ let [t, n] = f ?? [o, s], r = gt(n - t, Math.max((k ? e / 9 : e * O / 3) / c, 2)), i = (e, t) => f ? e : Number(((t ? Math.ceil : Math.floor)(e / r - 1e-9 * (t ? 1 : -1)) * r).toPrecision(12)), a = i(t, !1), l = i(n, !0);
2340
+ M = {
2275
2341
  min: a,
2276
2342
  max: l,
2277
2343
  step: r,
2278
- ticks: gt(a, l, r)
2344
+ ticks: _t(a, l, r)
2279
2345
  };
2280
2346
  }
2281
- k.ticks.textContent = "";
2282
- let p = l.find((e) => !e.missing), h = W(j.ticks.map((e) => re(String(e))));
2283
- for (let e of j.ticks) {
2284
- let t = I(T, k.ticks);
2285
- t.dataset.value = String(e), t.dataset.place = "none", p?.prefix && (t.dataset.prefix = p.prefix), p?.suffix && (t.dataset.suffix = p.suffix), An(t, h, n.locale);
2347
+ A.ticks.textContent = "";
2348
+ let p = l.find((e) => !e.missing), h = W(M.ticks.map((e) => re(String(e))));
2349
+ for (let e of M.ticks) {
2350
+ let t = I(T, A.ticks);
2351
+ t.dataset.value = String(e), t.dataset.place = "none", p?.prefix && (t.dataset.prefix = p.prefix), p?.suffix && (t.dataset.suffix = p.suffix), zn(t, h, n.locale);
2286
2352
  }
2287
- if (k.numbers) {
2288
- let e = Array.from(k.ticks.children);
2353
+ if (A.numbers) {
2354
+ let e = Array.from(A.ticks.children);
2289
2355
  for (let t of e) delete t.dataset.place;
2290
- pe(e), O ? r.style.marginBottom = `${(e[0] ? J(e[0]).height : 0) + 6}px` : (r.style.marginLeft = `${W([0, ...e.map((e) => J(e).width)]) + 10}px`, A && (A.style.marginLeft = r.style.marginLeft));
2356
+ pe(e), k ? r.style.marginBottom = `${(e[0] ? J(e[0]).height : 0) + 6}px` : (r.style.marginLeft = `${W([0, ...e.map((e) => J(e).width)]) + 10}px`, j && (j.style.marginLeft = r.style.marginLeft));
2291
2357
  }
2292
2358
  }
2293
- let M = r.clientWidth;
2294
- if (!M) return !1;
2295
- let F = D / M, R = D * C;
2359
+ let F = r.clientWidth;
2360
+ if (!F) return !1;
2361
+ let R = D / F, z = D * O;
2296
2362
  r.classList.add(v);
2297
- let z = m.numbers === !1 ? g.slice(0, 1) : [...y.flat(), ...t.totals];
2298
- for (let e of z) delete e.dataset.place, e.removeAttribute("data-left-out"), e.removeAttribute("data-cut");
2363
+ let B = m.numbers === !1 ? g.slice(0, 1) : [...y.flat(), ...t.totals];
2364
+ for (let e of B) delete e.dataset.place, e.removeAttribute("data-left-out"), e.removeAttribute("data-cut");
2299
2365
  r.style.removeProperty("--_fit"), r.toggleAttribute("data-grouped", !!m.groups && !t.stacked && _.filter((e) => !e.chart && !e.group).length > 1), t.categories[0]?.parentElement?.style.removeProperty("--_beside");
2300
- let B = m.axes ? t.axes : null, V = [];
2301
- if (B) {
2302
- let e = Number.parseFloat(getComputedStyle(r).fontSize) || 16, i = _.flatMap((e, t) => e.group ? [] : [t]).slice(0, 2), a = l.filter((e) => i.every((t) => e.cells[t] && !e.cells[t].missing)), { chartScaleX: o, chartScaleY: s, chartScale: c } = t.figure.dataset, u = [vt(o), vt(s ?? c)];
2303
- V = i.map((t, n) => yt(a.length ? a.map((e) => e.cells[t].value) : [0, 1], Math.max(n ? R / F / (e * 4) : M / (e * 9), 4), u[n])), B.ticks.textContent = "", V.forEach((e, t) => {
2366
+ let V = m.axes ? t.axes : null, ee = [];
2367
+ if (V) {
2368
+ let e = Number.parseFloat(getComputedStyle(r).fontSize) || 16, i = _.flatMap((e, t) => e.group ? [] : [t]).slice(0, 2), a = l.filter((e) => i.every((t) => e.cells[t] && !e.cells[t].missing)), { chartScaleX: o, chartScaleY: s, chartScale: c } = t.figure.dataset, u = [yt(o), yt(s ?? c)];
2369
+ ee = i.map((t, n) => bt(a.length ? a.map((e) => e.cells[t].value) : [0, 1], Math.max(n ? z / R / (e * 4) : F / (e * 9), 4), u[n])), V.ticks.textContent = "", ee.forEach((e, t) => {
2304
2370
  let r = a[0]?.cells[i[t]], o = W(e.ticks.map((e) => re(String(e))));
2305
2371
  for (let i of e.ticks) {
2306
- let e = I(T, B.ticks);
2307
- e.dataset.axis = t ? "y" : "x", e.dataset.value = String(i), r?.prefix && (e.dataset.prefix = r.prefix), r?.suffix && (e.dataset.suffix = r.suffix), An(e, o, n.locale);
2372
+ let e = I(T, V.ticks);
2373
+ e.dataset.axis = t ? "y" : "x", e.dataset.value = String(i), r?.prefix && (e.dataset.prefix = r.prefix), r?.suffix && (e.dataset.suffix = r.suffix), zn(e, o, n.locale);
2308
2374
  }
2309
2375
  });
2310
2376
  }
2311
- let ee = B ? Array.from(B.ticks.children) : [];
2377
+ let te = V ? Array.from(V.ticks.children) : [];
2312
2378
  pe([
2313
2379
  ...y.flat(),
2314
2380
  ...t.totals,
2315
2381
  ...b,
2316
2382
  ...t.categories,
2317
2383
  ...x.map((e) => e.badge),
2318
- ...B?.titles ?? [],
2319
- ...ee
2384
+ ...V?.titles ?? [],
2385
+ ...te
2320
2386
  ]);
2321
- let te = (g[0] ? J(g[0]).height : 0) * F;
2387
+ let ne = (g[0] ? J(g[0]).height : 0) * R;
2322
2388
  m.numbers === !1 && g[0] && (g[0].dataset.place = "none");
2323
- let ne = x[0]?.badge ? J(x[0].badge).height * F : 0, G = Math.max(R, Sn(t.figure, F, "--tablechart-min-height", "200px") ?? 0, m.minHeight?.({
2324
- labelHeight: te,
2325
- nameHeight: Math.max(0, W(t.categories.map((e) => J(e).height))) * F,
2326
- unit: F,
2389
+ let G = x[0]?.badge ? J(x[0].badge).height * R : 0, K = Math.max(z, jn(t.figure, R, "--tablechart-min-height", "200px") ?? 0, m.minHeight?.({
2390
+ labelHeight: ne,
2391
+ nameHeight: Math.max(0, W(t.categories.map((e) => J(e).height))) * R,
2392
+ unit: R,
2327
2393
  rows: l.length,
2328
2394
  series: _.length,
2329
- stacked: t.stacked
2395
+ stacked: t.stacked,
2396
+ labels: An(t.figure, n, _.some((e) => e.chart))
2330
2397
  }) ?? 0), ie = t.stacked ? l.map((e) => {
2331
2398
  let t = Pe(e, _.length);
2332
2399
  return {
@@ -2337,7 +2404,7 @@ var Je = (e) => {
2337
2404
  value: t
2338
2405
  } : e)
2339
2406
  };
2340
- }) : l, K = (m.segments ?? ((e) => e.map((e) => ({
2407
+ }) : l, q = (m.segments ?? ((e) => e.map((e) => ({
2341
2408
  ...e,
2342
2409
  from: 0,
2343
2410
  to: e.value,
@@ -2345,112 +2412,112 @@ var Je = (e) => {
2345
2412
  }))))(t.stacked ? ie.map((e) => ({
2346
2413
  ...e,
2347
2414
  cells: [e.cells[0]]
2348
- })) : l), q = {
2349
- labelHeight: te,
2350
- badgeHeight: ne,
2415
+ })) : l), ae = {
2416
+ labelHeight: ne,
2417
+ badgeHeight: G,
2351
2418
  hasAnnotations: x.length > 0,
2352
- unit: F,
2419
+ unit: R,
2353
2420
  series: _.length,
2354
2421
  focused: _.some((e) => e.focus),
2355
2422
  stacked: t.stacked
2356
- }, ae = Math.max(((e) => t.stacked ? e(l.map((e) => Ne(e, _.length, m.running).top)) : e([...K.flatMap((e) => [
2423
+ }, oe = Math.max(((e) => t.stacked ? e(l.map((e) => Ne(e, _.length, m.running).top)) : e([...q.flatMap((e) => [
2357
2424
  e.from,
2358
2425
  e.to,
2359
2426
  e.value
2360
- ]), ...l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value))]))(W), 0), oe = K.some((e) => e.kind === "up" || e.kind === "down") ? K.flatMap((e) => [e.from, e.to]) : t.stacked ? l.map((e) => Ne(e, _.length, m.running).bottom) : l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value)), se = Math.min(-W(oe.map((e) => -e)), 0), ce = _.flatMap((e, t) => e.chart ? [t] : []), le = l.some((e) => e.note) ? ne + 4 * F : 0, ue = Math.max(m.headroom?.(q) ?? te, ce.length ? tt.headroom?.(q) ?? 0 : 0) + le, de = 2 * F + (m.footroom?.(q) ?? 0) + (se < 0 ? te + 4 * F : 0), fe = G - ue - de, me = j ? Math.max(j.max, ae) : ae * 1.02, he = j ? Math.min(j.min, se) : se * 1.02, ge = x.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, _e = (e) => {
2361
- let t = Number.parseFloat(ge?.getAttribute(e) ?? "");
2427
+ ]), ...l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value))]))(W), 0), se = q.some((e) => e.kind === "up" || e.kind === "down") ? q.flatMap((e) => [e.from, e.to]) : t.stacked ? l.map((e) => Ne(e, _.length, m.running).bottom) : l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value)), ce = Math.min(-W(se.map((e) => -e)), 0), le = _.flatMap((e, t) => e.chart ? [t] : []), ue = l.some((e) => e.note) ? G + 4 * R : 0, de = Math.max(m.headroom?.(ae) ?? ne, le.length ? nt.headroom?.(ae) ?? 0 : 0) + ue, fe = 2 * R + (m.footroom?.(ae) ?? 0) + (ce < 0 ? ne + 4 * R : 0), me = K - de - fe, he = M ? Math.max(M.max, oe) : oe * 1.02, ge = M ? Math.min(M.min, ce) : ce * 1.02, _e = x.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, ye = (e) => {
2428
+ let t = Number.parseFloat(_e?.getAttribute(e) ?? "");
2362
2429
  return Number.isFinite(t) ? t : null;
2363
- }, ye = _e("data-from") ?? _e("data-at"), be = _e("data-to"), Y = null;
2364
- if (ge && (ye !== null || be !== null)) {
2365
- let t = ye ?? 0, n = be ?? me, r = be === null ? t : ye === null ? n : (t + n) / 2, i = ge.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
2430
+ }, be = ye("data-from") ?? ye("data-at"), xe = ye("data-to"), Y = null;
2431
+ if (_e && (be !== null || xe !== null)) {
2432
+ let t = be ?? 0, n = xe ?? he, r = xe === null ? t : be === null ? n : (t + n) / 2, i = _e.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
2366
2433
  i !== null && !a && console.warn(`[${e}] data-size="${i}" is not a percentage, such as 30%. Using the default.`);
2367
- let o = Math.min(Math.max(a ? Number(a[1]) / 100 : be === null ? .22 : .3, .05), .8), s = K.filter((e) => (e.kind === "up" || e.kind === "down") && Math.max(e.from, e.to) > t && Math.min(e.from, e.to) < n);
2368
- m.breakable ? se < 0 ? console.warn(`[${e}] A chart with values below zero cannot break its scale.`) : t < 0 || n <= t || n > me || t === 0 && n === me ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${ae}.`) : s.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : Y = {
2434
+ let o = Math.min(Math.max(a ? Number(a[1]) / 100 : xe === null ? .22 : .3, .05), .8), s = q.filter((e) => (e.kind === "up" || e.kind === "down") && Math.max(e.from, e.to) > t && Math.min(e.from, e.to) < n);
2435
+ m.breakable ? ce < 0 ? console.warn(`[${e}] A chart with values below zero cannot break its scale.`) : t < 0 || n <= t || n > he || t === 0 && n === he ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${oe}.`) : s.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : Y = {
2369
2436
  lo: t,
2370
2437
  hi: n,
2371
2438
  gap: r,
2372
2439
  share: o
2373
2440
  } : console.warn(`[${e}] This kind of chart cannot break its scale.`);
2374
2441
  }
2375
- let Ce = Y ? Y.gap : null, we = (Y && Sn(t.figure, F, "--tablechart-break-gap", "")) ?? 13, Te = G - de, Ee = me - he || 1, De = (e) => Te - (e - he) / Ee * fe;
2442
+ let we = Y ? Y.gap : null, Te = (Y && jn(t.figure, R, "--tablechart-break-gap", "")) ?? 13, Ee = K - fe, De = he - ge || 1, Oe = (e) => Ee - (e - ge) / De * me;
2376
2443
  if (Y) {
2377
- let { lo: e, hi: t, gap: n, share: r } = Y, i = fe * r, a = (fe - i - we) / (e + (me - t)), o = i / (t - e);
2378
- De = (r) => r <= e ? Te - r * a : r <= n ? Te - e * a - (r - e) * o : r <= t ? Te - e * a - (r - e) * o - we : Te - e * a - i - we - (r - t) * a;
2444
+ let { lo: e, hi: t, gap: n, share: r } = Y, i = me * r, a = (me - i - Te) / (e + (he - t)), o = i / (t - e);
2445
+ Oe = (r) => r <= e ? Ee - r * a : r <= n ? Ee - e * a - (r - e) * o : r <= t ? Ee - e * a - (r - e) * o - Te : Ee - e * a - i - Te - (r - t) * a;
2379
2446
  }
2380
- let Oe, ke, Ae = [];
2381
- if (B) {
2382
- let e = 6 * F, [t, n] = B.titles, r = (e) => e ? J(e).width * F : 0, i = (e) => e ? J(e).height * F : 0, a = ee.filter((e) => e.dataset.axis === "x"), o = ee.filter((e) => e.dataset.axis === "y"), s = i(ee[0]), c = r(n) + W([0, ...o.map(r)]) + 2 * e, l = s / 2;
2383
- ke = [
2447
+ let ke, Ae, je = [];
2448
+ if (V) {
2449
+ let e = 6 * R, [t, n] = V.titles, r = (e) => e ? J(e).width * R : 0, i = (e) => e ? J(e).height * R : 0, a = te.filter((e) => e.dataset.axis === "x"), o = te.filter((e) => e.dataset.axis === "y"), s = i(te[0]), c = r(n) + W([0, ...o.map(r)]) + 2 * e, l = s / 2;
2450
+ Ae = [
2384
2451
  c,
2385
2452
  l,
2386
2453
  D - c - W([0, ...a.map(r)]) / 2,
2387
- G - l - i(t) - s - 2 * e
2454
+ K - l - i(t) - s - 2 * e
2388
2455
  ];
2389
- let [u, d, f, p] = ke, [m, h] = V, g = (e) => u + (e - m.min) / (m.max - m.min || 1) * f, _ = (e) => d + p - (e - h.min) / (h.max - h.min || 1) * p;
2390
- Oe = g, De = _;
2456
+ let [u, d, f, p] = Ae, [m, h] = ee, g = (e) => u + (e - m.min) / (m.max - m.min || 1) * f, _ = (e) => d + p - (e - h.min) / (h.max - h.min || 1) * p;
2457
+ ke = g, Oe = _;
2391
2458
  let v = (e) => r(a.find((t) => Number(t.dataset.value) === e));
2392
- Ae = [bt(m, (t) => t.every((n, r) => !r || g(n) - g(t[r - 1]) > (v(n) + v(t[r - 1])) / 2 + e)).ticks, bt(h, (t) => t.every((n, r) => !r || _(t[r - 1]) - _(n) > s + e / 2)).ticks];
2393
- for (let t of ee) {
2394
- let n = Number(t.dataset.value), r = t.dataset.axis === "x" ? 0 : 1, i = Ae[r].includes(n);
2395
- t.dataset.place = i ? r ? "before" : "below" : "none", i && L(t, r ? u - e : g(n), r ? _(n) : d + p + e, D, G);
2459
+ je = [xt(m, (t) => t.every((n, r) => !r || g(n) - g(t[r - 1]) > (v(n) + v(t[r - 1])) / 2 + e)).ticks, xt(h, (t) => t.every((n, r) => !r || _(t[r - 1]) - _(n) > s + e / 2)).ticks];
2460
+ for (let t of te) {
2461
+ let n = Number(t.dataset.value), r = t.dataset.axis === "x" ? 0 : 1, i = je[r].includes(n);
2462
+ t.dataset.place = i ? r ? "before" : "below" : "none", i && L(t, r ? u - e : g(n), r ? _(n) : d + p + e, D, K);
2396
2463
  }
2397
- t && L(t, u + f / 2, G - i(t), D, G), n && L(n, 0, d + p / 2, D, G);
2464
+ t && L(t, u + f / 2, K - i(t), D, K), n && L(n, 0, d + p / 2, D, K);
2398
2465
  }
2399
- let je = b.length ? W(b.map((e) => J(e).width)) * F + 12 * F : 0, Me = t.categories[0]?.parentElement;
2400
- Me && (Me.style.paddingRight = je ? `${je / D * 100}%` : "");
2401
- let Fe = (D - je) / l.length, Ie = (e) => (e + .5) * Fe, Le = (e) => e >= 0 && e < l.length ? e : null;
2402
- t.rowAt = m.centre ? null : m.categories === "beside" ? (e, t) => Le(Math.floor(t * F / (G / l.length))) : (e) => Le(Math.floor(e * F / Fe));
2403
- let Re = Fe / D * 100, ze = 100 / l.length;
2466
+ let Me = b.length ? W(b.map((e) => J(e).width)) * R + 12 * R : 0, Fe = t.categories[0]?.parentElement;
2467
+ Fe && (Fe.style.paddingRight = Me ? `${Me / D * 100}%` : "");
2468
+ let Ie = (D - Me) / l.length, Le = (e) => (e + .5) * Ie, Re = (e) => e >= 0 && e < l.length ? e : null;
2469
+ t.rowAt = m.centre ? null : m.categories === "beside" ? (e, t) => Re(Math.floor(t * R / (K / l.length))) : (e) => Re(Math.floor(e * R / Ie));
2470
+ let ze = Ie / D * 100, Be = 100 / l.length;
2404
2471
  if (t.rowBox = m.categories === "beside" ? (e) => [
2405
2472
  0,
2406
- e * ze,
2473
+ e * Be,
2407
2474
  100,
2408
- ze
2475
+ Be
2409
2476
  ] : (e) => [
2410
- e * Re,
2477
+ e * ze,
2411
2478
  0,
2412
- Re,
2479
+ ze,
2413
2480
  100
2414
- ], i.setAttribute("viewBox", `0 0 ${D} ${N(G)}`), i.textContent = "", ke && Oe) {
2415
- let [e, r, a, o] = ke, [s, c] = Ae, l = Oe;
2416
- un(t.figure, "data-chart-grid", n.grid) && i.appendChild(P("path", {
2481
+ ], i.setAttribute("viewBox", `0 0 ${D} ${N(K)}`), i.textContent = "", Ae && ke) {
2482
+ let [e, r, a, o] = Ae, [s, c] = je, l = ke;
2483
+ vn(t.figure, "data-chart-grid", n.grid) && i.appendChild(P("path", {
2417
2484
  class: E,
2418
- d: [...s.map((e) => `M${N(l(e))},${N(r)}V${N(r + o)}`), ...c.map((t) => `M${N(e)},${N(De(t))}H${N(e + a)}`)].join("")
2485
+ d: [...s.map((e) => `M${N(l(e))},${N(r)}V${N(r + o)}`), ...c.map((t) => `M${N(e)},${N(Oe(t))}H${N(e + a)}`)].join("")
2419
2486
  })), i.appendChild(P("path", {
2420
2487
  class: w,
2421
2488
  d: [
2422
2489
  `M${N(e)},${N(r)}V${N(r + o)}H${N(e + a)}`,
2423
- ...s.map((e) => `M${N(l(e))},${N(r + o)}v${N(4 * F)}`),
2424
- ...c.map((t) => `M${N(e)},${N(De(t))}h${N(-4 * F)}`)
2490
+ ...s.map((e) => `M${N(l(e))},${N(r + o)}v${N(4 * R)}`),
2491
+ ...c.map((t) => `M${N(e)},${N(Oe(t))}h${N(-4 * R)}`)
2425
2492
  ].join("")
2426
2493
  }));
2427
2494
  }
2428
2495
  t.checks = [];
2429
- let Be = {
2496
+ let Ve = {
2430
2497
  rows: l,
2431
- segments: K,
2432
- cx: Ie,
2433
- y: De,
2434
- x: Oe,
2435
- frame: ke,
2436
- length: (e, n) => Sn(t.figure, F, e, n),
2437
- barWidth: Math.min(Fe * n.barfill, Cn(t.figure, F)),
2438
- barMax: Cn(t.figure, F),
2439
- height: G,
2440
- unit: F,
2441
- labelHeight: te,
2442
- badgeHeight: ne,
2498
+ segments: q,
2499
+ cx: Le,
2500
+ y: Oe,
2501
+ x: ke,
2502
+ frame: Ae,
2503
+ length: (e, n) => jn(t.figure, R, e, n),
2504
+ barWidth: Math.min(Ie * n.barfill, Mn(t.figure, R)),
2505
+ barMax: Mn(t.figure, R),
2506
+ height: K,
2507
+ unit: R,
2508
+ labelHeight: ne,
2509
+ badgeHeight: G,
2443
2510
  after: l.length,
2444
2511
  note: 0,
2445
- labels: t.figure.dataset.chartLabels === "inside" || t.figure.dataset.chartLabels !== "outside" && (n.labels === "inside" || ce.length > 0) ? "inside" : "outside",
2446
- insideAlign: xn(t.figure),
2447
- breakAt: Ce,
2512
+ labels: An(t.figure, n, le.length > 0),
2513
+ insideAlign: kn(t.figure),
2514
+ breakAt: we,
2448
2515
  squeeze: Y,
2449
- breakGap: we,
2450
- domain: j ? [j.min, j.max] : null,
2516
+ breakGap: Te,
2517
+ domain: M ? [M.min, M.max] : null,
2451
2518
  stacked: t.stacked,
2452
- shape: fn(t.figure, n),
2453
- pick: En(t.figure, n),
2519
+ shape: bn(t.figure, n),
2520
+ pick: Fn(t.figure, n),
2454
2521
  totals: t.totals,
2455
2522
  svg: i,
2456
2523
  plot: r,
@@ -2467,14 +2534,14 @@ var Je = (e) => {
2467
2534
  lineHoles: []
2468
2535
  };
2469
2536
  r.style.setProperty("--count", String(Math.max(1, ...l.map((e) => e.slot + 1))));
2470
- let Ve = (e) => {
2537
+ let He = (e) => {
2471
2538
  let t = (t) => ({
2472
2539
  ...t,
2473
2540
  ...t.cells[e] ?? t.cells[0]
2474
2541
  });
2475
2542
  return {
2476
2543
  rows: l.map(t),
2477
- segments: K.map((e) => {
2544
+ segments: q.map((e) => {
2478
2545
  let n = t(e);
2479
2546
  return e.kind === "bar" ? {
2480
2547
  ...n,
@@ -2484,51 +2551,51 @@ var Je = (e) => {
2484
2551
  values: y[e]
2485
2552
  };
2486
2553
  };
2487
- if (ce.length) {
2554
+ if (le.length) {
2488
2555
  let e = _.flatMap((e, t) => e.chart ? [] : [t]);
2489
2556
  m.draw({
2490
- ...Be,
2557
+ ...Ve,
2491
2558
  own: e,
2492
- ...e.length === 1 && Ve(e[0])
2493
- }), tt.draw({
2494
- ...Be,
2495
- own: ce
2559
+ ...e.length === 1 && He(e[0])
2560
+ }), nt.draw({
2561
+ ...Ve,
2562
+ own: le
2496
2563
  });
2497
- } else m.draw(Be);
2498
- Be.rowAt && (t.rowAt = Be.rowAt), t.pointOf = Be.pointOf ?? null;
2499
- let He = Number(r.style.getPropertyValue("--count")) || l.length;
2500
- for (let e of t.figure.querySelectorAll(`.${f}`)) e.style.setProperty("--i", String(Math.min(l[l.length - 1].slot, He - 1)));
2501
- if (!t.stacked && !r.hasAttribute("data-grouped")) for (let e of y) xe(e, F, D), Se(e, F, D, G);
2502
- if (k && j) {
2503
- let e = 6 * F, r = O && Be.x ? Be.x : De, a = Array.from(k.ticks.children), o = (e) => J(a.find((t) => Number(t.dataset.value) === e) ?? a[0]), s = bt(j, (t) => t.every((n, i) => !i || (O ? r(n) - r(t[i - 1]) > (o(n).width + o(t[i - 1]).width) / 2 * F + e : r(t[i - 1]) - r(n) > o(n).height * F + e / 2))).ticks.filter((e) => !Y || e <= Y.lo || e >= Y.hi);
2564
+ } else m.draw(Ve);
2565
+ Ve.rowAt && (t.rowAt = Ve.rowAt), t.pointOf = Ve.pointOf ?? null;
2566
+ let Ue = Number(r.style.getPropertyValue("--count")) || l.length;
2567
+ for (let e of t.figure.querySelectorAll(`.${f}`)) e.style.setProperty("--i", String(Math.min(l[l.length - 1].slot, Ue - 1)));
2568
+ if (!t.stacked && !r.hasAttribute("data-grouped")) for (let e of y) Se(e, R, D), Ce(e, R, D, K);
2569
+ if (A && M) {
2570
+ let e = 6 * R, r = k && Ve.x ? Ve.x : Oe, a = Array.from(A.ticks.children), o = (e) => J(a.find((t) => Number(t.dataset.value) === e) ?? a[0]), s = xt(M, (t) => t.every((n, i) => !i || (k ? r(n) - r(t[i - 1]) > (o(n).width + o(t[i - 1]).width) / 2 * R + e : r(t[i - 1]) - r(n) > o(n).height * R + e / 2))).ticks.filter((e) => !Y || e <= Y.lo || e >= Y.hi);
2504
2571
  for (let t of a) {
2505
- let n = Number(t.dataset.value), i = k.numbers && s.includes(n);
2506
- t.dataset.place = i ? O ? "below" : "before" : "none", i && L(t, O ? r(n) : -e, O ? G + e : r(n), D, G);
2572
+ let n = Number(t.dataset.value), i = A.numbers && s.includes(n);
2573
+ t.dataset.place = i ? k ? "below" : "before" : "none", i && L(t, k ? r(n) : -e, k ? K + e : r(n), D, K);
2507
2574
  }
2508
- let c = D - je;
2509
- un(t.figure, "data-chart-grid", n.grid) && i.prepend(P("path", {
2575
+ let c = D - Me;
2576
+ vn(t.figure, "data-chart-grid", n.grid) && i.prepend(P("path", {
2510
2577
  class: E,
2511
- d: s.map((e) => O ? `M${N(r(e))},0V${N(G)}` : `M0,${N(r(e))}H${N(c)}`).join("")
2512
- })), k.numbers && i.appendChild(P("path", {
2578
+ d: s.map((e) => k ? `M${N(r(e))},0V${N(K)}` : `M0,${N(r(e))}H${N(c)}`).join("")
2579
+ })), A.numbers && i.appendChild(P("path", {
2513
2580
  class: w,
2514
- d: [O ? `M${N(r(j.min))},${N(G)}H${N(r(j.max))}` : `M0,${N(r(j.max))}V${N(r(j.min))}`, ...s.map((e) => O ? `M${N(r(e))},${N(G)}v${N(4 * F)}` : `M0,${N(r(e))}h${N(-4 * F)}`)].join("")
2581
+ d: [k ? `M${N(r(M.min))},${N(K)}H${N(r(M.max))}` : `M0,${N(r(M.max))}V${N(r(M.min))}`, ...s.map((e) => k ? `M${N(r(e))},${N(K)}v${N(4 * R)}` : `M0,${N(r(e))}h${N(-4 * R)}`)].join("")
2515
2582
  }));
2516
2583
  }
2517
2584
  for (let [e, n] of x.entries()) {
2518
2585
  n.badge?.setAttribute("data-note", String(e + 1));
2519
2586
  let i = n.series;
2520
2587
  n.type.draw(n.spec, n.badge, {
2521
- ...Be,
2588
+ ...Ve,
2522
2589
  ...t.stacked && {
2523
2590
  rows: ie,
2524
2591
  ...t.totals.length && { values: t.totals }
2525
2592
  },
2526
- ...i > 0 && !t.stacked && Ve(i),
2593
+ ...i > 0 && !t.stacked && He(i),
2527
2594
  after: t.plan ? n.after : Math.min(n.after, Number(r.style.getPropertyValue("--count")) || n.after),
2528
2595
  note: e + 1
2529
2596
  });
2530
2597
  }
2531
- wt(t);
2598
+ Mt(t);
2532
2599
  for (let e of t.figure.querySelectorAll(`.${p}`)) {
2533
2600
  let n = Array.from(e.children);
2534
2601
  if (t.plan) for (let e of n) e.style.getPropertyValue("--step") || e.style.setProperty("--i", "0");
@@ -2557,10 +2624,10 @@ var Je = (e) => {
2557
2624
  e && e.getBoundingClientRect().right + 8 > s.getBoundingClientRect().left && s.setAttribute("data-left-out", "");
2558
2625
  }
2559
2626
  }
2560
- let r = (m === tt || m === nt) && un(t.figure, "data-chart-ticks", n.ticks);
2627
+ let r = (m === nt || m === rt) && vn(t.figure, "data-chart-ticks", n.ticks);
2561
2628
  if (X.toggleAttribute("data-ticks", r), X.style.removeProperty("--_tick-reach"), r) {
2562
- let e = G - Number(i.querySelector(".tablechart-rule")?.getAttribute("y1") ?? G);
2563
- e > 0 && e < 10 * F && X.style.setProperty("--_tick-reach", `${N(e / F)}px`);
2629
+ let e = K - Number(i.querySelector(".tablechart-rule")?.getAttribute("y1") ?? K);
2630
+ e > 0 && e < 10 * R && X.style.setProperty("--_tick-reach", `${N(e / R)}px`);
2564
2631
  let n = X.getBoundingClientRect(), r = n.width / (X.offsetWidth || 1), a = getComputedStyle(X), o = Number.parseFloat(a.paddingLeft), s = (X.clientWidth - o - Number.parseFloat(a.paddingRight)) / l.length;
2565
2632
  t.categories.forEach((e, t) => {
2566
2633
  if (e.hasAttribute("data-left-out")) e.style.removeProperty("--_tick");
@@ -2572,9 +2639,9 @@ var Je = (e) => {
2572
2639
  }
2573
2640
  X.style.height = "";
2574
2641
  }
2575
- let Ue = x.flatMap(({ badge: e }) => {
2642
+ let We = x.flatMap(({ badge: e }) => {
2576
2643
  if (!(e instanceof HTMLElement) || !e.offsetWidth) return [];
2577
- let t = e.offsetWidth * F, n = e.offsetHeight * F, r = Number.parseFloat(e.style.left) / 100 * D, i = Number.parseFloat(e.style.top) / 100 * G, a = getComputedStyle(e).borderTopLeftRadius, o = a.endsWith("%") ? Number.parseFloat(a) / 100 : null, s = (Number.parseFloat(a) || 0) * F;
2644
+ let t = e.offsetWidth * R, n = e.offsetHeight * R, r = Number.parseFloat(e.style.left) / 100 * D, i = Number.parseFloat(e.style.top) / 100 * K, a = getComputedStyle(e).borderTopLeftRadius, o = a.endsWith("%") ? Number.parseFloat(a) / 100 : null, s = (Number.parseFloat(a) || 0) * R;
2578
2645
  return [P("rect", {
2579
2646
  class: h,
2580
2647
  "data-for": "badge",
@@ -2587,25 +2654,25 @@ var Je = (e) => {
2587
2654
  ry: o === null ? s : n * o,
2588
2655
  style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
2589
2656
  })];
2590
- }), Z = i.querySelector(`.${E}`), We = Array.from(i.querySelectorAll(`.${o}`)), Ge = [...Z ? [Z] : [], ...i.querySelectorAll(`:scope > .${s}`)], Ke = wn(r, F), qe = t.figure.getAttribute("data-animate") === "grow", Je = y.flat().filter((e) => e.hasAttribute("data-cut")).flatMap(Ke), Ye = [...ce.flatMap((e) => y[e].flatMap(Ke)), ...qe ? Je : []];
2591
- if (Ge.length || We.length) {
2657
+ }), Z = i.querySelector(`.${E}`), Ge = Array.from(i.querySelectorAll(`.${o}`)), Ke = [...Z ? [Z] : [], ...i.querySelectorAll(`:scope > .${s}`)], qe = Nn(r, R), Je = t.figure.getAttribute("data-animate") === "grow", Ye = y.flat().filter((e) => e.hasAttribute("data-cut")).flatMap(qe), Xe = [...le.flatMap((e) => y[e].flatMap(qe)), ...Je ? Ye : []];
2658
+ if (Ke.length || Ge.length) {
2592
2659
  let e = [
2593
2660
  ...y.flat(),
2594
2661
  ...t.totals,
2595
2662
  ...m.categories === "beside" ? t.categories : []
2596
- ].flatMap(Ke), n = (e) => [
2663
+ ].flatMap(qe), n = (e) => [
2597
2664
  "x",
2598
2665
  "y",
2599
2666
  "width",
2600
2667
  "height"
2601
2668
  ].map((t) => Number(e.getAttribute(t)));
2602
- for (let t of We) sn(t, [...e, ...Ue].map(n));
2603
- if (Ge.length && t.plan) U(i, e, D, G, Ge);
2604
- else for (let t of Ge) {
2605
- let r = [...e, ...Ue], i = cn(t);
2606
- t.setAttribute("d", i.map(([e, t, i, a]) => on(e, t, i, a, r.map(n))).join(""));
2669
+ for (let t of Ge) hn(t, [...e, ...We].map(n));
2670
+ if (Ke.length && t.plan) U(i, e, D, K, Ke);
2671
+ else for (let t of Ke) {
2672
+ let r = [...e, ...We], i = gn(t);
2673
+ t.setAttribute("d", i.map(([e, t, i, a]) => mn(e, t, i, a, r.map(n))).join(""));
2607
2674
  for (let e of r) {
2608
- let r = ln(i, n(e)), a = e.dataset.for === "badge" ? "badge" : "";
2675
+ let r = _n(i, n(e)), a = e.dataset.for === "badge" ? "badge" : "";
2609
2676
  r && t.after(P("path", {
2610
2677
  class: t.getAttribute("class") ?? "tablechart-grid",
2611
2678
  "data-gap": a,
@@ -2615,68 +2682,135 @@ var Je = (e) => {
2615
2682
  }
2616
2683
  }
2617
2684
  }
2618
- if (H(i, Ue, D, G, Array.from(i.querySelectorAll(`.${a}, .${c}`))), !qe && (Be.lineHoles.length || Je.length)) {
2685
+ if (H(i, We, D, K, Array.from(i.querySelectorAll(`.${a}, .${c}`))), !Je && (Ve.lineHoles.length || Ye.length)) {
2619
2686
  let e = Array.from(i.querySelectorAll(`.${u}`)).map((e) => {
2620
2687
  let t = P("g", {});
2621
2688
  return e.before(t), t.append(e), t;
2622
2689
  });
2623
- H(i, [...Be.lineHoles, ...Je], D, G, [...e, ...i.querySelectorAll(`.${d}`)]);
2690
+ H(i, [...Ve.lineHoles, ...Ye], D, K, [...e, ...i.querySelectorAll(`.${d}`)]);
2624
2691
  }
2625
- let Xe = [
2692
+ let Ze = [
2626
2693
  o,
2627
2694
  s,
2628
2695
  a,
2629
2696
  c,
2630
2697
  ...t.plan ? [] : [E]
2631
2698
  ];
2632
- U(i, [...Ue, ...Ye], D, G, void 0, Xe.map((e) => `.${e}`).join(", ")), t.figure.hasAttribute("data-animate") && !t.figure.hasAttribute("data-steps") && !t.figure.classList.contains("is-shown") && Pn(i);
2633
- let Ze = (e) => e.dataset.missing !== void 0 || m.centre && l[Number(e.dataset.row) - 1]?.isTotal, Qe = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), $e = (e, t) => {
2699
+ U(i, [...We, ...Xe], D, K, void 0, Ze.map((e) => `.${e}`).join(", ")), t.figure.hasAttribute("data-animate") && !t.figure.hasAttribute("data-steps") && !t.figure.classList.contains("is-shown") && Un(i);
2700
+ let Qe = (e) => e.dataset.missing !== void 0 || m.centre && l[Number(e.dataset.row) - 1]?.isTotal, $e = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), et = (e, t) => {
2634
2701
  let n = Number(e.dataset.row);
2635
- return t.some((e) => Qe(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
2702
+ return t.some((e) => $e(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
2636
2703
  };
2637
- return t.figure.toggleAttribute("data-left-out", (m.columns ? [t.categories] : [...y, t.totals]).some((e) => e.some((t) => !Ze(t) && !Qe(t) && !$e(t, e)))), !0;
2638
- }, kn = (e, t) => {
2704
+ return t.figure.toggleAttribute("data-left-out", (m.columns ? [t.categories] : [...y, t.totals]).some((e) => e.some((t) => !Qe(t) && !$e(t) && !et(t, e)))), Ot(t.figure), !0;
2705
+ }, Rn = (e, t) => {
2639
2706
  let n = [
2640
2707
  ...e.seriesValues.flat(),
2641
2708
  ...e.totals,
2642
2709
  ...e.totalCell ? [e.totalCell] : []
2643
2710
  ];
2644
- for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ? An(r, r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale) : r.textContent = r.dataset.missing;
2645
- }, An = (e, t, n) => {
2646
- let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] = ie(Number.parseFloat(e.dataset.value || "0"), t, n);
2711
+ for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ? zn(r, r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale) : r.textContent = r.dataset.missing;
2712
+ }, zn = (e, t, n) => {
2713
+ let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] = K(Number.parseFloat(e.dataset.value || "0"), t, n);
2647
2714
  if (e.textContent = r + (r ? a : "") + o + i, a && !r) {
2648
2715
  let t = document.createElement("span");
2649
2716
  t.className = "tablechart-minus", t.textContent = a, e.prepend(t);
2650
2717
  }
2651
- }, jn = (e) => {
2652
- Qt(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${p}`)?.remove(), e.controls?.remove();
2653
- }, Mn = (e, t, n = !1) => {
2654
- !t && !e.figure.hasAttribute("data-steps") && Pn(e.svg), n ? (e.figure.classList.add(S), e.figure.classList.toggle(b, t), e.figure.offsetWidth, t && Fn(e.svg), requestAnimationFrame(() => e.figure.classList.remove(S))) : (e.figure.classList.toggle(b, t), t && requestAnimationFrame(() => requestAnimationFrame(() => Nn(e.figure, e.svg))));
2655
- }, Nn = (e, t) => {
2656
- e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) && Fn(t);
2657
- }, Pn = (e) => {
2718
+ }, Bn = (e) => {
2719
+ sn(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${p}`)?.remove(), e.controls?.remove();
2720
+ }, Vn = (e, t, n = !1) => {
2721
+ !t && !e.figure.hasAttribute("data-steps") && Un(e.svg), n ? (e.figure.classList.add(S), e.figure.classList.toggle(b, t), e.figure.offsetWidth, t && Wn(e.svg), requestAnimationFrame(() => e.figure.classList.remove(S))) : (e.figure.classList.toggle(b, t), t && requestAnimationFrame(() => requestAnimationFrame(() => Hn(e.figure, e.svg))));
2722
+ }, Hn = (e, t) => {
2723
+ e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) && Wn(t);
2724
+ }, Un = (e) => {
2658
2725
  for (let t of e.querySelectorAll("[mask^=\"url(#tablechart-cut-\"]")) t.dataset.mask = t.getAttribute("mask") ?? "", t.removeAttribute("mask");
2659
- }, Fn = (e) => {
2726
+ }, Wn = (e) => {
2660
2727
  for (let t of e.querySelectorAll("[data-mask]")) t.setAttribute("mask", t.dataset.mask ?? ""), t.removeAttribute("data-mask");
2661
- }, In = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), Ln = /^\s*(?:Table)?:\s+/, Rn = (e) => e?.tagName === "P" && Ln.test(e.textContent ?? ""), zn = (e) => {
2728
+ }, Gn = 3, Kn = (t) => {
2729
+ let n = Et(t), r = Array.from(t.querySelectorAll("table thead tr:first-child > *")).map((e) => (e.textContent ?? "").trim()), i = Array.from(t.querySelectorAll("tbody tr > :first-child")).map((e) => (e.textContent ?? "").trim()), a = [
2730
+ [
2731
+ ".tablechart-series",
2732
+ "Line",
2733
+ (e) => getComputedStyle(e).stroke
2734
+ ],
2735
+ [
2736
+ ".tablechart-slice",
2737
+ "Slice",
2738
+ (e) => getComputedStyle(e).stroke
2739
+ ],
2740
+ [
2741
+ ".tablechart-bar, .tablechart-piece",
2742
+ "Bar",
2743
+ (e) => getComputedStyle(e).fill
2744
+ ]
2745
+ ], o = /* @__PURE__ */ new Map();
2746
+ for (let [e, s, c] of a) {
2747
+ let a = Array.from(t.querySelectorAll(`${e}:not([data-muted])`));
2748
+ for (let e of a) {
2749
+ let t = c(e), [l, u, d, f] = Ct(t), p = Tt([
2750
+ l,
2751
+ u,
2752
+ d
2753
+ ].map((e, t) => e * f + n[t] * (1 - f)), n);
2754
+ if (p >= Gn) continue;
2755
+ let m = e.getAttribute("data-series"), h = i[Number(e.getAttribute("data-row") ?? 0) - 1] ?? "", g = s === "Slice" ? "" : m ? r[Number(m)] : "", _ = `${s}|${g}|${t}`, v = o.get(_) ?? {
2756
+ kind: s,
2757
+ column: g,
2758
+ rows: /* @__PURE__ */ new Set(),
2759
+ all: 0,
2760
+ contrast: p
2761
+ };
2762
+ v.rows.add(h), v.all = a.filter((e) => e.getAttribute("data-series") === m).length, o.set(_, v);
2763
+ }
2764
+ }
2765
+ for (let { kind: n, column: r, rows: i, all: a, contrast: s } of o.values()) {
2766
+ let o = Array.from(i).filter(Boolean).map((e) => `"${e}"`), c = o.join(", "), l = o.length > 1, u = n === "Line" ? r ? `Line "${r}" has` : "The line has" : n === "Slice" ? `${l ? "Slices" : "Slice"} ${c} ${l ? "have" : "has"}` : i.size >= a || !c ? `The bars${r ? ` of column "${r}"` : ""} have` : `${l ? "Bars" : "Bar"} ${c}${r ? ` in column "${r}"` : ""} ${l ? "have" : "has"}`;
2767
+ console.warn(`[${e}] ${u} a contrast of ${(Math.floor(s * 100) / 100).toFixed(2)}:1 with the background. It needs at least ${Gn}:1 (WCAG 1.4.11).`, t);
2768
+ }
2769
+ }, qn = 4.5, Jn = 3, Yn = (t) => {
2770
+ let n = () => {
2771
+ let n = Array.from(t.querySelectorAll("tbody tr > :first-child")).map((e) => (e.textContent ?? "").trim()), r = /* @__PURE__ */ new Map();
2772
+ for (let e of t.querySelectorAll(".tablechart-value[data-place='inside'], .tablechart-value[data-place='middle']")) {
2773
+ if (e.hasAttribute("data-left-out") || e.hidden) continue;
2774
+ let i = e.dataset.row, a = Dt(t, e);
2775
+ if (!a) continue;
2776
+ let o = getComputedStyle(e), s = getComputedStyle(a).fill, c = Tt(Ct(o.color), Ct(s)), l = Number.parseFloat(o.fontSize), u = l >= 24 || l >= 18.66 && Number(o.fontWeight) >= 700 ? Jn : qn;
2777
+ if (c >= u) continue;
2778
+ let d = `${o.color}|${s}`, f = r.get(d) ?? {
2779
+ names: [],
2780
+ contrast: c,
2781
+ needed: u
2782
+ };
2783
+ f.names.push(`"${e.textContent?.trim()}" (${n[Number(i) - 1] ?? ""})`), r.set(d, f);
2784
+ }
2785
+ for (let { names: n, contrast: i, needed: a } of r.values()) console.warn(`[${e}] ${n.length > 1 ? "Numbers" : "Number"} ${n.join(", ")} inside ${n.length > 1 ? "their bars have" : "its bar has"} a contrast of ${(Math.floor(i * 100) / 100).toFixed(2)}:1 with the bar. Text needs at least ${a}:1 (WCAG 1.4.3).`, t);
2786
+ }, r = () => setTimeout(n, 3e3);
2787
+ if (t.classList.contains("is-shown")) return void r();
2788
+ let i = new MutationObserver(() => {
2789
+ t.classList.contains("is-shown") && (i.disconnect(), r());
2790
+ });
2791
+ i.observe(t, {
2792
+ attributes: !0,
2793
+ attributeFilter: ["class"]
2794
+ });
2795
+ }, Xn = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), Zn = /^\s*(?:Table)?:\s+/, Qn = (e) => e?.tagName === "P" && Zn.test(e.textContent ?? ""), $n = (e) => {
2662
2796
  let t = document.createElement("figcaption");
2663
2797
  for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
2664
2798
  let n = e.firstChild;
2665
- n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(Ln, ""), n.textContent || n.remove());
2799
+ n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(Zn, ""), n.textContent || n.remove());
2666
2800
  let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
2667
2801
  if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
2668
2802
  let e = document.createElement("span");
2669
2803
  e.append(...r.slice(i + 1)), t.append(e);
2670
2804
  }
2671
2805
  return e.remove(), t;
2672
- }, Bn = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Vn = (e) => {
2673
- let t = Yn(e);
2806
+ }, er = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, tr = (e) => {
2807
+ let t = lr(e);
2674
2808
  return t?.tagName === "P" ? t : e;
2675
- }, Hn = (e) => {
2676
- let t = Vn(e).firstChild;
2809
+ }, nr = (e) => {
2810
+ let t = tr(e).firstChild;
2677
2811
  if (t?.nodeType !== Node.TEXT_NODE) return null;
2678
- let n = Bn.exec(t.textContent ?? "");
2679
- if (!n || !nn.includes(n[1]) || !n[3] && t.nextSibling) return null;
2812
+ let n = er.exec(t.textContent ?? "");
2813
+ if (!n || !dn.includes(n[1]) || !n[3] && t.nextSibling) return null;
2680
2814
  let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
2681
2815
  return {
2682
2816
  name: n[1],
@@ -2684,11 +2818,11 @@ var Je = (e) => {
2684
2818
  text: t,
2685
2819
  length: n[0].length
2686
2820
  };
2687
- }, Un = (e) => {
2821
+ }, rr = (e) => {
2688
2822
  if (e?.tagName !== "UL" && e?.tagName !== "OL") return null;
2689
- let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : Hn(e));
2823
+ let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : nr(e));
2690
2824
  return !t.length || t.some((e, t) => !n[t] && !e.hasAttribute("data-annotation")) ? null : (t.forEach((e, t) => {
2691
- let r = n[t], i = Vn(e);
2825
+ let r = n[t], i = tr(e);
2692
2826
  if (i !== e && i.replaceWith(...i.childNodes), r) {
2693
2827
  e.setAttribute("data-annotation", r.name);
2694
2828
  for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
@@ -2699,18 +2833,18 @@ var Je = (e) => {
2699
2833
  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));
2700
2834
  });
2701
2835
  }), e.classList.add("chart-annotations"), e);
2702
- }, Wn = (e, t) => {
2703
- for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || In(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
2704
- }, Gn = (e) => e.map((e) => {
2705
- let t = e.closest("p"), n = Rn(t) ? t : e;
2836
+ }, ir = (e, t) => {
2837
+ for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || Xn(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
2838
+ }, ar = (e) => e.map((e) => {
2839
+ let t = e.closest("p"), n = Qn(t) ? t : e;
2706
2840
  if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
2707
2841
  let r = document.createElement("figure");
2708
- Wn(e, r), e.classList.length || e.removeAttribute("class");
2709
- let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? Rn(a) ? a : Rn(o) ? o : null : n;
2842
+ ir(e, r), e.classList.length || e.removeAttribute("class");
2843
+ let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? Qn(a) ? a : Qn(o) ? o : null : n;
2710
2844
  i && s === o && (o = o?.nextElementSibling ?? null);
2711
- let c = o?.classList.contains("chart-annotations") ? o : Un(o);
2712
- return n.replaceWith(r), s && r.append(zn(s)), i && r.append(i), c && r.append(c), Q?.log?.(`A ${i ? "table" : "caption"} with chart attributes was wrapped in a figure of its own`), r;
2713
- }), Kn = (e, t, n, r = document.createElement("table"), i = "Note") => {
2845
+ let c = o?.classList.contains("chart-annotations") ? o : rr(o);
2846
+ return n.replaceWith(r), s && r.append($n(s)), i && r.append(i), c && r.append(c), Q?.log?.(`A ${i ? "table" : "caption"} with chart attributes was wrapped in a figure of its own`), r;
2847
+ }), or = (e, t, n, r = document.createElement("table"), i = "Note") => {
2714
2848
  for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
2715
2849
  let a = e.some((e) => e.note);
2716
2850
  if (!r.tHead && (t.length || n || a)) {
@@ -2739,7 +2873,7 @@ var Je = (e) => {
2739
2873
  n.dataset.note = "", n.textContent = i, s.append(n);
2740
2874
  }
2741
2875
  return r;
2742
- }, qn = (e) => {
2876
+ }, sr = (e) => {
2743
2877
  if (!e || typeof e != "object") return;
2744
2878
  let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
2745
2879
  if (t.length && t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n))) return t.map(([e, t]) => Array.isArray(t) ? {
@@ -2749,16 +2883,16 @@ var Je = (e) => {
2749
2883
  label: e,
2750
2884
  value: t
2751
2885
  });
2752
- }, Jn = async (t) => {
2886
+ }, cr = async (t) => {
2753
2887
  await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
2754
2888
  let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
2755
2889
  for (let e of t.querySelectorAll("table")) e !== r && e.remove();
2756
2890
  try {
2757
2891
  let e = await fetch(n);
2758
2892
  if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
2759
- let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : qn(i.rows) : qn(i);
2893
+ let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : sr(i.rows) : sr(i);
2760
2894
  if (!Array.isArray(a)) throw Error("no rows in it: a list of rows, an object with rows, or names with their values");
2761
- let o = Kn(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);
2895
+ let o = or(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);
2762
2896
  if (!r) {
2763
2897
  let e = t.querySelector(":scope > figcaption");
2764
2898
  e ? e.after(o) : t.prepend(o);
@@ -2769,10 +2903,10 @@ var Je = (e) => {
2769
2903
  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." : ""));
2770
2904
  }
2771
2905
  }));
2772
- }, Yn = (e) => {
2906
+ }, lr = (e) => {
2773
2907
  let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
2774
2908
  return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
2775
- }, Xn = "strong, b, span.total", Zn = (e) => {
2909
+ }, ur = "strong, b, span.total", dr = (e) => {
2776
2910
  for (let t of e) {
2777
2911
  for (let e of t.querySelectorAll("tbody tr")) {
2778
2912
  let t = e.cells[0];
@@ -2780,16 +2914,16 @@ var Je = (e) => {
2780
2914
  let n = document.createElement("th");
2781
2915
  for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
2782
2916
  n.append(...t.childNodes), t.replaceWith(n);
2783
- for (let t = Yn(n); t?.matches(Xn); t = Yn(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
2917
+ for (let t = lr(n); t?.matches(ur); t = lr(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
2784
2918
  }
2785
2919
  let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
2786
- for (let t of e.slice(1)) for (let e = Yn(t); e?.matches(Xn); e = Yn(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
2920
+ for (let t of e.slice(1)) for (let e = lr(t); e?.matches(ur); e = lr(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
2787
2921
  }
2788
- }, Qn = "data-chart-made", $n = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, er = (e) => new Promise((t) => setTimeout(t, e)), tr = (e, t) => {
2922
+ }, fr = "data-chart-made", pr = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, mr = (e) => new Promise((t) => setTimeout(t, e)), hr = (e, t) => {
2789
2923
  let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
2790
2924
  return Math.min(Math.max(r, 0), 1);
2791
- }, nr = async (e, t) => {
2792
- if ($n()) return;
2925
+ }, gr = async (e, t) => {
2926
+ if (pr()) return;
2793
2927
  await new Promise(requestAnimationFrame);
2794
2928
  let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
2795
2929
  for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
@@ -2800,11 +2934,11 @@ var Je = (e) => {
2800
2934
  let a = Number(n.delay ?? 0) + i * t;
2801
2935
  r = Math.max(r, a - Number(e.currentTime ?? 0));
2802
2936
  }
2803
- r > 0 && await er(r);
2804
- }, rr = (e) => {
2937
+ r > 0 && await mr(r);
2938
+ }, _r = (e) => {
2805
2939
  for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
2806
2940
  return null;
2807
- }, ir = (e) => new Promise((t) => {
2941
+ }, vr = (e) => new Promise((t) => {
2808
2942
  let n = ["animationstart", "transitionrun"], r = () => {
2809
2943
  for (let e of n) document.removeEventListener(e, i, !0);
2810
2944
  a.disconnect(), t();
@@ -2818,41 +2952,41 @@ var Je = (e) => {
2818
2952
  attributes: !0,
2819
2953
  attributeFilter: ["class", "style"]
2820
2954
  });
2821
- }), ar = /* @__PURE__ */ new Set(), or = null, sr = (e) => {
2822
- ar.add(e), !or && (or = new MutationObserver(() => {
2823
- for (let e of ar) e.relabel();
2955
+ }), yr = /* @__PURE__ */ new Set(), br = null, xr = (e) => {
2956
+ yr.add(e), !br && (br = new MutationObserver(() => {
2957
+ for (let e of yr) e.relabel();
2824
2958
  requestAnimationFrame(() => requestAnimationFrame(() => {
2825
- for (let e of ar) e.refresh();
2959
+ for (let e of yr) e.refresh();
2826
2960
  }));
2827
- }), or.observe(document.documentElement, {
2961
+ }), br.observe(document.documentElement, {
2828
2962
  attributes: !0,
2829
2963
  attributeFilter: ["lang"]
2830
2964
  }));
2831
- }, cr = (e) => {
2832
- ar.delete(e), !ar.size && or && (or.disconnect(), or = null);
2833
- }, lr = ["column", "bar"], ur = (e) => {
2965
+ }, Sr = (e) => {
2966
+ yr.delete(e), !yr.size && br && (br.disconnect(), br = null);
2967
+ }, Cr = ["column", "bar"], wr = (e) => {
2834
2968
  let t = e.getAttribute("data-chart") || "column";
2835
- if (!lr.includes(t)) return null;
2969
+ if (!Cr.includes(t)) return null;
2836
2970
  let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
2837
- return lr.includes(n) ? n : t;
2838
- }, dr = (e, t) => {
2839
- let n = e, r = ur(n.figure), i = null, a = !1, o = !1, s = async () => {
2840
- if (!dn(n.figure, t)) return Mn(n, !0);
2971
+ return Cr.includes(n) ? n : t;
2972
+ }, Tr = (e, t) => {
2973
+ let n = e, r = wr(n.figure), i = null, a = !1, o = !1, s = async () => {
2974
+ if (!yn(n.figure, t)) return Vn(n, !0);
2841
2975
  let e = n.figure.classList.contains("is-shown");
2842
2976
  if (a && i !== null && !e && !o) {
2843
2977
  o = !0;
2844
- let e = $n() ? null : rr(n.figure);
2845
- e && await ir(e), await nr(n.figure, tr(n.figure, t)), o = !1, (a || !t.replay) && Mn(n, !0);
2846
- } else !a && t.replay && e && Mn(n, !1);
2978
+ let e = pr() ? null : _r(n.figure);
2979
+ e && await vr(e), await gr(n.figure, hr(n.figure, t)), o = !1, (a || !t.replay) && Vn(n, !0);
2980
+ } else !a && t.replay && e && Vn(n, !1);
2847
2981
  }, c = () => {
2848
- let e = ur(n.figure);
2982
+ let e = wr(n.figure);
2849
2983
  if (!e || e === r) return;
2850
- let a = Q.timed("Building", n.figure, () => _n(n.figure, t, e));
2851
- a && (jn(n), Tt(a, n.step, !0), n = a, r = e, i = null);
2984
+ let a = Q.timed("Building", n.figure, () => Tn(n.figure, t, e));
2985
+ a && (Bn(n), Nt(a, n.step, !0), n = a, r = e, i = null);
2852
2986
  }, l = () => {
2853
2987
  c();
2854
2988
  let e = n.plot.clientWidth;
2855
- e && e !== i && Q.timed("Layout", n.figure, () => On(n, t)) && (i = e, s());
2989
+ e && e !== i && Q.timed("Layout", n.figure, () => Ln(n, t)) && (Q.enabled && !i && (Kn(n.figure), Yn(n.figure)), i = e, s());
2856
2990
  }, u = !1, d = new ResizeObserver(() => {
2857
2991
  u || (u = !0, requestAnimationFrame(() => {
2858
2992
  u = !1, l();
@@ -2860,20 +2994,20 @@ var Je = (e) => {
2860
2994
  }), f = new IntersectionObserver((e) => {
2861
2995
  for (let t of e) a = t.isIntersecting, s();
2862
2996
  }, { threshold: t.threshold }), p = () => {
2863
- n.figure.classList.add(x), Mn(n, !0), Fn(n.svg), n.figure.offsetWidth;
2997
+ n.figure.classList.add(x), Vn(n, !0), Wn(n.svg), n.figure.offsetWidth;
2864
2998
  }, m = () => n.figure.classList.remove(x), h = () => {
2865
2999
  i = null, l();
2866
3000
  }, g = {
2867
- relabel: () => kn(n, t),
3001
+ relabel: () => Rn(n, t),
2868
3002
  refresh: h
2869
3003
  };
2870
- c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), window.addEventListener("afterprint", m), sr(g);
3004
+ c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), window.addEventListener("afterprint", m), xr(g);
2871
3005
  let _ = {
2872
3006
  figure: n.figure,
2873
3007
  refresh: h,
2874
- next: () => Tt(n, n.step + 1),
2875
- previous: () => Tt(n, n.step - 1),
2876
- stepTo: (e) => Tt(n, e),
3008
+ next: () => Nt(n, n.step + 1),
3009
+ previous: () => Nt(n, n.step - 1),
3010
+ stepTo: (e) => Nt(n, e),
2877
3011
  get step() {
2878
3012
  return n.step;
2879
3013
  },
@@ -2881,37 +3015,41 @@ var Je = (e) => {
2881
3015
  return n.plan?.count ?? 0;
2882
3016
  },
2883
3017
  destroy() {
2884
- d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), window.removeEventListener("afterprint", m), cr(g), Qt(n), n.figure.tablechart === _ && delete n.figure.tablechart;
3018
+ d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), window.removeEventListener("afterprint", m), Sr(g), sn(n), n.figure.tablechart === _ && delete n.figure.tablechart;
2885
3019
  }
2886
3020
  };
2887
3021
  return n.figure.tablechart = _, _;
2888
- }, fr = !1, pr = (t) => {
3022
+ }, Er = !1, Dr = (t) => {
2889
3023
  let n = t.find((e) => e.tagName !== "FIGURE");
2890
- !fr && n && (fr = !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));
2891
- }, mr = async (e, t) => {
2892
- let n = Gn(e.filter((e) => !e.hasAttribute(Qn) && e.tagName !== "TH"));
2893
- pr(n), await Jn(n), Zn(n), pt(n, t.langattribute);
3024
+ !Er && n && (Er = !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));
3025
+ }, Or = async (e, t) => {
3026
+ let n = ar(e.filter((e) => !e.hasAttribute(fr) && e.tagName !== "TH"));
3027
+ Dr(n), await cr(n), dr(n), mt(n, t.langattribute);
2894
3028
  for (let e of n) e.dispatchEvent(new CustomEvent("tablechart:table", { bubbles: !0 }));
2895
3029
  return n;
2896
- }, hr = (e, t) => {
2897
- let n = Q.timed("Building", e, () => _n(e, t));
2898
- return n ? (e.setAttribute(Qn, ""), dr(n, t)) : null;
2899
- }, gr = async (e, t = {}) => {
3030
+ }, kr = (e, t) => {
3031
+ let n = Q.timed("Building", e, () => Tn(e, t));
3032
+ return n ? (e.setAttribute(fr, ""), jr(), Tr(n, t)) : null;
3033
+ }, Ar = !1, jr = () => {
3034
+ Ar || typeof matchMedia != "function" || (Ar = !0, matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
3035
+ for (let e of document.querySelectorAll(`[${fr}]`)) Ot(e);
3036
+ }));
3037
+ }, Mr = async (e, t = {}) => {
2900
3038
  if (e.tablechart) return e.tablechart;
2901
3039
  let n = {
2902
3040
  ...O,
2903
3041
  ...t
2904
3042
  };
2905
3043
  n.debug && (Q.enabled = !0);
2906
- let [r] = await mr([e], n);
2907
- return r ? hr(r, n) : null;
2908
- }, _r = async (e = {}, t = document) => {
3044
+ let [r] = await Or([e], n);
3045
+ return r ? kr(r, n) : null;
3046
+ }, Nr = async (e = {}, t = document) => {
2909
3047
  let n = {
2910
3048
  ...O,
2911
3049
  ...e
2912
3050
  };
2913
3051
  n.debug && (Q.enabled = !0);
2914
- let r = (await mr(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => hr(e, n)).filter((e) => e !== null);
3052
+ let r = (await Or(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => kr(e, n)).filter((e) => e !== null);
2915
3053
  return Q.log(`Made ${r.length} chart(s).`), {
2916
3054
  charts: r,
2917
3055
  refresh: () => {
@@ -2922,4 +3060,4 @@ var Je = (e) => {
2922
3060
  }
2923
3061
  };
2924
3062
  };
2925
- export { N as A, x as B, de as C, ie as D, W as E, e as F, O as G, C as H, f as I, v as L, S as M, E as N, I as O, p as P, t as R, J as S, re as T, b as U, s as V, D as W, lt as _, Gn as a, Ue as b, en as c, kn as d, Mn as f, ft as g, pt as h, mr as i, P as j, L as k, _n as l, Tt as m, tr as n, Jn as o, jn as p, _r as r, Zn as s, gr as t, On as u, Ze as v, le as w, Y as x, Qe as y, m as z };
3063
+ export { N as A, x as B, de as C, K as D, W as E, e as F, O as G, C as H, f as I, v as L, S as M, E as N, I as O, p as P, t as R, J as S, re as T, b as U, s as V, D as W, ut as _, ar as a, We as b, ln as c, Rn as d, Vn as f, pt as g, mt as h, Or as i, P as j, L as k, Tn as l, Nt as m, hr as n, cr as o, Bn as p, Nr as r, dr as s, Mr as t, Ln as u, Qe as v, le as w, xe as x, $e as y, m as z };