pptx-react-viewer 2.16.5 → 2.16.7

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 (109) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{AiChatPanel-6B26AZGA.mjs → AiChatPanel-2YYL6AKX.mjs} +3 -9
  3. package/dist/AiChatPanel-2YYL6AKX.mjs.br +0 -0
  4. package/dist/AiChatPanel-2YYL6AKX.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-FGEIZQCD.js → AiChatPanel-XSXMU2Q5.js} +23 -29
  6. package/dist/AiChatPanel-XSXMU2Q5.js.br +0 -0
  7. package/dist/AiChatPanel-XSXMU2Q5.js.gz +0 -0
  8. package/dist/{Model3DScene-2JX5CUPK.js → Model3DScene-36UJZLCO.js} +2 -2
  9. package/dist/Model3DScene-36UJZLCO.js.br +0 -0
  10. package/dist/Model3DScene-36UJZLCO.js.gz +0 -0
  11. package/dist/{Model3DScene-NKYNKUPP.mjs → Model3DScene-NVFP3JBJ.mjs} +1 -1
  12. package/dist/Model3DScene-NVFP3JBJ.mjs.br +0 -0
  13. package/dist/Model3DScene-NVFP3JBJ.mjs.gz +0 -0
  14. package/dist/PowerPointViewer-Du7u4INi.d.ts.map +1 -1
  15. package/dist/{SurfaceChart3DScene-TTL2FTEG.mjs → SurfaceChart3DScene-BMFEDBLF.mjs} +1 -1
  16. package/dist/{SurfaceChart3DScene-TTL2FTEG.mjs.br → SurfaceChart3DScene-BMFEDBLF.mjs.br} +0 -0
  17. package/dist/SurfaceChart3DScene-BMFEDBLF.mjs.gz +0 -0
  18. package/dist/{SurfaceChart3DScene-AE5SKG7U.js → SurfaceChart3DScene-W6I255VU.js} +2 -2
  19. package/dist/SurfaceChart3DScene-W6I255VU.js.br +0 -0
  20. package/dist/SurfaceChart3DScene-W6I255VU.js.gz +0 -0
  21. package/dist/{chunk-LCWZ4TD4.js → chunk-77TMRPDU.js} +2144 -1527
  22. package/dist/chunk-77TMRPDU.js.br +0 -0
  23. package/dist/chunk-77TMRPDU.js.gz +0 -0
  24. package/dist/{chunk-247XH4EN.mjs → chunk-D5TAZ5NL.mjs} +1214 -53
  25. package/dist/chunk-D5TAZ5NL.mjs.br +0 -0
  26. package/dist/chunk-D5TAZ5NL.mjs.gz +0 -0
  27. package/dist/{chunk-EFZ4K6V5.mjs → chunk-J56KVWI5.mjs} +1132 -515
  28. package/dist/chunk-J56KVWI5.mjs.br +0 -0
  29. package/dist/chunk-J56KVWI5.mjs.gz +0 -0
  30. package/dist/{chunk-5YGTUHNO.mjs → chunk-J5V7UCD2.mjs} +15 -1403
  31. package/dist/chunk-J5V7UCD2.mjs.br +0 -0
  32. package/dist/chunk-J5V7UCD2.mjs.gz +0 -0
  33. package/dist/{chunk-VZI35LEF.js → chunk-JSJZWA43.js} +9 -3
  34. package/dist/chunk-JSJZWA43.js.br +0 -0
  35. package/dist/chunk-JSJZWA43.js.gz +0 -0
  36. package/dist/{chunk-Y6W5LGTR.mjs → chunk-KVNZGR3L.mjs} +14 -93
  37. package/dist/chunk-KVNZGR3L.mjs.br +0 -0
  38. package/dist/chunk-KVNZGR3L.mjs.gz +0 -0
  39. package/dist/{chunk-P65VL2I6.js → chunk-NFJLF7TX.js} +258 -1676
  40. package/dist/chunk-NFJLF7TX.js.br +0 -0
  41. package/dist/chunk-NFJLF7TX.js.gz +0 -0
  42. package/dist/{chunk-MZN2UIYT.mjs → chunk-QNKJUUKD.mjs} +7 -2
  43. package/dist/chunk-QNKJUUKD.mjs.br +0 -0
  44. package/dist/chunk-QNKJUUKD.mjs.gz +0 -0
  45. package/dist/{chunk-UNWU6D2M.js → chunk-S7HPAJRX.js} +350 -429
  46. package/dist/chunk-S7HPAJRX.js.br +0 -0
  47. package/dist/chunk-S7HPAJRX.js.gz +0 -0
  48. package/dist/{chunk-6QGTRYSC.js → chunk-USAJMMF2.js} +1248 -59
  49. package/dist/chunk-USAJMMF2.js.br +0 -0
  50. package/dist/chunk-USAJMMF2.js.gz +0 -0
  51. package/dist/index.d.ts +14 -0
  52. package/dist/index.js +39 -39
  53. package/dist/index.js.br +0 -0
  54. package/dist/index.js.gz +0 -0
  55. package/dist/index.mjs +5 -5
  56. package/dist/index.mjs.br +0 -0
  57. package/dist/index.mjs.gz +0 -0
  58. package/dist/internals.d.ts +37 -7
  59. package/dist/internals.d.ts.map +1 -1
  60. package/dist/internals.js +78 -78
  61. package/dist/internals.js.br +5 -4
  62. package/dist/internals.js.gz +0 -0
  63. package/dist/internals.mjs +3 -3
  64. package/dist/internals.mjs.br +0 -0
  65. package/dist/internals.mjs.gz +0 -0
  66. package/dist/pptx-viewer.css +1 -1
  67. package/dist/pptx-viewer.css.br +0 -0
  68. package/dist/pptx-viewer.css.gz +0 -0
  69. package/dist/{useViewerBuildingBlocks-CBZrHhxl.d.ts → useViewerBuildingBlocks-Xddn6SFj.d.ts} +15 -1
  70. package/dist/useViewerBuildingBlocks-Xddn6SFj.d.ts.map +1 -0
  71. package/dist/viewer/index.js +26 -26
  72. package/dist/viewer/index.js.br +0 -0
  73. package/dist/viewer/index.js.gz +0 -0
  74. package/dist/viewer/index.mjs +5 -5
  75. package/dist/viewer/index.mjs.br +0 -0
  76. package/dist/viewer/index.mjs.gz +0 -0
  77. package/package.json +1 -1
  78. package/dist/AiChatPanel-6B26AZGA.mjs.br +0 -0
  79. package/dist/AiChatPanel-6B26AZGA.mjs.gz +0 -0
  80. package/dist/AiChatPanel-FGEIZQCD.js.br +0 -0
  81. package/dist/AiChatPanel-FGEIZQCD.js.gz +0 -0
  82. package/dist/Model3DScene-2JX5CUPK.js.br +0 -0
  83. package/dist/Model3DScene-2JX5CUPK.js.gz +0 -0
  84. package/dist/Model3DScene-NKYNKUPP.mjs.br +0 -0
  85. package/dist/Model3DScene-NKYNKUPP.mjs.gz +0 -0
  86. package/dist/SurfaceChart3DScene-AE5SKG7U.js.br +0 -0
  87. package/dist/SurfaceChart3DScene-AE5SKG7U.js.gz +0 -0
  88. package/dist/SurfaceChart3DScene-TTL2FTEG.mjs.gz +0 -0
  89. package/dist/chunk-247XH4EN.mjs.br +0 -0
  90. package/dist/chunk-247XH4EN.mjs.gz +0 -0
  91. package/dist/chunk-5YGTUHNO.mjs.br +0 -0
  92. package/dist/chunk-5YGTUHNO.mjs.gz +0 -0
  93. package/dist/chunk-6QGTRYSC.js.br +0 -0
  94. package/dist/chunk-6QGTRYSC.js.gz +0 -0
  95. package/dist/chunk-EFZ4K6V5.mjs.br +0 -0
  96. package/dist/chunk-EFZ4K6V5.mjs.gz +0 -0
  97. package/dist/chunk-LCWZ4TD4.js.br +0 -0
  98. package/dist/chunk-LCWZ4TD4.js.gz +0 -0
  99. package/dist/chunk-MZN2UIYT.mjs.br +0 -0
  100. package/dist/chunk-MZN2UIYT.mjs.gz +0 -0
  101. package/dist/chunk-P65VL2I6.js.br +0 -0
  102. package/dist/chunk-P65VL2I6.js.gz +0 -0
  103. package/dist/chunk-UNWU6D2M.js.br +0 -0
  104. package/dist/chunk-UNWU6D2M.js.gz +0 -0
  105. package/dist/chunk-VZI35LEF.js.br +0 -0
  106. package/dist/chunk-VZI35LEF.js.gz +0 -0
  107. package/dist/chunk-Y6W5LGTR.mjs.br +0 -0
  108. package/dist/chunk-Y6W5LGTR.mjs.gz +0 -0
  109. package/dist/useViewerBuildingBlocks-CBZrHhxl.d.ts.map +0 -1
@@ -30535,6 +30535,52 @@ function getPresetShapeClipPath(presetName) {
30535
30535
  }
30536
30536
  return PRESET_SHAPE_CLIP_PATHS[presetName.toLowerCase()];
30537
30537
  }
30538
+ function getShapeType(shapeType) {
30539
+ if (!shapeType) {
30540
+ return "rect";
30541
+ }
30542
+ const normalized = shapeType.toLowerCase();
30543
+ if (normalized === "rect") {
30544
+ return "rect";
30545
+ }
30546
+ if (normalized === "roundrect") {
30547
+ return "roundRect";
30548
+ }
30549
+ if (normalized === "ellipse" || normalized === "oval") {
30550
+ return "ellipse";
30551
+ }
30552
+ if (normalized === "cylinder" || normalized === "can") {
30553
+ return "cylinder";
30554
+ }
30555
+ if (normalized === "triangle") {
30556
+ return "triangle";
30557
+ }
30558
+ if (normalized === "diamond") {
30559
+ return "diamond";
30560
+ }
30561
+ if (normalized === "line" || normalized === "lineinv") {
30562
+ return "line";
30563
+ }
30564
+ if (normalized === "rtarrow" || normalized === "rightarrow") {
30565
+ return "rtArrow";
30566
+ }
30567
+ if (normalized === "leftarrow") {
30568
+ return "leftArrow";
30569
+ }
30570
+ if (normalized === "uparrow") {
30571
+ return "upArrow";
30572
+ }
30573
+ if (normalized === "downarrow") {
30574
+ return "downArrow";
30575
+ }
30576
+ if (normalized.includes("connector")) {
30577
+ return "connector";
30578
+ }
30579
+ if (PRESET_SHAPE_CLIP_PATHS[normalized] !== void 0) {
30580
+ return "rect";
30581
+ }
30582
+ return "rect";
30583
+ }
30538
30584
  function getShapeClipPath(shapeType) {
30539
30585
  return getPresetShapeClipPath(shapeType);
30540
30586
  }
@@ -100708,6 +100754,29 @@ function apply3dEffects(base, scene3d, shape3d, fillColorFallback) {
100708
100754
  base.backgroundImage = base.backgroundImage ? `${lightRig.backgroundImage}, ${base.backgroundImage}` : lightRig.backgroundImage;
100709
100755
  }
100710
100756
  }
100757
+ function edgesFromSection(borders, regionTop, regionBottom, regionLeft, regionRight) {
100758
+ if (!borders) {
100759
+ return void 0;
100760
+ }
100761
+ return {
100762
+ top: regionTop ? borders.top ?? borders.insideH : borders.insideH,
100763
+ bottom: regionBottom ? borders.bottom ?? borders.insideH : borders.insideH,
100764
+ left: regionLeft ? borders.left ?? borders.insideV : borders.insideV,
100765
+ right: regionRight ? borders.right ?? borders.insideV : borders.insideV
100766
+ };
100767
+ }
100768
+ function borderToCss(border, resolve2) {
100769
+ if (!border) {
100770
+ return void 0;
100771
+ }
100772
+ if (border.noFill) {
100773
+ return "none";
100774
+ }
100775
+ const width = border.width ?? 1;
100776
+ const dash = ooxmlDashToCssBorderStyle(border.dash);
100777
+ const color2 = border.color ?? resolve2(border.fill) ?? "#000000";
100778
+ return `${width}px ${dash} ${color2}`;
100779
+ }
100711
100780
  function collectSections(entry2, tableData, pos2) {
100712
100781
  const { rowIndex, cellIndex, rowCount, columnCount } = pos2;
100713
100782
  const isTop = rowIndex === 0;
@@ -100759,6 +100828,51 @@ function collectSections(entry2, tableData, pos2) {
100759
100828
  }
100760
100829
  return sections2;
100761
100830
  }
100831
+ function collectLayers(entry2, tableData, pos2) {
100832
+ const layers = [];
100833
+ for (const section of collectSections(entry2, tableData, pos2)) {
100834
+ layers.push(
100835
+ edgesFromSection(
100836
+ section.borders,
100837
+ section.regionTop,
100838
+ section.regionBottom,
100839
+ section.regionLeft,
100840
+ section.regionRight
100841
+ )
100842
+ );
100843
+ }
100844
+ return layers.filter((layer) => layer !== void 0);
100845
+ }
100846
+ function resolveCellBorderCss(entry2, tableData, pos2, resolve2) {
100847
+ if (!entry2) {
100848
+ return void 0;
100849
+ }
100850
+ const layers = collectLayers(entry2, tableData, pos2);
100851
+ if (layers.length === 0) {
100852
+ return void 0;
100853
+ }
100854
+ const pick = (edge) => {
100855
+ let winner;
100856
+ for (const layer of layers) {
100857
+ if (layer[edge]) {
100858
+ winner = layer[edge];
100859
+ }
100860
+ }
100861
+ return winner;
100862
+ };
100863
+ const css = {};
100864
+ let applied = false;
100865
+ const edges = ["top", "bottom", "left", "right"];
100866
+ for (const edge of edges) {
100867
+ const value = borderToCss(pick(edge), resolve2);
100868
+ if (value) {
100869
+ const key = `border${edge[0].toUpperCase()}${edge.slice(1)}`;
100870
+ css[key] = value;
100871
+ applied = true;
100872
+ }
100873
+ }
100874
+ return applied ? css : void 0;
100875
+ }
100762
100876
  function resolveStyleDiagonalBorders(entry2, tableData, pos2, resolve2) {
100763
100877
  if (!entry2) {
100764
100878
  return void 0;
@@ -100841,6 +100955,66 @@ function resolveStyleFillColor(fill, colorScheme) {
100841
100955
  }
100842
100956
  return applyTintShade(base, fill);
100843
100957
  }
100958
+ function clearBackground(css) {
100959
+ delete css.background;
100960
+ delete css.backgroundColor;
100961
+ delete css.backgroundImage;
100962
+ }
100963
+ function gradientCssFromFill(fill, colorScheme) {
100964
+ const gradient = fill.gradient;
100965
+ if (!gradient || gradient.stops.length === 0) {
100966
+ return void 0;
100967
+ }
100968
+ const shapeLike = {
100969
+ fillMode: "gradient",
100970
+ fillGradientType: gradient.type,
100971
+ fillGradientAngle: gradient.angle ?? 90,
100972
+ fillGradientStops: gradient.stops.map((stop) => ({
100973
+ color: resolveStyleFillColor(stop.fill, colorScheme) ?? stop.fill.color ?? "#000000",
100974
+ position: stop.position
100975
+ }))
100976
+ };
100977
+ return buildGradientCss(shapeLike);
100978
+ }
100979
+ function applyStyleFill(fill, colorScheme, css, fallback) {
100980
+ if (fill?.noFill) {
100981
+ clearBackground(css);
100982
+ css.backgroundColor = "transparent";
100983
+ return true;
100984
+ }
100985
+ if (fill?.gradient) {
100986
+ const gradientCss = gradientCssFromFill(fill, colorScheme);
100987
+ if (gradientCss) {
100988
+ clearBackground(css);
100989
+ css.background = gradientCss;
100990
+ return true;
100991
+ }
100992
+ }
100993
+ if (fill?.pattern) {
100994
+ const fg = normalizeHexColor(
100995
+ resolveStyleFillColor(fill.pattern.foreground, colorScheme),
100996
+ "#000000"
100997
+ );
100998
+ const bg = normalizeHexColor(
100999
+ resolveStyleFillColor(fill.pattern.background, colorScheme),
101000
+ "#ffffff"
101001
+ );
101002
+ const svg = getPatternSvg(fill.pattern.preset, fg, bg);
101003
+ clearBackground(css);
101004
+ if (svg) {
101005
+ css.backgroundImage = `url("data:image/svg+xml,${encodeURIComponent(svg)}")`;
101006
+ }
101007
+ css.backgroundColor = bg;
101008
+ return true;
101009
+ }
101010
+ const color2 = resolveStyleFillColor(fill, colorScheme) ?? fallback;
101011
+ if (color2) {
101012
+ clearBackground(css);
101013
+ css.backgroundColor = color2;
101014
+ return true;
101015
+ }
101016
+ return false;
101017
+ }
100844
101018
  function resolveFontRefIdx(idx, fontScheme) {
100845
101019
  if (!idx || !fontScheme) {
100846
101020
  return void 0;
@@ -100853,6 +101027,52 @@ function resolveFontRefIdx(idx, fontScheme) {
100853
101027
  }
100854
101028
  return void 0;
100855
101029
  }
101030
+ function applyStyleText(text2, colorScheme, css, fontScheme) {
101031
+ if (!text2) {
101032
+ return false;
101033
+ }
101034
+ let applied = false;
101035
+ if (text2.bold) {
101036
+ css.fontWeight = 700;
101037
+ applied = true;
101038
+ }
101039
+ if (text2.italic) {
101040
+ css.fontStyle = "italic";
101041
+ applied = true;
101042
+ }
101043
+ if (text2.underline) {
101044
+ css.textDecorationLine = "underline";
101045
+ applied = true;
101046
+ }
101047
+ if (text2.fontFace) {
101048
+ css.fontFamily = text2.fontFace;
101049
+ applied = true;
101050
+ } else {
101051
+ const refFont = resolveFontRefIdx(text2.fontRefIdx, fontScheme);
101052
+ if (refFont) {
101053
+ css.fontFamily = refFont;
101054
+ applied = true;
101055
+ }
101056
+ }
101057
+ if (text2.fontSchemeColor && colorScheme) {
101058
+ const base = colorScheme[text2.fontSchemeColor];
101059
+ if (base) {
101060
+ let color2 = base;
101061
+ if (text2.fontTint !== void 0 && text2.fontTint > 0) {
101062
+ color2 = tintColor(color2, text2.fontTint / 1e5);
101063
+ }
101064
+ if (text2.fontShade !== void 0 && text2.fontShade > 0) {
101065
+ color2 = shadeColor(color2, 1 - text2.fontShade / 1e5);
101066
+ }
101067
+ css.color = color2;
101068
+ applied = true;
101069
+ }
101070
+ } else if (text2.fontColor) {
101071
+ css.color = text2.fontColor;
101072
+ applied = true;
101073
+ }
101074
+ return applied;
101075
+ }
100856
101076
  var BEVEL_LIGHT_OFFSETS = {
100857
101077
  tl: { x: 1, y: 1 },
100858
101078
  t: { x: 0, y: 1 },
@@ -100871,6 +101091,23 @@ function cell3DBevelCss(cell3D) {
100871
101091
  const shadow = `inset ${-off.x * size}px ${-off.y * size}px ${size}px rgba(0,0,0,0.4)`;
100872
101092
  return { boxShadow: `${highlight}, ${shadow}` };
100873
101093
  }
101094
+ function cellPatternFillCss(style) {
101095
+ if (style.fillMode !== "pattern" || !style.patternFillPreset) {
101096
+ return null;
101097
+ }
101098
+ const fg = normalizeHexColor(style.patternFillForeground, "#000000");
101099
+ const bg = normalizeHexColor(style.patternFillBackground, "#ffffff");
101100
+ const svgMarkup = getPatternSvg(style.patternFillPreset, fg, bg);
101101
+ if (svgMarkup) {
101102
+ const encoded = encodeURIComponent(svgMarkup);
101103
+ return {
101104
+ backgroundImage: `url("data:image/svg+xml,${encoded}")`,
101105
+ backgroundColor: bg
101106
+ };
101107
+ }
101108
+ const fallback = style.patternFillBackground ?? style.backgroundColor;
101109
+ return fallback ? { backgroundColor: fallback } : null;
101110
+ }
100874
101111
  function resolveTableStyleEntry(tableStyleId, tableStyleMap) {
100875
101112
  if (!tableStyleId || !tableStyleMap) {
100876
101113
  return void 0;
@@ -100904,6 +101141,146 @@ function ooxmlDashToCssBorderStyle(dashVal) {
100904
101141
  return "solid";
100905
101142
  }
100906
101143
  }
101144
+ function cellStyleToCss(style) {
101145
+ if (!style) {
101146
+ return {};
101147
+ }
101148
+ const css = {};
101149
+ if (style.fontSize) {
101150
+ css.fontSize = `${style.fontSize}px`;
101151
+ }
101152
+ if (style.bold) {
101153
+ css.fontWeight = "bold";
101154
+ }
101155
+ if (style.italic) {
101156
+ css.fontStyle = "italic";
101157
+ }
101158
+ if (style.underline) {
101159
+ css.textDecorationLine = "underline";
101160
+ }
101161
+ if (style.color) {
101162
+ css.color = style.color;
101163
+ }
101164
+ if (style.gradientFillCss) {
101165
+ css.background = style.gradientFillCss;
101166
+ } else if (style.fillMode === "pattern") {
101167
+ const patternResult = cellPatternFillCss(style);
101168
+ if (patternResult) {
101169
+ if (patternResult.backgroundImage) {
101170
+ css.backgroundImage = patternResult.backgroundImage;
101171
+ }
101172
+ if (patternResult.backgroundColor) {
101173
+ css.backgroundColor = patternResult.backgroundColor;
101174
+ }
101175
+ } else {
101176
+ const fallback = style.patternFillBackground ?? style.backgroundColor;
101177
+ if (fallback) {
101178
+ css.backgroundColor = fallback;
101179
+ }
101180
+ }
101181
+ } else if (style.backgroundColor) {
101182
+ css.backgroundColor = style.backgroundColor;
101183
+ }
101184
+ if (style.align) {
101185
+ css.textAlign = style.align;
101186
+ } else if (style.anchorCtr) {
101187
+ css.textAlign = "center";
101188
+ }
101189
+ if (style.vAlign) {
101190
+ css.verticalAlign = style.vAlign;
101191
+ }
101192
+ if (style.horzOverflow === "clip") {
101193
+ css.overflowX = "hidden";
101194
+ } else if (style.horzOverflow === "overflow") {
101195
+ css.overflowX = "visible";
101196
+ }
101197
+ if (style.textDirection) {
101198
+ switch (style.textDirection) {
101199
+ case "vert":
101200
+ case "eaVert":
101201
+ case "wordArtVert":
101202
+ case "wordArtVertRtl":
101203
+ css.writingMode = "vertical-rl";
101204
+ break;
101205
+ case "vert270":
101206
+ case "mongolianVert":
101207
+ css.writingMode = "vertical-lr";
101208
+ break;
101209
+ }
101210
+ if (style.textDirection === "wordArtVert") {
101211
+ css.textOrientation = "upright";
101212
+ } else if (css.writingMode) {
101213
+ css.textOrientation = "mixed";
101214
+ }
101215
+ if (style.textDirection === "wordArtVertRtl") {
101216
+ css.direction = "rtl";
101217
+ }
101218
+ }
101219
+ const borderEdges = [
101220
+ {
101221
+ prefix: "borderTop",
101222
+ width: style.borderTopWidth,
101223
+ color: style.borderTopColor,
101224
+ dash: style.borderTopDash
101225
+ },
101226
+ {
101227
+ prefix: "borderBottom",
101228
+ width: style.borderBottomWidth,
101229
+ color: style.borderBottomColor,
101230
+ dash: style.borderBottomDash
101231
+ },
101232
+ {
101233
+ prefix: "borderLeft",
101234
+ width: style.borderLeftWidth,
101235
+ color: style.borderLeftColor,
101236
+ dash: style.borderLeftDash
101237
+ },
101238
+ {
101239
+ prefix: "borderRight",
101240
+ width: style.borderRightWidth,
101241
+ color: style.borderRightColor,
101242
+ dash: style.borderRightDash
101243
+ }
101244
+ ];
101245
+ for (const edge of borderEdges) {
101246
+ if (edge.width || edge.color) {
101247
+ const w = edge.width ?? 1;
101248
+ const c = edge.color ?? style.borderColor ?? "#000000";
101249
+ const s = ooxmlDashToCssBorderStyle(edge.dash);
101250
+ css[edge.prefix] = `${w}px ${s} ${c}`;
101251
+ }
101252
+ }
101253
+ if (style.marginLeft) {
101254
+ css.paddingLeft = `${style.marginLeft}px`;
101255
+ }
101256
+ if (style.marginRight) {
101257
+ css.paddingRight = `${style.marginRight}px`;
101258
+ }
101259
+ if (style.marginTop) {
101260
+ css.paddingTop = `${style.marginTop}px`;
101261
+ }
101262
+ if (style.marginBottom) {
101263
+ css.paddingBottom = `${style.marginBottom}px`;
101264
+ }
101265
+ const textShadowParts = [];
101266
+ if (style.textShadowColor) {
101267
+ const offX = style.textShadowOffsetX ?? 1;
101268
+ const offY = style.textShadowOffsetY ?? 1;
101269
+ const blur = style.textShadowBlur ?? 0;
101270
+ textShadowParts.push(`${offX}px ${offY}px ${blur}px ${style.textShadowColor}`);
101271
+ }
101272
+ if (style.textGlowColor) {
101273
+ const radius = style.textGlowRadius ?? 2;
101274
+ textShadowParts.push(`0px 0px ${radius}px ${style.textGlowColor}`);
101275
+ }
101276
+ if (textShadowParts.length > 0) {
101277
+ css.textShadow = textShadowParts.join(", ");
101278
+ }
101279
+ if (style.cell3D) {
101280
+ Object.assign(css, cell3DBevelCss(style.cell3D));
101281
+ }
101282
+ return css;
101283
+ }
100907
101284
  function getDiagonalBorders(style, styleDiagonals) {
100908
101285
  const cellHasDown = Boolean(style?.borderDiagDownColor && style?.borderDiagDownWidth);
100909
101286
  const cellHasUp = Boolean(style?.borderDiagUpColor && style?.borderDiagUpWidth);
@@ -100942,6 +101319,138 @@ function getCellDiagonalBorders(style, tableData, pos2, styleCtx) {
100942
101319
  }
100943
101320
  return getDiagonalBorders(style, styleDiagonals);
100944
101321
  }
101322
+ function getTableCellBandStyle(tableData, rowIndex, cellIndex, rowCount, columnCount, styleCtx) {
101323
+ if (!tableData) {
101324
+ return void 0;
101325
+ }
101326
+ const styleEntry = resolveTableStyleEntry(tableData.tableStyleId, styleCtx?.tableStyleMap);
101327
+ const colorScheme = styleCtx?.colorScheme;
101328
+ const fontScheme = styleCtx?.fontScheme;
101329
+ const resolveFill = (fill, fallback) => resolveStyleFillColor(fill, colorScheme) ?? fallback;
101330
+ const style = {};
101331
+ let applied = false;
101332
+ if (styleEntry?.wholeTblFill) {
101333
+ if (applyStyleFill(styleEntry.wholeTblFill, colorScheme, style, "")) {
101334
+ applied = true;
101335
+ }
101336
+ }
101337
+ if (applyStyleText(styleEntry?.wholeTblText, colorScheme, style, fontScheme)) {
101338
+ applied = true;
101339
+ }
101340
+ const bandStartRow = tableData.firstRowHeader ? 1 : 0;
101341
+ const bandEndRow = tableData.lastRow ? rowCount - 1 : rowCount;
101342
+ if (tableData.bandedRows && rowIndex >= bandStartRow && rowIndex < bandEndRow) {
101343
+ const bandIndex = rowIndex - bandStartRow;
101344
+ const rowCycle = Math.max(tableData.bandRowCycle ?? 1, 1);
101345
+ const bandGroup = Math.floor(bandIndex / rowCycle) % 2;
101346
+ if (bandGroup === 0) {
101347
+ applyStyleFill(styleEntry?.band1HFill, colorScheme, style, "rgba(217, 226, 243, 0.5)");
101348
+ applyStyleText(styleEntry?.band1HText, colorScheme, style, fontScheme);
101349
+ applied = true;
101350
+ } else if (styleEntry?.band2HFill) {
101351
+ if (applyStyleFill(styleEntry.band2HFill, colorScheme, style, "")) {
101352
+ applyStyleText(styleEntry.band2HText, colorScheme, style, fontScheme);
101353
+ applied = true;
101354
+ }
101355
+ }
101356
+ }
101357
+ if (tableData.bandedColumns) {
101358
+ const isFirstCol = tableData.firstCol;
101359
+ const isLastCol = tableData.lastCol;
101360
+ const colBandIndex = isFirstCol && cellIndex > 0 ? cellIndex - 1 : cellIndex;
101361
+ const skipCol = isFirstCol && cellIndex === 0 || isLastCol && cellIndex === columnCount - 1;
101362
+ if (!skipCol) {
101363
+ const colCycle = Math.max(tableData.bandColCycle ?? 1, 1);
101364
+ const colBandGroup = Math.floor(colBandIndex / colCycle) % 2;
101365
+ const canOverride = !style.backgroundColor || !tableData.bandedRows;
101366
+ if (colBandGroup === 0) {
101367
+ if (canOverride) {
101368
+ applyStyleFill(styleEntry?.band1VFill, colorScheme, style, "rgba(217, 226, 243, 0.35)");
101369
+ applyStyleText(styleEntry?.band1VText, colorScheme, style, fontScheme);
101370
+ applied = true;
101371
+ }
101372
+ } else if (styleEntry?.band2VFill && canOverride) {
101373
+ if (applyStyleFill(styleEntry.band2VFill, colorScheme, style, "")) {
101374
+ applyStyleText(styleEntry.band2VText, colorScheme, style, fontScheme);
101375
+ applied = true;
101376
+ }
101377
+ }
101378
+ }
101379
+ }
101380
+ if (tableData.firstRowHeader && rowIndex === 0) {
101381
+ style.fontWeight = 700;
101382
+ applyStyleFill(styleEntry?.firstRowFill, colorScheme, style, "rgba(68, 114, 196, 0.85)");
101383
+ if (!styleEntry?.firstRowFill?.noFill) {
101384
+ style.color = "#ffffff";
101385
+ }
101386
+ applyStyleText(styleEntry?.firstRowText, colorScheme, style, fontScheme);
101387
+ applied = true;
101388
+ }
101389
+ if (tableData.lastRow && rowIndex === rowCount - 1) {
101390
+ style.fontWeight = 700;
101391
+ if (styleEntry?.lastRowFill) {
101392
+ applyStyleFill(styleEntry.lastRowFill, colorScheme, style, "");
101393
+ }
101394
+ const borderColor = resolveFill(styleEntry?.firstRowFill, "rgba(68, 114, 196, 0.7)");
101395
+ style.borderTop = `2px solid ${borderColor}`;
101396
+ applyStyleText(styleEntry?.lastRowText, colorScheme, style, fontScheme);
101397
+ applied = true;
101398
+ }
101399
+ if (tableData.firstCol && cellIndex === 0) {
101400
+ style.fontWeight = 700;
101401
+ if (styleEntry?.firstColFill) {
101402
+ applyStyleFill(styleEntry.firstColFill, colorScheme, style, "");
101403
+ }
101404
+ applyStyleText(styleEntry?.firstColText, colorScheme, style, fontScheme);
101405
+ applied = true;
101406
+ }
101407
+ if (tableData.lastCol && cellIndex === columnCount - 1) {
101408
+ style.fontWeight = 700;
101409
+ if (styleEntry?.lastColFill) {
101410
+ applyStyleFill(styleEntry.lastColFill, colorScheme, style, "");
101411
+ }
101412
+ applyStyleText(styleEntry?.lastColText, colorScheme, style, fontScheme);
101413
+ applied = true;
101414
+ }
101415
+ if (styleEntry) {
101416
+ const atTop = Boolean(tableData.firstRowHeader) && rowIndex === 0;
101417
+ const atBottom = Boolean(tableData.lastRow) && rowIndex === rowCount - 1;
101418
+ const atLeft = Boolean(tableData.firstCol) && cellIndex === 0;
101419
+ const atRight = Boolean(tableData.lastCol) && cellIndex === columnCount - 1;
101420
+ let cornerFill;
101421
+ let cornerText = void 0;
101422
+ if (atTop && atLeft) {
101423
+ cornerFill = styleEntry.nwCellFill;
101424
+ cornerText = styleEntry.nwCellText;
101425
+ } else if (atTop && atRight) {
101426
+ cornerFill = styleEntry.neCellFill;
101427
+ cornerText = styleEntry.neCellText;
101428
+ } else if (atBottom && atLeft) {
101429
+ cornerFill = styleEntry.swCellFill;
101430
+ cornerText = styleEntry.swCellText;
101431
+ } else if (atBottom && atRight) {
101432
+ cornerFill = styleEntry.seCellFill;
101433
+ cornerText = styleEntry.seCellText;
101434
+ }
101435
+ if (cornerFill && applyStyleFill(cornerFill, colorScheme, style, "")) {
101436
+ applied = true;
101437
+ }
101438
+ if (applyStyleText(cornerText, colorScheme, style, fontScheme)) {
101439
+ applied = true;
101440
+ }
101441
+ }
101442
+ const borderCss = resolveCellBorderCss(
101443
+ styleEntry,
101444
+ tableData,
101445
+ { rowIndex, cellIndex, rowCount, columnCount },
101446
+ (fill) => resolveStyleFillColor(fill, colorScheme)
101447
+ );
101448
+ if (borderCss) {
101449
+ Object.assign(style, borderCss);
101450
+ applied = true;
101451
+ }
101452
+ return applied ? style : void 0;
101453
+ }
100945
101454
  function computeBoundingRect(cells) {
100946
101455
  if (cells.length === 0) {
100947
101456
  return void 0;
@@ -106926,6 +107435,167 @@ function resolvePictureBullet(info, baseFontSize) {
106926
107435
  ...info.imageRelId ? { imageRelId: info.imageRelId } : {}
106927
107436
  };
106928
107437
  }
107438
+ var DEBOUNCE_MS = 600;
107439
+ var EXPANDED_MAX_HEIGHT = 200;
107440
+ var PX_TO_PT = 0.75;
107441
+ var MAX_INDENT_LEVEL = 4;
107442
+ var INDENT_PX = 24;
107443
+ function escapeHtml2(value) {
107444
+ return value.replace(/&/gu, "&amp;").replace(/</gu, "&lt;").replace(/>/gu, "&gt;").replace(/"/gu, "&quot;").replace(/'/gu, "&#39;");
107445
+ }
107446
+ function createPlainNotesSegments(text2) {
107447
+ const lines = text2.split("\n");
107448
+ const segments = [];
107449
+ lines.forEach((line22, index) => {
107450
+ segments.push({ text: line22, style: {} });
107451
+ if (index < lines.length - 1) {
107452
+ segments.push({ text: "", style: {}, isParagraphBreak: true });
107453
+ }
107454
+ });
107455
+ if (segments.length === 0) {
107456
+ segments.push({ text: "", style: {} });
107457
+ }
107458
+ return segments;
107459
+ }
107460
+ function segmentsToPlainText(segments) {
107461
+ return segments.map((segment) => segment.isParagraphBreak ? "\n" : segment.text).join("");
107462
+ }
107463
+ function normalizeSegments(segments) {
107464
+ const cleaned = segments.filter((segment) => segment.isParagraphBreak || segment.text.length > 0);
107465
+ while (cleaned.length > 0 && cleaned[cleaned.length - 1].isParagraphBreak) {
107466
+ cleaned.pop();
107467
+ }
107468
+ return cleaned.length > 0 ? cleaned : [{ text: "", style: {} }];
107469
+ }
107470
+ function parsePt(value) {
107471
+ if (!value) {
107472
+ return void 0;
107473
+ }
107474
+ const numeric = Number.parseFloat(value);
107475
+ if (Number.isNaN(numeric) || !Number.isFinite(numeric)) {
107476
+ return void 0;
107477
+ }
107478
+ if (value.endsWith("px")) {
107479
+ return numeric * PX_TO_PT;
107480
+ }
107481
+ return numeric;
107482
+ }
107483
+ function buildParagraph(segments) {
107484
+ const first = segments[0];
107485
+ let bulletType = "none";
107486
+ let indentLevel = 0;
107487
+ if (first?.bulletInfo) {
107488
+ if (first.bulletInfo.char) {
107489
+ bulletType = "bullet";
107490
+ } else if (first.bulletInfo.autoNumType) {
107491
+ bulletType = "numbered";
107492
+ }
107493
+ }
107494
+ if (first?.style.paragraphMarginLeft) {
107495
+ indentLevel = Math.min(
107496
+ MAX_INDENT_LEVEL,
107497
+ Math.max(0, Math.round(first.style.paragraphMarginLeft / INDENT_PX))
107498
+ );
107499
+ }
107500
+ return {
107501
+ segments: segments.length > 0 ? segments : [{ text: "", style: {} }],
107502
+ bulletType,
107503
+ indentLevel
107504
+ };
107505
+ }
107506
+ function segmentsToParagraphs(segments) {
107507
+ const normalized = normalizeSegments(segments);
107508
+ const paragraphs = [];
107509
+ let current = [];
107510
+ for (const seg of normalized) {
107511
+ if (seg.isParagraphBreak) {
107512
+ paragraphs.push(buildParagraph(current));
107513
+ current = [];
107514
+ } else {
107515
+ current.push(seg);
107516
+ }
107517
+ }
107518
+ if (current.length > 0) {
107519
+ paragraphs.push(buildParagraph(current));
107520
+ }
107521
+ if (paragraphs.length === 0) {
107522
+ paragraphs.push({
107523
+ segments: [{ text: "", style: {} }],
107524
+ bulletType: "none",
107525
+ indentLevel: 0
107526
+ });
107527
+ }
107528
+ return paragraphs;
107529
+ }
107530
+ function paragraphsToSegments(paragraphs) {
107531
+ const result = [];
107532
+ let numberedCounter = 0;
107533
+ paragraphs.forEach((para, pIdx) => {
107534
+ if (para.bulletType === "numbered") {
107535
+ numberedCounter++;
107536
+ } else {
107537
+ numberedCounter = 0;
107538
+ }
107539
+ para.segments.forEach((seg, sIdx) => {
107540
+ const updated = { ...seg, style: { ...seg.style } };
107541
+ if (para.indentLevel > 0) {
107542
+ updated.style.paragraphMarginLeft = para.indentLevel * INDENT_PX;
107543
+ } else {
107544
+ delete updated.style.paragraphMarginLeft;
107545
+ }
107546
+ if (sIdx === 0) {
107547
+ if (para.bulletType === "bullet") {
107548
+ updated.bulletInfo = { char: "\u2022" };
107549
+ } else if (para.bulletType === "numbered") {
107550
+ updated.bulletInfo = {
107551
+ autoNumType: "arabicPeriod",
107552
+ paragraphIndex: numberedCounter - 1
107553
+ };
107554
+ } else {
107555
+ delete updated.bulletInfo;
107556
+ }
107557
+ }
107558
+ result.push(updated);
107559
+ });
107560
+ if (pIdx < paragraphs.length - 1) {
107561
+ result.push({ text: "", style: {}, isParagraphBreak: true });
107562
+ }
107563
+ });
107564
+ return result;
107565
+ }
107566
+ function getCurrentParagraphIndex(editorEl, segments) {
107567
+ const sel = window.getSelection();
107568
+ if (!sel || sel.rangeCount === 0) {
107569
+ return 0;
107570
+ }
107571
+ const range = sel.getRangeAt(0);
107572
+ let charOffset = 0;
107573
+ const walker = document.createTreeWalker(editorEl, NodeFilter.SHOW_TEXT);
107574
+ let node = walker.nextNode();
107575
+ while (node) {
107576
+ if (range.startContainer === node) {
107577
+ charOffset += range.startOffset;
107578
+ break;
107579
+ }
107580
+ charOffset += (node.textContent ?? "").length;
107581
+ node = walker.nextNode();
107582
+ }
107583
+ let paraIdx = 0;
107584
+ let pos2 = 0;
107585
+ for (const seg of segments) {
107586
+ if (seg.isParagraphBreak) {
107587
+ paraIdx++;
107588
+ pos2++;
107589
+ continue;
107590
+ }
107591
+ const segLen = seg.text.length;
107592
+ if (pos2 + segLen > charOffset) {
107593
+ return paraIdx;
107594
+ }
107595
+ pos2 += segLen;
107596
+ }
107597
+ return paraIdx;
107598
+ }
106929
107599
  var BLOCKED_PROTOCOLS = /* @__PURE__ */ new Set([
106930
107600
  `${"javascript"}:`,
106931
107601
  "data:",
@@ -106992,6 +107662,186 @@ function parsePpactionUrl(url) {
106992
107662
  }
106993
107663
  return { action: url, targetSlideIndex };
106994
107664
  }
107665
+ var CSS_VALUE_SAFE = /^[a-zA-Z0-9 _,.\-+#'%/]{1,100}$/u;
107666
+ function isCssValueSafe(value) {
107667
+ if (value === void 0 || value === null) {
107668
+ return false;
107669
+ }
107670
+ const str = String(value);
107671
+ return str.length > 0 && CSS_VALUE_SAFE.test(str);
107672
+ }
107673
+ function deriveStyleFromElement(element, inheritedStyle) {
107674
+ const style = { ...inheritedStyle };
107675
+ const tagName = element.tagName.toLowerCase();
107676
+ if (tagName === "b" || tagName === "strong") {
107677
+ style.bold = true;
107678
+ }
107679
+ if (tagName === "i" || tagName === "em") {
107680
+ style.italic = true;
107681
+ }
107682
+ if (tagName === "u") {
107683
+ style.underline = true;
107684
+ }
107685
+ if (tagName === "s" || tagName === "strike") {
107686
+ style.strikethrough = true;
107687
+ }
107688
+ if (tagName === "a") {
107689
+ const href = element.getAttribute("href");
107690
+ if (href) {
107691
+ style.hyperlink = href;
107692
+ }
107693
+ style.underline = true;
107694
+ style.color = "#4a9eff";
107695
+ }
107696
+ const inlineStyle = element.style;
107697
+ if (inlineStyle.fontWeight === "bold" || Number(inlineStyle.fontWeight) >= 600) {
107698
+ style.bold = true;
107699
+ }
107700
+ if (inlineStyle.fontStyle === "italic") {
107701
+ style.italic = true;
107702
+ }
107703
+ if (inlineStyle.textDecoration.includes("underline") || inlineStyle.textDecorationLine.includes("underline")) {
107704
+ style.underline = true;
107705
+ }
107706
+ if (inlineStyle.textDecoration.includes("line-through") || inlineStyle.textDecorationLine.includes("line-through")) {
107707
+ style.strikethrough = true;
107708
+ }
107709
+ if (inlineStyle.color) {
107710
+ style.color = inlineStyle.color;
107711
+ }
107712
+ const fontSizePt = parsePt(inlineStyle.fontSize);
107713
+ if (fontSizePt !== void 0) {
107714
+ style.fontSize = fontSizePt;
107715
+ }
107716
+ if (inlineStyle.fontFamily) {
107717
+ style.fontFamily = inlineStyle.fontFamily;
107718
+ }
107719
+ return style;
107720
+ }
107721
+ function parseSegmentsFromRichEditor(root) {
107722
+ const segments = [];
107723
+ const walk2 = (node, inheritedStyle) => {
107724
+ if (node.nodeType === Node.TEXT_NODE) {
107725
+ const value = node.textContent ?? "";
107726
+ if (value.length > 0) {
107727
+ segments.push({ text: value, style: { ...inheritedStyle } });
107728
+ }
107729
+ return;
107730
+ }
107731
+ if (!(node instanceof HTMLElement)) {
107732
+ return;
107733
+ }
107734
+ if (node.tagName.toLowerCase() === "br") {
107735
+ segments.push({ text: "", style: {}, isParagraphBreak: true });
107736
+ return;
107737
+ }
107738
+ const nextStyle = deriveStyleFromElement(node, inheritedStyle);
107739
+ const tag = node.tagName.toLowerCase();
107740
+ const isBlock = ["div", "p", "li"].includes(tag);
107741
+ let bulletInfo;
107742
+ let paraIndent = 0;
107743
+ if (isBlock && node.dataset.bulletType) {
107744
+ const bt = node.dataset.bulletType;
107745
+ if (bt === "bullet") {
107746
+ bulletInfo = { char: "\u2022" };
107747
+ } else if (bt === "numbered") {
107748
+ bulletInfo = { autoNumType: "arabicPeriod" };
107749
+ }
107750
+ }
107751
+ if (isBlock && node.dataset.indentLevel) {
107752
+ paraIndent = Number.parseInt(node.dataset.indentLevel, 10) || 0;
107753
+ }
107754
+ const segStartIdx = segments.length;
107755
+ node.childNodes.forEach((child22) => walk2(child22, nextStyle));
107756
+ if (isBlock && (bulletInfo || paraIndent > 0)) {
107757
+ for (let i = segStartIdx; i < segments.length; i++) {
107758
+ if (!segments[i].isParagraphBreak) {
107759
+ if (bulletInfo) {
107760
+ segments[i].bulletInfo = bulletInfo;
107761
+ }
107762
+ if (paraIndent > 0) {
107763
+ segments[i].style = {
107764
+ ...segments[i].style,
107765
+ paragraphMarginLeft: paraIndent * INDENT_PX
107766
+ };
107767
+ }
107768
+ break;
107769
+ }
107770
+ }
107771
+ }
107772
+ if (isBlock) {
107773
+ segments.push({ text: "", style: {}, isParagraphBreak: true });
107774
+ }
107775
+ };
107776
+ root.childNodes.forEach((child22) => walk2(child22, {}));
107777
+ return normalizeSegments(segments);
107778
+ }
107779
+ function segmentsToEditorHtml(segments) {
107780
+ const paragraphs = segmentsToParagraphs(segments);
107781
+ let numberedCounter = 0;
107782
+ return paragraphs.map((para) => {
107783
+ if (para.bulletType === "numbered") {
107784
+ numberedCounter++;
107785
+ } else {
107786
+ numberedCounter = 0;
107787
+ }
107788
+ const runsHtml = para.segments.map((segment) => {
107789
+ if (segment.isParagraphBreak) {
107790
+ return "";
107791
+ }
107792
+ const inlineStyles = [];
107793
+ if (segment.style.bold) {
107794
+ inlineStyles.push("font-weight:700");
107795
+ }
107796
+ if (segment.style.italic) {
107797
+ inlineStyles.push("font-style:italic");
107798
+ }
107799
+ if (segment.style.underline) {
107800
+ inlineStyles.push("text-decoration:underline");
107801
+ }
107802
+ if (segment.style.strikethrough) {
107803
+ inlineStyles.push("text-decoration:line-through");
107804
+ }
107805
+ if (segment.style.color && isCssValueSafe(segment.style.color)) {
107806
+ inlineStyles.push(`color:${segment.style.color}`);
107807
+ }
107808
+ if (segment.style.fontSize && Number.isFinite(Number(segment.style.fontSize))) {
107809
+ inlineStyles.push(`font-size:${Number(segment.style.fontSize)}pt`);
107810
+ }
107811
+ if (segment.style.fontFamily && isCssValueSafe(segment.style.fontFamily)) {
107812
+ inlineStyles.push(`font-family:${segment.style.fontFamily}`);
107813
+ }
107814
+ const text2 = escapeHtml2(segment.text);
107815
+ if (segment.style.hyperlink && isUrlSafe(segment.style.hyperlink)) {
107816
+ const href = escapeHtml2(segment.style.hyperlink);
107817
+ return `<a href="${href}" style="color:#4a9eff;text-decoration:underline;cursor:pointer" data-hyperlink="${href}">${text2}</a>`;
107818
+ }
107819
+ const styleAttr = inlineStyles.length > 0 ? ` style="${inlineStyles.join(";")}"` : "";
107820
+ return `<span${styleAttr}>${text2}</span>`;
107821
+ }).join("");
107822
+ const attrs3 = [];
107823
+ if (para.bulletType !== "none") {
107824
+ attrs3.push(`data-bullet-type="${para.bulletType}"`);
107825
+ }
107826
+ if (para.indentLevel > 0) {
107827
+ attrs3.push(`data-indent-level="${para.indentLevel}"`);
107828
+ }
107829
+ const indent = para.indentLevel * INDENT_PX;
107830
+ const divStyles = [];
107831
+ if (indent > 0) {
107832
+ divStyles.push(`padding-left:${indent}px`);
107833
+ }
107834
+ let prefix = "";
107835
+ if (para.bulletType === "bullet") {
107836
+ prefix = `<span style="margin-right:6px;color:#9ca3af" contenteditable="false">\u2022</span>`;
107837
+ } else if (para.bulletType === "numbered") {
107838
+ prefix = `<span style="margin-right:6px;color:#9ca3af" contenteditable="false">${numberedCounter}.</span>`;
107839
+ }
107840
+ const styleStr = divStyles.length > 0 ? ` style="${divStyles.join(";")}"` : "";
107841
+ const attrStr = attrs3.length > 0 ? ` ${attrs3.join(" ")}` : "";
107842
+ return `<div${attrStr}${styleStr}>${prefix}${runsHtml || "<br />"}</div>`;
107843
+ }).join("");
107844
+ }
106995
107845
  var MOBILE_BREAKPOINT = 768;
106996
107846
  var TABLET_BREAKPOINT = 1024;
106997
107847
  var MOBILE_LANDSCAPE_MAX_HEIGHT = 500;
@@ -108050,6 +108900,29 @@ function resolveParagraphStrutFontSize(segments, bodyFontSize) {
108050
108900
  }
108051
108901
  return largest;
108052
108902
  }
108903
+ var PT_TO_PX = 96 / 72;
108904
+ function resolveParagraphSpacing(input) {
108905
+ const { paraProps, bodyStyle, isFirst = false, isLast = false, spaceFirstLast = true } = input;
108906
+ const out = {};
108907
+ const before = paraProps?.paragraphSpacingBefore ?? bodyStyle?.paragraphSpacingBefore;
108908
+ if (typeof before === "number" && before > 0 && (!isFirst || spaceFirstLast)) {
108909
+ out.spaceBeforePx = before;
108910
+ }
108911
+ const after = paraProps?.paragraphSpacingAfter ?? bodyStyle?.paragraphSpacingAfter;
108912
+ if (typeof after === "number" && after > 0 && (!isLast || spaceFirstLast)) {
108913
+ out.spaceAfterPx = after;
108914
+ }
108915
+ const hasOwnLineSpacing = paraProps?.lineSpacing !== void 0 || paraProps?.lineSpacingExactPt !== void 0;
108916
+ const lineSource = hasOwnLineSpacing ? paraProps : bodyStyle;
108917
+ const exactPt = lineSource?.lineSpacingExactPt;
108918
+ const multiplier = lineSource?.lineSpacing;
108919
+ if (typeof exactPt === "number" && exactPt > 0) {
108920
+ out.lineHeight = `${exactPt * PT_TO_PX}px`;
108921
+ } else if (typeof multiplier === "number" && multiplier > 0) {
108922
+ out.lineHeight = proportionalLineHeight(multiplier);
108923
+ }
108924
+ return out;
108925
+ }
108053
108926
  function parseHexColor(hex10) {
108054
108927
  if (!hex10 || typeof hex10 !== "string") {
108055
108928
  return null;
@@ -113280,6 +114153,17 @@ function fitFontSize(text2, maxWidth, maxHeight, baseSize) {
113280
114153
  const maxByHeight = maxHeight * 0.5;
113281
114154
  return Math.max(6, Math.min(baseSize, maxByWidth, maxByHeight));
113282
114155
  }
114156
+ function chevronPoints(x, y, w, h) {
114157
+ const depth = Math.min(w * 0.2, h * 0.4);
114158
+ return [
114159
+ `${x},${y}`,
114160
+ `${x + w - depth},${y}`,
114161
+ `${x + w},${y + h / 2}`,
114162
+ `${x + w - depth},${y + h}`,
114163
+ `${x},${y + h}`,
114164
+ `${x + depth},${y + h / 2}`
114165
+ ].join(" ");
114166
+ }
113283
114167
  function strokeFor(sw) {
113284
114168
  return sw > 0 ? "rgba(255,255,255,0.3)" : "none";
113285
114169
  }
@@ -114921,6 +115805,21 @@ function computeSmartArtLayout2(nodes, box, palette, style, elementId, resolvedL
114921
115805
  return computeTargetLayout(flat, box, pal, style, elementId);
114922
115806
  }
114923
115807
  }
115808
+ function parseHex(hex10) {
115809
+ let h = hex10.trim().replace(/^#/u, "");
115810
+ if (h.length === 3) {
115811
+ h = h.split("").map((c) => c + c).join("");
115812
+ }
115813
+ if (h.length !== 6 || /[^0-9a-fA-F]/u.test(h)) {
115814
+ return [128, 128, 128];
115815
+ }
115816
+ return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];
115817
+ }
115818
+ function contrastTextColor(fill) {
115819
+ const [r, g, b] = parseHex(fill);
115820
+ const lum = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
115821
+ return lum > 0.6 ? "#1a1a1a" : "#ffffff";
115822
+ }
114924
115823
  function parseViewBox(viewBox) {
114925
115824
  const parts = viewBox.trim().split(/\s+/u).map(Number);
114926
115825
  const width = parts[2];
@@ -115070,21 +115969,6 @@ function boundsOf(points3) {
115070
115969
  height: maxY - minY
115071
115970
  };
115072
115971
  }
115073
- function parseHex(hex10) {
115074
- let h = hex10.trim().replace(/^#/u, "");
115075
- if (h.length === 3) {
115076
- h = h.split("").map((c) => c + c).join("");
115077
- }
115078
- if (h.length !== 6 || /[^0-9a-fA-F]/u.test(h)) {
115079
- return [128, 128, 128];
115080
- }
115081
- return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];
115082
- }
115083
- function contrastTextColor(fill) {
115084
- const [r, g, b] = parseHex(fill);
115085
- const lum = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
115086
- return lum > 0.6 ? "#1a1a1a" : "#ffffff";
115087
- }
115088
115972
  function ringPoint(x, y) {
115089
115973
  const radius = Math.hypot(x, y);
115090
115974
  const angle = Math.atan2(x, y);
@@ -115742,6 +116626,205 @@ async function mountSurfaceChart3D(container, options) {
115742
116626
  }
115743
116627
  };
115744
116628
  }
116629
+ var AVERAGE_ADVANCE_RATIO = 0.5;
116630
+ function wrapTextByEstimatedWidth(text2, maxWidth, fontSize, options = {}) {
116631
+ if (!text2 || text2.trim().length === 0) {
116632
+ return [];
116633
+ }
116634
+ const charactersPerLine = Math.floor(maxWidth / Math.max(fontSize * AVERAGE_ADVANCE_RATIO, 1));
116635
+ if (charactersPerLine <= 0) {
116636
+ return [];
116637
+ }
116638
+ const lines = [];
116639
+ for (const paragraph of text2.split(/\r?\n/u)) {
116640
+ if (paragraph.trim().length === 0) {
116641
+ if (options.keepBlankLines) {
116642
+ lines.push("");
116643
+ }
116644
+ continue;
116645
+ }
116646
+ let current = "";
116647
+ for (const word of paragraph.split(/\s+/u)) {
116648
+ if (current.length === 0) {
116649
+ current = word;
116650
+ } else if (current.length + 1 + word.length <= charactersPerLine) {
116651
+ current += ` ${word}`;
116652
+ } else {
116653
+ lines.push(current);
116654
+ current = word;
116655
+ }
116656
+ }
116657
+ if (current.length > 0) {
116658
+ lines.push(current);
116659
+ }
116660
+ }
116661
+ return lines;
116662
+ }
116663
+ var LINE_HEIGHT_RATIO = 1.2;
116664
+ function centeredSvgTextLines(text2, fontSize, options = {}) {
116665
+ const lines = options.maxWidth !== void 0 ? wrapTextByEstimatedWidth(text2, options.maxWidth, fontSize) : text2.split("\n").filter((line22) => line22.length > 0);
116666
+ const centerY = options.centerY ?? 0;
116667
+ if (lines.length === 0) {
116668
+ return [{ text: "", y: centerY }];
116669
+ }
116670
+ const lineHeight = fontSize * LINE_HEIGHT_RATIO;
116671
+ const blockTop = centerY - lines.length * lineHeight / 2;
116672
+ return lines.map((line22, index) => ({
116673
+ text: line22,
116674
+ y: blockTop + lineHeight / 2 + index * lineHeight
116675
+ }));
116676
+ }
116677
+ var PALETTES = {
116678
+ colorful1: ["#3b82f6", "#22c55e", "#f97316", "#eab308", "#a855f7", "#ec4899"],
116679
+ colorful2: ["#6366f1", "#14b8a6", "#f59e0b", "#ef4444", "#8b5cf6", "#06b6d4"],
116680
+ colorful3: ["#0ea5e9", "#84cc16", "#f43e5e", "#a855f7", "#f97316", "#10b981"],
116681
+ monochromatic1: ["#3b82f6", "#60a5fa", "#93c5fd", "#bfdbfe", "#2563eb", "#1d4ed8"],
116682
+ monochromatic2: ["#6366f1", "#818cf8", "#a5b4fc", "#c7d2fe", "#4f46e5", "#4338ca"]
116683
+ };
116684
+ var DEFAULT_PALETTE2 = PALETTES.colorful1;
116685
+ function paletteColour(index, palette) {
116686
+ return palette[index % palette.length];
116687
+ }
116688
+ function resolvePalette(data) {
116689
+ if (!data) {
116690
+ return DEFAULT_PALETTE2;
116691
+ }
116692
+ const ctFills = data.colorTransform?.fillColors;
116693
+ if (ctFills && ctFills.length > 0) {
116694
+ return ctFills;
116695
+ }
116696
+ return PALETTES[data.colorScheme ?? "colorful1"] ?? DEFAULT_PALETTE2;
116697
+ }
116698
+ var TEXT_WIDTH_FRACTION = 0.82;
116699
+ function underlyingFill(shape, shapes, index) {
116700
+ const centerX = shape.x + shape.width / 2;
116701
+ const centerY = shape.y + shape.height / 2;
116702
+ for (let below = index - 1; below >= 0; below--) {
116703
+ const candidate = shapes[below];
116704
+ if (!candidate || candidate.fillNone || !candidate.fillColor) {
116705
+ continue;
116706
+ }
116707
+ if (centerX >= candidate.x && centerX <= candidate.x + candidate.width && centerY >= candidate.y && centerY <= candidate.y + candidate.height) {
116708
+ return candidate.fillColor;
116709
+ }
116710
+ }
116711
+ return void 0;
116712
+ }
116713
+ function drawingShapeLabelColor(shape, shapes, index, resolvedFill) {
116714
+ const basis = resolvedFill === "none" || resolvedFill.startsWith("url(") ? underlyingFill(shape, shapes, index) : resolvedFill;
116715
+ return basis ? contrastTextColor(basis) : "#1a1a1a";
116716
+ }
116717
+ function computeDrawingViewBox(shapes) {
116718
+ let minX = Infinity;
116719
+ let minY = Infinity;
116720
+ let maxX = -Infinity;
116721
+ let maxY = -Infinity;
116722
+ for (const s of shapes) {
116723
+ if (s.x < minX) {
116724
+ minX = s.x;
116725
+ }
116726
+ if (s.y < minY) {
116727
+ minY = s.y;
116728
+ }
116729
+ if (s.x + s.width > maxX) {
116730
+ maxX = s.x + s.width;
116731
+ }
116732
+ if (s.y + s.height > maxY) {
116733
+ maxY = s.y + s.height;
116734
+ }
116735
+ }
116736
+ if (!Number.isFinite(minX)) {
116737
+ return { minX: 0, minY: 0, width: 1, height: 1 };
116738
+ }
116739
+ return {
116740
+ minX,
116741
+ minY,
116742
+ width: maxX - minX || 1,
116743
+ height: maxY - minY || 1
116744
+ };
116745
+ }
116746
+ function resolveGradient(shape, id) {
116747
+ const stops = shape.fillGradientStops;
116748
+ if (!stops || stops.length === 0) {
116749
+ return void 0;
116750
+ }
116751
+ const mapped = stops.map((stop) => ({
116752
+ offset: `${Math.max(0, Math.min(100, stop.position))}%`,
116753
+ color: stop.color,
116754
+ ...stop.opacity !== void 0 ? { opacity: stop.opacity } : {}
116755
+ }));
116756
+ if (shape.fillGradientType === "radial") {
116757
+ return { id, kind: "radial", cx: "50%", cy: "50%", r: "50%", stops: mapped };
116758
+ }
116759
+ const radians = (shape.fillGradientAngle ?? 0) * Math.PI / 180;
116760
+ const dx = Math.cos(radians) / 2;
116761
+ const dy = Math.sin(radians) / 2;
116762
+ return {
116763
+ id,
116764
+ kind: "linear",
116765
+ x1: `${(0.5 - dx) * 100}%`,
116766
+ y1: `${(0.5 - dy) * 100}%`,
116767
+ x2: `${(0.5 + dx) * 100}%`,
116768
+ y2: `${(0.5 + dy) * 100}%`,
116769
+ stops: mapped
116770
+ };
116771
+ }
116772
+ function resolveShapeKind(shape, hasImage) {
116773
+ if (hasImage) {
116774
+ return "image";
116775
+ }
116776
+ const normalized = (shape.shapeType ?? "").trim().toLowerCase();
116777
+ if (normalized === "chevron" || normalized === "homeplate") {
116778
+ return "polygon";
116779
+ }
116780
+ return getShapeType(shape.shapeType) === "ellipse" ? "ellipse" : "rect";
116781
+ }
116782
+ function projectDrawingShapes(elementId, shapes, viewBox, palette, style) {
116783
+ const { minX, minY } = viewBox;
116784
+ const sw = styleStroke(style);
116785
+ return shapes.map((shape, i) => {
116786
+ const gradient = shape.fillNone ? void 0 : resolveGradient(shape, `${elementId}-dspgrad-${shape.id}-${i}`);
116787
+ const fill = shape.fillNone ? "none" : gradient ? `url(#${gradient.id})` : shape.fillPatternForegroundColor ?? shape.fillColor ?? paletteColour(i, palette);
116788
+ const relX = shape.x - minX;
116789
+ const relY = shape.y - minY;
116790
+ const kind = resolveShapeKind(shape, Boolean(shape.fillImageUrl));
116791
+ const rx = getShapeType(shape.shapeType) === "roundRect" ? Math.min(shape.width, shape.height) * 0.1 : 0;
116792
+ const cx = relX + shape.width / 2;
116793
+ const cy = relY + shape.height / 2;
116794
+ const stroke = shape.strokeColor ?? (sw > 0 ? "rgba(255,255,255,0.3)" : "none");
116795
+ const transform = shape.rotation !== void 0 ? `rotate(${shape.rotation} ${cx} ${cy})` : void 0;
116796
+ const fontSize = shape.fontSize ?? Math.max(8, Math.min(14, shape.height * 0.2));
116797
+ return {
116798
+ key: `${elementId}-dsp-${shape.id}-${i}`,
116799
+ kind,
116800
+ ...kind === "polygon" ? { points: chevronPoints(relX, relY, shape.width, shape.height) } : {},
116801
+ ...gradient ? { gradient } : {},
116802
+ x: relX,
116803
+ y: relY,
116804
+ width: shape.width,
116805
+ height: shape.height,
116806
+ rx,
116807
+ cx,
116808
+ cy,
116809
+ fill,
116810
+ stroke,
116811
+ strokeWidth: shape.strokeWidth ?? sw,
116812
+ transform,
116813
+ imageUrl: shape.fillImageUrl,
116814
+ textLines: shape.text ? centeredSvgTextLines(shape.text, fontSize, {
116815
+ maxWidth: shape.width * TEXT_WIDTH_FRACTION,
116816
+ centerY: cy
116817
+ }) : [],
116818
+ textX: cx,
116819
+ textY: cy,
116820
+ fontColor: shape.fontColor ?? drawingShapeLabelColor(shape, shapes, i, fill),
116821
+ fontSize
116822
+ };
116823
+ });
116824
+ }
116825
+ function styleShadowFilter(style) {
116826
+ return styleShadow(style);
116827
+ }
115745
116828
  var FONT_NAME_UNSAFE_CHARS = /["\\\n\r;}<>]/u;
115746
116829
  var FONT_FORMAT_ALLOWED = /* @__PURE__ */ new Set(["truetype", "opentype", "woff", "woff2"]);
115747
116830
  var FONT_DATA_URL_PATTERN = /^data:font\/[a-z0-9+.-]+(?:;charset=[a-z0-9-]+)?;base64,[a-z0-9+/=]+$/iu;
@@ -118724,6 +119807,97 @@ var DUOTONE_PRESETS = [
118724
119807
  highlight: "#F5DEB3"
118725
119808
  }
118726
119809
  ];
119810
+ function findInSlides(slides, query, opts = {}) {
119811
+ if (!query) {
119812
+ return [];
119813
+ }
119814
+ const matchCase = opts.matchCase ?? false;
119815
+ const normalised = matchCase ? query : query.toLowerCase();
119816
+ const results = [];
119817
+ for (let slideIndex = 0; slideIndex < slides.length; slideIndex++) {
119818
+ const slide = slides[slideIndex];
119819
+ for (const element of slide.elements) {
119820
+ if (!hasTextProperties(element)) {
119821
+ continue;
119822
+ }
119823
+ const segments = element.textSegments ?? [];
119824
+ for (let segIndex = 0; segIndex < segments.length; segIndex++) {
119825
+ const raw = segments[segIndex].text ?? "";
119826
+ const haystack = matchCase ? raw : raw.toLowerCase();
119827
+ let offset = 0;
119828
+ while (offset < haystack.length) {
119829
+ const pos2 = haystack.indexOf(normalised, offset);
119830
+ if (pos2 === -1) {
119831
+ break;
119832
+ }
119833
+ results.push({
119834
+ slideIndex,
119835
+ elementId: element.id,
119836
+ segmentIndex: segIndex,
119837
+ startOffset: pos2,
119838
+ length: query.length
119839
+ });
119840
+ offset = pos2 + 1;
119841
+ }
119842
+ }
119843
+ }
119844
+ }
119845
+ return results;
119846
+ }
119847
+ function applyFindReplacements(slides, toReplace, replacement) {
119848
+ if (toReplace.length === 0) {
119849
+ return { slides, replacements: 0 };
119850
+ }
119851
+ const grouped = /* @__PURE__ */ new Map();
119852
+ for (const match of toReplace) {
119853
+ const key = `${match.slideIndex}::${match.elementId}::${match.segmentIndex}`;
119854
+ let bucket = grouped.get(key);
119855
+ if (!bucket) {
119856
+ bucket = [];
119857
+ grouped.set(key, bucket);
119858
+ }
119859
+ bucket.push(match);
119860
+ }
119861
+ const nextSlides = slides.slice();
119862
+ let totalReplacements = 0;
119863
+ for (const [, matches] of grouped) {
119864
+ const sorted = matches.slice().sort((a, b) => b.startOffset - a.startOffset);
119865
+ for (const match of sorted) {
119866
+ const slide = nextSlides[match.slideIndex];
119867
+ if (!slide) {
119868
+ continue;
119869
+ }
119870
+ const elIdx = slide.elements.findIndex((e) => e.id === match.elementId);
119871
+ if (elIdx === -1) {
119872
+ continue;
119873
+ }
119874
+ const element = slide.elements[elIdx];
119875
+ if (!hasTextProperties(element)) {
119876
+ continue;
119877
+ }
119878
+ const segments = element.textSegments ?? [];
119879
+ const seg = segments[match.segmentIndex];
119880
+ if (!seg) {
119881
+ continue;
119882
+ }
119883
+ const before = seg.text.slice(0, match.startOffset);
119884
+ const after = seg.text.slice(match.startOffset + match.length);
119885
+ const newSegText = before + replacement + after;
119886
+ const nextSegments = segments.slice();
119887
+ nextSegments[match.segmentIndex] = { ...seg, text: newSegText };
119888
+ const nextText = nextSegments.map((s) => s.text).join("");
119889
+ const nextElements = slide.elements.slice();
119890
+ nextElements[elIdx] = {
119891
+ ...element,
119892
+ text: nextText,
119893
+ textSegments: nextSegments
119894
+ };
119895
+ nextSlides[match.slideIndex] = { ...slide, elements: nextElements };
119896
+ totalReplacements++;
119897
+ }
119898
+ }
119899
+ return { slides: nextSlides, replacements: totalReplacements };
119900
+ }
118727
119901
  function isElementHidden(element) {
118728
119902
  return element?.hidden === true;
118729
119903
  }
@@ -120415,6 +121589,24 @@ var COMMON_FONTS = [
120415
121589
  "Tw Cen MT",
120416
121590
  "Verdana"
120417
121591
  ];
121592
+ function partitionTemplateElements(slides) {
121593
+ const templateElementsBySlideId = {};
121594
+ const nextSlides = slides.map((slide) => {
121595
+ const template = slide.elements.filter(isTemplateElement);
121596
+ if (template.length === 0) {
121597
+ return slide;
121598
+ }
121599
+ templateElementsBySlideId[slide.id] = template;
121600
+ return { ...slide, elements: slide.elements.filter((element) => !isTemplateElement(element)) };
121601
+ });
121602
+ return { slides: nextSlides, templateElementsBySlideId };
121603
+ }
121604
+ function buildSaveSlides(slides, templateElementsBySlideId) {
121605
+ return slides.map((slide) => {
121606
+ const template = templateElementsBySlideId[slide.id];
121607
+ return template?.length ? { ...slide, elements: [...template, ...slide.elements] } : slide;
121608
+ });
121609
+ }
120418
121610
  var DEFAULT_PREVIEW_ELEMENT_CAP = 500;
120419
121611
  function buildPreviewElements(slide, templateElements = [], options) {
120420
121612
  const cap = options?.cap ?? DEFAULT_PREVIEW_ELEMENT_CAP;
@@ -122809,38 +124001,7 @@ function calculateNotesPageLayout(slideWidth, slideHeight) {
122809
124001
  };
122810
124002
  }
122811
124003
  function wrapNotesText(text2, maxWidth, fontSize) {
122812
- if (!text2 || text2.trim().length === 0) {
122813
- return [];
122814
- }
122815
- const avgCharWidth = fontSize * 0.5;
122816
- const maxCharsPerLine = Math.floor(maxWidth / avgCharWidth);
122817
- if (maxCharsPerLine <= 0) {
122818
- return [];
122819
- }
122820
- const lines = [];
122821
- const paragraphs = text2.split(/\r?\n/u);
122822
- for (const paragraph of paragraphs) {
122823
- if (paragraph.trim().length === 0) {
122824
- lines.push("");
122825
- continue;
122826
- }
122827
- const words = paragraph.split(/\s+/u);
122828
- let currentLine = "";
122829
- for (const word of words) {
122830
- if (currentLine.length === 0) {
122831
- currentLine = word;
122832
- } else if (currentLine.length + 1 + word.length <= maxCharsPerLine) {
122833
- currentLine += ` ${word}`;
122834
- } else {
122835
- lines.push(currentLine);
122836
- currentLine = word;
122837
- }
122838
- }
122839
- if (currentLine.length > 0) {
122840
- lines.push(currentLine);
122841
- }
122842
- }
122843
- return lines;
124004
+ return wrapTextByEstimatedWidth(text2, maxWidth, fontSize, { keepBlankLines: true });
122844
124005
  }
122845
124006
  function calculateContinuationPageMaxLines() {
122846
124007
  const contentHeight = NOTES_PAGE_H - 2 * NOTES_MARGIN;
@@ -123729,14 +124890,14 @@ ${xrefPos}
123729
124890
  }
123730
124891
  var NOTE_LINE_COUNT = 8;
123731
124892
  var TRANSPARENT_PNG = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgAAIAAAUAAen63NgAAAAASUVORK5CYII=";
123732
- function escapeHtml2(value) {
124893
+ function escapeHtml22(value) {
123733
124894
  return value.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&#39;");
123734
124895
  }
123735
124896
  function safeDataImageSrc(src) {
123736
124897
  if (typeof src !== "string" || !src.startsWith("data:image/")) {
123737
124898
  return TRANSPARENT_PNG;
123738
124899
  }
123739
- return escapeHtml2(src);
124900
+ return escapeHtml22(src);
123740
124901
  }
123741
124902
  function slideTitle(slide, index) {
123742
124903
  const fallback = `Slide ${index + 1}`;
@@ -123762,7 +124923,7 @@ function buildOutlineHtml(slideIndices, slides) {
123762
124923
  }
123763
124924
  const titleText = slideTitle(slide, idx);
123764
124925
  const notes = (slide.notes ?? "").trim();
123765
- return `<h2>${escapeHtml2(titleText)}</h2>${notes ? `<p>${escapeHtml2(notes)}</p>` : ""}`;
124926
+ return `<h2>${escapeHtml22(titleText)}</h2>${notes ? `<p>${escapeHtml22(notes)}</p>` : ""}`;
123766
124927
  }).join("");
123767
124928
  }
123768
124929
  function buildSlidesHtml(slideImages, slideIndices) {
@@ -123776,7 +124937,7 @@ function buildNotesHtml(slideImages, slideIndices, slides) {
123776
124937
  const notes = (slides[idx]?.notes ?? "").trim();
123777
124938
  return `<section class="page notes-page">
123778
124939
  <img class="notes-slide" src="${safeDataImageSrc(img)}" alt="Slide ${idx + 1}" />
123779
- <div class="notes-text">${escapeHtml2(notes)}</div>
124940
+ <div class="notes-text">${escapeHtml22(notes)}</div>
123780
124941
  </section>`;
123781
124942
  }).join("");
123782
124943
  }
@@ -123844,7 +125005,7 @@ function buildPrintHtmlDocument(options) {
123844
125005
  <html>
123845
125006
  <head>
123846
125007
  <meta charset="utf-8" />
123847
- <title>${escapeHtml2(title)}</title>
125008
+ <title>${escapeHtml22(title)}</title>
123848
125009
  <style>
123849
125010
  :root { color-scheme: light; }
123850
125011
  * { box-sizing: border-box; }
@@ -123939,4 +125100,4 @@ function segmentFrameCount(durationMs, fps) {
123939
125100
  * `<p:extLst>` (optional)
123940
125101
  */
123941
125102
 
123942
- export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, CHARACTER_SPACING_OPTIONS, COLOR_MAP_ALIAS_KEYS, COMMON_FONTS, CONNECTION_TIMEOUT_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_FONT_FAMILY, DEFAULT_INSERT_CHART_KIND, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GRADIENT_TYPE_OPTIONS, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_HINT_CLASS, LINK_TOOLTIP_HOST_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_PANEL_CLASS, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_ZOOM_SCALE, MEDIA_CHROME_ATTRIBUTE, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, PATTERN_OPTIONS, PEN_COLORS, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESENTATION_STAGE_ATTRIBUTE, PRESENTER_CONSOLE_CLASSES, PRESENTER_CONSOLE_CONTROLS, PRESENTER_NAVIGATOR_LABEL_KEYS, PRESENT_TOOLBAR_CLASSES, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_TEMPLATES, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, STATUS_BAR_CLASSES, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_ORIENTATION_TYPES, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptsPresentationInput, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addQuickAccessCommand, addSection, addSmartArtNode, addSmartArtNodeAsChild, addTagToCollections, alignElements, animationEffectLabel, annotationOverlayZIndex, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyCaseTransformToSegments, applyChartBuildReveal, applyColorChange, applyDuotone, applyFormatToElement, applyMotionPathPreset, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyThemeOverrideToSlide, applyThemeToData, attachPresentationVisibilityPause, availableQuickAccessCommands, backstageCardsFor, bringForward, bringToFront, build3DExtrusionData, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartViewModel, buildCollaborationShareUrl, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildGlowBoxShadow, buildHandoutsHtml, buildHollowHitOutline, buildInitialGuides, buildInnerShadowCssFromShapeStyle, buildJoinCollaborationConfig, buildMorphAnimationRules, buildMorphTransitionPlan, buildMotionPathPreview, buildMultiLayerShadowCss, buildNotesHtml, buildNotesPdfBytes, buildOutline, buildOutlineHtml, buildPatternFillCss, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildReflectionCss, buildShadowCssFromShapeStyle, buildSlideTemplateContent, buildSlideTemplateSlide, buildSlidesHtml, buildSlidesPdfBytes, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildStrokeOutline, buildSummaryZoomView, buildSvgGradientDef, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBuildSpec, buildTextFillCss, buildTextReflectionCss, buildTextRunFilterChain, buildTextShadowCss, buildThemeColorGrid, buildThemeColorMap, buildUserFontFaceStyles, canCommitActionType, canGoNext, canGoPrevious, canvasToJpegData, cell3DBevelCss, chartAreaFill, chartDataChangeType, chartPartToAttrs, clampCropValue, clampNotesFontSize, clampPercent, clampTransitionNumber, clampUnitInterval2 as clampUnitInterval, clampZoomScale, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearStoredViewerPrefs, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collectImagePaths, collectMediaElements, collectUsedFonts, colorWithOpacity, comparePresentation, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeColumnBoundaries, computeEntranceAnimationDelay, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeLayout, computeLayoutOptions, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSmartArtLayout2 as computeSmartArtLayout, computeSnapToShape, computeSplitCell, computeValueRange, computeValueRangeForChart, computeVirtualRange, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDepartureChannel, createInitialPresentationSnapshot, createPresenceProjector, createPresentationKeyBuffer, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createSyncGate, createTouchGestureRecognizer, createViewerOptionsStore, createViewerZoomStore, createWheelStepBuffer, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableColumn, deleteTableRow, deleteTagFromCollections, demoteSmartArtNode, deriveSlideFieldContext, detectOrientation, detectTouchDevice, distributeElements, downloadBlob, downloadDataUrl, dragAnchorViewY, dragValueForPart, elementActionToPptxAction, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, erasePresentationInkAt, exportDeckJson, extraQuickAccessCommands, extractPathPoints, filterCommands, filterRenderedElements, findChartPartTarget, findMediaElementByElementId, findSmartArtNodeText, firstShowSlideIndex, flattenTagCollections, forgetSessionDeck, formatAxisValue, formatAxisValueWithUnits, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateLogTicks, generateNoteLineCount, generatePackageReadme, generatePressureCircles, generateTicks, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getCommentMarkerPosition, getCompoundLineBorderWidth, getCompoundLineBoxShadow, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getConnectionSites, getContentPartReplayStyles, getCssBorderDashStyle, getDisplayUnitLabel, getDuotoneCachedResult, getEffectDagFilter, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getGradientTileFlipCss, getGradientTileRectCss, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFitStyle, getImageSvgFilters, getInkReplayStyles, getInlineEditorSelection, getKinsokuLineBreakStyles, getLocalStorageUsageSummary, getNotesPrintableArea, getOleBadgeLabel, getOleObjectTypeLabel, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPrintableArea, getResolvedShapeClipPath, getRoundRectRadiusPx2, getSecondaryValueAxis, getSessionTabId, getShapeAdjustmentHandleDescriptor, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeFilterId, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTextAlphaOpacity, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasPressureVariation, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hexToRgbChannels2 as hexToRgbChannels, hiddenSlideCue, insertTableColumn, insertTableRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isCalloutShape, isCellInRect, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementRendered, isExportAbortError, isHollowShapeElement, isIdentityRectClip, isImageLikeElement, isInkElement, isKeyboardOpen, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isStrokeOnlyPresetElement, isTemplateElement, isTemplateElementId2 as isTemplateElementId, isUrlSafe, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, loadAudienceContent, loadSessionDeck, makeCloneId, makeSlideId, mapEditingWheel, mapEditorKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mayLeaveSlideShow, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, newTableElement, nextPresentedSlide, nextShowSlideIndex, normalizeColorsForCapture, normalizeHexColor, normalizeStrokeDashType, normalizeValue, notesSegmentsToSpans, observeYDocSlides, ooxmlDashToCssBorderStyle, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPptxFile, openReadingView, openUrlInNewTab, paintedStrokeWidth, paletteColor, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, pressuresToWidths, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, promoteSmartArtNode, proportionalLineHeight, publishLiveGeometry, publishLiveInlineText, quickStyleSwatchCss, reResolveSlideColors, readBackstageRecentFile, readSlidesFromYDoc, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, rebuildTableStructureInRawXml, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, registerCollaborationTeardown, registerPersistentAudio, remapTextToSegments, rememberSessionDeck, removeChartCategory, removeChartSeries, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorderSmartArtNode, rerouteConnectorsForMovedElements, resetPresenterTimer, resolveActionType, resolveAudienceScreenPlacement, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveCssTextAlign, resolveDrawingShapeNodeId, resolveElementActionAffordance, resolveFontForScript, resolveFontRefIdx, resolveGroupChildFill, resolveInkColor, resolveInkOpacity, resolveInkWidth, resolveMetricTrackingPx, resolveOleType, resolveParagraphAlign, resolveParagraphRtl, resolveParagraphStrutFontSize, resolvePictureBullet, resolveProfileInitial, resolveRegionCode, resolveShowSlideIndexes, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransportForServerUrl, resolveUnderlineDecorationStyle, resolveViewerAddinRows, restoreSegmentSelection, restoreSessionDeck, revealedSmartArtNodeCount, rulerDragToGuidePosition, runMediaCommand, runPresentationAction, safeOpenUrl, sanitizeColor, sanitizeDownloadFilename, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveViewerProfile, scanAvailableFontFamilies, schemaLabel, segmentByScript, segmentFrameCount, sendBackward, sendToBack, sequentialColorScale, seriesColor2 as seriesColor, setCachedResult, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDuotoneCachedResult, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shadeColor2, shouldAutoFollowBroadcaster, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldLoopContinuously, shouldUseSvgWarp, slideProgressPercent, slideStatusLabel, snapBoxToGrid, splitCell, splitRunForMetrics, splitSeriesByAxis, stepPresenterZoom, stopAllPersistentAudio, storeAudienceContent, strokeOutlineViewBox, substituteFieldText, suppressesCssBorder, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, themeColorLabel, themeColorSchemesEqual, themeToCssVars, tintColor2, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, toggleBlackboard, togglePresenterTimer, toggleText3dExtrusion, transformTextCase, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewerOptionsToPreferences, warpPreviewPath, withChartPointValue, withChartTitle, withFrameSlides, withSlidesPerPage, writeStoredViewerPrefs };
125103
+ export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, CHARACTER_SPACING_OPTIONS, COLOR_MAP_ALIAS_KEYS, COMMON_FONTS, CONNECTION_TIMEOUT_MS, DEBOUNCE_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_FONT_FAMILY, DEFAULT_INSERT_CHART_KIND, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_PALETTE2, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPANDED_MAX_HEIGHT, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GRADIENT_TYPE_OPTIONS, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INDENT_PX, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_HINT_CLASS, LINK_TOOLTIP_HOST_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_PANEL_CLASS, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_INDENT_LEVEL, MAX_ZOOM_SCALE, MEDIA_CHROME_ATTRIBUTE, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, PATTERN_OPTIONS, PEN_COLORS, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESENTATION_STAGE_ATTRIBUTE, PRESENTER_CONSOLE_CLASSES, PRESENTER_CONSOLE_CONTROLS, PRESENTER_NAVIGATOR_LABEL_KEYS, PRESENT_TOOLBAR_CLASSES, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_TEMPLATES, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_STYLE_LABEL_KEYS, STATUS_BAR_CLASSES, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_ORIENTATION_TYPES, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptsPresentationInput, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addQuickAccessCommand, addSection, addSmartArtNode, addSmartArtNodeAsChild, addTagToCollections, alignElements, animationEffectLabel, annotationOverlayZIndex, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyCaseTransformToSegments, applyChartBuildReveal, applyColorChange, applyDuotone, applyFindReplacements, applyFormatToElement, applyMotionPathPreset, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyThemeOverrideToSlide, applyThemeToData, attachPresentationVisibilityPause, availableQuickAccessCommands, backstageCardsFor, bringForward, bringToFront, build3DExtrusionData, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartViewModel, buildCollaborationShareUrl, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildGlowBoxShadow, buildHandoutsHtml, buildHollowHitOutline, buildInitialGuides, buildInnerShadowCssFromShapeStyle, buildJoinCollaborationConfig, buildMorphAnimationRules, buildMorphTransitionPlan, buildMotionPathPreview, buildMultiLayerShadowCss, buildNotesHtml, buildNotesPdfBytes, buildOutline, buildOutlineHtml, buildPatternFillCss, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildReflectionCss, buildSaveSlides, buildShadowCssFromShapeStyle, buildSlideTemplateContent, buildSlideTemplateSlide, buildSlidesHtml, buildSlidesPdfBytes, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildStrokeOutline, buildSummaryZoomView, buildSvgGradientDef, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBuildSpec, buildTextFillCss, buildTextReflectionCss, buildTextRunFilterChain, buildTextShadowCss, buildThemeColorGrid, buildThemeColorMap, buildTree, buildUserFontFaceStyles, canCommitActionType, canGoNext, canGoPrevious, canvasToJpegData, cellStyleToCss, centeredSvgTextLines, chartAreaFill, chartDataChangeType, chartPartToAttrs, clampCropValue, clampNotesFontSize, clampPercent, clampTransitionNumber, clampUnitInterval2 as clampUnitInterval, clampZoomScale, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearStoredViewerPrefs, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collectImagePaths, collectMediaElements, collectUsedFonts, colorWithOpacity, comparePresentation, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeColumnBoundaries, computeDrawingViewBox, computeEntranceAnimationDelay, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeLayout, computeLayoutOptions, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSmartArtLayout2 as computeSmartArtLayout, computeSnapToShape, computeSplitCell, computeValueRange, computeValueRangeForChart, computeVirtualRange, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDepartureChannel, createInitialPresentationSnapshot, createPlainNotesSegments, createPresenceProjector, createPresentationKeyBuffer, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createSyncGate, createTouchGestureRecognizer, createViewerOptionsStore, createViewerZoomStore, createWheelStepBuffer, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableColumn, deleteTableRow, deleteTagFromCollections, demoteSmartArtNode, deriveSlideFieldContext, detectOrientation, detectTouchDevice, distributeElements, downloadBlob, downloadDataUrl, dragAnchorViewY, dragValueForPart, elementActionToPptxAction, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, erasePresentationInkAt, escapeHtml22 as escapeHtml2, exportDeckJson, extraQuickAccessCommands, extractPathPoints, filterCommands, filterRenderedElements, findChartPartTarget, findInSlides, findMediaElementByElementId, findSmartArtNodeText, firstShowSlideIndex, fitFontSize, flattenTagCollections, forgetSessionDeck, formatAxisValue, formatAxisValueWithUnits, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateLogTicks, generateNoteLineCount, generatePackageReadme, generatePressureCircles, generateTicks, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getCommentMarkerPosition, getCompoundLineBorderWidth, getCompoundLineBoxShadow, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getConnectionSites, getContentPartReplayStyles, getCssBorderDashStyle, getCurrentParagraphIndex, getDisplayUnitLabel, getDuotoneCachedResult, getEffectDagFilter, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getGradientTileFlipCss, getGradientTileRectCss, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFitStyle, getImageSvgFilters, getInkReplayStyles, getInlineEditorSelection, getKinsokuLineBreakStyles, getLocalStorageUsageSummary, getNotesPrintableArea, getOleBadgeLabel, getOleObjectTypeLabel, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPrintableArea, getResolvedShapeClipPath, getRoundRectRadiusPx2, getSecondaryValueAxis, getSessionTabId, getShapeAdjustmentHandleDescriptor, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeFilterId, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTableCellBandStyle, getTextAlphaOpacity, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasPressureVariation, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hexToRgbChannels2 as hexToRgbChannels, hiddenSlideCue, insertTableColumn, insertTableRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isCalloutShape, isCellInRect, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementRendered, isExportAbortError, isHollowShapeElement, isIdentityRectClip, isImageLikeElement, isInkElement, isKeyboardOpen, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isStrokeOnlyPresetElement, isTemplateElementId2 as isTemplateElementId, isUrlSafe, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, loadAudienceContent, loadSessionDeck, makeCloneId, makeSlideId, mapEditingWheel, mapEditorKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mayLeaveSlideShow, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, newTableElement, nextPresentedSlide, nextShowSlideIndex, nodeOpacity, normalizeColorsForCapture, normalizeHexColor, normalizeSegments, normalizeStrokeDashType, normalizeValue, notesSegmentsToSpans, observeYDocSlides, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPptxFile, openReadingView, openUrlInNewTab, paintedStrokeWidth, paletteColor, paletteColour, paragraphsToSegments, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, parseSegmentsFromRichEditor, partitionTemplateElements, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, pressuresToWidths, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, projectDrawingShapes, promoteSmartArtNode, publishLiveGeometry, publishLiveInlineText, quickStyleSwatchCss, reResolveSlideColors, readBackstageRecentFile, readSlidesFromYDoc, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, rebuildTableStructureInRawXml, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, registerCollaborationTeardown, registerPersistentAudio, remapTextToSegments, rememberSessionDeck, removeChartCategory, removeChartSeries, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorderSmartArtNode, rerouteConnectorsForMovedElements, resetPresenterTimer, resolveActionType, resolveAudienceScreenPlacement, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveCssTextAlign, resolveDrawingShapeNodeId, resolveElementActionAffordance, resolveFontForScript, resolveGroupChildFill, resolveInkColor, resolveInkOpacity, resolveInkWidth, resolveMetricTrackingPx, resolveOleType, resolvePalette, resolveParagraphAlign, resolveParagraphRtl, resolveParagraphSpacing, resolveParagraphStrutFontSize, resolvePictureBullet, resolveProfileInitial, resolveRegionCode, resolveShowSlideIndexes, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransportForServerUrl, resolveUnderlineDecorationStyle, resolveViewerAddinRows, restoreSegmentSelection, restoreSessionDeck, revealedSmartArtNodeCount, rulerDragToGuidePosition, runMediaCommand, runPresentationAction, safeOpenUrl, sanitizeColor, sanitizeDownloadFilename, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveViewerProfile, scanAvailableFontFamilies, schemaLabel, segmentByScript, segmentFrameCount, segmentsToEditorHtml, segmentsToParagraphs, segmentsToPlainText, sendBackward, sendToBack, sequentialColorScale, seriesColor2 as seriesColor, setCachedResult, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDuotoneCachedResult, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shouldAutoFollowBroadcaster, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldLoopContinuously, shouldUseSvgWarp, slideProgressPercent, slideStatusLabel, snapBoxToGrid, splitCell, splitRunForMetrics, splitSeriesByAxis, stepPresenterZoom, stopAllPersistentAudio, storeAudienceContent, strokeOutlineViewBox, styleShadow, styleShadowFilter, styleStroke, substituteFieldText, suppressesCssBorder, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, themeColorLabel, themeColorSchemesEqual, themeToCssVars, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, toggleBlackboard, togglePresenterTimer, toggleText3dExtrusion, transformTextCase, treeDepth2 as treeDepth, treeWidth2 as treeWidth, truncate, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewerOptionsToPreferences, warpPreviewPath, withChartPointValue, withChartTitle, withFrameSlides, withSlidesPerPage, writeStoredViewerPrefs };