@martinomagnifico/tablechart 1.0.2 → 1.0.3

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.
@@ -8,7 +8,6 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
8
8
  entrance: .5,
9
9
  labels: "outside",
10
10
  shape: "straight",
11
- closing: "down",
12
11
  legend: !1,
13
12
  hover: !0,
14
13
  totallabel: "Total",
@@ -50,7 +49,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
50
49
  let s = I("g", { mask: `url(#${i})` });
51
50
  for (let t of Array.from(e.childNodes)) t !== o && s.appendChild(t);
52
51
  e.appendChild(s);
53
- }, te = 0, V = (e) => Array.from(e.querySelectorAll(`.${i}`)).map((e) => {
52
+ }, V = 0, H = (e) => Array.from(e.querySelectorAll(`.${i}`)).map((e) => {
54
53
  let t = e.tagName === "rect" ? [e] : Array.from(e.querySelectorAll("rect")), n = (e, t) => Number(e.getAttribute(t)), r = Math.min(...t.map((e) => n(e, "x"))), i = Math.min(...t.map((e) => n(e, "y"))), a = Math.max(...t.map((e) => n(e, "x") + n(e, "width"))), o = Math.max(...t.map((e) => n(e, "y") + n(e, "height")));
55
54
  return {
56
55
  row: Number(e.dataset.row),
@@ -60,7 +59,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
60
59
  height: o - i,
61
60
  sideways: e.dataset.grow === "right"
62
61
  };
63
- }), ne = {
62
+ }), te = {
64
63
  create: () => null,
65
64
  draw(e, t, n) {
66
65
  let { rows: r, y: i, svg: a, breakAt: o } = n;
@@ -87,7 +86,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
87
86
  [c + 2 * l, t + o],
88
87
  [c + i, t - o]
89
88
  ];
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", {
89
+ }, l = (e, t = !1) => e.map(([e, t], n) => `${n === 0 ? "M" : "L"} ${e.toFixed(1)} ${t.toFixed(1)}`).join(" ") + (t ? " Z" : ""), u = `tablechart-break-${++V}`, d = I("mask", {
91
90
  id: u,
92
91
  maskUnits: "userSpaceOnUse"
93
92
  });
@@ -99,7 +98,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
99
98
  fill: "white"
100
99
  }));
101
100
  let f = [], p = i(o);
102
- for (let e of V(a)) {
101
+ for (let e of H(a)) {
103
102
  let t = e.sideways ? n.breakX : p;
104
103
  if (t === void 0 || !(e.sideways ? e.x < t && e.x + e.width > t : e.y < p && e.y + e.height > p)) continue;
105
104
  let [i, o] = e.sideways ? [c(e, t), c(e, t + n.breakGap)] : [c(e, p - n.breakGap), c(e, p)];
@@ -122,11 +121,11 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
122
121
  let g = I("defs");
123
122
  g.appendChild(d), a.prepend(g, h);
124
123
  }
125
- }, H = (e) => {
124
+ }, U = (e) => {
126
125
  let t = -Infinity;
127
126
  for (let n of e) t = Math.max(t, n);
128
127
  return t;
129
- }, U = (e) => (e.split(/[.,]/)[1] || "").length, W = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
128
+ }, ne = (e) => (e.split(/[.,]/)[1] || "").length, W = (e, t) => new Intl.NumberFormat(t || document.documentElement.lang || void 0, {
130
129
  minimumFractionDigits: e,
131
130
  maximumFractionDigits: e
132
131
  }), G = (e, t, n) => {
@@ -141,7 +140,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
141
140
  t && n.setAttribute("data-i18n", t);
142
141
  }
143
142
  return t.appendChild(n), n;
144
- }, J = (t, n, r, i) => {
143
+ }, re = (t, n, r, i) => {
145
144
  let a = K(t?.textContent || ""), o = Number.isNaN(a) ? !0 : Math.abs(n - a) <= .5, s = {
146
145
  label: r,
147
146
  computed: n,
@@ -149,16 +148,16 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
149
148
  agrees: o
150
149
  };
151
150
  i.checks.push(s), o || console.warn(`[${e}] An annotation reads ${a}%, but ${r} is ${n.toFixed(1)}%. The chart shows what you wrote; this is only a check.`);
152
- }, re = (e, t) => (t - e) / Math.abs(e) * 100, ie = (e, t) => {
151
+ }, ie = (e, t) => (t - e) / Math.abs(e) * 100, ae = (e, t) => {
153
152
  let n = (t, n) => {
154
153
  let r = Number.parseInt(e.getAttribute(t) ?? "", 10);
155
154
  return Number.isFinite(r) ? r - 1 : n;
156
155
  };
157
156
  return [n("data-from", 0), n("data-to", t - 1)];
158
- }, ae = {
157
+ }, J = {
159
158
  create: q,
160
159
  draw(t, n, r) {
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];
160
+ let { rows: i, cx: a, y: o, unit: s, labelHeight: u, badgeHeight: d, height: f, svg: p, after: m } = r, [h, g] = ae(t, i.length), _ = i[h], v = i[g];
162
161
  if (!_ || !v) {
163
162
  console.warn(`[${e}] A bracket points at a row that is not there (row ${h + 1} to ${g + 1}, of ${i.length}).`);
164
163
  return;
@@ -176,7 +175,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
176
175
  "data-note": r.note,
177
176
  points: `${S},${D} ${S - y * .45},${D - y} ${S + y * .45},${D - y}`,
178
177
  style: N("--after", m)
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);
178
+ })), n && (z(n, (x + S) / 2, C, j, f), n.style.setProperty("--after", String(m))), re(n, ie(_.value, v.value), `${_.value} to ${v.value}`, r);
180
179
  }
181
180
  }, oe = /* @__PURE__ */ new WeakMap(), se = (e) => {
182
181
  let t = [...e].filter((e) => !!e), n = t.map((e) => ({
@@ -231,7 +230,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
231
230
  style: N("--after", p)
232
231
  })), t && (z(t, y + (x - y) * k, b + (S - b) * k, j, u), t.style.setProperty("--after", String(p)));
233
232
  let B = Number.parseFloat(e.getAttribute("data-years") || "");
234
- !Number.isNaN(B) && B > 0 && J(t, ce(m.value, h.value, B), `${m.value} to ${h.value} over ${B} years`, n);
233
+ !Number.isNaN(B) && B > 0 && re(t, ce(m.value, h.value, B), `${m.value} to ${h.value} over ${B} years`, n);
235
234
  }
236
235
  }, ue = (e, t, n, r, i) => {
237
236
  if (!r) return e / t * n;
@@ -251,35 +250,63 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
251
250
  ...i && { "data-muted": "" },
252
251
  style: `--n:${n}; --m:${+!!i}; --palette:var(--tablechart-color-${n + 1}); ${N("--i", t.slot)}`
253
252
  };
254
- }, pe = (e, t) => {
255
- let n = 0;
256
- return Array.from({ length: t }, (t, r) => {
257
- let i = e.cells[r] ?? e.cells[0], a = n;
258
- return !i.missing && i.value > 0 && (n += i.value), {
259
- from: a,
260
- to: n,
261
- cell: i
253
+ }, pe = (e, t, n = !1) => {
254
+ let r = 0, i = 0;
255
+ return Array.from({ length: t }, (t, a) => {
256
+ let o = e.cells[a] ?? e.cells[0], s = o.missing ? 0 : o.value;
257
+ if (n) {
258
+ let e = r;
259
+ return r += s, {
260
+ from: e,
261
+ to: r,
262
+ cell: o
263
+ };
264
+ }
265
+ if (s < 0) {
266
+ let e = i;
267
+ return i += s, {
268
+ from: e,
269
+ to: i,
270
+ cell: o
271
+ };
272
+ }
273
+ let c = r;
274
+ return r += s, {
275
+ from: c,
276
+ to: r,
277
+ cell: o
262
278
  };
263
279
  });
264
- }, me = (e, t) => pe(e, t).at(-1)?.to ?? 0, he = (e, t, n) => {
280
+ }, X = (e, t, n = !1) => {
281
+ let r = pe(e, t, n);
282
+ return {
283
+ top: Math.max(0, ...r.map((e) => e.to)),
284
+ bottom: Math.min(0, ...r.map((e) => e.to))
285
+ };
286
+ }, me = (e, t) => {
287
+ let { top: n, bottom: r } = X(e, t);
288
+ return n + r;
289
+ }, he = (e, t, n) => {
265
290
  let r = t.series.some((e) => e.focus);
266
291
  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})`);
267
- }, ge = (e, t, n, r = {}) => {
268
- let o = I("g", {
292
+ }, ge = (e, t, n, r = {}, o = "") => {
293
+ let s = {
269
294
  class: L(i, t),
270
295
  "data-kind": "bar",
271
296
  "data-row": n + 1,
272
- ...r,
297
+ ...r
298
+ }, c = N("--i", t.slot) + (o ? `; transform-origin: ${o}` : ""), l = I("g", {
299
+ ...s,
273
300
  "data-stack": "",
274
- style: N("--i", t.slot)
301
+ style: c
275
302
  });
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", {
303
+ return e.svg.appendChild(l), (i, o) => {
304
+ let s = r["data-grow"] === void 0 ? {} : { "data-grow": r["data-grow"] };
305
+ l.appendChild(I("rect", {
279
306
  ...s,
307
+ ...o,
280
308
  class: L(a, t),
281
309
  "data-row": n + 1,
282
- ...c,
283
310
  ...fe(e, t, i)
284
311
  }));
285
312
  };
@@ -315,38 +342,45 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
315
342
  categories: "beside",
316
343
  headroom: () => 0,
317
344
  draw(e) {
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;
319
- if (!d) for (let e = 0; e < 3; e++) {
320
- let e = m - p - D, n = E(t.map((e, t) => ({
345
+ let { segments: t, height: n, unit: r, svg: a, values: s, categories: c, config: l, barMax: u } = e, d = e.series.length > 1, f = Math.max(U(c.map((e) => Y(e).width * r)), 0), p = Math.min(f + 10 * r, j * .42), m = j - 4 * r, h = e.stacked ? Math.max(U(e.rows.map((t) => X(t, e.series.length).top)), 0) || 1 : Math.max(U(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => Math.abs(e.value)))), 0) || 1, g = e.stacked ? Math.max(U(e.rows.map((t) => -X(t, e.series.length).bottom)), 0) : Math.max(U(e.rows.flatMap((t) => t.cells.slice(0, e.series.length).map((e) => -e.value))), 0), _ = Math.max(h, e.squeeze?.hi ?? 0) + g, v = (t, n) => ue(Math.abs(t), _, n, e.squeeze, e.breakGap), y = n / t.length, b = (e) => (e + .5) * y, x = Math.min(y * l.barfill, u), S = de(y, e.series.length, u), C = s[0] ?? e.totals[0], w = C ? Y(C).height * r * .56 : 0, T = Math.max(((d && !e.stacked ? S.size : x) - w) / 2, 5 * r), E = (e) => Y(e).width * r, D = (e) => e.length ? U(e.map(E)) + T + 4 * r : 0, O = (t, n) => (e.rows[n].cells[t] ?? e.rows[n].cells[0]).value, k = e.seriesValues.flatMap((e, t) => e.map((e, n) => ({
346
+ label: e,
347
+ value: O(t, n)
348
+ }))), A = (t) => {
349
+ let n = X(e.rows[t], e.series.length);
350
+ return n.top === 0 && n.bottom < 0;
351
+ }, M = e.stacked ? D(e.totals.filter((e, t) => !A(t))) : d ? D(k.filter((e) => e.value >= 0).map((e) => e.label)) : 0, P = e.stacked ? D(e.totals.filter((e, t) => A(t))) : d ? D(k.filter((e) => e.value < 0).map((e) => e.label)) : 0;
352
+ if (!d && !e.stacked) for (let e = 0; e < 3; e++) {
353
+ let e = m - p - M - P, n = t.map((e, t) => ({
321
354
  seg: e,
322
355
  label: s[t]
323
- })).filter(({ seg: t, label: n }) => !be(n, _(t.value, e), r)).map(({ label: e }) => e));
324
- if (n <= D) break;
325
- D = n;
356
+ })).filter(({ seg: t, label: n }) => !be(n, v(t.value, e), r)), i = D(n.filter(({ seg: e }) => e.value >= 0).map(({ label: e }) => e)), a = D(n.filter(({ seg: e }) => e.value < 0).map(({ label: e }) => e));
357
+ if (i <= M && a <= P) break;
358
+ M = Math.max(M, i), P = Math.max(P, a);
326
359
  }
327
- let O = m - p - D, k = (e) => p + _(e, O);
328
- if (e.squeeze && (e.breakX = k(e.squeeze.gap)), e.stacked) {
360
+ let F = m - p - M - P, R = p + P + v(g, F), B = (e) => e < 0 ? R - v(e, F) : R + v(e, F);
361
+ if (e.squeeze && (e.breakX = B(e.squeeze.gap)), e.stacked) {
329
362
  e.rows.forEach((t, i) => {
330
- let a = ge(e, t, i, { "data-grow": "right" }), o = y(i) - b / 2, s = pe(t, e.series.length);
331
- s.forEach(({ from: t, to: s, cell: c }, l) => {
363
+ let a = X(t, e.series.length), o = ge(e, t, i, { "data-grow": "right" }, a.bottom < 0 ? `${R - B(a.bottom)}px center` : ""), s = b(i) - x / 2;
364
+ pe(t, e.series.length).forEach(({ from: t, to: a, cell: c }, l) => {
332
365
  let u = e.seriesValues[l][i];
333
- if (u.dataset.place = "none", c.missing || s === t) return;
334
- let d = k(t), f = k(s);
335
- a(l, {
366
+ if (u.dataset.place = "none", c.missing || a === t) return;
367
+ let d = Math.min(B(t), B(a)), f = Math.max(B(t), B(a));
368
+ o(l, {
336
369
  x: d,
337
- y: o,
370
+ y: s,
338
371
  width: Math.max(f - d, 1),
339
- height: b
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);
372
+ height: x,
373
+ ...a < t && { "data-grow": "left" }
374
+ }), u.dataset.place = "inside", u.toggleAttribute("data-left-out", !be(u, f - d, r) || Y(u).height * r > x), he(u, e, l), z(u, (d + f) / 2, b(i), j, n);
341
375
  });
342
376
  let l = e.totals[i];
343
- l && (l.dataset.place = "after", z(l, k(s.at(-1)?.to ?? 0) + w, y(i), j, n));
377
+ l && (l.dataset.place = A(i) ? "before" : "after", z(l, A(i) ? B(a.bottom) - T : B(a.top) + T, b(i), j, n));
344
378
  let u = c[i];
345
- u && z(u, p - 8 * r, y(i), j, n);
379
+ u && z(u, p - 8 * r, b(i), j, n);
346
380
  }), a.appendChild(I("line", {
347
381
  class: o,
348
- x1: p,
349
- x2: p,
382
+ x1: R,
383
+ x2: R,
350
384
  y1: 0,
351
385
  y2: n
352
386
  }));
@@ -356,7 +390,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
356
390
  e.plot.dataset.grouped = "";
357
391
  let t = e.seriesValues.flat().filter((e) => e.dataset.missing === void 0), s = xe(e.plot, t, (e) => ({
358
392
  size: Y(e).height * r,
359
- room: x.size + x.gap * .5
393
+ room: S.size + S.gap * .5
360
394
  }), "--tablechart-fit");
361
395
  e.rows.forEach((t, o) => {
362
396
  e.series.forEach((r, c) => {
@@ -365,52 +399,52 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
365
399
  u.dataset.place = "none";
366
400
  return;
367
401
  }
368
- let d = k(l.value), f = y(o) + x.offset(c);
402
+ let d = B(l.value), f = l.value < 0, p = b(o) + S.offset(c);
369
403
  a.appendChild(I("rect", {
370
404
  class: L(i, t),
371
405
  "data-kind": "bar",
372
406
  "data-row": o + 1,
373
- "data-grow": "right",
374
- x: p,
375
- y: f,
376
- width: Math.max(d - p, 1),
377
- height: x.size,
407
+ "data-grow": f ? "left" : "right",
408
+ x: Math.min(d, R),
409
+ y: p,
410
+ width: Math.max(Math.abs(d - R), 1),
411
+ height: S.size,
378
412
  ...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);
413
+ })), u.dataset.place = f ? "before" : "after", u.toggleAttribute("data-left-out", !s), z(u, f ? d - T : d + T, p + S.size / 2, j, n);
380
414
  });
381
415
  let l = c[o];
382
- l && z(l, p - 8 * r, y(o), j, n);
416
+ l && z(l, p - 8 * r, b(o), j, n);
383
417
  }), a.appendChild(I("line", {
384
418
  class: o,
385
- x1: p,
386
- x2: p,
419
+ x1: R,
420
+ x2: R,
387
421
  y1: 0,
388
422
  y2: n
389
423
  }));
390
424
  return;
391
425
  }
392
- let A = t.map((e, t) => be(s[t], k(e.value) - p, r));
426
+ let ee = t.map((e, t) => be(s[t], Math.abs(B(e.value) - R), r));
393
427
  t.forEach((t, o) => {
394
- let l = k(t.value), u = y(o);
428
+ let l = B(t.value), u = b(o), d = t.value < 0, f = Math.abs(l - R);
395
429
  a.appendChild(I("rect", {
396
430
  class: L(i, t),
397
431
  "data-kind": t.kind,
398
432
  "data-row": o + 1,
399
- "data-grow": "right",
400
- x: p,
401
- y: u - b / 2,
402
- width: Math.max(l - p, 1),
403
- height: b,
433
+ "data-grow": d ? "left" : "right",
434
+ x: Math.min(l, R),
435
+ y: u - x / 2,
436
+ width: Math.max(f, 1),
437
+ height: x,
404
438
  style: N("--i", t.slot)
405
439
  }));
406
- let d = s[o], f = Math.max(Math.min(w, l - p - T(d) - 6 * r), 6 * r);
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);
408
- let m = c[o];
409
- m && z(m, p - 8 * r, u, j, n);
440
+ let m = s[o], h = Math.max(Math.min(T, f - E(m) - 6 * r), 6 * r), g = d ? 1 : -1;
441
+ m.dataset.place = ee[o] ? "inside" : d ? "before" : "after", m.dataset.kind = t.kind, z(m, ee[o] ? e.insideAlign === "center" ? (R + l) / 2 : e.insideAlign === "start" ? R - g * (h + E(m) / 2) : l + g * (h + E(m) / 2) : l - g * T, u, j, n);
442
+ let _ = c[o];
443
+ _ && z(_, p - 8 * r, u, j, n);
410
444
  }), a.appendChild(I("line", {
411
445
  class: o,
412
- x1: p,
413
- x2: p,
446
+ x1: R,
447
+ x2: R,
414
448
  y1: 0,
415
449
  y2: n
416
450
  }));
@@ -432,20 +466,24 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
432
466
  let { segments: t, cx: n, y: r, barWidth: a, height: s, unit: c, svg: l, values: u, labels: d, insideAlign: f } = e, p = r(0);
433
467
  if (e.stacked) {
434
468
  e.rows.forEach((t, i) => {
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) => {
469
+ let o = X(t, e.series.length), l = ge(e, t, i, {}, o.bottom < 0 ? `center ${p - r(o.top)}px` : ""), u = n(i) - a / 2;
470
+ pe(t, e.series.length).forEach(({ from: t, to: o, cell: d }, f) => {
437
471
  let p = e.seriesValues[f][i];
438
- if (p.dataset.place = "none", d.missing || u === t) return;
439
- let m = r(u), h = r(t);
440
- o(f, {
441
- x: l,
472
+ if (p.dataset.place = "none", d.missing || o === t) return;
473
+ let m = Math.min(r(o), r(t)), h = Math.max(r(o), r(t));
474
+ l(f, {
475
+ x: u,
442
476
  y: m,
443
477
  width: a,
444
- height: Math.max(h - m, 1)
478
+ height: Math.max(h - m, 1),
479
+ ...o < t && { "data-grow": "down" }
445
480
  }), p.dataset.place = "inside", p.toggleAttribute("data-left-out", !ye(p, h - m, c) || Y(p).width * c > a - 4 * c), he(p, e, f), z(p, n(i), (m + h) / 2, j, s);
446
481
  });
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));
482
+ let d = e.totals[i];
483
+ if (d) {
484
+ let e = o.top === 0 && o.bottom < 0;
485
+ d.dataset.place = e ? "below" : "outside", z(d, n(i), e ? r(o.bottom) + 4 * c : r(o.top) - 4 * c, j, s);
486
+ }
449
487
  }), l.appendChild(I("line", {
450
488
  class: o,
451
489
  x1: 0,
@@ -469,17 +507,18 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
469
507
  h.dataset.place = "none";
470
508
  return;
471
509
  }
472
- let _ = r(m.value);
510
+ let _ = r(m.value), v = m.value < 0;
473
511
  l.appendChild(I("rect", {
474
512
  class: L(i, a),
475
513
  "data-kind": "bar",
476
514
  "data-row": o + 1,
515
+ ...v && { "data-grow": "down" },
477
516
  x: g,
478
- y: _,
517
+ y: Math.min(_, p),
479
518
  width: t.size,
480
- height: Math.max(p - _, 1),
519
+ height: Math.max(Math.abs(p - _), 1),
481
520
  ...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);
521
+ })), h.dataset.place = v ? "below" : "outside", h.toggleAttribute("data-left-out", !u), z(h, g + t.size / 2, v ? _ + 4 * c : _ - 4 * c, j, s);
483
522
  });
484
523
  }), l.appendChild(I("line", {
485
524
  class: o,
@@ -490,10 +529,10 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
490
529
  }));
491
530
  return;
492
531
  }
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;
532
+ let m = ve(u, a, c), h = t.map((e, t) => d === "inside" && !m && !e.missing && ye(u[t], Math.abs(p - r(e.value)), c)), g = u[0] ? Y(u[0]).height * c * .56 : 0, _ = Infinity;
494
533
  for (let [e, t] of u.entries()) h[e] && (_ = Math.min(_, (a - Y(t).width * c) / 2));
495
534
  t.forEach((e, t) => {
496
- let o = r(e.value);
535
+ let o = r(e.value), d = e.value < 0;
497
536
  if (e.missing) {
498
537
  z(u[t], n(t), p - 4 * c, j, s), u[t].dataset.place = "outside";
499
538
  return;
@@ -502,14 +541,15 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
502
541
  class: L(i, e),
503
542
  "data-kind": e.kind,
504
543
  "data-row": t + 1,
544
+ ...d && { "data-grow": "down" },
505
545
  x: n(t) - a / 2,
506
- y: o,
546
+ y: Math.min(o, p),
507
547
  width: a,
508
- height: Math.max(p - o, 1),
548
+ height: Math.max(Math.abs(p - o), 1),
509
549
  style: N("--i", e.slot)
510
550
  }));
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;
512
- z(u[t], n(t), h[t] ? m : o - 4 * c, j, s), u[t].dataset.place = h[t] ? "inside" : "outside";
551
+ let m = d ? -1 : 1, v = Math.min(_, (Math.abs(p - o) - g) / 2), y = f === "center" ? (o + p) / 2 : f === "start" ? p - m * (v + g / 2) : o + m * (v + g / 2), b = d ? o + 4 * c : o - 4 * c;
552
+ z(u[t], n(t), h[t] ? y : b, j, s), u[t].dataset.place = h[t] ? "inside" : d ? "below" : "outside";
513
553
  }), l.appendChild(I("line", {
514
554
  class: o,
515
555
  x1: 0,
@@ -624,7 +664,7 @@ var e = "tablechart", t = "tablechart-plot", n = "tablechart-categories", r = "t
624
664
  r,
625
665
  ...i
626
666
  });
627
- }, X = (e) => Number(e.toFixed(2));
667
+ }, Z = (e) => Number(e.toFixed(2));
628
668
  function je(e, t) {
629
669
  let n = e.length;
630
670
  if (n < 2) return e.map(() => 0);
@@ -647,7 +687,7 @@ function Me(e, t, n, r) {
647
687
  return [[e[0] + i, e[1] + n * i], [t[0] - i, t[1] - r * i]];
648
688
  }
649
689
  function Ne(e, t, n, r) {
650
- let [i, a] = Me(e, t, n, r), o = ([e, t]) => `${X(e)},${X(t)}`;
690
+ let [i, a] = Me(e, t, n, r), o = ([e, t]) => `${Z(e)},${Z(t)}`;
651
691
  return `C${o(i)} ${o(a)} ${o(t)}`;
652
692
  }
653
693
  function Pe(e, t, n) {
@@ -670,13 +710,14 @@ var Fe = (e) => e.map((e) => ({
670
710
  segments: Fe,
671
711
  series: !0,
672
712
  stackable: !0,
713
+ running: !0,
673
714
  swatch: e ? "box" : void 0,
674
715
  headroom: ({ labelHeight: e, unit: t }) => e * 1.6 + 6 * t,
675
716
  footroom: ({ labelHeight: t, unit: n, series: r, focused: i, stacked: a }) => !e && !a && r === 2 && !i ? t + 7 * n : 0,
676
717
  draw(t) {
677
718
  let { rows: n, series: r, seriesValues: i, names: a, cx: s, y: c, height: l, unit: u, labelHeight: d, svg: f, stacked: p } = t, _ = t.shape === "step", v = t.shape === "smooth", x = r.length > 1, S = r.some((e) => e.focus), C = n.length - 1, w = c(0), T = n.length > 1 ? s(1) - s(0) : s(0) * 2;
678
- f.style.setProperty("--tablechart-base", `${X(w)}px`);
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) => {
719
+ f.style.setProperty("--tablechart-base", `${Z(w)}px`);
720
+ let E = (e) => `--rise:${Z(w - e)}px; `, D = (e, t) => n[t]?.cells[e] ?? n[t]?.cells[0], O = (e, t) => !D(e, t) || !!D(e, t)?.missing, k = n.map((e) => p ? pe(e, r.length, !0) : null), A = (e, t) => k[t]?.[e].to ?? D(e, t)?.value ?? 0, M = (e, t) => k[t]?.[e].from ?? 0, N = (e, t) => [s(t), c(A(e, t))], P = r.map((e, t) => {
680
721
  if (!x) return {
681
722
  attrs: {},
682
723
  ink: ""
@@ -689,62 +730,62 @@ var Fe = (e) => e.map((e) => ({
689
730
  },
690
731
  ink: `--n:${t}; --m:${+!!n}; --palette:var(--tablechart-color-${t + 1}); `
691
732
  };
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) => {
733
+ }), F = Math.min(C, 6), L = C > 0 ? F / (_ ? n.length : C) : 1, R = (e) => e * L, B = (e) => `--i:${Z(R(e))}`, V = (e) => {
693
734
  let t = [], r = -1;
694
735
  return n.forEach((n, i) => {
695
736
  O(e, i) || (r < 0 && (r = i), (i === C || O(e, i + 1)) && ((_ || i > r) && t.push([r, i]), r = -1));
696
737
  }), t;
697
- }, V = (e, t) => `--i:${X(R(e) + 1)}; --d:${X(R(_ ? t + 1 : t) - R(e))}`, ne = (e, t) => ({
738
+ }, H = (e, t) => `--i:${Z(R(e) + 1)}; --d:${Z(R(_ ? t + 1 : t) - R(e))}`, te = (e, t) => ({
698
739
  "data-from": e + 1,
699
740
  "data-to": t + 1,
700
741
  ..._ && { "data-flat": "" }
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) => {
742
+ }), U = v ? r.map((e, t) => Pe(n.length, (e) => O(t, e), (e) => N(t, e))) : [], ne = v && e ? r.map((e, t) => Pe(n.length, (e) => O(t, e), (e) => [s(e), c(M(t, e))])) : [], W = (e, t, n) => {
702
743
  let r = [];
703
744
  return e.forEach(([i, a], o) => {
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)}`);
745
+ _ ? (r.push(`H${Z(i + n * T / 2)}`), o < e.length - 1 && r.push(`V${Z(e[o + 1][1])}`)) : o > 0 && r.push(t ? Ne(e[o - 1], [i, a], t[o - 1], t[o]) : `L${Z(i)},${Z(a)}`);
705
746
  }), r;
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) => {
747
+ }, G = (e, t, r, i) => n.slice(t, r + 1).map((n, r) => [s(t + r), c(i(e, t + r))]), K = (e, t, n, r) => v ? e[t].slice(n, r + 1) : null, q = (e) => s(e) - (_ ? T / 2 : 0), re = (e) => s(e) + (_ ? T / 2 : 0), ie = (e) => {
707
748
  let t = I("g", {
708
749
  class: h,
709
750
  ...P[e].attrs,
710
751
  ...p && { "data-stacked": "" },
711
752
  style: P[e].ink
712
- }), n = te(e), r = I("g", {
753
+ }), n = V(e), r = I("g", {
713
754
  class: g,
714
- style: `--rows:${X(F + 1)}; ${n.length ? V(...n[0]) : ""}`
755
+ style: `--rows:${Z(F + 1)}; ${n.length ? H(...n[0]) : ""}`
715
756
  });
716
757
  t.appendChild(r);
717
758
  for (let [t, i] of n) {
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])}`,
759
+ let n = G(e, t, i, A), a = G(e, t, i, M), o = K(ne, e, t, i)?.reverse() ?? null, s = [
760
+ `M${Z(q(t))},${Z(a[0][1])}`,
761
+ `L${Z(q(t))},${Z(n[0][1])}`,
762
+ ...W(n, K(U, e, t, i), 1),
763
+ `L${Z(re(i))},${Z(a[a.length - 1][1])}`,
723
764
  ...W(a.reverse(), o, -1),
724
765
  "Z"
725
766
  ].join(" ");
726
767
  r.appendChild(I("path", {
727
768
  d: s,
728
- ...ne(t, i),
729
- style: V(t, i)
769
+ ...te(t, i),
770
+ style: H(t, i)
730
771
  }));
731
772
  }
732
773
  f.appendChild(t);
733
- }, ie = (e) => {
774
+ }, ae = (e) => {
734
775
  let t = r[e];
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(" ");
776
+ for (let [n, r] of V(e)) {
777
+ let i = G(e, n, r, A), a = [`M${Z(q(n))},${Z(i[0][1])}`, ...W(i, K(U, e, n, r), 1)].join(" ");
737
778
  f.appendChild(I("path", {
738
779
  class: m,
739
780
  ...P[e].attrs,
740
781
  d: a,
741
782
  ...t.line && { "data-line": t.line },
742
- ...ne(n, r),
743
- style: `${P[e].ink}${V(n, r)}`
783
+ ...te(n, r),
784
+ style: `${P[e].ink}${H(n, r)}`
744
785
  }));
745
786
  }
746
787
  };
747
- e && r.forEach((e, t) => re(t)), r.forEach((e, t) => ie(t)), _ || (() => {
788
+ e && r.forEach((e, t) => ie(t)), r.forEach((e, t) => ae(t)), _ || (() => {
748
789
  let e = r.map((e, t) => x ? ke(r, t) : {
749
790
  shape: "circle",
750
791
  open: !1
@@ -770,7 +811,7 @@ var Fe = (e) => e.map((e) => ({
770
811
  }));
771
812
  });
772
813
  })();
773
- let ae = (e, t) => {
814
+ let J = (e, t) => {
774
815
  let n = t;
775
816
  for (; n < C && !O(e, n + 1) && D(e, n + 1)?.value === D(e, t)?.value;) n++;
776
817
  return n;
@@ -778,17 +819,18 @@ var Fe = (e) => e.map((e) => ({
778
819
  let i = D(t, n);
779
820
  if (!i || i.missing || _ && n > 0 && !O(t, n - 1) && D(t, n - 1)?.value === i.value || S && !r[t].focus) return "none";
780
821
  if (p) return "middle";
781
- if (!x || S || r.length > 2) return "above";
782
- let a = D(1 - t, n);
783
- return !a || a.missing || i.value > a.value || i.value === a.value && t === 0 || e && N(t, n)[1] + 7 * u + d > w ? "above" : "below";
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;
822
+ let a = i.value < 0 ? "below" : "above";
823
+ if (!x || S || r.length > 2) return a;
824
+ let o = D(1 - t, n);
825
+ return !o || o.missing ? a : i.value > o.value || i.value === o.value && t === 0 || e && i.value >= 0 && N(t, n)[1] + 7 * u + d > w ? "above" : "below";
826
+ }, se = (e, t) => !p && !_ ? x && !S && r.length > 2 : Y(i[e][t]).width * u > (_ ? J(e, t) - t + 1 : 1) * T - 4 * u || p && e > 0 && A(e, t) < M(e, t) ? !0 : p && Math.abs(c(M(e, t)) - c(A(e, t))) < d * 1.2;
785
827
  i.forEach((e, t) => {
786
828
  e.forEach((e, n) => {
787
- e.style.setProperty("--i", String(X(_ ? (R(n) + R(n + 1)) / 2 : R(n))));
829
+ e.style.setProperty("--i", String(Z(_ ? (R(n) + R(n + 1)) / 2 : R(n))));
788
830
  let r = oe(t, n);
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;
831
+ if (e.dataset.place = r === "above" ? "outside" : r, e.toggleAttribute("data-left-out", r !== "none" && se(t, n)), _ && r !== "none" ? e.dataset.rowEnd = String(J(t, n) + 1) : delete e.dataset.rowEnd, r === "none") return;
790
832
  let i = Y(e).width * u / 2 + 4 * u, a = s(n);
791
- _ ? a = (s(n) + s(ae(t, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === C && (a -= i);
833
+ _ ? a = (s(n) + s(J(t, n))) / 2 : r === "middle" && n === 0 ? a += i : r === "middle" && n === C && (a -= i);
792
834
  let o = c(A(t, n)), d = {
793
835
  middle: (c(M(t, n)) - o) / 2,
794
836
  above: -7 * u,
@@ -808,13 +850,13 @@ var Fe = (e) => e.map((e) => ({
808
850
  };
809
851
  }), le = (a[0] ? Y(a[0]).height : 0) * u;
810
852
  for (let e of Se(ce, le)) z(e.name, e.x, e.y, j, l);
811
- let ue = !e && !p && r.length === 2 && !S ? l - 2 * u : w;
853
+ let ue = n.some((e) => e.cells.some((e) => !e.missing && e.value < 0)), de = !e && !p && r.length === 2 && !S && !ue ? l - 2 * u : w;
812
854
  f.appendChild(I("line", {
813
855
  class: o,
814
856
  x1: 0,
815
857
  x2: s(C) + s(0),
816
- y1: ue,
817
- y2: ue
858
+ y1: de,
859
+ y2: de
818
860
  }));
819
861
  }
820
862
  }), Le = Ie(!1), Re = Ie(!0), ze = /* @__PURE__ */ new Set(), Be = (t, n) => {
@@ -842,17 +884,17 @@ var Fe = (e) => e.map((e) => ({
842
884
  },
843
885
  breakable: !0,
844
886
  headroom: ({ labelHeight: e, badgeHeight: t, hasAnnotations: n, unit: r }) => e + 6 * r + (n ? t * 1.6 : 0),
845
- draw({ segments: e, cx: t, y: n, barWidth: r, height: a, unit: c, svg: l, values: u, breakAt: d, closing: f, insideAlign: p }) {
846
- let m = n(0), h = ve(u, r, c), g = p ?? "center", _ = e.map((t, r) => {
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;
887
+ draw({ segments: e, cx: t, y: n, barWidth: r, height: a, unit: c, svg: l, values: u, breakAt: d, insideAlign: f }) {
888
+ let p = n(0), m = ve(u, r, c), h = f ?? "center", g = e.map((t, r) => {
889
+ let i = n(Math.max(t.from, t.to)), a = Math.abs(n(t.from) - n(t.to)), o = d !== null && Math.min(t.from, t.to) < d && Math.max(t.from, t.to) > d, s = t.kind === "total" && r > 0 && r === e.length - 1;
848
890
  return {
849
891
  top: i,
850
892
  length: a,
851
- down: t.kind === "down" || t.kind === "total" && r > 0 && r === e.length - 1 && f === "down",
852
- inside: !o && !h && ye(u[r], a, c)
893
+ down: t.kind === "down" || t.kind === "total" && (s ? t.to >= 0 : t.to < 0),
894
+ inside: !o && !m && ye(u[r], a, c)
853
895
  };
854
- }), v = u[0] ? Y(u[0]).height * c * .56 : 0, y = Infinity;
855
- for (let [e, t] of _.entries()) t.inside && (y = Math.min(y, (r - Y(u[e]).width * c) / 2));
896
+ }), _ = u[0] ? Y(u[0]).height * c * .56 : 0, v = Infinity;
897
+ for (let [e, t] of g.entries()) t.inside && (v = Math.min(v, (r - Y(u[e]).width * c) / 2));
856
898
  e.forEach((i, a) => {
857
899
  let o = e[a + 1];
858
900
  if (!o) return;
@@ -867,7 +909,7 @@ var Fe = (e) => e.map((e) => ({
867
909
  style: N("--i", o.slot)
868
910
  }));
869
911
  }), e.forEach((e, n) => {
870
- let { top: o, length: s, down: d, inside: f } = _[n];
912
+ let { top: o, length: s, down: d, inside: f } = g[n];
871
913
  l.appendChild(I("rect", {
872
914
  class: L(i, e),
873
915
  "data-kind": e.kind,
@@ -879,7 +921,7 @@ var Fe = (e) => e.map((e) => ({
879
921
  height: Math.max(s, 1),
880
922
  style: N("--i", e.slot)
881
923
  }));
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;
924
+ let p = u[n], m = Math.min(v, (s - _) / 2), y = o + m + _ / 2, b = o + s - m - _ / 2, x = h === "center" ? o + s / 2 : h === "end" === d ? b : y;
883
925
  p.dataset.place = f ? "inside" : "outside", p.dataset.kind = e.kind;
884
926
  let S = f ? x : e.kind === "down" ? o + s + Y(p).height * c + 3 * c : o - 3 * c;
885
927
  z(p, t(n), S, j, a);
@@ -887,19 +929,19 @@ var Fe = (e) => e.map((e) => ({
887
929
  class: o,
888
930
  x1: 0,
889
931
  x2: j,
890
- y1: m,
891
- y2: m
932
+ y1: p,
933
+ y2: p
892
934
  }));
893
935
  }
894
- }, Z = {
936
+ }, Q = {
895
937
  enabled: !1,
896
938
  log(...t) {
897
- Z.enabled && console.log(`[${e}]`, ...t);
939
+ Q.enabled && console.log(`[${e}]`, ...t);
898
940
  },
899
941
  timed(t, n, r) {
900
- if (!Z.enabled) return r();
942
+ if (!Q.enabled) return r();
901
943
  let i = performance.now(), a = r(), o = performance.now() - i, s = n.querySelectorAll("tbody tr").length;
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;
944
+ return o > 50 ? console.warn(`[${e}] ${t} took ${o.toFixed(1)} ms for ${s} rows, more than 50 ms.`, n) : Q.log(`${t} took ${o.toFixed(1)} ms for ${s} rows.`, n), a;
903
945
  }
904
946
  }, He = (e) => {
905
947
  let t = (e?.textContent || "").trim(), n = t.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);
@@ -923,7 +965,7 @@ var Fe = (e) => e.map((e) => ({
923
965
  slot: n
924
966
  };
925
967
  }), We = (e) => Array.from(e.querySelector("thead tr:last-child")?.children ?? []).slice(1), Ge = (e) => e === "dashed" || e === "dotted" ? e : null, Ke = (e, t, n = "data-i18n") => {
926
- let r = We(e), i = Math.max(1, H(t.map((e) => e.cells.length)));
968
+ let r = We(e), i = Math.max(1, U(t.map((e) => e.cells.length)));
927
969
  return Array.from({ length: i }, (e, t) => {
928
970
  let i = r[t];
929
971
  return {
@@ -950,7 +992,7 @@ var Fe = (e) => e.map((e) => ({
950
992
  let a = We(i);
951
993
  a.length > 1 && a.forEach((e, r) => {
952
994
  e.getAttribute(n) || e.setAttribute(n, `${t}-col${r + 1}`);
953
- }), Z?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
995
+ }), Q?.log?.(`Keys for "${t}" written onto ${i.querySelectorAll("tbody th").length} rows`);
954
996
  }
955
997
  }, Je = [
956
998
  "axis-break",
@@ -1081,7 +1123,7 @@ var Fe = (e) => e.map((e) => ({
1081
1123
  n < 0 ? o(s, null, "--i", 0) : o(s, n, "--i", e.filter((e) => e === n).length);
1082
1124
  }
1083
1125
  Xe(e);
1084
- }, Q = (e, t, n = !1) => {
1126
+ }, $ = (e, t, n = !1) => {
1085
1127
  let r = e.plan;
1086
1128
  if (!r) return;
1087
1129
  let i = Math.min(Math.max(Math.round(t), 0), r.count), a = i !== e.step;
@@ -1131,9 +1173,9 @@ var Fe = (e) => e.map((e) => ({
1131
1173
  line: Le,
1132
1174
  waterfall: Ve
1133
1175
  }, et = {
1134
- "axis-break": ne,
1176
+ "axis-break": te,
1135
1177
  trend: le,
1136
- bracket: ae
1178
+ bracket: J
1137
1179
  }, tt = Object.keys(et), nt = (e) => {
1138
1180
  let t = "";
1139
1181
  for (let n = e.previousSibling; n && (t = (n.textContent ?? "") + t, !t.trim()); n = n.previousSibling);
@@ -1184,16 +1226,14 @@ var Fe = (e) => e.map((e) => ({
1184
1226
  d && i.style.setProperty("--tablechart-series-count", String(u.length));
1185
1227
  let f = i.hasAttribute("data-chart-stack");
1186
1228
  f && !c.stackable && console.warn(`[${e}] A ${s} chart cannot be stacked.`);
1187
- let p = f && !!c.stackable && d;
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.`);
1189
- let m = document.createElement("div");
1229
+ let p = f && !!c.stackable && d, m = document.createElement("div");
1190
1230
  m.className = t, m.setAttribute("aria-hidden", "true");
1191
1231
  let h = I("svg", {
1192
1232
  role: "presentation",
1193
1233
  focusable: "false"
1194
1234
  });
1195
1235
  m.appendChild(h), i.appendChild(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) => {
1236
+ let g = c.centre ? l.filter((e) => !e.isTotal) : l, y = Math.max(0, U(g.flatMap((e) => e.cells.slice(0, u.length).map((e) => ne(e.number))))), b = u.map((e, t) => l.map((e, n) => {
1197
1237
  let i = e.cells[t] ?? e.cells[0], a = R(r, m);
1198
1238
  return a.classList.add(...e.classes), a.dataset.value = String(i.value), i.prefix && (a.dataset.prefix = i.prefix), i.suffix && (a.dataset.suffix = i.suffix), i.missing && (a.dataset.missing = i.raw), d && (a.dataset.series = String(t + 1)), a.dataset.row = String(n + 1), a.style.setProperty("--i", String(e.slot)), a;
1199
1239
  })), S = b[0], C = p && c.totals ? l.map((e, t) => {
@@ -1215,7 +1255,7 @@ var Fe = (e) => e.map((e) => ({
1215
1255
  }) : [], k = c.centre ? R(x, m) : null;
1216
1256
  if (k) {
1217
1257
  let e = l.find((e) => e.isTotal), t = e ? e.value : l.reduce((e, t) => e + Math.abs(t.value), 0);
1218
- k.dataset.value = String(t), e && (k.dataset.decimals = String(U(e.number)));
1258
+ k.dataset.value = String(t), e && (k.dataset.decimals = String(ne(e.number)));
1219
1259
  }
1220
1260
  let A = k && !l.some((e) => e.isTotal) ? ot(i, k, a) : null, j = c.categories === "beside", M = document.createElement("div");
1221
1261
  M.className = n, M.setAttribute("aria-hidden", "true"), M.inert = !0, j ? M.dataset.place = "beside" : c.centre && (M.dataset.place = "key"), M.style.setProperty("--tablechart-columns", String(l.length));
@@ -1279,8 +1319,8 @@ var Fe = (e) => e.map((e) => ({
1279
1319
  };
1280
1320
  return L?.addEventListener("click", (e) => {
1281
1321
  let t = e.target.closest("button")?.dataset.go;
1282
- t && Q(B, B.step + (t === "next" ? 1 : -1));
1283
- }), Q(B, 0, !0), a.hover && i.getAttribute("data-chart-hover") !== "false" && _t(B), mt(B, a), B;
1322
+ t && $(B, B.step + (t === "next" ? 1 : -1));
1323
+ }), $(B, 0, !0), a.hover && i.getAttribute("data-chart-hover") !== "false" && _t(B), mt(B, a), B;
1284
1324
  }, ut = (e) => {
1285
1325
  let t = getComputedStyle(e).getPropertyValue("--tablechart-inside-align").trim();
1286
1326
  return t === "start" || t === "center" || t === "end" ? t : null;
@@ -1304,7 +1344,7 @@ var Fe = (e) => e.map((e) => ({
1304
1344
  ]);
1305
1345
  let g = (s[0] ? Y(s[0]).height : 0) * p, _ = d[0]?.badge ? Y(d[0].badge).height * p : 0, v = Math.max(h, dt(t.figure, p, "--tablechart-min-height", "200px") ?? 0, o.minHeight?.({
1306
1346
  labelHeight: g,
1307
- nameHeight: Math.max(0, H(t.categories.map((e) => Y(e).height))) * p,
1347
+ nameHeight: Math.max(0, U(t.categories.map((e) => Y(e).height))) * p,
1308
1348
  unit: p,
1309
1349
  rows: a.length,
1310
1350
  series: c.length,
@@ -1335,52 +1375,52 @@ var Fe = (e) => e.map((e) => ({
1335
1375
  series: c.length,
1336
1376
  focused: c.some((e) => e.focus),
1337
1377
  stacked: t.stacked
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) => [
1378
+ }, C = Math.max(((e) => t.stacked ? e(a.map((e) => X(e, c.length, o.running).top)) : e([...x.flatMap((e) => [
1339
1379
  e.from,
1340
1380
  e.to,
1341
1381
  e.value
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) => {
1343
- let t = Number.parseFloat(A?.getAttribute(e) ?? "");
1382
+ ]), ...a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value))]))(U), 0), T = x.some((e) => e.kind === "up" || e.kind === "down") ? x.flatMap((e) => [e.from, e.to]) : t.stacked ? a.map((e) => X(e, c.length, o.running).bottom) : a.flatMap((e) => e.cells.slice(0, c.length).map((e) => e.value)), E = Math.min(-U(T.map((e) => -e)), 0), D = o.headroom?.(S) ?? g, O = 2 * p + (o.footroom?.(S) ?? 0) + (E < 0 ? g + 4 * p : 0), k = v - D - O, A = C * 1.02, M = E * 1.02, N = d.find((e) => e.spec.getAttribute("data-annotation") === "axis-break")?.spec, P = (e) => {
1383
+ let t = Number.parseFloat(N?.getAttribute(e) ?? "");
1344
1384
  return Number.isFinite(t) ? t : null;
1345
- }, N = M("data-from") ?? M("data-at"), P = M("data-to"), L = null;
1346
- if (A && (N !== null || P !== null)) {
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*$/);
1385
+ }, L = P("data-from") ?? P("data-at"), R = P("data-to"), z = null;
1386
+ if (N && (L !== null || R !== null)) {
1387
+ let t = L ?? 0, n = R ?? A, r = R === null ? t : L === null ? n : (t + n) / 2, i = N.getAttribute("data-size"), a = i?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);
1348
1388
  i !== null && !a && console.warn(`[${e}] data-size="${i}" is not a percentage, such as 30%. Using the default.`);
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);
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 = {
1389
+ let s = Math.min(Math.max(a ? Number(a[1]) / 100 : R === null ? .22 : .3, .05), .8), c = x.filter((e) => (e.kind === "up" || e.kind === "down") && Math.max(e.from, e.to) > t && Math.min(e.from, e.to) < n);
1390
+ o.breakable ? E < 0 ? console.warn(`[${e}] A chart with values below zero cannot break its scale.`) : t < 0 || n <= t || n > A || t === 0 && n === A ? console.warn(`[${e}] A break from ${t} to ${n} does not fit a scale that runs from 0 to ${C}.`) : c.length ? console.warn(`[${e}] A break from ${t} to ${n} would cut a step that floats. Keep it below or above the steps.`) : z = {
1351
1391
  lo: t,
1352
1392
  hi: n,
1353
1393
  gap: r,
1354
1394
  share: s
1355
1395
  } : console.warn(`[${e}] This kind of chart cannot break its scale.`);
1356
1396
  }
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;
1397
+ let B = z ? z.gap : null, V = (z && dt(t.figure, p, "--tablechart-break-gap", "")) ?? 13, H = v - O, te = A - M || 1, ne = (e) => H - (e - M) / te * k;
1398
+ if (z) {
1399
+ let { lo: e, hi: t, gap: n, share: r } = z, i = k * r, a = (k - i - V) / (e + (A - t)), o = i / (t - e);
1400
+ ne = (r) => r <= e ? H - r * a : r <= n ? H - e * a - (r - e) * o : r <= t ? H - e * a - (r - e) * o - V : H - e * a - i - V - (r - t) * a;
1361
1401
  }
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;
1402
+ let W = u.length ? U(u.map((e) => Y(e).width)) * p + 12 * p : 0, G = t.categories[0]?.parentElement;
1403
+ G && (G.style.paddingRight = W ? `${W / j * 100}%` : "");
1404
+ let K = (j - W) / a.length, q = (e) => (e + .5) * K, re = (e) => e >= 0 && e < a.length ? e : null;
1405
+ t.rowAt = o.centre ? null : o.categories === "beside" ? (e, t) => re(Math.floor(t * p / (v / a.length))) : (e) => re(Math.floor(e * p / K));
1406
+ let ie = K / j * 100, ae = 100 / a.length;
1367
1407
  t.rowBox = o.categories === "beside" ? (e) => [
1368
1408
  0,
1369
- e * q,
1409
+ e * ae,
1370
1410
  100,
1371
- q
1411
+ ae
1372
1412
  ] : (e) => [
1373
- e * K,
1413
+ e * ie,
1374
1414
  0,
1375
- K,
1415
+ ie,
1376
1416
  100
1377
1417
  ], i.setAttribute("viewBox", `0 0 ${j} ${F(v)}`), i.textContent = "", t.checks = [];
1378
1418
  let J = {
1379
1419
  rows: a,
1380
1420
  segments: x,
1381
- cx: W,
1382
- y: te,
1383
- barWidth: Math.min(U * n.barfill, ft(t.figure, p)),
1421
+ cx: q,
1422
+ y: ne,
1423
+ barWidth: Math.min(K * n.barfill, ft(t.figure, p)),
1384
1424
  barMax: ft(t.figure, p),
1385
1425
  height: v,
1386
1426
  unit: p,
@@ -1389,11 +1429,10 @@ var Fe = (e) => e.map((e) => ({
1389
1429
  after: a.length,
1390
1430
  note: 0,
1391
1431
  labels: t.figure.dataset.chartLabels === "inside" || t.figure.dataset.chartLabels !== "outside" && n.labels === "inside" ? "inside" : "outside",
1392
- closing: (t.figure.dataset.chartClosing ?? n.closing) === "up" ? "up" : "down",
1393
1432
  insideAlign: ut(t.figure),
1394
- breakAt: R,
1395
- squeeze: L,
1396
- breakGap: z,
1433
+ breakAt: B,
1434
+ squeeze: z,
1435
+ breakGap: V,
1397
1436
  stacked: t.stacked,
1398
1437
  shape: it(t.figure, n),
1399
1438
  totals: t.totals,
@@ -1437,8 +1476,8 @@ var Fe = (e) => e.map((e) => ({
1437
1476
  });
1438
1477
  }
1439
1478
  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) => ({
1479
+ let oe = t.categories[0]?.parentElement;
1480
+ return oe && o.categories !== "beside" && !o.centre && xe(oe, t.categories.filter((e) => e.offsetParent !== null), (e) => ({
1442
1481
  size: e.scrollWidth,
1443
1482
  room: e.clientWidth
1444
1483
  }), "--tablechart-name-fit"), ee(i, d.flatMap(({ badge: e }) => {
@@ -1526,7 +1565,7 @@ var Fe = (e) => e.map((e) => ({
1526
1565
  }
1527
1566
  return e.remove(), t;
1528
1567
  }, St = /^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/, Ct = (e) => {
1529
- let t = At(e);
1568
+ let t = jt(e);
1530
1569
  return t?.tagName === "P" ? t : e;
1531
1570
  }, wt = (e) => {
1532
1571
  let t = Ct(e).firstChild;
@@ -1565,46 +1604,61 @@ var Fe = (e) => e.map((e) => ({
1565
1604
  let i = n.tagName === "TABLE" ? n : null, a = n.previousElementSibling, o = n.nextElementSibling, s = i ? bt(a) ? a : bt(o) ? o : null : n;
1566
1605
  i && s === o && (o = o?.nextElementSibling ?? null);
1567
1606
  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 = []) => {
1570
- let n = document.createElement("table");
1571
- if (t.length) {
1572
- let e = n.createTHead().insertRow();
1573
- e.append(document.createElement("th"));
1607
+ return n.replaceWith(r), s && r.append(xt(s)), i && r.append(i), c && r.append(c), Q?.log?.(`A ${i ? "table" : "caption"} with chart attributes was wrapped in a figure of its own`), r;
1608
+ }), Ot = (e, t, n, r = document.createElement("table")) => {
1609
+ for (let e of r.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr")) e.remove();
1610
+ if (!r.tHead && (t.length || n)) {
1611
+ let e = r.createTHead().insertRow(), i = document.createElement("th");
1612
+ i.textContent = n, e.append(i);
1574
1613
  for (let n of t) {
1575
1614
  let t = document.createElement("th");
1576
1615
  t.textContent = n, e.append(t);
1577
1616
  }
1578
1617
  }
1579
- let r = n.createTBody();
1618
+ let i = document.createElement("tbody");
1619
+ r.append(i);
1580
1620
  for (let t of e) {
1581
- let e = r.insertRow();
1621
+ let e = i.insertRow();
1582
1622
  t.kind === "total" && (e.dataset.kind = "total");
1583
1623
  let n = document.createElement("th");
1584
1624
  n.textContent = String(t.label ?? ""), e.append(n);
1585
1625
  for (let n of t.values ?? [t.value ?? null]) e.insertCell().textContent = n === null ? "" : String(n);
1586
1626
  }
1587
- return n;
1588
- }, kt = async (t) => {
1627
+ return r;
1628
+ }, kt = (e) => {
1629
+ if (!e || typeof e != "object") return;
1630
+ let t = Object.entries(e), n = (e) => e === null || typeof e == "string" || typeof e == "number";
1631
+ if (!(!t.length || !t.every(([, e]) => n(e) || Array.isArray(e) && e.every(n)))) return t.map(([e, t]) => Array.isArray(t) ? {
1632
+ label: e,
1633
+ values: t
1634
+ } : {
1635
+ label: e,
1636
+ value: t
1637
+ });
1638
+ }, At = async (t) => {
1589
1639
  await Promise.all(t.filter((e) => e.hasAttribute("data-chart-src")).map(async (t) => {
1590
- let n = t.getAttribute("data-chart-src");
1591
- for (let e of t.querySelectorAll("table")) e.remove();
1640
+ let n = t.getAttribute("data-chart-src"), r = Array.from(t.querySelectorAll("table")).find((e) => e.tHead) ?? null;
1641
+ for (let e of t.querySelectorAll("table")) e !== r && e.remove();
1592
1642
  try {
1593
1643
  let e = await fetch(n);
1594
1644
  if (!e.ok) throw Error(`${e.status} ${e.statusText}`);
1595
- let r = await e.json(), i = Array.isArray(r) ? r : r?.rows;
1596
- if (!Array.isArray(i)) throw Error("no array of rows in it");
1597
- let a = Array.isArray(r?.series) ? r.series.map(String) : [], o = t.querySelector(":scope > figcaption"), s = Ot(i, a);
1598
- o ? o.after(s) : t.prepend(s), Z?.log?.(`Read ${i.length} rows from "${n}"`);
1645
+ let i = await e.json(), a = Array.isArray(i) ? i : i?.rows ? Array.isArray(i.rows) ? i.rows : kt(i.rows) : kt(i);
1646
+ if (!Array.isArray(a)) throw Error("no rows in it: a list of rows, an object with rows, or names with their values");
1647
+ let o = Ot(a, Array.isArray(i?.series) ? i.series.map(String) : [], typeof i?.label == "string" ? i.label : "", r ?? void 0);
1648
+ if (!r) {
1649
+ let e = t.querySelector(":scope > figcaption");
1650
+ e ? e.after(o) : t.prepend(o);
1651
+ }
1652
+ o.tHead || Q?.log?.(`The table from "${n}" has no header row, so a screen reader cannot name its columns.`), Q?.log?.(`Read ${a.length} rows from "${n}"`);
1599
1653
  } catch (t) {
1600
1654
  let r = window.location.protocol === "file:";
1601
1655
  console.warn(`[${e}] Could not read the chart data in "${n}": ${t.message}.` + (r ? " A page opened from the file system cannot fetch files; open the page from a server instead." : ""));
1602
1656
  }
1603
1657
  }));
1604
- }, At = (e) => {
1658
+ }, jt = (e) => {
1605
1659
  let t = Array.from(e.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE && e.textContent?.trim());
1606
1660
  return t.length === 1 && t[0] instanceof HTMLElement ? t[0] : null;
1607
- }, jt = "strong, b, span.total", Mt = (e) => {
1661
+ }, Mt = "strong, b, span.total", Nt = (e) => {
1608
1662
  for (let t of e) {
1609
1663
  for (let e of t.querySelectorAll("tbody tr")) {
1610
1664
  let t = e.cells[0];
@@ -1612,16 +1666,16 @@ var Fe = (e) => e.map((e) => ({
1612
1666
  let n = document.createElement("th");
1613
1667
  for (let { name: e, value: r } of Array.from(t.attributes)) n.setAttribute(e, r);
1614
1668
  n.append(...t.childNodes), t.replaceWith(n);
1615
- for (let t = At(n); t?.matches(jt); t = At(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
1669
+ for (let t = jt(n); t?.matches(Mt); t = jt(n)) e.dataset.kind = "total", t.replaceWith(...t.childNodes);
1616
1670
  }
1617
1671
  let e = Array.from(t.querySelector("thead tr:last-child")?.children ?? []);
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);
1672
+ for (let t of e.slice(1)) for (let e = jt(t); e?.matches(Mt); e = jt(t)) t.setAttribute("data-kind", "focus"), e.replaceWith(...e.childNodes);
1619
1673
  }
1620
- }, Nt = "data-chart-made", Pt = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, Ft = (e) => new Promise((t) => setTimeout(t, e)), It = (e, t) => {
1674
+ }, Pt = "data-chart-made", Ft = () => window.matchMedia("(prefers-reduced-motion: reduce)").matches, It = (e) => new Promise((t) => setTimeout(t, e)), Lt = (e, t) => {
1621
1675
  let n = Number.parseFloat(e.dataset.chartEntrance ?? ""), r = Number.isFinite(n) ? n : t.entrance;
1622
1676
  return Math.min(Math.max(r, 0), 1);
1623
- }, Lt = async (e, t) => {
1624
- if (Pt()) return;
1677
+ }, Rt = async (e, t) => {
1678
+ if (Ft()) return;
1625
1679
  await new Promise(requestAnimationFrame);
1626
1680
  let n = e.getAnimations().filter((e) => e instanceof CSSAnimation);
1627
1681
  for (let t = e.parentElement; t && t !== document.body; t = t.parentElement) n.push(...t.getAnimations());
@@ -1632,11 +1686,11 @@ var Fe = (e) => e.map((e) => ({
1632
1686
  let a = Number(n.delay ?? 0) + i * t;
1633
1687
  r = Math.max(r, a - Number(e.currentTime ?? 0));
1634
1688
  }
1635
- r > 0 && await Ft(r);
1636
- }, Rt = (e) => {
1689
+ r > 0 && await It(r);
1690
+ }, zt = (e) => {
1637
1691
  for (let t = e; t && t !== document.body; t = t.parentElement) if (getComputedStyle(t).opacity === "0") return t;
1638
1692
  return null;
1639
- }, zt = (e) => new Promise((t) => {
1693
+ }, Bt = (e) => new Promise((t) => {
1640
1694
  let n = ["animationstart", "transitionrun"], r = () => {
1641
1695
  for (let e of n) document.removeEventListener(e, i, !0);
1642
1696
  a.disconnect(), t();
@@ -1650,41 +1704,41 @@ var Fe = (e) => e.map((e) => ({
1650
1704
  attributes: !0,
1651
1705
  attributeFilter: ["class", "style"]
1652
1706
  });
1653
- }), Bt = /* @__PURE__ */ new Set(), $ = null, Vt = (e) => {
1654
- Bt.add(e), !$ && ($ = new MutationObserver(() => {
1655
- for (let e of Bt) e.relabel();
1707
+ }), Vt = /* @__PURE__ */ new Set(), Ht = null, Ut = (e) => {
1708
+ Vt.add(e), !Ht && (Ht = new MutationObserver(() => {
1709
+ for (let e of Vt) e.relabel();
1656
1710
  requestAnimationFrame(() => requestAnimationFrame(() => {
1657
- for (let e of Bt) e.refresh();
1711
+ for (let e of Vt) e.refresh();
1658
1712
  }));
1659
- }), $.observe(document.documentElement, {
1713
+ }), Ht.observe(document.documentElement, {
1660
1714
  attributes: !0,
1661
1715
  attributeFilter: ["lang"]
1662
1716
  }));
1663
- }, Ht = (e) => {
1664
- Bt.delete(e), !(Bt.size || !$) && ($.disconnect(), $ = null);
1665
- }, Ut = ["column", "bar"], Wt = (e) => {
1717
+ }, Wt = (e) => {
1718
+ Vt.delete(e), !(Vt.size || !Ht) && (Ht.disconnect(), Ht = null);
1719
+ }, Gt = ["column", "bar"], Kt = (e) => {
1666
1720
  let t = e.getAttribute("data-chart") || "column";
1667
- if (!Ut.includes(t)) return null;
1721
+ if (!Gt.includes(t)) return null;
1668
1722
  let n = getComputedStyle(e).getPropertyValue("--tablechart-type").trim();
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 () => {
1723
+ return Gt.includes(n) ? n : t;
1724
+ }, qt = (e, t) => {
1725
+ let n = e, r = Kt(n.figure), i = null, a = !1, o = !1, s = async () => {
1672
1726
  if (!t.animate) return gt(n, !0);
1673
1727
  let e = n.figure.classList.contains("is-shown");
1674
1728
  if (a && i !== null && !e && !o) {
1675
1729
  o = !0;
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);
1730
+ let e = Ft() ? null : zt(n.figure);
1731
+ e && await Bt(e), await Rt(n.figure, Lt(n.figure, t)), o = !1, (a || !t.replay) && gt(n, !0);
1678
1732
  } else !a && t.replay && e && gt(n, !1);
1679
1733
  }, c = () => {
1680
- let e = Wt(n.figure);
1734
+ let e = Kt(n.figure);
1681
1735
  if (!e || e === r) return;
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);
1736
+ let a = Q.timed("Building", n.figure, () => lt(n.figure, t, e));
1737
+ a && (ht(n), $(a, n.step, !0), n = a, r = e, i = null);
1684
1738
  }, l = () => {
1685
1739
  c();
1686
1740
  let e = n.plot.clientWidth;
1687
- !e || e === i || Z.timed("Layout", n.figure, () => pt(n, t)) && (i = e, s());
1741
+ !e || e === i || Q.timed("Layout", n.figure, () => pt(n, t)) && (i = e, s());
1688
1742
  }, u = !1, d = new ResizeObserver(() => {
1689
1743
  u || (u = !0, requestAnimationFrame(() => {
1690
1744
  u = !1, l();
@@ -1697,13 +1751,13 @@ var Fe = (e) => e.map((e) => ({
1697
1751
  relabel: () => mt(n, t),
1698
1752
  refresh: m
1699
1753
  };
1700
- c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), Vt(h);
1754
+ c(), l(), d.observe(n.figure), f.observe(n.figure), window.addEventListener("beforeprint", p), Ut(h);
1701
1755
  let g = {
1702
1756
  figure: n.figure,
1703
1757
  refresh: m,
1704
- next: () => Q(n, n.step + 1),
1705
- previous: () => Q(n, n.step - 1),
1706
- stepTo: (e) => Q(n, e),
1758
+ next: () => $(n, n.step + 1),
1759
+ previous: () => $(n, n.step - 1),
1760
+ stepTo: (e) => $(n, e),
1707
1761
  get step() {
1708
1762
  return n.step;
1709
1763
  },
@@ -1711,33 +1765,33 @@ var Fe = (e) => e.map((e) => ({
1711
1765
  return n.plan?.count ?? 0;
1712
1766
  },
1713
1767
  destroy() {
1714
- d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), Ht(h), n.figure.tablechart === g && delete n.figure.tablechart;
1768
+ d.disconnect(), f.disconnect(), window.removeEventListener("beforeprint", p), Wt(h), n.figure.tablechart === g && delete n.figure.tablechart;
1715
1769
  }
1716
1770
  };
1717
1771
  return n.figure.tablechart = g, g;
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 = {}) => {
1772
+ }, Jt = async (e, t) => {
1773
+ let n = Dt(e.filter((e) => !e.hasAttribute(Pt)));
1774
+ return await At(n), Nt(n), qe(n, t.langattribute), n;
1775
+ }, Yt = (e, t) => {
1776
+ let n = Q.timed("Building", e, () => lt(e, t));
1777
+ return n ? (e.setAttribute(Pt, ""), qt(n, t)) : null;
1778
+ }, Xt = async (e, t = {}) => {
1725
1779
  if (e.tablechart) return e.tablechart;
1726
1780
  let n = {
1727
1781
  ...M,
1728
1782
  ...t
1729
1783
  };
1730
- n.debug && (Z.enabled = !0);
1731
- let [r] = await Kt([e], n);
1732
- return r ? qt(r, n) : null;
1733
- }, Yt = async (e = {}, t = document) => {
1784
+ n.debug && (Q.enabled = !0);
1785
+ let [r] = await Jt([e], n);
1786
+ return r ? Yt(r, n) : null;
1787
+ }, Zt = async (e = {}, t = document) => {
1734
1788
  let n = {
1735
1789
  ...M,
1736
1790
  ...e
1737
1791
  };
1738
- n.debug && (Z.enabled = !0);
1739
- let r = (await Kt(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => qt(e, n)).filter((e) => e !== null);
1740
- return Z.log(`Made ${r.length} chart(s).`), {
1792
+ n.debug && (Q.enabled = !0);
1793
+ let r = (await Jt(Array.from(t.querySelectorAll(n.selector)), n)).map((e) => Yt(e, n)).filter((e) => e !== null);
1794
+ return Q.log(`Made ${r.length} chart(s).`), {
1741
1795
  charts: r,
1742
1796
  refresh: () => {
1743
1797
  for (let e of r) e.refresh();
@@ -1748,4 +1802,4 @@ var Fe = (e) => e.map((e) => ({
1748
1802
  };
1749
1803
  };
1750
1804
  //#endregion
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 };
1805
+ export { k as _, Dt as a, lt as c, gt as d, ht as f, t as g, w as h, Jt as i, pt as l, qe as m, Lt as n, At as o, $ as p, Zt as r, Nt as s, Xt as t, mt as u, O as v, M as y };