pptx-react-viewer 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/dist/{AiChatPanel-UCEK3ZTD.mjs → AiChatPanel-QJHUDIWT.mjs} +4 -4
  3. package/dist/AiChatPanel-QJHUDIWT.mjs.br +0 -0
  4. package/dist/AiChatPanel-QJHUDIWT.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-7UQA25FA.js → AiChatPanel-UFMSTNCB.js} +28 -28
  6. package/dist/AiChatPanel-UFMSTNCB.js.br +0 -0
  7. package/dist/AiChatPanel-UFMSTNCB.js.gz +0 -0
  8. package/dist/{Model3DScene-AI2JTBQM.mjs → Model3DScene-3GOC5HUS.mjs} +1 -1
  9. package/dist/Model3DScene-3GOC5HUS.mjs.br +0 -0
  10. package/dist/Model3DScene-3GOC5HUS.mjs.gz +0 -0
  11. package/dist/{Model3DScene-X3DS3ELB.js → Model3DScene-KXNJBAQD.js} +2 -2
  12. package/dist/{Model3DScene-X3DS3ELB.js.br → Model3DScene-KXNJBAQD.js.br} +0 -0
  13. package/dist/Model3DScene-KXNJBAQD.js.gz +0 -0
  14. package/dist/{chunk-UTI4CLYJ.js → chunk-7WWINBGF.js} +1133 -418
  15. package/dist/chunk-7WWINBGF.js.br +0 -0
  16. package/dist/chunk-7WWINBGF.js.gz +0 -0
  17. package/dist/{chunk-42XEZVUQ.js → chunk-AI6K5EAE.js} +1261 -1077
  18. package/dist/chunk-AI6K5EAE.js.br +0 -0
  19. package/dist/chunk-AI6K5EAE.js.gz +0 -0
  20. package/dist/{chunk-KAO5USPE.js → chunk-CSY422LU.js} +5 -5
  21. package/dist/chunk-CSY422LU.js.br +0 -0
  22. package/dist/chunk-CSY422LU.js.gz +0 -0
  23. package/dist/{chunk-3UWJWJCR.mjs → chunk-D3TZOCQP.mjs} +1118 -419
  24. package/dist/chunk-D3TZOCQP.mjs.br +0 -0
  25. package/dist/chunk-D3TZOCQP.mjs.gz +0 -0
  26. package/dist/{chunk-W5KLLGVH.js → chunk-I4D6JQOI.js} +25 -0
  27. package/dist/chunk-I4D6JQOI.js.br +0 -0
  28. package/dist/chunk-I4D6JQOI.js.gz +0 -0
  29. package/dist/{chunk-OBQ453H6.mjs → chunk-JQXN6PO7.mjs} +25 -0
  30. package/dist/chunk-JQXN6PO7.mjs.br +0 -0
  31. package/dist/chunk-JQXN6PO7.mjs.gz +0 -0
  32. package/dist/{chunk-RXYLPESV.mjs → chunk-LUHUYBGW.mjs} +201 -17
  33. package/dist/chunk-LUHUYBGW.mjs.br +0 -0
  34. package/dist/chunk-LUHUYBGW.mjs.gz +0 -0
  35. package/dist/{chunk-E7O4HTS5.js → chunk-OWTHF5N4.js} +197 -183
  36. package/dist/chunk-OWTHF5N4.js.br +0 -0
  37. package/dist/chunk-OWTHF5N4.js.gz +0 -0
  38. package/dist/{chunk-SKTZSG7Q.mjs → chunk-WCHKDZP6.mjs} +305 -47
  39. package/dist/chunk-WCHKDZP6.mjs.br +0 -0
  40. package/dist/chunk-WCHKDZP6.mjs.gz +0 -0
  41. package/dist/{chunk-PLDG3CXW.mjs → chunk-WNFHFFYE.mjs} +16 -2
  42. package/dist/chunk-WNFHFFYE.mjs.br +0 -0
  43. package/dist/chunk-WNFHFFYE.mjs.gz +0 -0
  44. package/dist/{chunk-YQJOCGOK.mjs → chunk-XMKLY2SE.mjs} +1 -1
  45. package/dist/chunk-XMKLY2SE.mjs.br +0 -0
  46. package/dist/chunk-XMKLY2SE.mjs.gz +0 -0
  47. package/dist/{chunk-Y7LI2JIR.js → chunk-YJKR7Z3X.js} +1103 -845
  48. package/dist/chunk-YJKR7Z3X.js.br +0 -0
  49. package/dist/chunk-YJKR7Z3X.js.gz +0 -0
  50. package/dist/i18n/de.cjs +23 -0
  51. package/dist/i18n/de.cjs.br +0 -0
  52. package/dist/i18n/de.cjs.gz +0 -0
  53. package/dist/i18n/de.mjs +23 -0
  54. package/dist/i18n/de.mjs.br +0 -0
  55. package/dist/i18n/de.mjs.gz +0 -0
  56. package/dist/i18n/es.cjs +23 -0
  57. package/dist/i18n/es.cjs.br +0 -0
  58. package/dist/i18n/es.cjs.gz +0 -0
  59. package/dist/i18n/es.mjs +23 -0
  60. package/dist/i18n/es.mjs.br +0 -0
  61. package/dist/i18n/es.mjs.gz +0 -0
  62. package/dist/i18n/fr.cjs +23 -0
  63. package/dist/i18n/fr.cjs.br +0 -0
  64. package/dist/i18n/fr.cjs.gz +0 -0
  65. package/dist/i18n/fr.mjs +23 -0
  66. package/dist/i18n/fr.mjs.br +0 -0
  67. package/dist/i18n/fr.mjs.gz +0 -0
  68. package/dist/i18n/zh-CN.cjs +23 -0
  69. package/dist/i18n/zh-CN.cjs.br +0 -0
  70. package/dist/i18n/zh-CN.cjs.gz +0 -0
  71. package/dist/i18n/zh-CN.mjs +23 -0
  72. package/dist/i18n/zh-CN.mjs.br +0 -0
  73. package/dist/i18n/zh-CN.mjs.gz +0 -0
  74. package/dist/i18n.js +4 -4
  75. package/dist/i18n.js.br +0 -0
  76. package/dist/i18n.js.gz +0 -0
  77. package/dist/i18n.mjs +1 -1
  78. package/dist/i18n.mjs.br +0 -0
  79. package/dist/i18n.mjs.gz +0 -0
  80. package/dist/index.d.ts +71 -7
  81. package/dist/index.js +49 -49
  82. package/dist/index.js.br +0 -0
  83. package/dist/index.js.gz +0 -0
  84. package/dist/index.mjs +6 -6
  85. package/dist/index.mjs.br +0 -0
  86. package/dist/index.mjs.gz +0 -0
  87. package/dist/internals.d.ts +173 -43
  88. package/dist/internals.js +105 -105
  89. package/dist/internals.js.br +0 -0
  90. package/dist/internals.js.gz +0 -0
  91. package/dist/internals.mjs +4 -4
  92. package/dist/internals.mjs.br +0 -0
  93. package/dist/internals.mjs.gz +0 -0
  94. package/dist/pptx-viewer.css +1 -1
  95. package/dist/pptx-viewer.css.br +0 -0
  96. package/dist/pptx-viewer.css.gz +0 -0
  97. package/dist/viewer/index.d.ts +49 -7
  98. package/dist/viewer/index.js +27 -27
  99. package/dist/viewer/index.js.br +0 -0
  100. package/dist/viewer/index.js.gz +0 -0
  101. package/dist/viewer/index.mjs +6 -6
  102. package/dist/viewer/index.mjs.br +0 -0
  103. package/dist/viewer/index.mjs.gz +0 -0
  104. package/package.json +1 -1
  105. package/dist/AiChatPanel-7UQA25FA.js.br +0 -0
  106. package/dist/AiChatPanel-7UQA25FA.js.gz +0 -0
  107. package/dist/AiChatPanel-UCEK3ZTD.mjs.br +0 -0
  108. package/dist/AiChatPanel-UCEK3ZTD.mjs.gz +0 -0
  109. package/dist/Model3DScene-AI2JTBQM.mjs.br +0 -0
  110. package/dist/Model3DScene-AI2JTBQM.mjs.gz +0 -0
  111. package/dist/Model3DScene-X3DS3ELB.js.gz +0 -0
  112. package/dist/chunk-3UWJWJCR.mjs.br +0 -0
  113. package/dist/chunk-3UWJWJCR.mjs.gz +0 -0
  114. package/dist/chunk-42XEZVUQ.js.br +0 -0
  115. package/dist/chunk-42XEZVUQ.js.gz +0 -0
  116. package/dist/chunk-E7O4HTS5.js.br +0 -0
  117. package/dist/chunk-E7O4HTS5.js.gz +0 -0
  118. package/dist/chunk-KAO5USPE.js.br +0 -0
  119. package/dist/chunk-KAO5USPE.js.gz +0 -0
  120. package/dist/chunk-OBQ453H6.mjs.br +0 -0
  121. package/dist/chunk-OBQ453H6.mjs.gz +0 -0
  122. package/dist/chunk-PLDG3CXW.mjs.br +0 -0
  123. package/dist/chunk-PLDG3CXW.mjs.gz +0 -0
  124. package/dist/chunk-RXYLPESV.mjs.br +0 -0
  125. package/dist/chunk-RXYLPESV.mjs.gz +0 -0
  126. package/dist/chunk-SKTZSG7Q.mjs.br +0 -0
  127. package/dist/chunk-SKTZSG7Q.mjs.gz +0 -0
  128. package/dist/chunk-UTI4CLYJ.js.br +0 -0
  129. package/dist/chunk-UTI4CLYJ.js.gz +0 -0
  130. package/dist/chunk-W5KLLGVH.js.br +0 -0
  131. package/dist/chunk-W5KLLGVH.js.gz +0 -0
  132. package/dist/chunk-Y7LI2JIR.js.br +0 -0
  133. package/dist/chunk-Y7LI2JIR.js.gz +0 -0
  134. package/dist/chunk-YQJOCGOK.mjs.br +0 -0
  135. package/dist/chunk-YQJOCGOK.mjs.gz +0 -0
@@ -8759,6 +8759,8 @@ var init_table_style_edit = __esm({
8759
8759
  }
8760
8760
  });
8761
8761
  var TRANSITION_VALID_DIRECTIONS;
8762
+ var TRANSITION_PATTERN_OPTIONS;
8763
+ var TRANSITION_THRUBLK_TYPES;
8762
8764
  var init_transition = __esm({
8763
8765
  "src/core/types/transition.ts"() {
8764
8766
  TRANSITION_VALID_DIRECTIONS = {
@@ -8772,8 +8774,40 @@ var init_transition = __esm({
8772
8774
  blinds: ["horz", "vert"],
8773
8775
  checker: ["horz", "vert"],
8774
8776
  comb: ["horz", "vert"],
8775
- randomBar: ["horz", "vert"]
8776
- };
8777
+ randomBar: ["horz", "vert"],
8778
+ // p14 (Office 2010+) extended transitions, COM-verified (see doc comment above).
8779
+ vortex: ["l", "u", "r", "d"],
8780
+ ripple: ["lu", "ld", "ru", "rd"],
8781
+ glitter: ["l", "u", "r", "d"],
8782
+ gallery: ["l", "r"],
8783
+ conveyor: ["l", "r"],
8784
+ ferris: ["l", "r"],
8785
+ switch: ["l", "r"],
8786
+ flip: ["l", "r"],
8787
+ shred: ["in", "out"],
8788
+ cube: ["l", "u", "r", "d"],
8789
+ rotate: ["l", "u", "r", "d"],
8790
+ box: ["l", "u", "r", "d"],
8791
+ orbit: ["l", "u", "r", "d"],
8792
+ pan: ["l", "u", "r", "d"],
8793
+ // p15 (Office 2013+) preset transitions: only the eight `P15_INVX_PRESETS`
8794
+ // (see `p15-transition-parser`) have an effect-options axis at all, and it
8795
+ // is a two-state `invX` toggle mapped onto `l`/`r` (curtains/prestige/
8796
+ // fracture/crush have no direction axis in PowerPoint at all).
8797
+ fallOver: ["l", "r"],
8798
+ drape: ["l", "r"],
8799
+ wind: ["l", "r"],
8800
+ peelOff: ["l", "r"],
8801
+ pageCurlSingle: ["l", "r"],
8802
+ pageCurlDouble: ["l", "r"],
8803
+ airplane: ["l", "r"],
8804
+ origami: ["l", "r"]
8805
+ };
8806
+ TRANSITION_PATTERN_OPTIONS = {
8807
+ glitter: ["diamond", "hexagon"],
8808
+ shred: ["strip", "rectangle"]
8809
+ };
8810
+ TRANSITION_THRUBLK_TYPES = /* @__PURE__ */ new Set(["cut", "fade"]);
8777
8811
  }
8778
8812
  });
8779
8813
  var init_animation = __esm({
@@ -54560,7 +54594,11 @@ function readP14Details(localName29, value) {
54560
54594
  if (detail) {
54561
54595
  const rawDir = String(detail["@_dir"] || "").trim();
54562
54596
  if (rawDir.length > 0) {
54563
- direction = rawDir;
54597
+ if (P14_DIR_IS_ORIENTATION_TYPE.has(localName29) && (rawDir === "horz" || rawDir === "vert")) {
54598
+ orient = rawDir;
54599
+ } else {
54600
+ direction = rawDir;
54601
+ }
54564
54602
  }
54565
54603
  const rawOrient = String(detail["@_orient"] || "").trim();
54566
54604
  if (rawOrient === "horz" || rawOrient === "vert") {
@@ -54605,6 +54643,7 @@ function parseP14FromExtLst(extLstNode, xmlLookupService, getXmlLocalName) {
54605
54643
  return void 0;
54606
54644
  }
54607
54645
  var P14_TRANSITION_TYPES;
54646
+ var P14_DIR_IS_ORIENTATION_TYPE;
54608
54647
  var init_p14_transition_parser = __esm({
54609
54648
  "src/core/services/p14-transition-parser.ts"() {
54610
54649
  init_p14_prism_family();
@@ -54636,6 +54675,7 @@ var init_p14_transition_parser = __esm({
54636
54675
  // through the p14 path", so leaving it out would write `<p:box/>`.
54637
54676
  "box"
54638
54677
  ]);
54678
+ P14_DIR_IS_ORIENTATION_TYPE = /* @__PURE__ */ new Set(["doors", "window"]);
54639
54679
  }
54640
54680
  });
54641
54681
  function chartExPrefixCapabilities() {
@@ -75997,10 +76037,6 @@ var init_PptxDocumentPropertiesUpdater = __esm({
75997
76037
  "#text": nowIso
75998
76038
  };
75999
76039
  }
76000
- const lastModifiedBy = this.extractXmlNodeText(coreProps["cp:lastModifiedBy"]);
76001
- if (!lastModifiedBy) {
76002
- coreProps["cp:lastModifiedBy"] = "pptx";
76003
- }
76004
76040
  this.ensureDatePropertyNamespaces(coreProps);
76005
76041
  coreData["cp:coreProperties"] = coreProps;
76006
76042
  this.context.zip.file("docProps/core.xml", this.context.builder.build(coreData));
@@ -78901,6 +78937,7 @@ var init_PptxSlideLoaderService = __esm({
78901
78937
  );
78902
78938
  if (chartData) {
78903
78939
  element.chartData = chartData;
78940
+ params.rememberChartDataBaseline(chartData);
78904
78941
  }
78905
78942
  } catch {
78906
78943
  }
@@ -80253,6 +80290,97 @@ var init_native_animation_timing_walk = __esm({
80253
80290
  init_native_animation_timing_node_extract();
80254
80291
  }
80255
80292
  });
80293
+ function optionalBoolean2(value) {
80294
+ const valueToken = value === void 0 || value === null ? "" : String(value).trim().toLowerCase();
80295
+ if (valueToken === "1" || valueToken === "true") {
80296
+ return true;
80297
+ }
80298
+ if (valueToken === "0" || valueToken === "false") {
80299
+ return false;
80300
+ }
80301
+ return void 0;
80302
+ }
80303
+ function readPrstTrans(value) {
80304
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
80305
+ return void 0;
80306
+ }
80307
+ const detail = value;
80308
+ const prst = String(detail["@_prst"] || "").trim();
80309
+ if (!P15_TRANSITION_PRESETS.has(prst)) {
80310
+ return void 0;
80311
+ }
80312
+ return {
80313
+ type: prst,
80314
+ invX: optionalBoolean2(detail["@_invX"]),
80315
+ invY: optionalBoolean2(detail["@_invY"])
80316
+ };
80317
+ }
80318
+ function parseP15DirectChild(transitionNode, getXmlLocalName) {
80319
+ for (const [key2, value] of Object.entries(transitionNode)) {
80320
+ if (key2.startsWith("@_")) {
80321
+ continue;
80322
+ }
80323
+ if (getXmlLocalName(key2) !== "prstTrans") {
80324
+ continue;
80325
+ }
80326
+ const result = readPrstTrans(value);
80327
+ if (result) {
80328
+ return result;
80329
+ }
80330
+ }
80331
+ return void 0;
80332
+ }
80333
+ function parseP15FromExtLst(extLstNode, xmlLookupService, getXmlLocalName) {
80334
+ const extEntries = xmlLookupService.getChildrenArrayByLocalName(extLstNode, "ext");
80335
+ for (const ext of extEntries) {
80336
+ if (!ext) {
80337
+ continue;
80338
+ }
80339
+ for (const [key2, value] of Object.entries(ext)) {
80340
+ if (key2.startsWith("@_")) {
80341
+ continue;
80342
+ }
80343
+ if (getXmlLocalName(key2) !== "prstTrans") {
80344
+ continue;
80345
+ }
80346
+ const result = readPrstTrans(value);
80347
+ if (result) {
80348
+ return result;
80349
+ }
80350
+ }
80351
+ }
80352
+ return void 0;
80353
+ }
80354
+ var P15_TRANSITION_PRESETS;
80355
+ var P15_INVX_PRESETS;
80356
+ var init_p15_transition_parser = __esm({
80357
+ "src/core/services/p15-transition-parser.ts"() {
80358
+ P15_TRANSITION_PRESETS = /* @__PURE__ */ new Set([
80359
+ "fallOver",
80360
+ "drape",
80361
+ "curtains",
80362
+ "wind",
80363
+ "prestige",
80364
+ "fracture",
80365
+ "crush",
80366
+ "peelOff",
80367
+ "pageCurlDouble",
80368
+ "pageCurlSingle",
80369
+ "airplane",
80370
+ "origami"
80371
+ ]);
80372
+ P15_INVX_PRESETS = /* @__PURE__ */ new Set([
80373
+ "fallOver",
80374
+ "drape",
80375
+ "wind",
80376
+ "peelOff",
80377
+ "pageCurlSingle",
80378
+ "pageCurlDouble",
80379
+ "airplane",
80380
+ "origami"
80381
+ ]);
80382
+ }
80383
+ });
80256
80384
  function resolveSlideTimingNode(slideRoot) {
80257
80385
  const direct = slideRoot?.["p:timing"];
80258
80386
  if (direct && typeof direct === "object" && !Array.isArray(direct)) {
@@ -80310,7 +80438,8 @@ function preservedP14ChildKey(node, transitionType, getXmlLocalName) {
80310
80438
  }
80311
80439
  return void 0;
80312
80440
  }
80313
- function preservedP15ChildKey(node, transitionType, getXmlLocalName) {
80441
+ function preservedP15ChildKey(node, transitionType, getXmlLocalName, direction) {
80442
+ const wantsInvX = P15_INVX_PRESETS.has(transitionType) && direction === "r";
80314
80443
  for (const [key2, value] of Object.entries(node)) {
80315
80444
  if (key2.startsWith("@_") || getXmlLocalName(key2) !== "prstTrans") {
80316
80445
  continue;
@@ -80318,7 +80447,12 @@ function preservedP15ChildKey(node, transitionType, getXmlLocalName) {
80318
80447
  if (!value || typeof value !== "object" || Array.isArray(value)) {
80319
80448
  continue;
80320
80449
  }
80321
- if (String(value["@_prst"] || "").trim() === transitionType) {
80450
+ const detail = value;
80451
+ if (String(detail["@_prst"] || "").trim() !== transitionType) {
80452
+ continue;
80453
+ }
80454
+ const hasInvX = String(detail["@_invX"] || "").trim() === "1";
80455
+ if (hasInvX === wantsInvX) {
80322
80456
  return key2;
80323
80457
  }
80324
80458
  }
@@ -80341,6 +80475,7 @@ var init_slide_transition_envelope = __esm({
80341
80475
  init_mc_capabilities();
80342
80476
  init_p14_prism_family();
80343
80477
  init_p14_transition_parser();
80478
+ init_p15_transition_parser();
80344
80479
  init_PptxXmlLookupService();
80345
80480
  defaultLookup = new PptxXmlLookupService();
80346
80481
  }
@@ -80438,86 +80573,6 @@ var init_PptxNativeAnimationService = __esm({
80438
80573
  };
80439
80574
  }
80440
80575
  });
80441
- function optionalBoolean2(value) {
80442
- const valueToken = value === void 0 || value === null ? "" : String(value).trim().toLowerCase();
80443
- if (valueToken === "1" || valueToken === "true") {
80444
- return true;
80445
- }
80446
- if (valueToken === "0" || valueToken === "false") {
80447
- return false;
80448
- }
80449
- return void 0;
80450
- }
80451
- function readPrstTrans(value) {
80452
- if (!value || typeof value !== "object" || Array.isArray(value)) {
80453
- return void 0;
80454
- }
80455
- const detail = value;
80456
- const prst = String(detail["@_prst"] || "").trim();
80457
- if (!P15_TRANSITION_PRESETS.has(prst)) {
80458
- return void 0;
80459
- }
80460
- return {
80461
- type: prst,
80462
- invX: optionalBoolean2(detail["@_invX"]),
80463
- invY: optionalBoolean2(detail["@_invY"])
80464
- };
80465
- }
80466
- function parseP15DirectChild(transitionNode, getXmlLocalName) {
80467
- for (const [key2, value] of Object.entries(transitionNode)) {
80468
- if (key2.startsWith("@_")) {
80469
- continue;
80470
- }
80471
- if (getXmlLocalName(key2) !== "prstTrans") {
80472
- continue;
80473
- }
80474
- const result = readPrstTrans(value);
80475
- if (result) {
80476
- return result;
80477
- }
80478
- }
80479
- return void 0;
80480
- }
80481
- function parseP15FromExtLst(extLstNode, xmlLookupService, getXmlLocalName) {
80482
- const extEntries = xmlLookupService.getChildrenArrayByLocalName(extLstNode, "ext");
80483
- for (const ext of extEntries) {
80484
- if (!ext) {
80485
- continue;
80486
- }
80487
- for (const [key2, value] of Object.entries(ext)) {
80488
- if (key2.startsWith("@_")) {
80489
- continue;
80490
- }
80491
- if (getXmlLocalName(key2) !== "prstTrans") {
80492
- continue;
80493
- }
80494
- const result = readPrstTrans(value);
80495
- if (result) {
80496
- return result;
80497
- }
80498
- }
80499
- }
80500
- return void 0;
80501
- }
80502
- var P15_TRANSITION_PRESETS;
80503
- var init_p15_transition_parser = __esm({
80504
- "src/core/services/p15-transition-parser.ts"() {
80505
- P15_TRANSITION_PRESETS = /* @__PURE__ */ new Set([
80506
- "fallOver",
80507
- "drape",
80508
- "curtains",
80509
- "wind",
80510
- "prestige",
80511
- "fracture",
80512
- "crush",
80513
- "peelOff",
80514
- "pageCurlDouble",
80515
- "pageCurlSingle",
80516
- "airplane",
80517
- "origami"
80518
- ]);
80519
- }
80520
- });
80521
80576
  function normalizeMorphOption(value) {
80522
80577
  const candidate = token(value);
80523
80578
  return MORPH_OPTIONS.has(candidate) ? candidate : void 0;
@@ -80549,9 +80604,13 @@ function parseTransitionDetails(node, localName29) {
80549
80604
  continue;
80550
80605
  }
80551
80606
  const detail = value;
80552
- const direction = token(detail["@_dir"]);
80553
- if (direction) {
80554
- result.direction = direction;
80607
+ const rawDir = token(detail["@_dir"]);
80608
+ if (rawDir) {
80609
+ if (DIR_IS_ORIENTATION_TYPE.has(name) && (rawDir === "horz" || rawDir === "vert")) {
80610
+ result.orient = rawDir;
80611
+ } else {
80612
+ result.direction = rawDir;
80613
+ }
80555
80614
  }
80556
80615
  const orient = token(detail["@_orient"]);
80557
80616
  if (orient === "horz" || orient === "vert") {
@@ -80615,11 +80674,15 @@ function createPreservedTransitionNode(raw, localName29) {
80615
80674
  }
80616
80675
  function buildStandardTransitionChild(transition) {
80617
80676
  const child262 = {};
80618
- if (transition.direction) {
80619
- child262["@_dir"] = transition.direction;
80620
- }
80621
- if (transition.orient) {
80622
- child262["@_orient"] = transition.orient;
80677
+ if (DIR_IS_ORIENTATION_TYPE.has(transition.type) && transition.orient) {
80678
+ child262["@_dir"] = transition.orient;
80679
+ } else {
80680
+ if (transition.direction) {
80681
+ child262["@_dir"] = transition.direction;
80682
+ }
80683
+ if (transition.orient) {
80684
+ child262["@_orient"] = transition.orient;
80685
+ }
80623
80686
  }
80624
80687
  if (validUnsignedInteger(transition.spokes, 1)) {
80625
80688
  child262["@_spokes"] = String(transition.spokes);
@@ -80726,6 +80789,7 @@ function validUnsignedInteger(value, min = 0) {
80726
80789
  var STANDARD_TRANSITION_TYPES;
80727
80790
  var SPEEDS;
80728
80791
  var UINT_MAX2;
80792
+ var DIR_IS_ORIENTATION_TYPE;
80729
80793
  var MORPH_OPTIONS;
80730
80794
  var init_slide_transition_xml = __esm({
80731
80795
  "src/core/services/slide-transition-xml.ts"() {
@@ -80755,6 +80819,7 @@ var init_slide_transition_xml = __esm({
80755
80819
  ]);
80756
80820
  SPEEDS = /* @__PURE__ */ new Set(["slow", "med", "fast"]);
80757
80821
  UINT_MAX2 = 4294967295;
80822
+ DIR_IS_ORIENTATION_TYPE = /* @__PURE__ */ new Set(["blinds", "checker", "comb", "randomBar"]);
80758
80823
  MORPH_OPTIONS = /* @__PURE__ */ new Set(["byObject", "byWord", "byChar"]);
80759
80824
  }
80760
80825
  });
@@ -80841,13 +80906,17 @@ function buildP14DirectChild(transitionType, details, context) {
80841
80906
  delete node["@_isInverted"];
80842
80907
  }
80843
80908
  const direction = String(details.direction ?? "").trim();
80844
- if (P14_REQUIRED_LEFT_RIGHT.has(elementName)) {
80845
- node["@_dir"] = direction === "r" ? "r" : "l";
80846
- } else if (direction.length > 0) {
80847
- node["@_dir"] = direction;
80848
- }
80849
- if (details.orient) {
80850
- node["@_orient"] = details.orient;
80909
+ if (P14_DIR_IS_ORIENTATION_TYPE.has(elementName) && details.orient) {
80910
+ node["@_dir"] = details.orient;
80911
+ } else {
80912
+ if (P14_REQUIRED_LEFT_RIGHT.has(elementName)) {
80913
+ node["@_dir"] = direction === "r" ? "r" : "l";
80914
+ } else if (direction.length > 0) {
80915
+ node["@_dir"] = direction;
80916
+ }
80917
+ if (details.orient) {
80918
+ node["@_orient"] = details.orient;
80919
+ }
80851
80920
  }
80852
80921
  if (details.pattern) {
80853
80922
  node["@_pattern"] = details.pattern;
@@ -80863,15 +80932,20 @@ function buildP14DirectChild(transitionType, details, context) {
80863
80932
  }
80864
80933
  return { key: `p14:${elementName}`, node };
80865
80934
  }
80866
- function buildP15DirectChild(transitionType, context) {
80867
- return {
80868
- key: "p15:prstTrans",
80869
- node: {
80870
- "@_xmlns:p15": P15_NAMESPACE_URI2,
80871
- ...inheritedAttributes(findInExtensions(context, "prstTrans")),
80872
- "@_prst": transitionType
80873
- }
80935
+ function buildP15DirectChild(transitionType, context, direction) {
80936
+ const node = {
80937
+ "@_xmlns:p15": P15_NAMESPACE_URI2,
80938
+ ...inheritedAttributes(findInExtensions(context, "prstTrans")),
80939
+ "@_prst": transitionType
80874
80940
  };
80941
+ if (P15_INVX_PRESETS.has(transitionType)) {
80942
+ if (direction === "r") {
80943
+ node["@_invX"] = "1";
80944
+ } else {
80945
+ delete node["@_invX"];
80946
+ }
80947
+ }
80948
+ return { key: "p15:prstTrans", node };
80875
80949
  }
80876
80950
  function buildMorphDirectChild(morphOption, context) {
80877
80951
  const node = {
@@ -80900,6 +80974,8 @@ var P14_REQUIRED_LEFT_RIGHT;
80900
80974
  var init_transition_extension_child = __esm({
80901
80975
  "src/core/services/transition-extension-child.ts"() {
80902
80976
  init_p14_prism_family();
80977
+ init_p14_transition_parser();
80978
+ init_p15_transition_parser();
80903
80979
  P14_NAMESPACE_URI = "http://schemas.microsoft.com/office/powerpoint/2010/main";
80904
80980
  P15_NAMESPACE_URI2 = "http://schemas.microsoft.com/office/powerpoint/2012/main";
80905
80981
  P159_NAMESPACE_URI = "http://schemas.microsoft.com/office/powerpoint/2015/09/main";
@@ -80947,11 +81023,14 @@ var init_PptxSlideTransitionService = __esm({
80947
81023
  const p15Direct = p14Direct ? void 0 : parseP15DirectChild(transitionNode, this.getXmlLocalName);
80948
81024
  if (p14Direct) {
80949
81025
  transitionType = p14Direct.type;
80950
- direction = p14Direct.direction ?? direction;
80951
- orient = p14Direct.orient ?? orient;
80952
- pattern = p14Direct.pattern ?? pattern;
81026
+ direction = p14Direct.direction;
81027
+ orient = p14Direct.orient;
81028
+ pattern = p14Direct.pattern;
80953
81029
  } else if (p15Direct) {
80954
81030
  transitionType = p15Direct.type;
81031
+ if (p15Direct.invX) {
81032
+ direction = "r";
81033
+ }
80955
81034
  }
80956
81035
  }
80957
81036
  if (rawExtLst && transitionType === "cut") {
@@ -80970,6 +81049,9 @@ var init_PptxSlideTransitionService = __esm({
80970
81049
  }
80971
81050
  } else if (p15Result) {
80972
81051
  transitionType = p15Result.type;
81052
+ if (p15Result.invX) {
81053
+ direction = "r";
81054
+ }
80973
81055
  } else {
80974
81056
  const morphResult = parseMorphFromExtLst(
80975
81057
  rawExtLst,
@@ -81009,7 +81091,7 @@ var init_PptxSlideTransitionService = __esm({
81009
81091
  const isMorphType = transitionType === "morph";
81010
81092
  const node = createPreservedTransitionNode(transition.rawTransition, this.getXmlLocalName);
81011
81093
  const p14ChildKey = isP14Type ? preservedP14ChildKey(node, transitionType, this.getXmlLocalName) : void 0;
81012
- const p15ChildKey = isP15Type ? preservedP15ChildKey(node, transitionType, this.getXmlLocalName) : void 0;
81094
+ const p15ChildKey = isP15Type ? preservedP15ChildKey(node, transitionType, this.getXmlLocalName, transition.direction) : void 0;
81013
81095
  pruneDirectExtensionChildren(node, this.getXmlLocalName, p14ChildKey ?? p15ChildKey);
81014
81096
  const extensionContext = {
81015
81097
  rawExtLst: transition.rawExtLst,
@@ -81033,7 +81115,7 @@ var init_PptxSlideTransitionService = __esm({
81033
81115
  }
81034
81116
  } else if (isP15Type) {
81035
81117
  if (!p15ChildKey) {
81036
- const child262 = buildP15DirectChild(transitionType, extensionContext);
81118
+ const child262 = buildP15DirectChild(transitionType, extensionContext, transition.direction);
81037
81119
  node[child262.key] = child262.node;
81038
81120
  }
81039
81121
  } else if (isMorphType) {
@@ -99432,9 +99514,19 @@ function applyBulletProperties(paragraphProps, bulletInfo) {
99432
99514
  if (bulletInfo.fontInherit) {
99433
99515
  paragraphProps["a:buFontTx"] = {};
99434
99516
  } else if (bulletInfo.fontFamily) {
99435
- paragraphProps["a:buFont"] = {
99517
+ const buFont = {
99436
99518
  "@_typeface": bulletInfo.fontFamily
99437
99519
  };
99520
+ if (bulletInfo.fontPanose) {
99521
+ buFont["@_panose"] = bulletInfo.fontPanose;
99522
+ }
99523
+ if (bulletInfo.fontPitchFamily !== void 0) {
99524
+ buFont["@_pitchFamily"] = String(bulletInfo.fontPitchFamily);
99525
+ }
99526
+ if (bulletInfo.fontCharset !== void 0) {
99527
+ buFont["@_charset"] = String(bulletInfo.fontCharset);
99528
+ }
99529
+ paragraphProps["a:buFont"] = buFont;
99438
99530
  }
99439
99531
  if (bulletInfo.none) {
99440
99532
  paragraphProps["a:buNone"] = {};
@@ -100869,6 +100961,20 @@ var init_PptxHandlerRuntimeState = __esm({
100869
100961
  * @see fingerprintSlide in `./slide-fingerprint`
100870
100962
  */
100871
100963
  savedSlideFingerprints = /* @__PURE__ */ new Map();
100964
+ /**
100965
+ * `chartData` exactly as it stood right after `enrichChartData` parsed it,
100966
+ * serialized to JSON and keyed by `chartPartPath`. The save pipeline used
100967
+ * to re-serialize EVERY chart part on any slide rewrite regardless of
100968
+ * whether the chart itself was touched, which materializes the load-time
100969
+ * resolved model back into the file: an inherited title font/color gets
100970
+ * pinned onto the title run, radar series colours that were following the
100971
+ * palette cycle get pinned per-point, and fields this engine does not
100972
+ * model on `PptxChartData` (e.g. a chartex series' `cx:f` formula or its
100973
+ * `uniqueId`) are silently dropped because the rebuild only knows what it
100974
+ * modeled. Comparing the current `chartData` against this baseline lets an
100975
+ * untouched chart part pass through byte-for-byte instead.
100976
+ */
100977
+ chartDataBaselines = /* @__PURE__ */ new Map();
100872
100978
  /** Per-slide relationship maps: slide path -> (rId -> target path). */
100873
100979
  slideRelsMap = /* @__PURE__ */ new Map();
100874
100980
  /** Tracks relationship IDs with TargetMode="External" per slide/part path. */
@@ -101755,9 +101861,7 @@ var init_PptxHandlerRuntimeElementActions = __esm({
101755
101861
  );
101756
101862
  rId = resolveHyperlinkRelationshipId(action.url, forceExternal) ?? void 0;
101757
101863
  }
101758
- if (rId) {
101759
- node["@_r:id"] = rId;
101760
- }
101864
+ node["@_r:id"] = rId ?? "";
101761
101865
  if (action.action) {
101762
101866
  node["@_action"] = action.action;
101763
101867
  }
@@ -103889,7 +103993,7 @@ var init_PptxHandlerRuntimeSaveSlideUtils = __esm({
103889
103993
  };
103890
103994
  }
103891
103995
  });
103892
- function buildTextRunEffectListXml(style) {
103996
+ function buildTextRunEffectListXml(style, parseColor) {
103893
103997
  const hasTextShadow = Boolean(style.textShadowColor) || typeof style.textShadowBlur === "number" && style.textShadowBlur > 0;
103894
103998
  const hasTextInnerShadow = Boolean(style.textInnerShadowColor) || typeof style.textInnerShadowBlur === "number" && style.textInnerShadowBlur > 0;
103895
103999
  const hasTextPresetShadow = Boolean(style.textPresetShadowName);
@@ -103916,7 +104020,7 @@ function buildTextRunEffectListXml(style) {
103916
104020
  effectLst["a:prstShdw"] = buildPresetShadowNode(style);
103917
104021
  }
103918
104022
  if (hasTextGlow) {
103919
- effectLst["a:glow"] = buildGlowNode(style);
104023
+ effectLst["a:glow"] = buildGlowNode(style, parseColor);
103920
104024
  }
103921
104025
  if (hasTextReflection) {
103922
104026
  effectLst["a:reflection"] = buildReflectionNode(style);
@@ -104003,10 +104107,18 @@ function buildPresetShadowNode(style) {
104003
104107
  }
104004
104108
  return node;
104005
104109
  }
104006
- function buildGlowNode(style) {
104110
+ function buildGlowNode(style, parseColor) {
104111
+ const fallbackHex = style.textGlowColor || "#ffff00";
104112
+ const resolvedOriginal = style.textGlowColorXml ? parseColor?.(style.textGlowColorXml) : void 0;
104007
104113
  return {
104008
104114
  "@_rad": String(Math.round((style.textGlowRadius ?? 6) * EMU_PER_PX9)),
104009
- "a:srgbClr": buildShadowColorNode(style.textGlowColor || "#ffff00", style.textGlowOpacity)
104115
+ ...serializeColorChoiceWithRef(
104116
+ style.textGlowColorRef,
104117
+ style.textGlowColorXml,
104118
+ resolvedOriginal,
104119
+ fallbackHex,
104120
+ style.textGlowOpacity
104121
+ )
104010
104122
  };
104011
104123
  }
104012
104124
  function buildReflectionNode(style) {
@@ -104076,6 +104188,7 @@ function buildClrChangeNode(style) {
104076
104188
  var EMU_PER_PX9;
104077
104189
  var init_text_run_effect_xml_builder = __esm({
104078
104190
  "src/core/core/runtime/text-run-effect-xml-builder.ts"() {
104191
+ init_color_xml_preservation();
104079
104192
  init_positive_fixed_angle();
104080
104193
  EMU_PER_PX9 = 9525;
104081
104194
  }
@@ -104276,7 +104389,10 @@ var init_PptxHandlerRuntimeSaveRunProperties = __esm({
104276
104389
  }
104277
104390
  runProps["a:pattFill"] = pattFill;
104278
104391
  }
104279
- const textEffectLst = buildTextRunEffectListXml(style);
104392
+ const textEffectLst = buildTextRunEffectListXml(
104393
+ style,
104394
+ (colorNode) => this.parseColor(colorNode)
104395
+ );
104280
104396
  if (textEffectLst) {
104281
104397
  runProps["a:effectLst"] = textEffectLst;
104282
104398
  }
@@ -104414,6 +104530,9 @@ var init_PptxHandlerRuntimeSaveRunProperties = __esm({
104414
104530
  if (style.hyperlinkSoundXml && typeof style.hyperlinkSoundXml === "object") {
104415
104531
  hlinkNode["a:snd"] = style.hyperlinkSoundXml;
104416
104532
  }
104533
+ if (style.hyperlinkExtensionXml && typeof style.hyperlinkExtensionXml === "object") {
104534
+ hlinkNode["a:extLst"] = style.hyperlinkExtensionXml;
104535
+ }
104417
104536
  }
104418
104537
  };
104419
104538
  }
@@ -105559,6 +105678,10 @@ var init_PptxHandlerRuntimeSaveImageEffects = __esm({
105559
105678
  if (!blipFill) {
105560
105679
  return;
105561
105680
  }
105681
+ const hasCropOpinion = element.cropLeft !== void 0 || element.cropTop !== void 0 || element.cropRight !== void 0 || element.cropBottom !== void 0;
105682
+ if (!hasCropOpinion) {
105683
+ return;
105684
+ }
105562
105685
  const srcRect = buildSrcRectXml(element);
105563
105686
  if (!srcRect) {
105564
105687
  delete blipFill["a:srcRect"];
@@ -105867,7 +105990,56 @@ var init_PptxHandlerRuntimeTextStyleUtils = __esm({
105867
105990
  "align",
105868
105991
  "vAlign",
105869
105992
  "textDirection",
105870
- "columnCount"
105993
+ "columnCount",
105994
+ // Round-trip-only `a:rPr` attributes that carry no visual difference
105995
+ // but ARE distinct authored content: two adjacent runs differing only
105996
+ // in one of these were still "the same style" by the keys above, so
105997
+ // they were folded into a single merged run and every one of these
105998
+ // attributes on every run but the first was silently dropped.
105999
+ // Measured on `issue-132-hr-deck.pptx`: 34 authored runs (mixed
106000
+ // `lang`/`altLang` from pasted multi-language text) collapsed to 4 on
106001
+ // a no-edit round-trip.
106002
+ "language",
106003
+ "altLanguage",
106004
+ "dirty",
106005
+ "smartTagClean",
106006
+ "smartTagId",
106007
+ "bookmark",
106008
+ "kumimoji",
106009
+ "normalizeHeight",
106010
+ "noProof",
106011
+ "spellingError",
106012
+ "underlineColor",
106013
+ "underlineStyle",
106014
+ "underlineExplicitNone",
106015
+ "underlineLineFollowsText",
106016
+ "underlineFillFollowsText",
106017
+ "strikeType",
106018
+ "baseline",
106019
+ "characterSpacing",
106020
+ "kerning",
106021
+ "highlightColor",
106022
+ "textCaps",
106023
+ "textCapsExplicitNone",
106024
+ "hyperlinkRId",
106025
+ "hyperlinkTooltip",
106026
+ "hyperlinkAction",
106027
+ "hyperlinkTargetSlideIndex",
106028
+ "hyperlinkMouseOver",
106029
+ "hyperlinkInvalidUrl",
106030
+ "hyperlinkTargetFrame",
106031
+ "hyperlinkHistory",
106032
+ "hyperlinkHighlightClick",
106033
+ "hyperlinkEndSound",
106034
+ "hyperlinkExtensionXml",
106035
+ "textGlowColor",
106036
+ "textGlowRadius",
106037
+ "textGlowOpacity",
106038
+ "textShadowColor",
106039
+ "textShadowBlur",
106040
+ "textShadowOffsetX",
106041
+ "textShadowOffsetY",
106042
+ "textShadowOpacity"
105871
106043
  ];
105872
106044
  return keys.every((key2) => left?.[key2] === right?.[key2]);
105873
106045
  }
@@ -105989,6 +106161,8 @@ var init_PptxHandlerRuntimeTextStyleUtils = __esm({
105989
106161
  var PptxHandlerRuntime18;
105990
106162
  var init_PptxHandlerRuntimeTextRunEffects = __esm({
105991
106163
  "src/core/core/runtime/PptxHandlerRuntimeTextRunEffects.ts"() {
106164
+ init_theme_color_ref();
106165
+ init_color_xml_preservation();
105992
106166
  init_effect_dag_containers();
105993
106167
  init_effect_style_extractor_reflection();
105994
106168
  init_PptxHandlerRuntimeTextStyleUtils();
@@ -106041,6 +106215,10 @@ var init_PptxHandlerRuntimeTextRunEffects = __esm({
106041
106215
  if (clickSnd && typeof clickSnd === "object") {
106042
106216
  style.hyperlinkSoundXml = clickSnd;
106043
106217
  }
106218
+ const extLst = hyperlinkNode["a:extLst"];
106219
+ if (extLst && typeof extLst === "object") {
106220
+ style.hyperlinkExtensionXml = extLst;
106221
+ }
106044
106222
  }
106045
106223
  const actionStr = String(hyperlinkNode?.["@_action"] || "").trim();
106046
106224
  if (actionStr) {
@@ -106115,6 +106293,14 @@ var init_PptxHandlerRuntimeTextRunEffects = __esm({
106115
106293
  if (glowColor) {
106116
106294
  style.textGlowColor = glowColor;
106117
106295
  }
106296
+ const glowColorXml = extractColorChoiceXml(glowNode);
106297
+ if (glowColorXml) {
106298
+ style.textGlowColorXml = glowColorXml;
106299
+ }
106300
+ const glowColorRef = themeColorRefFromColorChoice(glowNode);
106301
+ if (glowColorRef) {
106302
+ style.textGlowColorRef = glowColorRef;
106303
+ }
106118
106304
  const glowOpacity = this.extractColorOpacity(glowNode);
106119
106305
  if (glowOpacity !== void 0) {
106120
106306
  style.textGlowOpacity = glowOpacity;
@@ -108937,6 +109123,16 @@ var init_PptxHandlerRuntimeSaveDataSerialization = __esm({
108937
109123
  }
108938
109124
  /** Pending chart data updates to process in the async save method. */
108939
109125
  pendingChartUpdates;
109126
+ /**
109127
+ * Record `chartData` as parsed, straight off `enrichChartData`, as this
109128
+ * chart's load-time baseline. See {@link chartDataBaselines}.
109129
+ */
109130
+ rememberChartDataBaseline(chartData) {
109131
+ if (!chartData.chartPartPath) {
109132
+ return;
109133
+ }
109134
+ this.chartDataBaselines.set(chartData.chartPartPath, JSON.stringify(chartData));
109135
+ }
108940
109136
  /**
108941
109137
  * Collect chart data for deferred async processing during save.
108942
109138
  */
@@ -108957,6 +109153,9 @@ var init_PptxHandlerRuntimeSaveDataSerialization = __esm({
108957
109153
  return;
108958
109154
  }
108959
109155
  for (const { chartData, slidePath } of this.pendingChartUpdates) {
109156
+ if (chartData.chartPartPath && this.chartDataBaselines.get(chartData.chartPartPath) === JSON.stringify(chartData)) {
109157
+ continue;
109158
+ }
108960
109159
  if (chartData.colorPalette && chartData.colorStylePartPath) {
108961
109160
  const paletteChanged = JSON.stringify(chartData.colorPalette) !== JSON.stringify(chartData.colorStyleOriginalPalette);
108962
109161
  const method = chartData.colorMethod ?? "cycle";
@@ -112011,6 +112210,9 @@ function writeShapeFill(spPr, shapeStyle, ctx) {
112011
112210
  if (fillIsPurelyStyleMatrix(shapeStyle)) {
112012
112211
  return;
112013
112212
  }
112213
+ if (requestedFillMode === "image") {
112214
+ return;
112215
+ }
112014
112216
  if (requestedFillMode === "none" || shapeStyle.fillColor === "transparent") {
112015
112217
  setFillChoice(spPr, "a:noFill", {});
112016
112218
  return;
@@ -119770,6 +119972,7 @@ var PptxHandlerRuntime61;
119770
119972
  var init_PptxHandlerRuntimeShapeImageFill = __esm({
119771
119973
  "src/core/core/runtime/PptxHandlerRuntimeShapeImageFill.ts"() {
119772
119974
  init_xml_access();
119975
+ init_group_shape_geometry();
119773
119976
  init_PptxHandlerRuntimeGeometryParsing();
119774
119977
  PptxHandlerRuntime61 = class _PptxHandlerRuntime extends PptxHandlerRuntime60 {
119775
119978
  /**
@@ -119792,12 +119995,14 @@ var init_PptxHandlerRuntimeShapeImageFill = __esm({
119792
119995
  if (!off || !ext) {
119793
119996
  return null;
119794
119997
  }
119795
- const x = Math.round(parseInt(xmlAttr(off, "x") || "0") / _PptxHandlerRuntime.EMU_PER_PX);
119796
- const y = Math.round(parseInt(xmlAttr(off, "y") || "0") / _PptxHandlerRuntime.EMU_PER_PX);
119797
- const width = Math.round(parseInt(xmlAttr(ext, "cx") || "0") / _PptxHandlerRuntime.EMU_PER_PX);
119798
- const height = Math.round(
119799
- parseInt(xmlAttr(ext, "cy") || "0") / _PptxHandlerRuntime.EMU_PER_PX
119800
- );
119998
+ const xEmu = parseEmuInt(xmlAttr(off, "x"));
119999
+ const yEmu = parseEmuInt(xmlAttr(off, "y"));
120000
+ const widthEmu = parseEmuInt(xmlAttr(ext, "cx"));
120001
+ const heightEmu = parseEmuInt(xmlAttr(ext, "cy"));
120002
+ const x = Math.round(xEmu / _PptxHandlerRuntime.EMU_PER_PX);
120003
+ const y = Math.round(yEmu / _PptxHandlerRuntime.EMU_PER_PX);
120004
+ const width = Math.round(widthEmu / _PptxHandlerRuntime.EMU_PER_PX);
120005
+ const height = Math.round(heightEmu / _PptxHandlerRuntime.EMU_PER_PX);
119801
120006
  const rotation = xfrm["@_rot"] ? parseInt(xfrm["@_rot"]) / 6e4 : void 0;
119802
120007
  const skewX = xfrm["@_skewX"] ? parseInt(String(xfrm["@_skewX"]), 10) / 6e4 : void 0;
119803
120008
  const skewY = xfrm["@_skewY"] ? parseInt(String(xfrm["@_skewY"]), 10) / 6e4 : void 0;
@@ -119906,6 +120111,10 @@ var init_PptxHandlerRuntimeShapeImageFill = __esm({
119906
120111
  y,
119907
120112
  width,
119908
120113
  height,
120114
+ xEmu,
120115
+ yEmu,
120116
+ widthEmu,
120117
+ heightEmu,
119909
120118
  imageData,
119910
120119
  imagePath,
119911
120120
  imageEffects: imageEffects || void 0,
@@ -120235,6 +120444,11 @@ var init_PptxHandlerRuntimeBulletParsing = __esm({
120235
120444
  }
120236
120445
  const buFont = resolvedBulletProps["a:buFont"];
120237
120446
  const fontFamily = buFont?.["@_typeface"] ? String(buFont["@_typeface"]) : void 0;
120447
+ const fontPanose = buFont?.["@_panose"] ? String(buFont["@_panose"]) : void 0;
120448
+ const pitchFamilyRaw = Number.parseInt(String(buFont?.["@_pitchFamily"] ?? ""), 10);
120449
+ const fontPitchFamily = Number.isFinite(pitchFamilyRaw) ? pitchFamilyRaw : void 0;
120450
+ const charsetRaw = Number.parseInt(String(buFont?.["@_charset"] ?? ""), 10);
120451
+ const fontCharset = Number.isFinite(charsetRaw) ? charsetRaw : void 0;
120238
120452
  const fontInherit = resolvedBulletProps["a:buFontTx"] !== void 0;
120239
120453
  const sizePercent = parseBulletSizePercent(
120240
120454
  resolvedBulletProps["a:buSzPct"]
@@ -120266,6 +120480,9 @@ var init_PptxHandlerRuntimeBulletParsing = __esm({
120266
120480
  return {
120267
120481
  char: bulletChar,
120268
120482
  fontFamily,
120483
+ fontPanose,
120484
+ fontPitchFamily,
120485
+ fontCharset,
120269
120486
  sizePercent,
120270
120487
  sizePts,
120271
120488
  color: color2,
@@ -120287,6 +120504,9 @@ var init_PptxHandlerRuntimeBulletParsing = __esm({
120287
120504
  autoNumStartAt,
120288
120505
  paragraphIndex,
120289
120506
  fontFamily,
120507
+ fontPanose,
120508
+ fontPitchFamily,
120509
+ fontCharset,
120290
120510
  sizePercent,
120291
120511
  sizePts,
120292
120512
  color: color2,
@@ -120323,6 +120543,9 @@ var init_PptxHandlerRuntimeBulletParsing = __esm({
120323
120543
  imageDataUrl,
120324
120544
  imageBlipFillXml,
120325
120545
  fontFamily,
120546
+ fontPanose,
120547
+ fontPitchFamily,
120548
+ fontCharset,
120326
120549
  sizePercent,
120327
120550
  sizePts,
120328
120551
  color: color2,
@@ -120334,6 +120557,9 @@ var init_PptxHandlerRuntimeBulletParsing = __esm({
120334
120557
  return {
120335
120558
  imageBlipFillXml,
120336
120559
  fontFamily,
120560
+ fontPanose,
120561
+ fontPitchFamily,
120562
+ fontCharset,
120337
120563
  sizePercent,
120338
120564
  sizePts,
120339
120565
  color: color2,
@@ -121094,9 +121320,9 @@ var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
121094
121320
  if (fldGuidAttr) {
121095
121321
  fieldSegment.fieldGuidAttr = fldGuidAttr;
121096
121322
  }
121097
- const fieldPPr = field["a:pPr"];
121098
- if (fieldPPr && typeof fieldPPr === "object") {
121099
- fieldSegment.fieldParagraphPropertiesXml = fieldPPr;
121323
+ if (field["a:pPr"] !== void 0) {
121324
+ const fieldPPr = field["a:pPr"];
121325
+ fieldSegment.fieldParagraphPropertiesXml = typeof fieldPPr === "object" && fieldPPr !== null ? fieldPPr : {};
121100
121326
  }
121101
121327
  segments.push(fieldSegment);
121102
121328
  maybeSeed(fieldRunStyle);
@@ -121638,7 +121864,18 @@ var init_PptxHandlerRuntimeShapeParsing = __esm({
121638
121864
  yEmu,
121639
121865
  widthEmu,
121640
121866
  heightEmu,
121641
- text: text22,
121867
+ // A shape with no `p:txBody` at all (own or inherited) - a bare
121868
+ // decorative rectangle, say - has no textual capability, and
121869
+ // `text` must stay `undefined` to say so. `text` was unconditionally
121870
+ // initialized to `''` above and only ever reassigned when a txBody
121871
+ // WAS found, so a bare shape's `''` was indistinguishable from an
121872
+ // authored-but-empty text box; the save writer's
121873
+ // `typeof el.text === 'string'` check then created a brand-new empty
121874
+ // `<p:txBody/>` on that shape's `rawXml` the moment it was rewritten
121875
+ // (any edit on a slide master/layout element rewrites its whole
121876
+ // shape node), which real PowerPoint never authors on a shape with
121877
+ // no text.
121878
+ text: txBody !== void 0 ? text22 : void 0,
121642
121879
  // A text-less shape (only an empty `a:endParaRPr`, or no `a:p` at
121643
121880
  // all) still has its own `a:bodyPr`: PowerPoint applies the
121644
121881
  // vertical anchor, insets and autofit of an EMPTY text box just
@@ -121765,6 +122002,8 @@ var init_PptxHandlerRuntimePictureParsing = __esm({
121765
122002
  const mediaCNvPr = pic?.["p:nvPicPr"]?.["p:cNvPr"];
121766
122003
  const mediaAltText = String(mediaCNvPr?.["@_descr"] || "").trim() || void 0;
121767
122004
  const mediaTitle = String(mediaCNvPr?.["@_title"] || "").trim() || void 0;
122005
+ const mediaSlideRels = this.slideRelsMap.get(slidePath);
122006
+ const { actionClick: mediaActionClick, actionHover: mediaActionHover } = this.parseElementActions(mediaCNvPr, mediaSlideRels, this.orderedSlidePaths);
121768
122007
  this.compatibilityService.inspectMediaReferenceCompatibility(
121769
122008
  mediaReference.kind,
121770
122009
  slidePath,
@@ -121853,6 +122092,8 @@ var init_PptxHandlerRuntimePictureParsing = __esm({
121853
122092
  posterFrameData,
121854
122093
  ...mediaAltText !== void 0 ? { altText: mediaAltText } : {},
121855
122094
  ...mediaTitle !== void 0 ? { title: mediaTitle } : {},
122095
+ ...mediaActionClick !== void 0 ? { actionClick: mediaActionClick } : {},
122096
+ ...mediaActionHover !== void 0 ? { actionHover: mediaActionHover } : {},
121856
122097
  ...this.readImageCropFromBlipFill(posterBlipFill),
121857
122098
  // Real PowerPoint media is `p:pic`-shaped even though the
121858
122099
  // `media` type buckets as `p:graphicFrame`, so its locks live
@@ -129781,6 +130022,7 @@ var init_PptxHandlerRuntimeLoadSession = __esm({
129781
130022
  this.externalRelsMap.clear();
129782
130023
  this.slideMap.clear();
129783
130024
  this.savedSlideFingerprints.clear();
130025
+ this.chartDataBaselines.clear();
129784
130026
  this.layoutCache.clear();
129785
130027
  this.masterCache.clear();
129786
130028
  this.templateElementBaselines.reset();
@@ -130086,6 +130328,7 @@ var init_PptxHandlerRuntimeLoadSession = __esm({
130086
130328
  parseNativeAnimations: (slideXml3, slidePath) => this.parseNativeAnimations(slideXml3, slidePath),
130087
130329
  getSmartArtDataForGraphicFrame: (slidePath, graphicFrame) => this.getSmartArtDataForGraphicFrame(slidePath, graphicFrame),
130088
130330
  getChartDataForGraphicFrame: (slidePath, graphicFrame) => this.getChartDataForGraphicFrame(slidePath, graphicFrame),
130331
+ rememberChartDataBaseline: (chartData) => this.rememberChartDataBaseline(chartData),
130089
130332
  parseSlideCustomerData: (slideXml3, slidePath) => this.parseSlideCustomerData(slideXml3, slidePath),
130090
130333
  parseSlideActiveXControls: (slideXml3) => this.parseSlideActiveXControls(slideXml3)
130091
130334
  });
@@ -130266,6 +130509,7 @@ var init_PptxHandlerRuntimeLoadPipeline = __esm({
130266
130509
  this.imageDataCache.clear();
130267
130510
  this.slideMap.clear();
130268
130511
  this.savedSlideFingerprints.clear();
130512
+ this.chartDataBaselines.clear();
130269
130513
  this.slideRelsMap.clear();
130270
130514
  this.externalRelsMap.clear();
130271
130515
  this.layoutCache.clear();
@@ -148946,7 +149190,7 @@ var init_fill_style = __esm2({
148946
149190
  }
148947
149191
  });
148948
149192
  function isTextOrientationMatrix2(value) {
148949
- return Array.isArray(value) && value.length === 4 && value.every((entry2) => typeof entry2 === "number" && Number.isFinite(entry2));
149193
+ return Array.isArray(value) && value.length === 4 && value.every((entry3) => typeof entry3 === "number" && Number.isFinite(entry3));
148950
149194
  }
148951
149195
  function multiplyTextOrientationMatrices2(left, right) {
148952
149196
  return [
@@ -149674,11 +149918,11 @@ var init_chart_font = __esm2({
149674
149918
  DEFAULT_CHART_DATA_LABEL_PX = chartFontPx(9);
149675
149919
  }
149676
149920
  });
149677
- function sizePx(entry2, fallbackPx) {
149678
- return entry2?.fontSize !== void 0 ? chartFontPx(entry2.fontSize) : fallbackPx;
149921
+ function sizePx(entry3, fallbackPx) {
149922
+ return entry3?.fontSize !== void 0 ? chartFontPx(entry3.fontSize) : fallbackPx;
149679
149923
  }
149680
- function colorOr(entry2, fallback) {
149681
- return entry2?.color ?? fallback;
149924
+ function colorOr(entry3, fallback) {
149925
+ return entry3?.color ?? fallback;
149682
149926
  }
149683
149927
  function resolveChartStyleDefaults(chartData) {
149684
149928
  const def = chartData?.chartStyleDefinition;
@@ -150411,19 +150655,19 @@ var init_chart_bar3d_face_picture = __esm2({
150411
150655
  });
150412
150656
  function computeChartLegendLayout(vm) {
150413
150657
  const vertical = vm.legendAnchor === "start";
150414
- return vm.legend.map((entry2, i2) => {
150415
- const x = vertical ? vm.legendX : vm.legendX - vm.legend.length * LEGEND_ITEM_WIDTH / 2 + i2 * LEGEND_ITEM_WIDTH, y = vertical ? vm.legendY + i2 * LEGEND_ITEM_HEIGHT : vm.legendY, textStyle = entry2.textStyle;
150658
+ return vm.legend.map((entry3, i2) => {
150659
+ const x = vertical ? vm.legendX : vm.legendX - vm.legend.length * LEGEND_ITEM_WIDTH / 2 + i2 * LEGEND_ITEM_WIDTH, y = vertical ? vm.legendY + i2 * LEGEND_ITEM_HEIGHT : vm.legendY, textStyle = entry3.textStyle;
150416
150660
  return {
150417
150661
  x,
150418
150662
  y,
150419
- color: entry2.color,
150420
- label: entry2.label,
150663
+ color: entry3.color,
150664
+ label: entry3.label,
150421
150665
  fontSize: textStyle?.fontSize !== void 0 ? chartFontPx(textStyle.fontSize) : DEFAULT_LEGEND_FONT_SIZE,
150422
150666
  fill: textStyle?.color ?? DEFAULT_LEGEND_TEXT_COLOR,
150423
150667
  fontWeight: textStyle?.bold ? "bold" : "normal",
150424
150668
  fontStyle: textStyle?.italic ? "italic" : "normal",
150425
150669
  fontFamily: textStyle?.fontFamily,
150426
- ...entry2.lineSwatch ? { lineSwatch: entry2.lineSwatch } : {}
150670
+ ...entry3.lineSwatch ? { lineSwatch: entry3.lineSwatch } : {}
150427
150671
  };
150428
150672
  });
150429
150673
  }
@@ -151444,7 +151688,7 @@ function buildDataLabelText(params) {
151444
151688
  valueColor = formatted?.color;
151445
151689
  }
151446
151690
  if (content.showPercent) {
151447
- const base = percentBase ?? series.values.reduce((total, entry2) => total + Math.abs(entry2), 0);
151691
+ const base = percentBase ?? series.values.reduce((total, entry3) => total + Math.abs(entry3), 0);
151448
151692
  parts.push(base > 0 ? `${Math.round(Math.abs(value) / base * 100)}%` : "0%");
151449
151693
  }
151450
151694
  if (content.showBubbleSize) {
@@ -152210,9 +152454,9 @@ function categoryTotals(series, catCount) {
152210
152454
  );
152211
152455
  }
152212
152456
  function buildPercentStackedBars(chartData, catCount, layout, primaryRange, sourceIndices2, invertNegativeFill2) {
152213
- const primitives = [], dataLabels = [], series = chartData.series, palette = chartData.colorPalette, showLabels = chartData.style?.hasDataLabels, barGroupWidth = layout.plotWidth / Math.max(catCount, 1), barW = barGroupWidth * 0.6, barOffset = (barGroupWidth - barW) / 2, displaySeries = series.map((entry2) => ({
152214
- ...entry2,
152215
- values: sourceIndices2.map((sourceIndex) => entry2.values[sourceIndex] ?? 0)
152457
+ const primitives = [], dataLabels = [], series = chartData.series, palette = chartData.colorPalette, showLabels = chartData.style?.hasDataLabels, barGroupWidth = layout.plotWidth / Math.max(catCount, 1), barW = barGroupWidth * 0.6, barOffset = (barGroupWidth - barW) / 2, displaySeries = series.map((entry3) => ({
152458
+ ...entry3,
152459
+ values: sourceIndices2.map((sourceIndex) => entry3.values[sourceIndex] ?? 0)
152216
152460
  })), totals = categoryTotals(displaySeries, catCount);
152217
152461
  for (let ci = 0; ci < catCount; ci++) {
152218
152462
  let posRunning = 0, negRunning = 0;
@@ -152385,9 +152629,9 @@ function buildBars(chartData, catCount, layout, primaryRange, secondaryRange, se
152385
152629
  return { primitives, dataLabels };
152386
152630
  }
152387
152631
  if (grouping === "stacked") {
152388
- const displaySeries = series.map((entry2) => ({
152389
- ...entry2,
152390
- values: sourceIndices2.map((sourceIndex) => entry2.values[sourceIndex] ?? 0)
152632
+ const displaySeries = series.map((entry3) => ({
152633
+ ...entry3,
152634
+ values: sourceIndices2.map((sourceIndex) => entry3.values[sourceIndex] ?? 0)
152391
152635
  })), rects = computeStackedBarRects(displaySeries, catCount, layout, primaryRange, palette);
152392
152636
  for (const r of rects) {
152393
152637
  let fill = r.fill, part, title;
@@ -152585,16 +152829,16 @@ function buildLines(chartData, catCount, layout, primaryRange, secondaryRange, s
152585
152829
  );
152586
152830
  return { displayValues, visible };
152587
152831
  }), stackedPlots = isStackedMode ? computeStackedSeriesPlots(
152588
- resolved.map((entry2) => entry2?.displayValues ?? []),
152832
+ resolved.map((entry3) => entry3?.displayValues ?? []),
152589
152833
  catCount,
152590
152834
  isPercent
152591
152835
  ) : void 0;
152592
152836
  for (let si = 0; si < chartData.series.length; si++) {
152593
- const series = chartData.series[si], entry2 = resolved[si];
152594
- if (!entry2) {
152837
+ const series = chartData.series[si], entry3 = resolved[si];
152838
+ if (!entry3) {
152595
152839
  continue;
152596
152840
  }
152597
- const { displayValues, visible } = entry2, activeRange = isStackedMode ? primaryRange : secondaryIdx.has(si) && secondaryRange ? secondaryRange : primaryRange, plotValues = stackedPlots ? stackedPlots[si].cumulative : displayValues, pts = computeLinePoints(plotValues, catCount, layout, activeRange).map((point, index) => ({
152841
+ const { displayValues, visible } = entry3, activeRange = isStackedMode ? primaryRange : secondaryIdx.has(si) && secondaryRange ? secondaryRange : primaryRange, plotValues = stackedPlots ? stackedPlots[si].cumulative : displayValues, pts = computeLinePoints(plotValues, catCount, layout, activeRange).map((point, index) => ({
152598
152842
  ...point,
152599
152843
  x: xPositions?.[index] ?? point.x
152600
152844
  })), c = seriesColor22(series, si, chartData.colorPalette), seriesPart = { role: "series", seriesIndex: si }, allVisible = visible.every(Boolean);
@@ -154601,7 +154845,7 @@ function computeStockCandlePrimitives(seriesSet, chartData, layout, range, catCo
154601
154845
  return primitives;
154602
154846
  }
154603
154847
  function findComboStockSeries(series) {
154604
- return series.map((s, index) => ({ series: s, index })).filter((entry2) => entry2.series.seriesChartType === "stock");
154848
+ return series.map((s, index) => ({ series: s, index })).filter((entry3) => entry3.series.seriesChartType === "stock");
154605
154849
  }
154606
154850
  function computeComboStockOverlay(stockEntries, chartData, layout, range, catCount, sourceIndices2, xPositions) {
154607
154851
  if (stockEntries.length < 3) {
@@ -154681,8 +154925,8 @@ function groupComboSeriesIndices(series) {
154681
154925
  const barIndices = [];
154682
154926
  const lineIndices = [];
154683
154927
  const areaIndices = [];
154684
- series.forEach((entry2, index) => {
154685
- const kind = classifyComboSeries(entry2, index);
154928
+ series.forEach((entry3, index) => {
154929
+ const kind = classifyComboSeries(entry3, index);
154686
154930
  const target = kind === "bar" ? barIndices : kind === "area" ? areaIndices : lineIndices;
154687
154931
  target.push(index);
154688
154932
  });
@@ -154907,14 +155151,14 @@ function buildComboViewModel(element, chartData, categoryLabels) {
154907
155151
  );
154908
155152
  const catCount = Math.max(categoryLabels.length, 1);
154909
155153
  const { primary, secondary } = splitSeriesByAxis(chartData.series, chartData.axes);
154910
- const secondaryIndexes = new Set(secondary.map((entry2) => entry2.index));
154911
- const primarySeries = primary.length > 0 ? primary.map((entry2) => entry2.series) : chartData.series;
155154
+ const secondaryIndexes = new Set(secondary.map((entry3) => entry3.index));
155155
+ const primarySeries = primary.length > 0 ? primary.map((entry3) => entry3.series) : chartData.series;
154912
155156
  const primaryAxisId = getPrimaryValueAxisId(chartData.axes);
154913
155157
  const primaryAxis = chartData.axes?.find((axis) => axis.axisId === primaryAxisId);
154914
155158
  const secondaryAxisFormatting = getSecondaryValueAxis(chartData.axes);
154915
155159
  const primaryRange = computeValueRangeForAxis(primarySeries, primaryAxis, layout.autoPlotHeight);
154916
155160
  const secondaryRange = secondary.length > 0 ? computeValueRangeForAxis(
154917
- secondary.map((entry2) => entry2.series),
155161
+ secondary.map((entry3) => entry3.series),
154918
155162
  secondaryAxisFormatting,
154919
155163
  layout.autoPlotHeight
154920
155164
  ) : void 0;
@@ -154976,7 +155220,7 @@ function buildComboViewModel(element, chartData, categoryLabels) {
154976
155220
  const dataLabels = [];
154977
155221
  const stockEntries = findComboStockSeries(chartData.series);
154978
155222
  const isStockCombo = stockEntries.length >= 3;
154979
- const stockIndexes = new Set(stockEntries.map((entry2) => entry2.index));
155223
+ const stockIndexes = new Set(stockEntries.map((entry3) => entry3.index));
154980
155224
  if (!isStockCombo) {
154981
155225
  const helperOpts = { mode: "line", xPositions: horizontalAxis.xPositions };
154982
155226
  primitives.push(
@@ -155669,10 +155913,10 @@ function buildHistogramViewModel(element, chartData, categoryLabels) {
155669
155913
  const baseEntries = (bins?.map((bin) => ({ value: bin.value, label: bin.label })) ?? (series?.values ?? []).map((value, index) => ({
155670
155914
  value,
155671
155915
  label: categoryLabels[index] ?? ""
155672
- }))).map((entry2, sourcePointIndex) => ({ ...entry2, sourcePointIndex }));
155916
+ }))).map((entry3, sourcePointIndex) => ({ ...entry3, sourcePointIndex }));
155673
155917
  const entries = paretoIndex >= 0 ? orderParetoEntries(baseEntries) : baseEntries;
155674
- const values = entries.map((entry2) => entry2.value);
155675
- const labels = entries.map((entry2) => entry2.label);
155918
+ const values = entries.map((entry3) => entry3.value);
155919
+ const labels = entries.map((entry3) => entry3.label);
155676
155920
  const range = distributionRange([{ name: series?.name ?? "", values }]);
155677
155921
  const bars = computeHistogramBars(
155678
155922
  values,
@@ -156023,7 +156267,7 @@ function applyLegendEntryOverrides(legend, entries, defaultTextStyle) {
156023
156267
  if ((!entries || entries.length === 0) && !defaultTextStyle) {
156024
156268
  return legend;
156025
156269
  }
156026
- const byIndex = new Map((entries ?? []).map((entry2) => [entry2.index, entry2]));
156270
+ const byIndex = new Map((entries ?? []).map((entry3) => [entry3.index, entry3]));
156027
156271
  const result = [];
156028
156272
  legend.forEach((item, index) => {
156029
156273
  const override = byIndex.get(index);
@@ -157369,7 +157613,7 @@ function buildPieViewModel(element, chartData, categoryLabels, isDoughnut) {
157369
157613
  })
157370
157614
  ), dataLabels = [];
157371
157615
  if (chartData.style?.hasDataLabels) {
157372
- const percentBase = values.reduce((total, entry2) => total + Math.abs(entry2), 0), labelResult = buildPieDataLabels({
157616
+ const percentBase = values.reduce((total, entry3) => total + Math.abs(entry3), 0), labelResult = buildPieDataLabels({
157373
157617
  slices,
157374
157618
  values,
157375
157619
  cx,
@@ -158257,7 +158501,7 @@ function buildRegionMapViewModel(element, chartData, categoryLabels) {
158257
158501
  options,
158258
158502
  resolveRegionCode
158259
158503
  );
158260
- const values = entries.map((entry2) => entry2.value);
158504
+ const values = entries.map((entry3) => entry3.value);
158261
158505
  const finiteVals = values.filter((v) => Number.isFinite(v));
158262
158506
  const minVal = finiteVals.length > 0 ? Math.min(...finiteVals) : 0;
158263
158507
  const maxVal = finiteVals.length > 0 ? Math.max(...finiteVals) : 1;
@@ -158270,15 +158514,15 @@ function buildRegionMapViewModel(element, chartData, categoryLabels) {
158270
158514
  const colorScale = valueColorStops ? buildValueColorScale(valueColorStops) : sequentialColorScale;
158271
158515
  const regionValueMap = /* @__PURE__ */ new Map();
158272
158516
  const unmatchedRows = [];
158273
- for (const entry2 of entries) {
158274
- if (entry2.code !== void 0) {
158275
- regionValueMap.set(entry2.code, {
158276
- value: entry2.value,
158277
- label: entry2.label,
158278
- sourceIndex: entry2.sourceIndex
158517
+ for (const entry3 of entries) {
158518
+ if (entry3.code !== void 0) {
158519
+ regionValueMap.set(entry3.code, {
158520
+ value: entry3.value,
158521
+ label: entry3.label,
158522
+ sourceIndex: entry3.sourceIndex
158279
158523
  });
158280
158524
  } else {
158281
- unmatchedRows.push({ label: entry2.label, value: entry2.value });
158525
+ unmatchedRows.push({ label: entry3.label, value: entry3.value });
158282
158526
  }
158283
158527
  }
158284
158528
  const legendHeight = 30;
@@ -158313,10 +158557,10 @@ function buildRegionMapViewModel(element, chartData, categoryLabels) {
158313
158557
  dominantBaseline: "auto"
158314
158558
  } : void 0;
158315
158559
  for (const region of WORLD_REGIONS) {
158316
- const entry2 = regionValueMap.get(region.code);
158560
+ const entry3 = regionValueMap.get(region.code);
158317
158561
  let fill = "#e2e8f0";
158318
- if (entry2 !== void 0) {
158319
- const t = normalizeValue(entry2.value, minVal, maxVal);
158562
+ if (entry3 !== void 0) {
158563
+ const t = normalizeValue(entry3.value, minVal, maxVal);
158320
158564
  fill = colorScale(t);
158321
158565
  }
158322
158566
  const scaledPath = scalePathD(region.path, mapScale, mapOffsetX, mapOffsetY);
@@ -158329,17 +158573,17 @@ function buildRegionMapViewModel(element, chartData, categoryLabels) {
158329
158573
  // Hover tooltip. A choropleth prints only the value inside the shape
158330
158574
  // (and only where the shape is big enough), so without this the reader
158331
158575
  // has no way to find out WHICH country a patch of colour is.
158332
- title: entry2 ? `${region.name}: ${formatAxisValue2(entry2.value)}` : region.name,
158333
- ...entry2 ? {
158576
+ title: entry3 ? `${region.name}: ${formatAxisValue2(entry3.value)}` : region.name,
158577
+ ...entry3 ? {
158334
158578
  part: {
158335
158579
  role: "dataPoint",
158336
158580
  seriesIndex: 0,
158337
- pointIndex: entry2.sourceIndex
158581
+ pointIndex: entry3.sourceIndex
158338
158582
  }
158339
158583
  } : {}
158340
158584
  });
158341
158585
  const bounds = regionBounds(region);
158342
- if (entry2 !== void 0 && shouldRenderRegionLabel(
158586
+ if (entry3 !== void 0 && shouldRenderRegionLabel(
158343
158587
  options?.regionLabelLayout,
158344
158588
  (bounds.maxX - bounds.minX) * mapScale,
158345
158589
  (bounds.maxY - bounds.minY) * mapScale
@@ -158350,7 +158594,7 @@ function buildRegionMapViewModel(element, chartData, categoryLabels) {
158350
158594
  kind: "text",
158351
158595
  x: lx,
158352
158596
  y: ly,
158353
- text: formatRegionMapValue(entry2.value, options?.cultureLanguage),
158597
+ text: formatRegionMapValue(entry3.value, options?.cultureLanguage),
158354
158598
  fontSize: Math.max(6, 7 * mapScale),
158355
158599
  fill: "#1e293b",
158356
158600
  textAnchor: "middle",
@@ -159097,18 +159341,18 @@ function orderParetoEntries(entries) {
159097
159341
  );
159098
159342
  }
159099
159343
  function buildParetoPrimitives(entries, layout, series, seriesIndex) {
159100
- const total = entries.reduce((sum, entry2) => sum + Math.max(entry2.value, 0), 0);
159344
+ const total = entries.reduce((sum, entry3) => sum + Math.max(entry3.value, 0), 0);
159101
159345
  if (total <= 0) {
159102
159346
  return [];
159103
159347
  }
159104
159348
  let cumulative = 0;
159105
- const points4 = entries.map((entry2, displayIndex) => {
159106
- cumulative += Math.max(entry2.value, 0);
159349
+ const points4 = entries.map((entry3, displayIndex) => {
159350
+ cumulative += Math.max(entry3.value, 0);
159107
159351
  const percentage2 = displayIndex === entries.length - 1 ? 100 : cumulative / total * 100;
159108
159352
  return {
159109
159353
  x: layout.plotLeft + layout.plotWidth * (displayIndex + 0.5) / entries.length,
159110
159354
  y: layout.plotBottom - layout.plotHeight * percentage2 / 100,
159111
- pointIndex: entry2.sourcePointIndex
159355
+ pointIndex: entry3.sourcePointIndex
159112
159356
  };
159113
159357
  });
159114
159358
  const color2 = series.color ?? "#ED7D31";
@@ -163746,7 +163990,7 @@ var THEME_CATALOG = [
163746
163990
  }
163747
163991
  ];
163748
163992
  function resolveThemeCatalogEntry(key2, catalog = THEME_CATALOG) {
163749
- return catalog.find((entry2) => entry2.key === key2)?.theme;
163993
+ return catalog.find((entry3) => entry3.key === key2)?.theme;
163750
163994
  }
163751
163995
  function corePreset(id) {
163752
163996
  const preset = THEME_PRESETS.find((p) => p.id === id);
@@ -164124,9 +164368,9 @@ function collectTableStyleImagePaths(tableStyleMap) {
164124
164368
  if (!tableStyleMap) {
164125
164369
  return { paths, refs };
164126
164370
  }
164127
- for (const [styleId, entry2] of Object.entries(tableStyleMap)) {
164371
+ for (const [styleId, entry3] of Object.entries(tableStyleMap)) {
164128
164372
  for (const fillKey of TABLE_STYLE_FILL_KEYS) {
164129
- const fill = entry2[fillKey];
164373
+ const fill = entry3[fillKey];
164130
164374
  const path = fill?.image?.path;
164131
164375
  if (path && !fill?.image?.data && !isExternalUrl2(path)) {
164132
164376
  paths.add(path);
@@ -164152,11 +164396,11 @@ function applyTableStyleImagePatches(tableStyleMap, resolvedMap, refs) {
164152
164396
  }
164153
164397
  const next = { ...tableStyleMap };
164154
164398
  for (const [styleId, patches] of patchesByStyleId) {
164155
- const entry2 = next[styleId];
164156
- if (!entry2) {
164399
+ const entry3 = next[styleId];
164400
+ if (!entry3) {
164157
164401
  continue;
164158
164402
  }
164159
- const patchedEntry = { ...entry2 };
164403
+ const patchedEntry = { ...entry3 };
164160
164404
  for (const { fillKey, url } of patches) {
164161
164405
  const fill = patchedEntry[fillKey];
164162
164406
  if (!fill?.image) {
@@ -171615,7 +171859,7 @@ function ensureArr(val2) {
171615
171859
  return [];
171616
171860
  }
171617
171861
  if (Array.isArray(val2)) {
171618
- return val2.filter((entry2) => Boolean(entry2) && typeof entry2 === "object");
171862
+ return val2.filter((entry3) => Boolean(entry3) && typeof entry3 === "object");
171619
171863
  }
171620
171864
  if (typeof val2 === "object") {
171621
171865
  return [val2];
@@ -171661,7 +171905,7 @@ function readRunText2(run) {
171661
171905
  return String(t);
171662
171906
  }
171663
171907
  if (Array.isArray(t)) {
171664
- return t.map((entry2) => readRunText2({ "m:t": entry2 })).join("");
171908
+ return t.map((entry3) => readRunText2({ "m:t": entry3 })).join("");
171665
171909
  }
171666
171910
  if (t && typeof t === "object") {
171667
171911
  const inner = t["#text"];
@@ -171734,7 +171978,7 @@ function collectText2(node) {
171734
171978
  return String(node);
171735
171979
  }
171736
171980
  if (Array.isArray(node)) {
171737
- return node.map((entry2) => collectText2(entry2)).join("");
171981
+ return node.map((entry3) => collectText2(entry3)).join("");
171738
171982
  }
171739
171983
  if (typeof node !== "object") {
171740
171984
  return "";
@@ -172394,7 +172638,7 @@ function buildParetoInsertData() {
172394
172638
  },
172395
172639
  {
172396
172640
  name: "Cumulative %",
172397
- values: cumulativePercentOfTotal(ordered4.map((entry2) => entry2.value)),
172641
+ values: cumulativePercentOfTotal(ordered4.map((entry3) => entry3.value)),
172398
172642
  histogramOptions: { layout: "pareto" }
172399
172643
  }
172400
172644
  ]
@@ -172841,8 +173085,8 @@ var BUTTON_ORDER = [
172841
173085
  ];
172842
173086
  function buildButtons(selectionBox, showFilters) {
172843
173087
  const x = selectionBox.x + selectionBox.width + OUTSIDE_GAP;
172844
- return BUTTON_ORDER.filter((entry2) => entry2.id !== "filters" || showFilters).map((entry2, i2) => ({
172845
- ...entry2,
173088
+ return BUTTON_ORDER.filter((entry3) => entry3.id !== "filters" || showFilters).map((entry3, i2) => ({
173089
+ ...entry3,
172846
173090
  x,
172847
173091
  y: selectionBox.y + i2 * (CHART_QUICK_ACTION_BUTTON_SIZE + BUTTON_GAP),
172848
173092
  size: CHART_QUICK_ACTION_BUTTON_SIZE
@@ -172889,12 +173133,12 @@ function buildFilters(chartData) {
172889
173133
  seriesIndex: index,
172890
173134
  sortKey: series2.idx ?? index
172891
173135
  }));
172892
- const filtered = (chartData.filteredSeries ?? []).map((entry2, index) => ({
173136
+ const filtered = (chartData.filteredSeries ?? []).map((entry3, index) => ({
172893
173137
  key: `filtered-${index}`,
172894
- name: entry2.name ?? chartData.filteredSeriesTitle ?? `Series ${index + 1}`,
173138
+ name: entry3.name ?? chartData.filteredSeriesTitle ?? `Series ${index + 1}`,
172895
173139
  visible: false,
172896
173140
  filteredIndex: index,
172897
- sortKey: entry2.idx
173141
+ sortKey: entry3.idx
172898
173142
  }));
172899
173143
  const series = [...visibleSeries, ...filtered].sort((a, b) => a.sortKey - b.sortKey).map(({ sortKey: _sortKey, ...rest }) => rest);
172900
173144
  return { visible: series.length > 1, series };
@@ -173333,6 +173577,56 @@ init_chart_region_map_data();
173333
173577
  init_chart_overlays();
173334
173578
  init_chart_data_table_render();
173335
173579
  init_chart_legend_entries();
173580
+ var SOLID = "linear-gradient(#000, #000)";
173581
+ var HOLE_IMAGE = {
173582
+ box: SOLID,
173583
+ // `mask-size: 100% 100%` on this gradient draws an ellipse inscribed
173584
+ // touching all four edge midpoints, matching the COM capture exactly.
173585
+ circle: "radial-gradient(circle, #000 0%, #000 100%)",
173586
+ // This polygon's points already touch the edge midpoints at 100% size
173587
+ // (no headroom needed, unlike `diamondOut`'s growing-past-corners variant).
173588
+ diamond: `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpolygon points='50,0 100,50 50,100 0,50' fill='%23000'/%3E%3C/svg%3E")`
173589
+ };
173590
+ function maskHoleDecl(shape, phase) {
173591
+ const holeSize = phase === "hidden" ? "100% 100%" : "0% 0%";
173592
+ return [
173593
+ `mask-image: ${HOLE_IMAGE[shape]}, ${SOLID};`,
173594
+ "mask-position: center, center;",
173595
+ "mask-repeat: no-repeat, no-repeat;",
173596
+ `mask-size: ${holeSize}, 100% 100%;`,
173597
+ "mask-composite: add, exclude;"
173598
+ ].join(" ");
173599
+ }
173600
+ function maskHoleInitialStyle(shape) {
173601
+ return {
173602
+ maskImage: `${HOLE_IMAGE[shape]}, ${SOLID}`,
173603
+ maskPosition: "center, center",
173604
+ maskRepeat: "no-repeat, no-repeat",
173605
+ maskSize: "100% 100%, 100% 100%",
173606
+ maskComposite: "add, exclude",
173607
+ opacity: 1
173608
+ };
173609
+ }
173610
+ function maskPlusHoleDecl(phase) {
173611
+ const barSize = phase === "hidden" ? "100%" : "0%";
173612
+ return [
173613
+ `mask-image: ${SOLID}, ${SOLID}, ${SOLID};`,
173614
+ "mask-position: center, center, center;",
173615
+ "mask-repeat: no-repeat, no-repeat, no-repeat;",
173616
+ `mask-size: 100% ${barSize}, ${barSize} 100%, 100% 100%;`,
173617
+ "mask-composite: add, add, exclude;"
173618
+ ].join(" ");
173619
+ }
173620
+ function maskPlusHoleInitialStyle() {
173621
+ return {
173622
+ maskImage: `${SOLID}, ${SOLID}, ${SOLID}`,
173623
+ maskPosition: "center, center, center",
173624
+ maskRepeat: "no-repeat, no-repeat, no-repeat",
173625
+ maskSize: "100% 100%, 100% 100%, 100% 100%",
173626
+ maskComposite: "add, add, exclude",
173627
+ opacity: 1
173628
+ };
173629
+ }
173336
173630
  var HARD_STOP = "#000 50%, transparent 50%";
173337
173631
  var EDGE_CONFIG = {
173338
173632
  left: {
@@ -173364,38 +173658,38 @@ var EDGE_CONFIG = {
173364
173658
  shownPos: "0% 100%"
173365
173659
  }
173366
173660
  };
173367
- var SOLID = "linear-gradient(#000, #000)";
173661
+ var SOLID2 = "linear-gradient(#000, #000)";
173368
173662
  var SHAPE_CONFIG = {
173369
173663
  splitHorizontalIn: {
173370
- image: `${SOLID}, ${SOLID}`,
173664
+ image: `${SOLID2}, ${SOLID2}`,
173371
173665
  position: "left top, left bottom",
173372
173666
  repeat: "no-repeat, no-repeat",
173373
173667
  hiddenSize: "100% 0%, 100% 0%",
173374
173668
  shownSize: "100% 50.5%, 100% 50.5%"
173375
173669
  },
173376
173670
  splitHorizontalOut: {
173377
- image: SOLID,
173671
+ image: SOLID2,
173378
173672
  position: "center",
173379
173673
  repeat: "no-repeat",
173380
173674
  hiddenSize: "100% 0%",
173381
173675
  shownSize: "100% 101%"
173382
173676
  },
173383
173677
  splitVerticalIn: {
173384
- image: `${SOLID}, ${SOLID}`,
173678
+ image: `${SOLID2}, ${SOLID2}`,
173385
173679
  position: "left top, right top",
173386
173680
  repeat: "no-repeat, no-repeat",
173387
173681
  hiddenSize: "0% 100%, 0% 100%",
173388
173682
  shownSize: "50.5% 100%, 50.5% 100%"
173389
173683
  },
173390
173684
  splitVerticalOut: {
173391
- image: SOLID,
173685
+ image: SOLID2,
173392
173686
  position: "center",
173393
173687
  repeat: "no-repeat",
173394
173688
  hiddenSize: "0% 100%",
173395
173689
  shownSize: "101% 100%"
173396
173690
  },
173397
173691
  boxOut: {
173398
- image: SOLID,
173692
+ image: SOLID2,
173399
173693
  position: "center",
173400
173694
  repeat: "no-repeat",
173401
173695
  hiddenSize: "0% 0%",
@@ -173423,7 +173717,7 @@ var SHAPE_CONFIG = {
173423
173717
  // Two independent solid bars (mask layers composite by union): a
173424
173718
  // full-width horizontal bar and a full-height vertical bar, both
173425
173719
  // growing from a point at centre, so together they trace a cross.
173426
- image: `${SOLID}, ${SOLID}`,
173720
+ image: `${SOLID2}, ${SOLID2}`,
173427
173721
  position: "center, center",
173428
173722
  repeat: "no-repeat, no-repeat",
173429
173723
  hiddenSize: "100% 0%, 0% 100%",
@@ -173566,8 +173860,8 @@ var KEYFRAME_PREFIX = "pptx-vue";
173566
173860
  to { ${maskEdgeDecl("top", "shown")} opacity: 1; }
173567
173861
  }
173568
173862
  @keyframes ${KEYFRAME_PREFIX}-boxIn {
173569
- from { ${maskShapeDecl("boxOut", "hidden")} opacity: 1; }
173570
- to { ${maskShapeDecl("boxOut", "shown")} opacity: 1; }
173863
+ from { ${maskHoleDecl("box", "hidden")} opacity: 1; }
173864
+ to { ${maskHoleDecl("box", "shown")} opacity: 1; }
173571
173865
  }
173572
173866
  @keyframes ${KEYFRAME_PREFIX}-floatIn {
173573
173867
  from { opacity: 0; transform: translateY(40px); }
@@ -173748,6 +174042,15 @@ var EMPHASIS_PRESET_VALUES = [
173748
174042
  "wave",
173749
174043
  "boldFlash"
173750
174044
  ];
174045
+ var TRIGGER_VALUES = [
174046
+ "onClick",
174047
+ "onShapeClick",
174048
+ "onHover",
174049
+ "afterPrevious",
174050
+ "withPrevious",
174051
+ "afterDelay"
174052
+ ];
174053
+ var TRIGGER_OPTIONS = TRIGGER_VALUES.map((value) => ({ value, labelKey: `pptx.animation.trigger.${value}` }));
173751
174054
  var DIRECTIONAL_PRESETS = /* @__PURE__ */ new Set([
173752
174055
  "flyIn",
173753
174056
  "flyOut",
@@ -173864,9 +174167,9 @@ var EFFECT_SOUND_CATALOGUE = [
173864
174167
  { id: "whoosh", i18nKey: "pptx.animation.sound.whoosh", canonicalName: "WHOOSH.WAV" },
173865
174168
  { id: "wind", i18nKey: "pptx.animation.sound.wind", canonicalName: "WIND.WAV" }
173866
174169
  ];
173867
- var BY_ID = new Map(EFFECT_SOUND_CATALOGUE.map((entry2) => [entry2.id, entry2]));
174170
+ var BY_ID = new Map(EFFECT_SOUND_CATALOGUE.map((entry3) => [entry3.id, entry3]));
173868
174171
  var BY_CANONICAL_NAME = new Map(
173869
- EFFECT_SOUND_CATALOGUE.map((entry2) => [entry2.canonicalName.toUpperCase(), entry2])
174172
+ EFFECT_SOUND_CATALOGUE.map((entry3) => [entry3.canonicalName.toUpperCase(), entry3])
173870
174173
  );
173871
174174
  function effectSoundCatalogueEntry(id) {
173872
174175
  return BY_ID.get(id);
@@ -174099,15 +174402,15 @@ function getEffectSoundAsset(id) {
174099
174402
  if (cached) {
174100
174403
  return cached;
174101
174404
  }
174102
- const entry2 = effectSoundCatalogueEntry(id);
174405
+ const entry3 = effectSoundCatalogueEntry(id);
174103
174406
  const generator = EFFECT_SOUND_GENERATORS[id];
174104
- if (!entry2 || !generator) {
174407
+ if (!entry3 || !generator) {
174105
174408
  return void 0;
174106
174409
  }
174107
174410
  const bytes = encodeWav(normalize(generator()));
174108
174411
  const asset = {
174109
174412
  id,
174110
- fileName: entry2.canonicalName,
174413
+ fileName: entry3.canonicalName,
174111
174414
  bytes,
174112
174415
  dataUrl: wavDataUrl(bytes)
174113
174416
  };
@@ -174115,16 +174418,16 @@ function getEffectSoundAsset(id) {
174115
174418
  return asset;
174116
174419
  }
174117
174420
  function getEffectSoundState(slideAnimations, elementId) {
174118
- const entry2 = animationFor(slideAnimations, elementId);
174119
- if (!entry2) {
174421
+ const entry3 = animationFor(slideAnimations, elementId);
174422
+ if (!entry3) {
174120
174423
  return { hasSound: false };
174121
174424
  }
174122
- const hasSound = Boolean(entry2.soundData || entry2.soundRId);
174425
+ const hasSound = Boolean(entry3.soundData || entry3.soundRId);
174123
174426
  if (!hasSound) {
174124
174427
  return { hasSound: false };
174125
174428
  }
174126
- const fileName = entry2.soundFileName ?? lastPathSegment(entry2.soundPath);
174127
- const catalogueId = findEffectSoundCatalogueEntry(entry2.soundName)?.id;
174429
+ const fileName = entry3.soundFileName ?? lastPathSegment(entry3.soundPath);
174430
+ const catalogueId = findEffectSoundCatalogueEntry(entry3.soundName)?.id;
174128
174431
  return catalogueId !== void 0 ? { hasSound: true, fileName, catalogueId } : { hasSound: true, fileName };
174129
174432
  }
174130
174433
  function setEffectStockSound(anims, elementId, catalogueId) {
@@ -174167,8 +174470,8 @@ function setAfterAnimation(anims, elementId, action) {
174167
174470
  });
174168
174471
  }
174169
174472
  function setAfterAnimationColor(anims, elementId, color2) {
174170
- const entry2 = animationFor(anims, elementId);
174171
- if (!entry2 || entry2.afterAnimation !== "dimToColor") {
174473
+ const entry3 = animationFor(anims, elementId);
174474
+ if (!entry3 || entry3.afterAnimation !== "dimToColor") {
174172
174475
  return [...anims];
174173
174476
  }
174174
174477
  return upsert(anims, elementId, (cur) => ({ ...cur, afterAnimationColor: color2 }));
@@ -174826,8 +175129,8 @@ function applyDecodedValue(descriptor, attrName, value) {
174826
175129
  descriptor.color = value;
174827
175130
  }
174828
175131
  }
174829
- function applySetAnimation(descriptor, entry2) {
174830
- applyDecodedValue(descriptor, entry2.attrName, entry2.value);
175132
+ function applySetAnimation(descriptor, entry3) {
175133
+ applyDecodedValue(descriptor, entry3.attrName, entry3.value);
174831
175134
  }
174832
175135
  function applyAttributeRamp(descriptor, component2) {
174833
175136
  const stops = component2.keyframes;
@@ -174852,8 +175155,8 @@ function applyAttributeRamp(descriptor, component2) {
174852
175155
  }
174853
175156
  function resolveTextStyleAnimation(anim) {
174854
175157
  const descriptor = {};
174855
- for (const entry2 of anim.setAnimations ?? []) {
174856
- applySetAnimation(descriptor, entry2);
175158
+ for (const entry3 of anim.setAnimations ?? []) {
175159
+ applySetAnimation(descriptor, entry3);
174857
175160
  }
174858
175161
  for (const component2 of anim.attributeAnimations ?? []) {
174859
175162
  if (RECOGNIZED_ATTRS.has(component2.attrName)) {
@@ -175338,12 +175641,12 @@ var ENTRANCE_KEYFRAME_DEFINITIONS = {
175338
175641
  to { ${blindsDecl("horizontal", 1)} opacity: 1; }
175339
175642
  }`,
175340
175643
  boxIn: `@keyframes pptx-boxIn {
175341
- from { ${maskShapeDecl("boxOut", "hidden")} opacity: 1; }
175342
- to { ${maskShapeDecl("boxOut", "shown")} opacity: 1; }
175644
+ from { ${maskHoleDecl("box", "hidden")} opacity: 1; }
175645
+ to { ${maskHoleDecl("box", "shown")} opacity: 1; }
175343
175646
  }`,
175344
175647
  circleIn: `@keyframes pptx-circleIn {
175345
- from { ${maskShapeDecl("circleOut", "hidden")} opacity: 1; }
175346
- to { ${maskShapeDecl("circleOut", "shown")} opacity: 1; }
175648
+ from { ${maskHoleDecl("circle", "hidden")} opacity: 1; }
175649
+ to { ${maskHoleDecl("circle", "shown")} opacity: 1; }
175347
175650
  }`,
175348
175651
  floatIn: `@keyframes pptx-floatIn {
175349
175652
  from { opacity: 0; transform: translateY(40px); }
@@ -175414,12 +175717,12 @@ var ENTRANCE_KEYFRAME_DEFINITIONS = {
175414
175717
  to { opacity: 1; transform: rotate(0deg) scale(1); }
175415
175718
  }`,
175416
175719
  diamondIn: `@keyframes pptx-diamondIn {
175417
- from { ${maskShapeDecl("diamondOut", "hidden")} opacity: 1; }
175418
- to { ${maskShapeDecl("diamondOut", "shown")} opacity: 1; }
175720
+ from { ${maskHoleDecl("diamond", "hidden")} opacity: 1; }
175721
+ to { ${maskHoleDecl("diamond", "shown")} opacity: 1; }
175419
175722
  }`,
175420
175723
  plusIn: `@keyframes pptx-plusIn {
175421
- from { ${maskShapeDecl("plusOut", "hidden")} opacity: 1; }
175422
- to { ${maskShapeDecl("plusOut", "shown")} opacity: 1; }
175724
+ from { ${maskPlusHoleDecl("hidden")} opacity: 1; }
175725
+ to { ${maskPlusHoleDecl("shown")} opacity: 1; }
175423
175726
  }`,
175424
175727
  wedgeIn: `@keyframes pptx-wedgeIn {
175425
175728
  from { ${maskShapeDecl("wedgeOut", "hidden")} opacity: 1; }
@@ -178598,6 +178901,8 @@ var ENTRANCE_EFFECTS = /* @__PURE__ */ new Set([
178598
178901
  "blindsIn",
178599
178902
  "boxIn",
178600
178903
  "circleIn",
178904
+ "diamondIn",
178905
+ "plusIn",
178601
178906
  "floatIn",
178602
178907
  "riseUp",
178603
178908
  "swivel",
@@ -178667,9 +178972,13 @@ function getInitialStyleForEffect(effect) {
178667
178972
  case "blindsIn":
178668
178973
  return maskEdgeInitialStyle("top");
178669
178974
  case "boxIn":
178670
- return maskShapeInitialStyle("boxOut");
178975
+ return maskHoleInitialStyle("box");
178671
178976
  case "circleIn":
178672
- return maskShapeInitialStyle("circleOut");
178977
+ return maskHoleInitialStyle("circle");
178978
+ case "diamondIn":
178979
+ return maskHoleInitialStyle("diamond");
178980
+ case "plusIn":
178981
+ return maskPlusHoleInitialStyle();
178673
178982
  case "peekIn":
178674
178983
  return maskEdgeInitialStyle("bottom");
178675
178984
  case "randomBarsIn":
@@ -181989,12 +182298,12 @@ function getMeasuredPanelDepthSkew(preset, side) {
181989
182298
  if (!preset) {
181990
182299
  return void 0;
181991
182300
  }
181992
- const entry2 = PANEL_DEPTH_SKEW_MAP[preset];
181993
- if (!entry2) {
182301
+ const entry3 = PANEL_DEPTH_SKEW_MAP[preset];
182302
+ if (!entry3) {
181994
182303
  return void 0;
181995
182304
  }
181996
- const sideSkew = side ? entry2[side] : void 0;
181997
- return sideSkew ?? { dx: entry2.dx, dy: entry2.dy };
182305
+ const sideSkew = side ? entry3[side] : void 0;
182306
+ return sideSkew ?? { dx: entry3.dx, dy: entry3.dy };
181998
182307
  }
181999
182308
  function projectHomographyPoint(h2, u, v, width, height) {
182000
182309
  const [h11, h12, h13, h21, h22, h23, h31, h32, h33] = h2;
@@ -182766,19 +183075,19 @@ function borderToCss(border, resolve2) {
182766
183075
  const color2 = border.color ?? resolve2(border.fill) ?? "#000000";
182767
183076
  return `${width}px ${dash} ${color2}`;
182768
183077
  }
182769
- function collectSections(entry2, tableData, pos2) {
183078
+ function collectSections(entry3, tableData, pos2) {
182770
183079
  const { rowIndex, cellIndex, rowCount, columnCount } = pos2;
182771
183080
  const isTop = rowIndex === 0;
182772
183081
  const isBottom = rowIndex === rowCount - 1;
182773
183082
  const isLeft = cellIndex === 0;
182774
- const isRight = cellIndex === columnCount - 1;
183083
+ const isRight2 = cellIndex === columnCount - 1;
182775
183084
  const sections2 = [];
182776
183085
  const push2 = (borders, regionTop, regionBottom, regionLeft, regionRight) => {
182777
183086
  if (borders) {
182778
183087
  sections2.push({ borders, regionTop, regionBottom, regionLeft, regionRight });
182779
183088
  }
182780
183089
  };
182781
- push2(entry2.wholeTblBorders, isTop, isBottom, isLeft, isRight);
183090
+ push2(entry3.wholeTblBorders, isTop, isBottom, isLeft, isRight2);
182782
183091
  if (tableData.bandedRows) {
182783
183092
  const bandStartRow = tableData.firstRowHeader ? 1 : 0;
182784
183093
  const bandEndRow = tableData.lastRow ? rowCount - 1 : rowCount;
@@ -182786,11 +183095,11 @@ function collectSections(entry2, tableData, pos2) {
182786
183095
  const rowCycle = Math.max(tableData.bandRowCycle ?? 1, 1);
182787
183096
  const bandGroup = Math.floor((rowIndex - bandStartRow) / rowCycle) % 2;
182788
183097
  push2(
182789
- bandGroup === 0 ? entry2.band1HBorders : entry2.band2HBorders,
183098
+ bandGroup === 0 ? entry3.band1HBorders : entry3.band2HBorders,
182790
183099
  true,
182791
183100
  true,
182792
183101
  isLeft,
182793
- isRight
183102
+ isRight2
182794
183103
  );
182795
183104
  }
182796
183105
  }
@@ -182800,42 +183109,42 @@ function collectSections(entry2, tableData, pos2) {
182800
183109
  if (cellIndex >= colStart && cellIndex < colEnd) {
182801
183110
  const colCycle = Math.max(tableData.bandColCycle ?? 1, 1);
182802
183111
  const colGroup = Math.floor((cellIndex - colStart) / colCycle) % 2;
182803
- push2(colGroup === 0 ? entry2.band1VBorders : entry2.band2VBorders, isTop, isBottom, true, true);
183112
+ push2(colGroup === 0 ? entry3.band1VBorders : entry3.band2VBorders, isTop, isBottom, true, true);
182804
183113
  }
182805
183114
  }
182806
183115
  const atTop = Boolean(tableData.firstRowHeader) && isTop;
182807
183116
  const atBottom = Boolean(tableData.lastRow) && isBottom;
182808
183117
  const atLeft = Boolean(tableData.firstCol) && isLeft;
182809
- const atRight = Boolean(tableData.lastCol) && isRight;
183118
+ const atRight = Boolean(tableData.lastCol) && isRight2;
182810
183119
  if (atRight) {
182811
- push2(entry2.lastColBorders, isTop, isBottom, true, true);
183120
+ push2(entry3.lastColBorders, isTop, isBottom, true, true);
182812
183121
  }
182813
183122
  if (atLeft) {
182814
- push2(entry2.firstColBorders, isTop, isBottom, true, true);
183123
+ push2(entry3.firstColBorders, isTop, isBottom, true, true);
182815
183124
  }
182816
183125
  if (atBottom) {
182817
- push2(entry2.lastRowBorders, true, true, isLeft, isRight);
183126
+ push2(entry3.lastRowBorders, true, true, isLeft, isRight2);
182818
183127
  }
182819
183128
  if (atBottom && atRight) {
182820
- push2(entry2.seCellBorders, true, true, true, true);
183129
+ push2(entry3.seCellBorders, true, true, true, true);
182821
183130
  }
182822
183131
  if (atBottom && atLeft) {
182823
- push2(entry2.swCellBorders, true, true, true, true);
183132
+ push2(entry3.swCellBorders, true, true, true, true);
182824
183133
  }
182825
183134
  if (atTop) {
182826
- push2(entry2.firstRowBorders, true, true, isLeft, isRight);
183135
+ push2(entry3.firstRowBorders, true, true, isLeft, isRight2);
182827
183136
  }
182828
183137
  if (atTop && atRight) {
182829
- push2(entry2.neCellBorders, true, true, true, true);
183138
+ push2(entry3.neCellBorders, true, true, true, true);
182830
183139
  }
182831
183140
  if (atTop && atLeft) {
182832
- push2(entry2.nwCellBorders, true, true, true, true);
183141
+ push2(entry3.nwCellBorders, true, true, true, true);
182833
183142
  }
182834
183143
  return sections2;
182835
183144
  }
182836
- function collectLayers(entry2, tableData, pos2) {
183145
+ function collectLayers(entry3, tableData, pos2) {
182837
183146
  const layers = [];
182838
- for (const section of collectSections(entry2, tableData, pos2)) {
183147
+ for (const section of collectSections(entry3, tableData, pos2)) {
182839
183148
  layers.push(
182840
183149
  edgesFromSection(
182841
183150
  section.borders,
@@ -182848,11 +183157,11 @@ function collectLayers(entry2, tableData, pos2) {
182848
183157
  }
182849
183158
  return layers.filter((layer) => layer !== void 0);
182850
183159
  }
182851
- function resolveCellBorderCss(entry2, tableData, pos2, resolve2) {
182852
- if (!entry2) {
183160
+ function resolveCellBorderCss(entry3, tableData, pos2, resolve2) {
183161
+ if (!entry3) {
182853
183162
  return void 0;
182854
183163
  }
182855
- const layers = collectLayers(entry2, tableData, pos2);
183164
+ const layers = collectLayers(entry3, tableData, pos2);
182856
183165
  if (layers.length === 0) {
182857
183166
  return void 0;
182858
183167
  }
@@ -182878,11 +183187,11 @@ function resolveCellBorderCss(entry2, tableData, pos2, resolve2) {
182878
183187
  }
182879
183188
  return applied ? css : void 0;
182880
183189
  }
182881
- function resolveStyleDiagonalBorders(entry2, tableData, pos2, resolve2) {
182882
- if (!entry2) {
183190
+ function resolveStyleDiagonalBorders(entry3, tableData, pos2, resolve2) {
183191
+ if (!entry3) {
182883
183192
  return void 0;
182884
183193
  }
182885
- const sections2 = collectSections(entry2, tableData, pos2);
183194
+ const sections2 = collectSections(entry3, tableData, pos2);
182886
183195
  if (sections2.length === 0) {
182887
183196
  return void 0;
182888
183197
  }
@@ -182932,20 +183241,20 @@ function builtinTableStyleMap() {
182932
183241
  const data = JSON.parse(BUILTIN_TABLE_STYLE_JSON);
182933
183242
  for (const family of data.families) {
182934
183243
  for (const variant of family.variants) {
182935
- const entry2 = substituteAccent(
183244
+ const entry3 = substituteAccent(
182936
183245
  family.template,
182937
183246
  family.baseAccent,
182938
183247
  variant.a,
182939
183248
  family.baseAccent2,
182940
183249
  variant.b
182941
183250
  );
182942
- entry2.styleId = variant.id;
182943
- entry2.styleName = variant.name;
182944
- map[variant.id] = entry2;
183251
+ entry3.styleId = variant.id;
183252
+ entry3.styleName = variant.name;
183253
+ map[variant.id] = entry3;
182945
183254
  }
182946
183255
  }
182947
- for (const entry2 of data.standalone) {
182948
- map[entry2.styleId] = entry2;
183256
+ for (const entry3 of data.standalone) {
183257
+ map[entry3.styleId] = entry3;
182949
183258
  }
182950
183259
  catalogue = map;
182951
183260
  return map;
@@ -182958,19 +183267,19 @@ function getBuiltinTableStyle(styleId) {
182958
183267
  const withBraces = normalised.startsWith("{") ? normalised : `{${normalised}}`;
182959
183268
  return builtinTableStyleMap()[withBraces];
182960
183269
  }
182961
- function resolveTableStyleCell3D(entry2, tableData, pos2) {
182962
- if (!entry2) {
183270
+ function resolveTableStyleCell3D(entry3, tableData, pos2) {
183271
+ if (!entry3) {
182963
183272
  return void 0;
182964
183273
  }
182965
183274
  const { rowIndex, cellIndex, rowCount, columnCount } = pos2;
182966
- let current = entry2.wholeTblCell3D;
183275
+ let current = entry3.wholeTblCell3D;
182967
183276
  const bandStartRow = tableData.firstRowHeader ? 1 : 0;
182968
183277
  const bandEndRow = tableData.lastRow ? rowCount - 1 : rowCount;
182969
183278
  if (tableData.bandedRows && rowIndex >= bandStartRow && rowIndex < bandEndRow) {
182970
183279
  const bandIndex = rowIndex - bandStartRow;
182971
183280
  const rowCycle = Math.max(tableData.bandRowCycle ?? 1, 1);
182972
183281
  const bandGroup = Math.floor(bandIndex / rowCycle) % 2;
182973
- current = (bandGroup === 0 ? entry2.band1HCell3D : entry2.band2HCell3D) ?? current;
183282
+ current = (bandGroup === 0 ? entry3.band1HCell3D : entry3.band2HCell3D) ?? current;
182974
183283
  }
182975
183284
  if (tableData.bandedColumns) {
182976
183285
  const isFirstCol = tableData.firstCol;
@@ -182980,7 +183289,7 @@ function resolveTableStyleCell3D(entry2, tableData, pos2) {
182980
183289
  if (!skipCol) {
182981
183290
  const colCycle = Math.max(tableData.bandColCycle ?? 1, 1);
182982
183291
  const colBandGroup = Math.floor(colBandIndex / colCycle) % 2;
182983
- current = (colBandGroup === 0 ? entry2.band1VCell3D : entry2.band2VCell3D) ?? current;
183292
+ current = (colBandGroup === 0 ? entry3.band1VCell3D : entry3.band2VCell3D) ?? current;
182984
183293
  }
182985
183294
  }
182986
183295
  const atTop = Boolean(tableData.firstRowHeader) && rowIndex === 0;
@@ -182988,28 +183297,28 @@ function resolveTableStyleCell3D(entry2, tableData, pos2) {
182988
183297
  const atLeft = Boolean(tableData.firstCol) && cellIndex === 0;
182989
183298
  const atRight = Boolean(tableData.lastCol) && cellIndex === columnCount - 1;
182990
183299
  if (atRight) {
182991
- current = entry2.lastColCell3D ?? current;
183300
+ current = entry3.lastColCell3D ?? current;
182992
183301
  }
182993
183302
  if (atLeft) {
182994
- current = entry2.firstColCell3D ?? current;
183303
+ current = entry3.firstColCell3D ?? current;
182995
183304
  }
182996
183305
  if (atBottom) {
182997
- current = entry2.lastRowCell3D ?? current;
183306
+ current = entry3.lastRowCell3D ?? current;
182998
183307
  }
182999
183308
  if (atBottom && atRight) {
183000
- current = entry2.seCellCell3D ?? current;
183309
+ current = entry3.seCellCell3D ?? current;
183001
183310
  }
183002
183311
  if (atBottom && atLeft) {
183003
- current = entry2.swCellCell3D ?? current;
183312
+ current = entry3.swCellCell3D ?? current;
183004
183313
  }
183005
183314
  if (atTop) {
183006
- current = entry2.firstRowCell3D ?? current;
183315
+ current = entry3.firstRowCell3D ?? current;
183007
183316
  }
183008
183317
  if (atTop && atRight) {
183009
- current = entry2.neCellCell3D ?? current;
183318
+ current = entry3.neCellCell3D ?? current;
183010
183319
  }
183011
183320
  if (atTop && atLeft) {
183012
- current = entry2.nwCellCell3D ?? current;
183321
+ current = entry3.nwCellCell3D ?? current;
183013
183322
  }
183014
183323
  return current;
183015
183324
  }
@@ -183493,9 +183802,9 @@ function getDiagonalBorders(style, styleDiagonals) {
183493
183802
  function getCellDiagonalBorders(style, tableData, pos2, styleCtx) {
183494
183803
  let styleDiagonals;
183495
183804
  if (tableData) {
183496
- const entry2 = resolveTableStyleEntry(tableData.tableStyleId, styleCtx?.tableStyleMap);
183805
+ const entry3 = resolveTableStyleEntry(tableData.tableStyleId, styleCtx?.tableStyleMap);
183497
183806
  styleDiagonals = resolveStyleDiagonalBorders(
183498
- entry2,
183807
+ entry3,
183499
183808
  tableData,
183500
183809
  pos2,
183501
183810
  (fill) => resolveStyleFillColor(fill, styleCtx?.colorScheme)
@@ -187167,6 +187476,7 @@ var translationsEn = {
187167
187476
  "pptx.media.startAutomatically": "Automatically",
187168
187477
  "pptx.media.playAcrossSlides": "Play across slides",
187169
187478
  "pptx.media.fullScreen": "Full screen",
187479
+ "pptx.media.onlineVideoTitle": "Online video",
187170
187480
  "pptx.media.hideWhenNotPlaying": "Hide when not playing",
187171
187481
  "pptx.media.bookmarks": "Bookmarks",
187172
187482
  "pptx.media.bookmark": "Bookmark",
@@ -187242,6 +187552,12 @@ var translationsEn = {
187242
187552
  "pptx.compare.noDifferences": "No differences",
187243
187553
  "pptx.compare.summary": "{{added}} added, {{removed}} removed, {{changed}} changed",
187244
187554
  "pptx.compare.title": "Compare",
187555
+ // Canvas context menu (empty slide right-click)
187556
+ "pptx.canvasContextMenu.formatBackground": "Format Background...",
187557
+ "pptx.canvasContextMenu.gridAndGuides": "Grid and Guides",
187558
+ "pptx.canvasContextMenu.layout": "Layout",
187559
+ "pptx.canvasContextMenu.resetSlide": "Reset Slide",
187560
+ "pptx.canvasContextMenu.ruler": "Ruler",
187245
187561
  // Context menu
187246
187562
  "pptx.contextMenu.addComment": "Add Comment",
187247
187563
  "pptx.contextMenu.bringForward": "Bring Forward",
@@ -187252,7 +187568,10 @@ var translationsEn = {
187252
187568
  "pptx.contextMenu.deleteColumn": "Delete Column",
187253
187569
  "pptx.contextMenu.deleteRow": "Delete Row",
187254
187570
  "pptx.contextMenu.duplicate": "Duplicate",
187571
+ "pptx.contextMenu.editAltText": "Edit Alt Text...",
187255
187572
  "pptx.contextMenu.editHyperlink": "Edit Hyperlink",
187573
+ "pptx.contextMenu.editText": "Edit Text",
187574
+ "pptx.contextMenu.formatShape": "Format Shape...",
187256
187575
  "pptx.contextMenu.group": "Group",
187257
187576
  "pptx.contextMenu.insertColumnLeft": "Insert Column Left",
187258
187577
  "pptx.contextMenu.insertColumnRight": "Insert Column Right",
@@ -187261,10 +187580,19 @@ var translationsEn = {
187261
187580
  "pptx.contextMenu.mergeCells": "Merge Right",
187262
187581
  "pptx.contextMenu.mergeSelectedCells": "Merge Selected Cells",
187263
187582
  "pptx.contextMenu.paste": "Paste",
187583
+ "pptx.contextMenu.saveAsPicture": "Save as Picture...",
187264
187584
  "pptx.contextMenu.sendBackward": "Send Backward",
187265
187585
  "pptx.contextMenu.sendToBack": "Send to Back",
187586
+ "pptx.contextMenu.sizeAndPosition": "Size and Position...",
187266
187587
  "pptx.contextMenu.splitCell": "Split Cell",
187267
187588
  "pptx.contextMenu.ungroup": "Ungroup",
187589
+ // Paste Special (Ctrl+Alt+V) and the post-paste Paste Options toolbar
187590
+ "pptx.pasteSpecial.dialogTitle": "Paste Special",
187591
+ "pptx.pasteSpecial.keepSourceFormatting": "Keep Source Formatting",
187592
+ "pptx.pasteSpecial.keepTextOnly": "Keep Text Only",
187593
+ "pptx.pasteSpecial.optionsLabel": "Paste Options",
187594
+ "pptx.pasteSpecial.picture": "Picture",
187595
+ "pptx.pasteSpecial.useDestinationTheme": "Use Destination Theme",
187268
187596
  // Digital signatures (additions)
187269
187597
  "pptx.digitalSignatures.badge": "Signed",
187270
187598
  "pptx.digitalSignatures.editWarning": "Editing this presentation will invalidate its digital signatures.",
@@ -187611,6 +187939,12 @@ var translationsEn = {
187611
187939
  "pptx.transition.morphOption.byObject": "By Object",
187612
187940
  "pptx.transition.morphOption.byWord": "By Word",
187613
187941
  "pptx.transition.morphOption.byChar": "By Character",
187942
+ "pptx.transition.pattern": "Pattern",
187943
+ "pptx.transition.pattern.diamond": "Diamond",
187944
+ "pptx.transition.pattern.hexagon": "Hexagon",
187945
+ "pptx.transition.pattern.strip": "Strips",
187946
+ "pptx.transition.pattern.rectangle": "Rectangles",
187947
+ "pptx.transition.thruBlk": "Through black",
187614
187948
  // Context menu / editor toolbar (Angular/Vue-specific additions)
187615
187949
  "pptx.contextMenu.ariaLabel": "Context menu",
187616
187950
  "pptx.editorToolbar.ariaLabel": "Editor toolbar",
@@ -190372,6 +190706,9 @@ function isBrowserOpenableMime(mime) {
190372
190706
  }
190373
190707
  return value === "application/pdf" || value === "application/json" || value === "application/xml" || value === "application/xhtml+xml";
190374
190708
  }
190709
+ function oleActionsVisible(surface) {
190710
+ return !surface.presenting && !surface.preview;
190711
+ }
190375
190712
  var TYPE_COLORS = {
190376
190713
  excel: "#217346",
190377
190714
  word: "#2B579A",
@@ -192188,14 +192525,14 @@ function resolveParagraphStrutFontSize(segments, bodyFontSize, fontScale = 1) {
192188
192525
  return smallest * fontScale;
192189
192526
  }
192190
192527
  function resolveParagraphRtl(paraSegments, elementRtl) {
192191
- for (const entry2 of paraSegments) {
192192
- const segRtl = entry2.segment.style?.rtl;
192528
+ for (const entry3 of paraSegments) {
192529
+ const segRtl = entry3.segment.style?.rtl;
192193
192530
  if (segRtl !== void 0) {
192194
192531
  return segRtl;
192195
192532
  }
192196
192533
  }
192197
- for (const entry2 of paraSegments) {
192198
- const paraRtl = entry2.segment.paragraphProperties?.rtl;
192534
+ for (const entry3 of paraSegments) {
192535
+ const paraRtl = entry3.segment.paragraphProperties?.rtl;
192199
192536
  if (paraRtl !== void 0) {
192200
192537
  return paraRtl;
192201
192538
  }
@@ -192203,8 +192540,8 @@ function resolveParagraphRtl(paraSegments, elementRtl) {
192203
192540
  return elementRtl;
192204
192541
  }
192205
192542
  function resolveParagraphAlign(paraSegments, elementAlign) {
192206
- for (const entry2 of paraSegments) {
192207
- const segAlign = entry2.segment.style?.align;
192543
+ for (const entry3 of paraSegments) {
192544
+ const segAlign = entry3.segment.style?.align;
192208
192545
  if (segAlign !== void 0) {
192209
192546
  return segAlign;
192210
192547
  }
@@ -193863,7 +194200,7 @@ function positions(segments) {
193863
194200
  if (!marker) {
193864
194201
  offset += segment.text.length;
193865
194202
  }
193866
- const entry2 = {
194203
+ const entry3 = {
193867
194204
  start,
193868
194205
  end: offset,
193869
194206
  paragraph,
@@ -193873,19 +194210,19 @@ function positions(segments) {
193873
194210
  if (first) {
193874
194211
  paragraph += 1;
193875
194212
  }
193876
- return entry2;
194213
+ return entry3;
193877
194214
  });
193878
194215
  }
193879
194216
  function restorePoint(segments, offset, preferRunStart = false) {
193880
194217
  const entries = positions(segments);
193881
194218
  let fallback = { index: 0, offset: 0 };
193882
- for (const [index, entry2] of entries.entries()) {
193883
- if (!entry2.editable) {
194219
+ for (const [index, entry3] of entries.entries()) {
194220
+ if (!entry3.editable) {
193884
194221
  continue;
193885
194222
  }
193886
194223
  fallback = { index, offset: segments[index].text.length };
193887
- if (offset < entry2.end || offset === entry2.end && (!preferRunStart || entry2.start === entry2.end)) {
193888
- return { index, offset: Math.max(0, offset - entry2.start) };
194224
+ if (offset < entry3.end || offset === entry3.end && (!preferRunStart || entry3.start === entry3.end)) {
194225
+ return { index, offset: Math.max(0, offset - entry3.start) };
193889
194226
  }
193890
194227
  }
193891
194228
  return fallback;
@@ -193956,7 +194293,7 @@ function applyListStyleUpdate(element, updates, selection) {
193956
194293
  }
193957
194294
  const startOffset = startEntry.start + workingSelection.startOffset;
193958
194295
  const endOffset = endEntry.start + workingSelection.endOffset;
193959
- const lastSelected = [...entries].reverse().find((entry2) => entry2.start < endOffset);
194296
+ const lastSelected = [...entries].reverse().find((entry3) => entry3.start < endOffset);
193960
194297
  const patch = setElementBullets(working, listType, {
193961
194298
  startParagraph: startEntry.paragraph,
193962
194299
  endParagraph: Math.max(startEntry.paragraph, lastSelected?.paragraph ?? endEntry.paragraph)
@@ -195444,12 +195781,12 @@ function scaleFontSizes(root, fontFactor, lineFactor) {
195444
195781
  lineHeight: Number.isFinite(lineHeight) ? lineHeight : void 0
195445
195782
  };
195446
195783
  });
195447
- for (const entry2 of original) {
195448
- if (entry2.fontSize !== void 0) {
195449
- entry2.el.style.fontSize = `${entry2.fontSize * fontFactor}px`;
195784
+ for (const entry3 of original) {
195785
+ if (entry3.fontSize !== void 0) {
195786
+ entry3.el.style.fontSize = `${entry3.fontSize * fontFactor}px`;
195450
195787
  }
195451
- if (entry2.lineHeight !== void 0) {
195452
- entry2.el.style.lineHeight = `${entry2.lineHeight * lineFactor}px`;
195788
+ if (entry3.lineHeight !== void 0) {
195789
+ entry3.el.style.lineHeight = `${entry3.lineHeight * lineFactor}px`;
195453
195790
  }
195454
195791
  }
195455
195792
  }
@@ -200316,11 +200653,11 @@ function reconcileElementYMap(ymap, element, factories, assets) {
200316
200653
  reconcileAssetFields(rec.id, rec, ymap, assets);
200317
200654
  }
200318
200655
  function mapIdAt(arr, index) {
200319
- const entry2 = arr.get(index);
200320
- if (!entry2 || typeof entry2.get !== "function") {
200656
+ const entry3 = arr.get(index);
200657
+ if (!entry3 || typeof entry3.get !== "function") {
200321
200658
  return void 0;
200322
200659
  }
200323
- const id = entry2.get("id");
200660
+ const id = entry3.get("id");
200324
200661
  return typeof id === "string" ? id : void 0;
200325
200662
  }
200326
200663
  function reconcileYArrayById(arr, items, adapter) {
@@ -200575,9 +200912,9 @@ function presenceListsEqual(a, b) {
200575
200912
  if (a.length !== b.length) {
200576
200913
  return false;
200577
200914
  }
200578
- return a.every((entry2, index) => {
200915
+ return a.every((entry3, index) => {
200579
200916
  const other = b[index];
200580
- return other !== void 0 && presenceEntriesEqual(entry2, other);
200917
+ return other !== void 0 && presenceEntriesEqual(entry3, other);
200581
200918
  });
200582
200919
  }
200583
200920
  function createPresenceProjector() {
@@ -201327,12 +201664,12 @@ function createCollaborationLivePatcher(options = {}) {
201327
201664
  return null;
201328
201665
  }
201329
201666
  const key2 = keyFor3(slideId, elementId);
201330
- let entry2 = pending.get(key2);
201331
- if (!entry2) {
201332
- entry2 = { slideId, elementId };
201333
- pending.set(key2, entry2);
201667
+ let entry3 = pending.get(key2);
201668
+ if (!entry3) {
201669
+ entry3 = { slideId, elementId };
201670
+ pending.set(key2, entry3);
201334
201671
  }
201335
- return entry2;
201672
+ return entry3;
201336
201673
  };
201337
201674
  return {
201338
201675
  beginTextEdit(slideId, elementId, onChange, ownsModel) {
@@ -201398,22 +201735,22 @@ function createCollaborationLivePatcher(options = {}) {
201398
201735
  return doc !== null && factories !== null;
201399
201736
  },
201400
201737
  patchGeometry(slideId, elementId, geometry) {
201401
- const entry2 = enqueue(slideId, elementId);
201402
- if (!entry2) {
201738
+ const entry3 = enqueue(slideId, elementId);
201739
+ if (!entry3) {
201403
201740
  return;
201404
201741
  }
201405
- entry2.geometry = { ...entry2.geometry, ...geometry };
201742
+ entry3.geometry = { ...entry3.geometry, ...geometry };
201406
201743
  schedule2();
201407
201744
  },
201408
201745
  patchText(slideId, elementId, text22, source) {
201409
201746
  if (textOwners.has(keyFor3(slideId, elementId))) {
201410
201747
  return;
201411
201748
  }
201412
- const entry2 = enqueue(slideId, elementId);
201413
- if (!entry2) {
201749
+ const entry3 = enqueue(slideId, elementId);
201750
+ if (!entry3) {
201414
201751
  return;
201415
201752
  }
201416
- entry2.text = { value: text22, source: source ?? entry2.text?.source ?? {} };
201753
+ entry3.text = { value: text22, source: source ?? entry3.text?.source ?? {} };
201417
201754
  schedule2();
201418
201755
  },
201419
201756
  flush() {
@@ -202640,6 +202977,35 @@ function applyAcceptAllSlides(slides, compareResult) {
202640
202977
  }
202641
202978
  return next;
202642
202979
  }
202980
+ var VORTEX_DIRECTIONAL_KEYFRAMES = `
202981
+ @keyframes pptx-tr-vortex-in-left { from { transform: translateX(-40%) rotate(720deg) scale(0); opacity: 0; } to { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } }
202982
+ @keyframes pptx-tr-vortex-out-left { from { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateX(-40%) rotate(-720deg) scale(0); opacity: 0; } }
202983
+ @keyframes pptx-tr-vortex-in-right { from { transform: translateX(40%) rotate(-720deg) scale(0); opacity: 0; } to { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } }
202984
+ @keyframes pptx-tr-vortex-out-right { from { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateX(40%) rotate(720deg) scale(0); opacity: 0; } }
202985
+ @keyframes pptx-tr-vortex-in-up { from { transform: translateY(-40%) rotate(720deg) scale(0); opacity: 0; } to { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } }
202986
+ @keyframes pptx-tr-vortex-out-up { from { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateY(-40%) rotate(-720deg) scale(0); opacity: 0; } }
202987
+ @keyframes pptx-tr-vortex-in-down { from { transform: translateY(40%) rotate(-720deg) scale(0); opacity: 0; } to { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } }
202988
+ @keyframes pptx-tr-vortex-out-down { from { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateY(40%) rotate(720deg) scale(0); opacity: 0; } }
202989
+ `;
202990
+ var RIPPLE_DIRECTIONAL_KEYFRAMES = `
202991
+ @keyframes pptx-tr-ripple-in-lu { from { clip-path: circle(0% at 0% 0%); opacity: 0.5; } 30% { clip-path: circle(20% at 0% 0%); opacity: 0.7; } 60% { clip-path: circle(55% at 0% 0%); opacity: 0.9; } to { clip-path: circle(150% at 0% 0%); opacity: 1; } }
202992
+ @keyframes pptx-tr-ripple-in-ru { from { clip-path: circle(0% at 100% 0%); opacity: 0.5; } 30% { clip-path: circle(20% at 100% 0%); opacity: 0.7; } 60% { clip-path: circle(55% at 100% 0%); opacity: 0.9; } to { clip-path: circle(150% at 100% 0%); opacity: 1; } }
202993
+ @keyframes pptx-tr-ripple-in-ld { from { clip-path: circle(0% at 0% 100%); opacity: 0.5; } 30% { clip-path: circle(20% at 0% 100%); opacity: 0.7; } 60% { clip-path: circle(55% at 0% 100%); opacity: 0.9; } to { clip-path: circle(150% at 0% 100%); opacity: 1; } }
202994
+ @keyframes pptx-tr-ripple-in-rd { from { clip-path: circle(0% at 100% 100%); opacity: 0.5; } 30% { clip-path: circle(20% at 100% 100%); opacity: 0.7; } 60% { clip-path: circle(55% at 100% 100%); opacity: 0.9; } to { clip-path: circle(150% at 100% 100%); opacity: 1; } }
202995
+ `;
202996
+ var GLITTER_DIRECTIONAL_KEYFRAMES = `
202997
+ @keyframes pptx-tr-glitter-diamond-in-l { from { opacity: 0; transform: translateX(-6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateX(-2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0); } }
202998
+ @keyframes pptx-tr-glitter-diamond-in-r { from { opacity: 0; transform: translateX(6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateX(2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0); } }
202999
+ @keyframes pptx-tr-glitter-diamond-in-u { from { opacity: 0; transform: translateY(-6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateY(-2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0); } }
203000
+ @keyframes pptx-tr-glitter-diamond-in-d { from { opacity: 0; transform: translateY(6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateY(2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0); } }
203001
+ @keyframes pptx-tr-glitter-hexagon-in-l { from { opacity: 0; transform: translateX(-6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateX(-2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }
203002
+ @keyframes pptx-tr-glitter-hexagon-in-r { from { opacity: 0; transform: translateX(6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateX(2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }
203003
+ @keyframes pptx-tr-glitter-hexagon-in-u { from { opacity: 0; transform: translateY(-6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateY(-2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }
203004
+ @keyframes pptx-tr-glitter-hexagon-in-d { from { opacity: 0; transform: translateY(6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateY(2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }
203005
+ `;
203006
+ var DIRECTIONAL_FX_KEYFRAMES = `${VORTEX_DIRECTIONAL_KEYFRAMES}
203007
+ ${RIPPLE_DIRECTIONAL_KEYFRAMES}
203008
+ ${GLITTER_DIRECTIONAL_KEYFRAMES}`;
202643
203009
  var PRISM_TRANSITION_KEYFRAMES = `
202644
203010
  @keyframes pptx-tr-prism-in-from-right {
202645
203011
  from { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }
@@ -202961,7 +203327,8 @@ ${WARP_TRANSITION_KEYFRAMES}
202961
203327
  }
202962
203328
  `;
202963
203329
  var P14_TRANSITION_KEYFRAMES_ALL = `${P14_TRANSITION_KEYFRAMES}
202964
- ${P14_TRANSITION_KEYFRAMES_2}`;
203330
+ ${P14_TRANSITION_KEYFRAMES_2}
203331
+ ${DIRECTIONAL_FX_KEYFRAMES}`;
202965
203332
  function getBoxTransitionAnimations(durationMs, direction) {
202966
203333
  const dur = `${durationMs}ms`;
202967
203334
  const dir = resolveDirection(direction, "left");
@@ -202984,6 +203351,61 @@ function prismDepthPair(prefix, dir, axis, translateSign) {
202984
203351
  var BOX_TRANSITION_KEYFRAMES = `
202985
203352
  /* \u2500\u2500 Box (faces separate and recede in depth, unlike Cube's flush hinge) \u2500\u2500 */${prismDepthPair("box", "left", "X", -1)}${prismDepthPair("box", "right", "X", 1)}${prismDepthPair("box", "up", "Y", -1)}${prismDepthPair("box", "down", "Y", 1)}
202986
203353
  `;
203354
+ var FALLOVER_RIGHT_KEYFRAMES = `
203355
+ @keyframes pptx-tr-fallover-out-right {
203356
+ 0% { transform: perspective(1400px) rotate3d(1, -1, 0, 0deg) scale(1); transform-origin: bottom right; opacity: 1; }
203357
+ 55% { transform: perspective(1400px) rotate3d(1, -1, 0, 45deg) scale(.92); transform-origin: bottom right; opacity: .85; }
203358
+ 100% { transform: perspective(1400px) rotate3d(1, -1, 0, 85deg) scale(.7); transform-origin: bottom right; opacity: 0; }
203359
+ }
203360
+ `;
203361
+ var DRAPE_RIGHT_KEYFRAMES = `
203362
+ @keyframes pptx-tr-drape-in-right {
203363
+ from { transform: perspective(1600px) rotateX(-55deg) rotateZ(4deg) scale(1.15); transform-origin: top right; opacity: 0; }
203364
+ to { transform: perspective(1600px) rotateX(0deg) rotateZ(0deg) scale(1); transform-origin: top right; opacity: 1; }
203365
+ }
203366
+ `;
203367
+ var PEELOFF_RIGHT_KEYFRAMES = `
203368
+ @keyframes pptx-tr-peeloff-out-right {
203369
+ from { transform: perspective(1400px) rotate3d(1, -1, 0, 0deg); transform-origin: top left; opacity: 1; }
203370
+ to { transform: perspective(1400px) rotate3d(1, -1, 0, 110deg); transform-origin: top left; opacity: .15; }
203371
+ }
203372
+ `;
203373
+ var PAGECURL_RIGHT_KEYFRAMES = `
203374
+ @keyframes pptx-tr-pagecurl-out-right {
203375
+ from { transform: perspective(1600px) rotateY(0deg); transform-origin: left center; opacity: 1; }
203376
+ to { transform: perspective(1600px) rotateY(155deg); transform-origin: left center; opacity: .25; }
203377
+ }
203378
+ @keyframes pptx-tr-pagecurl-double-in-right {
203379
+ from { transform: perspective(1600px) rotateY(-155deg); transform-origin: right center; opacity: .25; }
203380
+ to { transform: perspective(1600px) rotateY(0deg); transform-origin: right center; opacity: 1; }
203381
+ }
203382
+ `;
203383
+ var AIRPLANE_RIGHT_KEYFRAMES = `
203384
+ @keyframes pptx-tr-airplane-out-right {
203385
+ 0% { transform: perspective(1200px) translate3d(0, 0, 0) rotate3d(-1, -1, 0, 0deg) scale(1); opacity: 1; }
203386
+ 40% { transform: perspective(1200px) translate3d(-10%, -10%, 0) rotate3d(-1, -1, 0, 25deg) scale(.85); opacity: 1; }
203387
+ 100% { transform: perspective(1200px) translate3d(-150%, -70%, 0) rotate3d(-1, -1, 1, 70deg) scale(.05); opacity: 0; }
203388
+ }
203389
+ `;
203390
+ var ORIGAMI_RIGHT_KEYFRAMES = `
203391
+ @keyframes pptx-tr-origami-out-right {
203392
+ 0% { transform: perspective(1400px) rotateX(0deg) rotateZ(0deg) translateY(0) scale(1); transform-origin: top right; opacity: 1; filter: brightness(1); }
203393
+ 45% { transform: perspective(1400px) rotateX(-52deg) rotateZ(-3deg) translateY(2%) scale(.96); transform-origin: top right; opacity: 1; filter: brightness(.82); }
203394
+ 70% { transform: perspective(1400px) rotateX(-84deg) rotateZ(-3deg) translateY(8%) scale(.88); transform-origin: top right; opacity: .8; filter: brightness(.68); }
203395
+ 100% { transform: perspective(1400px) rotateX(-125deg) rotateZ(-3deg) translateY(30%) scale(.68); transform-origin: top right; opacity: 0; filter: brightness(.55); }
203396
+ }
203397
+ @keyframes pptx-tr-origami-in-right {
203398
+ 0% { transform: perspective(1400px) rotateX(62deg) rotateZ(3deg) scale(.94); transform-origin: bottom left; opacity: 0; filter: brightness(.7); }
203399
+ 30% { transform: perspective(1400px) rotateX(62deg) rotateZ(3deg) scale(.94); transform-origin: bottom left; opacity: .65; filter: brightness(.75); }
203400
+ 100% { transform: perspective(1400px) rotateX(0deg) rotateZ(0deg) scale(1); transform-origin: bottom left; opacity: 1; filter: brightness(1); }
203401
+ }
203402
+ `;
203403
+ var CINEMATIC_MIRROR_KEYFRAMES = `${FALLOVER_RIGHT_KEYFRAMES}
203404
+ ${DRAPE_RIGHT_KEYFRAMES}
203405
+ ${PEELOFF_RIGHT_KEYFRAMES}
203406
+ ${PAGECURL_RIGHT_KEYFRAMES}
203407
+ ${AIRPLANE_RIGHT_KEYFRAMES}
203408
+ ${ORIGAMI_RIGHT_KEYFRAMES}`;
202987
203409
  var ROTATE_TRANSITION_KEYFRAMES = `
202988
203410
  /* \u2500\u2500 Rotate (screen-flush hinge, like Cube, reached via \`isContent="1"\`
202989
203411
  instead of Cube's bare element) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
@@ -202996,6 +203418,9 @@ var ROTATE_TRANSITION_KEYFRAMES = `
202996
203418
  @keyframes pptx-tr-rotate-out-down { from { transform: perspective(1500px) translateY(0) rotateX(0deg); } to { transform: perspective(1500px) translateY(50%) rotateX(-90deg); opacity: .55; } }
202997
203419
  @keyframes pptx-tr-rotate-in-down { from { transform: perspective(1500px) translateY(-50%) rotateX(90deg); opacity: .55; } to { transform: perspective(1500px) translateY(0) rotateX(0deg); opacity: 1; } }
202998
203420
  `;
203421
+ function isRight(direction) {
203422
+ return resolveDirection(direction, "left") === "right";
203423
+ }
202999
203424
  function threeDPair(prefix, dir, dur, outgoingOnTop) {
203000
203425
  return {
203001
203426
  outgoing: `${prefix}-out-${dir} ${dur} ${EASE} forwards`,
@@ -203025,14 +203450,14 @@ function getCinematicTransitionAnimations(type, durationMs, direction, orient) {
203025
203450
  return threeDPair("pptx-tr-rotate", resolveDirection(direction, "left"), dur, false);
203026
203451
  case "fallOver":
203027
203452
  return {
203028
- outgoing: `pptx-tr-fallover-out ${dur} ${EASE} forwards`,
203453
+ outgoing: `${isRight(direction) ? "pptx-tr-fallover-out-right" : "pptx-tr-fallover-out"} ${dur} ${EASE} forwards`,
203029
203454
  incoming: "none",
203030
203455
  outgoingOnTop: true
203031
203456
  };
203032
203457
  case "drape":
203033
203458
  return {
203034
203459
  outgoing: "none",
203035
- incoming: `pptx-tr-drape-in ${dur} ${EASE} forwards`,
203460
+ incoming: `${isRight(direction) ? "pptx-tr-drape-in-right" : "pptx-tr-drape-in"} ${dur} ${EASE} forwards`,
203036
203461
  outgoingOnTop: false
203037
203462
  };
203038
203463
  case "curtains":
@@ -203068,36 +203493,46 @@ function getCinematicTransitionAnimations(type, durationMs, direction, orient) {
203068
203493
  incoming: `pptx-tr-crush-in ${dur} ${EASE} forwards`,
203069
203494
  outgoingOnTop: true
203070
203495
  };
203071
- case "peelOff":
203496
+ case "peelOff": {
203497
+ const right = isRight(direction);
203072
203498
  return {
203073
- outgoing: `pptx-tr-peeloff-out ${dur} ${EASE} forwards`,
203499
+ outgoing: `${right ? "pptx-tr-peeloff-out-right" : "pptx-tr-peeloff-out"} ${dur} ${EASE} forwards`,
203074
203500
  incoming: "none",
203075
203501
  outgoingOnTop: true
203076
203502
  };
203077
- case "pageCurlSingle":
203503
+ }
203504
+ case "pageCurlSingle": {
203505
+ const right = isRight(direction);
203078
203506
  return {
203079
- outgoing: `pptx-tr-pagecurl-out ${dur} ${EASE} forwards`,
203507
+ outgoing: `${right ? "pptx-tr-pagecurl-out-right" : "pptx-tr-pagecurl-out"} ${dur} ${EASE} forwards`,
203080
203508
  incoming: "none",
203081
203509
  outgoingOnTop: true
203082
203510
  };
203083
- case "pageCurlDouble":
203511
+ }
203512
+ case "pageCurlDouble": {
203513
+ const right = isRight(direction);
203084
203514
  return {
203085
- outgoing: `pptx-tr-pagecurl-out ${dur} ${EASE} forwards`,
203086
- incoming: `pptx-tr-pagecurl-double-in ${dur} ${EASE} forwards`,
203515
+ outgoing: `${right ? "pptx-tr-pagecurl-out-right" : "pptx-tr-pagecurl-out"} ${dur} ${EASE} forwards`,
203516
+ incoming: `${right ? "pptx-tr-pagecurl-double-in-right" : "pptx-tr-pagecurl-double-in"} ${dur} ${EASE} forwards`,
203087
203517
  outgoingOnTop: true
203088
203518
  };
203089
- case "airplane":
203519
+ }
203520
+ case "airplane": {
203521
+ const right = isRight(direction);
203090
203522
  return {
203091
- outgoing: `pptx-tr-airplane-out ${dur} ${EASE} forwards`,
203523
+ outgoing: `${right ? "pptx-tr-airplane-out-right" : "pptx-tr-airplane-out"} ${dur} ${EASE} forwards`,
203092
203524
  incoming: `pptx-tr-fade-in ${dur} ${EASE} forwards`,
203093
203525
  outgoingOnTop: true
203094
203526
  };
203095
- case "origami":
203527
+ }
203528
+ case "origami": {
203529
+ const right = isRight(direction);
203096
203530
  return {
203097
- outgoing: `pptx-tr-origami-out ${dur} ${EASE} forwards`,
203098
- incoming: `pptx-tr-origami-in ${dur} ${EASE} forwards`,
203531
+ outgoing: `${right ? "pptx-tr-origami-out-right" : "pptx-tr-origami-out"} ${dur} ${EASE} forwards`,
203532
+ incoming: `${right ? "pptx-tr-origami-in-right" : "pptx-tr-origami-in"} ${dur} ${EASE} forwards`,
203099
203533
  outgoingOnTop: true
203100
203534
  };
203535
+ }
203101
203536
  default:
203102
203537
  return void 0;
203103
203538
  }
@@ -203185,6 +203620,7 @@ ${ROTATE_TRANSITION_KEYFRAMES}
203185
203620
  moment is brief and already mid-fade, so no line artifact survives. */
203186
203621
  @keyframes pptx-tr-origami-out { 0% { transform: perspective(1400px) rotateX(0deg) translateY(0) scale(1); transform-origin: top center; opacity: 1; filter: brightness(1); } 45% { transform: perspective(1400px) rotateX(-52deg) translateY(2%) scale(.96); transform-origin: top center; opacity: 1; filter: brightness(.82); } 70% { transform: perspective(1400px) rotateX(-84deg) translateY(8%) scale(.88); transform-origin: top center; opacity: .8; filter: brightness(.68); } 100% { transform: perspective(1400px) rotateX(-125deg) translateY(30%) scale(.68); transform-origin: top center; opacity: 0; filter: brightness(.55); } }
203187
203622
  @keyframes pptx-tr-origami-in { 0% { transform: perspective(1400px) rotateX(62deg) scale(.94); transform-origin: bottom center; opacity: 0; filter: brightness(.7); } 30% { transform: perspective(1400px) rotateX(62deg) scale(.94); transform-origin: bottom center; opacity: .65; filter: brightness(.75); } 100% { transform: perspective(1400px) rotateX(0deg) scale(1); transform-origin: bottom center; opacity: 1; filter: brightness(1); } }
203623
+ ${CINEMATIC_MIRROR_KEYFRAMES}
203188
203624
  `;
203189
203625
  function seededUnit(seed) {
203190
203626
  const x = Math.sin(seed * 12.9898 + 78.233) * 43758.5453;
@@ -203989,6 +204425,36 @@ ${P14_TRANSITION_KEYFRAMES_ALL}
203989
204425
  ${CINEMATIC_TRANSITION_KEYFRAMES}
203990
204426
  ${FRAGMENT_TRANSITION_KEYFRAMES}`;
203991
204427
  var SLIDE_TRANSITION_KEYFRAMES_CSS = SLIDE_TRANSITION_KEYFRAMES;
204428
+ function getVortexAnimations(durationMs, direction, ease) {
204429
+ const dur = `${durationMs}ms`;
204430
+ const dir = resolveDirection(direction, "left");
204431
+ return {
204432
+ outgoing: `pptx-tr-vortex-out-${dir} ${dur} ${ease} forwards`,
204433
+ incoming: `pptx-tr-vortex-in-${dir} ${dur} ${ease} forwards`,
204434
+ outgoingOnTop: true
204435
+ };
204436
+ }
204437
+ function getRippleAnimations(durationMs, direction, ease) {
204438
+ const dur = `${durationMs}ms`;
204439
+ const dir = resolveDirection8(direction, "left");
204440
+ const corner2 = dir === "lu" || dir === "ld" || dir === "ru" || dir === "rd" ? dir : void 0;
204441
+ return {
204442
+ outgoing: "none",
204443
+ incoming: corner2 ? `pptx-tr-ripple-in-${corner2} ${dur} ${ease} forwards` : `pptx-tr-ripple-in ${dur} ${ease} forwards`,
204444
+ outgoingOnTop: false
204445
+ };
204446
+ }
204447
+ function getGlitterAnimations(durationMs, direction, pattern, ease) {
204448
+ const dur = `${durationMs}ms`;
204449
+ const dir = resolveDirection(direction, "left");
204450
+ const dirToken = dir === "left" ? "l" : dir === "right" ? "r" : dir === "up" ? "u" : "d";
204451
+ const family = pattern === "hexagon" ? "hexagon" : "diamond";
204452
+ return {
204453
+ outgoing: `pptx-tr-fade-out ${dur} ${ease} forwards`,
204454
+ incoming: `pptx-tr-glitter-${family}-in-${dirToken} ${dur} ${ease} forwards`,
204455
+ outgoingOnTop: true
204456
+ };
204457
+ }
203992
204458
  function resolveLR(direction) {
203993
204459
  if (direction === "l" || direction === "r") {
203994
204460
  return direction;
@@ -204127,11 +204593,7 @@ function getP14TransitionAnimations(type, durationMs, direction, orient, pattern
204127
204593
  };
204128
204594
  }
204129
204595
  case "glitter":
204130
- return {
204131
- outgoing: `pptx-tr-fade-out ${dur} ${ease} forwards`,
204132
- incoming: `pptx-tr-glitter-in ${dur} ${ease} forwards`,
204133
- outgoingOnTop: true
204134
- };
204596
+ return getGlitterAnimations(durationMs, direction, pattern, ease);
204135
204597
  case "honeycomb":
204136
204598
  return {
204137
204599
  outgoing: `pptx-tr-honeycomb-out ${dur} ${ease} forwards`,
@@ -204151,11 +204613,7 @@ function getP14TransitionAnimations(type, durationMs, direction, orient, pattern
204151
204613
  };
204152
204614
  }
204153
204615
  case "ripple":
204154
- return {
204155
- outgoing: "none",
204156
- incoming: `pptx-tr-ripple-in ${dur} ${ease} forwards`,
204157
- outgoingOnTop: false
204158
- };
204616
+ return getRippleAnimations(durationMs, direction, ease);
204159
204617
  case "shred": {
204160
204618
  const isRectangles = pattern === "rectangle";
204161
204619
  return {
@@ -204180,11 +204638,7 @@ function getP14TransitionAnimations(type, durationMs, direction, orient, pattern
204180
204638
  };
204181
204639
  }
204182
204640
  case "vortex":
204183
- return {
204184
- outgoing: `pptx-tr-vortex-out ${dur} ${ease} forwards`,
204185
- incoming: `pptx-tr-vortex-in ${dur} ${ease} forwards`,
204186
- outgoingOnTop: true
204187
- };
204641
+ return getVortexAnimations(durationMs, direction, ease);
204188
204642
  case "warp": {
204189
204643
  const isOut = direction === "out";
204190
204644
  if (isOut) {
@@ -204583,7 +205037,7 @@ var TRANSITION_MORPH_OPTIONS = [
204583
205037
  { value: "byWord", label: "By Word", i18nKey: "pptx.transition.morphOption.byWord" },
204584
205038
  { value: "byChar", label: "By Character", i18nKey: "pptx.transition.morphOption.byChar" }
204585
205039
  ];
204586
- var TRANSITION_ORIENTATION_TYPES = /* @__PURE__ */ new Set(["blinds", "checker", "comb", "randomBar"]);
205040
+ var TRANSITION_ORIENTATION_TYPES = /* @__PURE__ */ new Set(["blinds", "checker", "comb", "randomBar", "doors", "window"]);
204587
205041
  var TRANSITION_DIR_ARROWS = {
204588
205042
  l: "\u2190",
204589
205043
  r: "\u2192",
@@ -204642,8 +205096,8 @@ function transitionSoundOptions(transition) {
204642
205096
  options.push({ value: TRANSITION_SOUND_CURRENT_VALUE, label: fileName });
204643
205097
  }
204644
205098
  options.push({ value: TRANSITION_SOUND_NONE_VALUE, i18nKey: "pptx.ribbon.soundNone" });
204645
- for (const entry2 of EFFECT_SOUND_CATALOGUE) {
204646
- options.push({ value: entry2.id, i18nKey: entry2.i18nKey });
205099
+ for (const entry3 of EFFECT_SOUND_CATALOGUE) {
205100
+ options.push({ value: entry3.id, i18nKey: entry3.i18nKey });
204647
205101
  }
204648
205102
  options.push({ value: TRANSITION_SOUND_OTHER_VALUE, i18nKey: "pptx.ribbon.soundOther" });
204649
205103
  return options;
@@ -207460,9 +207914,9 @@ function observeElementHeight(el, onHeight) {
207460
207914
  return () => void 0;
207461
207915
  }
207462
207916
  const observer = new ResizeObserver((entries) => {
207463
- const entry2 = entries[entries.length - 1];
207464
- if (entry2) {
207465
- const box = entry2.borderBoxSize?.[0]?.blockSize;
207917
+ const entry3 = entries[entries.length - 1];
207918
+ if (entry3) {
207919
+ const box = entry3.borderBoxSize?.[0]?.blockSize;
207466
207920
  onHeight(box ?? el.getBoundingClientRect().height);
207467
207921
  }
207468
207922
  });
@@ -208742,7 +209196,7 @@ function buildJoinCollaborationConfig(fields) {
208742
209196
  const serverUrl = (url?.searchParams.get("server") ?? fields.serverUrl).trim();
208743
209197
  const transport = requestedTransport === "webrtc" ? "webrtc" : resolveTransportForServerUrl(serverUrl);
208744
209198
  const signalingValue = url?.searchParams.get("signaling");
208745
- const signaling = signalingValue?.split(",").map((entry2) => entry2.trim()).filter((entry2) => entry2.length > 0);
209199
+ const signaling = signalingValue?.split(",").map((entry3) => entry3.trim()).filter((entry3) => entry3.length > 0);
208746
209200
  return {
208747
209201
  roomId,
208748
209202
  userName,
@@ -208895,11 +209349,11 @@ function buildTextBuildSpec(elementId, paraIndex, runs, states) {
208895
209349
  );
208896
209350
  if (hasCharBuild) {
208897
209351
  const spans = characters.map(
208898
- (entry2, index) => stateSpan(
209352
+ (entry3, index) => stateSpan(
208899
209353
  `${elementId}${TEXT_BUILD_ID_SEP}c${paraIndex}-${index}`,
208900
- entry2.ch,
209354
+ entry3.ch,
208901
209355
  states,
208902
- entry2.style
209356
+ entry3.style
208903
209357
  )
208904
209358
  );
208905
209359
  return { granularity: "char", spans };
@@ -209208,17 +209662,17 @@ function createViewerStore(initial) {
209208
209662
  return;
209209
209663
  }
209210
209664
  notifiedState = state;
209211
- for (const entry2 of [...selectors]) {
209212
- if (!selectors.has(entry2)) {
209665
+ for (const entry3 of [...selectors]) {
209666
+ if (!selectors.has(entry3)) {
209213
209667
  continue;
209214
209668
  }
209215
- const next = entry2.select(state);
209216
- const previous = entry2.last;
209217
- if (entry2.equal(previous, next)) {
209669
+ const next = entry3.select(state);
209670
+ const previous = entry3.last;
209671
+ if (entry3.equal(previous, next)) {
209218
209672
  continue;
209219
209673
  }
209220
- entry2.last = next;
209221
- entry2.notify(next, previous);
209674
+ entry3.last = next;
209675
+ entry3.notify(next, previous);
209222
209676
  }
209223
209677
  for (const listener of [...listeners2]) {
209224
209678
  if (listeners2.has(listener)) {
@@ -209243,15 +209697,15 @@ function createViewerStore(initial) {
209243
209697
  };
209244
209698
  },
209245
209699
  subscribeSelector(selector, listener, isEqual) {
209246
- const entry2 = {
209700
+ const entry3 = {
209247
209701
  select: selector,
209248
209702
  notify: listener,
209249
209703
  equal: isEqual ?? defaultEqual,
209250
209704
  last: selector(state)
209251
209705
  };
209252
- selectors.add(entry2);
209706
+ selectors.add(entry3);
209253
209707
  return () => {
209254
- selectors.delete(entry2);
209708
+ selectors.delete(entry3);
209255
209709
  };
209256
209710
  },
209257
209711
  batch(write) {
@@ -210496,6 +210950,9 @@ function mapEditorKey(input, guard = {}) {
210496
210950
  if (mod && !alt && key2.toLowerCase() === "h") {
210497
210951
  return { action: "findReplace" };
210498
210952
  }
210953
+ if (mod && alt && key2.toLowerCase() === "v" && !state.isTextInputTarget) {
210954
+ return state.canPaste === false ? NO_ACTION : { action: "pasteSpecial" };
210955
+ }
210499
210956
  if (mod && !alt) {
210500
210957
  const liveFormat = resolveLiveFormatChord(key2, Boolean(input.shiftKey));
210501
210958
  if (liveFormat) {
@@ -210662,6 +211119,11 @@ var LABEL_KEYS = {
210662
211119
  "table-split": "pptx.contextMenu.splitCell",
210663
211120
  group: "pptx.contextMenu.group",
210664
211121
  ungroup: "pptx.contextMenu.ungroup",
211122
+ "edit-text": "pptx.contextMenu.editText",
211123
+ "save-as-picture": "pptx.contextMenu.saveAsPicture",
211124
+ "edit-alt-text": "pptx.contextMenu.editAltText",
211125
+ "size-and-position": "pptx.contextMenu.sizeAndPosition",
211126
+ "format-shape": "pptx.contextMenu.formatShape",
210665
211127
  delete: "pptx.contextMenu.delete"
210666
211128
  };
210667
211129
  function entry(id, extra = {}) {
@@ -210691,6 +211153,7 @@ function tableEntries(table2) {
210691
211153
  entry("table-merge-down")
210692
211154
  ];
210693
211155
  }
211156
+ var TEXT_EDITABLE_ELEMENT_TYPES = /* @__PURE__ */ new Set(["text", "shape"]);
210694
211157
  function buildContextMenuEntries(context = {}) {
210695
211158
  const { elementType, table: table2, hasMultiSelection, aiEnabled, hasClipboard, selectionGroupable } = context;
210696
211159
  const lockedOut = selectionGroupable === false;
@@ -210698,12 +211161,17 @@ function buildContextMenuEntries(context = {}) {
210698
211161
  entry("copy"),
210699
211162
  entry("cut"),
210700
211163
  entry("paste", hasClipboard === false ? { disabled: true } : {}),
210701
- entry("duplicate"),
211164
+ entry("duplicate")
211165
+ ];
211166
+ if (elementType && TEXT_EDITABLE_ELEMENT_TYPES.has(elementType)) {
211167
+ entries.push(entry("edit-text"));
211168
+ }
211169
+ entries.push(
210702
211170
  entry("bring-forward", { separatorBefore: true }),
210703
211171
  entry("send-backward"),
210704
211172
  entry("bring-front"),
210705
211173
  entry("send-back")
210706
- ];
211174
+ );
210707
211175
  if (aiEnabled) {
210708
211176
  entries.push(entry("ai-ask", { separatorBefore: true }), entry("ai-fix"));
210709
211177
  }
@@ -210723,13 +211191,108 @@ function buildContextMenuEntries(context = {}) {
210723
211191
  );
210724
211192
  }
210725
211193
  entries.push(
210726
- entry("delete", {
210727
- separatorBefore: !hasMultiSelection && elementType !== "group",
210728
- danger: true
210729
- })
211194
+ entry("save-as-picture", { separatorBefore: true }),
211195
+ entry("edit-alt-text"),
211196
+ entry("size-and-position"),
211197
+ entry("format-shape")
210730
211198
  );
211199
+ entries.push(entry("delete", { separatorBefore: true, danger: true }));
210731
211200
  return entries;
210732
211201
  }
211202
+ var INSPECTOR_SECTION_ATTRIBUTE = "data-pptx-inspector-section";
211203
+ function contextMenuInspectorAnchor(id) {
211204
+ switch (id) {
211205
+ case "size-and-position":
211206
+ return "transform";
211207
+ case "format-shape":
211208
+ return "fill-stroke";
211209
+ case "edit-alt-text":
211210
+ return "alt-text";
211211
+ default:
211212
+ return null;
211213
+ }
211214
+ }
211215
+ function scrollInspectorSectionIntoView(doc, anchor) {
211216
+ const node = doc.querySelector(`[${INSPECTOR_SECTION_ATTRIBUTE}="${anchor}"]`);
211217
+ node?.scrollIntoView({ behavior: "smooth", block: "start" });
211218
+ }
211219
+ var PASTE_SPECIAL_OPTIONS = [
211220
+ { id: "keep-source-formatting", labelKey: "pptx.pasteSpecial.keepSourceFormatting" },
211221
+ { id: "use-destination-theme", labelKey: "pptx.pasteSpecial.useDestinationTheme" },
211222
+ { id: "picture", labelKey: "pptx.pasteSpecial.picture" },
211223
+ { id: "keep-text-only", labelKey: "pptx.pasteSpecial.keepTextOnly" }
211224
+ ];
211225
+ function pasteElementHasText(element) {
211226
+ return "text" in element && typeof element.text === "string" && element.text.trim().length > 0;
211227
+ }
211228
+ function stripSourceThemeOverrides(element) {
211229
+ const next = structuredClone(element);
211230
+ if ("shapeStyle" in next && next.shapeStyle) {
211231
+ const style = { ...next.shapeStyle };
211232
+ delete style.fillColor;
211233
+ delete style.fillColorRef;
211234
+ delete style.strokeColor;
211235
+ delete style.strokeColorRef;
211236
+ next.shapeStyle = style;
211237
+ }
211238
+ if ("textStyle" in next && next.textStyle) {
211239
+ const style = { ...next.textStyle };
211240
+ delete style.color;
211241
+ delete style.fontFamily;
211242
+ next.textStyle = style;
211243
+ }
211244
+ if ("textSegments" in next && Array.isArray(next.textSegments)) {
211245
+ next.textSegments = next.textSegments.map((segment) => {
211246
+ const style = segment.style ? { ...segment.style } : void 0;
211247
+ if (!style) {
211248
+ return segment;
211249
+ }
211250
+ delete style.color;
211251
+ delete style.fontFamily;
211252
+ return { ...segment, style };
211253
+ });
211254
+ }
211255
+ return next;
211256
+ }
211257
+ function toTextOnly(element) {
211258
+ if (!pasteElementHasText(element)) {
211259
+ return element;
211260
+ }
211261
+ return {
211262
+ type: "text",
211263
+ id: element.id,
211264
+ x: element.x,
211265
+ y: element.y,
211266
+ width: element.width,
211267
+ height: element.height,
211268
+ rotation: element.rotation,
211269
+ text: "text" in element ? element.text : void 0
211270
+ };
211271
+ }
211272
+ function applyPasteSpecialFormat(element, format) {
211273
+ switch (format) {
211274
+ case "use-destination-theme":
211275
+ return stripSourceThemeOverrides(element);
211276
+ case "keep-text-only":
211277
+ return toTextOnly(element);
211278
+ case "keep-source-formatting":
211279
+ case "picture":
211280
+ default:
211281
+ return element;
211282
+ }
211283
+ }
211284
+ function buildRasterPictureElement(element, dataUrl) {
211285
+ return {
211286
+ type: "picture",
211287
+ id: element.id,
211288
+ x: element.x,
211289
+ y: element.y,
211290
+ width: element.width,
211291
+ height: element.height,
211292
+ rotation: element.rotation,
211293
+ imageData: dataUrl
211294
+ };
211295
+ }
210733
211296
  var ACTION_BUTTON_PRESETS = [
210734
211297
  {
210735
211298
  shapeType: "actionButtonBackPrevious",
@@ -212595,9 +213158,9 @@ var mentionMatchScore = (author, needle) => {
212595
213158
  };
212596
213159
  function matchCommentMentionAuthors(authors, query, limit = 6) {
212597
213160
  const needle = String(query ?? "").trim().toLowerCase();
212598
- const scored = authors.filter((author) => author.id && author.name).map((author) => ({ author, score: mentionMatchScore(author, needle) })).filter((entry2) => entry2.score >= 0);
213161
+ const scored = authors.filter((author) => author.id && author.name).map((author) => ({ author, score: mentionMatchScore(author, needle) })).filter((entry3) => entry3.score >= 0);
212599
213162
  scored.sort((a, b) => a.score - b.score || a.author.name.localeCompare(b.author.name));
212600
- return scored.slice(0, limit).map((entry2) => entry2.author);
213163
+ return scored.slice(0, limit).map((entry3) => entry3.author);
212601
213164
  }
212602
213165
  function defaultMentionId() {
212603
213166
  if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
@@ -212793,7 +213356,7 @@ var DEFAULT_CHART_POSITION = { x: 120, y: 120, width: 480, height: 320 };
212793
213356
  var DEFAULT_CATEGORIES = ["Category 1", "Category 2", "Category 3"];
212794
213357
  var DEFAULT_SERIES_VALUES = [4, 3, 5];
212795
213358
  function createDefaultChartElement(chartKind = DEFAULT_INSERT_CHART_KIND, position2) {
212796
- const option = INSERT_CHART_TYPES.find((entry2) => entry2.id === chartKind);
213359
+ const option = INSERT_CHART_TYPES.find((entry3) => entry3.id === chartKind);
212797
213360
  const chartType = option?.type ?? chartKind;
212798
213361
  const chartExData = buildChartExInsertData(option?.id ?? chartKind);
212799
213362
  return createChartElement(
@@ -213022,6 +213585,71 @@ var MEDIA_FULLSCREEN_OVERLAY_STYLE = {
213022
213585
  function shouldShowMediaFullscreenStopButton(input) {
213023
213586
  return isMediaFullscreenActive(input);
213024
213587
  }
213588
+ var ONLINE_VIDEO_IFRAME_ALLOW = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; fullscreen";
213589
+ var ONLINE_VIDEO_IFRAME_SANDBOX = "allow-scripts allow-same-origin allow-popups allow-presentation";
213590
+ function youtubeVideoId(url) {
213591
+ const host = url.hostname.replace(/^www\./, "").toLowerCase();
213592
+ if (host === "youtu.be") {
213593
+ const id = url.pathname.split("/").filter(Boolean)[0];
213594
+ return id || void 0;
213595
+ }
213596
+ if (host !== "youtube.com" && host !== "m.youtube.com" && host !== "youtube-nocookie.com") {
213597
+ return void 0;
213598
+ }
213599
+ if (url.pathname.startsWith("/embed/")) {
213600
+ return url.pathname.slice("/embed/".length).split("/")[0] || void 0;
213601
+ }
213602
+ const watchId = url.searchParams.get("v");
213603
+ if (watchId) {
213604
+ return watchId;
213605
+ }
213606
+ const shortsMatch = /^\/shorts\/([^/]+)/.exec(url.pathname);
213607
+ if (shortsMatch) {
213608
+ return shortsMatch[1];
213609
+ }
213610
+ return void 0;
213611
+ }
213612
+ function vimeoVideoId(url) {
213613
+ const host = url.hostname.replace(/^www\./, "").toLowerCase();
213614
+ if (host === "player.vimeo.com") {
213615
+ const match2 = /^\/video\/(\d+)/.exec(url.pathname);
213616
+ return match2?.[1];
213617
+ }
213618
+ if (host !== "vimeo.com") {
213619
+ return void 0;
213620
+ }
213621
+ const match = /^\/(?:channels\/[^/]+\/|groups\/[^/]+\/videos\/)?(\d+)/.exec(url.pathname);
213622
+ return match?.[1];
213623
+ }
213624
+ function resolveOnlineVideoEmbed(mediaPath, isLinked) {
213625
+ if (!isLinked || !mediaPath) {
213626
+ return void 0;
213627
+ }
213628
+ let url;
213629
+ try {
213630
+ url = new URL(mediaPath);
213631
+ } catch {
213632
+ return void 0;
213633
+ }
213634
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
213635
+ return void 0;
213636
+ }
213637
+ const youtubeId = youtubeVideoId(url);
213638
+ if (youtubeId) {
213639
+ return { embedUrl: `https://www.youtube.com/embed/${youtubeId}` };
213640
+ }
213641
+ const vimeoId = vimeoVideoId(url);
213642
+ if (vimeoId) {
213643
+ return { embedUrl: `https://player.vimeo.com/video/${vimeoId}` };
213644
+ }
213645
+ return void 0;
213646
+ }
213647
+ function getOnlineVideoEmbed(element) {
213648
+ if (element.type !== "media" || element.mediaType !== "video") {
213649
+ return void 0;
213650
+ }
213651
+ return resolveOnlineVideoEmbed(element.mediaPath, element.isLinked);
213652
+ }
213025
213653
  function scheduleMediaTrimAndFade(el, source) {
213026
213654
  const trimStartSec = source.trimStartMs !== void 0 && source.trimStartMs > 0 ? source.trimStartMs / 1e3 : 0;
213027
213655
  const trimEndDistanceSec = source.trimEndMs !== void 0 && source.trimEndMs > 0 ? source.trimEndMs / 1e3 : 0;
@@ -213175,25 +213803,25 @@ function registerPersistentAudio(elementId, dataUrl, mimetype, loop, volume, tri
213175
213803
  });
213176
213804
  }
213177
213805
  function stopAllPersistentAudio() {
213178
- for (const entry2 of persistentAudioMap.values()) {
213179
- entry2.audio.pause();
213180
- entry2.audio.remove();
213806
+ for (const entry3 of persistentAudioMap.values()) {
213807
+ entry3.audio.pause();
213808
+ entry3.audio.remove();
213181
213809
  }
213182
213810
  persistentAudioMap.clear();
213183
213811
  }
213184
213812
  function pauseAllPersistentAudio() {
213185
- for (const entry2 of persistentAudioMap.values()) {
213186
- if (!entry2.audio.paused) {
213187
- entry2.pausedByVisibility = true;
213188
- entry2.audio.pause();
213813
+ for (const entry3 of persistentAudioMap.values()) {
213814
+ if (!entry3.audio.paused) {
213815
+ entry3.pausedByVisibility = true;
213816
+ entry3.audio.pause();
213189
213817
  }
213190
213818
  }
213191
213819
  }
213192
213820
  function resumeAllPersistentAudio() {
213193
- for (const entry2 of persistentAudioMap.values()) {
213194
- if (entry2.pausedByVisibility) {
213195
- entry2.pausedByVisibility = false;
213196
- void entry2.audio.play().catch(() => {
213821
+ for (const entry3 of persistentAudioMap.values()) {
213822
+ if (entry3.pausedByVisibility) {
213823
+ entry3.pausedByVisibility = false;
213824
+ void entry3.audio.play().catch(() => {
213197
213825
  });
213198
213826
  }
213199
213827
  }
@@ -213310,7 +213938,12 @@ function buildSummaryZoomView(element, lookup, translate) {
213310
213938
  ariaLabel: translate ? translate("pptx.zoom.ariaLabelSummaryTile", {
213311
213939
  section: label,
213312
213940
  number: String(slideNumber)
213313
- }) : `Zoom to section ${label}, slide ${slideNumber}`
213941
+ }) : `Zoom to section ${label}, slide ${slideNumber}`,
213942
+ // `CT_ZoomObjectProperties/@returnToParent`'s schema default is `true`
213943
+ // when absent (see `ZoomPptxElement.returnToParent`'s doc comment), so
213944
+ // this reads the effective value, not `Boolean(target.returnToParent)`.
213945
+ returnToParent: target.returnToParent !== false,
213946
+ transitionDurationMs: target.transitionDurationMs
213314
213947
  };
213315
213948
  });
213316
213949
  return {
@@ -213976,7 +214609,7 @@ function imageFile(clipboard) {
213976
214609
  if (!clipboard) {
213977
214610
  return null;
213978
214611
  }
213979
- const file = Array.from(clipboard.files).find((entry2) => entry2.type.startsWith("image/"));
214612
+ const file = Array.from(clipboard.files).find((entry3) => entry3.type.startsWith("image/"));
213980
214613
  if (file) {
213981
214614
  return file;
213982
214615
  }
@@ -214877,6 +215510,56 @@ function runProgramNoticeStackStyle() {
214877
215510
  pointerEvents: "none"
214878
215511
  };
214879
215512
  }
215513
+ function resolveZoomNavigationTarget(element) {
215514
+ if (element.zoomType === "summary") {
215515
+ return void 0;
215516
+ }
215517
+ return {
215518
+ targetSlideIndex: element.targetSlideIndex,
215519
+ targetSectionId: element.targetSectionId,
215520
+ returnToParent: element.returnToParent !== false,
215521
+ transitionDurationMs: element.transitionDurationMs
215522
+ };
215523
+ }
215524
+ function resolveZoomExcursionEndIndex(target, slides) {
215525
+ if (!target.targetSectionId) {
215526
+ return target.targetSlideIndex;
215527
+ }
215528
+ let end = target.targetSlideIndex;
215529
+ for (let i2 = target.targetSlideIndex + 1; i2 < slides.length; i2++) {
215530
+ if (slides[i2]?.sectionId !== target.targetSectionId) {
215531
+ break;
215532
+ }
215533
+ end = i2;
215534
+ }
215535
+ return end;
215536
+ }
215537
+ function beginZoomExcursion(target, returnSlideIndex, slides) {
215538
+ if (!target.returnToParent) {
215539
+ return void 0;
215540
+ }
215541
+ return {
215542
+ returnSlideIndex,
215543
+ endSlideIndex: resolveZoomExcursionEndIndex(target, slides),
215544
+ transitionDurationMs: target.transitionDurationMs
215545
+ };
215546
+ }
215547
+ function resolveForwardSlideWithZoomReturn(currentSlideIndex, naturalNextIndex, excursion) {
215548
+ if (excursion && currentSlideIndex === excursion.endSlideIndex) {
215549
+ return {
215550
+ nextSlideIndex: excursion.returnSlideIndex,
215551
+ excursion: void 0,
215552
+ returnedToZoom: true
215553
+ };
215554
+ }
215555
+ return { nextSlideIndex: naturalNextIndex, excursion, returnedToZoom: false };
215556
+ }
215557
+ function buildZoomTransitionOverride(transitionDurationMs) {
215558
+ if (typeof transitionDurationMs !== "number" || transitionDurationMs <= 0) {
215559
+ return void 0;
215560
+ }
215561
+ return { type: "zoom", durationMs: transitionDurationMs };
215562
+ }
214880
215563
  var COMMAND_SEARCH_ENTRIES = [
214881
215564
  // Format
214882
215565
  { labelKey: "pptx.textPanel.bold", command: "format.bold", icon: "bold", category: "format" },
@@ -215052,7 +215735,7 @@ function filterCommands(query, resolveLabel) {
215052
215735
  }
215053
215736
  const lowerQuery = query.toLowerCase();
215054
215737
  return COMMAND_SEARCH_ENTRIES.filter(
215055
- (entry2) => resolveLabel(entry2.labelKey).toLowerCase().includes(lowerQuery)
215738
+ (entry3) => resolveLabel(entry3.labelKey).toLowerCase().includes(lowerQuery)
215056
215739
  );
215057
215740
  }
215058
215741
  var sourceIdentities = /* @__PURE__ */ new WeakMap();
@@ -215970,7 +216653,7 @@ function resolveOleVerbTarget(slide, elementId, verb) {
215970
216653
  if (!elementId || !slide) {
215971
216654
  return void 0;
215972
216655
  }
215973
- const element = flattenSlideElements(slide.elements).find((entry2) => entry2.id === elementId);
216656
+ const element = flattenSlideElements(slide.elements).find((entry3) => entry3.id === elementId);
215974
216657
  if (!element || element.type !== "ole" || !element.oleEmbeddedData) {
215975
216658
  return void 0;
215976
216659
  }
@@ -216342,7 +217025,7 @@ var DEFAULT_QUICK_ACCESS_COMMAND_IDS = [
216342
217025
  "presentFromStart"
216343
217026
  ];
216344
217027
  function getQuickAccessCommand(id) {
216345
- return QUICK_ACCESS_COMMAND_CATALOG.find((entry2) => entry2.id === id);
217028
+ return QUICK_ACCESS_COMMAND_CATALOG.find((entry3) => entry3.id === id);
216346
217029
  }
216347
217030
  var DEDICATED_QUICK_ACCESS_IDS = /* @__PURE__ */ new Set(["save", "undo", "redo"]);
216348
217031
  function extraQuickAccessCommands(commandIds) {
@@ -216361,7 +217044,7 @@ function extraQuickAccessCommands(commandIds) {
216361
217044
  return extras;
216362
217045
  }
216363
217046
  function availableQuickAccessCommands(commandIds) {
216364
- return QUICK_ACCESS_COMMAND_CATALOG.filter((entry2) => !commandIds.includes(entry2.id));
217047
+ return QUICK_ACCESS_COMMAND_CATALOG.filter((entry3) => !commandIds.includes(entry3.id));
216365
217048
  }
216366
217049
  function addQuickAccessCommand(commandIds, id) {
216367
217050
  if (commandIds.includes(id) || !getQuickAccessCommand(id)) {
@@ -216370,7 +217053,7 @@ function addQuickAccessCommand(commandIds, id) {
216370
217053
  return [...commandIds, id];
216371
217054
  }
216372
217055
  function removeQuickAccessCommand(commandIds, id) {
216373
- return commandIds.filter((entry2) => entry2 !== id);
217056
+ return commandIds.filter((entry3) => entry3 !== id);
216374
217057
  }
216375
217058
  function moveQuickAccessCommand(commandIds, id, direction) {
216376
217059
  const index = commandIds.indexOf(id);
@@ -216554,7 +217237,7 @@ function mergeViewerOptions(stored) {
216554
217237
  const defaultValue = defaults[key2];
216555
217238
  if (Array.isArray(defaultValue)) {
216556
217239
  if (Array.isArray(value)) {
216557
- target[key2] = value.filter((entry2) => typeof entry2 === "string");
217240
+ target[key2] = value.filter((entry3) => typeof entry3 === "string");
216558
217241
  }
216559
217242
  } else if (typeof value === typeof defaultValue) {
216560
217243
  target[key2] = value;
@@ -218350,19 +219033,19 @@ function describeCell3D(cell3D) {
218350
219033
  isSet: cell3D !== void 0
218351
219034
  };
218352
219035
  }
218353
- function describeTableStyleEditor(entry2, selectedPart, themeColorMap) {
218354
- if (!entry2) {
219036
+ function describeTableStyleEditor(entry3, selectedPart, themeColorMap) {
219037
+ if (!entry3) {
218355
219038
  return void 0;
218356
219039
  }
218357
- const keyed = entry2;
219040
+ const keyed = entry3;
218358
219041
  const hasTextAndBorders = isTableStylePartName(selectedPart);
218359
- const fill = selectedPart === "background" ? entry2.tableBackground?.fill : keyed[`${selectedPart}Fill`];
219042
+ const fill = selectedPart === "background" ? entry3.tableBackground?.fill : keyed[`${selectedPart}Fill`];
218360
219043
  const text22 = hasTextAndBorders ? keyed[`${selectedPart}Text`] : void 0;
218361
219044
  const borders = hasTextAndBorders ? keyed[`${selectedPart}Borders`] : void 0;
218362
219045
  const cell3D = hasTextAndBorders ? keyed[`${selectedPart}Cell3D`] : void 0;
218363
219046
  return {
218364
- styleId: entry2.styleId,
218365
- styleName: entry2.styleName ?? "",
219047
+ styleId: entry3.styleId,
219048
+ styleName: entry3.styleName ?? "",
218366
219049
  selectedPart,
218367
219050
  hasTextAndBorders,
218368
219051
  fill: describeFill(fill, themeColorMap),
@@ -218375,11 +219058,11 @@ function patchBorderSide(borders, side, patch) {
218375
219058
  const current = borders?.[side] ?? {};
218376
219059
  return { ...borders, [side]: { ...current, ...patch } };
218377
219060
  }
218378
- function applyTableStyleFieldEdit(entry2, part, edit) {
219061
+ function applyTableStyleFieldEdit(entry3, part, edit) {
218379
219062
  if (part === "background") {
218380
- return applyBackgroundEdit(entry2, edit);
219063
+ return applyBackgroundEdit(entry3, edit);
218381
219064
  }
218382
- const keyed = entry2;
219065
+ const keyed = entry3;
218383
219066
  const fillKey = `${part}Fill`;
218384
219067
  const textKey = `${part}Text`;
218385
219068
  const bordersKey = `${part}Borders`;
@@ -218473,7 +219156,7 @@ function applyTableStyleFieldEdit(entry2, part, edit) {
218473
219156
  return {
218474
219157
  entry: nextEntry,
218475
219158
  payload: {
218476
- styleId: entry2.styleId,
219159
+ styleId: entry3.styleId,
218477
219160
  section: part,
218478
219161
  ...isTableStylePartName(part) ? {
218479
219162
  fill: keyed[fillKey],
@@ -218484,8 +219167,8 @@ function applyTableStyleFieldEdit(entry2, part, edit) {
218484
219167
  }
218485
219168
  };
218486
219169
  }
218487
- function applyBackgroundEdit(entry2, edit) {
218488
- const current = entry2.tableBackground;
219170
+ function applyBackgroundEdit(entry3, edit) {
219171
+ const current = entry3.tableBackground;
218489
219172
  let nextBackground = current;
218490
219173
  if (edit.kind === "fillColor") {
218491
219174
  nextBackground = { ...current, fill: colorToFill(edit.hex, edit.ref), fillRef: void 0 };
@@ -218499,10 +219182,10 @@ function applyBackgroundEdit(entry2, edit) {
218499
219182
  }
218500
219183
  };
218501
219184
  }
218502
- const nextEntry = { ...entry2, tableBackground: nextBackground };
219185
+ const nextEntry = { ...entry3, tableBackground: nextBackground };
218503
219186
  return {
218504
219187
  entry: nextEntry,
218505
- payload: { styleId: entry2.styleId, section: "background" }
219188
+ payload: { styleId: entry3.styleId, section: "background" }
218506
219189
  };
218507
219190
  }
218508
219191
  init_chart_title_runs();
@@ -219223,8 +219906,8 @@ function createElementClass() {
219223
219906
  }
219224
219907
  if (win && "IntersectionObserver" in win) {
219225
219908
  this.#intersect = new win.IntersectionObserver((entries) => {
219226
- const entry2 = entries[entries.length - 1];
219227
- this.#visible = entry2 ? entry2.isIntersecting : true;
219909
+ const entry3 = entries[entries.length - 1];
219910
+ this.#visible = entry3 ? entry3.isIntersecting : true;
219228
219911
  if (this.#visible) {
219229
219912
  this.#controller?.remeasure(true);
219230
219913
  }
@@ -221130,8 +221813,8 @@ stream
221130
221813
  endobj
221131
221814
  `
221132
221815
  );
221133
- const contentStream = pageImages.map((entry2, idx) => {
221134
- const { x, y, width, height } = entry2.placement;
221816
+ const contentStream = pageImages.map((entry3, idx) => {
221817
+ const { x, y, width, height } = entry3.placement;
221135
221818
  const rawY = PAGE_H - y - height;
221136
221819
  return `q ${width.toFixed(2)} 0 0 ${height.toFixed(2)} ${x.toFixed(2)} ${rawY.toFixed(2)} cm /Img${idx} Do Q`;
221137
221820
  }).join(" ");
@@ -222137,6 +222820,22 @@ async function rasterResultToPngBlob(result) {
222137
222820
  }, "image/png");
222138
222821
  });
222139
222822
  }
222823
+ async function rasterResultToPngDataUrl(result) {
222824
+ if (result.kind === "canvas") {
222825
+ return result.canvas.toDataURL("image/png");
222826
+ }
222827
+ const blob = await rasterResultToPngBlob(result);
222828
+ return new Promise((resolve2, reject) => {
222829
+ const reader = new FileReader();
222830
+ reader.onloadend = () => resolve2(reader.result);
222831
+ reader.onerror = reject;
222832
+ reader.readAsDataURL(blob);
222833
+ });
222834
+ }
222835
+ function elementPictureFilename(elementName, fallbackLabel) {
222836
+ const base = elementName?.trim() || fallbackLabel;
222837
+ return sanitizeDownloadFilename(`${base}.png`);
222838
+ }
222140
222839
  registerPptxWebControls();
222141
222840
  // `@preserve` (CT_SlideMaster, ECMA-376 §19.3.1.38): mirrors the
222142
222841
  /**
@@ -222190,4 +222889,4 @@ registerPptxWebControls();
222190
222889
  * `<p:extLst>` (optional)
222191
222890
  */
222192
222891
 
222193
- export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_BACK_CLASSES, BACKSTAGE_NAV, BACKSTAGE_NAV_CLASSES, BACKSTAGE_TEMPLATES, BAR3D_SHAPE_OPTIONS, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, CHARACTER_SPACING_OPTIONS, CHART_QUICK_ACTION_BUTTON_SIZE, CHART_TYPE_OPTIONS, CINEMATIC_TRANSITION_KEYFRAMES, COLOR_MAP_ALIAS_KEYS, COMMENT_MARKER_SIZE, COMMENT_MENTION_ATTRIBUTE, COMMENT_MENTION_CLASS, COMMON_FONTS, COMMON_FONT_SIZES, COMPOUND_LINE_OPTIONS, CONNECTION_TIMEOUT_MS, CONNECTOR_SITE_SNAP_PX, CUSTOM_FONT_ACCEPT, DEBOUNCE_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_FONT_FAMILY2 as DEFAULT_FONT_FAMILY, DEFAULT_INSERT_CHART_KIND, DEFAULT_MORPH_DURATION_MS, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_PALETTE2, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_TRANSITION_DURATION_MS, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PREFERENCES, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, EASE, EFFECT_SOUND_CATALOGUE, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPANDED_MAX_HEIGHT, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GIF_POST_CAPTURE_MAX_SIDE, GRADIENT_TYPE_OPTIONS, GlyphOutlineFontCache, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INDENT_PX, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, INSTANT, LBL, LINE_CAP_OPTIONS, LINE_JOIN_OPTIONS, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_HINT_CLASS, LINK_TOOLTIP_HOST_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_PANEL_CLASS, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_INDENT_LEVEL, MAX_ZOOM_SCALE, MEDIA_CHROME_ATTRIBUTE, MEDIA_FULLSCREEN_OVERLAY_STYLE, MIN_TOUCH_TARGET_PX, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OFFICE_COLOR_SWATCHES, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, P14_TRANSITION_KEYFRAMES, P14_TRANSITION_KEYFRAMES_2, P14_TRANSITION_KEYFRAMES_ALL, PATTERN_OPTIONS, PATTERN_PRESET_OPTIONS, PDF_SLIDES_PAGE_HEIGHT_PT, PDF_SLIDES_PAGE_WIDTH_PT, PEN_COLORS, PPTX_OPEN_ACCEPT, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_HIT_TEST_CSS, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESENTATION_OPEN_EXTENSIONS, PRESENTATION_STAGE_ATTRIBUTE, PRESENTER_CONSOLE_CLASSES, PRESENTER_CONSOLE_CONTROLS, PRESENTER_NAVIGATOR_LABEL_KEYS, PRESENT_TOOLBAR_CLASSES, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, RADAR_STYLE_OPTIONS, RANDOM_ELIGIBLE_TYPES, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RIBBON_SHAPE_SWATCHES, RIBBON_TRANSITION_PRESETS, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_SHOW_OPTIONS, SLIDE_SIZE_PRESETS, SLIDE_TEMPLATES, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_KEYFRAMES_CSS, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_PREVIEW_ELEMENT_HEIGHT, SMARTART_PREVIEW_ELEMENT_WIDTH, SMARTART_STYLE_LABEL_KEYS, SORTER_MAX_ZOOM, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, STATUS_BAR_CLASSES, STROKE_DASH_OPTIONS2 as STROKE_DASH_OPTIONS, SURFACE_WIREFRAME_OPTIONS, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_BORDER_SIDES, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, TABLE_STYLE_EDITOR_PARTS, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_DECORATION_FLAGS, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_MORPH_OPTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_SOUND_NONE_VALUE, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SPEED_DURATION_MS, TRANSITION_SPEED_OPTIONS, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, WHEEL_SPOKE_COUNTS, acceptAutosaveRecovery, acceptsPresentationInput, acknowledgeAutosaveRecovery, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addCommentToList, addQuickAccessCommand, addSection, addSiblingAfter, addSmartArtNodeAsChild, addTableStyleToMap, addTagToCollections, advanceChartMarkDrag, advanceChartValueDrag, advanceMainSequence, alignElements, animationEffectLabel, annotationOverlayZIndex, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyActiveInlineListFormatting, applyAnimationTimelineOrder, applyAutoCorrect, applyCaseTransformToSegments, applyChart3DDrag, applyChart3DSelect, applyChartElementToggle, applyChartPartHighlight, applyChartStylePreset, applyColorChange, applyDuotone, applyFindReplacements, applyFormatToElement, applyHighlightClickStyle, applyImagePathPatches, applyListStyleUpdate, applyMasterViewCrudAction, applyMotionPathPreset, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, applyOleSheetCellEdit, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyTableStyleDelete, applyTableStyleFieldEdit, applyTableStyleMapChange, applyTableStylePreset, applyTextStyleUpdate, applyThemeOverrideToSlide, applyThemeToData, applyTransitionSoundFile, applyTransitionStockSound, applyUnderlineVariant, assertElementUpdateTarget, attachCollaborationInlineEditor, attachEditorImagePaste, attachInlineListController, attachPresentationVisibilityPause, attachRotateHandlePlacement, authorConnectorBetweenSites, autosaveSnapshotMark, availableQuickAccessCommands, backstageCardsFor, bar3DShapePatch, beginChartMarkDrag, beginChartValueDrag, beginShapeAdjustment, bindInlineListParagraph, bindInlineListRun, borrowExternalCollaborationAwareness, bringForward, bringToFront, build3DExtrusionData, buildActiveSessionUsers, buildAnimationTimelineBars, buildAnimationTimelineRows, buildBarActions, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartMarkDragGeometry, buildChartQuickActionsDescriptor, buildChartViewModel, buildChromeStyle, buildCollaborationShareUrl, buildCommentMarkers, buildContentPartStrokes, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDeckSaveOptions, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildFontCatalog, buildFreeformShapeElement, buildGlyphEnvelopeBlock, buildHandoutsHtml, buildHollowHitOutline, buildInitialGuides, buildInkGroupStrokes, buildInlineListStylePatch, buildInlineTextCommitPatch, buildJoinCollaborationConfig, buildLayoutPreviewGeometry, buildLiveInkStrokeView, buildMorphAnimationRules, buildMorphTransitionPlan, buildMotionPathPreview, buildNotesHtml, buildNotesPdfBytes, buildNotesPrintHtml, buildOleContentUpdatePatch, buildOleEditDialogDescriptor, buildOleObjectNamePatch, buildOutline, buildOutlineHtml, buildParagraphs, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildRectPathGradient, buildRunProgramNotice, buildRunTabLines, buildSaveSlides, buildSlideTemplateContent, buildSlideTemplateSlide, buildSlidesHtml, buildSmartArtA11y, buildSmartArtPresetData, buildSmartArtPreviewElement, buildStrokeOutline, buildStrokePathD, buildSubpathFillOverlay, buildSubpathPaints, buildSummaryZoomView, buildSvgGradientDef, buildTabContext, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBodyLayoutStyle, buildTextBuildSpec, buildTextStyleOverrideCss, buildThemeColorGrid, buildThemeColorMap, buildThemeColorSwatchGrid, buildTiledSlidesPdfBytes, buildUserFontFaceStyles, calculateViewportFit, canAddTopLevelNode, canCommitActionType, canDrillDown, canGoNext, canGoPrevious, canGroupSelection, canInteractWithElement, canRemoveTopLevelNode, canSetStrokeWidth, canUngroupSelection, canUseClipboard, cancelBuildReveal, canvasToJpegData, cellRunStyle, cellStyleToCss, centeredSvgTextLines, chartDataLabelsTogglePatch, chartGridlinesPatch, chartGridlinesState, chartPartToAttrs, chartPreserveAspectRatio, checkModifyPassword, clampCropValue, clampGifDimensions, clampNotesFontSize, clampOptionNumber, clampPercent2, clampSorterZoom, clampTransitionNumber, clampZoomScale, classifyExtraConnections, classifyMediaType, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearPlaybackTimers, clearStoredViewerPrefs, clearTransitionSound, cloneElementForPaste, cloneElementUpdates, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collapseChartTitleRunsForEdit, collectConnectorSiteCandidates, collectImagePaths, collectMediaElements, collectReferencedFontFamilies, collectUsedFonts, colorWithOpacity, commentMentionQuery, commentTextSegments, comparePresentation, compatToastStackStyle, compatibilityWarningToasts, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeAnchoredPopupPosition, computeChartLegendLayout, computeColorFilter, computeColumnBoundaries, computeDrawingViewBox, computeEntranceAnimationDelay, computeGridSpacingPx, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSlideIndices, computeSmartArtElementLayout, computeSnapToShape, computeSplitCell, computeVirtualRange, connectorWrapperTransform, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createActiveAnimationGroup, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDefaultChartUserShape, createDefaultChartUserShapeGroupChild, createDepartureChannel, createGlyphOutlineLookup, createImageElementFromFile, createInitialPresentationSnapshot, createInlineListModelObserver, createInlineListSeed, createPlainNotesSegments, createPresenceProjector, createPresentationKeyBuffer, createPresentationLoadResources, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createRotationDrag, createSnapshotTextPositions, createSyncGate, createTableStyleEntry, createTouchGestureRecognizer, createViewerOptionsStore, createViewerZoomStore, createWheelStepBuffer, createWriteBackScheduler, cursorForTool, customGeometryPathsToSvgSubpaths, cycleSelectableElement, defaultCssVars, defaultRadius, defaultThemeColors, defineThreeViewElement, deleteAutosaveSnapshot, deleteSection, deleteTableStyleFromMap, deleteTagFromCollections, demote, deriveSlideFieldContext, deriveViewportBreakpoints, describeCollaborationShellState, describeFontEmbedding, describeSmartArtBounds, describeTableStyleEditor, detectOrientation, detectTouchDevice, discardAutosaveRecovery, distributeElements, downloadBlob, downloadDataUrl, editCommentInList, elementActionToPptxAction, elementBulletKind, elementContainerHeightStyle, elementHitTargetStyle, elementIdSelector, elementLockTogglePatch, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, ensureChartInteractionStyles, erasePresentationInkAt, evenColumnWidths, evenRowHeights, exportDeckJson, extraQuickAccessCommands, fetchGoogleWebfontOutlineBytes, filterCommands, filterHiddenSlideIndices, filterInteractableIds, filterRenderedElements, findChartPartTarget, findConnectorSiteNear, findEraserHitElementId, findInSlides, findSelectedThemeSwatch, findSmartArtNodeText, finishPrintWindow, firstShowSlideIndex, flattenNodes, flattenTagCollections, forgetSessionDeck, formatAxisValue, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateNoteLineCount, generateTicks, getActiveXControlOverlayView, getAnimationColorBaseStyle, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getBarFacePicturePixelSampleVersion, getBevelLightingSvgFilter, getCachedNativeImageSize, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getChartUserShapeGroupTransform, getChartUserShapeRowChartBox, getCinematicTransitionAnimations, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getComputedFillStyle, getComputedStrokeStyle, getConnectorEndpointHandles, getConnectorPathGeometry, getContentPartReplayStyles, getCropShapeClipPath, getCurrentParagraphIndex, getDenseGridLayoutPlan, getDensePanelTouchTargetPx, getDraggedShapeAdjustments, getDuotoneCachedResult, getEffectSoundAsset, getEffectSoundState, getEffectStyleSource, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getFragmentedTransitionDescriptor, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFillCounterTransform, getImageFitStyle, getImageSvgFilters, getImageTilingStyle, getInkReplayStyles, getInlineEditorSelectionResult, getLocalStorageUsageSummary, getNonVisualDescriptionFields, getNotesPrintableArea, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDocumentParagraphs, getOleNestedDeckDetail, getOleObjectTypeLabel, getOleSheetGrid, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getP14TransitionAnimations, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPresetShapeVectorGeometry, getPrintableArea, getResizeHandleHitAreaStyle, getSelectionControlArtworkStyle, getSelectionOutlineColor, getSelectionTextStyleFlags, getSessionTabId, getShapeAdjustmentHandleDescriptors, getShapeConnectionSites, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTableCellBandStyle, getTextBodyRotationTransform, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasGlyphEnvelope, hasMultipleSelectedTableCells, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hasTiltData, hexToRgbUnit, hiddenSlideCue, hideChartSeries, hollowTextFillStyle, inlineElementPointerEvents, inlineListBodyText, insertCommentMention, insertTableElementColumn, insertTableElementRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isBulletMarkerSegment, isCalloutShape, isCellInRect, isCurrentLayout, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementLocked, isElementRendered, isExportAbortError, isHeaderFooterDateTextVisible, isHeaderFooterFooterTextVisible, isHeaderFooterHeaderTextVisible, isHollowShapeElement, isImageLikeElement, isImageTiled, isInkElement, isKeyboardOpen, isLegacyBinaryPresentation, isLinkedTextBox, isMediaFullscreenActive, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isSeriesUsingSecondaryAxis, isStrokeOnlyPresetElement, isSupportedPresentationFile, isTemplateElementId3 as isTemplateElementId, isUrlSafe, isWedgeCalloutPresetShape, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, listChartUserShapeRows, loadAudienceContent, loadSessionDeck, lockResizeAspect, makeCloneId, makeSlideId, mapEditingWheel, mapEditorKey, mapInlineTextFormatKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mapSlideShowStartKey, mapSlideSorterKey, masterViewBackgroundColor, masterViewCrudActions, masterViewCrudFailureKey, masterViewElements, masterViewPseudoSlide, matchCommentMentionAuthors, mayLeaveSlideShow, measureSvgViewportRect, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, mediaTrimEndMsFromSeconds, mediaTrimEndSeconds, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, modelDataToBlobUrl, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, mruColorsPatch, nestedTextDecorationStyle, newTableElement, nextPresentedSlide, nextShowSlideIndex, nextToggleValue, normalizeColorsForCapture, normalizeHexColor2 as normalizeHexColor, normalizeStrokeDashType, normalizeTableStyleGuid, notesSegmentsToSpans, observeElementHeight, observeExternalCollaborationReadiness, observeExternalCollaborationSession, observeYDocSlides, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPendingPrintWindow, openPptxFile, openReadingView, openUrlInNewTab, overlayInlineTextSnapshot, overlayMasterViewInlineSnapshot, paintedElementSize, paintedStrokeWidth, paragraphsToSegments, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, parseSegmentsFromRichEditor, partitionTemplateElements, patchChartData, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, placeTileOnPage, placeholderPromptDescriptor, playFeedbackSound, playGroup, playSlideTransitionPreview, polygonsToSvgPath, pptxActionToElementAction, prepareElementForInsertion, prepareElementUpdateBatch, prepareExportClone, preprocessCssForCapture, presentationBaseName, presentationEntrySlideIndex, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, probeAutosaveRecovery, probeNativeImageSize, projectDrawingShapes, promote, publishLiveGeometry, publishLiveInlineText, pushRecentColor, quickStyleSwatchCss, radarStylePatch, rasterResultToPngBlob, rasterizeElement, rasterizeElementTiledToCanvas, rasterizeElementTiles, reResolveElementColors, reResolveSlideColors, readBackstageRecentFile, readEditableText, readListActivationSelection, readOnlyRecommendation, readRibbonTransitionDraft, readSlideShowOption, readSlidesFromYDoc, readSoundFileAsDataUrl, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, redistributeColumnWidth, registerCollaborationTeardown, registerCrossSlideAudio, registerCustomFont, remapTextToSegments, rememberSessionDeck, removeChartCategory, removeChartSeries, removeCommentFromList, removeEmptyNode, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorder2 as reorder, reorderAnimationTimelineRows, replaceMasterViewElements, replaceOleFile, replyToCommentInList, rerouteConnectorsForMovedElements, resetPresenterTimer, resetSlideLayoutPath, resolve3DRenderingFlags, resolveActionType, resolveAudienceScreenPlacement, resolveAuthoredCustomShowId, resolveAuthoredSlideRange, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveAutosaveActivation, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, resolveChartKind, resolveChartThreeViewSpec, resolveCollaborationShellEditability, resolveCollaborationShellState, resolveConnectorEndpointUpdate, resolveDefaultFontFamily, resolveDefaultPrintSettings, resolveDirection, resolveDirection8, resolveDisplayedChartType, resolveElementActionAffordance, resolveElementAriaAttributes, resolveElementHighlightClick, resolveElementInteractivity, resolveExpiredAutosaveSnapshots, resolveExportCaptureDecision, resolveFontKerning, resolveGoogleWebfontHref, resolveGroupChildFill, resolveHistoryDepth, resolveImageResolutionScale, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, resolveMediaBookmarkTimesMs, resolveMediaElementSource, resolveMediaTimeNodeElementIds, resolveMetricTrackingPx, resolveNotesSchematicBodyFontSizePx, resolveNotesSegments, resolveOleType, resolveOleVerbTarget, resolveOptionRootClasses, resolveOrientation, resolvePalette, resolvePresentationAction, resolveProfileInitial, resolveRevealedChartData, resolveRevealedDrawingShapeNodeIds, resolveRevealedDrawingShapes, resolveRevealedSmartArtNodes, resolveScreenTip, resolveScriptFontSet, resolveSelectionPaneRename, resolveShapeGeometry, resolveShowSlideIndexes, resolveSlideSizeSelection, resolveSlideTransition, resolveSmartArtThreeViewSpec, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTemplateBackgroundRows, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransitionSoundAction, resolveTransportForServerUrl, resolveViewerAddinRows, resolveViewportFitOptions, resolveWheelSpokeCount, restoreFilteredSeries, restoreInlineListBodySelection, restoreSegmentSelection, restoreSessionDeck, ribbonTransitionUpdates, rulerDragToGuidePosition, runPresentationAction, runProgramNoticeStackStyle, safeOpenUrl, sanitizeColor, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveDeckWithPassword, saveViewerProfile, savedPresentationFileName, scaleSlidesForSizeChange, scanAvailableFontFamilies, scheduleAutoAdvanceChain, scheduleMediaTrimAndFade, schemaLabel, scopeLayoutOptionsToSlide, seedRecentColors, segmentFrameCount, segmentStyleToCss, segmentsToEditorHtml, segmentsToParagraphs, segmentsToPlainText, selectGoogleWebfontFamilies, selectedParagraphBulletKind, selectionBulletKind, sendBackward, sendToBack, seriesSecondaryAxisPatch, setAfterAnimation, setAfterAnimationColor, setCachedResult, setCellText, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDataLabelsRangeCache, setDuotoneCachedResult, setEffectSound, setEffectStockSound, setMasterViewBackgroundColor, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shapeFillChange, shapeOutlineChange, shouldAutoFollowBroadcaster, shouldClearAutosaveCacheOnClose, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldDiscardAutosaveOnSuccessfulSave, shouldLoopContinuously, shouldProbeAutosaveRecovery, shouldRenderHitTarget, shouldRoomSlidesReplaceLoad, shouldShowAccessibilitySection, shouldShowAutosaveRecoveryPrompt, shouldShowElementHandles, shouldShowMediaFullscreenStopButton, shouldStickyActionRow, shouldUseSvgWarp, shouldWriteAutosaveSnapshot, siblingCount, siblingIndex, slideProgressPercent, slideShowOptionChange, slideSizeFromPreset, slideSizeToCanvasPx, slideStatusLabel, snapBoxToGrid, splitCell, splitRunByScriptFont, splitRunForMetrics, splitWordsForUnderline, stepFontSizePt, stepPresenterZoom, stopAllPersistentAudio, stopCaptureStream, storeAudienceContent, stripUnderlineDecoration, strokeOutlineViewBox, strokeWidthOf, styleShadowFilter, subscribeBarFacePicturePixelSamples, substituteFieldText, surfaceWireframePatch, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, syncGoogleWebfontStylesheet, tableCellCss, tableContainerCss, tableStyleAssignmentUpdate, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, textFontSizePtToPx, textFontSizePxToPt, themeColorLabel, themeColorSchemesEqual, themeColorSwatchRows, themeSwatchCommit, themeToCssVars, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, toggleBlackboard, toggleCommentResolvedInList, togglePresenterTimer, toggleSelectionBullets, toggleSheet, toggleStageElementMedia, toggleText3dExtrusion, transformInlineListCase, transformTextCase, transitionSoundOptions, transitionSoundSelectedValue, transitionStockSoundId, trimmedMediaDurationMs, ungroupElements, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateElement, updateMasterViewElement, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateMediaTrimRange, validateRoomId, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewPropertiesPatchFromPreferences, viewerOptionsToPreferences, viewerPreferencesFromViewProperties, visibleTemplateElements, warpPreviewPath, withChartTitle, withChartUserShapeAdded, withChartUserShapeGroupChildAdded, withChartUserShapeRowChartBoxUpdated, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRemoved, withChartUserShapeRowRotationUpdated, withChartUserShapeRowTextUpdated, withChartUserShapeRowUpdated, withConnectorEndpointUpdate, withFrameSlides, withInlineListDecorationDefaults, withSlideSizeOrientation, withSlidesPerPage, writeStoredViewerPrefs, xmlText };
222892
+ export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_BACK_CLASSES, BACKSTAGE_NAV, BACKSTAGE_NAV_CLASSES, BACKSTAGE_TEMPLATES, BAR3D_SHAPE_OPTIONS, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, CHARACTER_SPACING_OPTIONS, CHART_QUICK_ACTION_BUTTON_SIZE, CHART_TYPE_OPTIONS, CINEMATIC_TRANSITION_KEYFRAMES, COLOR_MAP_ALIAS_KEYS, COMMENT_MARKER_SIZE, COMMENT_MENTION_ATTRIBUTE, COMMENT_MENTION_CLASS, COMMON_FONTS, COMMON_FONT_SIZES, COMPOUND_LINE_OPTIONS, CONNECTION_TIMEOUT_MS, CONNECTOR_SITE_SNAP_PX, CUSTOM_FONT_ACCEPT, DEBOUNCE_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_FONT_FAMILY2 as DEFAULT_FONT_FAMILY, DEFAULT_INSERT_CHART_KIND, DEFAULT_MORPH_DURATION_MS, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_PALETTE2, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_TRANSITION_DURATION_MS, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PREFERENCES, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, EASE, EFFECT_SOUND_CATALOGUE, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPANDED_MAX_HEIGHT, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GIF_POST_CAPTURE_MAX_SIDE, GRADIENT_TYPE_OPTIONS, GlyphOutlineFontCache, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INDENT_PX, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, INSTANT, LBL, LINE_CAP_OPTIONS, LINE_JOIN_OPTIONS, LINK_TOOLTIP_CLASS, LINK_TOOLTIP_HINT_CLASS, LINK_TOOLTIP_HOST_CLASS, LINK_TOOLTIP_LABEL_CLASS, LINK_TOOLTIP_PANEL_CLASS, LOCAL_SYNC_ORIGIN, MATERIAL_PRESETS, MAX_INDENT_LEVEL, MAX_ZOOM_SCALE, MEDIA_CHROME_ATTRIBUTE, MEDIA_FULLSCREEN_OVERLAY_STYLE, MIN_TOUCH_TARGET_PX, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OFFICE_COLOR_SWATCHES, ONLINE_VIDEO_IFRAME_ALLOW, ONLINE_VIDEO_IFRAME_SANDBOX, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, P14_TRANSITION_KEYFRAMES, P14_TRANSITION_KEYFRAMES_2, P14_TRANSITION_KEYFRAMES_ALL, PASTE_SPECIAL_OPTIONS, PATTERN_OPTIONS, PATTERN_PRESET_OPTIONS, PDF_SLIDES_PAGE_HEIGHT_PT, PDF_SLIDES_PAGE_WIDTH_PT, PEN_COLORS, PPTX_OPEN_ACCEPT, PRESENTATION_CHANNEL_NAME, PRESENTATION_HASH, PRESENTATION_HIT_TEST_CSS, PRESENTATION_MESSAGE_ORIGIN, PRESENTATION_NONCE_KEY, PRESENTATION_OPEN_EXTENSIONS, PRESENTATION_STAGE_ATTRIBUTE, PRESENTER_CONSOLE_CLASSES, PRESENTER_CONSOLE_CONTROLS, PRESENTER_NAVIGATOR_LABEL_KEYS, PRESENT_TOOLBAR_CLASSES, PRESETS, PRESET_THEMES, PptxHandler, PptxMarkdownConverter, PresentationAnimationController, QUICK_ACCESS_COMMAND_CATALOG, RADAR_STYLE_OPTIONS, RANDOM_ELIGIBLE_TYPES, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RIBBON_SHAPE_SWATCHES, RIBBON_TRANSITION_PRESETS, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_SHOW_OPTIONS, SLIDE_SIZE_PRESETS, SLIDE_TEMPLATES, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_KEYFRAMES_CSS, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_PREVIEW_ELEMENT_HEIGHT, SMARTART_PREVIEW_ELEMENT_WIDTH, SMARTART_STYLE_LABEL_KEYS, SORTER_MAX_ZOOM, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, STATUS_BAR_CLASSES, STROKE_DASH_OPTIONS2 as STROKE_DASH_OPTIONS, SURFACE_WIREFRAME_OPTIONS, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_BORDER_SIDES, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, TABLE_STYLE_EDITOR_PARTS, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_DECORATION_FLAGS, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_MORPH_OPTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_PATTERN_OPTIONS, TRANSITION_SOUND_NONE_VALUE, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SPEED_DURATION_MS, TRANSITION_SPEED_OPTIONS, TRANSITION_THRUBLK_TYPES, TRANSITION_VALID_DIRECTIONS, TRIGGER_OPTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, WHEEL_SPOKE_COUNTS, acceptAutosaveRecovery, acceptsPresentationInput, acknowledgeAutosaveRecovery, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addCommentToList, addQuickAccessCommand, addSection, addSiblingAfter, addSmartArtNodeAsChild, addTableStyleToMap, addTagToCollections, advanceChartMarkDrag, advanceChartValueDrag, advanceMainSequence, alignElements, animationEffectLabel, annotationOverlayZIndex, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyActiveInlineListFormatting, applyAnimationTimelineOrder, applyAutoCorrect, applyCaseTransformToSegments, applyChart3DDrag, applyChart3DSelect, applyChartElementToggle, applyChartPartHighlight, applyChartStylePreset, applyColorChange, applyDuotone, applyFindReplacements, applyFormatToElement, applyHighlightClickStyle, applyImagePathPatches, applyListStyleUpdate, applyMasterViewCrudAction, applyMotionPathPreset, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, applyOleSheetCellEdit, applyOutlineEdit, applyPasteSpecialFormat, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyTableStyleDelete, applyTableStyleFieldEdit, applyTableStyleMapChange, applyTableStylePreset, applyTextStyleUpdate, applyThemeOverrideToSlide, applyThemeToData, applyTransitionSoundFile, applyTransitionStockSound, applyUnderlineVariant, assertElementUpdateTarget, attachCollaborationInlineEditor, attachEditorImagePaste, attachInlineListController, attachPresentationVisibilityPause, attachRotateHandlePlacement, authorConnectorBetweenSites, autosaveSnapshotMark, availableQuickAccessCommands, backstageCardsFor, bar3DShapePatch, beginChartMarkDrag, beginChartValueDrag, beginShapeAdjustment, beginZoomExcursion, bindInlineListParagraph, bindInlineListRun, borrowExternalCollaborationAwareness, bringForward, bringToFront, build3DExtrusionData, buildActiveSessionUsers, buildAnimationTimelineBars, buildAnimationTimelineRows, buildBarActions, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartMarkDragGeometry, buildChartQuickActionsDescriptor, buildChartViewModel, buildChromeStyle, buildCollaborationShareUrl, buildCommentMarkers, buildContentPartStrokes, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDeckSaveOptions, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildFontCatalog, buildFreeformShapeElement, buildGlyphEnvelopeBlock, buildHandoutsHtml, buildHollowHitOutline, buildInitialGuides, buildInkGroupStrokes, buildInlineListStylePatch, buildInlineTextCommitPatch, buildJoinCollaborationConfig, buildLayoutPreviewGeometry, buildLiveInkStrokeView, buildMorphAnimationRules, buildMorphTransitionPlan, buildMotionPathPreview, buildNotesHtml, buildNotesPdfBytes, buildNotesPrintHtml, buildOleContentUpdatePatch, buildOleEditDialogDescriptor, buildOleObjectNamePatch, buildOutline, buildOutlineHtml, buildParagraphs, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildRasterPictureElement, buildRectPathGradient, buildRunProgramNotice, buildRunTabLines, buildSaveSlides, buildSlideTemplateContent, buildSlideTemplateSlide, buildSlidesHtml, buildSmartArtA11y, buildSmartArtPresetData, buildSmartArtPreviewElement, buildStrokeOutline, buildStrokePathD, buildSubpathFillOverlay, buildSubpathPaints, buildSummaryZoomView, buildSvgGradientDef, buildTabContext, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBodyLayoutStyle, buildTextBuildSpec, buildTextStyleOverrideCss, buildThemeColorGrid, buildThemeColorMap, buildThemeColorSwatchGrid, buildTiledSlidesPdfBytes, buildUserFontFaceStyles, buildZoomTransitionOverride, calculateViewportFit, canAddTopLevelNode, canCommitActionType, canDrillDown, canGoNext, canGoPrevious, canGroupSelection, canInteractWithElement, canRemoveTopLevelNode, canSetStrokeWidth, canUngroupSelection, canUseClipboard, cancelBuildReveal, canvasToJpegData, cellRunStyle, cellStyleToCss, centeredSvgTextLines, chartDataLabelsTogglePatch, chartGridlinesPatch, chartGridlinesState, chartPartToAttrs, chartPreserveAspectRatio, checkModifyPassword, clampCropValue, clampGifDimensions, clampNotesFontSize, clampOptionNumber, clampPercent2, clampSorterZoom, clampTransitionNumber, clampZoomScale, classifyExtraConnections, classifyMediaType, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearPlaybackTimers, clearStoredViewerPrefs, clearTransitionSound, cloneElementForPaste, cloneElementUpdates, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collapseChartTitleRunsForEdit, collectConnectorSiteCandidates, collectImagePaths, collectMediaElements, collectReferencedFontFamilies, collectUsedFonts, colorWithOpacity, commentMentionQuery, commentTextSegments, comparePresentation, compatToastStackStyle, compatibilityWarningToasts, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeAnchoredPopupPosition, computeChartLegendLayout, computeColorFilter, computeColumnBoundaries, computeDrawingViewBox, computeEntranceAnimationDelay, computeGridSpacingPx, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSlideIndices, computeSmartArtElementLayout, computeSnapToShape, computeSplitCell, computeVirtualRange, connectorWrapperTransform, contextMenuInspectorAnchor, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createActiveAnimationGroup, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDefaultChartUserShape, createDefaultChartUserShapeGroupChild, createDepartureChannel, createGlyphOutlineLookup, createImageElementFromFile, createInitialPresentationSnapshot, createInlineListModelObserver, createInlineListSeed, createPlainNotesSegments, createPresenceProjector, createPresentationKeyBuffer, createPresentationLoadResources, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createRotationDrag, createSnapshotTextPositions, createSyncGate, createTableStyleEntry, createTouchGestureRecognizer, createViewerOptionsStore, createViewerZoomStore, createWheelStepBuffer, createWriteBackScheduler, cursorForTool, customGeometryPathsToSvgSubpaths, cycleSelectableElement, defaultCssVars, defaultRadius, defaultThemeColors, defineThreeViewElement, deleteAutosaveSnapshot, deleteSection, deleteTableStyleFromMap, deleteTagFromCollections, demote, deriveSlideFieldContext, deriveViewportBreakpoints, describeCollaborationShellState, describeFontEmbedding, describeSmartArtBounds, describeTableStyleEditor, detectOrientation, detectTouchDevice, discardAutosaveRecovery, distributeElements, downloadBlob, downloadDataUrl, editCommentInList, elementActionToPptxAction, elementBulletKind, elementContainerHeightStyle, elementHitTargetStyle, elementIdSelector, elementLockTogglePatch, elementPictureFilename, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, ensureChartInteractionStyles, erasePresentationInkAt, evenColumnWidths, evenRowHeights, exportDeckJson, extraQuickAccessCommands, fetchGoogleWebfontOutlineBytes, filterCommands, filterHiddenSlideIndices, filterInteractableIds, filterRenderedElements, findChartPartTarget, findConnectorSiteNear, findEraserHitElementId, findInSlides, findSelectedThemeSwatch, findSmartArtNodeText, finishPrintWindow, firstShowSlideIndex, flattenNodes, flattenTagCollections, forgetSessionDeck, formatAxisValue, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateNoteLineCount, generateTicks, getActiveXControlOverlayView, getAnimationColorBaseStyle, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getBarFacePicturePixelSampleVersion, getBevelLightingSvgFilter, getCachedNativeImageSize, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getChartUserShapeGroupTransform, getChartUserShapeRowChartBox, getCinematicTransitionAnimations, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getComputedFillStyle, getComputedStrokeStyle, getConnectorEndpointHandles, getConnectorPathGeometry, getContentPartReplayStyles, getCropShapeClipPath, getCurrentParagraphIndex, getDenseGridLayoutPlan, getDensePanelTouchTargetPx, getDraggedShapeAdjustments, getDuotoneCachedResult, getEffectSoundAsset, getEffectSoundState, getEffectStyleSource, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getFragmentedTransitionDescriptor, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFillCounterTransform, getImageFitStyle, getImageSvgFilters, getImageTilingStyle, getInkReplayStyles, getInlineEditorSelectionResult, getLocalStorageUsageSummary, getNonVisualDescriptionFields, getNotesPrintableArea, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDocumentParagraphs, getOleNestedDeckDetail, getOleObjectTypeLabel, getOleSheetGrid, getOleTypeColor, getOleTypeLabel, getOnlineVideoEmbed, getOverflowSegments, getP14TransitionAnimations, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPresetShapeVectorGeometry, getPrintableArea, getResizeHandleHitAreaStyle, getSelectionControlArtworkStyle, getSelectionOutlineColor, getSelectionTextStyleFlags, getSessionTabId, getShapeAdjustmentHandleDescriptors, getShapeConnectionSites, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeSvgFilter, getSubstituteFontFamily, getSvgStrokeDasharray, getTableCellBandStyle, getTextBodyRotationTransform, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasGlyphEnvelope, hasMultipleSelectedTableCells, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hasTiltData, hexToRgbUnit, hiddenSlideCue, hideChartSeries, hollowTextFillStyle, inlineElementPointerEvents, inlineListBodyText, insertCommentMention, insertTableElementColumn, insertTableElementRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isBulletMarkerSegment, isCalloutShape, isCellInRect, isCurrentLayout, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementLocked, isElementRendered, isExportAbortError, isHeaderFooterDateTextVisible, isHeaderFooterFooterTextVisible, isHeaderFooterHeaderTextVisible, isHollowShapeElement, isImageLikeElement, isImageTiled, isInkElement, isKeyboardOpen, isLegacyBinaryPresentation, isLinkedTextBox, isMediaFullscreenActive, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isSeriesUsingSecondaryAxis, isStrokeOnlyPresetElement, isSupportedPresentationFile, isTemplateElementId3 as isTemplateElementId, isUrlSafe, isWedgeCalloutPresetShape, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, listChartUserShapeRows, loadAudienceContent, loadSessionDeck, lockResizeAspect, makeCloneId, makeSlideId, mapEditingWheel, mapEditorKey, mapInlineTextFormatKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mapSlideShowStartKey, mapSlideSorterKey, masterViewBackgroundColor, masterViewCrudActions, masterViewCrudFailureKey, masterViewElements, masterViewPseudoSlide, matchCommentMentionAuthors, mayLeaveSlideShow, measureSvgViewportRect, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, mediaTrimEndMsFromSeconds, mediaTrimEndSeconds, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, modelDataToBlobUrl, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, mruColorsPatch, nestedTextDecorationStyle, newTableElement, nextPresentedSlide, nextShowSlideIndex, nextToggleValue, normalizeColorsForCapture, normalizeHexColor2 as normalizeHexColor, normalizeStrokeDashType, normalizeTableStyleGuid, notesSegmentsToSpans, observeElementHeight, observeExternalCollaborationReadiness, observeExternalCollaborationSession, observeYDocSlides, oleActionsVisible, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPendingPrintWindow, openPptxFile, openReadingView, openUrlInNewTab, overlayInlineTextSnapshot, overlayMasterViewInlineSnapshot, paintedElementSize, paintedStrokeWidth, paragraphsToSegments, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, parseSegmentsFromRichEditor, partitionTemplateElements, patchChartData, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, placeTileOnPage, placeholderPromptDescriptor, playFeedbackSound, playGroup, playSlideTransitionPreview, polygonsToSvgPath, pptxActionToElementAction, prepareElementForInsertion, prepareElementUpdateBatch, prepareExportClone, preprocessCssForCapture, presentationBaseName, presentationEntrySlideIndex, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, probeAutosaveRecovery, probeNativeImageSize, projectDrawingShapes, promote, publishLiveGeometry, publishLiveInlineText, pushRecentColor, quickStyleSwatchCss, radarStylePatch, rasterResultToPngBlob, rasterResultToPngDataUrl, rasterizeElement, rasterizeElementTiledToCanvas, rasterizeElementTiles, reResolveElementColors, reResolveSlideColors, readBackstageRecentFile, readEditableText, readListActivationSelection, readOnlyRecommendation, readRibbonTransitionDraft, readSlideShowOption, readSlidesFromYDoc, readSoundFileAsDataUrl, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, redistributeColumnWidth, registerCollaborationTeardown, registerCrossSlideAudio, registerCustomFont, remapTextToSegments, rememberSessionDeck, removeChartCategory, removeChartSeries, removeCommentFromList, removeEmptyNode, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorder2 as reorder, reorderAnimationTimelineRows, replaceMasterViewElements, replaceOleFile, replyToCommentInList, rerouteConnectorsForMovedElements, resetPresenterTimer, resetSlideLayoutPath, resolve3DRenderingFlags, resolveActionType, resolveAudienceScreenPlacement, resolveAuthoredCustomShowId, resolveAuthoredSlideRange, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveAutosaveActivation, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, resolveChartKind, resolveChartThreeViewSpec, resolveCollaborationShellEditability, resolveCollaborationShellState, resolveConnectorEndpointUpdate, resolveDefaultFontFamily, resolveDefaultPrintSettings, resolveDirection, resolveDirection8, resolveDisplayedChartType, resolveElementActionAffordance, resolveElementAriaAttributes, resolveElementHighlightClick, resolveElementInteractivity, resolveExpiredAutosaveSnapshots, resolveExportCaptureDecision, resolveFontKerning, resolveForwardSlideWithZoomReturn, resolveGoogleWebfontHref, resolveGroupChildFill, resolveHistoryDepth, resolveImageResolutionScale, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, resolveMediaBookmarkTimesMs, resolveMediaElementSource, resolveMediaTimeNodeElementIds, resolveMetricTrackingPx, resolveNotesSchematicBodyFontSizePx, resolveNotesSegments, resolveOleType, resolveOleVerbTarget, resolveOptionRootClasses, resolveOrientation, resolvePalette, resolvePresentationAction, resolveProfileInitial, resolveRevealedChartData, resolveRevealedDrawingShapeNodeIds, resolveRevealedDrawingShapes, resolveRevealedSmartArtNodes, resolveScreenTip, resolveScriptFontSet, resolveSelectionPaneRename, resolveShapeGeometry, resolveShowSlideIndexes, resolveSlideSizeSelection, resolveSlideTransition, resolveSmartArtThreeViewSpec, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTemplateBackgroundRows, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransitionSoundAction, resolveTransportForServerUrl, resolveViewerAddinRows, resolveViewportFitOptions, resolveWheelSpokeCount, resolveZoomNavigationTarget, restoreFilteredSeries, restoreInlineListBodySelection, restoreSegmentSelection, restoreSessionDeck, ribbonTransitionUpdates, rulerDragToGuidePosition, runPresentationAction, runProgramNoticeStackStyle, safeOpenUrl, sanitizeColor, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveDeckWithPassword, saveViewerProfile, savedPresentationFileName, scaleSlidesForSizeChange, scanAvailableFontFamilies, scheduleAutoAdvanceChain, scheduleMediaTrimAndFade, schemaLabel, scopeLayoutOptionsToSlide, scrollInspectorSectionIntoView, seedRecentColors, segmentFrameCount, segmentStyleToCss, segmentsToEditorHtml, segmentsToParagraphs, segmentsToPlainText, selectGoogleWebfontFamilies, selectedParagraphBulletKind, selectionBulletKind, sendBackward, sendToBack, seriesSecondaryAxisPatch, setAfterAnimation, setAfterAnimationColor, setCachedResult, setCellText, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDataLabelsRangeCache, setDuotoneCachedResult, setEffectSound, setEffectStockSound, setMasterViewBackgroundColor, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shapeFillChange, shapeOutlineChange, shouldAutoFollowBroadcaster, shouldClearAutosaveCacheOnClose, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldDiscardAutosaveOnSuccessfulSave, shouldLoopContinuously, shouldProbeAutosaveRecovery, shouldRenderHitTarget, shouldRoomSlidesReplaceLoad, shouldShowAccessibilitySection, shouldShowAutosaveRecoveryPrompt, shouldShowElementHandles, shouldShowMediaFullscreenStopButton, shouldStickyActionRow, shouldUseSvgWarp, shouldWriteAutosaveSnapshot, siblingCount, siblingIndex, slideProgressPercent, slideShowOptionChange, slideSizeFromPreset, slideSizeToCanvasPx, slideStatusLabel, snapBoxToGrid, splitCell, splitRunByScriptFont, splitRunForMetrics, splitWordsForUnderline, stepFontSizePt, stepPresenterZoom, stopAllPersistentAudio, stopCaptureStream, storeAudienceContent, stripUnderlineDecoration, strokeOutlineViewBox, strokeWidthOf, styleShadowFilter, subscribeBarFacePicturePixelSamples, substituteFieldText, surfaceWireframePatch, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, syncGoogleWebfontStylesheet, tableCellCss, tableContainerCss, tableStyleAssignmentUpdate, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, textFontSizePtToPx, textFontSizePxToPt, themeColorLabel, themeColorSchemesEqual, themeColorSwatchRows, themeSwatchCommit, themeToCssVars, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, toggleBlackboard, toggleCommentResolvedInList, togglePresenterTimer, toggleSelectionBullets, toggleSheet, toggleStageElementMedia, toggleText3dExtrusion, transformInlineListCase, transformTextCase, transitionSoundOptions, transitionSoundSelectedValue, transitionStockSoundId, trimmedMediaDurationMs, ungroupElements, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateElement, updateMasterViewElement, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateMediaTrimRange, validateRoomId, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewPropertiesPatchFromPreferences, viewerOptionsToPreferences, viewerPreferencesFromViewProperties, visibleTemplateElements, warpPreviewPath, withChartTitle, withChartUserShapeAdded, withChartUserShapeGroupChildAdded, withChartUserShapeRowChartBoxUpdated, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRemoved, withChartUserShapeRowRotationUpdated, withChartUserShapeRowTextUpdated, withChartUserShapeRowUpdated, withConnectorEndpointUpdate, withFrameSlides, withInlineListDecorationDefaults, withSlideSizeOrientation, withSlidesPerPage, writeStoredViewerPrefs, xmlText };