pptx-react-viewer 2.5.2 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/{AiChatPanel-OHSLJNYG.js → AiChatPanel-53W2JG6G.js} +22 -22
  3. package/dist/AiChatPanel-53W2JG6G.js.br +0 -0
  4. package/dist/AiChatPanel-53W2JG6G.js.gz +0 -0
  5. package/dist/{AiChatPanel-EMF3UYCE.mjs → AiChatPanel-L5IOO72H.mjs} +3 -3
  6. package/dist/AiChatPanel-L5IOO72H.mjs.br +0 -0
  7. package/dist/AiChatPanel-L5IOO72H.mjs.gz +0 -0
  8. package/dist/{Model3DScene-ULHIJPMU.js → Model3DScene-E7JGXNJN.js} +2 -2
  9. package/dist/Model3DScene-E7JGXNJN.js.br +0 -0
  10. package/dist/Model3DScene-E7JGXNJN.js.gz +0 -0
  11. package/dist/{Model3DScene-X6QJTWHV.mjs → Model3DScene-EW7OWRJK.mjs} +1 -1
  12. package/dist/Model3DScene-EW7OWRJK.mjs.br +0 -0
  13. package/dist/Model3DScene-EW7OWRJK.mjs.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-K7Q5NYZ4.js → SurfaceChart3DScene-3QB6NVKD.js} +2 -2
  15. package/dist/SurfaceChart3DScene-3QB6NVKD.js.br +0 -0
  16. package/dist/SurfaceChart3DScene-3QB6NVKD.js.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-PRCKQJQQ.mjs → SurfaceChart3DScene-64HI3U7Y.mjs} +1 -1
  18. package/dist/{SurfaceChart3DScene-PRCKQJQQ.mjs.br → SurfaceChart3DScene-64HI3U7Y.mjs.br} +0 -0
  19. package/dist/SurfaceChart3DScene-64HI3U7Y.mjs.gz +0 -0
  20. package/dist/{chunk-VOV2N3NY.mjs → chunk-34ZW32XK.mjs} +919 -65
  21. package/dist/chunk-34ZW32XK.mjs.br +0 -0
  22. package/dist/chunk-34ZW32XK.mjs.gz +0 -0
  23. package/dist/{chunk-TGVID6BB.mjs → chunk-DWQJW3UM.mjs} +19 -4
  24. package/dist/chunk-DWQJW3UM.mjs.br +0 -0
  25. package/dist/chunk-DWQJW3UM.mjs.gz +0 -0
  26. package/dist/{chunk-7Q7AEPO7.js → chunk-EJ24IFPL.js} +346 -315
  27. package/dist/chunk-EJ24IFPL.js.br +0 -0
  28. package/dist/chunk-EJ24IFPL.js.gz +0 -0
  29. package/dist/{chunk-NVH3RIN7.js → chunk-NXSAYLYI.js} +251 -236
  30. package/dist/chunk-NXSAYLYI.js.br +0 -0
  31. package/dist/chunk-NXSAYLYI.js.gz +0 -0
  32. package/dist/{chunk-WJKMTDXS.mjs → chunk-PENV7S7Z.mjs} +1 -1
  33. package/dist/chunk-PENV7S7Z.mjs.br +0 -0
  34. package/dist/{chunk-WJKMTDXS.mjs.gz → chunk-PENV7S7Z.mjs.gz} +0 -0
  35. package/dist/{chunk-HDKHZKSW.mjs → chunk-UO55N46T.mjs} +91 -13
  36. package/dist/chunk-UO55N46T.mjs.br +0 -0
  37. package/dist/chunk-UO55N46T.mjs.gz +0 -0
  38. package/dist/{chunk-LTEDT475.js → chunk-UVA55CRK.js} +921 -64
  39. package/dist/chunk-UVA55CRK.js.br +0 -0
  40. package/dist/chunk-UVA55CRK.js.gz +0 -0
  41. package/dist/{chunk-OSSVKJGF.js → chunk-V5XVTKFS.js} +925 -847
  42. package/dist/chunk-V5XVTKFS.js.br +0 -0
  43. package/dist/chunk-V5XVTKFS.js.gz +0 -0
  44. package/dist/{chunk-MJAEB43A.js → chunk-VBWWICDF.js} +3 -3
  45. package/dist/chunk-VBWWICDF.js.br +0 -0
  46. package/dist/chunk-VBWWICDF.js.gz +0 -0
  47. package/dist/{chunk-LIQGO45T.mjs → chunk-WCO3NEH5.mjs} +35 -4
  48. package/dist/chunk-WCO3NEH5.mjs.br +0 -0
  49. package/dist/chunk-WCO3NEH5.mjs.gz +0 -0
  50. package/dist/index.d.ts +15 -0
  51. package/dist/index.js +34 -34
  52. package/dist/index.js.br +0 -0
  53. package/dist/index.js.gz +0 -0
  54. package/dist/index.mjs +5 -5
  55. package/dist/index.mjs.br +0 -0
  56. package/dist/index.mjs.gz +0 -0
  57. package/dist/internals.d.ts +42 -0
  58. package/dist/internals.d.ts.map +1 -1
  59. package/dist/internals.js +78 -78
  60. package/dist/internals.js.br +0 -0
  61. package/dist/internals.js.gz +0 -0
  62. package/dist/internals.mjs +3 -3
  63. package/dist/internals.mjs.br +0 -0
  64. package/dist/internals.mjs.gz +0 -0
  65. package/dist/pptx-viewer.css +1 -1
  66. package/dist/pptx-viewer.css.br +0 -0
  67. package/dist/pptx-viewer.css.gz +0 -0
  68. package/dist/viewer/index.d.ts +15 -0
  69. package/dist/viewer/index.js +21 -21
  70. package/dist/viewer/index.js.br +0 -0
  71. package/dist/viewer/index.js.gz +0 -0
  72. package/dist/viewer/index.mjs +5 -5
  73. package/dist/viewer/index.mjs.br +0 -0
  74. package/dist/viewer/index.mjs.gz +0 -0
  75. package/package.json +3 -3
  76. package/dist/AiChatPanel-EMF3UYCE.mjs.br +0 -0
  77. package/dist/AiChatPanel-EMF3UYCE.mjs.gz +0 -0
  78. package/dist/AiChatPanel-OHSLJNYG.js.br +0 -0
  79. package/dist/AiChatPanel-OHSLJNYG.js.gz +0 -0
  80. package/dist/Model3DScene-ULHIJPMU.js.br +0 -0
  81. package/dist/Model3DScene-ULHIJPMU.js.gz +0 -0
  82. package/dist/Model3DScene-X6QJTWHV.mjs.br +0 -0
  83. package/dist/Model3DScene-X6QJTWHV.mjs.gz +0 -0
  84. package/dist/SurfaceChart3DScene-K7Q5NYZ4.js.br +0 -0
  85. package/dist/SurfaceChart3DScene-K7Q5NYZ4.js.gz +0 -0
  86. package/dist/SurfaceChart3DScene-PRCKQJQQ.mjs.gz +0 -0
  87. package/dist/chunk-7Q7AEPO7.js.br +0 -0
  88. package/dist/chunk-7Q7AEPO7.js.gz +0 -0
  89. package/dist/chunk-HDKHZKSW.mjs.br +0 -0
  90. package/dist/chunk-HDKHZKSW.mjs.gz +0 -0
  91. package/dist/chunk-LIQGO45T.mjs.br +0 -0
  92. package/dist/chunk-LIQGO45T.mjs.gz +0 -0
  93. package/dist/chunk-LTEDT475.js.br +0 -0
  94. package/dist/chunk-LTEDT475.js.gz +0 -0
  95. package/dist/chunk-MJAEB43A.js.br +0 -0
  96. package/dist/chunk-MJAEB43A.js.gz +0 -0
  97. package/dist/chunk-NVH3RIN7.js.br +0 -0
  98. package/dist/chunk-NVH3RIN7.js.gz +0 -0
  99. package/dist/chunk-OSSVKJGF.js.br +0 -0
  100. package/dist/chunk-OSSVKJGF.js.gz +0 -0
  101. package/dist/chunk-TGVID6BB.mjs.br +0 -0
  102. package/dist/chunk-TGVID6BB.mjs.gz +0 -0
  103. package/dist/chunk-VOV2N3NY.mjs.br +0 -0
  104. package/dist/chunk-VOV2N3NY.mjs.gz +0 -0
  105. package/dist/chunk-WJKMTDXS.mjs.br +0 -0
@@ -1627,7 +1627,7 @@ function decompressEotFont(fontData, compressed, encrypted) {
1627
1627
  return decompressMtx(fontData, { encrypted});
1628
1628
  }
1629
1629
 
1630
- // ../../node_modules/.bun/emf-converter@2.0.0/node_modules/emf-converter/dist/index.mjs
1630
+ // ../../node_modules/.bun/emf-converter@2.0.2/node_modules/emf-converter/dist/index.mjs
1631
1631
  function colorRefToHex(r, g, b) {
1632
1632
  const toHex4 = (v) => v.toString(16).padStart(2, "0");
1633
1633
  return `#${toHex4(r & 255)}${toHex4(g & 255)}${toHex4(b & 255)}`;
@@ -2046,19 +2046,22 @@ function mapFontFamily(face, map) {
2046
2046
  }
2047
2047
  return resolved;
2048
2048
  }
2049
- function applyFont(ctx, state) {
2049
+ function fontSizePx(state, scale = 1) {
2050
+ return Math.max(Math.abs(state.fontHeight) * Math.abs(scale || 1), 8);
2051
+ }
2052
+ function applyFont(ctx, state, scale = 1) {
2050
2053
  const italic = state.fontItalic ? "italic " : "";
2051
2054
  const weight = cssFontWeight(state.fontWeight);
2052
2055
  const weightPart = weight ? `${weight} ` : "";
2053
- const size = Math.max(Math.abs(state.fontHeight), 8);
2056
+ const size = fontSizePx(state, scale);
2054
2057
  const family = mapFontFamily(state.fontFamily, state.fontFamilyMap);
2055
2058
  ctx.font = `${italic}${weightPart}${size}px ${family}`;
2056
2059
  }
2057
- function drawTextDecorations(ctx, state, x, y, width) {
2060
+ function drawTextDecorations(ctx, state, x, y, width, scale = 1) {
2058
2061
  if (!state.fontUnderline && !state.fontStrikeOut) {
2059
2062
  return;
2060
2063
  }
2061
- const size = Math.max(Math.abs(state.fontHeight), 8);
2064
+ const size = fontSizePx(state, scale);
2062
2065
  const thickness = Math.max(1, Math.round(size / 14));
2063
2066
  const prevFill = ctx.fillStyle;
2064
2067
  ctx.fillStyle = state.textColor;
@@ -3007,7 +3010,8 @@ function handleExtTextOutW(rCtx, offset, dataOff, recSize) {
3007
3010
  if (nChars > 0 && offString > 0 && offset + offString + nChars * 2 <= maxOffset) {
3008
3011
  const text2 = readUtf16LE(view, offset + offString, nChars);
3009
3012
  if (text2.length > 0) {
3010
- applyFont(ctx, state);
3013
+ const fontScale = Math.abs(gmh(rCtx, 1));
3014
+ applyFont(ctx, state, fontScale);
3011
3015
  ctx.fillStyle = state.textColor;
3012
3016
  const vAlign = state.textAlign & 24;
3013
3017
  const alignBaseline = vAlign === 24 ? "alphabetic" : vAlign === 8 ? "bottom" : "top";
@@ -3022,7 +3026,7 @@ function handleExtTextOutW(rCtx, offset, dataOff, recSize) {
3022
3026
  ctx.textAlign = alignHoriz;
3023
3027
  if (state.bkMode === 2) {
3024
3028
  const measured = ctx.measureText(text2);
3025
- const bgH = state.fontHeight || 12;
3029
+ const bgH = fontSizePx(state, fontScale);
3026
3030
  ctx.fillStyle = state.bkColor;
3027
3031
  ctx.fillRect(gmx(rCtx, refX), gmy(rCtx, refY) - bgH, measured.width, bgH);
3028
3032
  ctx.fillStyle = state.textColor;
@@ -3032,7 +3036,7 @@ function handleExtTextOutW(rCtx, offset, dataOff, recSize) {
3032
3036
  const w = ctx.measureText(text2).width;
3033
3037
  const baseX = gmx(rCtx, refX);
3034
3038
  const startX = alignHoriz === "center" ? baseX - w / 2 : alignHoriz === "right" ? baseX - w : baseX;
3035
- drawTextDecorations(ctx, state, startX, gmy(rCtx, refY), w);
3039
+ drawTextDecorations(ctx, state, startX, gmy(rCtx, refY), w, fontScale);
3036
3040
  }
3037
3041
  }
3038
3042
  }
@@ -6186,7 +6190,7 @@ function handleWmfDrawRecord(wCtx, recType, offset, dataOff, recSize) {
6186
6190
  if (txOff + 4 <= offset + recSize) {
6187
6191
  const ty2 = view.getInt16(txOff, true);
6188
6192
  const txCoord = view.getInt16(txOff + 2, true);
6189
- applyFont(ctx, state);
6193
+ applyFont(ctx, state, Math.abs(mh(1)));
6190
6194
  ctx.fillStyle = state.textColor;
6191
6195
  ctx.fillText(text2, mx(txCoord), my(ty2));
6192
6196
  }
@@ -6209,7 +6213,7 @@ function handleWmfDrawRecord(wCtx, recType, offset, dataOff, recSize) {
6209
6213
  }
6210
6214
  text2 += String.fromCharCode(ch);
6211
6215
  }
6212
- applyFont(ctx, state);
6216
+ applyFont(ctx, state, Math.abs(mh(1)));
6213
6217
  ctx.fillStyle = state.textColor;
6214
6218
  ctx.fillText(text2, mx(txCoord), my(ty2));
6215
6219
  }
@@ -12650,9 +12654,9 @@ var PptxEffectDagExtractor = class {
12650
12654
  if (Number.isFinite(endPos)) {
12651
12655
  style.reflectionEndPosition = endPos / 1e5;
12652
12656
  }
12653
- const dist = parseInt(String(refl["@_dist"] || ""), 10);
12654
- if (Number.isFinite(dist) && dist >= 0) {
12655
- style.reflectionDistance = dist / this.context.emuPerPx;
12657
+ const dist2 = parseInt(String(refl["@_dist"] || ""), 10);
12658
+ if (Number.isFinite(dist2) && dist2 >= 0) {
12659
+ style.reflectionDistance = dist2 / this.context.emuPerPx;
12656
12660
  }
12657
12661
  }
12658
12662
  extractDagBlur(dag, style) {
@@ -13799,10 +13803,7 @@ var PptxShapeStyleExtractor = class {
13799
13803
  }
13800
13804
  const lineNode = shapeProps["a:ln"];
13801
13805
  if (lineNode) {
13802
- const earlyReturn = applyLineProperties(lineNode, style, this.context);
13803
- if (earlyReturn) {
13804
- return style;
13805
- }
13806
+ applyLineProperties(lineNode, style, this.context);
13806
13807
  } else if (styleNode?.["a:lnRef"]) {
13807
13808
  this.context.resolveThemeLineRef(styleNode["a:lnRef"], style);
13808
13809
  }
@@ -20383,6 +20384,11 @@ var STANDARD_TRANSITION_TYPES = /* @__PURE__ */ new Set([
20383
20384
  ]);
20384
20385
  var SPEEDS = /* @__PURE__ */ new Set(["slow", "med", "fast"]);
20385
20386
  var UINT_MAX = 4294967295;
20387
+ var MORPH_OPTIONS = /* @__PURE__ */ new Set(["byObject", "byWord", "byChar"]);
20388
+ function normalizeMorphOption(value) {
20389
+ const candidate = token(value);
20390
+ return MORPH_OPTIONS.has(candidate) ? candidate : void 0;
20391
+ }
20386
20392
  function parseTransitionDetails(node, localName22) {
20387
20393
  const result = { type: "cut" };
20388
20394
  for (const [key, value] of Object.entries(node)) {
@@ -20398,6 +20404,11 @@ function parseTransitionDetails(node, localName22) {
20398
20404
  result.rawExtLst = value;
20399
20405
  continue;
20400
20406
  }
20407
+ if (name === "morph") {
20408
+ result.type = "morph";
20409
+ result.morphOption = normalizeMorphOption(value?.["@_option"]);
20410
+ continue;
20411
+ }
20401
20412
  if (STANDARD_TRANSITION_TYPES.has(name)) {
20402
20413
  result.type = name;
20403
20414
  }
@@ -20597,6 +20608,7 @@ var PptxSlideTransitionService = class {
20597
20608
  let transitionType = details.type;
20598
20609
  let { direction, orient, pattern } = details;
20599
20610
  const { spokes, thruBlk, rawSoundAction, rawExtLst } = details;
20611
+ let { morphOption } = details;
20600
20612
  if (rawExtLst && transitionType === "cut") {
20601
20613
  const p14Result = parseP14FromExtLst(rawExtLst, this.xmlLookupService, this.getXmlLocalName);
20602
20614
  const p15Result = p14Result ? void 0 : parseP15FromExtLst(rawExtLst, this.xmlLookupService, this.getXmlLocalName);
@@ -20613,8 +20625,12 @@ var PptxSlideTransitionService = class {
20613
20625
  }
20614
20626
  } else if (p15Result) {
20615
20627
  transitionType = p15Result.type;
20616
- } else if (this.parseMorphFromExtLst(rawExtLst)) {
20617
- transitionType = "morph";
20628
+ } else {
20629
+ const morphResult = this.parseMorphFromExtLst(rawExtLst);
20630
+ if (morphResult) {
20631
+ transitionType = "morph";
20632
+ morphOption = morphResult.morphOption;
20633
+ }
20618
20634
  }
20619
20635
  }
20620
20636
  const attributes = parseTransitionAttributes(transitionNode);
@@ -20627,6 +20643,7 @@ var PptxSlideTransitionService = class {
20627
20643
  spokes,
20628
20644
  pattern,
20629
20645
  thruBlk,
20646
+ morphOption,
20630
20647
  ...sound,
20631
20648
  rawSoundAction,
20632
20649
  rawExtLst,
@@ -20672,21 +20689,18 @@ var PptxSlideTransitionService = class {
20672
20689
  if (!ext) {
20673
20690
  continue;
20674
20691
  }
20675
- const uri = String(ext["@_uri"] || "").trim();
20676
- const matchesUri = uri.toUpperCase() === MORPH_EXT_URI.toUpperCase();
20677
- for (const key of Object.keys(ext)) {
20692
+ for (const [key, value] of Object.entries(ext)) {
20678
20693
  if (key.startsWith("@_")) {
20679
20694
  continue;
20680
20695
  }
20681
20696
  if (this.getXmlLocalName(key) === "morph") {
20682
- if (matchesUri || uri.length === 0) {
20683
- return true;
20684
- }
20685
- return true;
20697
+ return {
20698
+ morphOption: normalizeMorphOption(value?.["@_option"])
20699
+ };
20686
20700
  }
20687
20701
  }
20688
20702
  }
20689
- return false;
20703
+ return void 0;
20690
20704
  }
20691
20705
  buildSlideTransitionXml(transition) {
20692
20706
  if (!transition || transition.type === "none") {
@@ -20710,7 +20724,9 @@ var PptxSlideTransitionService = class {
20710
20724
  } else if (isP15Type) {
20711
20725
  node["p:extLst"] = transition.rawExtLst ?? buildP15ExtLst(transitionType);
20712
20726
  } else if (isMorphType) {
20713
- node["p:extLst"] = this.buildMorphExtLst(transition.rawExtLst);
20727
+ if (!this.hasDirectMorphChild(node)) {
20728
+ node["p:extLst"] = this.buildMorphExtLst(transition.rawExtLst, transition.morphOption);
20729
+ }
20714
20730
  } else {
20715
20731
  node[`p:${transitionType}`] = buildStandardTransitionChild(transition);
20716
20732
  }
@@ -20724,16 +20740,32 @@ var PptxSlideTransitionService = class {
20724
20740
  }
20725
20741
  return node;
20726
20742
  }
20743
+ /**
20744
+ * True when the (preserved) transition node already carries a `morph`
20745
+ * element as a direct child, in any namespace prefix.
20746
+ */
20747
+ hasDirectMorphChild(node) {
20748
+ for (const key of Object.keys(node)) {
20749
+ if (!key.startsWith("@_") && this.getXmlLocalName(key) === "morph") {
20750
+ return true;
20751
+ }
20752
+ }
20753
+ return false;
20754
+ }
20727
20755
  /**
20728
20756
  * Build the extLst XML node for a morph (p159) transition, preserving any
20729
20757
  * non-morph extensions from rawExtLst.
20730
20758
  */
20731
- buildMorphExtLst(rawExtLst) {
20759
+ buildMorphExtLst(rawExtLst, morphOption) {
20760
+ const morphNode = {
20761
+ "@_xmlns:p159": "http://schemas.microsoft.com/office/powerpoint/2015/09/main"
20762
+ };
20763
+ if (morphOption) {
20764
+ morphNode["@_option"] = morphOption;
20765
+ }
20732
20766
  const morphExt = {
20733
20767
  "@_uri": MORPH_EXT_URI,
20734
- "p159:morph": {
20735
- "@_xmlns:p159": "http://schemas.microsoft.com/office/powerpoint/2015/09/main"
20736
- }
20768
+ "p159:morph": morphNode
20737
20769
  };
20738
20770
  if (!rawExtLst) {
20739
20771
  return { "p:ext": morphExt };
@@ -40950,12 +40982,12 @@ function estimateTextBoxCapacity(element) {
40950
40982
  if (fontSizePt <= 0) {
40951
40983
  fontSizePt = DEFAULT_FONT_SIZE_PT;
40952
40984
  }
40953
- const fontSizePx = fontSizePt * (4 / 3);
40985
+ const fontSizePx2 = fontSizePt * (4 / 3);
40954
40986
  const lineHeightMultiplier = style?.lineSpacing ?? DEFAULT_LINE_HEIGHT_MULTIPLIER;
40955
- const lineHeightPx = fontSizePx * lineHeightMultiplier;
40987
+ const lineHeightPx = fontSizePx2 * lineHeightMultiplier;
40956
40988
  const charsPerLine = Math.max(
40957
40989
  1,
40958
- Math.floor(availableWidth / (fontSizePx * AVG_CHAR_WIDTH_RATIO))
40990
+ Math.floor(availableWidth / (fontSizePx2 * AVG_CHAR_WIDTH_RATIO))
40959
40991
  );
40960
40992
  const numLines = Math.max(1, Math.floor(availableHeight / lineHeightPx));
40961
40993
  return charsPerLine * numLines;
@@ -49654,17 +49686,17 @@ function buildShadowColorNode(hex10, opacity2) {
49654
49686
  };
49655
49687
  }
49656
49688
  function distAndDir(ox, oy) {
49657
- const dist = Math.sqrt(ox * ox + oy * oy);
49689
+ const dist2 = Math.sqrt(ox * ox + oy * oy);
49658
49690
  const dir = Math.atan2(oy, ox) * 180 / Math.PI;
49659
- return { dist, dir };
49691
+ return { dist: dist2, dir };
49660
49692
  }
49661
49693
  function buildOuterShadowNode(style) {
49662
49694
  const ox = style.textShadowOffsetX ?? 0;
49663
49695
  const oy = style.textShadowOffsetY ?? 0;
49664
- const { dist, dir } = distAndDir(ox, oy);
49696
+ const { dist: dist2, dir } = distAndDir(ox, oy);
49665
49697
  return {
49666
49698
  "@_blurRad": String(Math.round((style.textShadowBlur ?? 4) * EMU_PER_PX8)),
49667
- "@_dist": String(Math.round(dist * EMU_PER_PX8)),
49699
+ "@_dist": String(Math.round(dist2 * EMU_PER_PX8)),
49668
49700
  "@_dir": String(Math.round(dir * 6e4)),
49669
49701
  "a:srgbClr": buildShadowColorNode(style.textShadowColor || "#000000", style.textShadowOpacity)
49670
49702
  };
@@ -49672,10 +49704,10 @@ function buildOuterShadowNode(style) {
49672
49704
  function buildInnerShadowNode(style) {
49673
49705
  const ox = style.textInnerShadowOffsetX ?? 0;
49674
49706
  const oy = style.textInnerShadowOffsetY ?? 0;
49675
- const { dist, dir } = distAndDir(ox, oy);
49707
+ const { dist: dist2, dir } = distAndDir(ox, oy);
49676
49708
  return {
49677
49709
  "@_blurRad": String(Math.round((style.textInnerShadowBlur ?? 3) * EMU_PER_PX8)),
49678
- "@_dist": String(Math.round(dist * EMU_PER_PX8)),
49710
+ "@_dist": String(Math.round(dist2 * EMU_PER_PX8)),
49679
49711
  "@_dir": String(Math.round(dir * 6e4)),
49680
49712
  "a:srgbClr": buildShadowColorNode(
49681
49713
  style.textInnerShadowColor || "#000000",
@@ -51301,10 +51333,10 @@ var PptxHandlerRuntime18 = class extends PptxHandlerRuntime17 {
51301
51333
  const distRaw = Number.parseInt(String(outerShdw["@_dist"] || ""), 10);
51302
51334
  const dirRaw = Number.parseInt(String(outerShdw["@_dir"] || ""), 10);
51303
51335
  if (Number.isFinite(distRaw) && distRaw >= 0) {
51304
- const dist = distRaw / PptxHandlerRuntime17.EMU_PER_PX;
51336
+ const dist2 = distRaw / PptxHandlerRuntime17.EMU_PER_PX;
51305
51337
  const dirRad = (Number.isFinite(dirRaw) ? dirRaw / 6e4 : 0) * Math.PI / 180;
51306
- style.textShadowOffsetX = Math.round(Math.cos(dirRad) * dist * 100) / 100;
51307
- style.textShadowOffsetY = Math.round(Math.sin(dirRad) * dist * 100) / 100;
51338
+ style.textShadowOffsetX = Math.round(Math.cos(dirRad) * dist2 * 100) / 100;
51339
+ style.textShadowOffsetY = Math.round(Math.sin(dirRad) * dist2 * 100) / 100;
51308
51340
  }
51309
51341
  }
51310
51342
  const glowNode = runEffectList["a:glow"];
@@ -62894,6 +62926,12 @@ var PptxHandlerRuntime62 = class _PptxHandlerRuntime26 extends PptxHandlerRuntim
62894
62926
  ...endParagraphStyle,
62895
62927
  ...defaultRunStyle
62896
62928
  };
62929
+ if (mergedDefaultRunStyle.color === void 0 && ctx.styleFontRefColor !== void 0) {
62930
+ mergedDefaultRunStyle.color = ctx.styleFontRefColor;
62931
+ }
62932
+ if (mergedDefaultRunStyle.fontFamily === void 0 && ctx.styleFontRefTypeface !== void 0) {
62933
+ mergedDefaultRunStyle.fontFamily = ctx.styleFontRefTypeface;
62934
+ }
62897
62935
  if (ctx.effectiveLevelStyles) {
62898
62936
  const normalizedLevel = level === -1 ? -1 : Number.isFinite(level) ? Math.min(Math.max(level, 0), 8) : 0;
62899
62937
  const phLevel = ctx.effectiveLevelStyles[normalizedLevel] ?? ctx.effectiveLevelStyles[-1] ?? (normalizedLevel === -1 ? ctx.effectiveLevelStyles[0] : void 0);
@@ -62966,10 +63004,17 @@ var PptxHandlerRuntime63 = class extends PptxHandlerRuntime62 {
62966
63004
  } else {
62967
63005
  bulletText = "\u2022 ";
62968
63006
  }
63007
+ const bulletStyle = { ...mergedDefaultRunStyle };
63008
+ if (paragraphBulletInfo.sizePercent === void 0 && paragraphBulletInfo.sizePts === void 0) {
63009
+ const firstRunSize = this.resolveFirstRunFontSize(p, paraAlign, ctx);
63010
+ if (firstRunSize !== void 0) {
63011
+ bulletStyle.fontSize = firstRunSize;
63012
+ }
63013
+ }
62969
63014
  parts.push(bulletText);
62970
63015
  segments.push({
62971
63016
  text: bulletText,
62972
- style: { ...mergedDefaultRunStyle },
63017
+ style: bulletStyle,
62973
63018
  bulletInfo: paragraphBulletInfo
62974
63019
  });
62975
63020
  maybeSeed(mergedDefaultRunStyle);
@@ -63179,6 +63224,32 @@ var PptxHandlerRuntime63 = class extends PptxHandlerRuntime62 {
63179
63224
  }
63180
63225
  return { parts, segments, seedStyle };
63181
63226
  }
63227
+ /**
63228
+ * Font size (px) of the first text run in a paragraph, or `undefined` when
63229
+ * the paragraph has no run that declares one.
63230
+ *
63231
+ * Used to size an unsized bullet the way PowerPoint does: `a:buChar` /
63232
+ * `a:buAutoNum` with no `a:buSzPct`/`a:buSzPts` inherits the first run's
63233
+ * size. Only `a:r` and `a:fld` carry renderable text; `a:br` does not.
63234
+ */
63235
+ resolveFirstRunFontSize(p, paraAlign, ctx) {
63236
+ for (const key of ["a:r", "a:fld"]) {
63237
+ const node = p[key];
63238
+ if (!node) {
63239
+ continue;
63240
+ }
63241
+ const first = this.ensureArray(node)[0];
63242
+ const runProps = first?.["a:rPr"];
63243
+ if (!runProps) {
63244
+ continue;
63245
+ }
63246
+ const style = this.extractTextRunStyle(runProps, paraAlign, ctx.slideRelationshipMap);
63247
+ if (typeof style.fontSize === "number") {
63248
+ return style.fontSize;
63249
+ }
63250
+ }
63251
+ return void 0;
63252
+ }
63182
63253
  /**
63183
63254
  * Parse an `a:ruby` element into a {@link TextSegment} with ruby annotation metadata.
63184
63255
  *
@@ -63400,15 +63471,13 @@ var PptxHandlerRuntime64 = class _PptxHandlerRuntime27 extends PptxHandlerRuntim
63400
63471
  Object.assign(textStyle, bodyDefaultRunStyle);
63401
63472
  const fontRef = styleNode?.["a:fontRef"];
63402
63473
  const fontRefIdx = String(fontRef?.["@_idx"] || "").toLowerCase();
63403
- if (!textStyle.fontFamily && fontRefIdx.length > 0) {
63404
- const token2 = fontRefIdx.includes("minor") ? "+mn-lt" : "+mj-lt";
63405
- const resolved = this.resolveThemeTypeface(token2);
63406
- if (resolved) {
63407
- textStyle.fontFamily = resolved;
63408
- }
63474
+ const styleFontRefTypeface = fontRefIdx.length > 0 ? this.resolveThemeTypeface(fontRefIdx.includes("minor") ? "+mn-lt" : "+mj-lt") : void 0;
63475
+ const styleFontRefColor = fontRef ? this.parseColor(fontRef) : void 0;
63476
+ if (!textStyle.fontFamily && styleFontRefTypeface) {
63477
+ textStyle.fontFamily = styleFontRefTypeface;
63409
63478
  }
63410
63479
  if (!textStyle.color) {
63411
- textStyle.color = this.parseColor(fontRef);
63480
+ textStyle.color = styleFontRefColor;
63412
63481
  }
63413
63482
  const bodyPr = txBody?.["a:bodyPr"] || inheritedTxBody?.["a:bodyPr"];
63414
63483
  const bodyPropResult = this.applyBodyProperties(
@@ -63439,7 +63508,9 @@ var PptxHandlerRuntime64 = class _PptxHandlerRuntime27 extends PptxHandlerRuntim
63439
63508
  placeholderInfo: placeholderInfo ?? void 0,
63440
63509
  phDefaults,
63441
63510
  slidePath,
63442
- effectiveLevelStyles
63511
+ effectiveLevelStyles,
63512
+ styleFontRefColor,
63513
+ styleFontRefTypeface
63443
63514
  };
63444
63515
  paras.forEach((p, pIdx) => {
63445
63516
  const styleResult = this.resolveShapeParagraphStyle(p, textStyle, ctx);
@@ -66349,12 +66420,12 @@ var PptxHandlerRuntime77 = class _PptxHandlerRuntime33 extends PptxHandlerRuntim
66349
66420
  if (Number.isFinite(blurRad) && blurRad > 0) {
66350
66421
  result.shadowBlur = blurRad / _PptxHandlerRuntime33.EMU_PER_PX;
66351
66422
  }
66352
- const dist = parseInt(String(outerShdw["@_dist"] || "0"));
66423
+ const dist2 = parseInt(String(outerShdw["@_dist"] || "0"));
66353
66424
  const dir = parseInt(String(outerShdw["@_dir"] || "0"));
66354
- if (Number.isFinite(dist) && dist > 0 && Number.isFinite(dir)) {
66425
+ if (Number.isFinite(dist2) && dist2 > 0 && Number.isFinite(dir)) {
66355
66426
  const angleRad = dir / 6e4 * (Math.PI / 180);
66356
- result.shadowOffsetX = Math.cos(angleRad) * dist / _PptxHandlerRuntime33.EMU_PER_PX;
66357
- result.shadowOffsetY = Math.sin(angleRad) * dist / _PptxHandlerRuntime33.EMU_PER_PX;
66427
+ result.shadowOffsetX = Math.cos(angleRad) * dist2 / _PptxHandlerRuntime33.EMU_PER_PX;
66428
+ result.shadowOffsetY = Math.sin(angleRad) * dist2 / _PptxHandlerRuntime33.EMU_PER_PX;
66358
66429
  }
66359
66430
  }
66360
66431
  const innerShdw = effectLst["a:innerShdw"];
@@ -66365,12 +66436,12 @@ var PptxHandlerRuntime77 = class _PptxHandlerRuntime33 extends PptxHandlerRuntim
66365
66436
  if (Number.isFinite(blurRad) && blurRad > 0) {
66366
66437
  result.innerShadowBlur = blurRad / _PptxHandlerRuntime33.EMU_PER_PX;
66367
66438
  }
66368
- const dist = parseInt(String(innerShdw["@_dist"] || "0"));
66439
+ const dist2 = parseInt(String(innerShdw["@_dist"] || "0"));
66369
66440
  const dir = parseInt(String(innerShdw["@_dir"] || "0"));
66370
- if (Number.isFinite(dist) && dist > 0 && Number.isFinite(dir)) {
66441
+ if (Number.isFinite(dist2) && dist2 > 0 && Number.isFinite(dir)) {
66371
66442
  const angleRad = dir / 6e4 * (Math.PI / 180);
66372
- result.innerShadowOffsetX = Math.cos(angleRad) * dist / _PptxHandlerRuntime33.EMU_PER_PX;
66373
- result.innerShadowOffsetY = Math.sin(angleRad) * dist / _PptxHandlerRuntime33.EMU_PER_PX;
66443
+ result.innerShadowOffsetX = Math.cos(angleRad) * dist2 / _PptxHandlerRuntime33.EMU_PER_PX;
66444
+ result.innerShadowOffsetY = Math.sin(angleRad) * dist2 / _PptxHandlerRuntime33.EMU_PER_PX;
66374
66445
  }
66375
66446
  }
66376
66447
  const glow = effectLst["a:glow"];
@@ -66415,9 +66486,9 @@ var PptxHandlerRuntime77 = class _PptxHandlerRuntime33 extends PptxHandlerRuntim
66415
66486
  if (Number.isFinite(rot)) {
66416
66487
  result.reflectionRotation = rot / 6e4;
66417
66488
  }
66418
- const dist = parseInt(String(reflection["@_dist"] || "0"));
66419
- if (Number.isFinite(dist) && dist >= 0) {
66420
- result.reflectionDistance = dist / _PptxHandlerRuntime33.EMU_PER_PX;
66489
+ const dist2 = parseInt(String(reflection["@_dist"] || "0"));
66490
+ if (Number.isFinite(dist2) && dist2 >= 0) {
66491
+ result.reflectionDistance = dist2 / _PptxHandlerRuntime33.EMU_PER_PX;
66421
66492
  }
66422
66493
  }
66423
66494
  const scene3dNode = es["a:scene3d"];
@@ -97937,6 +98008,789 @@ function sanitizeMathMl(markup) {
97937
98008
  }
97938
98009
  return sanitized;
97939
98010
  }
98011
+ function resolveParagraphStrutFontSize(segments, bodyFontSize) {
98012
+ let largest;
98013
+ for (const segment of segments) {
98014
+ if (segment.bulletInfo) {
98015
+ continue;
98016
+ }
98017
+ const size = segment.style?.fontSize;
98018
+ if (typeof size !== "number" || !Number.isFinite(size) || size <= 0) {
98019
+ continue;
98020
+ }
98021
+ if (largest === void 0 || size > largest) {
98022
+ largest = size;
98023
+ }
98024
+ }
98025
+ if (largest === void 0) {
98026
+ return void 0;
98027
+ }
98028
+ if (typeof bodyFontSize === "number" && Math.abs(largest - bodyFontSize) < 0.01) {
98029
+ return void 0;
98030
+ }
98031
+ return largest;
98032
+ }
98033
+ function parseHexColor(hex10) {
98034
+ if (!hex10 || typeof hex10 !== "string") {
98035
+ return null;
98036
+ }
98037
+ let cleaned = hex10.replace(/^#/u, "");
98038
+ if (cleaned.length === 3) {
98039
+ cleaned = cleaned[0] + cleaned[0] + cleaned[1] + cleaned[1] + cleaned[2] + cleaned[2];
98040
+ } else if (cleaned.length === 4) {
98041
+ cleaned = cleaned[0] + cleaned[0] + cleaned[1] + cleaned[1] + cleaned[2] + cleaned[2] + cleaned[3] + cleaned[3];
98042
+ }
98043
+ if (cleaned.length !== 6 && cleaned.length !== 8) {
98044
+ return null;
98045
+ }
98046
+ const r = Number.parseInt(cleaned.slice(0, 2), 16);
98047
+ const g = Number.parseInt(cleaned.slice(2, 4), 16);
98048
+ const b = Number.parseInt(cleaned.slice(4, 6), 16);
98049
+ const a = cleaned.length === 8 ? Number.parseInt(cleaned.slice(6, 8), 16) / 255 : 1;
98050
+ if ([r, g, b].some((v) => Number.isNaN(v))) {
98051
+ return null;
98052
+ }
98053
+ return { r, g, b, a: Number.isNaN(a) ? 1 : a };
98054
+ }
98055
+ function lerpColor2(from, to, t) {
98056
+ const clamped = Math.max(0, Math.min(1, t));
98057
+ const r = Math.round(from.r + (to.r - from.r) * clamped);
98058
+ const g = Math.round(from.g + (to.g - from.g) * clamped);
98059
+ const b = Math.round(from.b + (to.b - from.b) * clamped);
98060
+ const a = Number((from.a + (to.a - from.a) * clamped).toFixed(3));
98061
+ return `rgba(${r}, ${g}, ${b}, ${a})`;
98062
+ }
98063
+ var OUTLINE_SAMPLE_COUNT = 64;
98064
+ var ELLIPSE_SAMPLE_COUNT = 48;
98065
+ function resolveLength(token2, axis) {
98066
+ const trimmed = token2.trim();
98067
+ if (trimmed.endsWith("%")) {
98068
+ const pct = Number.parseFloat(trimmed.slice(0, -1));
98069
+ return Number.isFinite(pct) ? pct / 100 * axis : 0;
98070
+ }
98071
+ const px3 = Number.parseFloat(trimmed.replace(/px$/u, ""));
98072
+ return Number.isFinite(px3) ? px3 : 0;
98073
+ }
98074
+ function polygonClipToPoints(value, width, height) {
98075
+ const inner = value.slice(value.indexOf("(") + 1, value.lastIndexOf(")"));
98076
+ const points3 = [];
98077
+ for (const pairStr of inner.split(",")) {
98078
+ const parts = pairStr.trim().split(/\s+/u);
98079
+ if (parts.length < 2) {
98080
+ continue;
98081
+ }
98082
+ points3.push({
98083
+ x: resolveLength(parts[0], width),
98084
+ y: resolveLength(parts[1], height)
98085
+ });
98086
+ }
98087
+ return points3;
98088
+ }
98089
+ function insetClipToPoints(value, width, height) {
98090
+ const inner = value.slice(value.indexOf("(") + 1, value.lastIndexOf(")"));
98091
+ const tokens = inner.split(/round/u)[0].trim().split(/\s+/u);
98092
+ const top = resolveLength(tokens[0] ?? "0", height);
98093
+ const right = resolveLength(tokens[1] ?? tokens[0] ?? "0", width);
98094
+ const bottom = resolveLength(tokens[2] ?? tokens[0] ?? "0", height);
98095
+ const left = resolveLength(tokens[3] ?? tokens[1] ?? tokens[0] ?? "0", width);
98096
+ return [
98097
+ { x: left, y: top },
98098
+ { x: width - right, y: top },
98099
+ { x: width - right, y: height - bottom },
98100
+ { x: left, y: height - bottom }
98101
+ ];
98102
+ }
98103
+ function ellipseClipToPoints(value, width, height) {
98104
+ const isCircle = value.startsWith("circle");
98105
+ const inner = value.slice(value.indexOf("(") + 1, value.lastIndexOf(")"));
98106
+ const [radii, position2] = inner.split(/\s+at\s+/u);
98107
+ const radiusTokens = radii.trim().split(/\s+/u).filter(Boolean);
98108
+ let rx = width / 2;
98109
+ let ry = height / 2;
98110
+ if (isCircle) {
98111
+ const r = resolveLength(radiusTokens[0] ?? "50%", Math.min(width, height));
98112
+ rx = r;
98113
+ ry = r;
98114
+ } else {
98115
+ rx = resolveLength(radiusTokens[0] ?? "50%", width);
98116
+ ry = resolveLength(radiusTokens[1] ?? radiusTokens[0] ?? "50%", height);
98117
+ }
98118
+ let cx = width / 2;
98119
+ let cy = height / 2;
98120
+ if (position2) {
98121
+ const posTokens = position2.trim().split(/\s+/u);
98122
+ cx = resolveLength(posTokens[0] ?? "50%", width);
98123
+ cy = resolveLength(posTokens[1] ?? posTokens[0] ?? "50%", height);
98124
+ }
98125
+ const points3 = [];
98126
+ for (let i = 0; i < ELLIPSE_SAMPLE_COUNT; i++) {
98127
+ const a = i / ELLIPSE_SAMPLE_COUNT * Math.PI * 2;
98128
+ points3.push({ x: cx + Math.cos(a) * rx, y: cy + Math.sin(a) * ry });
98129
+ }
98130
+ return points3;
98131
+ }
98132
+ function clipPathToPolygon(value, width, height) {
98133
+ const v = value.trim();
98134
+ if (v.startsWith("polygon")) {
98135
+ return polygonClipToPoints(v, width, height);
98136
+ }
98137
+ if (v.startsWith("inset")) {
98138
+ return insetClipToPoints(v, width, height);
98139
+ }
98140
+ if (v.startsWith("ellipse") || v.startsWith("circle")) {
98141
+ return ellipseClipToPoints(v, width, height);
98142
+ }
98143
+ if (v.startsWith("path")) {
98144
+ const start = v.indexOf("'") >= 0 ? v.indexOf("'") : v.indexOf('"');
98145
+ const end = v.lastIndexOf("'") >= 0 ? v.lastIndexOf("'") : v.lastIndexOf('"');
98146
+ if (start >= 0 && end > start) {
98147
+ const d = v.slice(start + 1, end);
98148
+ const polys = svgPathToPolygons(d);
98149
+ if (polys.length === 0) {
98150
+ return [];
98151
+ }
98152
+ return polys.reduce((a, b) => b.length > a.length ? b : a);
98153
+ }
98154
+ }
98155
+ return [];
98156
+ }
98157
+ function resolveElementOutline(element) {
98158
+ const width = Math.max(element.width, 1);
98159
+ const height = Math.max(element.height, 1);
98160
+ const shapeType = element.shapeType;
98161
+ const adjustments = element.shapeAdjustments;
98162
+ const clip = getResolvedShapeClipPathFor(shapeType, width, height, adjustments);
98163
+ if (clip) {
98164
+ const poly = clipPathToPolygon(clip, width, height);
98165
+ if (poly.length >= 3) {
98166
+ return poly;
98167
+ }
98168
+ }
98169
+ return [
98170
+ { x: 0, y: 0 },
98171
+ { x: width, y: 0 },
98172
+ { x: width, y: height },
98173
+ { x: 0, y: height }
98174
+ ];
98175
+ }
98176
+ function dist(a, b) {
98177
+ return Math.hypot(a.x - b.x, a.y - b.y);
98178
+ }
98179
+ function resamplePolygon(poly, count) {
98180
+ if (poly.length < 2) {
98181
+ return Array.from({ length: count }, () => ({ x: poly[0]?.x ?? 0, y: poly[0]?.y ?? 0 }));
98182
+ }
98183
+ const ring = [...poly, poly[0]];
98184
+ const segLen = [];
98185
+ let total = 0;
98186
+ for (let i = 0; i < ring.length - 1; i++) {
98187
+ const d = dist(ring[i], ring[i + 1]);
98188
+ segLen.push(d);
98189
+ total += d;
98190
+ }
98191
+ if (total === 0) {
98192
+ return Array.from({ length: count }, () => ({ x: poly[0].x, y: poly[0].y }));
98193
+ }
98194
+ const result = [];
98195
+ const step = total / count;
98196
+ let seg = 0;
98197
+ let segStart = 0;
98198
+ for (let i = 0; i < count; i++) {
98199
+ const target = i * step;
98200
+ while (seg < segLen.length - 1 && segStart + segLen[seg] < target) {
98201
+ segStart += segLen[seg];
98202
+ seg++;
98203
+ }
98204
+ const within = segLen[seg] > 0 ? (target - segStart) / segLen[seg] : 0;
98205
+ const a = ring[seg];
98206
+ const b = ring[seg + 1];
98207
+ result.push({ x: a.x + (b.x - a.x) * within, y: a.y + (b.y - a.y) * within });
98208
+ }
98209
+ return result;
98210
+ }
98211
+ function signedArea2(poly) {
98212
+ let area = 0;
98213
+ for (let i = 0; i < poly.length; i++) {
98214
+ const a = poly[i];
98215
+ const b = poly[(i + 1) % poly.length];
98216
+ area += a.x * b.y - b.x * a.y;
98217
+ }
98218
+ return area / 2;
98219
+ }
98220
+ function rotateRing(poly, offset) {
98221
+ const n = poly.length;
98222
+ const o = (offset % n + n) % n;
98223
+ return poly.slice(o).concat(poly.slice(0, o));
98224
+ }
98225
+ function bestRotation(from, to) {
98226
+ let bestOffset = 0;
98227
+ let bestCost = Infinity;
98228
+ for (let offset = 0; offset < to.length; offset++) {
98229
+ let cost = 0;
98230
+ for (let i = 0; i < from.length; i++) {
98231
+ const t = to[(i + offset) % to.length];
98232
+ const dx = from[i].x - t.x;
98233
+ const dy = from[i].y - t.y;
98234
+ cost += dx * dx + dy * dy;
98235
+ if (cost >= bestCost) {
98236
+ break;
98237
+ }
98238
+ }
98239
+ if (cost < bestCost) {
98240
+ bestCost = cost;
98241
+ bestOffset = offset;
98242
+ }
98243
+ }
98244
+ return bestOffset;
98245
+ }
98246
+ function normalizeOutlinePair(fromPoly, toPoly, count = OUTLINE_SAMPLE_COUNT) {
98247
+ const from = resamplePolygon(fromPoly, count);
98248
+ let to = resamplePolygon(toPoly, count);
98249
+ if (Math.sign(signedArea2(from)) !== Math.sign(signedArea2(to))) {
98250
+ to = [...to].reverse();
98251
+ }
98252
+ const offset = bestRotation(from, to);
98253
+ to = rotateRing(to, offset);
98254
+ return [from, to];
98255
+ }
98256
+ function interpolateOutline(from, to, t) {
98257
+ const clamped = Math.max(0, Math.min(1, t));
98258
+ const len = Math.min(from.length, to.length);
98259
+ if (len === 0) {
98260
+ return "";
98261
+ }
98262
+ const parts = [];
98263
+ for (let i = 0; i < len; i++) {
98264
+ const x = from[i].x + (to[i].x - from[i].x) * clamped;
98265
+ const y = from[i].y + (to[i].y - from[i].y) * clamped;
98266
+ parts.push(`${i === 0 ? "M" : "L"}${Number(x.toFixed(2))} ${Number(y.toFixed(2))}`);
98267
+ }
98268
+ parts.push("Z");
98269
+ return parts.join(" ");
98270
+ }
98271
+ var MORPH_EASING = "cubic-bezier(0.4, 0, 0.2, 1)";
98272
+ var PROXIMITY_THRESHOLD = 300;
98273
+ var GEOMETRY_MORPH_STEPS = 8;
98274
+ function shouldGeometryMorph(pair) {
98275
+ const fromType = pair.fromElement.shapeType;
98276
+ const toType = pair.toElement.shapeType;
98277
+ if (!fromType || !toType) {
98278
+ return false;
98279
+ }
98280
+ if (fromType.toLowerCase() !== toType.toLowerCase()) {
98281
+ return true;
98282
+ }
98283
+ const fromAdj = JSON.stringify(
98284
+ pair.fromElement.shapeAdjustments ?? {}
98285
+ );
98286
+ const toAdj = JSON.stringify(
98287
+ pair.toElement.shapeAdjustments ?? {}
98288
+ );
98289
+ return fromAdj !== toAdj;
98290
+ }
98291
+ function buildClipKeyframeBody(from, to, steps) {
98292
+ const [fromRing, toRing] = normalizeOutlinePair(
98293
+ resolveElementOutline(from),
98294
+ resolveElementOutline(to)
98295
+ );
98296
+ if (fromRing.length === 0 || toRing.length === 0) {
98297
+ return null;
98298
+ }
98299
+ const lines = [];
98300
+ for (let s = 0; s <= steps; s++) {
98301
+ const t = s / steps;
98302
+ const d = interpolateOutline(fromRing, toRing, t);
98303
+ if (!d) {
98304
+ return null;
98305
+ }
98306
+ const pct = Number((s / steps * 100).toFixed(2));
98307
+ lines.push(` ${pct}% {
98308
+ clip-path: path('${d}');
98309
+ }`);
98310
+ }
98311
+ return lines.join("\n");
98312
+ }
98313
+ function generateGeometryMorphAnimation(pair, durationMs, pairIndex, steps = GEOMETRY_MORPH_STEPS) {
98314
+ if (!shouldGeometryMorph(pair)) {
98315
+ return null;
98316
+ }
98317
+ const body = buildClipKeyframeBody(pair.fromElement, pair.toElement, steps);
98318
+ if (!body) {
98319
+ return null;
98320
+ }
98321
+ const safeName = `pptx-morph-geo-${pairIndex}-${pair.toElement.id.replace(/[^a-zA-Z0-9]/gu, "")}`;
98322
+ const keyframes = `
98323
+ @keyframes ${safeName} {
98324
+ ${body}
98325
+ }`;
98326
+ return {
98327
+ elementId: pair.toElement.id,
98328
+ animation: `${safeName} ${durationMs}ms ${MORPH_EASING} forwards`,
98329
+ keyframes
98330
+ };
98331
+ }
98332
+ function getElementMorphName(element) {
98333
+ if (element.name) {
98334
+ const name = element.name.trim();
98335
+ if (name.startsWith("!!")) {
98336
+ return name;
98337
+ }
98338
+ }
98339
+ if (hasTextProperties(element) && element.text) {
98340
+ const text2 = element.text.trim();
98341
+ if (text2.startsWith("!!")) {
98342
+ return text2;
98343
+ }
98344
+ }
98345
+ return void 0;
98346
+ }
98347
+ function matchMorphElementsFull(fromSlide, toSlide) {
98348
+ const pairs2 = [];
98349
+ const usedFrom = /* @__PURE__ */ new Set();
98350
+ const usedTo = /* @__PURE__ */ new Set();
98351
+ for (const fromEl of fromSlide.elements) {
98352
+ const fromName = getElementMorphName(fromEl);
98353
+ if (!fromName) {
98354
+ continue;
98355
+ }
98356
+ for (const toEl of toSlide.elements) {
98357
+ if (usedTo.has(toEl.id)) {
98358
+ continue;
98359
+ }
98360
+ const toName = getElementMorphName(toEl);
98361
+ if (toName === fromName) {
98362
+ pairs2.push({ fromElement: fromEl, toElement: toEl });
98363
+ usedFrom.add(fromEl.id);
98364
+ usedTo.add(toEl.id);
98365
+ break;
98366
+ }
98367
+ }
98368
+ }
98369
+ for (const fromEl of fromSlide.elements) {
98370
+ if (usedFrom.has(fromEl.id)) {
98371
+ continue;
98372
+ }
98373
+ for (const toEl of toSlide.elements) {
98374
+ if (usedTo.has(toEl.id)) {
98375
+ continue;
98376
+ }
98377
+ if (fromEl.id === toEl.id) {
98378
+ pairs2.push({ fromElement: fromEl, toElement: toEl });
98379
+ usedFrom.add(fromEl.id);
98380
+ usedTo.add(toEl.id);
98381
+ break;
98382
+ }
98383
+ }
98384
+ }
98385
+ for (const fromEl of fromSlide.elements) {
98386
+ if (usedFrom.has(fromEl.id)) {
98387
+ continue;
98388
+ }
98389
+ let bestMatch = null;
98390
+ let bestDist = Infinity;
98391
+ for (const toEl of toSlide.elements) {
98392
+ if (usedTo.has(toEl.id)) {
98393
+ continue;
98394
+ }
98395
+ if (fromEl.type !== toEl.type) {
98396
+ continue;
98397
+ }
98398
+ const dx = fromEl.x - toEl.x;
98399
+ const dy = fromEl.y - toEl.y;
98400
+ const dist2 = Math.sqrt(dx * dx + dy * dy);
98401
+ if (dist2 < bestDist && dist2 < PROXIMITY_THRESHOLD) {
98402
+ bestDist = dist2;
98403
+ bestMatch = toEl;
98404
+ }
98405
+ }
98406
+ if (bestMatch) {
98407
+ pairs2.push({ fromElement: fromEl, toElement: bestMatch });
98408
+ usedFrom.add(fromEl.id);
98409
+ usedTo.add(bestMatch.id);
98410
+ }
98411
+ }
98412
+ const unmatchedFrom = fromSlide.elements.filter((el) => !usedFrom.has(el.id));
98413
+ const unmatchedTo = toSlide.elements.filter((el) => !usedTo.has(el.id));
98414
+ return { pairs: pairs2, unmatchedFrom, unmatchedTo };
98415
+ }
98416
+ function tokenizeText(element, mode) {
98417
+ if (!hasTextProperties(element) || !element.text) {
98418
+ return [];
98419
+ }
98420
+ const text2 = element.text;
98421
+ const style = element.textStyle;
98422
+ const fontSize = style?.fontSize ?? 14;
98423
+ const fontWeight = style?.bold ? "bold" : "normal";
98424
+ const color2 = style?.color ?? "#000000";
98425
+ const tokens = [];
98426
+ if (mode === "character") {
98427
+ const chars = Array.from(text2);
98428
+ const totalChars = chars.length;
98429
+ if (totalChars === 0) {
98430
+ return [];
98431
+ }
98432
+ for (let i = 0; i < chars.length; i++) {
98433
+ if (chars[i] === "\n") {
98434
+ continue;
98435
+ }
98436
+ tokens.push({
98437
+ text: chars[i],
98438
+ x: totalChars > 1 ? i / (totalChars - 1) : 0.5,
98439
+ y: 0.5,
98440
+ fontSize,
98441
+ fontWeight,
98442
+ color: color2
98443
+ });
98444
+ }
98445
+ } else {
98446
+ const words = text2.split(/\s+/u);
98447
+ const nonEmptyWords = words.filter((w) => w.trim().length > 0);
98448
+ const totalWords = nonEmptyWords.length;
98449
+ if (totalWords === 0) {
98450
+ return [];
98451
+ }
98452
+ let wordIndex = 0;
98453
+ for (const word of words) {
98454
+ if (word.trim().length === 0) {
98455
+ continue;
98456
+ }
98457
+ tokens.push({
98458
+ text: word,
98459
+ x: totalWords > 1 ? wordIndex / (totalWords - 1) : 0.5,
98460
+ y: 0.5,
98461
+ fontSize,
98462
+ fontWeight,
98463
+ color: color2
98464
+ });
98465
+ wordIndex++;
98466
+ }
98467
+ }
98468
+ return tokens;
98469
+ }
98470
+ function diffTokens(fromTokens, toTokens) {
98471
+ const n = fromTokens.length;
98472
+ const m = toTokens.length;
98473
+ const lcs = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));
98474
+ for (let i2 = n - 1; i2 >= 0; i2--) {
98475
+ for (let j2 = m - 1; j2 >= 0; j2--) {
98476
+ lcs[i2][j2] = fromTokens[i2].text === toTokens[j2].text ? lcs[i2 + 1][j2 + 1] + 1 : Math.max(lcs[i2 + 1][j2], lcs[i2][j2 + 1]);
98477
+ }
98478
+ }
98479
+ const ops = [];
98480
+ let i = 0;
98481
+ let j = 0;
98482
+ while (i < n && j < m) {
98483
+ if (fromTokens[i].text === toTokens[j].text) {
98484
+ ops.push({
98485
+ change: "shared",
98486
+ from: fromTokens[i],
98487
+ to: toTokens[j],
98488
+ fromIndex: i,
98489
+ toIndex: j
98490
+ });
98491
+ i++;
98492
+ j++;
98493
+ } else if (lcs[i + 1][j] >= lcs[i][j + 1]) {
98494
+ ops.push({ change: "removed", from: fromTokens[i], to: null, fromIndex: i, toIndex: -1 });
98495
+ i++;
98496
+ } else {
98497
+ ops.push({ change: "added", from: null, to: toTokens[j], fromIndex: -1, toIndex: j });
98498
+ j++;
98499
+ }
98500
+ }
98501
+ while (i < n) {
98502
+ ops.push({ change: "removed", from: fromTokens[i], to: null, fromIndex: i, toIndex: -1 });
98503
+ i++;
98504
+ }
98505
+ while (j < m) {
98506
+ ops.push({ change: "added", from: null, to: toTokens[j], fromIndex: -1, toIndex: j });
98507
+ j++;
98508
+ }
98509
+ return ops;
98510
+ }
98511
+ function tokenColor(token2) {
98512
+ const parsed = parseHexColor(token2.color);
98513
+ return parsed ? lerpColor2(parsed, parsed, 0) : token2.color;
98514
+ }
98515
+ function sharedKeyframes(name, op) {
98516
+ const from = op.from;
98517
+ const to = op.to;
98518
+ return `
98519
+ @keyframes ${name} {
98520
+ from {
98521
+ left: ${Number((from.x * 100).toFixed(2))}%;
98522
+ top: ${Number((from.y * 100).toFixed(2))}%;
98523
+ font-size: ${from.fontSize}pt;
98524
+ font-weight: ${from.fontWeight};
98525
+ color: ${tokenColor(from)};
98526
+ opacity: 1;
98527
+ }
98528
+ to {
98529
+ left: ${Number((to.x * 100).toFixed(2))}%;
98530
+ top: ${Number((to.y * 100).toFixed(2))}%;
98531
+ font-size: ${to.fontSize}pt;
98532
+ font-weight: ${to.fontWeight};
98533
+ color: ${tokenColor(to)};
98534
+ opacity: 1;
98535
+ }
98536
+ }`;
98537
+ }
98538
+ function fadeKeyframes(name, fadeIn) {
98539
+ const a = fadeIn ? 0 : 1;
98540
+ const b = fadeIn ? 1 : 0;
98541
+ return `
98542
+ @keyframes ${name} {
98543
+ from { opacity: ${a}; }
98544
+ to { opacity: ${b}; }
98545
+ }`;
98546
+ }
98547
+ function buildTokenMorphAnimations(ops, fromId, toId, durationMs, pairIndex) {
98548
+ const animations = [];
98549
+ for (let k = 0; k < ops.length; k++) {
98550
+ const op = ops[k];
98551
+ const name = `pptx-morph-tok-${pairIndex}-${k}`;
98552
+ const anim = `${name} ${durationMs}ms ${MORPH_EASING} forwards`;
98553
+ if (op.change === "shared") {
98554
+ animations.push({
98555
+ elementId: `${toId}__token_${op.toIndex}`,
98556
+ animation: anim,
98557
+ keyframes: sharedKeyframes(name, op)
98558
+ });
98559
+ } else if (op.change === "added") {
98560
+ animations.push({
98561
+ elementId: `${toId}__token_${op.toIndex}`,
98562
+ animation: anim,
98563
+ keyframes: fadeKeyframes(name, true)
98564
+ });
98565
+ } else {
98566
+ animations.push({
98567
+ elementId: `${fromId}__token_${op.fromIndex}`,
98568
+ animation: anim,
98569
+ keyframes: fadeKeyframes(name, false)
98570
+ });
98571
+ }
98572
+ }
98573
+ return animations;
98574
+ }
98575
+ function buildColorInterpolationProps(fromElement, toElement) {
98576
+ const fromFill = hasShapeProperties(fromElement) ? fromElement.shapeStyle?.fillColor : void 0;
98577
+ const toFill = hasShapeProperties(toElement) ? toElement.shapeStyle?.fillColor : void 0;
98578
+ if (!fromFill && !toFill) {
98579
+ return null;
98580
+ }
98581
+ if (fromFill === toFill) {
98582
+ return null;
98583
+ }
98584
+ const fromColor = parseHexColor(fromFill);
98585
+ const toColor = parseHexColor(toFill);
98586
+ if (!fromColor && !toColor) {
98587
+ return null;
98588
+ }
98589
+ const from = fromColor ?? { r: 255, g: 255, b: 255, a: 0 };
98590
+ const to = toColor ?? { r: 255, g: 255, b: 255, a: 0 };
98591
+ return {
98592
+ fromBg: lerpColor2(from, from, 0),
98593
+ toBg: lerpColor2(to, to, 0)
98594
+ };
98595
+ }
98596
+ function buildStrokeInterpolationProps(fromElement, toElement) {
98597
+ const fromStyle = hasShapeProperties(fromElement) ? fromElement.shapeStyle : void 0;
98598
+ const toStyle = hasShapeProperties(toElement) ? toElement.shapeStyle : void 0;
98599
+ const fromColor = fromStyle?.strokeColor;
98600
+ const toColor = toStyle?.strokeColor;
98601
+ const fromWidth = fromStyle?.strokeWidth ?? 0;
98602
+ const toWidth = toStyle?.strokeWidth ?? 0;
98603
+ if (!fromColor && !toColor && fromWidth === 0 && toWidth === 0) {
98604
+ return null;
98605
+ }
98606
+ if (fromColor === toColor && fromWidth === toWidth) {
98607
+ return null;
98608
+ }
98609
+ const fc = parseHexColor(fromColor) ?? { r: 0, g: 0, b: 0, a: 1 };
98610
+ const tc = parseHexColor(toColor) ?? { r: 0, g: 0, b: 0, a: 1 };
98611
+ return {
98612
+ fromStroke: lerpColor2(fc, fc, 0),
98613
+ toStroke: lerpColor2(tc, tc, 0),
98614
+ fromWidth,
98615
+ toWidth
98616
+ };
98617
+ }
98618
+ function generateMorphAnimations(pairs2, durationMs, _mode = "object") {
98619
+ const animations = [];
98620
+ for (let index = 0; index < pairs2.length; index++) {
98621
+ const { fromElement, toElement } = pairs2[index];
98622
+ const safeName = `pptx-morph-${index}-${toElement.id.replace(/[^a-zA-Z0-9]/gu, "")}`;
98623
+ const dx = fromElement.x - toElement.x;
98624
+ const dy = fromElement.y - toElement.y;
98625
+ const sx = Math.max(fromElement.width, 1) / Math.max(toElement.width, 1);
98626
+ const sy = Math.max(fromElement.height, 1) / Math.max(toElement.height, 1);
98627
+ const dr = (fromElement.rotation ?? 0) - (toElement.rotation ?? 0);
98628
+ const fromOpacity = fromElement.opacity ?? 1;
98629
+ const toOpacity = toElement.opacity ?? 1;
98630
+ const fromProps = [
98631
+ ` transform: translate(${dx}px, ${dy}px) scale(${sx}, ${sy}) rotate(${dr}deg);`,
98632
+ ` opacity: ${fromOpacity};`
98633
+ ];
98634
+ const toProps = [
98635
+ " transform: translate(0, 0) scale(1, 1) rotate(0deg);",
98636
+ ` opacity: ${toOpacity};`
98637
+ ];
98638
+ const colorInterp = buildColorInterpolationProps(fromElement, toElement);
98639
+ if (colorInterp) {
98640
+ fromProps.push(` background-color: ${colorInterp.fromBg};`);
98641
+ toProps.push(` background-color: ${colorInterp.toBg};`);
98642
+ }
98643
+ const strokeInterp = buildStrokeInterpolationProps(fromElement, toElement);
98644
+ if (strokeInterp) {
98645
+ fromProps.push(` outline: ${strokeInterp.fromWidth}px solid ${strokeInterp.fromStroke};`);
98646
+ toProps.push(` outline: ${strokeInterp.toWidth}px solid ${strokeInterp.toStroke};`);
98647
+ }
98648
+ const keyframes = `
98649
+ @keyframes ${safeName} {
98650
+ from {
98651
+ ${fromProps.join("\n")}
98652
+ }
98653
+ to {
98654
+ ${toProps.join("\n")}
98655
+ }
98656
+ }`;
98657
+ animations.push({
98658
+ elementId: toElement.id,
98659
+ animation: `${safeName} ${durationMs}ms ${MORPH_EASING} forwards`,
98660
+ keyframes
98661
+ });
98662
+ }
98663
+ return animations;
98664
+ }
98665
+ function generateUnmatchedFadeOutAnimations(elements, durationMs, startIndex) {
98666
+ return elements.map((el, i) => {
98667
+ const safeName = `pptx-morph-fadeout-${startIndex + i}-${el.id.replace(/[^a-zA-Z0-9]/gu, "")}`;
98668
+ const keyframes = `
98669
+ @keyframes ${safeName} {
98670
+ from {
98671
+ opacity: ${el.opacity ?? 1};
98672
+ transform: scale(1);
98673
+ }
98674
+ to {
98675
+ opacity: 0;
98676
+ transform: scale(0.95);
98677
+ }
98678
+ }`;
98679
+ return {
98680
+ elementId: el.id,
98681
+ animation: `${safeName} ${durationMs}ms ${MORPH_EASING} forwards`,
98682
+ keyframes
98683
+ };
98684
+ });
98685
+ }
98686
+ function generateUnmatchedFadeInAnimations(elements, durationMs, startIndex) {
98687
+ return elements.map((el, i) => {
98688
+ const safeName = `pptx-morph-fadein-${startIndex + i}-${el.id.replace(/[^a-zA-Z0-9]/gu, "")}`;
98689
+ const keyframes = `
98690
+ @keyframes ${safeName} {
98691
+ from {
98692
+ opacity: 0;
98693
+ transform: scale(0.95);
98694
+ }
98695
+ to {
98696
+ opacity: ${el.opacity ?? 1};
98697
+ transform: scale(1);
98698
+ }
98699
+ }`;
98700
+ return {
98701
+ elementId: el.id,
98702
+ animation: `${safeName} ${durationMs}ms ${MORPH_EASING} forwards`,
98703
+ keyframes
98704
+ };
98705
+ });
98706
+ }
98707
+ function generateTextMorphAnimations(pair, durationMs, mode, pairIndex) {
98708
+ const fromTokens = tokenizeText(pair.fromElement, mode);
98709
+ const toTokens = tokenizeText(pair.toElement, mode);
98710
+ if (fromTokens.length === 0 && toTokens.length === 0) {
98711
+ return [];
98712
+ }
98713
+ const ops = diffTokens(fromTokens, toTokens);
98714
+ return buildTokenMorphAnimations(
98715
+ ops,
98716
+ pair.fromElement.id,
98717
+ pair.toElement.id,
98718
+ durationMs,
98719
+ pairIndex
98720
+ );
98721
+ }
98722
+ function generateFullMorphTransition(fromSlide, toSlide, durationMs, mode = "object") {
98723
+ const matchResult = matchMorphElementsFull(fromSlide, toSlide);
98724
+ const allAnimations = [];
98725
+ const pairAnims = generateMorphAnimations(matchResult.pairs, durationMs, mode);
98726
+ allAnimations.push(...pairAnims);
98727
+ for (let i = 0; i < matchResult.pairs.length; i++) {
98728
+ const geo = generateGeometryMorphAnimation(matchResult.pairs[i], durationMs, i);
98729
+ if (geo) {
98730
+ allAnimations.push(geo);
98731
+ }
98732
+ }
98733
+ if (mode === "word" || mode === "character") {
98734
+ for (let i = 0; i < matchResult.pairs.length; i++) {
98735
+ const pair = matchResult.pairs[i];
98736
+ if (hasTextProperties(pair.fromElement) && hasTextProperties(pair.toElement)) {
98737
+ const textAnims = generateTextMorphAnimations(pair, durationMs, mode, i);
98738
+ allAnimations.push(...textAnims);
98739
+ }
98740
+ }
98741
+ }
98742
+ const fadeOuts = generateUnmatchedFadeOutAnimations(
98743
+ matchResult.unmatchedFrom,
98744
+ durationMs,
98745
+ pairAnims.length
98746
+ );
98747
+ allAnimations.push(...fadeOuts);
98748
+ const fadeIns = generateUnmatchedFadeInAnimations(
98749
+ matchResult.unmatchedTo,
98750
+ durationMs,
98751
+ pairAnims.length + fadeOuts.length
98752
+ );
98753
+ allAnimations.push(...fadeIns);
98754
+ return allAnimations;
98755
+ }
98756
+ function morphOptionToMode(option) {
98757
+ if (option === "byWord") {
98758
+ return "word";
98759
+ }
98760
+ if (option === "byChar") {
98761
+ return "character";
98762
+ }
98763
+ return "object";
98764
+ }
98765
+ function buildMorphTransitionPlan(fromSlide, toSlide, durationMs, mode = "object") {
98766
+ if (!fromSlide || !toSlide) {
98767
+ return void 0;
98768
+ }
98769
+ const match = matchMorphElementsFull(fromSlide, toSlide);
98770
+ if (match.pairs.length === 0 && match.unmatchedFrom.length === 0 && match.unmatchedTo.length === 0) {
98771
+ return void 0;
98772
+ }
98773
+ const animations = generateFullMorphTransition(fromSlide, toSlide, durationMs, mode);
98774
+ const outgoingIds = new Set(match.unmatchedFrom.map((element) => element.id));
98775
+ const incomingAnimations = /* @__PURE__ */ new Map();
98776
+ const outgoingAnimations = /* @__PURE__ */ new Map();
98777
+ const keyframes = [];
98778
+ for (const animation of animations) {
98779
+ keyframes.push(animation.keyframes);
98780
+ if (outgoingIds.has(animation.elementId)) {
98781
+ outgoingAnimations.set(animation.elementId, animation.animation);
98782
+ } else {
98783
+ incomingAnimations.set(animation.elementId, animation.animation);
98784
+ }
98785
+ }
98786
+ return {
98787
+ keyframesCss: keyframes.join("\n"),
98788
+ incomingAnimations,
98789
+ outgoingAnimations,
98790
+ outgoingElements: match.unmatchedFrom,
98791
+ durationMs
98792
+ };
98793
+ }
97940
98794
  function hexToRgb6(hex10) {
97941
98795
  const clean = hex10.replace(/^#/u, "");
97942
98796
  return {
@@ -109711,4 +110565,4 @@ function segmentFrameCount(durationMs, fps) {
109711
110565
  * `<p:extLst>` (optional)
109712
110566
  */
109713
110567
 
109714
- export { ACTION_BUTTON_PRESETS, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BROADCAST_THROTTLE_MS, CATEGORIES, COLOR_MAP_ALIAS_KEYS, CONNECTION_TIMEOUT_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_INSERT_CHART_TYPE, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, EQUATION_TEMPLATES, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, GRADIENT_TYPE_OPTIONS, HANDOUT_OPTIONS, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LOCAL_SYNC_ORIGIN, MOBILE_BREAKPOINT, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, PATTERN_OPTIONS, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESETS, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, SLIDE_VIRTUALIZATION_THRESHOLD, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, THEME_CATALOG, THEME_COLOR_LABELS, THEME_COLOR_SCHEME_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, WEBM_MIME_CANDIDATES, acceptsPresentationInput, activateModalFocus, addQuickAccessCommand, addSection, addSmartArtNode, addSmartArtNodeAsChild, alignElements, appendPresentationInkPoint, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyCaseTransformToSegments, applyChartBuildReveal, applyColorChange, applyDuotone, applyFormatToElement, applyPreferenceToOptions, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyThemeOverrideToSlide, applyThemeToData, availableQuickAccessCommands, bringForward, bringToFront, build3DExtrusionData, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartViewModel, buildCollaborationShareUrl, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDuotoneCacheKey, buildElementClipboardPayload, buildGlowBoxShadow, buildHandoutsHtml, buildInitialGuides, buildInnerShadowCssFromShapeStyle, buildJoinCollaborationConfig, buildMultiLayerShadowCss, buildNotesHtml, buildNotesPdfBytes, buildOutlineHtml, buildPatternFillCss, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildReflectionCss, buildShadowCssFromShapeStyle, buildSlidesHtml, buildSlidesPdfBytes, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildSummaryZoomView, buildTextBody3DSceneStyle, buildTextBuildSpec, buildTextFillCss, buildTextReflectionCss, buildTextRunFilterChain, buildTextShadowCss, buildThemeColorGrid, buildThemeColorMap, buildUserFontFaceStyles, canvasToJpegData, cell3DBevelCss, chartDataAddCategory, chartDataAddSeries, chartDataChangeType, chartDataRemoveCategory, chartDataRemoveSeries, chartDataUpdatePoint, chartPartToAttrs, clampCropValue, clampNotesFontSize, clampPercent, clampUnitInterval2 as clampUnitInterval, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearStoredViewerPrefs, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collectImagePaths, collectMediaElements, collectUsedFonts, colorWithOpacity, comparePresentation, computeAllNotesPages, computeAutoFitTextStyle, 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, createPresentationKeyBuffer, createPresentationSessionId, createPresenterTimer, createSyncGate, createTouchGestureRecognizer, createViewerOptionsStore, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableColumn, deleteTableRow, demoteSmartArtNode, derivePresenceList, detectOrientation, detectTouchDevice, distributeElements, downloadBlob, downloadDataUrl, dragAnchorViewY, dragValueForPart, elementActionToPptxAction, encodeGif, endAudienceDisplay, erasePresentationInkAt, evaluatePresetShape, extractPathPoints, filterCommands, findChartPartTarget, findSmartArtNodeText, 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, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageSvgFilters, getInkReplayStyles, getInlineEditorSelection, getKinsokuLineBreakStyles, getLinkedTextBoxSegments, getLocalStorageUsageSummary, getNotesPrintableArea, getOleBadgeLabel, getOleObjectTypeLabel, getOleTypeColor, getOleTypeLabel, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPrintableArea, getResolvedShapeClipPath, getRoundRectRadiusPx, getSecondaryValueAxis, getShapeAdjustmentHandleDescriptor, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeFilterId, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTextAlphaOpacity, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, hasCopyableFormat, hasDistinctScriptFonts, hasPressureVariation, hasShapeProperties, hasTextProperties, hexToRgbChannels2 as hexToRgbChannels, insertTableColumn, insertTableRow, isActionHidden, isBrowserOpenableMime, isCalloutShape, isCellInRect, isEditableTextElement, isExportAbortError, isFirstSlide, isImageLikeElement, isInkElement, isKeyboardOpen, isLastSlide, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationSessionMessage, isTemplateElement, isTemplateElementId2 as isTemplateElementId, isUrlSafe, listAutosaveSnapshots, listBackstageRecentFiles, loadAudienceContent, makeCloneId, makeSlideId, mapPresentationKey, mayLeaveSlideShow, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mobileElapsedSince, mobileSlideCounter, mountModel3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, newTableElement, normalizeColorsForCapture, normalizeHexColor, normalizeStrokeDashType, normalizeValue, notesSegmentsToSpans, observeYDocSlides, ooxmlDashToCssBorderStyle, ooxmlGradientAngleToCssDegrees, openPptxFile, openUrlInNewTab, paletteColor, parseDrawingColor, parseDrawingColorOpacity, parseMediaCommand, parsePpactionUrl, pickSupportedMimeType, placeAudienceWindow, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationInkPath, presenterElapsed, presenterPaneAdvancesOnClick, pressuresToWidths, printPropertiesFrameSlides, printPropertiesSlidesPerPage, promoteSmartArtNode, publishLiveGeometry, publishLiveInlineText, reResolveSlideColors, readBackstageRecentFile, readSlidesFromYDoc, readStoredViewerPrefs, readViewportMetrics, rebuildDrawingShapesIfCleared, rebuildTableStructureInRawXml, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, registerCollaborationTeardown, remapTextToSegments, removeQuickAccessCommand, removeSmartArtNode, renameSection, reorderSmartArtNode, rerouteConnectorsForMovedElements, resetPresenterTimer, resolveAudienceScreenPlacement, resolveCssTextAlign, resolveDrawingShapeNodeId, resolveFontForScript, resolveFontRefIdx, resolveGroupChildFill, resolveInkColor, resolveInkOpacity, resolveInkWidth, resolveLineHeight, resolveOleType, resolveParagraphAlign, resolveParagraphRtl, resolvePictureBullet, resolveProfileInitial, resolveRegionCode, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransportForServerUrl, resolveUnderlineDecorationStyle, resolveViewerAddinRows, restoreSegmentSelection, revealedSmartArtNodeCount, safeOpenUrl, sanitizeColor, sanitizeDownloadFilename, sanitizeMathMl, saveAutosaveSnapshot, saveViewerProfile, scanAvailableFontFamilies, segmentByScript, segmentFrameCount, sendBackward, sendToBack, sequentialColorScale, seriesColor2 as seriesColor, setCachedResult, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDuotoneCachedResult, setPendingSelectionRestore, setSmartArtNodeStyle, shadeColor2, shouldAutoFollowBroadcaster, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldLoopContinuously, shouldUseSvgWarp, slideProgressPercent, slideStatusLabel, snapBoxToGrid, splitCell, splitSeriesByAxis, stepPresenterZoom, storeAudienceContent, substituteFieldText, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, textBuildSpanStyle, themeColorSchemesEqual, themeToCssVars, tintColor2, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, togglePresenterTimer, transformTextCase, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateMergeAttrsInRawXml, updateSmartArtNodeText, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewerOptionsToPreferences, withChartPointValue, withChartTitle, withFrameSlides, withSlidesPerPage, writeStoredViewerPrefs };
110568
+ export { ACTION_BUTTON_PRESETS, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BROADCAST_THROTTLE_MS, CATEGORIES, COLOR_MAP_ALIAS_KEYS, CONNECTION_TIMEOUT_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_INSERT_CHART_TYPE, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, EQUATION_TEMPLATES, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, GRADIENT_TYPE_OPTIONS, HANDOUT_OPTIONS, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LOCAL_SYNC_ORIGIN, MOBILE_BREAKPOINT, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, PATTERN_OPTIONS, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESETS, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, SLIDE_VIRTUALIZATION_THRESHOLD, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, THEME_CATALOG, THEME_COLOR_LABELS, THEME_COLOR_SCHEME_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, WEBM_MIME_CANDIDATES, acceptsPresentationInput, activateModalFocus, addQuickAccessCommand, addSection, addSmartArtNode, addSmartArtNodeAsChild, alignElements, appendPresentationInkPoint, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyCaseTransformToSegments, applyChartBuildReveal, applyColorChange, applyDuotone, applyFormatToElement, applyPreferenceToOptions, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyThemeOverrideToSlide, applyThemeToData, availableQuickAccessCommands, bringForward, bringToFront, build3DExtrusionData, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartViewModel, buildCollaborationShareUrl, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDuotoneCacheKey, buildElementClipboardPayload, buildGlowBoxShadow, buildHandoutsHtml, buildInitialGuides, buildInnerShadowCssFromShapeStyle, buildJoinCollaborationConfig, buildMorphTransitionPlan, buildMultiLayerShadowCss, buildNotesHtml, buildNotesPdfBytes, buildOutlineHtml, buildPatternFillCss, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildReflectionCss, buildShadowCssFromShapeStyle, buildSlidesHtml, buildSlidesPdfBytes, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildSummaryZoomView, buildTextBody3DSceneStyle, buildTextBuildSpec, buildTextFillCss, buildTextReflectionCss, buildTextRunFilterChain, buildTextShadowCss, buildThemeColorGrid, buildThemeColorMap, buildUserFontFaceStyles, canvasToJpegData, cell3DBevelCss, chartDataAddCategory, chartDataAddSeries, chartDataChangeType, chartDataRemoveCategory, chartDataRemoveSeries, chartDataUpdatePoint, chartPartToAttrs, clampCropValue, clampNotesFontSize, clampPercent, clampUnitInterval2 as clampUnitInterval, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearStoredViewerPrefs, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collectImagePaths, collectMediaElements, collectUsedFonts, colorWithOpacity, comparePresentation, computeAllNotesPages, computeAutoFitTextStyle, 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, createPresentationKeyBuffer, createPresentationSessionId, createPresenterTimer, createSyncGate, createTouchGestureRecognizer, createViewerOptionsStore, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableColumn, deleteTableRow, demoteSmartArtNode, derivePresenceList, detectOrientation, detectTouchDevice, distributeElements, downloadBlob, downloadDataUrl, dragAnchorViewY, dragValueForPart, elementActionToPptxAction, encodeGif, endAudienceDisplay, erasePresentationInkAt, evaluatePresetShape, extractPathPoints, filterCommands, findChartPartTarget, findSmartArtNodeText, 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, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageSvgFilters, getInkReplayStyles, getInlineEditorSelection, getKinsokuLineBreakStyles, getLinkedTextBoxSegments, getLocalStorageUsageSummary, getNotesPrintableArea, getOleBadgeLabel, getOleObjectTypeLabel, getOleTypeColor, getOleTypeLabel, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPrintableArea, getResolvedShapeClipPath, getRoundRectRadiusPx, getSecondaryValueAxis, getShapeAdjustmentHandleDescriptor, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeFilterId, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTextAlphaOpacity, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, hasCopyableFormat, hasDistinctScriptFonts, hasPressureVariation, hasShapeProperties, hasTextProperties, hexToRgbChannels2 as hexToRgbChannels, insertTableColumn, insertTableRow, isActionHidden, isBrowserOpenableMime, isCalloutShape, isCellInRect, isEditableTextElement, isExportAbortError, isFirstSlide, isImageLikeElement, isInkElement, isKeyboardOpen, isLastSlide, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationSessionMessage, isTemplateElement, isTemplateElementId2 as isTemplateElementId, isUrlSafe, listAutosaveSnapshots, listBackstageRecentFiles, loadAudienceContent, makeCloneId, makeSlideId, mapPresentationKey, mayLeaveSlideShow, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mobileElapsedSince, mobileSlideCounter, morphOptionToMode, mountModel3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, newTableElement, normalizeColorsForCapture, normalizeHexColor, normalizeStrokeDashType, normalizeValue, notesSegmentsToSpans, observeYDocSlides, ooxmlDashToCssBorderStyle, ooxmlGradientAngleToCssDegrees, openPptxFile, openUrlInNewTab, paletteColor, parseDrawingColor, parseDrawingColorOpacity, parseMediaCommand, parsePpactionUrl, pickSupportedMimeType, placeAudienceWindow, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationInkPath, presenterElapsed, presenterPaneAdvancesOnClick, pressuresToWidths, printPropertiesFrameSlides, printPropertiesSlidesPerPage, promoteSmartArtNode, publishLiveGeometry, publishLiveInlineText, reResolveSlideColors, readBackstageRecentFile, readSlidesFromYDoc, readStoredViewerPrefs, readViewportMetrics, rebuildDrawingShapesIfCleared, rebuildTableStructureInRawXml, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, registerCollaborationTeardown, remapTextToSegments, removeQuickAccessCommand, removeSmartArtNode, renameSection, reorderSmartArtNode, rerouteConnectorsForMovedElements, resetPresenterTimer, resolveAudienceScreenPlacement, resolveCssTextAlign, resolveDrawingShapeNodeId, resolveFontForScript, resolveFontRefIdx, resolveGroupChildFill, resolveInkColor, resolveInkOpacity, resolveInkWidth, resolveLineHeight, resolveOleType, resolveParagraphAlign, resolveParagraphRtl, resolveParagraphStrutFontSize, resolvePictureBullet, resolveProfileInitial, resolveRegionCode, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransportForServerUrl, resolveUnderlineDecorationStyle, resolveViewerAddinRows, restoreSegmentSelection, revealedSmartArtNodeCount, safeOpenUrl, sanitizeColor, sanitizeDownloadFilename, sanitizeMathMl, saveAutosaveSnapshot, saveViewerProfile, scanAvailableFontFamilies, segmentByScript, segmentFrameCount, sendBackward, sendToBack, sequentialColorScale, seriesColor2 as seriesColor, setCachedResult, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDuotoneCachedResult, setPendingSelectionRestore, setSmartArtNodeStyle, shadeColor2, shouldAutoFollowBroadcaster, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldLoopContinuously, shouldUseSvgWarp, slideProgressPercent, slideStatusLabel, snapBoxToGrid, splitCell, splitSeriesByAxis, stepPresenterZoom, storeAudienceContent, substituteFieldText, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, textBuildSpanStyle, themeColorSchemesEqual, themeToCssVars, tintColor2, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, togglePresenterTimer, transformTextCase, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateMergeAttrsInRawXml, updateSmartArtNodeText, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewerOptionsToPreferences, withChartPointValue, withChartTitle, withFrameSlides, withSlidesPerPage, writeStoredViewerPrefs };