@martinomagnifico/tablechart 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
+ }), ie = (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
+ }, K = (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 = K(o), c = a ? .5 : .5 * 10 ** -re(o.match(/-?[\d.,]+/)?.[0] ?? ""), l = Number.isNaN(s) ? !0 : Math.abs(n - s) <= c + 1e-9, u = {
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
+ }, Y = (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
+ }, xe = (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
+ }, Se = (e, t, n, r) => {
285
+ let i = e.filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), a = Ce(i, t, n, r);
286
+ i.forEach((e, t) => {
287
+ t % a && e.setAttribute("data-left-out", "");
288
+ });
289
+ }, Ce = (e, t, n, r) => {
290
+ if (e.length < 2) return 1;
291
+ let i = e.map((e) => Y(e, t, n, r)), a = 2 * t, o = (e, t) => e[0] + e[2] + a <= t[0] || t[0] + t[2] + a <= e[0] || e[1] + e[3] <= t[1] || t[1] + t[3] <= e[1], s = 1;
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: Y(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) => K(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, 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
+ }, Le = {
493
593
  segments: (e) => e.map((e) => ({
494
594
  ...e,
495
595
  from: 0,
@@ -497,6 +597,7 @@ 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,
@@ -509,57 +610,56 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
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) {
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) {
531
632
  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) => {
633
+ let i = Ne(t, e.series.length), o = Ie(e, t, r, { "data-grow": "right" }, i.bottom < 0 ? `${H - U(i.bottom)}px center` : ""), s = S(r) - C / 2;
634
+ Me(t, e.series.length).forEach(({ from: t, to: i, cell: c }, l) => {
534
635
  let u = e.seriesValues[l][r];
535
636
  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));
637
+ let d = Math.min(U(t), U(i)), f = Math.max(U(t), U(i));
537
638
  o(l, {
538
639
  x: d,
539
640
  y: s,
540
641
  width: Math.max(f - d, 1),
541
642
  height: C,
542
643
  ...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
+ }), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !_e(u, f - d, a) || J(u).height * a > C), Fe(u, e, l), L(u, (d + f) / 2, S(r), D, n);
544
645
  });
545
646
  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));
647
+ l && (l.dataset.place = I(r) ? "before" : "after", L(l, I(r) ? U(i.bottom) - O : U(i.top) + O, S(r), D, n));
547
648
  let u = c[r];
548
- u && P(u, p - 8 * a, S(r), w, n);
549
- }), o.appendChild(j("line", {
649
+ u && L(u, p - 8 * a, S(r), D, n);
650
+ }), o.appendChild(P("line", {
550
651
  class: i,
551
- x1: V,
552
- x2: V,
652
+ x1: H,
653
+ x2: H,
553
654
  y1: 0,
554
655
  y2: n
555
656
  }));
556
657
  return;
557
658
  }
558
659
  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
660
+ let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = ve(e.plot, t, (e) => ({
661
+ size: J(e).height * a,
662
+ room: w.size + w.gap * .5
563
663
  }), "--_fit");
564
664
  e.rows.forEach((t, i) => {
565
665
  e.series.forEach((a, c) => {
@@ -568,57 +668,57 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
568
668
  u.dataset.place = "none";
569
669
  return;
570
670
  }
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),
671
+ let d = U(l.value), f = l.value < 0, p = S(i) + w.offset(c), m = Math.max(Math.abs(d - H), 1);
672
+ l.value !== 0 && o.appendChild(P("rect", {
673
+ class: F(r, t),
574
674
  "data-kind": "bar",
575
675
  "data-row": i + 1,
576
676
  "data-grow": f ? "left" : "right",
577
- x: f ? V - m : V,
677
+ x: f ? H - m : H,
578
678
  y: p,
579
679
  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);
680
+ height: w.size,
681
+ ...je(e, t, c)
682
+ })), 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
683
  });
584
684
  let l = c[i];
585
- l && P(l, p - 8 * a, S(i), w, n);
586
- }), o.appendChild(j("line", {
685
+ l && L(l, p - 8 * a, S(i), D, n);
686
+ }), o.appendChild(P("line", {
587
687
  class: i,
588
- x1: V,
589
- x2: V,
688
+ x1: H,
689
+ x2: H,
590
690
  y1: 0,
591
691
  y2: n
592
692
  }));
593
693
  return;
594
694
  }
595
- let U = t.map((e, t) => Te(s[t], Math.abs(H(e.value) - V), a));
695
+ let ee = t.map((e, t) => B(s[t], Math.abs(U(e.value) - H)));
596
696
  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),
697
+ let l = U(t.value), u = S(i), d = t.value < 0, f = Math.abs(l - H), m = Math.max(f, 1);
698
+ t.value !== 0 && o.appendChild(P("rect", {
699
+ class: F(r, t),
600
700
  "data-kind": t.kind,
601
701
  "data-row": i + 1,
602
702
  "data-grow": d ? "left" : "right",
603
- x: d ? V - m : V,
703
+ x: d ? H - m : H,
604
704
  y: u - C / 2,
605
705
  width: m,
606
706
  height: C,
607
- style: O("--i", t.slot)
707
+ style: j("--i", t.slot)
608
708
  }));
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);
709
+ let h = s[i], g = Math.max(Math.min(O, f - k(h) - 6 * a), 6 * a), _ = d ? 1 : -1;
710
+ 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
711
  let v = c[i];
612
- v && P(v, p - 8 * a, u, w, n);
613
- }), o.appendChild(j("line", {
712
+ v && L(v, p - 8 * a, u, D, n);
713
+ }), o.appendChild(P("line", {
614
714
  class: i,
615
- x1: V,
616
- x2: V,
715
+ x1: H,
716
+ x2: H,
617
717
  y1: 0,
618
718
  y2: n
619
719
  }));
620
720
  }
621
- }, ke = {
721
+ }, Re = {
622
722
  segments: (e) => e.map((e) => ({
623
723
  ...e,
624
724
  from: 0,
@@ -626,6 +726,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
626
726
  kind: "bar"
627
727
  })),
628
728
  series: !0,
729
+ lines: !0,
730
+ groups: !0,
629
731
  legend: "box",
630
732
  stackable: !0,
631
733
  totals: !0,
@@ -635,8 +737,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
635
737
  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
738
  if (e.stacked) {
637
739
  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) => {
740
+ let i = Ne(t, e.series.length), l = Ie(e, t, r, {}, i.bottom < 0 ? `center ${p - a(i.top)}px` : ""), u = n(r) - o / 2;
741
+ Me(t, e.series.length).forEach(({ from: t, to: i, cell: d }, f) => {
640
742
  let p = e.seriesValues[f][r];
641
743
  if (p.dataset.place = "none", d.missing || i === t) return;
642
744
  let m = Math.min(a(i), a(t)), h = Math.max(a(i), a(t));
@@ -646,39 +748,37 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
646
748
  width: o,
647
749
  height: Math.max(h - m, 1),
648
750
  ...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
+ }), p.dataset.place = "inside", p.toggleAttribute("data-left-out", !ge(p, h - m, c) || J(p).width * c > o - 4 * c), Fe(p, e, f), L(p, n(r), (m + h) / 2, D, s);
650
752
  });
651
753
  let d = e.totals[r];
652
754
  if (d) {
653
755
  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);
756
+ d.dataset.place = e ? "below" : "outside", L(d, n(r), e ? a(i.bottom) + 4 * c : a(i.top) - 4 * c, D, s);
655
757
  }
656
- }), l.appendChild(j("line", {
758
+ }), l.appendChild(P("line", {
657
759
  class: i,
658
760
  x1: 0,
659
- x2: w,
761
+ x2: D,
660
762
  y1: p,
661
763
  y2: p
662
764
  }));
663
765
  return;
664
766
  }
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,
767
+ if (e.own.length > 1) {
768
+ 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) => ({
769
+ size: J(e).width * c,
670
770
  room: t.size + t.gap * .5
671
771
  }), "--_fit");
672
772
  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);
773
+ e.own.forEach((d, f) => {
774
+ let m = i.cells[d] ?? i.cells[0], h = e.seriesValues[d][o], g = n(o) + t.offset(f);
675
775
  if (m.missing) {
676
776
  h.dataset.place = "none";
677
777
  return;
678
778
  }
679
779
  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),
780
+ m.value !== 0 && l.appendChild(P("rect", {
781
+ class: F(r, i),
682
782
  "data-kind": "bar",
683
783
  "data-row": o + 1,
684
784
  ...v && { "data-grow": "down" },
@@ -686,49 +786,50 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
686
786
  y: v ? p : p - y,
687
787
  width: t.size,
688
788
  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);
789
+ ...je(e, i, d)
790
+ })), 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
791
  });
692
- }), l.appendChild(j("line", {
792
+ }), l.appendChild(P("line", {
693
793
  class: i,
694
794
  x1: 0,
695
- x2: w,
795
+ x2: D,
696
796
  y1: p,
697
797
  y2: p
698
798
  }));
699
799
  return;
700
800
  }
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";
801
+ 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;
802
+ for (let [e, t] of u.entries()) _[e] && (y = Math.min(y, (o - J(t).width * c) / 2));
803
+ t.forEach((t, i) => {
804
+ let d = a(t.value), g = t.value < 0;
805
+ if (t.missing) {
806
+ L(u[i], n(i), p - 4 * c, D, s), u[i].dataset.place = "outside";
707
807
  return;
708
808
  }
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,
809
+ let b = Math.max(Math.abs(p - d), 1);
810
+ t.value !== 0 && l.appendChild(P("rect", {
811
+ class: F(r, t),
812
+ "data-kind": t.kind,
813
+ "data-row": i + 1,
814
+ ...g && { "data-grow": "down" },
815
+ x: n(i) - o / 2,
816
+ y: g ? p : p - b,
717
817
  width: o,
718
- height: m,
719
- style: O("--i", e.slot)
818
+ height: b,
819
+ style: j("--i", t.slot),
820
+ ...h && je(e, t, m)
720
821
  }));
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", {
822
+ 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;
823
+ 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);
824
+ }), l.appendChild(P("line", {
724
825
  class: i,
725
826
  x1: 0,
726
- x2: w,
827
+ x2: D,
727
828
  y1: p,
728
829
  y2: p
729
830
  }));
730
831
  }
731
- }, Ae = 0, je = (e) => e.filter((e) => !e.isTotal), Me = {
832
+ }, ze = 0, Be = (e) => e.filter((e) => !e.isTotal), Ve = {
732
833
  aspect: .66,
733
834
  centre: !0,
734
835
  headroom: () => 0,
@@ -739,81 +840,81 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
739
840
  kind: "bar"
740
841
  })),
741
842
  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);
843
+ let c = D / 2, u = t / 2, d = Be(e).reduce((e, t) => e + Math.abs(t.value), 0);
743
844
  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;
845
+ 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
846
  if (e.forEach((e, o) => {
746
847
  let s = a[o];
747
848
  if (e.isTotal) {
748
849
  s.dataset.place = "none";
749
850
  return;
750
851
  }
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),
852
+ 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;
853
+ _.push(w), i.appendChild(P("circle", {
854
+ class: F(l, e),
754
855
  "data-slice": y + 1,
755
856
  "data-row": o + 1,
756
- cx: l,
857
+ cx: c,
757
858
  cy: u,
758
859
  r: h,
759
860
  "stroke-width": m,
760
- transform: `rotate(-90 ${l} ${u})`,
861
+ transform: `rotate(-90 ${c} ${u})`,
761
862
  "stroke-dasharray": `${C.toFixed(1)} ${(g - C).toFixed(1)}`,
762
863
  "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)}`
864
+ 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
865
  }));
765
- let E = T + C / g * Math.PI, k = Math.cos(E), A = Math.sin(E);
766
- i.appendChild(j("line", {
866
+ let T = w + C / g * Math.PI, E = Math.cos(T), O = Math.sin(T);
867
+ i.appendChild(P("line", {
767
868
  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),
869
+ x1: c + E * (p + 2 * n),
870
+ y1: u + O * (p + 2 * n),
871
+ x2: c + E * (p + 7 * n),
872
+ y2: u + O * (p + 7 * n),
772
873
  "data-row": o + 1,
773
- style: `${S} ${O("--i", e.slot)}`
874
+ style: `${S} ${j("--i", e.slot)}`
774
875
  })), 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;
876
+ let k = p + 9 * n, M = J(s).width * n / 2;
877
+ 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
878
  }), _.length > 1) {
778
- let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++Ae}`, a = j("mask", {
879
+ let e = h - m / 2 - 1, n = h + m / 2 + 1, r = `tablechart-slices-${++ze}`, a = P("mask", {
779
880
  id: r,
780
881
  maskUnits: "userSpaceOnUse"
781
882
  });
782
- a.appendChild(j("rect", {
883
+ a.appendChild(P("rect", {
783
884
  x: 0,
784
885
  y: 0,
785
- width: w,
886
+ width: D,
786
887
  height: t,
787
888
  fill: "white"
788
889
  }));
789
- for (let t of _) a.appendChild(j("line", {
890
+ for (let t of _) a.appendChild(P("line", {
790
891
  class: "tablechart-divide",
791
- x1: l + Math.cos(t) * e,
892
+ x1: c + Math.cos(t) * e,
792
893
  y1: u + Math.sin(t) * e,
793
- x2: l + Math.cos(t) * n,
894
+ x2: c + Math.cos(t) * n,
794
895
  y2: u + Math.sin(t) * n
795
896
  }));
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");
897
+ let o = P("g", { mask: `url(#${r})` });
898
+ for (let e of Array.from(i.querySelectorAll(`.${l}`))) o.appendChild(e);
899
+ let s = P("defs");
799
900
  s.appendChild(a), i.prepend(s, o);
800
901
  }
801
- s && P(s, l, u, w, t);
902
+ s && L(s, c, u, D, t);
802
903
  }
803
- }, Ne = [
904
+ }, He = [
804
905
  "circle",
805
906
  "square",
806
907
  "diamond"
807
- ], Pe = (e, t) => {
808
- let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = Ne.find((e) => n.includes(e));
908
+ ], X = (e, t) => {
909
+ let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = He.find((e) => n.includes(e));
809
910
  return {
810
- shape: r ?? Ne[Math.floor(t / 2) % Ne.length],
911
+ shape: r ?? He[Math.floor(t / 2) % He.length],
811
912
  open: n.includes("open") || !n.includes("filled") && !r && t % 2 == 1
812
913
  };
813
- }, Fe = (e, t, n, r, i = {}) => {
914
+ }, Ue = (e, t, n, r, i = {}) => {
814
915
  if (e === "square") {
815
916
  let e = r * .88;
816
- return j("rect", {
917
+ return P("rect", {
817
918
  x: t - e,
818
919
  y: n - e,
819
920
  width: e * 2,
@@ -823,26 +924,26 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablec
823
924
  }
824
925
  if (e === "diamond") {
825
926
  let e = r * 1.2;
826
- return j("polygon", {
927
+ return P("polygon", {
827
928
  points: `${t},${n - e} ${t + e},${n} ${t},${n + e} ${t - e},${n}`,
828
929
  ...i
829
930
  });
830
931
  }
831
932
  if (e === "triangle") {
832
933
  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}`,
934
+ return P("polygon", {
935
+ points: `${t},${n - e * .75} ${t + e * .87},${n + e * .75} ${t - e * .87},${n + e * .75}`,
835
936
  ...i
836
937
  });
837
938
  }
838
- return j("circle", {
939
+ return P("circle", {
839
940
  cx: t,
840
941
  cy: n,
841
942
  r,
842
943
  ...i
843
944
  });
844
- }, X = (e) => Number(e.toFixed(2));
845
- function Ie(e, t) {
945
+ }, Z = (e) => Number(e.toFixed(2));
946
+ function We(e, t) {
846
947
  let n = e.length;
847
948
  if (n < 2) return e.map(() => 0);
848
949
  let r = (n) => (t[n + 1] - t[n]) / (e[n + 1] - e[n] || 1), i = Array(n).fill(0);
@@ -859,31 +960,70 @@ function Ie(e, t) {
859
960
  };
860
961
  return i[0] = a(0, 1, i[1]), i[n - 1] = a(n - 2, n - 1, i[n - 2]), i;
861
962
  }
862
- function Le(e, t, n, r) {
963
+ function Ge(e, t, n, r) {
863
964
  let i = (t[0] - e[0]) / 3;
864
965
  return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
865
966
  }
866
- function Re(e, t, n, r) {
867
- let [i, a] = Le(e, t, n, r), o = ([e, t]) => `${X(e)},${X(t)}`;
967
+ function Ke(e, t, n, r) {
968
+ let [i, a] = Ge(e, t, n, r), o = ([e, t]) => `${Z(e)},${Z(t)}`;
868
969
  return `C${o(i)} ${o(a)} ${o(t)}`;
869
970
  }
870
- function ze(e, t, n) {
971
+ function qe(e, t, n) {
871
972
  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) => {
973
+ We(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
873
974
  r[i[t]] = e;
874
975
  }), i = [];
875
976
  };
876
977
  for (let n = 0; n < e; n++) t(n) ? a() : i.push(n);
877
978
  return a(), r;
878
979
  }
879
- // src/js/charts/line.ts
880
- var Be = (e) => e.map((e) => ({
980
+ var Je = (e) => {
981
+ let t = e.length, n = e.reduce((e, t) => e + t.x, 0) / t, r = e.reduce((e, t) => e + t.y, 0) / t, i = e.reduce((e, t) => e + (t.x - n) ** 2, 0), a = i ? e.reduce((e, t) => e + (t.x - n) * (t.y - r), 0) / i : 0, o = (e) => r + a * (e - n), s = t > 2 ? Math.sqrt(e.reduce((e, t) => e + (t.y - o(t.x)) ** 2, 0) / (t - 2)) : 0, c = i ? s / Math.sqrt(i) : 0;
982
+ return {
983
+ at: o,
984
+ spread: s,
985
+ t: c ? a / c : a ? Infinity : 0,
986
+ n: t
987
+ };
988
+ }, Ye = [
989
+ 12.71,
990
+ 4.3,
991
+ 3.18,
992
+ 2.78,
993
+ 2.57,
994
+ 2.45,
995
+ 2.36,
996
+ 2.31,
997
+ 2.26,
998
+ 2.23,
999
+ 2.2,
1000
+ 2.18,
1001
+ 2.16,
1002
+ 2.14,
1003
+ 2.13
1004
+ ], Xe = (e) => Ye[e - 1] ?? (e < 30 ? 2.1 : 2), Ze = (e) => {
1005
+ let t = e.map((e) => e.y), n = Math.min(...t), r = Math.max(...t), i = n < 0 && r > 0, a = r - n || 1;
1006
+ return {
1007
+ mean: t.reduce((e, t) => e + t, 0) / t.length,
1008
+ share: (e, t) => e / (i ? a : Math.abs(t) || a) * 100
1009
+ };
1010
+ }, Qe = (e, t = 5, n = 25) => {
1011
+ if (e.length < 4) return null;
1012
+ let { mean: r, share: i } = Ze(e), a = (t) => e.filter((e) => Math.abs(i(e.y - t(e.x), t(e.x))) > n), o = (t) => t.length <= e.length / 5, s = Je(e), c = a(s.at);
1013
+ c.length && o(c) && (s = Je(e.filter((e) => !c.includes(e))), c = a(s.at)), o(c) || (s = Je(e), c = []);
1014
+ let l = s.at, u = e[0], d = e[e.length - 1], f = i(l(d.x) - l(u.x), r), p = Math.abs(s.t) >= Xe(s.n - 2), m = Math.abs(i(s.spread, r)) < t, h = Math.abs(f) < t ? "flat" : f > 0 ? "up" : "down", g = h === "flat" ? m ? "flat" : "unclear" : p ? h : "unclear";
1015
+ return {
1016
+ course: g,
1017
+ line: l,
1018
+ outside: g === "unclear" ? [] : c
1019
+ };
1020
+ }, $e = (e) => e.map((e) => ({
881
1021
  ...e,
882
1022
  from: 0,
883
1023
  to: e.value,
884
1024
  kind: "bar"
885
- })), Ve = (e) => ({
886
- segments: Be,
1025
+ })), et = (e) => ({
1026
+ segments: $e,
887
1027
  series: !0,
888
1028
  stackable: !0,
889
1029
  running: !0,
@@ -891,14 +1031,14 @@ var Be = (e) => e.map((e) => ({
891
1031
  headroom: ({ labelHeight: e, unit: t }) => e * 1.6 + 6 * t,
892
1032
  footroom: ({ labelHeight: t, unit: n, series: r, focused: i, stacked: a }) => !e && !a && r === 2 && !i ? t + 7 * n : 0,
893
1033
  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 {
1034
+ 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;
1035
+ _.style.setProperty("--_base", `${Z(T)}px`);
1036
+ 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) => {
1037
+ if (!S) return {
898
1038
  attrs: {},
899
1039
  ink: ""
900
1040
  };
901
- let n = y && !e.focus;
1041
+ let n = C && !e.focus;
902
1042
  return {
903
1043
  attrs: {
904
1044
  "data-series": t + 1,
@@ -906,177 +1046,340 @@ var Be = (e) => e.map((e) => ({
906
1046
  },
907
1047
  ink: `--n:${t}; --m:${+!!n}; --palette:var(--tablechart-color-${t + 1}); `
908
1048
  };
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) => {
1049
+ }), R = y ? w : Math.min(w, 6);
1050
+ t.plot.style.setProperty("--count", String(R + 1));
1051
+ let z = w > 0 ? R / (b ? n.length : w) : 1, B = (e) => e * z, V = (e) => `--i:${Z(B(e))}`, H = (e) => {
912
1052
  let t = [], r = -1;
913
1053
  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));
1054
+ A(e, i) || (r < 0 && (r = i), (i === w || A(e, i + 1)) && ((b || i > r) && t.push([r, i]), r = -1));
915
1055
  }), t;
916
- }, z = (e, t) => `--i:${X(I(e) + 1)}; --d:${X(I(g ? t + 1 : t) - I(e))}`, V = (e, t) => ({
1056
+ }, ee = (e, t) => `--i:${Z(B(e) + 1)}; --d:${Z(B(b ? t + 1 : t) - B(e))}`, te = (e, t) => ({
917
1057
  "data-from": e + 1,
918
1058
  "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) => {
1059
+ ...b && { "data-flat": "" }
1060
+ }), ne = x ? r.map((e, t) => qe(n.length, (e) => A(t, e), (e) => F(t, e))) : [], W = x && e ? r.map((e, t) => qe(n.length, (e) => A(t, e), (e) => [c(e), l(N(t, e))])) : [], re = (e, t, n) => {
921
1061
  let r = [];
922
1062
  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)}`);
1063
+ b ? (r.push(`H${Z(i + n * E / 2)}`), o < e.length - 1 && r.push(`V${Z(e[o + 1][1])}`)) : o > 0 && r.push(t ? Ke(e[o - 1], [i, a], t[o - 1], t[o]) : `L${Z(i)},${Z(a)}`);
924
1064
  }), 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", {
1065
+ }, G = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [c(t + r), l(i(e, t + r))]), ie = (e, t, n, r) => x ? e[t].slice(n, r + 1) : null, K = (e) => c(e) - (b ? E / 2 : 0), q = (e) => c(e) + (b ? E / 2 : 0), ae = (e) => {
1066
+ let t = P("g", {
1067
+ class: d,
1068
+ ...I[e].attrs,
1069
+ ...v && { "data-stacked": "" },
1070
+ style: I[e].ink
1071
+ }), n = H(e), r = P("g", {
932
1072
  class: "tablechart-area-fill",
933
- style: `--rows:${X(N + 1)}; ${n.length ? z(...n[0]) : ""}`
1073
+ style: `--rows:${Z(R + 1)}; ${n.length ? ee(...n[0]) : ""}`
934
1074
  });
935
1075
  t.appendChild(r);
936
1076
  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),
1077
+ let n = G(e, t, i, M), a = G(e, t, i, N), o = ie(W, e, t, i)?.reverse() ?? null, s = [
1078
+ `M${Z(K(t))},${Z(a[0][1])}`,
1079
+ `L${Z(K(t))},${Z(n[0][1])}`,
1080
+ ...re(n, ie(ne, e, t, i), 1),
1081
+ `L${Z(q(i))},${Z(a[a.length - 1][1])}`,
1082
+ ...re(a.reverse(), o, -1),
943
1083
  "Z"
944
1084
  ].join(" ");
945
- r.appendChild(j("path", {
1085
+ r.appendChild(P("path", {
946
1086
  d: s,
947
- ...V(t, i),
948
- style: z(t, i)
1087
+ ...te(t, i),
1088
+ style: ee(t, i)
949
1089
  }));
950
1090
  }
951
- m.appendChild(t);
952
- }, K = (e) => {
1091
+ _.appendChild(t);
1092
+ }, oe = (e) => {
953
1093
  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,
1094
+ for (let [n, r] of H(e)) {
1095
+ let i = G(e, n, r, M), a = [`M${Z(K(n))},${Z(i[0][1])}`, ...re(i, ie(ne, e, n, r), 1)].join(" ");
1096
+ _.appendChild(P("path", {
1097
+ class: u,
1098
+ ...I[e].attrs,
959
1099
  d: a,
960
1100
  ...t.line && { "data-line": t.line },
961
- ...V(n, r),
962
- style: `${M[e].ink}${z(n, r)}`
1101
+ ...te(n, r),
1102
+ style: `${I[e].ink}${ee(n, r)}`
963
1103
  }));
964
1104
  }
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) : {
1105
+ }, se = (e) => {
1106
+ let i = a.map((e) => r[e]), o = r.map((e, t) => y ? X(i, a.indexOf(t)) : S ? X(r, t) : {
968
1107
  shape: "circle",
969
1108
  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)}`
1109
+ }), s = (e, t, n) => {
1110
+ let [r, i] = F(e, t);
1111
+ return Ue(o[e].shape, r, i, 4 * p, {
1112
+ ...n,
1113
+ style: `${n.style ?? ""}${O(i)}${V(t)}`
975
1114
  });
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 }
1115
+ }, 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, {
1116
+ class: h,
1117
+ "data-row": t + 1,
1118
+ ...S && { "data-series": e + 1 }
980
1119
  })) : []);
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
1120
+ _.closest("[data-animate]")?.getAttribute("data-animate") === "grow" ? U(_, l, D, f) : t.lineHoles.push(...l), a.forEach((e) => {
1121
+ for (let t of c(e)) _.appendChild(s(e, t, {
1122
+ class: m,
1123
+ ...I[e].attrs,
1124
+ "data-marker": o[e].shape,
1125
+ ...o[e].open && { "data-open": "" },
1126
+ "data-row": t + 1,
1127
+ style: I[e].ink
989
1128
  }));
990
1129
  });
991
- })();
992
- let ie = (e, t) => {
1130
+ };
1131
+ e && a.forEach((e) => ae(e)), a.forEach((e) => oe(e));
1132
+ let ce = y ? r.flatMap((e, t) => a.includes(t) ? [] : o[t].flatMap((e) => {
1133
+ let t = e.dataset.place;
1134
+ if (!t || t === "none" || e.hasAttribute("data-left-out")) return [];
1135
+ let [n, r, i, a] = Y(e, p, D, f);
1136
+ return [{
1137
+ label: e,
1138
+ box: [
1139
+ n - 2 * p,
1140
+ r - 3 * p,
1141
+ i + 4 * p,
1142
+ a + 6 * p
1143
+ ]
1144
+ }];
1145
+ })) : [], ue = b ? [] : a.flatMap((e) => n.flatMap((t, n) => {
1146
+ if (A(e, n)) return [];
1147
+ let [r, i] = F(e, n);
1148
+ return [[
1149
+ r - 4 * p,
1150
+ i - 4 * p,
1151
+ 8 * p,
1152
+ 8 * p
1153
+ ]];
1154
+ })), fe = ce.filter(({ label: e, box: t }) => {
1155
+ let n = ue.some((e) => le(e, t));
1156
+ return n && e.setAttribute("data-left-out", ""), !n;
1157
+ }), pe = (e, t) => {
993
1158
  let n = t;
994
- for (; n < b && !E(e, n + 1) && T(e, n + 1)?.value === T(e, t)?.value;) n++;
1159
+ for (; n < w && !A(e, n + 1) && k(e, n + 1)?.value === k(e, t)?.value;) n++;
995
1160
  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";
1161
+ }, me = (e) => e === "above" ? "below" : "above", he = (e, t, n) => {
1162
+ let [r, i] = F(e, t), a = J(o[e][t]).width * p, s = [
1163
+ r - a / 2,
1164
+ n === "above" ? i - 7 * p - g : i + 7 * p,
1165
+ a,
1166
+ g
1167
+ ];
1168
+ 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;
1169
+ }, ge = (e, t, n, r) => {
1170
+ 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)));
1171
+ return Array.from({ length: c + 1 }, (e, t) => {
1172
+ let n = t / c;
1173
+ return [
1174
+ i + (o - i) * n - r,
1175
+ a + (s - a) * n - r,
1176
+ 2 * r,
1177
+ 2 * r
1178
+ ];
1179
+ });
1180
+ }, _e = (t, n) => {
1181
+ let i = k(t, n);
1182
+ if (!i || i.missing || b && n > 0 && !A(t, n - 1) && k(t, n - 1)?.value === i.value || C && !r[t].focus) return "none";
1183
+ if (v) return "middle";
1000
1184
  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,
1185
+ if (!S || C || r.length > 2) return e || b || he(t, n, a) <= he(t, n, me(a)) ? a : me(a);
1186
+ let o = k(1 - t, n);
1187
+ 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";
1188
+ }, ve = (y || S && !C && r.length > 2 && !v) && !b, be = /* @__PURE__ */ new Map();
1189
+ if (ve) {
1190
+ let e = n.flatMap((e, t) => a.map((e) => ({
1191
+ s: e,
1008
1192
  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);
1193
+ value: k(e, t)?.value ?? 0
1194
+ }))).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 }) => {
1195
+ let i = J(o[e][n]).width * p, [a, s] = F(e, n);
1012
1196
  return t(r).map((e) => [
1013
- o - i / 2,
1014
- e === "above" ? s - 7 * u - p : s + 7 * u,
1197
+ a - i / 2,
1198
+ e === "above" ? s - 7 * p - g : s + 7 * p,
1015
1199
  i,
1016
- p
1200
+ g
1017
1201
  ]);
1018
- }), r.flatMap((e, t) => n.flatMap((e, n) => {
1019
- if (E(t, n)) return [];
1020
- let [r, i] = A(t, n);
1202
+ }), [...a.flatMap((e) => n.flatMap((t, n) => {
1203
+ if (A(e, n)) return [];
1204
+ let [r, i] = F(e, n);
1021
1205
  return [[
1022
- r - 4 * u,
1023
- i - 4 * u,
1024
- 8 * u,
1025
- 8 * u
1206
+ r - 4 * p,
1207
+ i - 4 * p,
1208
+ 8 * p,
1209
+ 8 * p
1026
1210
  ]];
1027
- })), [
1211
+ })), ...fe.map(({ box: e }) => e)], [
1028
1212
  0,
1029
1213
  0,
1030
- s(b) + s(0),
1031
- l
1214
+ c(w) + c(0),
1215
+ f
1032
1216
  ]);
1033
- e.forEach(({ s: e, i: n, value: r }, o) => se.set(a[e][n], i[o] === null ? null : t(r)[i[o]]));
1217
+ e.forEach(({ s: e, i: n, value: i }, a) => be.set(o[e][n], r[a] === null ? null : t(i)[r[a]]));
1034
1218
  }
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
1219
+ let xe = (e, t) => ve ? be.get(o[e][t]) === null : !v && !b ? !1 : J(o[e][t]).width * p > (b ? pe(e, t) - t + 1 : 1) * E - 4 * p || v && e > 0 && M(e, t) < N(e, t) ? !0 : v && Math.abs(l(N(e, t)) - l(M(e, t))) < g * 1.2;
1220
+ a.forEach((e) => {
1221
+ o[e].forEach((t, n) => {
1222
+ t.style.setProperty("--i", String(Z(b ? (B(n) + B(n + 1)) / 2 : B(n))));
1223
+ let r = be.get(t) ?? _e(e, n);
1224
+ if (t.dataset.place = r === "above" ? "outside" : r, t.toggleAttribute("data-left-out", r !== "none" && xe(e, n)), b && r !== "none" ? t.dataset.rowEnd = String(pe(e, n) + 1) : delete t.dataset.rowEnd, r === "none") return;
1225
+ let i = J(t).width * p / 2 + 4 * p, a = c(n);
1226
+ b ? a = (c(n) + c(pe(e, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === w && (a -= i);
1227
+ let o = l(M(e, n)), s = {
1228
+ middle: (l(N(e, n)) - o) / 2,
1229
+ above: -7 * p,
1230
+ below: 7 * p
1047
1231
  };
1048
- P(e, a, o + d[r], w, l);
1232
+ L(t, a, o + s[r], D, f);
1049
1233
  });
1050
1234
  });
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);
1235
+ let Se = (e) => {
1236
+ let r = n.flatMap((t, n) => t.pinned && !A(e, n) ? [n] : []), i = n.map((e, t) => t).filter((t) => !A(e, t)), a = (t) => k(e, t)?.value ?? 0, { keys: s } = t.pick;
1237
+ i.length && (s.includes("last") && r.push(i[i.length - 1]), s.includes("first") && r.push(i[0]), s.includes("highest") && r.push(i.reduce((e, t) => a(t) > a(e) ? t : e)), s.includes("lowest") && r.push(i.reduce((e, t) => a(t) < a(e) ? t : e)), s.includes("outliers") && r.push(...Qe(i.map((e) => ({
1238
+ x: e,
1239
+ y: a(e)
1240
+ })))?.outside.map((e) => e.x) ?? []));
1241
+ let c = [];
1242
+ for (let t of r) {
1243
+ let n = o[e][t];
1244
+ c.includes(t) || n.dataset.place === "none" || c.every((t) => Ce([o[e][t], n], p, 1e3, f) === 1) && c.push(t);
1245
+ }
1246
+ return new Set(c);
1247
+ }, we = (e) => Ce(o[e].filter((e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out")), p, D, f) === 1, Te = (e) => {
1248
+ let t = w;
1249
+ for (; t > 0 && A(e, t);) t--;
1250
+ return t;
1251
+ }, Ee = /* @__PURE__ */ new Map();
1252
+ for (let e of a) {
1253
+ let n = t.pick.mode === "all" || t.pick.mode === "auto" && we(e) ? null : Se(e);
1254
+ Ee.set(e, n), n && o[e].forEach((e, t) => {
1255
+ e.dataset.place !== "none" && !n.has(t) && e.setAttribute("data-left-out", "");
1256
+ });
1257
+ }
1258
+ if (!v && !b && a.some((e) => Ee.get(e))) {
1259
+ 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) => {
1260
+ let t = s[e];
1261
+ if (!t) return [];
1262
+ let n = w;
1263
+ for (; n > 0 && A(e, n);) n--;
1264
+ let [r, a] = F(e, n);
1265
+ return [[
1266
+ r + 10 * p,
1267
+ a - i / 2,
1268
+ J(t).width * p,
1269
+ i
1270
+ ]];
1271
+ }), u = a.flatMap((e) => [...Ee.get(e) ?? []].map((t) => ({
1272
+ s: e,
1273
+ i: t
1274
+ }))), d = ({ s: e, i: t }) => {
1275
+ 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;
1276
+ return (r ?? i) !== void 0 && (r === void 0 || n <= r) && (i === void 0 || n <= i) ? [
1277
+ "below",
1278
+ "outside",
1279
+ "below far",
1280
+ "outside far",
1281
+ "after",
1282
+ "before"
1283
+ ] : [
1284
+ "outside",
1285
+ "below",
1286
+ "outside far",
1287
+ "below far",
1288
+ "after",
1289
+ "before"
1290
+ ];
1291
+ }, m = ({ s: t, i: n }, r) => {
1292
+ 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);
1293
+ return r === "outside" ? [
1294
+ l,
1295
+ c - 7 * p - a,
1296
+ i,
1297
+ a
1298
+ ] : r === "below" ? [
1299
+ l,
1300
+ c + 7 * p,
1301
+ i,
1302
+ a
1303
+ ] : r === "outside far" ? [
1304
+ l,
1305
+ c - 7 * p - 2 * a,
1306
+ i,
1307
+ a
1308
+ ] : r === "below far" ? [
1309
+ l,
1310
+ c + 7 * p + a,
1311
+ i,
1312
+ a
1313
+ ] : r === "after" ? [
1314
+ s + 7 * p,
1315
+ c - a / 2,
1316
+ i,
1317
+ a
1318
+ ] : [
1319
+ s - 7 * p - i,
1320
+ c - a / 2,
1321
+ i,
1322
+ a
1323
+ ];
1324
+ }, 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 }) => {
1325
+ let [n, r] = F(e, t);
1326
+ return [
1327
+ n - 6 * p,
1328
+ r - 6 * p,
1329
+ 12 * p,
1330
+ 12 * p
1331
+ ];
1332
+ }), y = [], b = /* @__PURE__ */ new Set(), x = u.map((e, t) => {
1333
+ let n = h[t].map((t) => m(e, t)), i = (e) => _(e) && ![
1334
+ ...y,
1335
+ ...l,
1336
+ ...v
1337
+ ].some((t) => le(e, t)), a = n.findIndex((e) => i(e) && !r.some((t) => le(e, t)));
1338
+ return a < 0 && (a = n.findIndex(i), a >= 0 && b.add(t)), a >= 0 && y.push(n[a]), a < 0 ? null : a;
1339
+ });
1340
+ u.forEach((e, t) => {
1341
+ let n = o[e.s][e.i];
1342
+ n.toggleAttribute("data-cut", b.has(t));
1343
+ let r = x[t];
1344
+ if (r === null) return n.setAttribute("data-left-out", "");
1345
+ let i = h[t][r], [a, s, c, l] = m(e, i), u = i.split(" ")[0];
1346
+ 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);
1347
+ });
1348
+ }
1349
+ b || se((e, t) => {
1350
+ let n = Ee.get(e);
1351
+ return n ? n.has(t) : E >= 10 * p;
1352
+ }), t.pointOf = (e) => {
1353
+ let t = a.filter((t) => !A(t, e)).map((t) => F(t, e));
1354
+ return t.length ? t.reduce((e, t) => t[1] < e[1] ? t : e) : null;
1355
+ };
1356
+ let De = (y ? [] : s).map((e, t) => {
1357
+ let n = Te(t), [r, i] = F(t, n);
1055
1358
  return {
1056
1359
  name: e,
1057
- x: (g ? r + S / 2 : r) + 10 * u,
1058
- y: h ? (i + c(k(t, n))) / 2 : i
1360
+ x: (b ? r + E / 2 : r) + 10 * p,
1361
+ y: v ? (i + l(N(t, n))) / 2 : i
1059
1362
  };
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", {
1363
+ }), Oe = (s[0] ? J(s[0]).height : 0) * p;
1364
+ for (let e of ye(De, Oe)) L(e.name, e.x, e.y, D, f);
1365
+ 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;
1366
+ y || _.appendChild(P("line", {
1064
1367
  class: i,
1065
1368
  x1: 0,
1066
- x2: s(b) + s(0),
1067
- y1: pe,
1068
- y2: pe
1369
+ x2: c(w) + c(0),
1370
+ y1: Ae,
1371
+ y2: Ae
1069
1372
  }));
1070
1373
  }
1071
- }), He = Ve(!1), Ue = Ve(!0), We = /* @__PURE__ */ new Set(), Ge = (t, n) => {
1374
+ }), tt = et(!1), nt = et(!0), rt = /* @__PURE__ */ new Set(), it = (t, n) => {
1072
1375
  if (Math.abs(t - n) <= Math.abs(n) / 100) return;
1073
1376
  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 = {
1377
+ rt.has(r) || (rt.add(r), console.warn(r));
1378
+ }, at = {
1076
1379
  segments: (e) => {
1077
1380
  let t = 0, n = !1;
1078
1381
  return e.map((e) => {
1079
- if (e.isTotal) return n && Ge(e.value, t), n = !1, t = e.value, {
1382
+ if (e.isTotal) return n && it(e.value, t), n = !1, t = e.value, {
1080
1383
  ...e,
1081
1384
  from: 0,
1082
1385
  to: e.value,
@@ -1094,34 +1397,34 @@ var Be = (e) => e.map((e) => ({
1094
1397
  breakable: !0,
1095
1398
  headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
1096
1399
  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) => {
1400
+ let f = n(0), p = he(l, a, s), m = d ?? "center", h = e.map((t, r) => {
1098
1401
  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
1402
  return {
1100
1403
  top: i,
1101
1404
  length: a,
1102
1405
  down: t.kind === "down" || t.kind === "total" && (c ? t.to >= 0 : t.to < 0),
1103
- inside: !o && !p && we(l[r], a, s)
1406
+ inside: !o && !p && ge(l[r], a, s)
1104
1407
  };
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"};`;
1408
+ }), g = l[0] ? J(l[0]).height * s * .56 : 0, _ = Infinity;
1409
+ for (let [e, t] of h.entries()) t.inside && (_ = Math.min(_, (a - J(l[e]).width * s) / 2));
1410
+ let v = e.length, y = (e, t, n = !1) => `--start:${(e / v).toFixed(4)}; --span:${(t / v).toFixed(4)}; --ease:${n ? k : "linear"};`;
1108
1411
  e.forEach((r, i) => {
1109
1412
  let o = e[i + 1];
1110
1413
  if (!o) return;
1111
1414
  let s = n(r.to), l = t(i) + a / 2, u = t(i + 1) - a / 2;
1112
- c.appendChild(j("line", {
1415
+ c.appendChild(P("line", {
1113
1416
  class: "tablechart-connector",
1114
1417
  x1: l,
1115
1418
  x2: u,
1116
1419
  y1: s,
1117
1420
  y2: s,
1118
1421
  "data-row": i + 2,
1119
- style: `${O("--i", o.slot)}; ${y(i + 1, 1 / 3)}`
1422
+ style: `${j("--i", o.slot)}; ${y(i + 1, 1 / 3)}`
1120
1423
  }));
1121
1424
  }), e.forEach((n, i) => {
1122
1425
  let { top: u, length: d, down: f, inside: p } = h[i];
1123
- c.appendChild(j("rect", {
1124
- class: M(r, n),
1426
+ c.appendChild(P("rect", {
1427
+ class: F(r, n),
1125
1428
  "data-kind": n.kind,
1126
1429
  "data-row": i + 1,
1127
1430
  "data-grow": f ? "down" : "up",
@@ -1129,33 +1432,33 @@ var Be = (e) => e.map((e) => ({
1129
1432
  y: u,
1130
1433
  width: a,
1131
1434
  height: Math.max(d, 1),
1132
- style: `${O("--i", n.slot)}; ${y(i, 1, i === e.length - 1)}`
1435
+ style: `${j("--i", n.slot)}; ${y(i, 1, i === e.length - 1)}`
1133
1436
  }));
1134
1437
  let b = l[i];
1135
1438
  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;
1439
+ 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
1440
  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", {
1441
+ let T = p ? w : n.kind === "down" ? u + d + J(b).height * s + 3 * s : u - 3 * s;
1442
+ L(b, t(i), T, D, o);
1443
+ }), c.appendChild(P("line", {
1141
1444
  class: i,
1142
1445
  x1: 0,
1143
- x2: w,
1446
+ x2: D,
1144
1447
  y1: f,
1145
1448
  y2: f
1146
1449
  }));
1147
1450
  }
1148
- }, Z = {
1451
+ }, Q = {
1149
1452
  enabled: !1,
1150
1453
  log(...t) {
1151
- Z.enabled && console.log(`[${e}]`, ...t);
1454
+ Q.enabled && console.log(`[${e}]`, ...t);
1152
1455
  },
1153
1456
  timed(t, n, r) {
1154
- if (!Z.enabled) return r();
1457
+ if (!Q.enabled) return r();
1155
1458
  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;
1459
+ 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
1460
  }
1158
- }, qe = (e) => {
1461
+ }, ot = (e) => {
1159
1462
  let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
1160
1463
  return {
1161
1464
  raw: t,
@@ -1165,19 +1468,31 @@ var Be = (e) => e.map((e) => ({
1165
1468
  missing: !n,
1166
1469
  value: n ? Number.parseFloat(n[2].replace(",", ".")) : 0
1167
1470
  };
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)));
1471
+ }, st = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).flatMap((e, t) => e.hasAttribute("data-note") ? [t] : []), ct = (e, t) => {
1472
+ let n = st(e), r = e.querySelectorAll("tbody tr")[t]?.querySelectorAll("td") ?? [];
1473
+ return n.map((e) => r[e]).find((e) => e?.textContent?.trim()) ?? null;
1474
+ }, lt = (e, t = "data-i18n") => {
1475
+ let n = st(e);
1476
+ return Array.from(e.querySelectorAll("tbody tr")).map((e, r) => {
1477
+ let i = e.querySelector("th"), a = Array.from(e.querySelectorAll("td")), o = a.filter((e, t) => !n.includes(t)).map(ot);
1478
+ o.length || o.push(ot(null));
1479
+ let s = n.map((e) => a[e]).find((e) => e?.textContent?.trim());
1480
+ return {
1481
+ ...o[0],
1482
+ label: (i?.textContent || "").trim(),
1483
+ note: s?.textContent?.trim() ?? null,
1484
+ noteKey: t && s?.getAttribute(t) || null,
1485
+ short: i?.getAttribute("data-short") || null,
1486
+ pinned: e.getAttribute("data-value") === "show",
1487
+ key: t && i?.getAttribute(t) || null,
1488
+ cells: o,
1489
+ classes: Array.from(e.classList),
1490
+ isTotal: e.getAttribute("data-kind") === "total",
1491
+ slot: r
1492
+ };
1493
+ });
1494
+ }, ut = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1).filter((e) => !e.hasAttribute("data-note")), dt = (e) => e === "dashed" || e === "dotted" ? e : null, ft = (e, t, n = "data-i18n") => {
1495
+ let r = ut(e), i = Math.max(1, W(t.map((e) => e.cells.length)));
1181
1496
  return Array.from({ length: i }, (e, t) => {
1182
1497
  let i = r[t];
1183
1498
  return {
@@ -1185,11 +1500,12 @@ var Be = (e) => e.map((e) => ({
1185
1500
  key: n && i?.getAttribute(n) || null,
1186
1501
  focus: i?.getAttribute("data-kind") === "focus",
1187
1502
  marker: i?.getAttribute("data-marker") ?? null,
1188
- line: Xe(i?.getAttribute("data-line")),
1189
- group: !!i?.hasAttribute("data-group")
1503
+ line: dt(i?.getAttribute("data-line")),
1504
+ group: !!i?.hasAttribute("data-group"),
1505
+ chart: i?.getAttribute("data-chart") === "line" ? "line" : null
1190
1506
  };
1191
1507
  });
1192
- }, Qe = (t, n) => {
1508
+ }, pt = (t, n) => {
1193
1509
  if (!n) return;
1194
1510
  let r = /* @__PURE__ */ new Map();
1195
1511
  for (let i of t) {
@@ -1202,7 +1518,7 @@ var Be = (e) => e.map((e) => ({
1202
1518
  i.querySelectorAll("tbody th").forEach((e, r) => {
1203
1519
  e.getAttribute(n) || e.setAttribute(n, `${t}-row${r + 1}`);
1204
1520
  });
1205
- let a = Ye(i);
1521
+ let a = ut(i);
1206
1522
  a.length > 1 && a.forEach((e, r) => {
1207
1523
  e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
1208
1524
  }), a.forEach((e, r) => {
@@ -1212,25 +1528,33 @@ var Be = (e) => e.map((e) => ({
1212
1528
  let r = (e.textContent || "").trim();
1213
1529
  a.includes(r) || a.push(r), e.getAttribute(n) || e.setAttribute(n, `${t}-group${a.indexOf(r) + 1}`);
1214
1530
  });
1215
- }), Z?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
1531
+ });
1532
+ let o = st(i);
1533
+ i.querySelectorAll("tbody tr").forEach((e, r) => {
1534
+ let i = e.querySelectorAll("td");
1535
+ for (let e of o) {
1536
+ let a = i[e];
1537
+ a?.textContent?.trim() && !a.getAttribute(n) && a.setAttribute(n, `${t}-note${r + 1}`);
1538
+ }
1539
+ }), Q?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
1216
1540
  }
1217
- }, $e = (e) => Number(e.toPrecision(12)), et = (e, t) => {
1541
+ }, mt = (e) => Number(e.toPrecision(12)), ht = (e, t) => {
1218
1542
  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) => {
1543
+ return mt((i < 1.42 ? 1 : i < 3.17 ? 2 : i < 7.08 ? 5 : 10) * r);
1544
+ }, gt = (e, t, n) => {
1221
1545
  let r = [];
1222
- for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push($e(i * n));
1546
+ for (let i = Math.ceil(e / n - 1e-9); i * n <= t + n * 1e-9; i++) r.push(mt(i * n));
1223
1547
  return r;
1224
- }, nt = (e, t = e) => {
1548
+ }, _t = (e, t = e) => {
1225
1549
  do {
1226
1550
  let t = Math.round(e / 10 ** Math.floor(Math.log10(e) + 1e-9));
1227
- e = $e(e * (t === 2 ? 2.5 : 2));
1551
+ e = mt(e * (t === 2 ? 2.5 : 2));
1228
1552
  } while (Math.abs(e / t - Math.round(e / t)) > 1e-9);
1229
1553
  return e;
1230
- }, rt = (e) => {
1554
+ }, vt = (e) => {
1231
1555
  let t = (e ?? "").trim().split(/\s+/).map(Number.parseFloat);
1232
1556
  return t.length > 1 && t.every(Number.isFinite) ? t.sort((e, t) => e - t) : null;
1233
- }, it = (e, t, n) => {
1557
+ }, yt = (e, t, n) => {
1234
1558
  if (n && n.length > 2) return {
1235
1559
  min: n[0],
1236
1560
  max: n[n.length - 1],
@@ -1242,85 +1566,89 @@ var Be = (e) => e.map((e) => ({
1242
1566
  let e = (i - r || Math.abs(i) || 1) * .05;
1243
1567
  r -= e, i += e;
1244
1568
  }
1245
- let a = et(i - r, t);
1569
+ let a = ht(i - r, t);
1246
1570
  return {
1247
1571
  min: r,
1248
1572
  max: i,
1249
1573
  step: a,
1250
- ticks: tt(r, i, a)
1574
+ ticks: gt(r, i, a)
1251
1575
  };
1252
- }, at = (e, t) => {
1576
+ }, bt = (e, t) => {
1253
1577
  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);
1578
+ for (; n && r.length > 2 && !t(r);) n = _t(n, e.step), r = gt(e.min, e.max, n);
1255
1579
  return {
1256
1580
  ...e,
1257
1581
  step: n,
1258
1582
  ticks: r
1259
1583
  };
1260
- }, ot = [
1584
+ }, xt = [
1261
1585
  "axis-break",
1262
1586
  "trend",
1263
1587
  "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 {
1588
+ ], St = (e, t = !1) => {
1589
+ let n = e.hasAttribute("data-fragment"), r = Array.from(e.querySelectorAll("tbody tr")), i = Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), a = Array.from(e.querySelectorAll("[data-annotation]")).filter((e) => xt.includes(e.getAttribute("data-annotation") ?? "")), o = (e) => e.hasAttribute("data-fragment"), s = r.map((e) => Array.from(e.querySelectorAll(":scope > td")));
1590
+ if (!n && !r.some(o) && !i.some(o) && !s.flat().some(o) && !a.some(o) || t && !n) return null;
1591
+ let c = [], l = /* @__PURE__ */ new Map(), u = [], d = (e) => {
1592
+ let t = e === null ? void 0 : l.get(e);
1593
+ return t === void 0 && (t = c.length, c.push(e), u.push(0), e !== null && l.set(e, t)), t;
1594
+ }, 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) => {
1595
+ if (m(e)) return {
1272
1596
  step: null,
1273
1597
  slot: 0
1274
1598
  };
1275
- if (!t && !a(e)) return {
1599
+ if (t) return {
1600
+ step: h,
1601
+ slot: u[h]++
1602
+ };
1603
+ if (!n && !o(e)) return {
1276
1604
  step: null,
1277
- slot: d++
1605
+ slot: f++
1278
1606
  };
1279
- let n = u(e.getAttribute("data-fragment-index"));
1607
+ let r = d(e.getAttribute("data-fragment-index"));
1280
1608
  return {
1281
- step: n,
1282
- slot: l[n]++
1609
+ step: r,
1610
+ slot: u[r]++
1283
1611
  };
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]++
1612
+ }), _ = Math.max(-1, ...g.map((e) => e.step ?? -1));
1613
+ if (_ >= 0) for (let [e, t] of r.entries()) m(t) && (g[e] = {
1614
+ step: _,
1615
+ slot: u[_]++
1288
1616
  });
1289
- let g = r.map((e) => ({ step: a(e) ? u(e.getAttribute("data-fragment-index")) : null })), _ = o.map((e) => e.map(() => ({
1617
+ let v = i.map((e) => ({ step: o(e) ? d(e.getAttribute("data-fragment-index")) : null })), y = s.map((e) => e.map(() => ({
1290
1618
  step: null,
1291
1619
  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()) {
1620
+ }))), b = Math.max(0, ...s.map((e) => e.length));
1621
+ for (let e = 0; e < b; e++) for (let [t, n] of s.entries()) {
1294
1622
  let r = n[e];
1295
- if (!r || !a(r)) continue;
1296
- let i = u(r.getAttribute("data-fragment-index"));
1297
- _[t][e] = {
1623
+ if (!r || !o(r)) continue;
1624
+ let i = d(r.getAttribute("data-fragment-index"));
1625
+ y[t][e] = {
1298
1626
  step: i,
1299
- slot: l[i]++
1627
+ slot: u[i]++
1300
1628
  };
1301
1629
  }
1302
1630
  return {
1303
- rows: m,
1304
- series: g,
1305
- cells: _,
1306
- notes: i.map((e) => {
1631
+ rows: g,
1632
+ series: v,
1633
+ cells: y,
1634
+ notes: a.map((e) => {
1307
1635
  let t = (t, n) => {
1308
1636
  let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
1309
1637
  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;
1638
+ }, [n, r] = e.getAttribute("data-annotation") === "bracket" ? [t("data-from", 0), t("data-to", g.length - 1)] : [0, g.length - 1], i = null;
1639
+ 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);
1640
+ let a = v[t("data-series", 0)]?.step ?? null;
1641
+ a !== null && (i === null || a > i) && (i = a), o(e) && (i = d(e.getAttribute("data-fragment-index")));
1642
+ let s = i === null ? g.length : g.filter((e) => e.step === i).length;
1315
1643
  return {
1316
1644
  step: i,
1317
1645
  after: s
1318
1646
  };
1319
1647
  }),
1320
- count: s.length,
1321
- indexes: s
1648
+ count: c.length,
1649
+ indexes: c
1322
1650
  };
1323
- }, ct = (e) => {
1651
+ }, Ct = (e) => {
1324
1652
  let t = e.plan;
1325
1653
  if (!t) return;
1326
1654
  let n = (t) => t === null || e.step - t >= 1;
@@ -1331,68 +1659,68 @@ var Be = (e) => e.map((e) => ({
1331
1659
  let u = r.hasAttribute("data-flat") ? (l - e + 1) / (i - e + 1) : i > e ? Math.max(0, l - e) / (i - e) : 0;
1332
1660
  r.style.setProperty("--reveal", String(u));
1333
1661
  }
1334
- }, lt = (e) => {
1662
+ }, wt = (e) => {
1335
1663
  let t = e.plan;
1336
1664
  if (!t) return;
1337
1665
  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
1666
  let t = i(e);
1339
1667
  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));
1668
+ }, o = new Set(e.totals), s = !!e.type.axes, c = (e, t, n, r) => {
1669
+ 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
1670
  };
1343
1671
  for (let r of e.figure.querySelectorAll("[data-row], [data-series], [data-note]")) {
1344
1672
  if (r.closest("table, .tablechart-controls") || r.hasAttribute("data-from")) continue;
1345
1673
  let e = Number(r.dataset.note);
1346
1674
  if (e > 0) {
1347
1675
  let n = t.notes[e - 1];
1348
- n && s(r, n.step, "--after", n.after);
1676
+ n && c(r, n.step, "--after", n.after);
1349
1677
  continue;
1350
1678
  }
1351
- let c = r.dataset.row ? Number(r.dataset.row) - 1 : n;
1679
+ let s = r.dataset.row ? Number(r.dataset.row) - 1 : n;
1352
1680
  if (r.classList.contains("tablechart-connector")) {
1353
- let e = t.rows[c - 1], n = t.rows[c];
1681
+ let e = t.rows[s - 1], n = t.rows[s];
1354
1682
  if (e && n) {
1355
1683
  let t = (e.step ?? -1) > (n.step ?? -1);
1356
- s(r, t ? e.step : n.step, "--i", t ? e.slot + 1 : n.slot);
1684
+ c(r, t ? e.step : n.step, "--i", t ? e.slot + 1 : n.slot);
1357
1685
  }
1358
1686
  continue;
1359
1687
  }
1360
1688
  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);
1689
+ let e = i(s).filter((e) => e !== null);
1690
+ c(r, e.length ? Math.max(...e) : null, "--i", t.rows[s]?.slot ?? 0);
1363
1691
  continue;
1364
1692
  }
1365
1693
  if (r.hasAttribute("data-stack")) {
1366
- s(r, a(c), "--i", t.rows[c]?.slot ?? 0);
1694
+ c(r, a(s), "--i", t.rows[s]?.slot ?? 0);
1367
1695
  continue;
1368
1696
  }
1369
1697
  let l = r.dataset.series ? Number(r.dataset.series) - 1 : 0, u = r.dataset.series ? t.series[l] : void 0;
1370
1698
  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);
1699
+ let e = i(s)[l] ?? null, n = t.cells[s]?.[l];
1700
+ c(r, e === a(s) ? null : e, "--i", n && n.step !== null ? n.slot : s);
1373
1701
  continue;
1374
1702
  }
1375
1703
  if (r.dataset.place === "legend") {
1376
1704
  let e = Math.min(...t.cells.map((e) => e[l]?.step ?? Infinity));
1377
- s(r, u?.step ?? (Number.isFinite(e) ? e : null), "--i", 0);
1705
+ c(r, u?.step ?? (Number.isFinite(e) ? e : null), "--i", 0);
1378
1706
  continue;
1379
1707
  }
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);
1708
+ let d = t.cells[s]?.[l];
1709
+ 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
1710
  }
1383
- let l = e.figure.querySelector(`.${p}`);
1384
- if (l) {
1711
+ let u = e.figure.querySelector(`.${g}`);
1712
+ if (u) {
1385
1713
  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);
1714
+ n < 0 ? c(u, null, "--i", 0) : c(u, n, "--i", e.filter((e) => e === n).length);
1387
1715
  }
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) {
1716
+ let d = [...t.rows, ...t.cells.flat()].map((e) => e.slot + 1), f = t.series.some((e) => e.step !== null) ? t.rows.length : 1;
1717
+ s || e.plot.style.setProperty("--count", String(Math.max(f, ...d)));
1718
+ let p = e.figure.querySelectorAll(`.${r}`), m = p[p.length - 1];
1719
+ if (e.figure.dataset.chart === "waterfall" && m?.dataset.kind === "total" && p.length > 1) {
1392
1720
  let e = Number(m.dataset.row) - 1;
1393
1721
  (t.rows[e - 1]?.step ?? -1) > (t.rows[e]?.step ?? -1) && (m.dataset.grow = m.dataset.grow === "down" ? "up" : "down");
1394
1722
  }
1395
- let h = Array.from(e.figure.querySelectorAll(`.${c}`));
1723
+ let h = Array.from(e.figure.querySelectorAll(`.${l}`));
1396
1724
  if (h.length) {
1397
1725
  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
1726
  for (let e = 0; e < r; e++) {
@@ -1402,19 +1730,19 @@ var Be = (e) => e.map((e) => ({
1402
1730
  let o = /* @__PURE__ */ new Map();
1403
1731
  for (let e of a) {
1404
1732
  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);
1733
+ for (let i of e) o.set(i.dataset.row ?? "", A(r, n(i), t)), r += n(i);
1406
1734
  }
1407
1735
  for (let t of e.figure.querySelectorAll("[data-row]")) {
1408
1736
  let e = o.get(t.dataset.row ?? "");
1409
1737
  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
1738
  }
1411
1739
  }
1412
- ct(e);
1413
- }, ut = (e, t, n = !1) => {
1740
+ Ct(e);
1741
+ }, Tt = (e, t, n = !1) => {
1414
1742
  let r = e.plan;
1415
1743
  if (!r) return;
1416
1744
  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);
1745
+ e.step = i, e.figure.style.setProperty("--_step", String(i)), Ct(e);
1418
1746
  let [o, s] = e.controls?.querySelectorAll("button") ?? [];
1419
1747
  o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
1420
1748
  bubbles: !0,
@@ -1423,7 +1751,7 @@ var Be = (e) => e.map((e) => ({
1423
1751
  steps: r.count
1424
1752
  }
1425
1753
  }));
1426
- }, dt = (e, t, n) => {
1754
+ }, Et = (e, t, n) => {
1427
1755
  let r = document.createElement("div");
1428
1756
  r.className = "tablechart-controls";
1429
1757
  let i = (r) => {
@@ -1431,17 +1759,17 @@ var Be = (e) => e.map((e) => ({
1431
1759
  i.type = "button", i.className = `tablechart-${r}`, i.dataset.go = r;
1432
1760
  let a = document.createElement("span");
1433
1761
  a.className = "tablechart-control-icon", a.setAttribute("aria-hidden", "true");
1434
- let o = j("svg", {
1762
+ let o = P("svg", {
1435
1763
  viewBox: "0 0 16 16",
1436
1764
  focusable: "false"
1437
1765
  });
1438
- o.appendChild(j("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
1766
+ o.appendChild(P("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
1439
1767
  let s = document.createElement("span");
1440
1768
  s.className = "tablechart-control-label", s.textContent = e[r];
1441
1769
  let c = t[r];
1442
1770
  c && n && s.setAttribute(n, c);
1443
1771
  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" ? [
1772
+ return l.className = y, l.textContent = e.hint, t.hint && n && l.setAttribute(n, t.hint), i.append(...r === "next" ? [
1445
1773
  s,
1446
1774
  l,
1447
1775
  a
@@ -1452,14 +1780,14 @@ var Be = (e) => e.map((e) => ({
1452
1780
  ]), i;
1453
1781
  };
1454
1782
  return r.append(i("previous"), i("next")), r;
1455
- }, ft = (e, t, n, r = {
1783
+ }, Dt = (e, t, n, r = {
1456
1784
  x: 0,
1457
1785
  y: 0,
1458
1786
  scale: 1
1459
1787
  }, i = 2, a = 8, o = 12) => {
1460
1788
  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
1789
  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 = [
1790
+ }, Ot = "tablechart-tooltip", kt = [
1463
1791
  "--tablechart-surface",
1464
1792
  "--tablechart-tooltip-surface",
1465
1793
  "--tablechart-tooltip-color",
@@ -1467,51 +1795,51 @@ var Be = (e) => e.map((e) => ({
1467
1795
  "--tablechart-tooltip-radius",
1468
1796
  "--tablechart-tooltip-padding",
1469
1797
  "--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));
1798
+ ], $ = null, At, jt, Mt = null, Nt = null, Pt = 0, Ft = () => {
1799
+ clearTimeout(Pt), $ && Mt && ($.hidden = !0, Mt = null, Nt = null);
1800
+ }, It = !1, Lt = !0, Rt = NaN, zt = NaN, Bt = !1, Vt = () => {
1801
+ if (Bt) return;
1802
+ Bt = !0, document.addEventListener("pointermove", (e) => {
1803
+ e.pointerType === "mouse" && (Lt = e.screenX !== Rt || e.screenY !== zt, Rt = e.screenX, zt = e.screenY, Lt && (It = !1));
1476
1804
  }, {
1477
1805
  capture: !0,
1478
1806
  passive: !0
1479
1807
  });
1480
1808
  let e = () => {
1481
- bt = !0, yt();
1809
+ It = !0, Ft();
1482
1810
  };
1483
1811
  document.addEventListener("keydown", e, !0), window.addEventListener("scroll", e, {
1484
1812
  capture: !0,
1485
1813
  passive: !0
1486
1814
  });
1487
- }, Et = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, Dt = (e) => {
1815
+ }, Ht = (e, t) => t / Number.parseFloat(getComputedStyle(e).width) || 1, Ut = (e) => {
1488
1816
  let t = e.tooltipparent;
1489
1817
  return (typeof t == "string" ? document.querySelector(t) : t) ?? document.body;
1490
- }, Ot = () => {
1491
- clearTimeout(vt), vt = window.setTimeout(yt, 120);
1492
- }, kt = () => {
1818
+ }, Wt = () => {
1819
+ clearTimeout(Pt), Pt = window.setTimeout(Ft, 120);
1820
+ }, Gt = () => {
1493
1821
  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) => {
1822
+ return e.className = Ot, e.setAttribute("aria-hidden", "true"), e.hidden = !0, At = document.createElement("div"), jt = document.createElement("div"), jt.className = `${Ot}-arrow`, e.append(At, jt), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout(Pt)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && Wt()), document.addEventListener("pointerdown", (t) => {
1495
1823
  let n = t.target;
1496
- $ && !$.plot.contains(n) && !e.contains(n) && yt();
1497
- }), window.addEventListener("resize", yt), e;
1498
- }, At = (e, t) => {
1824
+ Mt && !Mt.plot.contains(n) && !e.contains(n) && Ft();
1825
+ }), window.addEventListener("resize", Ft), e;
1826
+ }, Kt = (e, t) => {
1499
1827
  let n = t ? t.style.getPropertyValue("--step") : "x";
1500
1828
  return n === "" || Number(n) < e.step;
1501
- }, jt = (e, t) => {
1829
+ }, qt = (e, t) => {
1502
1830
  let n = e.svg.querySelector(`[data-series="${t + 1}"]:not(.tablechart-hole)`);
1503
1831
  if (!n) return;
1504
1832
  let r = getComputedStyle(n);
1505
1833
  return r.fill && r.fill !== "none" ? r.fill : r.stroke;
1506
- }, Mt = (e, t, n) => {
1834
+ }, Jt = (e, t, n) => {
1507
1835
  let r = e.series.length > 1, i = [];
1508
1836
  for (let [n, a] of e.seriesValues.entries()) {
1509
- if (!At(e, a[t])) continue;
1837
+ if (!Kt(e, a[t])) continue;
1510
1838
  let o = r ? e.figure.querySelector(`.tablechart-name[data-series="${n + 1}"]`) : null;
1511
1839
  i.push({
1512
1840
  name: r ? o?.textContent ?? e.series[n].name : "",
1513
1841
  value: a[t].textContent ?? "",
1514
- colour: r ? jt(e, n) : void 0,
1842
+ colour: r ? qt(e, n) : void 0,
1515
1843
  sample: o ? {
1516
1844
  marker: o.dataset.marker ?? null,
1517
1845
  open: o.hasAttribute("data-open"),
@@ -1521,65 +1849,73 @@ var Be = (e) => e.map((e) => ({
1521
1849
  });
1522
1850
  }
1523
1851
  let a = e.totals[t];
1524
- return i.length > 1 && At(e, a) && i.push({
1852
+ return i.length > 1 && Kt(e, a) && i.push({
1525
1853
  name: n.totallabel,
1526
1854
  value: a.textContent ?? ""
1527
1855
  }), i;
1528
- }, Nt = (e, t) => {
1856
+ }, Yt = (e, t) => {
1529
1857
  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) {
1858
+ let n = e.pointOf?.(t);
1859
+ if (n) {
1860
+ let t = e.svg.getBoundingClientRect(), r = t.width / D, i = 4 * r * (D / e.plot.clientWidth);
1861
+ return new DOMRect(t.left + n[0] * r - i, t.top + n[1] * r - i, 2 * i, 2 * i);
1862
+ }
1863
+ let r = e.svg.querySelectorAll(`[data-row="${t + 1}"]:not(.tablechart-connector, .tablechart-leader)`), i = null;
1864
+ for (let e of r) {
1532
1865
  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);
1866
+ (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
1867
  }
1535
- if (r) return r;
1536
- let i = e.plot.getBoundingClientRect(), [a, o, s, c] = e.rowBox?.(t) ?? [
1868
+ if (i) return i;
1869
+ let a = e.plot.getBoundingClientRect(), [o, s, c, l] = e.rowBox?.(t) ?? [
1537
1870
  0,
1538
1871
  0,
1539
1872
  100,
1540
1873
  100
1541
1874
  ];
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());
1875
+ return new DOMRect(a.left + a.width * o / 100, a.top + a.height * s / 100, a.width * c / 100, a.height * l / 100);
1876
+ }, Xt = (e, t, n) => {
1877
+ if (clearTimeout(Pt), Mt === e && Nt === t) return;
1878
+ let r = (e.type.tooltip ?? Jt)(e, t, n);
1879
+ if (!r.length) return Ft();
1880
+ Mt && Mt !== e && Ft(), $ ?? ($ = Gt());
1548
1881
  let i = (e, t, n, r = !1, i) => {
1549
1882
  let a = document.createElement("div");
1550
- if (a.className = `${pt}-line`, n) {
1883
+ if (a.className = `${Ot}-line`, n) {
1551
1884
  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);
1885
+ e.className = `${Ot}-key`, e.style.background = n, i?.box ? e.dataset.sample = "box" : i && (e.dataset.sample = "line", i.marker && (e.dataset.marker = i.marker), i.line && (e.dataset.line = i.line), e.toggleAttribute("data-open", i.open)), a.append(e);
1553
1886
  }
1554
1887
  let o = document.createElement("span");
1555
- if (o.className = `${pt}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
1888
+ if (o.className = `${Ot}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
1556
1889
  e && o.append(":");
1557
1890
  let n = document.createElement("span");
1558
- n.className = `${pt}-value`, n.textContent = t, a.append(n);
1891
+ n.className = `${Ot}-value`, n.textContent = t, a.append(n);
1559
1892
  }
1560
1893
  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);
1894
+ }, a = (e.figure.querySelectorAll("tbody tr")[t]?.querySelector("th"))?.textContent?.trim() || e.categories[t]?.textContent || e.rows[t].label, o = r.length === 1 && !r[0].name, s = r.every((e) => e.name && !e.value), c = ct(e.figure, t)?.textContent?.trim(), l = c ? [Object.assign(document.createElement("div"), {
1895
+ className: `${Ot}-note`,
1896
+ textContent: c
1897
+ })] : [];
1898
+ At.replaceChildren(...s ? [] : [i(a, o ? r[0].value : "", void 0, !0)], ...o ? [] : r.map(({ name: e, value: t, colour: n, sample: r }) => i(e, t, n, !1, r)), ...l);
1899
+ let u = getComputedStyle(e.figure);
1900
+ for (let e of kt) {
1901
+ let t = u.getPropertyValue(e).trim();
1902
+ t ? $.style.setProperty(e, t) : $.style.removeProperty(e);
1567
1903
  }
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) => {
1904
+ $.style.setProperty("--_color", u.color), $.style.colorScheme = u.colorScheme, $.style.fontFamily = u.fontFamily;
1905
+ let d = Ut(n);
1906
+ $.parentElement !== d && d.append($), Mt = e, Nt = t, $.hidden = !1, $.style.left = "0px", $.style.top = "0px";
1907
+ let f = $.getBoundingClientRect(), p = {
1908
+ x: f.left,
1909
+ y: f.top,
1910
+ scale: Ht($, f.width)
1911
+ }, m = Ht(e.plot, e.plot.getBoundingClientRect().width);
1912
+ $.style.fontSize = `${Number.parseFloat(u.fontSize) * m / p.scale}px`, Dt($, jt, Yt(e, t), p);
1913
+ }, Zt = (e, t, n = !1) => {
1578
1914
  let { plot: r } = e;
1579
- r.setAttribute("data-hover", ""), Tt();
1915
+ r.setAttribute("data-hover", ""), Vt();
1580
1916
  let i = (t) => {
1581
1917
  if (e.rowAt) {
1582
- let n = r.getBoundingClientRect(), i = Et(r, n.width);
1918
+ let n = r.getBoundingClientRect(), i = Ht(r, n.width);
1583
1919
  return e.rowAt((t.clientX - n.left) / i, (t.clientY - n.top) / i);
1584
1920
  }
1585
1921
  let n = t.target.closest?.("[data-row]")?.getAttribute("data-row");
@@ -1589,13 +1925,13 @@ var Be = (e) => e.map((e) => ({
1589
1925
  else if (t.getAttribute("data-row") === String(e + 1)) return !0;
1590
1926
  return !1;
1591
1927
  }, s = null, c = (a) => {
1592
- if (a.type === "pointerdown") bt = !1;
1593
- else if (a.pointerType === "mouse" && (!xt || bt)) return;
1928
+ if (a.type === "pointerdown") It = !1;
1929
+ else if (a.pointerType === "mouse" && (!Lt || It)) return;
1594
1930
  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;
1931
+ if (n && !e.figure.hasAttribute("data-left-out")) return Mt === e ? Ft() : void 0;
1596
1932
  let c = i(a);
1597
- if (s = c, c === null || o(c)) return $ === e ? yt() : void 0;
1598
- Pt(e, c, t);
1933
+ if (s = c, c === null || o(c)) return Mt === e ? Ft() : void 0;
1934
+ Xt(e, c, t);
1599
1935
  }, l = (t) => {
1600
1936
  let n = t.target;
1601
1937
  return e.svg.contains(n) && n.hasAttribute("data-row") ? n : null;
@@ -1609,36 +1945,37 @@ var Be = (e) => e.map((e) => ({
1609
1945
  if (!r) return;
1610
1946
  a.delete(r);
1611
1947
  let i = Number(r.getAttribute("data-row")) - 1;
1612
- s === i && !o(i) && !bt && Pt(e, i, t);
1948
+ s === i && !o(i) && !It && Xt(e, i, t);
1613
1949
  };
1614
1950
  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());
1951
+ t.pointerType === "mouse" && (s = null, Mt === e && Wt());
1616
1952
  });
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) => {
1953
+ }, Qt = (e) => {
1954
+ Mt === e && Ft();
1955
+ }, $t = {
1956
+ area: nt,
1957
+ bar: Le,
1958
+ column: Re,
1959
+ donut: Ve,
1960
+ line: tt,
1961
+ waterfall: at
1962
+ }, en = (e, t) => {
1963
+ $t[e] = t, Object.assign(tn, t.annotations), nn.splice(0, Infinity, ...Object.keys(tn));
1964
+ }, tn = {
1965
+ "axis-break": ne,
1966
+ trend: Oe,
1967
+ bracket: ce,
1968
+ reference: Ee,
1969
+ note: we
1970
+ }, nn = Object.keys(tn), rn = (e) => {
1634
1971
  let t = "";
1635
1972
  for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
1636
1973
  return t.trim();
1637
- }, Ht = [
1974
+ }, an = [
1638
1975
  "straight",
1639
1976
  "step",
1640
1977
  "smooth"
1641
- ], Ut = (e, t, n, r, i) => {
1978
+ ], on = (e, t, n, r, i) => {
1642
1979
  let a = t === r, [o, s, c] = a ? [
1643
1980
  Math.min(e, n),
1644
1981
  Math.max(e, n),
@@ -1649,17 +1986,17 @@ var Be = (e) => e.map((e) => ({
1649
1986
  e
1650
1987
  ], 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
1988
  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) => {
1989
+ return d < s && u.push([d, s]), u.map(([e, t]) => a ? `M${N(e)},${N(c)}H${N(t)}` : `M${N(c)},${N(e)}V${N(t)}`).join("");
1990
+ }, sn = (e, t) => {
1654
1991
  let [n, r, i, a] = [
1655
1992
  "x1",
1656
1993
  "y1",
1657
1994
  "x2",
1658
1995
  "y2"
1659
- ].map((t) => Number(e.getAttribute(t))), o = j("path", { d: Ut(n, r, i, a, t) });
1996
+ ].map((t) => Number(e.getAttribute(t))), o = P("path", { d: on(n, r, i, a, t) });
1660
1997
  for (let { name: t, value: n } of Array.from(e.attributes)) /^[xy][12]$/.test(t) || o.setAttribute(t, n);
1661
1998
  e.replaceWith(o);
1662
- }, Gt = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
1999
+ }, cn = (e) => Array.from((e.getAttribute("d") ?? "").matchAll(/M(-?[\d.]+),(-?[\d.]+)([HV])(-?[\d.]+)/g), ([, e, t, n, r]) => n === "H" ? [
1663
2000
  +e,
1664
2001
  +t,
1665
2002
  +r,
@@ -1669,19 +2006,19 @@ var Be = (e) => e.map((e) => ({
1669
2006
  +t,
1670
2007
  +e,
1671
2008
  +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) => {
2009
+ ]), ln = (e, [t, n, r, i]) => e.map(([e, a, o, s]) => a === s ? n <= a && a <= n + i && Math.max(e, t) < Math.min(o, t + r) ? `M${N(Math.max(e, t))},${N(a)}H${N(Math.min(o, t + r))}` : "" : t <= e && e <= t + r && Math.max(a, n) < Math.min(s, n + i) ? `M${N(e)},${N(Math.max(a, n))}V${N(Math.min(s, n + i))}` : "").join(""), un = (e, t, n) => {
1673
2010
  let r = e.getAttribute(t);
1674
2011
  return r === null ? n : r !== "false";
1675
- }, Jt = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", Yt = (e, t) => {
2012
+ }, dn = (e, t) => !!t.animate && e.getAttribute("data-chart-animate") !== "false", fn = (e, t) => {
1676
2013
  let n = e.dataset.chartShape;
1677
- return n && Ht.includes(n) ? n : Ht.includes(t.shape) ? t.shape : "straight";
1678
- }, Xt = (e) => {
2014
+ return n && an.includes(n) ? n : an.includes(t.shape) ? t.shape : "straight";
2015
+ }, pn = (e) => {
1679
2016
  for (let t of e.querySelectorAll("br")) {
1680
- if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(Vt(t))) continue;
2017
+ if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(rn(t))) continue;
1681
2018
  let e = document.createElement("span");
1682
- e.className = g, e.textContent = ". ", t.before(e);
2019
+ e.className = y, e.textContent = ". ", t.before(e);
1683
2020
  }
1684
- }, Zt = (e, t, n) => {
2021
+ }, mn = (e, t, n) => {
1685
2022
  let r = e.querySelector("table");
1686
2023
  if (!r) return null;
1687
2024
  let i = r.querySelector("tfoot [data-chart-total]");
@@ -1692,243 +2029,306 @@ var Be = (e) => e.map((e) => ({
1692
2029
  s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
1693
2030
  let c = a.insertCell();
1694
2031
  return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
1695
- }, Qt = 0, $t = (e) => {
2032
+ }, hn = 0, gn = (e) => {
1696
2033
  let t = e.querySelector(":scope > figcaption");
1697
2034
  if (!t) return;
1698
- Xt(t);
2035
+ pn(t);
1699
2036
  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);
2037
+ t.id || (t.id = `tablechart-caption-${++hn}`), e.setAttribute("aria-labelledby", t.id);
1701
2038
  };
1702
2039
  e.tagName === "FIGURE" && !n(e) && r(e);
1703
2040
  let i = e.querySelector("table");
1704
2041
  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);
2042
+ }, _n = (r, i, a = null) => {
2043
+ let o = a ?? (r.getAttribute("data-chart") || "column"), s = $t[o];
2044
+ if (!s) return console.warn(`[${e}] Unknown chart type "${o}". Known types: ${Object.keys($t).join(", ")}.`), r.setAttribute("data-chart-empty", ""), null;
2045
+ let c = lt(r, i.langattribute);
1709
2046
  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));
2047
+ gn(r);
2048
+ let l = ft(r, c, i.langattribute);
2049
+ if (l.length > 1 && !s.series && !s.columns && (console.warn(`[${e}] A ${o} chart uses only the first of its ${l.length} value columns.`), l = l.slice(0, 1)), l.some((e) => e.chart)) {
2050
+ let t = s.lines ? l.every((e) => e.chart) ? "Every series has data-chart=\"line\", so the chart is a line chart: set data-chart=\"line\" on the figure." : null : `A ${o} chart cannot draw a series as a line.`;
2051
+ t && (console.warn(`[${e}] ${t}`), l = l.map((e) => ({
2052
+ ...e,
2053
+ chart: null
2054
+ })));
2055
+ }
2056
+ let u = l.some((e) => e.chart), d = l.length > 1;
2057
+ d && r.style.setProperty("--_series-count", String(l.length));
1715
2058
  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", {
2059
+ 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.`);
2060
+ let h = m && !!s.stackable && d && !u, _ = document.createElement("div");
2061
+ _.className = t, _.setAttribute("aria-hidden", "true");
2062
+ let v = P("svg", {
1720
2063
  role: "presentation",
1721
2064
  focusable: "false"
1722
2065
  });
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));
2066
+ _.appendChild(v);
2067
+ let y = r.querySelector(":scope > table"), b = (e) => y ? y.before(e) : r.append(e);
2068
+ b(_);
2069
+ 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");
2070
+ E.className = "tablechart-values", _.appendChild(E);
2071
+ let D = l.map((e, t) => c.map((e, r) => {
2072
+ let i = e.cells[t] ?? e.cells[0], a = I(n, E);
2073
+ 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;
2074
+ })), O = D[0], k = h && s.totals ? c.map((e, t) => {
2075
+ let r = I(n, E);
2076
+ r.classList.add(...e.classes), r.dataset.kind = "total", r.dataset.row = String(t + 1), r.dataset.value = String(Pe(e, l.length));
1732
2077
  let i = e.cells[0];
1733
2078
  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);
2079
+ }) : [], 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;
2080
+ N && (N.className = p, N.setAttribute("aria-hidden", "true"), N.inert = !0);
2081
+ let F = l.filter((e) => e.chart), L = d && !s.columns ? l.map((e, t) => {
2082
+ let n = I(f, N ?? _);
2083
+ N && (n.dataset.place = "legend");
2084
+ let a = e.chart ? void 0 : s.legend ?? s.swatch;
2085
+ if (a && (n.dataset.swatch = a), n.textContent = e.name, !a && fn(r, i) !== "step") {
2086
+ let r = e.chart ? X(F, F.indexOf(e)) : X(l, t);
2087
+ n.dataset.marker = r.shape, n.toggleAttribute("data-open", r.open);
1743
2088
  }
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) {
2089
+ 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;
2090
+ }) : [], R = s.centre ? I(g, _) : null;
2091
+ if (R) {
1747
2092
  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)));
2093
+ R.dataset.value = String(t), e && (R.dataset.decimals = String(re(e.number)));
1749
2094
  }
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;
2095
+ let z = R && !c.some((e) => e.isTotal) ? mn(r, R, i) : null, B = s.categories === "beside", V = document.createElement("div");
2096
+ V.className = "tablechart-categories", V.setAttribute("aria-hidden", "true"), V.inert = !0, B ? V.dataset.place = "beside" : s.centre && (V.dataset.place = "key"), V.style.setProperty("--_columns", String(c.length));
2097
+ let H = 0;
1753
2098
  for (let [e, t] of c.entries()) {
1754
2099
  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);
2100
+ 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
2101
  }
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);
2102
+ B ? _.appendChild(V) : b(V), N && b(N);
2103
+ let U = l.filter((e) => !e.group), ee = !s.axes && !s.centre && un(r, "data-chart-axis", i.axis), te = s.axes ? {
2104
+ titles: U.slice(0, 2).map((e, t) => {
2105
+ let n = I(`${w}-title`, _);
1761
2106
  return n.dataset.axis = t ? "y" : "x", n.textContent = e.name, e.key && i.langattribute && n.setAttribute(i.langattribute, e.key), n;
1762
2107
  }),
1763
- ticks: N(`${S}s`, g),
2108
+ ticks: I(`${T}s`, _),
1764
2109
  numbers: !0
1765
- } : B || !s.centre && qt(r, "data-chart-grid", i.grid) ? {
2110
+ } : ee || !s.centre && un(r, "data-chart-grid", i.grid) ? {
1766
2111
  titles: [],
1767
- ticks: N(`${S}s`, g),
1768
- numbers: B
2112
+ ticks: I(`${T}s`, _),
2113
+ numbers: ee
1769
2114
  } : null;
1770
2115
  s.text?.({
1771
2116
  figure: r,
1772
- plot: g,
2117
+ plot: _,
1773
2118
  rows: c,
1774
- series: d,
2119
+ series: l,
1775
2120
  config: i
1776
2121
  });
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({
2122
+ let ne = dn(r, i) ? St(r, !!s.axes) : null;
2123
+ s.axes && r.querySelector("tbody [data-fragment], thead [data-fragment]") && Q.log(`A ${o} chart has one step, with data-fragment on the figure; its rows and columns have no steps of their own.`, r), ne && r.setAttribute("data-steps", "");
2124
+ let G = r.getAttribute("data-chart-keys"), ie = ne && i.controls ? Et({
1780
2125
  previous: i.previouslabel,
1781
2126
  next: i.nextlabel,
1782
2127
  hint: i.stephint
1783
2128
  }, {
1784
- previous: U && `${U}-previous`,
1785
- next: U && `${U}-next`,
1786
- hint: U && `${U}-step`
2129
+ previous: G && `${G}-previous`,
2130
+ next: G && `${G}-next`,
2131
+ hint: G && `${G}-step`
1787
2132
  }, 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;
2133
+ ie && b(ie);
2134
+ let K = Array.from(r.querySelectorAll("[data-annotation]")).map((t) => {
2135
+ let n = t.getAttribute("data-annotation"), r = tn[n];
2136
+ if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(tn).join(", ")}.`), null;
2137
+ let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= l.length ? i - 1 : 0;
1800
2138
  return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which is not there; it reads line 1.`), {
1801
2139
  spec: t,
1802
2140
  type: r,
1803
- badge: r.create(t, g),
2141
+ badge: r.create(t, _),
1804
2142
  series: a,
1805
2143
  after: c.length
1806
2144
  };
1807
2145
  }).filter((e) => e !== null);
1808
- Jt(r, i) && r.setAttribute("data-animate", rn(r, o, i, !!H));
1809
- let K = {
2146
+ if (!B && !s.centre && !s.axes) for (let [e, t] of c.entries()) {
2147
+ if (!t.note) continue;
2148
+ let n = document.createElement("span");
2149
+ n.dataset.annotation = "note", n.dataset.row = String(e + 1), n.textContent = t.note, t.noteKey && n.setAttribute("data-i18n", t.noteKey), K.push({
2150
+ spec: n,
2151
+ type: we,
2152
+ badge: we.create(n, _),
2153
+ series: 0,
2154
+ after: c.length
2155
+ });
2156
+ }
2157
+ dn(r, i) && r.setAttribute("data-animate", bn(r, o, i, !!ne));
2158
+ let q = {
1810
2159
  figure: r,
1811
- plot: g,
1812
- svg: _,
2160
+ plot: _,
2161
+ svg: v,
1813
2162
  rows: c,
1814
- decimals: y,
2163
+ decimals: S,
1815
2164
  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,
2165
+ values: O,
2166
+ series: l,
2167
+ seriesValues: D,
2168
+ names: N ? [] : L,
2169
+ categories: Array.from(V.children),
2170
+ centre: R,
2171
+ axes: te,
1823
2172
  stacked: h,
1824
- totals: E,
1825
- totalCell: F,
2173
+ totals: k,
2174
+ totalCell: z,
1826
2175
  rowAt: null,
1827
2176
  rowBox: null,
1828
- annotations: re,
2177
+ pointOf: null,
2178
+ annotations: K,
1829
2179
  checks: [],
1830
- plan: H,
2180
+ plan: ne,
1831
2181
  step: 0,
1832
- controls: G
1833
- }, ie = () => pn(r, _);
1834
- _.addEventListener("transitionend", ie), _.addEventListener("transitioncancel", ie), G?.addEventListener("click", (e) => {
2182
+ controls: ie
2183
+ }, ae = () => Nn(r, v);
2184
+ v.addEventListener("transitionend", ae), v.addEventListener("transitioncancel", ae), ie?.addEventListener("click", (e) => {
1835
2185
  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 = {
2186
+ t && Tt(q, q.step + (t === "next" ? 1 : -1));
2187
+ }), Tt(q, 0, !0);
2188
+ let oe = r.getAttribute("data-chart-tooltip"), se = oe === "false" ? !1 : oe === "auto" ? "auto" : oe !== null || i.tooltip;
2189
+ return se && Zt(q, i, se === "auto"), kn(q, i), q;
2190
+ }, vn = {
1841
2191
  grow: "grow",
1842
2192
  sweep: "sweep"
1843
- }, nn = [
2193
+ }, yn = [
1844
2194
  "never",
1845
2195
  "auto",
1846
2196
  "print",
1847
2197
  "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)];
2198
+ ], bn = (e, t, n, r) => {
2199
+ let i = t === "line" || t === "area", a = vn[e.getAttribute("data-chart-animate") ?? ""] ?? vn[String(n.animate)];
1850
2200
  return i ? r ? "sweep" : a ?? "sweep" : t === "donut" || t === "waterfall" ? a ?? "grow" : "grow";
1851
- }, an = (e) => {
2201
+ }, xn = (e) => {
1852
2202
  let t = getComputedStyle(e).getPropertyValue("--tablechart-value-align").trim();
1853
2203
  return t === "start" || t === "center" || t === "end" ? t : null;
1854
- }, on = (e, t, n, r) => {
2204
+ }, Sn = (e, t, n, r) => {
1855
2205
  let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
1856
2206
  if (!a) return null;
1857
2207
  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 = "");
2208
+ return a[2] === "%" ? o / 100 * D : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
2209
+ }, Cn = (e, t) => Sn(e, t, "--tablechart-bar-max", "60px") ?? Infinity, wn = (e, t) => {
2210
+ let n = e.getBoundingClientRect(), r = D / n.width, i = getComputedStyle(e), a = Number.parseFloat(i.lineHeight) / Number.parseFloat(i.fontSize) || 1.2;
2211
+ return (e) => {
2212
+ if (e.dataset.place === "none" || e.hidden || e.hasAttribute("data-left-out")) return [];
2213
+ 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)}`);
2214
+ return i.width ? [P("rect", {
2215
+ class: h,
2216
+ "data-for": "text",
2217
+ x: (i.left - n.left) * r - 3 * t,
2218
+ y: (i.top - n.top) * r + (i.height * r - o) / 2 - t,
2219
+ width: i.width * r + 6 * t,
2220
+ height: o + 2 * t,
2221
+ style: s.join("; ")
2222
+ })] : [];
2223
+ };
2224
+ }, Tn = [
2225
+ "first",
2226
+ "last",
2227
+ "highest",
2228
+ "lowest",
2229
+ "outliers"
2230
+ ], En = (t, n) => {
2231
+ let r = (t.getAttribute("data-chart-values") ?? n.values).trim().toLowerCase().split(/\s+/).filter(Boolean);
2232
+ for (let t of r) [
2233
+ "auto",
2234
+ "all",
2235
+ "none",
2236
+ ...Tn
2237
+ ].includes(t) || console.warn(`[${e}] data-chart-values knows no "${t}". It takes auto, all, none, ${Tn.join(", ")}.`);
2238
+ let i = r.filter((e) => Tn.includes(e));
2239
+ return r.includes("all") ? {
2240
+ mode: "all",
2241
+ keys: []
2242
+ } : r.includes("none") ? {
2243
+ mode: "set",
2244
+ keys: []
2245
+ } : r.includes("auto") || !i.length ? {
2246
+ mode: "auto",
2247
+ keys: i.length ? i : Tn
2248
+ } : {
2249
+ mode: "set",
2250
+ keys: i
2251
+ };
2252
+ }, Dn = ({ figure: e, rows: t, series: n }, r) => {
2253
+ let i = e.getAttribute("data-chart-table"), a = i && yn.includes(i) ? i : r.table;
2254
+ a === "never" ? e.removeAttribute("data-table") : e.setAttribute("data-table", a);
2255
+ let o = e.getAttribute("data-chart-summary");
2256
+ e.setAttribute("data-summary", o && yn.includes(o) ? o : r.summary), e.toggleAttribute("data-long", t.length * n.filter((e) => !e.group).length > r.tablelimit);
2257
+ }, On = (t, n) => {
2258
+ let { plot: r, svg: i, rows: l, type: m, values: g, series: _, seriesValues: y, names: b, annotations: x } = t;
2259
+ Dn(t, n);
2260
+ let S = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), C = S > 0 ? S : m.aspect ?? n.aspect, O = m.categories === "beside", k = t.axes && !m.axes ? t.axes : null, A = O ? null : t.categories[0]?.parentElement, j = null;
2261
+ if (k) {
2262
+ r.style.margin = "", A && (A.style.marginLeft = "");
1863
2263
  let e = r.clientWidth;
1864
2264
  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],
2265
+ let i = m.segments?.(l) ?? [], a = t.stacked ? l.flatMap((e) => Object.values(Ne(e, _.length, m.running))) : i.some((e) => e.kind === "up" || e.kind === "down") ? i.flatMap((e) => [e.from, e.to]) : l.flatMap((e) => e.cells.slice(0, _.length).filter((e) => !e.missing).map((e) => e.value)), o = Math.min(0, -W(a.map((e) => -e))), s = Math.max(0, W(a)), c = Number.parseFloat(getComputedStyle(r).fontSize) || 16, { chartScaleY: u, chartScale: d } = t.figure.dataset, f = vt(u ?? d);
2266
+ if (f && f.length > 2) j = {
2267
+ min: f[0],
2268
+ max: f[f.length - 1],
1869
2269
  step: 0,
1870
- ticks: m
2270
+ ticks: f
1871
2271
  };
1872
2272
  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 = {
2273
+ let [t, n] = f ?? [o, s], r = ht(n - t, Math.max((O ? e / 9 : e * C / 3) / c, 2)), i = (e, t) => f ? e : Number(((t ? Math.ceil : Math.floor)(e / r - 1e-9 * (t ? 1 : -1)) * r).toPrecision(12)), a = i(t, !1), l = i(n, !0);
2274
+ j = {
1875
2275
  min: a,
1876
- max: c,
2276
+ max: l,
1877
2277
  step: r,
1878
- ticks: tt(a, c, r)
2278
+ ticks: gt(a, l, r)
1879
2279
  };
1880
2280
  }
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);
2281
+ k.ticks.textContent = "";
2282
+ let p = l.find((e) => !e.missing), h = W(j.ticks.map((e) => re(String(e))));
2283
+ for (let e of j.ticks) {
2284
+ let t = I(T, k.ticks);
2285
+ t.dataset.value = String(e), t.dataset.place = "none", p?.prefix && (t.dataset.prefix = p.prefix), p?.suffix && (t.dataset.suffix = p.suffix), An(t, h, n.locale);
1886
2286
  }
1887
- if (b.numbers) {
1888
- let e = Array.from(b.ticks.children);
2287
+ if (k.numbers) {
2288
+ let e = Array.from(k.ticks.children);
1889
2289
  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));
2290
+ pe(e), O ? r.style.marginBottom = `${(e[0] ? J(e[0]).height : 0) + 6}px` : (r.style.marginLeft = `${W([0, ...e.map((e) => J(e).width)]) + 10}px`, A && (A.style.marginLeft = r.style.marginLeft));
1891
2291
  }
1892
2292
  }
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))));
2293
+ let M = r.clientWidth;
2294
+ if (!M) return !1;
2295
+ let F = D / M, R = D * C;
2296
+ r.classList.add(v);
2297
+ let z = m.numbers === !1 ? g.slice(0, 1) : [...y.flat(), ...t.totals];
2298
+ for (let e of z) delete e.dataset.place, e.removeAttribute("data-left-out"), e.removeAttribute("data-cut");
2299
+ r.style.removeProperty("--_fit"), r.toggleAttribute("data-grouped", !!m.groups && !t.stacked && _.filter((e) => !e.chart && !e.group).length > 1), t.categories[0]?.parentElement?.style.removeProperty("--_beside");
2300
+ let B = m.axes ? t.axes : null, V = [];
2301
+ if (B) {
2302
+ let e = Number.parseFloat(getComputedStyle(r).fontSize) || 16, i = _.flatMap((e, t) => e.group ? [] : [t]).slice(0, 2), a = l.filter((e) => i.every((t) => e.cells[t] && !e.cells[t].missing)), { chartScaleX: o, chartScaleY: s, chartScale: c } = t.figure.dataset, u = [vt(o), vt(s ?? c)];
2303
+ V = i.map((t, n) => yt(a.length ? a.map((e) => e.cells[t].value) : [0, 1], Math.max(n ? R / F / (e * 4) : M / (e * 9), 4), u[n])), B.ticks.textContent = "", V.forEach((e, t) => {
2304
+ let r = a[0]?.cells[i[t]], o = W(e.ticks.map((e) => re(String(e))));
1905
2305
  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);
2306
+ let e = I(T, B.ticks);
2307
+ e.dataset.axis = t ? "y" : "x", e.dataset.value = String(i), r?.prefix && (e.dataset.prefix = r.prefix), r?.suffix && (e.dataset.suffix = r.suffix), An(e, o, n.locale);
1908
2308
  }
1909
2309
  });
1910
2310
  }
1911
- let L = F ? Array.from(F.ticks.children) : [];
1912
- de([
1913
- ...p.flat(),
2311
+ let ee = B ? Array.from(B.ticks.children) : [];
2312
+ pe([
2313
+ ...y.flat(),
1914
2314
  ...t.totals,
1915
- ...m,
2315
+ ...b,
1916
2316
  ...t.categories,
1917
- ...g.map((e) => e.badge),
1918
- ...F?.titles ?? [],
1919
- ...L
2317
+ ...x.map((e) => e.badge),
2318
+ ...B?.titles ?? [],
2319
+ ...ee
1920
2320
  ]);
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,
2321
+ let te = (g[0] ? J(g[0]).height : 0) * F;
2322
+ m.numbers === !1 && g[0] && (g[0].dataset.place = "none");
2323
+ let ne = x[0]?.badge ? J(x[0].badge).height * F : 0, G = Math.max(R, Sn(t.figure, F, "--tablechart-min-height", "200px") ?? 0, m.minHeight?.({
2324
+ labelHeight: te,
2325
+ nameHeight: Math.max(0, W(t.categories.map((e) => J(e).height))) * F,
2326
+ unit: F,
2327
+ rows: l.length,
2328
+ series: _.length,
1929
2329
  stacked: t.stacked
1930
- }) ?? 0), U = t.stacked ? c.map((e) => {
1931
- let t = ye(e, d.length);
2330
+ }) ?? 0), ie = t.stacked ? l.map((e) => {
2331
+ let t = Pe(e, _.length);
1932
2332
  return {
1933
2333
  ...e,
1934
2334
  value: t,
@@ -1937,185 +2337,246 @@ var Be = (e) => e.map((e) => ({
1937
2337
  value: t
1938
2338
  } : e)
1939
2339
  };
1940
- }) : c, G = (l.segments ?? ((e) => e.map((e) => ({
2340
+ }) : l, K = (m.segments ?? ((e) => e.map((e) => ({
1941
2341
  ...e,
1942
2342
  from: 0,
1943
2343
  to: e.value,
1944
2344
  kind: "bar"
1945
- }))))(t.stacked ? U.map((e) => ({
2345
+ }))))(t.stacked ? ie.map((e) => ({
1946
2346
  ...e,
1947
2347
  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),
2348
+ })) : l), q = {
2349
+ labelHeight: te,
2350
+ badgeHeight: ne,
2351
+ hasAnnotations: x.length > 0,
2352
+ unit: F,
2353
+ series: _.length,
2354
+ focused: _.some((e) => e.focus),
1955
2355
  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) => [
2356
+ }, ae = Math.max(((e) => t.stacked ? e(l.map((e) => Ne(e, _.length, m.running).top)) : e([...K.flatMap((e) => [
1957
2357
  e.from,
1958
2358
  e.to,
1959
2359
  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) ?? "");
2360
+ ]), ...l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value))]))(W), 0), oe = K.some((e) => e.kind === "up" || e.kind === "down") ? K.flatMap((e) => [e.from, e.to]) : t.stacked ? l.map((e) => Ne(e, _.length, m.running).bottom) : l.flatMap((e) => e.cells.slice(0, _.length).map((e) => e.value)), se = Math.min(-W(oe.map((e) => -e)), 0), ce = _.flatMap((e, t) => e.chart ? [t] : []), le = l.some((e) => e.note) ? ne + 4 * F : 0, ue = Math.max(m.headroom?.(q) ?? te, ce.length ? tt.headroom?.(q) ?? 0 : 0) + le, de = 2 * F + (m.footroom?.(q) ?? 0) + (se < 0 ? te + 4 * F : 0), fe = G - ue - de, me = j ? Math.max(j.max, ae) : ae * 1.02, he = j ? Math.min(j.min, se) : se * 1.02, ge = x.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, _e = (e) => {
2361
+ let t = Number.parseFloat(ge?.getAttribute(e) ?? "");
1962
2362
  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*$/);
2363
+ }, ye = _e("data-from") ?? _e("data-at"), be = _e("data-to"), Y = null;
2364
+ if (ge && (ye !== null || be !== null)) {
2365
+ let t = ye ?? 0, n = be ?? me, r = be === null ? t : ye === null ? n : (t + n) / 2, i = ge.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
1966
2366
  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 = {
2367
+ let o = Math.min(Math.max(a ? Number(a[1]) / 100 : be === null ? .22 : .3, .05), .8), s = K.filter((e) => (e.kind === "up" || e.kind === "down") && Math.max(e.from, e.to) > t && Math.min(e.from, e.to) < n);
2368
+ m.breakable ? se < 0 ? console.warn(`[${e}] A chart with values below zero cannot break its scale.`) : t < 0 || n <= t || n > me || t === 0 && n === me ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${ae}.`) : s.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : Y = {
1969
2369
  lo: t,
1970
2370
  hi: n,
1971
2371
  gap: r,
1972
2372
  share: o
1973
2373
  } : console.warn(`[${e}] This kind of chart cannot break its scale.`);
1974
2374
  }
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;
2375
+ let Ce = Y ? Y.gap : null, we = (Y && Sn(t.figure, F, "--tablechart-break-gap", "")) ?? 13, Te = G - de, Ee = me - he || 1, De = (e) => Te - (e - he) / Ee * fe;
2376
+ if (Y) {
2377
+ let { lo: e, hi: t, gap: n, share: r } = Y, i = fe * r, a = (fe - i - we) / (e + (me - t)), o = i / (t - e);
2378
+ De = (r) => r <= e ? Te - r * a : r <= n ? Te - e * a - (r - e) * o : r <= t ? Te - e * a - (r - e) * o - we : Te - e * a - i - we - (r - t) * a;
1979
2379
  }
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 = [
2380
+ let Oe, ke, Ae = [];
2381
+ if (B) {
2382
+ let e = 6 * F, [t, n] = B.titles, r = (e) => e ? J(e).width * F : 0, i = (e) => e ? J(e).height * F : 0, a = ee.filter((e) => e.dataset.axis === "x"), o = ee.filter((e) => e.dataset.axis === "y"), s = i(ee[0]), c = r(n) + W([0, ...o.map(r)]) + 2 * e, l = s / 2;
2383
+ ke = [
1984
2384
  c,
1985
2385
  l,
1986
- w - c - W([0, ...a.map(r)]) / 2,
1987
- H - l - i(t) - s - 2 * e
2386
+ D - c - W([0, ...a.map(r)]) / 2,
2387
+ G - l - i(t) - s - 2 * e
1988
2388
  ];
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 = _;
2389
+ let [u, d, f, p] = ke, [m, h] = V, g = (e) => u + (e - m.min) / (m.max - m.min || 1) * f, _ = (e) => d + p - (e - h.min) / (h.max - h.min || 1) * p;
2390
+ Oe = g, De = _;
1991
2391
  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);
2392
+ Ae = [bt(m, (t) => t.every((n, r) => !r || g(n) - g(t[r - 1]) > (v(n) + v(t[r - 1])) / 2 + e)).ticks, bt(h, (t) => t.every((n, r) => !r || _(t[r - 1]) - _(n) > s + e / 2)).ticks];
2393
+ for (let t of ee) {
2394
+ let n = Number(t.dataset.value), r = t.dataset.axis === "x" ? 0 : 1, i = Ae[r].includes(n);
2395
+ t.dataset.place = i ? r ? "before" : "below" : "none", i && L(t, r ? u - e : g(n), r ? _(n) : d + p + e, D, G);
1996
2396
  }
1997
- t && P(t, u + f / 2, H - i(t), w, H), n && P(n, 0, d + p / 2, w, H);
2397
+ t && L(t, u + f / 2, G - i(t), D, G), n && L(n, 0, d + p / 2, D, G);
1998
2398
  }
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) => [
2399
+ let je = b.length ? W(b.map((e) => J(e).width)) * F + 12 * F : 0, Me = t.categories[0]?.parentElement;
2400
+ Me && (Me.style.paddingRight = je ? `${je / D * 100}%` : "");
2401
+ let Fe = (D - je) / l.length, Ie = (e) => (e + .5) * Fe, Le = (e) => e >= 0 && e < l.length ? e : null;
2402
+ t.rowAt = m.centre ? null : m.categories === "beside" ? (e, t) => Le(Math.floor(t * F / (G / l.length))) : (e) => Le(Math.floor(e * F / Fe));
2403
+ let Re = Fe / D * 100, ze = 100 / l.length;
2404
+ if (t.rowBox = m.categories === "beside" ? (e) => [
2005
2405
  0,
2006
- e * Ae,
2406
+ e * ze,
2007
2407
  100,
2008
- Ae
2408
+ ze
2009
2409
  ] : (e) => [
2010
- e * ke,
2410
+ e * Re,
2011
2411
  0,
2012
- ke,
2412
+ Re,
2013
2413
  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,
2414
+ ], i.setAttribute("viewBox", `0 0 ${D} ${N(G)}`), i.textContent = "", ke && Oe) {
2415
+ let [e, r, a, o] = ke, [s, c] = Ae, l = Oe;
2416
+ un(t.figure, "data-chart-grid", n.grid) && i.appendChild(P("path", {
2417
+ class: E,
2418
+ d: [...s.map((e) => `M${N(l(e))},${N(r)}V${N(r + o)}`), ...c.map((t) => `M${N(e)},${N(De(t))}H${N(e + a)}`)].join("")
2419
+ })), i.appendChild(P("path", {
2420
+ class: w,
2021
2421
  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)}`)
2422
+ `M${N(e)},${N(r)}V${N(r + o)}H${N(e + a)}`,
2423
+ ...s.map((e) => `M${N(l(e))},${N(r + o)}v${N(4 * F)}`),
2424
+ ...c.map((t) => `M${N(e)},${N(De(t))}h${N(-4 * F)}`)
2025
2425
  ].join("")
2026
2426
  }));
2027
2427
  }
2028
2428
  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,
2429
+ let Be = {
2430
+ rows: l,
2431
+ segments: K,
2432
+ cx: Ie,
2433
+ y: De,
2434
+ x: Oe,
2435
+ frame: ke,
2436
+ length: (e, n) => Sn(t.figure, F, e, n),
2437
+ barWidth: Math.min(Fe * n.barfill, Cn(t.figure, F)),
2438
+ barMax: Cn(t.figure, F),
2439
+ height: G,
2440
+ unit: F,
2441
+ labelHeight: te,
2442
+ badgeHeight: ne,
2443
+ after: l.length,
2044
2444
  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,
2445
+ labels: t.figure.dataset.chartLabels === "inside" || t.figure.dataset.chartLabels !== "outside" && (n.labels === "inside" || ce.length > 0) ? "inside" : "outside",
2446
+ insideAlign: xn(t.figure),
2447
+ breakAt: Ce,
2448
+ squeeze: Y,
2449
+ breakGap: we,
2450
+ domain: j ? [j.min, j.max] : null,
2051
2451
  stacked: t.stacked,
2052
- shape: Yt(t.figure, n),
2452
+ shape: fn(t.figure, n),
2453
+ pick: En(t.figure, n),
2053
2454
  totals: t.totals,
2054
2455
  svg: i,
2055
2456
  plot: r,
2056
- values: u,
2057
- series: d,
2058
- seriesValues: p,
2059
- names: m,
2457
+ values: g,
2458
+ series: _,
2459
+ own: _.map((e, t) => t),
2460
+ seriesValues: y,
2461
+ names: b,
2060
2462
  categories: t.categories,
2061
2463
  centre: t.centre,
2062
2464
  config: n,
2063
2465
  checks: t.checks,
2064
- taken: []
2466
+ taken: [],
2467
+ lineHoles: []
2468
+ };
2469
+ r.style.setProperty("--count", String(Math.max(1, ...l.map((e) => e.slot + 1))));
2470
+ let Ve = (e) => {
2471
+ let t = (t) => ({
2472
+ ...t,
2473
+ ...t.cells[e] ?? t.cells[0]
2474
+ });
2475
+ return {
2476
+ rows: l.map(t),
2477
+ segments: K.map((e) => {
2478
+ let n = t(e);
2479
+ return e.kind === "bar" ? {
2480
+ ...n,
2481
+ to: n.value
2482
+ } : n;
2483
+ }),
2484
+ values: y[e]
2485
+ };
2065
2486
  };
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);
2487
+ if (ce.length) {
2488
+ let e = _.flatMap((e, t) => e.chart ? [] : [t]);
2489
+ m.draw({
2490
+ ...Be,
2491
+ own: e,
2492
+ ...e.length === 1 && Ve(e[0])
2493
+ }), tt.draw({
2494
+ ...Be,
2495
+ own: ce
2496
+ });
2497
+ } else m.draw(Be);
2498
+ Be.rowAt && (t.rowAt = Be.rowAt), t.pointOf = Be.pointOf ?? null;
2499
+ let He = Number(r.style.getPropertyValue("--count")) || l.length;
2500
+ for (let e of t.figure.querySelectorAll(`.${f}`)) e.style.setProperty("--i", String(Math.min(l[l.length - 1].slot, He - 1)));
2501
+ if (!t.stacked && !r.hasAttribute("data-grouped")) for (let e of y) xe(e, F, D), Se(e, F, D, G);
2502
+ if (k && j) {
2503
+ let e = 6 * F, r = O && Be.x ? Be.x : De, a = Array.from(k.ticks.children), o = (e) => J(a.find((t) => Number(t.dataset.value) === e) ?? a[0]), s = bt(j, (t) => t.every((n, i) => !i || (O ? r(n) - r(t[i - 1]) > (o(n).width + o(t[i - 1]).width) / 2 * F + e : r(t[i - 1]) - r(n) > o(n).height * F + e / 2))).ticks.filter((e) => !Y || e <= Y.lo || e >= Y.hi);
2068
2504
  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);
2505
+ let n = Number(t.dataset.value), i = k.numbers && s.includes(n);
2506
+ t.dataset.place = i ? O ? "below" : "before" : "none", i && L(t, O ? r(n) : -e, O ? G + e : r(n), D, G);
2071
2507
  }
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("")
2508
+ let c = D - je;
2509
+ un(t.figure, "data-chart-grid", n.grid) && i.prepend(P("path", {
2510
+ class: E,
2511
+ d: s.map((e) => O ? `M${N(r(e))},0V${N(G)}` : `M0,${N(r(e))}H${N(c)}`).join("")
2512
+ })), k.numbers && i.appendChild(P("path", {
2513
+ class: w,
2514
+ d: [O ? `M${N(r(j.min))},${N(G)}H${N(r(j.max))}` : `M0,${N(r(j.max))}V${N(r(j.min))}`, ...s.map((e) => O ? `M${N(r(e))},${N(G)}v${N(4 * F)}` : `M0,${N(r(e))}h${N(-4 * F)}`)].join("")
2079
2515
  }));
2080
2516
  }
2081
- for (let [e, n] of g.entries()) {
2517
+ for (let [e, n] of x.entries()) {
2082
2518
  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
- });
2519
+ let i = n.series;
2087
2520
  n.type.draw(n.spec, n.badge, {
2088
- ...je,
2521
+ ...Be,
2089
2522
  ...t.stacked && {
2090
- rows: U,
2523
+ rows: ie,
2091
2524
  ...t.totals.length && { values: t.totals }
2092
2525
  },
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
- },
2526
+ ...i > 0 && !t.stacked && Ve(i),
2104
2527
  after: t.plan ? n.after : Math.min(n.after, Number(r.style.getPropertyValue("--count")) || n.after),
2105
2528
  note: e + 1
2106
2529
  });
2107
2530
  }
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 }) => {
2531
+ wt(t);
2532
+ for (let e of t.figure.querySelectorAll(`.${p}`)) {
2533
+ let n = Array.from(e.children);
2534
+ if (t.plan) for (let e of n) e.style.getPropertyValue("--step") || e.style.setProperty("--i", "0");
2535
+ let r = n.map((e) => Number.parseFloat(e.style.getPropertyValue("--step")));
2536
+ 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");
2537
+ }
2538
+ let X = t.categories[0]?.parentElement;
2539
+ if (X && m.categories !== "beside" && !m.centre) {
2540
+ X.style.height = `${X.offsetHeight}px`, X.removeAttribute("data-thinned");
2541
+ for (let e of t.categories) e.removeAttribute("data-left-out"), e.removeAttribute("data-edge");
2542
+ let e = t.categories.filter((e) => e.offsetParent !== null);
2543
+ if (!ve(X, e, (e) => ({
2544
+ size: e.scrollWidth,
2545
+ room: e.clientWidth
2546
+ }), "--_name-fit") && e.length > 1) {
2547
+ let t = getComputedStyle(X), n = (X.clientWidth - Number.parseFloat(t.paddingLeft) - Number.parseFloat(t.paddingRight)) / l.length;
2548
+ X.style.setProperty("--_name-fit", "1"), X.setAttribute("data-thinned", "");
2549
+ 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);
2550
+ e.forEach((e, t) => {
2551
+ t % i && e.setAttribute("data-left-out", "");
2552
+ });
2553
+ 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());
2554
+ 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)) {
2555
+ s.setAttribute("data-edge", "end");
2556
+ let e = a.at(-2);
2557
+ e && e.getBoundingClientRect().right + 8 > s.getBoundingClientRect().left && s.setAttribute("data-left-out", "");
2558
+ }
2559
+ }
2560
+ let r = (m === tt || m === nt) && un(t.figure, "data-chart-ticks", n.ticks);
2561
+ if (X.toggleAttribute("data-ticks", r), X.style.removeProperty("--_tick-reach"), r) {
2562
+ let e = G - Number(i.querySelector(".tablechart-rule")?.getAttribute("y1") ?? G);
2563
+ e > 0 && e < 10 * F && X.style.setProperty("--_tick-reach", `${N(e / F)}px`);
2564
+ let n = X.getBoundingClientRect(), r = n.width / (X.offsetWidth || 1), a = getComputedStyle(X), o = Number.parseFloat(a.paddingLeft), s = (X.clientWidth - o - Number.parseFloat(a.paddingRight)) / l.length;
2565
+ t.categories.forEach((e, t) => {
2566
+ if (e.hasAttribute("data-left-out")) e.style.removeProperty("--_tick");
2567
+ else {
2568
+ let i = (e.getBoundingClientRect().left - n.left) / r - X.clientLeft;
2569
+ e.style.setProperty("--_tick", `${N(o + (t + .5) * s - i)}px`);
2570
+ }
2571
+ });
2572
+ }
2573
+ X.style.height = "";
2574
+ }
2575
+ let Ue = x.flatMap(({ badge: e }) => {
2115
2576
  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,
2577
+ let t = e.offsetWidth * F, n = e.offsetHeight * F, r = Number.parseFloat(e.style.left) / 100 * D, i = Number.parseFloat(e.style.top) / 100 * G, a = getComputedStyle(e).borderTopLeftRadius, o = a.endsWith("%") ? Number.parseFloat(a) / 100 : null, s = (Number.parseFloat(a) || 0) * F;
2578
+ return [P("rect", {
2579
+ class: h,
2119
2580
  "data-for": "badge",
2120
2581
  "data-note": e.dataset.note ?? "",
2121
2582
  x: r - t / 2,
@@ -2126,99 +2587,96 @@ var Be = (e) => e.map((e) => ({
2126
2587
  ry: o === null ? s : n * o,
2127
2588
  style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
2128
2589
  })];
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(),
2590
+ }), Z = i.querySelector(`.${E}`), We = Array.from(i.querySelectorAll(`.${o}`)), Ge = [...Z ? [Z] : [], ...i.querySelectorAll(`:scope > .${s}`)], Ke = wn(r, F), qe = t.figure.getAttribute("data-animate") === "grow", Je = y.flat().filter((e) => e.hasAttribute("data-cut")).flatMap(Ke), Ye = [...ce.flatMap((e) => y[e].flatMap(Ke)), ...qe ? Je : []];
2591
+ if (Ge.length || We.length) {
2592
+ let e = [
2593
+ ...y.flat(),
2133
2594
  ...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) => [
2595
+ ...m.categories === "beside" ? t.categories : []
2596
+ ].flatMap(Ke), n = (e) => [
2148
2597
  "x",
2149
2598
  "y",
2150
2599
  "width",
2151
2600
  "height"
2152
2601
  ].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") ?? ""
2602
+ for (let t of We) sn(t, [...e, ...Ue].map(n));
2603
+ if (Ge.length && t.plan) U(i, e, D, G, Ge);
2604
+ else for (let t of Ge) {
2605
+ let r = [...e, ...Ue], i = cn(t);
2606
+ t.setAttribute("d", i.map(([e, t, i, a]) => on(e, t, i, a, r.map(n))).join(""));
2607
+ for (let e of r) {
2608
+ let r = ln(i, n(e)), a = e.dataset.for === "badge" ? "badge" : "";
2609
+ r && t.after(P("path", {
2610
+ class: t.getAttribute("class") ?? "tablechart-grid",
2611
+ "data-gap": a,
2612
+ d: r,
2613
+ style: e.getAttribute("style") ?? ""
2165
2614
  }));
2166
2615
  }
2167
2616
  }
2168
2617
  }
2169
- z(i, Ne, w, H, Array.from(i.querySelectorAll(`.${a}, .${s}`))), B(i, Ne, w, H, void 0, [
2618
+ if (H(i, Ue, D, G, Array.from(i.querySelectorAll(`.${a}, .${c}`))), !qe && (Be.lineHoles.length || Je.length)) {
2619
+ let e = Array.from(i.querySelectorAll(`.${u}`)).map((e) => {
2620
+ let t = P("g", {});
2621
+ return e.before(t), t.append(e), t;
2622
+ });
2623
+ H(i, [...Be.lineHoles, ...Je], D, G, [...e, ...i.querySelectorAll(`.${d}`)]);
2624
+ }
2625
+ let Xe = [
2170
2626
  o,
2171
- a,
2172
2627
  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) => {
2628
+ a,
2629
+ c,
2630
+ ...t.plan ? [] : [E]
2631
+ ];
2632
+ U(i, [...Ue, ...Ye], D, G, void 0, Xe.map((e) => `.${e}`).join(", ")), t.figure.hasAttribute("data-animate") && !t.figure.hasAttribute("data-steps") && !t.figure.classList.contains("is-shown") && Pn(i);
2633
+ let Ze = (e) => e.dataset.missing !== void 0 || m.centre && l[Number(e.dataset.row) - 1]?.isTotal, Qe = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), $e = (e, t) => {
2176
2634
  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));
2635
+ return t.some((e) => Qe(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
2178
2636
  };
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) => {
2637
+ return t.figure.toggleAttribute("data-left-out", (m.columns ? [t.categories] : [...y, t.totals]).some((e) => e.some((t) => !Ze(t) && !Qe(t) && !$e(t, e)))), !0;
2638
+ }, kn = (e, t) => {
2181
2639
  let n = [
2182
2640
  ...e.seriesValues.flat(),
2183
2641
  ...e.totals,
2184
2642
  ...e.totalCell ? [e.totalCell] : []
2185
2643
  ];
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);
2644
+ for (let r of e.centre ? [...n, e.centre] : n) r.dataset.missing === void 0 ? An(r, r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale) : r.textContent = r.dataset.missing;
2645
+ }, An = (e, t, n) => {
2646
+ let { prefix: r = "", suffix: i = "" } = e.dataset, [a, o] = ie(Number.parseFloat(e.dataset.value || "0"), t, n);
2189
2647
  if (e.textContent = r + (r ? a : "") + o + i, a && !r) {
2190
2648
  let t = document.createElement("span");
2191
2649
  t.className = "tablechart-minus", t.textContent = a, e.prepend(t);
2192
2650
  }
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) => {
2651
+ }, jn = (e) => {
2652
+ Qt(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${p}`)?.remove(), e.controls?.remove();
2653
+ }, Mn = (e, t, n = !1) => {
2654
+ !t && !e.figure.hasAttribute("data-steps") && Pn(e.svg), n ? (e.figure.classList.add(S), e.figure.classList.toggle(b, t), e.figure.offsetWidth, t && Fn(e.svg), requestAnimationFrame(() => e.figure.classList.remove(S))) : (e.figure.classList.toggle(b, t), t && requestAnimationFrame(() => requestAnimationFrame(() => Nn(e.figure, e.svg))));
2655
+ }, Nn = (e, t) => {
2656
+ e.classList.contains("is-shown") && Array.from(t.querySelectorAll("[data-mask]")).every((e) => !e.getAnimations({ subtree: !0 }).length) && Fn(t);
2657
+ }, Pn = (e) => {
2200
2658
  for (let t of e.querySelectorAll("[mask^=\"url(#tablechart-cut-\"]")) t.dataset.mask = t.getAttribute("mask") ?? "", t.removeAttribute("mask");
2201
- }, hn = (e) => {
2659
+ }, Fn = (e) => {
2202
2660
  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) => {
2661
+ }, In = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), Ln = /^\s*(?:Table)?:\s+/, Rn = (e) => e?.tagName === "P" && Ln.test(e.textContent ?? ""), zn = (e) => {
2204
2662
  let t = document.createElement("figcaption");
2205
2663
  for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
2206
2664
  let n = e.firstChild;
2207
- n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(_n, ""), n.textContent || n.remove());
2665
+ n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(Ln, ""), n.textContent || n.remove());
2208
2666
  let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
2209
2667
  if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
2210
2668
  let e = document.createElement("span");
2211
2669
  e.append(...r.slice(i + 1)), t.append(e);
2212
2670
  }
2213
2671
  return e.remove(), t;
2214
- }, bn = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, xn = (e) => {
2215
- let t = kn(e);
2672
+ }, Bn = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Vn = (e) => {
2673
+ let t = Yn(e);
2216
2674
  return t?.tagName === "P" ? t : e;
2217
- }, Sn = (e) => {
2218
- let t = xn(e).firstChild;
2675
+ }, Hn = (e) => {
2676
+ let t = Vn(e).firstChild;
2219
2677
  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;
2678
+ let n = Bn.exec(t.textContent ?? "");
2679
+ if (!n || !nn.includes(n[1]) || !n[3] && t.nextSibling) return null;
2222
2680
  let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
2223
2681
  return {
2224
2682
  name: n[1],
@@ -2226,11 +2684,11 @@ var Be = (e) => e.map((e) => ({
2226
2684
  text: t,
2227
2685
  length: n[0].length
2228
2686
  };
2229
- }, Cn = (e) => {
2687
+ }, Un = (e) => {
2230
2688
  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));
2689
+ let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : Hn(e));
2232
2690
  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);
2691
+ let r = n[t], i = Vn(e);
2234
2692
  if (i !== e && i.replaceWith(...i.childNodes), r) {
2235
2693
  e.setAttribute("data-annotation", r.name);
2236
2694
  for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
@@ -2241,20 +2699,21 @@ var Be = (e) => e.map((e) => ({
2241
2699
  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
2700
  });
2243
2701
  }), 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;
2702
+ }, Wn = (e, t) => {
2703
+ for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || In(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
2704
+ }, Gn = (e) => e.map((e) => {
2705
+ let t = e.closest("p"), n = Rn(t) ? t : e;
2248
2706
  if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
2249
2707
  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;
2708
+ Wn(e, r), e.classList.length || e.removeAttribute("class");
2709
+ let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? Rn(a) ? a : Rn(o) ? o : null : n;
2252
2710
  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")) => {
2711
+ let c = o?.classList.contains("chart-annotations") ? o : Un(o);
2712
+ return n.replaceWith(r), s && r.append(zn(s)), i && r.append(i), c && r.append(c), Q?.log?.(`A ${i ? "table" : "caption"} with chart attributes was wrapped in a figure of its own`), r;
2713
+ }), Kn = (e, t, n, r = document.createElement("table"), i = "Note") => {
2256
2714
  for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
2257
- if (!r.tHead && (t.length || n)) {
2715
+ let a = e.some((e) => e.note);
2716
+ if (!r.tHead && (t.length || n || a)) {
2258
2717
  let e = r.createTHead().insertRow(), i = document.createElement("th");
2259
2718
  i.textContent = n, e.append(i);
2260
2719
  for (let n of t) {
@@ -2262,17 +2721,25 @@ var Be = (e) => e.map((e) => ({
2262
2721
  t.textContent = n, e.append(t);
2263
2722
  }
2264
2723
  }
2265
- let i = document.createElement("tbody");
2266
- r.append(i);
2724
+ let o = document.createElement("tbody");
2725
+ r.append(o);
2267
2726
  for (let t of e) {
2268
- let e = i.insertRow();
2727
+ let e = o.insertRow();
2269
2728
  t.kind === "total" && (e.dataset.kind = "total");
2270
2729
  let n = document.createElement("th");
2271
- n.textContent = String(t.label ?? ""), e.append(n);
2730
+ n.textContent = String(t.label ?? ""), t.short && (n.dataset.short = t.short), e.append(n);
2272
2731
  for (let n of t.values ?? [t.value ?? null]) e.insertCell().textContent = n === null ? "" : String(n);
2732
+ a && (e.insertCell().textContent = t.note ?? "");
2733
+ }
2734
+ let s = r.tHead?.rows[r.tHead.rows.length - 1];
2735
+ if (a && s && !s.querySelector("[data-note]")) {
2736
+ let t = Math.max(...e.map((e) => (e.values ?? [e.value]).length));
2737
+ for (; s.cells.length < t + 1;) s.append(document.createElement("th"));
2738
+ let n = document.createElement("th");
2739
+ n.dataset.note = "", n.textContent = i, s.append(n);
2273
2740
  }
2274
2741
  return r;
2275
- }, Dn = (e) => {
2742
+ }, qn = (e) => {
2276
2743
  if (!e || typeof e != "object") return;
2277
2744
  let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
2278
2745
  if (t.length && t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n))) return t.map(([e, t]) => Array.isArray(t) ? {
@@ -2282,30 +2749,30 @@ var Be = (e) => e.map((e) => ({
2282
2749
  label: e,
2283
2750
  value: t
2284
2751
  });
2285
- }, On = async (t) => {
2752
+ }, Jn = async (t) => {
2286
2753
  await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
2287
2754
  let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
2288
2755
  for (let e of t.querySelectorAll("table")) e !== r && e.remove();
2289
2756
  try {
2290
2757
  let e = await fetch(n);
2291
2758
  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);
2759
+ let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : qn(i.rows) : qn(i);
2293
2760
  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);
2761
+ let o = Kn(a, Array.isArray(i?.series) ? i.series.map(String) : [], typeof i?.label == "string" ? i.label : "", r ?? void 0, typeof i?.note == "string" ? i.note : void 0);
2295
2762
  if (!r) {
2296
2763
  let e = t.querySelector(":scope > figcaption");
2297
2764
  e ? e.after(o) : t.prepend(o);
2298
2765
  }
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}"`);
2766
+ 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
2767
  } catch (t) {
2301
2768
  let r = window.location.protocol === "file:";
2302
2769
  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
2770
  }
2304
2771
  }));
2305
- }, kn = (e) => {
2772
+ }, Yn = (e) => {
2306
2773
  let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
2307
2774
  return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
2308
- }, An = "strong, b, span.total", jn = (e) => {
2775
+ }, Xn = "strong, b, span.total", Zn = (e) => {
2309
2776
  for (let t of e) {
2310
2777
  for (let e of t.querySelectorAll("tbody tr")) {
2311
2778
  let t = e.cells[0];
@@ -2313,16 +2780,16 @@ var Be = (e) => e.map((e) => ({
2313
2780
  let n = document.createElement("th");
2314
2781
  for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
2315
2782
  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);
2783
+ for (let t = Yn(n); t?.matches(Xn); t = Yn(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
2317
2784
  }
2318
2785
  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);
2786
+ for (let t of e.slice(1)) for (let e = Yn(t); e?.matches(Xn); e = Yn(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
2320
2787
  }
2321
- }, Mn = "data-chart-made", Nn = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Pn = (e) => new Promise((t) => setTimeout(t, e)), Fn = (e, t) => {
2788
+ }, Qn = "data-chart-made", $n = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, er = (e) => new Promise((t) => setTimeout(t, e)), tr = (e, t) => {
2322
2789
  let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
2323
2790
  return Math.min(Math.max(r, 0), 1);
2324
- }, In = async (e, t) => {
2325
- if (Nn()) return;
2791
+ }, nr = async (e, t) => {
2792
+ if ($n()) return;
2326
2793
  await new Promise(requestAnimationFrame);
2327
2794
  let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
2328
2795
  for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
@@ -2333,11 +2800,11 @@ var Be = (e) => e.map((e) => ({
2333
2800
  let a = Number(n.delay ?? 0) + i * t;
2334
2801
  r = Math.max(r, a - Number(e.currentTime ?? 0));
2335
2802
  }
2336
- r > 0 && await Pn(r);
2337
- }, Ln = (e) => {
2803
+ r > 0 && await er(r);
2804
+ }, rr = (e) => {
2338
2805
  for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
2339
2806
  return null;
2340
- }, Rn = (e) => new Promise((t) => {
2807
+ }, ir = (e) => new Promise((t) => {
2341
2808
  let n = ["animationstart", "transitionrun"], r = () => {
2342
2809
  for (let e of n) document.removeEventListener(e, i, !0);
2343
2810
  a.disconnect(), t();
@@ -2351,41 +2818,41 @@ var Be = (e) => e.map((e) => ({
2351
2818
  attributes: !0,
2352
2819
  attributeFilter: ["class", "style"]
2353
2820
  });
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();
2821
+ }), ar = /* @__PURE__ */ new Set(), or = null, sr = (e) => {
2822
+ ar.add(e), !or && (or = new MutationObserver(() => {
2823
+ for (let e of ar) e.relabel();
2357
2824
  requestAnimationFrame(() => requestAnimationFrame(() => {
2358
- for (let e of zn) e.refresh();
2825
+ for (let e of ar) e.refresh();
2359
2826
  }));
2360
- }), Bn.observe(document.documentElement, {
2827
+ }), or.observe(document.documentElement, {
2361
2828
  attributes: !0,
2362
2829
  attributeFilter: ["lang"]
2363
2830
  }));
2364
- }, Hn = (e) => {
2365
- zn.delete(e), !zn.size && Bn && (Bn.disconnect(), Bn = null);
2366
- }, Un = ["column", "bar"], Wn = (e) => {
2831
+ }, cr = (e) => {
2832
+ ar.delete(e), !ar.size && or && (or.disconnect(), or = null);
2833
+ }, lr = ["column", "bar"], ur = (e) => {
2367
2834
  let t = e.getAttribute("data-chart") || "column";
2368
- if (!Un.includes(t)) return null;
2835
+ if (!lr.includes(t)) return null;
2369
2836
  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);
2837
+ return lr.includes(n) ? n : t;
2838
+ }, dr = (e, t) => {
2839
+ let n = e, r = ur(n.figure), i = null, a = !1, o = !1, s = async () => {
2840
+ if (!dn(n.figure, t)) return Mn(n, !0);
2374
2841
  let e = n.figure.classList.contains("is-shown");
2375
2842
  if (a && i !== null && !e && !o) {
2376
2843
  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);
2844
+ let e = $n() ? null : rr(n.figure);
2845
+ e && await ir(e), await nr(n.figure, tr(n.figure, t)), o = !1, (a || !t.replay) && Mn(n, !0);
2846
+ } else !a && t.replay && e && Mn(n, !1);
2380
2847
  }, c = () => {
2381
- let e = Wn(n.figure);
2848
+ let e = ur(n.figure);
2382
2849
  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);
2850
+ let a = Q.timed("Building", n.figure, () => _n(n.figure, t, e));
2851
+ a && (jn(n), Tt(a, n.step, !0), n = a, r = e, i = null);
2385
2852
  }, l = () => {
2386
2853
  c();
2387
2854
  let e = n.plot.clientWidth;
2388
- e && e !== i && Z.timed("Layout", n.figure, () => cn(n, t)) && (i = e, s());
2855
+ e && e !== i && Q.timed("Layout", n.figure, () => On(n, t)) && (i = e, s());
2389
2856
  }, u = !1, d = new ResizeObserver(() => {
2390
2857
  u || (u = !0, requestAnimationFrame(() => {
2391
2858
  u = !1, l();
@@ -2393,20 +2860,20 @@ var Be = (e) => e.map((e) => ({
2393
2860
  }), f = new IntersectionObserver((e) => {
2394
2861
  for (let t of e) a = t.isIntersecting, s();
2395
2862
  }, { 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 = () => {
2863
+ n.figure.classList.add(x), Mn(n, !0), Fn(n.svg), n.figure.offsetWidth;
2864
+ }, m = () => n.figure.classList.remove(x), h = () => {
2398
2865
  i = null, l();
2399
2866
  }, g = {
2400
- relabel: () => ln(n, t),
2867
+ relabel: () => kn(n, t),
2401
2868
  refresh: h
2402
2869
  };
2403
- c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), window.addEventListener("afterprint", m), Vn(g);
2870
+ c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), window.addEventListener("afterprint", m), sr(g);
2404
2871
  let _ = {
2405
2872
  figure: n.figure,
2406
2873
  refresh: h,
2407
- next: () => ut(n, n.step + 1),
2408
- previous: () => ut(n, n.step - 1),
2409
- stepTo: (e) => ut(n, e),
2874
+ next: () => Tt(n, n.step + 1),
2875
+ previous: () => Tt(n, n.step - 1),
2876
+ stepTo: (e) => Tt(n, e),
2410
2877
  get step() {
2411
2878
  return n.step;
2412
2879
  },
@@ -2414,36 +2881,38 @@ var Be = (e) => e.map((e) => ({
2414
2881
  return n.plan?.count ?? 0;
2415
2882
  },
2416
2883
  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;
2884
+ d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), window.removeEventListener("afterprint", m), cr(g), Qt(n), n.figure.tablechart === _ && delete n.figure.tablechart;
2418
2885
  }
2419
2886
  };
2420
2887
  return n.figure.tablechart = _, _;
2421
- }, Kn = !1, qn = (t) => {
2888
+ }, fr = !1, pr = (t) => {
2422
2889
  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 = {}) => {
2890
+ !fr && n && (fr = !0, console.warn(`[${e}] A chart is a <${n.tagName.toLowerCase()}>. Use a <figure> with a <figcaption>, so the chart has a title, also for screen readers.`, n));
2891
+ }, mr = async (e, t) => {
2892
+ let n = Gn(e.filter((e) => !e.hasAttribute(Qn) && e.tagName !== "TH"));
2893
+ pr(n), await Jn(n), Zn(n), pt(n, t.langattribute);
2894
+ for (let e of n) e.dispatchEvent(new CustomEvent("tablechart:table", { bubbles: !0 }));
2895
+ return n;
2896
+ }, hr = (e, t) => {
2897
+ let n = Q.timed("Building", e, () => _n(e, t));
2898
+ return n ? (e.setAttribute(Qn, ""), dr(n, t)) : null;
2899
+ }, gr = async (e, t = {}) => {
2431
2900
  if (e.tablechart) return e.tablechart;
2432
2901
  let n = {
2433
- ...T,
2902
+ ...O,
2434
2903
  ...t
2435
2904
  };
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) => {
2905
+ n.debug && (Q.enabled = !0);
2906
+ let [r] = await mr([e], n);
2907
+ return r ? hr(r, n) : null;
2908
+ }, _r = async (e = {}, t = document) => {
2440
2909
  let n = {
2441
- ...T,
2910
+ ...O,
2442
2911
  ...e
2443
2912
  };
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).`), {
2913
+ n.debug && (Q.enabled = !0);
2914
+ let r = (await mr(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => hr(e, n)).filter((e) => e !== null);
2915
+ return Q.log(`Made ${r.length} chart(s).`), {
2447
2916
  charts: r,
2448
2917
  refresh: () => {
2449
2918
  for (let e of r) e.refresh();
@@ -2453,4 +2922,4 @@ var Be = (e) => e.map((e) => ({
2453
2922
  }
2454
2923
  };
2455
2924
  };
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 };
2925
+ export { N as A, x as B, de as C, ie as D, W as E, e as F, O as G, C as H, f as I, v as L, S as M, E as N, I as O, p as P, t as R, J as S, re as T, b as U, s as V, D as W, lt as _, Gn as a, Ue as b, en as c, kn as d, Mn as f, ft as g, pt as h, mr as i, P as j, L as k, _n as l, Tt as m, tr as n, Jn as o, jn as p, _r as r, Zn as s, gr as t, On as u, Ze as v, le as w, Y as x, Qe as y, m as z };