pptx-react-viewer 2.13.1 → 2.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{AiChatPanel-FXPGFU6H.js → AiChatPanel-F4E3A2DE.js} +22 -22
  3. package/dist/AiChatPanel-F4E3A2DE.js.br +0 -0
  4. package/dist/AiChatPanel-F4E3A2DE.js.gz +0 -0
  5. package/dist/{AiChatPanel-WMGS5TNX.mjs → AiChatPanel-VEULATXX.mjs} +3 -3
  6. package/dist/AiChatPanel-VEULATXX.mjs.br +0 -0
  7. package/dist/AiChatPanel-VEULATXX.mjs.gz +0 -0
  8. package/dist/{Model3DScene-E2XRQAMR.mjs → Model3DScene-KIPEODEJ.mjs} +1 -1
  9. package/dist/{Model3DScene-E2XRQAMR.mjs.br → Model3DScene-KIPEODEJ.mjs.br} +0 -0
  10. package/dist/Model3DScene-KIPEODEJ.mjs.gz +0 -0
  11. package/dist/{Model3DScene-K5FPZTRG.js → Model3DScene-TD2LIHYP.js} +2 -2
  12. package/dist/Model3DScene-TD2LIHYP.js.br +0 -0
  13. package/dist/Model3DScene-TD2LIHYP.js.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-2W2IFPLE.mjs → SurfaceChart3DScene-GRBWZ52S.mjs} +1 -1
  15. package/dist/{SurfaceChart3DScene-2W2IFPLE.mjs.br → SurfaceChart3DScene-GRBWZ52S.mjs.br} +0 -0
  16. package/dist/SurfaceChart3DScene-GRBWZ52S.mjs.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-JDCFTXYT.js → SurfaceChart3DScene-OTKXQH5O.js} +2 -2
  18. package/dist/SurfaceChart3DScene-OTKXQH5O.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-OTKXQH5O.js.gz +0 -0
  20. package/dist/{chunk-3OV4FR6S.mjs → chunk-3HWE6QZG.mjs} +7 -7
  21. package/dist/chunk-3HWE6QZG.mjs.br +0 -0
  22. package/dist/chunk-3HWE6QZG.mjs.gz +0 -0
  23. package/dist/{chunk-QFNJCEMS.js → chunk-BNSCH4WT.js} +327 -327
  24. package/dist/chunk-BNSCH4WT.js.br +0 -0
  25. package/dist/chunk-BNSCH4WT.js.gz +0 -0
  26. package/dist/{chunk-66ZHD7Y4.js → chunk-DOS7NY7C.js} +244 -244
  27. package/dist/chunk-DOS7NY7C.js.br +0 -0
  28. package/dist/chunk-DOS7NY7C.js.gz +0 -0
  29. package/dist/{chunk-ZMIFFURL.js → chunk-EUQ2IER3.js} +1037 -1037
  30. package/dist/chunk-EUQ2IER3.js.br +0 -0
  31. package/dist/chunk-EUQ2IER3.js.gz +0 -0
  32. package/dist/{chunk-DD2YRS6Z.js → chunk-FDR5W67L.js} +160 -50
  33. package/dist/chunk-FDR5W67L.js.br +0 -0
  34. package/dist/chunk-FDR5W67L.js.gz +0 -0
  35. package/dist/{chunk-OWGPRVRK.mjs → chunk-GKOKCOXR.mjs} +160 -50
  36. package/dist/chunk-GKOKCOXR.mjs.br +0 -0
  37. package/dist/chunk-GKOKCOXR.mjs.gz +0 -0
  38. package/dist/{chunk-GJEH27GD.mjs → chunk-GZ6TXBEO.mjs} +2 -2
  39. package/dist/chunk-GZ6TXBEO.mjs.br +0 -0
  40. package/dist/{chunk-GJEH27GD.mjs.gz → chunk-GZ6TXBEO.mjs.gz} +0 -0
  41. package/dist/{chunk-CQ2CKMG4.mjs → chunk-L5YGPCQW.mjs} +1 -1
  42. package/dist/chunk-L5YGPCQW.mjs.br +0 -0
  43. package/dist/chunk-L5YGPCQW.mjs.gz +0 -0
  44. package/dist/{chunk-PTFCMG3A.js → chunk-VY3KLDJF.js} +3 -3
  45. package/dist/chunk-VY3KLDJF.js.br +0 -0
  46. package/dist/chunk-VY3KLDJF.js.gz +0 -0
  47. package/dist/{chunk-H5H57XMH.mjs → chunk-ZFRPPY2N.mjs} +2 -2
  48. package/dist/chunk-ZFRPPY2N.mjs.br +0 -0
  49. package/dist/chunk-ZFRPPY2N.mjs.gz +0 -0
  50. package/dist/index.js +34 -34
  51. package/dist/index.js.br +0 -0
  52. package/dist/index.js.gz +0 -0
  53. package/dist/index.mjs +5 -5
  54. package/dist/index.mjs.br +0 -0
  55. package/dist/index.mjs.gz +0 -0
  56. package/dist/internals.js +78 -78
  57. package/dist/internals.js.br +0 -0
  58. package/dist/internals.js.gz +0 -0
  59. package/dist/internals.mjs +3 -3
  60. package/dist/internals.mjs.br +0 -0
  61. package/dist/internals.mjs.gz +0 -0
  62. package/dist/viewer/index.js +21 -21
  63. package/dist/viewer/index.js.br +0 -0
  64. package/dist/viewer/index.js.gz +0 -0
  65. package/dist/viewer/index.mjs +5 -5
  66. package/dist/viewer/index.mjs.br +0 -0
  67. package/dist/viewer/index.mjs.gz +0 -0
  68. package/package.json +1 -1
  69. package/dist/AiChatPanel-FXPGFU6H.js.br +0 -0
  70. package/dist/AiChatPanel-FXPGFU6H.js.gz +0 -0
  71. package/dist/AiChatPanel-WMGS5TNX.mjs.br +0 -0
  72. package/dist/AiChatPanel-WMGS5TNX.mjs.gz +0 -0
  73. package/dist/Model3DScene-E2XRQAMR.mjs.gz +0 -0
  74. package/dist/Model3DScene-K5FPZTRG.js.br +0 -0
  75. package/dist/Model3DScene-K5FPZTRG.js.gz +0 -0
  76. package/dist/SurfaceChart3DScene-2W2IFPLE.mjs.gz +0 -0
  77. package/dist/SurfaceChart3DScene-JDCFTXYT.js.br +0 -0
  78. package/dist/SurfaceChart3DScene-JDCFTXYT.js.gz +0 -0
  79. package/dist/chunk-3OV4FR6S.mjs.br +0 -0
  80. package/dist/chunk-3OV4FR6S.mjs.gz +0 -0
  81. package/dist/chunk-66ZHD7Y4.js.br +0 -0
  82. package/dist/chunk-66ZHD7Y4.js.gz +0 -0
  83. package/dist/chunk-CQ2CKMG4.mjs.br +0 -0
  84. package/dist/chunk-CQ2CKMG4.mjs.gz +0 -0
  85. package/dist/chunk-DD2YRS6Z.js.br +0 -0
  86. package/dist/chunk-DD2YRS6Z.js.gz +0 -0
  87. package/dist/chunk-GJEH27GD.mjs.br +0 -0
  88. package/dist/chunk-H5H57XMH.mjs.br +0 -0
  89. package/dist/chunk-H5H57XMH.mjs.gz +0 -0
  90. package/dist/chunk-OWGPRVRK.mjs.br +0 -0
  91. package/dist/chunk-OWGPRVRK.mjs.gz +0 -0
  92. package/dist/chunk-PTFCMG3A.js.br +0 -0
  93. package/dist/chunk-PTFCMG3A.js.gz +0 -0
  94. package/dist/chunk-QFNJCEMS.js.br +0 -0
  95. package/dist/chunk-QFNJCEMS.js.gz +0 -0
  96. package/dist/chunk-ZMIFFURL.js.br +0 -0
  97. package/dist/chunk-ZMIFFURL.js.gz +0 -0
Binary file
Binary file
@@ -41540,6 +41540,30 @@ var FONT_SUBSTITUTION_MAP = {
41540
41540
  Gulim: ["Noto Sans CJK KR", "AppleGothic", "sans-serif"],
41541
41541
  Malgun: ["Noto Sans CJK KR", "Apple SD Gothic Neo", "sans-serif"],
41542
41542
  "Malgun Gothic": ["Noto Sans CJK KR", "Apple SD Gothic Neo", "sans-serif"],
41543
+ // Source Han Sans (Adobe/Google) ships the same glyphs as Noto Sans CJK;
41544
+ // the zh-CN name 思源黑体 is how decks authored in Chinese reference it.
41545
+ "\u601D\u6E90\u9ED1\u4F53 CN": [
41546
+ "Source Han Sans CN",
41547
+ "Noto Sans CJK SC",
41548
+ "Noto Sans SC",
41549
+ "Microsoft YaHei",
41550
+ "sans-serif"
41551
+ ],
41552
+ \u601D\u6E90\u9ED1\u4F53: [
41553
+ "Source Han Sans SC",
41554
+ "Noto Sans CJK SC",
41555
+ "Noto Sans SC",
41556
+ "Microsoft YaHei",
41557
+ "sans-serif"
41558
+ ],
41559
+ "Source Han Sans CN": [
41560
+ "\u601D\u6E90\u9ED1\u4F53 CN",
41561
+ "Noto Sans CJK SC",
41562
+ "Noto Sans SC",
41563
+ "Microsoft YaHei",
41564
+ "sans-serif"
41565
+ ],
41566
+ \u5FAE\u8F6F\u96C5\u9ED1: ["Microsoft YaHei", "Noto Sans CJK SC", "PingFang SC", "sans-serif"],
41543
41567
  // Complex script fonts
41544
41568
  "Arabic Typesetting": ["Noto Naskh Arabic", "serif"],
41545
41569
  "Simplified Arabic": ["Noto Sans Arabic", "sans-serif"],
@@ -41559,6 +41583,11 @@ var FONT_SUBSTITUTION_MAP = {
41559
41583
  Nyala: ["Noto Sans Ethiopic", "sans-serif"],
41560
41584
  MoolBoran: ["Noto Sans Khmer", "sans-serif"],
41561
41585
  // Decorative / Display
41586
+ // Condensed display faces: decks often reference the FULL style name
41587
+ // ("Bebas Neue Regular"); the suffix-stripped base resolves here. The
41588
+ // fallbacks must stay condensed, or short numeric labels sized to the
41589
+ // narrow face overflow their text boxes and wrap (issue #132, "77%").
41590
+ "Bebas Neue": ["Oswald", "Arial Narrow", "Impact", "sans-serif"],
41562
41591
  "Century Gothic": ["URW Gothic", "Futura", "sans-serif"],
41563
41592
  Oswald: ["Agency FB", "Arial Narrow", "sans-serif"],
41564
41593
  "Franklin Gothic": ["Liberation Sans", "Helvetica Neue", "sans-serif"],
@@ -41570,6 +41599,48 @@ var FONT_SUBSTITUTION_MAP = {
41570
41599
  Constantia: ["Liberation Serif", "Palatino", "serif"],
41571
41600
  Corbel: ["Liberation Sans", "Lucida Grande", "sans-serif"]
41572
41601
  };
41602
+ var FONT_STYLE_SUFFIX_TOKENS = /* @__PURE__ */ new Set([
41603
+ "regular",
41604
+ "normal",
41605
+ "book",
41606
+ "roman",
41607
+ "thin",
41608
+ "hairline",
41609
+ "extralight",
41610
+ "ultralight",
41611
+ "demilight",
41612
+ "semilight",
41613
+ "light",
41614
+ "medium",
41615
+ "demibold",
41616
+ "semibold",
41617
+ "bold",
41618
+ "extrabold",
41619
+ "ultrabold",
41620
+ "heavy",
41621
+ "black",
41622
+ "extrablack",
41623
+ "ultra",
41624
+ "italic",
41625
+ "oblique"
41626
+ ]);
41627
+ function stripFontStyleSuffix(fontName) {
41628
+ let name = fontName.trim();
41629
+ let stripped = false;
41630
+ for (let i = 0; i < 2; i++) {
41631
+ const idx = name.lastIndexOf(" ");
41632
+ if (idx <= 0) {
41633
+ break;
41634
+ }
41635
+ const token2 = name.slice(idx + 1).toLowerCase().replace(/-/g, "");
41636
+ if (!FONT_STYLE_SUFFIX_TOKENS.has(token2)) {
41637
+ break;
41638
+ }
41639
+ name = name.slice(0, idx).trim();
41640
+ stripped = true;
41641
+ }
41642
+ return stripped && name.length > 0 ? name : void 0;
41643
+ }
41573
41644
  var PANOSE_FAMILY_MAP = {
41574
41645
  0: "sans-serif",
41575
41646
  // Any — default to sans-serif
@@ -41643,18 +41714,27 @@ function getSubstituteFontFamily(fontName, panose) {
41643
41714
  if (!trimmed) {
41644
41715
  return "sans-serif";
41645
41716
  }
41646
- const directSubs = FONT_SUBSTITUTION_MAP[trimmed];
41717
+ return buildFontFamilyString(trimmed, getSubstituteFonts(trimmed, panose));
41718
+ }
41719
+ function getSubstituteFonts(fontName, panose) {
41720
+ const trimmed = fontName.trim();
41721
+ if (!trimmed) {
41722
+ return ["sans-serif"];
41723
+ }
41724
+ const baseName = stripFontStyleSuffix(trimmed);
41725
+ const basePrefix = baseName ? [baseName] : [];
41726
+ const directSubs = FONT_SUBSTITUTION_MAP[trimmed] ?? (baseName ? FONT_SUBSTITUTION_MAP[baseName] : void 0);
41647
41727
  if (directSubs) {
41648
- return buildFontFamilyString(trimmed, directSubs);
41728
+ return [...basePrefix, ...directSubs];
41649
41729
  }
41650
41730
  if (panose && panose.length >= 4) {
41651
41731
  const genericFamily = classifyPanose(panose);
41652
41732
  const concreteFonts = GENERIC_FAMILY_CONCRETE_FONTS[genericFamily];
41653
41733
  if (concreteFonts) {
41654
- return buildFontFamilyString(trimmed, concreteFonts);
41734
+ return [...basePrefix, ...concreteFonts];
41655
41735
  }
41656
41736
  }
41657
- return buildFontFamilyString(trimmed, ["sans-serif"]);
41737
+ return [...basePrefix, "sans-serif"];
41658
41738
  }
41659
41739
  var CSS_GENERIC_FAMILIES = /* @__PURE__ */ new Set([
41660
41740
  "serif",
@@ -87370,8 +87450,8 @@ function formatAxisValue(val2, formatCode) {
87370
87450
  return val2.toFixed(1);
87371
87451
  }
87372
87452
  function computeLayout(elementWidth, elementHeight, style, hasAxes, legendPos, options) {
87373
- const svgWidth = Math.max(320, elementWidth);
87374
- const svgHeight = Math.max(180, elementHeight);
87453
+ const svgWidth = Math.max(1, elementWidth);
87454
+ const svgHeight = Math.max(1, elementHeight);
87375
87455
  let plotLeft = hasAxes ? 48 : 8;
87376
87456
  let plotTop = 8;
87377
87457
  let plotRight = svgWidth - 8;
@@ -87426,6 +87506,12 @@ function chartAreaFill(chartData) {
87426
87506
  function plotAreaFill(chartData) {
87427
87507
  return resolve(chartData?.style?.plotAreaFill, void 0);
87428
87508
  }
87509
+ var CHART_PX_PER_PT = 4 / 3;
87510
+ function chartFontPx(sizePt) {
87511
+ return sizePt * CHART_PX_PER_PT;
87512
+ }
87513
+ var DEFAULT_CHART_TEXT_PX = chartFontPx(10);
87514
+ var DEFAULT_CHART_DATA_LABEL_PX = chartFontPx(9);
87429
87515
  var LOG_EXPONENT_TOLERANCE = 1e-12;
87430
87516
  function computeLogValueRange(series, logBase) {
87431
87517
  const allValues = series.flatMap((item) => item.values).filter((value) => value > 0);
@@ -88004,9 +88090,9 @@ function dashArray(style, width) {
88004
88090
  }
88005
88091
  return `${unit * 3} ${unit * 2}`;
88006
88092
  }
88007
- function chartAxisTextStyle(axis, defaultFontSize = 8) {
88093
+ function chartAxisTextStyle(axis, defaultFontSizePx = DEFAULT_CHART_TEXT_PX) {
88008
88094
  return {
88009
- fontSize: axis?.fontSize ?? defaultFontSize,
88095
+ fontSize: axis?.fontSize !== void 0 ? chartFontPx(axis.fontSize) : defaultFontSizePx,
88010
88096
  fill: axis?.fontColor ?? DEFAULT_COLOR2,
88011
88097
  ...axis?.fontBold !== void 0 ? { fontWeight: axis.fontBold ? "bold" : "normal" } : {},
88012
88098
  ...axis?.fontFamily ? { fontFamily: axis.fontFamily } : {}
@@ -88153,7 +88239,7 @@ function buildPrimaryAxis(range, layout, axis, axisX = layout.plotLeft) {
88153
88239
  x: labelX,
88154
88240
  y: midY,
88155
88241
  text: unitLabel,
88156
- ...chartAxisTextStyle(axis, 9),
88242
+ ...chartAxisTextStyle(axis),
88157
88243
  textAnchor: "middle",
88158
88244
  transform: `rotate(-90, ${labelX}, ${midY})`
88159
88245
  });
@@ -88165,7 +88251,7 @@ function buildSecondaryAxis(range, layout, axis, axisX = layout.plotRight) {
88165
88251
  const gridlines = [];
88166
88252
  const axisLabels = [];
88167
88253
  const textStyle = chartAxisTextStyle(axis);
88168
- const captionStyle = chartAxisTextStyle(axis, 9);
88254
+ const captionStyle = chartAxisTextStyle(axis);
88169
88255
  const axisLine = buildVerticalAxisLine(axis, axisX, layout);
88170
88256
  if (axisLine) {
88171
88257
  gridlines.push(axisLine);
@@ -88387,7 +88473,7 @@ function buildBars(chartData, catCount, layout, primaryRange, secondaryRange, se
88387
88473
  x: x + singleBarWidth / 2,
88388
88474
  y: val2 >= 0 ? y - 4 : y + h + 10,
88389
88475
  text: formatAxisValue2(val2, series[si].numberFormat),
88390
- fontSize: 7,
88476
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
88391
88477
  fill: "#334155",
88392
88478
  textAnchor: "middle"
88393
88479
  });
@@ -88459,7 +88545,7 @@ function buildBars(chartData, catCount, layout, primaryRange, secondaryRange, se
88459
88545
  x: x + barW / 2,
88460
88546
  y: y + h / 2 + 3,
88461
88547
  text: `${Math.round(val2)}%`,
88462
- fontSize: 7,
88548
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
88463
88549
  fill: "#ffffff",
88464
88550
  textAnchor: "middle",
88465
88551
  fontWeight: "bold"
@@ -88492,7 +88578,7 @@ function pushClusteredStackedLabels(series, sourceIndices2, catCount, layout, ra
88492
88578
  x,
88493
88579
  y: labelY,
88494
88580
  text: formatAxisValue2(val2, series[si].numberFormat),
88495
- fontSize: 7,
88581
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
88496
88582
  fill: "#334155",
88497
88583
  textAnchor: "middle"
88498
88584
  });
@@ -88778,7 +88864,7 @@ function buildLines(chartData, catCount, layout, primaryRange, secondaryRange, s
88778
88864
  x: pt.x,
88779
88865
  y: pt.y - 7,
88780
88866
  text: formatAxisValue2(val2, series.numberFormat),
88781
- fontSize: 7,
88867
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
88782
88868
  fill: "#334155",
88783
88869
  textAnchor: "middle"
88784
88870
  });
@@ -88850,7 +88936,7 @@ function buildAreas(chartData, catCount, layout, range, sourceIndices2, xPositio
88850
88936
  x: pt.x,
88851
88937
  y: pt.y - 6,
88852
88938
  text: formatAxisValue2(val2, series.numberFormat),
88853
- fontSize: 7,
88939
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
88854
88940
  fill: "#334155",
88855
88941
  textAnchor: "middle"
88856
88942
  });
@@ -88895,7 +88981,7 @@ function buildScatter(chartData, layout, range) {
88895
88981
  x: dot.cx,
88896
88982
  y: dot.cy - 6,
88897
88983
  text: formatAxisValue2(val2, series.numberFormat),
88898
- fontSize: 7,
88984
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
88899
88985
  fill: "#334155",
88900
88986
  textAnchor: "middle"
88901
88987
  });
@@ -88942,7 +89028,7 @@ function buildBubbles(chartData, layout, range) {
88942
89028
  x: dot.cx,
88943
89029
  y: dot.cy - 10,
88944
89030
  text: formatAxisValue2(val2, series.numberFormat),
88945
- fontSize: 7,
89031
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
88946
89032
  fill: "#334155",
88947
89033
  textAnchor: "middle"
88948
89034
  });
@@ -89092,7 +89178,8 @@ function buildMultiLevelCategoryLabels(categoryLabels, categoryLevels, sourceInd
89092
89178
  const skip = Math.max(1, axis?.tickLabelSkip ?? 1);
89093
89179
  const textAnchor = axis?.labelAlignment === "l" ? "start" : axis?.labelAlignment === "r" ? "end" : "middle";
89094
89180
  const direction = labelsAbove ? -1 : 1;
89095
- const bandHeight = Math.max(axis?.fontSize ?? 8, 8) + 4;
89181
+ const fontPx = axis?.fontSize !== void 0 ? chartFontPx(axis.fontSize) : DEFAULT_CHART_TEXT_PX;
89182
+ const bandHeight = Math.max(fontPx, 8) + 4;
89096
89183
  return levels.flatMap((level, levelIndex) => {
89097
89184
  const values = sourceIndices2.map((sourceIndex) => level[sourceIndex] ?? "");
89098
89185
  return groupedLabels(values).flatMap((group2) => {
@@ -89827,7 +89914,7 @@ function computeTrendlinePrimitives(chartData, catCount, layout, range, mode = "
89827
89914
  x: last.x,
89828
89915
  y: last.y - 6,
89829
89916
  text: labelParts.join(" "),
89830
- fontSize: 7,
89917
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
89831
89918
  fill: strokeColor,
89832
89919
  textAnchor: "end"
89833
89920
  };
@@ -89844,6 +89931,7 @@ function computeAxisTitlePrimitives(chartData, layout) {
89844
89931
  if (!axes || axes.length === 0) {
89845
89932
  return out;
89846
89933
  }
89934
+ const titleFontPx = (axis) => axis.fontSize !== void 0 ? chartFontPx(axis.fontSize) : DEFAULT_CHART_TEXT_PX;
89847
89935
  const catAxis = axes.find((a) => a.axisType === "catAx" && a.axPos !== "r" && a.titleText);
89848
89936
  if (catAxis?.titleText) {
89849
89937
  const xTitle = {
@@ -89851,7 +89939,7 @@ function computeAxisTitlePrimitives(chartData, layout) {
89851
89939
  x: layout.plotLeft + layout.plotWidth / 2,
89852
89940
  y: layout.plotBottom + 22,
89853
89941
  text: catAxis.titleText,
89854
- fontSize: 9,
89942
+ fontSize: titleFontPx(catAxis),
89855
89943
  fill: AXIS_TITLE_COLOR,
89856
89944
  textAnchor: "middle",
89857
89945
  fontWeight: "bold"
@@ -89867,7 +89955,7 @@ function computeAxisTitlePrimitives(chartData, layout) {
89867
89955
  x: yx,
89868
89956
  y: yy,
89869
89957
  text: valAxis.titleText,
89870
- fontSize: 9,
89958
+ fontSize: titleFontPx(valAxis),
89871
89959
  fill: AXIS_TITLE_COLOR,
89872
89960
  textAnchor: "middle",
89873
89961
  fontWeight: "bold",
@@ -90352,7 +90440,7 @@ function buildComboViewModel(element, chartData, categoryLabels) {
90352
90440
  x: point.x,
90353
90441
  y: point.y - 7,
90354
90442
  text: formatAxisValue2(point.value, series.numberFormat),
90355
- fontSize: 7,
90443
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
90356
90444
  fill: "#334155",
90357
90445
  textAnchor: "middle"
90358
90446
  });
@@ -90407,7 +90495,7 @@ function appendBarLabels(series, chartData, layout, catCount, range, sourceIndic
90407
90495
  x: xPositions?.[displayIndex] ?? layout.plotLeft + groupWidth * displayIndex + offset + barWidth / 2,
90408
90496
  y: value >= 0 ? Math.min(zeroY, valueY) - 4 : Math.max(zeroY, valueY) + 10,
90409
90497
  text: formatAxisValue2(value, series.numberFormat),
90410
- fontSize: 7,
90498
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
90411
90499
  fill: "#334155",
90412
90500
  textAnchor: "middle"
90413
90501
  });
@@ -90508,7 +90596,7 @@ function buildStockViewModel(element, chartData, categoryLabels) {
90508
90596
  x: cx,
90509
90597
  y: highY - 4,
90510
90598
  text: formatAxisValue2(close),
90511
- fontSize: 7,
90599
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
90512
90600
  fill: "#334155",
90513
90601
  textAnchor: "middle"
90514
90602
  });
@@ -90953,7 +91041,7 @@ function buildHistogramViewModel(element, chartData, categoryLabels) {
90953
91041
  x: bar.x + bar.w / 2,
90954
91042
  y: bar.y - 4,
90955
91043
  text: formatAxisValue2(values[index]),
90956
- fontSize: 7,
91044
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
90957
91045
  fill: DATA_LABEL_COLOR,
90958
91046
  textAnchor: "middle"
90959
91047
  })) : [];
@@ -91262,8 +91350,8 @@ function sliceAngles(values) {
91262
91350
  });
91263
91351
  }
91264
91352
  function computeOfPieGeom(element, secondPieSize) {
91265
- const svgWidth = Math.max(element.width, 320);
91266
- const svgHeight = Math.max(element.height, 180);
91353
+ const svgWidth = Math.max(element.width, 1);
91354
+ const svgHeight = Math.max(element.height, 1);
91267
91355
  const primaryR = Math.max(Math.min(svgWidth * 0.28, svgHeight * 0.4), 4);
91268
91356
  const secScale = Math.min(Math.max(secondPieSize / 100, 0.3), 1.4);
91269
91357
  return {
@@ -91283,7 +91371,7 @@ function sliceLabel(x, y, value) {
91283
91371
  x,
91284
91372
  y,
91285
91373
  text: formatAxisValue2(value),
91286
- fontSize: 8,
91374
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
91287
91375
  fill: "#ffffff",
91288
91376
  textAnchor: "middle",
91289
91377
  fontWeight: "bold",
@@ -91458,7 +91546,7 @@ function buildPieDataLabels(params) {
91458
91546
  x: slice.labelX,
91459
91547
  y: slice.labelY,
91460
91548
  text: formatAxisValue2(val2, numberFormat),
91461
- fontSize: 8,
91549
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
91462
91550
  fill: "#ffffff",
91463
91551
  textAnchor: "middle",
91464
91552
  fontWeight: "bold",
@@ -91478,7 +91566,7 @@ function buildPieDataLabels(params) {
91478
91566
  x: labelX + (cos >= 0 ? 2 : -2),
91479
91567
  y: labelY,
91480
91568
  text: formatAxisValue2(val2, numberFormat),
91481
- fontSize: 8,
91569
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
91482
91570
  fill: "#334155",
91483
91571
  textAnchor: anchor,
91484
91572
  dominantBaseline: "central"
@@ -91902,7 +91990,8 @@ function textPrimitives(shape, box) {
91902
91990
  if (!shape.paragraphs || shape.paragraphs.length === 0) {
91903
91991
  return [];
91904
91992
  }
91905
- const lineH = 12;
91993
+ const fontPxOf = (para) => para.fontSize !== void 0 ? chartFontPx(para.fontSize) : DEFAULT_CHART_TEXT_PX;
91994
+ const lineH = Math.max(12, ...shape.paragraphs.map((para) => fontPxOf(para) * 1.2));
91906
91995
  const totalH = shape.paragraphs.length * lineH;
91907
91996
  let cursorY = box.y + Math.max((box.h - totalH) / 2, 0) + lineH * 0.75;
91908
91997
  const out = [];
@@ -91919,7 +92008,7 @@ function textPrimitives(shape, box) {
91919
92008
  x: tx,
91920
92009
  y: cursorY,
91921
92010
  text: para.text,
91922
- fontSize: para.fontSize ?? 9,
92011
+ fontSize: fontPxOf(para),
91923
92012
  fill: para.color ?? "#1e293b",
91924
92013
  textAnchor: anchor,
91925
92014
  fontWeight: para.bold ? "bold" : "normal"
@@ -92115,7 +92204,7 @@ function buildWaterfallViewModel(element, chartData, categoryLabels) {
92115
92204
  x: x + barWidth / 2,
92116
92205
  y: y - 4,
92117
92206
  text: formatAxisValue2(value),
92118
- fontSize: 7,
92207
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
92119
92208
  fill: "#334155",
92120
92209
  textAnchor: "middle"
92121
92210
  });
@@ -92437,8 +92526,8 @@ function regionViewBounds(viewedRegionType, regionValues) {
92437
92526
  };
92438
92527
  }
92439
92528
  function buildRegionMapViewModel(element, chartData, categoryLabels) {
92440
- const svgWidth = Math.max(element.width, 320);
92441
- const svgHeight = Math.max(element.height, 200);
92529
+ const svgWidth = Math.max(element.width, 1);
92530
+ const svgHeight = Math.max(element.height, 1);
92442
92531
  const categories = categoryLabels.length > 0 ? categoryLabels : chartData.categories;
92443
92532
  const series = chartData.series[0];
92444
92533
  const options = series?.regionMapOptions;
@@ -92800,8 +92889,8 @@ function formatAxisValue2(val2, formatCode) {
92800
92889
  return val2.toFixed(1);
92801
92890
  }
92802
92891
  function computePlotLayout(elementWidth, elementHeight, chartData, hasAxes, options) {
92803
- const svgWidth = Math.max(320, elementWidth);
92804
- const svgHeight = Math.max(180, elementHeight);
92892
+ const svgWidth = Math.max(1, elementWidth);
92893
+ const svgHeight = Math.max(1, elementHeight);
92805
92894
  let plotLeft = hasAxes ? 48 : 8;
92806
92895
  let plotTop = 8;
92807
92896
  let plotRight = svgWidth - 8;
@@ -92881,7 +92970,7 @@ function buildGridlinesAndLabels(range, layout) {
92881
92970
  x: layout.plotLeft - 4,
92882
92971
  y,
92883
92972
  text: formatAxisValue2(val2),
92884
- fontSize: 8,
92973
+ fontSize: DEFAULT_CHART_TEXT_PX,
92885
92974
  fill: AXIS_LABEL_COLOR,
92886
92975
  textAnchor: "end",
92887
92976
  dominantBaseline: "central"
@@ -92913,7 +93002,7 @@ function buildCategoryLabels(categoryLabels, layout, catSpacing) {
92913
93002
  x,
92914
93003
  y: layout.plotBottom + 12,
92915
93004
  text: label,
92916
- fontSize: 8,
93005
+ fontSize: DEFAULT_CHART_TEXT_PX,
92917
93006
  fill: AXIS_LABEL_COLOR,
92918
93007
  textAnchor: "middle"
92919
93008
  };
@@ -93258,8 +93347,8 @@ function buildFlatViewModel(element, chartData, categoryLabels, kind) {
93258
93347
  return buildCartesianViewModel(element, chartData, categoryLabels, kind);
93259
93348
  }
93260
93349
  function buildFallbackViewModel(width, height, label) {
93261
- const svgWidth = Math.max(width, 100);
93262
- const svgHeight = Math.max(height, 60);
93350
+ const svgWidth = Math.max(width, 1);
93351
+ const svgHeight = Math.max(height, 1);
93263
93352
  return {
93264
93353
  svgWidth,
93265
93354
  svgHeight,
@@ -93413,7 +93502,7 @@ function buildRadarViewModel(element, chartData, categoryLabels) {
93413
93502
  x: cx + labelR * Math.cos(angle),
93414
93503
  y: cy + labelR * Math.sin(angle),
93415
93504
  text: categoryLabels[i] ?? "",
93416
- fontSize: 8,
93505
+ fontSize: DEFAULT_CHART_TEXT_PX,
93417
93506
  fill: RADAR_LABEL_COLOR,
93418
93507
  textAnchor: "middle",
93419
93508
  dominantBaseline: "central"
@@ -93457,7 +93546,7 @@ function buildRadarViewModel(element, chartData, categoryLabels) {
93457
93546
  x: p.x,
93458
93547
  y: p.y - 8,
93459
93548
  text: formatAxisValue2(val2, series.numberFormat),
93460
- fontSize: 7,
93549
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
93461
93550
  fill: "#334155",
93462
93551
  textAnchor: "middle"
93463
93552
  });
@@ -102352,6 +102441,10 @@ var SCALAR_ELEMENT_KEYS = /* @__PURE__ */ new Set([
102352
102441
  "cropTop",
102353
102442
  "cropRight",
102354
102443
  "cropBottom",
102444
+ "fillRectLeft",
102445
+ "fillRectTop",
102446
+ "fillRectRight",
102447
+ "fillRectBottom",
102355
102448
  "tileOffsetX",
102356
102449
  "tileOffsetY",
102357
102450
  "tileScaleX",
@@ -103966,9 +104059,16 @@ var CINEMATIC_TRANSITION_KEYFRAMES = `
103966
104059
  /* \u2500\u2500 Airplane (fly off like a paper plane) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
103967
104060
  @keyframes pptx-tr-airplane-out { 0% { transform: perspective(1200px) translate3d(0, 0, 0) rotate3d(1, -1, 0, 0deg) scale(1); opacity: 1; } 40% { transform: perspective(1200px) translate3d(10%, -10%, 0) rotate3d(1, -1, 0, 25deg) scale(.85); opacity: 1; } 100% { transform: perspective(1200px) translate3d(150%, -70%, 0) rotate3d(1, -1, 1, 70deg) scale(.05); opacity: 0; } }
103968
104061
 
103969
- /* \u2500\u2500 Origami (fold out / unfold in) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
103970
- @keyframes pptx-tr-origami-out { from { transform: perspective(1600px) rotateY(0deg) scaleX(1); transform-origin: left center; opacity: 1; } to { transform: perspective(1600px) rotateY(75deg) scaleX(.25); transform-origin: left center; opacity: .2; } }
103971
- @keyframes pptx-tr-origami-in { from { transform: perspective(1600px) rotateY(-75deg) scaleX(.25); transform-origin: right center; opacity: .2; } to { transform: perspective(1600px) rotateY(0deg) scaleX(1); transform-origin: right center; opacity: 1; } }
104062
+ /* \u2500\u2500 Origami (fold the sheet over its top edge; the next unfolds up) \u2500\u2500
104063
+ The old single-phase rotateY + scaleX compressed the outgoing slide into a
104064
+ narrow vertical sliver for most of the (3+ second) duration, which read as
104065
+ "just a grey line" instead of paper folding (issue #132). The fold is now
104066
+ hinged like a real sheet: the outgoing slide creases over its TOP edge,
104067
+ dims as it tips through edge-on, and tumbles away shrinking; the incoming
104068
+ slide lies folded at its BOTTOM edge and rises into place. The edge-on
104069
+ moment is brief and already mid-fade, so no line artifact survives. */
104070
+ @keyframes pptx-tr-origami-out { 0% { transform: perspective(1400px) rotateX(0deg) translateY(0) scale(1); transform-origin: top center; opacity: 1; filter: brightness(1); } 45% { transform: perspective(1400px) rotateX(-52deg) translateY(2%) scale(.96); transform-origin: top center; opacity: 1; filter: brightness(.82); } 70% { transform: perspective(1400px) rotateX(-84deg) translateY(8%) scale(.88); transform-origin: top center; opacity: .8; filter: brightness(.68); } 100% { transform: perspective(1400px) rotateX(-125deg) translateY(30%) scale(.68); transform-origin: top center; opacity: 0; filter: brightness(.55); } }
104071
+ @keyframes pptx-tr-origami-in { 0% { transform: perspective(1400px) rotateX(62deg) scale(.94); transform-origin: bottom center; opacity: 0; filter: brightness(.7); } 30% { transform: perspective(1400px) rotateX(62deg) scale(.94); transform-origin: bottom center; opacity: .65; filter: brightness(.75); } 100% { transform: perspective(1400px) rotateX(0deg) scale(1); transform-origin: bottom center; opacity: 1; filter: brightness(1); } }
103972
104072
  `;
103973
104073
  var CORE_SLIDE_TRANSITION_KEYFRAMES = `
103974
104074
  /* \u2500\u2500 Fade \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
@@ -110752,8 +110852,14 @@ function attachPresentationVisibilityPause(options = {}) {
110752
110852
  }
110753
110853
  const root = options.root ?? document;
110754
110854
  let pausedMedia = [];
110755
- const onVisibilityChange = () => {
110756
- if (document.visibilityState === "hidden") {
110855
+ let suspended = false;
110856
+ const update = () => {
110857
+ const shouldSuspend = document.visibilityState === "hidden" || !document.hasFocus();
110858
+ if (shouldSuspend === suspended) {
110859
+ return;
110860
+ }
110861
+ suspended = shouldSuspend;
110862
+ if (shouldSuspend) {
110757
110863
  pausedMedia = [];
110758
110864
  for (const media of root.querySelectorAll("audio, video")) {
110759
110865
  if (!media.paused && !media.ended) {
@@ -110775,9 +110881,13 @@ function attachPresentationVisibilityPause(options = {}) {
110775
110881
  resumeAllPersistentAudio();
110776
110882
  options.onVisible?.();
110777
110883
  };
110778
- document.addEventListener("visibilitychange", onVisibilityChange);
110884
+ document.addEventListener("visibilitychange", update);
110885
+ window.addEventListener("blur", update);
110886
+ window.addEventListener("focus", update);
110779
110887
  return () => {
110780
- document.removeEventListener("visibilitychange", onVisibilityChange);
110888
+ document.removeEventListener("visibilitychange", update);
110889
+ window.removeEventListener("blur", update);
110890
+ window.removeEventListener("focus", update);
110781
110891
  };
110782
110892
  }
110783
110893
  function buildSummaryZoomView(element, lookup) {
Binary file
Binary file