@martinomagnifico/tablechart 1.1.3 → 1.2.1

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