@martinomagnifico/tablechart 1.0.3 → 1.0.5

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
  //#region src/js/config.ts
2
- var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "tablechart-value", i = "tablechart-bar", a = "tablechart-piece", o = "tablechart-rule", s = "tablechart-connector", c = "tablechart-line", l = "tablechart-head", u = "tablechart-badge", d = "tablechart-caption", f = "tablechart-slice", p = "tablechart-divide", m = "tablechart-series", h = "tablechart-area", g = "tablechart-area-fill", _ = "tablechart-name", v = "tablechart-legend", y = "tablechart-point", b = "tablechart-hole", x = "tablechart-centre", S = "tablechart-leader", C = "tablechart-break", w = "is-placed", T = "tablechart-pointer", E = "tablechart-sr", D = "tablechart-minus", O = "is-shown", k = "tablechart-queued", A = "tablechart-controls", j = 1e3, M = {
2
+ var e = "tablechart", t = "tablechart-plot", n = "tablechart-value", r = "tablechart-bar", i = "tablechart-rule", a = "tablechart-line", o = "tablechart-head", s = "tablechart-slice", c = "tablechart-legend", l = "tablechart-hole", u = "tablechart-centre", d = "tablechart-break", f = "is-placed", p = "tablechart-sr", m = "is-shown", h = "is-printing", g = "tablechart-queued", _ = 1e3, v = {
3
3
  selector: "[data-chart]",
4
4
  aspect: .38,
5
5
  barfill: .58,
@@ -9,7 +9,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
9
9
  labels: "outside",
10
10
  shape: "straight",
11
11
  legend: !1,
12
- hover: !0,
12
+ tooltip: "auto",
13
+ table: "never",
13
14
  totallabel: "Total",
14
15
  controls: !0,
15
16
  previouslabel: "Previous",
@@ -18,25 +19,29 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
18
19
  threshold: .5,
19
20
  replay: !1,
20
21
  langattribute: "data-i18n"
21
- }, N = (e, t) => `${e}:${t}`, P = "http://www.w3.org/2000/svg", F = (e) => Math.round(e * 100) / 100, I = (e, t = {}) => {
22
- let n = document.createElementNS(P, e);
22
+ }, y = "cubic-bezier(0.3, 0.3, 0.6, 1)", b = (e, t, n = 1) => ({
23
+ start: e,
24
+ span: t,
25
+ easing: e + t >= n - 1e-4 ? y : "linear"
26
+ }), x = (e, t) => `${e}:${t}`, S = "http://www.w3.org/2000/svg", C = (e) => Math.round(e * 100) / 100, w = (e, t = {}) => {
27
+ let n = document.createElementNS(S, e);
23
28
  for (let e in t) {
24
29
  let r = t[e];
25
- n.setAttribute(e, String(typeof r == "number" ? F(r) : r));
30
+ n.setAttribute(e, String(typeof r == "number" ? C(r) : r));
26
31
  }
27
32
  return n;
28
- }, L = (e, t) => [e, ...t.classes].join(" "), R = (e, t) => {
33
+ }, T = (e, t) => [e, ...t.classes].join(" "), E = (e, t) => {
29
34
  let n = document.createElement("span");
30
35
  return n.className = e, n.inert = !0, t.appendChild(n), n;
31
- }, z = (e, t, n, r, i) => {
36
+ }, D = (e, t, n, r, i) => {
32
37
  e.style.left = `${t / r * 100}%`, e.style.top = `${n / i * 100}%`;
33
- }, B = 0, ee = (e, t, n, r) => {
38
+ }, O = 0, k = (e, t, n, r) => {
34
39
  if (!t.length) return;
35
- let i = `tablechart-cut-${++B}`, a = I("mask", {
40
+ let i = `tablechart-cut-${++O}`, a = w("mask", {
36
41
  id: i,
37
42
  maskUnits: "userSpaceOnUse"
38
43
  });
39
- a.appendChild(I("rect", {
44
+ a.appendChild(w("rect", {
40
45
  x: -n,
41
46
  y: -r,
42
47
  width: n * 3,
@@ -45,21 +50,22 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
45
50
  }));
46
51
  for (let e of t) e.setAttribute("fill", "black"), a.appendChild(e);
47
52
  let o = e.querySelector(":scope > defs");
48
- o || (o = I("defs"), e.prepend(o)), o.appendChild(a);
49
- let s = I("g", { mask: `url(#${i})` });
53
+ o || (o = w("defs"), e.prepend(o)), o.appendChild(a);
54
+ let s = w("g", { mask: `url(#${i})` });
50
55
  for (let t of Array.from(e.childNodes)) t !== o && s.appendChild(t);
51
56
  e.appendChild(s);
52
- }, V = 0, H = (e) => Array.from(e.querySelectorAll(`.${i}`)).map((e) => {
53
- 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")));
57
+ }, A = 0, j = (e) => Array.from(e.querySelectorAll(`.${r}`)).map((e) => {
58
+ 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("; ");
54
59
  return {
55
60
  row: Number(e.dataset.row),
56
61
  x: r,
57
62
  y: i,
58
63
  width: a - r,
59
64
  height: o - i,
60
- sideways: e.dataset.grow === "right"
65
+ sideways: e.dataset.grow === "right",
66
+ part: s
61
67
  };
62
- }), te = {
68
+ }), M = {
63
69
  create: () => null,
64
70
  draw(e, t, n) {
65
71
  let { rows: r, y: i, svg: a, breakAt: o } = n;
@@ -86,171 +92,171 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
86
92
  [c + 2 * l, t + o],
87
93
  [c + i, t - o]
88
94
  ];
89
- }, 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 = I("mask", {
95
+ }, 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-${++A}`, f = w("mask", {
90
96
  id: u,
91
97
  maskUnits: "userSpaceOnUse"
92
98
  });
93
- d.appendChild(I("rect", {
94
- x: -j,
99
+ f.appendChild(w("rect", {
100
+ x: -1e3,
95
101
  y: -n.height,
96
- width: j * 3,
102
+ width: _ * 3,
97
103
  height: n.height * 3,
98
104
  fill: "white"
99
105
  }));
100
- let f = [], p = i(o);
101
- for (let e of H(a)) {
102
- let t = e.sideways ? n.breakX : p;
103
- if (t === void 0 || !(e.sideways ? e.x < t && e.x + e.width > t : e.y < p && e.y + e.height > p)) continue;
104
- let [i, o] = e.sideways ? [c(e, t), c(e, t + n.breakGap)] : [c(e, p - n.breakGap), c(e, p)];
105
- d.appendChild(I("path", {
106
+ let p = [], m = i(o);
107
+ for (let e of j(a)) {
108
+ let t = e.sideways ? n.breakX : m;
109
+ if (t === void 0 || !(e.sideways ? e.x < t && e.x + e.width > t : e.y < m && e.y + e.height > m)) continue;
110
+ let [i, o] = e.sideways ? [c(e, t), c(e, t + n.breakGap)] : [c(e, m - n.breakGap), c(e, m)];
111
+ f.appendChild(w("path", {
106
112
  d: l([...i, ...o.slice().reverse()], !0),
107
113
  fill: "black"
108
- })), f.push(i, o);
109
- let s = N("--after", r[e.row - 1]?.slot ?? 0);
110
- for (let e of [i, o]) a.appendChild(I("path", {
111
- class: C,
114
+ })), p.push(i, o);
115
+ let s = [x("--after", r[e.row - 1]?.slot ?? 0), e.part].filter(Boolean).join("; ");
116
+ for (let e of [i, o]) a.appendChild(w("path", {
117
+ class: d,
112
118
  "data-part": "edge",
113
119
  "data-note": n.note,
114
120
  d: l(e),
115
121
  style: s
116
122
  }));
117
123
  }
118
- if (!f.length) return;
119
- let m = Array.from(a.querySelectorAll(`.${C}`)), h = I("g", { mask: `url(#${u})` });
120
- for (let e of Array.from(a.childNodes)) m.includes(e) || h.appendChild(e);
121
- let g = I("defs");
122
- g.appendChild(d), a.prepend(g, h);
124
+ if (!p.length) return;
125
+ let h = Array.from(a.querySelectorAll(`.${d}`)), g = w("g", { mask: `url(#${u})` });
126
+ for (let e of Array.from(a.childNodes)) h.includes(e) || g.appendChild(e);
127
+ let v = w("defs");
128
+ v.appendChild(f), a.prepend(v, g);
123
129
  }
124
- }, U = (e) => {
130
+ }, N = (e) => {
125
131
  let t = -Infinity;
126
132
  for (let n of e) t = Math.max(t, n);
127
133
  return t;
128
- }, ne = (e) => (e.split(/[.,]/)[1] || "").length, W = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
134
+ }, P = (e) => (e.split(/[.,]/)[1] || "").length, F = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
129
135
  minimumFractionDigits: e,
130
136
  maximumFractionDigits: e
131
- }), G = (e, t, n) => {
132
- let r = W(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
137
+ }), I = (e, t, n) => {
138
+ let r = F(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
133
139
  return [i, r.slice(+!!i).map((e) => e.value).join("")];
134
- }, K = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), q = (e, t) => {
140
+ }, L = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), R = (e, t) => {
135
141
  let n = document.createElement("span");
136
- if (n.className = u, n.inert = !0, e.childElementCount > 0) for (let t of Array.from(e.children)) n.appendChild(t.cloneNode(!0));
142
+ if (n.className = "tablechart-badge", n.inert = !0, e.childElementCount > 0) for (let t of Array.from(e.children)) n.appendChild(t.cloneNode(!0));
137
143
  else {
138
144
  n.textContent = (e.textContent || "").trim();
139
145
  let t = e.getAttribute("data-i18n");
140
146
  t && n.setAttribute("data-i18n", t);
141
147
  }
142
148
  return t.appendChild(n), n;
143
- }, re = (t, n, r, i) => {
144
- let a = K(t?.textContent || ""), o = Number.isNaN(a) ? !0 : Math.abs(n - a) <= .5, s = {
149
+ }, z = (t, n, r, i) => {
150
+ let a = L(t?.textContent || ""), o = Number.isNaN(a) ? !0 : Math.abs(n - a) <= .5, s = {
145
151
  label: r,
146
152
  computed: n,
147
153
  stated: a,
148
154
  agrees: o
149
155
  };
150
- i.checks.push(s), o || console.warn(`[${e}] An annotation reads ${a}%, but ${r} is ${n.toFixed(1)}%. The chart shows what you wrote; this is only a check.`);
151
- }, ie = (e, t) => (t - e) / Math.abs(e) * 100, ae = (e, t) => {
156
+ i.checks.push(s), o || console.warn(`[${e}] An annotation reads ${a}%, but ${r} is ${n.toFixed(1)}%. The chart shows your number.`);
157
+ }, B = (e, t) => (t - e) / Math.abs(e) * 100, V = (e, t) => {
152
158
  let n = (t, n) => {
153
159
  let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
154
160
  return Number.isFinite(r) ? r - 1 : n;
155
161
  };
156
162
  return [n("data-from", 0), n("data-to", t - 1)];
157
- }, J = {
158
- create: q,
163
+ }, H = {
164
+ create: R,
159
165
  draw(t, n, r) {
160
- let { rows: i, cx: a, y: o, unit: s, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = ae(t, i.length), _ = i[h], v = i[g];
161
- if (!_ || !v) {
166
+ let { rows: i, cx: s, y: c, unit: l, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = V(t, i.length), v = i[h], y = i[g];
167
+ if (!v || !y) {
162
168
  console.warn(`[${e}] A bracket points at a row that is not there (row ${h + 1} to ${g + 1}, of ${i.length}).`);
163
169
  return;
164
170
  }
165
- let y = 7 * s, b = 4 * s, x = a(h), S = a(g), C = Math.min(o(_.value), o(v.value)) - u - b - d * .9, w = (e) => o(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)) / s + 1;
166
- p.appendChild(I("path", {
167
- class: c,
171
+ let b = 7 * l, S = 4 * l, C = s(h), T = s(g), E = Math.min(c(v.value), c(y.value)) - u - S - d * .9, O = (e) => c(e) - u - S, k = `M ${C} ${O(v.value)} L ${C} ${E} L ${T} ${E} L ${T} ${O(y.value) - b}`, A = (O(v.value) - E + Math.abs(T - C) + (O(y.value) - b - E)) / l + 1;
172
+ p.appendChild(w("path", {
173
+ class: a,
168
174
  "data-note": r.note,
169
- d: T,
170
- style: `--len:${E.toFixed(1)}; ${N("--after", m)}`
175
+ d: k,
176
+ style: `--len:${A.toFixed(1)}; ${x("--after", m)}`
171
177
  }));
172
- let D = w(v.value);
173
- p.appendChild(I("polygon", {
174
- class: l,
178
+ let j = O(y.value);
179
+ p.appendChild(w("polygon", {
180
+ class: o,
175
181
  "data-note": r.note,
176
- points: `${S},${D} ${S - y * .45},${D - y} ${S + y * .45},${D - y}`,
177
- style: N("--after", m)
178
- })), n && (z(n, (x + S) / 2, C, j, f), n.style.setProperty("--after", String(m))), re(n, ie(_.value, v.value), `${_.value} to ${v.value}`, r);
182
+ points: `${T},${j} ${T - b * .45},${j - b} ${T + b * .45},${j - b}`,
183
+ style: x("--after", m)
184
+ })), n && (D(n, (C + T) / 2, E, _, f), n.style.setProperty("--after", String(m))), z(n, B(v.value, y.value), `${v.value} to ${y.value}`, r);
179
185
  }
180
- }, oe = /* @__PURE__ */ new WeakMap(), se = (e) => {
186
+ }, U = /* @__PURE__ */ new WeakMap(), ee = (e) => {
181
187
  let t = [...e].filter((e) => !!e), n = t.map((e) => ({
182
188
  width: e.offsetWidth,
183
189
  height: e.offsetHeight
184
190
  }));
185
- t.forEach((e, t) => oe.set(e, n[t]));
186
- }, Y = (e) => oe.get(e) ?? {
191
+ t.forEach((e, t) => U.set(e, n[t]));
192
+ }, W = (e) => U.get(e) ?? {
187
193
  width: e.offsetWidth,
188
194
  height: e.offsetHeight
189
- }, ce = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, le = {
190
- create: q,
195
+ }, G = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, te = {
196
+ create: R,
191
197
  draw(e, t, n) {
192
- let { rows: r, cx: i, y: a, unit: o, labelHeight: s, height: u, svg: d, values: f, after: p } = n, m = r[0], h = r[r.length - 1];
198
+ let { rows: r, cx: i, y: s, unit: c, labelHeight: l, height: u, svg: d, values: f, after: p } = n, m = r[0], h = r[r.length - 1];
193
199
  if (!m || !h) return;
194
- let g = s + 18 * o, _ = 10 * o, v = 10 * o, y = i(0), b = a(m.value) - g, x = i(r.length - 1), S = a(h.value) - g, C = 0;
200
+ let g = l + 18 * c, v = 10 * c, y = 10 * c, b = i(0), S = s(m.value) - g, C = i(r.length - 1), T = s(h.value) - g, E = 0;
195
201
  r.forEach((e, t) => {
196
- let n = x === y ? 0 : (i(t) - y) / (x - y), r = b + n * (S - b) - (a(e.value) - g);
197
- r > C && (C = r);
198
- }), b -= C, S -= C;
199
- let w = x - y, T = S - b, E = Math.hypot(w, T) || 1, D = w / E, O = T / E;
200
- y -= D * _, b -= O * _, x += D * _, S += O * _;
201
- let k = Number.parseFloat(e.getAttribute("data-at") || "0.5");
202
+ let n = C === b ? 0 : (i(t) - b) / (C - b), r = S + n * (T - S) - (s(e.value) - g);
203
+ r > E && (E = r);
204
+ }), S -= E, T -= E;
205
+ let O = C - b, k = T - S, A = Math.hypot(O, k) || 1, j = O / A, M = k / A;
206
+ b -= j * v, S -= M * v, C += j * v, T += M * v;
207
+ let N = Number.parseFloat(e.getAttribute("data-at") || "0.5");
202
208
  if (t) {
203
- let e = y + (x - y) * k, n = b + (S - b) * k, c = Y(t).width * o / 2, l = n + Y(t).height * o / 2 + 8 * o, u = 0;
209
+ let e = b + (C - b) * N, n = S + (T - S) * N, a = W(t).width * c / 2, o = n + W(t).height * c / 2 + 8 * c, u = 0;
204
210
  r.forEach((t, n) => {
205
- let r = (f[n] ? Y(f[n]).width : 0) * o / 2;
206
- if (Math.abs(i(n) - e) >= c + r) return;
207
- let d = a(t.value) - 7 * o - s;
208
- u = Math.max(u, l - d);
209
- }), b -= u, S -= u;
211
+ let r = (f[n] ? W(f[n]).width : 0) * c / 2;
212
+ if (Math.abs(i(n) - e) >= a + r) return;
213
+ let d = s(t.value) - 7 * c - l;
214
+ u = Math.max(u, o - d);
215
+ }), S -= u, T -= u;
210
216
  }
211
- let A = x - D * v, M = S - O * v, P = Math.hypot(A - y, M - b) / o + 1;
212
- d.appendChild(I("line", {
213
- class: c,
217
+ let P = C - j * y, F = T - M * y, I = Math.hypot(P - b, F - S) / c + 1;
218
+ d.appendChild(w("line", {
219
+ class: a,
214
220
  "data-note": n.note,
215
- x1: y,
216
- y1: b,
217
- x2: A,
218
- y2: M,
219
- style: `--len:${P.toFixed(1)}; ${N("--after", p)}`
221
+ x1: b,
222
+ y1: S,
223
+ x2: P,
224
+ y2: F,
225
+ style: `--len:${I.toFixed(1)}; ${x("--after", p)}`
220
226
  }));
221
- let F = -O, L = D, R = v * .42;
222
- d.appendChild(I("polygon", {
223
- class: l,
227
+ let L = -M, R = j, B = y * .42;
228
+ d.appendChild(w("polygon", {
229
+ class: o,
224
230
  "data-note": n.note,
225
231
  points: [
226
- `${x},${S}`,
227
- `${A + F * R},${M + L * R}`,
228
- `${A - F * R},${M - L * R}`
232
+ `${C},${T}`,
233
+ `${P + L * B},${F + R * B}`,
234
+ `${P - L * B},${F - R * B}`
229
235
  ].join(" "),
230
- style: N("--after", p)
231
- })), t && (z(t, y + (x - y) * k, b + (S - b) * k, j, u), t.style.setProperty("--after", String(p)));
232
- let B = Number.parseFloat(e.getAttribute("data-years") || "");
233
- !Number.isNaN(B) && B > 0 && re(t, ce(m.value, h.value, B), `${m.value} to ${h.value} over ${B} years`, n);
236
+ style: x("--after", p)
237
+ })), t && (D(t, b + (C - b) * N, S + (T - S) * N, _, u), t.style.setProperty("--after", String(p)));
238
+ let V = Number.parseFloat(e.getAttribute("data-years") || "");
239
+ !Number.isNaN(V) && V > 0 && z(t, G(m.value, h.value, V), `${m.value} to ${h.value} over ${V} years`, n);
234
240
  }
235
- }, ue = (e, t, n, r, i) => {
241
+ }, ne = (e, t, n, r, i) => {
236
242
  if (!r) return e / t * n;
237
243
  let { lo: a, hi: o, gap: s, share: c } = r, l = n * c, u = (n - l - i) / (a + (t - o)), d = l / (o - a);
238
244
  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;
239
- }, de = (e, t, n) => {
245
+ }, re = (e, t, n) => {
240
246
  let r = .15, i = Math.min(e * .7 / (t + (t - 1) * r), n), a = t * i + (t - 1) * i * r;
241
247
  return {
242
248
  size: i,
243
249
  gap: i * r,
244
250
  offset: (e) => -a / 2 + e * i * 1.15
245
251
  };
246
- }, fe = (e, t, n) => {
252
+ }, ie = (e, t, n) => {
247
253
  let r = e.series[n], i = e.series.some((e) => e.focus) && !r.focus;
248
254
  return {
249
255
  "data-series": n + 1,
250
256
  ...i && { "data-muted": "" },
251
- style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${N("--i", t.slot)}`
257
+ style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${x("--i", t.slot)}`
252
258
  };
253
- }, pe = (e, t, n = !1) => {
259
+ }, K = (e, t, n = !1) => {
254
260
  let r = 0, i = 0;
255
261
  return Array.from({ length: t }, (t, a) => {
256
262
  let o = e.cells[a] ?? e.cells[0], s = o.missing ? 0 : o.value;
@@ -277,40 +283,40 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
277
283
  cell: o
278
284
  };
279
285
  });
280
- }, X = (e, t, n = !1) => {
281
- let r = pe(e, t, n);
286
+ }, q = (e, t, n = !1) => {
287
+ let r = K(e, t, n);
282
288
  return {
283
289
  top: Math.max(0, ...r.map((e) => e.to)),
284
290
  bottom: Math.min(0, ...r.map((e) => e.to))
285
291
  };
286
- }, me = (e, t) => {
287
- let { top: n, bottom: r } = X(e, t);
292
+ }, ae = (e, t) => {
293
+ let { top: n, bottom: r } = q(e, t);
288
294
  return n + r;
289
- }, he = (e, t, n) => {
295
+ }, oe = (e, t, n) => {
290
296
  let r = t.series.some((e) => e.focus);
291
297
  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})`);
292
- }, ge = (e, t, n, r = {}, o = "") => {
293
- let s = {
294
- class: L(i, t),
298
+ }, se = (e, t, n, i = {}, a = "") => {
299
+ let o = {
300
+ class: T(r, t),
295
301
  "data-kind": "bar",
296
302
  "data-row": n + 1,
297
- ...r
298
- }, c = N("--i", t.slot) + (o ? `; transform-origin: ${o}` : ""), l = I("g", {
299
- ...s,
303
+ ...i
304
+ }, s = x("--i", t.slot) + (a ? `; transform-origin: ${a}` : ""), c = w("g", {
305
+ ...o,
300
306
  "data-stack": "",
301
- style: c
307
+ style: s
302
308
  });
303
- return e.svg.appendChild(l), (i, o) => {
304
- let s = r["data-grow"] === void 0 ? {} : { "data-grow": r["data-grow"] };
305
- l.appendChild(I("rect", {
306
- ...s,
309
+ return e.svg.appendChild(c), (r, a) => {
310
+ let o = i["data-grow"] === void 0 ? {} : { "data-grow": i["data-grow"] };
311
+ c.appendChild(w("rect", {
307
312
  ...o,
308
- class: L(a, t),
313
+ ...a,
314
+ class: T("tablechart-piece", t),
309
315
  "data-row": n + 1,
310
- ...fe(e, t, i)
316
+ ...ie(e, t, r)
311
317
  }));
312
318
  };
313
- }, _e = 6, ve = (e, t, n) => e.some((e) => Y(e).width * n > t - _e * n), ye = (e, t, n) => t >= Y(e).height * n * 1.6, be = (e, t, n) => t >= Y(e).width * n * 1.5, xe = (e, t, n, r, i = .7) => {
319
+ }, ce = 6, le = (e, t, n) => e.some((e) => W(e).width * n > t - ce * n), J = (e, t, n) => t >= W(e).height * n * 1.6, ue = (e, t, n) => t >= W(e).width * n * 1.5, de = (e, t, n, r, i = .7) => {
314
320
  e.style.setProperty(r, "1");
315
321
  let a = 1;
316
322
  for (let e of t) {
@@ -319,10 +325,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
319
325
  }
320
326
  let o = a >= i ? a : 0;
321
327
  return e.style.setProperty(r, String(o || i)), o;
322
- }, Se = (e, t) => (e.sort((e, t) => e.y - t.y), e.forEach((n, r) => {
328
+ }, fe = (e, t) => (e.sort((e, t) => e.y - t.y), e.forEach((n, r) => {
323
329
  let i = e[r - 1];
324
330
  i && n.y < i.y + t && (n.y = i.y + t);
325
- }), e), Ce = {
331
+ }), e), pe = {
326
332
  segments: (e) => e.map((e) => ({
327
333
  ...e,
328
334
  from: 0,
@@ -342,45 +348,47 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
342
348
  categories: "beside",
343
349
  headroom: () => 0,
344
350
  draw(e) {
345
- let { segments: t, height: n, unit: r, svg: a, values: s, categories: c, config: l, barMax: u } = e, d = e.series.length > 1, f = Math.max(U(c.map((e) => Y(e).width * r)), 0), p = Math.min(f + 10 * r, j * .42), m = j - 4 * r, h = e.stacked ? Math.max(U(e.rows.map((t) => X(t, e.series.length).top)), 0) || 1 : Math.max(U(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = e.stacked ? Math.max(U(e.rows.map((t) => -X(t, e.series.length).bottom)), 0) : Math.max(U(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => -e.value))), 0), _ = Math.max(h, e.squeeze?.hi ?? 0) + g, v = (t, n) => ue(Math.abs(t), _, n, e.squeeze, e.breakGap), y = n / t.length, b = (e) => (e + .5) * y, x = Math.min(y * l.barfill, u), S = de(y, e.series.length, u), C = s[0] ?? e.totals[0], w = C ? Y(C).height * r * .56 : 0, T = Math.max(((d && !e.stacked ? S.size : x) - w) / 2, 5 * r), E = (e) => Y(e).width * r, D = (e) => e.length ? U(e.map(E)) + T + 4 * r : 0, O = (t, n) => (e.rows[n].cells[t] ?? e.rows[n].cells[0]).value, k = e.seriesValues.flatMap((e, t) => e.map((e, n) => ({
351
+ 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(N(c.map((e) => W(e).width * a)), 0), p = Math.min(f + 10 * a, _ * .42);
352
+ c[0]?.parentElement?.style.setProperty("--_beside", `${((p - 8 * a) / _ * 100).toFixed(2)}%`);
353
+ let m = _ - 4 * a, h = e.stacked ? Math.max(N(e.rows.map((t) => q(t, e.series.length).top)), 0) || 1 : Math.max(N(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = e.stacked ? Math.max(N(e.rows.map((t) => -q(t, e.series.length).bottom)), 0) : Math.max(N(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => -e.value))), 0), v = Math.max(h, e.squeeze?.hi ?? 0) + g, y = (t, n) => ne(Math.abs(t), v, n, e.squeeze, e.breakGap), b = n / t.length, S = (e) => (e + .5) * b, C = Math.min(b * l.barfill, u), E = re(b, e.series.length, u), O = s[0] ?? e.totals[0], k = O ? W(O).height * a * .56 : 0, A = Math.max(((d && !e.stacked ? E.size : C) - k) / 2, 5 * a), j = (e) => W(e).width * a, M = (e) => e.length ? N(e.map(j)) + A + 4 * a : 0, P = (t, n) => (e.rows[n].cells[t] ?? e.rows[n].cells[0]).value, F = e.seriesValues.flatMap((e, t) => e.map((e, n) => ({
346
354
  label: e,
347
- value: O(t, n)
348
- }))), A = (t) => {
349
- let n = X(e.rows[t], e.series.length);
355
+ value: P(t, n)
356
+ }))), I = (t) => {
357
+ let n = q(e.rows[t], e.series.length);
350
358
  return n.top === 0 && n.bottom < 0;
351
- }, M = e.stacked ? D(e.totals.filter((e, t) => !A(t))) : d ? D(k.filter((e) => e.value >= 0).map((e) => e.label)) : 0, P = e.stacked ? D(e.totals.filter((e, t) => A(t))) : d ? D(k.filter((e) => e.value < 0).map((e) => e.label)) : 0;
359
+ }, L = e.stacked ? M(e.totals.filter((e, t) => !I(t))) : d ? M(F.filter((e) => e.value >= 0).map((e) => e.label)) : 0, R = e.stacked ? M(e.totals.filter((e, t) => I(t))) : d ? M(F.filter((e) => e.value < 0).map((e) => e.label)) : 0;
352
360
  if (!d && !e.stacked) for (let e = 0; e < 3; e++) {
353
- let e = m - p - M - P, n = t.map((e, t) => ({
361
+ let e = m - p - L - R, n = t.map((e, t) => ({
354
362
  seg: e,
355
363
  label: s[t]
356
- })).filter(({ seg: t, label: n }) => !be(n, v(t.value, e), r)), i = D(n.filter(({ seg: e }) => e.value >= 0).map(({ label: e }) => e)), a = D(n.filter(({ seg: e }) => e.value < 0).map(({ label: e }) => e));
357
- if (i <= M && a <= P) break;
358
- M = Math.max(M, i), P = Math.max(P, a);
364
+ })).filter(({ seg: t, label: n }) => !ue(n, y(t.value, e), a)), r = M(n.filter(({ seg: e }) => e.value >= 0).map(({ label: e }) => e)), i = M(n.filter(({ seg: e }) => e.value < 0).map(({ label: e }) => e));
365
+ if (r <= L && i <= R) break;
366
+ L = Math.max(L, r), R = Math.max(R, i);
359
367
  }
360
- let F = m - p - M - P, R = p + P + v(g, F), B = (e) => e < 0 ? R - v(e, F) : R + v(e, F);
361
- if (e.squeeze && (e.breakX = B(e.squeeze.gap)), e.stacked) {
362
- e.rows.forEach((t, i) => {
363
- let a = X(t, e.series.length), o = ge(e, t, i, { "data-grow": "right" }, a.bottom < 0 ? `${R - B(a.bottom)}px center` : ""), s = b(i) - x / 2;
364
- pe(t, e.series.length).forEach(({ from: t, to: a, cell: c }, l) => {
365
- let u = e.seriesValues[l][i];
366
- if (u.dataset.place = "none", c.missing || a === t) return;
367
- let d = Math.min(B(t), B(a)), f = Math.max(B(t), B(a));
368
+ let z = m - p - L - R, B = p + R + y(g, z), V = (e) => e < 0 ? B - y(e, z) : B + y(e, z);
369
+ if (e.squeeze && (e.breakX = V(e.squeeze.gap)), e.stacked) {
370
+ e.rows.forEach((t, r) => {
371
+ let i = q(t, e.series.length), o = se(e, t, r, { "data-grow": "right" }, i.bottom < 0 ? `${B - V(i.bottom)}px center` : ""), s = S(r) - C / 2;
372
+ K(t, e.series.length).forEach(({ from: t, to: i, cell: c }, l) => {
373
+ let u = e.seriesValues[l][r];
374
+ if (u.dataset.place = "none", c.missing || i === t) return;
375
+ let d = Math.min(V(t), V(i)), f = Math.max(V(t), V(i));
368
376
  o(l, {
369
377
  x: d,
370
378
  y: s,
371
379
  width: Math.max(f - d, 1),
372
- height: x,
373
- ...a < t && { "data-grow": "left" }
374
- }), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !be(u, f - d, r) || Y(u).height * r > x), he(u, e, l), z(u, (d + f) / 2, b(i), j, n);
380
+ height: C,
381
+ ...i < t && { "data-grow": "left" }
382
+ }), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !ue(u, f - d, a) || W(u).height * a > C), oe(u, e, l), D(u, (d + f) / 2, S(r), _, n);
375
383
  });
376
- let l = e.totals[i];
377
- l && (l.dataset.place = A(i) ? "before" : "after", z(l, A(i) ? B(a.bottom) - T : B(a.top) + T, b(i), j, n));
378
- let u = c[i];
379
- u && z(u, p - 8 * r, b(i), j, n);
380
- }), a.appendChild(I("line", {
381
- class: o,
382
- x1: R,
383
- x2: R,
384
+ let l = e.totals[r];
385
+ l && (l.dataset.place = I(r) ? "before" : "after", D(l, I(r) ? V(i.bottom) - A : V(i.top) + A, S(r), _, n));
386
+ let u = c[r];
387
+ u && D(u, p - 8 * a, S(r), _, n);
388
+ }), o.appendChild(w("line", {
389
+ class: i,
390
+ x1: B,
391
+ x2: B,
384
392
  y1: 0,
385
393
  y2: n
386
394
  }));
@@ -388,68 +396,68 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
388
396
  }
389
397
  if (d) {
390
398
  e.plot.dataset.grouped = "";
391
- let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = xe(e.plot, t, (e) => ({
392
- size: Y(e).height * r,
393
- room: S.size + S.gap * .5
394
- }), "--tablechart-fit");
395
- e.rows.forEach((t, o) => {
396
- e.series.forEach((r, c) => {
397
- let l = t.cells[c] ?? t.cells[0], u = e.seriesValues[c][o];
399
+ let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = de(e.plot, t, (e) => ({
400
+ size: W(e).height * a,
401
+ room: E.size + E.gap * .5
402
+ }), "--_fit");
403
+ e.rows.forEach((t, i) => {
404
+ e.series.forEach((a, c) => {
405
+ let l = t.cells[c] ?? t.cells[0], u = e.seriesValues[c][i];
398
406
  if (l.missing) {
399
407
  u.dataset.place = "none";
400
408
  return;
401
409
  }
402
- let d = B(l.value), f = l.value < 0, p = b(o) + S.offset(c);
403
- a.appendChild(I("rect", {
404
- class: L(i, t),
410
+ let d = V(l.value), f = l.value < 0, p = S(i) + E.offset(c);
411
+ o.appendChild(w("rect", {
412
+ class: T(r, t),
405
413
  "data-kind": "bar",
406
- "data-row": o + 1,
414
+ "data-row": i + 1,
407
415
  "data-grow": f ? "left" : "right",
408
- x: Math.min(d, R),
416
+ x: Math.min(d, B),
409
417
  y: p,
410
- width: Math.max(Math.abs(d - R), 1),
411
- height: S.size,
412
- ...fe(e, t, c)
413
- })), u.dataset.place = f ? "before" : "after", u.toggleAttribute("data-left-out", !s), z(u, f ? d - T : d + T, p + S.size / 2, j, n);
418
+ width: Math.max(Math.abs(d - B), 1),
419
+ height: E.size,
420
+ ...ie(e, t, c)
421
+ })), u.dataset.place = f ? "before" : "after", u.toggleAttribute("data-left-out", !s), D(u, f ? d - A : d + A, p + E.size / 2, _, n);
414
422
  });
415
- let l = c[o];
416
- l && z(l, p - 8 * r, b(o), j, n);
417
- }), a.appendChild(I("line", {
418
- class: o,
419
- x1: R,
420
- x2: R,
423
+ let l = c[i];
424
+ l && D(l, p - 8 * a, S(i), _, n);
425
+ }), o.appendChild(w("line", {
426
+ class: i,
427
+ x1: B,
428
+ x2: B,
421
429
  y1: 0,
422
430
  y2: n
423
431
  }));
424
432
  return;
425
433
  }
426
- let ee = t.map((e, t) => be(s[t], Math.abs(B(e.value) - R), r));
427
- t.forEach((t, o) => {
428
- let l = B(t.value), u = b(o), d = t.value < 0, f = Math.abs(l - R);
429
- a.appendChild(I("rect", {
430
- class: L(i, t),
434
+ let H = t.map((e, t) => ue(s[t], Math.abs(V(e.value) - B), a));
435
+ t.forEach((t, i) => {
436
+ let l = V(t.value), u = S(i), d = t.value < 0, f = Math.abs(l - B);
437
+ o.appendChild(w("rect", {
438
+ class: T(r, t),
431
439
  "data-kind": t.kind,
432
- "data-row": o + 1,
440
+ "data-row": i + 1,
433
441
  "data-grow": d ? "left" : "right",
434
- x: Math.min(l, R),
435
- y: u - x / 2,
442
+ x: Math.min(l, B),
443
+ y: u - C / 2,
436
444
  width: Math.max(f, 1),
437
- height: x,
438
- style: N("--i", t.slot)
445
+ height: C,
446
+ style: x("--i", t.slot)
439
447
  }));
440
- let m = s[o], h = Math.max(Math.min(T, f - E(m) - 6 * r), 6 * r), g = d ? 1 : -1;
441
- m.dataset.place = ee[o] ? "inside" : d ? "before" : "after", m.dataset.kind = t.kind, z(m, ee[o] ? e.insideAlign === "center" ? (R + l) / 2 : e.insideAlign === "start" ? R - g * (h + E(m) / 2) : l + g * (h + E(m) / 2) : l - g * T, u, j, n);
442
- let _ = c[o];
443
- _ && z(_, p - 8 * r, u, j, n);
444
- }), a.appendChild(I("line", {
445
- class: o,
446
- x1: R,
447
- x2: R,
448
+ let m = s[i], h = Math.max(Math.min(A, f - j(m) - 6 * a), 6 * a), g = d ? 1 : -1;
449
+ m.dataset.place = H[i] ? "inside" : d ? "before" : "after", m.dataset.kind = t.kind, D(m, H[i] ? e.insideAlign === "center" ? (B + l) / 2 : e.insideAlign === "start" ? B - g * (h + j(m) / 2) : l + g * (h + j(m) / 2) : l - g * A, u, _, n);
450
+ let v = c[i];
451
+ v && D(v, p - 8 * a, u, _, n);
452
+ }), o.appendChild(w("line", {
453
+ class: i,
454
+ x1: B,
455
+ x2: B,
448
456
  y1: 0,
449
457
  y2: n
450
458
  }));
451
459
  }
452
- }, we = {
460
+ }, me = {
453
461
  segments: (e) => e.map((e) => ({
454
462
  ...e,
455
463
  from: 0,
@@ -463,102 +471,102 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
463
471
  breakable: !0,
464
472
  headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 4 * r + (n ? t * 1.6 : 0),
465
473
  draw(e) {
466
- let { segments: t, cx: n, y: r, barWidth: a, height: s, unit: c, svg: l, values: u, labels: d, insideAlign: f } = e, p = r(0);
474
+ 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);
467
475
  if (e.stacked) {
468
- e.rows.forEach((t, i) => {
469
- let o = X(t, e.series.length), l = ge(e, t, i, {}, o.bottom < 0 ? `center ${p - r(o.top)}px` : ""), u = n(i) - a / 2;
470
- pe(t, e.series.length).forEach(({ from: t, to: o, cell: d }, f) => {
471
- let p = e.seriesValues[f][i];
472
- if (p.dataset.place = "none", d.missing || o === t) return;
473
- let m = Math.min(r(o), r(t)), h = Math.max(r(o), r(t));
476
+ e.rows.forEach((t, r) => {
477
+ let i = q(t, e.series.length), l = se(e, t, r, {}, i.bottom < 0 ? `center ${p - a(i.top)}px` : ""), u = n(r) - o / 2;
478
+ K(t, e.series.length).forEach(({ from: t, to: i, cell: d }, f) => {
479
+ let p = e.seriesValues[f][r];
480
+ if (p.dataset.place = "none", d.missing || i === t) return;
481
+ let m = Math.min(a(i), a(t)), h = Math.max(a(i), a(t));
474
482
  l(f, {
475
483
  x: u,
476
484
  y: m,
477
- width: a,
485
+ width: o,
478
486
  height: Math.max(h - m, 1),
479
- ...o < t && { "data-grow": "down" }
480
- }), p.dataset.place = "inside", p.toggleAttribute("data-left-out", !ye(p, h - m, c) || Y(p).width * c > a - 4 * c), he(p, e, f), z(p, n(i), (m + h) / 2, j, s);
487
+ ...i < t && { "data-grow": "down" }
488
+ }), p.dataset.place = "inside", p.toggleAttribute("data-left-out", !J(p, h - m, c) || W(p).width * c > o - 4 * c), oe(p, e, f), D(p, n(r), (m + h) / 2, _, s);
481
489
  });
482
- let d = e.totals[i];
490
+ let d = e.totals[r];
483
491
  if (d) {
484
- let e = o.top === 0 && o.bottom < 0;
485
- d.dataset.place = e ? "below" : "outside", z(d, n(i), e ? r(o.bottom) + 4 * c : r(o.top) - 4 * c, j, s);
492
+ let e = i.top === 0 && i.bottom < 0;
493
+ d.dataset.place = e ? "below" : "outside", D(d, n(r), e ? a(i.bottom) + 4 * c : a(i.top) - 4 * c, _, s);
486
494
  }
487
- }), l.appendChild(I("line", {
488
- class: o,
495
+ }), l.appendChild(w("line", {
496
+ class: i,
489
497
  x1: 0,
490
- x2: j,
498
+ x2: _,
491
499
  y1: p,
492
500
  y2: p
493
501
  }));
494
502
  return;
495
503
  }
496
504
  if (e.series.length > 1) {
497
- let t = de(n(1) - n(0) || n(0) * 2, e.series.length, e.barMax);
505
+ let t = re(n(1) - n(0) || n(0) * 2, e.series.length, e.barMax);
498
506
  e.plot.dataset.grouped = "";
499
- let a = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), u = xe(e.plot, a, (e) => ({
500
- size: Y(e).width * c,
507
+ let o = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), u = de(e.plot, o, (e) => ({
508
+ size: W(e).width * c,
501
509
  room: t.size + t.gap * .5
502
- }), "--tablechart-fit");
503
- e.rows.forEach((a, o) => {
510
+ }), "--_fit");
511
+ e.rows.forEach((i, o) => {
504
512
  e.series.forEach((d, f) => {
505
- let m = a.cells[f] ?? a.cells[0], h = e.seriesValues[f][o], g = n(o) + t.offset(f);
513
+ let m = i.cells[f] ?? i.cells[0], h = e.seriesValues[f][o], g = n(o) + t.offset(f);
506
514
  if (m.missing) {
507
515
  h.dataset.place = "none";
508
516
  return;
509
517
  }
510
- let _ = r(m.value), v = m.value < 0;
511
- l.appendChild(I("rect", {
512
- class: L(i, a),
518
+ let v = a(m.value), y = m.value < 0;
519
+ l.appendChild(w("rect", {
520
+ class: T(r, i),
513
521
  "data-kind": "bar",
514
522
  "data-row": o + 1,
515
- ...v && { "data-grow": "down" },
523
+ ...y && { "data-grow": "down" },
516
524
  x: g,
517
- y: Math.min(_, p),
525
+ y: Math.min(v, p),
518
526
  width: t.size,
519
- height: Math.max(Math.abs(p - _), 1),
520
- ...fe(e, a, f)
521
- })), h.dataset.place = v ? "below" : "outside", h.toggleAttribute("data-left-out", !u), z(h, g + t.size / 2, v ? _ + 4 * c : _ - 4 * c, j, s);
527
+ height: Math.max(Math.abs(p - v), 1),
528
+ ...ie(e, i, f)
529
+ })), h.dataset.place = y ? "below" : "outside", h.toggleAttribute("data-left-out", !u), D(h, g + t.size / 2, y ? v + 4 * c : v - 4 * c, _, s);
522
530
  });
523
- }), l.appendChild(I("line", {
524
- class: o,
531
+ }), l.appendChild(w("line", {
532
+ class: i,
525
533
  x1: 0,
526
- x2: j,
534
+ x2: _,
527
535
  y1: p,
528
536
  y2: p
529
537
  }));
530
538
  return;
531
539
  }
532
- let m = ve(u, a, c), h = t.map((e, t) => d === "inside" && !m && !e.missing && ye(u[t], Math.abs(p - r(e.value)), c)), g = u[0] ? Y(u[0]).height * c * .56 : 0, _ = Infinity;
533
- for (let [e, t] of u.entries()) h[e] && (_ = Math.min(_, (a - Y(t).width * c) / 2));
540
+ let m = le(u, o, c), h = t.map((e, t) => d === "inside" && !m && !e.missing && J(u[t], Math.abs(p - a(e.value)), c)), g = u[0] ? W(u[0]).height * c * .56 : 0, v = Infinity;
541
+ for (let [e, t] of u.entries()) h[e] && (v = Math.min(v, (o - W(t).width * c) / 2));
534
542
  t.forEach((e, t) => {
535
- let o = r(e.value), d = e.value < 0;
543
+ let i = a(e.value), d = e.value < 0;
536
544
  if (e.missing) {
537
- z(u[t], n(t), p - 4 * c, j, s), u[t].dataset.place = "outside";
545
+ D(u[t], n(t), p - 4 * c, _, s), u[t].dataset.place = "outside";
538
546
  return;
539
547
  }
540
- l.appendChild(I("rect", {
541
- class: L(i, e),
548
+ l.appendChild(w("rect", {
549
+ class: T(r, e),
542
550
  "data-kind": e.kind,
543
551
  "data-row": t + 1,
544
552
  ...d && { "data-grow": "down" },
545
- x: n(t) - a / 2,
546
- y: Math.min(o, p),
547
- width: a,
548
- height: Math.max(Math.abs(p - o), 1),
549
- style: N("--i", e.slot)
553
+ x: n(t) - o / 2,
554
+ y: Math.min(i, p),
555
+ width: o,
556
+ height: Math.max(Math.abs(p - i), 1),
557
+ style: x("--i", e.slot)
550
558
  }));
551
- let m = d ? -1 : 1, v = Math.min(_, (Math.abs(p - o) - g) / 2), y = f === "center" ? (o + p) / 2 : f === "start" ? p - m * (v + g / 2) : o + m * (v + g / 2), b = d ? o + 4 * c : o - 4 * c;
552
- z(u[t], n(t), h[t] ? y : b, j, s), u[t].dataset.place = h[t] ? "inside" : d ? "below" : "outside";
553
- }), l.appendChild(I("line", {
554
- class: o,
559
+ let m = d ? -1 : 1, y = Math.min(v, (Math.abs(p - i) - g) / 2), b = f === "center" ? (i + p) / 2 : f === "start" ? p - m * (y + g / 2) : i + m * (y + g / 2), S = d ? i + 4 * c : i - 4 * c;
560
+ D(u[t], n(t), h[t] ? b : S, _, s), u[t].dataset.place = h[t] ? "inside" : d ? "below" : "outside";
561
+ }), l.appendChild(w("line", {
562
+ class: i,
555
563
  x1: 0,
556
- x2: j,
564
+ x2: _,
557
565
  y1: p,
558
566
  y2: p
559
567
  }));
560
568
  }
561
- }, Te = 0, Ee = (e) => e.filter((e) => !e.isTotal), De = {
569
+ }, he = 0, ge = (e) => e.filter((e) => !e.isTotal), _e = {
562
570
  aspect: .66,
563
571
  centre: !0,
564
572
  headroom: () => 0,
@@ -568,82 +576,82 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
568
576
  to: e.value,
569
577
  kind: "bar"
570
578
  })),
571
- draw({ rows: e, height: t, unit: n, labelHeight: r, svg: i, values: a, config: o, centre: s }) {
572
- let c = j / 2, l = t / 2, u = Ee(e).reduce((e, t) => e + Math.abs(t.value), 0);
579
+ draw({ rows: e, height: t, unit: n, labelHeight: r, svg: i, values: a, config: o, centre: c }) {
580
+ let l = t / 2, u = ge(e).reduce((e, t) => e + Math.abs(t.value), 0);
573
581
  if (!u) return;
574
- let d = r * 1.2 + 10 * n, m = Math.max(Math.min(j, t) / 2 - d, 10), h = m * o.ringfill, g = m - h / 2, _ = 2 * Math.PI * g, v = [], y = 0, b = 0;
582
+ let d = r * 1.2 + 10 * n, f = Math.max(Math.min(_, t) / 2 - d, 10), p = f * o.ringfill, m = f - p / 2, h = 2 * Math.PI * m, g = [], v = 0, y = 0, S = 0;
575
583
  if (e.forEach((e, o) => {
576
- let s = a[o];
584
+ let c = a[o];
577
585
  if (e.isTotal) {
578
- s.dataset.place = "none";
586
+ c.dataset.place = "none";
579
587
  return;
580
588
  }
581
- let d = Math.abs(e.value) / u * _, p = y / _ * 2 * Math.PI - Math.PI / 2;
582
- v.push(p), i.appendChild(I("circle", {
583
- class: L(f, e),
584
- "data-slice": b + 1,
589
+ let d = Math.abs(e.value) / u, C = b(S, d), E = `--share:${d.toFixed(4)}; --start:${C.start.toFixed(4)}; --span:${C.span.toFixed(4)};`, O = d * h, k = v / h * 2 * Math.PI - Math.PI / 2;
590
+ g.push(k), i.appendChild(w("circle", {
591
+ class: T(s, e),
592
+ "data-slice": y + 1,
585
593
  "data-row": o + 1,
586
- cx: c,
594
+ cx: 500,
587
595
  cy: l,
588
- r: g,
589
- "stroke-width": h,
590
- transform: `rotate(-90 ${c} ${l})`,
591
- "stroke-dasharray": `${d.toFixed(1)} ${(_ - d).toFixed(1)}`,
592
- "stroke-dashoffset": (-y).toFixed(1),
593
- style: `--n:${b}; --palette:var(--tablechart-color-${b + 1}); --arc:${d.toFixed(1)}; --circ:${_.toFixed(1)}; ${N("--i", e.slot)}`
596
+ r: m,
597
+ "stroke-width": p,
598
+ transform: `rotate(-90 500 ${l})`,
599
+ "stroke-dasharray": `${O.toFixed(1)} ${(h - O).toFixed(1)}`,
600
+ "stroke-dashoffset": (-v).toFixed(1),
601
+ style: `--n:${y}; --palette:var(--tablechart-color-${y + 1}); --arc:${O.toFixed(1)}; --circ:${h.toFixed(1)}; ${E} --ease:${C.easing}; ${x("--i", e.slot)}`
594
602
  }));
595
- let x = p + d / _ * Math.PI, C = Math.cos(x), w = Math.sin(x);
596
- i.appendChild(I("line", {
597
- class: S,
598
- x1: c + C * (m + 2 * n),
599
- y1: l + w * (m + 2 * n),
600
- x2: c + C * (m + 7 * n),
601
- y2: l + w * (m + 7 * n),
603
+ let A = k + O / h * Math.PI, j = Math.cos(A), M = Math.sin(A);
604
+ i.appendChild(w("line", {
605
+ class: "tablechart-leader",
606
+ x1: 500 + j * (f + 2 * n),
607
+ y1: l + M * (f + 2 * n),
608
+ x2: 500 + j * (f + 7 * n),
609
+ y2: l + M * (f + 7 * n),
602
610
  "data-row": o + 1,
603
- style: N("--i", e.slot)
604
- }));
605
- let T = m + 9 * n, E = Y(s).width * n / 2;
606
- z(s, c + C * (T + Math.abs(C) * E), l + w * (T + Math.abs(w) * r * .7), j, t), s.dataset.place = "around", y += d, b += 1;
607
- }), v.length > 1) {
608
- let e = g - h / 2 - 1, n = g + h / 2 + 1, r = `tablechart-slices-${++Te}`, a = I("mask", {
611
+ style: `${E} ${x("--i", e.slot)}`
612
+ })), c.style.setProperty("--start", C.start.toFixed(4)), c.style.setProperty("--span", C.span.toFixed(4));
613
+ let N = f + 9 * n, P = W(c).width * n / 2;
614
+ D(c, 500 + j * (N + Math.abs(j) * P), l + M * (N + Math.abs(M) * r * .7), _, t), c.dataset.place = "around", v += O, S += d, y += 1;
615
+ }), g.length > 1) {
616
+ let e = m - p / 2 - 1, n = m + p / 2 + 1, r = `tablechart-slices-${++he}`, a = w("mask", {
609
617
  id: r,
610
618
  maskUnits: "userSpaceOnUse"
611
619
  });
612
- a.appendChild(I("rect", {
620
+ a.appendChild(w("rect", {
613
621
  x: 0,
614
622
  y: 0,
615
- width: j,
623
+ width: _,
616
624
  height: t,
617
625
  fill: "white"
618
626
  }));
619
- for (let t of v) a.appendChild(I("line", {
620
- class: p,
621
- x1: c + Math.cos(t) * e,
627
+ for (let t of g) a.appendChild(w("line", {
628
+ class: "tablechart-divide",
629
+ x1: 500 + Math.cos(t) * e,
622
630
  y1: l + Math.sin(t) * e,
623
- x2: c + Math.cos(t) * n,
631
+ x2: 500 + Math.cos(t) * n,
624
632
  y2: l + Math.sin(t) * n
625
633
  }));
626
- let o = I("g", { mask: `url(#${r})` });
627
- for (let e of Array.from(i.querySelectorAll(`.${f}`))) o.appendChild(e);
628
- let s = I("defs");
629
- s.appendChild(a), i.prepend(s, o);
634
+ let o = w("g", { mask: `url(#${r})` });
635
+ for (let e of Array.from(i.querySelectorAll(`.${s}`))) o.appendChild(e);
636
+ let c = w("defs");
637
+ c.appendChild(a), i.prepend(c, o);
630
638
  }
631
- s && z(s, c, l, j, t);
639
+ c && D(c, 500, l, _, t);
632
640
  }
633
- }, Oe = [
641
+ }, ve = [
634
642
  "circle",
635
643
  "square",
636
644
  "diamond"
637
- ], ke = (e, t) => {
638
- let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = Oe.find((e) => n.includes(e));
645
+ ], ye = (e, t) => {
646
+ let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = ve.find((e) => n.includes(e));
639
647
  return {
640
- shape: r ?? Oe[Math.floor(t / 2) % Oe.length],
648
+ shape: r ?? ve[Math.floor(t / 2) % ve.length],
641
649
  open: n.includes("open") || !n.includes("filled") && !r && t % 2 == 1
642
650
  };
643
- }, Ae = (e, t, n, r, i = {}) => {
651
+ }, be = (e, t, n, r, i = {}) => {
644
652
  if (e === "square") {
645
653
  let e = r * .88;
646
- return I("rect", {
654
+ return w("rect", {
647
655
  x: t - e,
648
656
  y: n - e,
649
657
  width: e * 2,
@@ -653,19 +661,19 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
653
661
  }
654
662
  if (e === "diamond") {
655
663
  let e = r * 1.2;
656
- return I("polygon", {
664
+ return w("polygon", {
657
665
  points: `${t},${n - e} ${t + e},${n} ${t},${n + e} ${t - e},${n}`,
658
666
  ...i
659
667
  });
660
668
  }
661
- return I("circle", {
669
+ return w("circle", {
662
670
  cx: t,
663
671
  cy: n,
664
672
  r,
665
673
  ...i
666
674
  });
667
- }, Z = (e) => Number(e.toFixed(2));
668
- function je(e, t) {
675
+ }, Y = (e) => Number(e.toFixed(2));
676
+ function xe(e, t) {
669
677
  let n = e.length;
670
678
  if (n < 2) return e.map(() => 0);
671
679
  let r = (n) => (t[n + 1] - t[n]) / (e[n + 1] - e[n] || 1), i = Array(n).fill(0);
@@ -682,17 +690,17 @@ function je(e, t) {
682
690
  };
683
691
  return i[0] = a(0, 1, i[1]), i[n - 1] = a(n - 2, n - 1, i[n - 2]), i;
684
692
  }
685
- function Me(e, t, n, r) {
693
+ function Se(e, t, n, r) {
686
694
  let i = (t[0] - e[0]) / 3;
687
695
  return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
688
696
  }
689
- function Ne(e, t, n, r) {
690
- let [i, a] = Me(e, t, n, r), o = ([e, t]) => `${Z(e)},${Z(t)}`;
697
+ function Ce(e, t, n, r) {
698
+ let [i, a] = Se(e, t, n, r), o = ([e, t]) => `${Y(e)},${Y(t)}`;
691
699
  return `C${o(i)} ${o(a)} ${o(t)}`;
692
700
  }
693
- function Pe(e, t, n) {
701
+ function we(e, t, n) {
694
702
  let r = Array(e).fill(0), i = [], a = () => {
695
- je(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
703
+ xe(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
696
704
  r[i[t]] = e;
697
705
  }), i = [];
698
706
  };
@@ -701,13 +709,13 @@ function Pe(e, t, n) {
701
709
  }
702
710
  //#endregion
703
711
  //#region src/js/charts/line.ts
704
- var Fe = (e) => e.map((e) => ({
712
+ var Te = (e) => e.map((e) => ({
705
713
  ...e,
706
714
  from: 0,
707
715
  to: e.value,
708
716
  kind: "bar"
709
- })), Ie = (e) => ({
710
- segments: Fe,
717
+ })), Ee = (e) => ({
718
+ segments: Te,
711
719
  series: !0,
712
720
  stackable: !0,
713
721
  running: !0,
@@ -715,14 +723,14 @@ var Fe = (e) => e.map((e) => ({
715
723
  headroom: ({ labelHeight: e, unit: t }) => e * 1.6 + 6 * t,
716
724
  footroom: ({ labelHeight: t, unit: n, series: r, focused: i, stacked: a }) => !e && !a && r === 2 && !i ? t + 7 * n : 0,
717
725
  draw(t) {
718
- let { rows: n, series: r, seriesValues: i, names: a, cx: s, y: c, height: l, unit: u, labelHeight: d, svg: f, stacked: p } = t, _ = t.shape === "step", v = t.shape === "smooth", x = r.length > 1, S = r.some((e) => e.focus), C = n.length - 1, w = c(0), T = n.length > 1 ? s(1) - s(0) : s(0) * 2;
719
- f.style.setProperty("--tablechart-base", `${Z(w)}px`);
720
- let E = (e) => `--rise:${Z(w - e)}px; `, D = (e, t) => n[t]?.cells[e] ?? n[t]?.cells[0], O = (e, t) => !D(e, t) || !!D(e, t)?.missing, k = n.map((e) => p ? pe(e, r.length, !0) : null), A = (e, t) => k[t]?.[e].to ?? D(e, t)?.value ?? 0, M = (e, t) => k[t]?.[e].from ?? 0, N = (e, t) => [s(t), c(A(e, t))], P = r.map((e, t) => {
721
- if (!x) return {
726
+ let { rows: n, series: r, seriesValues: a, names: o, cx: s, y: c, height: u, unit: d, labelHeight: f, svg: p, stacked: m } = t, h = t.shape === "step", g = 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;
727
+ p.style.setProperty("--_base", `${Y(x)}px`);
728
+ let C = (e) => `--rise:${Y(x - e)}px; `, T = (e, t) => n[t]?.cells[e] ?? n[t]?.cells[0], E = (e, t) => !T(e, t) || !!T(e, t)?.missing, O = n.map((e) => m ? K(e, r.length, !0) : null), A = (e, t) => O[t]?.[e].to ?? T(e, t)?.value ?? 0, j = (e, t) => O[t]?.[e].from ?? 0, M = (e, t) => [s(t), c(A(e, t))], N = r.map((e, t) => {
729
+ if (!v) return {
722
730
  attrs: {},
723
731
  ink: ""
724
732
  };
725
- let n = S && !e.focus;
733
+ let n = y && !e.focus;
726
734
  return {
727
735
  attrs: {
728
736
  "data-series": t + 1,
@@ -730,144 +738,146 @@ var Fe = (e) => e.map((e) => ({
730
738
  },
731
739
  ink: `--n:${t}; --m:${+!!n}; --palette:var(--tablechart-color-${t + 1}); `
732
740
  };
733
- }), F = Math.min(C, 6), L = C > 0 ? F / (_ ? n.length : C) : 1, R = (e) => e * L, B = (e) => `--i:${Z(R(e))}`, V = (e) => {
741
+ }), P = Math.min(b, 6);
742
+ t.plot.style.setProperty("--count", String(P + 1));
743
+ let F = b > 0 ? P / (h ? n.length : b) : 1, I = (e) => e * F, L = (e) => `--i:${Y(I(e))}`, R = (e) => {
734
744
  let t = [], r = -1;
735
745
  return n.forEach((n, i) => {
736
- O(e, i) || (r < 0 && (r = i), (i === C || O(e, i + 1)) && ((_ || i > r) && t.push([r, i]), r = -1));
746
+ E(e, i) || (r < 0 && (r = i), (i === b || E(e, i + 1)) && ((h || i > r) && t.push([r, i]), r = -1));
737
747
  }), t;
738
- }, H = (e, t) => `--i:${Z(R(e) + 1)}; --d:${Z(R(_ ? t + 1 : t) - R(e))}`, te = (e, t) => ({
748
+ }, z = (e, t) => `--i:${Y(I(e) + 1)}; --d:${Y(I(h ? t + 1 : t) - I(e))}`, B = (e, t) => ({
739
749
  "data-from": e + 1,
740
750
  "data-to": t + 1,
741
- ..._ && { "data-flat": "" }
742
- }), U = v ? r.map((e, t) => Pe(n.length, (e) => O(t, e), (e) => N(t, e))) : [], ne = v && e ? r.map((e, t) => Pe(n.length, (e) => O(t, e), (e) => [s(e), c(M(t, e))])) : [], W = (e, t, n) => {
751
+ ...h && { "data-flat": "" }
752
+ }), V = g ? r.map((e, t) => we(n.length, (e) => E(t, e), (e) => M(t, e))) : [], H = g && e ? r.map((e, t) => we(n.length, (e) => E(t, e), (e) => [s(e), c(j(t, e))])) : [], U = (e, t, n) => {
743
753
  let r = [];
744
754
  return e.forEach(([i, a], o) => {
745
- _ ? (r.push(`H${Z(i + n * T / 2)}`), o < e.length - 1 && r.push(`V${Z(e[o + 1][1])}`)) : o > 0 && r.push(t ? Ne(e[o - 1], [i, a], t[o - 1], t[o]) : `L${Z(i)},${Z(a)}`);
755
+ h ? (r.push(`H${Y(i + n * S / 2)}`), o < e.length - 1 && r.push(`V${Y(e[o + 1][1])}`)) : o > 0 && r.push(t ? Ce(e[o - 1], [i, a], t[o - 1], t[o]) : `L${Y(i)},${Y(a)}`);
746
756
  }), r;
747
- }, G = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [s(t + r), c(i(e, t + r))]), K = (e, t, n, r) => v ? e[t].slice(n, r + 1) : null, q = (e) => s(e) - (_ ? T / 2 : 0), re = (e) => s(e) + (_ ? T / 2 : 0), ie = (e) => {
748
- let t = I("g", {
749
- class: h,
750
- ...P[e].attrs,
751
- ...p && { "data-stacked": "" },
752
- style: P[e].ink
753
- }), n = V(e), r = I("g", {
754
- class: g,
755
- style: `--rows:${Z(F + 1)}; ${n.length ? H(...n[0]) : ""}`
757
+ }, 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) => g ? e[t].slice(n, r + 1) : null, te = (e) => s(e) - (h ? S / 2 : 0), ne = (e) => s(e) + (h ? S / 2 : 0), re = (e) => {
758
+ let t = w("g", {
759
+ class: "tablechart-area",
760
+ ...N[e].attrs,
761
+ ...m && { "data-stacked": "" },
762
+ style: N[e].ink
763
+ }), n = R(e), r = w("g", {
764
+ class: "tablechart-area-fill",
765
+ style: `--rows:${Y(P + 1)}; ${n.length ? z(...n[0]) : ""}`
756
766
  });
757
767
  t.appendChild(r);
758
768
  for (let [t, i] of n) {
759
- let n = G(e, t, i, A), a = G(e, t, i, M), o = K(ne, e, t, i)?.reverse() ?? null, s = [
760
- `M${Z(q(t))},${Z(a[0][1])}`,
761
- `L${Z(q(t))},${Z(n[0][1])}`,
762
- ...W(n, K(U, e, t, i), 1),
763
- `L${Z(re(i))},${Z(a[a.length - 1][1])}`,
764
- ...W(a.reverse(), o, -1),
769
+ let n = ee(e, t, i, A), a = ee(e, t, i, j), o = G(H, e, t, i)?.reverse() ?? null, s = [
770
+ `M${Y(te(t))},${Y(a[0][1])}`,
771
+ `L${Y(te(t))},${Y(n[0][1])}`,
772
+ ...U(n, G(V, e, t, i), 1),
773
+ `L${Y(ne(i))},${Y(a[a.length - 1][1])}`,
774
+ ...U(a.reverse(), o, -1),
765
775
  "Z"
766
776
  ].join(" ");
767
- r.appendChild(I("path", {
777
+ r.appendChild(w("path", {
768
778
  d: s,
769
- ...te(t, i),
770
- style: H(t, i)
779
+ ...B(t, i),
780
+ style: z(t, i)
771
781
  }));
772
782
  }
773
- f.appendChild(t);
774
- }, ae = (e) => {
783
+ p.appendChild(t);
784
+ }, ie = (e) => {
775
785
  let t = r[e];
776
- for (let [n, r] of V(e)) {
777
- let i = G(e, n, r, A), a = [`M${Z(q(n))},${Z(i[0][1])}`, ...W(i, K(U, e, n, r), 1)].join(" ");
778
- f.appendChild(I("path", {
779
- class: m,
780
- ...P[e].attrs,
786
+ for (let [n, r] of R(e)) {
787
+ let i = ee(e, n, r, A), a = [`M${Y(te(n))},${Y(i[0][1])}`, ...U(i, G(V, e, n, r), 1)].join(" ");
788
+ p.appendChild(w("path", {
789
+ class: "tablechart-series",
790
+ ...N[e].attrs,
781
791
  d: a,
782
792
  ...t.line && { "data-line": t.line },
783
- ...te(n, r),
784
- style: `${P[e].ink}${H(n, r)}`
793
+ ...B(n, r),
794
+ style: `${N[e].ink}${z(n, r)}`
785
795
  }));
786
796
  }
787
797
  };
788
- e && r.forEach((e, t) => ie(t)), r.forEach((e, t) => ae(t)), _ || (() => {
789
- let e = r.map((e, t) => x ? ke(r, t) : {
798
+ e && r.forEach((e, t) => re(t)), r.forEach((e, t) => ie(t)), h || (() => {
799
+ let e = r.map((e, t) => v ? ye(r, t) : {
790
800
  shape: "circle",
791
801
  open: !1
792
802
  }), t = (t, n, r) => {
793
- let [i, a] = N(t, n);
794
- return Ae(e[t].shape, i, a, 4 * u, {
803
+ let [i, a] = M(t, n);
804
+ return be(e[t].shape, i, a, 4 * d, {
795
805
  ...r,
796
- style: `${r.style ?? ""}${E(a)}${B(n)}`
806
+ style: `${r.style ?? ""}${C(a)}${L(n)}`
797
807
  });
798
- }, i = (e) => n.map((e, t) => t).filter((t) => !O(e, t));
799
- ee(f, r.flatMap((n, r) => e[r].open ? i(r).map((e) => t(r, e, {
800
- class: b,
808
+ }, 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, {
809
+ class: l,
801
810
  "data-row": e + 1,
802
- ...x && { "data-series": r + 1 }
803
- })) : []), j, l), r.forEach((n, r) => {
804
- for (let n of i(r)) f.appendChild(t(r, n, {
805
- class: y,
806
- ...P[r].attrs,
811
+ ...v && { "data-series": r + 1 }
812
+ })) : []);
813
+ k(p, a, _, u), r.forEach((n, r) => {
814
+ for (let n of i(r)) p.appendChild(t(r, n, {
815
+ class: "tablechart-point",
816
+ ...N[r].attrs,
807
817
  "data-marker": e[r].shape,
808
818
  ...e[r].open && { "data-open": "" },
809
819
  "data-row": n + 1,
810
- style: P[r].ink
820
+ style: N[r].ink
811
821
  }));
812
822
  });
813
823
  })();
814
- let J = (e, t) => {
824
+ let q = (e, t) => {
815
825
  let n = t;
816
- for (; n < C && !O(e, n + 1) && D(e, n + 1)?.value === D(e, t)?.value;) n++;
826
+ for (; n < b && !E(e, n + 1) && T(e, n + 1)?.value === T(e, t)?.value;) n++;
817
827
  return n;
818
- }, oe = (t, n) => {
819
- let i = D(t, n);
820
- if (!i || i.missing || _ && n > 0 && !O(t, n - 1) && D(t, n - 1)?.value === i.value || S && !r[t].focus) return "none";
821
- if (p) return "middle";
828
+ }, ae = (t, n) => {
829
+ let i = T(t, n);
830
+ if (!i || i.missing || h && n > 0 && !E(t, n - 1) && T(t, n - 1)?.value === i.value || y && !r[t].focus) return "none";
831
+ if (m) return "middle";
822
832
  let a = i.value < 0 ? "below" : "above";
823
- if (!x || S || r.length > 2) return a;
824
- let o = D(1 - t, n);
825
- return !o || o.missing ? a : i.value > o.value || i.value === o.value && t === 0 || e && i.value >= 0 && N(t, n)[1] + 7 * u + d > w ? "above" : "below";
826
- }, se = (e, t) => !p && !_ ? x && !S && r.length > 2 : Y(i[e][t]).width * u > (_ ? J(e, t) - t + 1 : 1) * T - 4 * u || p && e > 0 && A(e, t) < M(e, t) ? !0 : p && Math.abs(c(M(e, t)) - c(A(e, t))) < d * 1.2;
827
- i.forEach((e, t) => {
833
+ if (!v || y || r.length > 2) return a;
834
+ let o = T(1 - t, n);
835
+ return !o || o.missing ? a : i.value > o.value || i.value === o.value && t === 0 || e && i.value >= 0 && M(t, n)[1] + 7 * d + f > x ? "above" : "below";
836
+ }, oe = (e, t) => !m && !h ? v && !y && r.length > 2 : W(a[e][t]).width * d > (h ? q(e, t) - t + 1 : 1) * S - 4 * d || m && e > 0 && A(e, t) < j(e, t) ? !0 : m && Math.abs(c(j(e, t)) - c(A(e, t))) < f * 1.2;
837
+ a.forEach((e, t) => {
828
838
  e.forEach((e, n) => {
829
- e.style.setProperty("--i", String(Z(_ ? (R(n) + R(n + 1)) / 2 : R(n))));
830
- let r = oe(t, n);
831
- if (e.dataset.place = r === "above" ? "outside" : r, e.toggleAttribute("data-left-out", r !== "none" && se(t, n)), _ && r !== "none" ? e.dataset.rowEnd = String(J(t, n) + 1) : delete e.dataset.rowEnd, r === "none") return;
832
- let i = Y(e).width * u / 2 + 4 * u, a = s(n);
833
- _ ? a = (s(n) + s(J(t, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === C && (a -= i);
834
- let o = c(A(t, n)), d = {
835
- middle: (c(M(t, n)) - o) / 2,
836
- above: -7 * u,
837
- below: 7 * u
839
+ e.style.setProperty("--i", String(Y(h ? (I(n) + I(n + 1)) / 2 : I(n))));
840
+ let r = ae(t, n);
841
+ if (e.dataset.place = r === "above" ? "outside" : r, e.toggleAttribute("data-left-out", r !== "none" && oe(t, n)), h && r !== "none" ? e.dataset.rowEnd = String(q(t, n) + 1) : delete e.dataset.rowEnd, r === "none") return;
842
+ let i = W(e).width * d / 2 + 4 * d, a = s(n);
843
+ h ? a = (s(n) + s(q(t, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === b && (a -= i);
844
+ let o = c(A(t, n)), l = {
845
+ middle: (c(j(t, n)) - o) / 2,
846
+ above: -7 * d,
847
+ below: 7 * d
838
848
  };
839
- z(e, a, o + d[r], j, l);
849
+ D(e, a, o + l[r], _, u);
840
850
  });
841
851
  });
842
- let ce = a.map((e, t) => {
843
- let n = C;
844
- for (; n > 0 && O(t, n);) n--;
845
- let [r, i] = N(t, n);
852
+ let se = o.map((e, t) => {
853
+ let n = b;
854
+ for (; n > 0 && E(t, n);) n--;
855
+ let [r, i] = M(t, n);
846
856
  return {
847
857
  name: e,
848
- x: (_ ? r + T / 2 : r) + 10 * u,
849
- y: p ? (i + c(M(t, n))) / 2 : i
858
+ x: (h ? r + S / 2 : r) + 10 * d,
859
+ y: m ? (i + c(j(t, n))) / 2 : i
850
860
  };
851
- }), le = (a[0] ? Y(a[0]).height : 0) * u;
852
- for (let e of Se(ce, le)) z(e.name, e.x, e.y, j, l);
853
- let ue = n.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), de = !e && !p && r.length === 2 && !S && !ue ? l - 2 * u : w;
854
- f.appendChild(I("line", {
855
- class: o,
861
+ }), ce = (o[0] ? W(o[0]).height : 0) * d;
862
+ for (let e of fe(se, ce)) D(e.name, e.x, e.y, _, u);
863
+ let le = n.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), J = !e && !m && r.length === 2 && !y && !le ? u - 2 * d : x;
864
+ p.appendChild(w("line", {
865
+ class: i,
856
866
  x1: 0,
857
- x2: s(C) + s(0),
858
- y1: de,
859
- y2: de
867
+ x2: s(b) + s(0),
868
+ y1: J,
869
+ y2: J
860
870
  }));
861
871
  }
862
- }), Le = Ie(!1), Re = Ie(!0), ze = /* @__PURE__ */ new Set(), Be = (t, n) => {
872
+ }), De = Ee(!1), Oe = Ee(!0), ke = /* @__PURE__ */ new Set(), Ae = (t, n) => {
863
873
  if (Math.abs(t - n) <= Math.abs(n) / 100) return;
864
- let r = `[${e}] A total reads ${t}, but the steps before it add up to ${Number(n.toFixed(6))}. The chart shows what you wrote; this is only a check.`;
865
- ze.has(r) || (ze.add(r), console.warn(r));
866
- }, Ve = {
874
+ let r = `[${e}] A total reads ${t}, but the steps before it add up to ${Number(n.toFixed(6))}. The chart shows your number.`;
875
+ ke.has(r) || (ke.add(r), console.warn(r));
876
+ }, je = {
867
877
  segments: (e) => {
868
878
  let t = 0, n = !1;
869
879
  return e.map((e) => {
870
- if (e.isTotal) return n && Be(e.value, t), n = !1, t = e.value, {
880
+ if (e.isTotal) return n && Ae(e.value, t), n = !1, t = e.value, {
871
881
  ...e,
872
882
  from: 0,
873
883
  to: e.value,
@@ -884,66 +894,69 @@ var Fe = (e) => e.map((e) => ({
884
894
  },
885
895
  breakable: !0,
886
896
  headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
887
- draw({ segments: e, cx: t, y: n, barWidth: r, height: a, unit: c, svg: l, values: u, breakAt: d, insideAlign: f }) {
888
- let p = n(0), m = ve(u, r, c), h = f ?? "center", g = e.map((t, r) => {
889
- let i = n(Math.max(t.from, t.to)), a = Math.abs(n(t.from) - n(t.to)), o = d !== null && Math.min(t.from, t.to) < d && Math.max(t.from, t.to) > d, s = t.kind === "total" && r > 0 && r === e.length - 1;
897
+ draw({ segments: e, cx: t, y: n, barWidth: a, height: o, unit: s, svg: c, values: l, breakAt: u, insideAlign: d }) {
898
+ let f = n(0), p = le(l, a, s), m = d ?? "center", h = e.map((t, r) => {
899
+ 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;
890
900
  return {
891
901
  top: i,
892
902
  length: a,
893
- down: t.kind === "down" || t.kind === "total" && (s ? t.to >= 0 : t.to < 0),
894
- inside: !o && !m && ye(u[r], a, c)
903
+ down: t.kind === "down" || t.kind === "total" && (c ? t.to >= 0 : t.to < 0),
904
+ inside: !o && !p && J(l[r], a, s)
895
905
  };
896
- }), _ = u[0] ? Y(u[0]).height * c * .56 : 0, v = Infinity;
897
- for (let [e, t] of g.entries()) t.inside && (v = Math.min(v, (r - Y(u[e]).width * c) / 2));
898
- e.forEach((i, a) => {
899
- let o = e[a + 1];
906
+ }), g = l[0] ? W(l[0]).height * s * .56 : 0, v = Infinity;
907
+ for (let [e, t] of h.entries()) t.inside && (v = Math.min(v, (a - W(l[e]).width * s) / 2));
908
+ let b = e.length, S = (e, t, n = !1) => `--start:${(e / b).toFixed(4)}; --span:${(t / b).toFixed(4)}; --ease:${n ? y : "linear"};`;
909
+ e.forEach((r, i) => {
910
+ let o = e[i + 1];
900
911
  if (!o) return;
901
- let c = n(i.to), u = t(a) + r / 2, d = t(a + 1) - r / 2;
902
- l.appendChild(I("line", {
903
- class: s,
904
- x1: u,
905
- x2: d,
906
- y1: c,
907
- y2: c,
908
- "data-row": a + 2,
909
- style: N("--i", o.slot)
912
+ let s = n(r.to), l = t(i) + a / 2, u = t(i + 1) - a / 2;
913
+ c.appendChild(w("line", {
914
+ class: "tablechart-connector",
915
+ x1: l,
916
+ x2: u,
917
+ y1: s,
918
+ y2: s,
919
+ "data-row": i + 2,
920
+ style: `${x("--i", o.slot)}; ${S(i + 1, 1 / 3)}`
910
921
  }));
911
- }), e.forEach((e, n) => {
912
- let { top: o, length: s, down: d, inside: f } = g[n];
913
- l.appendChild(I("rect", {
914
- class: L(i, e),
915
- "data-kind": e.kind,
916
- "data-row": n + 1,
917
- "data-grow": d ? "down" : "up",
918
- x: t(n) - r / 2,
919
- y: o,
920
- width: r,
921
- height: Math.max(s, 1),
922
- style: N("--i", e.slot)
922
+ }), e.forEach((n, i) => {
923
+ let { top: u, length: d, down: f, inside: p } = h[i];
924
+ c.appendChild(w("rect", {
925
+ class: T(r, n),
926
+ "data-kind": n.kind,
927
+ "data-row": i + 1,
928
+ "data-grow": f ? "down" : "up",
929
+ x: t(i) - a / 2,
930
+ y: u,
931
+ width: a,
932
+ height: Math.max(d, 1),
933
+ style: `${x("--i", n.slot)}; ${S(i, 1, i === e.length - 1)}`
923
934
  }));
924
- let p = u[n], m = Math.min(v, (s - _) / 2), y = o + m + _ / 2, b = o + s - m - _ / 2, x = h === "center" ? o + s / 2 : h === "end" === d ? b : y;
925
- p.dataset.place = f ? "inside" : "outside", p.dataset.kind = e.kind;
926
- let S = f ? x : e.kind === "down" ? o + s + Y(p).height * c + 3 * c : o - 3 * c;
927
- z(p, t(n), S, j, a);
928
- }), l.appendChild(I("line", {
929
- class: o,
935
+ let y = l[i];
936
+ y.style.setProperty("--start", (i / b).toFixed(4)), y.style.setProperty("--span", (1 / b).toFixed(4));
937
+ let C = Math.min(v, (d - g) / 2), E = u + C + g / 2, O = u + d - C - g / 2, k = m === "center" ? u + d / 2 : m === "end" === f ? O : E;
938
+ y.dataset.place = p ? "inside" : "outside", y.dataset.kind = n.kind;
939
+ let A = p ? k : n.kind === "down" ? u + d + W(y).height * s + 3 * s : u - 3 * s;
940
+ D(y, t(i), A, _, o);
941
+ }), c.appendChild(w("line", {
942
+ class: i,
930
943
  x1: 0,
931
- x2: j,
932
- y1: p,
933
- y2: p
944
+ x2: _,
945
+ y1: f,
946
+ y2: f
934
947
  }));
935
948
  }
936
- }, Q = {
949
+ }, X = {
937
950
  enabled: !1,
938
951
  log(...t) {
939
- Q.enabled && console.log(`[${e}]`, ...t);
952
+ X.enabled && console.log(`[${e}]`, ...t);
940
953
  },
941
954
  timed(t, n, r) {
942
- if (!Q.enabled) return r();
955
+ if (!X.enabled) return r();
943
956
  let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
944
- 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;
957
+ return o > 50 ? console.warn(`[${e}] ${t} took ${o.toFixed(1)} ms for ${s} rows, more than 50 ms.`, n) : X.log(`${t} took ${o.toFixed(1)} ms for ${s} rows.`, n), a;
945
958
  }
946
- }, He = (e) => {
959
+ }, Me = (e) => {
947
960
  let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
948
961
  return {
949
962
  raw: t,
@@ -953,9 +966,9 @@ var Fe = (e) => e.map((e) => ({
953
966
  missing: !n,
954
967
  value: n ? Number.parseFloat(n[2].replace(",", ".")) : 0
955
968
  };
956
- }, Ue = (e, t = "data-i18n") => Array.from(e.querySelectorAll("tbody tr")).map((e, n) => {
957
- let r = e.querySelector("th"), i = Array.from(e.querySelectorAll("td")).map(He);
958
- return i.length || i.push(He(null)), {
969
+ }, Ne = (e, t = "data-i18n") => Array.from(e.querySelectorAll("tbody tr")).map((e, n) => {
970
+ let r = e.querySelector("th"), i = Array.from(e.querySelectorAll("td")).map(Me);
971
+ return i.length || i.push(Me(null)), {
959
972
  ...i[0],
960
973
  label: (r?.textContent || "").trim(),
961
974
  key: t && r?.getAttribute(t) || null,
@@ -964,8 +977,8 @@ var Fe = (e) => e.map((e) => ({
964
977
  isTotal: e.getAttribute("data-kind") === "total",
965
978
  slot: n
966
979
  };
967
- }), We = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), Ge = (e) => e === "dashed" || e === "dotted" ? e : null, Ke = (e, t, n = "data-i18n") => {
968
- let r = We(e), i = Math.max(1, U(t.map((e) => e.cells.length)));
980
+ }), Pe = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), Fe = (e) => e === "dashed" || e === "dotted" ? e : null, Ie = (e, t, n = "data-i18n") => {
981
+ let r = Pe(e), i = Math.max(1, N(t.map((e) => e.cells.length)));
969
982
  return Array.from({ length: i }, (e, t) => {
970
983
  let i = r[t];
971
984
  return {
@@ -973,10 +986,10 @@ var Fe = (e) => e.map((e) => ({
973
986
  key: n && i?.getAttribute(n) || null,
974
987
  focus: i?.getAttribute("data-kind") === "focus",
975
988
  marker: i?.getAttribute("data-marker") ?? null,
976
- line: Ge(i?.getAttribute("data-line"))
989
+ line: Fe(i?.getAttribute("data-line"))
977
990
  };
978
991
  });
979
- }, qe = (t, n) => {
992
+ }, Le = (t, n) => {
980
993
  if (!n) return;
981
994
  let r = /* @__PURE__ */ new Map();
982
995
  for (let i of t) {
@@ -984,22 +997,22 @@ var Fe = (e) => e.map((e) => ({
984
997
  if (!t) continue;
985
998
  if (r.has(t)) {
986
999
  let n = r.get(t) + 1;
987
- r.set(t, n), console.warn(`[${e}] Two charts on the page have data-chart-keys="${t}". If two charts use the same keys, they get the same translations. This one uses "${t}-${n}".`), t = `${t}-${n}`;
1000
+ r.set(t, n), console.warn(`[${e}] Two charts have data-chart-keys="${t}", so this one uses "${t}-${n}" to keep their translations apart.`), t = `${t}-${n}`;
988
1001
  } else r.set(t, 1);
989
1002
  i.querySelectorAll("tbody th").forEach((e, r) => {
990
1003
  e.getAttribute(n) || e.setAttribute(n, `${t}-row${r + 1}`);
991
1004
  });
992
- let a = We(i);
1005
+ let a = Pe(i);
993
1006
  a.length > 1 && a.forEach((e, r) => {
994
1007
  e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
995
- }), Q?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
1008
+ }), X?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
996
1009
  }
997
- }, Je = [
1010
+ }, Re = [
998
1011
  "axis-break",
999
1012
  "trend",
1000
1013
  "bracket"
1001
- ], Ye = (e) => {
1002
- 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) => Je.includes(e.getAttribute("data-annotation") ?? "")), a = (e) => e.hasAttribute("data-fragment"), o = n.map((e) => Array.from(e.querySelectorAll(":scope > td")));
1014
+ ], ze = (e) => {
1015
+ 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) => Re.includes(e.getAttribute("data-annotation") ?? "")), a = (e) => e.hasAttribute("data-fragment"), o = n.map((e) => Array.from(e.querySelectorAll(":scope > td")));
1003
1016
  if (!t && !n.some(a) && !r.some(a) && !o.flat().some(a) && !i.some(a)) return null;
1004
1017
  let s = [], c = /* @__PURE__ */ new Map(), l = [], u = (e) => {
1005
1018
  let t = e === null ? void 0 : c.get(e);
@@ -1057,7 +1070,7 @@ var Fe = (e) => e.map((e) => ({
1057
1070
  count: s.length,
1058
1071
  indexes: s
1059
1072
  };
1060
- }, Xe = (e) => {
1073
+ }, Be = (e) => {
1061
1074
  let t = e.plan;
1062
1075
  if (!t) return;
1063
1076
  let n = (t) => t === null || e.step - t >= 1;
@@ -1068,66 +1081,90 @@ var Fe = (e) => e.map((e) => ({
1068
1081
  let u = r.hasAttribute("data-flat") ? (l - e + 1) / (i - e + 1) : i > e ? Math.max(0, l - e) / (i - e) : 0;
1069
1082
  r.style.setProperty("--reveal", String(u));
1070
1083
  }
1071
- }, Ze = (e) => {
1084
+ }, Ve = (e) => {
1072
1085
  let t = e.plan;
1073
1086
  if (!t) return;
1074
- let n = t.rows.length - 1, r = (e) => t.series.map((n, r) => t.cells[e]?.[r]?.step ?? n.step ?? t.rows[e]?.step ?? null), i = (e) => {
1075
- let t = r(e);
1087
+ 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) => {
1088
+ let t = i(e);
1076
1089
  return t.some((e) => e === null) ? null : Math.min(...t);
1077
- }, a = new Set(e.totals), o = (e, t, n, r) => {
1090
+ }, o = new Set(e.totals), c = (e, t, n, r) => {
1078
1091
  e.style.setProperty(n, String(r)), e.style.removeProperty("--d"), t === null ? e.style.removeProperty("--step") : e.style.setProperty("--step", String(t));
1079
1092
  };
1080
- for (let s of e.figure.querySelectorAll("[data-row], [data-series], [data-note]")) {
1081
- if (s.closest("table, .tablechart-controls") || s.hasAttribute("data-from")) continue;
1082
- let e = Number(s.dataset.note);
1093
+ for (let r of e.figure.querySelectorAll("[data-row], [data-series], [data-note]")) {
1094
+ if (r.closest("table, .tablechart-controls") || r.hasAttribute("data-from")) continue;
1095
+ let e = Number(r.dataset.note);
1083
1096
  if (e > 0) {
1084
1097
  let n = t.notes[e - 1];
1085
- n && o(s, n.step, "--after", n.after);
1098
+ n && c(r, n.step, "--after", n.after);
1086
1099
  continue;
1087
1100
  }
1088
- let c = s.dataset.row ? Number(s.dataset.row) - 1 : n;
1089
- if (s.classList.contains("tablechart-connector")) {
1090
- let e = t.rows[c - 1], n = t.rows[c];
1101
+ let s = r.dataset.row ? Number(r.dataset.row) - 1 : n;
1102
+ if (r.classList.contains("tablechart-connector")) {
1103
+ let e = t.rows[s - 1], n = t.rows[s];
1091
1104
  if (e && n) {
1092
1105
  let t = (e.step ?? -1) > (n.step ?? -1);
1093
- o(s, t ? e.step : n.step, "--i", t ? e.slot + 1 : n.slot);
1106
+ c(r, t ? e.step : n.step, "--i", t ? e.slot + 1 : n.slot);
1094
1107
  }
1095
1108
  continue;
1096
1109
  }
1097
- if (a.has(s)) {
1098
- let e = r(c).filter((e) => e !== null);
1099
- o(s, e.length ? Math.max(...e) : null, "--i", t.rows[c]?.slot ?? 0);
1110
+ if (o.has(r)) {
1111
+ let e = i(s).filter((e) => e !== null);
1112
+ c(r, e.length ? Math.max(...e) : null, "--i", t.rows[s]?.slot ?? 0);
1100
1113
  continue;
1101
1114
  }
1102
- if (s.hasAttribute("data-stack")) {
1103
- o(s, i(c), "--i", t.rows[c]?.slot ?? 0);
1115
+ if (r.hasAttribute("data-stack")) {
1116
+ c(r, a(s), "--i", t.rows[s]?.slot ?? 0);
1104
1117
  continue;
1105
1118
  }
1106
- let l = s.dataset.series ? Number(s.dataset.series) - 1 : 0, u = s.dataset.series ? t.series[l] : void 0;
1107
- if (s.classList.contains("tablechart-piece")) {
1108
- let e = r(c)[l] ?? null, n = t.cells[c]?.[l];
1109
- o(s, e === i(c) ? null : e, "--i", n && n.step !== null ? n.slot : c);
1119
+ let l = r.dataset.series ? Number(r.dataset.series) - 1 : 0, u = r.dataset.series ? t.series[l] : void 0;
1120
+ if (r.classList.contains("tablechart-piece")) {
1121
+ let e = i(s)[l] ?? null, n = t.cells[s]?.[l];
1122
+ c(r, e === a(s) ? null : e, "--i", n && n.step !== null ? n.slot : s);
1110
1123
  continue;
1111
1124
  }
1112
- if (s.dataset.place === "legend") {
1125
+ if (r.dataset.place === "legend") {
1113
1126
  let e = Math.min(...t.cells.map((e) => e[l]?.step ?? Infinity));
1114
- o(s, u?.step ?? (Number.isFinite(e) ? e : null), "--i", 0);
1127
+ c(r, u?.step ?? (Number.isFinite(e) ? e : null), "--i", 0);
1115
1128
  continue;
1116
1129
  }
1117
- let d = t.cells[c]?.[l];
1118
- d && d.step !== null ? o(s, d.step, "--i", d.slot) : u && u.step !== null ? o(s, u.step, "--i", c) : t.rows[c] && o(s, t.rows[c].step, "--i", t.rows[c].slot);
1130
+ let d = t.cells[s]?.[l];
1131
+ 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);
1119
1132
  }
1120
- let s = e.figure.querySelector(`.${x}`);
1121
- if (s) {
1133
+ let l = e.figure.querySelector(`.${u}`);
1134
+ if (l) {
1122
1135
  let e = [...t.rows, ...t.cells.flat()].map((e) => e.step ?? -1), n = Math.max(-1, ...e);
1123
- n < 0 ? o(s, null, "--i", 0) : o(s, n, "--i", e.filter((e) => e === n).length);
1136
+ n < 0 ? c(l, null, "--i", 0) : c(l, n, "--i", e.filter((e) => e === n).length);
1124
1137
  }
1125
- Xe(e);
1126
- }, $ = (e, t, n = !1) => {
1138
+ let d = [...t.rows, ...t.cells.flat()].map((e) => e.slot + 1), f = t.series.some((e) => e.step !== null) ? t.rows.length : 1;
1139
+ e.plot.style.setProperty("--count", String(Math.max(f, ...d)));
1140
+ let p = e.figure.querySelectorAll(`.${r}`), m = p[p.length - 1];
1141
+ if (e.figure.dataset.chart === "waterfall" && m?.dataset.kind === "total" && p.length > 1) {
1142
+ let e = Number(m.dataset.row) - 1;
1143
+ (t.rows[e - 1]?.step ?? -1) > (t.rows[e]?.step ?? -1) && (m.dataset.grow = m.dataset.grow === "down" ? "up" : "down");
1144
+ }
1145
+ let h = Array.from(e.figure.querySelectorAll(`.${s}`));
1146
+ if (h.length) {
1147
+ 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 = [];
1148
+ for (let e = 0; e < r; e++) {
1149
+ let n = h[(i + e) % r], o = a[a.length - 1];
1150
+ o && t(o[0]) === t(n) ? o.push(n) : a.push([n]);
1151
+ }
1152
+ let o = /* @__PURE__ */ new Map();
1153
+ for (let e of a) {
1154
+ let t = e.reduce((e, t) => e + n(t), 0), r = 0;
1155
+ for (let i of e) o.set(i.dataset.row ?? "", b(r, n(i), t)), r += n(i);
1156
+ }
1157
+ for (let t of e.figure.querySelectorAll("[data-row]")) {
1158
+ let e = o.get(t.dataset.row ?? "");
1159
+ 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));
1160
+ }
1161
+ }
1162
+ Be(e);
1163
+ }, He = (e, t, n = !1) => {
1127
1164
  let r = e.plan;
1128
1165
  if (!r) return;
1129
1166
  let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
1130
- e.step = i, e.figure.style.setProperty("--tablechart-step", String(i)), Xe(e);
1167
+ e.step = i, e.figure.style.setProperty("--_step", String(i)), Be(e);
1131
1168
  let [o, s] = e.controls?.querySelectorAll("button") ?? [];
1132
1169
  o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
1133
1170
  bubbles: !0,
@@ -1136,25 +1173,25 @@ var Fe = (e) => e.map((e) => ({
1136
1173
  steps: r.count
1137
1174
  }
1138
1175
  }));
1139
- }, Qe = (e, t, n) => {
1176
+ }, Ue = (e, t, n) => {
1140
1177
  let r = document.createElement("div");
1141
- r.className = A;
1178
+ r.className = "tablechart-controls";
1142
1179
  let i = (r) => {
1143
1180
  let i = document.createElement("button");
1144
1181
  i.type = "button", i.className = `tablechart-${r}`, i.dataset.go = r;
1145
1182
  let a = document.createElement("span");
1146
1183
  a.className = "tablechart-control-icon", a.setAttribute("aria-hidden", "true");
1147
- let o = I("svg", {
1184
+ let o = w("svg", {
1148
1185
  viewBox: "0 0 16 16",
1149
1186
  focusable: "false"
1150
1187
  });
1151
- o.appendChild(I("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
1188
+ o.appendChild(w("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
1152
1189
  let s = document.createElement("span");
1153
1190
  s.className = "tablechart-control-label", s.textContent = e[r];
1154
1191
  let c = t[r];
1155
1192
  c && n && s.setAttribute(n, c);
1156
1193
  let l = document.createElement("span");
1157
- return l.className = E, l.textContent = e.hint, t.hint && n && l.setAttribute(n, t.hint), i.append(...r === "next" ? [
1194
+ return l.className = p, l.textContent = e.hint, t.hint && n && l.setAttribute(n, t.hint), i.append(...r === "next" ? [
1158
1195
  s,
1159
1196
  l,
1160
1197
  a
@@ -1165,35 +1202,170 @@ var Fe = (e) => e.map((e) => ({
1165
1202
  ]), i;
1166
1203
  };
1167
1204
  return r.append(i("previous"), i("next")), r;
1168
- }, $e = {
1169
- area: Re,
1170
- bar: Ce,
1171
- column: we,
1172
- donut: De,
1173
- line: Le,
1174
- waterfall: Ve
1175
- }, et = {
1176
- "axis-break": te,
1177
- trend: le,
1178
- bracket: J
1179
- }, tt = Object.keys(et), nt = (e) => {
1205
+ }, We = (e, t, n, r = 10, i = 8, a = 12) => {
1206
+ let { offsetWidth: o, offsetHeight: s } = e, { clientWidth: c, clientHeight: l } = document.documentElement, u = n.top - i, d = l - n.bottom - i, f = s + r <= u ? !0 : s + r <= d ? !1 : u >= d, p = f ? n.top - r - s : n.bottom + r, m = n.left + n.width / 2, h = Math.max(i, Math.min(m - o / 2, c - o - i));
1207
+ e.style.left = `${h}px`, e.style.top = `${Math.max(i, Math.min(p, l - s - i))}px`, e.dataset.side = f ? "top" : "bottom", t.style.left = `${Math.max(a, Math.min(m - h, o - a))}px`;
1208
+ }, Ge = "tablechart-tooltip", Ke = [
1209
+ "--tablechart-surface",
1210
+ "--tablechart-tooltip-surface",
1211
+ "--tablechart-tooltip-color",
1212
+ "--tablechart-tooltip-border",
1213
+ "--tablechart-tooltip-radius",
1214
+ "--tablechart-tooltip-padding",
1215
+ "--tablechart-tooltip-shadow"
1216
+ ], Z = null, qe, Je, Q = null, Ye = null, Xe = 0, $ = () => {
1217
+ clearTimeout(Xe), Z && Q && (Z.hidden = !0, Q = null, Ye = null);
1218
+ }, Ze = () => {
1219
+ clearTimeout(Xe), Xe = window.setTimeout($, 120);
1220
+ }, Qe = () => {
1221
+ let e = document.createElement("div");
1222
+ return e.className = Ge, e.setAttribute("aria-hidden", "true"), e.hidden = !0, qe = document.createElement("div"), Je = document.createElement("div"), Je.className = `${Ge}-arrow`, e.append(qe, Je), document.body.append(e), e.addEventListener("pointerenter", () => clearTimeout(Xe)), e.addEventListener("pointerleave", (e) => e.pointerType === "mouse" && Ze()), document.addEventListener("keydown", (e) => e.key === "Escape" && $()), document.addEventListener("pointerdown", (t) => {
1223
+ let n = t.target;
1224
+ Q && !Q.plot.contains(n) && !e.contains(n) && $();
1225
+ }), window.addEventListener("scroll", $, {
1226
+ capture: !0,
1227
+ passive: !0
1228
+ }), window.addEventListener("resize", $), e;
1229
+ }, $e = (e, t) => {
1230
+ let n = t ? t.style.getPropertyValue("--step") : "x";
1231
+ return n === "" || Number(n) < e.step;
1232
+ }, et = (e, t) => {
1233
+ let n = e.svg.querySelector(`[data-series="${t + 1}"]:not(.tablechart-hole)`);
1234
+ if (!n) return;
1235
+ let r = getComputedStyle(n);
1236
+ return r.fill && r.fill !== "none" ? r.fill : r.stroke;
1237
+ }, tt = (e, t, n) => {
1238
+ let r = e.series.length > 1, i = [];
1239
+ for (let [n, a] of e.seriesValues.entries()) {
1240
+ if (!$e(e, a[t])) continue;
1241
+ let o = r ? e.figure.querySelector(`.tablechart-name[data-series="${n + 1}"]`) : null;
1242
+ i.push({
1243
+ name: r ? o?.textContent ?? e.series[n].name : "",
1244
+ value: a[t].textContent ?? "",
1245
+ colour: r ? et(e, n) : void 0,
1246
+ sample: o ? {
1247
+ marker: o.dataset.marker ?? null,
1248
+ open: o.hasAttribute("data-open"),
1249
+ line: o.dataset.line ?? null,
1250
+ box: o.dataset.swatch === "box"
1251
+ } : void 0
1252
+ });
1253
+ }
1254
+ let a = e.totals[t];
1255
+ return i.length > 1 && $e(e, a) && i.push({
1256
+ name: n.totallabel,
1257
+ value: a.textContent ?? ""
1258
+ }), i;
1259
+ }, nt = (e, t) => {
1260
+ if (e.type.centre && e.values[t]) return e.values[t].getBoundingClientRect();
1261
+ let n = e.svg.querySelectorAll(`[data-row="${t + 1}"]:not(.tablechart-connector, .tablechart-leader)`), r = null;
1262
+ for (let e of n) {
1263
+ let t = e.getBoundingClientRect();
1264
+ (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);
1265
+ }
1266
+ if (r) return r;
1267
+ let i = e.plot.getBoundingClientRect(), [a, o, s, c] = e.rowBox?.(t) ?? [
1268
+ 0,
1269
+ 0,
1270
+ 100,
1271
+ 100
1272
+ ];
1273
+ return new DOMRect(i.left + i.width * a / 100, i.top + i.height * o / 100, i.width * s / 100, i.height * c / 100);
1274
+ }, rt = (e, t, n) => {
1275
+ if (clearTimeout(Xe), Q === e && Ye === t) return;
1276
+ let r = (e.type.tooltip ?? tt)(e, t, n);
1277
+ if (!r.length) return $();
1278
+ Q && Q !== e && $(), Z ?? (Z = Qe());
1279
+ let i = (e, t, n, r = !1, i) => {
1280
+ let a = document.createElement("div");
1281
+ if (a.className = `${Ge}-line`, n) {
1282
+ let e = document.createElement("span");
1283
+ e.className = `${Ge}-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);
1284
+ }
1285
+ let o = document.createElement("span");
1286
+ if (o.className = `${Ge}-${r ? "title" : "name"}`, o.textContent = e, a.append(o), t) {
1287
+ e && o.append(":");
1288
+ let n = document.createElement("span");
1289
+ n.className = `${Ge}-value`, n.textContent = t, a.append(n);
1290
+ }
1291
+ return a;
1292
+ }, a = e.categories[t]?.textContent ?? e.rows[t].label, o = r.length === 1 && !r[0].name;
1293
+ qe.replaceChildren(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)));
1294
+ let s = getComputedStyle(e.figure);
1295
+ for (let e of Ke) {
1296
+ let t = s.getPropertyValue(e).trim();
1297
+ t ? Z.style.setProperty(e, t) : Z.style.removeProperty(e);
1298
+ }
1299
+ Z.style.setProperty("--_color", s.color), Z.style.colorScheme = s.colorScheme, Z.style.fontFamily = s.fontFamily, Z.style.fontSize = s.fontSize, Q = e, Ye = t, Z.hidden = !1, Z.style.left = "0px", We(Z, Je, nt(e, t));
1300
+ }, it = (e, t, n = !1) => {
1301
+ let { plot: r } = e;
1302
+ r.setAttribute("data-hover", "");
1303
+ let i = (t) => {
1304
+ if (e.rowAt) {
1305
+ let n = r.getBoundingClientRect(), i = n.width / r.offsetWidth || 1;
1306
+ return e.rowAt((t.clientX - n.left) / i, (t.clientY - n.top) / i);
1307
+ }
1308
+ let n = t.target.closest?.("[data-row]")?.getAttribute("data-row");
1309
+ return n ? Number(n) - 1 : null;
1310
+ }, a = /* @__PURE__ */ new Set(), o = (e) => {
1311
+ for (let t of a) if (!t.isConnected) a.delete(t);
1312
+ else if (t.getAttribute("data-row") === String(e + 1)) return !0;
1313
+ return !1;
1314
+ }, s = null, c = (a) => {
1315
+ if (!r.classList.contains("is-placed") || !e.figure.classList.contains("is-shown")) return;
1316
+ if (n && !e.figure.hasAttribute("data-left-out")) return Q === e ? $() : void 0;
1317
+ let c = i(a);
1318
+ if (s = c, c === null || o(c)) return Q === e ? Ze() : void 0;
1319
+ rt(e, c, t);
1320
+ }, l = (t) => {
1321
+ let n = t.target;
1322
+ return e.svg.contains(n) && n.hasAttribute("data-row") ? n : null;
1323
+ };
1324
+ e.svg.addEventListener("transitionrun", (e) => {
1325
+ let t = l(e);
1326
+ t && a.add(t);
1327
+ });
1328
+ let u = (n) => {
1329
+ let r = l(n);
1330
+ if (!r) return;
1331
+ a.delete(r);
1332
+ let i = Number(r.getAttribute("data-row")) - 1;
1333
+ s === i && !o(i) && rt(e, i, t);
1334
+ };
1335
+ e.svg.addEventListener("transitionend", u), e.svg.addEventListener("transitioncancel", u), r.addEventListener("pointermove", c), r.addEventListener("pointerdown", c), r.addEventListener("pointerleave", (t) => {
1336
+ t.pointerType === "mouse" && (s = null, Q === e && Ze());
1337
+ });
1338
+ }, at = (e) => {
1339
+ Q === e && $();
1340
+ }, ot = {
1341
+ area: Oe,
1342
+ bar: pe,
1343
+ column: me,
1344
+ donut: _e,
1345
+ line: De,
1346
+ waterfall: je
1347
+ }, st = {
1348
+ "axis-break": M,
1349
+ trend: te,
1350
+ bracket: H
1351
+ }, ct = Object.keys(st), lt = (e) => {
1180
1352
  let t = "";
1181
1353
  for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
1182
1354
  return t.trim();
1183
- }, rt = [
1355
+ }, ut = [
1184
1356
  "straight",
1185
1357
  "step",
1186
1358
  "smooth"
1187
- ], it = (e, t) => {
1359
+ ], dt = (e, t) => {
1188
1360
  let n = e.dataset.chartShape;
1189
- return n && rt.includes(n) ? n : rt.includes(t.shape) ? t.shape : "straight";
1190
- }, at = (e) => {
1361
+ return n && ut.includes(n) ? n : ut.includes(t.shape) ? t.shape : "straight";
1362
+ }, ft = (e) => {
1191
1363
  for (let t of e.querySelectorAll("br")) {
1192
- if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(nt(t))) continue;
1364
+ if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(lt(t))) continue;
1193
1365
  let e = document.createElement("span");
1194
- e.className = E, e.textContent = ". ", t.before(e);
1366
+ e.className = p, e.textContent = ". ", t.before(e);
1195
1367
  }
1196
- }, ot = (e, t, n) => {
1368
+ }, pt = (e, t, n) => {
1197
1369
  let r = e.querySelector("table");
1198
1370
  if (!r) return null;
1199
1371
  let i = r.querySelector("tfoot [data-chart-total]");
@@ -1204,153 +1376,174 @@ var Fe = (e) => e.map((e) => ({
1204
1376
  s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
1205
1377
  let c = a.insertCell();
1206
1378
  return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
1207
- }, st = 0, ct = (e) => {
1379
+ }, mt = 0, ht = (e) => {
1208
1380
  let t = e.querySelector(":scope > figcaption");
1209
1381
  if (!t) return;
1210
- at(t);
1382
+ ft(t);
1211
1383
  let n = (e) => e.hasAttribute("aria-label") || e.hasAttribute("aria-labelledby"), r = (e) => {
1212
- t.id || (t.id = `tablechart-caption-${++st}`), e.setAttribute("aria-labelledby", t.id);
1384
+ t.id || (t.id = `tablechart-caption-${++mt}`), e.setAttribute("aria-labelledby", t.id);
1213
1385
  };
1214
1386
  e.tagName === "FIGURE" && !n(e) && r(e);
1215
1387
  let i = e.querySelector("table");
1216
1388
  i && !n(i) && !i.querySelector(":scope > caption") && r(i);
1217
- }, lt = (i, a, o = null) => {
1218
- let s = o ?? (i.getAttribute("data-chart") || "column"), c = $e[s];
1219
- if (!c) return console.warn(`[${e}] Unknown chart type "${s}". Known types: ${Object.keys($e).join(", ")}.`), i.setAttribute("data-chart-empty", ""), null;
1220
- let l = Ue(i, a.langattribute);
1221
- if (!l.length) return console.warn(`[${e}] A chart has no rows in its table, so there is nothing to draw.`), i.setAttribute("data-chart-empty", ""), null;
1222
- ct(i);
1223
- let u = Ke(i, l, a.langattribute);
1224
- u.length > 1 && !c.series && (console.warn(`[${e}] A ${s} chart draws one series; only the first of the table's ${u.length} value columns is used.`), u = u.slice(0, 1));
1225
- let d = u.length > 1;
1226
- d && i.style.setProperty("--tablechart-series-count", String(u.length));
1227
- let f = i.hasAttribute("data-chart-stack");
1228
- f && !c.stackable && console.warn(`[${e}] A ${s} chart cannot be stacked.`);
1229
- let p = f && !!c.stackable && d, m = document.createElement("div");
1230
- m.className = t, m.setAttribute("aria-hidden", "true");
1231
- let h = I("svg", {
1389
+ }, gt = (r, i, a = null) => {
1390
+ let o = a ?? (r.getAttribute("data-chart") || "column"), s = ot[o];
1391
+ if (!s) return console.warn(`[${e}] Unknown chart type "${o}". Known types: ${Object.keys(ot).join(", ")}.`), r.setAttribute("data-chart-empty", ""), null;
1392
+ let l = Ne(r, i.langattribute);
1393
+ if (!l.length) return console.warn(`[${e}] A chart has no rows in its table, so there is nothing to draw.`), r.setAttribute("data-chart-empty", ""), null;
1394
+ ht(r);
1395
+ let d = Ie(r, l, i.langattribute);
1396
+ d.length > 1 && !s.series && (console.warn(`[${e}] A ${o} chart uses only the first of its ${d.length} value columns.`), d = d.slice(0, 1));
1397
+ let f = d.length > 1;
1398
+ f && r.style.setProperty("--_series-count", String(d.length));
1399
+ let p = r.hasAttribute("data-chart-stack");
1400
+ p && !s.stackable && console.warn(`[${e}] A ${o} chart cannot be stacked.`);
1401
+ let m = p && !!s.stackable && f, h = document.createElement("div");
1402
+ h.className = t, h.setAttribute("aria-hidden", "true");
1403
+ let g = w("svg", {
1232
1404
  role: "presentation",
1233
1405
  focusable: "false"
1234
1406
  });
1235
- m.appendChild(h), i.appendChild(m);
1236
- let g = c.centre ? l.filter((e) => !e.isTotal) : l, y = Math.max(0, U(g.flatMap((e) => e.cells.slice(0, u.length).map((e) => ne(e.number))))), b = u.map((e, t) => l.map((e, n) => {
1237
- let i = e.cells[t] ?? e.cells[0], a = R(r, m);
1238
- 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)), a.dataset.row = String(n + 1), a.style.setProperty("--i", String(e.slot)), a;
1239
- })), S = b[0], C = p && c.totals ? l.map((e, t) => {
1240
- let n = R(r, m);
1241
- n.classList.add(...e.classes), n.dataset.kind = "total", n.dataset.row = String(t + 1), n.dataset.value = String(me(e, u.length));
1407
+ h.appendChild(g), r.appendChild(h);
1408
+ let _ = s.centre ? l.filter((e) => !e.isTotal) : l, v = Math.max(0, N(_.flatMap((e) => e.cells.slice(0, d.length).map((e) => P(e.number))))), y = d.map((e, t) => l.map((e, r) => {
1409
+ let i = e.cells[t] ?? e.cells[0], a = E(n, h);
1410
+ 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)), a.dataset.row = String(r + 1), a.style.setProperty("--i", String(e.slot)), a;
1411
+ })), b = y[0], x = m && s.totals ? l.map((e, t) => {
1412
+ let r = E(n, h);
1413
+ r.classList.add(...e.classes), r.dataset.kind = "total", r.dataset.row = String(t + 1), r.dataset.value = String(ae(e, d.length));
1242
1414
  let i = e.cells[0];
1243
- return i.prefix && (n.dataset.prefix = i.prefix), i.suffix && (n.dataset.suffix = i.suffix), n.style.setProperty("--i", String(e.slot)), n;
1244
- }) : [], w = l[l.length - 1], T = u.some((e) => e.focus), E = i.getAttribute("data-chart-legend"), D = d && (E === null ? a.legend || c.legend !== void 0 : E !== "false") ? document.createElement("div") : null;
1245
- D && (D.className = v, D.setAttribute("aria-hidden", "true"), D.inert = !0);
1246
- let O = d ? u.map((e, t) => {
1247
- let n = R(_, D ?? m);
1415
+ return i.prefix && (r.dataset.prefix = i.prefix), i.suffix && (r.dataset.suffix = i.suffix), r.style.setProperty("--i", String(e.slot)), r;
1416
+ }) : [], S = l[l.length - 1], C = d.some((e) => e.focus), T = r.getAttribute("data-chart-legend"), D = f && (T === null ? i.legend || s.legend !== void 0 : T !== "false") ? document.createElement("div") : null;
1417
+ D && (D.className = c, D.setAttribute("aria-hidden", "true"), D.inert = !0);
1418
+ let O = f ? d.map((e, t) => {
1419
+ let n = E("tablechart-name", D ?? h);
1248
1420
  D && (n.dataset.place = "legend");
1249
- let r = c.legend ?? c.swatch;
1250
- if (r && (n.dataset.swatch = r), n.textContent = e.name, !r && it(i, a) !== "step") {
1251
- let e = ke(u, t);
1421
+ let a = s.legend ?? s.swatch;
1422
+ if (a && (n.dataset.swatch = a), n.textContent = e.name, !a && dt(r, i) !== "step") {
1423
+ let e = ye(d, t);
1252
1424
  n.dataset.marker = e.shape, n.toggleAttribute("data-open", e.open);
1253
1425
  }
1254
- return e.line && !r && (n.dataset.line = e.line), e.key && a.langattribute && n.setAttribute(a.langattribute, e.key), n.dataset.series = String(t + 1), n.style.setProperty("--n", String(t)), n.style.setProperty("--palette", `var(--tablechart-color-${t + 1})`), n.style.setProperty("--m", T && !e.focus ? "1" : "0"), n.style.setProperty("--i", String(w.slot)), n;
1255
- }) : [], k = c.centre ? R(x, m) : null;
1426
+ 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", C && !e.focus ? "1" : "0"), n.style.setProperty("--i", String(S.slot)), n;
1427
+ }) : [], k = s.centre ? E(u, h) : null;
1256
1428
  if (k) {
1257
1429
  let e = l.find((e) => e.isTotal), t = e ? e.value : l.reduce((e, t) => e + Math.abs(t.value), 0);
1258
- k.dataset.value = String(t), e && (k.dataset.decimals = String(ne(e.number)));
1430
+ k.dataset.value = String(t), e && (k.dataset.decimals = String(P(e.number)));
1259
1431
  }
1260
- let A = k && !l.some((e) => e.isTotal) ? ot(i, k, a) : null, j = c.categories === "beside", M = document.createElement("div");
1261
- M.className = n, M.setAttribute("aria-hidden", "true"), M.inert = !0, j ? M.dataset.place = "beside" : c.centre && (M.dataset.place = "key"), M.style.setProperty("--tablechart-columns", String(l.length));
1262
- let N = 0;
1432
+ let A = k && !l.some((e) => e.isTotal) ? pt(r, k, i) : null, j = s.categories === "beside", M = document.createElement("div");
1433
+ M.className = "tablechart-categories", M.setAttribute("aria-hidden", "true"), M.inert = !0, j ? M.dataset.place = "beside" : s.centre && (M.dataset.place = "key"), M.style.setProperty("--_columns", String(l.length));
1434
+ let F = 0;
1263
1435
  for (let [e, t] of l.entries()) {
1264
1436
  let n = document.createElement("span");
1265
- n.classList.add(...t.classes), n.textContent = t.label, t.key && a.langattribute && n.setAttribute(a.langattribute, t.key), c.centre && (n.dataset.kind = t.isTotal ? "total" : "slice", t.isTotal || (n.dataset.slice = String(N + 1), n.style.setProperty("--n", String(N)), n.style.setProperty("--palette", `var(--tablechart-color-${N + 1})`), N += 1)), n.style.setProperty("--i", String(t.slot)), n.dataset.row = String(e + 1), M.appendChild(n);
1437
+ 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(F + 1), n.style.setProperty("--n", String(F)), n.style.setProperty("--palette", `var(--tablechart-color-${F + 1})`), F += 1)), n.style.setProperty("--i", String(t.slot)), n.dataset.row = String(e + 1), M.appendChild(n);
1266
1438
  }
1267
- (j ? m : i).appendChild(M), D && i.appendChild(D);
1268
- let P = a.animate ? Ye(i) : null;
1269
- P && (i.setAttribute("data-steps", ""), i.setAttribute("data-chart-animate", "across"));
1270
- let F = i.getAttribute("data-chart-keys"), L = P && a.controls ? Qe({
1271
- previous: a.previouslabel,
1272
- next: a.nextlabel,
1273
- hint: a.stephint
1439
+ (j ? h : r).appendChild(M), D && r.appendChild(D);
1440
+ let I = i.animate ? ze(r) : null;
1441
+ I && r.setAttribute("data-steps", "");
1442
+ let L = r.getAttribute("data-chart-keys"), R = I && i.controls ? Ue({
1443
+ previous: i.previouslabel,
1444
+ next: i.nextlabel,
1445
+ hint: i.stephint
1274
1446
  }, {
1275
- previous: F && `${F}-previous`,
1276
- next: F && `${F}-next`,
1277
- hint: F && `${F}-step`
1278
- }, a.langattribute) : null;
1279
- L && i.appendChild(L);
1280
- let z = Array.from(i.querySelectorAll("[data-annotation]")).map((t) => {
1281
- let n = t.getAttribute("data-annotation"), r = et[n];
1282
- if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(et).join(", ")}.`), null;
1283
- let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= u.length ? i - 1 : 0;
1284
- return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which the chart does not have; it reads the first.`), {
1447
+ previous: L && `${L}-previous`,
1448
+ next: L && `${L}-next`,
1449
+ hint: L && `${L}-step`
1450
+ }, i.langattribute) : null;
1451
+ R && r.appendChild(R);
1452
+ let z = r.getAttribute("data-chart-table"), B = z && vt.includes(z) ? z : i.table;
1453
+ if (B === "never") r.removeAttribute("data-table");
1454
+ else {
1455
+ r.setAttribute("data-table", B);
1456
+ let e = r.querySelector(":scope > table");
1457
+ e && r.append(e);
1458
+ }
1459
+ let V = Array.from(r.querySelectorAll("[data-annotation]")).map((t) => {
1460
+ let n = t.getAttribute("data-annotation"), r = st[n];
1461
+ if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(st).join(", ")}.`), null;
1462
+ let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= d.length ? i - 1 : 0;
1463
+ return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which is not there; it reads line 1.`), {
1285
1464
  spec: t,
1286
1465
  type: r,
1287
- badge: r.create(t, m),
1466
+ badge: r.create(t, h),
1288
1467
  series: a,
1289
1468
  after: l.length
1290
1469
  };
1291
1470
  }).filter((e) => e !== null);
1292
- if (a.animate) {
1293
- let e = i.getAttribute("data-chart-animate"), t = (e === "up" || e === "across" ? e : a.animate) === "up" && (s === "line" || s === "area");
1294
- i.setAttribute("data-animate", t ? "up" : "");
1295
- }
1296
- let B = {
1297
- figure: i,
1298
- plot: m,
1299
- svg: h,
1471
+ i.animate && r.setAttribute("data-animate", bt(r, o, i, !!I));
1472
+ let H = {
1473
+ figure: r,
1474
+ plot: h,
1475
+ svg: g,
1300
1476
  rows: l,
1301
- decimals: y,
1302
- type: c,
1303
- values: S,
1304
- series: u,
1305
- seriesValues: b,
1477
+ decimals: v,
1478
+ type: s,
1479
+ values: b,
1480
+ series: d,
1481
+ seriesValues: y,
1306
1482
  names: D ? [] : O,
1307
1483
  categories: Array.from(M.children),
1308
1484
  centre: k,
1309
- stacked: p,
1310
- totals: C,
1485
+ stacked: m,
1486
+ totals: x,
1311
1487
  totalCell: A,
1312
1488
  rowAt: null,
1313
1489
  rowBox: null,
1314
- annotations: z,
1490
+ annotations: V,
1315
1491
  checks: [],
1316
- plan: P,
1492
+ plan: I,
1317
1493
  step: 0,
1318
- controls: L
1494
+ controls: R
1319
1495
  };
1320
- return L?.addEventListener("click", (e) => {
1496
+ R?.addEventListener("click", (e) => {
1321
1497
  let t = e.target.closest("button")?.dataset.go;
1322
- t && $(B, B.step + (t === "next" ? 1 : -1));
1323
- }), $(B, 0, !0), a.hover && i.getAttribute("data-chart-hover") !== "false" && _t(B), mt(B, a), B;
1324
- }, ut = (e) => {
1325
- let t = getComputedStyle(e).getPropertyValue("--tablechart-inside-align").trim();
1326
- return t === "start" || t === "center" || t === "end" ? t : null;
1327
- }, dt = (e, t, n, r) => {
1498
+ t && He(H, H.step + (t === "next" ? 1 : -1));
1499
+ }), He(H, 0, !0);
1500
+ let U = r.getAttribute("data-chart-tooltip") ?? r.getAttribute("data-chart-hover"), ee = U === "false" ? !1 : U === "auto" ? "auto" : U !== null || i.hover !== !1 && i.tooltip;
1501
+ return ee && it(H, i, ee === "auto"), Tt(H, i), H;
1502
+ }, _t = {
1503
+ grow: "grow",
1504
+ sweep: "sweep"
1505
+ }, vt = [
1506
+ "never",
1507
+ "auto",
1508
+ "print",
1509
+ "always"
1510
+ ], yt = {
1511
+ ..._t,
1512
+ up: "grow",
1513
+ across: "sweep"
1514
+ }, bt = (e, t, n, r) => {
1515
+ let i = t === "line" || t === "area", a = i ? yt : _t, o = a[e.getAttribute("data-chart-animate") ?? ""] ?? a[String(n.animate)];
1516
+ return i ? r ? "sweep" : o ?? "sweep" : t === "donut" || t === "waterfall" ? o ?? "grow" : "grow";
1517
+ }, xt = (e) => {
1518
+ let t = getComputedStyle(e), n = (t.getPropertyValue("--tablechart-value-align") || t.getPropertyValue("--tablechart-inside-align")).trim();
1519
+ return n === "start" || n === "center" || n === "end" ? n : null;
1520
+ }, St = (e, t, n, r) => {
1328
1521
  let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
1329
1522
  if (!a) return null;
1330
1523
  let o = Number(a[1]);
1331
- return a[2] === "%" ? o / 100 * j : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
1332
- }, ft = (e, t) => dt(e, t, "--tablechart-bar-max", "60px") ?? Infinity, pt = (t, n) => {
1333
- let { plot: r, svg: i, rows: a, type: o, values: s, series: c, seriesValues: l, names: u, annotations: d } = t, f = r.clientWidth;
1334
- if (!f) return !1;
1335
- let p = j / f, m = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), h = j * (m > 0 ? m : o.aspect ?? n.aspect);
1336
- r.classList.add(w);
1337
- for (let e of [...l.flat(), ...t.totals]) delete e.dataset.place;
1338
- r.style.removeProperty("--tablechart-fit"), se([
1339
- ...l.flat(),
1524
+ return a[2] === "%" ? o / 100 * _ : o * (a[2] === "em" ? Number.parseFloat(i.fontSize) : a[2] === "rem" ? Number.parseFloat(getComputedStyle(document.documentElement).fontSize) : 1) * t;
1525
+ }, Ct = (e, t) => St(e, t, "--tablechart-bar-max", "60px") ?? Infinity, wt = (t, n) => {
1526
+ let { plot: r, svg: i, rows: a, type: o, values: s, series: c, seriesValues: u, names: d, annotations: p } = t, m = r.clientWidth;
1527
+ if (!m) return !1;
1528
+ let h = _ / m, g = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), v = _ * (g > 0 ? g : o.aspect ?? n.aspect);
1529
+ r.classList.add(f);
1530
+ for (let e of [...u.flat(), ...t.totals]) delete e.dataset.place;
1531
+ r.style.removeProperty("--_fit"), t.categories[0]?.parentElement?.style.removeProperty("--_beside"), ee([
1532
+ ...u.flat(),
1340
1533
  ...t.totals,
1341
- ...u,
1534
+ ...d,
1342
1535
  ...t.categories,
1343
- ...d.map((e) => e.badge)
1536
+ ...p.map((e) => e.badge)
1344
1537
  ]);
1345
- let g = (s[0] ? Y(s[0]).height : 0) * p, _ = d[0]?.badge ? Y(d[0].badge).height * p : 0, v = Math.max(h, dt(t.figure, p, "--tablechart-min-height", "200px") ?? 0, o.minHeight?.({
1346
- labelHeight: g,
1347
- nameHeight: Math.max(0, U(t.categories.map((e) => Y(e).height))) * p,
1348
- unit: p,
1538
+ let y = (s[0] ? W(s[0]).height : 0) * h, b = p[0]?.badge ? W(p[0].badge).height * h : 0, x = Math.max(v, St(t.figure, h, "--tablechart-min-height", "200px") ?? 0, o.minHeight?.({
1539
+ labelHeight: y,
1540
+ nameHeight: Math.max(0, N(t.categories.map((e) => W(e).height))) * h,
1541
+ unit: h,
1349
1542
  rows: a.length,
1350
1543
  series: c.length,
1351
1544
  stacked: t.stacked
1352
- }) ?? 0), y = t.stacked ? a.map((e) => {
1353
- let t = me(e, c.length);
1545
+ }) ?? 0), S = t.stacked ? a.map((e) => {
1546
+ let t = ae(e, c.length);
1354
1547
  return {
1355
1548
  ...e,
1356
1549
  value: t,
@@ -1359,96 +1552,96 @@ var Fe = (e) => e.map((e) => ({
1359
1552
  value: t
1360
1553
  } : e)
1361
1554
  };
1362
- }) : a, x = (o.segments ?? ((e) => e.map((e) => ({
1555
+ }) : a, T = (o.segments ?? ((e) => e.map((e) => ({
1363
1556
  ...e,
1364
1557
  from: 0,
1365
1558
  to: e.value,
1366
1559
  kind: "bar"
1367
- }))))(t.stacked ? y.map((e) => ({
1560
+ }))))(t.stacked ? S.map((e) => ({
1368
1561
  ...e,
1369
1562
  cells: [e.cells[0]]
1370
- })) : a), S = {
1371
- labelHeight: g,
1372
- badgeHeight: _,
1373
- hasAnnotations: d.length > 0,
1374
- unit: p,
1563
+ })) : a), E = {
1564
+ labelHeight: y,
1565
+ badgeHeight: b,
1566
+ hasAnnotations: p.length > 0,
1567
+ unit: h,
1375
1568
  series: c.length,
1376
1569
  focused: c.some((e) => e.focus),
1377
1570
  stacked: t.stacked
1378
- }, C = Math.max(((e) => t.stacked ? e(a.map((e) => X(e, c.length, o.running).top)) : e([...x.flatMap((e) => [
1571
+ }, D = Math.max(((e) => t.stacked ? e(a.map((e) => q(e, c.length, o.running).top)) : e([...T.flatMap((e) => [
1379
1572
  e.from,
1380
1573
  e.to,
1381
1574
  e.value
1382
- ]), ...a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value))]))(U), 0), T = x.some((e) => e.kind === "up" || e.kind === "down") ? x.flatMap((e) => [e.from, e.to]) : t.stacked ? a.map((e) => X(e, c.length, o.running).bottom) : a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value)), E = Math.min(-U(T.map((e) => -e)), 0), D = o.headroom?.(S) ?? g, O = 2 * p + (o.footroom?.(S) ?? 0) + (E < 0 ? g + 4 * p : 0), k = v - D - O, A = C * 1.02, M = E * 1.02, N = d.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, P = (e) => {
1383
- let t = Number.parseFloat(N?.getAttribute(e) ?? "");
1575
+ ]), ...a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value))]))(N), 0), O = T.some((e) => e.kind === "up" || e.kind === "down") ? T.flatMap((e) => [e.from, e.to]) : t.stacked ? a.map((e) => q(e, c.length, o.running).bottom) : a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value)), A = Math.min(-N(O.map((e) => -e)), 0), j = o.headroom?.(E) ?? y, M = 2 * h + (o.footroom?.(E) ?? 0) + (A < 0 ? y + 4 * h : 0), P = x - j - M, F = D * 1.02, I = A * 1.02, L = p.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, R = (e) => {
1576
+ let t = Number.parseFloat(L?.getAttribute(e) ?? "");
1384
1577
  return Number.isFinite(t) ? t : null;
1385
- }, L = P("data-from") ?? P("data-at"), R = P("data-to"), z = null;
1386
- if (N && (L !== null || R !== null)) {
1387
- let t = L ?? 0, n = R ?? A, r = R === null ? t : L === null ? n : (t + n) / 2, i = N.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
1578
+ }, z = R("data-from") ?? R("data-at"), B = R("data-to"), V = null;
1579
+ if (L && (z !== null || B !== null)) {
1580
+ let t = z ?? 0, n = B ?? F, r = B === null ? t : z === null ? n : (t + n) / 2, i = L.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
1388
1581
  i !== null && !a && console.warn(`[${e}] data-size="${i}" is not a percentage, such as 30%. Using the default.`);
1389
- let s = Math.min(Math.max(a ? Number(a[1]) / 100 : R === null ? .22 : .3, .05), .8), c = x.filter((e) => (e.kind === "up" || e.kind === "down") && Math.max(e.from, e.to) > t && Math.min(e.from, e.to) < n);
1390
- o.breakable ? E < 0 ? console.warn(`[${e}] A chart with values below zero cannot break its scale.`) : t < 0 || n <= t || n > A || t === 0 && n === A ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${C}.`) : c.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : z = {
1582
+ let s = Math.min(Math.max(a ? Number(a[1]) / 100 : B === null ? .22 : .3, .05), .8), c = T.filter((e) => (e.kind === "up" || e.kind === "down") && Math.max(e.from, e.to) > t && Math.min(e.from, e.to) < n);
1583
+ o.breakable ? A < 0 ? console.warn(`[${e}] A chart with values below zero cannot break its scale.`) : t < 0 || n <= t || n > F || t === 0 && n === F ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${D}.`) : c.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : V = {
1391
1584
  lo: t,
1392
1585
  hi: n,
1393
1586
  gap: r,
1394
1587
  share: s
1395
1588
  } : console.warn(`[${e}] This kind of chart cannot break its scale.`);
1396
1589
  }
1397
- let B = z ? z.gap : null, V = (z && dt(t.figure, p, "--tablechart-break-gap", "")) ?? 13, H = v - O, te = A - M || 1, ne = (e) => H - (e - M) / te * k;
1398
- if (z) {
1399
- let { lo: e, hi: t, gap: n, share: r } = z, i = k * r, a = (k - i - V) / (e + (A - t)), o = i / (t - e);
1400
- ne = (r) => r <= e ? H - r * a : r <= n ? H - e * a - (r - e) * o : r <= t ? H - e * a - (r - e) * o - V : H - e * a - i - V - (r - t) * a;
1590
+ let H = V ? V.gap : null, U = (V && St(t.figure, h, "--tablechart-break-gap", "")) ?? 13, G = x - M, te = F - I || 1, ne = (e) => G - (e - I) / te * P;
1591
+ if (V) {
1592
+ let { lo: e, hi: t, gap: n, share: r } = V, i = P * r, a = (P - i - U) / (e + (F - t)), o = i / (t - e);
1593
+ ne = (r) => r <= e ? G - r * a : r <= n ? G - e * a - (r - e) * o : r <= t ? G - e * a - (r - e) * o - U : G - e * a - i - U - (r - t) * a;
1401
1594
  }
1402
- let W = u.length ? U(u.map((e) => Y(e).width)) * p + 12 * p : 0, G = t.categories[0]?.parentElement;
1403
- G && (G.style.paddingRight = W ? `${W / j * 100}%` : "");
1404
- let K = (j - W) / a.length, q = (e) => (e + .5) * K, re = (e) => e >= 0 && e < a.length ? e : null;
1405
- t.rowAt = o.centre ? null : o.categories === "beside" ? (e, t) => re(Math.floor(t * p / (v / a.length))) : (e) => re(Math.floor(e * p / K));
1406
- let ie = K / j * 100, ae = 100 / a.length;
1595
+ let re = d.length ? N(d.map((e) => W(e).width)) * h + 12 * h : 0, ie = t.categories[0]?.parentElement;
1596
+ ie && (ie.style.paddingRight = re ? `${re / _ * 100}%` : "");
1597
+ let K = (_ - re) / a.length, oe = (e) => (e + .5) * K, se = (e) => e >= 0 && e < a.length ? e : null;
1598
+ t.rowAt = o.centre ? null : o.categories === "beside" ? (e, t) => se(Math.floor(t * h / (x / a.length))) : (e) => se(Math.floor(e * h / K));
1599
+ let ce = K / _ * 100, le = 100 / a.length;
1407
1600
  t.rowBox = o.categories === "beside" ? (e) => [
1408
1601
  0,
1409
- e * ae,
1602
+ e * le,
1410
1603
  100,
1411
- ae
1604
+ le
1412
1605
  ] : (e) => [
1413
- e * ie,
1606
+ e * ce,
1414
1607
  0,
1415
- ie,
1608
+ ce,
1416
1609
  100
1417
- ], i.setAttribute("viewBox", `0 0 ${j} ${F(v)}`), i.textContent = "", t.checks = [];
1610
+ ], i.setAttribute("viewBox", `0 0 ${_} ${C(x)}`), i.textContent = "", t.checks = [];
1418
1611
  let J = {
1419
1612
  rows: a,
1420
- segments: x,
1421
- cx: q,
1613
+ segments: T,
1614
+ cx: oe,
1422
1615
  y: ne,
1423
- barWidth: Math.min(K * n.barfill, ft(t.figure, p)),
1424
- barMax: ft(t.figure, p),
1425
- height: v,
1426
- unit: p,
1427
- labelHeight: g,
1428
- badgeHeight: _,
1616
+ barWidth: Math.min(K * n.barfill, Ct(t.figure, h)),
1617
+ barMax: Ct(t.figure, h),
1618
+ height: x,
1619
+ unit: h,
1620
+ labelHeight: y,
1621
+ badgeHeight: b,
1429
1622
  after: a.length,
1430
1623
  note: 0,
1431
1624
  labels: t.figure.dataset.chartLabels === "inside" || t.figure.dataset.chartLabels !== "outside" && n.labels === "inside" ? "inside" : "outside",
1432
- insideAlign: ut(t.figure),
1433
- breakAt: B,
1434
- squeeze: z,
1435
- breakGap: V,
1625
+ insideAlign: xt(t.figure),
1626
+ breakAt: H,
1627
+ squeeze: V,
1628
+ breakGap: U,
1436
1629
  stacked: t.stacked,
1437
- shape: it(t.figure, n),
1630
+ shape: dt(t.figure, n),
1438
1631
  totals: t.totals,
1439
1632
  svg: i,
1440
1633
  plot: r,
1441
1634
  values: s,
1442
1635
  series: c,
1443
- seriesValues: l,
1444
- names: u,
1636
+ seriesValues: u,
1637
+ names: d,
1445
1638
  categories: t.categories,
1446
1639
  centre: t.centre,
1447
1640
  config: n,
1448
1641
  checks: t.checks
1449
1642
  };
1450
- o.draw(J);
1451
- for (let [e, n] of d.entries()) {
1643
+ r.style.setProperty("--count", String(Math.max(1, ...a.map((e) => e.slot + 1)))), o.draw(J);
1644
+ for (let [e, n] of p.entries()) {
1452
1645
  n.badge?.setAttribute("data-note", String(e + 1));
1453
1646
  let r = n.series, i = (e) => ({
1454
1647
  ...e,
@@ -1457,34 +1650,34 @@ var Fe = (e) => e.map((e) => ({
1457
1650
  n.type.draw(n.spec, n.badge, {
1458
1651
  ...J,
1459
1652
  ...t.stacked && {
1460
- rows: y,
1653
+ rows: S,
1461
1654
  ...t.totals.length && { values: t.totals }
1462
1655
  },
1463
1656
  ...r > 0 && !t.stacked && {
1464
1657
  rows: a.map(i),
1465
- segments: x.map((e) => {
1658
+ segments: T.map((e) => {
1466
1659
  let t = i(e);
1467
1660
  return e.kind === "bar" ? {
1468
1661
  ...t,
1469
1662
  to: t.value
1470
1663
  } : t;
1471
1664
  }),
1472
- values: l[r]
1665
+ values: u[r]
1473
1666
  },
1474
1667
  after: n.after,
1475
1668
  note: e + 1
1476
1669
  });
1477
1670
  }
1478
- Ze(t);
1479
- let oe = t.categories[0]?.parentElement;
1480
- return oe && o.categories !== "beside" && !o.centre && xe(oe, t.categories.filter((e) => e.offsetParent !== null), (e) => ({
1671
+ Ve(t);
1672
+ let ue = t.categories[0]?.parentElement;
1673
+ ue && o.categories !== "beside" && !o.centre && de(ue, t.categories.filter((e) => e.offsetParent !== null), (e) => ({
1481
1674
  size: e.scrollWidth,
1482
1675
  room: e.clientWidth
1483
- }), "--tablechart-name-fit"), ee(i, d.flatMap(({ badge: e }) => {
1676
+ }), "--_name-fit"), k(i, p.flatMap(({ badge: e }) => {
1484
1677
  if (!(e instanceof HTMLElement) || !e.offsetWidth) return [];
1485
- let t = e.offsetWidth * p, n = e.offsetHeight * p, r = Number.parseFloat(e.style.left) / 100 * j, i = Number.parseFloat(e.style.top) / 100 * v, a = getComputedStyle(e).borderTopLeftRadius, o = a.endsWith("%") ? Number.parseFloat(a) / 100 : null, s = (Number.parseFloat(a) || 0) * p;
1486
- return [I("rect", {
1487
- class: b,
1678
+ let t = e.offsetWidth * h, n = e.offsetHeight * h, r = Number.parseFloat(e.style.left) / 100 * _, i = Number.parseFloat(e.style.top) / 100 * x, a = getComputedStyle(e).borderTopLeftRadius, o = a.endsWith("%") ? Number.parseFloat(a) / 100 : null, s = (Number.parseFloat(a) || 0) * h;
1679
+ return [w("rect", {
1680
+ class: l,
1488
1681
  "data-for": "badge",
1489
1682
  "data-note": e.dataset.note ?? "",
1490
1683
  x: r - t / 2,
@@ -1495,8 +1688,13 @@ var Fe = (e) => e.map((e) => ({
1495
1688
  ry: o === null ? s : n * o,
1496
1689
  style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
1497
1690
  })];
1498
- }), j, v), !0;
1499
- }, mt = (e, t) => {
1691
+ }), _, x);
1692
+ let fe = (e) => e.dataset.missing !== void 0 || o.centre && a[Number(e.dataset.row) - 1]?.isTotal, pe = (e) => e.dataset.place !== "none" && !e.hasAttribute("data-left-out"), me = (e, t) => {
1693
+ let n = Number(e.dataset.row);
1694
+ return t.some((e) => pe(e) && Number(e.dataset.row) <= n && n <= Number(e.dataset.rowEnd ?? e.dataset.row));
1695
+ };
1696
+ return t.figure.toggleAttribute("data-left-out", [...u, t.totals].some((e) => e.some((t) => !fe(t) && !pe(t) && !me(t, e)))), !0;
1697
+ }, Tt = (e, t) => {
1500
1698
  let n = [
1501
1699
  ...e.seriesValues.flat(),
1502
1700
  ...e.totals,
@@ -1508,70 +1706,35 @@ var Fe = (e) => e.map((e) => ({
1508
1706
  r.textContent = n;
1509
1707
  continue;
1510
1708
  }
1511
- let [o, s] = G(Number.parseFloat(r.dataset.value || "0"), r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale);
1709
+ let [o, s] = I(Number.parseFloat(r.dataset.value || "0"), r.dataset.decimals ? Number(r.dataset.decimals) : e.decimals, t.locale);
1512
1710
  if (r.textContent = i + (i ? o : "") + s + a, o && !i) {
1513
1711
  let e = document.createElement("span");
1514
- e.className = D, e.textContent = o, r.prepend(e);
1712
+ e.className = "tablechart-minus", e.textContent = o, r.prepend(e);
1515
1713
  }
1516
1714
  }
1517
- }, ht = (e) => {
1518
- e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${v}`)?.remove(), e.controls?.remove();
1519
- }, gt = (e, t) => {
1520
- e.figure.classList.toggle(O, t), t || e.plot.removeAttribute("data-pointed");
1521
- }, _t = (e) => {
1522
- let { plot: t } = e, n = () => [...e.seriesValues.flat(), ...e.totals], r = (e, t) => {
1523
- let n = Number(e.dataset.row), r = Number(e.dataset.rowEnd ?? n);
1524
- return t >= n && t <= r;
1525
- };
1526
- t.setAttribute("data-hover", "");
1527
- let i = document.createElement("div");
1528
- i.className = T, t.prepend(i);
1529
- let a = () => {
1530
- t.removeAttribute("data-active");
1531
- for (let e of n()) e.removeAttribute("data-active");
1532
- }, o = (o) => {
1533
- if (!t.classList.contains("is-placed") || !e.rowAt) return;
1534
- let s = t.getBoundingClientRect(), c = s.width / t.offsetWidth || 1, l = e.rowAt((o.clientX - s.left) / c, (o.clientY - s.top) / c), u = l === null ? null : l + 1, d = (e) => e.dataset.place !== "none", f = u === null ? [] : n().filter((e) => r(e, u) && d(e));
1535
- if (!n().some((e) => e.hasAttribute("data-left-out") && d(e)) || !f.length) return a();
1536
- t.setAttribute("data-pointed", ""), t.setAttribute("data-active", String(u));
1537
- let [p, m, h, g] = e.rowBox?.(u - 1) ?? [
1538
- 0,
1539
- 0,
1540
- 0,
1541
- 0
1542
- ];
1543
- Object.assign(i.style, {
1544
- left: `${p}%`,
1545
- top: `${m}%`,
1546
- width: `${h}%`,
1547
- height: `${g}%`
1548
- });
1549
- for (let e of n()) e.toggleAttribute("data-active", f.includes(e));
1550
- };
1551
- t.addEventListener("pointermove", o), t.addEventListener("pointerdown", o), t.addEventListener("pointerleave", (e) => {
1552
- e.pointerType === "mouse" && a();
1553
- }), document.addEventListener("pointerdown", (e) => {
1554
- t.contains(e.target) || a();
1555
- });
1556
- }, vt = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), yt = /^\s*(?:Table)?:\s+/, bt = (e) => e?.tagName === "P" && yt.test(e.textContent ?? ""), xt = (e) => {
1715
+ }, Et = (e) => {
1716
+ at(e), e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${c}`)?.remove(), e.controls?.remove();
1717
+ }, Dt = (e, t) => {
1718
+ e.figure.classList.toggle(m, t);
1719
+ }, Ot = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), kt = /^\s*(?:Table)?:\s+/, At = (e) => e?.tagName === "P" && kt.test(e.textContent ?? ""), jt = (e) => {
1557
1720
  let t = document.createElement("figcaption");
1558
1721
  for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
1559
1722
  let n = e.firstChild;
1560
- n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(yt, ""), n.textContent || n.remove());
1723
+ n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(kt, ""), n.textContent || n.remove());
1561
1724
  let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
1562
1725
  if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
1563
1726
  let e = document.createElement("span");
1564
1727
  e.append(...r.slice(i + 1)), t.append(e);
1565
1728
  }
1566
1729
  return e.remove(), t;
1567
- }, St = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Ct = (e) => {
1568
- let t = jt(e);
1730
+ }, Mt = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Nt = (e) => {
1731
+ let t = Vt(e);
1569
1732
  return t?.tagName === "P" ? t : e;
1570
- }, wt = (e) => {
1571
- let t = Ct(e).firstChild;
1733
+ }, Pt = (e) => {
1734
+ let t = Nt(e).firstChild;
1572
1735
  if (t?.nodeType !== Node.TEXT_NODE) return null;
1573
- let n = St.exec(t.textContent ?? "");
1574
- if (!n || !tt.includes(n[1]) || !n[3] && t.nextSibling) return null;
1736
+ let n = Mt.exec(t.textContent ?? "");
1737
+ if (!n || !ct.includes(n[1]) || !n[3] && t.nextSibling) return null;
1575
1738
  let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
1576
1739
  return {
1577
1740
  name: n[1],
@@ -1579,11 +1742,11 @@ var Fe = (e) => e.map((e) => ({
1579
1742
  text: t,
1580
1743
  length: n[0].length
1581
1744
  };
1582
- }, Tt = (e) => {
1745
+ }, Ft = (e) => {
1583
1746
  if (e?.tagName !== "UL" && e?.tagName !== "OL") return null;
1584
- let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : wt(e));
1747
+ let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : Pt(e));
1585
1748
  return !t.length || t.some((e, t) => !n[t] && !e.hasAttribute("data-annotation")) ? null : (t.forEach((e, t) => {
1586
- let r = n[t], i = Ct(e);
1749
+ let r = n[t], i = Nt(e);
1587
1750
  if (i !== e && i.replaceWith(...i.childNodes), r) {
1588
1751
  e.setAttribute("data-annotation", r.name);
1589
1752
  for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
@@ -1591,21 +1754,21 @@ var Fe = (e) => e.map((e) => ({
1591
1754
  }
1592
1755
  e.children.length && Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.textContent?.trim()).forEach((e, t) => {
1593
1756
  let n = document.createElement("span");
1594
- t === 0 && e instanceof HTMLElement && e.matches("em, i") ? (n.className = d, n.append(...e.childNodes), e.replaceWith(n)) : e.nodeType === Node.TEXT_NODE && (n.textContent = (e.textContent ?? "").trim(), e.replaceWith(n));
1757
+ 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));
1595
1758
  });
1596
1759
  }), e.classList.add("chart-annotations"), e);
1597
- }, Et = (e, t) => {
1598
- for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || vt(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
1599
- }, Dt = (e) => e.map((e) => {
1600
- let t = e.closest("p"), n = bt(t) ? t : e;
1760
+ }, It = (e, t) => {
1761
+ for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || Ot(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
1762
+ }, Lt = (e) => e.map((e) => {
1763
+ let t = e.closest("p"), n = At(t) ? t : e;
1601
1764
  if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
1602
1765
  let r = document.createElement("div");
1603
- Et(e, r), e.classList.length || e.removeAttribute("class");
1604
- let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? bt(a) ? a : bt(o) ? o : null : n;
1766
+ It(e, r), e.classList.length || e.removeAttribute("class");
1767
+ let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? At(a) ? a : At(o) ? o : null : n;
1605
1768
  i && s === o && (o = o?.nextElementSibling ?? null);
1606
- let c = o?.classList.contains("chart-annotations") ? o : Tt(o);
1607
- return n.replaceWith(r), s && r.append(xt(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;
1608
- }), Ot = (e, t, n, r = document.createElement("table")) => {
1769
+ let c = o?.classList.contains("chart-annotations") ? o : Ft(o);
1770
+ return n.replaceWith(r), s && r.append(jt(s)), i && r.append(i), c && r.append(c), X?.log?.(`A ${i ? "table" : "caption"} with chart attributes was wrapped in a figure of its own`), r;
1771
+ }), Rt = (e, t, n, r = document.createElement("table")) => {
1609
1772
  for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
1610
1773
  if (!r.tHead && (t.length || n)) {
1611
1774
  let e = r.createTHead().insertRow(), i = document.createElement("th");
@@ -1625,40 +1788,40 @@ var Fe = (e) => e.map((e) => ({
1625
1788
  for (let n of t.values ?? [t.value ?? null]) e.insertCell().textContent = n === null ? "" : String(n);
1626
1789
  }
1627
1790
  return r;
1628
- }, kt = (e) => {
1791
+ }, zt = (e) => {
1629
1792
  if (!e || typeof e != "object") return;
1630
1793
  let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
1631
- if (!(!t.length || !t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n)))) return t.map(([e, t]) => Array.isArray(t) ? {
1794
+ if (t.length && t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n))) return t.map(([e, t]) => Array.isArray(t) ? {
1632
1795
  label: e,
1633
1796
  values: t
1634
1797
  } : {
1635
1798
  label: e,
1636
1799
  value: t
1637
1800
  });
1638
- }, At = async (t) => {
1801
+ }, Bt = async (t) => {
1639
1802
  await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
1640
1803
  let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
1641
1804
  for (let e of t.querySelectorAll("table")) e !== r && e.remove();
1642
1805
  try {
1643
1806
  let e = await fetch(n);
1644
1807
  if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
1645
- let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : kt(i.rows) : kt(i);
1808
+ let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : zt(i.rows) : zt(i);
1646
1809
  if (!Array.isArray(a)) throw Error("no rows in it: a list of rows, an object with rows, or names with their values");
1647
- let o = Ot(a, Array.isArray(i?.series) ? i.series.map(String) : [], typeof i?.label == "string" ? i.label : "", r ?? void 0);
1810
+ let o = Rt(a, Array.isArray(i?.series) ? i.series.map(String) : [], typeof i?.label == "string" ? i.label : "", r ?? void 0);
1648
1811
  if (!r) {
1649
1812
  let e = t.querySelector(":scope > figcaption");
1650
1813
  e ? e.after(o) : t.prepend(o);
1651
1814
  }
1652
- 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}"`);
1815
+ o.tHead || X?.log?.(`The table from "${n}" has no header row, so a screen reader cannot name its columns.`), X?.log?.(`Read ${a.length} rows from "${n}"`);
1653
1816
  } catch (t) {
1654
1817
  let r = window.location.protocol === "file:";
1655
- console.warn(`[${e}] Could not read the chart data in "${n}": ${t.message}.` + (r ? " A page opened from the file system cannot fetch files; open the page from a server instead." : ""));
1818
+ 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." : ""));
1656
1819
  }
1657
1820
  }));
1658
- }, jt = (e) => {
1821
+ }, Vt = (e) => {
1659
1822
  let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
1660
1823
  return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
1661
- }, Mt = "strong, b, span.total", Nt = (e) => {
1824
+ }, Ht = "strong, b, span.total", Ut = (e) => {
1662
1825
  for (let t of e) {
1663
1826
  for (let e of t.querySelectorAll("tbody tr")) {
1664
1827
  let t = e.cells[0];
@@ -1666,16 +1829,16 @@ var Fe = (e) => e.map((e) => ({
1666
1829
  let n = document.createElement("th");
1667
1830
  for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
1668
1831
  n.append(...t.childNodes), t.replaceWith(n);
1669
- for (let t = jt(n); t?.matches(Mt); t = jt(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
1832
+ for (let t = Vt(n); t?.matches(Ht); t = Vt(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
1670
1833
  }
1671
1834
  let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
1672
- for (let t of e.slice(1)) for (let e = jt(t); e?.matches(Mt); e = jt(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
1835
+ for (let t of e.slice(1)) for (let e = Vt(t); e?.matches(Ht); e = Vt(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
1673
1836
  }
1674
- }, Pt = "data-chart-made", Ft = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, It = (e) => new Promise((t) => setTimeout(t, e)), Lt = (e, t) => {
1837
+ }, Wt = "data-chart-made", Gt = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Kt = (e) => new Promise((t) => setTimeout(t, e)), qt = (e, t) => {
1675
1838
  let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
1676
1839
  return Math.min(Math.max(r, 0), 1);
1677
- }, Rt = async (e, t) => {
1678
- if (Ft()) return;
1840
+ }, Jt = async (e, t) => {
1841
+ if (Gt()) return;
1679
1842
  await new Promise(requestAnimationFrame);
1680
1843
  let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
1681
1844
  for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
@@ -1686,11 +1849,11 @@ var Fe = (e) => e.map((e) => ({
1686
1849
  let a = Number(n.delay ?? 0) + i * t;
1687
1850
  r = Math.max(r, a - Number(e.currentTime ?? 0));
1688
1851
  }
1689
- r > 0 && await It(r);
1690
- }, zt = (e) => {
1852
+ r > 0 && await Kt(r);
1853
+ }, Yt = (e) => {
1691
1854
  for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
1692
1855
  return null;
1693
- }, Bt = (e) => new Promise((t) => {
1856
+ }, Xt = (e) => new Promise((t) => {
1694
1857
  let n = ["animationstart", "transitionrun"], r = () => {
1695
1858
  for (let e of n) document.removeEventListener(e, i, !0);
1696
1859
  a.disconnect(), t();
@@ -1704,60 +1867,62 @@ var Fe = (e) => e.map((e) => ({
1704
1867
  attributes: !0,
1705
1868
  attributeFilter: ["class", "style"]
1706
1869
  });
1707
- }), Vt = /* @__PURE__ */ new Set(), Ht = null, Ut = (e) => {
1708
- Vt.add(e), !Ht && (Ht = new MutationObserver(() => {
1709
- for (let e of Vt) e.relabel();
1870
+ }), Zt = /* @__PURE__ */ new Set(), Qt = null, $t = (e) => {
1871
+ Zt.add(e), !Qt && (Qt = new MutationObserver(() => {
1872
+ for (let e of Zt) e.relabel();
1710
1873
  requestAnimationFrame(() => requestAnimationFrame(() => {
1711
- for (let e of Vt) e.refresh();
1874
+ for (let e of Zt) e.refresh();
1712
1875
  }));
1713
- }), Ht.observe(document.documentElement, {
1876
+ }), Qt.observe(document.documentElement, {
1714
1877
  attributes: !0,
1715
1878
  attributeFilter: ["lang"]
1716
1879
  }));
1717
- }, Wt = (e) => {
1718
- Vt.delete(e), !(Vt.size || !Ht) && (Ht.disconnect(), Ht = null);
1719
- }, Gt = ["column", "bar"], Kt = (e) => {
1880
+ }, en = (e) => {
1881
+ Zt.delete(e), !Zt.size && Qt && (Qt.disconnect(), Qt = null);
1882
+ }, tn = ["column", "bar"], nn = (e) => {
1720
1883
  let t = e.getAttribute("data-chart") || "column";
1721
- if (!Gt.includes(t)) return null;
1884
+ if (!tn.includes(t)) return null;
1722
1885
  let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
1723
- return Gt.includes(n) ? n : t;
1724
- }, qt = (e, t) => {
1725
- let n = e, r = Kt(n.figure), i = null, a = !1, o = !1, s = async () => {
1726
- if (!t.animate) return gt(n, !0);
1886
+ return tn.includes(n) ? n : t;
1887
+ }, rn = (e, t) => {
1888
+ let n = e, r = nn(n.figure), i = null, a = !1, o = !1, s = async () => {
1889
+ if (!t.animate) return Dt(n, !0);
1727
1890
  let e = n.figure.classList.contains("is-shown");
1728
1891
  if (a && i !== null && !e && !o) {
1729
1892
  o = !0;
1730
- let e = Ft() ? null : zt(n.figure);
1731
- e && await Bt(e), await Rt(n.figure, Lt(n.figure, t)), o = !1, (a || !t.replay) && gt(n, !0);
1732
- } else !a && t.replay && e && gt(n, !1);
1893
+ let e = Gt() ? null : Yt(n.figure);
1894
+ e && await Xt(e), await Jt(n.figure, qt(n.figure, t)), o = !1, (a || !t.replay) && Dt(n, !0);
1895
+ } else !a && t.replay && e && Dt(n, !1);
1733
1896
  }, c = () => {
1734
- let e = Kt(n.figure);
1897
+ let e = nn(n.figure);
1735
1898
  if (!e || e === r) return;
1736
- let a = Q.timed("Building", n.figure, () => lt(n.figure, t, e));
1737
- a && (ht(n), $(a, n.step, !0), n = a, r = e, i = null);
1899
+ let a = X.timed("Building", n.figure, () => gt(n.figure, t, e));
1900
+ a && (Et(n), He(a, n.step, !0), n = a, r = e, i = null);
1738
1901
  }, l = () => {
1739
1902
  c();
1740
1903
  let e = n.plot.clientWidth;
1741
- !e || e === i || Q.timed("Layout", n.figure, () => pt(n, t)) && (i = e, s());
1904
+ e && e !== i && X.timed("Layout", n.figure, () => wt(n, t)) && (i = e, s());
1742
1905
  }, u = !1, d = new ResizeObserver(() => {
1743
1906
  u || (u = !0, requestAnimationFrame(() => {
1744
1907
  u = !1, l();
1745
1908
  }));
1746
1909
  }), f = new IntersectionObserver((e) => {
1747
1910
  for (let t of e) a = t.isIntersecting, s();
1748
- }, { threshold: t.threshold }), p = () => gt(n, !0), m = () => {
1911
+ }, { threshold: t.threshold }), p = () => {
1912
+ n.figure.classList.add(h), Dt(n, !0), n.figure.offsetWidth;
1913
+ }, m = () => n.figure.classList.remove(h), g = () => {
1749
1914
  i = null, l();
1750
- }, h = {
1751
- relabel: () => mt(n, t),
1752
- refresh: m
1915
+ }, _ = {
1916
+ relabel: () => Tt(n, t),
1917
+ refresh: g
1753
1918
  };
1754
- c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), Ut(h);
1755
- let g = {
1919
+ c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), window.addEventListener("afterprint", m), $t(_);
1920
+ let v = {
1756
1921
  figure: n.figure,
1757
- refresh: m,
1758
- next: () => $(n, n.step + 1),
1759
- previous: () => $(n, n.step - 1),
1760
- stepTo: (e) => $(n, e),
1922
+ refresh: g,
1923
+ next: () => He(n, n.step + 1),
1924
+ previous: () => He(n, n.step - 1),
1925
+ stepTo: (e) => He(n, e),
1761
1926
  get step() {
1762
1927
  return n.step;
1763
1928
  },
@@ -1765,41 +1930,83 @@ var Fe = (e) => e.map((e) => ({
1765
1930
  return n.plan?.count ?? 0;
1766
1931
  },
1767
1932
  destroy() {
1768
- d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), Wt(h), n.figure.tablechart === g && delete n.figure.tablechart;
1933
+ d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), window.removeEventListener("afterprint", m), en(_), at(n), n.figure.tablechart === v && delete n.figure.tablechart;
1769
1934
  }
1770
1935
  };
1771
- return n.figure.tablechart = g, g;
1772
- }, Jt = async (e, t) => {
1773
- let n = Dt(e.filter((e) => !e.hasAttribute(Pt)));
1774
- return await At(n), Nt(n), qe(n, t.langattribute), n;
1775
- }, Yt = (e, t) => {
1776
- let n = Q.timed("Building", e, () => lt(e, t));
1777
- return n ? (e.setAttribute(Pt, ""), qt(n, t)) : null;
1778
- }, Xt = async (e, t = {}) => {
1936
+ return n.figure.tablechart = v, v;
1937
+ }, an = async (e, t) => {
1938
+ let n = Lt(e.filter((e) => !e.hasAttribute(Wt)));
1939
+ return await Bt(n), Ut(n), Le(n, t.langattribute), n;
1940
+ }, on = (e, t) => {
1941
+ let n = X.timed("Building", e, () => gt(e, t));
1942
+ return n ? (e.setAttribute(Wt, ""), rn(n, t)) : null;
1943
+ }, sn = async (e, t = {}) => {
1779
1944
  if (e.tablechart) return e.tablechart;
1780
1945
  let n = {
1781
- ...M,
1946
+ ...v,
1782
1947
  ...t
1783
1948
  };
1784
- n.debug && (Q.enabled = !0);
1785
- let [r] = await Jt([e], n);
1786
- return r ? Yt(r, n) : null;
1787
- }, Zt = async (e = {}, t = document) => {
1949
+ n.debug && (X.enabled = !0);
1950
+ let [r] = await an([e], n);
1951
+ return r ? on(r, n) : null;
1952
+ }, cn = [
1953
+ ["--tablechart-duration", "--tablechart-animation-element-duration"],
1954
+ ["--tablechart-stagger", "--tablechart-animation-stagger, a share of the element time"],
1955
+ ["--tablechart-easing", "--tablechart-animation-ease"],
1956
+ ["--tablechart-category-size", "--tablechart-name-size"],
1957
+ ["--tablechart-category-padding", "--tablechart-name-padding"],
1958
+ ["--tablechart-categories-gap", "--tablechart-name-gap"],
1959
+ ["--tablechart-inside-align", "--tablechart-value-align"],
1960
+ ["--tablechart-bar-ink", "--tablechart-bar-value-color"],
1961
+ ["--tablechart-piece-ink", "--tablechart-piece-value-color"],
1962
+ ["--tablechart-up-ink", "--tablechart-up-value-color"],
1963
+ ["--tablechart-down-ink", "--tablechart-down-value-color"],
1964
+ ["--tablechart-total-ink", "--tablechart-total-value-color"],
1965
+ ["--tablechart-series-ink", "--tablechart-series-own-color"],
1966
+ ["--tablechart-dash", "--tablechart-series-dash"],
1967
+ ["--tablechart-dot", "--tablechart-series-dot"],
1968
+ ["--tablechart-muted-share", "--tablechart-series-muted-share"],
1969
+ ["--tablechart-rule-color", "--tablechart-baseline-color"],
1970
+ ["--tablechart-rule-width", "--tablechart-baseline-width"],
1971
+ ["--tablechart-rule-opacity", "--tablechart-baseline-opacity"],
1972
+ ["--tablechart-key-size", "--tablechart-legend-key-size"],
1973
+ ["--tablechart-controls-justify", "--tablechart-control-justify"],
1974
+ ["--tablechart-controls-gap", "--tablechart-control-gap"]
1975
+ ], ln = {
1976
+ up: "grow",
1977
+ across: "sweep"
1978
+ }, un = !1, dn = (t, n) => {
1979
+ if (un) return;
1980
+ let r = (e) => {
1981
+ let t = ln[String(e)];
1982
+ return t ? [`"${e}" is now "${t}"`] : [];
1983
+ }, i = new Set(r(n.animate));
1984
+ n.hover !== void 0 && i.add("the \"hover\" option is now \"tooltip\"");
1985
+ for (let e of t) {
1986
+ e.hasAttribute("data-chart-hover") && i.add("data-chart-hover is now data-chart-tooltip");
1987
+ let t = getComputedStyle(e);
1988
+ for (let [e, n] of cn) t.getPropertyValue(e).trim() && i.add(`${e} is now ${n}`);
1989
+ for (let t of r(e.getAttribute("data-chart-animate"))) i.add(t);
1990
+ }
1991
+ i.size && (un = !0, console.warn(`[${e}] ${[...i].join("; ")}. The old names work until the next minor version.`));
1992
+ }, fn = async (e = {}, t = document) => {
1788
1993
  let n = {
1789
- ...M,
1994
+ ...v,
1790
1995
  ...e
1791
1996
  };
1792
- n.debug && (Q.enabled = !0);
1793
- let r = (await Jt(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => Yt(e, n)).filter((e) => e !== null);
1794
- return Q.log(`Made ${r.length} chart(s).`), {
1795
- charts: r,
1997
+ n.debug && (X.enabled = !0);
1998
+ let r = await an(Array.from(t.querySelectorAll(n.selector)), n);
1999
+ dn(r, n);
2000
+ let i = r.map((e) => on(e, n)).filter((e) => e !== null);
2001
+ return X.log(`Made ${i.length} chart(s).`), {
2002
+ charts: i,
1796
2003
  refresh: () => {
1797
- for (let e of r) e.refresh();
2004
+ for (let e of i) e.refresh();
1798
2005
  },
1799
2006
  destroy: () => {
1800
- for (let e of r) e.destroy();
2007
+ for (let e of i) e.destroy();
1801
2008
  }
1802
2009
  };
1803
2010
  };
1804
2011
  //#endregion
1805
- export { k as _, Dt as a, lt as c, gt as d, ht as f, t as g, w as h, Jt as i, pt as l, qe as m, Lt as n, At as o, $ as p, Zt as r, Nt as s, Xt as t, mt as u, O as v, M as y };
2012
+ export { h as _, Lt as a, v as b, gt as c, Dt as d, Et as f, t as g, f as h, an as i, wt as l, Le as m, qt as n, Bt as o, He as p, fn as r, Ut as s, sn as t, Tt as u, g as v, m as y };