@martinomagnifico/tablechart 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,22 +19,25 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
19
19
  threshold: .5,
20
20
  replay: !1,
21
21
  langattribute: "data-i18n"
22
- }, N = (e, t) => `${e}:${t}`, P = "http://www.w3.org/2000/svg", F = (e, t = {}) => {
22
+ }, N = (e, t) => `${e}:${t}`, P = "http://www.w3.org/2000/svg", F = (e) => Math.round(e * 100) / 100, I = (e, t = {}) => {
23
23
  let n = document.createElementNS(P, e);
24
- for (let e in t) n.setAttribute(e, String(t[e]));
24
+ for (let e in t) {
25
+ let r = t[e];
26
+ n.setAttribute(e, String(typeof r == "number" ? F(r) : r));
27
+ }
25
28
  return n;
26
- }, I = (e, t) => [e, ...t.classes].join(" "), L = (e, t) => {
29
+ }, L = (e, t) => [e, ...t.classes].join(" "), R = (e, t) => {
27
30
  let n = document.createElement("span");
28
31
  return n.className = e, n.inert = !0, t.appendChild(n), n;
29
- }, R = (e, t, n, r, i) => {
32
+ }, z = (e, t, n, r, i) => {
30
33
  e.style.left = `${t / r * 100}%`, e.style.top = `${n / i * 100}%`;
31
- }, z = 0, B = (e, t, n, r) => {
34
+ }, B = 0, ee = (e, t, n, r) => {
32
35
  if (!t.length) return;
33
- let i = `tablechart-cut-${++z}`, a = F("mask", {
36
+ let i = `tablechart-cut-${++B}`, a = I("mask", {
34
37
  id: i,
35
38
  maskUnits: "userSpaceOnUse"
36
39
  });
37
- a.appendChild(F("rect", {
40
+ a.appendChild(I("rect", {
38
41
  x: -n,
39
42
  y: -r,
40
43
  width: n * 3,
@@ -43,11 +46,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
43
46
  }));
44
47
  for (let e of t) e.setAttribute("fill", "black"), a.appendChild(e);
45
48
  let o = e.querySelector(":scope > defs");
46
- o || (o = F("defs"), e.prepend(o)), o.appendChild(a);
47
- let s = F("g", { mask: `url(#${i})` });
49
+ o || (o = I("defs"), e.prepend(o)), o.appendChild(a);
50
+ let s = I("g", { mask: `url(#${i})` });
48
51
  for (let t of Array.from(e.childNodes)) t !== o && s.appendChild(t);
49
52
  e.appendChild(s);
50
- }, ee = 0, V = (e) => Array.from(e.querySelectorAll(`.${i}`)).map((e) => {
53
+ }, te = 0, V = (e) => Array.from(e.querySelectorAll(`.${i}`)).map((e) => {
51
54
  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")));
52
55
  return {
53
56
  row: Number(e.dataset.row),
@@ -57,7 +60,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
57
60
  height: o - i,
58
61
  sideways: e.dataset.grow === "right"
59
62
  };
60
- }), H = {
63
+ }), ne = {
61
64
  create: () => null,
62
65
  draw(e, t, n) {
63
66
  let { rows: r, y: i, svg: a, breakAt: o } = n;
@@ -84,11 +87,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
84
87
  [c + 2 * l, t + o],
85
88
  [c + i, t - o]
86
89
  ];
87
- }, l = (e, t = !1) => e.map(([e, t], n) => `${n === 0 ? "M" : "L"} ${e.toFixed(1)} ${t.toFixed(1)}`).join(" ") + (t ? " Z" : ""), u = `tablechart-break-${++ee}`, d = F("mask", {
90
+ }, l = (e, t = !1) => e.map(([e, t], n) => `${n === 0 ? "M" : "L"} ${e.toFixed(1)} ${t.toFixed(1)}`).join(" ") + (t ? " Z" : ""), u = `tablechart-break-${++te}`, d = I("mask", {
88
91
  id: u,
89
92
  maskUnits: "userSpaceOnUse"
90
93
  });
91
- d.appendChild(F("rect", {
94
+ d.appendChild(I("rect", {
92
95
  x: -j,
93
96
  y: -n.height,
94
97
  width: j * 3,
@@ -100,12 +103,12 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
100
103
  let t = e.sideways ? n.breakX : p;
101
104
  if (t === void 0 || !(e.sideways ? e.x < t && e.x + e.width > t : e.y < p && e.y + e.height > p)) continue;
102
105
  let [i, o] = e.sideways ? [c(e, t), c(e, t + n.breakGap)] : [c(e, p - n.breakGap), c(e, p)];
103
- d.appendChild(F("path", {
106
+ d.appendChild(I("path", {
104
107
  d: l([...i, ...o.slice().reverse()], !0),
105
108
  fill: "black"
106
109
  })), f.push(i, o);
107
110
  let s = N("--after", r[e.row - 1]?.slot ?? 0);
108
- for (let e of [i, o]) a.appendChild(F("path", {
111
+ for (let e of [i, o]) a.appendChild(I("path", {
109
112
  class: C,
110
113
  "data-part": "edge",
111
114
  "data-note": n.note,
@@ -114,20 +117,20 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
114
117
  }));
115
118
  }
116
119
  if (!f.length) return;
117
- let m = Array.from(a.querySelectorAll(`.${C}`)), h = F("g", { mask: `url(#${u})` });
120
+ let m = Array.from(a.querySelectorAll(`.${C}`)), h = I("g", { mask: `url(#${u})` });
118
121
  for (let e of Array.from(a.childNodes)) m.includes(e) || h.appendChild(e);
119
- let g = F("defs");
122
+ let g = I("defs");
120
123
  g.appendChild(d), a.prepend(g, h);
121
124
  }
122
- }, U = (e) => {
125
+ }, H = (e) => {
123
126
  let t = -Infinity;
124
127
  for (let n of e) t = Math.max(t, n);
125
128
  return t;
126
- }, W = (e) => (e.split(/[.,]/)[1] || "").length, te = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
129
+ }, U = (e) => (e.split(/[.,]/)[1] || "").length, W = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
127
130
  minimumFractionDigits: e,
128
131
  maximumFractionDigits: e
129
132
  }), G = (e, t, n) => {
130
- let r = te(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
133
+ let r = W(t, n).formatToParts(e), i = r[0]?.type === "minusSign" ? r[0].value : "";
131
134
  return [i, r.slice(+!!i).map((e) => e.value).join("")];
132
135
  }, K = (e) => Number.parseFloat((e.match(/-?[\d.,]+/) || ["NaN"])[0].replace(",", ".")), q = (e, t) => {
133
136
  let n = document.createElement("span");
@@ -146,45 +149,45 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
146
149
  agrees: o
147
150
  };
148
151
  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.`);
149
- }, ne = (e, t) => (t - e) / Math.abs(e) * 100, re = (e, t) => {
152
+ }, re = (e, t) => (t - e) / Math.abs(e) * 100, ie = (e, t) => {
150
153
  let n = (t, n) => {
151
154
  let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
152
155
  return Number.isFinite(r) ? r - 1 : n;
153
156
  };
154
157
  return [n("data-from", 0), n("data-to", t - 1)];
155
- }, ie = {
158
+ }, ae = {
156
159
  create: q,
157
160
  draw(t, n, r) {
158
- let { rows: i, cx: a, y: o, unit: s, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = re(t, i.length), _ = i[h], v = i[g];
161
+ let { rows: i, cx: a, y: o, unit: s, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = ie(t, i.length), _ = i[h], v = i[g];
159
162
  if (!_ || !v) {
160
163
  console.warn(`[${e}] A bracket points at a row that is not there (row ${h + 1} to ${g + 1}, of ${i.length}).`);
161
164
  return;
162
165
  }
163
166
  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;
164
- p.appendChild(F("path", {
167
+ p.appendChild(I("path", {
165
168
  class: c,
166
169
  "data-note": r.note,
167
170
  d: T,
168
171
  style: `--len:${E.toFixed(1)}; ${N("--after", m)}`
169
172
  }));
170
173
  let D = w(v.value);
171
- p.appendChild(F("polygon", {
174
+ p.appendChild(I("polygon", {
172
175
  class: l,
173
176
  "data-note": r.note,
174
177
  points: `${S},${D} ${S - y * .45},${D - y} ${S + y * .45},${D - y}`,
175
178
  style: N("--after", m)
176
- })), n && (R(n, (x + S) / 2, C, j, f), n.style.setProperty("--after", String(m))), J(n, ne(_.value, v.value), `${_.value} to ${v.value}`, r);
179
+ })), n && (z(n, (x + S) / 2, C, j, f), n.style.setProperty("--after", String(m))), J(n, re(_.value, v.value), `${_.value} to ${v.value}`, r);
177
180
  }
178
- }, ae = /* @__PURE__ */ new WeakMap(), oe = (e) => {
181
+ }, oe = /* @__PURE__ */ new WeakMap(), se = (e) => {
179
182
  let t = [...e].filter((e) => !!e), n = t.map((e) => ({
180
183
  width: e.offsetWidth,
181
184
  height: e.offsetHeight
182
185
  }));
183
- t.forEach((e, t) => ae.set(e, n[t]));
184
- }, Y = (e) => ae.get(e) ?? {
186
+ t.forEach((e, t) => oe.set(e, n[t]));
187
+ }, Y = (e) => oe.get(e) ?? {
185
188
  width: e.offsetWidth,
186
189
  height: e.offsetHeight
187
- }, se = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, ce = {
190
+ }, ce = (e, t, n) => ((t / e) ** (1 / n) - 1) * 100, le = {
188
191
  create: q,
189
192
  draw(e, t, n) {
190
193
  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];
@@ -207,7 +210,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
207
210
  }), b -= u, S -= u;
208
211
  }
209
212
  let A = x - D * v, M = S - O * v, P = Math.hypot(A - y, M - b) / o + 1;
210
- d.appendChild(F("line", {
213
+ d.appendChild(I("line", {
211
214
  class: c,
212
215
  "data-note": n.note,
213
216
  x1: y,
@@ -216,39 +219,39 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
216
219
  y2: M,
217
220
  style: `--len:${P.toFixed(1)}; ${N("--after", p)}`
218
221
  }));
219
- let I = -O, L = D, z = v * .42;
220
- d.appendChild(F("polygon", {
222
+ let F = -O, L = D, R = v * .42;
223
+ d.appendChild(I("polygon", {
221
224
  class: l,
222
225
  "data-note": n.note,
223
226
  points: [
224
227
  `${x},${S}`,
225
- `${A + I * z},${M + L * z}`,
226
- `${A - I * z},${M - L * z}`
228
+ `${A + F * R},${M + L * R}`,
229
+ `${A - F * R},${M - L * R}`
227
230
  ].join(" "),
228
231
  style: N("--after", p)
229
- })), t && (R(t, y + (x - y) * k, b + (S - b) * k, j, u), t.style.setProperty("--after", String(p)));
232
+ })), t && (z(t, y + (x - y) * k, b + (S - b) * k, j, u), t.style.setProperty("--after", String(p)));
230
233
  let B = Number.parseFloat(e.getAttribute("data-years") || "");
231
- !Number.isNaN(B) && B > 0 && J(t, se(m.value, h.value, B), `${m.value} to ${h.value} over ${B} years`, n);
234
+ !Number.isNaN(B) && B > 0 && J(t, ce(m.value, h.value, B), `${m.value} to ${h.value} over ${B} years`, n);
232
235
  }
233
- }, le = (e, t, n, r, i) => {
236
+ }, ue = (e, t, n, r, i) => {
234
237
  if (!r) return e / t * n;
235
238
  let { lo: a, hi: o, gap: s, share: c } = r, l = n * c, u = (n - l - i) / (a + (t - o)), d = l / (o - a);
236
239
  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;
237
- }, ue = (e, t, n) => {
240
+ }, de = (e, t, n) => {
238
241
  let r = .15, i = Math.min(e * .7 / (t + (t - 1) * r), n), a = t * i + (t - 1) * i * r;
239
242
  return {
240
243
  size: i,
241
244
  gap: i * r,
242
245
  offset: (e) => -a / 2 + e * i * 1.15
243
246
  };
244
- }, de = (e, t, n) => {
247
+ }, fe = (e, t, n) => {
245
248
  let r = e.series[n], i = e.series.some((e) => e.focus) && !r.focus;
246
249
  return {
247
250
  "data-series": n + 1,
248
251
  ...i && { "data-muted": "" },
249
252
  style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${N("--i", t.slot)}`
250
253
  };
251
- }, fe = (e, t) => {
254
+ }, pe = (e, t) => {
252
255
  let n = 0;
253
256
  return Array.from({ length: t }, (t, r) => {
254
257
  let i = e.cells[r] ?? e.cells[0], a = n;
@@ -258,26 +261,29 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
258
261
  cell: i
259
262
  };
260
263
  });
261
- }, pe = (e, t) => fe(e, t).at(-1)?.to ?? 0, me = (e, t, n) => {
264
+ }, me = (e, t) => pe(e, t).at(-1)?.to ?? 0, he = (e, t, n) => {
262
265
  let r = t.series.some((e) => e.focus);
263
266
  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})`);
264
- }, he = (e, t, n, r = {}) => {
265
- let o = F("g", {
266
- class: I(i, t),
267
+ }, ge = (e, t, n, r = {}) => {
268
+ let o = I("g", {
269
+ class: L(i, t),
267
270
  "data-kind": "bar",
268
271
  "data-row": n + 1,
269
272
  ...r,
270
273
  "data-stack": "",
271
274
  style: N("--i", t.slot)
272
275
  });
273
- return e.svg.appendChild(o), (n, r) => {
274
- o.appendChild(F("rect", {
275
- ...r,
276
- class: I(a, t),
277
- ...de(e, t, n)
276
+ return e.svg.appendChild(o), (i, s) => {
277
+ let c = r["data-grow"] === void 0 ? {} : { "data-grow": r["data-grow"] };
278
+ o.appendChild(I("rect", {
279
+ ...s,
280
+ class: L(a, t),
281
+ "data-row": n + 1,
282
+ ...c,
283
+ ...fe(e, t, i)
278
284
  }));
279
285
  };
280
- }, ge = 6, _e = (e, t, n) => e.some((e) => Y(e).width * n > t - ge * n), ve = (e, t, n) => t >= Y(e).height * n * 1.6, ye = (e, t, n) => t >= Y(e).width * n * 1.5, be = (e, t, n, r, i = .7) => {
286
+ }, _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) => {
281
287
  e.style.setProperty(r, "1");
282
288
  let a = 1;
283
289
  for (let e of t) {
@@ -286,10 +292,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
286
292
  }
287
293
  let o = a >= i ? a : 0;
288
294
  return e.style.setProperty(r, String(o || i)), o;
289
- }, xe = (e, t) => (e.sort((e, t) => e.y - t.y), e.forEach((n, r) => {
295
+ }, Se = (e, t) => (e.sort((e, t) => e.y - t.y), e.forEach((n, r) => {
290
296
  let i = e[r - 1];
291
297
  i && n.y < i.y + t && (n.y = i.y + t);
292
- }), e), Se = {
298
+ }), e), Ce = {
293
299
  segments: (e) => e.map((e) => ({
294
300
  ...e,
295
301
  from: 0,
@@ -309,19 +315,19 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
309
315
  categories: "beside",
310
316
  headroom: () => 0,
311
317
  draw(e) {
312
- 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) => pe(t, e.series.length))), 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 = Math.max(h, e.squeeze?.hi ?? 0), _ = (t, n) => le(Math.abs(t), g, n, e.squeeze, e.breakGap), v = n / t.length, y = (e) => (e + .5) * v, b = Math.min(v * l.barfill, u), x = ue(v, e.series.length, u), S = s[0] ?? e.totals[0], C = S ? Y(S).height * r * .56 : 0, w = Math.max(((d && !e.stacked ? x.size : b) - C) / 2, 5 * r), T = (e) => Y(e).width * r, E = (e) => e.length ? U(e.map(T)) + w + 4 * r : 0, D = e.stacked ? E(e.totals) : d ? E(e.seriesValues.flat()) : 0;
318
+ 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(H(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(H(e.rows.map((t) => me(t, e.series.length))), 0) || 1 : Math.max(H(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = Math.max(h, e.squeeze?.hi ?? 0), _ = (t, n) => ue(Math.abs(t), g, n, e.squeeze, e.breakGap), v = n / t.length, y = (e) => (e + .5) * v, b = Math.min(v * l.barfill, u), x = de(v, e.series.length, u), S = s[0] ?? e.totals[0], C = S ? Y(S).height * r * .56 : 0, w = Math.max(((d && !e.stacked ? x.size : b) - C) / 2, 5 * r), T = (e) => Y(e).width * r, E = (e) => e.length ? H(e.map(T)) + w + 4 * r : 0, D = e.stacked ? E(e.totals) : d ? E(e.seriesValues.flat()) : 0;
313
319
  if (!d) for (let e = 0; e < 3; e++) {
314
320
  let e = m - p - D, n = E(t.map((e, t) => ({
315
321
  seg: e,
316
322
  label: s[t]
317
- })).filter(({ seg: t, label: n }) => !ye(n, _(t.value, e), r)).map(({ label: e }) => e));
323
+ })).filter(({ seg: t, label: n }) => !be(n, _(t.value, e), r)).map(({ label: e }) => e));
318
324
  if (n <= D) break;
319
325
  D = n;
320
326
  }
321
327
  let O = m - p - D, k = (e) => p + _(e, O);
322
328
  if (e.squeeze && (e.breakX = k(e.squeeze.gap)), e.stacked) {
323
329
  e.rows.forEach((t, i) => {
324
- let a = he(e, t, i, { "data-grow": "right" }), o = y(i) - b / 2, s = fe(t, e.series.length);
330
+ let a = ge(e, t, i, { "data-grow": "right" }), o = y(i) - b / 2, s = pe(t, e.series.length);
325
331
  s.forEach(({ from: t, to: s, cell: c }, l) => {
326
332
  let u = e.seriesValues[l][i];
327
333
  if (u.dataset.place = "none", c.missing || s === t) return;
@@ -331,13 +337,13 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
331
337
  y: o,
332
338
  width: Math.max(f - d, 1),
333
339
  height: b
334
- }), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !ye(u, f - d, r) || Y(u).height * r > b), me(u, e, l), R(u, (d + f) / 2, y(i), j, n);
340
+ }), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !be(u, f - d, r) || Y(u).height * r > b), he(u, e, l), z(u, (d + f) / 2, y(i), j, n);
335
341
  });
336
342
  let l = e.totals[i];
337
- l && (l.dataset.place = "after", R(l, k(s.at(-1)?.to ?? 0) + w, y(i), j, n));
343
+ l && (l.dataset.place = "after", z(l, k(s.at(-1)?.to ?? 0) + w, y(i), j, n));
338
344
  let u = c[i];
339
- u && R(u, p - 8 * r, y(i), j, n);
340
- }), a.appendChild(F("line", {
345
+ u && z(u, p - 8 * r, y(i), j, n);
346
+ }), a.appendChild(I("line", {
341
347
  class: o,
342
348
  x1: p,
343
349
  x2: p,
@@ -348,7 +354,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
348
354
  }
349
355
  if (d) {
350
356
  e.plot.dataset.grouped = "";
351
- let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = be(e.plot, t, (e) => ({
357
+ let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = xe(e.plot, t, (e) => ({
352
358
  size: Y(e).height * r,
353
359
  room: x.size + x.gap * .5
354
360
  }), "--tablechart-fit");
@@ -360,8 +366,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
360
366
  return;
361
367
  }
362
368
  let d = k(l.value), f = y(o) + x.offset(c);
363
- a.appendChild(F("rect", {
364
- class: I(i, t),
369
+ a.appendChild(I("rect", {
370
+ class: L(i, t),
365
371
  "data-kind": "bar",
366
372
  "data-row": o + 1,
367
373
  "data-grow": "right",
@@ -369,12 +375,12 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
369
375
  y: f,
370
376
  width: Math.max(d - p, 1),
371
377
  height: x.size,
372
- ...de(e, t, c)
373
- })), u.dataset.place = "after", u.toggleAttribute("data-left-out", !s), R(u, d + w, f + x.size / 2, j, n);
378
+ ...fe(e, t, c)
379
+ })), u.dataset.place = "after", u.toggleAttribute("data-left-out", !s), z(u, d + w, f + x.size / 2, j, n);
374
380
  });
375
381
  let l = c[o];
376
- l && R(l, p - 8 * r, y(o), j, n);
377
- }), a.appendChild(F("line", {
382
+ l && z(l, p - 8 * r, y(o), j, n);
383
+ }), a.appendChild(I("line", {
378
384
  class: o,
379
385
  x1: p,
380
386
  x2: p,
@@ -383,11 +389,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
383
389
  }));
384
390
  return;
385
391
  }
386
- let A = t.map((e, t) => ye(s[t], k(e.value) - p, r));
392
+ let A = t.map((e, t) => be(s[t], k(e.value) - p, r));
387
393
  t.forEach((t, o) => {
388
394
  let l = k(t.value), u = y(o);
389
- a.appendChild(F("rect", {
390
- class: I(i, t),
395
+ a.appendChild(I("rect", {
396
+ class: L(i, t),
391
397
  "data-kind": t.kind,
392
398
  "data-row": o + 1,
393
399
  "data-grow": "right",
@@ -398,10 +404,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
398
404
  style: N("--i", t.slot)
399
405
  }));
400
406
  let d = s[o], f = Math.max(Math.min(w, l - p - T(d) - 6 * r), 6 * r);
401
- d.dataset.place = A[o] ? "inside" : "after", d.dataset.kind = t.kind, R(d, A[o] ? e.insideAlign === "center" ? (p + l) / 2 : e.insideAlign === "start" ? p + f + T(d) / 2 : l - f - T(d) / 2 : l + w, u, j, n);
407
+ d.dataset.place = A[o] ? "inside" : "after", d.dataset.kind = t.kind, z(d, A[o] ? e.insideAlign === "center" ? (p + l) / 2 : e.insideAlign === "start" ? p + f + T(d) / 2 : l - f - T(d) / 2 : l + w, u, j, n);
402
408
  let m = c[o];
403
- m && R(m, p - 8 * r, u, j, n);
404
- }), a.appendChild(F("line", {
409
+ m && z(m, p - 8 * r, u, j, n);
410
+ }), a.appendChild(I("line", {
405
411
  class: o,
406
412
  x1: p,
407
413
  x2: p,
@@ -409,7 +415,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
409
415
  y2: n
410
416
  }));
411
417
  }
412
- }, Ce = {
418
+ }, we = {
413
419
  segments: (e) => e.map((e) => ({
414
420
  ...e,
415
421
  from: 0,
@@ -426,8 +432,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
426
432
  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);
427
433
  if (e.stacked) {
428
434
  e.rows.forEach((t, i) => {
429
- let o = he(e, t, i), l = n(i) - a / 2;
430
- fe(t, e.series.length).forEach(({ from: t, to: u, cell: d }, f) => {
435
+ let o = ge(e, t, i), l = n(i) - a / 2;
436
+ pe(t, e.series.length).forEach(({ from: t, to: u, cell: d }, f) => {
431
437
  let p = e.seriesValues[f][i];
432
438
  if (p.dataset.place = "none", d.missing || u === t) return;
433
439
  let m = r(u), h = r(t);
@@ -436,11 +442,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
436
442
  y: m,
437
443
  width: a,
438
444
  height: Math.max(h - m, 1)
439
- }), p.dataset.place = "inside", p.toggleAttribute("data-left-out", !ve(p, h - m, c) || Y(p).width * c > a - 4 * c), me(p, e, f), R(p, n(i), (m + h) / 2, j, s);
445
+ }), 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);
440
446
  });
441
- let u = e.totals[i], d = fe(t, e.series.length).at(-1)?.to ?? 0;
442
- u && (u.dataset.place = "outside", R(u, n(i), r(d) - 4 * c, j, s));
443
- }), l.appendChild(F("line", {
447
+ let u = e.totals[i], d = pe(t, e.series.length).at(-1)?.to ?? 0;
448
+ u && (u.dataset.place = "outside", z(u, n(i), r(d) - 4 * c, j, s));
449
+ }), l.appendChild(I("line", {
444
450
  class: o,
445
451
  x1: 0,
446
452
  x2: j,
@@ -450,9 +456,9 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
450
456
  return;
451
457
  }
452
458
  if (e.series.length > 1) {
453
- let t = ue(n(1) - n(0) || n(0) * 2, e.series.length, e.barMax);
459
+ let t = de(n(1) - n(0) || n(0) * 2, e.series.length, e.barMax);
454
460
  e.plot.dataset.grouped = "";
455
- let a = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), u = be(e.plot, a, (e) => ({
461
+ let a = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), u = xe(e.plot, a, (e) => ({
456
462
  size: Y(e).width * c,
457
463
  room: t.size + t.gap * .5
458
464
  }), "--tablechart-fit");
@@ -464,18 +470,18 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
464
470
  return;
465
471
  }
466
472
  let _ = r(m.value);
467
- l.appendChild(F("rect", {
468
- class: I(i, a),
473
+ l.appendChild(I("rect", {
474
+ class: L(i, a),
469
475
  "data-kind": "bar",
470
476
  "data-row": o + 1,
471
477
  x: g,
472
478
  y: _,
473
479
  width: t.size,
474
480
  height: Math.max(p - _, 1),
475
- ...de(e, a, f)
476
- })), h.dataset.place = "outside", h.toggleAttribute("data-left-out", !u), R(h, g + t.size / 2, _ - 4 * c, j, s);
481
+ ...fe(e, a, f)
482
+ })), h.dataset.place = "outside", h.toggleAttribute("data-left-out", !u), z(h, g + t.size / 2, _ - 4 * c, j, s);
477
483
  });
478
- }), l.appendChild(F("line", {
484
+ }), l.appendChild(I("line", {
479
485
  class: o,
480
486
  x1: 0,
481
487
  x2: j,
@@ -484,16 +490,16 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
484
490
  }));
485
491
  return;
486
492
  }
487
- let m = _e(u, a, c), h = t.map((e, t) => d === "inside" && !m && !e.missing && ve(u[t], p - r(e.value), c)), g = u[0] ? Y(u[0]).height * c * .56 : 0, _ = Infinity;
493
+ let m = ve(u, a, c), h = t.map((e, t) => d === "inside" && !m && !e.missing && ye(u[t], p - r(e.value), c)), g = u[0] ? Y(u[0]).height * c * .56 : 0, _ = Infinity;
488
494
  for (let [e, t] of u.entries()) h[e] && (_ = Math.min(_, (a - Y(t).width * c) / 2));
489
495
  t.forEach((e, t) => {
490
496
  let o = r(e.value);
491
497
  if (e.missing) {
492
- R(u[t], n(t), p - 4 * c, j, s), u[t].dataset.place = "outside";
498
+ z(u[t], n(t), p - 4 * c, j, s), u[t].dataset.place = "outside";
493
499
  return;
494
500
  }
495
- l.appendChild(F("rect", {
496
- class: I(i, e),
501
+ l.appendChild(I("rect", {
502
+ class: L(i, e),
497
503
  "data-kind": e.kind,
498
504
  "data-row": t + 1,
499
505
  x: n(t) - a / 2,
@@ -503,8 +509,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
503
509
  style: N("--i", e.slot)
504
510
  }));
505
511
  let d = Math.min(_, (p - o - g) / 2), m = f === "center" ? (o + p) / 2 : f === "start" ? p - d - g / 2 : o + d + g / 2;
506
- R(u[t], n(t), h[t] ? m : o - 4 * c, j, s), u[t].dataset.place = h[t] ? "inside" : "outside";
507
- }), l.appendChild(F("line", {
512
+ z(u[t], n(t), h[t] ? m : o - 4 * c, j, s), u[t].dataset.place = h[t] ? "inside" : "outside";
513
+ }), l.appendChild(I("line", {
508
514
  class: o,
509
515
  x1: 0,
510
516
  x2: j,
@@ -512,7 +518,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
512
518
  y2: p
513
519
  }));
514
520
  }
515
- }, we = 0, Te = (e) => e.filter((e) => !e.isTotal), Ee = {
521
+ }, Te = 0, Ee = (e) => e.filter((e) => !e.isTotal), De = {
516
522
  aspect: .66,
517
523
  centre: !0,
518
524
  headroom: () => 0,
@@ -523,7 +529,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
523
529
  kind: "bar"
524
530
  })),
525
531
  draw({ rows: e, height: t, unit: n, labelHeight: r, svg: i, values: a, config: o, centre: s }) {
526
- let c = j / 2, l = t / 2, u = Te(e).reduce((e, t) => e + Math.abs(t.value), 0);
532
+ let c = j / 2, l = t / 2, u = Ee(e).reduce((e, t) => e + Math.abs(t.value), 0);
527
533
  if (!u) return;
528
534
  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;
529
535
  if (e.forEach((e, o) => {
@@ -533,8 +539,8 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
533
539
  return;
534
540
  }
535
541
  let d = Math.abs(e.value) / u * _, p = y / _ * 2 * Math.PI - Math.PI / 2;
536
- v.push(p), i.appendChild(F("circle", {
537
- class: I(f, e),
542
+ v.push(p), i.appendChild(I("circle", {
543
+ class: L(f, e),
538
544
  "data-slice": b + 1,
539
545
  "data-row": o + 1,
540
546
  cx: c,
@@ -547,7 +553,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
547
553
  style: `--n:${b}; --palette:var(--tablechart-color-${b + 1}); --arc:${d.toFixed(1)}; --circ:${_.toFixed(1)}; ${N("--i", e.slot)}`
548
554
  }));
549
555
  let x = p + d / _ * Math.PI, C = Math.cos(x), w = Math.sin(x);
550
- i.appendChild(F("line", {
556
+ i.appendChild(I("line", {
551
557
  class: S,
552
558
  x1: c + C * (m + 2 * n),
553
559
  y1: l + w * (m + 2 * n),
@@ -557,47 +563,47 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
557
563
  style: N("--i", e.slot)
558
564
  }));
559
565
  let T = m + 9 * n, E = Y(s).width * n / 2;
560
- R(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;
566
+ 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;
561
567
  }), v.length > 1) {
562
- let e = g - h / 2 - 1, n = g + h / 2 + 1, r = `tablechart-slices-${++we}`, a = F("mask", {
568
+ let e = g - h / 2 - 1, n = g + h / 2 + 1, r = `tablechart-slices-${++Te}`, a = I("mask", {
563
569
  id: r,
564
570
  maskUnits: "userSpaceOnUse"
565
571
  });
566
- a.appendChild(F("rect", {
572
+ a.appendChild(I("rect", {
567
573
  x: 0,
568
574
  y: 0,
569
575
  width: j,
570
576
  height: t,
571
577
  fill: "white"
572
578
  }));
573
- for (let t of v) a.appendChild(F("line", {
579
+ for (let t of v) a.appendChild(I("line", {
574
580
  class: p,
575
581
  x1: c + Math.cos(t) * e,
576
582
  y1: l + Math.sin(t) * e,
577
583
  x2: c + Math.cos(t) * n,
578
584
  y2: l + Math.sin(t) * n
579
585
  }));
580
- let o = F("g", { mask: `url(#${r})` });
586
+ let o = I("g", { mask: `url(#${r})` });
581
587
  for (let e of Array.from(i.querySelectorAll(`.${f}`))) o.appendChild(e);
582
- let s = F("defs");
588
+ let s = I("defs");
583
589
  s.appendChild(a), i.prepend(s, o);
584
590
  }
585
- s && R(s, c, l, j, t);
591
+ s && z(s, c, l, j, t);
586
592
  }
587
- }, De = [
593
+ }, Oe = [
588
594
  "circle",
589
595
  "square",
590
596
  "diamond"
591
- ], Oe = (e, t) => {
592
- let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = De.find((e) => n.includes(e));
597
+ ], ke = (e, t) => {
598
+ let n = e[t]?.marker?.toLowerCase().split(/\s+/) ?? [], r = Oe.find((e) => n.includes(e));
593
599
  return {
594
- shape: r ?? De[Math.floor(t / 2) % De.length],
600
+ shape: r ?? Oe[Math.floor(t / 2) % Oe.length],
595
601
  open: n.includes("open") || !n.includes("filled") && !r && t % 2 == 1
596
602
  };
597
- }, ke = (e, t, n, r, i = {}) => {
603
+ }, Ae = (e, t, n, r, i = {}) => {
598
604
  if (e === "square") {
599
605
  let e = r * .88;
600
- return F("rect", {
606
+ return I("rect", {
601
607
  x: t - e,
602
608
  y: n - e,
603
609
  width: e * 2,
@@ -607,19 +613,19 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
607
613
  }
608
614
  if (e === "diamond") {
609
615
  let e = r * 1.2;
610
- return F("polygon", {
616
+ return I("polygon", {
611
617
  points: `${t},${n - e} ${t + e},${n} ${t},${n + e} ${t - e},${n}`,
612
618
  ...i
613
619
  });
614
620
  }
615
- return F("circle", {
621
+ return I("circle", {
616
622
  cx: t,
617
623
  cy: n,
618
624
  r,
619
625
  ...i
620
626
  });
621
627
  }, X = (e) => Number(e.toFixed(2));
622
- function Ae(e, t) {
628
+ function je(e, t) {
623
629
  let n = e.length;
624
630
  if (n < 2) return e.map(() => 0);
625
631
  let r = (n) => (t[n + 1] - t[n]) / (e[n + 1] - e[n] || 1), i = Array(n).fill(0);
@@ -636,17 +642,17 @@ function Ae(e, t) {
636
642
  };
637
643
  return i[0] = a(0, 1, i[1]), i[n - 1] = a(n - 2, n - 1, i[n - 2]), i;
638
644
  }
639
- function je(e, t, n, r) {
645
+ function Me(e, t, n, r) {
640
646
  let i = (t[0] - e[0]) / 3;
641
647
  return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
642
648
  }
643
- function Me(e, t, n, r) {
644
- let [i, a] = je(e, t, n, r), o = ([e, t]) => `${X(e)},${X(t)}`;
649
+ function Ne(e, t, n, r) {
650
+ let [i, a] = Me(e, t, n, r), o = ([e, t]) => `${X(e)},${X(t)}`;
645
651
  return `C${o(i)} ${o(a)} ${o(t)}`;
646
652
  }
647
- function Ne(e, t, n) {
653
+ function Pe(e, t, n) {
648
654
  let r = Array(e).fill(0), i = [], a = () => {
649
- Ae(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
655
+ je(i.map((e) => n(e)[0]), i.map((e) => n(e)[1])).forEach((e, t) => {
650
656
  r[i[t]] = e;
651
657
  }), i = [];
652
658
  };
@@ -655,13 +661,13 @@ function Ne(e, t, n) {
655
661
  }
656
662
  //#endregion
657
663
  //#region src/js/charts/line.ts
658
- var Pe = (e) => e.map((e) => ({
664
+ var Fe = (e) => e.map((e) => ({
659
665
  ...e,
660
666
  from: 0,
661
667
  to: e.value,
662
668
  kind: "bar"
663
- })), Fe = (e) => ({
664
- segments: Pe,
669
+ })), Ie = (e) => ({
670
+ segments: Fe,
665
671
  series: !0,
666
672
  stackable: !0,
667
673
  swatch: e ? "box" : void 0,
@@ -670,7 +676,7 @@ var Pe = (e) => e.map((e) => ({
670
676
  draw(t) {
671
677
  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;
672
678
  f.style.setProperty("--tablechart-base", `${X(w)}px`);
673
- let E = (e) => `--rise:${X(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 ? fe(e, r.length) : 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) => {
679
+ let E = (e) => `--rise:${X(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) : 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) => {
674
680
  if (!x) return {
675
681
  attrs: {},
676
682
  ink: ""
@@ -683,73 +689,73 @@ var Pe = (e) => e.map((e) => ({
683
689
  },
684
690
  ink: `--n:${t}; --m:${+!!n}; --palette:var(--tablechart-color-${t + 1}); `
685
691
  };
686
- }), I = Math.min(C, 6), L = C > 0 ? I / (_ ? n.length : C) : 1, z = (e) => e * L, ee = (e) => `--i:${X(z(e))}`, V = (e) => {
692
+ }), F = Math.min(C, 6), L = C > 0 ? F / (_ ? n.length : C) : 1, R = (e) => e * L, B = (e) => `--i:${X(R(e))}`, te = (e) => {
687
693
  let t = [], r = -1;
688
694
  return n.forEach((n, i) => {
689
695
  O(e, i) || (r < 0 && (r = i), (i === C || O(e, i + 1)) && ((_ || i > r) && t.push([r, i]), r = -1));
690
696
  }), t;
691
- }, H = (e, t) => `--i:${X(z(e) + 1)}; --d:${X(z(_ ? t + 1 : t) - z(e))}`, U = (e, t) => ({
697
+ }, V = (e, t) => `--i:${X(R(e) + 1)}; --d:${X(R(_ ? t + 1 : t) - R(e))}`, ne = (e, t) => ({
692
698
  "data-from": e + 1,
693
699
  "data-to": t + 1,
694
700
  ..._ && { "data-flat": "" }
695
- }), W = v ? r.map((e, t) => Ne(n.length, (e) => O(t, e), (e) => N(t, e))) : [], te = v && e ? r.map((e, t) => Ne(n.length, (e) => O(t, e), (e) => [s(e), c(M(t, e))])) : [], G = (e, t, n) => {
701
+ }), H = v ? r.map((e, t) => Pe(n.length, (e) => O(t, e), (e) => N(t, e))) : [], U = v && e ? r.map((e, t) => Pe(n.length, (e) => O(t, e), (e) => [s(e), c(M(t, e))])) : [], W = (e, t, n) => {
696
702
  let r = [];
697
703
  return e.forEach(([i, a], o) => {
698
- _ ? (r.push(`H${X(i + n * T / 2)}`), o < e.length - 1 && r.push(`V${X(e[o + 1][1])}`)) : o > 0 && r.push(t ? Me(e[o - 1], [i, a], t[o - 1], t[o]) : `L${X(i)},${X(a)}`);
704
+ _ ? (r.push(`H${X(i + n * T / 2)}`), o < e.length - 1 && r.push(`V${X(e[o + 1][1])}`)) : o > 0 && r.push(t ? Ne(e[o - 1], [i, a], t[o - 1], t[o]) : `L${X(i)},${X(a)}`);
699
705
  }), r;
700
- }, K = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [s(t + r), c(i(e, t + r))]), q = (e, t, n, r) => v ? e[t].slice(n, r + 1) : null, J = (e) => s(e) - (_ ? T / 2 : 0), ne = (e) => s(e) + (_ ? T / 2 : 0), re = (e) => {
701
- let t = F("g", {
706
+ }, 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), J = (e) => s(e) + (_ ? T / 2 : 0), re = (e) => {
707
+ let t = I("g", {
702
708
  class: h,
703
709
  ...P[e].attrs,
704
710
  ...p && { "data-stacked": "" },
705
711
  style: P[e].ink
706
- }), n = V(e), r = F("g", {
712
+ }), n = te(e), r = I("g", {
707
713
  class: g,
708
- style: `--rows:${X(I + 1)}; ${n.length ? H(...n[0]) : ""}`
714
+ style: `--rows:${X(F + 1)}; ${n.length ? V(...n[0]) : ""}`
709
715
  });
710
716
  t.appendChild(r);
711
717
  for (let [t, i] of n) {
712
- let n = K(e, t, i, A), a = K(e, t, i, M), o = q(te, e, t, i)?.reverse() ?? null, s = [
713
- `M${X(J(t))},${X(a[0][1])}`,
714
- `L${X(J(t))},${X(n[0][1])}`,
715
- ...G(n, q(W, e, t, i), 1),
716
- `L${X(ne(i))},${X(a[a.length - 1][1])}`,
717
- ...G(a.reverse(), o, -1),
718
+ let n = G(e, t, i, A), a = G(e, t, i, M), o = K(U, e, t, i)?.reverse() ?? null, s = [
719
+ `M${X(q(t))},${X(a[0][1])}`,
720
+ `L${X(q(t))},${X(n[0][1])}`,
721
+ ...W(n, K(H, e, t, i), 1),
722
+ `L${X(J(i))},${X(a[a.length - 1][1])}`,
723
+ ...W(a.reverse(), o, -1),
718
724
  "Z"
719
725
  ].join(" ");
720
- r.appendChild(F("path", {
726
+ r.appendChild(I("path", {
721
727
  d: s,
722
- ...U(t, i),
723
- style: H(t, i)
728
+ ...ne(t, i),
729
+ style: V(t, i)
724
730
  }));
725
731
  }
726
732
  f.appendChild(t);
727
733
  }, ie = (e) => {
728
734
  let t = r[e];
729
- for (let [n, r] of V(e)) {
730
- let i = K(e, n, r, A), a = [`M${X(J(n))},${X(i[0][1])}`, ...G(i, q(W, e, n, r), 1)].join(" ");
731
- f.appendChild(F("path", {
735
+ for (let [n, r] of te(e)) {
736
+ let i = G(e, n, r, A), a = [`M${X(q(n))},${X(i[0][1])}`, ...W(i, K(H, e, n, r), 1)].join(" ");
737
+ f.appendChild(I("path", {
732
738
  class: m,
733
739
  ...P[e].attrs,
734
740
  d: a,
735
741
  ...t.line && { "data-line": t.line },
736
- ...U(n, r),
737
- style: `${P[e].ink}${H(n, r)}`
742
+ ...ne(n, r),
743
+ style: `${P[e].ink}${V(n, r)}`
738
744
  }));
739
745
  }
740
746
  };
741
747
  e && r.forEach((e, t) => re(t)), r.forEach((e, t) => ie(t)), _ || (() => {
742
- let e = r.map((e, t) => x ? Oe(r, t) : {
748
+ let e = r.map((e, t) => x ? ke(r, t) : {
743
749
  shape: "circle",
744
750
  open: !1
745
751
  }), t = (t, n, r) => {
746
752
  let [i, a] = N(t, n);
747
- return ke(e[t].shape, i, a, 4 * u, {
753
+ return Ae(e[t].shape, i, a, 4 * u, {
748
754
  ...r,
749
- style: `${r.style ?? ""}${E(a)}${ee(n)}`
755
+ style: `${r.style ?? ""}${E(a)}${B(n)}`
750
756
  });
751
757
  }, i = (e) => n.map((e, t) => t).filter((t) => !O(e, t));
752
- B(f, r.flatMap((n, r) => e[r].open ? i(r).map((e) => t(r, e, {
758
+ ee(f, r.flatMap((n, r) => e[r].open ? i(r).map((e) => t(r, e, {
753
759
  class: b,
754
760
  "data-row": e + 1,
755
761
  ...x && { "data-series": r + 1 }
@@ -778,7 +784,7 @@ var Pe = (e) => e.map((e) => ({
778
784
  }, se = (e, t) => !p && !_ ? x && !S && r.length > 2 : Y(i[e][t]).width * u > (_ ? ae(e, t) - t + 1 : 1) * T - 4 * u ? !0 : p && c(M(e, t)) - c(A(e, t)) < d * 1.2;
779
785
  i.forEach((e, t) => {
780
786
  e.forEach((e, n) => {
781
- e.style.setProperty("--i", String(X(_ ? (z(n) + z(n + 1)) / 2 : z(n))));
787
+ e.style.setProperty("--i", String(X(_ ? (R(n) + R(n + 1)) / 2 : R(n))));
782
788
  let r = oe(t, n);
783
789
  if (e.dataset.place = r === "above" ? "outside" : r, e.toggleAttribute("data-left-out", r !== "none" && se(t, n)), _ && r !== "none" ? e.dataset.rowEnd = String(ae(t, n) + 1) : delete e.dataset.rowEnd, r === "none") return;
784
790
  let i = Y(e).width * u / 2 + 4 * u, a = s(n);
@@ -788,7 +794,7 @@ var Pe = (e) => e.map((e) => ({
788
794
  above: -7 * u,
789
795
  below: 7 * u
790
796
  };
791
- R(e, a, o + d[r], j, l);
797
+ z(e, a, o + d[r], j, l);
792
798
  });
793
799
  });
794
800
  let ce = a.map((e, t) => {
@@ -801,9 +807,9 @@ var Pe = (e) => e.map((e) => ({
801
807
  y: p ? (i + c(M(t, n))) / 2 : i
802
808
  };
803
809
  }), le = (a[0] ? Y(a[0]).height : 0) * u;
804
- for (let e of xe(ce, le)) R(e.name, e.x, e.y, j, l);
810
+ for (let e of Se(ce, le)) z(e.name, e.x, e.y, j, l);
805
811
  let ue = !e && !p && r.length === 2 && !S ? l - 2 * u : w;
806
- f.appendChild(F("line", {
812
+ f.appendChild(I("line", {
807
813
  class: o,
808
814
  x1: 0,
809
815
  x2: s(C) + s(0),
@@ -811,20 +817,24 @@ var Pe = (e) => e.map((e) => ({
811
817
  y2: ue
812
818
  }));
813
819
  }
814
- }), Ie = Fe(!1), Le = Fe(!0), Re = {
820
+ }), Le = Ie(!1), Re = Ie(!0), ze = /* @__PURE__ */ new Set(), Be = (t, n) => {
821
+ if (Math.abs(t - n) <= Math.abs(n) / 100) return;
822
+ 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.`;
823
+ ze.has(r) || (ze.add(r), console.warn(r));
824
+ }, Ve = {
815
825
  segments: (e) => {
816
- let t = 0;
826
+ let t = 0, n = !1;
817
827
  return e.map((e) => {
818
- if (e.isTotal) return t = e.value, {
828
+ if (e.isTotal) return n && Be(e.value, t), n = !1, t = e.value, {
819
829
  ...e,
820
830
  from: 0,
821
831
  to: e.value,
822
832
  kind: "total"
823
833
  };
824
- let n = t;
825
- return t += e.value, {
834
+ let r = t;
835
+ return t += e.value, n = !0, {
826
836
  ...e,
827
- from: n,
837
+ from: r,
828
838
  to: t,
829
839
  kind: e.value >= 0 ? "up" : "down"
830
840
  };
@@ -833,13 +843,13 @@ var Pe = (e) => e.map((e) => ({
833
843
  breakable: !0,
834
844
  headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
835
845
  draw({ segments: e, cx: t, y: n, barWidth: r, height: a, unit: c, svg: l, values: u, breakAt: d, closing: f, insideAlign: p }) {
836
- let m = n(0), h = _e(u, r, c), g = p ?? "center", _ = e.map((t, r) => {
846
+ let m = n(0), h = ve(u, r, c), g = p ?? "center", _ = e.map((t, r) => {
837
847
  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;
838
848
  return {
839
849
  top: i,
840
850
  length: a,
841
851
  down: t.kind === "down" || t.kind === "total" && r > 0 && r === e.length - 1 && f === "down",
842
- inside: !o && !h && ve(u[r], a, c)
852
+ inside: !o && !h && ye(u[r], a, c)
843
853
  };
844
854
  }), v = u[0] ? Y(u[0]).height * c * .56 : 0, y = Infinity;
845
855
  for (let [e, t] of _.entries()) t.inside && (y = Math.min(y, (r - Y(u[e]).width * c) / 2));
@@ -847,7 +857,7 @@ var Pe = (e) => e.map((e) => ({
847
857
  let o = e[a + 1];
848
858
  if (!o) return;
849
859
  let c = n(i.to), u = t(a) + r / 2, d = t(a + 1) - r / 2;
850
- l.appendChild(F("line", {
860
+ l.appendChild(I("line", {
851
861
  class: s,
852
862
  x1: u,
853
863
  x2: d,
@@ -858,8 +868,8 @@ var Pe = (e) => e.map((e) => ({
858
868
  }));
859
869
  }), e.forEach((e, n) => {
860
870
  let { top: o, length: s, down: d, inside: f } = _[n];
861
- l.appendChild(F("rect", {
862
- class: I(i, e),
871
+ l.appendChild(I("rect", {
872
+ class: L(i, e),
863
873
  "data-kind": e.kind,
864
874
  "data-row": n + 1,
865
875
  "data-grow": d ? "down" : "up",
@@ -872,8 +882,8 @@ var Pe = (e) => e.map((e) => ({
872
882
  let p = u[n], m = Math.min(y, (s - v) / 2), h = o + m + v / 2, b = o + s - m - v / 2, x = g === "center" ? o + s / 2 : g === "end" === d ? b : h;
873
883
  p.dataset.place = f ? "inside" : "outside", p.dataset.kind = e.kind;
874
884
  let S = f ? x : e.kind === "down" ? o + s + Y(p).height * c + 3 * c : o - 3 * c;
875
- R(p, t(n), S, j, a);
876
- }), l.appendChild(F("line", {
885
+ z(p, t(n), S, j, a);
886
+ }), l.appendChild(I("line", {
877
887
  class: o,
878
888
  x1: 0,
879
889
  x2: j,
@@ -891,7 +901,7 @@ var Pe = (e) => e.map((e) => ({
891
901
  let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
892
902
  return o > 50 ? console.warn(`[${e}] ${t} took ${o.toFixed(1)} ms for ${s} rows, more than 50 ms.`, n) : Z.log(`${t} took ${o.toFixed(1)} ms for ${s} rows.`, n), a;
893
903
  }
894
- }, ze = (e) => {
904
+ }, He = (e) => {
895
905
  let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
896
906
  return {
897
907
  raw: t,
@@ -901,9 +911,9 @@ var Pe = (e) => e.map((e) => ({
901
911
  missing: !n,
902
912
  value: n ? Number.parseFloat(n[2].replace(",", ".")) : 0
903
913
  };
904
- }, Be = (e, t = "data-i18n") => Array.from(e.querySelectorAll("tbody tr")).map((e, n) => {
905
- let r = e.querySelector("th"), i = Array.from(e.querySelectorAll("td")).map(ze);
906
- return i.length || i.push(ze(null)), {
914
+ }, Ue = (e, t = "data-i18n") => Array.from(e.querySelectorAll("tbody tr")).map((e, n) => {
915
+ let r = e.querySelector("th"), i = Array.from(e.querySelectorAll("td")).map(He);
916
+ return i.length || i.push(He(null)), {
907
917
  ...i[0],
908
918
  label: (r?.textContent || "").trim(),
909
919
  key: t && r?.getAttribute(t) || null,
@@ -912,8 +922,8 @@ var Pe = (e) => e.map((e) => ({
912
922
  isTotal: e.getAttribute("data-kind") === "total",
913
923
  slot: n
914
924
  };
915
- }), Ve = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), He = (e) => e === "dashed" || e === "dotted" ? e : null, Ue = (e, t, n = "data-i18n") => {
916
- let r = Ve(e), i = Math.max(1, U(t.map((e) => e.cells.length)));
925
+ }), 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") => {
926
+ let r = We(e), i = Math.max(1, H(t.map((e) => e.cells.length)));
917
927
  return Array.from({ length: i }, (e, t) => {
918
928
  let i = r[t];
919
929
  return {
@@ -921,10 +931,10 @@ var Pe = (e) => e.map((e) => ({
921
931
  key: n && i?.getAttribute(n) || null,
922
932
  focus: i?.getAttribute("data-kind") === "focus",
923
933
  marker: i?.getAttribute("data-marker") ?? null,
924
- line: He(i?.getAttribute("data-line"))
934
+ line: Ge(i?.getAttribute("data-line"))
925
935
  };
926
936
  });
927
- }, We = (t, n) => {
937
+ }, qe = (t, n) => {
928
938
  if (!n) return;
929
939
  let r = /* @__PURE__ */ new Map();
930
940
  for (let i of t) {
@@ -937,98 +947,145 @@ var Pe = (e) => e.map((e) => ({
937
947
  i.querySelectorAll("tbody th").forEach((e, r) => {
938
948
  e.getAttribute(n) || e.setAttribute(n, `${t}-row${r + 1}`);
939
949
  });
940
- let a = Ve(i);
950
+ let a = We(i);
941
951
  a.length > 1 && a.forEach((e, r) => {
942
952
  e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
943
953
  }), Z?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
944
954
  }
945
- }, Ge = [
955
+ }, Je = [
946
956
  "axis-break",
947
957
  "trend",
948
958
  "bracket"
949
- ], Ke = (e) => {
950
- 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) => Ge.includes(e.getAttribute("data-annotation") ?? "")), a = (e) => e.hasAttribute("data-fragment");
951
- if (!t && !n.some(a) && !r.some(a) && !i.some(a)) return null;
952
- let o = [], s = /* @__PURE__ */ new Map(), c = [], l = (e) => {
953
- let t = e === null ? void 0 : s.get(e);
954
- return t === void 0 && (t = o.length, o.push(e), c.push(0), e !== null && s.set(e, t)), t;
955
- }, u = 0, d = n.map((e) => {
959
+ ], Ye = (e) => {
960
+ 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")));
961
+ if (!t && !n.some(a) && !r.some(a) && !o.flat().some(a) && !i.some(a)) return null;
962
+ let s = [], c = /* @__PURE__ */ new Map(), l = [], u = (e) => {
963
+ let t = e === null ? void 0 : c.get(e);
964
+ return t === void 0 && (t = s.length, s.push(e), l.push(0), e !== null && c.set(e, t)), t;
965
+ }, d = 0, f = e.getAttribute("data-chart") === "donut", p = (e) => f && e.getAttribute("data-kind") === "total", m = n.map((e) => {
966
+ if (p(e)) return {
967
+ step: null,
968
+ slot: 0
969
+ };
956
970
  if (!t && !a(e)) return {
957
971
  step: null,
958
- slot: u++
972
+ slot: d++
959
973
  };
960
- let n = l(e.getAttribute("data-fragment-index"));
974
+ let n = u(e.getAttribute("data-fragment-index"));
961
975
  return {
962
976
  step: n,
963
- slot: c[n]++
977
+ slot: l[n]++
978
+ };
979
+ }), h = Math.max(-1, ...m.map((e) => e.step ?? -1));
980
+ if (h >= 0) for (let [e, t] of n.entries()) p(t) && (m[e] = {
981
+ step: h,
982
+ slot: l[h]++
983
+ });
984
+ let g = r.map((e) => ({ step: a(e) ? u(e.getAttribute("data-fragment-index")) : null })), _ = o.map((e) => e.map(() => ({
985
+ step: null,
986
+ slot: 0
987
+ }))), v = Math.max(0, ...o.map((e) => e.length));
988
+ for (let e = 0; e < v; e++) for (let [t, n] of o.entries()) {
989
+ let r = n[e];
990
+ if (!r || !a(r)) continue;
991
+ let i = u(r.getAttribute("data-fragment-index"));
992
+ _[t][e] = {
993
+ step: i,
994
+ slot: l[i]++
964
995
  };
965
- }), f = r.map((e) => ({ step: a(e) ? l(e.getAttribute("data-fragment-index")) : null }));
996
+ }
966
997
  return {
967
- rows: d,
968
- series: f,
998
+ rows: m,
999
+ series: g,
1000
+ cells: _,
969
1001
  notes: i.map((e) => {
970
1002
  let t = (t, n) => {
971
1003
  let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
972
1004
  return Number.isFinite(r) ? r - 1 : n;
973
- }, [n, r] = e.getAttribute("data-annotation") === "bracket" ? [t("data-from", 0), t("data-to", d.length - 1)] : [0, d.length - 1], i = null;
974
- for (let e = Math.min(n, r); e <= Math.max(n, r); e++) {
975
- let t = d[e]?.step ?? null;
976
- t !== null && (i === null || t > i) && (i = t);
977
- }
978
- let o = f[t("data-series", 0)]?.step ?? null;
979
- o !== null && (i === null || o > i) && (i = o), a(e) && (i = l(e.getAttribute("data-fragment-index")));
980
- let s = i === null ? d.length : d.filter((e) => e.step === i).length;
1005
+ }, [n, r] = e.getAttribute("data-annotation") === "bracket" ? [t("data-from", 0), t("data-to", m.length - 1)] : [0, m.length - 1], i = null;
1006
+ for (let e = Math.min(n, r); e <= Math.max(n, r); e++) for (let t of [m[e]?.step ?? null, ...(_[e] ?? []).map((e) => e.step)]) t !== null && (i === null || t > i) && (i = t);
1007
+ let o = g[t("data-series", 0)]?.step ?? null;
1008
+ o !== null && (i === null || o > i) && (i = o), a(e) && (i = u(e.getAttribute("data-fragment-index")));
1009
+ let s = i === null ? m.length : m.filter((e) => e.step === i).length;
981
1010
  return {
982
1011
  step: i,
983
1012
  after: s
984
1013
  };
985
1014
  }),
986
- count: o.length,
987
- indexes: o
1015
+ count: s.length,
1016
+ indexes: s
988
1017
  };
989
- }, qe = (e) => {
1018
+ }, Xe = (e) => {
990
1019
  let t = e.plan;
991
1020
  if (!t) return;
992
1021
  let n = (t) => t === null || e.step - t >= 1;
993
1022
  for (let r of e.figure.querySelectorAll("[data-from]")) {
994
- let e = Number(r.dataset.from) - 1, i = Number(r.dataset.to) - 1, a = r.closest("[data-series]")?.dataset.series, o = a ? t.series[Number(a) - 1] : void 0, s = e - 1;
995
- if (o && o.step !== null) s = n(o.step) ? i : e - 1;
996
- else for (; s < i && n(t.rows[s + 1]?.step ?? null);) s++;
997
- let c = r.hasAttribute("data-flat") ? (s - e + 1) / (i - e + 1) : i > e ? Math.max(0, s - e) / (i - e) : 0;
998
- r.style.setProperty("--reveal", String(c));
1023
+ let e = Number(r.dataset.from) - 1, i = Number(r.dataset.to) - 1, a = r.closest("[data-series]")?.dataset.series, o = a ? Number(a) - 1 : 0, s = t.series[o], c = (e) => t.cells[e]?.[o]?.step ?? t.rows[e]?.step ?? null, l = e - 1;
1024
+ if (s && s.step !== null) l = n(s.step) ? i : e - 1;
1025
+ else for (; l < i && n(c(l + 1));) l++;
1026
+ let u = r.hasAttribute("data-flat") ? (l - e + 1) / (i - e + 1) : i > e ? Math.max(0, l - e) / (i - e) : 0;
1027
+ r.style.setProperty("--reveal", String(u));
999
1028
  }
1000
- }, Je = (e) => {
1029
+ }, Ze = (e) => {
1001
1030
  let t = e.plan;
1002
1031
  if (!t) return;
1003
- let n = t.rows.length - 1, r = (e, t, n, r) => {
1032
+ 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) => {
1033
+ let t = r(e);
1034
+ return t.some((e) => e === null) ? null : Math.min(...t);
1035
+ }, a = new Set(e.totals), o = (e, t, n, r) => {
1004
1036
  e.style.setProperty(n, String(r)), e.style.removeProperty("--d"), t === null ? e.style.removeProperty("--step") : e.style.setProperty("--step", String(t));
1005
1037
  };
1006
- for (let i of e.figure.querySelectorAll("[data-row], [data-series], [data-note]")) {
1007
- if (i.closest("table, .tablechart-controls") || i.hasAttribute("data-from")) continue;
1008
- let e = Number(i.dataset.note);
1038
+ for (let s of e.figure.querySelectorAll("[data-row], [data-series], [data-note]")) {
1039
+ if (s.closest("table, .tablechart-controls") || s.hasAttribute("data-from")) continue;
1040
+ let e = Number(s.dataset.note);
1009
1041
  if (e > 0) {
1010
1042
  let n = t.notes[e - 1];
1011
- n && r(i, n.step, "--after", n.after);
1043
+ n && o(s, n.step, "--after", n.after);
1012
1044
  continue;
1013
1045
  }
1014
- let a = i.dataset.row ? Number(i.dataset.row) - 1 : n;
1015
- if (i.classList.contains("tablechart-connector")) {
1016
- let e = t.rows[a - 1], n = t.rows[a];
1046
+ let c = s.dataset.row ? Number(s.dataset.row) - 1 : n;
1047
+ if (s.classList.contains("tablechart-connector")) {
1048
+ let e = t.rows[c - 1], n = t.rows[c];
1017
1049
  if (e && n) {
1018
1050
  let t = (e.step ?? -1) > (n.step ?? -1);
1019
- r(i, t ? e.step : n.step, "--i", t ? e.slot + 1 : n.slot);
1051
+ o(s, t ? e.step : n.step, "--i", t ? e.slot + 1 : n.slot);
1020
1052
  }
1021
1053
  continue;
1022
1054
  }
1023
- let o = i.dataset.series ? t.series[Number(i.dataset.series) - 1] : void 0;
1024
- o && o.step !== null ? r(i, o.step, "--i", a) : t.rows[a] && r(i, t.rows[a].step, "--i", t.rows[a].slot);
1055
+ if (a.has(s)) {
1056
+ let e = r(c).filter((e) => e !== null);
1057
+ o(s, e.length ? Math.max(...e) : null, "--i", t.rows[c]?.slot ?? 0);
1058
+ continue;
1059
+ }
1060
+ if (s.hasAttribute("data-stack")) {
1061
+ o(s, i(c), "--i", t.rows[c]?.slot ?? 0);
1062
+ continue;
1063
+ }
1064
+ let l = s.dataset.series ? Number(s.dataset.series) - 1 : 0, u = s.dataset.series ? t.series[l] : void 0;
1065
+ if (s.classList.contains("tablechart-piece")) {
1066
+ let e = r(c)[l] ?? null, n = t.cells[c]?.[l];
1067
+ o(s, e === i(c) ? null : e, "--i", n && n.step !== null ? n.slot : c);
1068
+ continue;
1069
+ }
1070
+ if (s.dataset.place === "legend") {
1071
+ let e = Math.min(...t.cells.map((e) => e[l]?.step ?? Infinity));
1072
+ o(s, u?.step ?? (Number.isFinite(e) ? e : null), "--i", 0);
1073
+ continue;
1074
+ }
1075
+ let d = t.cells[c]?.[l];
1076
+ 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);
1077
+ }
1078
+ let s = e.figure.querySelector(`.${x}`);
1079
+ if (s) {
1080
+ let e = [...t.rows, ...t.cells.flat()].map((e) => e.step ?? -1), n = Math.max(-1, ...e);
1081
+ n < 0 ? o(s, null, "--i", 0) : o(s, n, "--i", e.filter((e) => e === n).length);
1025
1082
  }
1026
- qe(e);
1083
+ Xe(e);
1027
1084
  }, Q = (e, t, n = !1) => {
1028
1085
  let r = e.plan;
1029
1086
  if (!r) return;
1030
1087
  let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
1031
- e.step = i, e.figure.style.setProperty("--tablechart-step", String(i)), qe(e);
1088
+ e.step = i, e.figure.style.setProperty("--tablechart-step", String(i)), Xe(e);
1032
1089
  let [o, s] = e.controls?.querySelectorAll("button") ?? [];
1033
1090
  o && (o.disabled = i === 0), s && (s.disabled = i === r.count), a && !n && e.figure.dispatchEvent(new CustomEvent("tablechart:step", {
1034
1091
  bubbles: !0,
@@ -1037,7 +1094,7 @@ var Pe = (e) => e.map((e) => ({
1037
1094
  steps: r.count
1038
1095
  }
1039
1096
  }));
1040
- }, Ye = (e, t, n) => {
1097
+ }, Qe = (e, t, n) => {
1041
1098
  let r = document.createElement("div");
1042
1099
  r.className = A;
1043
1100
  let i = (r) => {
@@ -1045,11 +1102,11 @@ var Pe = (e) => e.map((e) => ({
1045
1102
  i.type = "button", i.className = `tablechart-${r}`, i.dataset.go = r;
1046
1103
  let a = document.createElement("span");
1047
1104
  a.className = "tablechart-control-icon", a.setAttribute("aria-hidden", "true");
1048
- let o = F("svg", {
1105
+ let o = I("svg", {
1049
1106
  viewBox: "0 0 16 16",
1050
1107
  focusable: "false"
1051
1108
  });
1052
- o.appendChild(F("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
1109
+ o.appendChild(I("path", { d: r === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5" })), a.appendChild(o);
1053
1110
  let s = document.createElement("span");
1054
1111
  s.className = "tablechart-control-label", s.textContent = e[r];
1055
1112
  let c = t[r];
@@ -1066,35 +1123,35 @@ var Pe = (e) => e.map((e) => ({
1066
1123
  ]), i;
1067
1124
  };
1068
1125
  return r.append(i("previous"), i("next")), r;
1069
- }, Xe = {
1070
- area: Le,
1071
- bar: Se,
1072
- column: Ce,
1073
- donut: Ee,
1074
- line: Ie,
1075
- waterfall: Re
1076
- }, Ze = {
1077
- "axis-break": H,
1078
- trend: ce,
1079
- bracket: ie
1080
- }, Qe = Object.keys(Ze), $e = (e) => {
1126
+ }, $e = {
1127
+ area: Re,
1128
+ bar: Ce,
1129
+ column: we,
1130
+ donut: De,
1131
+ line: Le,
1132
+ waterfall: Ve
1133
+ }, et = {
1134
+ "axis-break": ne,
1135
+ trend: le,
1136
+ bracket: ae
1137
+ }, tt = Object.keys(et), nt = (e) => {
1081
1138
  let t = "";
1082
1139
  for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
1083
1140
  return t.trim();
1084
- }, et = [
1141
+ }, rt = [
1085
1142
  "straight",
1086
1143
  "step",
1087
1144
  "smooth"
1088
- ], tt = (e, t) => {
1145
+ ], it = (e, t) => {
1089
1146
  let n = e.dataset.chartShape;
1090
- return n && et.includes(n) ? n : et.includes(t.shape) ? t.shape : "straight";
1091
- }, nt = (e) => {
1147
+ return n && rt.includes(n) ? n : rt.includes(t.shape) ? t.shape : "straight";
1148
+ }, at = (e) => {
1092
1149
  for (let t of e.querySelectorAll("br")) {
1093
- if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test($e(t))) continue;
1150
+ if (t.previousElementSibling?.classList.contains("tablechart-sr") || /[.!?:;,…]$/.test(nt(t))) continue;
1094
1151
  let e = document.createElement("span");
1095
1152
  e.className = E, e.textContent = ". ", t.before(e);
1096
1153
  }
1097
- }, rt = (e, t, n) => {
1154
+ }, ot = (e, t, n) => {
1098
1155
  let r = e.querySelector("table");
1099
1156
  if (!r) return null;
1100
1157
  let i = r.querySelector("tfoot [data-chart-total]");
@@ -1105,23 +1162,23 @@ var Pe = (e) => e.map((e) => ({
1105
1162
  s && n.langattribute && o.setAttribute(n.langattribute, `${s}-total`);
1106
1163
  let c = a.insertCell();
1107
1164
  return c.setAttribute("data-chart-total", ""), c.dataset.value = t.dataset.value ?? "0", a.prepend(o), c;
1108
- }, it = 0, at = (e) => {
1165
+ }, st = 0, ct = (e) => {
1109
1166
  let t = e.querySelector(":scope > figcaption");
1110
1167
  if (!t) return;
1111
- nt(t);
1168
+ at(t);
1112
1169
  let n = (e) => e.hasAttribute("aria-label") || e.hasAttribute("aria-labelledby"), r = (e) => {
1113
- t.id || (t.id = `tablechart-caption-${++it}`), e.setAttribute("aria-labelledby", t.id);
1170
+ t.id || (t.id = `tablechart-caption-${++st}`), e.setAttribute("aria-labelledby", t.id);
1114
1171
  };
1115
1172
  e.tagName === "FIGURE" && !n(e) && r(e);
1116
1173
  let i = e.querySelector("table");
1117
1174
  i && !n(i) && !i.querySelector(":scope > caption") && r(i);
1118
- }, ot = (i, a, o = null) => {
1119
- let s = o ?? (i.getAttribute("data-chart") || "column"), c = Xe[s];
1120
- if (!c) return console.warn(`[${e}] Unknown chart type "${s}". Known types: ${Object.keys(Xe).join(", ")}.`), i.setAttribute("data-chart-empty", ""), null;
1121
- let l = Be(i, a.langattribute);
1175
+ }, lt = (i, a, o = null) => {
1176
+ let s = o ?? (i.getAttribute("data-chart") || "column"), c = $e[s];
1177
+ if (!c) return console.warn(`[${e}] Unknown chart type "${s}". Known types: ${Object.keys($e).join(", ")}.`), i.setAttribute("data-chart-empty", ""), null;
1178
+ let l = Ue(i, a.langattribute);
1122
1179
  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;
1123
- at(i);
1124
- let u = Ue(i, l, a.langattribute);
1180
+ ct(i);
1181
+ let u = Ke(i, l, a.langattribute);
1125
1182
  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));
1126
1183
  let d = u.length > 1;
1127
1184
  d && i.style.setProperty("--tablechart-series-count", String(u.length));
@@ -1131,36 +1188,36 @@ var Pe = (e) => e.map((e) => ({
1131
1188
  p && l.some((e) => e.cells.slice(0, u.length).some((e) => e.value < 0)) && console.warn(`[${e}] A stacked chart has a value below zero. It takes no room in the stack.`);
1132
1189
  let m = document.createElement("div");
1133
1190
  m.className = t, m.setAttribute("aria-hidden", "true");
1134
- let h = F("svg", {
1191
+ let h = I("svg", {
1135
1192
  role: "presentation",
1136
1193
  focusable: "false"
1137
1194
  });
1138
1195
  m.appendChild(h), i.appendChild(m);
1139
- 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) => W(e.number))))), b = u.map((e, t) => l.map((e, n) => {
1140
- let i = e.cells[t] ?? e.cells[0], a = L(r, m);
1196
+ let g = c.centre ? l.filter((e) => !e.isTotal) : l, y = Math.max(0, H(g.flatMap((e) => e.cells.slice(0, u.length).map((e) => U(e.number))))), b = u.map((e, t) => l.map((e, n) => {
1197
+ let i = e.cells[t] ?? e.cells[0], a = R(r, m);
1141
1198
  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;
1142
1199
  })), S = b[0], C = p && c.totals ? l.map((e, t) => {
1143
- let n = L(r, m);
1144
- n.classList.add(...e.classes), n.dataset.kind = "total", n.dataset.row = String(t + 1), n.dataset.value = String(pe(e, u.length));
1200
+ let n = R(r, m);
1201
+ n.classList.add(...e.classes), n.dataset.kind = "total", n.dataset.row = String(t + 1), n.dataset.value = String(me(e, u.length));
1145
1202
  let i = e.cells[0];
1146
1203
  return i.prefix && (n.dataset.prefix = i.prefix), i.suffix && (n.dataset.suffix = i.suffix), n.style.setProperty("--i", String(e.slot)), n;
1147
1204
  }) : [], 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;
1148
1205
  D && (D.className = v, D.setAttribute("aria-hidden", "true"), D.inert = !0);
1149
1206
  let O = d ? u.map((e, t) => {
1150
- let n = L(_, D ?? m);
1207
+ let n = R(_, D ?? m);
1151
1208
  D && (n.dataset.place = "legend");
1152
1209
  let r = c.legend ?? c.swatch;
1153
- if (r && (n.dataset.swatch = r), n.textContent = e.name, !r && tt(i, a) !== "step") {
1154
- let e = Oe(u, t);
1210
+ if (r && (n.dataset.swatch = r), n.textContent = e.name, !r && it(i, a) !== "step") {
1211
+ let e = ke(u, t);
1155
1212
  n.dataset.marker = e.shape, n.toggleAttribute("data-open", e.open);
1156
1213
  }
1157
1214
  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;
1158
- }) : [], k = c.centre ? L(x, m) : null;
1215
+ }) : [], k = c.centre ? R(x, m) : null;
1159
1216
  if (k) {
1160
1217
  let e = l.find((e) => e.isTotal), t = e ? e.value : l.reduce((e, t) => e + Math.abs(t.value), 0);
1161
- k.dataset.value = String(t), e && (k.dataset.decimals = String(W(e.number)));
1218
+ k.dataset.value = String(t), e && (k.dataset.decimals = String(U(e.number)));
1162
1219
  }
1163
- let A = k && !l.some((e) => e.isTotal) ? rt(i, k, a) : null, j = c.categories === "beside", M = document.createElement("div");
1220
+ let A = k && !l.some((e) => e.isTotal) ? ot(i, k, a) : null, j = c.categories === "beside", M = document.createElement("div");
1164
1221
  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));
1165
1222
  let N = 0;
1166
1223
  for (let [e, t] of l.entries()) {
@@ -1168,21 +1225,21 @@ var Pe = (e) => e.map((e) => ({
1168
1225
  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);
1169
1226
  }
1170
1227
  (j ? m : i).appendChild(M), D && i.appendChild(D);
1171
- let P = a.animate ? Ke(i) : null;
1228
+ let P = a.animate ? Ye(i) : null;
1172
1229
  P && (i.setAttribute("data-steps", ""), i.setAttribute("data-chart-animate", "across"));
1173
- let I = i.getAttribute("data-chart-keys"), R = P && a.controls ? Ye({
1230
+ let F = i.getAttribute("data-chart-keys"), L = P && a.controls ? Qe({
1174
1231
  previous: a.previouslabel,
1175
1232
  next: a.nextlabel,
1176
1233
  hint: a.stephint
1177
1234
  }, {
1178
- previous: I && `${I}-previous`,
1179
- next: I && `${I}-next`,
1180
- hint: I && `${I}-step`
1235
+ previous: F && `${F}-previous`,
1236
+ next: F && `${F}-next`,
1237
+ hint: F && `${F}-step`
1181
1238
  }, a.langattribute) : null;
1182
- R && i.appendChild(R);
1239
+ L && i.appendChild(L);
1183
1240
  let z = Array.from(i.querySelectorAll("[data-annotation]")).map((t) => {
1184
- let n = t.getAttribute("data-annotation"), r = Ze[n];
1185
- if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(Ze).join(", ")}.`), null;
1241
+ let n = t.getAttribute("data-annotation"), r = et[n];
1242
+ if (!r) return console.warn(`[${e}] Unknown annotation "${n}". Known annotations: ${Object.keys(et).join(", ")}.`), null;
1186
1243
  let i = Number.parseInt(t.getAttribute("data-series") ?? "1", 10), a = i >= 1 && i <= u.length ? i - 1 : 0;
1187
1244
  return i !== a + 1 && console.warn(`[${e}] An annotation reads line ${i}, which the chart does not have; it reads the first.`), {
1188
1245
  spec: t,
@@ -1218,42 +1275,42 @@ var Pe = (e) => e.map((e) => ({
1218
1275
  checks: [],
1219
1276
  plan: P,
1220
1277
  step: 0,
1221
- controls: R
1278
+ controls: L
1222
1279
  };
1223
- return R?.addEventListener("click", (e) => {
1280
+ return L?.addEventListener("click", (e) => {
1224
1281
  let t = e.target.closest("button")?.dataset.go;
1225
1282
  t && Q(B, B.step + (t === "next" ? 1 : -1));
1226
- }), Q(B, 0, !0), a.hover && i.getAttribute("data-chart-hover") !== "false" && mt(B), dt(B, a), B;
1227
- }, st = (e) => {
1283
+ }), Q(B, 0, !0), a.hover && i.getAttribute("data-chart-hover") !== "false" && _t(B), mt(B, a), B;
1284
+ }, ut = (e) => {
1228
1285
  let t = getComputedStyle(e).getPropertyValue("--tablechart-inside-align").trim();
1229
1286
  return t === "start" || t === "center" || t === "end" ? t : null;
1230
- }, ct = (e, t, n, r) => {
1287
+ }, dt = (e, t, n, r) => {
1231
1288
  let i = getComputedStyle(e), a = (i.getPropertyValue(n).trim() || r).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);
1232
1289
  if (!a) return null;
1233
1290
  let o = Number(a[1]);
1234
1291
  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;
1235
- }, lt = (e, t) => ct(e, t, "--tablechart-bar-max", "60px") ?? Infinity, ut = (t, n) => {
1292
+ }, ft = (e, t) => dt(e, t, "--tablechart-bar-max", "60px") ?? Infinity, pt = (t, n) => {
1236
1293
  let { plot: r, svg: i, rows: a, type: o, values: s, series: c, seriesValues: l, names: u, annotations: d } = t, f = r.clientWidth;
1237
1294
  if (!f) return !1;
1238
1295
  let p = j / f, m = Number.parseFloat(t.figure.dataset.chartAspect ?? ""), h = j * (m > 0 ? m : o.aspect ?? n.aspect);
1239
1296
  r.classList.add(w);
1240
1297
  for (let e of [...l.flat(), ...t.totals]) delete e.dataset.place;
1241
- r.style.removeProperty("--tablechart-fit"), oe([
1298
+ r.style.removeProperty("--tablechart-fit"), se([
1242
1299
  ...l.flat(),
1243
1300
  ...t.totals,
1244
1301
  ...u,
1245
1302
  ...t.categories,
1246
1303
  ...d.map((e) => e.badge)
1247
1304
  ]);
1248
- let g = (s[0] ? Y(s[0]).height : 0) * p, _ = d[0]?.badge ? Y(d[0].badge).height * p : 0, v = Math.max(h, ct(t.figure, p, "--tablechart-min-height", "200px") ?? 0, o.minHeight?.({
1305
+ 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?.({
1249
1306
  labelHeight: g,
1250
- nameHeight: Math.max(0, U(t.categories.map((e) => Y(e).height))) * p,
1307
+ nameHeight: Math.max(0, H(t.categories.map((e) => Y(e).height))) * p,
1251
1308
  unit: p,
1252
1309
  rows: a.length,
1253
1310
  series: c.length,
1254
1311
  stacked: t.stacked
1255
1312
  }) ?? 0), y = t.stacked ? a.map((e) => {
1256
- let t = pe(e, c.length);
1313
+ let t = me(e, c.length);
1257
1314
  return {
1258
1315
  ...e,
1259
1316
  value: t,
@@ -1278,35 +1335,35 @@ var Pe = (e) => e.map((e) => ({
1278
1335
  series: c.length,
1279
1336
  focused: c.some((e) => e.focus),
1280
1337
  stacked: t.stacked
1281
- }, C = o.headroom?.(S) ?? g, T = 2 * p + (o.footroom?.(S) ?? 0), E = C, D = t.stacked ? Math.max(U(y.map((e) => e.value)), 0) : Math.max(U(x.flatMap((e) => [
1338
+ }, C = o.headroom?.(S) ?? g, T = 2 * p + (o.footroom?.(S) ?? 0), E = C, D = t.stacked ? Math.max(H(y.map((e) => e.value)), 0) : Math.max(H(x.flatMap((e) => [
1282
1339
  e.from,
1283
1340
  e.to,
1284
1341
  e.value
1285
- ])), U(a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value)))), O = v - E - T, k = D * 1.02, A = d.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, M = (e) => {
1342
+ ])), H(a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value)))), O = v - E - T, k = D * 1.02, A = d.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, M = (e) => {
1286
1343
  let t = Number.parseFloat(A?.getAttribute(e) ?? "");
1287
1344
  return Number.isFinite(t) ? t : null;
1288
- }, N = M("data-from") ?? M("data-at"), P = M("data-to"), I = null;
1345
+ }, N = M("data-from") ?? M("data-at"), P = M("data-to"), L = null;
1289
1346
  if (A && (N !== null || P !== null)) {
1290
1347
  let t = N ?? 0, n = P ?? k, r = P === null ? t : N === null ? n : (t + n) / 2, i = A.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
1291
1348
  i !== null && !a && console.warn(`[${e}] data-size="${i}" is not a percentage, such as 30%. Using the default.`);
1292
1349
  let s = Math.min(Math.max(a ? Number(a[1]) / 100 : P === 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);
1293
- o.breakable ? t < 0 || n <= t || n > k || t === 0 && n === k ? 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.`) : I = {
1350
+ o.breakable ? t < 0 || n <= t || n > k || t === 0 && n === k ? 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.`) : L = {
1294
1351
  lo: t,
1295
1352
  hi: n,
1296
1353
  gap: r,
1297
1354
  share: s
1298
1355
  } : console.warn(`[${e}] This kind of chart cannot break its scale.`);
1299
1356
  }
1300
- let L = I ? I.gap : null, R = (I && ct(t.figure, p, "--tablechart-break-gap", "")) ?? 13, z = v - T, ee = (e) => z - e / k * O;
1301
- if (I) {
1302
- let { lo: e, hi: t, gap: n, share: r } = I, i = O * r, a = (O - i - R) / (e + (k - t)), o = i / (t - e);
1303
- ee = (r) => r <= e ? z - r * a : r <= n ? z - e * a - (r - e) * o : r <= t ? z - e * a - (r - e) * o - R : z - e * a - i - R - (r - t) * a;
1357
+ let R = L ? L.gap : null, z = (L && dt(t.figure, p, "--tablechart-break-gap", "")) ?? 13, B = v - T, te = (e) => B - e / k * O;
1358
+ if (L) {
1359
+ let { lo: e, hi: t, gap: n, share: r } = L, i = O * r, a = (O - i - z) / (e + (k - t)), o = i / (t - e);
1360
+ te = (r) => r <= e ? B - r * a : r <= n ? B - e * a - (r - e) * o : r <= t ? B - e * a - (r - e) * o - z : B - e * a - i - z - (r - t) * a;
1304
1361
  }
1305
- let V = u.length ? U(u.map((e) => Y(e).width)) * p + 12 * p : 0, H = t.categories[0]?.parentElement;
1306
- H && (H.style.paddingRight = V ? `${V / j * 100}%` : "");
1307
- let W = (j - V) / a.length, te = (e) => (e + .5) * W, G = (e) => e >= 0 && e < a.length ? e : null;
1308
- t.rowAt = o.centre ? null : o.categories === "beside" ? (e, t) => G(Math.floor(t * p / (v / a.length))) : (e) => G(Math.floor(e * p / W));
1309
- let K = W / j * 100, q = 100 / a.length;
1362
+ let V = u.length ? H(u.map((e) => Y(e).width)) * p + 12 * p : 0, ne = t.categories[0]?.parentElement;
1363
+ ne && (ne.style.paddingRight = V ? `${V / j * 100}%` : "");
1364
+ let U = (j - V) / a.length, W = (e) => (e + .5) * U, G = (e) => e >= 0 && e < a.length ? e : null;
1365
+ t.rowAt = o.centre ? null : o.categories === "beside" ? (e, t) => G(Math.floor(t * p / (v / a.length))) : (e) => G(Math.floor(e * p / U));
1366
+ let K = U / j * 100, q = 100 / a.length;
1310
1367
  t.rowBox = o.categories === "beside" ? (e) => [
1311
1368
  0,
1312
1369
  e * q,
@@ -1317,14 +1374,14 @@ var Pe = (e) => e.map((e) => ({
1317
1374
  0,
1318
1375
  K,
1319
1376
  100
1320
- ], i.setAttribute("viewBox", `0 0 ${j} ${v}`), i.textContent = "", t.checks = [];
1377
+ ], i.setAttribute("viewBox", `0 0 ${j} ${F(v)}`), i.textContent = "", t.checks = [];
1321
1378
  let J = {
1322
1379
  rows: a,
1323
1380
  segments: x,
1324
- cx: te,
1325
- y: ee,
1326
- barWidth: Math.min(W * n.barfill, lt(t.figure, p)),
1327
- barMax: lt(t.figure, p),
1381
+ cx: W,
1382
+ y: te,
1383
+ barWidth: Math.min(U * n.barfill, ft(t.figure, p)),
1384
+ barMax: ft(t.figure, p),
1328
1385
  height: v,
1329
1386
  unit: p,
1330
1387
  labelHeight: g,
@@ -1333,12 +1390,12 @@ var Pe = (e) => e.map((e) => ({
1333
1390
  note: 0,
1334
1391
  labels: t.figure.dataset.chartLabels === "inside" || t.figure.dataset.chartLabels !== "outside" && n.labels === "inside" ? "inside" : "outside",
1335
1392
  closing: (t.figure.dataset.chartClosing ?? n.closing) === "up" ? "up" : "down",
1336
- insideAlign: st(t.figure),
1337
- breakAt: L,
1338
- squeeze: I,
1339
- breakGap: R,
1393
+ insideAlign: ut(t.figure),
1394
+ breakAt: R,
1395
+ squeeze: L,
1396
+ breakGap: z,
1340
1397
  stacked: t.stacked,
1341
- shape: tt(t.figure, n),
1398
+ shape: it(t.figure, n),
1342
1399
  totals: t.totals,
1343
1400
  svg: i,
1344
1401
  plot: r,
@@ -1379,15 +1436,15 @@ var Pe = (e) => e.map((e) => ({
1379
1436
  note: e + 1
1380
1437
  });
1381
1438
  }
1382
- Je(t);
1383
- let ne = t.categories[0]?.parentElement;
1384
- return ne && o.categories !== "beside" && !o.centre && be(ne, t.categories.filter((e) => e.offsetParent !== null), (e) => ({
1439
+ Ze(t);
1440
+ let re = t.categories[0]?.parentElement;
1441
+ return re && o.categories !== "beside" && !o.centre && xe(re, t.categories.filter((e) => e.offsetParent !== null), (e) => ({
1385
1442
  size: e.scrollWidth,
1386
1443
  room: e.clientWidth
1387
- }), "--tablechart-name-fit"), B(i, d.flatMap(({ badge: e }) => {
1444
+ }), "--tablechart-name-fit"), ee(i, d.flatMap(({ badge: e }) => {
1388
1445
  if (!(e instanceof HTMLElement) || !e.offsetWidth) return [];
1389
1446
  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;
1390
- return [F("rect", {
1447
+ return [I("rect", {
1391
1448
  class: b,
1392
1449
  "data-for": "badge",
1393
1450
  "data-note": e.dataset.note ?? "",
@@ -1400,7 +1457,7 @@ var Pe = (e) => e.map((e) => ({
1400
1457
  style: ["--after", "--step"].map((t) => e.style.getPropertyValue(t) && `${t}:${e.style.getPropertyValue(t)}`).filter(Boolean).join("; ")
1401
1458
  })];
1402
1459
  }), j, v), !0;
1403
- }, dt = (e, t) => {
1460
+ }, mt = (e, t) => {
1404
1461
  let n = [
1405
1462
  ...e.seriesValues.flat(),
1406
1463
  ...e.totals,
@@ -1418,11 +1475,11 @@ var Pe = (e) => e.map((e) => ({
1418
1475
  e.className = D, e.textContent = o, r.prepend(e);
1419
1476
  }
1420
1477
  }
1421
- }, ft = (e) => {
1478
+ }, ht = (e) => {
1422
1479
  e.plot.remove(), e.categories[0]?.parentElement?.remove(), e.figure.querySelector(`:scope > .${v}`)?.remove(), e.controls?.remove();
1423
- }, pt = (e, t) => {
1480
+ }, gt = (e, t) => {
1424
1481
  e.figure.classList.toggle(O, t), t || e.plot.removeAttribute("data-pointed");
1425
- }, mt = (e) => {
1482
+ }, _t = (e) => {
1426
1483
  let { plot: t } = e, n = () => [...e.seriesValues.flat(), ...e.totals], r = (e, t) => {
1427
1484
  let n = Number(e.dataset.row), r = Number(e.dataset.rowEnd ?? n);
1428
1485
  return t >= n && t <= r;
@@ -1457,25 +1514,25 @@ var Pe = (e) => e.map((e) => ({
1457
1514
  }), document.addEventListener("pointerdown", (e) => {
1458
1515
  t.contains(e.target) || a();
1459
1516
  });
1460
- }, ht = (e) => e === "id" || e === "style" || e.startsWith("data-chart"), gt = /^\s*(?:Table)?:\s+/, _t = (e) => e?.tagName === "P" && gt.test(e.textContent ?? ""), vt = (e) => {
1517
+ }, 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) => {
1461
1518
  let t = document.createElement("figcaption");
1462
1519
  for (let { name: n, value: r } of Array.from(e.attributes)) t.setAttribute(n, r);
1463
1520
  let n = e.firstChild;
1464
- n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(gt, ""), n.textContent || n.remove());
1521
+ n?.nodeType === Node.TEXT_NODE && (n.textContent = (n.textContent ?? "").replace(yt, ""), n.textContent || n.remove());
1465
1522
  let r = Array.from(e.childNodes), i = r.findIndex((e) => e.nodeName === "BR");
1466
1523
  if (t.append(...i === -1 ? r : r.slice(0, i + 1)), i !== -1 && i < r.length - 1) {
1467
1524
  let e = document.createElement("span");
1468
1525
  e.append(...r.slice(i + 1)), t.append(e);
1469
1526
  }
1470
1527
  return e.remove(), t;
1471
- }, yt = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, bt = (e) => {
1472
- let t = Dt(e);
1528
+ }, St = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Ct = (e) => {
1529
+ let t = At(e);
1473
1530
  return t?.tagName === "P" ? t : e;
1474
- }, xt = (e) => {
1475
- let t = bt(e).firstChild;
1531
+ }, wt = (e) => {
1532
+ let t = Ct(e).firstChild;
1476
1533
  if (t?.nodeType !== Node.TEXT_NODE) return null;
1477
- let n = yt.exec(t.textContent ?? "");
1478
- if (!n || !Qe.includes(n[1]) || !n[3] && t.nextSibling) return null;
1534
+ let n = St.exec(t.textContent ?? "");
1535
+ if (!n || !tt.includes(n[1]) || !n[3] && t.nextSibling) return null;
1479
1536
  let r = n[2].trim().split(/\s+/).filter(Boolean).map((e) => e.split("="));
1480
1537
  return {
1481
1538
  name: n[1],
@@ -1483,11 +1540,11 @@ var Pe = (e) => e.map((e) => ({
1483
1540
  text: t,
1484
1541
  length: n[0].length
1485
1542
  };
1486
- }, St = (e) => {
1543
+ }, Tt = (e) => {
1487
1544
  if (e?.tagName !== "UL" && e?.tagName !== "OL") return null;
1488
- let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : xt(e));
1545
+ let t = Array.from(e.children), n = t.map((e) => e.hasAttribute("data-annotation") ? null : wt(e));
1489
1546
  return !t.length || t.some((e, t) => !n[t] && !e.hasAttribute("data-annotation")) ? null : (t.forEach((e, t) => {
1490
- let r = n[t], i = bt(e);
1547
+ let r = n[t], i = Ct(e);
1491
1548
  if (i !== e && i.replaceWith(...i.childNodes), r) {
1492
1549
  e.setAttribute("data-annotation", r.name);
1493
1550
  for (let [t, n] of r.options) e.setAttribute(`data-${t}`, n);
@@ -1498,18 +1555,18 @@ var Pe = (e) => e.map((e) => ({
1498
1555
  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));
1499
1556
  });
1500
1557
  }), e.classList.add("chart-annotations"), e);
1501
- }, Ct = (e, t) => {
1502
- for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || ht(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
1503
- }, wt = (e) => e.map((e) => {
1504
- let t = e.closest("p"), n = _t(t) ? t : e;
1558
+ }, Et = (e, t) => {
1559
+ for (let { name: n, value: r } of Array.from(e.attributes)) (n === "class" || vt(n)) && (t.setAttribute(n, r), e.removeAttribute(n));
1560
+ }, Dt = (e) => e.map((e) => {
1561
+ let t = e.closest("p"), n = bt(t) ? t : e;
1505
1562
  if (n.tagName !== "TABLE" && n.tagName !== "P") return n;
1506
1563
  let r = document.createElement("div");
1507
- Ct(e, r), e.classList.length || e.removeAttribute("class");
1508
- let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? _t(a) ? a : _t(o) ? o : null : n;
1564
+ Et(e, r), e.classList.length || e.removeAttribute("class");
1565
+ let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? bt(a) ? a : bt(o) ? o : null : n;
1509
1566
  i && s === o && (o = o?.nextElementSibling ?? null);
1510
- let c = o?.classList.contains("chart-annotations") ? o : St(o);
1511
- return n.replaceWith(r), s && r.append(vt(s)), i && r.append(i), c && r.append(c), Z?.log?.(`A ${i ? "table" : "caption"} with chart attributes was wrapped in a figure of its own`), r;
1512
- }), Tt = (e, t = []) => {
1567
+ let c = o?.classList.contains("chart-annotations") ? o : Tt(o);
1568
+ return n.replaceWith(r), s && r.append(xt(s)), i && r.append(i), c && r.append(c), Z?.log?.(`A ${i ? "table" : "caption"} with chart attributes was wrapped in a figure of its own`), r;
1569
+ }), Ot = (e, t = []) => {
1513
1570
  let n = document.createElement("table");
1514
1571
  if (t.length) {
1515
1572
  let e = n.createTHead().insertRow();
@@ -1528,7 +1585,7 @@ var Pe = (e) => e.map((e) => ({
1528
1585
  for (let n of t.values ?? [t.value ?? null]) e.insertCell().textContent = n === null ? "" : String(n);
1529
1586
  }
1530
1587
  return n;
1531
- }, Et = async (t) => {
1588
+ }, kt = async (t) => {
1532
1589
  await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
1533
1590
  let n = t.getAttribute("data-chart-src");
1534
1591
  for (let e of t.querySelectorAll("table")) e.remove();
@@ -1537,17 +1594,17 @@ var Pe = (e) => e.map((e) => ({
1537
1594
  if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
1538
1595
  let r = await e.json(), i = Array.isArray(r) ? r : r?.rows;
1539
1596
  if (!Array.isArray(i)) throw Error("no array of rows in it");
1540
- let a = Array.isArray(r?.series) ? r.series.map(String) : [], o = t.querySelector(":scope > figcaption"), s = Tt(i, a);
1597
+ let a = Array.isArray(r?.series) ? r.series.map(String) : [], o = t.querySelector(":scope > figcaption"), s = Ot(i, a);
1541
1598
  o ? o.after(s) : t.prepend(s), Z?.log?.(`Read ${i.length} rows from "${n}"`);
1542
1599
  } catch (t) {
1543
1600
  let r = window.location.protocol === "file:";
1544
1601
  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." : ""));
1545
1602
  }
1546
1603
  }));
1547
- }, Dt = (e) => {
1604
+ }, At = (e) => {
1548
1605
  let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
1549
1606
  return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
1550
- }, Ot = "strong, b, span.total", kt = (e) => {
1607
+ }, jt = "strong, b, span.total", Mt = (e) => {
1551
1608
  for (let t of e) {
1552
1609
  for (let e of t.querySelectorAll("tbody tr")) {
1553
1610
  let t = e.cells[0];
@@ -1555,16 +1612,16 @@ var Pe = (e) => e.map((e) => ({
1555
1612
  let n = document.createElement("th");
1556
1613
  for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
1557
1614
  n.append(...t.childNodes), t.replaceWith(n);
1558
- for (let t = Dt(n); t?.matches(Ot); t = Dt(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
1615
+ for (let t = At(n); t?.matches(jt); t = At(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
1559
1616
  }
1560
1617
  let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
1561
- for (let t of e.slice(1)) for (let e = Dt(t); e?.matches(Ot); e = Dt(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
1618
+ for (let t of e.slice(1)) for (let e = At(t); e?.matches(jt); e = At(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
1562
1619
  }
1563
- }, At = "data-chart-made", jt = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Mt = (e) => new Promise((t) => setTimeout(t, e)), Nt = (e, t) => {
1620
+ }, Nt = "data-chart-made", Pt = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Ft = (e) => new Promise((t) => setTimeout(t, e)), It = (e, t) => {
1564
1621
  let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
1565
1622
  return Math.min(Math.max(r, 0), 1);
1566
- }, Pt = async (e, t) => {
1567
- if (jt()) return;
1623
+ }, Lt = async (e, t) => {
1624
+ if (Pt()) return;
1568
1625
  await new Promise(requestAnimationFrame);
1569
1626
  let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
1570
1627
  for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
@@ -1575,11 +1632,11 @@ var Pe = (e) => e.map((e) => ({
1575
1632
  let a = Number(n.delay ?? 0) + i * t;
1576
1633
  r = Math.max(r, a - Number(e.currentTime ?? 0));
1577
1634
  }
1578
- r > 0 && await Mt(r);
1579
- }, Ft = (e) => {
1635
+ r > 0 && await Ft(r);
1636
+ }, Rt = (e) => {
1580
1637
  for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
1581
1638
  return null;
1582
- }, It = (e) => new Promise((t) => {
1639
+ }, zt = (e) => new Promise((t) => {
1583
1640
  let n = ["animationstart", "transitionrun"], r = () => {
1584
1641
  for (let e of n) document.removeEventListener(e, i, !0);
1585
1642
  a.disconnect(), t();
@@ -1593,54 +1650,54 @@ var Pe = (e) => e.map((e) => ({
1593
1650
  attributes: !0,
1594
1651
  attributeFilter: ["class", "style"]
1595
1652
  });
1596
- }), Lt = /* @__PURE__ */ new Set(), $ = null, Rt = (e) => {
1597
- Lt.add(e), !$ && ($ = new MutationObserver(() => {
1598
- for (let e of Lt) e.relabel();
1653
+ }), Bt = /* @__PURE__ */ new Set(), $ = null, Vt = (e) => {
1654
+ Bt.add(e), !$ && ($ = new MutationObserver(() => {
1655
+ for (let e of Bt) e.relabel();
1599
1656
  requestAnimationFrame(() => requestAnimationFrame(() => {
1600
- for (let e of Lt) e.refresh();
1657
+ for (let e of Bt) e.refresh();
1601
1658
  }));
1602
1659
  }), $.observe(document.documentElement, {
1603
1660
  attributes: !0,
1604
1661
  attributeFilter: ["lang"]
1605
1662
  }));
1606
- }, zt = (e) => {
1607
- Lt.delete(e), !(Lt.size || !$) && ($.disconnect(), $ = null);
1608
- }, Bt = ["column", "bar"], Vt = (e) => {
1663
+ }, Ht = (e) => {
1664
+ Bt.delete(e), !(Bt.size || !$) && ($.disconnect(), $ = null);
1665
+ }, Ut = ["column", "bar"], Wt = (e) => {
1609
1666
  let t = e.getAttribute("data-chart") || "column";
1610
- if (!Bt.includes(t)) return null;
1667
+ if (!Ut.includes(t)) return null;
1611
1668
  let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
1612
- return Bt.includes(n) ? n : t;
1613
- }, Ht = (e, t) => {
1614
- let n = e, r = Vt(n.figure), i = null, a = !1, o = !1, s = async () => {
1615
- if (!t.animate) return pt(n, !0);
1669
+ return Ut.includes(n) ? n : t;
1670
+ }, Gt = (e, t) => {
1671
+ let n = e, r = Wt(n.figure), i = null, a = !1, o = !1, s = async () => {
1672
+ if (!t.animate) return gt(n, !0);
1616
1673
  let e = n.figure.classList.contains("is-shown");
1617
1674
  if (a && i !== null && !e && !o) {
1618
1675
  o = !0;
1619
- let e = jt() ? null : Ft(n.figure);
1620
- e && await It(e), await Pt(n.figure, Nt(n.figure, t)), o = !1, (a || !t.replay) && pt(n, !0);
1621
- } else !a && t.replay && e && pt(n, !1);
1676
+ let e = Pt() ? null : Rt(n.figure);
1677
+ e && await zt(e), await Lt(n.figure, It(n.figure, t)), o = !1, (a || !t.replay) && gt(n, !0);
1678
+ } else !a && t.replay && e && gt(n, !1);
1622
1679
  }, c = () => {
1623
- let e = Vt(n.figure);
1680
+ let e = Wt(n.figure);
1624
1681
  if (!e || e === r) return;
1625
- let a = Z.timed("Building", n.figure, () => ot(n.figure, t, e));
1626
- a && (ft(n), Q(a, n.step, !0), n = a, r = e, i = null);
1682
+ let a = Z.timed("Building", n.figure, () => lt(n.figure, t, e));
1683
+ a && (ht(n), Q(a, n.step, !0), n = a, r = e, i = null);
1627
1684
  }, l = () => {
1628
1685
  c();
1629
1686
  let e = n.plot.clientWidth;
1630
- !e || e === i || Z.timed("Layout", n.figure, () => ut(n, t)) && (i = e, s());
1687
+ !e || e === i || Z.timed("Layout", n.figure, () => pt(n, t)) && (i = e, s());
1631
1688
  }, u = !1, d = new ResizeObserver(() => {
1632
1689
  u || (u = !0, requestAnimationFrame(() => {
1633
1690
  u = !1, l();
1634
1691
  }));
1635
1692
  }), f = new IntersectionObserver((e) => {
1636
1693
  for (let t of e) a = t.isIntersecting, s();
1637
- }, { threshold: t.threshold }), p = () => pt(n, !0), m = () => {
1694
+ }, { threshold: t.threshold }), p = () => gt(n, !0), m = () => {
1638
1695
  i = null, l();
1639
1696
  }, h = {
1640
- relabel: () => dt(n, t),
1697
+ relabel: () => mt(n, t),
1641
1698
  refresh: m
1642
1699
  };
1643
- c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), Rt(h);
1700
+ c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), Vt(h);
1644
1701
  let g = {
1645
1702
  figure: n.figure,
1646
1703
  refresh: m,
@@ -1654,32 +1711,32 @@ var Pe = (e) => e.map((e) => ({
1654
1711
  return n.plan?.count ?? 0;
1655
1712
  },
1656
1713
  destroy() {
1657
- d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), zt(h), n.figure.tablechart === g && delete n.figure.tablechart;
1714
+ d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), Ht(h), n.figure.tablechart === g && delete n.figure.tablechart;
1658
1715
  }
1659
1716
  };
1660
1717
  return n.figure.tablechart = g, g;
1661
- }, Ut = async (e, t) => {
1662
- let n = wt(e.filter((e) => !e.hasAttribute(At)));
1663
- return await Et(n), kt(n), We(n, t.langattribute), n;
1664
- }, Wt = (e, t) => {
1665
- let n = Z.timed("Building", e, () => ot(e, t));
1666
- return n ? (e.setAttribute(At, ""), Ht(n, t)) : null;
1667
- }, Gt = async (e, t = {}) => {
1718
+ }, Kt = async (e, t) => {
1719
+ let n = Dt(e.filter((e) => !e.hasAttribute(Nt)));
1720
+ return await kt(n), Mt(n), qe(n, t.langattribute), n;
1721
+ }, qt = (e, t) => {
1722
+ let n = Z.timed("Building", e, () => lt(e, t));
1723
+ return n ? (e.setAttribute(Nt, ""), Gt(n, t)) : null;
1724
+ }, Jt = async (e, t = {}) => {
1668
1725
  if (e.tablechart) return e.tablechart;
1669
1726
  let n = {
1670
1727
  ...M,
1671
1728
  ...t
1672
1729
  };
1673
1730
  n.debug && (Z.enabled = !0);
1674
- let [r] = await Ut([e], n);
1675
- return r ? Wt(r, n) : null;
1676
- }, Kt = async (e = {}, t = document) => {
1731
+ let [r] = await Kt([e], n);
1732
+ return r ? qt(r, n) : null;
1733
+ }, Yt = async (e = {}, t = document) => {
1677
1734
  let n = {
1678
1735
  ...M,
1679
1736
  ...e
1680
1737
  };
1681
1738
  n.debug && (Z.enabled = !0);
1682
- let r = (await Ut(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => Wt(e, n)).filter((e) => e !== null);
1739
+ let r = (await Kt(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => qt(e, n)).filter((e) => e !== null);
1683
1740
  return Z.log(`Made ${r.length} chart(s).`), {
1684
1741
  charts: r,
1685
1742
  refresh: () => {
@@ -1691,4 +1748,4 @@ var Pe = (e) => e.map((e) => ({
1691
1748
  };
1692
1749
  };
1693
1750
  //#endregion
1694
- export { k as _, wt as a, ot as c, pt as d, ft as f, t as g, w as h, Ut as i, ut as l, We as m, Nt as n, Et as o, Q as p, Kt as r, kt as s, Gt as t, dt as u, O as v, M as y };
1751
+ export { k as _, Dt as a, lt as c, gt as d, ht as f, t as g, w as h, Kt as i, pt as l, qe as m, It as n, kt as o, Q as p, Yt as r, Mt as s, Jt as t, mt as u, O as v, M as y };