pptx-react-viewer 2.5.3 → 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 (106) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/{AiChatPanel-DPMHPOWF.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-OFOOWR4U.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-PD2MDBIE.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-P4OKVQBF.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-FECS3THE.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-TL4ZIOI4.mjs → SurfaceChart3DScene-64HI3U7Y.mjs} +1 -1
  18. package/dist/{SurfaceChart3DScene-TL4ZIOI4.mjs.br → SurfaceChart3DScene-64HI3U7Y.mjs.br} +0 -0
  19. package/dist/SurfaceChart3DScene-64HI3U7Y.mjs.gz +0 -0
  20. package/dist/{chunk-6KOM27PS.mjs → chunk-34ZW32XK.mjs} +902 -52
  21. package/dist/chunk-34ZW32XK.mjs.br +0 -0
  22. package/dist/chunk-34ZW32XK.mjs.gz +0 -0
  23. package/dist/{chunk-QDIF3ZXF.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-UUS7QT22.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-FFLUALX5.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-SAXG53MO.mjs → chunk-PENV7S7Z.mjs} +1 -1
  33. package/dist/chunk-PENV7S7Z.mjs.br +0 -0
  34. package/dist/chunk-PENV7S7Z.mjs.gz +0 -0
  35. package/dist/{chunk-F3JUUSC4.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-23Q3I2LM.js → chunk-UVA55CRK.js} +904 -51
  39. package/dist/chunk-UVA55CRK.js.br +0 -0
  40. package/dist/chunk-UVA55CRK.js.gz +0 -0
  41. package/dist/{chunk-USHZUHHG.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-H2FZ2NJ7.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-ZZA62IND.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 +1 -1
  76. package/dist/AiChatPanel-DPMHPOWF.js.br +0 -0
  77. package/dist/AiChatPanel-DPMHPOWF.js.gz +0 -0
  78. package/dist/AiChatPanel-OFOOWR4U.mjs.br +0 -0
  79. package/dist/AiChatPanel-OFOOWR4U.mjs.gz +0 -0
  80. package/dist/Model3DScene-P4OKVQBF.mjs.br +0 -0
  81. package/dist/Model3DScene-P4OKVQBF.mjs.gz +0 -0
  82. package/dist/Model3DScene-PD2MDBIE.js.br +0 -0
  83. package/dist/Model3DScene-PD2MDBIE.js.gz +0 -0
  84. package/dist/SurfaceChart3DScene-FECS3THE.js.br +0 -0
  85. package/dist/SurfaceChart3DScene-FECS3THE.js.gz +0 -0
  86. package/dist/SurfaceChart3DScene-TL4ZIOI4.mjs.gz +0 -0
  87. package/dist/chunk-23Q3I2LM.js.br +0 -0
  88. package/dist/chunk-23Q3I2LM.js.gz +0 -0
  89. package/dist/chunk-6KOM27PS.mjs.br +0 -0
  90. package/dist/chunk-6KOM27PS.mjs.gz +0 -0
  91. package/dist/chunk-F3JUUSC4.mjs.br +0 -0
  92. package/dist/chunk-F3JUUSC4.mjs.gz +0 -0
  93. package/dist/chunk-FFLUALX5.js.br +0 -0
  94. package/dist/chunk-FFLUALX5.js.gz +0 -0
  95. package/dist/chunk-H2FZ2NJ7.js.br +0 -0
  96. package/dist/chunk-H2FZ2NJ7.js.gz +0 -0
  97. package/dist/chunk-QDIF3ZXF.mjs.br +0 -0
  98. package/dist/chunk-QDIF3ZXF.mjs.gz +0 -0
  99. package/dist/chunk-SAXG53MO.mjs.br +0 -0
  100. package/dist/chunk-SAXG53MO.mjs.gz +0 -0
  101. package/dist/chunk-USHZUHHG.js.br +0 -0
  102. package/dist/chunk-USHZUHHG.js.gz +0 -0
  103. package/dist/chunk-UUS7QT22.js.br +0 -0
  104. package/dist/chunk-UUS7QT22.js.gz +0 -0
  105. package/dist/chunk-ZZA62IND.mjs.br +0 -0
  106. package/dist/chunk-ZZA62IND.mjs.gz +0 -0
@@ -12654,9 +12654,9 @@ var PptxEffectDagExtractor = class {
12654
12654
  if (Number.isFinite(endPos)) {
12655
12655
  style.reflectionEndPosition = endPos / 1e5;
12656
12656
  }
12657
- const dist = parseInt(String(refl["@_dist"] || ""), 10);
12658
- if (Number.isFinite(dist) && dist >= 0) {
12659
- 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;
12660
12660
  }
12661
12661
  }
12662
12662
  extractDagBlur(dag, style) {
@@ -13803,10 +13803,7 @@ var PptxShapeStyleExtractor = class {
13803
13803
  }
13804
13804
  const lineNode = shapeProps["a:ln"];
13805
13805
  if (lineNode) {
13806
- const earlyReturn = applyLineProperties(lineNode, style, this.context);
13807
- if (earlyReturn) {
13808
- return style;
13809
- }
13806
+ applyLineProperties(lineNode, style, this.context);
13810
13807
  } else if (styleNode?.["a:lnRef"]) {
13811
13808
  this.context.resolveThemeLineRef(styleNode["a:lnRef"], style);
13812
13809
  }
@@ -20387,6 +20384,11 @@ var STANDARD_TRANSITION_TYPES = /* @__PURE__ */ new Set([
20387
20384
  ]);
20388
20385
  var SPEEDS = /* @__PURE__ */ new Set(["slow", "med", "fast"]);
20389
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
+ }
20390
20392
  function parseTransitionDetails(node, localName22) {
20391
20393
  const result = { type: "cut" };
20392
20394
  for (const [key, value] of Object.entries(node)) {
@@ -20402,6 +20404,11 @@ function parseTransitionDetails(node, localName22) {
20402
20404
  result.rawExtLst = value;
20403
20405
  continue;
20404
20406
  }
20407
+ if (name === "morph") {
20408
+ result.type = "morph";
20409
+ result.morphOption = normalizeMorphOption(value?.["@_option"]);
20410
+ continue;
20411
+ }
20405
20412
  if (STANDARD_TRANSITION_TYPES.has(name)) {
20406
20413
  result.type = name;
20407
20414
  }
@@ -20601,6 +20608,7 @@ var PptxSlideTransitionService = class {
20601
20608
  let transitionType = details.type;
20602
20609
  let { direction, orient, pattern } = details;
20603
20610
  const { spokes, thruBlk, rawSoundAction, rawExtLst } = details;
20611
+ let { morphOption } = details;
20604
20612
  if (rawExtLst && transitionType === "cut") {
20605
20613
  const p14Result = parseP14FromExtLst(rawExtLst, this.xmlLookupService, this.getXmlLocalName);
20606
20614
  const p15Result = p14Result ? void 0 : parseP15FromExtLst(rawExtLst, this.xmlLookupService, this.getXmlLocalName);
@@ -20617,8 +20625,12 @@ var PptxSlideTransitionService = class {
20617
20625
  }
20618
20626
  } else if (p15Result) {
20619
20627
  transitionType = p15Result.type;
20620
- } else if (this.parseMorphFromExtLst(rawExtLst)) {
20621
- transitionType = "morph";
20628
+ } else {
20629
+ const morphResult = this.parseMorphFromExtLst(rawExtLst);
20630
+ if (morphResult) {
20631
+ transitionType = "morph";
20632
+ morphOption = morphResult.morphOption;
20633
+ }
20622
20634
  }
20623
20635
  }
20624
20636
  const attributes = parseTransitionAttributes(transitionNode);
@@ -20631,6 +20643,7 @@ var PptxSlideTransitionService = class {
20631
20643
  spokes,
20632
20644
  pattern,
20633
20645
  thruBlk,
20646
+ morphOption,
20634
20647
  ...sound,
20635
20648
  rawSoundAction,
20636
20649
  rawExtLst,
@@ -20676,21 +20689,18 @@ var PptxSlideTransitionService = class {
20676
20689
  if (!ext) {
20677
20690
  continue;
20678
20691
  }
20679
- const uri = String(ext["@_uri"] || "").trim();
20680
- const matchesUri = uri.toUpperCase() === MORPH_EXT_URI.toUpperCase();
20681
- for (const key of Object.keys(ext)) {
20692
+ for (const [key, value] of Object.entries(ext)) {
20682
20693
  if (key.startsWith("@_")) {
20683
20694
  continue;
20684
20695
  }
20685
20696
  if (this.getXmlLocalName(key) === "morph") {
20686
- if (matchesUri || uri.length === 0) {
20687
- return true;
20688
- }
20689
- return true;
20697
+ return {
20698
+ morphOption: normalizeMorphOption(value?.["@_option"])
20699
+ };
20690
20700
  }
20691
20701
  }
20692
20702
  }
20693
- return false;
20703
+ return void 0;
20694
20704
  }
20695
20705
  buildSlideTransitionXml(transition) {
20696
20706
  if (!transition || transition.type === "none") {
@@ -20714,7 +20724,9 @@ var PptxSlideTransitionService = class {
20714
20724
  } else if (isP15Type) {
20715
20725
  node["p:extLst"] = transition.rawExtLst ?? buildP15ExtLst(transitionType);
20716
20726
  } else if (isMorphType) {
20717
- node["p:extLst"] = this.buildMorphExtLst(transition.rawExtLst);
20727
+ if (!this.hasDirectMorphChild(node)) {
20728
+ node["p:extLst"] = this.buildMorphExtLst(transition.rawExtLst, transition.morphOption);
20729
+ }
20718
20730
  } else {
20719
20731
  node[`p:${transitionType}`] = buildStandardTransitionChild(transition);
20720
20732
  }
@@ -20728,16 +20740,32 @@ var PptxSlideTransitionService = class {
20728
20740
  }
20729
20741
  return node;
20730
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
+ }
20731
20755
  /**
20732
20756
  * Build the extLst XML node for a morph (p159) transition, preserving any
20733
20757
  * non-morph extensions from rawExtLst.
20734
20758
  */
20735
- 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
+ }
20736
20766
  const morphExt = {
20737
20767
  "@_uri": MORPH_EXT_URI,
20738
- "p159:morph": {
20739
- "@_xmlns:p159": "http://schemas.microsoft.com/office/powerpoint/2015/09/main"
20740
- }
20768
+ "p159:morph": morphNode
20741
20769
  };
20742
20770
  if (!rawExtLst) {
20743
20771
  return { "p:ext": morphExt };
@@ -49658,17 +49686,17 @@ function buildShadowColorNode(hex10, opacity2) {
49658
49686
  };
49659
49687
  }
49660
49688
  function distAndDir(ox, oy) {
49661
- const dist = Math.sqrt(ox * ox + oy * oy);
49689
+ const dist2 = Math.sqrt(ox * ox + oy * oy);
49662
49690
  const dir = Math.atan2(oy, ox) * 180 / Math.PI;
49663
- return { dist, dir };
49691
+ return { dist: dist2, dir };
49664
49692
  }
49665
49693
  function buildOuterShadowNode(style) {
49666
49694
  const ox = style.textShadowOffsetX ?? 0;
49667
49695
  const oy = style.textShadowOffsetY ?? 0;
49668
- const { dist, dir } = distAndDir(ox, oy);
49696
+ const { dist: dist2, dir } = distAndDir(ox, oy);
49669
49697
  return {
49670
49698
  "@_blurRad": String(Math.round((style.textShadowBlur ?? 4) * EMU_PER_PX8)),
49671
- "@_dist": String(Math.round(dist * EMU_PER_PX8)),
49699
+ "@_dist": String(Math.round(dist2 * EMU_PER_PX8)),
49672
49700
  "@_dir": String(Math.round(dir * 6e4)),
49673
49701
  "a:srgbClr": buildShadowColorNode(style.textShadowColor || "#000000", style.textShadowOpacity)
49674
49702
  };
@@ -49676,10 +49704,10 @@ function buildOuterShadowNode(style) {
49676
49704
  function buildInnerShadowNode(style) {
49677
49705
  const ox = style.textInnerShadowOffsetX ?? 0;
49678
49706
  const oy = style.textInnerShadowOffsetY ?? 0;
49679
- const { dist, dir } = distAndDir(ox, oy);
49707
+ const { dist: dist2, dir } = distAndDir(ox, oy);
49680
49708
  return {
49681
49709
  "@_blurRad": String(Math.round((style.textInnerShadowBlur ?? 3) * EMU_PER_PX8)),
49682
- "@_dist": String(Math.round(dist * EMU_PER_PX8)),
49710
+ "@_dist": String(Math.round(dist2 * EMU_PER_PX8)),
49683
49711
  "@_dir": String(Math.round(dir * 6e4)),
49684
49712
  "a:srgbClr": buildShadowColorNode(
49685
49713
  style.textInnerShadowColor || "#000000",
@@ -51305,10 +51333,10 @@ var PptxHandlerRuntime18 = class extends PptxHandlerRuntime17 {
51305
51333
  const distRaw = Number.parseInt(String(outerShdw["@_dist"] || ""), 10);
51306
51334
  const dirRaw = Number.parseInt(String(outerShdw["@_dir"] || ""), 10);
51307
51335
  if (Number.isFinite(distRaw) && distRaw >= 0) {
51308
- const dist = distRaw / PptxHandlerRuntime17.EMU_PER_PX;
51336
+ const dist2 = distRaw / PptxHandlerRuntime17.EMU_PER_PX;
51309
51337
  const dirRad = (Number.isFinite(dirRaw) ? dirRaw / 6e4 : 0) * Math.PI / 180;
51310
- style.textShadowOffsetX = Math.round(Math.cos(dirRad) * dist * 100) / 100;
51311
- 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;
51312
51340
  }
51313
51341
  }
51314
51342
  const glowNode = runEffectList["a:glow"];
@@ -62898,6 +62926,12 @@ var PptxHandlerRuntime62 = class _PptxHandlerRuntime26 extends PptxHandlerRuntim
62898
62926
  ...endParagraphStyle,
62899
62927
  ...defaultRunStyle
62900
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
+ }
62901
62935
  if (ctx.effectiveLevelStyles) {
62902
62936
  const normalizedLevel = level === -1 ? -1 : Number.isFinite(level) ? Math.min(Math.max(level, 0), 8) : 0;
62903
62937
  const phLevel = ctx.effectiveLevelStyles[normalizedLevel] ?? ctx.effectiveLevelStyles[-1] ?? (normalizedLevel === -1 ? ctx.effectiveLevelStyles[0] : void 0);
@@ -62970,10 +63004,17 @@ var PptxHandlerRuntime63 = class extends PptxHandlerRuntime62 {
62970
63004
  } else {
62971
63005
  bulletText = "\u2022 ";
62972
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
+ }
62973
63014
  parts.push(bulletText);
62974
63015
  segments.push({
62975
63016
  text: bulletText,
62976
- style: { ...mergedDefaultRunStyle },
63017
+ style: bulletStyle,
62977
63018
  bulletInfo: paragraphBulletInfo
62978
63019
  });
62979
63020
  maybeSeed(mergedDefaultRunStyle);
@@ -63183,6 +63224,32 @@ var PptxHandlerRuntime63 = class extends PptxHandlerRuntime62 {
63183
63224
  }
63184
63225
  return { parts, segments, seedStyle };
63185
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
+ }
63186
63253
  /**
63187
63254
  * Parse an `a:ruby` element into a {@link TextSegment} with ruby annotation metadata.
63188
63255
  *
@@ -63404,15 +63471,13 @@ var PptxHandlerRuntime64 = class _PptxHandlerRuntime27 extends PptxHandlerRuntim
63404
63471
  Object.assign(textStyle, bodyDefaultRunStyle);
63405
63472
  const fontRef = styleNode?.["a:fontRef"];
63406
63473
  const fontRefIdx = String(fontRef?.["@_idx"] || "").toLowerCase();
63407
- if (!textStyle.fontFamily && fontRefIdx.length > 0) {
63408
- const token2 = fontRefIdx.includes("minor") ? "+mn-lt" : "+mj-lt";
63409
- const resolved = this.resolveThemeTypeface(token2);
63410
- if (resolved) {
63411
- textStyle.fontFamily = resolved;
63412
- }
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;
63413
63478
  }
63414
63479
  if (!textStyle.color) {
63415
- textStyle.color = this.parseColor(fontRef);
63480
+ textStyle.color = styleFontRefColor;
63416
63481
  }
63417
63482
  const bodyPr = txBody?.["a:bodyPr"] || inheritedTxBody?.["a:bodyPr"];
63418
63483
  const bodyPropResult = this.applyBodyProperties(
@@ -63443,7 +63508,9 @@ var PptxHandlerRuntime64 = class _PptxHandlerRuntime27 extends PptxHandlerRuntim
63443
63508
  placeholderInfo: placeholderInfo ?? void 0,
63444
63509
  phDefaults,
63445
63510
  slidePath,
63446
- effectiveLevelStyles
63511
+ effectiveLevelStyles,
63512
+ styleFontRefColor,
63513
+ styleFontRefTypeface
63447
63514
  };
63448
63515
  paras.forEach((p, pIdx) => {
63449
63516
  const styleResult = this.resolveShapeParagraphStyle(p, textStyle, ctx);
@@ -66353,12 +66420,12 @@ var PptxHandlerRuntime77 = class _PptxHandlerRuntime33 extends PptxHandlerRuntim
66353
66420
  if (Number.isFinite(blurRad) && blurRad > 0) {
66354
66421
  result.shadowBlur = blurRad / _PptxHandlerRuntime33.EMU_PER_PX;
66355
66422
  }
66356
- const dist = parseInt(String(outerShdw["@_dist"] || "0"));
66423
+ const dist2 = parseInt(String(outerShdw["@_dist"] || "0"));
66357
66424
  const dir = parseInt(String(outerShdw["@_dir"] || "0"));
66358
- if (Number.isFinite(dist) && dist > 0 && Number.isFinite(dir)) {
66425
+ if (Number.isFinite(dist2) && dist2 > 0 && Number.isFinite(dir)) {
66359
66426
  const angleRad = dir / 6e4 * (Math.PI / 180);
66360
- result.shadowOffsetX = Math.cos(angleRad) * dist / _PptxHandlerRuntime33.EMU_PER_PX;
66361
- 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;
66362
66429
  }
66363
66430
  }
66364
66431
  const innerShdw = effectLst["a:innerShdw"];
@@ -66369,12 +66436,12 @@ var PptxHandlerRuntime77 = class _PptxHandlerRuntime33 extends PptxHandlerRuntim
66369
66436
  if (Number.isFinite(blurRad) && blurRad > 0) {
66370
66437
  result.innerShadowBlur = blurRad / _PptxHandlerRuntime33.EMU_PER_PX;
66371
66438
  }
66372
- const dist = parseInt(String(innerShdw["@_dist"] || "0"));
66439
+ const dist2 = parseInt(String(innerShdw["@_dist"] || "0"));
66373
66440
  const dir = parseInt(String(innerShdw["@_dir"] || "0"));
66374
- if (Number.isFinite(dist) && dist > 0 && Number.isFinite(dir)) {
66441
+ if (Number.isFinite(dist2) && dist2 > 0 && Number.isFinite(dir)) {
66375
66442
  const angleRad = dir / 6e4 * (Math.PI / 180);
66376
- result.innerShadowOffsetX = Math.cos(angleRad) * dist / _PptxHandlerRuntime33.EMU_PER_PX;
66377
- 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;
66378
66445
  }
66379
66446
  }
66380
66447
  const glow = effectLst["a:glow"];
@@ -66419,9 +66486,9 @@ var PptxHandlerRuntime77 = class _PptxHandlerRuntime33 extends PptxHandlerRuntim
66419
66486
  if (Number.isFinite(rot)) {
66420
66487
  result.reflectionRotation = rot / 6e4;
66421
66488
  }
66422
- const dist = parseInt(String(reflection["@_dist"] || "0"));
66423
- if (Number.isFinite(dist) && dist >= 0) {
66424
- 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;
66425
66492
  }
66426
66493
  }
66427
66494
  const scene3dNode = es["a:scene3d"];
@@ -97941,6 +98008,789 @@ function sanitizeMathMl(markup) {
97941
98008
  }
97942
98009
  return sanitized;
97943
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
+ }
97944
98794
  function hexToRgb6(hex10) {
97945
98795
  const clean = hex10.replace(/^#/u, "");
97946
98796
  return {
@@ -109715,4 +110565,4 @@ function segmentFrameCount(durationMs, fps) {
109715
110565
  * `<p:extLst>` (optional)
109716
110566
  */
109717
110567
 
109718
- 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 };