pptx-viewer-core 1.2.4 → 1.2.6

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.
package/dist/index.mjs CHANGED
@@ -7170,6 +7170,32 @@ function findAinkInkPayload(graphicData) {
7170
7170
  }
7171
7171
  return void 0;
7172
7172
  }
7173
+ function findOleObjPayload(graphicData) {
7174
+ if (!graphicData) {
7175
+ return void 0;
7176
+ }
7177
+ const direct = graphicData["p:oleObj"];
7178
+ if (direct) {
7179
+ return direct;
7180
+ }
7181
+ const altContent = graphicData["mc:AlternateContent"];
7182
+ if (!altContent) {
7183
+ return void 0;
7184
+ }
7185
+ const fallback = altContent["mc:Fallback"];
7186
+ const fallbackOleObj = fallback?.["p:oleObj"];
7187
+ if (fallbackOleObj) {
7188
+ return fallbackOleObj;
7189
+ }
7190
+ const choices = ensureArrayLike(altContent["mc:Choice"]);
7191
+ for (const choice of choices) {
7192
+ const node = choice?.["p:oleObj"];
7193
+ if (node) {
7194
+ return node;
7195
+ }
7196
+ }
7197
+ return void 0;
7198
+ }
7173
7199
  function decodeAinkInk(inkRoot) {
7174
7200
  const inkPaths = [];
7175
7201
  const inkColors = [];
@@ -7282,7 +7308,7 @@ var PptxGraphicFrameParser = class {
7282
7308
  };
7283
7309
  }
7284
7310
  if (type === "ole" && graphicData) {
7285
- const oleObject = graphicData["p:oleObj"];
7311
+ const oleObject = findOleObjPayload(graphicData);
7286
7312
  const oleProgId = String(oleObject?.["@_progId"] || "").trim() || void 0;
7287
7313
  const oleName = String(oleObject?.["@_name"] || "").trim() || void 0;
7288
7314
  const oleClsId = String(oleObject?.["@_classid"] || "").trim() || void 0;
@@ -7373,7 +7399,7 @@ var PptxGraphicFrameParser = class {
7373
7399
  if (graphicData["dgm:relIds"] || uri.includes("/drawingml/2006/diagram")) {
7374
7400
  return "smartArt";
7375
7401
  }
7376
- if (graphicData["p:oleObj"] || uri.includes("/drawingml/2006/ole")) {
7402
+ if (uri.includes("/presentationml/2006/ole") || uri.includes("/drawingml/2006/ole") || findOleObjPayload(graphicData)) {
7377
7403
  return "ole";
7378
7404
  }
7379
7405
  if (graphicData["a:videoFile"] || graphicData["a:audioFile"] || uri.includes("/drawingml/2006/media")) {
@@ -8674,6 +8700,87 @@ function parseGuideNode(node) {
8674
8700
  return { id, orientation, positionEmu, color };
8675
8701
  }
8676
8702
 
8703
+ // src/core/services/animation-target-reconcile.ts
8704
+ var NV_CONTAINERS = [
8705
+ "p:nvSpPr",
8706
+ "p:nvPicPr",
8707
+ "p:nvCxnSpPr",
8708
+ "p:nvGraphicFramePr",
8709
+ "p:nvGrpSpPr"
8710
+ ];
8711
+ function readCnvPrId(rawXml) {
8712
+ if (!rawXml) {
8713
+ return void 0;
8714
+ }
8715
+ for (const nvKey of NV_CONTAINERS) {
8716
+ const nv = rawXml[nvKey];
8717
+ const cNvPr = nv?.["p:cNvPr"];
8718
+ const id = cNvPr?.["@_id"];
8719
+ if (id !== void 0 && id !== null && String(id).length > 0) {
8720
+ return String(id);
8721
+ }
8722
+ }
8723
+ return void 0;
8724
+ }
8725
+ function isTemplateElementId(elementId) {
8726
+ return elementId.startsWith("layout-") || elementId.startsWith("master-");
8727
+ }
8728
+ function collectShapeIdMap(elements) {
8729
+ const map = /* @__PURE__ */ new Map();
8730
+ const walk = (els) => {
8731
+ for (const el of els) {
8732
+ const cnvId = readCnvPrId(el.rawXml);
8733
+ if (cnvId) {
8734
+ el.shapeId = cnvId;
8735
+ if (!isTemplateElementId(el.id)) {
8736
+ map.set(cnvId, el.id);
8737
+ }
8738
+ }
8739
+ if (el.type === "group" && Array.isArray(el.children)) {
8740
+ walk(el.children);
8741
+ }
8742
+ }
8743
+ };
8744
+ walk(elements);
8745
+ return map;
8746
+ }
8747
+ function reconcileAnimationTargets(elements, nativeAnimations, editorAnimations) {
8748
+ const map = collectShapeIdMap(elements);
8749
+ if (map.size === 0) {
8750
+ return;
8751
+ }
8752
+ if (nativeAnimations) {
8753
+ for (const anim of nativeAnimations) {
8754
+ if (anim.targetId !== void 0) {
8755
+ const resolved = map.get(anim.targetId);
8756
+ if (resolved) {
8757
+ anim.targetId = resolved;
8758
+ }
8759
+ }
8760
+ if (anim.triggerShapeId !== void 0) {
8761
+ const resolved = map.get(anim.triggerShapeId);
8762
+ if (resolved) {
8763
+ anim.triggerShapeId = resolved;
8764
+ }
8765
+ }
8766
+ }
8767
+ }
8768
+ if (editorAnimations) {
8769
+ for (const anim of editorAnimations) {
8770
+ const resolvedElement = map.get(anim.elementId);
8771
+ if (resolvedElement) {
8772
+ anim.elementId = resolvedElement;
8773
+ }
8774
+ if (anim.triggerShapeId !== void 0) {
8775
+ const resolvedTrigger = map.get(anim.triggerShapeId);
8776
+ if (resolvedTrigger) {
8777
+ anim.triggerShapeId = resolvedTrigger;
8778
+ }
8779
+ }
8780
+ }
8781
+ }
8782
+ }
8783
+
8677
8784
  // src/core/services/PptxSlideLoaderService.ts
8678
8785
  var PptxSlideLoaderService = class {
8679
8786
  /**
@@ -8814,6 +8921,7 @@ var PptxSlideLoaderService = class {
8814
8921
  const transition = params.parseSlideTransition(slideXmlObj, path);
8815
8922
  const animations = params.parseEditorAnimations(slideXmlObj);
8816
8923
  const nativeAnimations = params.parseNativeAnimations(slideXmlObj);
8924
+ reconcileAnimationTargets(elements, nativeAnimations, animations);
8817
8925
  const rawTiming = slideXmlObj["p:sld"]?.["p:timing"];
8818
8926
  const drawingGuides = parseSlideDrawingGuides(slideXmlObj);
8819
8927
  const customerData = await params.parseSlideCustomerData(slideXmlObj, path);
@@ -9313,6 +9421,60 @@ var PptxEditorAnimationService = class {
9313
9421
  }
9314
9422
  };
9315
9423
 
9424
+ // src/core/services/animation-shape-id-assign.ts
9425
+ function flattenElements(elements, out) {
9426
+ for (const el of elements) {
9427
+ out.push(el);
9428
+ if (el.type === "group" && Array.isArray(el.children)) {
9429
+ flattenElements(el.children, out);
9430
+ }
9431
+ }
9432
+ }
9433
+ function maxShapeId(elements) {
9434
+ let max = 0;
9435
+ for (const el of elements) {
9436
+ if (el.shapeId !== void 0) {
9437
+ const n = Number.parseInt(el.shapeId, 10);
9438
+ if (Number.isFinite(n) && n > max) {
9439
+ max = n;
9440
+ }
9441
+ }
9442
+ }
9443
+ return max;
9444
+ }
9445
+ function remapEditorAnimationsToShapeIds(elements, animations, reservedMaxId = 0) {
9446
+ const flat = [];
9447
+ flattenElements(elements, flat);
9448
+ const byId = /* @__PURE__ */ new Map();
9449
+ for (const el of flat) {
9450
+ byId.set(el.id, el);
9451
+ }
9452
+ let nextId2 = Math.max(maxShapeId(flat), reservedMaxId) + 1;
9453
+ const resolve = (elementId) => {
9454
+ const el = byId.get(elementId);
9455
+ if (!el) {
9456
+ return void 0;
9457
+ }
9458
+ if (el.shapeId === void 0) {
9459
+ el.shapeId = String(nextId2);
9460
+ nextId2 += 1;
9461
+ }
9462
+ return el.shapeId;
9463
+ };
9464
+ return animations.map((anim) => {
9465
+ const resolvedElement = resolve(anim.elementId);
9466
+ const resolvedTrigger = anim.triggerShapeId !== void 0 ? resolve(anim.triggerShapeId) : void 0;
9467
+ if (resolvedElement === void 0 && resolvedTrigger === void 0) {
9468
+ return anim;
9469
+ }
9470
+ return {
9471
+ ...anim,
9472
+ elementId: resolvedElement ?? anim.elementId,
9473
+ triggerShapeId: resolvedTrigger ?? anim.triggerShapeId
9474
+ };
9475
+ });
9476
+ }
9477
+
9316
9478
  // src/core/services/native-animation-helpers.ts
9317
9479
  function extractSoundAction(cTn) {
9318
9480
  const stSnd = cTn["p:stSnd"];
@@ -10535,7 +10697,7 @@ var PptxSlideTransitionService = class {
10535
10697
  }
10536
10698
  parseSlideTransition(slideXml2) {
10537
10699
  const slideRoot = this.xmlLookupService.getChildByLocalName(slideXml2, "sld");
10538
- const transitionNode = this.xmlLookupService.getChildByLocalName(slideRoot, "transition");
10700
+ const transitionNode = this.xmlLookupService.getChildByLocalName(slideRoot, "transition") || this.findTransitionInAlternateContent(slideRoot);
10539
10701
  if (!transitionNode) {
10540
10702
  return void 0;
10541
10703
  }
@@ -10607,7 +10769,8 @@ var PptxSlideTransitionService = class {
10607
10769
  transitionType = "morph";
10608
10770
  }
10609
10771
  }
10610
- const parsedDuration = Number.parseInt(String(transitionNode["@_dur"] || ""), 10);
10772
+ const rawDuration = transitionNode["@_dur"] ?? transitionNode["@_p14:dur"];
10773
+ const parsedDuration = Number.parseInt(String(rawDuration || ""), 10);
10611
10774
  const durationMs = Number.isFinite(parsedDuration) && parsedDuration > 0 ? parsedDuration : void 0;
10612
10775
  const advanceOnClickToken = String(transitionNode["@_advClick"] || "").trim();
10613
10776
  const advanceOnClick = advanceOnClickToken.length > 0 ? !["0", "false", "off"].includes(advanceOnClickToken.toLowerCase()) : void 0;
@@ -10656,6 +10819,35 @@ var PptxSlideTransitionService = class {
10656
10819
  rawExtLst
10657
10820
  };
10658
10821
  }
10822
+ /**
10823
+ * Locate a `<p:transition>` wrapped in a slide-root `mc:AlternateContent`
10824
+ * envelope.
10825
+ *
10826
+ * Real PowerPoint (verified via COM-authored fixtures) wraps the
10827
+ * transition in `mc:AlternateContent` whenever it carries an Office
10828
+ * 2010+ attribute such as `p14:dur` (sub-second transition duration):
10829
+ * an `mc:Choice Requires="p14"` branch carries the richer transition,
10830
+ * and `mc:Fallback` carries a plain one for older readers. Without this
10831
+ * unwrap, `p:sld`'s direct-child lookup for `transition` finds nothing
10832
+ * and the whole transition (including plain ones falling back with no
10833
+ * p14 data) is silently dropped, even though `mc:Choice` is otherwise a
10834
+ * complete, directly usable `p:transition` node.
10835
+ */
10836
+ findTransitionInAlternateContent(slideRoot) {
10837
+ const altContent = this.xmlLookupService.getChildByLocalName(slideRoot, "AlternateContent");
10838
+ if (!altContent) {
10839
+ return void 0;
10840
+ }
10841
+ const choices = this.xmlLookupService.getChildrenArrayByLocalName(altContent, "Choice");
10842
+ for (const choice of choices) {
10843
+ const transitionNode = this.xmlLookupService.getChildByLocalName(choice, "transition");
10844
+ if (transitionNode) {
10845
+ return transitionNode;
10846
+ }
10847
+ }
10848
+ const fallback = this.xmlLookupService.getChildByLocalName(altContent, "Fallback");
10849
+ return this.xmlLookupService.getChildByLocalName(fallback, "transition");
10850
+ }
10659
10851
  /**
10660
10852
  * Detects the PowerPoint 2016+ `morph` transition stored as a p159 extension
10661
10853
  * inside the transition's extLst.
@@ -36610,6 +36802,22 @@ var PptxHandlerRuntime32 = class _PptxHandlerRuntime extends PptxHandlerRuntime3
36610
36802
 
36611
36803
  // src/core/core/runtime/PptxHandlerRuntimeSaveElementWriter.ts
36612
36804
  var PptxHandlerRuntime33 = class _PptxHandlerRuntime extends PptxHandlerRuntime32 {
36805
+ /**
36806
+ * Whether a shape XML represents a `<p:pic>` (picture-shaped) node.
36807
+ *
36808
+ * Real PowerPoint (verified via COM-authored fixtures) represents video
36809
+ * *and* audio media as `<p:pic>` (poster-frame blip + `p:nvPr/a:videoFile`
36810
+ * or `a:audioFile` + a `p14:media` extension) rather than the older
36811
+ * `<p:graphicFrame>` form. A `media`-typed element's `rawXml` is
36812
+ * therefore frequently `p:pic`-shaped, not a graphic frame; without this
36813
+ * check it falls into the generic `shapes` bucket, which the slide
36814
+ * writer serializes under `<p:sp>` -- corrupting the picture markup
36815
+ * (`p:nvPicPr`/`p:blipFill`) into an invalid shape and permanently
36816
+ * losing the media relationship on save.
36817
+ */
36818
+ isPictureShape(shape) {
36819
+ return Boolean(shape["p:nvPicPr"]);
36820
+ }
36613
36821
  /** Whether a shape XML represents a graphic frame. */
36614
36822
  isGraphicFrameShape(shape) {
36615
36823
  return Boolean(shape["p:nvGraphicFramePr"] || shape["a:graphic"] && shape["p:xfrm"]);
@@ -36725,6 +36933,34 @@ var PptxHandlerRuntime33 = class _PptxHandlerRuntime extends PptxHandlerRuntime3
36725
36933
  isTemplateElementId(elementId) {
36726
36934
  return elementId.startsWith("layout-") || elementId.startsWith("master-");
36727
36935
  }
36936
+ /** Non-visual property containers that hold a `p:cNvPr`. */
36937
+ static NV_CONTAINERS = [
36938
+ "p:nvSpPr",
36939
+ "p:nvPicPr",
36940
+ "p:nvCxnSpPr",
36941
+ "p:nvGraphicFramePr",
36942
+ "p:nvGrpSpPr"
36943
+ ];
36944
+ /**
36945
+ * Write an element's native shape id (`element.shapeId`) into the serialized
36946
+ * shape's `p:cNvPr/@id`. Animation targets (`p:spTgt/@spid`) reference this
36947
+ * id, so the two must agree for PowerPoint to bind an animation to its shape.
36948
+ * A no-op when the element carries no `shapeId` (nothing to reconcile) or the
36949
+ * shape XML has no cNvPr container.
36950
+ */
36951
+ applyShapeIdToCnvPr(shape, el) {
36952
+ if (el.shapeId === void 0) {
36953
+ return;
36954
+ }
36955
+ for (const nvKey of _PptxHandlerRuntime.NV_CONTAINERS) {
36956
+ const nv = shape[nvKey];
36957
+ const cNvPr = nv?.["p:cNvPr"];
36958
+ if (cNvPr) {
36959
+ cNvPr["@_id"] = el.shapeId;
36960
+ return;
36961
+ }
36962
+ }
36963
+ }
36728
36964
  /**
36729
36965
  * Process a single slide element during save. Handles embedding,
36730
36966
  * transforms, geometry, styles, text, and sorts into collectors.
@@ -36834,12 +37070,15 @@ var PptxHandlerRuntime33 = class _PptxHandlerRuntime extends PptxHandlerRuntime3
36834
37070
  }
36835
37071
  return;
36836
37072
  }
37073
+ this.applyShapeIdToCnvPr(shape, el);
36837
37074
  if (el.type === "picture" || el.type === "image") {
36838
37075
  collectors.pics.push(shape);
36839
37076
  } else if (el.type === "connector") {
36840
37077
  collectors.connectors.push(shape);
36841
37078
  } else if (el.type === "model3d") {
36842
37079
  collectors.model3ds.push(shape);
37080
+ } else if (el.type === "media" && this.isPictureShape(shape)) {
37081
+ collectors.pics.push(shape);
36843
37082
  } else if (this.isGraphicFrameShape(shape)) {
36844
37083
  collectors.graphicFrames.push(shape);
36845
37084
  } else {
@@ -36878,12 +37117,17 @@ var PptxHandlerRuntime34 = class extends PptxHandlerRuntime33 {
36878
37117
  delete slideNode["p:transition"];
36879
37118
  }
36880
37119
  }
36881
- if (slide.animations !== void 0) {
36882
- this.applyEditorAnimations(slideNode, slide.animations);
37120
+ const shapeIdAnimations = slide.animations !== void 0 ? remapEditorAnimationsToShapeIds(
37121
+ slide.elements,
37122
+ slide.animations,
37123
+ this.maxCnvPrId(this.ensureSlideTree(xmlObj))
37124
+ ) : void 0;
37125
+ if (shapeIdAnimations !== void 0) {
37126
+ this.applyEditorAnimations(slideNode, shapeIdAnimations);
36883
37127
  }
36884
- if (slide.animations && slide.animations.length > 0) {
37128
+ if (shapeIdAnimations && shapeIdAnimations.length > 0) {
36885
37129
  const generatedTiming = this.animationWriteService.buildTimingXml(
36886
- slide.animations,
37130
+ shapeIdAnimations,
36887
37131
  slide.rawTiming
36888
37132
  );
36889
37133
  if (generatedTiming) {
@@ -37036,6 +37280,40 @@ var PptxHandlerRuntime34 = class extends PptxHandlerRuntime33 {
37036
37280
  }
37037
37281
  this.zip.file(slide.id, this.builder.build(xmlObj));
37038
37282
  }
37283
+ /**
37284
+ * Largest `p:cNvPr/@id` already present anywhere in a shape tree, including
37285
+ * the implicit `<p:spTree>` group's own reserved id. Used to seed minting of
37286
+ * fresh animation-target shape ids so they never collide with a reserved id.
37287
+ */
37288
+ maxCnvPrId(spTree) {
37289
+ let max = 0;
37290
+ const nvContainers = [
37291
+ "p:nvSpPr",
37292
+ "p:nvPicPr",
37293
+ "p:nvCxnSpPr",
37294
+ "p:nvGraphicFramePr",
37295
+ "p:nvGrpSpPr"
37296
+ ];
37297
+ const visit = (node) => {
37298
+ for (const nvKey of nvContainers) {
37299
+ const nv = node[nvKey];
37300
+ const cNvPr = nv?.["p:cNvPr"];
37301
+ if (cNvPr?.["@_id"] !== void 0) {
37302
+ const n = Number.parseInt(String(cNvPr["@_id"]), 10);
37303
+ if (Number.isFinite(n) && n > max) {
37304
+ max = n;
37305
+ }
37306
+ }
37307
+ }
37308
+ for (const listKey of ["p:sp", "p:pic", "p:cxnSp", "p:graphicFrame", "p:grpSp"]) {
37309
+ for (const child of this.ensureArray(node[listKey])) {
37310
+ visit(child);
37311
+ }
37312
+ }
37313
+ };
37314
+ visit(spTree);
37315
+ return max;
37316
+ }
37039
37317
  /**
37040
37318
  * Re-wrap selected children with their original `<mc:AlternateContent>`
37041
37319
  * envelope (CC-4).
@@ -41795,7 +42073,7 @@ var PptxHandlerRuntime57 = class extends PptxHandlerRuntime56 {
41795
42073
  for (const [, target] of layoutRels.entries()) {
41796
42074
  if (target.includes("slideMaster")) {
41797
42075
  const layoutDir = layoutPath.substring(0, layoutPath.lastIndexOf("/") + 1);
41798
- const masterPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace("../", "")}`;
42076
+ const masterPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
41799
42077
  try {
41800
42078
  const masterXmlStr = await this.zip.file(masterPath)?.async("string");
41801
42079
  if (masterXmlStr) {
@@ -41819,7 +42097,7 @@ var PptxHandlerRuntime57 = class extends PptxHandlerRuntime56 {
41819
42097
  for (const [, target] of slideRels.entries()) {
41820
42098
  if (target.includes("slideLayout")) {
41821
42099
  const slideDir = slidePath.substring(0, slidePath.lastIndexOf("/") + 1);
41822
- const layoutPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${target.replace("../", "")}`;
42100
+ const layoutPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
41823
42101
  try {
41824
42102
  const layoutXmlStr = await this.zip.file(layoutPath)?.async("string");
41825
42103
  if (layoutXmlStr) {
@@ -41847,7 +42125,7 @@ var PptxHandlerRuntime57 = class extends PptxHandlerRuntime56 {
41847
42125
  for (const [, target] of slideRels.entries()) {
41848
42126
  if (target.includes("slideLayout")) {
41849
42127
  const slideDir = slidePath.substring(0, slidePath.lastIndexOf("/") + 1);
41850
- const layoutPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${target.replace("../", "")}`;
42128
+ const layoutPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
41851
42129
  try {
41852
42130
  const layoutXmlStr = await this.zip.file(layoutPath)?.async("string");
41853
42131
  if (layoutXmlStr) {
@@ -41876,7 +42154,7 @@ var PptxHandlerRuntime57 = class extends PptxHandlerRuntime56 {
41876
42154
  for (const [, target] of layoutRels.entries()) {
41877
42155
  if (target.includes("slideMaster")) {
41878
42156
  const layoutDir = layoutPath.substring(0, layoutPath.lastIndexOf("/") + 1);
41879
- const masterPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace("../", "")}`;
42157
+ const masterPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
41880
42158
  try {
41881
42159
  const masterXmlStr = await this.zip.file(masterPath)?.async("string");
41882
42160
  if (masterXmlStr) {
@@ -41905,7 +42183,7 @@ var PptxHandlerRuntime58 = class extends PptxHandlerRuntime57 {
41905
42183
  for (const [, target] of slideRels.entries()) {
41906
42184
  if (target.includes("slideLayout")) {
41907
42185
  const slideDir = slidePath.substring(0, slidePath.lastIndexOf("/") + 1);
41908
- const layoutPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${target.replace("../", "")}`;
42186
+ const layoutPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
41909
42187
  try {
41910
42188
  const layoutXmlStr = await this.zip.file(layoutPath)?.async("string");
41911
42189
  if (layoutXmlStr) {
@@ -41934,7 +42212,7 @@ var PptxHandlerRuntime58 = class extends PptxHandlerRuntime57 {
41934
42212
  for (const [, target] of layoutRels.entries()) {
41935
42213
  if (target.includes("slideMaster")) {
41936
42214
  const layoutDir = layoutPath.substring(0, layoutPath.lastIndexOf("/") + 1);
41937
- const masterPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace("../", "")}`;
42215
+ const masterPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
41938
42216
  try {
41939
42217
  const masterXmlStr = await this.zip.file(masterPath)?.async("string");
41940
42218
  if (masterXmlStr) {
@@ -41959,7 +42237,7 @@ var PptxHandlerRuntime58 = class extends PptxHandlerRuntime57 {
41959
42237
  for (const [, target] of slideRels.entries()) {
41960
42238
  if (target.includes("slideLayout")) {
41961
42239
  const slideDir = slidePath.substring(0, slidePath.lastIndexOf("/") + 1);
41962
- return target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${target.replace("../", "")}`;
42240
+ return target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
41963
42241
  }
41964
42242
  }
41965
42243
  return void 0;
@@ -41975,7 +42253,7 @@ var PptxHandlerRuntime58 = class extends PptxHandlerRuntime57 {
41975
42253
  for (const [, target] of layoutRels.entries()) {
41976
42254
  if (target.includes("slideMaster")) {
41977
42255
  const layoutDir = layoutPath.substring(0, layoutPath.lastIndexOf("/") + 1);
41978
- return target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace("../", "")}`;
42256
+ return target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
41979
42257
  }
41980
42258
  }
41981
42259
  return void 0;
@@ -42619,7 +42897,7 @@ var PptxHandlerRuntime61 = class extends PptxHandlerRuntime60 {
42619
42897
  for (const [, target] of layoutRels.entries()) {
42620
42898
  if (target.includes("slideMaster")) {
42621
42899
  const layoutDir = layoutPath.substring(0, layoutPath.lastIndexOf("/") + 1);
42622
- masterPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace("../", "")}`;
42900
+ masterPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
42623
42901
  break;
42624
42902
  }
42625
42903
  }
@@ -42753,7 +43031,7 @@ var PptxHandlerRuntime62 = class extends PptxHandlerRuntime61 {
42753
43031
  for (const [, target] of slideRels.entries()) {
42754
43032
  if (target.includes("slideLayout")) {
42755
43033
  const slideDir = slidePath.substring(0, slidePath.lastIndexOf("/") + 1);
42756
- layoutPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${target.replace("../", "")}`;
43034
+ layoutPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
42757
43035
  break;
42758
43036
  }
42759
43037
  }
@@ -46505,7 +46783,7 @@ var PptxHandlerRuntime78 = class extends PptxHandlerRuntime77 {
46505
46783
  }
46506
46784
  return stack.join("/");
46507
46785
  }
46508
- return `ppt/${target.replace("../", "")}`;
46786
+ return `ppt/${target.replace(/\.\.\//g, "")}`;
46509
46787
  }
46510
46788
  }
46511
46789
  return void 0;
@@ -46754,7 +47032,22 @@ var PptxHandlerRuntime79 = class _PptxHandlerRuntime extends PptxHandlerRuntime7
46754
47032
  await this.enrichOleElementsWithEmbeddedData(el.children, slidePath, depth + 1);
46755
47033
  continue;
46756
47034
  }
46757
- if (el.type !== "ole" || el.isLinked || !el.oleTarget) {
47035
+ if (el.type !== "ole") {
47036
+ continue;
47037
+ }
47038
+ if (el.previewImage && !el.previewImageData) {
47039
+ try {
47040
+ const previewPath = this.resolveImagePath(slidePath, el.previewImage);
47041
+ if (previewPath) {
47042
+ const previewData = await this.getImageData(previewPath);
47043
+ if (previewData) {
47044
+ el.previewImageData = previewData;
47045
+ }
47046
+ }
47047
+ } catch {
47048
+ }
47049
+ }
47050
+ if (el.isLinked || !el.oleTarget) {
46758
47051
  continue;
46759
47052
  }
46760
47053
  try {
@@ -47050,7 +47343,7 @@ var PptxHandlerRuntime80 = class extends PptxHandlerRuntime79 {
47050
47343
  for (const [, target] of layoutRels.entries()) {
47051
47344
  if (target.includes("slideMaster")) {
47052
47345
  const layoutDir = layoutPath.substring(0, layoutPath.lastIndexOf("/") + 1);
47053
- return target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace("../", "")}`;
47346
+ return target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
47054
47347
  }
47055
47348
  }
47056
47349
  return void 0;
@@ -47119,7 +47412,7 @@ var PptxHandlerRuntime80 = class extends PptxHandlerRuntime79 {
47119
47412
  for (const [, target] of masterRels.entries()) {
47120
47413
  if (target.includes("slideLayout")) {
47121
47414
  const masterDir = masterPath.substring(0, masterPath.lastIndexOf("/") + 1);
47122
- const resolved = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(masterDir, target) : `ppt/${target.replace("../", "")}`;
47415
+ const resolved = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(masterDir, target) : `ppt/${target.replace(/\.\.\//g, "")}`;
47123
47416
  masterLayoutPaths.add(resolved);
47124
47417
  }
47125
47418
  }
@@ -56006,7 +56299,7 @@ function getShapeClipPathFromPreset(shapeType, width, height, adjustments) {
56006
56299
  if (!result || result.svgPath === "") {
56007
56300
  return void 0;
56008
56301
  }
56009
- const escaped = result.svgPath.replace(/'/g, "\\'");
56302
+ const escaped = result.svgPath.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
56010
56303
  return `path('${escaped}')`;
56011
56304
  }
56012
56305
  function getRoundRectRadiusPx(element) {
@@ -57937,7 +58230,7 @@ function moveSlidesToSection(data, slideIndices, targetSectionId) {
57937
58230
  }
57938
58231
 
57939
58232
  // src/core/builders/sdk/template-engine-helpers.ts
57940
- var PLACEHOLDER_RE = /\{\{([^}]+)\}\}/g;
58233
+ var PLACEHOLDER_RE = /\{\{([^{}]+)\}\}/g;
57941
58234
  var EACH_OPEN_RE = /^\s*#each\s+([\w.]+)\s*$/;
57942
58235
  var EACH_CLOSE_RE = /^\s*\/each\s*$/;
57943
58236
  var IF_OPEN_RE = /^\s*#if\s+(!?[\w.]+)\s*$/;
@@ -58001,7 +58294,7 @@ function processInlineConditionals(text, data) {
58001
58294
  let safety = 0;
58002
58295
  const MAX_ITERATIONS = 100;
58003
58296
  while (safety++ < MAX_ITERATIONS) {
58004
- const ifOpenPattern = /\{\{\s*#if\s+([^}]+)\s*\}\}((?:(?!\{\{\s*#if\s)(?!\{\{\s*\/if\s*\}\}).)*?)\{\{\s*\/if\s*\}\}/s;
58297
+ const ifOpenPattern = /\{\{\s*#if\s+(!?[\w.]+)\s*\}\}((?:(?!\{\{\s*#if\s)(?!\{\{\s*\/if\s*\}\}).)*?)\{\{\s*\/if\s*\}\}/s;
58005
58298
  const match = ifOpenPattern.exec(result);
58006
58299
  if (!match) {
58007
58300
  break;
@@ -58013,6 +58306,8 @@ function processInlineConditionals(text, data) {
58013
58306
  }
58014
58307
  return result;
58015
58308
  }
58309
+
58310
+ // src/core/builders/sdk/template-engine-segments.ts
58016
58311
  function replaceTokensAcrossSegments(segments, data) {
58017
58312
  if (segments.length === 0) {
58018
58313
  return;
@@ -58033,7 +58328,7 @@ function replaceTokensAcrossSegments(segments, data) {
58033
58328
  const fullText = textParts.join("");
58034
58329
  const afterConditionals = processInlineConditionals(fullText, data);
58035
58330
  if (afterConditionals !== fullText) {
58036
- redistributeText(segments, segmentMap, fullText, afterConditionals);
58331
+ redistributeText(segments, fullText, afterConditionals);
58037
58332
  replaceTokensAcrossSegments(segments, data);
58038
58333
  return;
58039
58334
  }
@@ -58091,7 +58386,7 @@ function replaceTokensAcrossSegments(segments, data) {
58091
58386
  }
58092
58387
  }
58093
58388
  }
58094
- function redistributeText(segments, _segmentMap, _originalFull, newFull, _data) {
58389
+ function redistributeText(segments, _originalFull, newFull) {
58095
58390
  let placed = false;
58096
58391
  for (const seg of segments) {
58097
58392
  if (seg.isParagraphBreak) {
@@ -58333,15 +58628,81 @@ async function mailMerge(handler, data, records) {
58333
58628
  }
58334
58629
 
58335
58630
  // src/core/builders/sdk/text-operations.ts
58336
- function toGlobalRegex(search) {
58631
+ function toSearchRegex(search) {
58337
58632
  if (typeof search === "string") {
58338
58633
  const escaped = search.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
58339
58634
  return new RegExp(escaped, "g");
58340
58635
  }
58341
- if (search.global) {
58342
- return search;
58636
+ return search;
58637
+ }
58638
+ function execAll(regex, text) {
58639
+ const results = [];
58640
+ if (regex.global || regex.sticky) {
58641
+ regex.lastIndex = 0;
58642
+ let match;
58643
+ while ((match = regex.exec(text)) !== null) {
58644
+ results.push(match);
58645
+ if (match[0].length === 0) {
58646
+ regex.lastIndex += 1;
58647
+ }
58648
+ }
58649
+ return results;
58343
58650
  }
58344
- return new RegExp(search.source, `${search.flags}g`);
58651
+ let offset = 0;
58652
+ let remaining = text;
58653
+ while (remaining.length > 0) {
58654
+ const match = regex.exec(remaining);
58655
+ if (!match) {
58656
+ break;
58657
+ }
58658
+ const adjusted = [...match];
58659
+ adjusted.index = offset + match.index;
58660
+ adjusted.input = text;
58661
+ adjusted.groups = match.groups;
58662
+ results.push(adjusted);
58663
+ const advance = match.index + (match[0].length || 1);
58664
+ offset += advance;
58665
+ remaining = remaining.slice(advance);
58666
+ }
58667
+ return results;
58668
+ }
58669
+ function expandReplacement(replacement, match, fullText) {
58670
+ return replacement.replace(
58671
+ /\$(\$|&|`|'|<([^>]+)>|\d{1,2})/g,
58672
+ (whole, token, groupName) => {
58673
+ if (token === "$") {
58674
+ return "$";
58675
+ }
58676
+ if (token === "&") {
58677
+ return match[0];
58678
+ }
58679
+ if (token === "`") {
58680
+ return fullText.slice(0, match.index);
58681
+ }
58682
+ if (token === "'") {
58683
+ return fullText.slice(match.index + match[0].length);
58684
+ }
58685
+ if (groupName !== void 0) {
58686
+ return match.groups?.[groupName] ?? "";
58687
+ }
58688
+ const groupIndex = Number(token);
58689
+ return groupIndex >= 1 && groupIndex < match.length ? match[groupIndex] ?? "" : whole;
58690
+ }
58691
+ );
58692
+ }
58693
+ function applyReplacements(text, matches, replacement) {
58694
+ if (matches.length === 0) {
58695
+ return text;
58696
+ }
58697
+ let result = "";
58698
+ let cursor = 0;
58699
+ for (const match of matches) {
58700
+ result += text.slice(cursor, match.index);
58701
+ result += expandReplacement(replacement, match, text);
58702
+ cursor = match.index + match[0].length;
58703
+ }
58704
+ result += text.slice(cursor);
58705
+ return result;
58345
58706
  }
58346
58707
  function collectElements(elements) {
58347
58708
  const result = [];
@@ -58357,7 +58718,7 @@ function findText(slides, search) {
58357
58718
  if (typeof search === "string" && search === "") {
58358
58719
  return [];
58359
58720
  }
58360
- const regex = toGlobalRegex(search);
58721
+ const regex = toSearchRegex(search);
58361
58722
  const results = [];
58362
58723
  slides.forEach((slide, slideIndex) => {
58363
58724
  const allElements = collectElements(slide.elements ?? []);
@@ -58368,9 +58729,7 @@ function findText(slides, search) {
58368
58729
  const segments = element.textSegments ?? [];
58369
58730
  segments.forEach((seg, segIndex) => {
58370
58731
  const text = seg.text ?? "";
58371
- regex.lastIndex = 0;
58372
- let match;
58373
- while ((match = regex.exec(text)) !== null) {
58732
+ for (const match of execAll(regex, text)) {
58374
58733
  results.push({
58375
58734
  slideIndex,
58376
58735
  elementId: element.id,
@@ -58378,9 +58737,6 @@ function findText(slides, search) {
58378
58737
  text: match[0],
58379
58738
  matchIndex: match.index
58380
58739
  });
58381
- if (match[0].length === 0) {
58382
- regex.lastIndex += 1;
58383
- }
58384
58740
  }
58385
58741
  });
58386
58742
  }
@@ -58391,7 +58747,7 @@ function replaceTextInSlide(slide, search, replacement) {
58391
58747
  if (typeof search === "string" && search === "") {
58392
58748
  return 0;
58393
58749
  }
58394
- const regex = toGlobalRegex(search);
58750
+ const regex = toSearchRegex(search);
58395
58751
  let totalReplacements = 0;
58396
58752
  function processElements2(elements) {
58397
58753
  for (const element of elements) {
@@ -58403,23 +58759,12 @@ function replaceTextInSlide(slide, search, replacement) {
58403
58759
  }
58404
58760
  const segments = element.textSegments ?? [];
58405
58761
  let elementTextChanged = false;
58406
- for (let segIdx = 0; segIdx < segments.length; segIdx++) {
58407
- const seg = segments[segIdx];
58762
+ for (const seg of segments) {
58408
58763
  const originalText = seg.text ?? "";
58409
- regex.lastIndex = 0;
58410
- let matchCount = 0;
58411
- let m;
58412
- const countRegex = toGlobalRegex(search);
58413
- while ((m = countRegex.exec(originalText)) !== null) {
58414
- matchCount++;
58415
- if (m[0].length === 0) {
58416
- countRegex.lastIndex += 1;
58417
- }
58418
- }
58419
- if (matchCount > 0) {
58420
- const newText = originalText.replace(toGlobalRegex(search), replacement);
58421
- seg.text = newText;
58422
- totalReplacements += matchCount;
58764
+ const matches = execAll(regex, originalText);
58765
+ if (matches.length > 0) {
58766
+ seg.text = applyReplacements(originalText, matches, replacement);
58767
+ totalReplacements += matches.length;
58423
58768
  elementTextChanged = true;
58424
58769
  }
58425
58770
  }
@@ -62383,7 +62728,7 @@ ${htmlRows.join("\n")}
62383
62728
  return parts.join("").trim();
62384
62729
  }
62385
62730
  escapeMarkdownTableCell(text) {
62386
- return text.replace(/\|/g, "\\|").replace(/\n+/g, " ").trim();
62731
+ return text.replace(/\\/g, "\\\\").replace(/\|/g, "\\|").replace(/\n+/g, " ").trim();
62387
62732
  }
62388
62733
  };
62389
62734
 
@@ -65013,4 +65358,4 @@ var SvgExporter = class _SvgExporter {
65013
65358
  * `<p:extLst>` (optional)
65014
65359
  */
65015
65360
 
65016
- export { ALL_ANIMATION_PRESETS, BLIP_FILL_ORDER, CLOUD_CALLOUT_TAIL_COUNT, CLOUD_LOBE_COUNT, COLOR_MAP_ALIAS_KEYS, CONNECTOR_ARROW_OPTIONS, CONNECTOR_GEOMETRY_OPTIONS, ChartBuilder, ConnectorBuilder, ConnectorXmlFactory, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_COLOR_MAP, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_MAX_UNCOMPRESSED_BYTES, DEFAULT_SCHEME_COLOR_MAP, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, DIGEST_ALGORITHM_TO_HASH, DIGEST_ALGORITHM_TO_WEB_CRYPTO, DIGITAL_SIGNATURE_ORIGIN_REL_TYPE, DIGITAL_SIGNATURE_REL_TYPE, DataIntegrityError, DocumentConverter, EFFECT_LST_ORDER, EMPHASIS_PRESETS, EMU_PER_INCH, EMU_PER_PIXEL2 as EMU_PER_PIXEL, EMU_PER_POINT, EMU_PER_PX, ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV, ENTERPRISE_REQUIRE_REVOCATION_ENV, ENTERPRISE_REQUIRE_TIMESTAMP_ENV, ENTERPRISE_TRUST_ROOTS_FILE_ENV, ENTERPRISE_TRUST_ROOTS_PEM_ENV, ENTRANCE_PRESETS, EXIT_PRESETS, EncryptedFileError, FONT_SUBSTITUTION_MAP, FreeformPathBuilder, GroupBuilder, ImageBuilder, IncorrectPasswordError, MAX_TABLE_DIMENSION, MAX_ZIP_ENTRY_COUNT, MIN_ELEMENT_SIZE, MIN_TABLE_DIMENSION, MOTION_PATH_PRESETS, MediaBuilder, MediaContext, MediaGraphicFrameXmlFactory, OOXML_TO_PRESET_EMPH, OOXML_TO_PRESET_ENTR, OOXML_TO_PRESET_EXIT, OPC_RELATIONSHIP_TRANSFORM, Ole2ParseError, P14_GUIDE_URI, P15_GUIDE_URI, PANOSE_FAMILY_MAP, PANOSE_MONOSPACE_PROPORTION, PANOSE_SANS_SERIF_STYLES, PANOSE_WEIGHT_MAP, POWERPOINT_PRESENCE_KEY, PPTX_VIEWER_MANIFEST_NS, PRESET_COLOR_MAP, PRESET_SHAPE_CATEGORY_LABELS, PRESET_SHAPE_CLIP_PATHS, PRESET_SHAPE_DEFINITIONS, PRESET_SHAPE_GEOMETRY_TABLE, PRESET_TO_OOXML, PictureXmlFactory, PptxAnimationWriteService, PptxColorStyleCodec, PptxCommentAuthorsXmlFactory, PptxCommentXmlFactoryProvider, PptxCompatibilityService, PptxConnectorParser, PptxContentTypesBuilder, PptxDocumentPropertiesUpdater, PptxEditorAnimationService, PptxElementTransformUpdater, PptxElementXmlBuilder, PptxGraphicFrameParser, PptxHandler, PptxHandlerRuntime82 as PptxHandlerRuntime, PptxHandlerRuntimeFactory, PptxLoadDataBuilder, PptxMarkdownConverter, PptxMediaDataParser, PptxNativeAnimationService, PptxPresentationSaveBuilder, PptxPresentationSlidesReconciler, PptxRuntimeDependencyFactory, PptxSaveConstantsFactory, PptxSaveState as PptxSaveSession, PptxSaveStateBuilder as PptxSaveSessionBuilder, PptxSaveState, PptxSaveStateBuilder, PptxShapeIdValidator, PptxShapeStyleExtractor, PptxSlideBackgroundBuilder, PptxSlideBuilder, PptxSlideCommentPartWriter, PptxSlideCommentsXmlFactory, PptxSlideElementsBuilder, PptxSlideLoaderService, PptxSlideMediaRelationshipBuilder, PptxSlideNotesBuilder, PptxSlideNotesPartUpdater, PptxSlideRelationshipRegistry, PptxSlideTransitionService, PptxTableDataParser, PptxTemplateBackgroundService, PptxXmlBuilder, PptxXmlFactoryProvider, PptxXmlLookupService, Presentation, PresentationBuilder, SHAPE_TREE_ELEMENT_TAGS, SP_PR_ORDER, STROKE_DASH_OPTIONS, SUPPORTED_XML_CANON_TRANSFORMS, SWITCHABLE_LAYOUT_TYPES, SYSTEM_COLOR_MAP, ShapeBuilder, SlideBuilder, SlideProcessor, SlideSizes, SvgExporter, TC_PR_BORDERS_ORDER, THEME_COLOR_SCHEME_KEYS, THEME_PRESETS, TRANSITION_VALID_DIRECTIONS, TableBuilder, TextBuilder, TextShapeXmlFactory, ThemePresets, VML_SHAPE_TAGS, XMLDSIG_NS, XML_TRANSFORM_ENVELOPED_SIGNATURE, ZipBombError, addChartCategory, addChartSeries, addSection, addSmartArtNode, addSmartArtNodeAsChild, applyDrawingColorTransforms, applyKinsokuToXml, applyTableCellTextAndStyle, applyTemplate, applyThemeToData, areNamespacesSupported, buildCalloutLeaderLineSvgPath, buildClrMapOverrideXml, buildFontFamilyString, buildGuideListExtension, buildLinkedTextBoxChains, buildOle2, buildSingleEffectNode, buildSrgbColorChoice, buildThemeColorMap, catmullRomToBezier, chartDataAddCategory, chartDataAddSeries, chartDataChangeType, chartDataRemoveCategory, chartDataRemoveSeries, chartDataUpdatePoint, checkBlankSlide, checkComplexTables, checkDuplicateTitles, checkLowContrast, checkMissingAltText, checkMissingSlideTitle, checkPresentation, clampUnitInterval, classifyPanose, cloneElement, cloneShapeStyle, cloneSlide, cloneTemplateElementsBySlideId, cloneTextStyle, cloneXmlObject, cm, cmToEmu, colorWithOpacity, colorsEqual, combineShapes, computeContrastRatio, computeCycleLayout, computeDetailStatus, computeDigestBase64 as computeDigestBase64WebCrypto, computeHierarchyLayout, computeLinearLayout, computeMatrixLayout, computePyramidLayout, computeSmartArtLayout, computeSnakeLayout, computeVerificationStatus, convertXmlToStrict, createArrayBufferCopy, createBuiltinVariables, createChartElement, createConnectorElement, createDefaultPptxHandlerRuntime, createEditorId, createFreeformElement, createGroupElement, createImageElement, createLayout, createLayouts, createMediaElement, createModifyVerifier, createPptxSaveConstants, createShapeElement, createTableCellXml, createTableElement, createTableGraphicFrameRawXml, createTemplateConnectorRawXml, createTemplateShapeRawXml, createTextElement, createUniformTextSegments, dataUrlToMediaBytes, decodeOle10Native, decodeXmlEntities, decomposeSmartArt, decryptPptx, demoteSmartArtNode, deobfuscateFont, deriveOutputPath, detectDigitalSignatures, detectFileFormat, detectFontFormat, detectOleObjectType, detectStrictConformance, diffPresentations, diffSlides, distributeSegmentsAcrossChain, douglasPeucker, duplicateElement, duplicateSlide, elementActionToPptxAction, elementHasAction, emuToPixels, encryptPptx, ensureArrayValue, escapeXmlAttr, escapeXmlText, estimateTextBoxCapacity, evaluateGeometryPaths, evaluateGuides, evaluatePresetShape, extractAllTagText, extractColorChoiceXml, extractFirstTagText, extractGuidFromPartName, extractModel3DTransform, extractTagAttribute, fetchUrlToBytes, findCustomShow, findLayoutByName, findLayoutByType, findPlaceholders, findText, formatCommentTimestamp, fragmentShapes, generateFontGuid, generateLayoutXml, generateMediaFilename, getAdjustmentAwareClipPath, getAdjustmentAwareShapeClipPath, getAnimationPresetInfo, getCalloutLeaderLineGeometry, getCalloutTier, getCalloutViewBoxBounds, getCloudCalloutClipPath, getCloudClipPath, getCloudPathForRendering, getCommentMarkerPosition, getConnectorAdjustment, getConnectorPathGeometry, getCssBorderDashStyle, getCustomShowNames, getCustomShowPositionLabel, getDirectory, getElementLabel, getElementTextContent, getElementTransform, getImageMaskStyle, getLinkedTextBoxSegments, getNativeAnimationPresetMetadata, getOleObjectTypeLabel, getPanoseWeight, getPresetShapeClipPath, getPresetsByCategory, getRoundRectRadiusPx, getSectionForSlide, getSectionSlideRange, getShapeClipPath, getShapeClipPathFromPreset, getShapeType, getSignaturePathsToStrip, getSubstituteFontFamily, getSubstituteFonts, getSupportedNamespaces, getSvgStrokeDasharray, getTextCompensationTransform, getThemePreset, getZoomElements, getZoomTargetSlideIndexes, guidToKey, guideEmuToPx, guidePxToEmu, hasDirectSubstitution, hasNonTrivialOverride, hasShapeProperties, hasTextProperties, hexToRgbChannels, hslToRgb, inches, inchesToEmu, inferOleExtensionFromTarget, interpolateShapeGeometry, intersectPolygons, intersectShapes, intersectSvgPaths, isCalloutShape, isConnectorElement, isEditableTextElement, isImageLikeElement, isInkElement, isNamespaceSupported, isOle2CompoundFile, isShapeElement, isStrictNamespaceUri, isSummaryZoomSlide, isSwitchableLayoutType, isTemplateElement, isTextElement, isTransitionalNamespaceUri, isValidBase64, isXmlNode, isZoomElement, isZoomElement2 as isZoomElementUtil, layoutEngineShapesToDrawingShapes, lookupPresetShape, mailMerge, mergePresentation, mergeShapes, mergeStyleParts, mergeThemeColorOverride, mimeTypeForOleFile, mm, moveSlidesToSection, navigateCustomShow, normalizeHexColor, normalizeNamespaceUri, normalizePartPath, normalizePath, normalizeStrictXml, normalizeStrokeDashType, obfuscateFont, oleBytesToDataUrl, ooxmlArcToSvg, ooxmlToPresetName, parseActiveXControlsFromSlide, parseAdjustmentValues, parseBodyPrBooleanAttrs, parseChart3DSurfaces, parseChartAxes, parseCondition, parseConditionList, parseCxChartSeries, parseDataTable, parseDataUrlToBytes, parseDrawingColor, parseDrawingColorChoice, parseDrawingColorOpacity, parseDrawingFraction, parseDrawingHueDegrees, parseDrawingPercent, parseEmbeddedXlsx, parseGuideDefinitions, parseHexColor, parseKinsoku, parseLayoutDefinition, parseLineStyle, parseMarker, parseOle2, parsePanoseBytes, parsePanoseString, parsePresentationDrawingGuides, parseSeriesDataLabels, parseSeriesDataPoints, parseSeriesErrBars, parseSeriesExplosion, parseSeriesTrendlines, parseShapeProps, parseSignatureXml, parseSlideDrawingGuides, parseSvgPath, parseVmlElement, parseVmlElements, pixelsToEmu, polygonsToSvgPath, pptxActionToElementAction, promoteSmartArtNode, pt, reResolveSlideColors, readFileAsDataUrl, rebuildTableStructureInRawXml, reflowSmartArtLayout, relativeLuminance, relayoutSmartArt, removeChartCategory, removeChartSeries, removeSection, removeSmartArtNode, reorderObjectKeys, reorderSections, reorderSmartArtNode, reorderSmartArtNodeToIndex, repairPptx, replaceShapeGeometry, replaceText, replaceTextInSlide, replaceWithCustomGeometry, resetCloneIdCounter, resetDecomposeCounter, resetIdCounter, resetSectionIdCounter, resetSmartArtEditCounter, resolveCoordinate, resolveCustomShowSlideIndices, resolveLayoutDisplayName, resolveModel3DMimeType, resolveReferenceUriToPart, resolveTableCellStyle, rgbToHsl, selectAlternateContentBranch, serializeColorChoice, serializeCondition, serializeConditionList, serializeSvgPath, setChartAxis, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategories, setChartDataLabels, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartGrouping, setChartLegend, setChartSeriesChartType, setChartSeriesColor, setChartSeriesErrorBars, setChartSeriesMarker, setChartSeriesTrendline, setChartTitle, setChartType, setElementLocked, setSmartArtNodeStyle, shouldRenderFallbackLabel, shouldReturnToZoomSlide, subtractPolygons, subtractShapes, subtractSvgPaths, svgPathToPolygons, switchSmartArtLayout, toHex, toStrictNamespaceUri, unionPolygons, unionShapes, unionSvgPaths, unwrapAlternateContent, unwrapOleEmbedding, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateChartDataPoint, updateChartSeriesValues, updateMergeAttrsInRawXml, updateSmartArtNodeText, validatePptx, verifyModifyPassword, verifyPassword, verifySignatureDigests, writeBodyPrBooleanAttrs, xmlAttr, xmlAttrBool, xmlAttrNumber, xmlChild, xmlChildren, xmlPath, xmlText };
65361
+ export { ALL_ANIMATION_PRESETS, BLIP_FILL_ORDER, CLOUD_CALLOUT_TAIL_COUNT, CLOUD_LOBE_COUNT, COLOR_MAP_ALIAS_KEYS, CONNECTOR_ARROW_OPTIONS, CONNECTOR_GEOMETRY_OPTIONS, ChartBuilder, ConnectorBuilder, ConnectorXmlFactory, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_COLOR_MAP, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_MAX_UNCOMPRESSED_BYTES, DEFAULT_SCHEME_COLOR_MAP, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, DIGEST_ALGORITHM_TO_HASH, DIGEST_ALGORITHM_TO_WEB_CRYPTO, DIGITAL_SIGNATURE_ORIGIN_REL_TYPE, DIGITAL_SIGNATURE_REL_TYPE, DataIntegrityError, DocumentConverter, EFFECT_LST_ORDER, EMPHASIS_PRESETS, EMU_PER_INCH, EMU_PER_PIXEL2 as EMU_PER_PIXEL, EMU_PER_POINT, EMU_PER_PX, ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV, ENTERPRISE_REQUIRE_REVOCATION_ENV, ENTERPRISE_REQUIRE_TIMESTAMP_ENV, ENTERPRISE_TRUST_ROOTS_FILE_ENV, ENTERPRISE_TRUST_ROOTS_PEM_ENV, ENTRANCE_PRESETS, EXIT_PRESETS, EncryptedFileError, FONT_SUBSTITUTION_MAP, FreeformPathBuilder, GroupBuilder, ImageBuilder, IncorrectPasswordError, MAX_TABLE_DIMENSION, MAX_ZIP_ENTRY_COUNT, MIN_ELEMENT_SIZE, MIN_TABLE_DIMENSION, MOTION_PATH_PRESETS, MediaBuilder, MediaContext, MediaGraphicFrameXmlFactory, OOXML_TO_PRESET_EMPH, OOXML_TO_PRESET_ENTR, OOXML_TO_PRESET_EXIT, OPC_RELATIONSHIP_TRANSFORM, Ole2ParseError, P14_GUIDE_URI, P15_GUIDE_URI, PANOSE_FAMILY_MAP, PANOSE_MONOSPACE_PROPORTION, PANOSE_SANS_SERIF_STYLES, PANOSE_WEIGHT_MAP, POWERPOINT_PRESENCE_KEY, PPTX_VIEWER_MANIFEST_NS, PRESET_COLOR_MAP, PRESET_SHAPE_CATEGORY_LABELS, PRESET_SHAPE_CLIP_PATHS, PRESET_SHAPE_DEFINITIONS, PRESET_SHAPE_GEOMETRY_TABLE, PRESET_TO_OOXML, PictureXmlFactory, PptxAnimationWriteService, PptxColorStyleCodec, PptxCommentAuthorsXmlFactory, PptxCommentXmlFactoryProvider, PptxCompatibilityService, PptxConnectorParser, PptxContentTypesBuilder, PptxDocumentPropertiesUpdater, PptxEditorAnimationService, PptxElementTransformUpdater, PptxElementXmlBuilder, PptxGraphicFrameParser, PptxHandler, PptxHandlerRuntime82 as PptxHandlerRuntime, PptxHandlerRuntimeFactory, PptxLoadDataBuilder, PptxMarkdownConverter, PptxMediaDataParser, PptxNativeAnimationService, PptxPresentationSaveBuilder, PptxPresentationSlidesReconciler, PptxRuntimeDependencyFactory, PptxSaveConstantsFactory, PptxSaveState as PptxSaveSession, PptxSaveStateBuilder as PptxSaveSessionBuilder, PptxSaveState, PptxSaveStateBuilder, PptxShapeIdValidator, PptxShapeStyleExtractor, PptxSlideBackgroundBuilder, PptxSlideBuilder, PptxSlideCommentPartWriter, PptxSlideCommentsXmlFactory, PptxSlideElementsBuilder, PptxSlideLoaderService, PptxSlideMediaRelationshipBuilder, PptxSlideNotesBuilder, PptxSlideNotesPartUpdater, PptxSlideRelationshipRegistry, PptxSlideTransitionService, PptxTableDataParser, PptxTemplateBackgroundService, PptxXmlBuilder, PptxXmlFactoryProvider, PptxXmlLookupService, Presentation, PresentationBuilder, SHAPE_TREE_ELEMENT_TAGS, SP_PR_ORDER, STROKE_DASH_OPTIONS, SUPPORTED_XML_CANON_TRANSFORMS, SWITCHABLE_LAYOUT_TYPES, SYSTEM_COLOR_MAP, ShapeBuilder, SlideBuilder, SlideProcessor, SlideSizes, SvgExporter, TC_PR_BORDERS_ORDER, THEME_COLOR_SCHEME_KEYS, THEME_PRESETS, TRANSITION_VALID_DIRECTIONS, TableBuilder, TextBuilder, TextShapeXmlFactory, ThemePresets, VML_SHAPE_TAGS, XMLDSIG_NS, XML_TRANSFORM_ENVELOPED_SIGNATURE, ZipBombError, addChartCategory, addChartSeries, addSection, addSmartArtNode, addSmartArtNodeAsChild, applyDrawingColorTransforms, applyKinsokuToXml, applyTableCellTextAndStyle, applyTemplate, applyThemeToData, areNamespacesSupported, buildCalloutLeaderLineSvgPath, buildClrMapOverrideXml, buildFontFamilyString, buildGuideListExtension, buildLinkedTextBoxChains, buildOle2, buildSingleEffectNode, buildSrgbColorChoice, buildThemeColorMap, catmullRomToBezier, chartDataAddCategory, chartDataAddSeries, chartDataChangeType, chartDataRemoveCategory, chartDataRemoveSeries, chartDataUpdatePoint, checkBlankSlide, checkComplexTables, checkDuplicateTitles, checkLowContrast, checkMissingAltText, checkMissingSlideTitle, checkPresentation, clampUnitInterval, classifyPanose, cloneElement, cloneShapeStyle, cloneSlide, cloneTemplateElementsBySlideId, cloneTextStyle, cloneXmlObject, cm, cmToEmu, colorWithOpacity, colorsEqual, combineShapes, computeContrastRatio, computeCycleLayout, computeDetailStatus, computeDigestBase64 as computeDigestBase64WebCrypto, computeHierarchyLayout, computeLinearLayout, computeMatrixLayout, computePyramidLayout, computeSmartArtLayout, computeSnakeLayout, computeVerificationStatus, convertXmlToStrict, createArrayBufferCopy, createBuiltinVariables, createChartElement, createConnectorElement, createDefaultPptxHandlerRuntime, createEditorId, createFreeformElement, createGroupElement, createImageElement, createLayout, createLayouts, createMediaElement, createModifyVerifier, createPptxSaveConstants, createShapeElement, createTableCellXml, createTableElement, createTableGraphicFrameRawXml, createTemplateConnectorRawXml, createTemplateShapeRawXml, createTextElement, createUniformTextSegments, dataUrlToMediaBytes, decodeOle10Native, decodeXmlEntities, decomposeSmartArt, decryptPptx, demoteSmartArtNode, deobfuscateFont, deriveOutputPath, detectDigitalSignatures, detectFileFormat, detectFontFormat, detectOleObjectType, detectStrictConformance, diffPresentations, diffSlides, distributeSegmentsAcrossChain, douglasPeucker, duplicateElement, duplicateSlide, elementActionToPptxAction, elementHasAction, emuToPixels, encryptPptx, ensureArrayValue, escapeXmlAttr, escapeXmlText, estimateTextBoxCapacity, evaluateGeometryPaths, evaluateGuides, evaluatePresetShape, extractAllTagText, extractColorChoiceXml, extractFirstTagText, extractGuidFromPartName, extractModel3DTransform, extractTagAttribute, fetchUrlToBytes, findCustomShow, findLayoutByName, findLayoutByType, findPlaceholders, findText, formatCommentTimestamp, fragmentShapes, generateFontGuid, generateLayoutXml, generateMediaFilename, getAdjustmentAwareClipPath, getAdjustmentAwareShapeClipPath, getAnimationPresetInfo, getCalloutLeaderLineGeometry, getCalloutTier, getCalloutViewBoxBounds, getCloudCalloutClipPath, getCloudClipPath, getCloudPathForRendering, getCommentMarkerPosition, getConnectorAdjustment, getConnectorPathGeometry, getCssBorderDashStyle, getCustomShowNames, getCustomShowPositionLabel, getDirectory, getElementLabel, getElementTextContent, getElementTransform, getImageMaskStyle, getLinkedTextBoxSegments, getNativeAnimationPresetMetadata, getOleObjectTypeLabel, getPanoseWeight, getPresetShapeClipPath, getPresetsByCategory, getRoundRectRadiusPx, getSectionForSlide, getSectionSlideRange, getShapeClipPath, getShapeClipPathFromPreset, getShapeType, getSignaturePathsToStrip, getSubstituteFontFamily, getSubstituteFonts, getSupportedNamespaces, getSvgStrokeDasharray, getTextCompensationTransform, getThemePreset, getZoomElements, getZoomTargetSlideIndexes, guidToKey, guideEmuToPx, guidePxToEmu, hasDirectSubstitution, hasNonTrivialOverride, hasShapeProperties, hasTextProperties, hexToRgbChannels, hslToRgb, inches, inchesToEmu, inferOleExtensionFromTarget, interpolateShapeGeometry, intersectPolygons, intersectShapes, intersectSvgPaths, isCalloutShape, isConnectorElement, isEditableTextElement, isImageLikeElement, isInkElement, isNamespaceSupported, isOle2CompoundFile, isShapeElement, isStrictNamespaceUri, isSummaryZoomSlide, isSwitchableLayoutType, isTemplateElement, isTextElement, isTransitionalNamespaceUri, isValidBase64, isXmlNode, isZoomElement, isZoomElement2 as isZoomElementUtil, layoutEngineShapesToDrawingShapes, lookupPresetShape, mailMerge, mergePresentation, mergeShapes, mergeStyleParts, mergeThemeColorOverride, mimeTypeForOleFile, mm, moveSlidesToSection, navigateCustomShow, normalizeHexColor, normalizeNamespaceUri, normalizePartPath, normalizePath, normalizeStrictXml, normalizeStrokeDashType, obfuscateFont, oleBytesToDataUrl, ooxmlArcToSvg, ooxmlToPresetName, parseActiveXControlsFromSlide, parseAdjustmentValues, parseBodyPrBooleanAttrs, parseChart3DSurfaces, parseChartAxes, parseCondition, parseConditionList, parseCxChartSeries, parseDataTable, parseDataUrlToBytes, parseDrawingColor, parseDrawingColorChoice, parseDrawingColorOpacity, parseDrawingFraction, parseDrawingHueDegrees, parseDrawingPercent, parseEmbeddedXlsx, parseGuideDefinitions, parseHexColor, parseKinsoku, parseLayoutDefinition, parseLineStyle, parseMarker, parseOle2, parsePanoseBytes, parsePanoseString, parsePresentationDrawingGuides, parseSeriesDataLabels, parseSeriesDataPoints, parseSeriesErrBars, parseSeriesExplosion, parseSeriesTrendlines, parseShapeProps, parseSignatureXml, parseSlideDrawingGuides, parseSvgPath, parseVmlElement, parseVmlElements, pixelsToEmu, polygonsToSvgPath, pptxActionToElementAction, promoteSmartArtNode, pt, reResolveSlideColors, readFileAsDataUrl, rebuildTableStructureInRawXml, reconcileAnimationTargets, reflowSmartArtLayout, relativeLuminance, relayoutSmartArt, remapEditorAnimationsToShapeIds, removeChartCategory, removeChartSeries, removeSection, removeSmartArtNode, reorderObjectKeys, reorderSections, reorderSmartArtNode, reorderSmartArtNodeToIndex, repairPptx, replaceShapeGeometry, replaceText, replaceTextInSlide, replaceWithCustomGeometry, resetCloneIdCounter, resetDecomposeCounter, resetIdCounter, resetSectionIdCounter, resetSmartArtEditCounter, resolveCoordinate, resolveCustomShowSlideIndices, resolveLayoutDisplayName, resolveModel3DMimeType, resolveReferenceUriToPart, resolveTableCellStyle, rgbToHsl, selectAlternateContentBranch, serializeColorChoice, serializeCondition, serializeConditionList, serializeSvgPath, setChartAxis, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategories, setChartDataLabels, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartGrouping, setChartLegend, setChartSeriesChartType, setChartSeriesColor, setChartSeriesErrorBars, setChartSeriesMarker, setChartSeriesTrendline, setChartTitle, setChartType, setElementLocked, setSmartArtNodeStyle, shouldRenderFallbackLabel, shouldReturnToZoomSlide, subtractPolygons, subtractShapes, subtractSvgPaths, svgPathToPolygons, switchSmartArtLayout, toHex, toStrictNamespaceUri, unionPolygons, unionShapes, unionSvgPaths, unwrapAlternateContent, unwrapOleEmbedding, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateChartDataPoint, updateChartSeriesValues, updateMergeAttrsInRawXml, updateSmartArtNodeText, validatePptx, verifyModifyPassword, verifyPassword, verifySignatureDigests, writeBodyPrBooleanAttrs, xmlAttr, xmlAttrBool, xmlAttrNumber, xmlChild, xmlChildren, xmlPath, xmlText };