@martinomagnifico/tablechart 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  // src/js/config.ts
2
- var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablechart-bar", i = "tablechart-rule", a = "tablechart-line", o = "tablechart-reference", s = "tablechart-quadrant", c = "tablechart-head", l = "tablechart-slice", u = "tablechart-series", d = "tablechart-area", f = "tablechart-name", p = "tablechart-legend", m = "tablechart-point", h = "tablechart-hole", g = "tablechart-centre", _ = "tablechart-break", v = "is-placed", y = "tablechart-sr", b = "is-shown", x = "is-printing", S = "is-at-once", C = "tablechart-queued", w = "tablechart-axis", T = "tablechart-tick", E = "tablechart-grid", D = 1e3, O = {
2
+ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablechart-bar", i = "tablechart-rule", a = "tablechart-line", o = "tablechart-reference", s = "tablechart-quadrant", c = "tablechart-head", l = "tablechart-slice", u = "tablechart-series", d = "tablechart-area", f = "tablechart-name", p = "tablechart-legend", m = "tablechart-point", h = "tablechart-hole", g = "tablechart-centre", _ = "tablechart-break", v = "is-placed", y = "tablechart-sr", b = "is-shown", x = "is-printing", S = "is-at-once", C = "is-built", w = "tablechart-queued", T = "tablechart-axis", E = "tablechart-tick", D = "tablechart-grid", O = 1e3, k = {
3
3
  selector: "[data-chart]",
4
4
  aspect: .38,
5
5
  barfill: .58,
@@ -18,6 +18,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
18
18
  tooltipparent: null,
19
19
  table: "never",
20
20
  tablelimit: 15,
21
+ lines: null,
21
22
  summary: "auto",
22
23
  totallabel: "Total",
23
24
  controls: !0,
@@ -27,33 +28,33 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
27
28
  threshold: .5,
28
29
  replay: !1,
29
30
  langattribute: "data-i18n"
30
- }, k = "cubic-bezier(0.3, 0.3, 0.6, 1)", A = (e, t, n = 1) => ({
31
+ }, A = "cubic-bezier(0.3, 0.3, 0.6, 1)", j = (e, t, n = 1) => ({
31
32
  start: e,
32
33
  span: t,
33
- easing: e + t >= n - 1e-4 ? k : "linear"
34
- }), j = (e, t) => `${e}:${t}`, M = "http://www.w3.org/2000/svg", N = (e) => Math.round(e * 100) / 100, P = (e, t = {}) => {
35
- let n = document.createElementNS(M, e);
34
+ easing: e + t >= n - 1e-4 ? A : "linear"
35
+ }), M = (e, t) => `${e}:${t}`, N = "http://www.w3.org/2000/svg", P = (e) => Math.round(e * 100) / 100, F = (e, t = {}) => {
36
+ let n = document.createElementNS(N, e);
36
37
  for (let e in t) {
37
38
  let r = t[e];
38
- n.setAttribute(e, String(typeof r == "number" ? N(r) : r));
39
+ n.setAttribute(e, String(typeof r == "number" ? P(r) : r));
39
40
  }
40
41
  return n;
41
- }, F = (e, t) => [e, ...t.classes].join(" "), I = (e, t) => {
42
+ }, I = (e, t) => [e, ...t.classes].join(" "), L = (e, t) => {
42
43
  let n = document.createElement("span");
43
44
  return n.className = e, n.inert = !0, t.appendChild(n), n;
44
- }, L = (e, t, n, r, i) => {
45
+ }, R = (e, t, n, r, i) => {
45
46
  e.style.left = `${t / r * 100}%`, e.style.top = `${n / i * 100}%`;
46
- }, R = 0, z = 0, B = (e) => {
47
+ }, z = 0, B = 0, V = (e) => {
47
48
  let t = e.querySelector(":scope > defs");
48
- return t || (t = P("defs"), e.prepend(t)), t;
49
- }, V = (e) => {
49
+ return t || (t = F("defs"), e.prepend(t)), t;
50
+ }, ee = (e) => {
50
51
  if (e.tagName === "circle") {
51
52
  let [t, n, r] = [
52
53
  "cx",
53
54
  "cy",
54
55
  "r"
55
56
  ].map((t) => Number(e.getAttribute(t)) || 0);
56
- return `M${N(t - r)},${N(n)}a${N(r)},${N(r)} 0 1 0 ${N(2 * r)},0a${N(r)},${N(r)} 0 1 0 ${N(-2 * r)},0z`;
57
+ return `M${P(t - r)},${P(n)}a${P(r)},${P(r)} 0 1 0 ${P(2 * r)},0a${P(r)},${P(r)} 0 1 0 ${P(-2 * r)},0z`;
57
58
  }
58
59
  if (e.tagName === "polygon") return `M${(e.getAttribute("points") ?? "").trim().split(/\s+/).join("L")}z`;
59
60
  let [t, n, r, i, a, o] = [
@@ -63,26 +64,26 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
63
64
  "height",
64
65
  "rx",
65
66
  "ry"
66
- ].map((t) => Number(e.getAttribute(t)) || 0), s = Math.min(a, r / 2), c = Math.min(o, i / 2), l = (e, t) => s && c ? `a${N(s)},${N(c)} 0 0 1 ${N(e)},${N(t)}` : "";
67
- return `M${N(t + s)},${N(n)}h${N(r - 2 * s)}${l(s, c)}v${N(i - 2 * c)}${l(-s, c)}h${N(2 * s - r)}${l(-s, -c)}v${N(2 * c - i)}${l(s, -c)}z`;
67
+ ].map((t) => Number(e.getAttribute(t)) || 0), s = Math.min(a, r / 2), c = Math.min(o, i / 2), l = (e, t) => s && c ? `a${P(s)},${P(c)} 0 0 1 ${P(e)},${P(t)}` : "";
68
+ return `M${P(t + s)},${P(n)}h${P(r - 2 * s)}${l(s, c)}v${P(i - 2 * c)}${l(-s, c)}h${P(2 * s - r)}${l(-s, -c)}v${P(2 * c - i)}${l(s, -c)}z`;
68
69
  }, H = (e, t, n, r, i) => {
69
70
  if (!t.length || !i.length) return;
70
- let a = `tablechart-clip-${++z}`, o = P("clipPath", {
71
+ let a = `tablechart-clip-${++B}`, o = F("clipPath", {
71
72
  id: a,
72
73
  clipPathUnits: "userSpaceOnUse"
73
74
  }), s = `M${-n},${-r}h${n * 3}v${r * 3}h${-n * 3}z`;
74
- o.appendChild(P("path", {
75
- d: s + t.map(V).join(""),
75
+ o.appendChild(F("path", {
76
+ d: s + t.map(ee).join(""),
76
77
  "clip-rule": "evenodd"
77
- })), B(e).appendChild(o);
78
+ })), V(e).appendChild(o);
78
79
  for (let e of i) e.setAttribute("clip-path", `url(#${a})`);
79
80
  }, U = (e, t, n, r, i, a) => {
80
81
  if (!t.length) return;
81
- let o = `tablechart-cut-${++R}`, s = P("mask", {
82
+ let o = `tablechart-cut-${++z}`, s = F("mask", {
82
83
  id: o,
83
84
  maskUnits: "userSpaceOnUse"
84
85
  });
85
- s.appendChild(P("rect", {
86
+ s.appendChild(F("rect", {
86
87
  x: -n,
87
88
  y: -r,
88
89
  width: n * 3,
@@ -90,14 +91,14 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
90
91
  fill: "white"
91
92
  }));
92
93
  for (let e of t) e.setAttribute("fill", "black"), s.appendChild(e);
93
- let c = B(e);
94
+ let c = V(e);
94
95
  if (c.appendChild(s), i) {
95
96
  for (let e of i) e.setAttribute("mask", `url(#${o})`);
96
97
  return;
97
98
  }
98
99
  let l = null;
99
- for (let t of Array.from(e.childNodes)) t !== c && (a && t instanceof Element && t.matches(a) ? (l = null, e.appendChild(t)) : (l ?? (l = e.appendChild(P("g", { mask: `url(#${o})` }))), l.appendChild(t)));
100
- }, ee = 0, te = (e) => Array.from(e.querySelectorAll(`.${r}`)).map((e) => {
100
+ for (let t of Array.from(e.childNodes)) t !== c && (a && t instanceof Element && t.matches(a) ? (l = null, e.appendChild(t)) : (l ?? (l = e.appendChild(F("g", { mask: `url(#${o})` }))), l.appendChild(t)));
101
+ }, te = 0, ne = (e) => Array.from(e.querySelectorAll(`.${r}`)).map((e) => {
101
102
  let t = e.tagName === "rect" ? [e] : Array.from(e.querySelectorAll("rect")), n = (e, t) => Number(e.getAttribute(t)), r = Math.min(...t.map((e) => n(e, "x"))), i = Math.min(...t.map((e) => n(e, "y"))), a = Math.max(...t.map((e) => n(e, "x") + n(e, "width"))), o = Math.max(...t.map((e) => n(e, "y") + n(e, "height"))), s = ["--start", "--span"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ");
102
103
  return {
103
104
  row: Number(e.dataset.row),
@@ -108,7 +109,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
108
109
  sideways: e.dataset.grow === "right",
109
110
  part: s
110
111
  };
111
- }), ne = {
112
+ }), re = {
112
113
  create: () => null,
113
114
  draw(e, t, n) {
114
115
  let { rows: r, y: i, svg: a, breakAt: o } = n;
@@ -135,28 +136,28 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
135
136
  [c + 2 * l, t + o],
136
137
  [c + i, t - o]
137
138
  ];
138
- }, l = (e, t = !1) => e.map(([e, t], n) => `${n === 0 ? "M" : "L"} ${e.toFixed(1)} ${t.toFixed(1)}`).join(" ") + (t ? " Z" : ""), u = `tablechart-break-${++ee}`, d = P("mask", {
139
+ }, l = (e, t = !1) => e.map(([e, t], n) => `${n === 0 ? "M" : "L"} ${e.toFixed(1)} ${t.toFixed(1)}`).join(" ") + (t ? " Z" : ""), u = `tablechart-break-${++te}`, d = F("mask", {
139
140
  id: u,
140
141
  maskUnits: "userSpaceOnUse"
141
142
  });
142
- d.appendChild(P("rect", {
143
- x: -D,
143
+ d.appendChild(F("rect", {
144
+ x: -O,
144
145
  y: -n.height,
145
- width: D * 3,
146
+ width: O * 3,
146
147
  height: n.height * 3,
147
148
  fill: "white"
148
149
  }));
149
150
  let f = [], p = i(o);
150
- for (let e of te(a)) {
151
+ for (let e of ne(a)) {
151
152
  let t = e.sideways ? n.breakX : p;
152
153
  if (t === void 0 || !(e.sideways ? e.x < t && e.x + e.width > t : e.y < p && e.y + e.height > p)) continue;
153
154
  let [i, o] = e.sideways ? [c(e, t), c(e, t + n.breakGap)] : [c(e, p - n.breakGap), c(e, p)];
154
- d.appendChild(P("path", {
155
+ d.appendChild(F("path", {
155
156
  d: l([...i, ...o.slice().reverse()], !0),
156
157
  fill: "black"
157
158
  })), f.push(i, o);
158
- let s = [j("--after", r[e.row - 1]?.slot ?? 0), e.part].filter(Boolean).join("; ");
159
- for (let e of [i, o]) a.appendChild(P("path", {
159
+ let s = [M("--after", r[e.row - 1]?.slot ?? 0), e.part].filter(Boolean).join("; ");
160
+ for (let e of [i, o]) a.appendChild(F("path", {
160
161
  class: _,
161
162
  "data-part": "edge",
162
163
  "data-note": n.note,
@@ -165,22 +166,22 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
165
166
  }));
166
167
  }
167
168
  if (!f.length) return;
168
- let m = Array.from(a.querySelectorAll(`.${_}`)), h = P("g", { mask: `url(#${u})` });
169
+ let m = Array.from(a.querySelectorAll(`.${_}`)), h = F("g", { mask: `url(#${u})` });
169
170
  for (let e of Array.from(a.childNodes)) m.includes(e) || h.appendChild(e);
170
- let g = P("defs");
171
+ let g = F("defs");
171
172
  g.appendChild(d), a.prepend(g, h);
172
173
  }
173
174
  }, W = (e) => {
174
175
  let t = -Infinity;
175
176
  for (let n of e) t = Math.max(t, n);
176
177
  return t;
177
- }, re = (e) => (e.split(/[.,]/)[1] || "").length, G = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
178
+ }, ie = (e) => (e.split(/[.,]/)[1] || "").length, G = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
178
179
  minimumFractionDigits: e,
179
180
  maximumFractionDigits: e
180
- }), K = (e, t, n) => {
181
+ }), ae = (e, t, n) => {
181
182
  let r = G(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
182
183
  return [i, r.slice(+!!i).map((e) => e.value).join("")];
183
- }, ie = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), q = (e, t) => {
184
+ }, K = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), oe = (e, t) => {
184
185
  let n = document.createElement("span");
185
186
  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
187
  else {
@@ -189,44 +190,44 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
189
190
  t && n.setAttribute("data-i18n", t);
190
191
  }
191
192
  return t.appendChild(n), n;
192
- }, ae = (t, n, r, i, a = "%") => {
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 = {
193
+ }, se = (t, n, r, i, a = "%") => {
194
+ let o = t?.textContent || "", s = K(o), c = a ? .5 : .5 * 10 ** -ie(o.match(/-?[\d.,]+/)?.[0] ?? ""), l = Number.isNaN(s) ? !0 : Math.abs(n - s) <= c + 1e-9, u = {
194
195
  label: r,
195
196
  computed: n,
196
197
  stated: s,
197
198
  agrees: l
198
199
  };
199
200
  i.checks.push(u), l || console.warn(`[${e}] An annotation reads ${s}${a}, but ${r} is ${Number(n.toFixed(2))}${a}. The chart shows your number.`);
200
- }, oe = (e, t) => (t - e) / Math.abs(e) * 100, se = (e, t) => {
201
+ }, ce = (e, t) => (t - e) / Math.abs(e) * 100, le = (e, t) => {
201
202
  let n = (t, n) => {
202
203
  let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
203
204
  return Number.isFinite(r) ? r - 1 : n;
204
205
  };
205
206
  return [n("data-from", 0), n("data-to", t - 1)];
206
- }, ce = {
207
- create: q,
207
+ }, ue = {
208
+ create: oe,
208
209
  draw(t, n, r) {
209
- let { rows: i, cx: o, y: s, unit: l, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = se(t, i.length), _ = i[h], v = i[g];
210
+ let { rows: i, cx: o, y: s, unit: l, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = le(t, i.length), _ = i[h], v = i[g];
210
211
  if (!_ || !v) {
211
212
  console.warn(`[${e}] A bracket points at a row that is not there (row ${h + 1} to ${g + 1}, of ${i.length}).`);
212
213
  return;
213
214
  }
214
215
  let y = 7 * l, b = 4 * l, x = o(h), S = o(g), C = Math.min(s(_.value), s(v.value)) - u - b - d * .9, w = (e) => s(e) - u - b, T = `M ${x} ${w(_.value)} L ${x} ${C} L ${S} ${C} L ${S} ${w(v.value) - y}`, E = (w(_.value) - C + Math.abs(S - x) + (w(v.value) - y - C)) / l + 1;
215
- p.appendChild(P("path", {
216
+ p.appendChild(F("path", {
216
217
  class: a,
217
218
  "data-note": r.note,
218
219
  d: T,
219
- style: `--len:${E.toFixed(1)}; ${j("--after", m)}`
220
+ style: `--len:${E.toFixed(1)}; ${M("--after", m)}`
220
221
  }));
221
- let O = w(v.value);
222
- p.appendChild(P("polygon", {
222
+ let D = w(v.value);
223
+ p.appendChild(F("polygon", {
223
224
  class: c,
224
225
  "data-note": r.note,
225
- points: `${S},${O} ${S - y * .45},${O - y} ${S + y * .45},${O - y}`,
226
- style: j("--after", m)
227
- })), n && (L(n, (x + S) / 2, C, D, f), n.style.setProperty("--after", String(m))), ae(n, oe(_.value, v.value), `${_.value} to ${v.value}`, r);
226
+ points: `${S},${D} ${S - y * .45},${D - y} ${S + y * .45},${D - y}`,
227
+ style: M("--after", m)
228
+ })), n && (R(n, (x + S) / 2, C, O, f), n.style.setProperty("--after", String(m))), se(n, ce(_.value, v.value), `${_.value} to ${v.value}`, r);
228
229
  }
229
- }, le = (e, t) => e[0] < t[0] + t[2] && t[0] < e[0] + e[2] && e[1] < t[1] + t[3] && t[1] < e[1] + e[3], ue = (e, t) => e[0] >= t[0] && e[1] >= t[1] && e[0] + e[2] <= t[0] + t[2] && e[1] + e[3] <= t[1] + t[3], de = (e, t, n) => {
230
+ }, de = (e, t) => e[0] < t[0] + t[2] && t[0] < e[0] + e[2] && e[1] < t[1] + t[3] && t[1] < e[1] + e[3], fe = (e, t) => e[0] >= t[0] && e[1] >= t[1] && e[0] + e[2] <= t[0] + t[2] && e[1] + e[3] <= t[1] + t[3], pe = (e, t, n) => {
230
231
  if (e.length > 400) return e.map(() => null);
231
232
  let r = 1;
232
233
  for (let t of e) for (let [, , e, n] of t) r = Math.max(r, e, n);
@@ -236,21 +237,21 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
236
237
  return a;
237
238
  }, o = (e) => {
238
239
  for (let t of a(e)) i.get(t)?.push(e) ?? i.set(t, [e]);
239
- }, s = (e) => ue(e, n) && a(e).every((t) => !i.get(t)?.some((t) => le(e, t)));
240
+ }, s = (e) => fe(e, n) && a(e).every((t) => !i.get(t)?.some((t) => de(e, t)));
240
241
  return t.forEach(o), e.map((e) => {
241
242
  let t = e.findIndex(s);
242
243
  return t < 0 ? null : (o(e[t]), t);
243
244
  });
244
- }, fe = /* @__PURE__ */ new WeakMap(), pe = (e) => {
245
+ }, me = /* @__PURE__ */ new WeakMap(), he = (e) => {
245
246
  let t = [...e].filter((e) => !!e), n = t.map((e) => ({
246
247
  width: e.offsetWidth,
247
248
  height: e.offsetHeight
248
249
  }));
249
- t.forEach((e, t) => fe.set(e, n[t]));
250
- }, J = (e) => fe.get(e) ?? {
250
+ t.forEach((e, t) => me.set(e, n[t]));
251
+ }, q = (e) => me.get(e) ?? {
251
252
  width: e.offsetWidth,
252
253
  height: e.offsetHeight
253
- }, me = 6, he = (e, t, n) => e.some((e) => J(e).width * n > t - me * n), ge = (e, t, n) => t >= J(e).height * n * 1.6, _e = (e, t, n) => t >= J(e).width * n * 1.5, ve = (e, t, n, r, i = .7) => {
254
+ }, ge = 6, _e = (e, t, n) => e.some((e) => q(e).width * n > t - ge * n), ve = (e, t, n) => t >= q(e).height * n * 1.6, ye = (e, t, n) => t >= q(e).width * n * 1.5, be = (e, t, n, r, i = .7) => {
254
255
  e.style.setProperty(r, "1");
255
256
  let a = 1;
256
257
  for (let e of t) {
@@ -259,42 +260,55 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
259
260
  }
260
261
  let o = a >= i ? a : 0;
261
262
  return e.style.setProperty(r, String(o || i)), o;
262
- }, ye = (e, t) => (e.sort((e, t) => e.y - t.y), e.forEach((n, r) => {
263
- let i = e[r - 1];
264
- i && n.y < i.y + t && (n.y = i.y + t);
265
- }), e), be = {
263
+ }, xe = (e, t) => {
264
+ e.sort((e, t) => e.y - t.y);
265
+ let n = [], r = (e) => e.sum / e.items.length - (e.items.length - 1) * t / 2;
266
+ for (let i of e) {
267
+ let e = {
268
+ items: [i],
269
+ sum: i.y
270
+ };
271
+ for (let i = n.at(-1); i && r(i) + i.items.length * t > r(e); i = n.at(-1)) n.pop(), e = {
272
+ items: [...i.items, ...e.items],
273
+ sum: i.sum + e.sum
274
+ };
275
+ n.push(e);
276
+ }
277
+ for (let e of n) e.items.forEach((n, i) => n.y = r(e) + i * t);
278
+ return e;
279
+ }, Se = {
266
280
  outside: [.5, 1],
267
281
  below: [.5, 0],
268
282
  after: [0, .5],
269
283
  before: [1, .5]
270
- }, xe = (e, t, n, r, i = [.5, .5]) => {
271
- let [a, o] = be[e.dataset.place ?? ""] ?? i, { width: s, height: c } = J(e);
284
+ }, J = (e, t, n, r, i = [.5, .5]) => {
285
+ let [a, o] = Se[e.dataset.place ?? ""] ?? i, { width: s, height: c } = q(e);
272
286
  return [
273
287
  Number.parseFloat(e.style.left) / 100 * n - s * t * a,
274
288
  Number.parseFloat(e.style.top) / 100 * r - c * t * o,
275
289
  s * t,
276
290
  c * t
277
291
  ];
278
- }, Se = (e, t, n) => {
292
+ }, Ce = (e, t, n) => {
279
293
  for (let r of e) {
280
294
  if (r.dataset.place === "none" || !r.style.left) continue;
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));
295
+ let [e] = Se[r.dataset.place ?? ""] ?? [.5, .5], i = q(r).width * t, a = Number.parseFloat(r.style.left) / 100 * n, o = Math.min(Math.max(a, i * e), n - i * (1 - e));
282
296
  o !== a && (r.style.left = `${o / n * 100}%`);
283
297
  }
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);
298
+ }, we = (e, t, n, r) => {
299
+ let i = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), a = Te(i, t, n, r);
286
300
  i.forEach((e, t) => {
287
301
  t % a && e.setAttribute("data-left-out", "");
288
302
  });
289
- }, Y = (e, t, n, r) => {
303
+ }, Te = (e, t, n, r) => {
290
304
  if (e.length < 2) return 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;
305
+ let i = e.map((e) => J(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
306
  for (; s < e.length && i.some((e, t) => t >= s && t % s === 0 && !o(i[t - s], e));) s++;
293
307
  return s;
294
- }, we = {
308
+ }, Ee = {
295
309
  create(e, t) {
296
310
  if (!e.textContent?.trim()) return null;
297
- let n = q(e, t);
311
+ let n = oe(e, t);
298
312
  return n.dataset.kind = "note", n;
299
313
  },
300
314
  draw(t, n, r) {
@@ -309,7 +323,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
309
323
  return;
310
324
  }
311
325
  let g = a(h), _ = s(0);
312
- if (u.insertBefore(P("line", {
326
+ if (u.insertBefore(F("line", {
313
327
  class: o,
314
328
  "data-kind": "note",
315
329
  "data-note": r.note,
@@ -317,11 +331,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
317
331
  x2: g,
318
332
  y1: 0,
319
333
  y2: _,
320
- style: j("--after", d)
334
+ style: M("--after", d)
321
335
  }), u.querySelector(`:scope > .${m}`)), !n) return;
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") ? [] : [{
336
+ let v = q(n).width * l, y = q(n).height * l, b = 4 * l, x = f.flat().flatMap((e) => !e.style.left || e.dataset.place === "none" || e.hasAttribute("data-left-out") ? [] : [{
323
337
  label: e,
324
- box: xe(e, l, D, c)
338
+ box: J(e, l, O, c)
325
339
  }]), S = [0, y + b / 2].flatMap((e) => [
326
340
  [
327
341
  g - v / 2,
@@ -341,15 +355,15 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
341
355
  v,
342
356
  y
343
357
  ]
344
- ]), [C] = de([S], [...r.taken, ...x.map((e) => e.box)], [
358
+ ]), [C] = pe([S], [...r.taken, ...x.map((e) => e.box)], [
345
359
  0,
346
360
  0,
347
- D,
361
+ O,
348
362
  c
349
363
  ]), w = S[C ?? 0];
350
- if (r.taken.push(w), L(n, w[0] + v / 2, w[1] + y / 2, D, c), n.style.setProperty("--after", String(d)), C === null) for (let e of x) le(e.box, w) && e.label.setAttribute("data-left-out", "");
364
+ if (r.taken.push(w), R(n, w[0] + v / 2, w[1] + y / 2, O, c), n.style.setProperty("--after", String(d)), C === null) for (let e of x) de(e.box, w) && e.label.setAttribute("data-left-out", "");
351
365
  }
352
- }, Te = (e, t, n) => {
366
+ }, De = (e, t, n) => {
353
367
  let r = n.reduce((e, t) => e + t, 0);
354
368
  if (e === "mean") return r ? t.reduce((e, t, r) => e + t * n[r], 0) / r : null;
355
369
  if (e === "median") {
@@ -362,25 +376,25 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
362
376
  }
363
377
  let i = Number.parseFloat(e);
364
378
  return Number.isFinite(i) ? i : null;
365
- }, Ee = {
379
+ }, Oe = {
366
380
  create(e, t) {
367
381
  if (!e.textContent?.trim()) return null;
368
- let n = q(e, t);
382
+ let n = oe(e, t);
369
383
  return n.dataset.kind = "reference", n;
370
384
  },
371
385
  draw(t, n, r) {
372
386
  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
387
  if (h) {
374
- let t = p.map((e) => ie(e.label));
388
+ let t = p.map((e) => K(e.label));
375
389
  if (r.categories[0]?.parentElement?.dataset.place === "beside" || t.some(Number.isNaN)) {
376
390
  console.warn(`[${e}] A reference line among the names needs names that are numbers, under columns or points.`);
377
391
  return;
378
392
  }
379
- let n = Te(g, t, p.map((e) => e.value)), o = n === null ? -1 : t.findIndex((e, r) => e <= n && n <= (t[r + 1] ?? e)), [s, c] = [p[o], p[o + 1] ?? p[o]].map((e) => a(i.indexOf(e))), l = n === null || o < 0 || t[o + 1] === void 0 || t[o + 1] === t[o] ? 0 : (n - t[o]) / (t[o + 1] - t[o]);
393
+ let n = De(g, t, p.map((e) => e.value)), o = n === null ? -1 : t.findIndex((e, r) => e <= n && n <= (t[r + 1] ?? e)), [s, c] = [p[o], p[o + 1] ?? p[o]].map((e) => a(i.indexOf(e))), l = n === null || o < 0 || t[o + 1] === void 0 || t[o + 1] === t[o] ? 0 : (n - t[o]) / (t[o + 1] - t[o]);
380
394
  y = n, v = o < 0 ? null : s + l * (c - s), _ = !1;
381
395
  } else {
382
396
  let e = !!r.frame && t.getAttribute("data-axis") === "y", n = r.frame ? r.series.flatMap((e, t) => e.group ? [] : [t])[+!!e] ?? 0 : 0;
383
- y = Te(g, p.map((e) => e.cells[n]?.value ?? e.value), p.map(() => 1)), _ = e || !c, v = y === null ? null : c && !e ? c(y) : s(y);
397
+ y = De(g, p.map((e) => e.cells[n]?.value ?? e.value), p.map(() => 1)), _ = e || !c, v = y === null ? null : c && !e ? c(y) : s(y);
384
398
  }
385
399
  if (v === null || y === null) {
386
400
  console.warn(`[${e}] A reference line needs a number, "mean" or "median", not "${g}".`);
@@ -394,10 +408,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
394
408
  ] : [
395
409
  0,
396
410
  0,
397
- i.length > 0 ? a(i.length - 1) + a(0) : D,
411
+ i.length > 0 ? a(i.length - 1) + a(0) : O,
398
412
  c ? l : s(0)
399
413
  ];
400
- if (d.insertBefore(P("line", {
414
+ if (d.insertBefore(F("line", {
401
415
  class: o,
402
416
  "data-note": r.note,
403
417
  ...t.getAttribute("data-line") === "dotted" && { "data-line": "dotted" },
@@ -412,9 +426,9 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
412
426
  y1: x,
413
427
  y2: C
414
428
  },
415
- style: j("--after", f)
429
+ style: M("--after", f)
416
430
  }), d.querySelector(`:scope > .${m}`)), n) {
417
- let e = J(n).width * u, t = J(n).height * u, i = 4 * u, a = _ ? [
431
+ let e = q(n).width * u, t = q(n).height * u, i = 4 * u, a = _ ? [
418
432
  [
419
433
  S - e,
420
434
  v - t / 2,
@@ -456,17 +470,17 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
456
470
  e,
457
471
  t
458
472
  ]
459
- ]), [o] = de([a], r.taken, [
473
+ ]), [o] = pe([a], r.taken, [
460
474
  0,
461
475
  0,
462
- D,
476
+ O,
463
477
  l
464
478
  ]), s = a[o ?? 0];
465
- r.taken.push(s), L(n, s[0] + e / 2, s[1] + t / 2, D, l), n.style.setProperty("--after", String(f)), (g === "mean" || g === "median") && ae(n, y, `the ${g}`, r, "");
479
+ r.taken.push(s), R(n, s[0] + e / 2, s[1] + t / 2, O, l), n.style.setProperty("--after", String(f)), (g === "mean" || g === "median") && se(n, y, `the ${g}`, r, "");
466
480
  }
467
481
  }
468
- }, De = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, Oe = {
469
- create: q,
482
+ }, ke = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, Ae = {
483
+ create: oe,
470
484
  draw(e, t, n) {
471
485
  let { rows: r, cx: i, y: o, unit: s, labelHeight: l, height: u, svg: d, values: f, after: p } = n, m = r[0], h = r[r.length - 1];
472
486
  if (!m || !h) return;
@@ -475,61 +489,61 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
475
489
  let n = x === y ? 0 : (i(t) - y) / (x - y), r = b + n * (S - b) - (o(e.value) - g);
476
490
  r > C && (C = r);
477
491
  }), b -= C, S -= C;
478
- let w = x - y, T = S - b, E = Math.hypot(w, T) || 1, O = w / E, k = T / E;
479
- y -= O * _, b -= k * _, x += O * _, S += k * _;
492
+ let w = x - y, T = S - b, E = Math.hypot(w, T) || 1, D = w / E, k = T / E;
493
+ y -= D * _, b -= k * _, x += D * _, S += k * _;
480
494
  let A = Number.parseFloat(e.getAttribute("data-at") || "0.5");
481
495
  if (t) {
482
- let e = y + (x - y) * A, n = b + (S - b) * A, a = J(t).width * s / 2, c = n + J(t).height * s / 2 + 8 * s, u = 0;
496
+ let e = y + (x - y) * A, n = b + (S - b) * A, a = q(t).width * s / 2, c = n + q(t).height * s / 2 + 8 * s, u = 0;
483
497
  r.forEach((t, n) => {
484
- let r = (f[n] ? J(f[n]).width : 0) * s / 2;
498
+ let r = (f[n] ? q(f[n]).width : 0) * s / 2;
485
499
  if (Math.abs(i(n) - e) >= a + r) return;
486
500
  let d = o(t.value) - 7 * s - l;
487
501
  u = Math.max(u, c - d);
488
502
  }), b -= u, S -= u;
489
503
  }
490
- let M = x - O * v, N = S - k * v, F = Math.hypot(M - y, N - b) / s + 1;
491
- d.appendChild(P("line", {
504
+ let j = x - D * v, N = S - k * v, P = Math.hypot(j - y, N - b) / s + 1;
505
+ d.appendChild(F("line", {
492
506
  class: a,
493
507
  "data-note": n.note,
494
508
  x1: y,
495
509
  y1: b,
496
- x2: M,
510
+ x2: j,
497
511
  y2: N,
498
- style: `--len:${F.toFixed(1)}; ${j("--after", p)}`
512
+ style: `--len:${P.toFixed(1)}; ${M("--after", p)}`
499
513
  }));
500
- let I = -k, R = O, z = v * .42;
501
- d.appendChild(P("polygon", {
514
+ let I = -k, L = D, z = v * .42;
515
+ d.appendChild(F("polygon", {
502
516
  class: c,
503
517
  "data-note": n.note,
504
518
  points: [
505
519
  `${x},${S}`,
506
- `${M + I * z},${N + R * z}`,
507
- `${M - I * z},${N - R * z}`
520
+ `${j + I * z},${N + L * z}`,
521
+ `${j - I * z},${N - L * z}`
508
522
  ].join(" "),
509
- style: j("--after", p)
510
- })), t && (L(t, y + (x - y) * A, b + (S - b) * A, D, u), t.style.setProperty("--after", String(p)));
523
+ style: M("--after", p)
524
+ })), t && (R(t, y + (x - y) * A, b + (S - b) * A, O, u), t.style.setProperty("--after", String(p)));
511
525
  let B = Number.parseFloat(e.getAttribute("data-years") || "");
512
- !Number.isNaN(B) && B > 0 && ae(t, De(m.value, h.value, B), `${m.value} to ${h.value} over ${B} years`, n);
526
+ !Number.isNaN(B) && B > 0 && se(t, ke(m.value, h.value, B), `${m.value} to ${h.value} over ${B} years`, n);
513
527
  }
514
- }, ke = (e, t, n, r, i) => {
528
+ }, je = (e, t, n, r, i) => {
515
529
  if (!r) return e / t * n;
516
530
  let { lo: a, hi: o, gap: s, share: c } = r, l = n * c, u = (n - l - i) / (a + (t - o)), d = l / (o - a);
517
531
  return e <= a ? e * u : e <= s ? a * u + (e - a) * d : e <= o ? a * u + (e - a) * d + i : a * u + l + i + (e - o) * u;
518
- }, Ae = (e, t, n) => {
532
+ }, Me = (e, t, n) => {
519
533
  let r = .15, i = Math.min(e * .7 / (t + (t - 1) * r), n), a = t * i + (t - 1) * i * r;
520
534
  return {
521
535
  size: i,
522
536
  gap: i * r,
523
537
  offset: (e) => -a / 2 + e * i * 1.15
524
538
  };
525
- }, je = (e, t, n) => {
539
+ }, Ne = (e, t, n) => {
526
540
  let r = e.series[n], i = e.series.some((e) => e.focus) && !r.focus;
527
541
  return {
528
542
  "data-series": n + 1,
529
543
  ...i && { "data-muted": "" },
530
- style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${j("--i", t.slot)}`
544
+ style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${M("--i", t.slot)}`
531
545
  };
532
- }, Me = (e, t, n = !1) => {
546
+ }, Pe = (e, t, n = !1) => {
533
547
  let r = 0, i = 0;
534
548
  return Array.from({ length: t }, (t, a) => {
535
549
  let o = e.cells[a] ?? e.cells[0], s = o.missing ? 0 : o.value;
@@ -556,40 +570,40 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
556
570
  cell: o
557
571
  };
558
572
  });
559
- }, Ne = (e, t, n = !1) => {
560
- let r = Me(e, t, n);
573
+ }, Fe = (e, t, n = !1) => {
574
+ let r = Pe(e, t, n);
561
575
  return {
562
576
  top: Math.max(0, ...r.map((e) => e.to)),
563
577
  bottom: Math.min(0, ...r.map((e) => e.to))
564
578
  };
565
- }, Pe = (e, t) => {
566
- let { top: n, bottom: r } = Ne(e, t);
579
+ }, Ie = (e, t) => {
580
+ let { top: n, bottom: r } = Fe(e, t);
567
581
  return n + r;
568
- }, Fe = (e, t, n) => {
582
+ }, Le = (e, t, n) => {
569
583
  let r = t.series.some((e) => e.focus);
570
584
  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) => e.some((n, r) => r !== t && !n.cell.missing && n.to !== n.from && n.from === e[t].to), Le = (e, t, n, i = {}, a = "") => {
585
+ }, Re = (e, t) => e.some((n, r) => r !== t && !n.cell.missing && n.to !== n.from && n.from === e[t].to), ze = (e, t, n, i = {}, a = "") => {
572
586
  let o = {
573
- class: F(r, t),
587
+ class: I(r, t),
574
588
  "data-kind": "bar",
575
589
  "data-row": n + 1,
576
590
  ...i
577
- }, s = j("--i", t.slot) + (a ? `; transform-origin: ${a}` : ""), c = P("g", {
591
+ }, s = M("--i", t.slot) + (a ? `; transform-origin: ${a}` : ""), c = F("g", {
578
592
  ...o,
579
593
  "data-stack": "",
580
594
  style: s
581
595
  });
582
596
  return e.svg.appendChild(c), (r, a) => {
583
597
  let o = i["data-grow"] === void 0 ? {} : { "data-grow": i["data-grow"] };
584
- c.appendChild(P("rect", {
598
+ c.appendChild(F("rect", {
585
599
  ...o,
586
600
  ...a,
587
- class: F("tablechart-piece", t),
601
+ class: I("tablechart-piece", t),
588
602
  "data-row": n + 1,
589
- ...je(e, t, r)
603
+ ...Ne(e, t, r)
590
604
  }));
591
605
  };
592
- }, Re = {
606
+ }, Be = {
593
607
  segments: (e) => e.map((e) => ({
594
608
  ...e,
595
609
  from: 0,
@@ -610,45 +624,48 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
610
624
  categories: "beside",
611
625
  headroom: () => 0,
612
626
  draw(e) {
613
- let { segments: t, height: n, unit: a, svg: o, values: s, categories: c, config: l, barMax: u } = e, d = e.series.length > 1, f = Math.max(W(c.map((e) => J(e).width * a)), 0), p = Math.min(f + 10 * a, D * .42);
614
- c[0]?.parentElement?.style.setProperty("--_beside", `${((p - 8 * a) / D * 100).toFixed(2)}%`);
615
- let m = D - 4 * a, h = e.stacked ? Math.max(W(e.rows.map((t) => Ne(t, e.series.length).top)), 0) || 1 : Math.max(W(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = e.stacked ? Math.max(W(e.rows.map((t) => -Ne(t, e.series.length).bottom)), 0) : Math.max(W(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => -e.value))), 0), _ = Math.max(h, e.domain?.[1] ?? 0), v = Math.max(g, -(e.domain?.[0] ?? 0)), y = Math.max(_, e.squeeze?.hi ?? 0) + v, b = (t, n) => ke(Math.abs(t), y, n, e.squeeze, e.breakGap), x = n / t.length, S = (e) => (e + .5) * x, C = Math.min(x * l.barfill, u), w = Ae(x, e.series.length, u), T = s[0] ?? e.totals[0], E = T ? J(T).height * a * .56 : 0, O = Math.max(((d && !e.stacked ? w.size : C) - E) / 2, 5 * a), k = (e) => J(e).width * a, A = (e) => e.length ? W(e.map(k)) + O + 4 * a : 0, M = (t, n) => (e.rows[n].cells[t] ?? e.rows[n].cells[0]).value, N = e.seriesValues.flatMap((e, t) => e.map((e, n) => ({
627
+ let { segments: t, height: n, unit: a, svg: o, values: s, categories: c, config: l, barMax: u } = e, d = e.series.length > 1, f = Math.max(W(c.map((e) => q(e).width * a)), 0), p = Math.min(f + 10 * a, O * .42);
628
+ c[0]?.parentElement?.style.setProperty("--_beside", `${((p - 8 * a) / O * 100).toFixed(2)}%`);
629
+ let m = O - 4 * a, h = e.stacked ? Math.max(W(e.rows.map((t) => Fe(t, e.series.length).top)), 0) || 1 : Math.max(W(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = e.stacked ? Math.max(W(e.rows.map((t) => -Fe(t, e.series.length).bottom)), 0) : Math.max(W(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => -e.value))), 0), _ = Math.max(h, e.domain?.[1] ?? 0), v = Math.max(g, -(e.domain?.[0] ?? 0)), y = Math.max(_, e.squeeze?.hi ?? 0) + v, b = (t, n) => je(Math.abs(t), y, n, e.squeeze, e.breakGap), x = n / t.length, S = (e) => (e + .5) * x, C = Math.min(x * l.barfill, u), w = Me(x, e.series.length, u), T = s[0] ?? e.totals[0], E = T ? q(T).height * a * .56 : 0, D = Math.max(((d && !e.stacked ? w.size : C) - E) / 2, 5 * a), k = (e) => q(e).width * a, A = (e) => e.length ? W(e.map(k)) + D + 4 * a : 0, j = (t, n) => (e.rows[n].cells[t] ?? e.rows[n].cells[0]).value, N = e.seriesValues.flatMap((e, t) => e.map((e, n) => ({
616
630
  label: e,
617
- value: M(t, n)
618
- }))), I = (t) => {
619
- let n = Ne(e.rows[t], e.series.length);
631
+ value: j(t, n)
632
+ }))), P = (t) => {
633
+ let n = Fe(e.rows[t], e.series.length);
620
634
  return n.top === 0 && n.bottom < 0;
621
- }, R = e.stacked ? A(e.totals.filter((e, t) => !I(t))) : d ? A(N.filter((e) => e.value >= 0).map((e) => e.label)) : 0, z = e.stacked ? A(e.totals.filter((e, t) => I(t))) : d ? A(N.filter((e) => e.value < 0).map((e) => e.label)) : 0, B = (t, n) => e.labels === "inside" && _e(t, n, a);
622
- if (!d && !e.stacked) for (let e = 0; e < 3; e++) {
623
- let e = m - p - R - z, n = t.map((e, t) => ({
624
- seg: e,
625
- label: s[t]
626
- })).filter(({ seg: t, label: n }) => !B(n, b(t.value, e))), r = A(n.filter(({ seg: e }) => e.value >= 0).map(({ label: e }) => e)), i = A(n.filter(({ seg: e }) => e.value < 0).map(({ label: e }) => e));
627
- if (r <= R && i <= z) break;
628
- R = Math.max(R, r), z = Math.max(z, i);
635
+ }, L = e.stacked ? A(e.totals.filter((e, t) => !P(t))) : d ? A(N.filter((e) => e.value >= 0).map((e) => e.label)) : 0, z = e.stacked ? A(e.totals.filter((e, t) => P(t))) : d ? A(N.filter((e) => e.value < 0).map((e) => e.label)) : 0, B = (t, n) => e.labels === "inside" && ye(t, n, a), V = d && !e.stacked && e.labels === "inside" && !!T && q(T).height * a <= w.size;
636
+ if (V && (L = z = 0), V || !d && !e.stacked) {
637
+ let e = d ? N.filter(({ label: e }) => e.dataset.missing === void 0) : t.map((e, t) => ({
638
+ label: s[t],
639
+ value: e.value
640
+ }));
641
+ for (let t = 0; t < 3; t++) {
642
+ let t = m - p - L - z, n = e.filter(({ label: e, value: n }) => !B(e, b(n, t))), r = A(n.filter(({ value: e }) => e >= 0).map(({ label: e }) => e)), i = A(n.filter(({ value: e }) => e < 0).map(({ label: e }) => e));
643
+ if (r <= L && i <= z) break;
644
+ L = Math.max(L, r), z = Math.max(z, i);
645
+ }
629
646
  }
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);
647
+ let ee = m - p - L - z, H = p + z + b(v, ee), U = (e) => e < 0 ? H - b(e, ee) : H + b(e, ee);
631
648
  if (e.squeeze && (e.breakX = U(e.squeeze.gap)), e.x = U, e.stacked) {
632
649
  let t = e.length("--tablechart-stack-gap", "1px") ?? a;
633
650
  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);
651
+ let o = Fe(r, e.series.length), s = ze(e, r, i, { "data-grow": "right" }, o.bottom < 0 ? `${H - U(o.bottom)}px center` : ""), l = S(i) - C / 2, u = Pe(r, e.series.length);
635
652
  u.forEach(({ from: r, to: o, cell: c }, d) => {
636
653
  let f = e.seriesValues[d][i];
637
654
  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];
655
+ let p = Math.min(U(r), U(o)), m = Math.max(U(r), U(o)), h = Re(u, d) ? Math.min(t, (m - p) / 2) : 0, [g, _] = U(o) > U(r) ? [p, m - h] : [p + h, m];
639
656
  s(d, {
640
657
  x: g,
641
658
  y: l,
642
659
  width: Math.max(_ - g, 1),
643
660
  height: C,
644
661
  ...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);
662
+ }), f.dataset.place = "inside", f.toggleAttribute("data-left-out", !ye(f, m - p, a) || q(f).height * a > C), Le(f, e, d), R(f, (p + m) / 2, S(i), O, n);
646
663
  });
647
664
  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));
665
+ d && (d.dataset.place = P(i) ? "before" : "after", R(d, P(i) ? U(o.bottom) - D : U(o.top) + D, S(i), O, n));
649
666
  let f = c[i];
650
- f && L(f, p - 8 * a, S(i), D, n);
651
- }), o.appendChild(P("line", {
667
+ f && R(f, p - 8 * a, S(i), O, n);
668
+ }), o.appendChild(F("line", {
652
669
  class: i,
653
670
  x1: H,
654
671
  x2: H,
@@ -658,33 +675,35 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
658
675
  return;
659
676
  }
660
677
  if (d) {
661
- let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = ve(e.plot, t, (e) => ({
662
- size: J(e).height * a,
678
+ let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = be(e.plot, t, (e) => ({
679
+ size: q(e).height * a,
663
680
  room: w.size + w.gap * .5
664
681
  }), "--_fit");
665
682
  e.rows.forEach((t, i) => {
666
- e.series.forEach((a, c) => {
667
- let l = t.cells[c] ?? t.cells[0], u = e.seriesValues[c][i];
668
- if (l.missing) {
669
- u.dataset.place = "none";
683
+ e.series.forEach((c, l) => {
684
+ let u = t.cells[l] ?? t.cells[0], d = e.seriesValues[l][i];
685
+ if (u.missing) {
686
+ d.dataset.place = "none";
670
687
  return;
671
688
  }
672
- let d = U(l.value), f = l.value < 0, p = S(i) + w.offset(c), m = Math.max(Math.abs(d - H), 1);
673
- l.value !== 0 && o.appendChild(P("rect", {
674
- class: F(r, t),
689
+ let f = U(u.value), p = u.value < 0, m = S(i) + w.offset(l), h = Math.max(Math.abs(f - H), 1);
690
+ u.value !== 0 && o.appendChild(F("rect", {
691
+ class: I(r, t),
675
692
  "data-kind": "bar",
676
693
  "data-row": i + 1,
677
- "data-grow": f ? "left" : "right",
678
- x: f ? H - m : H,
679
- y: p,
680
- width: m,
694
+ "data-grow": p ? "left" : "right",
695
+ x: p ? H - h : H,
696
+ y: m,
697
+ width: h,
681
698
  height: w.size,
682
- ...je(e, t, c)
683
- })), u.dataset.place = f ? "before" : "after", u.toggleAttribute("data-left-out", !s), L(u, f ? d - O : d + O, p + w.size / 2, D, n);
699
+ ...Ne(e, t, l)
700
+ }));
701
+ let g = V && B(d, Math.abs(f - H)), _ = Math.max(Math.min(D, Math.abs(f - H) - k(d) - 6 * a), 6 * a), v = p ? 1 : -1;
702
+ d.dataset.place = g ? "inside" : p ? "before" : "after", d.toggleAttribute("data-left-out", !s), g && Le(d, e, l), R(d, g ? e.insideAlign === "center" ? (H + f) / 2 : e.insideAlign === "start" ? H - v * (_ + k(d) / 2) : f + v * (_ + k(d) / 2) : p ? f - D : f + D, m + w.size / 2, O, n);
684
703
  });
685
704
  let l = c[i];
686
- l && L(l, p - 8 * a, S(i), D, n);
687
- }), o.appendChild(P("line", {
705
+ l && R(l, p - 8 * a, S(i), O, n);
706
+ }), o.appendChild(F("line", {
688
707
  class: i,
689
708
  x1: H,
690
709
  x2: H,
@@ -693,11 +712,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
693
712
  }));
694
713
  return;
695
714
  }
696
- let ee = t.map((e, t) => B(s[t], Math.abs(U(e.value) - H)));
715
+ let te = t.map((e, t) => B(s[t], Math.abs(U(e.value) - H)));
697
716
  t.forEach((t, i) => {
698
717
  let l = U(t.value), u = S(i), d = t.value < 0, f = Math.abs(l - H), m = Math.max(f, 1);
699
- t.value !== 0 && o.appendChild(P("rect", {
700
- class: F(r, t),
718
+ t.value !== 0 && o.appendChild(F("rect", {
719
+ class: I(r, t),
701
720
  "data-kind": t.kind,
702
721
  "data-row": i + 1,
703
722
  "data-grow": d ? "left" : "right",
@@ -705,13 +724,13 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
705
724
  y: u - C / 2,
706
725
  width: m,
707
726
  height: C,
708
- style: j("--i", t.slot)
727
+ style: M("--i", t.slot)
709
728
  }));
710
- let h = s[i], g = Math.max(Math.min(O, f - k(h) - 6 * a), 6 * a), _ = d ? 1 : -1;
711
- h.dataset.place = ee[i] ? "inside" : d ? "before" : "after", h.dataset.kind = t.kind, L(h, ee[i] ? e.insideAlign === "center" ? (H + l) / 2 : e.insideAlign === "start" ? H - _ * (g + k(h) / 2) : l + _ * (g + k(h) / 2) : l - _ * O, u, D, n);
729
+ let h = s[i], g = Math.max(Math.min(D, f - k(h) - 6 * a), 6 * a), _ = d ? 1 : -1;
730
+ h.dataset.place = te[i] ? "inside" : d ? "before" : "after", h.dataset.kind = t.kind, R(h, te[i] ? e.insideAlign === "center" ? (H + l) / 2 : e.insideAlign === "start" ? H - _ * (g + k(h) / 2) : l + _ * (g + k(h) / 2) : l - _ * D, u, O, n);
712
731
  let v = c[i];
713
- v && L(v, p - 8 * a, u, D, n);
714
- }), o.appendChild(P("line", {
732
+ v && R(v, p - 8 * a, u, O, n);
733
+ }), o.appendChild(F("line", {
715
734
  class: i,
716
735
  x1: H,
717
736
  x2: H,
@@ -719,7 +738,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
719
738
  y2: n
720
739
  }));
721
740
  }
722
- }, ze = {
741
+ }, Ve = {
723
742
  segments: (e) => e.map((e) => ({
724
743
  ...e,
725
744
  from: 0,
@@ -739,78 +758,80 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
739
758
  if (e.stacked) {
740
759
  let t = e.length("--tablechart-stack-gap", "1px") ?? c;
741
760
  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);
761
+ let l = Fe(r, e.series.length), u = ze(e, r, i, {}, l.bottom < 0 ? `center ${p - a(l.top)}px` : ""), d = n(i) - o / 2, f = Pe(r, e.series.length);
743
762
  f.forEach(({ from: r, to: l, cell: p }, m) => {
744
763
  let h = e.seriesValues[m][i];
745
764
  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];
765
+ let g = Math.min(a(l), a(r)), _ = Math.max(a(l), a(r)), v = Re(f, m) ? Math.min(t, (_ - g) / 2) : 0, [y, b] = a(l) < a(r) ? [g + v, _] : [g, _ - v];
747
766
  u(m, {
748
767
  x: d,
749
768
  y,
750
769
  width: o,
751
770
  height: Math.max(b - y, 1),
752
771
  ...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);
772
+ }), h.dataset.place = "inside", h.toggleAttribute("data-left-out", !ve(h, _ - g, c) || q(h).width * c > o - 4 * c), Le(h, e, m), R(h, n(i), (g + _) / 2, O, s);
754
773
  });
755
774
  let m = e.totals[i];
756
775
  if (m) {
757
776
  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);
777
+ m.dataset.place = e ? "below" : "outside", R(m, n(i), e ? a(l.bottom) + 4 * c : a(l.top) - 4 * c, O, s);
759
778
  }
760
- }), l.appendChild(P("line", {
779
+ }), l.appendChild(F("line", {
761
780
  class: i,
762
781
  x1: 0,
763
- x2: D,
782
+ x2: O,
764
783
  y1: p,
765
784
  y2: p
766
785
  }));
767
786
  return;
768
787
  }
769
788
  if (e.own.length > 1) {
770
- let t = Ae(n(1) - n(0) || n(0) * 2, e.own.length, e.barMax), o = e.own.flatMap((t) => e.seriesValues[t]).filter((e) => e.dataset.missing === void 0), u = ve(e.plot, o, (e) => ({
771
- size: J(e).width * c,
789
+ let t = Me(n(1) - n(0) || n(0) * 2, e.own.length, e.barMax), o = e.own.flatMap((t) => e.seriesValues[t]).filter((e) => e.dataset.missing === void 0), u = be(e.plot, o, (e) => ({
790
+ size: q(e).width * c,
772
791
  room: t.size + t.gap * .5
773
- }), "--_fit");
792
+ }), "--_fit"), m = d === "inside" && !_e(o, t.size, c), h = o[0] ? q(o[0]).height * c * .56 : 0, g = Math.min(...o.map((e) => (t.size - q(e).width * c) / 2));
774
793
  e.rows.forEach((i, o) => {
775
- e.own.forEach((d, f) => {
776
- let m = i.cells[d] ?? i.cells[0], h = e.seriesValues[d][o], g = n(o) + t.offset(f);
777
- if (m.missing) {
778
- h.dataset.place = "none";
794
+ e.own.forEach((d, _) => {
795
+ let v = i.cells[d] ?? i.cells[0], y = e.seriesValues[d][o], b = n(o) + t.offset(_);
796
+ if (v.missing) {
797
+ y.dataset.place = "none";
779
798
  return;
780
799
  }
781
- let _ = a(m.value), v = m.value < 0, y = Math.max(Math.abs(p - _), 1);
782
- m.value !== 0 && l.appendChild(P("rect", {
783
- class: F(r, i),
800
+ let x = a(v.value), S = v.value < 0, C = Math.max(Math.abs(p - x), 1);
801
+ v.value !== 0 && l.appendChild(F("rect", {
802
+ class: I(r, i),
784
803
  "data-kind": "bar",
785
804
  "data-row": o + 1,
786
- ...v && { "data-grow": "down" },
787
- x: g,
788
- y: v ? p : p - y,
805
+ ...S && { "data-grow": "down" },
806
+ x: b,
807
+ y: S ? p : p - C,
789
808
  width: t.size,
790
- height: y,
791
- ...je(e, i, d)
792
- })), h.dataset.place = v ? "below" : "outside", h.toggleAttribute("data-left-out", !u), L(h, g + t.size / 2, v ? _ + 4 * c : _ - 4 * c, D, s);
809
+ height: C,
810
+ ...Ne(e, i, d)
811
+ }));
812
+ let w = m && ve(y, Math.abs(p - x), c), T = S ? -1 : 1, E = Math.min(g, (Math.abs(p - x) - h) / 2), D = f === "center" ? (x + p) / 2 : f === "start" ? p - T * (E + h / 2) : x + T * (E + h / 2);
813
+ y.dataset.place = w ? "inside" : S ? "below" : "outside", y.toggleAttribute("data-left-out", !u), w && Le(y, e, d), R(y, b + t.size / 2, w ? D : S ? x + 4 * c : x - 4 * c, O, s);
793
814
  });
794
- }), l.appendChild(P("line", {
815
+ }), l.appendChild(F("line", {
795
816
  class: i,
796
817
  x1: 0,
797
- x2: D,
818
+ x2: O,
798
819
  y1: p,
799
820
  y2: p
800
821
  }));
801
822
  return;
802
823
  }
803
- let m = e.own[0], h = e.own.length < e.series.length, g = he(u, o, c), _ = t.map((e, t) => d === "inside" && !g && !e.missing && ge(u[t], Math.abs(p - a(e.value)), c)), v = u[0] ? J(u[0]).height * c * .56 : 0, y = Infinity;
804
- for (let [e, t] of u.entries()) _[e] && (y = Math.min(y, (o - J(t).width * c) / 2));
824
+ let m = e.own[0], h = e.own.length < e.series.length, g = _e(u, o, c), _ = t.map((e, t) => d === "inside" && !g && !e.missing && ve(u[t], Math.abs(p - a(e.value)), c)), v = u[0] ? q(u[0]).height * c * .56 : 0, y = Infinity;
825
+ for (let [e, t] of u.entries()) _[e] && (y = Math.min(y, (o - q(t).width * c) / 2));
805
826
  t.forEach((t, i) => {
806
827
  let d = a(t.value), g = t.value < 0;
807
828
  if (t.missing) {
808
- L(u[i], n(i), p - 4 * c, D, s), u[i].dataset.place = "outside";
829
+ R(u[i], n(i), p - 4 * c, O, s), u[i].dataset.place = "outside";
809
830
  return;
810
831
  }
811
832
  let b = Math.max(Math.abs(p - d), 1);
812
- t.value !== 0 && l.appendChild(P("rect", {
813
- class: F(r, t),
833
+ t.value !== 0 && l.appendChild(F("rect", {
834
+ class: I(r, t),
814
835
  "data-kind": t.kind,
815
836
  "data-row": i + 1,
816
837
  ...g && { "data-grow": "down" },
@@ -818,20 +839,20 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
818
839
  y: g ? p : p - b,
819
840
  width: o,
820
841
  height: b,
821
- style: j("--i", t.slot),
822
- ...h && je(e, t, m)
842
+ style: M("--i", t.slot),
843
+ ...h && Ne(e, t, m)
823
844
  }));
824
845
  let x = g ? -1 : 1, S = Math.min(y, (Math.abs(p - d) - v) / 2), C = f === "center" ? (d + p) / 2 : f === "start" ? p - x * (S + v / 2) : d + x * (S + v / 2), w = g ? d + 4 * c : d - 4 * c;
825
- L(u[i], n(i), _[i] ? C : w, D, s), u[i].dataset.place = _[i] ? "inside" : g ? "below" : "outside", h && _[i] && Fe(u[i], e, m);
826
- }), l.appendChild(P("line", {
846
+ R(u[i], n(i), _[i] ? C : w, O, s), u[i].dataset.place = _[i] ? "inside" : g ? "below" : "outside", h && _[i] && Le(u[i], e, m);
847
+ }), l.appendChild(F("line", {
827
848
  class: i,
828
849
  x1: 0,
829
- x2: D,
850
+ x2: O,
830
851
  y1: p,
831
852
  y2: p
832
853
  }));
833
854
  }
834
- }, Be = 0, Ve = (e) => e.filter((e) => !e.isTotal), He = {
855
+ }, He = 0, Ue = (e) => e.filter((e) => !e.isTotal), We = {
835
856
  aspect: .66,
836
857
  centre: !0,
837
858
  headroom: () => 0,
@@ -842,18 +863,18 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
842
863
  kind: "bar"
843
864
  })),
844
865
  draw({ rows: e, height: t, unit: n, labelHeight: r, svg: i, values: a, config: o, centre: s }) {
845
- let c = D / 2, u = t / 2, d = Ve(e).reduce((e, t) => e + Math.abs(t.value), 0);
866
+ let c = O / 2, u = t / 2, d = Ue(e).reduce((e, t) => e + Math.abs(t.value), 0);
846
867
  if (!d) return;
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;
868
+ let f = r * 1.2 + 10 * n, p = Math.max(Math.min(O, t) / 2 - f, 10), m = p * o.ringfill, h = p - m / 2, g = 2 * Math.PI * h, _ = [], v = 0, y = 0, b = 0;
848
869
  if (e.forEach((e, o) => {
849
870
  let s = a[o];
850
871
  if (e.isTotal) {
851
872
  s.dataset.place = "none";
852
873
  return;
853
874
  }
854
- let f = Math.abs(e.value) / d, x = A(b, f), S = `--share:${f.toFixed(4)}; --start:${x.start.toFixed(4)}; --span:${x.span.toFixed(4)};`, C = f * g, w = v / g * 2 * Math.PI - Math.PI / 2;
855
- _.push(w), i.appendChild(P("circle", {
856
- class: F(l, e),
875
+ let f = Math.abs(e.value) / d, x = j(b, f), S = `--share:${f.toFixed(4)}; --start:${x.start.toFixed(4)}; --span:${x.span.toFixed(4)};`, C = f * g, w = v / g * 2 * Math.PI - Math.PI / 2;
876
+ _.push(w), i.appendChild(F("circle", {
877
+ class: I(l, e),
857
878
  "data-slice": y + 1,
858
879
  "data-row": o + 1,
859
880
  cx: c,
@@ -863,60 +884,65 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
863
884
  transform: `rotate(-90 ${c} ${u})`,
864
885
  "stroke-dasharray": `${C.toFixed(1)} ${(g - C).toFixed(1)}`,
865
886
  "stroke-dashoffset": (-v).toFixed(1),
866
- style: `--n:${y}; --palette:var(--tablechart-color-${y + 1}); --arc:${C.toFixed(1)}; --circ:${g.toFixed(1)}; ${S} --ease:${x.easing}; ${j("--i", e.slot)}`
887
+ style: `--n:${y}; --palette:var(--tablechart-color-${y + 1}); --arc:${C.toFixed(1)}; --circ:${g.toFixed(1)}; ${S} --ease:${x.easing}; ${M("--i", e.slot)}`
867
888
  }));
868
- let T = w + C / g * Math.PI, E = Math.cos(T), O = Math.sin(T);
869
- i.appendChild(P("line", {
889
+ let T = w + C / g * Math.PI, E = Math.cos(T), D = Math.sin(T);
890
+ i.appendChild(F("line", {
870
891
  class: "tablechart-leader",
871
892
  x1: c + E * (p + 2 * n),
872
- y1: u + O * (p + 2 * n),
893
+ y1: u + D * (p + 2 * n),
873
894
  x2: c + E * (p + 7 * n),
874
- y2: u + O * (p + 7 * n),
895
+ y2: u + D * (p + 7 * n),
875
896
  "data-row": o + 1,
876
- style: `${S} ${j("--i", e.slot)}`
897
+ style: `${S} ${M("--i", e.slot)}`
877
898
  })), s.style.setProperty("--start", x.start.toFixed(4)), s.style.setProperty("--span", x.span.toFixed(4));
878
- let k = p + 9 * n, M = J(s).width * n / 2;
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;
899
+ let k = p + 9 * n, A = q(s).width * n / 2;
900
+ R(s, c + E * (k + Math.abs(E) * A), u + D * (k + Math.abs(D) * r * .7), O, t), s.dataset.place = "around", v += C, b += f, y += 1;
880
901
  }), _.length > 1) {
881
- let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++Be}`, a = P("mask", {
902
+ let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++He}`, a = F("mask", {
882
903
  id: r,
883
904
  maskUnits: "userSpaceOnUse"
884
905
  });
885
- a.appendChild(P("rect", {
906
+ a.appendChild(F("rect", {
886
907
  x: 0,
887
908
  y: 0,
888
- width: D,
909
+ width: O,
889
910
  height: t,
890
911
  fill: "white"
891
912
  }));
892
- for (let t of _) a.appendChild(P("line", {
913
+ for (let t of _) a.appendChild(F("line", {
893
914
  class: "tablechart-divide",
894
915
  x1: c + Math.cos(t) * e,
895
916
  y1: u + Math.sin(t) * e,
896
917
  x2: c + Math.cos(t) * n,
897
918
  y2: u + Math.sin(t) * n
898
919
  }));
899
- let o = P("g", { mask: `url(#${r})` });
920
+ let o = F("g", { mask: `url(#${r})` });
900
921
  for (let e of Array.from(i.querySelectorAll(`.${l}`))) o.appendChild(e);
901
- let s = P("defs");
922
+ let s = F("defs");
902
923
  s.appendChild(a), i.prepend(s, o);
903
924
  }
904
- s && L(s, c, u, D, t);
925
+ s && R(s, c, u, O, t);
905
926
  }
906
- }, Ue = [
927
+ }, Ge = [
907
928
  "circle",
908
929
  "square",
909
930
  "diamond"
910
- ], X = (e, t) => {
911
- let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = Ue.find((e) => n.includes(e));
931
+ ], Y = (e, t) => {
932
+ let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [];
933
+ if (n.includes("none")) return {
934
+ shape: "none",
935
+ open: !1
936
+ };
937
+ let r = Ge.find((e) => n.includes(e));
912
938
  return {
913
- shape: r ?? Ue[Math.floor(t / 2) % Ue.length],
939
+ shape: r ?? Ge[Math.floor(t / 2) % Ge.length],
914
940
  open: n.includes("open") || !n.includes("filled") && !r && t % 2 == 1
915
941
  };
916
- }, We = (e, t, n, r, i = {}) => {
942
+ }, Ke = (e, t, n, r, i = {}) => {
917
943
  if (e === "square") {
918
944
  let e = r * .88;
919
- return P("rect", {
945
+ return F("rect", {
920
946
  x: t - e,
921
947
  y: n - e,
922
948
  width: e * 2,
@@ -926,26 +952,26 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
926
952
  }
927
953
  if (e === "diamond") {
928
954
  let e = r * 1.2;
929
- return P("polygon", {
955
+ return F("polygon", {
930
956
  points: `${t},${n - e} ${t + e},${n} ${t},${n + e} ${t - e},${n}`,
931
957
  ...i
932
958
  });
933
959
  }
934
960
  if (e === "triangle") {
935
961
  let e = r * 1.3;
936
- return P("polygon", {
962
+ return F("polygon", {
937
963
  points: `${t},${n - e * .75} ${t + e * .87},${n + e * .75} ${t - e * .87},${n + e * .75}`,
938
964
  ...i
939
965
  });
940
966
  }
941
- return P("circle", {
967
+ return F("circle", {
942
968
  cx: t,
943
969
  cy: n,
944
970
  r,
945
971
  ...i
946
972
  });
947
- }, Z = (e) => Number(e.toFixed(2));
948
- function Ge(e, t) {
973
+ }, X = (e) => Number(e.toFixed(2));
974
+ function Z(e, t) {
949
975
  let n = e.length;
950
976
  if (n < 2) return e.map(() => 0);
951
977
  let r = (n) => (t[n + 1] - t[n]) / (e[n + 1] - e[n] || 1), i = Array(n).fill(0);
@@ -962,24 +988,24 @@ function Ge(e, t) {
962
988
  };
963
989
  return i[0] = a(0, 1, i[1]), i[n - 1] = a(n - 2, n - 1, i[n - 2]), i;
964
990
  }
965
- function Ke(e, t, n, r) {
991
+ function qe(e, t, n, r) {
966
992
  let i = (t[0] - e[0]) / 3;
967
993
  return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
968
994
  }
969
- function qe(e, t, n, r) {
970
- let [i, a] = Ke(e, t, n, r), o = ([e, t]) => `${Z(e)},${Z(t)}`;
995
+ function Je(e, t, n, r) {
996
+ let [i, a] = qe(e, t, n, r), o = ([e, t]) => `${X(e)},${X(t)}`;
971
997
  return `C${o(i)} ${o(a)} ${o(t)}`;
972
998
  }
973
- function Je(e, t, n) {
999
+ function Ye(e, t, n) {
974
1000
  let r = Array(e).fill(0), i = [], a = () => {
975
- Ge(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
1001
+ Z(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
976
1002
  r[i[t]] = e;
977
1003
  }), i = [];
978
1004
  };
979
1005
  for (let n = 0; n < e; n++) t(n) ? a() : i.push(n);
980
1006
  return a(), r;
981
1007
  }
982
- var Ye = (e) => {
1008
+ var Xe = (e) => {
983
1009
  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;
984
1010
  return {
985
1011
  at: o,
@@ -987,7 +1013,7 @@ var Ye = (e) => {
987
1013
  t: c ? a / c : a ? Infinity : 0,
988
1014
  n: t
989
1015
  };
990
- }, Xe = [
1016
+ }, Ze = [
991
1017
  12.71,
992
1018
  4.3,
993
1019
  3.18,
@@ -1003,29 +1029,29 @@ var Ye = (e) => {
1003
1029
  2.16,
1004
1030
  2.14,
1005
1031
  2.13
1006
- ], Ze = (e) => Xe[e - 1] ?? (e < 30 ? 2.1 : 2), Qe = (e) => {
1032
+ ], Qe = (e) => Ze[e - 1] ?? (e < 30 ? 2.1 : 2), $e = (e) => {
1007
1033
  let t = e.map((e) => e.y), n = Math.min(...t), r = Math.max(...t), i = n < 0 && r > 0, a = r - n || 1;
1008
1034
  return {
1009
1035
  mean: t.reduce((e, t) => e + t, 0) / t.length,
1010
1036
  share: (e, t) => e / (i ? a : Math.abs(t) || a) * 100
1011
1037
  };
1012
- }, $e = (e, t = 5, n = 25) => {
1038
+ }, et = (e, t = 5, n = 25) => {
1013
1039
  if (e.length < 4) return null;
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";
1040
+ let { mean: r, share: i } = $e(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 = Xe(e), c = a(s.at);
1041
+ c.length && o(c) && (s = Xe(e.filter((e) => !c.includes(e))), c = a(s.at)), o(c) || (s = Xe(e), c = []);
1042
+ 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) >= Qe(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";
1017
1043
  return {
1018
1044
  course: g,
1019
1045
  line: l,
1020
1046
  outside: g === "unclear" ? [] : c
1021
1047
  };
1022
- }, et = (e) => e.map((e) => ({
1048
+ }, tt = (e) => e.map((e) => ({
1023
1049
  ...e,
1024
1050
  from: 0,
1025
1051
  to: e.value,
1026
1052
  kind: "bar"
1027
- })), tt = (e) => ({
1028
- segments: et,
1053
+ })), nt = (e) => ({
1054
+ segments: tt,
1029
1055
  series: !0,
1030
1056
  stackable: !0,
1031
1057
  running: !0,
@@ -1034,8 +1060,8 @@ var Ye = (e) => {
1034
1060
  footroom: ({ labelHeight: t, unit: n, series: r, focused: i, stacked: a }) => !e && !a && r === 2 && !i ? t + 7 * n : 0,
1035
1061
  draw(t) {
1036
1062
  let { rows: n, series: r, own: a, seriesValues: o, names: s, cx: c, y: l, height: f, unit: p, labelHeight: g, svg: _, stacked: v } = t, y = a.length < r.length, b = t.shape === "step", x = t.shape === "smooth", S = r.length > 1, C = r.some((e) => e.focus), w = n.length - 1, T = l(0), E = n.length > 1 ? c(1) - c(0) : c(0) * 2;
1037
- _.style.setProperty("--_base", `${Z(T)}px`);
1038
- let O = (e) => `--rise:${Z(T - e)}px; `, k = (e, t) => n[t]?.cells[e] ?? n[t]?.cells[0], A = (e, t) => !k(e, t) || !!k(e, t)?.missing, j = n.map((e) => v ? Me(e, r.length, !0) : null), M = (e, t) => j[t]?.[e].to ?? k(e, t)?.value ?? 0, N = (e, t) => j[t]?.[e].from ?? 0, F = (e, t) => [c(t), l(M(e, t))], I = r.map((e, t) => {
1063
+ _.style.setProperty("--_base", `${X(T)}px`);
1064
+ let D = (e) => `--rise:${X(T - e)}px; `, k = (e, t) => n[t]?.cells[e] ?? n[t]?.cells[0], A = (e, t) => !k(e, t) || !!k(e, t)?.missing, j = n.map((e) => v ? Pe(e, r.length, !0) : null), M = (e, t) => j[t]?.[e].to ?? k(e, t)?.value ?? 0, N = (e, t) => j[t]?.[e].from ?? 0, P = (e, t) => [c(t), l(M(e, t))], I = r.map((e, t) => {
1039
1065
  if (!S) return {
1040
1066
  attrs: {},
1041
1067
  ink: ""
@@ -1048,78 +1074,78 @@ var Ye = (e) => {
1048
1074
  },
1049
1075
  ink: `--n:${t}; --m:${+!!n}; --palette:var(--tablechart-color-${t + 1}); `
1050
1076
  };
1051
- }), R = y ? w : Math.min(w, 6);
1052
- t.plot.style.setProperty("--count", String(R + 1));
1053
- let z = w > 0 ? R / (b ? n.length : w) : 1, B = (e) => e * z, V = (e) => `--i:${Z(B(e))}`, H = (e) => {
1077
+ }), L = y ? w : Math.min(w, 6);
1078
+ t.plot.style.setProperty("--count", String(L + 1));
1079
+ let z = w > 0 ? L / (b ? n.length : w) : 1, B = (e) => e * z, V = (e) => `--i:${X(B(e))}`, ee = (e) => {
1054
1080
  let t = [], r = -1;
1055
1081
  return n.forEach((n, i) => {
1056
1082
  A(e, i) || (r < 0 && (r = i), (i === w || A(e, i + 1)) && ((b || i > r) && t.push([r, i]), r = -1));
1057
1083
  }), t;
1058
- }, ee = (e, t) => `--i:${Z(B(e) + 1)}; --d:${Z(B(b ? t + 1 : t) - B(e))}`, te = (e, t) => ({
1084
+ }, H = (e, t) => `--i:${X(B(e) + 1)}; --d:${X(B(b ? t + 1 : t) - B(e))}`, te = (e, t) => ({
1059
1085
  "data-from": e + 1,
1060
1086
  "data-to": t + 1,
1061
1087
  ...b && { "data-flat": "" }
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) => {
1088
+ }), ne = x ? r.map((e, t) => Ye(n.length, (e) => A(t, e), (e) => P(t, e))) : [], re = x && e ? r.map((e, t) => Ye(n.length, (e) => A(t, e), (e) => [c(e), l(N(t, e))])) : [], W = (e, t, n) => {
1063
1089
  let r = [];
1064
1090
  return e.forEach(([i, a], o) => {
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)}`);
1091
+ b ? (r.push(`H${X(i + n * E / 2)}`), o < e.length - 1 && r.push(`V${X(e[o + 1][1])}`)) : o > 0 && r.push(t ? Je(e[o - 1], [i, a], t[o - 1], t[o]) : `L${X(i)},${X(a)}`);
1066
1092
  }), r;
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) => {
1068
- let t = P("g", {
1093
+ }, ie = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [c(t + r), l(i(e, t + r))]), G = (e, t, n, r) => x ? e[t].slice(n, r + 1) : null, ae = (e) => c(e) - (b ? E / 2 : 0), K = (e) => c(e) + (b ? E / 2 : 0), oe = (e) => {
1094
+ let t = F("g", {
1069
1095
  class: d,
1070
1096
  ...I[e].attrs,
1071
1097
  ...v && { "data-stacked": "" },
1072
1098
  style: I[e].ink
1073
- }), n = H(e), r = P("g", {
1099
+ }), n = ee(e), r = F("g", {
1074
1100
  class: "tablechart-area-fill",
1075
- style: `--rows:${Z(R + 1)}; ${n.length ? ee(...n[0]) : ""}`
1101
+ style: `--rows:${X(L + 1)}; ${n.length ? H(...n[0]) : ""}`
1076
1102
  });
1077
1103
  t.appendChild(r);
1078
1104
  for (let [t, i] of n) {
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),
1083
- `L${Z(q(i))},${Z(a[a.length - 1][1])}`,
1084
- ...re(a.reverse(), o, -1),
1105
+ let n = ie(e, t, i, M), a = ie(e, t, i, N), o = G(re, e, t, i)?.reverse() ?? null, s = [
1106
+ `M${X(ae(t))},${X(a[0][1])}`,
1107
+ `L${X(ae(t))},${X(n[0][1])}`,
1108
+ ...W(n, G(ne, e, t, i), 1),
1109
+ `L${X(K(i))},${X(a[a.length - 1][1])}`,
1110
+ ...W(a.reverse(), o, -1),
1085
1111
  "Z"
1086
1112
  ].join(" ");
1087
- r.appendChild(P("path", {
1113
+ r.appendChild(F("path", {
1088
1114
  d: s,
1089
1115
  ...te(t, i),
1090
- style: ee(t, i)
1116
+ style: H(t, i)
1091
1117
  }));
1092
1118
  }
1093
1119
  _.appendChild(t);
1094
- }, oe = (e) => {
1120
+ }, se = (e) => {
1095
1121
  let t = r[e];
1096
- for (let [n, r] of H(e)) {
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(" ");
1098
- _.appendChild(P("path", {
1122
+ for (let [n, r] of ee(e)) {
1123
+ let i = ie(e, n, r, M), a = [`M${X(ae(n))},${X(i[0][1])}`, ...W(i, G(ne, e, n, r), 1)].join(" ");
1124
+ _.appendChild(F("path", {
1099
1125
  class: u,
1100
1126
  ...I[e].attrs,
1101
1127
  d: a,
1102
1128
  ...t.line && { "data-line": t.line },
1103
1129
  ...te(n, r),
1104
- style: `${I[e].ink}${ee(n, r)}`
1130
+ style: `${I[e].ink}${H(n, r)}`
1105
1131
  }));
1106
1132
  }
1107
- }, se = (e) => {
1108
- let i = a.map((e) => r[e]), o = r.map((e, t) => y ? X(i, a.indexOf(t)) : S ? X(r, t) : {
1133
+ }, ce = (e) => {
1134
+ let i = a.map((e) => r[e]), o = r.map((e, t) => y ? Y(i, a.indexOf(t)) : S ? Y(r, t) : {
1109
1135
  shape: "circle",
1110
1136
  open: !1
1111
1137
  }), s = (e, t, n) => {
1112
- let [r, i] = F(e, t);
1113
- return We(o[e].shape, r, i, 4 * p, {
1138
+ let [r, i] = P(e, t);
1139
+ return Ke(o[e].shape, r, i, 3 * p, {
1114
1140
  ...n,
1115
- style: `${n.style ?? ""}${O(i)}${V(t)}`
1141
+ style: `${n.style ?? ""}${D(i)}${V(t)}`
1116
1142
  });
1117
- }, c = (t) => n.map((e, t) => t).filter((n) => !A(t, n) && e(t, n)), l = a.flatMap((e) => o[e].open ? c(e).map((t) => s(e, t, {
1143
+ }, c = (t) => /\bnone\b/.test(r[t].marker ?? "") ? [] : n.map((e, t) => t).filter((n) => !A(t, n) && e(t, n)), l = a.flatMap((e) => o[e].open ? c(e).map((t) => s(e, t, {
1118
1144
  class: h,
1119
1145
  "data-row": t + 1,
1120
1146
  ...S && { "data-series": e + 1 }
1121
1147
  })) : []);
1122
- _.closest("[data-animate]")?.getAttribute("data-animate") === "grow" ? U(_, l, D, f) : t.lineHoles.push(...l), a.forEach((e) => {
1148
+ _.closest("[data-animate]")?.getAttribute("data-animate") === "grow" ? U(_, l, O, f) : t.lineHoles.push(...l), a.forEach((e) => {
1123
1149
  for (let t of c(e)) _.appendChild(s(e, t, {
1124
1150
  class: m,
1125
1151
  ...I[e].attrs,
@@ -1130,11 +1156,11 @@ var Ye = (e) => {
1130
1156
  }));
1131
1157
  });
1132
1158
  };
1133
- e && a.forEach((e) => ae(e)), a.forEach((e) => oe(e));
1134
- let ce = y ? r.flatMap((e, t) => a.includes(t) ? [] : o[t].flatMap((e) => {
1159
+ e && a.forEach((e) => oe(e)), a.forEach((e) => se(e));
1160
+ let le = y ? r.flatMap((e, t) => a.includes(t) ? [] : o[t].flatMap((e) => {
1135
1161
  let t = e.dataset.place;
1136
1162
  if (!t || t === "none" || e.hasAttribute("data-left-out")) return [];
1137
- let [n, r, i, a] = xe(e, p, D, f);
1163
+ let [n, r, i, a] = J(e, p, O, f);
1138
1164
  return [{
1139
1165
  label: e,
1140
1166
  box: [
@@ -1146,30 +1172,30 @@ var Ye = (e) => {
1146
1172
  }];
1147
1173
  })) : [], ue = b ? [] : a.flatMap((e) => n.flatMap((t, n) => {
1148
1174
  if (A(e, n)) return [];
1149
- let [r, i] = F(e, n);
1175
+ let [r, i] = P(e, n);
1150
1176
  return [[
1151
1177
  r - 4 * p,
1152
1178
  i - 4 * p,
1153
1179
  8 * p,
1154
1180
  8 * p
1155
1181
  ]];
1156
- })), fe = ce.filter(({ label: e, box: t }) => {
1157
- let n = ue.some((e) => le(e, t));
1182
+ })), fe = le.filter(({ label: e, box: t }) => {
1183
+ let n = ue.some((e) => de(e, t));
1158
1184
  return n && e.setAttribute("data-left-out", ""), !n;
1159
- }), pe = (e, t) => {
1185
+ }), me = (e, t) => {
1160
1186
  let n = t;
1161
1187
  for (; n < w && !A(e, n + 1) && k(e, n + 1)?.value === k(e, t)?.value;) n++;
1162
1188
  return n;
1163
- }, me = (e) => e === "above" ? "below" : "above", he = (e, t, n) => {
1164
- let [r, i] = F(e, t), a = J(o[e][t]).width * p, s = [
1189
+ }, he = (e) => e === "above" ? "below" : "above", ge = (e, t, n) => {
1190
+ let [r, i] = P(e, t), a = q(o[e][t]).width * p, s = [
1165
1191
  r - a / 2,
1166
1192
  n === "above" ? i - 7 * p - g : i + 7 * p,
1167
1193
  a,
1168
1194
  g
1169
1195
  ];
1170
- return s[1] + g > f ? Infinity : [t - 1, t + 1].filter((t) => t >= 0 && t <= w && !A(e, t)).flatMap((n) => ge(e, t, n, 0)).filter((e) => le(e, s)).length;
1171
- }, ge = (e, t, n, r) => {
1172
- let [i, a] = F(e, t), [o, s] = F(e, n), c = Math.max(1, Math.ceil(Math.hypot(o - i, s - a) / (3 * p)));
1196
+ return s[1] + g > f ? Infinity : [t - 1, t + 1].filter((t) => t >= 0 && t <= w && !A(e, t)).flatMap((n) => _e(e, t, n, 0)).filter((e) => de(e, s)).length;
1197
+ }, _e = (e, t, n, r) => {
1198
+ let [i, a] = P(e, t), [o, s] = P(e, n), c = Math.max(1, Math.ceil(Math.hypot(o - i, s - a) / (3 * p)));
1173
1199
  return Array.from({ length: c + 1 }, (e, t) => {
1174
1200
  let n = t / c;
1175
1201
  return [
@@ -1179,101 +1205,110 @@ var Ye = (e) => {
1179
1205
  2 * r
1180
1206
  ];
1181
1207
  });
1182
- }, _e = (t, n) => {
1208
+ }, ve = (t, n) => {
1183
1209
  let i = k(t, n);
1184
1210
  if (!i || i.missing || b && n > 0 && !A(t, n - 1) && k(t, n - 1)?.value === i.value || C && !r[t].focus) return "none";
1185
1211
  if (v) return "middle";
1186
1212
  let a = i.value < 0 ? "below" : "above";
1187
- if (!S || C || r.length > 2) return e || b || he(t, n, a) <= he(t, n, me(a)) ? a : me(a);
1213
+ if (!S || C || r.length > 2) return e || b || ge(t, n, a) <= ge(t, n, he(a)) ? a : he(a);
1188
1214
  let o = k(1 - t, n);
1189
- return !o || o.missing ? a : i.value > o.value || i.value === o.value && t === 0 || e && i.value >= 0 && F(t, n)[1] + 7 * p + g > T ? "above" : "below";
1190
- }, ve = (y || S && !C && r.length > 2 && !v) && !b, be = /* @__PURE__ */ new Map();
1191
- if (ve) {
1215
+ return !o || o.missing ? a : i.value > o.value || i.value === o.value && t === 0 || e && i.value >= 0 && P(t, n)[1] + 7 * p + g > T ? "above" : "below";
1216
+ }, ye = (e) => {
1217
+ let t = w;
1218
+ for (; t > 0 && A(e, t);) t--;
1219
+ return t;
1220
+ }, be = b || v ? 10 * p : Math.max(10 * p, ...a.map((e) => q(o[e][w]).width * p / 2 + 6 * p)), Se = t.numbersAtEnd ? Math.max(...a.map((e) => q(o[e][ye(e)]).width * p)) + 11 * p : be, Ce = () => {
1221
+ let e = (s[0] ? q(s[0]).height : 0) * p, n = 2 * p, r = a.flatMap((e) => {
1222
+ let t = s[e];
1223
+ if (!t) return [];
1224
+ let [n, r] = P(e, ye(e));
1225
+ return [{
1226
+ name: t,
1227
+ x: n + Se,
1228
+ y: r
1229
+ }];
1230
+ }), i = t.numbersAtEnd ? Se - 7 * p : 0;
1231
+ return xe(r, e).map((t) => [
1232
+ t.x - n - i,
1233
+ t.y - e / 2 - n,
1234
+ q(t.name).width * p + 2 * n + i,
1235
+ e + 2 * n
1236
+ ]);
1237
+ }, we = (y || S && !C && r.length > 2 && !v) && !b, Ee = /* @__PURE__ */ new Map();
1238
+ if (we) {
1192
1239
  let e = n.flatMap((e, t) => a.map((e) => ({
1193
1240
  s: e,
1194
1241
  i: t,
1195
1242
  value: k(e, t)?.value ?? 0
1196
- }))).filter(({ s: e, i: t }) => _e(e, t) !== "none").sort((e, t) => e.i - t.i || t.value - e.value || e.s - t.s), t = (e) => e < 0 ? ["below", "above"] : ["above", "below"], r = de(e.map(({ s: e, i: n, value: r }) => {
1197
- let i = J(o[e][n]).width * p, [a, s] = F(e, n);
1243
+ }))).filter(({ s: e, i: t }) => ve(e, t) !== "none").sort((e, t) => e.i - t.i || t.value - e.value || e.s - t.s), t = (e) => e < 0 ? ["below", "above"] : ["above", "below"], r = pe(e.map(({ s: e, i: n, value: r }) => {
1244
+ let i = q(o[e][n]).width * p, [a, s] = P(e, n);
1198
1245
  return t(r).map((e) => [
1199
1246
  a - i / 2,
1200
1247
  e === "above" ? s - 7 * p - g : s + 7 * p,
1201
1248
  i,
1202
1249
  g
1203
1250
  ]);
1204
- }), [...a.flatMap((e) => n.flatMap((t, n) => {
1205
- if (A(e, n)) return [];
1206
- let [r, i] = F(e, n);
1207
- return [[
1208
- r - 4 * p,
1209
- i - 4 * p,
1210
- 8 * p,
1211
- 8 * p
1212
- ]];
1213
- })), ...fe.map(({ box: e }) => e)], [
1251
+ }), [
1252
+ ...a.flatMap((e) => n.flatMap((t, n) => {
1253
+ if (A(e, n)) return [];
1254
+ let [r, i] = P(e, n);
1255
+ return [[
1256
+ r - 4 * p,
1257
+ i - 4 * p,
1258
+ 8 * p,
1259
+ 8 * p
1260
+ ]];
1261
+ })),
1262
+ ...Ce(),
1263
+ ...fe.map(({ box: e }) => e)
1264
+ ], [
1214
1265
  0,
1215
1266
  0,
1216
1267
  c(w) + c(0),
1217
1268
  f
1218
1269
  ]);
1219
- e.forEach(({ s: e, i: n, value: i }, a) => be.set(o[e][n], r[a] === null ? null : t(i)[r[a]]));
1270
+ e.forEach(({ s: e, i: n, value: i }, a) => Ee.set(o[e][n], r[a] === null ? null : t(i)[r[a]]));
1220
1271
  }
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;
1272
+ let De = (e, t) => we ? Ee.get(o[e][t]) === null : !v && !b ? !1 : q(o[e][t]).width * p > (b ? me(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;
1222
1273
  a.forEach((e) => {
1223
1274
  o[e].forEach((t, n) => {
1224
- t.style.setProperty("--i", String(Z(b ? (B(n) + B(n + 1)) / 2 : B(n))));
1225
- let r = be.get(t) ?? _e(e, n);
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;
1227
- let i = J(t).width * p / 2 + 4 * p, a = c(n);
1228
- b ? a = (c(n) + c(pe(e, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === w && (a -= i);
1275
+ t.style.setProperty("--i", String(X(b ? (B(n) + B(n + 1)) / 2 : B(n))));
1276
+ let r = Ee.get(t) ?? ve(e, n);
1277
+ if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" && De(e, n)), b && r !== "none" ? t.dataset.rowEnd = String(me(e, n) + 1) : delete t.dataset.rowEnd, r === "none") return;
1278
+ let i = q(t).width * p / 2 + 4 * p, a = c(n);
1279
+ b ? a = (c(n) + c(me(e, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === w && (a -= i);
1229
1280
  let o = l(M(e, n)), s = {
1230
1281
  middle: (l(N(e, n)) - o) / 2,
1231
1282
  above: -7 * p,
1232
1283
  below: 7 * p
1233
1284
  };
1234
- L(t, a, o + s[r], D, f);
1285
+ R(t, a, o + s[r], O, f);
1235
1286
  });
1236
1287
  });
1237
- let Ce = (e) => {
1288
+ let Oe = (e) => {
1238
1289
  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;
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) => ({
1290
+ 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(...et(i.map((e) => ({
1240
1291
  x: e,
1241
1292
  y: a(e)
1242
1293
  })))?.outside.map((e) => e.x) ?? []));
1243
1294
  let c = [];
1244
1295
  for (let t of r) {
1245
1296
  let n = o[e][t];
1246
- c.includes(t) || n.dataset.place === "none" || c.every((t) => Y([o[e][t], n], p, 1e3, f) === 1) && c.push(t);
1297
+ c.includes(t) || n.dataset.place === "none" || c.every((t) => Te([o[e][t], n], p, 1e3, f) === 1) && c.push(t);
1247
1298
  }
1248
1299
  return new Set(c);
1249
- }, we = (e) => Y(o[e].filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), p, D, f) === 1, Te = (e) => {
1250
- let t = w;
1251
- for (; t > 0 && A(e, t);) t--;
1252
- return t;
1253
- }, Ee = /* @__PURE__ */ new Map();
1300
+ }, ke = (e) => Te(o[e].filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), p, O, f) === 1, Ae = /* @__PURE__ */ new Map();
1254
1301
  for (let e of a) {
1255
- let n = t.pick.mode === "all" || t.pick.mode === "auto" && we(e) ? null : Ce(e);
1256
- Ee.set(e, n), n && o[e].forEach((e, t) => {
1302
+ let n = t.pick.mode === "all" || t.pick.mode === "auto" && ke(e) ? null : Oe(e);
1303
+ Ae.set(e, n), n && o[e].forEach((e, t) => {
1257
1304
  e.dataset.place !== "none" && !n.has(t) && e.setAttribute("data-left-out", "");
1258
1305
  });
1259
1306
  }
1260
- if (!v && !b && a.some((e) => Ee.get(e))) {
1261
- let e = c(w) + c(0), t = 2 * p, r = a.flatMap((e) => n.flatMap((n, r) => r === w || A(e, r) || A(e, r + 1) ? [] : ge(e, r, r + 1, t))), i = (s[0] ? J(s[0]).height : 0) * p, l = a.flatMap((e) => {
1262
- let t = s[e];
1263
- if (!t) return [];
1264
- let n = w;
1265
- for (; n > 0 && A(e, n);) n--;
1266
- let [r, a] = F(e, n);
1267
- return [[
1268
- r + 10 * p,
1269
- a - i / 2,
1270
- J(t).width * p,
1271
- i
1272
- ]];
1273
- }), u = a.flatMap((e) => [...Ee.get(e) ?? []].map((t) => ({
1307
+ if (!v && !b && a.some((e) => Ae.get(e))) {
1308
+ let e = c(w) + c(0), r = 2 * p, i = (e) => n.flatMap((t, n) => n === w || A(e, n) || A(e, n + 1) ? [] : _e(e, n, n + 1, r)), s = a.flatMap(i), l = Ce(), u = a.flatMap((e) => [...Ae.get(e) ?? []].map((t) => ({
1274
1309
  s: e,
1275
1310
  i: t
1276
- }))), d = ({ s: e, i: t }) => {
1311
+ }))), d = ({ s: e, i: n }) => t.numbersAtEnd && n === ye(e), m = u.filter((e) => !d(e)), h = ({ s: e, i: t }) => {
1277
1312
  let n = k(e, t)?.value ?? 0, r = t > 0 && !A(e, t - 1) ? k(e, t - 1)?.value : void 0, i = t < w && !A(e, t + 1) ? k(e, t + 1)?.value : void 0;
1278
1313
  return (r ?? i) !== void 0 && (r === void 0 || n <= r) && (i === void 0 || n <= i) ? [
1279
1314
  "below",
@@ -1290,8 +1325,8 @@ var Ye = (e) => {
1290
1325
  "after",
1291
1326
  "before"
1292
1327
  ];
1293
- }, m = ({ s: t, i: n }, r) => {
1294
- let i = J(o[t][n]).width * p, a = g, [s, c] = F(t, n), l = Math.min(Math.max(s - i / 2, 0), e - i);
1328
+ }, _ = ({ s: t, i: n }, r) => {
1329
+ let i = q(o[t][n]).width * p, a = g, [s, c] = P(t, n), l = Math.min(Math.max(s - i / 2, 0), e - i);
1295
1330
  return r === "outside" ? [
1296
1331
  l,
1297
1332
  c - 7 * p - a,
@@ -1323,65 +1358,70 @@ var Ye = (e) => {
1323
1358
  i,
1324
1359
  a
1325
1360
  ];
1326
- }, h = u.map(d), _ = (t) => t[0] >= 0 && t[1] >= 0 && t[0] + t[2] <= e && t[1] + t[3] <= f - 2 * p, v = u.map(({ s: e, i: t }) => {
1327
- let [n, r] = F(e, t);
1361
+ }, v = m.map(h), y = (t) => t[0] >= 0 && t[1] >= 0 && t[0] + t[2] <= e && t[1] + t[3] <= f - 2 * p, b = u.map(({ s: e, i: t }) => {
1362
+ let [n, r] = P(e, t);
1328
1363
  return [
1329
1364
  n - 6 * p,
1330
1365
  r - 6 * p,
1331
1366
  12 * p,
1332
1367
  12 * p
1333
1368
  ];
1334
- }), y = [], b = /* @__PURE__ */ new Set(), x = u.map((e, t) => {
1335
- let n = h[t].map((t) => m(e, t)), i = (e) => _(e) && ![
1336
- ...y,
1369
+ }), x = [], S = /* @__PURE__ */ new Set(), C = m.map((e, t) => {
1370
+ let n = v[t].map((t) => _(e, t)), r = (e) => y(e) && ![
1371
+ ...x,
1337
1372
  ...l,
1338
- ...v
1339
- ].some((t) => le(e, t)), a = n.findIndex((e) => i(e) && !r.some((t) => le(e, t)));
1340
- return a < 0 && (a = n.findIndex(i), a >= 0 && b.add(t)), a >= 0 && y.push(n[a]), a < 0 ? null : a;
1373
+ ...b
1374
+ ].some((t) => de(e, t)), o = a.filter((t) => t !== e.s).flatMap(i), c = (n) => !v[t][n].endsWith("far") || !o.some((r) => de(_(e, v[t][n].split(" ")[0]), r)), u = n.findIndex((e, t) => r(e) && c(t) && !s.some((t) => de(e, t)));
1375
+ return u < 0 && (u = n.findIndex((e, t) => r(e) && c(t)), u >= 0 && S.add(t)), u >= 0 && x.push(n[u]), u < 0 ? null : u;
1341
1376
  });
1342
- u.forEach((e, t) => {
1377
+ m.forEach((e, t) => {
1343
1378
  let n = o[e.s][e.i];
1344
- n.toggleAttribute("data-cut", b.has(t));
1345
- let r = x[t];
1346
- if (r === null) return n.setAttribute("data-left-out", "");
1347
- let i = h[t][r], [a, s, c, l] = m(e, i), u = i.split(" ")[0];
1348
- n.dataset.place = u, L(n, u === "after" ? a : u === "before" ? a + c : a + c / 2, u === "outside" ? s + l : u === "below" ? s : s + l / 2, D, f);
1379
+ n.toggleAttribute("data-cut", S.has(t));
1380
+ let r = C[t];
1381
+ if (n.toggleAttribute("data-left-out", r === null), r === null) return;
1382
+ let i = v[t][r], [a, s, c, l] = _(e, i), u = i.split(" ")[0];
1383
+ n.dataset.place = u, R(n, u === "after" ? a : u === "before" ? a + c : a + c / 2, u === "outside" ? s + l : u === "below" ? s : s + l / 2, O, f);
1349
1384
  });
1350
1385
  }
1351
- b || se((e, t) => {
1352
- let n = Ee.get(e);
1386
+ b || ce((e, t) => {
1387
+ let n = Ae.get(e);
1353
1388
  return n ? n.has(t) : E >= 10 * p;
1354
1389
  }), t.pointOf = (e) => {
1355
- let t = a.filter((t) => !A(t, e)).map((t) => F(t, e));
1390
+ let t = a.filter((t) => !A(t, e)).map((t) => P(t, e));
1356
1391
  return t.length ? t.reduce((e, t) => t[1] < e[1] ? t : e) : null;
1357
1392
  };
1358
- let De = (y ? [] : s).map((e, t) => {
1359
- let n = Te(t), [r, i] = F(t, n);
1393
+ let je = (y ? [] : s).map((e, t) => {
1394
+ let n = ye(t), [r, i] = P(t, n);
1360
1395
  return {
1361
1396
  name: e,
1362
- x: (b ? r + E / 2 : r) + 10 * p,
1397
+ s: t,
1398
+ x: (b ? r + E / 2 : r) + Se,
1363
1399
  y: v ? (i + l(N(t, n))) / 2 : i
1364
1400
  };
1365
- }), Oe = (s[0] ? J(s[0]).height : 0) * p;
1366
- for (let e of ye(De, Oe)) L(e.name, e.x, e.y, D, f);
1367
- let ke = n.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), Ae = !e && !v && r.length === 2 && !C && !ke ? f - 2 * p : T;
1368
- y || _.appendChild(P("line", {
1401
+ }), Me = (s[0] ? q(s[0]).height : 0) * p;
1402
+ for (let e of xe(je, Me)) {
1403
+ if (R(e.name, e.x, e.y, O, f), !t.numbersAtEnd) continue;
1404
+ let n = o[e.s][ye(e.s)];
1405
+ n.dataset.place = "before", n.removeAttribute("data-left-out"), n.removeAttribute("data-cut"), R(n, e.x - 4 * p, e.y, O, f);
1406
+ }
1407
+ let Ne = n.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), Fe = !e && !v && r.length === 2 && !C && !Ne ? f - 2 * p : T;
1408
+ y || _.appendChild(F("line", {
1369
1409
  class: i,
1370
1410
  x1: 0,
1371
1411
  x2: c(w) + c(0),
1372
- y1: Ae,
1373
- y2: Ae
1412
+ y1: Fe,
1413
+ y2: Fe
1374
1414
  }));
1375
1415
  }
1376
- }), nt = tt(!1), rt = tt(!0), it = /* @__PURE__ */ new Set(), at = (t, n) => {
1416
+ }), rt = nt(!1), it = nt(!0), at = /* @__PURE__ */ new Set(), ot = (t, n) => {
1377
1417
  if (Math.abs(t - n) <= Math.abs(n) / 100) return;
1378
1418
  let r = `[${e}] A total reads ${t}, but the steps before it add up to ${Number(n.toFixed(6))}. The chart shows your number.`;
1379
- it.has(r) || (it.add(r), console.warn(r));
1380
- }, ot = {
1419
+ at.has(r) || (at.add(r), console.warn(r));
1420
+ }, st = {
1381
1421
  segments: (e) => {
1382
1422
  let t = 0, n = !1;
1383
1423
  return e.map((e) => {
1384
- if (e.isTotal) return n && at(e.value, t), n = !1, t = e.value, {
1424
+ if (e.isTotal) return n && ot(e.value, t), n = !1, t = e.value, {
1385
1425
  ...e,
1386
1426
  from: 0,
1387
1427
  to: e.value,
@@ -1399,34 +1439,34 @@ var Ye = (e) => {
1399
1439
  breakable: !0,
1400
1440
  headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
1401
1441
  draw({ segments: e, cx: t, y: n, barWidth: a, height: o, unit: s, svg: c, values: l, breakAt: u, insideAlign: d }) {
1402
- let f = n(0), p = he(l, a, s), m = d ?? "center", h = e.map((t, r) => {
1442
+ let f = n(0), p = _e(l, a, s), m = d ?? "center", h = e.map((t, r) => {
1403
1443
  let i = n(Math.max(t.from, t.to)), a = Math.abs(n(t.from) - n(t.to)), o = u !== null && Math.min(t.from, t.to) < u && Math.max(t.from, t.to) > u, c = t.kind === "total" && r > 0 && r === e.length - 1;
1404
1444
  return {
1405
1445
  top: i,
1406
1446
  length: a,
1407
1447
  down: t.kind === "down" || t.kind === "total" && (c ? t.to >= 0 : t.to < 0),
1408
- inside: !o && !p && ge(l[r], a, s)
1448
+ inside: !o && !p && ve(l[r], a, s)
1409
1449
  };
1410
- }), g = l[0] ? J(l[0]).height * s * .56 : 0, _ = Infinity;
1411
- for (let [e, t] of h.entries()) t.inside && (_ = Math.min(_, (a - J(l[e]).width * s) / 2));
1412
- let v = e.length, y = (e, t, n = !1) => `--start:${(e / v).toFixed(4)}; --span:${(t / v).toFixed(4)}; --ease:${n ? k : "linear"};`;
1450
+ }), g = l[0] ? q(l[0]).height * s * .56 : 0, _ = Infinity;
1451
+ for (let [e, t] of h.entries()) t.inside && (_ = Math.min(_, (a - q(l[e]).width * s) / 2));
1452
+ let v = e.length, y = (e, t, n = !1) => `--start:${(e / v).toFixed(4)}; --span:${(t / v).toFixed(4)}; --ease:${n ? A : "linear"};`;
1413
1453
  e.forEach((r, i) => {
1414
1454
  let o = e[i + 1];
1415
1455
  if (!o) return;
1416
1456
  let s = n(r.to), l = t(i) + a / 2, u = t(i + 1) - a / 2;
1417
- c.appendChild(P("line", {
1457
+ c.appendChild(F("line", {
1418
1458
  class: "tablechart-connector",
1419
1459
  x1: l,
1420
1460
  x2: u,
1421
1461
  y1: s,
1422
1462
  y2: s,
1423
1463
  "data-row": i + 2,
1424
- style: `${j("--i", o.slot)}; ${y(i + 1, 1 / 3)}`
1464
+ style: `${M("--i", o.slot)}; ${y(i + 1, 1 / 3)}`
1425
1465
  }));
1426
1466
  }), e.forEach((n, i) => {
1427
1467
  let { top: u, length: d, down: f, inside: p } = h[i];
1428
- c.appendChild(P("rect", {
1429
- class: F(r, n),
1468
+ c.appendChild(F("rect", {
1469
+ class: I(r, n),
1430
1470
  "data-kind": n.kind,
1431
1471
  "data-row": i + 1,
1432
1472
  "data-grow": f ? "down" : "up",
@@ -1434,18 +1474,18 @@ var Ye = (e) => {
1434
1474
  y: u,
1435
1475
  width: a,
1436
1476
  height: Math.max(d, 1),
1437
- style: `${j("--i", n.slot)}; ${y(i, 1, i === e.length - 1)}`
1477
+ style: `${M("--i", n.slot)}; ${y(i, 1, i === e.length - 1)}`
1438
1478
  }));
1439
1479
  let b = l[i];
1440
1480
  b.style.setProperty("--start", (i / v).toFixed(4)), b.style.setProperty("--span", (1 / v).toFixed(4));
1441
1481
  let x = Math.min(_, (d - g) / 2), S = u + x + g / 2, C = u + d - x - g / 2, w = m === "center" ? u + d / 2 : m === "end" === f ? C : S;
1442
1482
  b.dataset.place = p ? "inside" : "outside", b.dataset.kind = n.kind;
1443
- let T = p ? w : n.kind === "down" ? u + d + J(b).height * s + 3 * s : u - 3 * s;
1444
- L(b, t(i), T, D, o);
1445
- }), c.appendChild(P("line", {
1483
+ let T = p ? w : n.kind === "down" ? u + d + q(b).height * s + 3 * s : u - 3 * s;
1484
+ R(b, t(i), T, O, o);
1485
+ }), c.appendChild(F("line", {
1446
1486
  class: i,
1447
1487
  x1: 0,
1448
- x2: D,
1488
+ x2: O,
1449
1489
  y1: f,
1450
1490
  y2: f
1451
1491
  }));
@@ -1460,7 +1500,7 @@ var Ye = (e) => {
1460
1500
  let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
1461
1501
  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;
1462
1502
  }
1463
- }, st = (e) => {
1503
+ }, ct = (e) => {
1464
1504
  let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
1465
1505
  return {
1466
1506
  raw: t,
@@ -1470,14 +1510,14 @@ var Ye = (e) => {
1470
1510
  missing: !n,
1471
1511
  value: n ? Number.parseFloat(n[2].replace(",", ".")) : 0
1472
1512
  };
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") ?? [];
1513
+ }, lt = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).flatMap((e, t) => e.hasAttribute("data-note") ? [t] : []), ut = (e, t) => {
1514
+ let n = lt(e), r = e.querySelectorAll("tbody tr")[t]?.querySelectorAll("td") ?? [];
1475
1515
  return n.map((e) => r[e]).find((e) => e?.textContent?.trim()) ?? null;
1476
- }, ut = (e, t = "data-i18n") => {
1477
- let n = ct(e);
1516
+ }, dt = (e, t = "data-i18n") => {
1517
+ let n = lt(e);
1478
1518
  return Array.from(e.querySelectorAll("tbody tr")).map((e, r) => {
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));
1519
+ let i = e.querySelector("th"), a = Array.from(e.querySelectorAll("td")), o = a.filter((e, t) => !n.includes(t)).map(ct);
1520
+ o.length || o.push(ct(null));
1481
1521
  let s = n.map((e) => a[e]).find((e) => e?.textContent?.trim());
1482
1522
  return {
1483
1523
  ...o[0],
@@ -1493,8 +1533,8 @@ var Ye = (e) => {
1493
1533
  slot: r
1494
1534
  };
1495
1535
  });
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)));
1536
+ }, ft = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).filter((e) => !e.hasAttribute("data-note")), pt = (e) => e === "dashed" || e === "dotted" || e === "dash-dot" ? e : null, mt = (e, t, n = "data-i18n") => {
1537
+ let r = ft(e), i = Math.max(1, W(t.map((e) => e.cells.length)));
1498
1538
  return Array.from({ length: i }, (e, t) => {
1499
1539
  let i = r[t];
1500
1540
  return {
@@ -1502,12 +1542,12 @@ var Ye = (e) => {
1502
1542
  key: n && i?.getAttribute(n) || null,
1503
1543
  focus: i?.getAttribute("data-kind") === "focus",
1504
1544
  marker: i?.getAttribute("data-marker") ?? null,
1505
- line: ft(i?.getAttribute("data-line")),
1545
+ line: pt(i?.getAttribute("data-line")),
1506
1546
  group: !!i?.hasAttribute("data-group"),
1507
1547
  chart: i?.getAttribute("data-chart") === "line" ? "line" : null
1508
1548
  };
1509
1549
  });
1510
- }, mt = (t, n) => {
1550
+ }, ht = (t, n) => {
1511
1551
  if (!n) return;
1512
1552
  let r = /* @__PURE__ */ new Map();
1513
1553
  for (let i of t) {
@@ -1520,7 +1560,7 @@ var Ye = (e) => {
1520
1560
  i.querySelectorAll("tbody th").forEach((e, r) => {
1521
1561
  e.getAttribute(n) || e.setAttribute(n, `${t}-row${r + 1}`);
1522
1562
  });
1523
- let a = dt(i);
1563
+ let a = ft(i);
1524
1564
  a.length > 1 && a.forEach((e, r) => {
1525
1565
  e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
1526
1566
  }), a.forEach((e, r) => {
@@ -1531,7 +1571,7 @@ var Ye = (e) => {
1531
1571
  a.includes(r) || a.push(r), e.getAttribute(n) || e.setAttribute(n, `${t}-group${a.indexOf(r) + 1}`);
1532
1572
  });
1533
1573
  });
1534
- let o = ct(i);
1574
+ let o = lt(i);
1535
1575
  i.querySelectorAll("tbody tr").forEach((e, r) => {
1536
1576
  let i = e.querySelectorAll("td");
1537
1577
  for (let e of o) {
@@ -1540,23 +1580,23 @@ var Ye = (e) => {
1540
1580
  }
1541
1581
  }), Q?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
1542
1582
  }
1543
- }, ht = (e) => Number(e.toPrecision(12)), gt = (e, t) => {
1583
+ }, gt = (e) => Number(e.toPrecision(12)), _t = (e, t) => {
1544
1584
  let n = e / Math.max(1, t) || 1, r = 10 ** Math.floor(Math.log10(n)), i = n / r;
1545
- return ht((i < 1.42 ? 1 : i < 3.17 ? 2 : i < 7.08 ? 5 : 10) * r);
1546
- }, _t = (e, t, n) => {
1585
+ return gt((i < 1.42 ? 1 : i < 3.17 ? 2 : i < 7.08 ? 5 : 10) * r);
1586
+ }, vt = (e, t, n) => {
1547
1587
  let r = [];
1548
- for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(ht(i * n));
1588
+ for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(gt(i * n));
1549
1589
  return r;
1550
- }, vt = (e, t = e) => {
1590
+ }, yt = (e, t = e) => {
1551
1591
  do {
1552
1592
  let t = Math.round(e / 10 ** Math.floor(Math.log10(e) + 1e-9));
1553
- e = ht(e * (t === 2 ? 2.5 : 2));
1593
+ e = gt(e * (t === 2 ? 2.5 : 2));
1554
1594
  } while (Math.abs(e / t - Math.round(e / t)) > 1e-9);
1555
1595
  return e;
1556
- }, yt = (e) => {
1596
+ }, bt = (e) => {
1557
1597
  let t = (e ?? "").trim().split(/\s+/).map(Number.parseFloat);
1558
1598
  return t.length > 1 && t.every(Number.isFinite) ? t.sort((e, t) => e - t) : null;
1559
- }, bt = (e, t, n) => {
1599
+ }, xt = (e, t, n) => {
1560
1600
  if (n && n.length > 2) return {
1561
1601
  min: n[0],
1562
1602
  max: n[n.length - 1],
@@ -1568,89 +1608,122 @@ var Ye = (e) => {
1568
1608
  let e = (i - r || Math.abs(i) || 1) * .05;
1569
1609
  r -= e, i += e;
1570
1610
  }
1571
- let a = gt(i - r, t);
1611
+ let a = _t(i - r, t);
1572
1612
  return {
1573
1613
  min: r,
1574
1614
  max: i,
1575
1615
  step: a,
1576
- ticks: _t(r, i, a)
1616
+ ticks: vt(r, i, a)
1577
1617
  };
1578
- }, xt = (e, t) => {
1618
+ }, St = (e, t) => {
1579
1619
  let { step: n, ticks: r } = e;
1580
- for (; n && r.length > 2 && !t(r);) n = vt(n, e.step), r = _t(e.min, e.max, n);
1620
+ for (; n && r.length > 2 && !t(r);) n = yt(n, e.step), r = vt(e.min, e.max, n);
1581
1621
  return {
1582
1622
  ...e,
1583
1623
  step: n,
1584
1624
  ticks: r
1585
1625
  };
1586
- }, St = null, Ct = (e) => {
1587
- if (St ?? (St = document.createElement("canvas").getContext("2d", { willReadFrequently: !0 })), !St) return [
1626
+ }, Ct = null, wt = (e) => {
1627
+ if (Ct ?? (Ct = document.createElement("canvas").getContext("2d", { willReadFrequently: !0 })), !Ct) return [
1588
1628
  0,
1589
1629
  0,
1590
1630
  0,
1591
1631
  1
1592
1632
  ];
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;
1633
+ Ct.clearRect(0, 0, 1, 1), Ct.fillStyle = e, Ct.fillRect(0, 0, 1, 1);
1634
+ let [t, n, r, i] = Ct.getImageData(0, 0, 1, 1).data;
1595
1635
  return [
1596
1636
  t,
1597
1637
  n,
1598
1638
  r,
1599
1639
  i / 255
1600
1640
  ];
1601
- }, wt = ([e, t, n]) => {
1641
+ }, Tt = ([e, t, n]) => {
1602
1642
  let r = (e) => {
1603
1643
  let t = e / 255;
1604
1644
  return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
1605
1645
  };
1606
1646
  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);
1647
+ }, Et = (e) => getComputedStyle(e).getPropertyValue("--tablechart-contrast-wcag").trim() === "3" ? 3 : 2, Dt = ([e, t, n]) => {
1648
+ let r = .2126729 * (e / 255) ** 2.4 + .7151522 * (t / 255) ** 2.4 + .072175 * (n / 255) ** 2.4;
1649
+ return r < .022 ? r + (.022 - r) ** 1.414 : r;
1650
+ }, Ot = (e, t) => {
1651
+ let n = Dt(e), r = Dt(t);
1652
+ if (Math.abs(r - n) < 5e-4) return 0;
1653
+ let i = r > n ? (r ** .56 - n ** .57) * 1.14 : (r ** .65 - n ** .62) * 1.14;
1654
+ return Math.abs(i) < .1 ? 0 : (Math.abs(i) - .027) * 100;
1655
+ }, kt = (e, t, n) => e === 3 ? Ot(t, n) : At(t, n), At = (e, t) => {
1656
+ let [n, r] = [Tt(e), Tt(t)].sort((e, t) => t - e);
1609
1657
  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) => {
1658
+ }, jt = (e, t) => {
1659
+ let n = document.createElement("span");
1660
+ n.style.color = t, e.append(n);
1661
+ let r = wt(getComputedStyle(n).color);
1662
+ return n.remove(), r;
1663
+ }, Mt = (e) => {
1664
+ let t = [], n = null;
1665
+ for (let r = e; r && !n; r = r.parentElement) {
1666
+ let { background: e, backgroundColor: i } = r.dataset, a = wt(i || (e && CSS.supports("color", e) ? e : "") || getComputedStyle(r).backgroundColor);
1667
+ a[3] >= 1 ? n = a : a[3] > 0 && t.push(a);
1668
+ }
1669
+ n ?? (n = jt(e, "Canvas"));
1670
+ for (let [e, r, i, a] of t.reverse()) n = [
1671
+ e,
1672
+ r,
1673
+ i
1674
+ ].map((e, t) => e * a + n[t] * (1 - a));
1675
+ let r = `rgb(${n.slice(0, 3).map(Math.round).join(" ")})`;
1676
+ return e.style.getPropertyValue("--_surface") !== r && (e.style.setProperty("--_surface", r), !0);
1677
+ }, Nt = (e) => jt(e, "var(--tablechart-surface, var(--_surface, Canvas))"), Pt = (e, t) => e.querySelector(`:is(.tablechart-bar, .tablechart-piece)[data-row="${t.dataset.row}"]${t.dataset.series ? `[data-series="${t.dataset.series}"]` : ""}`), Ft = [
1678
+ 255,
1679
+ 255,
1680
+ 255
1681
+ ], It = [
1682
+ 0,
1683
+ 0,
1684
+ 0
1685
+ ], Lt = (e, t, n) => {
1686
+ let r = kt(n, Ft, e), i = kt(n, It, e);
1687
+ return r >= t ? Ft : i >= t ? It : n === 2 && r >= 4.5 || r > i ? Ft : It;
1688
+ }, Rt = (e) => {
1616
1689
  let t = e.querySelectorAll(".tablechart-value[data-place='inside']");
1617
1690
  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
- ];
1691
+ let n = Nt(e).slice(0, 3), r = Tt(n) > .179, i = (t, n) => {
1692
+ let [r, i, a, o] = jt(e, `var(${t}, transparent)`);
1693
+ return o > 0 ? [
1694
+ r,
1695
+ i,
1696
+ a
1697
+ ] : n;
1698
+ }, a = Et(e), o = Number.parseFloat(getComputedStyle(e).getPropertyValue("--tablechart-value-contrast")) || (a === 3 ? 60 : 5), s = wt(getComputedStyle(e).color).slice(0, 3), c = i("--tablechart-value-on-dark", r ? n : s), l = i("--tablechart-value-on-light", r ? s : n);
1699
+ for (let n of t) {
1700
+ let t = Pt(e, n);
1701
+ if (!t || n.hasAttribute("data-left-out")) continue;
1702
+ let r = wt(getComputedStyle(t).fill), i = kt(a, c, r) > kt(a, l, r) ? c : l, s = kt(a, i, r) >= o ? i : Lt(r, o, a);
1703
+ n.style.setProperty("--_ink", `rgb(${s.join(" ")})`);
1704
+ }
1705
+ }, zt = (e) => {
1706
+ let t = e.querySelectorAll(".tablechart-name:not([data-place='legend'])");
1707
+ if (!t.length) return;
1708
+ let n = Et(e), r = n === 3 ? 60 : 4.5, i = Nt(e).slice(0, 3), a = wt(getComputedStyle(e).color).slice(0, 3);
1709
+ for (let o of t) {
1710
+ let t = e.querySelector(`.tablechart-series[data-series="${o.dataset.series}"]:not([data-muted])`);
1711
+ if (o.style.removeProperty("--_ink"), !t) continue;
1712
+ let s = wt(getComputedStyle(t).stroke).slice(0, 3);
1639
1713
  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;
1714
+ let t = s.map((t, n) => Math.round(t + (a[n] - t) * e / 20));
1715
+ if (!(kt(n, t, i) < r && e < 20)) {
1716
+ e && o.style.setProperty("--_ink", `rgb(${t.join(" ")})`);
1643
1717
  break;
1644
1718
  }
1645
1719
  }
1646
- r.style.setProperty("--_ink", `rgb(${s.join(" ")})`);
1647
1720
  }
1648
- }, kt = [
1721
+ }, Bt = [
1649
1722
  "axis-break",
1650
1723
  "trend",
1651
1724
  "bracket"
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")));
1725
+ ], Vt = (e, t = !1) => {
1726
+ 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) => Bt.includes(e.getAttribute("data-annotation") ?? "")), o = (e) => e.hasAttribute("data-fragment"), s = r.map((e) => Array.from(e.querySelectorAll(":scope > td")));
1654
1727
  if (!n && !r.some(o) && !i.some(o) && !s.flat().some(o) && !a.some(o) || t && !n) return null;
1655
1728
  let c = [], l = /* @__PURE__ */ new Map(), u = [], d = (e) => {
1656
1729
  let t = e === null ? void 0 : l.get(e);
@@ -1712,7 +1785,7 @@ var Ye = (e) => {
1712
1785
  count: c.length,
1713
1786
  indexes: c
1714
1787
  };
1715
- }, jt = (e) => {
1788
+ }, Ht = (e) => {
1716
1789
  let t = e.plan;
1717
1790
  if (!t) return;
1718
1791
  let n = (t) => t === null || e.step - t >= 1;
@@ -1723,7 +1796,7 @@ var Ye = (e) => {
1723
1796
  let u = r.hasAttribute("data-flat") ? (l - e + 1) / (i - e + 1) : i > e ? Math.max(0, l - e) / (i - e) : 0;
1724
1797
  r.style.setProperty("--reveal", String(u));
1725
1798
  }
1726
- }, Mt = (e) => {
1799
+ }, Ut = (e) => {
1727
1800
  let t = e.plan;
1728
1801
  if (!t) return;
1729
1802
  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) => {
@@ -1794,19 +1867,19 @@ var Ye = (e) => {
1794
1867
  let o = /* @__PURE__ */ new Map();
1795
1868
  for (let e of a) {
1796
1869
  let t = e.reduce((e, t) => e + n(t), 0), r = 0;
1797
- for (let i of e) o.set(i.dataset.row ?? "", A(r, n(i), t)), r += n(i);
1870
+ for (let i of e) o.set(i.dataset.row ?? "", j(r, n(i), t)), r += n(i);
1798
1871
  }
1799
1872
  for (let t of e.figure.querySelectorAll("[data-row]")) {
1800
1873
  let e = o.get(t.dataset.row ?? "");
1801
1874
  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));
1802
1875
  }
1803
1876
  }
1804
- jt(e);
1805
- }, Nt = (e, t, n = !1) => {
1877
+ Ht(e);
1878
+ }, Wt = (e, t, n = !1) => {
1806
1879
  let r = e.plan;
1807
1880
  if (!r) return;
1808
1881
  let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
1809
- e.step = i, e.figure.style.setProperty("--_step", String(i)), jt(e);
1882
+ e.step = i, e.figure.style.setProperty("--_step", String(i)), Ht(e);
1810
1883
  let [o, s] = e.controls?.querySelectorAll("button") ?? [];
1811
1884
  o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
1812
1885
  bubbles: !0,
@@ -1815,7 +1888,7 @@ var Ye = (e) => {
1815
1888
  steps: r.count
1816
1889
  }
1817
1890
  }));
1818
- }, Pt = (e, t, n) => {
1891
+ }, Gt = (e, t, n) => {
1819
1892
  let r = document.createElement("div");
1820
1893
  r.className = "tablechart-controls";
1821
1894
  let i = (r) => {
@@ -1823,11 +1896,11 @@ var Ye = (e) => {
1823
1896
  i.type = "button", i.className = `tablechart-${r}`, i.dataset.go = r;
1824
1897
  let a = document.createElement("span");
1825
1898
  a.className = "tablechart-control-icon", a.setAttribute("aria-hidden", "true");
1826
- let o = P("svg", {
1899
+ let o = F("svg", {
1827
1900
  viewBox: "0 0 16 16",
1828
1901
  focusable: "false"
1829
1902
  });
1830
- o.appendChild(P("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
1903
+ o.appendChild(F("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
1831
1904
  let s = document.createElement("span");
1832
1905
  s.className = "tablechart-control-label", s.textContent = e[r];
1833
1906
  let c = t[r];
@@ -1844,84 +1917,86 @@ var Ye = (e) => {
1844
1917
  ]), i;
1845
1918
  };
1846
1919
  return r.append(i("previous"), i("next")), r;
1847
- }, Ft = (e, t, n, r = {
1920
+ }, Kt = (e, t, n, r = {
1848
1921
  x: 0,
1849
1922
  y: 0,
1850
1923
  scale: 1
1851
1924
  }, i = 2, a = 8, o = 12) => {
1852
1925
  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));
1853
1926
  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`;
1854
- }, It = "tablechart-tooltip", Lt = [
1927
+ }, qt = "tablechart-tooltip", Jt = [
1855
1928
  "--tablechart-surface",
1929
+ "--_surface",
1856
1930
  "--tablechart-tooltip-surface",
1857
1931
  "--tablechart-tooltip-color",
1858
1932
  "--tablechart-tooltip-border",
1859
1933
  "--tablechart-tooltip-radius",
1860
1934
  "--tablechart-tooltip-padding",
1861
1935
  "--tablechart-tooltip-shadow"
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));
1936
+ ], $ = null, Yt, Xt, Zt = null, Qt = null, $t = 0, en = () => {
1937
+ clearTimeout($t), $ && Zt && ($.hidden = !0, Zt = null, Qt = null);
1938
+ }, tn = !1, nn = !0, rn = NaN, an = NaN, on = !1, sn = () => {
1939
+ if (on) return;
1940
+ on = !0, document.addEventListener("pointermove", (e) => {
1941
+ e.pointerType === "mouse" && (nn = e.screenX !== rn || e.screenY !== an, rn = e.screenX, an = e.screenY, nn && (tn = !1));
1868
1942
  }, {
1869
1943
  capture: !0,
1870
1944
  passive: !0
1871
1945
  });
1872
1946
  let e = () => {
1873
- Wt = !0, Ut();
1947
+ tn = !0, en();
1874
1948
  };
1875
1949
  document.addEventListener("keydown", e, !0), window.addEventListener("scroll", e, {
1876
1950
  capture: !0,
1877
1951
  passive: !0
1878
1952
  });
1879
- }, Xt = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, Zt = (e) => {
1953
+ }, cn = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, ln = (e) => {
1880
1954
  let t = e.tooltipparent;
1881
1955
  return (typeof t == "string" ? document.querySelector(t) : t) ?? document.body;
1882
- }, Qt = () => {
1883
- clearTimeout(Ht), Ht = window.setTimeout(Ut, 120);
1884
- }, $t = () => {
1956
+ }, un = () => {
1957
+ clearTimeout($t), $t = window.setTimeout(en, 120);
1958
+ }, dn = () => {
1885
1959
  let e = document.createElement("div");
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) => {
1960
+ return e.className = qt, e.setAttribute("aria-hidden", "true"), e.hidden = !0, Yt = document.createElement("div"), Xt = document.createElement("div"), Xt.className = `${qt}-arrow`, e.append(Yt, Xt), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout($t)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && un()), document.addEventListener("pointerdown", (t) => {
1887
1961
  let n = t.target;
1888
- Bt && !Bt.plot.contains(n) && !e.contains(n) && Ut();
1889
- }), window.addEventListener("resize", Ut), e;
1890
- }, en = (e, t) => {
1962
+ Zt && !Zt.plot.contains(n) && !e.contains(n) && en();
1963
+ }), window.addEventListener("resize", en), e;
1964
+ }, fn = (e, t) => {
1891
1965
  let n = t ? t.style.getPropertyValue("--step") : "x";
1892
1966
  return n === "" || Number(n) < e.step;
1893
- }, tn = (e, t) => {
1967
+ }, pn = (e, t) => {
1894
1968
  let n = e.svg.querySelector(`[data-series="${t + 1}"]:not(.tablechart-hole)`);
1895
1969
  if (!n) return;
1896
1970
  let r = getComputedStyle(n);
1897
1971
  return r.fill && r.fill !== "none" ? r.fill : r.stroke;
1898
- }, nn = (e, t, n) => {
1972
+ }, mn = (e, t, n) => {
1899
1973
  let r = e.series.length > 1, i = [];
1900
1974
  for (let [n, a] of e.seriesValues.entries()) {
1901
- if (!en(e, a[t])) continue;
1975
+ if (!fn(e, a[t])) continue;
1902
1976
  let o = r ? e.figure.querySelector(`.tablechart-name[data-series="${n + 1}"]`) : null;
1903
1977
  i.push({
1904
1978
  name: r ? o?.textContent ?? e.series[n].name : "",
1905
1979
  value: a[t].textContent ?? "",
1906
- colour: r ? tn(e, n) : void 0,
1980
+ colour: r ? pn(e, n) : void 0,
1907
1981
  sample: o ? {
1908
1982
  marker: o.dataset.marker ?? null,
1909
1983
  open: o.hasAttribute("data-open"),
1910
1984
  line: o.dataset.line ?? null,
1985
+ point: getComputedStyle(o).getPropertyValue("--tablechart-point-color").trim(),
1911
1986
  box: o.dataset.swatch === "box"
1912
1987
  } : void 0
1913
1988
  });
1914
1989
  }
1915
1990
  let a = e.totals[t];
1916
- return i.length > 1 && en(e, a) && i.push({
1991
+ return i.length > 1 && fn(e, a) && i.push({
1917
1992
  name: n.totallabel,
1918
1993
  value: a.textContent ?? ""
1919
1994
  }), i;
1920
- }, rn = (e, t) => {
1995
+ }, hn = (e, t) => {
1921
1996
  if (e.type.centre && e.values[t]) return e.values[t].getBoundingClientRect();
1922
1997
  let n = e.pointOf?.(t);
1923
1998
  if (n) {
1924
- let t = e.svg.getBoundingClientRect(), r = t.width / D, i = 4 * r * (D / e.plot.clientWidth);
1999
+ let t = e.svg.getBoundingClientRect(), r = t.width / O, i = 4 * r * (O / e.plot.clientWidth);
1925
2000
  return new DOMRect(t.left + n[0] * r - i, t.top + n[1] * r - i, 2 * i, 2 * i);
1926
2001
  }
1927
2002
  let r = e.svg.querySelectorAll(`[data-row="${t + 1}"]:not(.tablechart-connector, .tablechart-leader)`), i = null;
@@ -1937,49 +2012,49 @@ var Ye = (e) => {
1937
2012
  100
1938
2013
  ];
1939
2014
  return new DOMRect(a.left + a.width * o / 100, a.top + a.height * s / 100, a.width * c / 100, a.height * l / 100);
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());
2015
+ }, gn = (e, t, n) => {
2016
+ if (clearTimeout($t), Zt === e && Qt === t) return;
2017
+ let r = (e.type.tooltip ?? mn)(e, t, n);
2018
+ if (!r.length) return en();
2019
+ Zt && Zt !== e && en(), $ ?? ($ = dn());
1945
2020
  let i = (e, t, n, r = !1, i) => {
1946
2021
  let a = document.createElement("div");
1947
- if (a.className = `${It}-line`, n) {
2022
+ if (a.className = `${qt}-line`, n) {
1948
2023
  let e = document.createElement("span");
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);
2024
+ e.className = `${qt}-key`, e.style.backgroundColor = n, i?.box ? e.dataset.sample = "box" : i && (e.dataset.sample = "line", i.marker && (e.dataset.marker = i.marker), i.line && (e.dataset.line = i.line), i.point && e.style.setProperty("--tablechart-point-color", i.point), e.toggleAttribute("data-open", i.open)), a.append(e);
1950
2025
  }
1951
2026
  let o = document.createElement("span");
1952
- if (o.className = `${It}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
2027
+ if (o.className = `${qt}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
1953
2028
  e && o.append(":");
1954
2029
  let n = document.createElement("span");
1955
- n.className = `${It}-value`, n.textContent = t, a.append(n);
2030
+ n.className = `${qt}-value`, n.textContent = t, a.append(n);
1956
2031
  }
1957
2032
  return a;
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`,
2033
+ }, 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 = ut(e.figure, t)?.textContent?.trim(), l = c ? [Object.assign(document.createElement("div"), {
2034
+ className: `${qt}-note`,
1960
2035
  textContent: c
1961
2036
  })] : [];
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);
2037
+ Yt.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);
1963
2038
  let u = getComputedStyle(e.figure);
1964
- for (let e of Lt) {
2039
+ for (let e of Jt) {
1965
2040
  let t = u.getPropertyValue(e).trim();
1966
2041
  t ? $.style.setProperty(e, t) : $.style.removeProperty(e);
1967
2042
  }
1968
2043
  $.style.setProperty("--_color", u.color), $.style.colorScheme = u.colorScheme, $.style.fontFamily = u.fontFamily;
1969
- let d = Zt(n);
1970
- $.parentElement !== d && d.append($), Bt = e, Vt = t, $.hidden = !1, $.style.left = "0px", $.style.top = "0px";
2044
+ let d = ln(n);
2045
+ $.parentElement !== d && d.append($), Zt = e, Qt = t, $.hidden = !1, $.style.left = "0px", $.style.top = "0px";
1971
2046
  let f = $.getBoundingClientRect(), p = {
1972
2047
  x: f.left,
1973
2048
  y: f.top,
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) => {
2049
+ scale: cn($, f.width)
2050
+ }, m = cn(e.plot, e.plot.getBoundingClientRect().width);
2051
+ $.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`, Kt($, Xt, hn(e, t), p);
2052
+ }, _n = (e, t, n = !1) => {
1978
2053
  let { plot: r } = e;
1979
- r.setAttribute("data-hover", ""), Yt();
2054
+ r.setAttribute("data-hover", ""), sn();
1980
2055
  let i = (t) => {
1981
2056
  if (e.rowAt) {
1982
- let n = r.getBoundingClientRect(), i = Xt(r, n.width);
2057
+ let n = r.getBoundingClientRect(), i = cn(r, n.width);
1983
2058
  return e.rowAt((t.clientX - n.left) / i, (t.clientY - n.top) / i);
1984
2059
  }
1985
2060
  let n = t.target.closest?.("[data-row]")?.getAttribute("data-row");
@@ -1989,13 +2064,13 @@ var Ye = (e) => {
1989
2064
  else if (t.getAttribute("data-row") === String(e + 1)) return !0;
1990
2065
  return !1;
1991
2066
  }, s = null, c = (a) => {
1992
- if (a.type === "pointerdown") Wt = !1;
1993
- else if (a.pointerType === "mouse" && (!Gt || Wt)) return;
2067
+ if (a.type === "pointerdown") tn = !1;
2068
+ else if (a.pointerType === "mouse" && (!nn || tn)) return;
1994
2069
  if (!r.classList.contains("is-placed") || !e.figure.classList.contains("is-shown")) return;
1995
- if (n && !e.figure.hasAttribute("data-left-out")) return Bt === e ? Ut() : void 0;
2070
+ if (n && !e.figure.hasAttribute("data-left-out")) return Zt === e ? en() : void 0;
1996
2071
  let c = i(a);
1997
- if (s = c, c === null || o(c)) return Bt === e ? Ut() : void 0;
1998
- an(e, c, t);
2072
+ if (s = c, c === null || o(c)) return Zt === e ? en() : void 0;
2073
+ gn(e, c, t);
1999
2074
  }, l = (t) => {
2000
2075
  let n = t.target;
2001
2076
  return e.svg.contains(n) && n.hasAttribute("data-row") ? n : null;
@@ -2009,37 +2084,37 @@ var Ye = (e) => {
2009
2084
  if (!r) return;
2010
2085
  a.delete(r);
2011
2086
  let i = Number(r.getAttribute("data-row")) - 1;
2012
- s === i && !o(i) && !Wt && an(e, i, t);
2087
+ s === i && !o(i) && !tn && gn(e, i, t);
2013
2088
  };
2014
2089
  e.svg.addEventListener("transitionend", u), e.svg.addEventListener("transitioncancel", u), r.addEventListener("pointermove", c), r.addEventListener("pointerdown", c), r.addEventListener("pointerleave", (t) => {
2015
- t.pointerType === "mouse" && (s = null, Bt === e && Qt());
2090
+ t.pointerType === "mouse" && (s = null, Zt === e && un());
2016
2091
  });
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 = {
2029
- "axis-break": ne,
2030
- trend: Oe,
2031
- bracket: ce,
2032
- reference: Ee,
2033
- note: we
2034
- }, dn = Object.keys(un), fn = (e) => {
2092
+ }, vn = (e) => {
2093
+ Zt === e && en();
2094
+ }, yn = {
2095
+ area: it,
2096
+ bar: Be,
2097
+ column: Ve,
2098
+ donut: We,
2099
+ line: rt,
2100
+ waterfall: st
2101
+ }, bn = (e, t) => {
2102
+ yn[e] = t, Object.assign(xn, t.annotations), Sn.splice(0, Infinity, ...Object.keys(xn));
2103
+ }, xn = {
2104
+ "axis-break": re,
2105
+ trend: Ae,
2106
+ bracket: ue,
2107
+ reference: Oe,
2108
+ note: Ee
2109
+ }, Sn = Object.keys(xn), Cn = (e) => {
2035
2110
  let t = "";
2036
2111
  for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
2037
2112
  return t.trim();
2038
- }, pn = [
2113
+ }, wn = [
2039
2114
  "straight",
2040
2115
  "step",
2041
2116
  "smooth"
2042
- ], mn = (e, t, n, r, i) => {
2117
+ ], Tn = (e, t, n, r, i) => {
2043
2118
  let a = t === r, [o, s, c] = a ? [
2044
2119
  Math.min(e, n),
2045
2120
  Math.max(e, n),
@@ -2050,17 +2125,17 @@ var Ye = (e) => {
2050
2125
  e
2051
2126
  ], 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;
2052
2127
  for (let [e, t] of l) e > d && u.push([d, Math.min(e, s)]), d = Math.max(d, t);
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("");
2054
- }, hn = (e, t) => {
2128
+ return d < s && u.push([d, s]), u.map(([e, t]) => a ? `M${P(e)},${P(c)}H${P(t)}` : `M${P(c)},${P(e)}V${P(t)}`).join("");
2129
+ }, En = (e, t) => {
2055
2130
  let [n, r, i, a] = [
2056
2131
  "x1",
2057
2132
  "y1",
2058
2133
  "x2",
2059
2134
  "y2"
2060
- ].map((t) => Number(e.getAttribute(t))), o = P("path", { d: mn(n, r, i, a, t) });
2135
+ ].map((t) => Number(e.getAttribute(t))), o = F("path", { d: Tn(n, r, i, a, t) });
2061
2136
  for (let { name: t, value: n } of Array.from(e.attributes)) /^[xy][12]$/.test(t) || o.setAttribute(t, n);
2062
2137
  e.replaceWith(o);
2063
- }, gn = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
2138
+ }, Dn = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
2064
2139
  +e,
2065
2140
  +t,
2066
2141
  +r,
@@ -2070,19 +2145,19 @@ var Ye = (e) => {
2070
2145
  +t,
2071
2146
  +e,
2072
2147
  +r
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) => {
2148
+ ]), On = (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${P(Math.max(e, t))},${P(a)}H${P(Math.min(o, t + r))}` : "" : t <= e && e <= t + r && Math.max(a, n) < Math.min(s, n + i) ? `M${P(e)},${P(Math.max(a, n))}V${P(Math.min(s, n + i))}` : "").join(""), kn = (e, t, n) => {
2074
2149
  let r = e.getAttribute(t);
2075
2150
  return r === null ? n : r !== "false";
2076
- }, yn = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", bn = (e, t) => {
2151
+ }, An = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", jn = (e, t) => {
2077
2152
  let n = e.dataset.chartShape;
2078
- return n && pn.includes(n) ? n : pn.includes(t.shape) ? t.shape : "straight";
2079
- }, xn = (e) => {
2153
+ return n && wn.includes(n) ? n : wn.includes(t.shape) ? t.shape : "straight";
2154
+ }, Mn = (e) => {
2080
2155
  for (let t of e.querySelectorAll("br")) {
2081
- if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(fn(t))) continue;
2156
+ if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(Cn(t))) continue;
2082
2157
  let e = document.createElement("span");
2083
2158
  e.className = y, e.textContent = ". ", t.before(e);
2084
2159
  }
2085
- }, Sn = (e, t, n) => {
2160
+ }, Nn = (e, t, n) => {
2086
2161
  let r = e.querySelector("table");
2087
2162
  if (!r) return null;
2088
2163
  let i = r.querySelector("tfoot [data-chart-total]");
@@ -2093,23 +2168,43 @@ var Ye = (e) => {
2093
2168
  s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
2094
2169
  let c = a.insertCell();
2095
2170
  return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
2096
- }, Cn = 0, wn = (e) => {
2171
+ }, Pn = 0, Fn = (e) => {
2097
2172
  let t = e.querySelector(":scope > figcaption");
2098
2173
  if (!t) return;
2099
- xn(t);
2174
+ Mn(t);
2100
2175
  let n = (e) => e.hasAttribute("aria-label") || e.hasAttribute("aria-labelledby"), r = (e) => {
2101
- t.id || (t.id = `tablechart-caption-${++Cn}`), e.setAttribute("aria-labelledby", t.id);
2176
+ t.id || (t.id = `tablechart-caption-${++Pn}`), e.setAttribute("aria-labelledby", t.id);
2102
2177
  };
2103
2178
  e.tagName === "FIGURE" && !n(e) && r(e);
2104
2179
  let i = e.querySelector("table");
2105
2180
  i && !n(i) && !i.querySelector(":scope > caption") && r(i);
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);
2181
+ }, In = [
2182
+ null,
2183
+ "dashed",
2184
+ "dotted",
2185
+ "dash-dot"
2186
+ ], Ln = (t, n, r, i) => {
2187
+ let a = t.closest("[data-chart-lines]")?.getAttribute("data-chart-lines"), o = i.lines;
2188
+ if (a) try {
2189
+ o = JSON.parse(a);
2190
+ } catch {
2191
+ console.warn(`[${e}] data-chart-lines needs a JSON list, such as [{"marker":"none"}].`, t);
2192
+ }
2193
+ (r === "line" || r === "area" ? n : n.filter((e) => e.chart)).forEach((e, t) => {
2194
+ if (!o?.length) {
2195
+ e.line ?? (e.line = In[Math.floor(t / 6) % In.length]);
2196
+ return;
2197
+ }
2198
+ let n = o[t % o.length];
2199
+ e.marker ?? (e.marker = n.marker || n.open !== void 0 ? [n.marker, n.open ? "open" : "filled"].filter(Boolean).join(" ") : null), e.line === null && n.line !== "solid" && (e.line = n.line ?? null);
2200
+ });
2201
+ }, Rn = (r, i, a = null) => {
2202
+ let o = a ?? (r.getAttribute("data-chart") || "column"), s = yn[o];
2203
+ if (!s) return console.warn(`[${e}] Unknown chart type "${o}". Known types: ${Object.keys(yn).join(", ")}.`), r.setAttribute("data-chart-empty", ""), null;
2204
+ let c = dt(r, i.langattribute);
2110
2205
  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;
2111
- wn(r);
2112
- let l = pt(r, c, i.langattribute);
2206
+ Fn(r);
2207
+ let l = mt(r, c, i.langattribute);
2113
2208
  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)) {
2114
2209
  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.`;
2115
2210
  t && (console.warn(`[${e}] ${t}`), l = l.map((e) => ({
@@ -2117,64 +2212,65 @@ var Ye = (e) => {
2117
2212
  chart: null
2118
2213
  })));
2119
2214
  }
2215
+ Ln(r, l, o, i);
2120
2216
  let u = l.some((e) => e.chart), d = l.length > 1;
2121
2217
  d && r.style.setProperty("--_series-count", String(l.length));
2122
2218
  let m = r.hasAttribute("data-chart-stack");
2123
2219
  m && !s.stackable && console.warn(`[${e}] A ${o} chart cannot be stacked.`), m && u && console.warn(`[${e}] A chart with a line cannot be stacked.`);
2124
2220
  let h = m && !!s.stackable && d && !u, _ = document.createElement("div");
2125
2221
  _.className = t, _.setAttribute("aria-hidden", "true");
2126
- let v = P("svg", {
2222
+ let v = F("svg", {
2127
2223
  role: "presentation",
2128
2224
  focusable: "false"
2129
2225
  });
2130
2226
  _.appendChild(v);
2131
2227
  let y = r.querySelector(":scope > table"), b = (e) => y ? y.before(e) : r.append(e);
2132
2228
  b(_);
2133
- let x = s.centre ? c.filter((e) => !e.isTotal) : c, S = Math.max(0, W(x.flatMap((e) => e.cells.slice(0, l.length).map((e) => re(e.number))))), C = l.map((e, t) => Math.max(0, W(c.map((e) => re(e.cells[t]?.number ?? ""))))), E = document.createElement("div");
2134
- E.className = "tablechart-values", _.appendChild(E);
2229
+ let x = s.centre ? c.filter((e) => !e.isTotal) : c, S = Math.max(0, W(x.flatMap((e) => e.cells.slice(0, l.length).map((e) => ie(e.number))))), C = l.map((e, t) => Math.max(0, W(c.map((e) => ie(e.cells[t]?.number ?? ""))))), w = document.createElement("div");
2230
+ w.className = "tablechart-values", _.appendChild(w);
2135
2231
  let D = l.map((e, t) => c.map((e, r) => {
2136
- let i = e.cells[t] ?? e.cells[0], a = I(n, E);
2232
+ let i = e.cells[t] ?? e.cells[0], a = L(n, w);
2137
2233
  return a.classList.add(...e.classes), a.dataset.value = String(i.value), i.prefix && (a.dataset.prefix = i.prefix), i.suffix && (a.dataset.suffix = i.suffix), i.missing && (a.dataset.missing = i.raw), d && (a.dataset.series = String(t + 1)), s.columns && (a.dataset.decimals = String(C[t])), a.dataset.row = String(r + 1), a.style.setProperty("--i", String(e.slot)), s.numbers === !1 && (t || r) && (a.dataset.place = "none"), a;
2138
2234
  })), O = D[0], k = h && s.totals ? c.map((e, t) => {
2139
- let r = I(n, E);
2140
- r.classList.add(...e.classes), r.dataset.kind = "total", r.dataset.row = String(t + 1), r.dataset.value = String(Pe(e, l.length));
2235
+ let r = L(n, w);
2236
+ r.classList.add(...e.classes), r.dataset.kind = "total", r.dataset.row = String(t + 1), r.dataset.value = String(Ie(e, l.length));
2141
2237
  let i = e.cells[0];
2142
2238
  return i.prefix && (r.dataset.prefix = i.prefix), i.suffix && (r.dataset.suffix = i.suffix), r.style.setProperty("--i", String(e.slot)), r;
2143
2239
  }) : [], A = c[c.length - 1], j = l.some((e) => e.focus), M = r.getAttribute("data-chart-legend"), N = d && !s.columns && (M === null ? i.legend || s.legend !== void 0 : M !== "false") ? document.createElement("div") : null;
2144
2240
  N && (N.className = p, N.setAttribute("aria-hidden", "true"), N.inert = !0);
2145
- let F = l.filter((e) => e.chart), L = d && !s.columns ? l.map((e, t) => {
2146
- let n = I(f, N ?? _);
2241
+ let P = l.filter((e) => e.chart), I = d && !s.columns ? l.map((e, t) => {
2242
+ let n = L(f, N ?? _);
2147
2243
  N && (n.dataset.place = "legend");
2148
2244
  let a = e.chart ? void 0 : s.legend ?? s.swatch;
2149
- if (a && (n.dataset.swatch = a), n.textContent = e.name, !a && bn(r, i) !== "step") {
2150
- let r = e.chart ? X(F, F.indexOf(e)) : X(l, t);
2245
+ if (a && (n.dataset.swatch = a), n.textContent = e.name, !a && jn(r, i) !== "step") {
2246
+ let r = e.chart ? Y(P, P.indexOf(e)) : Y(l, t);
2151
2247
  n.dataset.marker = r.shape, n.toggleAttribute("data-open", r.open);
2152
2248
  }
2153
2249
  return e.line && !a && (n.dataset.line = e.line), e.key && i.langattribute && n.setAttribute(i.langattribute, e.key), n.dataset.series = String(t + 1), n.style.setProperty("--n", String(t)), n.style.setProperty("--palette", `var(--tablechart-color-${t + 1})`), n.style.setProperty("--m", j && !e.focus ? "1" : "0"), n.style.setProperty("--i", String(A.slot)), n;
2154
- }) : [], R = s.centre ? I(g, _) : null;
2250
+ }) : [], R = s.centre ? L(g, _) : null;
2155
2251
  if (R) {
2156
2252
  let e = c.find((e) => e.isTotal), t = e ? e.value : c.reduce((e, t) => e + Math.abs(t.value), 0);
2157
- R.dataset.value = String(t), e && (R.dataset.decimals = String(re(e.number)));
2253
+ R.dataset.value = String(t), e && (R.dataset.decimals = String(ie(e.number)));
2158
2254
  }
2159
- let z = R && !c.some((e) => e.isTotal) ? Sn(r, R, i) : null, B = s.categories === "beside", V = document.createElement("div");
2255
+ let z = R && !c.some((e) => e.isTotal) ? Nn(r, R, i) : null, B = s.categories === "beside", V = document.createElement("div");
2160
2256
  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));
2161
- let H = 0;
2257
+ let ee = 0;
2162
2258
  for (let [e, t] of c.entries()) {
2163
2259
  let n = document.createElement("span");
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);
2260
+ 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(ee + 1), n.style.setProperty("--n", String(ee)), n.style.setProperty("--palette", `var(--tablechart-color-${ee + 1})`), ee += 1)), n.style.setProperty("--i", String(t.slot)), n.dataset.row = String(e + 1), V.appendChild(n);
2165
2261
  }
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 ? {
2168
- titles: U.slice(0, 2).map((e, t) => {
2169
- let n = I(`${w}-title`, _);
2262
+ s.centre && r.style.setProperty("--_slice-count", String(ee)), B ? _.appendChild(V) : b(V), N && b(N);
2263
+ let H = l.filter((e) => !e.group), U = !s.axes && !s.centre && kn(r, "data-chart-axis", i.axis), te = s.axes ? {
2264
+ titles: H.slice(0, 2).map((e, t) => {
2265
+ let n = L(`${T}-title`, _);
2170
2266
  return n.dataset.axis = t ? "y" : "x", n.textContent = e.name, e.key && i.langattribute && n.setAttribute(i.langattribute, e.key), n;
2171
2267
  }),
2172
- ticks: I(`${T}s`, _),
2268
+ ticks: L(`${E}s`, _),
2173
2269
  numbers: !0
2174
- } : ee || !s.centre && vn(r, "data-chart-grid", i.grid) ? {
2270
+ } : U || !s.centre && kn(r, "data-chart-grid", i.grid) ? {
2175
2271
  titles: [],
2176
- ticks: I(`${T}s`, _),
2177
- numbers: ee
2272
+ ticks: L(`${E}s`, _),
2273
+ numbers: U
2178
2274
  } : null;
2179
2275
  s.text?.({
2180
2276
  figure: r,
@@ -2183,21 +2279,21 @@ var Ye = (e) => {
2183
2279
  series: l,
2184
2280
  config: i
2185
2281
  });
2186
- let ne = yn(r, i) ? At(r, !!s.axes) : null;
2282
+ let ne = An(r, i) ? Vt(r, !!s.axes) : null;
2187
2283
  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", "");
2188
- let G = r.getAttribute("data-chart-keys"), K = ne && i.controls ? Pt({
2284
+ let re = r.getAttribute("data-chart-keys"), G = ne && i.controls ? Gt({
2189
2285
  previous: i.previouslabel,
2190
2286
  next: i.nextlabel,
2191
2287
  hint: i.stephint
2192
2288
  }, {
2193
- previous: G && `${G}-previous`,
2194
- next: G && `${G}-next`,
2195
- hint: G && `${G}-step`
2289
+ previous: re && `${re}-previous`,
2290
+ next: re && `${re}-next`,
2291
+ hint: re && `${re}-step`
2196
2292
  }, i.langattribute) : 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;
2293
+ G && b(G);
2294
+ let ae = Array.from(r.querySelectorAll("[data-annotation]")).map((t) => {
2295
+ let n = t.getAttribute("data-annotation"), r = xn[n];
2296
+ if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(xn).join(", ")}.`), null;
2201
2297
  let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= l.length ? i - 1 : 0;
2202
2298
  return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which is not there; it reads line 1.`), {
2203
2299
  spec: t,
@@ -2210,16 +2306,16 @@ var Ye = (e) => {
2210
2306
  if (!B && !s.centre && !s.axes) for (let [e, t] of c.entries()) {
2211
2307
  if (!t.note) continue;
2212
2308
  let n = document.createElement("span");
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({
2309
+ n.dataset.annotation = "note", n.dataset.row = String(e + 1), n.textContent = t.note, t.noteKey && n.setAttribute("data-i18n", t.noteKey), ae.push({
2214
2310
  spec: n,
2215
- type: we,
2216
- badge: we.create(n, _),
2311
+ type: Ee,
2312
+ badge: Ee.create(n, _),
2217
2313
  series: 0,
2218
2314
  after: c.length
2219
2315
  });
2220
2316
  }
2221
- yn(r, i) && r.setAttribute("data-animate", On(r, o, i, !!ne));
2222
- let q = {
2317
+ An(r, i) && r.setAttribute("data-animate", Vn(r, o, i, !!ne));
2318
+ let K = {
2223
2319
  figure: r,
2224
2320
  plot: _,
2225
2321
  svg: v,
@@ -2229,7 +2325,7 @@ var Ye = (e) => {
2229
2325
  values: O,
2230
2326
  series: l,
2231
2327
  seriesValues: D,
2232
- names: N ? [] : L,
2328
+ names: N ? [] : I,
2233
2329
  categories: Array.from(V.children),
2234
2330
  centre: R,
2235
2331
  axes: te,
@@ -2239,43 +2335,43 @@ var Ye = (e) => {
2239
2335
  rowAt: null,
2240
2336
  rowBox: null,
2241
2337
  pointOf: null,
2242
- annotations: ie,
2338
+ annotations: ae,
2243
2339
  checks: [],
2244
2340
  plan: ne,
2245
2341
  step: 0,
2246
- controls: K
2247
- }, ae = () => Hn(r, v);
2248
- v.addEventListener("transitionend", ae), v.addEventListener("transitioncancel", ae), K?.addEventListener("click", (e) => {
2342
+ controls: G
2343
+ }, oe = () => nr(r, v);
2344
+ v.addEventListener("transitionend", oe), v.addEventListener("transitioncancel", oe), G?.addEventListener("click", (e) => {
2249
2345
  let t = e.target.closest("button")?.dataset.go;
2250
- t && Nt(q, q.step + (t === "next" ? 1 : -1));
2251
- }), Nt(q, 0, !0);
2252
- let oe = r.getAttribute("data-chart-tooltip"), se = oe === "false" ? !1 : oe === "auto" ? "auto" : oe !== null || i.tooltip;
2253
- return se && on(q, i, se === "auto"), Rn(q, i), q;
2254
- }, En = {
2346
+ t && Wt(K, K.step + (t === "next" ? 1 : -1));
2347
+ }), Wt(K, 0, !0);
2348
+ let se = r.getAttribute("data-chart-tooltip"), ce = se === "false" ? !1 : se === "auto" ? "auto" : se !== null || i.tooltip;
2349
+ return ce && _n(K, i, ce === "auto"), Zn(K, i), K;
2350
+ }, zn = {
2255
2351
  grow: "grow",
2256
2352
  sweep: "sweep"
2257
- }, Dn = [
2353
+ }, Bn = [
2258
2354
  "never",
2259
2355
  "auto",
2260
2356
  "print",
2261
2357
  "always"
2262
- ], On = (e, t, n, r) => {
2263
- let i = t === "line" || t === "area", a = En[e.getAttribute("data-chart-animate") ?? ""] ?? En[String(n.animate)];
2358
+ ], Vn = (e, t, n, r) => {
2359
+ let i = t === "line" || t === "area", a = zn[e.getAttribute("data-chart-animate") ?? ""] ?? zn[String(n.animate)];
2264
2360
  return i ? r ? "sweep" : a ?? "sweep" : t === "donut" || t === "waterfall" ? a ?? "grow" : "grow";
2265
- }, kn = (e) => {
2361
+ }, Hn = (e) => {
2266
2362
  let t = getComputedStyle(e).getPropertyValue("--tablechart-value-align").trim();
2267
2363
  return t === "start" || t === "center" || t === "end" ? t : null;
2268
- }, An = (e, t, n) => e.dataset.chartLabels === "inside" || e.dataset.chartLabels !== "outside" && (t.labels === "inside" || n) ? "inside" : "outside", jn = (e, t, n, r) => {
2364
+ }, Un = (e, t, n) => e.dataset.chartLabels === "inside" || e.dataset.chartLabels !== "outside" && (t.labels === "inside" || n) ? "inside" : "outside", Wn = (e, t, n, r) => {
2269
2365
  let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
2270
2366
  if (!a) return null;
2271
2367
  let o = Number(a[1]);
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;
2273
- }, Mn = (e, t) => jn(e, t, "--tablechart-bar-max", "60px") ?? Infinity, Nn = (e, t) => {
2274
- let n = e.getBoundingClientRect(), r = D / n.width, i = getComputedStyle(e), a = Number.parseFloat(i.lineHeight) / Number.parseFloat(i.fontSize) || 1.2;
2368
+ return a[2] === "%" ? o / 100 * O : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
2369
+ }, Gn = (e, t) => Wn(e, t, "--tablechart-bar-max", "60px") ?? Infinity, Kn = (e, t) => {
2370
+ let n = e.getBoundingClientRect(), r = O / n.width, i = getComputedStyle(e), a = Number.parseFloat(i.lineHeight) / Number.parseFloat(i.fontSize) || 1.2;
2275
2371
  return (e) => {
2276
2372
  if (e.dataset.place === "none" || e.hidden || e.hasAttribute("data-left-out")) return [];
2277
2373
  let i = e.getBoundingClientRect(), o = i.height * r / a, s = Array.from(e.style).filter((e) => e.startsWith("--")).map((t) => `${t}:${e.style.getPropertyValue(t)}`);
2278
- return i.width ? [P("rect", {
2374
+ return i.width ? [F("rect", {
2279
2375
  class: h,
2280
2376
  "data-for": "text",
2281
2377
  x: (i.left - n.left) * r - 3 * t,
@@ -2285,21 +2381,21 @@ var Ye = (e) => {
2285
2381
  style: s.join("; ")
2286
2382
  })] : [];
2287
2383
  };
2288
- }, Pn = [
2384
+ }, qn = [
2289
2385
  "first",
2290
2386
  "last",
2291
2387
  "highest",
2292
2388
  "lowest",
2293
2389
  "outliers"
2294
- ], Fn = (t, n) => {
2390
+ ], Jn = (t, n) => {
2295
2391
  let r = (t.getAttribute("data-chart-values") ?? n.values).trim().toLowerCase().split(/\s+/).filter(Boolean);
2296
2392
  for (let t of r) [
2297
2393
  "auto",
2298
2394
  "all",
2299
2395
  "none",
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));
2396
+ ...qn
2397
+ ].includes(t) || console.warn(`[${e}] data-chart-values knows no "${t}". It takes auto, all, none, ${qn.join(", ")}.`);
2398
+ let i = r.filter((e) => qn.includes(e));
2303
2399
  return r.includes("all") ? {
2304
2400
  mode: "all",
2305
2401
  keys: []
@@ -2308,27 +2404,27 @@ var Ye = (e) => {
2308
2404
  keys: []
2309
2405
  } : r.includes("auto") || !i.length ? {
2310
2406
  mode: "auto",
2311
- keys: i.length ? i : Pn
2407
+ keys: i.length ? i : qn
2312
2408
  } : {
2313
2409
  mode: "set",
2314
2410
  keys: i
2315
2411
  };
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;
2412
+ }, Yn = ({ figure: e, rows: t, series: n }, r) => {
2413
+ let i = e.getAttribute("data-chart-table"), a = i && Bn.includes(i) ? i : r.table;
2318
2414
  a === "never" ? e.removeAttribute("data-table") : e.setAttribute("data-table", a);
2319
2415
  let o = e.getAttribute("data-chart-summary");
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) => {
2416
+ e.setAttribute("data-summary", o && Bn.includes(o) ? o : r.summary), e.toggleAttribute("data-long", t.length * n.filter((e) => !e.group).length > r.tablelimit);
2417
+ }, Xn = (t, n) => {
2322
2418
  let { plot: r, svg: i, rows: l, type: m, values: g, series: _, seriesValues: y, names: b, annotations: x } = t;
2323
- In(t, n);
2419
+ Yn(t, n);
2324
2420
  let S = getComputedStyle(t.figure);
2325
2421
  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;
2422
+ let C = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), w = 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
2423
  if (A) {
2328
2424
  r.style.margin = "", j && (j.style.marginLeft = "");
2329
2425
  let e = r.clientWidth;
2330
2426
  if (!e) return !1;
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);
2427
+ let i = m.segments?.(l) ?? [], a = t.stacked ? l.flatMap((e) => Object.values(Fe(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 = bt(u ?? d);
2332
2428
  if (f && f.length > 2) M = {
2333
2429
  min: f[0],
2334
2430
  max: f[f.length - 1],
@@ -2336,46 +2432,46 @@ var Ye = (e) => {
2336
2432
  ticks: f
2337
2433
  };
2338
2434
  else {
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);
2435
+ let [t, n] = f ?? [o, s], r = _t(n - t, Math.max((k ? e / 9 : e * w / 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
2436
  M = {
2341
2437
  min: a,
2342
2438
  max: l,
2343
2439
  step: r,
2344
- ticks: _t(a, l, r)
2440
+ ticks: vt(a, l, r)
2345
2441
  };
2346
2442
  }
2347
2443
  A.ticks.textContent = "";
2348
- let p = l.find((e) => !e.missing), h = W(M.ticks.map((e) => re(String(e))));
2444
+ let p = l.find((e) => !e.missing), h = W(M.ticks.map((e) => ie(String(e))));
2349
2445
  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);
2446
+ let t = L(E, A.ticks);
2447
+ t.dataset.value = String(e), t.dataset.place = "none", p?.prefix && (t.dataset.prefix = p.prefix), p?.suffix && (t.dataset.suffix = p.suffix), Qn(t, h, n.locale);
2352
2448
  }
2353
2449
  if (A.numbers) {
2354
2450
  let e = Array.from(A.ticks.children);
2355
2451
  for (let t of e) delete t.dataset.place;
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));
2452
+ he(e), k ? r.style.marginBottom = `${(e[0] ? q(e[0]).height : 0) + 6}px` : (r.style.marginLeft = `${W([0, ...e.map((e) => q(e).width)]) + 10}px`, j && (j.style.marginLeft = r.style.marginLeft));
2357
2453
  }
2358
2454
  }
2359
- let F = r.clientWidth;
2360
- if (!F) return !1;
2361
- let R = D / F, z = D * O;
2455
+ let N = r.clientWidth;
2456
+ if (!N) return !1;
2457
+ let I = O / N, z = O * w;
2362
2458
  r.classList.add(v);
2363
2459
  let B = m.numbers === !1 ? g.slice(0, 1) : [...y.flat(), ...t.totals];
2364
2460
  for (let e of B) delete e.dataset.place, e.removeAttribute("data-left-out"), e.removeAttribute("data-cut");
2365
2461
  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");
2366
2462
  let V = m.axes ? t.axes : null, ee = [];
2367
2463
  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) => {
2370
- let r = a[0]?.cells[i[t]], o = W(e.ticks.map((e) => re(String(e))));
2464
+ 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 = [bt(o), bt(s ?? c)];
2465
+ ee = i.map((t, n) => xt(a.length ? a.map((e) => e.cells[t].value) : [0, 1], Math.max(n ? z / I / (e * 4) : N / (e * 9), 4), u[n])), V.ticks.textContent = "", ee.forEach((e, t) => {
2466
+ let r = a[0]?.cells[i[t]], o = W(e.ticks.map((e) => ie(String(e))));
2371
2467
  for (let i of e.ticks) {
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);
2468
+ let e = L(E, V.ticks);
2469
+ 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), Qn(e, o, n.locale);
2374
2470
  }
2375
2471
  });
2376
2472
  }
2377
2473
  let te = V ? Array.from(V.ticks.children) : [];
2378
- pe([
2474
+ he([
2379
2475
  ...y.flat(),
2380
2476
  ...t.totals,
2381
2477
  ...b,
@@ -2384,18 +2480,18 @@ var Ye = (e) => {
2384
2480
  ...V?.titles ?? [],
2385
2481
  ...te
2386
2482
  ]);
2387
- let ne = (g[0] ? J(g[0]).height : 0) * R;
2483
+ let ne = (g[0] ? q(g[0]).height : 0) * I;
2388
2484
  m.numbers === !1 && g[0] && (g[0].dataset.place = "none");
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?.({
2485
+ let re = x[0]?.badge ? q(x[0].badge).height * I : 0, G = Math.max(z, Wn(t.figure, I, "--tablechart-min-height", "200px") ?? 0, m.minHeight?.({
2390
2486
  labelHeight: ne,
2391
- nameHeight: Math.max(0, W(t.categories.map((e) => J(e).height))) * R,
2392
- unit: R,
2487
+ nameHeight: Math.max(0, W(t.categories.map((e) => q(e).height))) * I,
2488
+ unit: I,
2393
2489
  rows: l.length,
2394
2490
  series: _.length,
2395
2491
  stacked: t.stacked,
2396
- labels: An(t.figure, n, _.some((e) => e.chart))
2397
- }) ?? 0), ie = t.stacked ? l.map((e) => {
2398
- let t = Pe(e, _.length);
2492
+ labels: Un(t.figure, n, _.some((e) => e.chart))
2493
+ }) ?? 0), ae = t.stacked ? l.map((e) => {
2494
+ let t = Ie(e, _.length);
2399
2495
  return {
2400
2496
  ...e,
2401
2497
  value: t,
@@ -2404,120 +2500,121 @@ var Ye = (e) => {
2404
2500
  value: t
2405
2501
  } : e)
2406
2502
  };
2407
- }) : l, q = (m.segments ?? ((e) => e.map((e) => ({
2503
+ }) : l, K = (m.segments ?? ((e) => e.map((e) => ({
2408
2504
  ...e,
2409
2505
  from: 0,
2410
2506
  to: e.value,
2411
2507
  kind: "bar"
2412
- }))))(t.stacked ? ie.map((e) => ({
2508
+ }))))(t.stacked ? ae.map((e) => ({
2413
2509
  ...e,
2414
2510
  cells: [e.cells[0]]
2415
- })) : l), ae = {
2511
+ })) : l), oe = {
2416
2512
  labelHeight: ne,
2417
- badgeHeight: G,
2513
+ badgeHeight: re,
2418
2514
  hasAnnotations: x.length > 0,
2419
- unit: R,
2515
+ unit: I,
2420
2516
  series: _.length,
2421
2517
  focused: _.some((e) => e.focus),
2422
2518
  stacked: t.stacked
2423
- }, oe = Math.max(((e) => t.stacked ? e(l.map((e) => Ne(e, _.length, m.running).top)) : e([...q.flatMap((e) => [
2519
+ }, se = Math.max(((e) => t.stacked ? e(l.map((e) => Fe(e, _.length, m.running).top)) : e([...K.flatMap((e) => [
2424
2520
  e.from,
2425
2521
  e.to,
2426
2522
  e.value
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) ?? "");
2523
+ ]), ...l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value))]))(W), 0), ce = K.some((e) => e.kind === "up" || e.kind === "down") ? K.flatMap((e) => [e.from, e.to]) : t.stacked ? l.map((e) => Fe(e, _.length, m.running).bottom) : l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value)), le = Math.min(-W(ce.map((e) => -e)), 0), ue = _.flatMap((e, t) => e.chart ? [t] : []), de = l.some((e) => e.note) ? re + 4 * I : 0, fe = Math.max(m.headroom?.(oe) ?? ne, ue.length ? rt.headroom?.(oe) ?? 0 : 0) + de, pe = 2 * I + (m.footroom?.(oe) ?? 0) + (le < 0 ? ne + 4 * I : 0), me = G - fe - pe, ge = M ? Math.max(M.max, se) : se * 1.02, _e = M ? Math.min(M.min, le) : le * 1.02, ve = x.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, ye = (e) => {
2524
+ let t = Number.parseFloat(ve?.getAttribute(e) ?? "");
2429
2525
  return Number.isFinite(t) ? t : null;
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*$/);
2526
+ }, xe = ye("data-from") ?? ye("data-at"), Se = ye("data-to"), J = null;
2527
+ if (ve && (xe !== null || Se !== null)) {
2528
+ let t = xe ?? 0, n = Se ?? ge, r = Se === null ? t : xe === null ? n : (t + n) / 2, i = ve.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
2433
2529
  i !== null && !a && console.warn(`[${e}] data-size="${i}" is not a percentage, such as 30%. Using the default.`);
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 = {
2530
+ let o = Math.min(Math.max(a ? Number(a[1]) / 100 : Se === 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);
2531
+ m.breakable ? le < 0 ? console.warn(`[${e}] A chart with values below zero cannot break its scale.`) : t < 0 || n <= t || n > ge || t === 0 && n === ge ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${se}.`) : s.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : J = {
2436
2532
  lo: t,
2437
2533
  hi: n,
2438
2534
  gap: r,
2439
2535
  share: o
2440
2536
  } : console.warn(`[${e}] This kind of chart cannot break its scale.`);
2441
2537
  }
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;
2443
- if (Y) {
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;
2538
+ let Te = J ? J.gap : null, Ee = (J && Wn(t.figure, I, "--tablechart-break-gap", "")) ?? 13, De = G - pe, Oe = ge - _e || 1, ke = (e) => De - (e - _e) / Oe * me;
2539
+ if (J) {
2540
+ let { lo: e, hi: t, gap: n, share: r } = J, i = me * r, a = (me - i - Ee) / (e + (ge - t)), o = i / (t - e);
2541
+ ke = (r) => r <= e ? De - r * a : r <= n ? De - e * a - (r - e) * o : r <= t ? De - e * a - (r - e) * o - Ee : De - e * a - i - Ee - (r - t) * a;
2446
2542
  }
2447
- let ke, Ae, je = [];
2543
+ let Ae, je, Me = [];
2448
2544
  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 = [
2545
+ let e = 6 * I, [t, n] = V.titles, r = (e) => e ? q(e).width * I : 0, i = (e) => e ? q(e).height * I : 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;
2546
+ je = [
2451
2547
  c,
2452
2548
  l,
2453
- D - c - W([0, ...a.map(r)]) / 2,
2454
- K - l - i(t) - s - 2 * e
2549
+ O - c - W([0, ...a.map(r)]) / 2,
2550
+ G - l - i(t) - s - 2 * e
2455
2551
  ];
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 = _;
2552
+ let [u, d, f, p] = je, [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;
2553
+ Ae = g, ke = _;
2458
2554
  let v = (e) => r(a.find((t) => Number(t.dataset.value) === e));
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];
2555
+ Me = [St(m, (t) => t.every((n, r) => !r || g(n) - g(t[r - 1]) > (v(n) + v(t[r - 1])) / 2 + e)).ticks, St(h, (t) => t.every((n, r) => !r || _(t[r - 1]) - _(n) > s + e / 2)).ticks];
2460
2556
  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);
2557
+ let n = Number(t.dataset.value), r = t.dataset.axis === "x" ? 0 : 1, i = Me[r].includes(n);
2558
+ t.dataset.place = i ? r ? "before" : "below" : "none", i && R(t, r ? u - e : g(n), r ? _(n) : d + p + e, O, G);
2463
2559
  }
2464
- t && L(t, u + f / 2, K - i(t), D, K), n && L(n, 0, d + p / 2, D, K);
2560
+ t && R(t, u + f / 2, G - i(t), O, G), n && R(n, 0, d + p / 2, O, G);
2465
2561
  }
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;
2562
+ let Ne = Jn(t.figure, n), Pe = jn(t.figure, n), Le = !!m.running && b.length > 0 && !t.stacked && Pe !== "step" && Ne.mode === "set" && Ne.keys.includes("last"), Re = Le ? W(y.flat().map((e) => q(e).width)) * I : 0, ze = b.length ? W(b.map((e) => q(e).width)) * I + 12 * I + Re : 0, Be = t.categories[0]?.parentElement;
2563
+ Be && (Be.style.paddingRight = ze ? `${ze / O * 100}%` : "");
2564
+ let Ve = (O - ze) / l.length, He = (e) => (e + .5) * Ve, Ue = (e) => e >= 0 && e < l.length ? e : null;
2565
+ t.rowAt = m.centre ? null : m.categories === "beside" ? (e, t) => Ue(Math.floor(t * I / (G / l.length))) : (e) => Ue(Math.floor(e * I / Ve));
2566
+ let We = Ve / O * 100, Ge = 100 / l.length;
2471
2567
  if (t.rowBox = m.categories === "beside" ? (e) => [
2472
2568
  0,
2473
- e * Be,
2569
+ e * Ge,
2474
2570
  100,
2475
- Be
2571
+ Ge
2476
2572
  ] : (e) => [
2477
- e * ze,
2573
+ e * We,
2478
2574
  0,
2479
- ze,
2575
+ We,
2480
2576
  100
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", {
2484
- class: E,
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("")
2486
- })), i.appendChild(P("path", {
2487
- class: w,
2577
+ ], i.setAttribute("viewBox", `0 0 ${O} ${P(G)}`), i.textContent = "", je && Ae) {
2578
+ let [e, r, a, o] = je, [s, c] = Me, l = Ae;
2579
+ kn(t.figure, "data-chart-grid", n.grid) && i.appendChild(F("path", {
2580
+ class: D,
2581
+ d: [...s.map((e) => `M${P(l(e))},${P(r)}V${P(r + o)}`), ...c.map((t) => `M${P(e)},${P(ke(t))}H${P(e + a)}`)].join("")
2582
+ })), i.appendChild(F("path", {
2583
+ class: T,
2488
2584
  d: [
2489
- `M${N(e)},${N(r)}V${N(r + o)}H${N(e + a)}`,
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)}`)
2585
+ `M${P(e)},${P(r)}V${P(r + o)}H${P(e + a)}`,
2586
+ ...s.map((e) => `M${P(l(e))},${P(r + o)}v${P(4 * I)}`),
2587
+ ...c.map((t) => `M${P(e)},${P(ke(t))}h${P(-4 * I)}`)
2492
2588
  ].join("")
2493
2589
  }));
2494
2590
  }
2495
2591
  t.checks = [];
2496
- let Ve = {
2592
+ let Y = {
2497
2593
  rows: l,
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,
2594
+ segments: K,
2595
+ cx: He,
2596
+ y: ke,
2597
+ x: Ae,
2598
+ frame: je,
2599
+ length: (e, n) => Wn(t.figure, I, e, n),
2600
+ barWidth: Math.min(Ve * n.barfill, Gn(t.figure, I)),
2601
+ barMax: Gn(t.figure, I),
2602
+ height: G,
2603
+ unit: I,
2508
2604
  labelHeight: ne,
2509
- badgeHeight: G,
2605
+ badgeHeight: re,
2510
2606
  after: l.length,
2511
2607
  note: 0,
2512
- labels: An(t.figure, n, le.length > 0),
2513
- insideAlign: kn(t.figure),
2514
- breakAt: we,
2515
- squeeze: Y,
2516
- breakGap: Te,
2608
+ labels: Un(t.figure, n, ue.length > 0),
2609
+ insideAlign: Hn(t.figure),
2610
+ breakAt: Te,
2611
+ squeeze: J,
2612
+ breakGap: Ee,
2517
2613
  domain: M ? [M.min, M.max] : null,
2518
2614
  stacked: t.stacked,
2519
- shape: bn(t.figure, n),
2520
- pick: Fn(t.figure, n),
2615
+ shape: Pe,
2616
+ pick: Ne,
2617
+ numbersAtEnd: Le,
2521
2618
  totals: t.totals,
2522
2619
  svg: i,
2523
2620
  plot: r,
@@ -2534,14 +2631,14 @@ var Ye = (e) => {
2534
2631
  lineHoles: []
2535
2632
  };
2536
2633
  r.style.setProperty("--count", String(Math.max(1, ...l.map((e) => e.slot + 1))));
2537
- let He = (e) => {
2634
+ let Ke = (e) => {
2538
2635
  let t = (t) => ({
2539
2636
  ...t,
2540
2637
  ...t.cells[e] ?? t.cells[0]
2541
2638
  });
2542
2639
  return {
2543
2640
  rows: l.map(t),
2544
- segments: q.map((e) => {
2641
+ segments: K.map((e) => {
2545
2642
  let n = t(e);
2546
2643
  return e.kind === "bar" ? {
2547
2644
  ...n,
@@ -2551,98 +2648,98 @@ var Ye = (e) => {
2551
2648
  values: y[e]
2552
2649
  };
2553
2650
  };
2554
- if (le.length) {
2651
+ if (ue.length) {
2555
2652
  let e = _.flatMap((e, t) => e.chart ? [] : [t]);
2556
2653
  m.draw({
2557
- ...Ve,
2654
+ ...Y,
2558
2655
  own: e,
2559
- ...e.length === 1 && He(e[0])
2560
- }), nt.draw({
2561
- ...Ve,
2562
- own: le
2656
+ ...e.length === 1 && Ke(e[0])
2657
+ }), rt.draw({
2658
+ ...Y,
2659
+ own: ue
2563
2660
  });
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);
2661
+ } else m.draw(Y);
2662
+ Y.rowAt && (t.rowAt = Y.rowAt), t.pointOf = Y.pointOf ?? null;
2663
+ let X = Number(r.style.getPropertyValue("--count")) || l.length;
2664
+ for (let e of t.figure.querySelectorAll(`.${f}`)) e.style.setProperty("--i", String(Math.min(l[l.length - 1].slot, X - 1)));
2665
+ if (!t.stacked && !r.hasAttribute("data-grouped")) for (let e of y) Ce(e, I, O), we(e, I, O, G);
2569
2666
  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);
2667
+ let e = 6 * I, r = k && Y.x ? Y.x : ke, a = Array.from(A.ticks.children), o = (e) => q(a.find((t) => Number(t.dataset.value) === e) ?? a[0]), s = St(M, (t) => t.every((n, i) => !i || (k ? r(n) - r(t[i - 1]) > (o(n).width + o(t[i - 1]).width) / 2 * I + e : r(t[i - 1]) - r(n) > o(n).height * I + e / 2))).ticks.filter((e) => !J || e <= J.lo || e >= J.hi);
2571
2668
  for (let t of a) {
2572
2669
  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);
2670
+ t.dataset.place = i ? k ? "below" : "before" : "none", i && R(t, k ? r(n) : -e, k ? G + e : r(n), O, G);
2574
2671
  }
2575
- let c = D - Me;
2576
- vn(t.figure, "data-chart-grid", n.grid) && i.prepend(P("path", {
2577
- class: E,
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", {
2580
- class: w,
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("")
2672
+ let c = O - ze;
2673
+ kn(t.figure, "data-chart-grid", n.grid) && i.prepend(F("path", {
2674
+ class: D,
2675
+ d: s.map((e) => k ? `M${P(r(e))},0V${P(G)}` : `M0,${P(r(e))}H${P(c)}`).join("")
2676
+ })), A.numbers && i.appendChild(F("path", {
2677
+ class: T,
2678
+ d: [k ? `M${P(r(M.min))},${P(G)}H${P(r(M.max))}` : `M0,${P(r(M.max))}V${P(r(M.min))}`, ...s.map((e) => k ? `M${P(r(e))},${P(G)}v${P(4 * I)}` : `M0,${P(r(e))}h${P(-4 * I)}`)].join("")
2582
2679
  }));
2583
2680
  }
2584
2681
  for (let [e, n] of x.entries()) {
2585
2682
  n.badge?.setAttribute("data-note", String(e + 1));
2586
2683
  let i = n.series;
2587
2684
  n.type.draw(n.spec, n.badge, {
2588
- ...Ve,
2685
+ ...Y,
2589
2686
  ...t.stacked && {
2590
- rows: ie,
2687
+ rows: ae,
2591
2688
  ...t.totals.length && { values: t.totals }
2592
2689
  },
2593
- ...i > 0 && !t.stacked && He(i),
2690
+ ...i > 0 && !t.stacked && Ke(i),
2594
2691
  after: t.plan ? n.after : Math.min(n.after, Number(r.style.getPropertyValue("--count")) || n.after),
2595
2692
  note: e + 1
2596
2693
  });
2597
2694
  }
2598
- Mt(t);
2695
+ Ut(t);
2599
2696
  for (let e of t.figure.querySelectorAll(`.${p}`)) {
2600
2697
  let n = Array.from(e.children);
2601
2698
  if (t.plan) for (let e of n) e.style.getPropertyValue("--step") || e.style.setProperty("--i", "0");
2602
2699
  let r = n.map((e) => Number.parseFloat(e.style.getPropertyValue("--step")));
2603
2700
  e.style.setProperty("--i", String(Math.min(...n.map((e) => Number(e.style.getPropertyValue("--i")) || 0)))), r.length && r.every(Number.isFinite) ? e.style.setProperty("--step", String(Math.min(...r))) : e.style.removeProperty("--step");
2604
2701
  }
2605
- let X = t.categories[0]?.parentElement;
2606
- if (X && m.categories !== "beside" && !m.centre) {
2607
- X.style.height = `${X.offsetHeight}px`, X.removeAttribute("data-thinned");
2702
+ let Z = t.categories[0]?.parentElement;
2703
+ if (Z && m.categories !== "beside" && !m.centre) {
2704
+ Z.style.height = `${Z.offsetHeight}px`, Z.removeAttribute("data-thinned");
2608
2705
  for (let e of t.categories) e.removeAttribute("data-left-out"), e.removeAttribute("data-edge");
2609
2706
  let e = t.categories.filter((e) => e.offsetParent !== null);
2610
- if (!ve(X, e, (e) => ({
2707
+ if (!be(Z, e, (e) => ({
2611
2708
  size: e.scrollWidth,
2612
2709
  room: e.clientWidth
2613
2710
  }), "--_name-fit") && e.length > 1) {
2614
- let t = getComputedStyle(X), n = (X.clientWidth - Number.parseFloat(t.paddingLeft) - Number.parseFloat(t.paddingRight)) / l.length;
2615
- X.style.setProperty("--_name-fit", "1"), X.setAttribute("data-thinned", "");
2711
+ let t = getComputedStyle(Z), n = (Z.clientWidth - Number.parseFloat(t.paddingLeft) - Number.parseFloat(t.paddingRight)) / l.length;
2712
+ Z.style.setProperty("--_name-fit", "1"), Z.setAttribute("data-thinned", "");
2616
2713
  let r = W(e.map((e) => e.offsetWidth)), i = Math.max(Math.ceil((r + 8) / n), Math.ceil((1.5 * r + 8) / n - .5), 1);
2617
2714
  e.forEach((e, t) => {
2618
2715
  t % i && e.setAttribute("data-left-out", "");
2619
2716
  });
2620
- let a = e.filter((e) => !e.hasAttribute("data-left-out")), o = a[0], s = a.at(-1), c = X.getBoundingClientRect(), u = [o, s].map((e) => e?.getBoundingClientRect());
2717
+ let a = e.filter((e) => !e.hasAttribute("data-left-out")), o = a[0], s = a.at(-1), c = Z.getBoundingClientRect(), u = [o, s].map((e) => e?.getBoundingClientRect());
2621
2718
  if (o && u[0] && u[0].left < c.left && o.setAttribute("data-edge", "start"), s && s !== o && u[1] && u[1].right > c.right - Number.parseFloat(t.paddingRight)) {
2622
2719
  s.setAttribute("data-edge", "end");
2623
2720
  let e = a.at(-2);
2624
2721
  e && e.getBoundingClientRect().right + 8 > s.getBoundingClientRect().left && s.setAttribute("data-left-out", "");
2625
2722
  }
2626
2723
  }
2627
- let r = (m === nt || m === rt) && vn(t.figure, "data-chart-ticks", n.ticks);
2628
- if (X.toggleAttribute("data-ticks", r), X.style.removeProperty("--_tick-reach"), r) {
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`);
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;
2724
+ let r = (m === rt || m === it) && kn(t.figure, "data-chart-ticks", n.ticks);
2725
+ if (Z.toggleAttribute("data-ticks", r), Z.style.removeProperty("--_tick-reach"), r) {
2726
+ let e = G - Number(i.querySelector(".tablechart-rule")?.getAttribute("y1") ?? G);
2727
+ e > 0 && e < 10 * I && Z.style.setProperty("--_tick-reach", `${P(e / I)}px`);
2728
+ let n = Z.getBoundingClientRect(), r = n.width / (Z.offsetWidth || 1), a = getComputedStyle(Z), o = Number.parseFloat(a.paddingLeft), s = (Z.clientWidth - o - Number.parseFloat(a.paddingRight)) / l.length;
2632
2729
  t.categories.forEach((e, t) => {
2633
2730
  if (e.hasAttribute("data-left-out")) e.style.removeProperty("--_tick");
2634
2731
  else {
2635
- let i = (e.getBoundingClientRect().left - n.left) / r - X.clientLeft;
2636
- e.style.setProperty("--_tick", `${N(o + (t + .5) * s - i)}px`);
2732
+ let i = (e.getBoundingClientRect().left - n.left) / r - Z.clientLeft;
2733
+ e.style.setProperty("--_tick", `${P(o + (t + .5) * s - i)}px`);
2637
2734
  }
2638
2735
  });
2639
2736
  }
2640
- X.style.height = "";
2737
+ Z.style.height = "";
2641
2738
  }
2642
- let We = x.flatMap(({ badge: e }) => {
2739
+ let qe = x.flatMap(({ badge: e }) => {
2643
2740
  if (!(e instanceof HTMLElement) || !e.offsetWidth) return [];
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;
2645
- return [P("rect", {
2741
+ let t = e.offsetWidth * I, n = e.offsetHeight * I, r = Number.parseFloat(e.style.left) / 100 * O, 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) * I;
2742
+ return [F("rect", {
2646
2743
  class: h,
2647
2744
  "data-for": "badge",
2648
2745
  "data-note": e.dataset.note ?? "",
@@ -2654,26 +2751,25 @@ var Ye = (e) => {
2654
2751
  ry: o === null ? s : n * o,
2655
2752
  style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
2656
2753
  })];
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) {
2754
+ }), Je = i.querySelector(`.${D}`), Ye = Array.from(i.querySelectorAll(`.${o}`)), Xe = [...Je ? [Je] : [], ...i.querySelectorAll(`:scope > .${s}`)], Ze = Kn(r, I), Qe = t.figure.getAttribute("data-animate") === "grow", $e = y.flat().filter((e) => e.hasAttribute("data-cut")).flatMap(Ze), et = [...ue.flatMap((e) => y[e].flatMap(Ze)), ...Qe ? $e : []];
2755
+ if (Xe.length || Ye.length) {
2659
2756
  let e = [
2660
2757
  ...y.flat(),
2661
2758
  ...t.totals,
2662
2759
  ...m.categories === "beside" ? t.categories : []
2663
- ].flatMap(qe), n = (e) => [
2760
+ ].flatMap(Ze), n = (e) => [
2664
2761
  "x",
2665
2762
  "y",
2666
2763
  "width",
2667
2764
  "height"
2668
2765
  ].map((t) => Number(e.getAttribute(t)));
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(""));
2766
+ for (let t of Ye) En(t, [...e, ...qe].map(n));
2767
+ for (let t of Xe) {
2768
+ let r = [...e, ...qe], i = Dn(t);
2769
+ t.setAttribute("d", i.map(([e, t, i, a]) => Tn(e, t, i, a, r.map(n))).join(""));
2674
2770
  for (let e of r) {
2675
- let r = _n(i, n(e)), a = e.dataset.for === "badge" ? "badge" : "";
2676
- r && t.after(P("path", {
2771
+ let r = On(i, n(e)), a = e.dataset.for === "badge" ? "badge" : "";
2772
+ r && t.after(F("path", {
2677
2773
  class: t.getAttribute("class") ?? "tablechart-grid",
2678
2774
  "data-gap": a,
2679
2775
  d: r,
@@ -2682,51 +2778,77 @@ var Ye = (e) => {
2682
2778
  }
2683
2779
  }
2684
2780
  }
2685
- if (H(i, We, D, K, Array.from(i.querySelectorAll(`.${a}, .${c}`))), !Je && (Ve.lineHoles.length || Ye.length)) {
2781
+ if (H(i, qe, O, G, Array.from(i.querySelectorAll(`.${a}, .${c}`))), !Qe && (Y.lineHoles.length || $e.length)) {
2686
2782
  let e = Array.from(i.querySelectorAll(`.${u}`)).map((e) => {
2687
- let t = P("g", {});
2783
+ let t = F("g", {});
2688
2784
  return e.before(t), t.append(e), t;
2689
2785
  });
2690
- H(i, [...Ve.lineHoles, ...Ye], D, K, [...e, ...i.querySelectorAll(`.${d}`)]);
2786
+ H(i, [...Y.lineHoles, ...$e], O, G, [...e, ...i.querySelectorAll(`.${d}`)]);
2691
2787
  }
2692
- let Ze = [
2788
+ let tt = [
2693
2789
  o,
2694
2790
  s,
2695
2791
  a,
2696
2792
  c,
2697
- ...t.plan ? [] : [E]
2793
+ D
2698
2794
  ];
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) => {
2795
+ U(i, [...qe, ...et], O, G, void 0, tt.map((e) => `.${e}`).join(", ")), t.figure.hasAttribute("data-animate") && !t.figure.hasAttribute("data-steps") && !t.figure.classList.contains("is-shown") && rr(i);
2796
+ let nt = (e) => e.dataset.missing !== void 0 || m.centre && l[Number(e.dataset.row) - 1]?.isTotal, at = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), ot = (e, t) => {
2701
2797
  let n = Number(e.dataset.row);
2702
- return t.some((e) => $e(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
2798
+ return t.some((e) => at(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
2703
2799
  };
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) => {
2800
+ return t.figure.toggleAttribute("data-left-out", (m.columns ? [t.categories] : [...y, t.totals]).some((e) => e.some((t) => !nt(t) && !at(t) && !ot(t, e)))), Mt(t.figure), Rt(t.figure), zt(t.figure), !0;
2801
+ }, Zn = (e, t) => {
2706
2802
  let n = [
2707
2803
  ...e.seriesValues.flat(),
2708
2804
  ...e.totals,
2709
2805
  ...e.totalCell ? [e.totalCell] : []
2710
2806
  ];
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);
2807
+ for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ? Qn(r, r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale) : r.textContent = r.dataset.missing;
2808
+ }, Qn = (e, t, n) => {
2809
+ let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] = ae(Number.parseFloat(e.dataset.value || "0"), t, n);
2714
2810
  if (e.textContent = r + (r ? a : "") + o + i, a && !r) {
2715
2811
  let t = document.createElement("span");
2716
2812
  t.className = "tablechart-minus", t.textContent = a, e.prepend(t);
2717
2813
  }
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) => {
2814
+ }, $n = (e) => {
2815
+ vn(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${p}`)?.remove(), e.controls?.remove();
2816
+ }, er = (e, t, n = !1) => {
2817
+ !t && !e.figure.hasAttribute("data-steps") && rr(e.svg), e.figure.classList.remove(C), n ? (e.figure.classList.add(S), e.figure.classList.toggle(b, t), e.figure.offsetWidth, t && ir(e.svg), e.figure.classList.toggle(C, t), requestAnimationFrame(() => e.figure.classList.remove(S))) : (e.figure.classList.toggle(b, t), t && requestAnimationFrame(() => requestAnimationFrame(() => {
2818
+ nr(e.figure, e.svg), tr(e.figure);
2819
+ })));
2820
+ }, tr = (e) => {
2821
+ let t = e.getAnimations({ subtree: !0 }).map((e) => e.finished.catch(() => void 0));
2822
+ Promise.all(t).then(() => {
2823
+ e.classList.contains("is-shown") && e.classList.add(C);
2824
+ });
2825
+ }, nr = (e, t) => {
2826
+ e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) && ir(t);
2827
+ }, rr = (e) => {
2725
2828
  for (let t of e.querySelectorAll("[mask^=\"url(#tablechart-cut-\"]")) t.dataset.mask = t.getAttribute("mask") ?? "", t.removeAttribute("mask");
2726
- }, Wn = (e) => {
2829
+ }, ir = (e) => {
2727
2830
  for (let t of e.querySelectorAll("[data-mask]")) t.setAttribute("mask", t.dataset.mask ?? ""), t.removeAttribute("data-mask");
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 = [
2831
+ }, ar = {
2832
+ 2: {
2833
+ part: 3,
2834
+ text: 4.5,
2835
+ large: 3,
2836
+ show: (e) => `${(Math.floor(e * 100) / 100).toFixed(2)}:1`,
2837
+ need: (e) => `${e}:1`,
2838
+ partRule: "WCAG 1.4.11",
2839
+ textRule: "WCAG 1.4.3"
2840
+ },
2841
+ 3: {
2842
+ part: 30,
2843
+ text: 60,
2844
+ large: 45,
2845
+ show: (e) => `Lc ${Math.floor(e)}`,
2846
+ need: (e) => `Lc ${e}`,
2847
+ partRule: "APCA, WCAG 3 draft",
2848
+ textRule: "APCA, WCAG 3 draft"
2849
+ }
2850
+ }, or = (t) => {
2851
+ let n = Nt(t), r = ar[Et(t)], i = Array.from(t.querySelectorAll("table thead tr:first-child > *")).map((e) => (e.textContent ?? "").trim()), a = Array.from(t.querySelectorAll("tbody tr > :first-child")).map((e) => (e.textContent ?? "").trim()), o = [
2730
2852
  [
2731
2853
  ".tablechart-series",
2732
2854
  "Line",
@@ -2742,75 +2864,111 @@ var Ye = (e) => {
2742
2864
  "Bar",
2743
2865
  (e) => getComputedStyle(e).fill
2744
2866
  ]
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,
2867
+ ], s = /* @__PURE__ */ new Map();
2868
+ for (let [e, c, l] of o) {
2869
+ let o = Array.from(t.querySelectorAll(`${e}:not([data-muted])`));
2870
+ for (let e of o) {
2871
+ let u = l(e), [d, f, p, m] = wt(u), h = [
2872
+ d,
2873
+ f,
2874
+ p
2875
+ ].map((e, t) => e * m + n[t] * (1 - m)), g = kt(Et(t), h, n);
2876
+ if (g >= r.part) continue;
2877
+ let _ = e.getAttribute("data-series"), v = a[Number(e.getAttribute("data-row") ?? 0) - 1] ?? "", y = c === "Slice" ? "" : _ ? i[Number(_)] : "", b = `${c}|${y}|${u}`, x = s.get(b) ?? {
2878
+ kind: c,
2879
+ column: y,
2758
2880
  rows: /* @__PURE__ */ new Set(),
2759
2881
  all: 0,
2760
- contrast: p
2882
+ contrast: g
2761
2883
  };
2762
- v.rows.add(h), v.all = a.filter((e) => e.getAttribute("data-series") === m).length, o.set(_, v);
2884
+ x.rows.add(v), x.all = o.filter((e) => e.getAttribute("data-series") === _).length, s.set(b, x);
2763
2885
  }
2764
2886
  }
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) ?? {
2887
+ for (let { kind: n, column: i, rows: a, all: o, contrast: c } of s.values()) {
2888
+ let s = Array.from(a).filter(Boolean).map((e) => `"${e}"`), l = s.join(", "), u = s.length > 1, d = n === "Line" ? i ? `Line "${i}" has` : "The line has" : n === "Slice" ? `${u ? "Slices" : "Slice"} ${l} ${u ? "have" : "has"}` : a.size >= o || !l ? `The bars${i ? ` of column "${i}"` : ""} have` : `${u ? "Bars" : "Bar"} ${l}${i ? ` in column "${i}"` : ""} ${u ? "have" : "has"}`;
2889
+ console.warn(`[${e}] ${d} a contrast of ${r.show(c)} with the background. It needs at least ${r.need(r.part)} (${r.partRule}).`, t);
2890
+ }
2891
+ }, sr = ".tablechart-name, .tablechart-value:not([data-place='inside'], [data-place='middle']), .tablechart-categories span, .tablechart-centre, .tablechart-tick, .tablechart-quadrant-name, figcaption b, figcaption span", cr = (t) => {
2892
+ let n = 0, r = () => {
2893
+ let r = Array.from(t.querySelectorAll(".tablechart-value[data-place='inside'], .tablechart-value[data-place='middle']")).filter((e) => !e.hasAttribute("data-left-out") && !e.hidden), a = Array.from(t.querySelectorAll(sr)).filter((e) => !e.hasAttribute("data-left-out") && !e.hidden && e.style.getPropertyValue("--m") !== "1" && (e.textContent ?? "").trim() && getComputedStyle(e).visibility !== "hidden");
2894
+ if ([...r, ...a].some((e) => wt(getComputedStyle(e).color)[3] === 0 && n < 20)) {
2895
+ n++, setTimeout(i, 500);
2896
+ return;
2897
+ }
2898
+ let o = Array.from(t.querySelectorAll("tbody tr > :first-child")).map((e) => (e.textContent ?? "").trim()), s = ar[Et(t)], c = t.dataset.chart === "bar" ? "bar" : "column", l = /* @__PURE__ */ new Map();
2899
+ for (let e of r) {
2900
+ let n = Pt(t, e);
2901
+ if (!n) continue;
2902
+ let r = getComputedStyle(e), i = getComputedStyle(n).fill, a = kt(Et(t), wt(r.color), wt(i)), u = Number.parseFloat(r.fontSize), d = u >= 24 || u >= 18.66 && Number(r.fontWeight) >= 700 ? s.large : s.text;
2903
+ if (a >= d) continue;
2904
+ let f = n.classList.contains("tablechart-piece") ? `${c} part` : c, p = `${r.color}|${i}`, m = l.get(p) ?? {
2905
+ what: f,
2779
2906
  names: [],
2780
- contrast: c,
2781
- needed: u
2907
+ contrast: a,
2908
+ needed: d
2782
2909
  };
2783
- f.names.push(`"${e.textContent?.trim()}" (${n[Number(i) - 1] ?? ""})`), r.set(d, f);
2910
+ m.names.push(`"${o[Number(e.dataset.row) - 1] ?? ""}" ("${e.textContent?.trim()}")`), l.set(p, m);
2784
2911
  }
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());
2912
+ let u = Nt(t), d = /* @__PURE__ */ new Map();
2913
+ for (let e of a) {
2914
+ let n = getComputedStyle(e), [r, i, a, o] = wt(n.color), c = [
2915
+ r,
2916
+ i,
2917
+ a
2918
+ ].map((e, t) => e * o + u[t] * (1 - o)), l = kt(Et(t), c, u), f = Number.parseFloat(n.fontSize), p = f >= 24 || f >= 18.66 && Number(n.fontWeight) >= 700 ? s.large : s.text;
2919
+ if (l >= p) continue;
2920
+ let m = d.get(n.color) ?? {
2921
+ names: [],
2922
+ contrast: l,
2923
+ needed: p
2924
+ };
2925
+ m.names.push(`"${e.textContent?.trim()}"`), d.set(n.color, m);
2926
+ }
2927
+ for (let { names: n, contrast: r, needed: i } of d.values()) console.warn(`[${e}] The text ${n.join(", ")} has a contrast of ${s.show(r)} with the background. Text needs at least ${s.need(i)} (${s.textRule}).`, t);
2928
+ for (let { what: n, names: r, contrast: i, needed: a } of l.values()) {
2929
+ let o = r.length > 1;
2930
+ console.warn(`[${e}] The text inside the ${n}${o ? "s" : ""} of ${r.join(", ")} has a contrast of ${s.show(i)} with ${o ? "those" : "that"} ${n}${o ? "s" : ""}. Text needs at least ${s.need(a)} (${s.textRule}).`, t);
2931
+ }
2932
+ }, i = () => requestAnimationFrame(() => requestAnimationFrame(() => {
2933
+ let e = t.getAnimations({ subtree: !0 }).map((e) => e.finished.catch(() => void 0));
2934
+ Promise.all(e).then(r);
2935
+ }));
2936
+ if (t.classList.contains("is-shown")) return void i();
2937
+ let a = new MutationObserver(() => {
2938
+ t.classList.contains("is-shown") && (a.disconnect(), i());
2790
2939
  });
2791
- i.observe(t, {
2940
+ a.observe(t, {
2792
2941
  attributes: !0,
2793
2942
  attributeFilter: ["class"]
2794
2943
  });
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) => {
2944
+ }, lr = [
2945
+ "bar",
2946
+ "piece",
2947
+ "up",
2948
+ "down",
2949
+ "total"
2950
+ ].map((e) => `--tablechart-${e}-value-color`), ur = /* @__PURE__ */ new Set(), dr = (t) => {
2951
+ let n = getComputedStyle(t);
2952
+ for (let r of lr) !ur.has(r) && n.getPropertyValue(r).trim() && (ur.add(r), console.warn(`[${e}] ${r} is old and goes in 1.3.0. --tablechart-value-on-dark and --tablechart-value-on-light set the colour of the numbers inside bars, with a contrast check.`, t));
2953
+ }, fr = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), pr = /^\s*(?:Table)?:\s+/, mr = (e) => e?.tagName === "P" && pr.test(e.textContent ?? ""), hr = (e) => {
2796
2954
  let t = document.createElement("figcaption");
2797
2955
  for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
2798
2956
  let n = e.firstChild;
2799
- n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(Zn, ""), n.textContent || n.remove());
2957
+ n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(pr, ""), n.textContent || n.remove());
2800
2958
  let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
2801
2959
  if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
2802
2960
  let e = document.createElement("span");
2803
2961
  e.append(...r.slice(i + 1)), t.append(e);
2804
2962
  }
2805
2963
  return e.remove(), t;
2806
- }, er = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, tr = (e) => {
2807
- let t = lr(e);
2964
+ }, gr = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, _r = (e) => {
2965
+ let t = Tr(e);
2808
2966
  return t?.tagName === "P" ? t : e;
2809
- }, nr = (e) => {
2810
- let t = tr(e).firstChild;
2967
+ }, vr = (e) => {
2968
+ let t = _r(e).firstChild;
2811
2969
  if (t?.nodeType !== Node.TEXT_NODE) return null;
2812
- let n = er.exec(t.textContent ?? "");
2813
- if (!n || !dn.includes(n[1]) || !n[3] && t.nextSibling) return null;
2970
+ let n = gr.exec(t.textContent ?? "");
2971
+ if (!n || !Sn.includes(n[1]) || !n[3] && t.nextSibling) return null;
2814
2972
  let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
2815
2973
  return {
2816
2974
  name: n[1],
@@ -2818,11 +2976,11 @@ var Ye = (e) => {
2818
2976
  text: t,
2819
2977
  length: n[0].length
2820
2978
  };
2821
- }, rr = (e) => {
2979
+ }, yr = (e) => {
2822
2980
  if (e?.tagName !== "UL" && e?.tagName !== "OL") return null;
2823
- let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : nr(e));
2981
+ let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : vr(e));
2824
2982
  return !t.length || t.some((e, t) => !n[t] && !e.hasAttribute("data-annotation")) ? null : (t.forEach((e, t) => {
2825
- let r = n[t], i = tr(e);
2983
+ let r = n[t], i = _r(e);
2826
2984
  if (i !== e && i.replaceWith(...i.childNodes), r) {
2827
2985
  e.setAttribute("data-annotation", r.name);
2828
2986
  for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
@@ -2833,18 +2991,18 @@ var Ye = (e) => {
2833
2991
  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));
2834
2992
  });
2835
2993
  }), e.classList.add("chart-annotations"), 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;
2994
+ }, br = (e, t) => {
2995
+ for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || fr(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
2996
+ }, xr = (e) => e.map((e) => {
2997
+ let t = e.closest("p"), n = mr(t) ? t : e;
2840
2998
  if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
2841
2999
  let r = document.createElement("figure");
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;
3000
+ br(e, r), e.classList.length || e.removeAttribute("class");
3001
+ let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? mr(a) ? a : mr(o) ? o : null : n;
2844
3002
  i && s === o && (o = o?.nextElementSibling ?? null);
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") => {
3003
+ let c = o?.classList.contains("chart-annotations") ? o : yr(o);
3004
+ return n.replaceWith(r), s && r.append(hr(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;
3005
+ }), Sr = (e, t, n, r = document.createElement("table"), i = "Note") => {
2848
3006
  for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
2849
3007
  let a = e.some((e) => e.note);
2850
3008
  if (!r.tHead && (t.length || n || a)) {
@@ -2873,7 +3031,7 @@ var Ye = (e) => {
2873
3031
  n.dataset.note = "", n.textContent = i, s.append(n);
2874
3032
  }
2875
3033
  return r;
2876
- }, sr = (e) => {
3034
+ }, Cr = (e) => {
2877
3035
  if (!e || typeof e != "object") return;
2878
3036
  let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
2879
3037
  if (t.length && t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n))) return t.map(([e, t]) => Array.isArray(t) ? {
@@ -2883,16 +3041,16 @@ var Ye = (e) => {
2883
3041
  label: e,
2884
3042
  value: t
2885
3043
  });
2886
- }, cr = async (t) => {
3044
+ }, wr = async (t) => {
2887
3045
  await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
2888
3046
  let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
2889
3047
  for (let e of t.querySelectorAll("table")) e !== r && e.remove();
2890
3048
  try {
2891
3049
  let e = await fetch(n);
2892
3050
  if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
2893
- let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : sr(i.rows) : sr(i);
3051
+ let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : Cr(i.rows) : Cr(i);
2894
3052
  if (!Array.isArray(a)) throw Error("no rows in it: a list of rows, an object with rows, or names with their values");
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);
3053
+ let o = Sr(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);
2896
3054
  if (!r) {
2897
3055
  let e = t.querySelector(":scope > figcaption");
2898
3056
  e ? e.after(o) : t.prepend(o);
@@ -2903,10 +3061,10 @@ var Ye = (e) => {
2903
3061
  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." : ""));
2904
3062
  }
2905
3063
  }));
2906
- }, lr = (e) => {
3064
+ }, Tr = (e) => {
2907
3065
  let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
2908
3066
  return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
2909
- }, ur = "strong, b, span.total", dr = (e) => {
3067
+ }, Er = "strong, b, span.total", Dr = (e) => {
2910
3068
  for (let t of e) {
2911
3069
  for (let e of t.querySelectorAll("tbody tr")) {
2912
3070
  let t = e.cells[0];
@@ -2914,16 +3072,16 @@ var Ye = (e) => {
2914
3072
  let n = document.createElement("th");
2915
3073
  for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
2916
3074
  n.append(...t.childNodes), t.replaceWith(n);
2917
- for (let t = lr(n); t?.matches(ur); t = lr(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
3075
+ for (let t = Tr(n); t?.matches(Er); t = Tr(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
2918
3076
  }
2919
3077
  let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
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);
3078
+ for (let t of e.slice(1)) for (let e = Tr(t); e?.matches(Er); e = Tr(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
2921
3079
  }
2922
- }, fr = "data-chart-made", pr = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, mr = (e) => new Promise((t) => setTimeout(t, e)), hr = (e, t) => {
3080
+ }, Or = "data-chart-made", kr = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Ar = (e) => new Promise((t) => setTimeout(t, e)), jr = (e, t) => {
2923
3081
  let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
2924
3082
  return Math.min(Math.max(r, 0), 1);
2925
- }, gr = async (e, t) => {
2926
- if (pr()) return;
3083
+ }, Mr = async (e, t) => {
3084
+ if (kr()) return;
2927
3085
  await new Promise(requestAnimationFrame);
2928
3086
  let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
2929
3087
  for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
@@ -2934,11 +3092,11 @@ var Ye = (e) => {
2934
3092
  let a = Number(n.delay ?? 0) + i * t;
2935
3093
  r = Math.max(r, a - Number(e.currentTime ?? 0));
2936
3094
  }
2937
- r > 0 && await mr(r);
2938
- }, _r = (e) => {
3095
+ r > 0 && await Ar(r);
3096
+ }, Nr = (e) => {
2939
3097
  for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
2940
3098
  return null;
2941
- }, vr = (e) => new Promise((t) => {
3099
+ }, Pr = (e) => new Promise((t) => {
2942
3100
  let n = ["animationstart", "transitionrun"], r = () => {
2943
3101
  for (let e of n) document.removeEventListener(e, i, !0);
2944
3102
  a.disconnect(), t();
@@ -2952,62 +3110,60 @@ var Ye = (e) => {
2952
3110
  attributes: !0,
2953
3111
  attributeFilter: ["class", "style"]
2954
3112
  });
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();
3113
+ }), Fr = /* @__PURE__ */ new Set(), Ir = null, Lr = (e) => {
3114
+ Fr.add(e), !Ir && (Ir = new MutationObserver(() => {
3115
+ for (let e of Fr) e.relabel();
2958
3116
  requestAnimationFrame(() => requestAnimationFrame(() => {
2959
- for (let e of yr) e.refresh();
3117
+ for (let e of Fr) e.refresh();
2960
3118
  }));
2961
- }), br.observe(document.documentElement, {
3119
+ }), Ir.observe(document.documentElement, {
2962
3120
  attributes: !0,
2963
3121
  attributeFilter: ["lang"]
2964
3122
  }));
2965
- }, Sr = (e) => {
2966
- yr.delete(e), !yr.size && br && (br.disconnect(), br = null);
2967
- }, Cr = ["column", "bar"], wr = (e) => {
3123
+ }, Rr = (e) => {
3124
+ Fr.delete(e), !Fr.size && Ir && (Ir.disconnect(), Ir = null);
3125
+ }, zr = ["column", "bar"], Br = (e) => {
2968
3126
  let t = e.getAttribute("data-chart") || "column";
2969
- if (!Cr.includes(t)) return null;
3127
+ if (!zr.includes(t)) return null;
2970
3128
  let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
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);
3129
+ return zr.includes(n) ? n : t;
3130
+ }, Vr = (e, t) => {
3131
+ let n = e, r = Br(n.figure), i = null, a = !1, o = !1, s = !1, c = async () => {
3132
+ if (!An(n.figure, t)) return er(n, !0);
2975
3133
  let e = n.figure.classList.contains("is-shown");
2976
- if (a && i !== null && !e && !o) {
2977
- o = !0;
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);
2981
- }, c = () => {
2982
- let e = wr(n.figure);
2983
- if (!e || e === r) return;
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);
3134
+ if (o && i !== null && !e && !s) {
3135
+ s = !0;
3136
+ let e = kr() ? null : Nr(n.figure);
3137
+ e && await Pr(e), await Mr(n.figure, jr(n.figure, t)), s = !1, (o || !t.replay) && er(n, !0);
3138
+ } else !o && t.replay && e && er(n, !1);
2986
3139
  }, l = () => {
2987
- c();
3140
+ let e = Br(n.figure);
3141
+ if (!e || e === r) return;
3142
+ let a = Q.timed("Building", n.figure, () => Rn(n.figure, t, e));
3143
+ a && ($n(n), Wt(a, n.step, !0), n = a, r = e, i = null);
3144
+ }, u = () => {
3145
+ l();
2988
3146
  let e = n.plot.clientWidth;
2989
- e && e !== i && Q.timed("Layout", n.figure, () => Ln(n, t)) && (Q.enabled && !i && (Kn(n.figure), Yn(n.figure)), i = e, s());
2990
- }, u = !1, d = new ResizeObserver(() => {
2991
- u || (u = !0, requestAnimationFrame(() => {
2992
- u = !1, l();
2993
- }));
2994
- }), f = new IntersectionObserver((e) => {
2995
- for (let t of e) a = t.isIntersecting, s();
2996
- }, { threshold: t.threshold }), p = () => {
2997
- n.figure.classList.add(x), Vn(n, !0), Wn(n.svg), n.figure.offsetWidth;
2998
- }, m = () => n.figure.classList.remove(x), h = () => {
2999
- i = null, l();
3000
- }, g = {
3001
- relabel: () => Rn(n, t),
3002
- refresh: h
3147
+ e && e !== i && Q.timed("Layout", n.figure, () => Xn(n, t)) && (a || (a = !0, or(n.figure), cr(n.figure), dr(n.figure)), i = e, c());
3148
+ }, d = !1, f = new ResizeObserver(() => {
3149
+ u(), f.unobserve(n.figure), requestAnimationFrame(() => d || f.observe(n.figure));
3150
+ }), p = new IntersectionObserver((e) => {
3151
+ for (let t of e) o = t.isIntersecting, c();
3152
+ }, { threshold: t.threshold }), m = () => {
3153
+ n.figure.classList.add(x), er(n, !0), ir(n.svg), n.figure.offsetWidth;
3154
+ }, h = () => n.figure.classList.remove(x), g = () => {
3155
+ i = null, u();
3156
+ }, _ = {
3157
+ relabel: () => Zn(n, t),
3158
+ refresh: g
3003
3159
  };
3004
- c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), window.addEventListener("afterprint", m), xr(g);
3005
- let _ = {
3160
+ l(), u(), f.observe(n.figure), p.observe(n.figure), window.addEventListener("beforeprint", m), window.addEventListener("afterprint", h), Lr(_);
3161
+ let v = {
3006
3162
  figure: n.figure,
3007
- refresh: h,
3008
- next: () => Nt(n, n.step + 1),
3009
- previous: () => Nt(n, n.step - 1),
3010
- stepTo: (e) => Nt(n, e),
3163
+ refresh: g,
3164
+ next: () => Wt(n, n.step + 1),
3165
+ previous: () => Wt(n, n.step - 1),
3166
+ stepTo: (e) => Wt(n, e),
3011
3167
  get step() {
3012
3168
  return n.step;
3013
3169
  },
@@ -3015,41 +3171,52 @@ var Ye = (e) => {
3015
3171
  return n.plan?.count ?? 0;
3016
3172
  },
3017
3173
  destroy() {
3018
- d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), window.removeEventListener("afterprint", m), Sr(g), sn(n), n.figure.tablechart === _ && delete n.figure.tablechart;
3174
+ d = !0, f.disconnect(), p.disconnect(), window.removeEventListener("beforeprint", m), window.removeEventListener("afterprint", h), Rr(_), vn(n), n.figure.tablechart === v && delete n.figure.tablechart;
3019
3175
  }
3020
3176
  };
3021
- return n.figure.tablechart = _, _;
3022
- }, Er = !1, Dr = (t) => {
3177
+ return n.figure.tablechart = v, v;
3178
+ }, Hr = !1, Ur = (t) => {
3023
3179
  let n = t.find((e) => e.tagName !== "FIGURE");
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);
3180
+ !Hr && n && (Hr = !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));
3181
+ }, Wr = async (e, t) => {
3182
+ let n = xr(e.filter((e) => !e.hasAttribute(Or) && e.tagName !== "TH"));
3183
+ Ur(n), await wr(n), Dr(n), ht(n, t.langattribute);
3028
3184
  for (let e of n) e.dispatchEvent(new CustomEvent("tablechart:table", { bubbles: !0 }));
3029
3185
  return n;
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 = {}) => {
3186
+ }, Gr = (e, t) => {
3187
+ let n = Q.timed("Building", e, () => Rn(e, t));
3188
+ return n ? (e.setAttribute(Or, ""), Jr(), Vr(n, t)) : null;
3189
+ }, Kr = !1, qr = /* @__PURE__ */ new WeakMap(), Jr = () => {
3190
+ if (Kr || typeof matchMedia != "function") return;
3191
+ Kr = !0;
3192
+ let e = () => {
3193
+ for (let e of document.querySelectorAll(`[${Or}]`)) {
3194
+ let t = getComputedStyle(e).color, n = Mt(e) || qr.get(e) !== t;
3195
+ qr.set(e, t), n && (Rt(e), zt(e));
3196
+ }
3197
+ };
3198
+ matchMedia("(prefers-color-scheme: dark)").addEventListener("change", e);
3199
+ let t = new MutationObserver(e);
3200
+ for (let e of [document.documentElement, document.body]) t.observe(e, { attributes: !0 });
3201
+ document.addEventListener("transitionend", (t) => {
3202
+ (t.target === document.documentElement || t.target === document.body) && e();
3203
+ });
3204
+ }, Yr = async (e, t = {}) => {
3038
3205
  if (e.tablechart) return e.tablechart;
3039
3206
  let n = {
3040
- ...O,
3207
+ ...k,
3041
3208
  ...t
3042
3209
  };
3043
3210
  n.debug && (Q.enabled = !0);
3044
- let [r] = await Or([e], n);
3045
- return r ? kr(r, n) : null;
3046
- }, Nr = async (e = {}, t = document) => {
3211
+ let [r] = await Wr([e], n);
3212
+ return r ? Gr(r, n) : null;
3213
+ }, Xr = async (e = {}, t = document) => {
3047
3214
  let n = {
3048
- ...O,
3215
+ ...k,
3049
3216
  ...e
3050
3217
  };
3051
3218
  n.debug && (Q.enabled = !0);
3052
- let r = (await Or(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => kr(e, n)).filter((e) => e !== null);
3219
+ let r = (await Wr(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => Gr(e, n)).filter((e) => e !== null);
3053
3220
  return Q.log(`Made ${r.length} chart(s).`), {
3054
3221
  charts: r,
3055
3222
  refresh: () => {
@@ -3060,4 +3227,4 @@ var Ye = (e) => {
3060
3227
  }
3061
3228
  };
3062
3229
  };
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 };
3230
+ export { L as A, t as B, J as C, ie as D, de as E, D as F, b as G, x as H, p as I, O as K, e as L, P as M, F as N, W as O, S as P, f as R, Ke as S, pe as T, s as U, m as V, w as W, ht as _, xr as a, $e as b, or as c, Rn as d, Xn as f, Wt as g, $n as h, Wr as i, R as j, ae as k, cr as l, er as m, jr as n, wr as o, Zn as p, k as q, Xr as r, Dr as s, Yr as t, bn as u, mt as v, q as w, et as x, dt as y, v as z };