pptx-react-viewer 2.10.0 → 2.11.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 (124) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/{AiChatPanel-35CHYS5N.mjs → AiChatPanel-EX2TBRJM.mjs} +4 -4
  3. package/dist/AiChatPanel-EX2TBRJM.mjs.br +0 -0
  4. package/dist/AiChatPanel-EX2TBRJM.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-KTMWRUD5.js → AiChatPanel-PJPSDMN4.js} +23 -23
  6. package/dist/AiChatPanel-PJPSDMN4.js.br +0 -0
  7. package/dist/AiChatPanel-PJPSDMN4.js.gz +0 -0
  8. package/dist/{Model3DScene-2VMN3B65.mjs → Model3DScene-TTQFV7OS.mjs} +1 -1
  9. package/dist/Model3DScene-TTQFV7OS.mjs.br +0 -0
  10. package/dist/Model3DScene-TTQFV7OS.mjs.gz +0 -0
  11. package/dist/{Model3DScene-TMNUKCL6.js → Model3DScene-UCBPTEAY.js} +2 -2
  12. package/dist/Model3DScene-UCBPTEAY.js.br +0 -0
  13. package/dist/Model3DScene-UCBPTEAY.js.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-GKRDDN2U.mjs → SurfaceChart3DScene-5SZCRHZI.mjs} +1 -1
  15. package/dist/{SurfaceChart3DScene-GKRDDN2U.mjs.br → SurfaceChart3DScene-5SZCRHZI.mjs.br} +0 -0
  16. package/dist/SurfaceChart3DScene-5SZCRHZI.mjs.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-KPNP3QD5.js → SurfaceChart3DScene-ADKCYYOQ.js} +2 -2
  18. package/dist/SurfaceChart3DScene-ADKCYYOQ.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-ADKCYYOQ.js.gz +0 -0
  20. package/dist/{chunk-A7HLINZU.js → chunk-4J7SPY64.js} +334 -324
  21. package/dist/chunk-4J7SPY64.js.br +0 -0
  22. package/dist/chunk-4J7SPY64.js.gz +0 -0
  23. package/dist/{chunk-SL3XPERE.mjs → chunk-53NXKDMZ.mjs} +47 -0
  24. package/dist/chunk-53NXKDMZ.mjs.br +0 -0
  25. package/dist/chunk-53NXKDMZ.mjs.gz +0 -0
  26. package/dist/{chunk-TJ55KUWH.mjs → chunk-C2UWTH42.mjs} +859 -112
  27. package/dist/chunk-C2UWTH42.mjs.br +0 -0
  28. package/dist/chunk-C2UWTH42.mjs.gz +0 -0
  29. package/dist/{chunk-JWMXOYSX.js → chunk-E367QIKR.js} +2162 -1736
  30. package/dist/chunk-E367QIKR.js.br +0 -0
  31. package/dist/chunk-E367QIKR.js.gz +0 -0
  32. package/dist/{chunk-OHPF2HTP.mjs → chunk-HK2UERUX.mjs} +13 -3
  33. package/dist/chunk-HK2UERUX.mjs.br +0 -0
  34. package/dist/chunk-HK2UERUX.mjs.gz +0 -0
  35. package/dist/{chunk-H74UXL4Q.js → chunk-HMQVOPQH.js} +880 -111
  36. package/dist/chunk-HMQVOPQH.js.br +0 -0
  37. package/dist/chunk-HMQVOPQH.js.gz +0 -0
  38. package/dist/{chunk-LCG7WBAG.mjs → chunk-L2CM5EUD.mjs} +491 -65
  39. package/dist/chunk-L2CM5EUD.mjs.br +0 -0
  40. package/dist/chunk-L2CM5EUD.mjs.gz +0 -0
  41. package/dist/{chunk-IJVDNQLG.js → chunk-MM5RMRSP.js} +275 -249
  42. package/dist/chunk-MM5RMRSP.js.br +0 -0
  43. package/dist/chunk-MM5RMRSP.js.gz +0 -0
  44. package/dist/{chunk-MMK4K3QI.js → chunk-N6IHR6PS.js} +47 -0
  45. package/dist/chunk-N6IHR6PS.js.br +0 -0
  46. package/dist/chunk-N6IHR6PS.js.gz +0 -0
  47. package/dist/{chunk-FY2AFXKP.mjs → chunk-RJEY2KZH.mjs} +29 -4
  48. package/dist/chunk-RJEY2KZH.mjs.br +0 -0
  49. package/dist/chunk-RJEY2KZH.mjs.gz +0 -0
  50. package/dist/{chunk-LXTKPSIG.mjs → chunk-UZVRM6LD.mjs} +1 -1
  51. package/dist/chunk-UZVRM6LD.mjs.br +0 -0
  52. package/dist/{chunk-LXTKPSIG.mjs.gz → chunk-UZVRM6LD.mjs.gz} +0 -0
  53. package/dist/{chunk-SPJR6MPI.js → chunk-VNP627O5.js} +3 -3
  54. package/dist/chunk-VNP627O5.js.br +0 -0
  55. package/dist/chunk-VNP627O5.js.gz +0 -0
  56. package/dist/i18n.js +4 -4
  57. package/dist/i18n.js.br +0 -0
  58. package/dist/i18n.js.gz +0 -0
  59. package/dist/i18n.mjs +1 -1
  60. package/dist/i18n.mjs.br +0 -0
  61. package/dist/i18n.mjs.gz +0 -0
  62. package/dist/index.d.ts +24 -3
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +36 -36
  65. package/dist/index.js.br +0 -0
  66. package/dist/index.js.gz +0 -0
  67. package/dist/index.mjs +6 -6
  68. package/dist/index.mjs.br +0 -0
  69. package/dist/index.mjs.gz +0 -0
  70. package/dist/internals.d.ts +26 -2
  71. package/dist/internals.d.ts.map +1 -1
  72. package/dist/internals.js +79 -79
  73. package/dist/internals.js.br +0 -0
  74. package/dist/internals.js.gz +0 -0
  75. package/dist/internals.mjs +4 -4
  76. package/dist/internals.mjs.br +0 -0
  77. package/dist/internals.mjs.gz +0 -0
  78. package/dist/pptx-viewer.css +1 -1
  79. package/dist/pptx-viewer.css.br +0 -0
  80. package/dist/pptx-viewer.css.gz +0 -0
  81. package/dist/{useViewerBuildingBlocks-CpUwhBD5.d.ts → useViewerBuildingBlocks-Rqxm0pRS.d.ts} +17 -5
  82. package/dist/useViewerBuildingBlocks-Rqxm0pRS.d.ts.map +1 -0
  83. package/dist/viewer/index.js +22 -22
  84. package/dist/viewer/index.js.br +0 -0
  85. package/dist/viewer/index.js.gz +0 -0
  86. package/dist/viewer/index.mjs +6 -6
  87. package/dist/viewer/index.mjs.br +0 -0
  88. package/dist/viewer/index.mjs.gz +0 -0
  89. package/package.json +1 -1
  90. package/dist/AiChatPanel-35CHYS5N.mjs.br +0 -0
  91. package/dist/AiChatPanel-35CHYS5N.mjs.gz +0 -0
  92. package/dist/AiChatPanel-KTMWRUD5.js.br +0 -0
  93. package/dist/AiChatPanel-KTMWRUD5.js.gz +0 -0
  94. package/dist/Model3DScene-2VMN3B65.mjs.br +0 -0
  95. package/dist/Model3DScene-2VMN3B65.mjs.gz +0 -0
  96. package/dist/Model3DScene-TMNUKCL6.js.br +0 -0
  97. package/dist/Model3DScene-TMNUKCL6.js.gz +0 -0
  98. package/dist/SurfaceChart3DScene-GKRDDN2U.mjs.gz +0 -0
  99. package/dist/SurfaceChart3DScene-KPNP3QD5.js.br +0 -0
  100. package/dist/SurfaceChart3DScene-KPNP3QD5.js.gz +0 -0
  101. package/dist/chunk-A7HLINZU.js.br +0 -0
  102. package/dist/chunk-A7HLINZU.js.gz +0 -0
  103. package/dist/chunk-FY2AFXKP.mjs.br +0 -0
  104. package/dist/chunk-FY2AFXKP.mjs.gz +0 -0
  105. package/dist/chunk-H74UXL4Q.js.br +0 -0
  106. package/dist/chunk-H74UXL4Q.js.gz +0 -0
  107. package/dist/chunk-IJVDNQLG.js.br +0 -0
  108. package/dist/chunk-IJVDNQLG.js.gz +0 -0
  109. package/dist/chunk-JWMXOYSX.js.br +0 -0
  110. package/dist/chunk-JWMXOYSX.js.gz +0 -0
  111. package/dist/chunk-LCG7WBAG.mjs.br +0 -0
  112. package/dist/chunk-LCG7WBAG.mjs.gz +0 -0
  113. package/dist/chunk-LXTKPSIG.mjs.br +0 -0
  114. package/dist/chunk-MMK4K3QI.js.br +0 -0
  115. package/dist/chunk-MMK4K3QI.js.gz +0 -0
  116. package/dist/chunk-OHPF2HTP.mjs.br +0 -0
  117. package/dist/chunk-OHPF2HTP.mjs.gz +0 -0
  118. package/dist/chunk-SL3XPERE.mjs.br +0 -0
  119. package/dist/chunk-SL3XPERE.mjs.gz +0 -0
  120. package/dist/chunk-SPJR6MPI.js.br +0 -0
  121. package/dist/chunk-SPJR6MPI.js.gz +0 -0
  122. package/dist/chunk-TJ55KUWH.mjs.br +0 -0
  123. package/dist/chunk-TJ55KUWH.mjs.gz +0 -0
  124. package/dist/useViewerBuildingBlocks-CpUwhBD5.d.ts.map +0 -1
@@ -46601,8 +46601,8 @@ function applyImageColorEffects(blip, effects, parseColor, extractOpacity) {
46601
46601
  const rawFrom = child19(change.rawXml, "clrFrom");
46602
46602
  const rawTo = child19(change.rawXml, "clrTo");
46603
46603
  const rawTransparent = rawTo ? (opacity(rawTo, extractOpacity) ?? 1) <= 0 : void 0;
46604
- const unchanged = sameRawColor(rawFrom, change.clrFrom, parseColor) && sameRawColor(rawTo, change.clrTo, parseColor) && (rawTransparent === void 0 || change.clrToTransparent === rawTransparent);
46605
- if (unchanged && change.rawXml) {
46604
+ const unchanged2 = sameRawColor(rawFrom, change.clrFrom, parseColor) && sameRawColor(rawTo, change.clrTo, parseColor) && (rawTransparent === void 0 || change.clrToTransparent === rawTransparent);
46605
+ if (unchanged2 && change.rawXml) {
46606
46606
  setChild6(blip, "clrChange", change.rawXml);
46607
46607
  } else {
46608
46608
  const fromChoice = sameRawColor(rawFrom, change.clrFrom, parseColor) ? extractColorChoiceXml(rawFrom) : buildSrgbColorChoice(change.clrFrom);
@@ -50607,8 +50607,8 @@ var PptxHandlerRuntime14 = class extends PptxHandlerRuntime13 {
50607
50607
  }
50608
50608
  const notesBodyShape = shapes.find((shape) => {
50609
50609
  const placeholder = shape?.["p:nvSpPr"]?.["p:nvPr"]?.["p:ph"];
50610
- const placeholderType = String(placeholder?.["@_type"] || "").trim().toLowerCase();
50611
- return placeholderType === "body";
50610
+ const placeholderType2 = String(placeholder?.["@_type"] || "").trim().toLowerCase();
50611
+ return placeholderType2 === "body";
50612
50612
  }) || shapes.find((shape) => Boolean(shape?.["p:txBody"])) || shapes[0];
50613
50613
  if (!notesBodyShape) {
50614
50614
  return false;
@@ -51446,10 +51446,16 @@ var PptxHandlerRuntime17 = class extends PptxHandlerRuntime16 {
51446
51446
  * survive a save: collapsing them to the plain-text path silently downgrades
51447
51447
  * a field to static text (e.g. a slide-number field becomes a frozen number)
51448
51448
  * or drops the equation, ruby, or bullet.
51449
+ *
51450
+ * `paragraphLevel` (`a:pPr/@lvl`) belongs on this list for the same reason
51451
+ * and used to be missing from it: a nested bullet whose runs all share one
51452
+ * style looked "uniform", so the save path discarded its segments and rebuilt
51453
+ * the paragraph from the flat string, which carries no indent level. Every
51454
+ * such paragraph came back from a round-trip flattened to the top level.
51449
51455
  */
51450
51456
  isStructuralTextSegment(segment) {
51451
51457
  return Boolean(
51452
- segment.fieldType || segment.equationXml || segment.rubyText || segment.bulletInfo
51458
+ segment.fieldType || segment.equationXml || segment.rubyText || segment.bulletInfo || segment.paragraphLevel
51453
51459
  );
51454
51460
  }
51455
51461
  areTextSegmentsUniform(textSegments) {
@@ -87140,6 +87146,14 @@ function resolveDataPointExplosion(series, pointIndex) {
87140
87146
  const point = findDataPoint(series, pointIndex);
87141
87147
  return point?.explosion ?? series.explosion ?? 0;
87142
87148
  }
87149
+ function resolveDataPointMarker(series, pointIndex) {
87150
+ const point = findDataPoint(series, pointIndex)?.marker;
87151
+ return {
87152
+ symbol: point?.symbol ?? series.marker?.symbol,
87153
+ size: point?.size ?? series.marker?.size,
87154
+ fill: point?.spPr?.fillColor ?? series.marker?.spPr?.fillColor
87155
+ };
87156
+ }
87143
87157
  function addChartSeries(data) {
87144
87158
  return chartDataAddSeries(data, {
87145
87159
  name: `Series ${data.series.length + 1}`,
@@ -88027,13 +88041,16 @@ function buildMarkerPrimitive(input) {
88027
88041
  return { kind: "circle", cx, cy, r, fill, part };
88028
88042
  }
88029
88043
  }
88030
- function pushMarker(out, series, cx, cy, fill, defaultRadius2, part, opacity2) {
88044
+ function pushMarker(out, series, pointIndex, cx, cy, fill, defaultRadius2, part, opacity2) {
88045
+ const marker = resolveDataPointMarker(series, pointIndex);
88031
88046
  const m = buildMarkerPrimitive({
88032
- symbol: series.marker?.symbol,
88033
- size: series.marker?.size,
88047
+ symbol: marker.symbol,
88048
+ size: marker.size,
88034
88049
  cx,
88035
88050
  cy,
88036
- fill,
88051
+ // A marker fill (series or per-point) wins over the plot fill, which is
88052
+ // what the line/area body is drawn with.
88053
+ fill: marker.fill ?? fill,
88037
88054
  defaultRadius: defaultRadius2,
88038
88055
  part
88039
88056
  });
@@ -88113,6 +88130,7 @@ function buildLines(chartData, catCount, layout, primaryRange, secondaryRange, s
88113
88130
  pushMarker(
88114
88131
  primitives,
88115
88132
  series,
88133
+ idx,
88116
88134
  pt.x,
88117
88135
  pt.y,
88118
88136
  resolveDataPointFill(series, idx, c) ?? c,
@@ -88184,6 +88202,7 @@ function buildAreas(chartData, catCount, layout, range, sourceIndices2, xPositio
88184
88202
  pushMarker(
88185
88203
  primitives,
88186
88204
  series,
88205
+ idx,
88187
88206
  pt.x,
88188
88207
  pt.y,
88189
88208
  resolveDataPointFill(series, idx, c) ?? c,
@@ -88227,6 +88246,7 @@ function buildScatter(chartData, layout, range) {
88227
88246
  pushMarker(
88228
88247
  primitives,
88229
88248
  series,
88249
+ vi,
88230
88250
  dot.cx,
88231
88251
  dot.cy,
88232
88252
  resolveDataPointFill(series, vi, c) ?? c,
@@ -93696,6 +93716,10 @@ function applyFlyDirection(effect, subtype) {
93696
93716
  const suffix = `${edge.charAt(0).toUpperCase()}${edge.slice(1)}`;
93697
93717
  return `${prefix}${suffix}`;
93698
93718
  }
93719
+ function slideOffset(percent2, axis) {
93720
+ const fallback = axis === "w" ? "1280px" : "720px";
93721
+ return `calc(var(--pptx-slide-${axis}, ${fallback}) * ${(percent2 / 100).toFixed(4)})`;
93722
+ }
93699
93723
  function buildDynamicKeyframe(anim, uid) {
93700
93724
  if (anim.motionPath) {
93701
93725
  const name = `pptx-tl-motion-${uid}`;
@@ -93706,8 +93730,8 @@ function buildDynamicKeyframe(anim, uid) {
93706
93730
  const lines = [];
93707
93731
  for (let i = 0; i < points3.length; i++) {
93708
93732
  const pct = Math.round(i / (points3.length - 1) * 100);
93709
- const tx = points3[i].x.toFixed(2);
93710
- const ty = points3[i].y.toFixed(2);
93733
+ const tx = slideOffset(points3[i].x, "w");
93734
+ const ty = slideOffset(points3[i].y, "h");
93711
93735
  if (anim.motionPathRotateAuto) {
93712
93736
  const next = i < points3.length - 1 ? points3[i + 1] : points3[i];
93713
93737
  const prev = i > 0 ? points3[i - 1] : points3[i];
@@ -93715,10 +93739,10 @@ function buildDynamicKeyframe(anim, uid) {
93715
93739
  const dy = i < points3.length - 1 ? next.y - points3[i].y : points3[i].y - prev.y;
93716
93740
  const angleDeg = Math.atan2(dy, dx) * (180 / Math.PI);
93717
93741
  lines.push(
93718
- ` ${pct}% { transform: translate(${tx}%, ${ty}%) rotate(${angleDeg.toFixed(2)}deg); }`
93742
+ ` ${pct}% { transform: translate(${tx}, ${ty}) rotate(${angleDeg.toFixed(2)}deg); }`
93719
93743
  );
93720
93744
  } else {
93721
- lines.push(` ${pct}% { transform: translate(${tx}%, ${ty}%); }`);
93745
+ lines.push(` ${pct}% { transform: translate(${tx}, ${ty}); }`);
93722
93746
  }
93723
93747
  }
93724
93748
  return {
@@ -94853,6 +94877,422 @@ var TimelineEngine = class _TimelineEngine {
94853
94877
  }
94854
94878
  }
94855
94879
  };
94880
+ var PRESET_TO_EFFECT = {
94881
+ fadeIn: "fadeIn",
94882
+ flyIn: "flyInBottom",
94883
+ zoomIn: "zoomIn",
94884
+ fadeOut: "fadeOut",
94885
+ flyOut: "flyOutBottom",
94886
+ zoomOut: "zoomOut",
94887
+ spin: "spin",
94888
+ pulse: "pulse",
94889
+ colorWave: "colorWave",
94890
+ bounce: "bounce",
94891
+ flash: "flash"
94892
+ };
94893
+ var DIRECTION_FLY_MAP = {
94894
+ fromLeft: { flyIn: "flyInLeft", flyOut: "flyOutLeft" },
94895
+ fromRight: { flyIn: "flyInRight", flyOut: "flyOutRight" },
94896
+ fromTop: { flyIn: "flyInTop", flyOut: "flyOutTop" },
94897
+ fromBottom: { flyIn: "flyInBottom", flyOut: "flyOutBottom" },
94898
+ fromTopLeft: { flyIn: "flyInTop", flyOut: "flyOutTop" },
94899
+ fromTopRight: { flyIn: "flyInTop", flyOut: "flyOutTop" },
94900
+ fromBottomLeft: { flyIn: "flyInBottom", flyOut: "flyOutBottom" },
94901
+ fromBottomRight: { flyIn: "flyInBottom", flyOut: "flyOutBottom" }
94902
+ };
94903
+ function resolvePreviewEffect(preset, direction) {
94904
+ if ((preset === "flyIn" || preset === "flyOut") && direction) {
94905
+ const dirMap = DIRECTION_FLY_MAP[direction];
94906
+ if (dirMap) {
94907
+ return preset === "flyIn" ? dirMap.flyIn : dirMap.flyOut;
94908
+ }
94909
+ }
94910
+ return PRESET_TO_EFFECT[preset];
94911
+ }
94912
+ function timingCurveToCss(curve, cubicBezierValues) {
94913
+ if (cubicBezierValues) {
94914
+ const parts = cubicBezierValues.split(",").map((s) => s.trim());
94915
+ if (parts.length === 4 && parts.every((p) => !Number.isNaN(Number(p)))) {
94916
+ return `cubic-bezier(${parts.join(", ")})`;
94917
+ }
94918
+ }
94919
+ switch (curve) {
94920
+ case "ease":
94921
+ return "ease";
94922
+ case "ease-in":
94923
+ return "ease-in";
94924
+ case "ease-out":
94925
+ return "ease-out";
94926
+ case "linear":
94927
+ return "linear";
94928
+ default:
94929
+ return "ease";
94930
+ }
94931
+ }
94932
+ function buildPreviewAnimation(preset, options) {
94933
+ if (preset === "none") {
94934
+ return void 0;
94935
+ }
94936
+ const effectName = resolvePreviewEffect(preset, options?.direction);
94937
+ if (!effectName) {
94938
+ return void 0;
94939
+ }
94940
+ const keyframeName = `pptx-${effectName}`;
94941
+ const keyframesCss = getEffectKeyframes(effectName);
94942
+ if (!keyframesCss) {
94943
+ return void 0;
94944
+ }
94945
+ const duration = options?.durationMs ?? 600;
94946
+ const easing = timingCurveToCss(options?.timingCurve, options?.cubicBezier);
94947
+ return {
94948
+ keyframeName,
94949
+ keyframesCss,
94950
+ cssAnimation: `${keyframeName} ${duration}ms ${easing} 0ms 1 normal both`,
94951
+ durationMs: duration
94952
+ };
94953
+ }
94954
+ var EDITABLE = /* @__PURE__ */ new Set(["M", "L", "C", "Z", "m", "l", "c", "z"]);
94955
+ var ARITY = { m: 2, l: 2, c: 6, z: 0 };
94956
+ function scanPath(path) {
94957
+ const tokens = path.match(/[A-Za-z]|-?\d*\.?\d+(?:[eE][-+]?\d+)?/gu);
94958
+ if (!tokens) {
94959
+ return void 0;
94960
+ }
94961
+ const segments = [];
94962
+ let i = 0;
94963
+ let cmd = "";
94964
+ while (i < tokens.length) {
94965
+ if (/^[A-Za-z]$/u.test(tokens[i])) {
94966
+ cmd = tokens[i];
94967
+ i++;
94968
+ if (!EDITABLE.has(cmd)) {
94969
+ return void 0;
94970
+ }
94971
+ if (cmd === "Z" || cmd === "z") {
94972
+ segments.push({ cmd, coords: [] });
94973
+ }
94974
+ continue;
94975
+ }
94976
+ const arity = ARITY[cmd.toLowerCase()];
94977
+ if (!arity) {
94978
+ return void 0;
94979
+ }
94980
+ const coords = [];
94981
+ for (let n = 0; n < arity; n++) {
94982
+ const value = Number(tokens[i++]);
94983
+ if (!Number.isFinite(value)) {
94984
+ return void 0;
94985
+ }
94986
+ coords.push(value);
94987
+ }
94988
+ segments.push({ cmd, coords });
94989
+ if (cmd === "M") {
94990
+ cmd = "L";
94991
+ } else if (cmd === "m") {
94992
+ cmd = "l";
94993
+ }
94994
+ }
94995
+ return segments.length > 0 ? segments : void 0;
94996
+ }
94997
+ function formatPath(segments) {
94998
+ return segments.map(
94999
+ (segment) => segment.coords.length === 0 ? segment.cmd : `${segment.cmd} ${segment.coords.map((n) => trimNumber(n)).join(" ")}`
95000
+ ).join(" ");
95001
+ }
95002
+ function trimNumber(value) {
95003
+ return String(Number(value.toFixed(4)));
95004
+ }
95005
+ function motionPathFractionPoints(path) {
95006
+ return parseMotionPathPoints(path).map((point) => ({ x: point.x / 100, y: point.y / 100 }));
95007
+ }
95008
+ function toPixels(point, frame2) {
95009
+ return {
95010
+ x: frame2.originX + point.x * frame2.slideWidth,
95011
+ y: frame2.originY + point.y * frame2.slideHeight
95012
+ };
95013
+ }
95014
+ function motionPathToSvgD(path, frame2) {
95015
+ const points3 = motionPathFractionPoints(path).map((point) => toPixels(point, frame2));
95016
+ if (points3.length === 0) {
95017
+ return "";
95018
+ }
95019
+ const head = `M ${trimNumber(frame2.originX)} ${trimNumber(frame2.originY)}`;
95020
+ const rest = points3.map((point) => `L ${trimNumber(point.x)} ${trimNumber(point.y)}`);
95021
+ return [head, ...rest].join(" ");
95022
+ }
95023
+ function motionPathEndPixel(path, frame2) {
95024
+ const points3 = motionPathFractionPoints(path);
95025
+ const last = points3.length > 0 ? points3[points3.length - 1] : void 0;
95026
+ return last ? toPixels(last, frame2) : { x: frame2.originX, y: frame2.originY };
95027
+ }
95028
+ function setMotionPathEnd(path, x, y) {
95029
+ const segments = scanPath(path);
95030
+ if (!segments) {
95031
+ return path;
95032
+ }
95033
+ let lastIndex = -1;
95034
+ for (let i = segments.length - 1; i >= 0; i--) {
95035
+ if (segments[i].coords.length > 0) {
95036
+ lastIndex = i;
95037
+ break;
95038
+ }
95039
+ }
95040
+ if (lastIndex < 0 || segments.some((segment) => segment.cmd === "Z" || segment.cmd === "z")) {
95041
+ return path;
95042
+ }
95043
+ const last = segments[lastIndex];
95044
+ if (last.cmd === last.cmd.toLowerCase()) {
95045
+ return path;
95046
+ }
95047
+ const coords = [...last.coords];
95048
+ const endX = coords[coords.length - 2];
95049
+ const endY = coords[coords.length - 1];
95050
+ const dx = x - endX;
95051
+ const dy = y - endY;
95052
+ coords[coords.length - 2] = x;
95053
+ coords[coords.length - 1] = y;
95054
+ if (last.cmd === "C") {
95055
+ coords[2] += dx;
95056
+ coords[3] += dy;
95057
+ }
95058
+ const next = segments.map(
95059
+ (segment, index) => index === lastIndex ? { ...last, coords } : segment
95060
+ );
95061
+ return formatPath(next);
95062
+ }
95063
+ function isEditableMotionPath(path) {
95064
+ const segments = scanPath(path);
95065
+ if (!segments) {
95066
+ return false;
95067
+ }
95068
+ return !segments.some((segment) => segment.cmd === "Z" || segment.cmd === "z");
95069
+ }
95070
+ function buildMotionPathKeyframes(args) {
95071
+ const points3 = motionPathFractionPoints(args.path);
95072
+ if (points3.length < 2) {
95073
+ return void 0;
95074
+ }
95075
+ const frames = points3.map((point, index) => {
95076
+ const percent2 = Math.round(index / (points3.length - 1) * 100);
95077
+ const x = trimNumber(point.x * args.slideWidth);
95078
+ const y = trimNumber(point.y * args.slideHeight);
95079
+ return ` ${percent2}% { transform: translate(${x}px, ${y}px); }`;
95080
+ });
95081
+ return {
95082
+ keyframeName: args.keyframeName,
95083
+ css: `@keyframes ${args.keyframeName} {
95084
+ ${frames.join("\n")}
95085
+ }`
95086
+ };
95087
+ }
95088
+ var K = 0.5523;
95089
+ var RX = 0.125;
95090
+ var RY = 0.2222;
95091
+ var CIRCLE = [
95092
+ "M 0 0",
95093
+ `C ${-K * RX} 0 ${-RX} ${-RY + K * RY} ${-RX} ${-RY}`,
95094
+ `C ${-RX} ${-RY - K * RY} ${-K * RX} ${ -2 * RY} 0 ${ -2 * RY}`,
95095
+ `C ${K * RX} ${ -2 * RY} ${RX} ${-RY - K * RY} ${RX} ${-RY}`,
95096
+ `C ${RX} ${-RY + K * RY} ${K * RX} 0 0 0`
95097
+ ].join(" ").replace(/(\d\.\d{4})\d+/gu, "$1");
95098
+ var MOTION_PATH_PRESETS2 = [
95099
+ // -- Lines ---------------------------------------------------------------
95100
+ { id: "lineRight", family: "lines", path: "M 0 0 L 0.25 0" },
95101
+ { id: "lineLeft", family: "lines", path: "M 0 0 L -0.25 0" },
95102
+ { id: "lineDown", family: "lines", path: "M 0 0 L 0 0.25" },
95103
+ { id: "lineUp", family: "lines", path: "M 0 0 L 0 -0.25" },
95104
+ { id: "lineDiagonalUpRight", family: "lines", path: "M 0 0 L 0.25 -0.25" },
95105
+ { id: "lineDiagonalDownRight", family: "lines", path: "M 0 0 L 0.25 0.25" },
95106
+ { id: "lineDiagonalUpLeft", family: "lines", path: "M 0 0 L -0.25 -0.25" },
95107
+ { id: "lineDiagonalDownLeft", family: "lines", path: "M 0 0 L -0.25 0.25" },
95108
+ // -- Arcs ----------------------------------------------------------------
95109
+ {
95110
+ id: "arcUp",
95111
+ family: "arcs",
95112
+ path: "M 0 0 C 0 -0.1227 0.0559 -0.2222 0.125 -0.2222 C 0.1941 -0.2222 0.25 -0.1227 0.25 0"
95113
+ },
95114
+ {
95115
+ id: "arcDown",
95116
+ family: "arcs",
95117
+ path: "M 0 0 C 0 0.1227 0.0559 0.2222 0.125 0.2222 C 0.1941 0.2222 0.25 0.1227 0.25 0"
95118
+ },
95119
+ {
95120
+ id: "arcRight",
95121
+ family: "arcs",
95122
+ path: "M 0 0 C 0.069 0 0.125 0.0995 0.125 0.2222 C 0.125 0.3449 0.069 0.4444 0 0.4444"
95123
+ },
95124
+ {
95125
+ id: "arcLeft",
95126
+ family: "arcs",
95127
+ path: "M 0 0 C -0.069 0 -0.125 0.0995 -0.125 0.2222 C -0.125 0.3449 -0.069 0.4444 0 0.4444"
95128
+ },
95129
+ // -- Turns ---------------------------------------------------------------
95130
+ { id: "turnUp", family: "turns", path: "M 0 0 L 0.25 0 L 0.25 -0.25" },
95131
+ { id: "turnDown", family: "turns", path: "M 0 0 L 0.25 0 L 0.25 0.25" },
95132
+ { id: "turnRight", family: "turns", path: "M 0 0 L 0 0.25 L 0.25 0.25" },
95133
+ { id: "turnLeft", family: "turns", path: "M 0 0 L 0 0.25 L -0.25 0.25" },
95134
+ {
95135
+ id: "sCurve",
95136
+ family: "turns",
95137
+ path: "M 0 0 C 0.0833 -0.1111 0.1667 0.1111 0.25 0"
95138
+ },
95139
+ {
95140
+ id: "zigzag",
95141
+ family: "turns",
95142
+ path: "M 0 0 L 0.0625 -0.1111 L 0.125 0 L 0.1875 -0.1111 L 0.25 0"
95143
+ },
95144
+ // -- Shapes --------------------------------------------------------------
95145
+ { id: "circle", family: "shapes", path: CIRCLE },
95146
+ { id: "square", family: "shapes", path: "M 0 0 L 0.125 0 L 0.125 -0.2222 L 0 -0.2222 Z" },
95147
+ { id: "triangle", family: "shapes", path: "M 0 0 L 0.0625 -0.2222 L 0.125 0 Z" },
95148
+ {
95149
+ id: "diamond",
95150
+ family: "shapes",
95151
+ path: "M 0 0 L 0.0625 -0.1111 L 0.125 0 L 0.0625 0.1111 Z"
95152
+ },
95153
+ {
95154
+ id: "hexagon",
95155
+ family: "shapes",
95156
+ path: "M 0 0 L 0.0417 -0.1111 L 0.125 -0.1111 L 0.1667 0 L 0.125 0.1111 L 0.0417 0.1111 Z"
95157
+ },
95158
+ // -- Loops ---------------------------------------------------------------
95159
+ {
95160
+ id: "loopDeLoop",
95161
+ family: "loops",
95162
+ path: "M 0 0 C 0.0625 0 0.0972 -0.2222 0.1667 -0.2222 C 0.2361 -0.2222 0.2708 0 0.1667 0 L 0.3333 0"
95163
+ },
95164
+ {
95165
+ id: "figureEight",
95166
+ family: "loops",
95167
+ path: "M 0 0 C -0.0833 0 -0.0833 -0.2222 0 -0.2222 C 0.0833 -0.2222 0.0833 0 0.1667 0 C 0.25 0 0.25 -0.2222 0.1667 -0.2222 C 0.0833 -0.2222 0.0833 0 0 0"
95168
+ },
95169
+ {
95170
+ id: "spiral",
95171
+ family: "loops",
95172
+ path: "M 0 0 C 0.0417 0 0.0417 -0.0741 0 -0.0741 C -0.0625 -0.0741 -0.0625 -0.1852 0 -0.1852 C 0.0833 -0.1852 0.0833 -0.3333 0 -0.3333"
95173
+ }
95174
+ ];
95175
+ var MOTION_PATH_FAMILIES = [
95176
+ "lines",
95177
+ "arcs",
95178
+ "turns",
95179
+ "shapes",
95180
+ "loops"
95181
+ ];
95182
+ function motionPathFamilyLabelKey(family) {
95183
+ return `pptx.animation.motionPath.family.${family}`;
95184
+ }
95185
+ function motionPathPresetLabelKey(presetId) {
95186
+ return `pptx.animation.motionPath.preset.${presetId}`;
95187
+ }
95188
+ function motionPathPresetById(presetId) {
95189
+ return MOTION_PATH_PRESETS2.find((preset) => preset.id === presetId);
95190
+ }
95191
+ function motionPathPresetsByFamily(family) {
95192
+ return MOTION_PATH_PRESETS2.filter((preset) => preset.family === family);
95193
+ }
95194
+ function motionPathPresetIdForPath(path) {
95195
+ if (!path) {
95196
+ return void 0;
95197
+ }
95198
+ const normalized = path.trim().replace(/\s+/gu, " ");
95199
+ return MOTION_PATH_PRESETS2.find(
95200
+ (preset) => preset.path.trim().replace(/\s+/gu, " ") === normalized
95201
+ )?.id;
95202
+ }
95203
+ var DEFAULT_MOTION_PATH_PRESET_ID = "lineRight";
95204
+ var DEFAULT_MOTION_PATH_DURATION_MS = 2e3;
95205
+ var DEFAULT_TRIGGER2 = "onClick";
95206
+ function motionPathFor(animations, elementId) {
95207
+ return animations.find((animation) => animation.elementId === elementId)?.motionPath;
95208
+ }
95209
+ function setMotionPath(animations, elementId, path) {
95210
+ const index = animations.findIndex((animation) => animation.elementId === elementId);
95211
+ if (index >= 0) {
95212
+ return animations.map(
95213
+ (animation, i) => i === index ? {
95214
+ ...animation,
95215
+ motionPath: path,
95216
+ motionPathEditMode: animation.motionPathEditMode ?? "relative",
95217
+ durationMs: animation.durationMs ?? DEFAULT_MOTION_PATH_DURATION_MS
95218
+ } : animation
95219
+ );
95220
+ }
95221
+ return [
95222
+ ...animations,
95223
+ {
95224
+ elementId,
95225
+ motionPath: path,
95226
+ motionPathEditMode: "relative",
95227
+ durationMs: DEFAULT_MOTION_PATH_DURATION_MS,
95228
+ order: animations.length,
95229
+ trigger: DEFAULT_TRIGGER2
95230
+ }
95231
+ ];
95232
+ }
95233
+ function applyMotionPathPreset(animations, elementId, presetId) {
95234
+ const preset = motionPathPresetById(presetId);
95235
+ if (!preset) {
95236
+ return [...animations];
95237
+ }
95238
+ return setMotionPath(animations, elementId, preset.path);
95239
+ }
95240
+ function clearMotionPath(animations, elementId) {
95241
+ const index = animations.findIndex((animation) => animation.elementId === elementId);
95242
+ if (index < 0) {
95243
+ return [...animations];
95244
+ }
95245
+ const current = animations[index];
95246
+ const stillHasEffect = Boolean(current.entrance || current.emphasis || current.exit);
95247
+ if (!stillHasEffect) {
95248
+ return animations.filter((animation) => animation.elementId !== elementId).map((animation, i) => ({ ...animation, order: i }));
95249
+ }
95250
+ return animations.map(
95251
+ (animation, i) => i === index ? {
95252
+ ...animation,
95253
+ motionPath: void 0,
95254
+ motionPathEditMode: void 0,
95255
+ motionPtsTypes: void 0
95256
+ } : animation
95257
+ );
95258
+ }
95259
+ function motionPathNativeAnimations(slide) {
95260
+ const native = slide.nativeAnimations ?? [];
95261
+ const alreadyNative = new Set(
95262
+ native.filter((animation) => animation.motionPath).map((animation) => animation.targetId)
95263
+ );
95264
+ return (slide.animations ?? []).filter((animation) => Boolean(animation.motionPath) && !alreadyNative.has(animation.elementId)).map((animation) => ({
95265
+ targetId: animation.elementId,
95266
+ trigger: animation.trigger ?? DEFAULT_TRIGGER2,
95267
+ triggerShapeId: animation.triggerShapeId,
95268
+ presetClass: "path",
95269
+ durationMs: animation.durationMs ?? DEFAULT_MOTION_PATH_DURATION_MS,
95270
+ delayMs: animation.delayMs ?? 0,
95271
+ motionPath: animation.motionPath,
95272
+ motionPathEditMode: animation.motionPathEditMode ?? "relative"
95273
+ }));
95274
+ }
95275
+ function buildMotionPathPreview(args) {
95276
+ const keyframeName = `pptx-motion-preview-${args.uid ?? 0}`;
95277
+ const keyframes = buildMotionPathKeyframes({
95278
+ path: args.path,
95279
+ slideWidth: args.slideWidth,
95280
+ slideHeight: args.slideHeight,
95281
+ keyframeName
95282
+ });
95283
+ if (!keyframes) {
95284
+ return void 0;
95285
+ }
95286
+ const durationMs = args.durationMs ?? DEFAULT_MOTION_PATH_DURATION_MS;
95287
+ const delayMs = args.delayMs ?? 0;
95288
+ const easing = timingCurveToCss(args.timingCurve);
95289
+ return {
95290
+ keyframeName,
95291
+ keyframesCss: keyframes.css,
95292
+ cssAnimation: `${keyframeName} ${durationMs}ms ${easing} ${delayMs}ms 1 normal both`,
95293
+ durationMs
95294
+ };
95295
+ }
94856
95296
  function buildSegmentCounts(slide, nativeAnims) {
94857
95297
  const segmentCounts = /* @__PURE__ */ new Map();
94858
95298
  for (const anim of nativeAnims) {
@@ -94885,7 +95325,7 @@ var PresentationAnimationController = class _PresentationAnimationController {
94885
95325
  * id list (base element ids + text-build sub-element ids) to track.
94886
95326
  */
94887
95327
  static fromSlide(slide) {
94888
- const nativeAnims = slide.nativeAnimations ?? [];
95328
+ const nativeAnims = [...slide.nativeAnimations ?? [], ...motionPathNativeAnimations(slide)];
94889
95329
  const segmentCounts = buildSegmentCounts(slide, nativeAnims);
94890
95330
  const expandedAnims = segmentCounts.size > 0 ? expandTextBuildAnimations(nativeAnims, segmentCounts) : nativeAnims;
94891
95331
  const engine = TimelineEngine.fromAnimations(expandedAnims);
@@ -95076,80 +95516,6 @@ function runMediaCommand(command, resolve) {
95076
95516
  }
95077
95517
  return applyMediaCommandVerb(el, parsed);
95078
95518
  }
95079
- var PRESET_TO_EFFECT = {
95080
- fadeIn: "fadeIn",
95081
- flyIn: "flyInBottom",
95082
- zoomIn: "zoomIn",
95083
- fadeOut: "fadeOut",
95084
- flyOut: "flyOutBottom",
95085
- zoomOut: "zoomOut",
95086
- spin: "spin",
95087
- pulse: "pulse",
95088
- colorWave: "colorWave",
95089
- bounce: "bounce",
95090
- flash: "flash"
95091
- };
95092
- var DIRECTION_FLY_MAP = {
95093
- fromLeft: { flyIn: "flyInLeft", flyOut: "flyOutLeft" },
95094
- fromRight: { flyIn: "flyInRight", flyOut: "flyOutRight" },
95095
- fromTop: { flyIn: "flyInTop", flyOut: "flyOutTop" },
95096
- fromBottom: { flyIn: "flyInBottom", flyOut: "flyOutBottom" },
95097
- fromTopLeft: { flyIn: "flyInTop", flyOut: "flyOutTop" },
95098
- fromTopRight: { flyIn: "flyInTop", flyOut: "flyOutTop" },
95099
- fromBottomLeft: { flyIn: "flyInBottom", flyOut: "flyOutBottom" },
95100
- fromBottomRight: { flyIn: "flyInBottom", flyOut: "flyOutBottom" }
95101
- };
95102
- function resolvePreviewEffect(preset, direction) {
95103
- if ((preset === "flyIn" || preset === "flyOut") && direction) {
95104
- const dirMap = DIRECTION_FLY_MAP[direction];
95105
- if (dirMap) {
95106
- return preset === "flyIn" ? dirMap.flyIn : dirMap.flyOut;
95107
- }
95108
- }
95109
- return PRESET_TO_EFFECT[preset];
95110
- }
95111
- function timingCurveToCss(curve, cubicBezierValues) {
95112
- if (cubicBezierValues) {
95113
- const parts = cubicBezierValues.split(",").map((s) => s.trim());
95114
- if (parts.length === 4 && parts.every((p) => !Number.isNaN(Number(p)))) {
95115
- return `cubic-bezier(${parts.join(", ")})`;
95116
- }
95117
- }
95118
- switch (curve) {
95119
- case "ease":
95120
- return "ease";
95121
- case "ease-in":
95122
- return "ease-in";
95123
- case "ease-out":
95124
- return "ease-out";
95125
- case "linear":
95126
- return "linear";
95127
- default:
95128
- return "ease";
95129
- }
95130
- }
95131
- function buildPreviewAnimation(preset, options) {
95132
- if (preset === "none") {
95133
- return void 0;
95134
- }
95135
- const effectName = resolvePreviewEffect(preset, options?.direction);
95136
- if (!effectName) {
95137
- return void 0;
95138
- }
95139
- const keyframeName = `pptx-${effectName}`;
95140
- const keyframesCss = getEffectKeyframes(effectName);
95141
- if (!keyframesCss) {
95142
- return void 0;
95143
- }
95144
- const duration = options?.durationMs ?? 600;
95145
- const easing = timingCurveToCss(options?.timingCurve, options?.cubicBezier);
95146
- return {
95147
- keyframeName,
95148
- keyframesCss,
95149
- cssAnimation: `${keyframeName} ${duration}ms ${easing} 0ms 1 normal both`,
95150
- durationMs: duration
95151
- };
95152
- }
95153
95519
  var CAMERA_PRESET_MAP = {
95154
95520
  orthographicFront: { rotateX: 0, rotateY: 0, rotateZ: 0 },
95155
95521
  perspectiveFront: { perspective: "1000px", rotateX: 0, rotateY: 0, rotateZ: 0 },
@@ -107196,6 +107562,410 @@ function clampIndex(index, slideCount) {
107196
107562
  }
107197
107563
  return Math.min(Math.max(Math.trunc(index), 0), slideCount - 1);
107198
107564
  }
107565
+ var OUTLINE_VIEW_ATTR = "data-pptx-outline-view";
107566
+ var OUTLINE_ROW_ATTR = "data-pptx-outline-row";
107567
+ var OUTLINE_SLIDE_ATTR = "data-pptx-outline-slide";
107568
+ var OUTLINE_LEVEL_ATTR = "data-pptx-outline-level";
107569
+ var MAX_PARAGRAPH_LEVEL = 8;
107570
+ var TITLE_PH_TYPES = /* @__PURE__ */ new Set(["title", "ctrtitle"]);
107571
+ var CHROME_PH_TYPES = /* @__PURE__ */ new Set(["ftr", "hdr", "dt", "sldnum"]);
107572
+ var OUTLINE_TITLE_ELEMENT_NAME = "Title";
107573
+ function placeholderType(element) {
107574
+ const ph = element.rawXml?.["p:nvSpPr"]?.["p:nvPr"]?.["p:ph"];
107575
+ if (!ph) {
107576
+ return void 0;
107577
+ }
107578
+ const type = typeof ph["@_type"] === "string" ? ph["@_type"].trim().toLowerCase() : "";
107579
+ return type.length > 0 ? type : "body";
107580
+ }
107581
+ function isTextBearing(element) {
107582
+ return hasTextProperties(element);
107583
+ }
107584
+ function elementHasText(element) {
107585
+ if (!hasTextProperties(element)) {
107586
+ return false;
107587
+ }
107588
+ if (typeof element.text === "string" && element.text.trim().length > 0) {
107589
+ return true;
107590
+ }
107591
+ return (element.textSegments ?? []).some((segment) => segment.text.trim().length > 0);
107592
+ }
107593
+ function resolveSlideOutlineElements(slide) {
107594
+ const elements = (slide.elements ?? []).filter(isTextBearing);
107595
+ const placeholderTitle = elements.find((element) => {
107596
+ const type = placeholderType(element);
107597
+ return type !== void 0 && TITLE_PH_TYPES.has(type);
107598
+ });
107599
+ const placeholderBody = elements.filter((element) => {
107600
+ const type = placeholderType(element);
107601
+ return type !== void 0 && !TITLE_PH_TYPES.has(type) && !CHROME_PH_TYPES.has(type);
107602
+ });
107603
+ if (placeholderTitle || placeholderBody.length > 0) {
107604
+ return { title: placeholderTitle ?? null, body: placeholderBody };
107605
+ }
107606
+ const named = elements.find(
107607
+ (element) => (element.name ?? "").trim().toLowerCase() === OUTLINE_TITLE_ELEMENT_NAME.toLowerCase()
107608
+ );
107609
+ const withText = elements.filter(elementHasText);
107610
+ const title = named ?? withText[0] ?? null;
107611
+ return { title, body: withText.filter((element) => element !== title) };
107612
+ }
107613
+ function isBulletMarker(segment) {
107614
+ const bullet = segment.bulletInfo;
107615
+ if (!bullet) {
107616
+ return false;
107617
+ }
107618
+ const marker = bullet.char ? `${bullet.char} ` : bullet.imageRelId || bullet.imageDataUrl ? "\u{1F4CE} " : bullet.autoNumType ? void 0 : "\u2022 ";
107619
+ return marker ? segment.text === marker : bullet.paragraphIndex !== void 0;
107620
+ }
107621
+ function isParagraphSeparator(segment) {
107622
+ return Boolean(segment.isParagraphBreak) || segment.text === "\n" && !segment.isLineBreak;
107623
+ }
107624
+ function groupElementParagraphs(element) {
107625
+ const withText = hasTextProperties(element) ? element : void 0;
107626
+ const segments = withText?.textSegments;
107627
+ if (!segments || segments.length === 0) {
107628
+ const style = { ...withText?.textStyle ?? {} };
107629
+ return (withText?.text ?? "").split("\n").map((text2) => ({
107630
+ content: [{ text: text2, style: { ...style } }]
107631
+ }));
107632
+ }
107633
+ const groups = [{ content: [] }];
107634
+ for (const segment of segments) {
107635
+ if (isParagraphSeparator(segment)) {
107636
+ groups.push({ content: [] });
107637
+ continue;
107638
+ }
107639
+ const current = groups[groups.length - 1];
107640
+ if (current.content.length === 0 && current.marker === void 0 && isBulletMarker(segment)) {
107641
+ current.marker = segment;
107642
+ continue;
107643
+ }
107644
+ current.content.push(segment);
107645
+ }
107646
+ return groups;
107647
+ }
107648
+ function paragraphGroupText(group) {
107649
+ return group.content.map((segment) => segment.isLineBreak ? " " : segment.text).join("");
107650
+ }
107651
+ function paragraphGroupLevel(group) {
107652
+ const first = group.marker ?? group.content[0];
107653
+ const level = first?.paragraphLevel;
107654
+ return typeof level === "number" && level > 0 ? Math.min(level, MAX_PARAGRAPH_LEVEL) : 0;
107655
+ }
107656
+ function readElementParagraphs(element) {
107657
+ const groups = groupElementParagraphs(element);
107658
+ const paragraphs = groups.map((group) => ({
107659
+ text: paragraphGroupText(group),
107660
+ level: paragraphGroupLevel(group)
107661
+ }));
107662
+ let last = paragraphs.length - 1;
107663
+ while (last >= 0 && paragraphs[last].text.length === 0) {
107664
+ last -= 1;
107665
+ }
107666
+ return paragraphs.slice(0, last + 1);
107667
+ }
107668
+ function outlineRowKey(slideId, elementId, paragraphIndex) {
107669
+ return `${slideId}|${elementId ?? "\0new-title"}|${paragraphIndex}`;
107670
+ }
107671
+ function pushElementRows(rows, element, kind, slide, slideIndex) {
107672
+ for (const [paragraphIndex, paragraph] of readElementParagraphs(element).entries()) {
107673
+ rows.push({
107674
+ key: outlineRowKey(slide.id, element.id, paragraphIndex),
107675
+ slideIndex,
107676
+ slideId: slide.id,
107677
+ kind,
107678
+ elementId: element.id,
107679
+ paragraphIndex,
107680
+ // A title always sits in the leftmost column; body text is pushed one
107681
+ // column right of it, so authored level 0 reads as outline level 1.
107682
+ level: kind === "title" ? 0 : paragraph.level + 1,
107683
+ text: paragraph.text
107684
+ });
107685
+ }
107686
+ }
107687
+ function buildOutline(slides) {
107688
+ const rows = [];
107689
+ for (const [slideIndex, slide] of slides.entries()) {
107690
+ const { title, body } = resolveSlideOutlineElements(slide);
107691
+ const before = rows.length;
107692
+ if (title) {
107693
+ pushElementRows(rows, title, "title", slide, slideIndex);
107694
+ }
107695
+ if (rows.length === before) {
107696
+ rows.push({
107697
+ key: outlineRowKey(slide.id, title?.id ?? null, 0),
107698
+ slideIndex,
107699
+ slideId: slide.id,
107700
+ kind: "title",
107701
+ elementId: title?.id ?? null,
107702
+ paragraphIndex: 0,
107703
+ level: 0,
107704
+ text: ""
107705
+ });
107706
+ }
107707
+ for (const element of body) {
107708
+ pushElementRows(rows, element, "body", slide, slideIndex);
107709
+ }
107710
+ }
107711
+ return rows;
107712
+ }
107713
+ function findOutlineRow(rows, key) {
107714
+ return rows.find((row) => row.key === key);
107715
+ }
107716
+ var PASTE_OFFSET_PX = 20;
107717
+ function generateElementId() {
107718
+ return `el-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
107719
+ }
107720
+ function makeCloneId(intoTemplate, sourceId) {
107721
+ if (!intoTemplate) {
107722
+ return generateElementId();
107723
+ }
107724
+ if (sourceId.startsWith("master-")) {
107725
+ return `master-${generateElementId()}`;
107726
+ }
107727
+ return `layout-${generateElementId()}`;
107728
+ }
107729
+ function buildElementClipboardPayload(element, isTemplate) {
107730
+ return { element: structuredClone(element), isTemplate };
107731
+ }
107732
+ function cloneElementForPaste(element, options = {}) {
107733
+ const clone3 = structuredClone(element);
107734
+ clone3.id = makeCloneId(options.intoTemplate ?? false, element.id);
107735
+ clone3.x += options.offsetX ?? PASTE_OFFSET_PX;
107736
+ clone3.y += options.offsetY ?? PASTE_OFFSET_PX;
107737
+ return clone3;
107738
+ }
107739
+ function mapOutlineKey(input, rowKey) {
107740
+ const none = { edit: null, preventDefault: false };
107741
+ if (input.ctrlKey || input.metaKey) {
107742
+ return none;
107743
+ }
107744
+ if (input.key === "Tab" && !input.altKey) {
107745
+ return {
107746
+ edit: { type: "indent", key: rowKey, delta: input.shiftKey ? -1 : 1 },
107747
+ preventDefault: true
107748
+ };
107749
+ }
107750
+ if (input.altKey && input.shiftKey && (input.key === "ArrowRight" || input.key === "ArrowLeft")) {
107751
+ return {
107752
+ edit: { type: "indent", key: rowKey, delta: input.key === "ArrowRight" ? 1 : -1 },
107753
+ preventDefault: true
107754
+ };
107755
+ }
107756
+ if (input.key === "Enter" && !input.shiftKey && !input.altKey) {
107757
+ return { edit: { type: "insertAfter", key: rowKey }, preventDefault: true };
107758
+ }
107759
+ return none;
107760
+ }
107761
+ function withLevel(segments, level) {
107762
+ return segments.map((segment, index) => {
107763
+ if (index > 0) {
107764
+ return segment;
107765
+ }
107766
+ const next = { ...segment };
107767
+ if (level > 0) {
107768
+ next.paragraphLevel = Math.min(level, MAX_PARAGRAPH_LEVEL);
107769
+ } else {
107770
+ delete next.paragraphLevel;
107771
+ }
107772
+ return next;
107773
+ });
107774
+ }
107775
+ function rebuildParagraph(group, donor, text2, elementStyle) {
107776
+ if (group && paragraphGroupText(group) === text2) {
107777
+ return [...group.marker ? [group.marker] : [], ...group.content];
107778
+ }
107779
+ const source = group ?? donor;
107780
+ const marker = source?.marker ? [source.marker] : [];
107781
+ const content = remapTextToSegments(text2, source?.content, elementStyle);
107782
+ return [...marker, ...content];
107783
+ }
107784
+ function writeElementParagraphs(element, paragraphs) {
107785
+ const groups = groupElementParagraphs(element);
107786
+ const donor = groups[groups.length - 1];
107787
+ const style = hasTextProperties(element) ? element.textStyle : void 0;
107788
+ const segments = [];
107789
+ for (const [index, paragraph] of paragraphs.entries()) {
107790
+ if (index > 0) {
107791
+ const previous = segments[segments.length - 1];
107792
+ segments.push({
107793
+ text: "\n",
107794
+ style: { ...previous?.style ?? style ?? {} },
107795
+ isParagraphBreak: true
107796
+ });
107797
+ }
107798
+ segments.push(
107799
+ ...withLevel(rebuildParagraph(groups[index], donor, paragraph.text, style), paragraph.level)
107800
+ );
107801
+ }
107802
+ return {
107803
+ ...element,
107804
+ text: paragraphs.map((paragraph) => paragraph.text).join("\n"),
107805
+ textSegments: segments
107806
+ };
107807
+ }
107808
+ var DEFAULT_CANVAS = { width: 960, height: 540 };
107809
+ function createTitleElement(text2, options) {
107810
+ const canvas = options.canvas ?? DEFAULT_CANVAS;
107811
+ return {
107812
+ type: "text",
107813
+ id: options.idGenerator ? options.idGenerator() : generateElementId(),
107814
+ name: OUTLINE_TITLE_ELEMENT_NAME,
107815
+ x: Math.round(canvas.width * 0.06),
107816
+ y: Math.round(canvas.height * 0.08),
107817
+ width: Math.round(canvas.width * 0.88),
107818
+ height: Math.round(canvas.height * 0.17),
107819
+ text: text2,
107820
+ textStyle: { fontSize: 36, bold: true },
107821
+ textSegments: [{ text: text2, style: { fontSize: 36, bold: true } }]
107822
+ };
107823
+ }
107824
+ function renumber(slides) {
107825
+ return slides.map((slide, index) => ({ ...slide, slideNumber: index + 1 }));
107826
+ }
107827
+ function unchanged(slides, row) {
107828
+ return {
107829
+ slides,
107830
+ changed: false,
107831
+ focusKey: row?.key ?? null,
107832
+ activeSlideIndex: row?.slideIndex ?? 0
107833
+ };
107834
+ }
107835
+ function replaceElement(slides, slideIndex, elementId, next) {
107836
+ return slides.map(
107837
+ (slide, index) => index === slideIndex ? {
107838
+ ...slide,
107839
+ elements: (slide.elements ?? []).map(
107840
+ (element) => element.id === elementId ? next : element
107841
+ )
107842
+ } : slide
107843
+ );
107844
+ }
107845
+ function editParagraphs(slides, row, mutate) {
107846
+ const slide = slides[row.slideIndex];
107847
+ const element = (slide?.elements ?? []).find((candidate) => candidate.id === row.elementId);
107848
+ if (!element) {
107849
+ return null;
107850
+ }
107851
+ const paragraphs = readElementParagraphs(element);
107852
+ while (paragraphs.length <= row.paragraphIndex) {
107853
+ paragraphs.push({ text: "", level: 0 });
107854
+ }
107855
+ const next = mutate(paragraphs);
107856
+ if (!next) {
107857
+ return null;
107858
+ }
107859
+ return {
107860
+ slides: replaceElement(
107861
+ slides,
107862
+ row.slideIndex,
107863
+ element.id,
107864
+ writeElementParagraphs(element, next)
107865
+ ),
107866
+ changed: true,
107867
+ focusKey: row.key,
107868
+ activeSlideIndex: row.slideIndex
107869
+ };
107870
+ }
107871
+ function oneLine(text2) {
107872
+ return text2.replace(/[\r\n]+/g, " ");
107873
+ }
107874
+ function applySetText(slides, row, raw, options) {
107875
+ const text2 = oneLine(raw);
107876
+ if (row.elementId === null) {
107877
+ if (text2.length === 0) {
107878
+ return unchanged([...slides], row);
107879
+ }
107880
+ const element = createTitleElement(text2, options);
107881
+ const next = slides.map(
107882
+ (slide, index) => index === row.slideIndex ? { ...slide, elements: [element, ...slide.elements ?? []] } : slide
107883
+ );
107884
+ return {
107885
+ slides: next,
107886
+ changed: true,
107887
+ focusKey: outlineRowKey(row.slideId, element.id, 0),
107888
+ activeSlideIndex: row.slideIndex
107889
+ };
107890
+ }
107891
+ const result = editParagraphs(slides, row, (paragraphs) => {
107892
+ if (paragraphs[row.paragraphIndex].text === text2) {
107893
+ return null;
107894
+ }
107895
+ const next = [...paragraphs];
107896
+ next[row.paragraphIndex] = { ...next[row.paragraphIndex], text: text2 };
107897
+ return next;
107898
+ });
107899
+ return result ?? unchanged([...slides], row);
107900
+ }
107901
+ function applyIndent(slides, row, delta) {
107902
+ if (row.kind !== "body" || row.elementId === null || delta === 0) {
107903
+ return unchanged([...slides], row);
107904
+ }
107905
+ const result = editParagraphs(slides, row, (paragraphs) => {
107906
+ const current = paragraphs[row.paragraphIndex];
107907
+ const level = Math.min(Math.max(current.level + (delta > 0 ? 1 : -1), 0), MAX_PARAGRAPH_LEVEL);
107908
+ if (level === current.level) {
107909
+ return null;
107910
+ }
107911
+ const next = [...paragraphs];
107912
+ next[row.paragraphIndex] = { ...current, level };
107913
+ return next;
107914
+ });
107915
+ return result ?? unchanged([...slides], row);
107916
+ }
107917
+ function applyInsertAfter(slides, row, options) {
107918
+ if (row.kind === "title") {
107919
+ const slide = {
107920
+ id: makeSlideId(options.idGenerator),
107921
+ rId: "",
107922
+ slideNumber: row.slideIndex + 2,
107923
+ elements: []
107924
+ };
107925
+ const next = renumber([
107926
+ ...slides.slice(0, row.slideIndex + 1),
107927
+ slide,
107928
+ ...slides.slice(row.slideIndex + 1)
107929
+ ]);
107930
+ return {
107931
+ slides: next,
107932
+ changed: true,
107933
+ focusKey: outlineRowKey(slide.id, null, 0),
107934
+ activeSlideIndex: row.slideIndex + 1
107935
+ };
107936
+ }
107937
+ const result = editParagraphs(slides, row, (paragraphs) => {
107938
+ const next = [...paragraphs];
107939
+ next.splice(row.paragraphIndex + 1, 0, {
107940
+ text: "",
107941
+ level: paragraphs[row.paragraphIndex].level
107942
+ });
107943
+ return next;
107944
+ });
107945
+ if (!result) {
107946
+ return unchanged([...slides], row);
107947
+ }
107948
+ return {
107949
+ ...result,
107950
+ focusKey: outlineRowKey(row.slideId, row.elementId, row.paragraphIndex + 1)
107951
+ };
107952
+ }
107953
+ function applyOutlineEdit(slides, edit, options = {}) {
107954
+ const row = findOutlineRow(buildOutline(slides), edit.key);
107955
+ if (!row) {
107956
+ return unchanged([...slides]);
107957
+ }
107958
+ switch (edit.type) {
107959
+ case "setText":
107960
+ return applySetText(slides, row, edit.text, options);
107961
+ case "indent":
107962
+ return applyIndent(slides, row, edit.delta);
107963
+ case "insertAfter":
107964
+ return applyInsertAfter(slides, row, options);
107965
+ default:
107966
+ return unchanged([...slides], row);
107967
+ }
107968
+ }
107199
107969
  var NUDGE_SMALL = 1;
107200
107970
  var NUDGE_LARGE = 10;
107201
107971
  var GUARD_DEFAULTS = {
@@ -109220,29 +109990,6 @@ var COMMON_FONTS = [
109220
109990
  "Tw Cen MT",
109221
109991
  "Verdana"
109222
109992
  ];
109223
- var PASTE_OFFSET_PX = 20;
109224
- function generateElementId() {
109225
- return `el-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
109226
- }
109227
- function makeCloneId(intoTemplate, sourceId) {
109228
- if (!intoTemplate) {
109229
- return generateElementId();
109230
- }
109231
- if (sourceId.startsWith("master-")) {
109232
- return `master-${generateElementId()}`;
109233
- }
109234
- return `layout-${generateElementId()}`;
109235
- }
109236
- function buildElementClipboardPayload(element, isTemplate) {
109237
- return { element: structuredClone(element), isTemplate };
109238
- }
109239
- function cloneElementForPaste(element, options = {}) {
109240
- const clone3 = structuredClone(element);
109241
- clone3.id = makeCloneId(options.intoTemplate ?? false, element.id);
109242
- clone3.x += options.offsetX ?? PASTE_OFFSET_PX;
109243
- clone3.y += options.offsetY ?? PASTE_OFFSET_PX;
109244
- return clone3;
109245
- }
109246
109993
  var DEFAULT_PREVIEW_ELEMENT_CAP = 500;
109247
109994
  function buildPreviewElements(slide, templateElements = [], options) {
109248
109995
  const cap = options?.cap ?? DEFAULT_PREVIEW_ELEMENT_CAP;
@@ -112876,4 +113623,4 @@ function segmentFrameCount(durationMs, fps) {
112876
113623
  * `<p:extLst>` (optional)
112877
113624
  */
112878
113625
 
112879
- export { ACTION_BUTTON_PRESETS, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, COLOR_MAP_ALIAS_KEYS, COMMON_FONTS, 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, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, GRADIENT_TYPE_OPTIONS, HANDOUT_OPTIONS, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, 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, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, STATUS_BAR_CLASSES, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_LABELS, THEME_COLOR_SCHEME_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_ORIENTATION_TYPES, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptsPresentationInput, activateModalFocus, addChartCategory, addChartSeries, addQuickAccessCommand, addSection, addSmartArtNode, addSmartArtNodeAsChild, addTagToCollections, alignElements, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyCaseTransformToSegments, applyChartBuildReveal, applyColorChange, applyDuotone, applyFormatToElement, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyThemeOverrideToSlide, applyThemeToData, availableQuickAccessCommands, backstageCardsFor, bringForward, bringToFront, build3DExtrusionData, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartViewModel, buildCollaborationShareUrl, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildGlowBoxShadow, buildHandoutsHtml, buildInitialGuides, buildInnerShadowCssFromShapeStyle, buildJoinCollaborationConfig, buildMorphTransitionPlan, buildMultiLayerShadowCss, buildNotesHtml, buildNotesPdfBytes, buildOutlineHtml, buildPatternFillCss, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildReflectionCss, buildShadowCssFromShapeStyle, buildSlidesHtml, buildSlidesPdfBytes, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildStrokeOutline, buildSummaryZoomView, buildSvgGradientDef, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBuildSpec, buildTextFillCss, buildTextReflectionCss, buildTextRunFilterChain, buildTextShadowCss, buildThemeColorGrid, buildThemeColorMap, buildUserFontFaceStyles, canCommitActionType, canGoNext, canGoPrevious, canvasToJpegData, cell3DBevelCss, chartDataChangeType, chartPartToAttrs, clampCropValue, clampNotesFontSize, clampPercent, clampTransitionNumber, clampUnitInterval2 as clampUnitInterval, clampZoomScale, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearStoredViewerPrefs, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collectImagePaths, collectMediaElements, collectUsedFonts, colorWithOpacity, comparePresentation, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeColumnBoundaries, computeEntranceAnimationDelay, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeLayout, computeLayoutOptions, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSmartArtLayout2 as computeSmartArtLayout, computeSnapToShape, computeSplitCell, computeValueRange, computeValueRangeForChart, computeVirtualRange, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDepartureChannel, createInitialPresentationSnapshot, createPresentationKeyBuffer, createPresentationSessionId, createPresenterTimer, createSyncGate, createTouchGestureRecognizer, createViewerOptionsStore, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableColumn, deleteTableRow, deleteTagFromCollections, demoteSmartArtNode, derivePresenceList, deriveSlideFieldContext, detectOrientation, detectTouchDevice, distributeElements, downloadBlob, downloadDataUrl, dragAnchorViewY, dragValueForPart, elementActionToPptxAction, encodeGif, endAudienceDisplay, erasePresentationInkAt, evaluatePresetShape, extraQuickAccessCommands, extractPathPoints, filterCommands, filterRenderedElements, findChartPartTarget, findMediaElementByElementId, findSmartArtNodeText, flattenTagCollections, formatAxisValue, formatAxisValueWithUnits, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateLogTicks, generateNoteLineCount, generatePackageReadme, generatePressureCircles, generateTicks, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getCommentMarkerPosition, getCompoundLineBorderWidth, getCompoundLineBoxShadow, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getConnectionSites, getContentPartReplayStyles, getCssBorderDashStyle, getDisplayUnitLabel, getDuotoneCachedResult, getEffectDagFilter, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getGradientTileFlipCss, getGradientTileRectCss, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageSvgFilters, getInkReplayStyles, getInlineEditorSelection, getKinsokuLineBreakStyles, getLocalStorageUsageSummary, getNotesPrintableArea, getOleBadgeLabel, getOleObjectTypeLabel, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPrintableArea, getResolvedShapeClipPath, getRoundRectRadiusPx, getSecondaryValueAxis, getShapeAdjustmentHandleDescriptor, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeFilterId, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTextAlphaOpacity, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasPressureVariation, hasShapeProperties, hasTextProperties, hexToRgbChannels2 as hexToRgbChannels, insertTableColumn, insertTableRow, isActionHidden, isBrowserOpenableMime, isCalloutShape, isCellInRect, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementRendered, isExportAbortError, isFirstSlide, isImageLikeElement, isInkElement, isKeyboardOpen, isLastSlide, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isTemplateElement, isTemplateElementId2 as isTemplateElementId, isUrlSafe, listAutosaveSnapshots, listBackstageRecentFiles, loadAudienceContent, makeCloneId, makeSlideId, mapEditorKey, mapPresentationKey, mayLeaveSlideShow, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, morphOptionToMode, mountModel3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, newTableElement, normalizeColorsForCapture, normalizeHexColor, normalizeStrokeDashType, normalizeValue, notesSegmentsToSpans, observeYDocSlides, ooxmlDashToCssBorderStyle, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPptxFile, openReadingView, openUrlInNewTab, paletteColor, parseDrawingColor, parseDrawingColorOpacity, parsePpactionUrl, pickSupportedMimeType, placeAudienceWindow, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationInkPath, presenterElapsed, presenterPaneAdvancesOnClick, pressuresToWidths, printPropertiesFrameSlides, printPropertiesSlidesPerPage, promoteSmartArtNode, publishLiveGeometry, publishLiveInlineText, quickStyleSwatchCss, reResolveSlideColors, readBackstageRecentFile, readSlidesFromYDoc, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, rebuildTableStructureInRawXml, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, registerCollaborationTeardown, remapTextToSegments, removeChartCategory, removeChartSeries, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorderSmartArtNode, rerouteConnectorsForMovedElements, resetPresenterTimer, resolveActionType, resolveAudienceScreenPlacement, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveCssTextAlign, resolveDrawingShapeNodeId, resolveFontForScript, resolveFontRefIdx, resolveGroupChildFill, resolveInkColor, resolveInkOpacity, resolveInkWidth, resolveOleType, resolveParagraphAlign, resolveParagraphRtl, resolveParagraphStrutFontSize, resolvePictureBullet, resolveProfileInitial, resolveRegionCode, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransportForServerUrl, resolveUnderlineDecorationStyle, resolveViewerAddinRows, restoreSegmentSelection, revealedSmartArtNodeCount, rulerDragToGuidePosition, runMediaCommand, safeOpenUrl, sanitizeColor, sanitizeDownloadFilename, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveViewerProfile, scanAvailableFontFamilies, segmentByScript, segmentFrameCount, sendBackward, sendToBack, sequentialColorScale, seriesColor2 as seriesColor, setCachedResult, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDuotoneCachedResult, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shadeColor2, shouldAutoFollowBroadcaster, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldLoopContinuously, shouldUseSvgWarp, slideProgressPercent, slideStatusLabel, snapBoxToGrid, splitCell, splitSeriesByAxis, stepPresenterZoom, storeAudienceContent, substituteFieldText, suppressesCssBorder, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, themeColorSchemesEqual, themeToCssVars, tintColor2, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, togglePresenterTimer, toggleText3dExtrusion, transformTextCase, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewerOptionsToPreferences, warpPreviewPath, withChartPointValue, withChartTitle, withFrameSlides, withSlidesPerPage, writeStoredViewerPrefs, zoomInScale, zoomOutScale };
113626
+ export { ACTION_BUTTON_PRESETS, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, COLOR_MAP_ALIAS_KEYS, COMMON_FONTS, CONNECTION_TIMEOUT_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_INSERT_CHART_TYPE, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, GRADIENT_TYPE_OPTIONS, HANDOUT_OPTIONS, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, LBL, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, PATTERN_OPTIONS, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, STATUS_BAR_CLASSES, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_LABELS, THEME_COLOR_SCHEME_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_ORIENTATION_TYPES, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptsPresentationInput, activateModalFocus, addChartCategory, addChartSeries, addQuickAccessCommand, addSection, addSmartArtNode, addSmartArtNodeAsChild, addTagToCollections, alignElements, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyCaseTransformToSegments, applyChartBuildReveal, applyColorChange, applyDuotone, applyFormatToElement, applyMotionPathPreset, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyThemeOverrideToSlide, applyThemeToData, availableQuickAccessCommands, backstageCardsFor, bringForward, bringToFront, build3DExtrusionData, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartViewModel, buildCollaborationShareUrl, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildGlowBoxShadow, buildHandoutsHtml, buildInitialGuides, buildInnerShadowCssFromShapeStyle, buildJoinCollaborationConfig, buildMorphTransitionPlan, buildMotionPathPreview, buildMultiLayerShadowCss, buildNotesHtml, buildNotesPdfBytes, buildOutline, buildOutlineHtml, buildPatternFillCss, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildReflectionCss, buildShadowCssFromShapeStyle, buildSlidesHtml, buildSlidesPdfBytes, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildStrokeOutline, buildSummaryZoomView, buildSvgGradientDef, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBuildSpec, buildTextFillCss, buildTextReflectionCss, buildTextRunFilterChain, buildTextShadowCss, buildThemeColorGrid, buildThemeColorMap, buildUserFontFaceStyles, canCommitActionType, canGoNext, canGoPrevious, canvasToJpegData, cell3DBevelCss, chartDataChangeType, chartPartToAttrs, clampCropValue, clampNotesFontSize, clampPercent, clampTransitionNumber, clampUnitInterval2 as clampUnitInterval, clampZoomScale, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearStoredViewerPrefs, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collectImagePaths, collectMediaElements, collectUsedFonts, colorWithOpacity, comparePresentation, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeColumnBoundaries, computeEntranceAnimationDelay, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeLayout, computeLayoutOptions, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSmartArtLayout2 as computeSmartArtLayout, computeSnapToShape, computeSplitCell, computeValueRange, computeValueRangeForChart, computeVirtualRange, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDepartureChannel, createInitialPresentationSnapshot, createPresentationKeyBuffer, createPresentationSessionId, createPresenterTimer, createSyncGate, createTouchGestureRecognizer, createViewerOptionsStore, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableColumn, deleteTableRow, deleteTagFromCollections, demoteSmartArtNode, derivePresenceList, deriveSlideFieldContext, detectOrientation, detectTouchDevice, distributeElements, downloadBlob, downloadDataUrl, dragAnchorViewY, dragValueForPart, elementActionToPptxAction, encodeGif, endAudienceDisplay, erasePresentationInkAt, evaluatePresetShape, extraQuickAccessCommands, extractPathPoints, filterCommands, filterRenderedElements, findChartPartTarget, findMediaElementByElementId, findSmartArtNodeText, flattenTagCollections, formatAxisValue, formatAxisValueWithUnits, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateLogTicks, generateNoteLineCount, generatePackageReadme, generatePressureCircles, generateTicks, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getCommentMarkerPosition, getCompoundLineBorderWidth, getCompoundLineBoxShadow, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getConnectionSites, getContentPartReplayStyles, getCssBorderDashStyle, getDisplayUnitLabel, getDuotoneCachedResult, getEffectDagFilter, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getGradientTileFlipCss, getGradientTileRectCss, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageSvgFilters, getInkReplayStyles, getInlineEditorSelection, getKinsokuLineBreakStyles, getLocalStorageUsageSummary, getNotesPrintableArea, getOleBadgeLabel, getOleObjectTypeLabel, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPrintableArea, getResolvedShapeClipPath, getRoundRectRadiusPx, getSecondaryValueAxis, getShapeAdjustmentHandleDescriptor, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeFilterId, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTextAlphaOpacity, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasPressureVariation, hasShapeProperties, hasTextProperties, hexToRgbChannels2 as hexToRgbChannels, insertTableColumn, insertTableRow, isActionHidden, isBrowserOpenableMime, isCalloutShape, isCellInRect, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementRendered, isExportAbortError, isFirstSlide, isImageLikeElement, isInkElement, isKeyboardOpen, isLastSlide, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isTemplateElement, isTemplateElementId2 as isTemplateElementId, isUrlSafe, listAutosaveSnapshots, listBackstageRecentFiles, loadAudienceContent, makeCloneId, makeSlideId, mapEditorKey, mapOutlineKey, mapPresentationKey, mayLeaveSlideShow, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, newTableElement, normalizeColorsForCapture, normalizeHexColor, normalizeStrokeDashType, normalizeValue, notesSegmentsToSpans, observeYDocSlides, ooxmlDashToCssBorderStyle, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPptxFile, openReadingView, openUrlInNewTab, paletteColor, parseDrawingColor, parseDrawingColorOpacity, parsePpactionUrl, pickSupportedMimeType, placeAudienceWindow, polygonsToSvgPath, pptxActionToElementAction, preprocessCssForCapture, presentationInkPath, presenterElapsed, presenterPaneAdvancesOnClick, pressuresToWidths, printPropertiesFrameSlides, printPropertiesSlidesPerPage, promoteSmartArtNode, publishLiveGeometry, publishLiveInlineText, quickStyleSwatchCss, reResolveSlideColors, readBackstageRecentFile, readSlidesFromYDoc, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, rebuildTableStructureInRawXml, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, registerCollaborationTeardown, remapTextToSegments, removeChartCategory, removeChartSeries, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorderSmartArtNode, rerouteConnectorsForMovedElements, resetPresenterTimer, resolveActionType, resolveAudienceScreenPlacement, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveCssTextAlign, resolveDrawingShapeNodeId, resolveFontForScript, resolveFontRefIdx, resolveGroupChildFill, resolveInkColor, resolveInkOpacity, resolveInkWidth, resolveOleType, resolveParagraphAlign, resolveParagraphRtl, resolveParagraphStrutFontSize, resolvePictureBullet, resolveProfileInitial, resolveRegionCode, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransportForServerUrl, resolveUnderlineDecorationStyle, resolveViewerAddinRows, restoreSegmentSelection, revealedSmartArtNodeCount, rulerDragToGuidePosition, runMediaCommand, safeOpenUrl, sanitizeColor, sanitizeDownloadFilename, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveViewerProfile, scanAvailableFontFamilies, segmentByScript, segmentFrameCount, sendBackward, sendToBack, sequentialColorScale, seriesColor2 as seriesColor, setCachedResult, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDuotoneCachedResult, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shadeColor2, shouldAutoFollowBroadcaster, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldLoopContinuously, shouldUseSvgWarp, slideProgressPercent, slideStatusLabel, snapBoxToGrid, splitCell, splitSeriesByAxis, stepPresenterZoom, storeAudienceContent, substituteFieldText, suppressesCssBorder, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, themeColorSchemesEqual, themeToCssVars, tintColor2, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, togglePresenterTimer, toggleText3dExtrusion, transformTextCase, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewerOptionsToPreferences, warpPreviewPath, withChartPointValue, withChartTitle, withFrameSlides, withSlidesPerPage, writeStoredViewerPrefs, zoomInScale, zoomOutScale };