@silurus/ooxml 0.18.2 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/pptx.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./autoResize-ggn4hzd8.cjs`),t=require(`./pptx-CUEsKfI-.cjs`);exports.PptxPresentation=t.r,exports.PptxViewer=t.n,exports.autoResize=e.t,exports.renderSlide=t.i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./autoResize-ggn4hzd8.cjs`),t=require(`./pptx-DzBUxMg2.cjs`);exports.PptxPresentation=t.r,exports.PptxViewer=t.n,exports.autoResize=e.t,exports.renderSlide=t.i;
package/dist/pptx.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  import { t as e } from "./autoResize-U2-IRmNE.js";
2
- import { i as t, n, r } from "./pptx-B9bdrXoy.js";
2
+ import { i as t, n, r } from "./pptx-BAkQtJJG.js";
3
3
  export { r as PptxPresentation, n as PptxViewer, e as autoResize, t as renderSlide };
@@ -275,17 +275,17 @@ function _(e, t, n, r, i, a, o, s, c, l, u, d) {
275
275
  break;
276
276
  }
277
277
  }
278
- function v(e, t, n, r, i) {
278
+ function v(e, t, n, r, i, a, o) {
279
279
  if (t === "none" || !t) return;
280
- let a = e.strokeStyle;
281
- if (e.strokeStyle = "#888", e.lineWidth = 1, e.beginPath(), n === "val") {
282
- let n = r, a = i, o = t === "out" || t === "cross" ? -4 : 0, s = t === "in" || t === "cross" ? 4 : 0;
283
- e.moveTo(n + o, a), e.lineTo(n + s, a);
280
+ let s = o ? Math.max(4, o + 2) : 4, c = e.strokeStyle, l = e.lineWidth;
281
+ if (e.strokeStyle = a ?? "#888", e.lineWidth = o ?? 1, e.beginPath(), n === "val") {
282
+ let n = r, a = i, o = t === "out" || t === "cross" ? -s : 0, c = t === "in" || t === "cross" ? s : 0;
283
+ e.moveTo(n + o, a), e.lineTo(n + c, a);
284
284
  } else {
285
- let n = r, a = i, o = t === "out" || t === "cross" ? 4 : 0, s = t === "in" || t === "cross" ? -4 : 0;
286
- e.moveTo(a, n + o), e.lineTo(a, n + s);
285
+ let n = r, a = i, o = t === "out" || t === "cross" ? s : 0, c = t === "in" || t === "cross" ? -s : 0;
286
+ e.moveTo(a, n + o), e.lineTo(a, n + c);
287
287
  }
288
- e.stroke(), e.strokeStyle = a;
288
+ e.stroke(), e.strokeStyle = c, e.lineWidth = l;
289
289
  }
290
290
  function y(e, t, n) {
291
291
  return e.titleFontSizeHpt ? e.titleFontSizeHpt / 100 * n : Math.max(10, t * .085);
@@ -610,76 +610,91 @@ function O(e, n, o, c) {
610
610
  _(e, n, T, l, u, d, f, M - A / 2, N - j / 2, A, j, w + 2);
611
611
  }
612
612
  function k(e, n, r, a) {
613
- let { x: o, y: s, w: l, h: u } = r, d = n.title ? y(n, u, a) : 0, f = n.title ? u * .035 : 0, p = n.title ? u * .035 : 0, h = n.title ? d + f + p : 0, v = g(n, l, u), b = v?.side === "r" ? v.reserveW : 0, S = v?.side === "l" ? v.reserveW : 0, C = v?.side === "t" ? v.reserveH : 0, w = v?.side === "b" ? v.reserveH : 0, T = Math.max(8, Math.min(10, u * .045)), E = n.catAxisTitle ? T + 4 : 0, D = n.valAxisTitle ? T + 4 : 0;
613
+ let { x: o, y: s, w: l, h: u } = r, d = n.title ? y(n, u, a) : 0, f = n.title ? u * .035 : 0, p = n.title ? u * .035 : 0, h = n.title ? d + f + p : 0, b = g(n, l, u), S = b?.side === "r" ? b.reserveW : 0, C = b?.side === "l" ? b.reserveW : 0, w = b?.side === "t" ? b.reserveH : 0, T = b?.side === "b" ? b.reserveH : 0, E = Math.max(8, Math.min(10, u * .045)), D = n.catAxisTitle ? E + 4 : 0, O = n.valAxisTitle ? E + 4 : 0;
614
614
  if (n.title) {
615
615
  let t = n.titleManualLayout;
616
616
  t && (t.x !== void 0 || t.y !== void 0) ? x(e, n, o + t.x * l, s + t.y * u, (t.w ?? .5) * l, d) : x(e, n, o, s + f, l, d);
617
617
  }
618
- let O = n.plotAreaManualLayout, k, N, P, F;
619
- if (O && O.w != null && O.h != null) k = o + O.x * l, N = s + O.y * u, P = O.w * l, F = O.h * u;
618
+ let k = n.plotAreaManualLayout, N, F, I, L;
619
+ if (k && k.w != null && k.h != null) N = o + k.x * l, F = s + k.y * u, I = k.w * l, L = k.h * u;
620
620
  else {
621
621
  let e = {
622
- t: h + C + u * .02,
623
- r: b + l * .05,
624
- b: (n.catAxisHidden ? u * .04 : u * .12) + E + w,
625
- l: (n.valAxisHidden ? l * .04 : l * .12) + D + S
622
+ t: h + w + u * .02,
623
+ r: S + l * .05,
624
+ b: (n.catAxisHidden ? u * .04 : u * .12) + D + T,
625
+ l: (n.valAxisHidden ? l * .04 : l * .12) + O + C
626
626
  };
627
- k = o + e.l, N = s + e.t, P = l - e.l - e.r, F = u - e.t - e.b;
627
+ N = o + e.l, F = s + e.t, I = l - e.l - e.r, L = u - e.t - e.b;
628
628
  }
629
- if (P <= 0 || F <= 0) return;
630
- n.plotAreaBg && (e.fillStyle = `#${n.plotAreaBg}`, e.fillRect(k, N, P, F));
631
- let I = [], L = [];
629
+ if (I <= 0 || L <= 0) return;
630
+ n.plotAreaBg && (e.fillStyle = `#${n.plotAreaBg}`, e.fillRect(N, F, I, L));
631
+ let R = [], z = [];
632
632
  for (let e of n.series) {
633
633
  let t = e.categories ?? [];
634
634
  for (let e of t) {
635
635
  let t = parseFloat(e);
636
- isNaN(t) || I.push(t);
636
+ isNaN(t) || R.push(t);
637
637
  }
638
- for (let t of e.values) t != null && L.push(t);
638
+ for (let t of e.values) t != null && z.push(t);
639
639
  }
640
- let R = I.length === 0;
641
- if (R) {
640
+ let B = R.length === 0;
641
+ if (B) {
642
642
  let e = Math.max(...n.series.map((e) => e.values.length));
643
- for (let t = 0; t < e; t++) I.push(t);
643
+ for (let t = 0; t < e; t++) R.push(t);
644
644
  }
645
- let z = Math.min(...I), B = Math.max(...I), V = Math.min(...L), H = Math.max(...L);
646
- z === B && (--z, B += 1), V === H && (--V, H += 1), n.valMin == null ? V > 0 && (V = 0) : V = n.valMin, n.valMax != null && (H = n.valMax), n.catAxisMin != null && (z = n.catAxisMin), n.catAxisMax != null && (B = n.catAxisMax);
647
- let U = (e) => k + (e - z) / (B - z) * P, W = (e) => N + F - (e - V) / (H - V) * F;
645
+ let V = Math.min(...R), H = Math.max(...R), U = Math.min(...z), W = Math.max(...z);
646
+ if (V === H && (--V, H += 1), U === W && (--U, W += 1), n.valMin == null ? U > 0 && (U = 0) : U = n.valMin, n.valMax != null && (W = n.valMax), n.catAxisMin != null && (V = n.catAxisMin), n.catAxisMax != null && (H = n.catAxisMax), n.catAxisMin == null || n.catAxisMax == null) {
647
+ let e = i(H - V);
648
+ e > 0 && (n.catAxisMin ?? (V = Math.floor(V / e) * e), n.catAxisMax ?? (H = Math.ceil(H / e) * e));
649
+ }
650
+ let G = (e) => N + (e - V) / (H - V) * I, K = (e) => F + L - (e - U) / (W - U) * L;
648
651
  if (!n.valAxisHidden) {
649
- e.font = `${Math.max(8, Math.min(11, F / 20))}px sans-serif`;
650
- let t = i(H - V), r = Math.round((H - V) / t) + 1;
651
- for (let i = 0; i < r; i++) {
652
- let r = V + i * t;
653
- if (r > H + t * .01) break;
654
- let a = W(r);
655
- e.strokeStyle = "#e0e0e0", e.lineWidth = .5, e.beginPath(), e.moveTo(k, a), e.lineTo(k + P, a), e.stroke(), e.fillStyle = "#555", e.textAlign = "right", e.textBaseline = "middle", e.fillText(c(r, n.valAxisFormatCode), k - 4, a);
656
- }
657
- }
658
- if (e.strokeStyle = "#888", e.lineWidth = 1, e.beginPath(), e.moveTo(k, N + F), e.lineTo(k + P, N + F), e.stroke(), n.valAxisHidden || (e.beginPath(), e.moveTo(k, N), e.lineTo(k, N + F), e.stroke()), !n.catAxisHidden) {
659
- e.font = `${Math.max(8, Math.min(11, F / 20))}px sans-serif`;
660
- let t = i(B - z), r = Math.round((B - z) / t) + 1;
652
+ let t = Math.max(8, Math.min(11, L / 20));
653
+ e.font = `${n.valAxisFontBold ? "bold " : ""}${t}px sans-serif`;
654
+ let r = i(W - U), a = Math.round((W - U) / r) + 1;
655
+ for (let t = 0; t < a; t++) {
656
+ let i = U + t * r;
657
+ if (i > W + r * .01) break;
658
+ let a = K(i);
659
+ e.strokeStyle = "#e0e0e0", e.lineWidth = .5, e.beginPath(), e.moveTo(N, a), e.lineTo(N + I, a), e.stroke(), e.fillStyle = "#555", e.textAlign = "right", e.textBaseline = "middle", e.fillText(c(i, n.valAxisFormatCode), N - 4, a);
660
+ let o = n.valAxisLineColor ? `#${n.valAxisLineColor}` : void 0, s = n.valAxisLineWidthEmu ? Math.max(.5, n.valAxisLineWidthEmu / 12700) : void 0;
661
+ v(e, n.valAxisMajorTickMark, "val", N, a, o, s);
662
+ }
663
+ }
664
+ let q = F + L;
665
+ if (n.catAxisCrossesAt != null) q = P(K(n.catAxisCrossesAt), F, F + L);
666
+ else {
667
+ let e = n.catAxisCrosses ?? "autoZero";
668
+ e === "autoZero" && U < 0 && W > 0 ? q = P(K(0), F, F + L) : e === "min" ? q = F + L : e === "max" && (q = F);
669
+ }
670
+ if (e.save(), e.strokeStyle = n.catAxisLineColor ? `#${n.catAxisLineColor}` : "#888", e.lineWidth = n.catAxisLineWidthEmu ? Math.max(.5, n.catAxisLineWidthEmu / 12700) : 1, e.lineCap = "butt", e.beginPath(), e.moveTo(N, q), e.lineTo(N + I, q), e.stroke(), e.restore(), n.valAxisHidden || (e.save(), e.strokeStyle = n.valAxisLineColor ? `#${n.valAxisLineColor}` : "#888", e.lineWidth = n.valAxisLineWidthEmu ? Math.max(.5, n.valAxisLineWidthEmu / 12700) : 1, e.beginPath(), e.moveTo(N, F), e.lineTo(N, F + L), e.stroke(), e.restore()), !n.catAxisHidden) {
671
+ let t = Math.max(8, Math.min(11, L / 20));
672
+ e.font = `${n.catAxisFontBold ? "bold " : ""}${t}px sans-serif`;
673
+ let r = i(H - V), a = Math.round((H - V) / r) + 1;
661
674
  e.fillStyle = "#555", e.textAlign = "center", e.textBaseline = "top";
662
- for (let i = 0; i < r; i++) {
663
- let r = z + i * t;
664
- if (r > B + t * .01) break;
665
- let a = U(r);
666
- e.fillText(c(r, n.catAxisFormatCode), a, N + F + 4);
675
+ for (let t = 0; t < a; t++) {
676
+ let i = V + t * r;
677
+ if (i > H + r * .01) break;
678
+ let a = G(i);
679
+ e.fillText(c(i, n.catAxisFormatCode), a, q + 4);
680
+ let o = n.catAxisLineColor ? `#${n.catAxisLineColor}` : void 0, s = n.catAxisLineWidthEmu ? Math.max(.5, n.catAxisLineWidthEmu / 12700) : void 0;
681
+ v(e, n.catAxisMajorTickMark, "cat", q, a, o, s);
667
682
  }
668
683
  }
669
684
  for (let r = 0; r < n.series.length; r++) {
670
685
  let i = n.series[r], o = t(r, i), s = i.categories ?? [];
671
- for (let t of i.errBars ?? []) j(e, i, t, s, R, U, W, o);
686
+ for (let t of i.errBars ?? []) j(e, i, t, s, B, G, K, o);
672
687
  if (!(i.showMarker === !1 || typeof i.markerSymbol == "string" && i.markerSymbol === "none")) for (let t = 0; t < i.values.length; t++) {
673
688
  let n = i.values[t];
674
689
  if (n == null) continue;
675
- let r = R ? t : parseFloat(s[t] ?? "0");
690
+ let r = B ? t : parseFloat(s[t] ?? "0");
676
691
  if (isNaN(r)) continue;
677
692
  let c = (i.dataPointOverrides ?? []).find((e) => e.idx === t), l = c?.markerSymbol ?? i.markerSymbol ?? "circle", u = c?.markerSize ?? i.markerSize ?? 5, d = c?.markerFill ?? c?.color ?? i.markerFill ?? o, f = c?.markerLine ?? i.markerLine ?? null;
678
- A(e, U(r), W(n), l, u, d, f, a);
693
+ A(e, G(r), K(n), l, u, d, f, a);
679
694
  }
680
- M(e, i, s, R, U, W, F, a);
695
+ M(e, i, s, B, G, K, L, a);
681
696
  }
682
- _(e, n, v, o, s, l, u, k, N, P, F, h + 2), n.catAxisTitle && m(e, n.catAxisTitle, k, N, P, F, "cat", T), n.valAxisTitle && m(e, n.valAxisTitle, k, N, P, F, "val", T);
697
+ _(e, n, b, o, s, l, u, N, F, I, L, h + 2), n.catAxisTitle && m(e, n.catAxisTitle, N, F, I, L, "cat", E), n.valAxisTitle && m(e, n.valAxisTitle, N, F, I, L, "val", E);
683
698
  }
684
699
  function A(e, t, n, r, i, a, o, s) {
685
700
  let c = Math.max(2, i * s), l = c / 2;
@@ -722,7 +737,7 @@ function A(e, t, n, r, i, a, o, s) {
722
737
  e.restore();
723
738
  }
724
739
  function j(e, t, n, r, i, a, o, s) {
725
- e.save(), e.strokeStyle = n.color ? `#${n.color}` : s, e.lineWidth = n.lineWidthEmu ? Math.max(.5, n.lineWidthEmu / 12700) : 1, e.setLineDash(P(n.dash));
740
+ e.save(), e.strokeStyle = n.color ? `#${n.color}` : s, e.lineWidth = n.lineWidthEmu ? Math.max(.5, n.lineWidthEmu / 12700) : 1, e.setLineDash(F(n.dash));
726
741
  let c = n.barType === "plus" || n.barType === "both", l = n.barType === "minus" || n.barType === "both", u = n.dir === "x", d = e.lineWidth * 1.5;
727
742
  for (let s = 0; s < t.values.length; s++) {
728
743
  let f = t.values[s];
@@ -761,39 +776,42 @@ function M(e, t, n, r, i, a, o, s) {
761
776
  let e = [];
762
777
  if (u.showCatName && !r && e.push(n[d] ?? ""), u.showSerName && e.push(t.name), u.showVal && e.push(c(f, u.formatCode ?? null)), h = e.filter(Boolean).join(" "), !h) continue;
763
778
  } else continue;
764
- let g = m?.position ?? u?.position ?? "r", _ = m?.fontSizeHpt ? m.fontSizeHpt / 100 * s : Math.max(9, Math.min(11, o / 25)), v = m?.fontColor ?? u?.fontColor;
765
- N(e, i(p), a(f), h, g, _, v);
779
+ let g = m?.position ?? u?.position ?? "r", _ = m?.fontSizeHpt ?? u?.fontSizeHpt, v = _ ? _ / 100 * s : Math.max(9, Math.min(11, o / 25)), y = m?.fontColor ?? u?.fontColor, b = m?.fontBold ?? u?.fontBold ?? !1;
780
+ N(e, i(p), a(f), h, g, v, y, b);
766
781
  }
767
782
  }
768
- function N(e, t, n, r, i, a, o) {
769
- e.save(), e.font = `${a}px sans-serif`, e.fillStyle = o ? `#${o}` : "#333";
770
- let s = a * .6, c = t, l = n;
783
+ function N(e, t, n, r, i, a, o, s) {
784
+ e.save(), e.font = `${s ? "bold " : ""}${a}px sans-serif`, e.fillStyle = o ? `#${o}` : "#333";
785
+ let c = a * .6, l = t, u = n;
771
786
  switch (i) {
772
787
  case "l":
773
- e.textAlign = "right", e.textBaseline = "middle", c = t - s;
788
+ e.textAlign = "right", e.textBaseline = "middle", l = t - c;
774
789
  break;
775
790
  case "r":
776
- e.textAlign = "left", e.textBaseline = "middle", c = t + s;
791
+ e.textAlign = "left", e.textBaseline = "middle", l = t + c;
777
792
  break;
778
793
  case "t":
779
- e.textAlign = "center", e.textBaseline = "bottom", l = n - s;
794
+ e.textAlign = "center", e.textBaseline = "bottom", u = n - c;
780
795
  break;
781
796
  case "b":
782
- e.textAlign = "center", e.textBaseline = "top", l = n + s;
797
+ e.textAlign = "center", e.textBaseline = "top", u = n + c;
783
798
  break;
784
799
  case "ctr":
785
800
  e.textAlign = "center", e.textBaseline = "middle";
786
801
  break;
787
802
  default:
788
- e.textAlign = "left", e.textBaseline = "middle", c = t + s;
803
+ e.textAlign = "left", e.textBaseline = "middle", l = t + c;
789
804
  break;
790
805
  }
791
- let u = r.split(/\r?\n/), d = a * 1.15, f = d * u.length, p = l;
792
- e.textBaseline === "middle" ? p = l - (f - d) / 2 : e.textBaseline === "bottom" && (p = l - (f - d));
793
- for (let t of u) e.fillText(t, c, p), p += d;
806
+ let d = r.split(/\r?\n/), f = a * 1.15, p = f * d.length, m = u;
807
+ e.textBaseline === "middle" ? m = u - (p - f) / 2 : e.textBaseline === "bottom" && (m = u - (p - f));
808
+ for (let t of d) e.fillText(t, l, m), m += f;
794
809
  e.restore();
795
810
  }
796
- function P(e) {
811
+ function P(e, t, n) {
812
+ return e < t ? t : e > n ? n : e;
813
+ }
814
+ function F(e) {
797
815
  if (!e) return [];
798
816
  switch (e) {
799
817
  case "solid": return [];
@@ -828,7 +846,7 @@ function P(e) {
828
846
  default: return [];
829
847
  }
830
848
  }
831
- function F(e, t, n) {
849
+ function I(e, t, n) {
832
850
  let { x: r, y: a, w: o, h: s } = n, c = o * .11, l = o * .04, u = s * .08, d = s * .18, f = r + c, p = a + u, m = o - c - l, h = s - u - d, g = t.series[0]?.values ?? [], _ = t.categories, v = _.length;
833
851
  if (v === 0) return;
834
852
  let y = new Set(t.subtotalIndices), b = 0, x = [];
@@ -878,7 +896,7 @@ function F(e, t, n) {
878
896
  }
879
897
  e.restore();
880
898
  }
881
- function I(e, t, n, r = 1.333) {
899
+ function L(e, t, n, r = 1.333) {
882
900
  let { x: i, y: a, w: o, h: s } = n;
883
901
  if (t.chartBg && (e.fillStyle = `#${t.chartBg}`, e.fillRect(i, a, o, s)), t.series.length === 0) {
884
902
  e.fillStyle = "#888", e.font = "12px sans-serif", e.textAlign = "center", e.textBaseline = "middle", e.fillText("(no data)", i + o / 2, a + s / 2);
@@ -917,10 +935,10 @@ function I(e, t, n, r = 1.333) {
917
935
  k(e, t, n, r);
918
936
  break;
919
937
  case "waterfall":
920
- F(e, t, n);
938
+ I(e, t, n);
921
939
  break;
922
940
  default: e.fillStyle = "#888", e.font = "11px sans-serif", e.textAlign = "center", e.textBaseline = "middle", e.fillText(`Chart: ${t.chartType}`, i + o / 2, a + s / 2);
923
941
  }
924
942
  }
925
943
  //#endregion
926
- export { I as t };
944
+ export { L as t };
@@ -0,0 +1 @@
1
+ var e=[`4472C4`,`ED7D31`,`A9D18E`,`FF0000`,`70AD47`,`4BACC6`,`FFC000`,`9E480E`,`843C0C`,`636363`,`255E91`,`967300`];function t(t,n){return n?.color?`#${n.color}`:`#${e[t%e.length]}`}function n(t,n){let r=n.dataPointColors?.[t];return r?`#${r}`:`#${e[t%e.length]}`}function r(e,t){let n=e.startsWith(`#`)?e.slice(1):e;return`rgba(${parseInt(n.slice(0,2),16)},${parseInt(n.slice(2,4),16)},${parseInt(n.slice(4,6),16)},${t})`}function i(e,t=5){if(e===0)return 1;let n=e/t,r=10**Math.floor(Math.log10(n)),i=n/r;return(i<1.5?1:i<3.5?2:i<7.5?5:10)*r}function a(e,t){if(e<=0)return t;let n=Math.ceil(e/t)*t;return Math.abs(n-e)<t*1e-9?n+t:n}function o(e,t){if(e>=0)return 0;let n=Math.floor(e/t)*t;return Math.abs(n-e)<t*1e-9?n-t:n}function s(e){return Number.isInteger(e)?String(e):e.toFixed(6).replace(/\.?0+$/,``)}function c(e,t){if(!t)return s(e);if(l(t))return u(e,t);let n=d(t),r;return r=e>0?n[0]??t:e<0?n[1]??n[0]??t:n[2]??n[0]??t,r===``?``:(e<0&&n.length<2?`-`:``)+f(Math.abs(e),r)}function l(e){let t=!1;for(let n=0;n<e.length;n++){let r=e[n];if(r===`"`){t=!t;continue}if(!t){if(r===`\\`){n++;continue}if(r===`[`){for(;n<e.length&&e[n]!==`]`;)n++;continue}if(r===`y`||r===`Y`||r===`d`||r===`D`||r===`m`||r===`M`||r===`h`||r===`H`||r===`s`||r===`S`)return!0}}return!1}function u(e,t){let n=Date.UTC(1899,11,30),r=e<60?e+1:e,i=n+Math.floor(r)*864e5,a=new Date(i),o=a.getUTCFullYear(),s=a.getUTCMonth()+1,c=a.getUTCDate(),l=(e-Math.floor(e))*86400,u=Math.floor(l/3600),d=Math.floor(l%3600/60),f=Math.floor(l%60),p=``,m=!1,h=0;for(;h<t.length;){let e=t[h];if(e===`"`){m=!m,h++;continue}if(m){p+=e,h++;continue}if(e===`\\`&&h+1<t.length){p+=t[h+1],h+=2;continue}if(e===`[`){for(;h<t.length&&t[h]!==`]`;)h++;h<t.length&&h++;continue}if(e===`y`||e===`Y`){let e=0;for(;h<t.length&&(t[h]===`y`||t[h]===`Y`);)e++,h++;p+=e>=3?String(o):String(o%100).padStart(2,`0`);continue}if(e===`m`||e===`M`){let e=0;for(;h<t.length&&(t[h]===`m`||t[h]===`M`);)e++,h++;p.match(/[Hh]+\W*$/)?p+=e>=2?String(d).padStart(2,`0`):String(d):p+=e>=2?String(s).padStart(2,`0`):String(s);continue}if(e===`d`||e===`D`){let e=0;for(;h<t.length&&(t[h]===`d`||t[h]===`D`);)e++,h++;p+=e>=2?String(c).padStart(2,`0`):String(c);continue}if(e===`h`||e===`H`){let e=0;for(;h<t.length&&(t[h]===`h`||t[h]===`H`);)e++,h++;p+=e>=2?String(u).padStart(2,`0`):String(u);continue}if(e===`s`||e===`S`){let e=0;for(;h<t.length&&(t[h]===`s`||t[h]===`S`);)e++,h++;p+=e>=2?String(f).padStart(2,`0`):String(f);continue}p+=e,h++}return p}function d(e){let t=[],n=``;for(let r=0;r<e.length;r++){let i=e[r];if(i===`\\`&&r+1<e.length){n+=i+e[r+1],r++;continue}if(i===`"`){for(n+=i,r++;r<e.length&&e[r]!==`"`;)n+=e[r],r++;r<e.length&&(n+=e[r]);continue}if(i===`[`){for(n+=i,r++;r<e.length&&e[r]!==`]`;)n+=e[r],r++;r<e.length&&(n+=e[r]);continue}if(i===`;`){t.push(n),n=``;continue}n+=i}return t.push(n),t}function f(e,t){let n=[],r=0,i=!1,a=!1;for(;r<t.length;){let e=t[r];if(e===`"`){r++;let e=``;for(;r<t.length&&t[r]!==`"`;)e+=t[r],r++;r<t.length&&r++,n.push({kind:`lit`,text:e});continue}if(e===`\\`&&r+1<t.length){n.push({kind:`lit`,text:t[r+1]}),r+=2;continue}if(e===`_`&&r+1<t.length){n.push({kind:`lit`,text:` `}),r+=2;continue}if(e===`*`&&r+1<t.length){r+=2;continue}if(e===`[`){for(r++;r<t.length&&t[r]!==`]`;)r++;r<t.length&&r++;continue}if(e===`%`){a=!0,n.push({kind:`lit`,text:`%`}),r++;continue}if(e===`#`||e===`0`||e===`.`||e===`,`||e===`?`){let e=``;for(;r<t.length&&(t[r]===`#`||t[r]===`0`||t[r]===`.`||t[r]===`,`||t[r]===`?`);)e+=t[r],r++;n.push({kind:`num`,text:e}),i=!0;continue}n.push({kind:`lit`,text:e}),r++}if(!i)return n.map(e=>e.text).join(``);let o=a?e*100:e,s=``;for(let e of n)e.kind===`num`&&(s+=e.text);let c=p(o,s),l=!1;return n.map(e=>e.kind===`lit`?e.text:l?``:(l=!0,c)).join(``)}function p(e,t){let n=t.indexOf(`.`),r=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n+1):``,a=/,/.test(r),o=(i.match(/[#0?]/g)??[]).length,s=(r.replace(/,/g,``).match(/0/g)??[]).length,[c,l=``]=e.toFixed(o).split(`.`),u=c.padStart(s,`0`),d=a?u.replace(/\B(?=(\d{3})+(?!\d))/g,`,`):u;return o===0?d:`${d}.${l.padEnd(o,`0`)}`}function m(e,t,n,r,i,a,o,s){e.save(),e.font=`${s}px sans-serif`,e.fillStyle=`#555`,o===`cat`?(e.textAlign=`center`,e.textBaseline=`bottom`,e.fillText(t.slice(0,30),n+i/2,r+a+s+2)):(e.translate(n-s-4,r+a/2),e.rotate(-Math.PI/2),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(t.slice(0,30),0,0)),e.restore()}function h(e,n,r,i,a,o,s=`vertical`){if(s===`horizontal`){let s=Math.max(9,Math.min(12,o*.7));e.font=`${s}px sans-serif`,e.textBaseline=`middle`;let c=n.map((e,t)=>e.name||`Series ${t+1}`),l=c.map(t=>14+e.measureText(t.slice(0,30)).width),u=r+(a-(l.reduce((e,t)=>e+t,0)+12*Math.max(0,n.length-1)))/2,d=i+o/2;for(let r=0;r<n.length;r++)e.fillStyle=t(r,n[r]),e.fillRect(u,d-s/2,10,s),e.fillStyle=`#333`,e.textAlign=`left`,e.fillText(c[r].slice(0,30),u+10+4,d),u+=l[r]+12;return}let c=Math.max(9,Math.min(12,o/(n.length+1)));e.font=`${c}px sans-serif`,e.textBaseline=`middle`;let l=c+4,u=i+(o-l*n.length)/2;for(let i=0;i<n.length;i++){e.fillStyle=t(i,n[i]),e.fillRect(r,u,10,c),e.fillStyle=`#333`,e.textAlign=`left`;let a=n[i].name||`Series ${i+1}`;e.fillText(a.slice(0,20),r+10+4,u+c/2),u+=l}}function g(e,t,n){if(!e.showLegend)return null;let r=e.legendPos??`r`,i=r===`l`?`l`:r===`t`?`t`:r===`b`?`b`:`r`;return i===`r`||i===`l`?{side:i,reserveW:Math.max(80,t*.22),reserveH:0}:{side:i,reserveW:0,reserveH:Math.max(18,n*.08)}}function _(e,t,n,r,i,a,o,s,c,l,u,d){if(!n)return;let f=t.legendManualLayout;if(f&&f.xMode===`edge`&&f.yMode===`edge`&&f.w>0&&f.h>0){let n=r+f.x*a,s=i+f.y*o,c=f.w*a,l=f.h*o,u=c>=l?`horizontal`:`vertical`;h(e,t.series,n,s,c,l,u);return}switch(n.side){case`r`:h(e,t.series,r+a-n.reserveW+4,c,n.reserveW-8,u);break;case`l`:h(e,t.series,r+4,c,n.reserveW-8,u);break;case`t`:h(e,t.series,s,i+d,l,n.reserveH,`horizontal`);break;case`b`:h(e,t.series,s,i+o-n.reserveH,l,n.reserveH,`horizontal`);break}}function v(e,t,n,r,i,a,o){if(t===`none`||!t)return;let s=o?Math.max(4,o+2):4,c=e.strokeStyle,l=e.lineWidth;if(e.strokeStyle=a??`#888`,e.lineWidth=o??1,e.beginPath(),n===`val`){let n=r,a=i,o=t===`out`||t===`cross`?-s:0,c=t===`in`||t===`cross`?s:0;e.moveTo(n+o,a),e.lineTo(n+c,a)}else{let n=r,a=i,o=t===`out`||t===`cross`?s:0,c=t===`in`||t===`cross`?-s:0;e.moveTo(a,n+o),e.lineTo(a,n+c)}e.stroke(),e.strokeStyle=c,e.lineWidth=l}function y(e,t,n){return e.titleFontSizeHpt?e.titleFontSizeHpt/100*n:Math.max(10,t*.085)}function b(e,t,n){return e?e/100*n:Math.max(8,t*.045)}function x(e,t,n,r,i,a){t.title&&(e.font=`bold ${a}px ${t.titleFontFace?`"${t.titleFontFace}", Calibri, Arial, sans-serif`:`Calibri, Arial, sans-serif`}`,e.fillStyle=t.titleFontColor?`#${t.titleFontColor}`:`#333`,e.textAlign=`center`,e.textBaseline=`top`,e.fillText(t.title,n+i/2,r))}function S(e){if(e.categories.length>0)return e.categories;let t=e.series[0];if(t?.categories&&t.categories.length>0)return t.categories;let n=0;for(let t of e.series)t.values.length>n&&(n=t.values.length);return n>0?Array.from({length:n},(e,t)=>String(t+1)):[]}function C(e,t,n,r,i,a,o,s,c){let l=s??`outEnd`;if(e.fillStyle=c?`#${c}`:`#333`,o===`vertical`){let o=n+a/2;l===`inBase`?(e.textAlign=`center`,e.textBaseline=`bottom`,e.fillText(t,o,r+i-2)):l===`inEnd`?(e.textAlign=`center`,e.textBaseline=`top`,e.fillText(t,o,r+2)):l===`ctr`?(e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(t,o,r+i/2)):(e.textAlign=`center`,e.textBaseline=`bottom`,e.fillText(t,o,r-1))}else{let o=r+a/2;l===`inBase`?(e.textAlign=`left`,e.textBaseline=`middle`,e.fillText(t,n+4,o)):l===`inEnd`?(e.textAlign=`right`,e.textBaseline=`middle`,e.fillText(t,n+i-4,o)):l===`ctr`?(e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(t,n+i/2,o)):(e.textAlign=`left`,e.textBaseline=`middle`,e.fillText(t,n+i+2,o))}}function w(e,n,r,o){let{x:s,y:l,w:u,h:d}=r,f=n.chartType===`clusteredBarH`||n.chartType===`stackedBarH`||n.chartType===`stackedBarHPct`,p=n.chartType.startsWith(`stacked`),h=n.chartType===`stackedBarPct`||n.chartType===`stackedBarHPct`,v=n.series.filter(e=>e.seriesType!==`line`),b=n.series.filter(e=>e.seriesType===`line`),w=S(n),T=w.length;if(T===0)return;let E=n.title?y(n,d,o):0,D=n.title?d*.02:0,O=n.title?d*.025:0,k=n.title?E+D+O:0,A=g(n,u,d),j=A?.side===`r`?A.reserveW:0,M=A?.side===`l`?A.reserveW:0,N=A?.side===`t`?A.reserveH:0,P=A?.side===`b`?A.reserveH:0,F=Math.max(8,Math.min(10,d*.045)),I=n.catAxisTitle?F+4:0,L=n.valAxisTitle?F+4:0,R={t:k+N+d*.02,r:j+u*.03,b:d*.14+I+P,l:u*.12+L+M};f&&(R.l=(n.catAxisHidden?u*.03:u*.22)+L+M,R.b=(n.valAxisHidden?d*.02:d*.08)+I+P),x(e,n,s,l+D,u,E);let z=s+R.l,B=l+R.t,V=u-R.l-R.r,H=d-R.t-R.b;if(V<=0||H<=0)return;n.plotAreaBg&&(e.fillStyle=`#${n.plotAreaBg}`,e.fillRect(z,B,V,H));let U=0;for(let e=0;e<T;e++){let t=0;for(let n of v){let r=n.values[e]??0;p?t+=Math.abs(r):U=Math.max(U,Math.abs(r))}p&&(U=Math.max(U,t))}h&&(U=100),n.valMax!=null&&(U=n.valMax),U===0&&(U=1);let W=i(U),G=n.valMax??a(U,W),K=`#e0e0e0`,q=Math.round(G/W);if(e.textBaseline=`middle`,e.font=`${Math.max(8,Math.min(11,H/20))}px sans-serif`,e.fillStyle=`#555`,!n.valAxisHidden)for(let t=0;t<=q;t++){let r=t*W,i=h?`${Math.round(r)}%`:c(r,n.valAxisFormatCode);if(f){let n=z+r/G*V;e.strokeStyle=t===0?`#aaa`:K,e.lineWidth=t===0?1:.5,e.beginPath(),e.moveTo(n,B),e.lineTo(n,B+H),e.stroke(),e.textAlign=`center`,e.fillText(i,n,B+H+10)}else{let n=B+H-r/G*H;e.strokeStyle=t===0?`#aaa`:K,e.lineWidth=t===0?1:.5,e.beginPath(),e.moveTo(z,n),e.lineTo(z+V,n),e.stroke(),e.textAlign=`right`,e.fillText(i,z-4,n)}}e.strokeStyle=`#aaa`,e.lineWidth=1,f?(e.beginPath(),e.moveTo(z,B),e.lineTo(z,B+H),e.stroke()):(e.beginPath(),e.moveTo(z,B+H),e.lineTo(z+V,B+H),e.stroke());let J=f?H/T:V/T,Y=p?1:Math.max(1,v.length),X=p?0:n.barOverlap??0,ee=n.barGapWidth??150,Z=J/(1+(Y-1)*(1-X/100)+ee/100),Q=p?0:Z*(1-X/100),$=(J-(Z+(Y-1)*Q))/2;for(let r=0;r<T;r++){let i=0,a=0;if(h){for(let e of v)a+=Math.abs(e.values[r]??0);a===0&&(a=1)}for(let o=0;o<v.length;o++){let s=v[o],l=s.values[r]??0,u=h?Math.abs(l)/a*100:Math.abs(l),d=t(o,s);if(f){let t=p?o:v.length-1-o,a=p?B+(T-1-r)*J+$:B+(T-1-r)*J+$+t*Q,l=u/G*V,f=p?z+i/G*V:z;e.fillStyle=d,e.fillRect(f,a,l,Z),n.showDataLabels&&u>0&&(e.font=`bold ${Math.max(7,Math.min(11,Z*.6))}px sans-serif`,C(e,h?`${Math.round(u)}%`:c(u,n.dataLabelFormatCode??s.valFormatCode??null),f,a,l,Z,`horizontal`,n.dataLabelPosition??null,n.dataLabelFontColor??null))}else{let t=p?z+r*J+$:z+r*J+$+o*Q,a=u/G*H,l=B+H-(p?i+u:u)/G*H;e.fillStyle=d,e.fillRect(t,l,Z,a),n.showDataLabels&&u>0&&(e.font=`bold ${Math.max(7,Math.min(11,Z*.6))}px sans-serif`,C(e,h?`${Math.round(u)}%`:c(u,n.dataLabelFormatCode??s.valFormatCode??null),t,l,Z,a,`vertical`,n.dataLabelPosition??null,n.dataLabelFontColor??null))}p&&(i+=u)}}if(!n.catAxisHidden){e.fillStyle=`#555`,e.font=`${Math.max(8,Math.min(11,J*.5))}px sans-serif`;for(let t=0;t<T;t++){let n=(w[t]??``).toString().slice(0,12);if(f){let r=B+(T-1-t)*J+J/2;e.textAlign=`right`,e.textBaseline=`middle`,e.fillText(n,z-4,r)}else{let r=z+t*J+J/2;e.textAlign=`center`,e.textBaseline=`top`,e.fillText(n,r,B+H+3)}}}if(b.length>0&&!f)for(let n=0;n<b.length;n++){let r=b[n],i=t(v.length+n,r);e.strokeStyle=i,e.lineWidth=2,e.setLineDash([]),e.beginPath();let a=!1;for(let t=0;t<T;t++){let n=r.values[t];if(n==null){a=!1;continue}let i=z+t*J+J/2,o=B+H-n/G*H;a?e.lineTo(i,o):(e.moveTo(i,o),a=!0)}if(e.stroke(),r.showMarker!==!1)for(let t=0;t<T;t++){let n=r.values[t];if(n==null)continue;let a=z+t*J+J/2,o=B+H-n/G*H;e.fillStyle=i,e.beginPath(),e.arc(a,o,3,0,Math.PI*2),e.fill()}}_(e,f&&!p?{...n,series:[...n.series].reverse()}:n,A,s,l,u,d,z,B,V,H,k+2),n.catAxisTitle&&m(e,n.catAxisTitle,z,B,V,H,`cat`,F),n.valAxisTitle&&m(e,n.valAxisTitle,z,B,V,H,`val`,F)}function T(e,n,r,l){let{x:u,y:d,w:f,h:p}=r,h=S(n),C=h.length;if(C===0)return;let w=n.title?y(n,p,l):0,T=n.title?p*.045:0,E=n.title?p*.035:0,D=n.title?w+T+E:0,O=g(n,f,p),k=O?.side===`r`?O.reserveW:0,A=O?.side===`l`?O.reserveW:0,j=O?.side===`t`?O.reserveH:0,M=O?.side===`b`?O.reserveH:0,N=b(n.catAxisFontSizeHpt,p,l),P=b(n.valAxisFontSizeHpt,p,l),F=Math.max(N,P),I=n.catAxisTitle?F+4:0,L=n.valAxisTitle?F+4:0,R={t:D+j+P/2+2,r:k+f*.05,b:N+12+I+M,l:P*2.2+10+L+A};x(e,n,u,d+T,f,w);let z=u+R.l,B=d+R.t,V=f-R.l-R.r,H=p-R.t-R.b;if(V<=0||H<=0)return;n.plotAreaBg&&(e.fillStyle=`#${n.plotAreaBg}`,e.fillRect(z,B,V,H));let U=1/0,W=-1/0;for(let e of n.series)for(let t of e.values)t!=null&&(U=Math.min(U,t),W=Math.max(W,t));isFinite(U)||(U=0,W=1),n.valMin==null?U>0&&(U=0):U=n.valMin,n.valMax==null?W<0&&(W=0):W=n.valMax,W===U&&(W=U+1);let G=i(W-U),K=n.valMin??o(U,G),q=n.valMax??a(W,G),J=q-K;if(J===0)return;let Y=e=>B+H-(e-K)/J*H,X=n.catAxisCrossBetween===`midCat`?e=>z+(C===1?V/2:e/(C-1)*V):e=>z+(e+.5)/C*V;if(!n.valAxisHidden){let t=Math.round((q-K)/G);e.font=`${P}px sans-serif`,e.textBaseline=`middle`;for(let r=0;r<=t;r++){let t=K+r*G,i=Y(t);e.strokeStyle=t===0?`#aaa`:`#e0e0e0`,e.lineWidth=t===0?1:.5,e.beginPath(),e.moveTo(z,i),e.lineTo(z+V,i),e.stroke(),v(e,n.valAxisMajorTickMark,`val`,z,i),e.fillStyle=`#555`,e.textAlign=`right`,e.fillText(c(t,n.valAxisFormatCode),z-6,i)}}e.strokeStyle=`#aaa`,e.lineWidth=1,e.beginPath(),e.moveTo(z,B+H),e.lineTo(z+V,B+H),e.stroke(),n.valAxisHidden||(e.beginPath(),e.moveTo(z,B),e.lineTo(z,B+H),e.stroke());let ee=Math.max(1,2.25*l),Z=Math.max(2,2.5*l),Q=b(n.dataLabelFontSizeHpt,p,l);for(let r=0;r<n.series.length;r++){let i=n.series[r],a=t(r,i);e.strokeStyle=a,e.lineWidth=ee,e.setLineDash([]),e.beginPath();let o=!1;for(let t=0;t<C;t++){let n=i.values[t];if(n==null){o=!1;continue}let r=X(t),a=Y(n);o?e.lineTo(r,a):(e.moveTo(r,a),o=!0)}e.stroke(),e.fillStyle=a;let c=i.showMarker!==!1;for(let t=0;t<C;t++){let r=i.values[t];if(r!=null&&(c&&(e.beginPath(),e.arc(X(t),Y(r),Z,0,Math.PI*2),e.fill()),n.showDataLabels)){e.font=`${Q}px sans-serif`,e.fillStyle=`#333`,e.textAlign=`center`,e.textBaseline=`bottom`;let n=c?Z+1:2;e.fillText(s(r),X(t),Y(r)-n),e.fillStyle=a}}}if(!n.catAxisHidden){let t=Math.max(1,Math.ceil(C/8));e.fillStyle=`#555`,e.textAlign=`center`,e.textBaseline=`top`,e.font=`${N}px sans-serif`;for(let r=0;r<C;r+=t){let t=X(r);v(e,n.catAxisMajorTickMark,`cat`,B+H,t),e.fillStyle=`#555`,e.fillText((h[r]??``).toString().slice(0,10),t,B+H+5)}}_(e,n,O,u,d,f,p,z,B,V,H,D+2),n.catAxisTitle&&m(e,n.catAxisTitle,z,B,V,H,`cat`,F),n.valAxisTitle&&m(e,n.valAxisTitle,z,B,V,H,`val`,F)}function E(e,n,o,s){let{x:l,y:u,w:d,h:f}=o,p=S(n),h=p.length;if(h===0)return;let v=n.chartType===`stackedArea`||n.chartType===`stackedAreaPct`,b=n.title?y(n,f,s):0,C=n.title?f*.035:0,w=n.title?f*.035:0,T=n.title?b+C+w:0,E=g(n,d,f),D=E?.side===`r`?E.reserveW:0,O=E?.side===`l`?E.reserveW:0,k=E?.side===`t`?E.reserveH:0,A=E?.side===`b`?E.reserveH:0,j=Math.max(8,Math.min(10,f*.045)),M=n.catAxisTitle?j+4:0,N=n.valAxisTitle?j+4:0,P={t:T+k+f*.02,r:D+d*.05,b:f*.14+M+A,l:d*.12+N+O};x(e,n,l,u+C,d,b);let F=l+P.l,I=u+P.t,L=d-P.l-P.r,R=f-P.t-P.b;if(L<=0||R<=0)return;n.plotAreaBg&&(e.fillStyle=`#${n.plotAreaBg}`,e.fillRect(F,I,L,R));let z=0;for(let e=0;e<h;e++)if(v){let t=0;for(let r of n.series)t+=r.values[e]??0;z=Math.max(z,t)}else for(let t of n.series)z=Math.max(z,t.values[e]??0);n.valMax!=null&&(z=n.valMax),z===0&&(z=1);let B=i(z),V=n.valMax??a(z,B),H=e=>F+(h===1?L/2:e/(h-1)*L),U=e=>I+R-e/V*R;if(!n.valAxisHidden){e.font=`${Math.max(8,Math.min(11,R/20))}px sans-serif`,e.textBaseline=`middle`;let t=Math.round(V/B);for(let r=0;r<=t;r++){let t=r*B,i=U(t);e.strokeStyle=r===0?`#aaa`:`#e0e0e0`,e.lineWidth=r===0?1:.5,e.beginPath(),e.moveTo(F,i),e.lineTo(F+L,i),e.stroke(),e.fillStyle=`#555`,e.textAlign=`right`,e.fillText(c(t,n.valAxisFormatCode),F-4,i)}}e.strokeStyle=`#aaa`,e.lineWidth=1,e.beginPath(),e.moveTo(F,I+R),e.lineTo(F+L,I+R),e.stroke();let W=v?Array(h).fill(0):null;for(let i=n.series.length-1;i>=0;i--){let a=n.series[i],o=t(i,a),s=I+R;if(e.beginPath(),v&&W){for(let t=0;t<h;t++){let n=(a.values[t]??0)+W[t],r=H(t),i=U(n);t===0?e.moveTo(r,i):e.lineTo(r,i)}for(let t=h-1;t>=0;t--)e.lineTo(H(t),U(W[t]));for(let e=0;e<h;e++)W[e]+=a.values[e]??0}else{e.moveTo(H(0),s);for(let t=0;t<h;t++)e.lineTo(H(t),U(a.values[t]??0));e.lineTo(H(h-1),s)}e.closePath(),e.fillStyle=r(o,.6),e.fill(),e.strokeStyle=o,e.lineWidth=1.5,e.setLineDash([]),e.stroke()}if(!n.catAxisHidden){let t=Math.max(1,Math.ceil(h/8));e.fillStyle=`#555`,e.textAlign=`center`,e.textBaseline=`top`,e.font=`${Math.max(8,Math.min(11,L/h*.8))}px sans-serif`;for(let n=0;n<h;n+=t)e.fillText((p[n]??``).toString().slice(0,10),H(n),I+R+3)}_(e,n,E,l,u,d,f,F,I,L,R,T+2),n.catAxisTitle&&m(e,n.catAxisTitle,F,I,L,R,`cat`,j),n.valAxisTitle&&m(e,n.valAxisTitle,F,I,L,R,`val`,j)}function D(t,r,i,a,o){let{x:s,y:c,w:l,h:u}=i,d=r.series[0];if(!d)return;let f=d.categories&&d.categories.length>0?d.categories:r.categories,p=d.values.map(e=>Math.abs(e??0)),m=p.reduce((e,t)=>e+t,0);if(m===0)return;let h=r.title?y(r,u,o):0,g=r.title?u*.035:0,v=r.title?u*.035:0,b=r.title?h+g+v:0;x(t,r,s,c+g,l,h);let S=r.showLegend?(()=>{let e=r.legendPos??`r`,t=e===`l`?`l`:e===`t`?`t`:e===`b`?`b`:`r`;return t===`r`||t===`l`?{side:t,reserveW:Math.max(80,l*.28),reserveH:0}:{side:t,reserveW:0,reserveH:Math.max(18,u*.08)}})():null,C=S?.side===`r`?S.reserveW:0,w=S?.side===`l`?S.reserveW:0,T=S?.side===`t`?S.reserveH:0,E=S?.side===`b`?S.reserveH:0,D=l-C-w,O=u-b-T-E-u*.02,k=s+w+D/2,A=c+b+T+u*.02+O/2,j=Math.min(D,O)*.42,M=a?j*.5:0,N=-Math.PI/2;for(let e=0;e<p.length;e++){let i=p[e]/m*Math.PI*2,o=n(e,d);if(t.beginPath(),t.moveTo(k,A),t.arc(k,A,j,N,N+i),t.closePath(),t.fillStyle=o,t.fill(),t.strokeStyle=`#fff`,t.lineWidth=1,t.stroke(),r.showDataLabels&&i>.15){let n=N+i/2,r=j*(a?.75:.6),o=k+Math.cos(n)*r,s=A+Math.sin(n)*r,c=Math.round(p[e]/m*100);t.font=`bold ${Math.max(8,j*.1)}px sans-serif`,t.fillStyle=`#fff`,t.textAlign=`center`,t.textBaseline=`middle`,t.fillText(`${c}%`,o,s)}N+=i}if(a&&(t.beginPath(),t.arc(k,A,M,0,Math.PI*2),t.fillStyle=`#fff`,t.fill()),S){let n=p.map((t,n)=>({name:(f[n]??`Item ${n+1}`).toString(),color:d.dataPointColors?.[n]??d.color??e[n%e.length],values:[]})),i=k-D/2;_(t,{...r,series:n},S,s,c,l,u,i,A-O/2,D,O,b+2)}}function O(e,n,o,c){let{x:l,y:u,w:d,h:f}=o,p=S(n),m=p.length;if(m<3)return;let h=n.title?y(n,f,c):0,v=n.title?f*.035:0,C=n.title?f*.035:0,w=n.title?h+v+C:0,T=g(n,d,f),E=T?.side===`r`?T.reserveW:0,D=T?.side===`l`?T.reserveW:0,O=T?.side===`t`?T.reserveH:0,k=T?.side===`b`?T.reserveH:0;x(e,n,l,u+v,d,h);let A=d-E-D,j=f-w-O-k-f*.02,M=l+D+A/2,N=u+w+O+f*.02+j/2,P=Math.min(A,j)*.38,F=0;for(let e of n.series)for(let t of e.values)F=Math.max(F,t??0);n.valMax!=null&&(F=n.valMax),F===0&&(F=1);let I=i(F),L=n.valMax??a(F,I),R=-Math.PI/2,z=e=>R+e/m*Math.PI*2,B=Math.round(L/I);e.strokeStyle=`#ddd`,e.lineWidth=.5;for(let t=1;t<=B;t++){let n=t/B*P;e.beginPath();for(let t=0;t<m;t++){let r=z(t),i=M+Math.cos(r)*n,a=N+Math.sin(r)*n;t===0?e.moveTo(i,a):e.lineTo(i,a)}e.closePath(),e.stroke()}e.strokeStyle=`#bbb`,e.lineWidth=.5;for(let t=0;t<m;t++){let n=z(t);e.beginPath(),e.moveTo(M,N),e.lineTo(M+Math.cos(n)*P,N+Math.sin(n)*P),e.stroke()}if(!n.valAxisHidden){e.font=`${b(n.valAxisFontSizeHpt,f,c)}px sans-serif`,e.fillStyle=`#555`,e.textAlign=`right`,e.textBaseline=`middle`;for(let t=1;t<=B;t++){let n=t/B*L,r=t/B*P;e.fillText(s(n),M-3,N-r)}}e.font=`${Math.max(8,Math.min(11,P*.2))}px sans-serif`,e.fillStyle=`#444`,e.textBaseline=`middle`;for(let t=0;t<m;t++){let n=z(t),r=M+Math.cos(n)*(P+12),i=N+Math.sin(n)*(P+12);e.textAlign=Math.cos(n)<-.1?`right`:Math.cos(n)>.1?`left`:`center`,e.fillText((p[t]??``).toString().slice(0,12),r,i)}for(let i=0;i<n.series.length;i++){let a=n.series[i],o=t(i,a);e.beginPath();for(let t=0;t<m;t++){let n=(a.values[t]??0)/L,r=z(t),i=M+Math.cos(r)*P*n,o=N+Math.sin(r)*P*n;t===0?e.moveTo(i,o):e.lineTo(i,o)}e.closePath(),e.fillStyle=r(o,.25),e.fill(),e.strokeStyle=o,e.lineWidth=2,e.stroke()}_(e,n,T,l,u,d,f,M-A/2,N-j/2,A,j,w+2)}function k(e,n,r,a){let{x:o,y:s,w:l,h:u}=r,d=n.title?y(n,u,a):0,f=n.title?u*.035:0,p=n.title?u*.035:0,h=n.title?d+f+p:0,b=g(n,l,u),S=b?.side===`r`?b.reserveW:0,C=b?.side===`l`?b.reserveW:0,w=b?.side===`t`?b.reserveH:0,T=b?.side===`b`?b.reserveH:0,E=Math.max(8,Math.min(10,u*.045)),D=n.catAxisTitle?E+4:0,O=n.valAxisTitle?E+4:0;if(n.title){let t=n.titleManualLayout;t&&(t.x!==void 0||t.y!==void 0)?x(e,n,o+t.x*l,s+t.y*u,(t.w??.5)*l,d):x(e,n,o,s+f,l,d)}let k=n.plotAreaManualLayout,N,F,I,L;if(k&&k.w!=null&&k.h!=null)N=o+k.x*l,F=s+k.y*u,I=k.w*l,L=k.h*u;else{let e={t:h+w+u*.02,r:S+l*.05,b:(n.catAxisHidden?u*.04:u*.12)+D+T,l:(n.valAxisHidden?l*.04:l*.12)+O+C};N=o+e.l,F=s+e.t,I=l-e.l-e.r,L=u-e.t-e.b}if(I<=0||L<=0)return;n.plotAreaBg&&(e.fillStyle=`#${n.plotAreaBg}`,e.fillRect(N,F,I,L));let R=[],z=[];for(let e of n.series){let t=e.categories??[];for(let e of t){let t=parseFloat(e);isNaN(t)||R.push(t)}for(let t of e.values)t!=null&&z.push(t)}let B=R.length===0;if(B){let e=Math.max(...n.series.map(e=>e.values.length));for(let t=0;t<e;t++)R.push(t)}let V=Math.min(...R),H=Math.max(...R),U=Math.min(...z),W=Math.max(...z);if(V===H&&(--V,H+=1),U===W&&(--U,W+=1),n.valMin==null?U>0&&(U=0):U=n.valMin,n.valMax!=null&&(W=n.valMax),n.catAxisMin!=null&&(V=n.catAxisMin),n.catAxisMax!=null&&(H=n.catAxisMax),n.catAxisMin==null||n.catAxisMax==null){let e=i(H-V);e>0&&(n.catAxisMin??(V=Math.floor(V/e)*e),n.catAxisMax??(H=Math.ceil(H/e)*e))}let G=e=>N+(e-V)/(H-V)*I,K=e=>F+L-(e-U)/(W-U)*L;if(!n.valAxisHidden){let t=Math.max(8,Math.min(11,L/20));e.font=`${n.valAxisFontBold?`bold `:``}${t}px sans-serif`;let r=i(W-U),a=Math.round((W-U)/r)+1;for(let t=0;t<a;t++){let i=U+t*r;if(i>W+r*.01)break;let a=K(i);e.strokeStyle=`#e0e0e0`,e.lineWidth=.5,e.beginPath(),e.moveTo(N,a),e.lineTo(N+I,a),e.stroke(),e.fillStyle=`#555`,e.textAlign=`right`,e.textBaseline=`middle`,e.fillText(c(i,n.valAxisFormatCode),N-4,a);let o=n.valAxisLineColor?`#${n.valAxisLineColor}`:void 0,s=n.valAxisLineWidthEmu?Math.max(.5,n.valAxisLineWidthEmu/12700):void 0;v(e,n.valAxisMajorTickMark,`val`,N,a,o,s)}}let q=F+L;if(n.catAxisCrossesAt!=null)q=P(K(n.catAxisCrossesAt),F,F+L);else{let e=n.catAxisCrosses??`autoZero`;e===`autoZero`&&U<0&&W>0?q=P(K(0),F,F+L):e===`min`?q=F+L:e===`max`&&(q=F)}if(e.save(),e.strokeStyle=n.catAxisLineColor?`#${n.catAxisLineColor}`:`#888`,e.lineWidth=n.catAxisLineWidthEmu?Math.max(.5,n.catAxisLineWidthEmu/12700):1,e.lineCap=`butt`,e.beginPath(),e.moveTo(N,q),e.lineTo(N+I,q),e.stroke(),e.restore(),n.valAxisHidden||(e.save(),e.strokeStyle=n.valAxisLineColor?`#${n.valAxisLineColor}`:`#888`,e.lineWidth=n.valAxisLineWidthEmu?Math.max(.5,n.valAxisLineWidthEmu/12700):1,e.beginPath(),e.moveTo(N,F),e.lineTo(N,F+L),e.stroke(),e.restore()),!n.catAxisHidden){let t=Math.max(8,Math.min(11,L/20));e.font=`${n.catAxisFontBold?`bold `:``}${t}px sans-serif`;let r=i(H-V),a=Math.round((H-V)/r)+1;e.fillStyle=`#555`,e.textAlign=`center`,e.textBaseline=`top`;for(let t=0;t<a;t++){let i=V+t*r;if(i>H+r*.01)break;let a=G(i);e.fillText(c(i,n.catAxisFormatCode),a,q+4);let o=n.catAxisLineColor?`#${n.catAxisLineColor}`:void 0,s=n.catAxisLineWidthEmu?Math.max(.5,n.catAxisLineWidthEmu/12700):void 0;v(e,n.catAxisMajorTickMark,`cat`,q,a,o,s)}}for(let r=0;r<n.series.length;r++){let i=n.series[r],o=t(r,i),s=i.categories??[];for(let t of i.errBars??[])j(e,i,t,s,B,G,K,o);if(!(i.showMarker===!1||typeof i.markerSymbol==`string`&&i.markerSymbol===`none`))for(let t=0;t<i.values.length;t++){let n=i.values[t];if(n==null)continue;let r=B?t:parseFloat(s[t]??`0`);if(isNaN(r))continue;let c=(i.dataPointOverrides??[]).find(e=>e.idx===t),l=c?.markerSymbol??i.markerSymbol??`circle`,u=c?.markerSize??i.markerSize??5,d=c?.markerFill??c?.color??i.markerFill??o,f=c?.markerLine??i.markerLine??null;A(e,G(r),K(n),l,u,d,f,a)}M(e,i,s,B,G,K,L,a)}_(e,n,b,o,s,l,u,N,F,I,L,h+2),n.catAxisTitle&&m(e,n.catAxisTitle,N,F,I,L,`cat`,E),n.valAxisTitle&&m(e,n.valAxisTitle,N,F,I,L,`val`,E)}function A(e,t,n,r,i,a,o,s){let c=Math.max(2,i*s),l=c/2;switch(e.save(),e.fillStyle=`#${a}`,o&&(e.strokeStyle=`#${o}`,e.lineWidth=1),r){case`square`:e.fillRect(t-l,n-l,c,c),o&&e.strokeRect(t-l,n-l,c,c);break;case`diamond`:e.beginPath(),e.moveTo(t,n-l),e.lineTo(t+l,n),e.lineTo(t,n+l),e.lineTo(t-l,n),e.closePath(),e.fill(),o&&e.stroke();break;case`triangle`:e.beginPath(),e.moveTo(t,n-l),e.lineTo(t+l,n+l),e.lineTo(t-l,n+l),e.closePath(),e.fill(),o&&e.stroke();break;case`x`:e.strokeStyle=`#${a}`,e.lineWidth=Math.max(1,c*.18),e.beginPath(),e.moveTo(t-l,n-l),e.lineTo(t+l,n+l),e.moveTo(t-l,n+l),e.lineTo(t+l,n-l),e.stroke();break;case`plus`:e.strokeStyle=`#${a}`,e.lineWidth=Math.max(1,c*.18),e.beginPath(),e.moveTo(t-l,n),e.lineTo(t+l,n),e.moveTo(t,n-l),e.lineTo(t,n+l),e.stroke();break;case`star`:e.beginPath();for(let r=0;r<10;r++){let i=r%2==0?l:l*.45,a=-Math.PI/2+r*Math.PI/5,o=t+Math.cos(a)*i,s=n+Math.sin(a)*i;r===0?e.moveTo(o,s):e.lineTo(o,s)}e.closePath(),e.fill(),o&&e.stroke();break;case`dot`:e.beginPath(),e.arc(t,n,Math.max(1,c*.25),0,Math.PI*2),e.fill();break;case`dash`:{let r=Math.max(1,c*.25);e.fillRect(t-l,n-r/2,c,r);break}default:e.beginPath(),e.arc(t,n,l,0,Math.PI*2),e.fill(),o&&e.stroke();break}e.restore()}function j(e,t,n,r,i,a,o,s){e.save(),e.strokeStyle=n.color?`#${n.color}`:s,e.lineWidth=n.lineWidthEmu?Math.max(.5,n.lineWidthEmu/12700):1,e.setLineDash(F(n.dash));let c=n.barType===`plus`||n.barType===`both`,l=n.barType===`minus`||n.barType===`both`,u=n.dir===`x`,d=e.lineWidth*1.5;for(let s=0;s<t.values.length;s++){let f=t.values[s];if(f==null)continue;let p=i?s:parseFloat(r[s]??`0`);if(isNaN(p))continue;let m=a(p),h=o(f),g=t=>{let r=m,i=h;u?r=a(p+t):i=o(f+t),e.beginPath(),e.moveTo(m,h),e.lineTo(r,i),e.stroke(),n.noEndCap||(e.save(),e.setLineDash([]),e.beginPath(),u?(e.moveTo(r,i-d),e.lineTo(r,i+d)):(e.moveTo(r-d,i),e.lineTo(r+d,i)),e.stroke(),e.restore())};if(c){let e=n.plus[s];e!=null&&g(e)}if(l){let e=n.minus[s];e!=null&&g(-e)}}e.restore()}function M(e,t,n,r,i,a,o,s){let l=t.dataLabelOverrides??[];if(l.length===0&&!t.seriesDataLabels)return;let u=t.seriesDataLabels;for(let d=0;d<t.values.length;d++){let f=t.values[d];if(f==null)continue;let p=r?d:parseFloat(n[d]??`0`);if(isNaN(p))continue;let m=l.find(e=>e.idx===d),h;if(m){if(m.text===``)continue;h=m.text}else if(u&&(u.showVal||u.showSerName||u.showCatName)){let e=[];if(u.showCatName&&!r&&e.push(n[d]??``),u.showSerName&&e.push(t.name),u.showVal&&e.push(c(f,u.formatCode??null)),h=e.filter(Boolean).join(` `),!h)continue}else continue;let g=m?.position??u?.position??`r`,_=m?.fontSizeHpt??u?.fontSizeHpt,v=_?_/100*s:Math.max(9,Math.min(11,o/25)),y=m?.fontColor??u?.fontColor,b=m?.fontBold??u?.fontBold??!1;N(e,i(p),a(f),h,g,v,y,b)}}function N(e,t,n,r,i,a,o,s){e.save(),e.font=`${s?`bold `:``}${a}px sans-serif`,e.fillStyle=o?`#${o}`:`#333`;let c=a*.6,l=t,u=n;switch(i){case`l`:e.textAlign=`right`,e.textBaseline=`middle`,l=t-c;break;case`r`:e.textAlign=`left`,e.textBaseline=`middle`,l=t+c;break;case`t`:e.textAlign=`center`,e.textBaseline=`bottom`,u=n-c;break;case`b`:e.textAlign=`center`,e.textBaseline=`top`,u=n+c;break;case`ctr`:e.textAlign=`center`,e.textBaseline=`middle`;break;default:e.textAlign=`left`,e.textBaseline=`middle`,l=t+c;break}let d=r.split(/\r?\n/),f=a*1.15,p=f*d.length,m=u;e.textBaseline===`middle`?m=u-(p-f)/2:e.textBaseline===`bottom`&&(m=u-(p-f));for(let t of d)e.fillText(t,l,m),m+=f;e.restore()}function P(e,t,n){return e<t?t:e>n?n:e}function F(e){if(!e)return[];switch(e){case`solid`:return[];case`dot`:case`sysDot`:return[1,2];case`dash`:case`sysDash`:return[4,2];case`lgDash`:return[8,3];case`dashDot`:case`sysDashDot`:return[4,2,1,2];case`lgDashDot`:return[8,3,1,3];case`dashDotDot`:case`sysDashDotDot`:case`lgDashDotDot`:return[4,2,1,2,1,2];default:return[]}}function I(e,t,n){let{x:r,y:a,w:o,h:s}=n,c=o*.11,l=o*.04,u=s*.08,d=s*.18,f=r+c,p=a+u,m=o-c-l,h=s-u-d,g=t.series[0]?.values??[],_=t.categories,v=_.length;if(v===0)return;let y=new Set(t.subtotalIndices),b=0,x=[];for(let e=0;e<v;e++){let t=g[e]??0;if(e===0||y.has(e))x.push({start:0,end:t,isSub:!0,isPos:!0}),b=t;else{let e=t>=0?b:b+t,n=t>=0?b+t:b;x.push({start:e,end:n,isSub:!1,isPos:t>=0}),b+=t}}let S=x.map(e=>e.end),C=x.map(e=>e.start),w=Math.max(...S,...C),T=Math.min(...C,0),E=w-T;if(E<=0)return;let D=E*1.1,O=T-E*.05,k=O+D,A=i(D);e.save();let j=Math.round(s*.042);e.font=`${j}px sans-serif`,e.strokeStyle=`#e8e8e8`,e.lineWidth=.7,e.fillStyle=`#666`,e.textAlign=`right`,e.textBaseline=`middle`;for(let t=Math.ceil(O/A)*A;t<=k;t+=A){let n=p+h*(1-(t-O)/D);e.beginPath(),e.moveTo(f,n),e.lineTo(f+m,n),e.stroke(),e.fillText(t.toLocaleString(),f-4,n)}e.strokeStyle=`#bbb`,e.lineWidth=1,e.beginPath(),e.moveTo(f,p),e.lineTo(f,p+h),e.lineTo(f+m,p+h),e.stroke();let M=m/v*.55,N=m/v;x.forEach((t,n)=>{let r=f+N*n+(N-M)/2,i=p+h*(1-(t.end-O)/D),a=p+h*(1-(t.start-O)/D),o=Math.max(1,a-i);if(t.isSub?(e.fillStyle=`#196ECA`,e.fillRect(r,i,M,o)):(e.strokeStyle=t.isPos?`#5BA4E6`:`#E46970`,e.lineWidth=1.5,e.strokeRect(r+.75,i+.75,M-1.5,o-1.5)),n<v-1){let o=f+N*(n+1)+(N-M)/2,s=t.isPos?i:a;e.strokeStyle=`#ccc`,e.lineWidth=.8,e.setLineDash([3,3]),e.beginPath(),e.moveTo(r+M,s),e.lineTo(o,s),e.stroke(),e.setLineDash([])}let c=g[n]??0,l=c<0?`△ ${Math.abs(c).toLocaleString()}`:c.toLocaleString();e.fillStyle=`#595959`,e.font=`bold ${Math.round(s*.044)}px sans-serif`,e.textAlign=`center`,e.textBaseline=`bottom`,e.fillText(l,r+M/2,i-3)}),e.textAlign=`center`,e.textBaseline=`top`,e.fillStyle=`#666`,e.font=`${Math.round(s*.038)}px sans-serif`;let P=p+h+4;for(let t=0;t<v;t++){let n=f+N*t+N/2;_[t].split(/\s+/).forEach((t,r)=>e.fillText(t,n,P+r*(j+2)))}e.restore()}function L(e,t,n,r=1.333){let{x:i,y:a,w:o,h:s}=n;if(t.chartBg&&(e.fillStyle=`#${t.chartBg}`,e.fillRect(i,a,o,s)),t.series.length===0){e.fillStyle=`#888`,e.font=`12px sans-serif`,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(`(no data)`,i+o/2,a+s/2);return}switch(t.chartType){case`clusteredBar`:case`clusteredBarH`:case`stackedBar`:case`stackedBarH`:case`stackedBarPct`:case`stackedBarHPct`:w(e,t,n,r);break;case`line`:case`stackedLine`:case`stackedLinePct`:T(e,t,n,r);break;case`area`:case`stackedArea`:case`stackedAreaPct`:E(e,t,n,r);break;case`pie`:D(e,t,n,!1,r);break;case`doughnut`:D(e,t,n,!0,r);break;case`radar`:O(e,t,n,r);break;case`scatter`:case`bubble`:k(e,t,n,r);break;case`waterfall`:I(e,t,n);break;default:e.fillStyle=`#888`,e.font=`11px sans-serif`,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(`Chart: ${t.chartType}`,i+o/2,a+s/2)}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return L}});
@@ -293,6 +293,31 @@ declare interface ChartData {
293
293
  /** `<c:dLbls><c:numFmt@formatCode>` — chart-level override for data label
294
294
  * number format (§21.2.2.35). */
295
295
  dataLabelFormatCode?: string | null;
296
+ /** `<c:title>...defRPr@b>` chart title bold flag. */
297
+ titleFontBold?: boolean;
298
+ /** `<c:catAx><c:txPr>...defRPr@b>` X-axis tick label bold flag. */
299
+ catAxisFontBold?: boolean;
300
+ /** `<c:valAx><c:txPr>...defRPr@b>` Y-axis tick label bold flag. */
301
+ valAxisFontBold?: boolean;
302
+ /** `<c:catAx><c:crosses val>` (`autoZero` | `min` | `max`). Drives where
303
+ * the X axis sits along the Y axis. Default `autoZero`. */
304
+ catAxisCrosses?: string;
305
+ /** `<c:catAx><c:crossesAt val>` explicit numeric crossing. */
306
+ catAxisCrossesAt?: number;
307
+ valAxisCrosses?: string;
308
+ valAxisCrossesAt?: number;
309
+ /** Axis line color (hex without `#`) and width in EMU, from
310
+ * `<c:catAx|valAx><c:spPr><a:ln>`. */
311
+ catAxisLineColor?: string;
312
+ catAxisLineWidthEmu?: number;
313
+ valAxisLineColor?: string;
314
+ valAxisLineWidthEmu?: number;
315
+ /** `<c:catAx | valAx><c:majorTickMark val>` / `<c:minorTickMark val>` —
316
+ * one of `none`/`out`/`in`/`cross` (ECMA-376 §21.2.2.49). */
317
+ catAxisMajorTickMark?: string;
318
+ catAxisMinorTickMark?: string;
319
+ valAxisMajorTickMark?: string;
320
+ valAxisMinorTickMark?: string;
296
321
  /** `<c:catAx><c:numFmt@formatCode>` (or scatter X-axis valAx). */
297
322
  catAxisFormatCode?: string;
298
323
  /** `<c:catAx><c:scaling><c:min/max>` — explicit X-axis range. */
@@ -316,6 +341,8 @@ declare interface ChartDataLabelOverride {
316
341
  position?: string;
317
342
  fontColor?: string;
318
343
  fontSizeHpt?: number;
344
+ /** `<a:defRPr b="1">` inside the per-idx rich text. */
345
+ fontBold?: boolean;
319
346
  }
320
347
 
321
348
  declare interface ChartDataPointOverride {
@@ -474,6 +501,10 @@ declare interface ChartSeriesDataLabels {
474
501
  position?: string;
475
502
  fontColor?: string;
476
503
  formatCode?: string;
504
+ /** Series-level bold default for data labels. */
505
+ fontBold?: boolean;
506
+ /** Series-level font size for data labels (OOXML hundredths of a point). */
507
+ fontSizeHpt?: number;
477
508
  }
478
509
 
479
510
  declare interface ConditionalFormat {
@@ -488,6 +519,7 @@ declare interface DataLabelOverride {
488
519
  position?: string;
489
520
  fontColor?: string;
490
521
  fontSizeHpt?: number;
522
+ fontBold?: boolean;
491
523
  }
492
524
 
493
525
  declare interface DataPointOverride {
@@ -877,6 +909,22 @@ declare interface LoadOptions {
877
909
  useGoogleFonts?: boolean;
878
910
  }
879
911
 
912
+ /** Options for {@link XlsxWorkbook.load}. */
913
+ declare interface LoadOptions_2 {
914
+ /**
915
+ * Opt in to loading Office-font metric substitutes (Carlito for Calibri,
916
+ * Caladea for Cambria) from Google Fonts (`fonts.googleapis.com`). Without
917
+ * these the canvas falls back to system Arial / Helvetica which is
918
+ * noticeably wider per character, so column layouts diverge from Excel.
919
+ *
920
+ * When enabled, end-user IP / User-Agent is sent to Google, which may have
921
+ * privacy / GDPR implications for your application. Default `false` — host
922
+ * the substitute webfonts yourself and reference them via `@font-face` in
923
+ * your application CSS to avoid the third-party request.
924
+ */
925
+ useGoogleFonts?: boolean;
926
+ }
927
+
880
928
  declare interface ManualLayout {
881
929
  xMode: string;
882
930
  yMode: string;
@@ -1386,6 +1434,8 @@ declare interface SeriesDataLabels {
1386
1434
  position?: string;
1387
1435
  fontColor?: string;
1388
1436
  formatCode?: string;
1437
+ fontBold?: boolean;
1438
+ fontSizeHpt?: number;
1389
1439
  }
1390
1440
 
1391
1441
  declare interface Shadow {
@@ -2010,6 +2060,14 @@ declare interface XlsxViewerOptions {
2010
2060
  onError?: (err: Error) => void;
2011
2061
  /** Called when the selected cell range changes. null means no selection. */
2012
2062
  onSelectionChange?: (selection: CellRange_2 | null) => void;
2063
+ /**
2064
+ * Opt in to Google-Fonts-hosted, metric-compatible substitutes for the
2065
+ * Office default fonts (Carlito for Calibri, Caladea for Cambria) so
2066
+ * column layouts match Excel on systems without Office installed.
2067
+ * Default `false`. See `XlsxWorkbook.LoadOptions.useGoogleFonts` for the
2068
+ * privacy implications.
2069
+ */
2070
+ useGoogleFonts?: boolean;
2013
2071
  }
2014
2072
 
2015
2073
  declare class XlsxWorkbook {
@@ -2020,7 +2078,7 @@ declare class XlsxWorkbook {
2020
2078
  private imageCache;
2021
2079
  private rawData;
2022
2080
  constructor();
2023
- load(source: string | ArrayBuffer): Promise<void>;
2081
+ load(source: string | ArrayBuffer, opts?: LoadOptions_2): Promise<void>;
2024
2082
  get sheetNames(): string[];
2025
2083
  get sheetCount(): number;
2026
2084
  getWorksheet(sheetIndex: number): Promise<Worksheet>;
@@ -56,6 +56,8 @@ declare interface ChartDataLabelOverride {
56
56
  position?: string;
57
57
  fontColor?: string;
58
58
  fontSizeHpt?: number;
59
+ /** `<a:defRPr b="1">` inside the per-idx rich text. */
60
+ fontBold?: boolean;
59
61
  }
60
62
 
61
63
  declare interface ChartDataPointOverride {
@@ -214,6 +216,10 @@ declare interface ChartSeriesDataLabels {
214
216
  position?: string;
215
217
  fontColor?: string;
216
218
  formatCode?: string;
219
+ /** Series-level bold default for data labels. */
220
+ fontBold?: boolean;
221
+ /** Series-level font size for data labels (OOXML hundredths of a point). */
222
+ fontSizeHpt?: number;
217
223
  }
218
224
 
219
225
  export declare type Fill = SolidFill | NoFill | GradientFill;
@@ -247,6 +247,31 @@ declare interface ChartData {
247
247
  /** `<c:dLbls><c:numFmt@formatCode>` — chart-level override for data label
248
248
  * number format (§21.2.2.35). */
249
249
  dataLabelFormatCode?: string | null;
250
+ /** `<c:title>...defRPr@b>` chart title bold flag. */
251
+ titleFontBold?: boolean;
252
+ /** `<c:catAx><c:txPr>...defRPr@b>` X-axis tick label bold flag. */
253
+ catAxisFontBold?: boolean;
254
+ /** `<c:valAx><c:txPr>...defRPr@b>` Y-axis tick label bold flag. */
255
+ valAxisFontBold?: boolean;
256
+ /** `<c:catAx><c:crosses val>` (`autoZero` | `min` | `max`). Drives where
257
+ * the X axis sits along the Y axis. Default `autoZero`. */
258
+ catAxisCrosses?: string;
259
+ /** `<c:catAx><c:crossesAt val>` explicit numeric crossing. */
260
+ catAxisCrossesAt?: number;
261
+ valAxisCrosses?: string;
262
+ valAxisCrossesAt?: number;
263
+ /** Axis line color (hex without `#`) and width in EMU, from
264
+ * `<c:catAx|valAx><c:spPr><a:ln>`. */
265
+ catAxisLineColor?: string;
266
+ catAxisLineWidthEmu?: number;
267
+ valAxisLineColor?: string;
268
+ valAxisLineWidthEmu?: number;
269
+ /** `<c:catAx | valAx><c:majorTickMark val>` / `<c:minorTickMark val>` —
270
+ * one of `none`/`out`/`in`/`cross` (ECMA-376 §21.2.2.49). */
271
+ catAxisMajorTickMark?: string;
272
+ catAxisMinorTickMark?: string;
273
+ valAxisMajorTickMark?: string;
274
+ valAxisMinorTickMark?: string;
250
275
  /** `<c:catAx><c:numFmt@formatCode>` (or scatter X-axis valAx). */
251
276
  catAxisFormatCode?: string;
252
277
  /** `<c:catAx><c:scaling><c:min/max>` — explicit X-axis range. */
@@ -274,6 +299,7 @@ declare interface DataLabelOverride {
274
299
  position?: string;
275
300
  fontColor?: string;
276
301
  fontSizeHpt?: number;
302
+ fontBold?: boolean;
277
303
  }
278
304
 
279
305
  declare interface DataPointOverride {
@@ -381,6 +407,22 @@ declare interface LegendManualLayout {
381
407
  h: number;
382
408
  }
383
409
 
410
+ /** Options for {@link XlsxWorkbook.load}. */
411
+ declare interface LoadOptions {
412
+ /**
413
+ * Opt in to loading Office-font metric substitutes (Carlito for Calibri,
414
+ * Caladea for Cambria) from Google Fonts (`fonts.googleapis.com`). Without
415
+ * these the canvas falls back to system Arial / Helvetica which is
416
+ * noticeably wider per character, so column layouts diverge from Excel.
417
+ *
418
+ * When enabled, end-user IP / User-Agent is sent to Google, which may have
419
+ * privacy / GDPR implications for your application. Default `false` — host
420
+ * the substitute webfonts yourself and reference them via `@font-face` in
421
+ * your application CSS to avoid the third-party request.
422
+ */
423
+ useGoogleFonts?: boolean;
424
+ }
425
+
384
426
  declare interface ManualLayout {
385
427
  xMode: string;
386
428
  yMode: string;
@@ -500,6 +542,8 @@ declare interface SeriesDataLabels {
500
542
  position?: string;
501
543
  fontColor?: string;
502
544
  formatCode?: string;
545
+ fontBold?: boolean;
546
+ fontSizeHpt?: number;
503
547
  }
504
548
 
505
549
  declare interface ShapeAnchor {
@@ -818,6 +862,14 @@ export declare interface XlsxViewerOptions {
818
862
  onError?: (err: Error) => void;
819
863
  /** Called when the selected cell range changes. null means no selection. */
820
864
  onSelectionChange?: (selection: CellRange | null) => void;
865
+ /**
866
+ * Opt in to Google-Fonts-hosted, metric-compatible substitutes for the
867
+ * Office default fonts (Carlito for Calibri, Caladea for Cambria) so
868
+ * column layouts match Excel on systems without Office installed.
869
+ * Default `false`. See `XlsxWorkbook.LoadOptions.useGoogleFonts` for the
870
+ * privacy implications.
871
+ */
872
+ useGoogleFonts?: boolean;
821
873
  }
822
874
 
823
875
  export declare class XlsxWorkbook {
@@ -828,7 +880,7 @@ export declare class XlsxWorkbook {
828
880
  private imageCache;
829
881
  private rawData;
830
882
  constructor();
831
- load(source: string | ArrayBuffer): Promise<void>;
883
+ load(source: string | ArrayBuffer, opts?: LoadOptions): Promise<void>;
832
884
  get sheetNames(): string[];
833
885
  get sheetCount(): number;
834
886
  getWorksheet(sheetIndex: number): Promise<Worksheet>;