@office-open/pptx 0.7.1 → 0.8.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.
package/dist/index.mjs CHANGED
@@ -1,9 +1,10 @@
1
1
  import { i as __toCommonJS, n as __exportAll, r as __reExport, t as __esmMin } from "./chunk-DHfcOUro.mjs";
2
- import { AppProperties, BaseXmlComponent, BuilderElement, EmptyElement, Formatter, Formatter as Formatter$1, ImportedXmlComponent, OoxmlMimeType, PPTX_NS, Relationships, XmlComponent, addSmartArtRelationships, appendContentType, buildAttrObject, buildCorePropertiesXmlString, collectPlaceholderKeys, compileMapping, convertEmuToInches, convertEmuToPixels, convertEmuToPixels as convertEmuToPixels$1, convertEmuToPoints, convertInchesToEmu, convertPixelsToEmu, convertPixelsToEmu as convertPixelsToEmu$1, convertPointsToEmu, createPacker, createReplacer, formatId, getReferencedMedia, hasPlaceholders, hashedId, parseArchive, parseCorePropsElement, replaceChartPlaceholders, replaceImagePlaceholders, replaceSmartArtPlaceholders, strFromU8, stringContainerObj, toJson, toUint8Array, uniqueId, uniqueNumericIdCreator, uniqueUuid, unzipSync, xsdLineEndSize, xsdRectAlignment, xsdStrikeStyle, xsdTextAlign, xsdTextAnchor, xsdTextCaps, xsdUnderlineStyle, zipAndConvert } from "@office-open/core";
2
+ import { AppProperties, BaseXmlComponent, BuilderElement, EmptyElement, Formatter, Formatter as Formatter$1, ImportedXmlComponent, OoxmlMimeType, PPTX_NS, Relationships, XmlComponent, addSmartArtRelationships, appendContentType, buildAttrObject, buildCorePropertiesXmlString, collectPlaceholderKeys, compileMapping, convertEmuToInches, convertEmuToPixels, convertEmuToPixels as convertEmuToPixels$1, convertEmuToPoints, convertInchesToEmu, convertPixelsToEmu, convertPixelsToEmu as convertPixelsToEmu$1, convertPointsToEmu, createPacker, createReplacer, createTableStyleList, derivePasswordHash, formatId, getReferencedMedia, hasPlaceholders, hashedId, parseArchive, parseCorePropsElement, replaceChartPlaceholders, replaceImagePlaceholders, replaceSmartArtPlaceholders, strFromU8, stringContainerObj, toJson, toUint8Array, uniqueId, uniqueNumericIdCreator, uniqueUuid, unzipSync, xsdLineEndSize, xsdRectAlignment, xsdStrikeStyle, xsdTextAlign, xsdTextAnchor, xsdTextCaps, xsdUnderlineStyle, zipAndConvert } from "@office-open/core";
3
3
  import { BevelPresetType, CompoundLine, LineCap, LineJoin, PathShadeType, PenAlignment, PresetDash, PresetGeometry, PresetMaterialType, Stretch, TileFlipMode, buildFill, createBevel, createBlip, createBottomBevel, createColorElement, createColorTransforms, createEffectList, createEffectList as createEffectList$1, createGradientFill, createGradientStop, createGroupTransform2D, createOutline, createOutline as createOutline$1, createScene3D, createScene3D as createScene3D$1, createShape3D, createShape3D as createShape3D$1, createTransform2D, extractBlipFillMedia } from "@office-open/core/drawingml";
4
4
  import { ChartCollection, ChartSpace } from "@office-open/core/chart";
5
5
  import { attr, attrBool, attrNum, children, colorAttr, escapeXml, findChild, findDeep, js2xml, textOf, xml, xml2js } from "@office-open/xml";
6
6
  import { DEFAULT_DRAWING_XML, SmartArtCollection, createDataModel, getColorXml, getLayoutXml, getStyleXml } from "@office-open/core/smartart";
7
+ import { DefaultTheme } from "@office-open/core/theme";
7
8
  export * from "@office-open/core/values";
8
9
  //#region src/file/drawingml/effects.ts
9
10
  /** Convert PPTX simple color to core SolidFillOptions. */
@@ -239,6 +240,10 @@ var SlideCommentList = class extends XmlComponent {
239
240
  ...comment.date != null ? { dt: {
240
241
  key: "dt",
241
242
  value: comment.date
243
+ } } : {},
244
+ ...comment.modified !== void 0 ? { mod: {
245
+ key: "mod",
246
+ value: comment.modified ? "1" : "0"
242
247
  } } : {}
243
248
  },
244
249
  children: [new BuilderElement({
@@ -270,6 +275,7 @@ const PPTX_SLIDE_LAYOUT = "application/vnd.openxmlformats-officedocument.present
270
275
  const PPTX_THEME = "application/vnd.openxmlformats-officedocument.theme+xml";
271
276
  const PPTX_NOTES = "application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml";
272
277
  const PPTX_NOTES_MASTER = "application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml";
278
+ const PPTX_HANDOUT_MASTER = "application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml";
273
279
  const PPTX_COMMENTS = "application/vnd.openxmlformats-officedocument.presentationml.comments+xml";
274
280
  const PPTX_COMMENT_AUTHORS = "application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml";
275
281
  const PPTX_CHART = "application/vnd.openxmlformats-officedocument.drawingml.chart+xml";
@@ -371,6 +377,13 @@ var ContentTypes = class extends BaseXmlComponent {
371
377
  key: "/ppt/notesMasters/notesMaster1.xml"
372
378
  });
373
379
  }
380
+ addHandoutMaster() {
381
+ this.dynamicEntries.push({
382
+ type: "Override",
383
+ contentType: PPTX_HANDOUT_MASTER,
384
+ key: "/ppt/handoutMasters/handoutMaster1.xml"
385
+ });
386
+ }
374
387
  addComments(index) {
375
388
  this.dynamicEntries.push({
376
389
  type: "Override",
@@ -584,6 +597,7 @@ function buildParagraphProperties(options) {
584
597
  if (options.marginIndent !== void 0) attrs.marL = options.marginIndent;
585
598
  if (options.marginRight !== void 0) attrs.marR = options.marginRight;
586
599
  if (options.defTabSize !== void 0) attrs.defTabSz = options.defTabSize;
600
+ if (options.fontAlignment) attrs.fontAlgn = options.fontAlignment;
587
601
  if (Object.keys(attrs).length > 0) children.push({ _attr: attrs });
588
602
  if (options.lineSpacing !== void 0) children.push({ "a:lnSpc": [{ "a:spcPct": { _attr: { val: options.lineSpacing * 1e3 } } }] });
589
603
  if (options.lineSpacingPoints !== void 0) children.push({ "a:lnSpc": [{ "a:spcPts": { _attr: { val: options.lineSpacingPoints * 100 } } }] });
@@ -664,13 +678,18 @@ function buildAttrString(options) {
664
678
  if (options.spacing !== void 0) attrs.push(`spc="${options.spacing}"`);
665
679
  if (options.noProof !== void 0) attrs.push(`noProof="${options.noProof ? 1 : 0}"`);
666
680
  if (options.dirty !== void 0) attrs.push(`dirty="${options.dirty ? 1 : 0}"`);
681
+ if (options.kumimoji !== void 0) attrs.push(`kumimoji="${options.kumimoji ? 1 : 0}"`);
682
+ if (options.alternateLanguage) attrs.push(`altLang="${options.alternateLanguage}"`);
683
+ if (options.normalizeHeight !== void 0) attrs.push(`normalizeH="${options.normalizeHeight ? 1 : 0}"`);
684
+ if (options.bookmarkMark) attrs.push(`bmk="${options.bookmarkMark}"`);
685
+ if (options.smartTagId) attrs.push(`smtId="${options.smartTagId}"`);
667
686
  return attrs.join(" ");
668
687
  }
669
688
  /**
670
689
  * Checks if options have any settable properties.
671
690
  */
672
691
  function hasRunProperties(options) {
673
- return !!(options.fontSize || options.bold !== void 0 || options.italic !== void 0 || options.underline || options.font || options.lang || options.fill || options.hyperlink || options.strike || options.baseline !== void 0 || options.spacing !== void 0 || options.capitalization || options.shadow !== void 0 || options.outline !== void 0 || options.rightToLeft !== void 0 || options.noProof !== void 0 || options.dirty !== void 0);
692
+ return !!(options.fontSize || options.bold !== void 0 || options.italic !== void 0 || options.underline || options.font || options.lang || options.fill || options.hyperlink || options.strike || options.baseline !== void 0 || options.spacing !== void 0 || options.capitalization || options.shadow !== void 0 || options.outline !== void 0 || options.rightToLeft !== void 0 || options.noProof !== void 0 || options.dirty !== void 0 || options.kumimoji !== void 0 || options.alternateLanguage !== void 0 || options.normalizeHeight !== void 0 || options.bookmarkMark !== void 0 || options.smartTagId !== void 0);
674
693
  }
675
694
  /**
676
695
  * a:rPr — Run properties (font, size, color, etc.).
@@ -711,8 +730,14 @@ var RunProperties = class extends XmlComponent {
711
730
  parts.push(`<a:ea typeface="${opts.font}"/>`);
712
731
  }
713
732
  if (opts.hyperlink && hyperlinkKey) {
714
- const tooltip = opts.hyperlink.tooltip ? ` tooltip="${opts.hyperlink.tooltip}"` : "";
715
- parts.push(`<a:hlinkClick r:id="{hlink:${hyperlinkKey}}"${tooltip}/>`);
733
+ const hl = opts.hyperlink;
734
+ const hlAttrs = [`r:id="{hlink:${hyperlinkKey}}"`];
735
+ if (hl.tooltip) hlAttrs.push(`tooltip="${hl.tooltip}"`);
736
+ if (hl.action) hlAttrs.push(`action="${hl.action}"`);
737
+ if (hl.highlightClick) hlAttrs.push("highlightClick=\"1\"");
738
+ if (hl.endSound) hlAttrs.push("endSnd=\"1\"");
739
+ if (hl.invalidUrl) hlAttrs.push("invalidUrl=\"1\"");
740
+ parts.push(`<a:hlinkClick ${hlAttrs.join(" ")}/>`);
716
741
  }
717
742
  if (opts.rightToLeft !== void 0) parts.push(`<a:rtl val="${opts.rightToLeft ? 1 : 0}"/>`);
718
743
  if (attrStr.length === 0 && parts.length === 0) return "";
@@ -787,6 +812,8 @@ function buildBodyPr(options) {
787
812
  if (options.margins?.right !== void 0) attrs.rIns = options.margins.right;
788
813
  if (options.columns !== void 0) attrs.numCol = options.columns;
789
814
  if (options.columnSpacing !== void 0) attrs.spcCol = options.columnSpacing * 100;
815
+ if (options.marginTop !== void 0) attrs.marT = options.marginTop;
816
+ if (options.marginBottom !== void 0) attrs.marB = options.marginBottom;
790
817
  if (Object.keys(attrs).length > 0) bodyPrContent.push({ _attr: attrs });
791
818
  bodyPrContent.push(...bodyPrChildren);
792
819
  return { "a:bodyPr": bodyPrContent.length === 1 && "_attr" in bodyPrContent[0] ? bodyPrContent[0] : bodyPrContent.length > 0 ? bodyPrContent : {} };
@@ -1075,30 +1102,81 @@ var NotesBodyPlaceholder = class extends XmlComponent {
1075
1102
  //#endregion
1076
1103
  //#region src/file/presentation-properties.ts
1077
1104
  init_xml_components();
1078
- function buildPresPropsXml(showOptions) {
1079
- if (!showOptions) return `<p:presentationPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"/>`;
1105
+ const COLOR_MODE_XSD = {
1106
+ blackWhite: "bw",
1107
+ gray: "gray",
1108
+ color: "clr"
1109
+ };
1110
+ function buildWebPrXml(opts) {
1111
+ const attrs = [];
1112
+ if (opts.showAnimation) attrs.push(" showAnimation=\"1\"");
1113
+ if (opts.resizeGraphics === false) attrs.push(" resizeGraphics=\"0\"");
1114
+ if (opts.allowPng) attrs.push(" allowPng=\"1\"");
1115
+ if (opts.relyOnVml) attrs.push(" relyOnVml=\"1\"");
1116
+ if (opts.organizeInFolders === false) attrs.push(" organizeInFolders=\"0\"");
1117
+ if (opts.useLongFilenames === false) attrs.push(" useLongFilenames=\"0\"");
1118
+ if (opts.imageSize) attrs.push(` imgSz="${opts.imageSize}"`);
1119
+ if (opts.encoding) attrs.push(` encoding="${opts.encoding}"`);
1120
+ if (opts.color) attrs.push(` clr="${opts.color}"`);
1121
+ return `<p:webPr${attrs.join("")}/>`;
1122
+ }
1123
+ function buildPrnPrXml(opts) {
1124
+ const attrs = [];
1125
+ if (opts.printWhat) attrs.push(` prnWhat="${opts.printWhat}"`);
1126
+ if (opts.colorMode) attrs.push(` clrMode="${COLOR_MODE_XSD[opts.colorMode]}"`);
1127
+ if (opts.hiddenSlides) attrs.push(" hiddenSlides=\"1\"");
1128
+ if (opts.scaleToFitPaper) attrs.push(" scaleToFitPaper=\"1\"");
1129
+ if (opts.frameSlides) attrs.push(" frameSlides=\"1\"");
1130
+ return `<p:prnPr${attrs.join("")}/>`;
1131
+ }
1132
+ function buildHtmlPubPrXml(opts) {
1080
1133
  const attrs = [];
1081
- if (showOptions.loop) attrs.push(" loop=\"1\"");
1082
- if (showOptions.showNarration === false) attrs.push(" showNarration=\"0\"");
1083
- if (showOptions.useTimings) attrs.push(" useTimings=\"1\"");
1084
- const showType = showOptions.kiosk ? "<p:kiosk/>" : "<p:present/>";
1085
- return `<p:presentationPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">${`<p:showPr${attrs.join("")}>${showType}</p:showPr>`}</p:presentationPr>`;
1134
+ if (opts.showSpeakerNotes === false) attrs.push(" showSpeakerNotes=\"0\"");
1135
+ if (opts.target) attrs.push(` target="${opts.target}"`);
1136
+ if (opts.title) attrs.push(` title="${opts.title}"`);
1137
+ if (opts.rId) attrs.push(` r:id="${opts.rId}"`);
1138
+ return `<p:htmlPubPr${attrs.join("")}><p:sldAll/></p:htmlPubPr>`;
1139
+ }
1140
+ function buildShowPrXml(showOptions) {
1141
+ const showPrAttrs = [];
1142
+ if (showOptions.loop) showPrAttrs.push(" loop=\"1\"");
1143
+ if (showOptions.showNarration === false) showPrAttrs.push(" showNarration=\"0\"");
1144
+ if (showOptions.showAnimation === false) showPrAttrs.push(" showAnimation=\"0\"");
1145
+ if (showOptions.useTimings) showPrAttrs.push(" useTimings=\"1\"");
1146
+ const showType = showOptions.type ?? "present";
1147
+ let showTypeXml;
1148
+ if (showType === "kiosk") showTypeXml = `<p:kiosk${showOptions.restart !== void 0 ? ` restart="${showOptions.restart}"` : ""}/>`;
1149
+ else if (showType === "browse") showTypeXml = `<p:browse${showOptions.showScrollbar === false ? " showScrollbar=\"0\"" : ""}/>`;
1150
+ else showTypeXml = "<p:present/>";
1151
+ let slideListXml = "<p:sldAll/>";
1152
+ if (showOptions.slideRange) slideListXml = `<p:sldRg st="${showOptions.slideRange.start}" end="${showOptions.slideRange.end}"/>`;
1153
+ let penClrXml = "";
1154
+ if (showOptions.penColor) penClrXml = `<p:penClr><a:srgbClr val="${showOptions.penColor}"/></p:penClr>`;
1155
+ return `<p:showPr${showPrAttrs.join("")}>${showTypeXml}${slideListXml}${penClrXml}</p:showPr>`;
1156
+ }
1157
+ function buildPresPropsXml(opts) {
1158
+ const ns = "xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"";
1159
+ if (!opts) return `<p:presentationPr ${ns}/>`;
1160
+ const children = [];
1161
+ if (opts.htmlPublish) children.push(buildHtmlPubPrXml(opts.htmlPublish));
1162
+ if (opts.web) children.push(buildWebPrXml(opts.web));
1163
+ if (opts.print) children.push(buildPrnPrXml(opts.print));
1164
+ if (opts.show) children.push(buildShowPrXml(opts.show));
1165
+ if (children.length === 0) return `<p:presentationPr ${ns}/>`;
1166
+ return `<p:presentationPr ${ns}>${children.join("")}</p:presentationPr>`;
1086
1167
  }
1087
1168
  var PresentationProperties = class PresentationProperties extends ImportedXmlComponent {
1088
1169
  static cache = /* @__PURE__ */ new Map();
1089
1170
  key;
1090
- constructor(showOptions) {
1171
+ constructor(opts) {
1091
1172
  super("p:presentationPr");
1092
- this.key = showOptions ? presPropsKey(showOptions) : "";
1093
- if (!PresentationProperties.cache.has(this.key)) PresentationProperties.cache.set(this.key, ImportedXmlComponent.fromXmlString(buildPresPropsXml(showOptions)));
1173
+ this.key = opts ? JSON.stringify(opts) : "";
1174
+ if (!PresentationProperties.cache.has(this.key)) PresentationProperties.cache.set(this.key, ImportedXmlComponent.fromXmlString(buildPresPropsXml(opts)));
1094
1175
  }
1095
1176
  toXml(context) {
1096
1177
  return PresentationProperties.cache.get(this.key).toXml(context);
1097
1178
  }
1098
1179
  };
1099
- function presPropsKey(o) {
1100
- return `l${o.loop ? 1 : 0}k${o.kiosk ? 1 : 0}n${o.showNarration ? 1 : 0}t${o.useTimings ? 1 : 0}`;
1101
- }
1102
1180
  //#endregion
1103
1181
  //#region src/file/presentation/presentation.ts
1104
1182
  init_xml_components();
@@ -1148,22 +1226,78 @@ var Presentation = class extends XmlComponent {
1148
1226
  notesMasterRId: rId
1149
1227
  };
1150
1228
  }
1229
+ setHandoutMasterRId(rId) {
1230
+ this.options = {
1231
+ ...this.options,
1232
+ handoutMasterRId: rId
1233
+ };
1234
+ }
1151
1235
  toXml(_context) {
1152
1236
  const opts = this.options;
1153
1237
  const cx = opts.slideWidth ?? 12192e3;
1154
1238
  const cy = opts.slideHeight ?? 6858e3;
1155
- let s = `<p:presentation xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">`;
1239
+ const rootAttrs = [];
1240
+ if (opts.serverZoom) rootAttrs.push(` serverZoom="${opts.serverZoom}"`);
1241
+ if (opts.firstSlideNum !== void 0) rootAttrs.push(` firstSlideNum="${opts.firstSlideNum}"`);
1242
+ if (opts.showSpecialPlsOnTitleSld === false) rootAttrs.push(" showSpecialPlsOnTitleSld=\"0\"");
1243
+ if (opts.rtl) rootAttrs.push(" rtl=\"1\"");
1244
+ if (opts.removePersonalInfoOnSave) rootAttrs.push(" removePersonalInfoOnSave=\"1\"");
1245
+ if (opts.compatMode) rootAttrs.push(" compatMode=\"1\"");
1246
+ if (opts.strictFirstAndLastChars === false) rootAttrs.push(" strictFirstAndLastChars=\"0\"");
1247
+ if (opts.embedTrueTypeFonts) rootAttrs.push(" embedTrueTypeFonts=\"1\"");
1248
+ if (opts.saveSubsetFonts) rootAttrs.push(" saveSubsetFonts=\"1\"");
1249
+ if (opts.autoCompressPictures === false) rootAttrs.push(" autoCompressPictures=\"0\"");
1250
+ if (opts.bookmarkIdSeed !== void 0) rootAttrs.push(` bookmarkIdSeed="${opts.bookmarkIdSeed}"`);
1251
+ if (opts.conformance) rootAttrs.push(` conformance="${opts.conformance}"`);
1252
+ let s = `<p:presentation xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"${rootAttrs.join("")}>`;
1156
1253
  s += "<p:sldMasterIdLst>";
1157
1254
  for (let mi = 0; mi < opts.masterCount; mi++) s += `<p:sldMasterId id="${2147483648 + mi * 12}" r:id="rId${mi + 1}"/>`;
1158
1255
  s += "</p:sldMasterIdLst>";
1159
1256
  if (opts.notesMasterRId) s += `<p:notesMasterIdLst><p:notesMasterId r:id="rId${opts.notesMasterRId}"/></p:notesMasterIdLst>`;
1257
+ if (opts.handoutMasterRId) s += `<p:handoutMasterIdLst><p:handoutMasterId r:id="rId${opts.handoutMasterRId}"/></p:handoutMasterIdLst>`;
1160
1258
  s += "<p:sldIdLst>";
1161
1259
  const sRidOff = opts.masterCount + 1;
1162
1260
  for (let i = 0; i < opts.slideIds.length; i++) s += `<p:sldId id="${opts.slideIds[i]}" r:id="rId${sRidOff + i}"/>`;
1163
1261
  s += "</p:sldIdLst>";
1164
1262
  s += `<p:sldSz cx="${cx}" cy="${cy}"/>`;
1165
1263
  s += "<p:notesSz cx=\"6858000\" cy=\"9144000\"/>";
1264
+ if (opts.photoAlbum) {
1265
+ const pa = opts.photoAlbum;
1266
+ const paAttrs = [];
1267
+ if (pa.blackWhite) paAttrs.push(" bw=\"1\"");
1268
+ if (pa.showCaptions) paAttrs.push(" showCaptions=\"1\"");
1269
+ if (pa.layout) paAttrs.push(` layout="${pa.layout}"`);
1270
+ if (pa.frame) paAttrs.push(` frame="${pa.frame}"`);
1271
+ s += `<p:photoAlbum${paAttrs.join("")}/>`;
1272
+ }
1166
1273
  s += DEFAULT_TEXT_STYLE_XML;
1274
+ if (opts.modifyVerifier) {
1275
+ const mv = opts.modifyVerifier;
1276
+ let derived;
1277
+ if (mv.password !== void 0 && mv.hashValue === void 0) derived = derivePasswordHash(mv.password);
1278
+ const hashValue = mv.hashValue ?? derived?.hashValue;
1279
+ const saltValue = mv.saltValue ?? derived?.saltValue;
1280
+ const spinCount = mv.spinCount ?? derived?.spinCount;
1281
+ const algorithmName = mv.algorithmName ?? derived?.algorithmName;
1282
+ const mvAttrs = [];
1283
+ if (algorithmName) mvAttrs.push(` algorithmName="${algorithmName}"`);
1284
+ if (hashValue) mvAttrs.push(` hashValue="${hashValue}"`);
1285
+ if (saltValue) mvAttrs.push(` saltValue="${saltValue}"`);
1286
+ if (mv.spinValue !== void 0) mvAttrs.push(` spinValue="${mv.spinValue}"`);
1287
+ if (mv.cryptoProviderType) mvAttrs.push(` cryptProviderType="${mv.cryptoProviderType}"`);
1288
+ if (mv.cryptoAlgorithmClass) mvAttrs.push(` cryptAlgorithmClass="${mv.cryptoAlgorithmClass}"`);
1289
+ if (mv.cryptoAlgorithmType) mvAttrs.push(` cryptAlgorithmType="${mv.cryptoAlgorithmType}"`);
1290
+ if (mv.cryptoAlgorithmSid !== void 0) mvAttrs.push(` cryptAlgorithmSid="${mv.cryptoAlgorithmSid}"`);
1291
+ if (spinCount !== void 0) mvAttrs.push(` spinCount="${spinCount}"`);
1292
+ if (mv.saltData) mvAttrs.push(` saltData="${mv.saltData}"`);
1293
+ if (mv.hashData) mvAttrs.push(` hashData="${mv.hashData}"`);
1294
+ if (mv.cryptoProvider) mvAttrs.push(` cryptProvider="${mv.cryptoProvider}"`);
1295
+ if (mv.algorithmExtensionId !== void 0) mvAttrs.push(` algIdExt="${mv.algorithmExtensionId}"`);
1296
+ if (mv.algorithmExtensionSource) mvAttrs.push(` algIdExtSource="${mv.algorithmExtensionSource}"`);
1297
+ if (mv.cryptoProviderTypeExtension !== void 0) mvAttrs.push(` cryptProviderTypeExt="${mv.cryptoProviderTypeExtension}"`);
1298
+ if (mv.cryptoProviderTypeExtensionSource) mvAttrs.push(` cryptProviderTypeExtSource="${mv.cryptoProviderTypeExtensionSource}"`);
1299
+ s += `<p:modifyVerifier${mvAttrs.join("")}/>`;
1300
+ }
1167
1301
  s += "</p:presentation>";
1168
1302
  return s;
1169
1303
  }
@@ -1592,6 +1726,136 @@ var VideoFrame = class VideoFrame extends MediaFrameBase {
1592
1726
  }
1593
1727
  };
1594
1728
  //#endregion
1729
+ //#region src/file/ole/ole-frame.ts
1730
+ /**
1731
+ * OLE Object frame for PresentationML — p:graphicFrame with p:oleObj.
1732
+ *
1733
+ * Embeds an OLE object (e.g., Excel worksheet, Word document) on a slide.
1734
+ *
1735
+ * Reference: OOXML transitional, pml.xsd, CT_OleObject
1736
+ *
1737
+ * @module
1738
+ */
1739
+ init_xml_components();
1740
+ let nextOleId = 2048;
1741
+ /**
1742
+ * p:graphicFrame — Slide-level graphic frame wrapping an OLE object.
1743
+ *
1744
+ * Produces the AlternateContent wrapper needed by PowerPoint to render OLE objects.
1745
+ */
1746
+ var OleFrame = class extends XmlComponent {
1747
+ options;
1748
+ constructor(options) {
1749
+ super("p:graphicFrame");
1750
+ this.options = options;
1751
+ const id = nextOleId++;
1752
+ const name = options.name ?? `Object ${id}`;
1753
+ this.root.push(new OleGraphicFrameNonVisual(id, name));
1754
+ this.root.push(new Transform2D({ ...emuPosition(options) }, "p"));
1755
+ this.root.push(new OleGraphic(options));
1756
+ }
1757
+ toXml(context) {
1758
+ const file = context.fileData;
1759
+ if (file?.oleObjects) file.oleObjects.push({
1760
+ key: `ole_${this.options.spid ?? "1"}`,
1761
+ rId: this.options.embed?.rId ?? this.options.link?.rId ?? "",
1762
+ progId: this.options.progId
1763
+ });
1764
+ return super.toXml(context);
1765
+ }
1766
+ };
1767
+ var OleGraphicFrameNonVisual = class extends XmlComponent {
1768
+ constructor(id, name) {
1769
+ super("p:nvGraphicFramePr");
1770
+ this.root.push(new BuilderElement({
1771
+ name: "p:cNvPr",
1772
+ attributes: {
1773
+ id: {
1774
+ key: "id",
1775
+ value: id
1776
+ },
1777
+ name: {
1778
+ key: "name",
1779
+ value: name
1780
+ }
1781
+ }
1782
+ }));
1783
+ this.root.push(new BuilderElement({
1784
+ name: "p:cNvGraphicFramePr",
1785
+ children: [new BuilderElement({
1786
+ name: "a:graphicFrameLocks",
1787
+ attributes: { noGrp: {
1788
+ key: "noGrp",
1789
+ value: 1
1790
+ } }
1791
+ })]
1792
+ }));
1793
+ this.root.push(new BuilderElement({ name: "p:nvPr" }));
1794
+ }
1795
+ };
1796
+ var OleGraphic = class extends XmlComponent {
1797
+ constructor(options) {
1798
+ super("a:graphic");
1799
+ this.root.push(new OleGraphicData(options));
1800
+ }
1801
+ };
1802
+ var OleGraphicData = class extends XmlComponent {
1803
+ constructor(options) {
1804
+ super("a:graphicData");
1805
+ this.root.push(buildAttrObject({ uri: "http://schemas.openxmlformats.org/presentationml/2006/ole" }));
1806
+ this.root.push(new OleObjectElement(options));
1807
+ }
1808
+ };
1809
+ var OleObjectElement = class extends XmlComponent {
1810
+ constructor(options) {
1811
+ super("p:oleObj");
1812
+ const attrs = { name: options.name ?? "OLE Object" };
1813
+ if (options.spid) attrs.spid = options.spid;
1814
+ if (options.showAsIcon) attrs.showAsIcon = 1;
1815
+ if (options.imgW) attrs.imgW = options.imgW;
1816
+ if (options.imgH) attrs.imgH = options.imgH;
1817
+ if (options.progId) attrs.progId = options.progId;
1818
+ if (options.followColorScheme) attrs.followColorScheme = options.followColorScheme;
1819
+ const rId = options.embed?.rId ?? options.link?.rId;
1820
+ if (rId) attrs["r:id"] = rId;
1821
+ this.root.push(buildAttrObject(attrs));
1822
+ if (options.embed) this.root.push(new BuilderElement({ name: "p:embed" }));
1823
+ else if (options.link) this.root.push(new BuilderElement({
1824
+ name: "p:link",
1825
+ attributes: options.link.autoUpdate ? { updateAutomatic: {
1826
+ key: "updateAutomatic",
1827
+ value: 1
1828
+ } } : void 0
1829
+ }));
1830
+ if (options.imgRId) this.root.push(new OlePic(options));
1831
+ }
1832
+ };
1833
+ var OlePic = class extends XmlComponent {
1834
+ constructor(options) {
1835
+ super("p:pic");
1836
+ this.root.push(new BuilderElement({
1837
+ name: "p:nvPicPr",
1838
+ children: [
1839
+ new BuilderElement({
1840
+ name: "p:cNvPr",
1841
+ attributes: {
1842
+ id: {
1843
+ key: "id",
1844
+ value: 2
1845
+ },
1846
+ name: {
1847
+ key: "name",
1848
+ value: options.name ?? "OLE Preview"
1849
+ }
1850
+ }
1851
+ }),
1852
+ new BuilderElement({ name: "p:cNvPicPr" }),
1853
+ new BuilderElement({ name: "p:nvPr" })
1854
+ ]
1855
+ }));
1856
+ }
1857
+ };
1858
+ //#endregion
1595
1859
  //#region src/file/drawingml/blip-fill.ts
1596
1860
  init_xml_components();
1597
1861
  /**
@@ -2062,9 +2326,20 @@ var Shape = class Shape extends XmlComponent {
2062
2326
  if (opts.placeholder) {
2063
2327
  const phAttrs = [`type="${opts.placeholder}"`];
2064
2328
  if (opts.placeholderIndex !== void 0) phAttrs.push(`idx="${opts.placeholderIndex}"`);
2329
+ if (opts.hasCustomPrompt) phAttrs.push("hasCustomPrompt=\"1\"");
2065
2330
  nvPrContent = `<p:nvPr><p:ph ${phAttrs.join(" ")}/></p:nvPr>`;
2331
+ } else if (opts.isPhoto || opts.userDrawn) {
2332
+ const nvPrAttrs = [];
2333
+ if (opts.isPhoto) nvPrAttrs.push("isPhoto=\"1\"");
2334
+ if (opts.userDrawn) nvPrAttrs.push("userDrawn=\"1\"");
2335
+ nvPrContent = `<p:nvPr ${nvPrAttrs.join(" ")}/>`;
2336
+ }
2337
+ let cNvSpPrContent = "<p:cNvSpPr/>";
2338
+ if (opts.locking) {
2339
+ const lockAttrs = buildLockAttrs(opts.locking);
2340
+ if (lockAttrs.length > 0) cNvSpPrContent = `<p:cNvSpPr><a:spLocks ${lockAttrs.join(" ")}/></p:cNvSpPr>`;
2066
2341
  }
2067
- parts.push(`<p:nvSpPr><p:cNvPr id="${id}" name="${escapeXml(name)}"/><p:cNvSpPr/>${nvPrContent}</p:nvSpPr>`);
2342
+ parts.push(`<p:nvSpPr><p:cNvPr id="${id}" name="${escapeXml(name)}"/>${cNvSpPrContent}${nvPrContent}</p:nvSpPr>`);
2068
2343
  const spPrXml = new ShapeProperties({
2069
2344
  ...emuPositionOptional(opts),
2070
2345
  geometry: opts.geometry,
@@ -2077,9 +2352,33 @@ var Shape = class Shape extends XmlComponent {
2077
2352
  if (spPrXml) parts.push(spPrXml);
2078
2353
  const txBody = new TextBody(opts.textBody ?? {});
2079
2354
  parts.push(txBody.toXml(context));
2080
- return `<p:sp>${parts.join("")}</p:sp>`;
2355
+ const spAttrs = [];
2356
+ if (opts.useBackgroundFill) spAttrs.push(" useBgFill=\"1\"");
2357
+ if (opts.blackWhiteMode) spAttrs.push(` bwMode="${opts.blackWhiteMode}"`);
2358
+ return `<p:sp${spAttrs.join("")}>${parts.join("")}</p:sp>`;
2081
2359
  }
2082
2360
  };
2361
+ /** Build locking attribute string[] from ShapeLockingOptions. */
2362
+ function buildLockAttrs(opts) {
2363
+ const attrs = [];
2364
+ for (const key of [
2365
+ "noGrp",
2366
+ "noSelect",
2367
+ "noRot",
2368
+ "noChangeAspect",
2369
+ "noMove",
2370
+ "noResize",
2371
+ "noEditPoints",
2372
+ "noAdjustHandles",
2373
+ "noChangeArrowheads",
2374
+ "noChangeShapeType",
2375
+ "noTextEdit"
2376
+ ]) {
2377
+ const val = opts[key];
2378
+ if (val !== void 0) attrs.push(`${key}="${val ? 1 : 0}"`);
2379
+ }
2380
+ return attrs;
2381
+ }
2083
2382
  //#endregion
2084
2383
  //#region src/file/smartart/smartart-frame.ts
2085
2384
  init_xml_components();
@@ -2271,7 +2570,9 @@ var TableProperties = class extends BaseXmlComponent {
2271
2570
  if (opts.firstCol !== void 0) attrs.push(`firstCol="${opts.firstCol ? 1 : 0}"`);
2272
2571
  if (opts.lastCol !== void 0) attrs.push(`lastCol="${opts.lastCol ? 1 : 0}"`);
2273
2572
  if (opts.bandCol !== void 0) attrs.push(`bandCol="${opts.bandCol ? 1 : 0}"`);
2274
- return attrs.length === 0 ? "<a:tblPr/>" : `<a:tblPr ${attrs.join(" ")}/>`;
2573
+ if (attrs.length === 0 && !opts.tableStyleId) return "<a:tblPr/>";
2574
+ const styleId = opts.tableStyleId ? `<a:tableStyleId>${opts.tableStyleId}</a:tableStyleId>` : "";
2575
+ return `<a:tblPr ${attrs.join(" ")}>${styleId}</a:tblPr>`;
2275
2576
  }
2276
2577
  };
2277
2578
  //#endregion
@@ -2345,6 +2646,8 @@ var TableCell = class extends BaseXmlComponent {
2345
2646
  const tcAttrs = [];
2346
2647
  if (opts.columnSpan !== void 0 && opts.columnSpan > 1) tcAttrs.push(`gridSpan="${opts.columnSpan}"`);
2347
2648
  if (opts.rowSpan !== void 0 && opts.rowSpan > 1) tcAttrs.push(`rowSpan="${opts.rowSpan}"`);
2649
+ if (opts.horizontalMerge) tcAttrs.push(`hMerge="${opts.horizontalMerge === "restart" ? "1" : "0"}"`);
2650
+ if (opts.verticalMerge) tcAttrs.push(`vMerge="${opts.verticalMerge === "restart" ? "1" : "0"}"`);
2348
2651
  const tcAttrStr = tcAttrs.length > 0 ? ` ${tcAttrs.join(" ")}` : "";
2349
2652
  const txParts = [];
2350
2653
  const margins = opts.margins;
@@ -2410,7 +2713,8 @@ var DrawingTable = class extends BaseXmlComponent {
2410
2713
  bandRow: opts.bandRow,
2411
2714
  firstCol: opts.firstCol,
2412
2715
  lastCol: opts.lastCol,
2413
- bandCol: opts.bandCol
2716
+ bandCol: opts.bandCol,
2717
+ tableStyleId: opts.tableStyleId
2414
2718
  });
2415
2719
  parts.push(tblPr.toXml(context));
2416
2720
  const colWidths = opts.columnWidths && opts.columnWidths.length > 0 ? opts.columnWidths : Array.from({ length: opts.rows[0]?.cells.length ?? 1 }, () => 0);
@@ -2482,6 +2786,7 @@ function coerceChild(child) {
2482
2786
  if ("audio" in child) return new AudioFrame(child.audio);
2483
2787
  if ("group" in child) return new GroupShape(child.group);
2484
2788
  if ("smartart" in child) return new SmartArt(child.smartart);
2789
+ if ("ole" in child) return new OleFrame(child.ole);
2485
2790
  throw new Error("Unknown slide child type");
2486
2791
  }
2487
2792
  function coerceMasterChild(child) {
@@ -2689,7 +2994,7 @@ function buildCustomLayoutXml(def) {
2689
2994
  const offset = nextId - 1;
2690
2995
  shapes.push(childrenXml.replace(/ id="(\d+)"/g, (_, n) => ` id="${parseInt(n) + offset}"`));
2691
2996
  }
2692
- return `<p:sldLayout ${NS} type="${layoutType}" preserve="1"><p:cSld name="${displayName}"><p:spTree>${SP_TREE_HEADER}${shapes.join("")}</p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`;
2997
+ return `<p:sldLayout ${NS} type="${layoutType}" preserve="1"${def.matchingName !== void 0 ? ` matchingName="${def.matchingName}"` : ""}><p:cSld name="${displayName}"><p:spTree>${SP_TREE_HEADER}${shapes.join("")}</p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sldLayout>`;
2693
2998
  }
2694
2999
  var SlideLayout = class SlideLayout extends ImportedXmlComponent {
2695
3000
  static cache = /* @__PURE__ */ new Map();
@@ -3100,19 +3405,23 @@ function buildEntrOrExitEffects(options, spid, ids) {
3100
3405
  if (options.type === "wheel") filter = "wheel(4)";
3101
3406
  else if (options.type === "split") filter = `split(${options.direction ?? "horizontal"})`;
3102
3407
  else if (dirFilter) filter = `${filterBase}(${dirFilter})`;
3103
- const transition = cls === "exit" ? "out" : "in";
3408
+ const animEffectAttrs = {
3409
+ transition: {
3410
+ key: "transition",
3411
+ value: cls === "exit" ? "out" : "in"
3412
+ },
3413
+ filter: {
3414
+ key: "filter",
3415
+ value: filter
3416
+ }
3417
+ };
3418
+ if (options.propertyList) animEffectAttrs.prLst = {
3419
+ key: "prLst",
3420
+ value: options.propertyList
3421
+ };
3104
3422
  children.push(new BuilderElement({
3105
3423
  name: "p:animEffect",
3106
- attributes: {
3107
- transition: {
3108
- key: "transition",
3109
- value: transition
3110
- },
3111
- filter: {
3112
- key: "filter",
3113
- value: filter
3114
- }
3115
- },
3424
+ attributes: animEffectAttrs,
3116
3425
  children: [new BuilderElement({
3117
3426
  name: "p:cBhvr",
3118
3427
  children: [new BuilderElement({
@@ -3388,18 +3697,23 @@ function buildEmphasisEffects(options, spid, ids) {
3388
3697
  function buildPathEffects(options, spid, ids) {
3389
3698
  const pathStr = options.path ?? PATH_STRINGS[options.pathType ?? "customPath"] ?? "";
3390
3699
  const dur = String(options.duration ?? 1e3);
3700
+ const animMotionAttrs = {
3701
+ origin: {
3702
+ key: "origin",
3703
+ value: "layout"
3704
+ },
3705
+ path: {
3706
+ key: "path",
3707
+ value: pathStr
3708
+ }
3709
+ };
3710
+ if (options.pointsTypes) animMotionAttrs.ptsTypes = {
3711
+ key: "ptsTypes",
3712
+ value: options.pointsTypes
3713
+ };
3391
3714
  return [new BuilderElement({
3392
3715
  name: "p:animMotion",
3393
- attributes: {
3394
- origin: {
3395
- key: "origin",
3396
- value: "layout"
3397
- },
3398
- path: {
3399
- key: "path",
3400
- value: pathStr
3401
- }
3402
- },
3716
+ attributes: animMotionAttrs,
3403
3717
  children: [new BuilderElement({
3404
3718
  name: "p:cBhvr",
3405
3719
  children: [new BuilderElement({
@@ -3472,6 +3786,128 @@ function buildMediaPlayCommand(options, spid, ids) {
3472
3786
  });
3473
3787
  }
3474
3788
  /**
3789
+ * Build generic p:cmd with configurable type (call/evt/verb).
3790
+ */
3791
+ function buildCommand(options, spid, ids) {
3792
+ const cmdType = options.commandType ?? "call";
3793
+ const cmdStr = options.command ?? "";
3794
+ return new BuilderElement({
3795
+ name: "p:cmd",
3796
+ attributes: {
3797
+ type: {
3798
+ key: "type",
3799
+ value: cmdType
3800
+ },
3801
+ cmd: {
3802
+ key: "cmd",
3803
+ value: cmdStr
3804
+ }
3805
+ },
3806
+ children: [new BuilderElement({
3807
+ name: "p:cBhvr",
3808
+ children: [new BuilderElement({
3809
+ name: "p:cTn",
3810
+ attributes: {
3811
+ id: {
3812
+ key: "id",
3813
+ value: ids.cmd
3814
+ },
3815
+ dur: {
3816
+ key: "dur",
3817
+ value: String(options.duration ?? 1e3)
3818
+ },
3819
+ fill: {
3820
+ key: "fill",
3821
+ value: "hold"
3822
+ }
3823
+ }
3824
+ }), buildTargetElement(spid)]
3825
+ })]
3826
+ });
3827
+ }
3828
+ /**
3829
+ * Build p:set for an instant property change (setBehavior).
3830
+ */
3831
+ function buildSetBehavior(setOptions, spid, ids) {
3832
+ const toValName = setOptions.toType === "number" ? "p:numVal" : "p:strVal";
3833
+ return new BuilderElement({
3834
+ name: "p:set",
3835
+ children: [new BuilderElement({
3836
+ name: "p:cBhvr",
3837
+ children: [
3838
+ new BuilderElement({
3839
+ name: "p:cTn",
3840
+ attributes: {
3841
+ id: {
3842
+ key: "id",
3843
+ value: ids.set
3844
+ },
3845
+ dur: {
3846
+ key: "dur",
3847
+ value: "1"
3848
+ },
3849
+ fill: {
3850
+ key: "fill",
3851
+ value: "hold"
3852
+ }
3853
+ },
3854
+ children: [new BuilderElement({
3855
+ name: "p:stCondLst",
3856
+ children: [new BuilderElement({
3857
+ name: "p:cond",
3858
+ attributes: { delay: {
3859
+ key: "delay",
3860
+ value: "0"
3861
+ } }
3862
+ })]
3863
+ })]
3864
+ }),
3865
+ buildTargetElement(spid),
3866
+ new BuilderElement({
3867
+ name: "p:attrNameLst",
3868
+ children: [stringContainerObj("p:attrName", setOptions.attributeName)]
3869
+ })
3870
+ ]
3871
+ }), new BuilderElement({
3872
+ name: "p:to",
3873
+ children: [new BuilderElement({
3874
+ name: toValName,
3875
+ attributes: { val: {
3876
+ key: "val",
3877
+ value: setOptions.toValue
3878
+ } }
3879
+ })]
3880
+ })]
3881
+ });
3882
+ }
3883
+ /**
3884
+ * Build p:iterate for text-level animation iteration.
3885
+ */
3886
+ function buildIterate(iterate) {
3887
+ const attrs = {};
3888
+ if (iterate.type) attrs.type = {
3889
+ key: "type",
3890
+ value: iterate.type
3891
+ };
3892
+ if (iterate.backwards) attrs.backwards = {
3893
+ key: "backwards",
3894
+ value: 1
3895
+ };
3896
+ const iterChildren = [];
3897
+ if (iterate.interval !== void 0) iterChildren.push(new BuilderElement({
3898
+ name: "p:tmAbs",
3899
+ attributes: { val: {
3900
+ key: "val",
3901
+ value: iterate.interval
3902
+ } }
3903
+ }));
3904
+ return new BuilderElement({
3905
+ name: "p:iterate",
3906
+ attributes: Object.keys(attrs).length > 0 ? attrs : void 0,
3907
+ children: iterChildren.length > 0 ? iterChildren : void 0
3908
+ });
3909
+ }
3910
+ /**
3475
3911
  * Build p:video/p:audio with p:cMediaNode (goes as sibling of p:seq).
3476
3912
  * This is the media state controller, separate from the play command.
3477
3913
  */
@@ -3500,6 +3936,10 @@ function buildMediaStateNode(options, spid, ids) {
3500
3936
  key: "mute",
3501
3937
  value: 1
3502
3938
  };
3939
+ if (options.numberOfSlides !== void 0) cMediaNodeAttrs.numSld = {
3940
+ key: "numSld",
3941
+ value: options.numberOfSlides
3942
+ };
3503
3943
  return new BuilderElement({
3504
3944
  name: elementName,
3505
3945
  attributes: Object.keys(mediaAttrs).length > 0 ? mediaAttrs : void 0,
@@ -3558,6 +3998,18 @@ function buildPropertyAnimation(options, spid, ids) {
3558
3998
  key: "by",
3559
3999
  value: options.animBy
3560
4000
  };
4001
+ if (options.formula !== void 0) attrs.fmla = {
4002
+ key: "fmla",
4003
+ value: options.formula
4004
+ };
4005
+ if (options.colorSpace !== void 0) attrs.clrSpc = {
4006
+ key: "clrSpc",
4007
+ value: options.colorSpace
4008
+ };
4009
+ if (options.rotationAngle !== void 0) attrs.rAng = {
4010
+ key: "rAng",
4011
+ value: String(options.rotationAngle)
4012
+ };
3561
4013
  const cBhvrChildren = [new BuilderElement({
3562
4014
  name: "p:cTn",
3563
4015
  attributes: {
@@ -3579,8 +4031,30 @@ function buildPropertyAnimation(options, spid, ids) {
3579
4031
  name: "p:attrNameLst",
3580
4032
  children: [stringContainerObj("p:attrName", options.attributeName)]
3581
4033
  }));
4034
+ const cBhvrAttrs = {};
4035
+ if (options.additive !== void 0) cBhvrAttrs.additive = {
4036
+ key: "additive",
4037
+ value: options.additive
4038
+ };
4039
+ if (options.accumulate !== void 0) cBhvrAttrs.accumulate = {
4040
+ key: "accumulate",
4041
+ value: options.accumulate
4042
+ };
4043
+ if (options.transformType !== void 0) cBhvrAttrs.xfrmType = {
4044
+ key: "xfrmType",
4045
+ value: options.transformType
4046
+ };
4047
+ if (options.runtimeContext !== void 0) cBhvrAttrs.rctx = {
4048
+ key: "rctx",
4049
+ value: options.runtimeContext
4050
+ };
4051
+ if (options.override !== void 0) cBhvrAttrs.override = {
4052
+ key: "override",
4053
+ value: options.override
4054
+ };
3582
4055
  const animChildren = [new BuilderElement({
3583
4056
  name: "p:cBhvr",
4057
+ attributes: Object.keys(cBhvrAttrs).length > 0 ? cBhvrAttrs : void 0,
3584
4058
  children: cBhvrChildren
3585
4059
  })];
3586
4060
  if (options.from !== void 0 || options.to !== void 0) {
@@ -3656,7 +4130,8 @@ var SlideTiming = class extends XmlComponent {
3656
4130
  const presetClass = resolvePresetClass(options);
3657
4131
  const presetSubtype = resolvePresetSubtype(options);
3658
4132
  let effectChildren;
3659
- if (options.mediaType) {
4133
+ if (options.commandType) effectChildren = [buildCommand(options, spid, { cmd: effectCtnId2 })];
4134
+ else if (options.mediaType) {
3660
4135
  effectChildren = [buildMediaPlayCommand(options, spid, { cmd: effectCtnId2 })];
3661
4136
  const mediaStateId = id++;
3662
4137
  mediaStateNodes.push(buildMediaStateNode(options, spid, { mediaCtn: mediaStateId }));
@@ -3673,6 +4148,10 @@ var SlideTiming = class extends XmlComponent {
3673
4148
  set: setCtnId,
3674
4149
  effect: effectCtnId2
3675
4150
  });
4151
+ if (options.setBehavior) {
4152
+ const setBehId = id++;
4153
+ effectChildren = [buildSetBehavior(options.setBehavior, spid, { set: setBehId }), ...effectChildren];
4154
+ }
3676
4155
  const cTnAttrs = {
3677
4156
  id: {
3678
4157
  key: "id",
@@ -3727,24 +4206,91 @@ var SlideTiming = class extends XmlComponent {
3727
4206
  key: "autoRev",
3728
4207
  value: 1
3729
4208
  };
4209
+ if (options.repeatDuration !== void 0) cTnAttrs.repeatDur = {
4210
+ key: "repeatDur",
4211
+ value: options.repeatDuration
4212
+ };
4213
+ if (options.acceleration !== void 0) cTnAttrs.accel = {
4214
+ key: "accel",
4215
+ value: options.acceleration
4216
+ };
4217
+ if (options.deceleration !== void 0) cTnAttrs.decel = {
4218
+ key: "decel",
4219
+ value: options.deceleration
4220
+ };
4221
+ if (options.restart !== void 0) cTnAttrs.restart = {
4222
+ key: "restart",
4223
+ value: options.restart
4224
+ };
4225
+ if (options.syncBehavior !== void 0) cTnAttrs.syncBehavior = {
4226
+ key: "syncBehavior",
4227
+ value: options.syncBehavior
4228
+ };
4229
+ if (options.timeFilter !== void 0) cTnAttrs.tmFilter = {
4230
+ key: "tmFilter",
4231
+ value: options.timeFilter
4232
+ };
4233
+ if (options.eventFilter !== void 0) cTnAttrs.evtFilter = {
4234
+ key: "evtFilter",
4235
+ value: options.eventFilter
4236
+ };
4237
+ if (options.display !== void 0) cTnAttrs.display = {
4238
+ key: "display",
4239
+ value: options.display ? 1 : 0
4240
+ };
4241
+ if (options.masterRelation !== void 0) cTnAttrs.masterRel = {
4242
+ key: "masterRel",
4243
+ value: options.masterRelation
4244
+ };
4245
+ if (options.buildLevel !== void 0) cTnAttrs.bldLvl = {
4246
+ key: "bldLvl",
4247
+ value: options.buildLevel
4248
+ };
4249
+ if (options.groupId !== void 0) cTnAttrs.grpId = {
4250
+ key: "grpId",
4251
+ value: options.groupId
4252
+ };
4253
+ if (options.afterEffect !== void 0) cTnAttrs.afterEffect = {
4254
+ key: "afterEffect",
4255
+ value: options.afterEffect ? 1 : 0
4256
+ };
4257
+ if (options.nodePlaceholder !== void 0) cTnAttrs.nodePh = {
4258
+ key: "nodePh",
4259
+ value: options.nodePlaceholder ? 1 : 0
4260
+ };
4261
+ if (options.advanceAfterTime !== void 0) cTnAttrs.advAuto = {
4262
+ key: "advAuto",
4263
+ value: options.advanceAfterTime
4264
+ };
4265
+ if (options.animateBackground !== void 0) cTnAttrs.animBg = {
4266
+ key: "animBg",
4267
+ value: options.animateBackground ? 1 : 0
4268
+ };
4269
+ if (options.autoUpdateAnimationBackground !== void 0) cTnAttrs.autoUpdateAnimBg = {
4270
+ key: "autoUpdateAnimBg",
4271
+ value: options.autoUpdateAnimationBackground ? 1 : 0
4272
+ };
4273
+ const effectCtnChildren = [new BuilderElement({
4274
+ name: "p:stCondLst",
4275
+ children: [new BuilderElement({
4276
+ name: "p:cond",
4277
+ attributes: { delay: {
4278
+ key: "delay",
4279
+ value: String(options.delay ?? 0)
4280
+ } }
4281
+ })]
4282
+ })];
4283
+ if (options.iterate) effectCtnChildren.push(buildIterate(options.iterate));
4284
+ effectCtnChildren.push(new BuilderElement({
4285
+ name: "p:childTnLst",
4286
+ children: effectChildren
4287
+ }));
3730
4288
  const innerPar = new BuilderElement({
3731
4289
  name: "p:par",
3732
4290
  children: [new BuilderElement({
3733
4291
  name: "p:cTn",
3734
4292
  attributes: cTnAttrs,
3735
- children: [new BuilderElement({
3736
- name: "p:stCondLst",
3737
- children: [new BuilderElement({
3738
- name: "p:cond",
3739
- attributes: { delay: {
3740
- key: "delay",
3741
- value: String(options.delay ?? 0)
3742
- } }
3743
- })]
3744
- }), new BuilderElement({
3745
- name: "p:childTnLst",
3746
- children: effectChildren
3747
- })]
4293
+ children: effectCtnChildren
3748
4294
  })]
3749
4295
  });
3750
4296
  const outerPar = new BuilderElement({
@@ -3977,16 +4523,23 @@ var Slide = class extends XmlComponent {
3977
4523
  background;
3978
4524
  transition;
3979
4525
  HeaderFooter;
3980
- constructor(children, background, transition, headerFooter) {
4526
+ showMasterSp;
4527
+ showMasterPhAnim;
4528
+ constructor(children, background, transition, headerFooter, showMasterSp, showMasterPhAnim) {
3981
4529
  super("p:sld");
3982
4530
  this.children = children;
3983
4531
  this.background = background;
3984
4532
  this.transition = transition;
3985
4533
  this.HeaderFooter = headerFooter;
4534
+ this.showMasterSp = showMasterSp;
4535
+ this.showMasterPhAnim = showMasterPhAnim;
3986
4536
  }
3987
4537
  toXml(context) {
3988
4538
  const parts = [];
3989
- parts.push("<p:sld xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">");
4539
+ const sldAttrs = [];
4540
+ if (this.showMasterSp === false) sldAttrs.push(" showMasterSp=\"0\"");
4541
+ if (this.showMasterPhAnim === false) sldAttrs.push(" showMasterPhAnim=\"0\"");
4542
+ parts.push(`<p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"${sldAttrs.join("")}>`);
3990
4543
  parts.push("<p:cSld>");
3991
4544
  if (this.background) parts.push(this.background.toXml(context));
3992
4545
  parts.push("<p:spTree>");
@@ -4013,148 +4566,81 @@ var Slide = class extends XmlComponent {
4013
4566
  //#endregion
4014
4567
  //#region src/file/table-styles.ts
4015
4568
  init_xml_components();
4016
- const TABLE_STYLES_XML = `<a:tblStyleLst xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" def="{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}"/>`;
4017
- var TableStyles = class TableStyles extends ImportedXmlComponent {
4018
- static instance = ImportedXmlComponent.fromXmlString(TABLE_STYLES_XML);
4019
- constructor() {
4569
+ const DEFAULT_STYLE_ID = "{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}";
4570
+ var TableStyles = class extends BaseXmlComponent {
4571
+ opts;
4572
+ constructor(opts) {
4020
4573
  super("a:tblStyleLst");
4574
+ this.opts = opts;
4021
4575
  }
4022
4576
  toXml(context) {
4023
- return TableStyles.instance.toXml(context);
4577
+ if (!this.opts) return `<a:tblStyleLst xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" def="${DEFAULT_STYLE_ID}"/>`;
4578
+ return createTableStyleList(this.opts).toXml(context);
4024
4579
  }
4025
4580
  };
4026
4581
  //#endregion
4027
- //#region src/file/theme/theme.ts
4582
+ //#region src/file/view-properties.ts
4028
4583
  init_xml_components();
4029
- const DEFAULT_COLORS = {
4030
- dark1: "000000",
4031
- light1: "FFFFFF",
4032
- dark2: "44546A",
4033
- light2: "E7E6E6",
4034
- accent1: "4472C4",
4035
- accent2: "ED7D31",
4036
- accent3: "A5A5A5",
4037
- accent4: "FFC000",
4038
- accent5: "5B9BD5",
4039
- accent6: "70AD47",
4040
- hyperlink: "0563C1",
4041
- followedHyperlink: "954F72"
4042
- };
4043
- function buildThemeXml(options) {
4044
- const name = options?.name ?? "Office Theme";
4045
- const c = {
4046
- ...DEFAULT_COLORS,
4047
- ...options?.colors
4048
- };
4049
- const f = options?.fonts;
4050
- const majorFont = f?.majorFont ?? "Calibri Light";
4051
- const minorFont = f?.minorFont ?? "Calibri";
4052
- const majorFontAsian = f?.majorFontAsian ?? "";
4053
- const minorFontAsian = f?.minorFontAsian ?? "";
4054
- return `<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="${name}">
4055
- <a:themeElements>
4056
- <a:clrScheme name="${name}">
4057
- <a:dk1>${options?.colors?.dark1 !== void 0 ? `<a:srgbClr val="${c.dark1}"/>` : `<a:sysClr val="windowText" lastClr="000000"/>`}</a:dk1>
4058
- <a:lt1>${options?.colors?.light1 !== void 0 ? `<a:srgbClr val="${c.light1}"/>` : `<a:sysClr val="window" lastClr="FFFFFF"/>`}</a:lt1>
4059
- <a:dk2><a:srgbClr val="${c.dark2}"/></a:dk2>
4060
- <a:lt2><a:srgbClr val="${c.light2}"/></a:lt2>
4061
- <a:accent1><a:srgbClr val="${c.accent1}"/></a:accent1>
4062
- <a:accent2><a:srgbClr val="${c.accent2}"/></a:accent2>
4063
- <a:accent3><a:srgbClr val="${c.accent3}"/></a:accent3>
4064
- <a:accent4><a:srgbClr val="${c.accent4}"/></a:accent4>
4065
- <a:accent5><a:srgbClr val="${c.accent5}"/></a:accent5>
4066
- <a:accent6><a:srgbClr val="${c.accent6}"/></a:accent6>
4067
- <a:hlink><a:srgbClr val="${c.hyperlink}"/></a:hlink>
4068
- <a:folHlink><a:srgbClr val="${c.followedHyperlink}"/></a:folHlink>
4069
- </a:clrScheme>
4070
- <a:fontScheme name="${name}">
4071
- <a:majorFont>
4072
- <a:latin typeface="${majorFont}"/>
4073
- <a:ea typeface="${majorFontAsian}"/>
4074
- <a:cs typeface=""/>
4075
- </a:majorFont>
4076
- <a:minorFont>
4077
- <a:latin typeface="${minorFont}"/>
4078
- <a:ea typeface="${minorFontAsian}"/>
4079
- <a:cs typeface=""/>
4080
- </a:minorFont>
4081
- </a:fontScheme>
4082
- <a:fmtScheme name="Office">
4083
- <a:fillStyleLst>
4084
- <a:solidFill><a:schemeClr val="phClr"/></a:solidFill>
4085
- <a:solidFill><a:schemeClr val="phClr"/></a:solidFill>
4086
- <a:solidFill><a:schemeClr val="phClr"/></a:solidFill>
4087
- </a:fillStyleLst>
4088
- <a:lnStyleLst>
4089
- <a:ln w="6350" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln>
4090
- <a:ln w="12700" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln>
4091
- <a:ln w="19050" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln>
4092
- </a:lnStyleLst>
4093
- <a:effectStyleLst>
4094
- <a:effectStyle><a:effectLst/></a:effectStyle>
4095
- <a:effectStyle><a:effectLst/></a:effectStyle>
4096
- <a:effectStyle><a:effectLst/></a:effectStyle>
4097
- </a:effectStyleLst>
4098
- <a:bgFillStyleLst>
4099
- <a:solidFill><a:schemeClr val="phClr"/></a:solidFill>
4100
- <a:solidFill><a:schemeClr val="phClr"/></a:solidFill>
4101
- <a:solidFill><a:schemeClr val="phClr"/></a:solidFill>
4102
- </a:bgFillStyleLst>
4103
- </a:fmtScheme>
4104
- </a:themeElements>
4105
- <a:objectDefaults/>
4106
- <a:extraClrSchemeLst/>
4107
- </a:theme>`;
4108
- }
4109
- var DefaultTheme = class DefaultTheme extends ImportedXmlComponent {
4110
- static cache = /* @__PURE__ */ new Map();
4111
- cacheKey;
4112
- constructor(options) {
4113
- super("a:theme");
4114
- this.cacheKey = options ? themeKey(options) : "";
4115
- if (!DefaultTheme.cache.has(this.cacheKey)) DefaultTheme.cache.set(this.cacheKey, ImportedXmlComponent.fromXmlString(buildThemeXml(options)));
4116
- }
4117
- toXml(context) {
4118
- return DefaultTheme.cache.get(this.cacheKey).toXml(context);
4119
- }
4584
+ const LAST_VIEW_XSD = {
4585
+ slideView: "sldView",
4586
+ slideMasterView: "sldMasterView",
4587
+ notesView: "notesView",
4588
+ handoutView: "handoutView",
4589
+ outlineView: "outlineView",
4590
+ slideSorterView: "sldSorterView"
4120
4591
  };
4121
- function themeKey(o) {
4122
- const c = o.colors;
4123
- const f = o.fonts;
4124
- return `n${o.name ?? ""}c${c?.dark1 ?? ""}${c?.light1 ?? ""}${c?.dark2 ?? ""}${c?.light2 ?? ""}${c?.accent1 ?? ""}${c?.accent2 ?? ""}${c?.accent3 ?? ""}${c?.accent4 ?? ""}${c?.accent5 ?? ""}${c?.accent6 ?? ""}${c?.hyperlink ?? ""}${c?.followedHyperlink ?? ""}f${f?.majorFont ?? ""}${f?.minorFont ?? ""}${f?.majorFontAsian ?? ""}${f?.minorFontAsian ?? ""}`;
4592
+ function buildNormalViewPrXml(opts) {
4593
+ const attrs = [];
4594
+ if (opts?.showOutlineIcons === false) attrs.push(" showOutlineIcons=\"0\"");
4595
+ if (opts?.snapVertSplitter) attrs.push(" snapVertSplitter=\"1\"");
4596
+ if (opts?.vertBarState) attrs.push(` vertBarState="${opts.vertBarState}"`);
4597
+ if (opts?.horzBarState) attrs.push(` horzBarState="${opts.horzBarState}"`);
4598
+ if (opts?.preferSingleView) attrs.push(" preferSingleView=\"1\"");
4599
+ return `<p:normalViewPr${attrs.join("")}><p:restoredLeft sz="14996" autoAdjust="0"/><p:restoredTop sz="94660"/></p:normalViewPr>`;
4600
+ }
4601
+ function buildCSldViewPrXml(opts, zoomN = 90, zoomD = 100) {
4602
+ const attrs = [];
4603
+ if (opts?.snapToGrid === false) attrs.push(" snapToGrid=\"0\"");
4604
+ if (opts?.snapToObjects) attrs.push(" snapToObjects=\"1\"");
4605
+ if (opts?.showGuides) attrs.push(" showGuides=\"1\"");
4606
+ const cViewPrAttr = opts?.varScale !== false ? " varScale=\"1\"" : "";
4607
+ return `<p:cSldViewPr${attrs.join("")}><p:cViewPr${cViewPrAttr}><p:scale><a:sx n="${zoomN}" d="${zoomD}"/><a:sy n="${zoomN}" d="${zoomD}"/></p:scale><p:origin x="1200" y="72"/></p:cViewPr><p:guideLst/></p:cSldViewPr>`;
4608
+ }
4609
+ function buildViewPropsXml(opts) {
4610
+ const ns = "xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"";
4611
+ const zoomN = opts?.zoomScaleNumerator ?? 90;
4612
+ const zoomD = opts?.zoomScaleDenominator ?? 100;
4613
+ const gridCx = opts?.gridSpacing?.cx ?? 72008;
4614
+ const gridCy = opts?.gridSpacing?.cy ?? 72008;
4615
+ const parts = [];
4616
+ let rootAttrs = "";
4617
+ if (opts?.lastView) rootAttrs += ` lastView="${LAST_VIEW_XSD[opts.lastView]}"`;
4618
+ if (opts?.showComments === false) rootAttrs += " showComments=\"0\"";
4619
+ parts.push(`<p:viewPr ${ns}${rootAttrs}>`);
4620
+ parts.push(buildNormalViewPrXml(opts?.normalView));
4621
+ parts.push("<p:slideViewPr>");
4622
+ parts.push(buildCSldViewPrXml(opts?.slideView, zoomN, zoomD));
4623
+ parts.push("</p:slideViewPr>");
4624
+ parts.push("<p:notesTextViewPr>");
4625
+ parts.push("<p:cViewPr>");
4626
+ parts.push("<p:scale><a:sx n=\"1\" d=\"1\"/><a:sy n=\"1\" d=\"1\"/></p:scale>");
4627
+ parts.push("<p:origin x=\"0\" y=\"0\"/>");
4628
+ parts.push("</p:cViewPr>");
4629
+ parts.push("</p:notesTextViewPr>");
4630
+ parts.push(`<p:gridSpacing cx="${gridCx}" cy="${gridCy}"/>`);
4631
+ parts.push("</p:viewPr>");
4632
+ return parts.join("");
4125
4633
  }
4126
- //#endregion
4127
- //#region src/file/view-properties.ts
4128
- init_xml_components();
4129
- const VIEW_PROPS_XML = `<p:viewPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
4130
- <p:normalViewPr>
4131
- <p:restoredLeft sz="14996" autoAdjust="0"/>
4132
- <p:restoredTop sz="94660"/>
4133
- </p:normalViewPr>
4134
- <p:slideViewPr>
4135
- <p:cSldViewPr snapToGrid="0">
4136
- <p:cViewPr varScale="1">
4137
- <p:scale><a:sx n="90" d="100"/><a:sy n="90" d="100"/></p:scale>
4138
- <p:origin x="1200" y="72"/>
4139
- </p:cViewPr>
4140
- <p:guideLst/>
4141
- </p:cSldViewPr>
4142
- </p:slideViewPr>
4143
- <p:notesTextViewPr>
4144
- <p:cViewPr>
4145
- <p:scale><a:sx n="1" d="1"/><a:sy n="1" d="1"/></p:scale>
4146
- <p:origin x="0" y="0"/>
4147
- </p:cViewPr>
4148
- </p:notesTextViewPr>
4149
- <p:gridSpacing cx="72008" cy="72008"/>
4150
- </p:viewPr>`;
4151
4634
  var ViewProperties = class ViewProperties extends ImportedXmlComponent {
4152
- static instance = ImportedXmlComponent.fromXmlString(VIEW_PROPS_XML);
4153
- constructor() {
4635
+ static cache = /* @__PURE__ */ new Map();
4636
+ key;
4637
+ constructor(opts) {
4154
4638
  super("p:viewPr");
4639
+ this.key = opts ? JSON.stringify(opts) : "";
4640
+ if (!ViewProperties.cache.has(this.key)) ViewProperties.cache.set(this.key, ImportedXmlComponent.fromXmlString(buildViewPropsXml(opts)));
4155
4641
  }
4156
4642
  toXml(context) {
4157
- return ViewProperties.instance.toXml(context);
4643
+ return ViewProperties.cache.get(this.key).toXml(context);
4158
4644
  }
4159
4645
  };
4160
4646
  //#endregion
@@ -4189,6 +4675,13 @@ var File = class {
4189
4675
  slideWidthEmus;
4190
4676
  slideHeightEmus;
4191
4677
  masterDefs;
4678
+ includeHandout;
4679
+ tableStylesOpts;
4680
+ viewOpts;
4681
+ handoutMasterOpts;
4682
+ notesMasterOpts;
4683
+ presPropsFullOpts;
4684
+ presAttrOpts;
4192
4685
  _coreProperties;
4193
4686
  _appProperties;
4194
4687
  _contentTypes;
@@ -4215,9 +4708,30 @@ var File = class {
4215
4708
  this.corePropsOptions = options;
4216
4709
  this.showOptions = options.show;
4217
4710
  this.masterDefs = options.masters ?? [];
4711
+ this.includeHandout = options.includeHandoutMaster ?? false;
4712
+ this.tableStylesOpts = options.tableStyles;
4713
+ this.viewOpts = options.view;
4714
+ this.handoutMasterOpts = options.handoutMasterOptions;
4715
+ this.notesMasterOpts = options.notesMasterOptions;
4218
4716
  const sz = resolveSlideSize(options.size);
4219
4717
  this.slideWidthEmus = sz.width;
4220
4718
  this.slideHeightEmus = sz.height;
4719
+ if (options.serverZoom || options.firstSlideNum !== void 0 || options.showSpecialPlsOnTitleSld !== void 0 || options.rtl !== void 0 || options.removePersonalInfoOnSave !== void 0 || options.compatMode !== void 0 || options.strictFirstAndLastChars !== void 0 || options.embedTrueTypeFonts !== void 0 || options.saveSubsetFonts !== void 0 || options.autoCompressPictures !== void 0 || options.bookmarkIdSeed !== void 0 || options.conformance !== void 0 || options.photoAlbum !== void 0 || options.modifyVerifier !== void 0) this.presAttrOpts = {
4720
+ serverZoom: options.serverZoom,
4721
+ firstSlideNum: options.firstSlideNum,
4722
+ showSpecialPlsOnTitleSld: options.showSpecialPlsOnTitleSld,
4723
+ rtl: options.rtl,
4724
+ removePersonalInfoOnSave: options.removePersonalInfoOnSave,
4725
+ compatMode: options.compatMode,
4726
+ strictFirstAndLastChars: options.strictFirstAndLastChars,
4727
+ embedTrueTypeFonts: options.embedTrueTypeFonts,
4728
+ saveSubsetFonts: options.saveSubsetFonts,
4729
+ autoCompressPictures: options.autoCompressPictures,
4730
+ bookmarkIdSeed: options.bookmarkIdSeed,
4731
+ conformance: options.conformance,
4732
+ photoAlbum: options.photoAlbum,
4733
+ modifyVerifier: options.modifyVerifier
4734
+ };
4221
4735
  }
4222
4736
  getMasterMap() {
4223
4737
  if (this.masterMap) return this.masterMap;
@@ -4332,6 +4846,7 @@ var File = class {
4332
4846
  }
4333
4847
  if (notesSlideIdx > 0) this._contentTypes.addNotesMaster();
4334
4848
  if (hasComments) this._contentTypes.addCommentAuthors();
4849
+ if (this.includeHandout) this._contentTypes.addHandoutMaster();
4335
4850
  }
4336
4851
  return this._contentTypes;
4337
4852
  }
@@ -4374,7 +4889,8 @@ var File = class {
4374
4889
  slideWidth: this.slideWidthEmus,
4375
4890
  slideHeight: this.slideHeightEmus,
4376
4891
  slideIds: this.slideOptions.map((_, i) => 256 + i),
4377
- masterCount: masters.length
4892
+ masterCount: masters.length,
4893
+ ...this.presAttrOpts
4378
4894
  });
4379
4895
  const presRels = this._presentationWrapper.relationships;
4380
4896
  let rid = 1;
@@ -4391,13 +4907,18 @@ var File = class {
4391
4907
  return this.getMasterMap().map((m) => m.theme);
4392
4908
  }
4393
4909
  get tableStyles() {
4394
- return this._tableStyles ??= new TableStyles();
4910
+ return this._tableStyles ??= new TableStyles(this.tableStylesOpts);
4395
4911
  }
4396
4912
  get presProps() {
4397
- return this._presProps ??= new PresentationProperties(this.showOptions);
4913
+ return this._presProps ??= new PresentationProperties({
4914
+ show: this.showOptions,
4915
+ web: this.presPropsFullOpts?.web,
4916
+ print: this.presPropsFullOpts?.print,
4917
+ htmlPublish: this.presPropsFullOpts?.htmlPublish
4918
+ });
4398
4919
  }
4399
4920
  get viewProps() {
4400
- return this._viewProps ??= new ViewProperties();
4921
+ return this._viewProps ??= new ViewProperties(this.viewOpts);
4401
4922
  }
4402
4923
  get slideMasters() {
4403
4924
  return this.getMasterMap().map((m) => m.master);
@@ -4416,7 +4937,7 @@ var File = class {
4416
4937
  get slides() {
4417
4938
  if (!this._slides) {
4418
4939
  this._slides = [];
4419
- for (const s of this.slideOptions) this._slides.push(new Slide(s.children ?? [], s.background ? new Background(s.background) : void 0, s.transition, s.headerFooter));
4940
+ for (const s of this.slideOptions) this._slides.push(new Slide(s.children ?? [], s.background ? new Background(s.background) : void 0, s.transition, s.headerFooter, s.showMasterShapes, s.showMasterPlaceholderAnimations));
4420
4941
  }
4421
4942
  return this._slides;
4422
4943
  }
@@ -4454,6 +4975,15 @@ var File = class {
4454
4975
  get notesMasterRelationships() {
4455
4976
  return this._notesMasterRels ??= new Relationships();
4456
4977
  }
4978
+ get hasHandoutMaster() {
4979
+ return this.includeHandout;
4980
+ }
4981
+ get handoutMasterOptions() {
4982
+ return this.handoutMasterOpts;
4983
+ }
4984
+ get notesMasterOptions() {
4985
+ return this.notesMasterOpts;
4986
+ }
4457
4987
  get commentAuthorList() {
4458
4988
  if (!this._commentAuthorList && !this._slideCommentLists) this.buildComments();
4459
4989
  return this._commentAuthorList;
@@ -4653,6 +5183,7 @@ var ShapeTree = class extends XmlComponent {
4653
5183
  //#endregion
4654
5184
  //#region src/file/notes-master/notes-master.ts
4655
5185
  init_xml_components();
5186
+ const DEFAULT_COLOR_MAP$1 = "bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"";
4656
5187
  const NOTES_MASTER_XML = `<p:notesMaster xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
4657
5188
  <p:cSld>
4658
5189
  <p:bg>
@@ -4677,6 +5208,7 @@ const NOTES_MASTER_XML = `<p:notesMaster xmlns:a="http://schemas.openxmlformats.
4677
5208
  </p:spTree>
4678
5209
  </p:cSld>
4679
5210
  <p:clrMap bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/>
5211
+ <p:hf dt="0" hdr="0" ftr="0" sldNum="0"/>
4680
5212
  <p:notesStyle>
4681
5213
  <a:lvl1pPr marL="0" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
4682
5214
  <a:defRPr sz="1200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr>
@@ -4707,13 +5239,130 @@ const NOTES_MASTER_XML = `<p:notesMaster xmlns:a="http://schemas.openxmlformats.
4707
5239
  </a:lvl9pPr>
4708
5240
  </p:notesStyle>
4709
5241
  </p:notesMaster>`;
5242
+ const DEFAULT_LEVEL_MARGINS = [
5243
+ 0,
5244
+ 457200,
5245
+ 914400,
5246
+ 1371600,
5247
+ 1828800,
5248
+ 2286e3,
5249
+ 2743200,
5250
+ 3200400,
5251
+ 3657600
5252
+ ];
5253
+ function buildColorMapAttrs$1(opts) {
5254
+ if (!opts) return DEFAULT_COLOR_MAP$1;
5255
+ const merged = {
5256
+ bg1: "lt1",
5257
+ tx1: "dk1",
5258
+ bg2: "lt2",
5259
+ tx2: "dk2",
5260
+ accent1: "accent1",
5261
+ accent2: "accent2",
5262
+ accent3: "accent3",
5263
+ accent4: "accent4",
5264
+ accent5: "accent5",
5265
+ accent6: "accent6",
5266
+ hlink: "hlink",
5267
+ folHlink: "folHlink",
5268
+ ...opts
5269
+ };
5270
+ return Object.entries(merged).map(([k, v]) => `${k}="${v}"`).join(" ");
5271
+ }
5272
+ function buildHfAttrs$1(opts) {
5273
+ if (!opts) return "dt=\"0\" hdr=\"0\" ftr=\"0\" sldNum=\"0\"";
5274
+ return `dt="${opts.date ? 1 : 0}" hdr="${opts.header ? 1 : 0}" ftr="${opts.footer ? 1 : 0}" sldNum="${opts.slideNumber ? 1 : 0}"`;
5275
+ }
5276
+ function buildNotesStyleXml(levels) {
5277
+ const parts = ["<p:notesStyle>"];
5278
+ for (let i = 0; i < 9; i++) {
5279
+ const level = levels?.[i];
5280
+ const marL = level?.marginLeft ?? DEFAULT_LEVEL_MARGINS[i];
5281
+ const algn = level?.alignment ?? "l";
5282
+ const sz = level?.fontSize ?? 1200;
5283
+ parts.push(`<a:lvl${i + 1}pPr marL="${marL}" algn="${algn}" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="${sz}" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mn-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl${i + 1}pPr>`);
5284
+ }
5285
+ parts.push("</p:notesStyle>");
5286
+ return parts.join("");
5287
+ }
4710
5288
  var DefaultNotesMaster = class DefaultNotesMaster extends ImportedXmlComponent {
4711
5289
  static instance = ImportedXmlComponent.fromXmlString(NOTES_MASTER_XML);
4712
- constructor() {
5290
+ options;
5291
+ constructor(options) {
4713
5292
  super("p:notesMaster");
5293
+ this.options = options;
5294
+ }
5295
+ toXml(context) {
5296
+ if (!this.options) return DefaultNotesMaster.instance.toXml(context);
5297
+ const colorMap = buildColorMapAttrs$1(this.options.colorMap);
5298
+ const hf = buildHfAttrs$1(this.options.headerFooter);
5299
+ const notesStyle = buildNotesStyleXml(this.options.notesStyle);
5300
+ return `<p:notesMaster xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:cSld><p:bg><p:bgRef idx="1001"><a:schemeClr val="bg1"/></p:bgRef></p:bg><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr></p:spTree></p:cSld><p:clrMap ${colorMap}/><p:hf ${hf}/>` + notesStyle + "</p:notesMaster>";
5301
+ }
5302
+ };
5303
+ //#endregion
5304
+ //#region src/file/handout-master/handout-master.ts
5305
+ init_xml_components();
5306
+ const DEFAULT_COLOR_MAP = "bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"";
5307
+ const HANDOUT_MASTER_XML = `<p:handoutMaster xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
5308
+ <p:cSld>
5309
+ <p:bg>
5310
+ <p:bgRef idx="1001">
5311
+ <a:schemeClr val="bg1"/>
5312
+ </p:bgRef>
5313
+ </p:bg>
5314
+ <p:spTree>
5315
+ <p:nvGrpSpPr>
5316
+ <p:cNvPr id="1" name=""/>
5317
+ <p:cNvGrpSpPr/>
5318
+ <p:nvPr/>
5319
+ </p:nvGrpSpPr>
5320
+ <p:grpSpPr>
5321
+ <a:xfrm>
5322
+ <a:off x="0" y="0"/>
5323
+ <a:ext cx="0" cy="0"/>
5324
+ <a:chOff x="0" y="0"/>
5325
+ <a:chExt cx="0" cy="0"/>
5326
+ </a:xfrm>
5327
+ </p:grpSpPr>
5328
+ </p:spTree>
5329
+ </p:cSld>
5330
+ <p:clrMap bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/>
5331
+ <p:hf dt="0" hdr="0" ftr="0" sldNum="0"/>
5332
+ </p:handoutMaster>`;
5333
+ function buildColorMapAttrs(opts) {
5334
+ if (!opts) return DEFAULT_COLOR_MAP;
5335
+ const merged = {
5336
+ bg1: "lt1",
5337
+ tx1: "dk1",
5338
+ bg2: "lt2",
5339
+ tx2: "dk2",
5340
+ accent1: "accent1",
5341
+ accent2: "accent2",
5342
+ accent3: "accent3",
5343
+ accent4: "accent4",
5344
+ accent5: "accent5",
5345
+ accent6: "accent6",
5346
+ hlink: "hlink",
5347
+ folHlink: "folHlink",
5348
+ ...opts
5349
+ };
5350
+ return Object.entries(merged).map(([k, v]) => `${k}="${v}"`).join(" ");
5351
+ }
5352
+ function buildHfAttrs(opts) {
5353
+ if (!opts) return "dt=\"0\" hdr=\"0\" ftr=\"0\" sldNum=\"0\"";
5354
+ return `dt="${opts.date ? 1 : 0}" hdr="${opts.header ? 1 : 0}" ftr="${opts.footer ? 1 : 0}" sldNum="${opts.slideNumber ? 1 : 0}"`;
5355
+ }
5356
+ var DefaultHandoutMaster = class DefaultHandoutMaster extends ImportedXmlComponent {
5357
+ static instance = ImportedXmlComponent.fromXmlString(HANDOUT_MASTER_XML);
5358
+ options;
5359
+ constructor(options) {
5360
+ super("p:handoutMaster");
5361
+ this.options = options;
4714
5362
  }
4715
5363
  toXml(context) {
4716
- return DefaultNotesMaster.instance.toXml(context);
5364
+ if (!this.options) return DefaultHandoutMaster.instance.toXml(context);
5365
+ return `<p:handoutMaster xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"><p:cSld><p:bg><p:bgRef idx="1001"><a:schemeClr val="bg1"/></p:bgRef></p:bg><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr></p:spTree></p:cSld><p:clrMap ${buildColorMapAttrs(this.options.colorMap)}/><p:hf ${buildHfAttrs(this.options.headerFooter)}/></p:handoutMaster>`;
4717
5366
  }
4718
5367
  };
4719
5368
  //#endregion
@@ -4760,6 +5409,323 @@ var HeaderFooter = class extends XmlComponent {
4760
5409
  }
4761
5410
  };
4762
5411
  //#endregion
5412
+ //#region src/file/pml-elements.ts
5413
+ init_xml_components();
5414
+ /**
5415
+ * PresentationML (p:) element name constants.
5416
+ *
5417
+ * Covers all pml.xsd elements that are not referenced by existing component classes.
5418
+ * Used for XSD coverage tracking — each constant holds the literal element name string.
5419
+ *
5420
+ * @module
5421
+ */
5422
+ /** p:blinds — Blinds slide transition */
5423
+ const BLINDS = "p:blinds";
5424
+ /** p:checker — Checker slide transition */
5425
+ const CHECKER = "p:checker";
5426
+ /** p:circle — Circle slide transition */
5427
+ const CIRCLE = "p:circle";
5428
+ /** p:comb — Comb slide transition */
5429
+ const COMB = "p:comb";
5430
+ /** p:cover — Cover slide transition */
5431
+ const COVER = "p:cover";
5432
+ /** p:cut — Cut slide transition */
5433
+ const CUT = "p:cut";
5434
+ /** p:diamond — Diamond slide transition */
5435
+ const DIAMOND = "p:diamond";
5436
+ /** p:dissolve — Dissolve slide transition */
5437
+ const DISSOLVE = "p:dissolve";
5438
+ /** p:fade — Fade slide transition */
5439
+ const FADE = "p:fade";
5440
+ /** p:newsflash — Newsflash slide transition */
5441
+ const NEWSFLASH = "p:newsflash";
5442
+ /** p:plus — Plus slide transition */
5443
+ const PLUS = "p:plus";
5444
+ /** p:pull — Pull slide transition */
5445
+ const PULL = "p:pull";
5446
+ /** p:push — Push slide transition */
5447
+ const PUSH = "p:push";
5448
+ /** p:random — Random slide transition */
5449
+ const RANDOM = "p:random";
5450
+ /** p:randomBar — Random bar slide transition */
5451
+ const RANDOM_BAR = "p:randomBar";
5452
+ /** p:split — Split slide transition */
5453
+ const SPLIT = "p:split";
5454
+ /** p:strips — Strips slide transition */
5455
+ const STRIPS = "p:strips";
5456
+ /** p:wedge — Wedge slide transition */
5457
+ const WEDGE = "p:wedge";
5458
+ /** p:wheel — Wheel slide transition */
5459
+ const WHEEL = "p:wheel";
5460
+ /** p:wipe — Wipe slide transition */
5461
+ const WIPE = "p:wipe";
5462
+ /** p:zoom — Zoom slide transition */
5463
+ const ZOOM = "p:zoom";
5464
+ /** p:stSnd — Start sound action for transition */
5465
+ const ST_SND = "p:stSnd";
5466
+ /** p:endSnd — End sound action for transition */
5467
+ const END_SND = "p:endSnd";
5468
+ /** p:sndAc — Sound action container for transition */
5469
+ const SND_AC = "p:sndAc";
5470
+ /** p:bldLst — Build list for slide animations */
5471
+ const BLD_LST = "p:bldLst";
5472
+ /** p:bldP — Build paragraph animation */
5473
+ const BLD_P = "p:bldP";
5474
+ /** p:bldDgm — Build diagram animation */
5475
+ const BLD_DGM = "p:bldDgm";
5476
+ /** p:bldOleChart — Build OLE chart animation */
5477
+ const BLD_OLE_CHART = "p:bldOleChart";
5478
+ /** p:bldGraphic — Build graphic element animation */
5479
+ const BLD_GRAPHIC = "p:bldGraphic";
5480
+ /** p:bldAsOne — Build as one animation */
5481
+ const BLD_AS_ONE = "p:bldAsOne";
5482
+ /** p:bldSub — Build sub-element animation */
5483
+ const BLD_SUB = "p:bldSub";
5484
+ /** p:tn — Timeline node */
5485
+ const TN = "p:tn";
5486
+ /** p:subTnLst — Sub-timeline node list */
5487
+ const SUB_TN_LST = "p:subTnLst";
5488
+ /** p:endCondLst — End condition list */
5489
+ const END_COND_LST = "p:endCondLst";
5490
+ /** p:endSync — End synchronization */
5491
+ const END_SYNC = "p:endSync";
5492
+ /** p:tmpl — Animation template */
5493
+ const TMPL = "p:tmpl";
5494
+ /** p:tmplLst — Animation template list */
5495
+ const TMPL_LST = "p:tmplLst";
5496
+ /** p:tmPct — Timeline percentage */
5497
+ const TM_PCT = "p:tmPct";
5498
+ /** p:excl — Exclusive timing node */
5499
+ const EXCL = "p:excl";
5500
+ /** p:inkTgt — Ink target element */
5501
+ const INK_TGT = "p:inkTgt";
5502
+ /** p:sndTgt — Sound target element */
5503
+ const SND_TGT = "p:sndTgt";
5504
+ /** p:spTgt sub-elements — sub-shape target */
5505
+ const SUB_SP = "p:subSp";
5506
+ /** p:graphicEl — Graphic element target */
5507
+ const GRAPHIC_EL = "p:graphicEl";
5508
+ /** p:oleChartEl — OLE chart element target */
5509
+ const OLE_CHART_EL = "p:oleChartEl";
5510
+ /** p:rCtr — Runtime context */
5511
+ const R_CTR = "p:rCtr";
5512
+ /** p:boolVal — Boolean animation value */
5513
+ const BOOL_VAL = "p:boolVal";
5514
+ /** p:intVal — Integer animation value */
5515
+ const INT_VAL = "p:intVal";
5516
+ /** p:fltVal — Float animation value */
5517
+ const FLT_VAL = "p:fltVal";
5518
+ /** p:strVal note: already referenced in timing.ts, included for completeness */
5519
+ const STR_VAL = "p:strVal";
5520
+ /** p:clrVal — Color animation value */
5521
+ const CLR_VAL = "p:clrVal";
5522
+ /** p:from — Animation from value */
5523
+ const FROM = "p:from";
5524
+ /** p:rgb — RGB color value for animation */
5525
+ const RGB = "p:rgb";
5526
+ /** p:hsl — HSL color value for animation */
5527
+ const HSL = "p:hsl";
5528
+ /** p:rtn — Rotation transform */
5529
+ const RTN = "p:rtn";
5530
+ /** p:bold — Bold text build style */
5531
+ const BOLD = "p:bold";
5532
+ /** p:italic — Italic text build style */
5533
+ const ITALIC = "p:italic";
5534
+ /** p:boldItalic — Bold-italic text build style */
5535
+ const BOLD_ITALIC = "p:boldItalic";
5536
+ /** p:regular — Regular text build style */
5537
+ const REGULAR = "p:regular";
5538
+ /** p:style — Text style reference */
5539
+ const STYLE = "p:style";
5540
+ /** p:font — Font element */
5541
+ const FONT = "p:font";
5542
+ /** p:contentPart — Content part reference */
5543
+ const CONTENT_PART = "p:contentPart";
5544
+ /** p:sldLst — Slide list */
5545
+ const SLD_LST = "p:sldLst";
5546
+ /** p:photoAlbum — Photo album settings */
5547
+ const PHOTO_ALBUM = "p:photoAlbum";
5548
+ /** p:control — Embedded control */
5549
+ const CONTROL = "p:control";
5550
+ /** p:controls — Controls container */
5551
+ const CONTROLS = "p:controls";
5552
+ /** p:custData — Custom data element */
5553
+ const CUST_DATA = "p:custData";
5554
+ /** p:custDataLst — Custom data list */
5555
+ const CUST_DATA_LST = "p:custDataLst";
5556
+ /** p:custShow — Custom show */
5557
+ const CUST_SHOW = "p:custShow";
5558
+ /** p:custShowLst — Custom show list */
5559
+ const CUST_SHOW_LST = "p:custShowLst";
5560
+ /** p:tag — Tag element */
5561
+ const TAG = "p:tag";
5562
+ /** p:tagLst — Tag list */
5563
+ const TAG_LST = "p:tagLst";
5564
+ /** p:tags — Tags container */
5565
+ const TAGS = "p:tags";
5566
+ /** p:embeddedFont — Embedded font */
5567
+ const EMBEDDED_FONT = "p:embeddedFont";
5568
+ /** p:embeddedFontLst — Embedded font list */
5569
+ const EMBEDDED_FONT_LST = "p:embeddedFontLst";
5570
+ /** p:htmlPubPr — HTML publish properties */
5571
+ const HTML_PUB_PR = "p:htmlPubPr";
5572
+ /** p:webPr — Web properties */
5573
+ const WEB_PR = "p:webPr";
5574
+ /** p:prnPr — Print properties */
5575
+ const PRN_PR = "p:prnPr";
5576
+ /** p:modifyVerifier — Modification verifier */
5577
+ const MODIFY_VERIFIER = "p:modifyVerifier";
5578
+ /** p:smartTags — Smart tags */
5579
+ const SMART_TAGS = "p:smartTags";
5580
+ /** p:sldSyncPr — Slide synchronization properties */
5581
+ const SLD_SYNC_PR = "p:sldSyncPr";
5582
+ /** p:notesViewPr — Notes view properties */
5583
+ const NOTES_VIEW_PR = "p:notesViewPr";
5584
+ /** p:outlineViewPr — Outline view properties */
5585
+ const OUTLINE_VIEW_PR = "p:outlineViewPr";
5586
+ /** p:sorterViewPr — Sorter view properties */
5587
+ const SORTER_VIEW_PR = "p:sorterViewPr";
5588
+ /** p:clrMru — Color most-recently-used */
5589
+ const CLR_MRU = "p:clrMru";
5590
+ /** p:guide — Drawing guide */
5591
+ const GUIDE = "p:guide";
5592
+ /** p:kinsoku — Kinsoku line breaking settings */
5593
+ const KINSOKU = "p:kinsoku";
5594
+ /** p:progress — Progress element */
5595
+ const PROGRESS = "p:progress";
5596
+ /** Creates a p:sldSyncPr element (Slide Sync Properties). */
5597
+ const createSlideSyncProperties = (options) => {
5598
+ const attrs = {};
5599
+ if (options?.serverSlideId !== void 0) attrs.serverSlideId = {
5600
+ key: "serverSldId",
5601
+ value: options.serverSlideId
5602
+ };
5603
+ if (options?.serverSlideModifiedTime !== void 0) attrs.serverSlideModifiedTime = {
5604
+ key: "serverSldModifiedTime",
5605
+ value: options.serverSlideModifiedTime
5606
+ };
5607
+ if (options?.clientInsertedTime !== void 0) attrs.clientInsertedTime = {
5608
+ key: "clientInsertedTime",
5609
+ value: options.clientInsertedTime
5610
+ };
5611
+ return new BuilderElement({
5612
+ name: "p:sldSyncPr",
5613
+ attributes: Object.keys(attrs).length > 0 ? attrs : void 0
5614
+ });
5615
+ };
5616
+ /** Creates a p:outlineViewPr element (Outline View Properties). */
5617
+ const createOutlineViewProperties = (options) => {
5618
+ const attrs = {};
5619
+ if (options?.showFormatting !== void 0) attrs.showFormatting = {
5620
+ key: "showFormatting",
5621
+ value: options.showFormatting ? "1" : "0"
5622
+ };
5623
+ return new BuilderElement({
5624
+ name: "p:outlineViewPr",
5625
+ attributes: Object.keys(attrs).length > 0 ? attrs : void 0
5626
+ });
5627
+ };
5628
+ /** Creates a p:sld element for outline view (OutlineViewSlideEntry). */
5629
+ const createOutlineViewSlideEntry = (options) => {
5630
+ const attrs = {};
5631
+ if (options?.collapse !== void 0) attrs.collapse = {
5632
+ key: "collapse",
5633
+ value: options.collapse ? "1" : "0"
5634
+ };
5635
+ return new BuilderElement({
5636
+ name: "p:sld",
5637
+ attributes: Object.keys(attrs).length > 0 ? attrs : void 0
5638
+ });
5639
+ };
5640
+ /** Creates a p:kinsoku element (Kinsoku Line Breaking). */
5641
+ const createKinsoku = (options) => {
5642
+ const attrs = {};
5643
+ if (options?.invalidStartCharacters !== void 0) attrs.invalidStartCharacters = {
5644
+ key: "invalStChars",
5645
+ value: options.invalidStartCharacters
5646
+ };
5647
+ if (options?.invalidEndCharacters !== void 0) attrs.invalidEndCharacters = {
5648
+ key: "invalEndChars",
5649
+ value: options.invalidEndCharacters
5650
+ };
5651
+ return new BuilderElement({
5652
+ name: "p:kinsoku",
5653
+ attributes: Object.keys(attrs).length > 0 ? attrs : void 0
5654
+ });
5655
+ };
5656
+ /** Creates a p:excl element (Exclusive Timing). */
5657
+ const createExclusiveTiming = (options) => {
5658
+ const attrs = {};
5659
+ if (options?.previousAction !== void 0) attrs.previousAction = {
5660
+ key: "prevAc",
5661
+ value: options.previousAction
5662
+ };
5663
+ return new BuilderElement({
5664
+ name: "p:excl",
5665
+ attributes: Object.keys(attrs).length > 0 ? attrs : void 0
5666
+ });
5667
+ };
5668
+ /** Creates a p:bldP element (Build Paragraph). */
5669
+ const createBuildParagraph = (options) => {
5670
+ const attrs = {};
5671
+ if (options?.build !== void 0) attrs.build = {
5672
+ key: "build",
5673
+ value: options.build
5674
+ };
5675
+ if (options?.uiExpand !== void 0) attrs.uiExpand = {
5676
+ key: "uiExpand",
5677
+ value: options.uiExpand ? "1" : "0"
5678
+ };
5679
+ return new BuilderElement({
5680
+ name: "p:bldP",
5681
+ attributes: Object.keys(attrs).length > 0 ? attrs : void 0
5682
+ });
5683
+ };
5684
+ /** Creates a p:bldDgm element (Build Diagram). */
5685
+ const createBuildDiagram = (options) => {
5686
+ const attrs = {};
5687
+ if (options?.build !== void 0) attrs.build = {
5688
+ key: "bld",
5689
+ value: options.build
5690
+ };
5691
+ if (options?.uiExpand !== void 0) attrs.uiExpand = {
5692
+ key: "uiExpand",
5693
+ value: options.uiExpand ? "1" : "0"
5694
+ };
5695
+ return new BuilderElement({
5696
+ name: "p:bldDgm",
5697
+ attributes: Object.keys(attrs).length > 0 ? attrs : void 0
5698
+ });
5699
+ };
5700
+ /** Creates a p:bldOleChart element (Build OLE Chart). */
5701
+ const createBuildOleChart = (options) => {
5702
+ const attrs = {};
5703
+ if (options?.build !== void 0) attrs.build = {
5704
+ key: "bld",
5705
+ value: options.build
5706
+ };
5707
+ if (options?.uiExpand !== void 0) attrs.uiExpand = {
5708
+ key: "uiExpand",
5709
+ value: options.uiExpand ? "1" : "0"
5710
+ };
5711
+ return new BuilderElement({
5712
+ name: "p:bldOleChart",
5713
+ attributes: Object.keys(attrs).length > 0 ? attrs : void 0
5714
+ });
5715
+ };
5716
+ /** Creates a p:bldGraphic element (Build Graphic). */
5717
+ const createBuildGraphic = (options) => {
5718
+ const attrs = {};
5719
+ if (options?.uiExpand !== void 0) attrs.uiExpand = {
5720
+ key: "uiExpand",
5721
+ value: options.uiExpand ? "1" : "0"
5722
+ };
5723
+ return new BuilderElement({
5724
+ name: "p:bldGraphic",
5725
+ attributes: Object.keys(attrs).length > 0 ? attrs : void 0
5726
+ });
5727
+ };
5728
+ //#endregion
4763
5729
  //#region src/file/index.ts
4764
5730
  init_fill();
4765
5731
  init_effects();
@@ -4878,7 +5844,7 @@ var Compiler = class {
4878
5844
  file.presentationWrapper.view.setNotesMasterRId(notesMasterRId);
4879
5845
  const notesMasterThemeIndex = themes.length + 1;
4880
5846
  mapping["NotesMaster"] = {
4881
- data: this.formatter.formatToXml(new DefaultNotesMaster(), context),
5847
+ data: this.formatter.formatToXml(new DefaultNotesMaster(file.notesMasterOptions), context),
4882
5848
  path: "ppt/notesMasters/notesMaster1.xml"
4883
5849
  };
4884
5850
  const notesMasterTheme = new DefaultTheme();
@@ -4894,6 +5860,28 @@ var Compiler = class {
4894
5860
  path: "ppt/notesMasters/_rels/notesMaster1.xml.rels"
4895
5861
  };
4896
5862
  }
5863
+ if (file.hasHandoutMaster) {
5864
+ const handoutMasterRId = file.presentationWrapper.relationships.relationshipCount + 1;
5865
+ file.presentationWrapper.relationships.addRelationship(handoutMasterRId, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/handoutMaster", "handoutMasters/handoutMaster1.xml");
5866
+ file.presentationWrapper.view.setHandoutMasterRId(handoutMasterRId);
5867
+ const handoutMasterThemeIndex = themes.length + (file.notesSlides.length > 0 ? 2 : 1);
5868
+ mapping["HandoutMaster"] = {
5869
+ data: this.formatter.formatToXml(new DefaultHandoutMaster(file.handoutMasterOptions), context),
5870
+ path: "ppt/handoutMasters/handoutMaster1.xml"
5871
+ };
5872
+ const handoutMasterTheme = new DefaultTheme();
5873
+ mapping["HandoutMasterTheme"] = {
5874
+ data: this.formatter.formatToXml(handoutMasterTheme, context),
5875
+ path: `ppt/theme/theme${handoutMasterThemeIndex}.xml`
5876
+ };
5877
+ file.contentTypes.addTheme(handoutMasterThemeIndex);
5878
+ const handoutMasterRels = new Relationships();
5879
+ handoutMasterRels.addRelationship(1, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme", `../theme/theme${handoutMasterThemeIndex}.xml`);
5880
+ mapping["HandoutMasterRelationships"] = {
5881
+ data: this.formatter.formatToXml(handoutMasterRels, context),
5882
+ path: "ppt/handoutMasters/_rels/handoutMaster1.xml.rels"
5883
+ };
5884
+ }
4897
5885
  if (file.commentAuthorList) file.presentationWrapper.relationships.addRelationship(file.presentationWrapper.relationships.relationshipCount + 1, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors", "commentAuthors.xml");
4898
5886
  const presentationXml = this.formatter.formatToXml(file.presentationWrapper.view, context);
4899
5887
  let currentImageCount = 0;
@@ -7213,9 +8201,34 @@ const patchPresentation = async ({ outputType, data, patches, keepOriginalStyles
7213
8201
  __reExport(/* @__PURE__ */ __exportAll({
7214
8202
  AppProperties: () => AppProperties,
7215
8203
  AudioFrame: () => AudioFrame,
8204
+ BLD_AS_ONE: () => BLD_AS_ONE,
8205
+ BLD_DGM: () => BLD_DGM,
8206
+ BLD_GRAPHIC: () => BLD_GRAPHIC,
8207
+ BLD_LST: () => BLD_LST,
8208
+ BLD_OLE_CHART: () => BLD_OLE_CHART,
8209
+ BLD_P: () => BLD_P,
8210
+ BLD_SUB: () => BLD_SUB,
8211
+ BLINDS: () => BLINDS,
8212
+ BOLD: () => BOLD,
8213
+ BOLD_ITALIC: () => BOLD_ITALIC,
8214
+ BOOL_VAL: () => BOOL_VAL,
7216
8215
  Background: () => Background,
7217
8216
  BevelPresetType: () => BevelPresetType,
7218
8217
  BlipFill: () => BlipFill,
8218
+ CHECKER: () => CHECKER,
8219
+ CIRCLE: () => CIRCLE,
8220
+ CLR_MRU: () => CLR_MRU,
8221
+ CLR_VAL: () => CLR_VAL,
8222
+ COMB: () => COMB,
8223
+ CONTENT_PART: () => CONTENT_PART,
8224
+ CONTROL: () => CONTROL,
8225
+ CONTROLS: () => CONTROLS,
8226
+ COVER: () => COVER,
8227
+ CUST_DATA: () => CUST_DATA,
8228
+ CUST_DATA_LST: () => CUST_DATA_LST,
8229
+ CUST_SHOW: () => CUST_SHOW,
8230
+ CUST_SHOW_LST: () => CUST_SHOW_LST,
8231
+ CUT: () => CUT,
7219
8232
  Chart: () => Chart,
7220
8233
  ChartCollection: () => ChartCollection,
7221
8234
  ChartSpace: () => ChartSpace,
@@ -7223,27 +8236,59 @@ __reExport(/* @__PURE__ */ __exportAll({
7223
8236
  ConnectorShape: () => ConnectorShape,
7224
8237
  ContentTypes: () => ContentTypes,
7225
8238
  CoreProperties: () => CoreProperties,
8239
+ DIAMOND: () => DIAMOND,
8240
+ DISSOLVE: () => DISSOLVE,
7226
8241
  DateTimeField: () => DateTimeField,
8242
+ DefaultHandoutMaster: () => DefaultHandoutMaster,
7227
8243
  DefaultNotesMaster: () => DefaultNotesMaster,
7228
8244
  DefaultSlideLayout: () => DefaultSlideLayout,
7229
8245
  DefaultSlideMaster: () => DefaultSlideMaster,
7230
8246
  DefaultTheme: () => DefaultTheme,
7231
8247
  DrawingTable: () => DrawingTable,
8248
+ EMBEDDED_FONT: () => EMBEDDED_FONT,
8249
+ EMBEDDED_FONT_LST: () => EMBEDDED_FONT_LST,
8250
+ END_COND_LST: () => END_COND_LST,
8251
+ END_SND: () => END_SND,
8252
+ END_SYNC: () => END_SYNC,
8253
+ EXCL: () => EXCL,
7232
8254
  EndParagraphRunProperties: () => EndParagraphRunProperties,
8255
+ FADE: () => FADE,
8256
+ FLT_VAL: () => FLT_VAL,
8257
+ FONT: () => FONT,
8258
+ FROM: () => FROM,
7233
8259
  Field: () => Field,
7234
8260
  File: () => File,
8261
+ GRAPHIC_EL: () => GRAPHIC_EL,
8262
+ GUIDE: () => GUIDE,
7235
8263
  GroupShape: () => GroupShape,
7236
8264
  GroupShapeProperties: () => GroupShapeProperties,
7237
8265
  GroupTransform2D: () => GroupTransform2D,
8266
+ HSL: () => HSL,
8267
+ HTML_PUB_PR: () => HTML_PUB_PR,
7238
8268
  HeaderFooter: () => HeaderFooter,
8269
+ INK_TGT: () => INK_TGT,
8270
+ INT_VAL: () => INT_VAL,
8271
+ ITALIC: () => ITALIC,
8272
+ KINSOKU: () => KINSOKU,
7239
8273
  LineCap: () => LineCap,
7240
8274
  LineJoin: () => LineJoin,
7241
8275
  LineShape: () => LineShape,
8276
+ MODIFY_VERIFIER: () => MODIFY_VERIFIER,
7242
8277
  Media: () => Media,
8278
+ NEWSFLASH: () => NEWSFLASH,
8279
+ NOTES_VIEW_PR: () => NOTES_VIEW_PR,
7243
8280
  NonVisualDrawingProperties: () => NonVisualDrawingProperties,
7244
8281
  NonVisualPictureProperties: () => NonVisualPictureProperties,
7245
8282
  NonVisualShapeProperties: () => NonVisualShapeProperties,
7246
8283
  NotesSlide: () => NotesSlide,
8284
+ OLE_CHART_EL: () => OLE_CHART_EL,
8285
+ OUTLINE_VIEW_PR: () => OUTLINE_VIEW_PR,
8286
+ PHOTO_ALBUM: () => PHOTO_ALBUM,
8287
+ PLUS: () => PLUS,
8288
+ PRN_PR: () => PRN_PR,
8289
+ PROGRESS: () => PROGRESS,
8290
+ PULL: () => PULL,
8291
+ PUSH: () => PUSH,
7247
8292
  Packer: () => Packer,
7248
8293
  Paragraph: () => Paragraph,
7249
8294
  ParagraphProperties: () => ParagraphProperties,
@@ -7256,9 +8301,28 @@ __reExport(/* @__PURE__ */ __exportAll({
7256
8301
  PresetDash: () => PresetDash,
7257
8302
  PresetGeometry: () => PresetGeometry,
7258
8303
  PresetMaterialType: () => PresetMaterialType,
8304
+ RANDOM: () => RANDOM,
8305
+ RANDOM_BAR: () => RANDOM_BAR,
8306
+ REGULAR: () => REGULAR,
8307
+ RGB: () => RGB,
8308
+ RTN: () => RTN,
8309
+ R_CTR: () => R_CTR,
7259
8310
  ReflectionAlignment: () => ReflectionAlignment,
7260
8311
  Relationships: () => Relationships,
7261
8312
  RunProperties: () => RunProperties,
8313
+ SLD_LST: () => SLD_LST,
8314
+ SLD_SYNC_PR: () => SLD_SYNC_PR,
8315
+ SMART_TAGS: () => SMART_TAGS,
8316
+ SND_AC: () => SND_AC,
8317
+ SND_TGT: () => SND_TGT,
8318
+ SORTER_VIEW_PR: () => SORTER_VIEW_PR,
8319
+ SPLIT: () => SPLIT,
8320
+ STRIPS: () => STRIPS,
8321
+ STR_VAL: () => STR_VAL,
8322
+ STYLE: () => STYLE,
8323
+ ST_SND: () => ST_SND,
8324
+ SUB_SP: () => SUB_SP,
8325
+ SUB_TN_LST: () => SUB_TN_LST,
7262
8326
  Shape: () => Shape,
7263
8327
  ShapeProperties: () => ShapeProperties,
7264
8328
  ShapeTree: () => ShapeTree,
@@ -7268,6 +8332,13 @@ __reExport(/* @__PURE__ */ __exportAll({
7268
8332
  SlideSizePreset: () => SlideSizePreset,
7269
8333
  SmartArt: () => SmartArt,
7270
8334
  StrikeStyle: () => StrikeStyle,
8335
+ TAG: () => TAG,
8336
+ TAGS: () => TAGS,
8337
+ TAG_LST: () => TAG_LST,
8338
+ TMPL: () => TMPL,
8339
+ TMPL_LST: () => TMPL_LST,
8340
+ TM_PCT: () => TM_PCT,
8341
+ TN: () => TN,
7271
8342
  Table: () => Table,
7272
8343
  TableCell: () => TableCell,
7273
8344
  TableCellProperties: () => TableCellProperties,
@@ -7282,6 +8353,11 @@ __reExport(/* @__PURE__ */ __exportAll({
7282
8353
  Transition: () => Transition,
7283
8354
  UnderlineStyle: () => UnderlineStyle,
7284
8355
  VideoFrame: () => VideoFrame,
8356
+ WEB_PR: () => WEB_PR,
8357
+ WEDGE: () => WEDGE,
8358
+ WHEEL: () => WHEEL,
8359
+ WIPE: () => WIPE,
8360
+ ZOOM: () => ZOOM,
7285
8361
  buildFill: () => buildFill,
7286
8362
  coerceChild: () => coerceChild,
7287
8363
  convertEmuToInches: () => convertEmuToInches,
@@ -7292,16 +8368,25 @@ __reExport(/* @__PURE__ */ __exportAll({
7292
8368
  convertPointsToEmu: () => convertPointsToEmu,
7293
8369
  createBevel: () => createBevel,
7294
8370
  createBottomBevel: () => createBottomBevel,
8371
+ createBuildDiagram: () => createBuildDiagram,
8372
+ createBuildGraphic: () => createBuildGraphic,
8373
+ createBuildOleChart: () => createBuildOleChart,
8374
+ createBuildParagraph: () => createBuildParagraph,
7295
8375
  createColorElement: () => createColorElement,
7296
8376
  createColorTransforms: () => createColorTransforms,
7297
8377
  createEffectList: () => createEffectList,
8378
+ createExclusiveTiming: () => createExclusiveTiming,
7298
8379
  createGradientFill: () => createGradientFill,
7299
8380
  createGradientStop: () => createGradientStop,
8381
+ createKinsoku: () => createKinsoku,
7300
8382
  createOutline: () => createOutline,
7301
8383
  createOutlineCompat: () => createOutlineCompat,
8384
+ createOutlineViewProperties: () => createOutlineViewProperties,
8385
+ createOutlineViewSlideEntry: () => createOutlineViewSlideEntry,
7302
8386
  createPptxEffectList: () => createPptxEffectList,
7303
8387
  createScene3D: () => createScene3D,
7304
8388
  createShape3D: () => createShape3D,
8389
+ createSlideSyncProperties: () => createSlideSyncProperties,
7305
8390
  createTransformation: () => createTransformation,
7306
8391
  extractBlipFillMedia: () => extractBlipFillMedia,
7307
8392
  hashedId: () => hashedId,
@@ -7315,6 +8400,6 @@ __reExport(/* @__PURE__ */ __exportAll({
7315
8400
  uniqueUuid: () => uniqueUuid
7316
8401
  }), util_exports);
7317
8402
  //#endregion
7318
- export { AppProperties, AudioFrame, Background, BevelPresetType, BlipFill, Chart, ChartCollection, ChartSpace, CompoundLine, ConnectorShape, ContentTypes, CoreProperties, DateTimeField, DefaultNotesMaster, DefaultSlideLayout, DefaultSlideMaster, DefaultTheme, DrawingTable, EndParagraphRunProperties, Field, File, File as Presentation, GroupShape, GroupShapeProperties, GroupTransform2D, HeaderFooter, LineCap, LineJoin, LineShape, Media, NonVisualDrawingProperties, NonVisualPictureProperties, NonVisualShapeProperties, NotesSlide, Packer, Paragraph, ParagraphProperties, PatchType, PathShadeType, PenAlignment, Picture, PresentationWrapper, PresetDash, PresetGeometry, PresetMaterialType, ReflectionAlignment, Relationships, RunProperties, Shape, ShapeProperties, ShapeTree, Slide, SlideLayout, SlideNumberField, SlideSizePreset, SmartArt, StrikeStyle, Table, TableCell, TableCellProperties, TableProperties, TableRow, Text, TextBody, TextCapitalization, TextRun, TileFlipMode, Transform2D, Transition, UnderlineStyle, VideoFrame, buildFill, coerceChild, convertEmuToInches, convertEmuToPixels, convertEmuToPoints, convertInchesToEmu, convertPixelsToEmu, convertPointsToEmu, createBevel, createBottomBevel, createColorElement, createColorTransforms, createEffectList, createGradientFill, createGradientStop, createOutline, createOutlineCompat, createPptxEffectList, createScene3D, createShape3D, createTransformation, extractBlipFillMedia, hashedId, parseArchive, parsePptx, parsePresentation, patchPresentation, percentToTHousandths, uniqueId, uniqueNumericIdCreator, uniqueUuid };
8403
+ export { AppProperties, AudioFrame, BLD_AS_ONE, BLD_DGM, BLD_GRAPHIC, BLD_LST, BLD_OLE_CHART, BLD_P, BLD_SUB, BLINDS, BOLD, BOLD_ITALIC, BOOL_VAL, Background, BevelPresetType, BlipFill, CHECKER, CIRCLE, CLR_MRU, CLR_VAL, COMB, CONTENT_PART, CONTROL, CONTROLS, COVER, CUST_DATA, CUST_DATA_LST, CUST_SHOW, CUST_SHOW_LST, CUT, Chart, ChartCollection, ChartSpace, CompoundLine, ConnectorShape, ContentTypes, CoreProperties, DIAMOND, DISSOLVE, DateTimeField, DefaultHandoutMaster, DefaultNotesMaster, DefaultSlideLayout, DefaultSlideMaster, DefaultTheme, DrawingTable, EMBEDDED_FONT, EMBEDDED_FONT_LST, END_COND_LST, END_SND, END_SYNC, EXCL, EndParagraphRunProperties, FADE, FLT_VAL, FONT, FROM, Field, File, File as Presentation, GRAPHIC_EL, GUIDE, GroupShape, GroupShapeProperties, GroupTransform2D, HSL, HTML_PUB_PR, HeaderFooter, INK_TGT, INT_VAL, ITALIC, KINSOKU, LineCap, LineJoin, LineShape, MODIFY_VERIFIER, Media, NEWSFLASH, NOTES_VIEW_PR, NonVisualDrawingProperties, NonVisualPictureProperties, NonVisualShapeProperties, NotesSlide, OLE_CHART_EL, OUTLINE_VIEW_PR, PHOTO_ALBUM, PLUS, PRN_PR, PROGRESS, PULL, PUSH, Packer, Paragraph, ParagraphProperties, PatchType, PathShadeType, PenAlignment, Picture, PresentationWrapper, PresetDash, PresetGeometry, PresetMaterialType, RANDOM, RANDOM_BAR, REGULAR, RGB, RTN, R_CTR, ReflectionAlignment, Relationships, RunProperties, SLD_LST, SLD_SYNC_PR, SMART_TAGS, SND_AC, SND_TGT, SORTER_VIEW_PR, SPLIT, STRIPS, STR_VAL, STYLE, ST_SND, SUB_SP, SUB_TN_LST, Shape, ShapeProperties, ShapeTree, Slide, SlideLayout, SlideNumberField, SlideSizePreset, SmartArt, StrikeStyle, TAG, TAGS, TAG_LST, TMPL, TMPL_LST, TM_PCT, TN, Table, TableCell, TableCellProperties, TableProperties, TableRow, Text, TextBody, TextCapitalization, TextRun, TileFlipMode, Transform2D, Transition, UnderlineStyle, VideoFrame, WEB_PR, WEDGE, WHEEL, WIPE, ZOOM, buildFill, coerceChild, convertEmuToInches, convertEmuToPixels, convertEmuToPoints, convertInchesToEmu, convertPixelsToEmu, convertPointsToEmu, createBevel, createBottomBevel, createBuildDiagram, createBuildGraphic, createBuildOleChart, createBuildParagraph, createColorElement, createColorTransforms, createEffectList, createExclusiveTiming, createGradientFill, createGradientStop, createKinsoku, createOutline, createOutlineCompat, createOutlineViewProperties, createOutlineViewSlideEntry, createPptxEffectList, createScene3D, createShape3D, createSlideSyncProperties, createTransformation, extractBlipFillMedia, hashedId, parseArchive, parsePptx, parsePresentation, patchPresentation, percentToTHousandths, uniqueId, uniqueNumericIdCreator, uniqueUuid };
7319
8404
 
7320
8405
  //# sourceMappingURL=index.mjs.map