pptx-react-viewer 4.13.0 → 4.15.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 (111) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/{AiChatPanel-AQDB2BLO.mjs → AiChatPanel-7OVUGUKW.mjs} +4 -4
  3. package/dist/AiChatPanel-7OVUGUKW.mjs.br +0 -0
  4. package/dist/AiChatPanel-7OVUGUKW.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-VXQUQNZ6.js → AiChatPanel-CDQWJTWL.js} +28 -28
  6. package/dist/AiChatPanel-CDQWJTWL.js.br +0 -0
  7. package/dist/AiChatPanel-CDQWJTWL.js.gz +0 -0
  8. package/dist/{Model3DScene-UHHKYZSK.mjs → Model3DScene-A3CPMFAO.mjs} +1 -1
  9. package/dist/Model3DScene-A3CPMFAO.mjs.br +0 -0
  10. package/dist/Model3DScene-A3CPMFAO.mjs.gz +0 -0
  11. package/dist/{Model3DScene-I6OVMXEE.js → Model3DScene-OLGB7Z7Q.js} +2 -2
  12. package/dist/{Model3DScene-I6OVMXEE.js.br → Model3DScene-OLGB7Z7Q.js.br} +0 -0
  13. package/dist/Model3DScene-OLGB7Z7Q.js.gz +0 -0
  14. package/dist/{chunk-UOS5HJLG.js → chunk-2CSRCH4H.js} +2487 -1321
  15. package/dist/chunk-2CSRCH4H.js.br +0 -0
  16. package/dist/chunk-2CSRCH4H.js.gz +0 -0
  17. package/dist/{chunk-KA24ZRTJ.js → chunk-6ZPXMS64.js} +1517 -1526
  18. package/dist/chunk-6ZPXMS64.js.br +0 -0
  19. package/dist/chunk-6ZPXMS64.js.gz +0 -0
  20. package/dist/{chunk-SLMDLVFV.mjs → chunk-AHJ4ND7Q.mjs} +1 -1
  21. package/dist/chunk-AHJ4ND7Q.mjs.br +0 -0
  22. package/dist/chunk-AHJ4ND7Q.mjs.gz +0 -0
  23. package/dist/{chunk-JUUI5DHB.mjs → chunk-AIWEM7VE.mjs} +2478 -1320
  24. package/dist/chunk-AIWEM7VE.mjs.br +0 -0
  25. package/dist/chunk-AIWEM7VE.mjs.gz +0 -0
  26. package/dist/{chunk-55OLQ7HS.mjs → chunk-CJSIEITL.mjs} +3 -0
  27. package/dist/chunk-CJSIEITL.mjs.br +0 -0
  28. package/dist/chunk-CJSIEITL.mjs.gz +0 -0
  29. package/dist/{chunk-5YW6N5KJ.js → chunk-CNXVOFUW.js} +197 -197
  30. package/dist/chunk-CNXVOFUW.js.br +0 -0
  31. package/dist/chunk-CNXVOFUW.js.gz +0 -0
  32. package/dist/{chunk-HJBTQ234.mjs → chunk-DNWIW75I.mjs} +6 -5
  33. package/dist/chunk-DNWIW75I.mjs.br +0 -0
  34. package/dist/chunk-DNWIW75I.mjs.gz +0 -0
  35. package/dist/{chunk-57RBEPPQ.js → chunk-HGO243GV.js} +818 -816
  36. package/dist/chunk-HGO243GV.js.br +0 -0
  37. package/dist/chunk-HGO243GV.js.gz +0 -0
  38. package/dist/{chunk-5DQNWKOF.mjs → chunk-Q5VQ53R3.mjs} +2 -2
  39. package/dist/chunk-Q5VQ53R3.mjs.br +0 -0
  40. package/dist/chunk-Q5VQ53R3.mjs.gz +0 -0
  41. package/dist/{chunk-C5ZJGQ2F.mjs → chunk-RQCAXUVQ.mjs} +342 -351
  42. package/dist/chunk-RQCAXUVQ.mjs.br +0 -0
  43. package/dist/chunk-RQCAXUVQ.mjs.gz +0 -0
  44. package/dist/{chunk-MXH7RMTF.js → chunk-UP6PJEHM.js} +5 -5
  45. package/dist/chunk-UP6PJEHM.js.br +0 -0
  46. package/dist/chunk-UP6PJEHM.js.gz +0 -0
  47. package/dist/{chunk-HIYK7HPX.js → chunk-XEYB25ZT.js} +3 -0
  48. package/dist/chunk-XEYB25ZT.js.br +0 -0
  49. package/dist/chunk-XEYB25ZT.js.gz +0 -0
  50. package/dist/i18n.js +4 -4
  51. package/dist/i18n.js.br +0 -0
  52. package/dist/i18n.js.gz +0 -0
  53. package/dist/i18n.mjs +1 -1
  54. package/dist/i18n.mjs.br +0 -0
  55. package/dist/i18n.mjs.gz +0 -0
  56. package/dist/index.d.ts +293 -268
  57. package/dist/index.js +63 -63
  58. package/dist/index.js.br +0 -0
  59. package/dist/index.js.gz +0 -0
  60. package/dist/index.mjs +6 -6
  61. package/dist/index.mjs.br +0 -0
  62. package/dist/index.mjs.gz +0 -0
  63. package/dist/internals.d.ts +600 -575
  64. package/dist/internals.js +105 -105
  65. package/dist/internals.js.br +0 -0
  66. package/dist/internals.js.gz +0 -0
  67. package/dist/internals.mjs +4 -4
  68. package/dist/internals.mjs.br +0 -0
  69. package/dist/internals.mjs.gz +0 -0
  70. package/dist/pptx-viewer.css +1 -1
  71. package/dist/pptx-viewer.css.br +0 -0
  72. package/dist/pptx-viewer.css.gz +0 -0
  73. package/dist/viewer/index.d.ts +161 -136
  74. package/dist/viewer/index.js +27 -27
  75. package/dist/viewer/index.js.br +0 -0
  76. package/dist/viewer/index.js.gz +0 -0
  77. package/dist/viewer/index.mjs +6 -6
  78. package/dist/viewer/index.mjs.br +0 -0
  79. package/dist/viewer/index.mjs.gz +0 -0
  80. package/package.json +1 -1
  81. package/dist/AiChatPanel-AQDB2BLO.mjs.br +0 -0
  82. package/dist/AiChatPanel-AQDB2BLO.mjs.gz +0 -0
  83. package/dist/AiChatPanel-VXQUQNZ6.js.br +0 -0
  84. package/dist/AiChatPanel-VXQUQNZ6.js.gz +0 -0
  85. package/dist/Model3DScene-I6OVMXEE.js.gz +0 -0
  86. package/dist/Model3DScene-UHHKYZSK.mjs.br +0 -0
  87. package/dist/Model3DScene-UHHKYZSK.mjs.gz +0 -0
  88. package/dist/chunk-55OLQ7HS.mjs.br +0 -0
  89. package/dist/chunk-55OLQ7HS.mjs.gz +0 -0
  90. package/dist/chunk-57RBEPPQ.js.br +0 -0
  91. package/dist/chunk-57RBEPPQ.js.gz +0 -0
  92. package/dist/chunk-5DQNWKOF.mjs.br +0 -0
  93. package/dist/chunk-5DQNWKOF.mjs.gz +0 -0
  94. package/dist/chunk-5YW6N5KJ.js.br +0 -0
  95. package/dist/chunk-5YW6N5KJ.js.gz +0 -0
  96. package/dist/chunk-C5ZJGQ2F.mjs.br +0 -0
  97. package/dist/chunk-C5ZJGQ2F.mjs.gz +0 -0
  98. package/dist/chunk-HIYK7HPX.js.br +0 -0
  99. package/dist/chunk-HIYK7HPX.js.gz +0 -0
  100. package/dist/chunk-HJBTQ234.mjs.br +0 -0
  101. package/dist/chunk-HJBTQ234.mjs.gz +0 -0
  102. package/dist/chunk-JUUI5DHB.mjs.br +0 -0
  103. package/dist/chunk-JUUI5DHB.mjs.gz +0 -0
  104. package/dist/chunk-KA24ZRTJ.js.br +0 -0
  105. package/dist/chunk-KA24ZRTJ.js.gz +0 -0
  106. package/dist/chunk-MXH7RMTF.js.br +0 -0
  107. package/dist/chunk-MXH7RMTF.js.gz +0 -0
  108. package/dist/chunk-SLMDLVFV.mjs.br +0 -0
  109. package/dist/chunk-SLMDLVFV.mjs.gz +0 -0
  110. package/dist/chunk-UOS5HJLG.js.br +0 -0
  111. package/dist/chunk-UOS5HJLG.js.gz +0 -0
@@ -28716,7 +28716,7 @@ var ENTRY_TYPE_ROOT;
28716
28716
  var DIR_ENTRY_SIZE;
28717
28717
  var Ole2ParseError;
28718
28718
  var init_ole2_parser_types = __esm({
28719
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole2-parser-types.js"() {
28719
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole2-parser-types.js"() {
28720
28720
  OLE_MAGIC = new Uint8Array([208, 207, 17, 224, 161, 177, 26, 225]);
28721
28721
  ENDOFCHAIN = 4294967294;
28722
28722
  FREESECT = 4294967295;
@@ -28912,7 +28912,7 @@ function parseOle2(buffer) {
28912
28912
  return { entries: entries2, getStream };
28913
28913
  }
28914
28914
  var init_ole2_parser_read = __esm({
28915
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole2-parser-read.js"() {
28915
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole2-parser-read.js"() {
28916
28916
  init_ole2_parser_types();
28917
28917
  }
28918
28918
  });
@@ -29091,7 +29091,7 @@ function writeInt32Sectors(outBytes, int32Data, firstSector, numSectors, sectorS
29091
29091
  }
29092
29092
  }
29093
29093
  var init_ole2_parser_write_helpers = __esm({
29094
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole2-parser-write-helpers.js"() {
29094
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole2-parser-write-helpers.js"() {
29095
29095
  init_ole2_parser_types();
29096
29096
  }
29097
29097
  });
@@ -29186,7 +29186,7 @@ function writeStreamSectors(outBytes, streamData, chain2, sectorSize) {
29186
29186
  }
29187
29187
  var HEADER_DIFAT_ENTRIES;
29188
29188
  var init_ole2_parser_write_serialize = __esm({
29189
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole2-parser-write-serialize.js"() {
29189
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole2-parser-write-serialize.js"() {
29190
29190
  init_ole2_parser_types();
29191
29191
  init_ole2_parser_write_helpers();
29192
29192
  HEADER_DIFAT_ENTRIES = 109;
@@ -29357,7 +29357,7 @@ function buildOle2(streams, rootClsid, miniStreamCutoff = 4096) {
29357
29357
  return output;
29358
29358
  }
29359
29359
  var init_ole2_parser_write = __esm({
29360
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole2-parser-write.js"() {
29360
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole2-parser-write.js"() {
29361
29361
  init_ole2_parser_types();
29362
29362
  init_ole2_parser_write_helpers();
29363
29363
  init_ole2_parser_write_serialize();
@@ -30321,7 +30321,7 @@ var MAX;
30321
30321
  var NIL;
30322
30322
  var SIZE;
30323
30323
  var init_ole2_stream_edit = __esm({
30324
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole2-stream-edit.js"() {
30324
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole2-stream-edit.js"() {
30325
30325
  END = 4294967294;
30326
30326
  MAX = 4294967290;
30327
30327
  NIL = 4294967295;
@@ -30394,7 +30394,7 @@ function isCfb(bytes) {
30394
30394
  }
30395
30395
  var WORKBOOK_STREAM_NAMES;
30396
30396
  var init_legacy_excel_cfb = __esm({
30397
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/legacy-excel-cfb.js"() {
30397
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/legacy-excel-cfb.js"() {
30398
30398
  init_ole2_parser_read();
30399
30399
  init_ole2_parser_types();
30400
30400
  init_ole2_parser_write();
@@ -30621,7 +30621,7 @@ var WORKSHEET_DT;
30621
30621
  var DEFAULT_MAX_ROWS2;
30622
30622
  var DEFAULT_MAX_COLS2;
30623
30623
  var init_legacy_excel_biff8 = __esm({
30624
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/legacy-excel-biff8.js"() {
30624
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/legacy-excel-biff8.js"() {
30625
30625
  init_legacy_excel_cfb();
30626
30626
  OPCODE_BOF = 2057;
30627
30627
  OPCODE_EOF = 10;
@@ -30767,7 +30767,7 @@ function buildXlsRowCellRegion(grid) {
30767
30767
  return Uint8Array.from(bytesOut);
30768
30768
  }
30769
30769
  var init_legacy_excel_biff8_grid = __esm({
30770
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/legacy-excel-biff8-grid.js"() {
30770
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/legacy-excel-biff8-grid.js"() {
30771
30771
  init_legacy_excel_biff8();
30772
30772
  }
30773
30773
  });
@@ -30888,7 +30888,7 @@ function writeOleXlsStringCellEdit(inputBytes, edit) {
30888
30888
  }
30889
30889
  }
30890
30890
  var init_legacy_excel_biff8_writer = __esm({
30891
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/legacy-excel-biff8-writer.js"() {
30891
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/legacy-excel-biff8-writer.js"() {
30892
30892
  init_legacy_excel_biff8();
30893
30893
  init_legacy_excel_biff8_grid();
30894
30894
  init_legacy_excel_cfb();
@@ -31054,7 +31054,7 @@ function patchDocFib(wordDoc, fib, patch) {
31054
31054
  var FC_LCB_INDEX;
31055
31055
  var F_COMPLEX_BIT;
31056
31056
  var init_ole_document_doc_fib = __esm({
31057
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole-document-doc-fib.js"() {
31057
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole-document-doc-fib.js"() {
31058
31058
  FC_LCB_INDEX = {
31059
31059
  plcfbteChpx: 12,
31060
31060
  plcfbtePapx: 13,
@@ -31104,7 +31104,7 @@ function unwrapDocBytes(bytes) {
31104
31104
  }
31105
31105
  }
31106
31106
  var init_ole_document_doc_cfb = __esm({
31107
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole-document-doc-cfb.js"() {
31107
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole-document-doc-cfb.js"() {
31108
31108
  init_ole_document_doc_fib();
31109
31109
  init_ole2_parser_read();
31110
31110
  init_ole2_parser_types();
@@ -31218,7 +31218,7 @@ function buildSingleRunChpxPage(fcStart, fcEnd, blob) {
31218
31218
  }
31219
31219
  var PAGE_SIZE;
31220
31220
  var init_ole_document_doc_fkp = __esm({
31221
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole-document-doc-fkp.js"() {
31221
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole-document-doc-fkp.js"() {
31222
31222
  PAGE_SIZE = 512;
31223
31223
  }
31224
31224
  });
@@ -31256,7 +31256,7 @@ function encodeCp1252(text22) {
31256
31256
  var CP1252_HIGH_BLOCK;
31257
31257
  var CP1252_HIGH_BLOCK_REVERSE;
31258
31258
  var init_ole_document_doc_cp1252 = __esm({
31259
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole-document-doc-cp1252.js"() {
31259
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole-document-doc-cp1252.js"() {
31260
31260
  CP1252_HIGH_BLOCK = [
31261
31261
  8364,
31262
31262
  129,
@@ -31455,7 +31455,7 @@ function buildClxBytes(pieces) {
31455
31455
  var CLXT_PRC;
31456
31456
  var CLXT_PCDT;
31457
31457
  var init_ole_document_doc_pieces = __esm({
31458
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole-document-doc-pieces.js"() {
31458
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole-document-doc-pieces.js"() {
31459
31459
  init_ole_document_doc_cp1252();
31460
31460
  CLXT_PRC = 1;
31461
31461
  CLXT_PCDT = 2;
@@ -31615,7 +31615,7 @@ function writeOleDocParagraphEdit(docBytes, paragraphIndex, text22) {
31615
31615
  var RISKY_PLCF_INDICES;
31616
31616
  var RISKY_STTB_INDICES;
31617
31617
  var init_ole_document_doc_editor = __esm({
31618
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ole-document-doc-editor.js"() {
31618
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ole-document-doc-editor.js"() {
31619
31619
  init_ole_document_doc_cfb();
31620
31620
  init_ole_document_doc_fib();
31621
31621
  init_ole_document_doc_fkp();
@@ -31806,7 +31806,7 @@ function encodePng(width, height, rgba) {
31806
31806
  var CRC_TABLE;
31807
31807
  var PNG_SIGNATURE;
31808
31808
  var init_png_encoder = __esm({
31809
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/utils/png-encoder.js"() {
31809
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/utils/png-encoder.js"() {
31810
31810
  CRC_TABLE = (() => {
31811
31811
  const table2 = new Uint32Array(256);
31812
31812
  for (let n = 0; n < 256; n++) {
@@ -50714,7 +50714,7 @@ async function hmac(algorithm, key2, data) {
50714
50714
  return new Uint8Array(result);
50715
50715
  }
50716
50716
  var init_ooxml_crypto_primitives = __esm({
50717
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/utils/ooxml-crypto-primitives.js"() {
50717
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/utils/ooxml-crypto-primitives.js"() {
50718
50718
  }
50719
50719
  });
50720
50720
  var init_ooxml_crypto_primitives2 = __esm({
@@ -51829,7 +51829,7 @@ function mdStyleDigest(message, initialState, transform6) {
51829
51829
  return out;
51830
51830
  }
51831
51831
  var init_bit_ops = __esm({
51832
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/utils/digests/bit-ops.js"() {
51832
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/utils/digests/bit-ops.js"() {
51833
51833
  }
51834
51834
  });
51835
51835
  function f1(x, y, z) {
@@ -51860,7 +51860,7 @@ var ROUND1;
51860
51860
  var ROUND2;
51861
51861
  var ROUND3;
51862
51862
  var init_md4 = __esm({
51863
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/utils/digests/md4.js"() {
51863
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/utils/digests/md4.js"() {
51864
51864
  init_bit_ops();
51865
51865
  INITIAL_STATE = [1732584193, 4023233417, 2562383102, 271733878];
51866
51866
  K2 = 1518500249;
@@ -59217,9 +59217,9 @@ function ensureArray4(val2) {
59217
59217
  }
59218
59218
  return Array.isArray(val2) ? val2 : [val2];
59219
59219
  }
59220
- function collectControlNodes(controls) {
59221
- const nodes = [...ensureArray4(controls["p:control"])];
59222
- const altContents = ensureArray4(controls["mc:AlternateContent"]);
59220
+ function collectControlNodes(controls2) {
59221
+ const nodes = [...ensureArray4(controls2["p:control"])];
59222
+ const altContents = ensureArray4(controls2["mc:AlternateContent"]);
59223
59223
  for (const alt of altContents) {
59224
59224
  const fallback = alt["mc:Fallback"];
59225
59225
  const fallbackControls = fallback ? ensureArray4(fallback["p:control"]) : [];
@@ -59276,11 +59276,11 @@ function parseActiveXControlsFromSlide(slideXml3) {
59276
59276
  if (!cSld) {
59277
59277
  return [];
59278
59278
  }
59279
- const controls = cSld["p:controls"];
59280
- if (!controls) {
59279
+ const controls2 = cSld["p:controls"];
59280
+ if (!controls2) {
59281
59281
  return [];
59282
59282
  }
59283
- const controlEntries = collectControlNodes(controls);
59283
+ const controlEntries = collectControlNodes(controls2);
59284
59284
  if (controlEntries.length === 0) {
59285
59285
  return [];
59286
59286
  }
@@ -59371,17 +59371,17 @@ function buildActiveXControlNode(control) {
59371
59371
  }
59372
59372
  return node;
59373
59373
  }
59374
- function applyActiveXControlsToSlide(slideXml3, controls) {
59374
+ function applyActiveXControlsToSlide(slideXml3, controls2) {
59375
59375
  const sld = slideXml3["p:sld"];
59376
59376
  const cSld = sld?.["p:cSld"];
59377
59377
  if (!cSld) {
59378
59378
  return;
59379
59379
  }
59380
- if (!controls || controls.length === 0) {
59380
+ if (!controls2 || controls2.length === 0) {
59381
59381
  delete cSld["p:controls"];
59382
59382
  return;
59383
59383
  }
59384
- const nodes = controls.map(buildActiveXControlNode);
59384
+ const nodes = controls2.map(buildActiveXControlNode);
59385
59385
  const container = cSld["p:controls"] ?? {};
59386
59386
  const isNewContainer = cSld["p:controls"] === void 0;
59387
59387
  container["p:control"] = nodes.length === 1 ? nodes[0] : nodes;
@@ -109771,7 +109771,7 @@ function record(recType, data, recInstance = 0, isContainer2 = false, recVer = 0
109771
109771
  }
109772
109772
  var ByteWriter;
109773
109773
  var init_byte_writer = __esm({
109774
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/byte-writer.js"() {
109774
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/byte-writer.js"() {
109775
109775
  ByteWriter = class {
109776
109776
  chunks = [];
109777
109777
  length = 0;
@@ -109863,7 +109863,7 @@ var HEADER_TOKEN_PLAIN;
109863
109863
  var HEADER_TOKEN_ENCRYPTED;
109864
109864
  var EMU_PER_MASTER;
109865
109865
  var init_legacy_ppt_record_types = __esm({
109866
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/legacy-ppt-record-types.js"() {
109866
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/legacy-ppt-record-types.js"() {
109867
109867
  RT = {
109868
109868
  Document: 1e3,
109869
109869
  DocumentAtom: 1001,
@@ -109992,7 +109992,7 @@ var init_legacy_ppt_record_types = __esm({
109992
109992
  }
109993
109993
  });
109994
109994
  var init_record_types = __esm({
109995
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/record-types.js"() {
109995
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/record-types.js"() {
109996
109996
  init_legacy_ppt_record_types();
109997
109997
  }
109998
109998
  });
@@ -110010,7 +110010,7 @@ function buildCurrentUserStream(offsetToCurrentEdit, encrypted) {
110010
110010
  var USER_NAME;
110011
110011
  var CURRENT_USER_STREAM_SIZE;
110012
110012
  var init_current_user_writer = __esm({
110013
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/current-user-writer.js"() {
110013
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/current-user-writer.js"() {
110014
110014
  init_record_types();
110015
110015
  init_byte_writer();
110016
110016
  USER_NAME = "pptx-viewer";
@@ -110040,7 +110040,7 @@ function buildFbse(picture, uid, foDelay, size) {
110040
110040
  var MSOBLIP_PICT;
110041
110041
  var BLIP_INFO;
110042
110042
  var init_blip_writer = __esm({
110043
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/blip-writer.js"() {
110043
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/blip-writer.js"() {
110044
110044
  init_md4();
110045
110045
  init_png_encoder();
110046
110046
  init_record_types();
@@ -110092,7 +110092,7 @@ var OPT;
110092
110092
  var FBID_FLAG;
110093
110093
  var METRO_BLOB_OPID;
110094
110094
  var init_fopt_writer = __esm({
110095
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/fopt-writer.js"() {
110095
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/fopt-writer.js"() {
110096
110096
  init_record_types();
110097
110097
  init_byte_writer();
110098
110098
  OPT = {
@@ -110176,7 +110176,7 @@ function buildPictureStore(pictures, shapesPerDrawing) {
110176
110176
  }
110177
110177
  var SHAPE_ID_CLUSTER_SIZE;
110178
110178
  var init_bstore_writer = __esm({
110179
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/bstore-writer.js"() {
110179
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/bstore-writer.js"() {
110180
110180
  init_record_types();
110181
110181
  init_blip_writer();
110182
110182
  init_byte_writer();
@@ -110211,7 +110211,7 @@ function buildEnvironment(fonts, otherTextStyle) {
110211
110211
  }
110212
110212
  var LF_FACE_NAME_BYTES;
110213
110213
  var init_font_collection_writer = __esm({
110214
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/font-collection-writer.js"() {
110214
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/font-collection-writer.js"() {
110215
110215
  init_record_types();
110216
110216
  init_byte_writer();
110217
110217
  LF_FACE_NAME_BYTES = 64;
@@ -110262,7 +110262,8 @@ function buildDocumentContainer(input) {
110262
110262
  if (input.soundCollection) {
110263
110263
  w.bytes(input.soundCollection);
110264
110264
  }
110265
- w.bytes(drawingGroup).bytes(buildSlideListWithText([input.masterPersistAtom], 1));
110265
+ const masterAtoms = input.masterPersistAtoms ?? (input.masterPersistAtom ? [input.masterPersistAtom] : []);
110266
+ w.bytes(drawingGroup).bytes(buildSlideListWithText(masterAtoms, 1));
110266
110267
  if (input.paddingBytes) {
110267
110268
  w.bytes(buildPaddingTag(input.paddingBytes));
110268
110269
  }
@@ -110273,7 +110274,7 @@ var MASTER_SLIDE_ID_SENTINEL;
110273
110274
  var RT_CSTRING;
110274
110275
  var RT_BINARY_TAG_DATA_BLOB;
110275
110276
  var init_document_writer = __esm({
110276
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/document-writer.js"() {
110277
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/document-writer.js"() {
110277
110278
  init_record_types();
110278
110279
  init_byte_writer();
110279
110280
  init_font_collection_writer();
@@ -110421,7 +110422,7 @@ var LT;
110421
110422
  var FLAG_CUSTOM_SHOW_RETURN;
110422
110423
  var HyperlinkCollector;
110423
110424
  var init_hyperlink_writer = __esm({
110424
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/hyperlink-writer.js"() {
110425
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/hyperlink-writer.js"() {
110425
110426
  init_record_types();
110426
110427
  init_byte_writer();
110427
110428
  II_ACTION = {
@@ -110520,7 +110521,7 @@ var MediaCollector;
110520
110521
  var SOUND_EXTENSION_WAV;
110521
110522
  var SOUND_LENGTH_UNKNOWN;
110522
110523
  var init_media_writer = __esm({
110523
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/media-writer.js"() {
110524
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/media-writer.js"() {
110524
110525
  init_record_types();
110525
110526
  init_byte_writer();
110526
110527
  MediaCollector = class {
@@ -110622,7 +110623,7 @@ var EX_OLE_SUB_DEFAULT;
110622
110623
  var PACKAGER_MENU_NAME;
110623
110624
  var OleCollector;
110624
110625
  var init_ole_writer = __esm({
110625
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/ole-writer.js"() {
110626
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/ole-writer.js"() {
110626
110627
  init_ole2_parser_write();
110627
110628
  init_record_types();
110628
110629
  init_byte_writer();
@@ -110707,7 +110708,7 @@ function buildExObjList(hyperlinks, ole, media) {
110707
110708
  return record(RT.ExternalObjectList, w.toBytes(), 0, true);
110708
110709
  }
110709
110710
  var init_ex_obj_list_writer = __esm({
110710
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/ex-obj-list-writer.js"() {
110711
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/ex-obj-list-writer.js"() {
110711
110712
  init_record_types();
110712
110713
  init_byte_writer();
110713
110714
  init_hyperlink_writer();
@@ -110760,7 +110761,7 @@ function buildChildAnchor(rect22) {
110760
110761
  var INT16_MIN2;
110761
110762
  var INT16_MAX2;
110762
110763
  var init_anchor_writer = __esm({
110763
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/anchor-writer.js"() {
110764
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/anchor-writer.js"() {
110764
110765
  init_record_types();
110765
110766
  init_byte_writer();
110766
110767
  INT16_MIN2 = -32768;
@@ -110788,7 +110789,7 @@ function encodeColorIndex(rgb2) {
110788
110789
  }
110789
110790
  var DEFAULT_RGB;
110790
110791
  var init_colors = __esm({
110791
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/colors.js"() {
110792
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/colors.js"() {
110792
110793
  DEFAULT_RGB = "000000";
110793
110794
  }
110794
110795
  });
@@ -110882,7 +110883,7 @@ function writeCfException(w, run, fontIndex) {
110882
110883
  var ALIGN_CODE;
110883
110884
  var EMU_PER_MASTER_UNIT;
110884
110885
  var init_text_exception_writer = __esm({
110885
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/text-exception-writer.js"() {
110886
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/text-exception-writer.js"() {
110886
110887
  init_colors();
110887
110888
  ALIGN_CODE = {
110888
110889
  l: 0,
@@ -110953,7 +110954,7 @@ function buildTextAtoms(body, fonts, hyperlinks) {
110953
110954
  return new ByteWriter().bytes(buildTextHeaderAtom(body.textType)).bytes(buildTextCharsAtom(text22)).bytes(buildStyleTextPropAtom(body, fontIndex)).bytes(buildRunHyperlinks(body, hyperlinks)).toBytes();
110954
110955
  }
110955
110956
  var init_text_atom_writer = __esm({
110956
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/text-atom-writer.js"() {
110957
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/text-atom-writer.js"() {
110957
110958
  init_record_types();
110958
110959
  init_byte_writer();
110959
110960
  init_hyperlink_writer();
@@ -111065,7 +111066,7 @@ var TITLE_PROMPT;
111065
111066
  var BODY_PROMPT;
111066
111067
  var DEFAULT_FRAMES;
111067
111068
  var init_master_placeholders_writer = __esm({
111068
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/master-placeholders-writer.js"() {
111069
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/master-placeholders-writer.js"() {
111069
111070
  init_record_types();
111070
111071
  init_anchor_writer();
111071
111072
  init_byte_writer();
@@ -111137,7 +111138,7 @@ function masterStyleFonts(styles) {
111137
111138
  return [styles.title, styles.body, styles.other].flatMap((levels) => levels ?? []).map((level2) => level2.run.fontName).filter((name) => Boolean(name));
111138
111139
  }
111139
111140
  var init_master_style_fonts = __esm({
111140
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/master-style-fonts.js"() {
111141
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/master-style-fonts.js"() {
111141
111142
  }
111142
111143
  });
111143
111144
  function buildMasterStyleAtom(recInstance, levels, fontIndex) {
@@ -111171,7 +111172,7 @@ function buildMasterTextStyles(styles, fontIndex) {
111171
111172
  var EMPTY_LEVELS;
111172
111173
  var FIXED_INSTANCE_DATA;
111173
111174
  var init_master_text_styles_writer = __esm({
111174
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/master-text-styles-writer.js"() {
111175
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/master-text-styles-writer.js"() {
111175
111176
  init_record_types();
111176
111177
  init_byte_writer();
111177
111178
  init_text_exception_writer();
@@ -111240,7 +111241,7 @@ function buildShapeFoptProps(input) {
111240
111241
  }
111241
111242
  var DASH_CODE;
111242
111243
  var init_shape_props_writer = __esm({
111243
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/shape-props-writer.js"() {
111244
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/shape-props-writer.js"() {
111244
111245
  init_colors();
111245
111246
  init_fopt_writer();
111246
111247
  DASH_CODE = {
@@ -111359,7 +111360,7 @@ var FSP_FLAG_OLE_SHAPE;
111359
111360
  var FSP_FLAG_CHILD;
111360
111361
  var PLACEHOLDER_ID;
111361
111362
  var init_shape_writer = __esm({
111362
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/shape-writer.js"() {
111363
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/shape-writer.js"() {
111363
111364
  init_record_types();
111364
111365
  init_anchor_writer();
111365
111366
  init_byte_writer();
@@ -111423,7 +111424,7 @@ var FSP_FLAG_PATRIARCH;
111423
111424
  var FSP_FLAG_HAVE_ANCHOR;
111424
111425
  var ZERO_RECT;
111425
111426
  var init_group_writer = __esm({
111426
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/group-writer.js"() {
111427
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/group-writer.js"() {
111427
111428
  init_record_types();
111428
111429
  init_anchor_writer();
111429
111430
  init_byte_writer();
@@ -111436,7 +111437,7 @@ var init_group_writer = __esm({
111436
111437
  });
111437
111438
  var ShapeIdAllocator2;
111438
111439
  var init_shape_id_allocator = __esm({
111439
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/shape-id-allocator.js"() {
111440
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/shape-id-allocator.js"() {
111440
111441
  ShapeIdAllocator2 = class {
111441
111442
  current;
111442
111443
  constructor(drawingId, clusterSize) {
@@ -111493,7 +111494,7 @@ var FSP_FLAG_BACKGROUND;
111493
111494
  var BACKGROUND_RECT_SPT;
111494
111495
  var SHAPE_ID_CLUSTER_SIZE2;
111495
111496
  var init_drawing_writer = __esm({
111496
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/drawing-writer.js"() {
111497
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/drawing-writer.js"() {
111497
111498
  init_record_types();
111498
111499
  init_byte_writer();
111499
111500
  init_colors();
@@ -111522,7 +111523,7 @@ function buildNotesContainer(paragraphs2, notesRect, slidePersistIdRef, fonts, d
111522
111523
  return record(RT.Notes, data, 0, true);
111523
111524
  }
111524
111525
  var init_notes_writer = __esm({
111525
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/notes-writer.js"() {
111526
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/notes-writer.js"() {
111526
111527
  init_record_types();
111527
111528
  init_byte_writer();
111528
111529
  init_drawing_writer();
@@ -111602,7 +111603,7 @@ function recordBytes(data, rec) {
111602
111603
  var PptParseError;
111603
111604
  var RECORD_HEADER_SIZE;
111604
111605
  var init_legacy_ppt_record_stream = __esm({
111605
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/legacy-ppt-record-stream.js"() {
111606
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/legacy-ppt-record-stream.js"() {
111606
111607
  PptParseError = class extends Error {
111607
111608
  constructor(message) {
111608
111609
  super(message);
@@ -111613,7 +111614,7 @@ var init_legacy_ppt_record_stream = __esm({
111613
111614
  }
111614
111615
  });
111615
111616
  var init_record_stream = __esm({
111616
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/record-stream.js"() {
111617
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/record-stream.js"() {
111617
111618
  init_legacy_ppt_record_stream();
111618
111619
  }
111619
111620
  });
@@ -111668,7 +111669,7 @@ function resolveEscherColor(colorRef, scheme) {
111668
111669
  var SCHEME;
111669
111670
  var DEFAULT_SCHEME;
111670
111671
  var init_color_scheme = __esm({
111671
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/color-scheme.js"() {
111672
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/color-scheme.js"() {
111672
111673
  init_record_stream();
111673
111674
  init_record_types();
111674
111675
  SCHEME = {
@@ -111701,7 +111702,7 @@ function buildColorSchemeAtom(recInstance = 1, colors) {
111701
111702
  return record(RT.ColorSchemeAtom, w.toBytes(), recInstance, false, 0);
111702
111703
  }
111703
111704
  var init_color_scheme_writer = __esm({
111704
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/color-scheme-writer.js"() {
111705
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/color-scheme-writer.js"() {
111705
111706
  init_color_scheme();
111706
111707
  init_record_types();
111707
111708
  init_byte_writer();
@@ -111722,8 +111723,14 @@ function buildSlideAtom(masterIdRef, notesIdRef, hasOwnBackground) {
111722
111723
  function buildMasterSlideAtom() {
111723
111724
  return buildSlideAtomRaw(0, 0, 0, SLIDE_FLAG_MASTER_SCHEME);
111724
111725
  }
111725
- function buildSlideContainer(slide, slideRect, _masterIdRef, notesIdRef, fonts, drawingId, hyperlinks, oleEmbeds, mediaEmbeds) {
111726
- const data = new ByteWriter().bytes(buildSlideAtom(SLIDE_MASTER_ID_SENTINEL, notesIdRef, Boolean(slide.backgroundRgb))).bytes(buildDrawing(slideRect, slide.shapes, slide.backgroundRgb, fonts, drawingId, hyperlinks, oleEmbeds, mediaEmbeds)).bytes(buildColorSchemeAtom()).toBytes();
111726
+ function buildSlideContainer(slide, slideRect, masterIdRef, notesIdRef, fonts, drawingId, hyperlinks, oleEmbeds, mediaEmbeds) {
111727
+ const data = new ByteWriter().bytes(buildSlideAtom(
111728
+ // A master is named by its slide id (>= 0x80000000), never by a
111729
+ // persist id; anything smaller falls back to the first master.
111730
+ masterIdRef >= SLIDE_MASTER_ID_SENTINEL ? masterIdRef : SLIDE_MASTER_ID_SENTINEL,
111731
+ notesIdRef,
111732
+ Boolean(slide.backgroundRgb)
111733
+ )).bytes(buildDrawing(slideRect, slide.shapes, slide.backgroundRgb, fonts, drawingId, hyperlinks, oleEmbeds, mediaEmbeds)).bytes(buildColorSchemeAtom()).toBytes();
111727
111734
  return record(RT.Slide, data, 0, true);
111728
111735
  }
111729
111736
  function buildMainMasterContainer(slideRect, drawingId, hyperlinks, oleEmbeds, mediaEmbeds, masterStyles, fonts, master) {
@@ -111742,7 +111749,7 @@ var SLIDE_FLAG_MASTER_BACKGROUND;
111742
111749
  var SLIDE_MASTER_ID_SENTINEL;
111743
111750
  var MASTER_FIRST_COLOR_SCHEME_INSTANCE;
111744
111751
  var init_slide_writer = __esm({
111745
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/slide-writer.js"() {
111752
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/slide-writer.js"() {
111746
111753
  init_record_types();
111747
111754
  init_byte_writer();
111748
111755
  init_color_scheme_writer();
@@ -111756,6 +111763,15 @@ var init_slide_writer = __esm({
111756
111763
  MASTER_FIRST_COLOR_SCHEME_INSTANCE = 6;
111757
111764
  }
111758
111765
  });
111766
+ function masterSlideId(index) {
111767
+ return MASTER_SLIDE_ID_SENTINEL + index;
111768
+ }
111769
+ function resolveDeckMasters(deck) {
111770
+ return deck.masters && deck.masters.length > 0 ? deck.masters : [{ styles: deck.masterStyles, roundTrip: deck.master }];
111771
+ }
111772
+ function slideMasterIndex(masterIndex, masterCount) {
111773
+ return masterIndex !== void 0 && Number.isInteger(masterIndex) && masterIndex >= 0 && masterIndex < masterCount ? masterIndex : 0;
111774
+ }
111759
111775
  function countDrawingShapes(shapes) {
111760
111776
  let count = 1;
111761
111777
  const walk3 = (list2) => {
@@ -111769,7 +111785,7 @@ function countDrawingShapes(shapes) {
111769
111785
  walk3(shapes);
111770
111786
  return count;
111771
111787
  }
111772
- function collectFonts(deck) {
111788
+ function collectFonts(deck, masters) {
111773
111789
  const collect2 = (shape) => {
111774
111790
  if (shape.kind === "group") {
111775
111791
  return shape.children.flatMap(collect2);
@@ -111779,40 +111795,43 @@ function collectFonts(deck) {
111779
111795
  }
111780
111796
  return shape.text.paragraphs.flatMap((p) => p.runs.map((r) => r.fontName).filter((n) => Boolean(n)));
111781
111797
  };
111782
- const themeMinor = deck.master?.themeFonts?.minor;
111798
+ const themeMinor = masters[0]?.roundTrip?.themeFonts?.minor;
111783
111799
  const fonts = Array.from(/* @__PURE__ */ new Set([
111784
111800
  ...themeMinor ? [themeMinor] : [],
111785
111801
  ...deck.slides.flatMap((slide) => slide.shapes.flatMap(collect2)),
111786
- ...masterStyleFonts(deck.masterStyles)
111802
+ ...masters.flatMap((master) => masterStyleFonts(master.styles))
111787
111803
  ]));
111788
111804
  return fonts.length > 0 ? fonts : ["Calibri"];
111789
111805
  }
111790
111806
  function layoutDocumentStream(deck) {
111791
111807
  const slideRect = { w: deck.widthEmu, h: deck.heightEmu };
111792
111808
  const notesRect = { x: 0, y: 0, w: deck.heightEmu, h: deck.widthEmu };
111793
- const slideIds = deck.slides.map((_, i2) => 3 + i2);
111794
- let nextId2 = 3 + deck.slides.length;
111809
+ const masters = resolveDeckMasters(deck);
111810
+ const masterIds = masters.map((_, i2) => MASTER_ID + i2);
111811
+ const firstSlideId = MASTER_ID + masters.length;
111812
+ const slideIds = deck.slides.map((_, i2) => firstSlideId + i2);
111813
+ let nextId2 = firstSlideId + deck.slides.length;
111795
111814
  const notesIds = deck.slides.map((slide) => slide.notesParagraphs?.length ? nextId2++ : 0);
111796
- const masterDrawingId = 1;
111797
- const slideDrawingIds = deck.slides.map((_, i2) => 2 + i2);
111798
- let nextDrawingId = 2 + deck.slides.length;
111815
+ const masterDrawingIds = masters.map((_, i2) => 1 + i2);
111816
+ const slideDrawingIds = deck.slides.map((_, i2) => 1 + masters.length + i2);
111817
+ let nextDrawingId = 1 + masters.length + deck.slides.length;
111799
111818
  const notesDrawingIds = deck.slides.map((slide) => slide.notesParagraphs?.length ? nextDrawingId++ : 0);
111800
111819
  const shapesPerDrawing = [
111801
- 1 + MASTER_PLACEHOLDER_ORDER.length,
111802
- // master: patriarch + its placeholders
111820
+ ...masters.map(() => 1 + MASTER_PLACEHOLDER_ORDER.length),
111821
+ // patriarch + placeholders
111803
111822
  ...deck.slides.map((slide) => countDrawingShapes(slide.shapes)),
111804
111823
  ...deck.slides.filter((s) => s.notesParagraphs?.length).map(() => 2)
111805
111824
  // patriarch + body placeholder
111806
111825
  ];
111807
- const fonts = collectFonts(deck);
111826
+ const fonts = collectFonts(deck, masters);
111808
111827
  const { dggContainer, picturesStream } = buildPictureStore(deck.pictures, shapesPerDrawing);
111809
111828
  const hyperlinks = new HyperlinkCollector();
111810
111829
  const oleEmbeds = new OleCollector(hyperlinks);
111811
111830
  const mediaEmbeds = new MediaCollector(hyperlinks);
111812
- const slideContainers = deck.slides.map((slide, i2) => buildSlideContainer(slide, slideRect, MASTER_ID, notesIds[i2], fonts, slideDrawingIds[i2], hyperlinks, oleEmbeds, mediaEmbeds));
111831
+ const slideContainers = deck.slides.map((slide, i2) => buildSlideContainer(slide, slideRect, masterSlideId(slideMasterIndex(slide.masterIndex, masters.length)), notesIds[i2], fonts, slideDrawingIds[i2], hyperlinks, oleEmbeds, mediaEmbeds));
111813
111832
  const notesContainers = deck.slides.map((slide, i2) => notesIds[i2] ? buildNotesContainer(slide.notesParagraphs, notesRect, slideIds[i2], fonts, notesDrawingIds[i2], hyperlinks, oleEmbeds, mediaEmbeds) : void 0).filter((c) => c !== void 0);
111814
- const masterContainer = buildMainMasterContainer(slideRect, masterDrawingId, hyperlinks, oleEmbeds, mediaEmbeds, deck.masterStyles, fonts, deck.master);
111815
- const masterPersistAtom = buildSlidePersistAtom(MASTER_ID, MASTER_SLIDE_ID_SENTINEL);
111833
+ const masterContainers = masters.map((master, i2) => buildMainMasterContainer(slideRect, masterDrawingIds[i2], hyperlinks, oleEmbeds, mediaEmbeds, master.styles, fonts, master.roundTrip));
111834
+ const masterPersistAtoms = masterIds.map((id, i2) => buildSlidePersistAtom(id, masterSlideId(i2)));
111816
111835
  const slidePersistAtoms = slideIds.map((id, i2) => buildSlidePersistAtom(id, 256 + i2, 4));
111817
111836
  const oleStgIds = oleEmbeds.all.map(() => nextId2++);
111818
111837
  oleEmbeds.all.forEach((entry5, i2) => {
@@ -111825,18 +111844,18 @@ function layoutDocumentStream(deck) {
111825
111844
  widthEmu: deck.widthEmu,
111826
111845
  heightEmu: deck.heightEmu,
111827
111846
  fonts,
111828
- masterPersistAtom,
111847
+ masterPersistAtoms,
111829
111848
  slidePersistAtoms,
111830
111849
  dggContainer,
111831
111850
  exObjList,
111832
111851
  soundCollection,
111833
- otherTextStyle: buildOtherTextStyle(deck.masterStyles, (name) => {
111852
+ otherTextStyle: buildOtherTextStyle(masters[0]?.styles, (name) => {
111834
111853
  const idx = name ? fonts.indexOf(name) : -1;
111835
111854
  return idx >= 0 ? idx : void 0;
111836
111855
  })
111837
111856
  };
111838
111857
  const maxPersistId = nextId2 - 1;
111839
- const contentSizeWithoutPadding = buildDocumentContainer(documentInput).length + masterContainer.length + slideContainers.reduce((sum, c) => sum + c.length, 0) + notesContainers.reduce((sum, c) => sum + c.length, 0) + oleStgRecords.reduce((sum, c) => sum + c.length, 0);
111858
+ const contentSizeWithoutPadding = buildDocumentContainer(documentInput).length + masterContainers.reduce((sum, c) => sum + c.length, 0) + slideContainers.reduce((sum, c) => sum + c.length, 0) + notesContainers.reduce((sum, c) => sum + c.length, 0) + oleStgRecords.reduce((sum, c) => sum + c.length, 0);
111840
111859
  const paddingBytes = ensureMinimumDocumentStreamSize(contentSizeWithoutPadding, maxPersistId);
111841
111860
  const documentContainer = buildDocumentContainer({ ...documentInput, paddingBytes });
111842
111861
  const layout = new ByteWriter();
@@ -111846,7 +111865,7 @@ function layoutDocumentStream(deck) {
111846
111865
  layout.bytes(bytes);
111847
111866
  };
111848
111867
  place(DOC_ID, documentContainer);
111849
- place(MASTER_ID, masterContainer);
111868
+ masterIds.forEach((id, i2) => place(id, masterContainers[i2]));
111850
111869
  slideIds.forEach((id, i2) => place(id, slideContainers[i2]));
111851
111870
  let notesCursor = 0;
111852
111871
  notesIds.forEach((id) => {
@@ -111868,7 +111887,7 @@ function ensureMinimumDocumentStreamSize(contentSizeWithoutPadding, maxPersistId
111868
111887
  var DOC_ID;
111869
111888
  var MASTER_ID;
111870
111889
  var init_document_stream_layout = __esm({
111871
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/document-stream-layout.js"() {
111890
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/document-stream-layout.js"() {
111872
111891
  init_bstore_writer();
111873
111892
  init_byte_writer();
111874
111893
  init_document_writer();
@@ -111887,7 +111906,7 @@ var init_document_stream_layout = __esm({
111887
111906
  });
111888
111907
  var RC4_ALG_ID2;
111889
111908
  var init_crypto_constants = __esm({
111890
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/crypto-constants.js"() {
111909
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/crypto-constants.js"() {
111891
111910
  RC4_ALG_ID2 = 26625;
111892
111911
  }
111893
111912
  });
@@ -111921,7 +111940,7 @@ function rc4Cipher(key2, data) {
111921
111940
  return out;
111922
111941
  }
111923
111942
  var init_rc4_cipher = __esm({
111924
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/utils/rc4-cipher.js"() {
111943
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/utils/rc4-cipher.js"() {
111925
111944
  }
111926
111945
  });
111927
111946
  async function rc4CryptoApiKeyBase(password, salt) {
@@ -111964,7 +111983,7 @@ async function rc4CryptoApiEncryptVerifier(key0, verifier) {
111964
111983
  }
111965
111984
  var PADDED_40_BIT_KEY_BYTES;
111966
111985
  var init_rc4_cryptoapi_key = __esm({
111967
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/rc4-cryptoapi-key.js"() {
111986
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/rc4-cryptoapi-key.js"() {
111968
111987
  init_ooxml_crypto_primitives();
111969
111988
  init_rc4_cipher();
111970
111989
  PADDED_40_BIT_KEY_BYTES = 16;
@@ -112042,7 +112061,7 @@ var BITMAP_TAG_SIZE;
112042
112061
  var METAFILE_BLIPS;
112043
112062
  var BITMAP_BLIPS;
112044
112063
  var init_rc4_cryptoapi_streams = __esm({
112045
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/rc4-cryptoapi-streams.js"() {
112064
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/rc4-cryptoapi-streams.js"() {
112046
112065
  init_rc4_cipher();
112047
112066
  init_record_stream();
112048
112067
  UID_SIZE = 16;
@@ -112084,7 +112103,7 @@ var VERIFIER_SIZE;
112084
112103
  var VERIFIER_HASH_SIZE;
112085
112104
  var ENCRYPTION_FLAGS;
112086
112105
  var init_encrypt_writer = __esm({
112087
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/encrypt-writer.js"() {
112106
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/encrypt-writer.js"() {
112088
112107
  init_crypto_constants();
112089
112108
  init_rc4_cryptoapi_key();
112090
112109
  init_rc4_cryptoapi_streams();
@@ -112163,7 +112182,7 @@ function withMasterRelativeRunStyles(deck) {
112163
112182
  }
112164
112183
  var STYLE_KEYS;
112165
112184
  var init_master_relative_runs = __esm({
112166
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/master-relative-runs.js"() {
112185
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/master-relative-runs.js"() {
112167
112186
  STYLE_KEYS = ["bold", "italic", "underline"];
112168
112187
  }
112169
112188
  });
@@ -112196,7 +112215,7 @@ function buildEncryptedUserEditAtom(input) {
112196
112215
  }
112197
112216
  var MAX_RUN;
112198
112217
  var init_persist_writer = __esm({
112199
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/persist-writer.js"() {
112218
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/persist-writer.js"() {
112200
112219
  init_record_types();
112201
112220
  init_byte_writer();
112202
112221
  MAX_RUN = 4095;
@@ -112204,7 +112223,7 @@ var init_persist_writer = __esm({
112204
112223
  });
112205
112224
  var PPT_STORAGE_CLSID;
112206
112225
  var init_ppt_clsid = __esm({
112207
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/ppt-clsid.js"() {
112226
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/ppt-clsid.js"() {
112208
112227
  PPT_STORAGE_CLSID = new Uint8Array([
112209
112228
  16,
112210
112229
  141,
@@ -112278,7 +112297,7 @@ async function buildPptFile(deck, options = {}) {
112278
112297
  return new Uint8Array(buildOle2(streams, PPT_STORAGE_CLSID, 0));
112279
112298
  }
112280
112299
  var init_write_ppt = __esm({
112281
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/writer/write-ppt.js"() {
112300
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/writer/write-ppt.js"() {
112282
112301
  init_ole2_parser_write();
112283
112302
  init_byte_writer();
112284
112303
  init_current_user_writer();
@@ -112290,7 +112309,7 @@ var init_write_ppt = __esm({
112290
112309
  }
112291
112310
  });
112292
112311
  var init_legacy_ppt_writer = __esm({
112293
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/legacy-ppt-writer.js"() {
112312
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/legacy-ppt-writer.js"() {
112294
112313
  init_write_ppt();
112295
112314
  init_master_style_fonts();
112296
112315
  }
@@ -112394,16 +112413,21 @@ async function followRel(zip, from, type) {
112394
112413
  const rel = rels ? parseRels(rels).find((r) => r.type === `${REL}/${type}`) : void 0;
112395
112414
  return rel && !rel.external ? resolveTarget2(from, rel.target) : void 0;
112396
112415
  }
112397
- async function firstSlideMasterPath(zip) {
112416
+ async function readSlideMasterPaths(zip) {
112398
112417
  const presentation = "ppt/presentation.xml";
112399
112418
  const xml = await readText(zip, presentation);
112400
- const firstSlideRid = xml ? /<p:sldId\b[^>]*\br:id="([^"]+)"/u.exec(xml)?.[1] : void 0;
112401
112419
  const rels = await readText(zip, relsPath(presentation));
112402
- const slideRel = rels ? parseRels(rels).find((r) => r.id === firstSlideRid) : void 0;
112403
- const slide = slideRel ? resolveTarget2(presentation, slideRel.target) : void 0;
112404
- const layout = slide ? await followRel(zip, slide, "slideLayout") : void 0;
112405
- const master = layout ? await followRel(zip, layout, "slideMaster") : void 0;
112406
- return master && zip.file(master) ? master : FALLBACK_MASTER;
112420
+ const presentationRels = rels ? parseRels(rels) : [];
112421
+ const slideRids = xml ? [...xml.matchAll(/<p:sldId\b[^>]*\br:id="([^"]+)"/gu)].map((m) => m[1]) : [];
112422
+ const paths = [];
112423
+ for (const rid of slideRids) {
112424
+ const slideRel = presentationRels.find((r) => r.id === rid);
112425
+ const slide = slideRel ? resolveTarget2(presentation, slideRel.target) : void 0;
112426
+ const layout = slide ? await followRel(zip, slide, "slideLayout") : void 0;
112427
+ const master = layout ? await followRel(zip, layout, "slideMaster") : void 0;
112428
+ paths.push(master && zip.file(master) ? master : FALLBACK_MASTER);
112429
+ }
112430
+ return paths;
112407
112431
  }
112408
112432
  function num3(xml, pattern) {
112409
112433
  const value = pattern.exec(xml)?.[1];
@@ -112467,8 +112491,8 @@ function latinFace(themeXml3, scheme) {
112467
112491
  const body = close < 0 ? void 0 : themeXml3.slice(open, close);
112468
112492
  return body && /<a:latin [^>]*typeface="([^"]+)"/u.exec(body)?.[1] || void 0;
112469
112493
  }
112470
- async function readMasterRoundTripSource(zip) {
112471
- const masterPath = await firstSlideMasterPath(zip);
112494
+ async function readMasterRoundTripSource(zip, masterPath) {
112495
+ masterPath ??= (await readSlideMasterPaths(zip))[0] ?? FALLBACK_MASTER;
112472
112496
  const masterXml = await readText(zip, masterPath);
112473
112497
  if (!masterXml) {
112474
112498
  return { placeholders: [], themeFonts: {} };
@@ -112566,8 +112590,27 @@ async function buildMasterRoundTrip(source) {
112566
112590
  colorMapping: source.clrMapAttributes ? buildColorMapping(source.clrMapAttributes) : void 0
112567
112591
  };
112568
112592
  }
112569
- async function buildMasterRoundTripFromPptx(pptxBytes) {
112570
- return buildMasterRoundTrip(await readMasterRoundTripSource(await JSZip3.loadAsync(pptxBytes)));
112593
+ async function buildDeckMasterRoundTripsFromPptx(pptxBytes) {
112594
+ const zip = await JSZip3.loadAsync(pptxBytes);
112595
+ const slidePaths = await readSlideMasterPaths(zip);
112596
+ const masterPaths = [...new Set(slidePaths)];
112597
+ if (masterPaths.length === 0) {
112598
+ return {
112599
+ masterPaths: [],
112600
+ masters: [await buildMasterRoundTrip(await readMasterRoundTripSource(zip))],
112601
+ slideMasterIndex: []
112602
+ };
112603
+ }
112604
+ const masters = await Promise.all(
112605
+ masterPaths.map(
112606
+ async (path) => buildMasterRoundTrip(await readMasterRoundTripSource(zip, path))
112607
+ )
112608
+ );
112609
+ return {
112610
+ masterPaths,
112611
+ masters,
112612
+ slideMasterIndex: slidePaths.map((path) => masterPaths.indexOf(path))
112613
+ };
112571
112614
  }
112572
112615
  var XML_DECL2;
112573
112616
  var CT_NS2;
@@ -135010,6 +135053,28 @@ var init_slide_fingerprint = __esm({
135010
135053
  UNHASHABLE_COUNTER = 0;
135011
135054
  }
135012
135055
  });
135056
+ function updateSlideLayoutRelationship(relationships2, layoutPath, relationshipType) {
135057
+ if (!layoutPath) {
135058
+ return;
135059
+ }
135060
+ const target = `../${layoutPath.replace(/^\/?ppt\//, "")}`;
135061
+ const existing = relationships2.find((rel) => String(rel["@_Type"]).endsWith("/slideLayout"));
135062
+ if (existing) {
135063
+ existing["@_Target"] = target;
135064
+ delete existing["@_TargetMode"];
135065
+ return;
135066
+ }
135067
+ const ids = new Set(relationships2.map((rel) => String(rel["@_Id"])));
135068
+ let id = 1;
135069
+ while (ids.has(`rId${id}`)) {
135070
+ id++;
135071
+ }
135072
+ relationships2.push({ "@_Id": `rId${id}`, "@_Type": relationshipType, "@_Target": target });
135073
+ }
135074
+ var init_slide_layout_relationship = __esm({
135075
+ "src/core/core/runtime/slide-layout-relationship.ts"() {
135076
+ }
135077
+ });
135013
135078
  function isXmlObject7(value) {
135014
135079
  return typeof value === "object" && value !== null && !Array.isArray(value);
135015
135080
  }
@@ -135662,6 +135727,7 @@ var init_PptxHandlerRuntimeSaveSlideWriter = __esm({
135662
135727
  init_PptxHandlerRuntimeSaveElementWriter();
135663
135728
  init_save_structural_id_gate();
135664
135729
  init_slide_fingerprint();
135730
+ init_slide_layout_relationship();
135665
135731
  init_slide_save_xml_order();
135666
135732
  init_slide_timing_reconcile();
135667
135733
  init_slide_transition_reconcile();
@@ -135829,9 +135895,15 @@ var init_PptxHandlerRuntimeSaveSlideWriter = __esm({
135829
135895
  slideRelsRoot["@_xmlns"] = constants.relationshipsNamespace;
135830
135896
  }
135831
135897
  const slideRelationships = this.ensureArray(slideRelsRoot["Relationship"]);
135898
+ updateSlideLayoutRelationship(
135899
+ slideRelationships,
135900
+ slide.layoutPath,
135901
+ constants.slideLayoutRelationshipType
135902
+ );
135832
135903
  const slideRelationshipRegistry = new PptxSlideRelationshipRegistry({
135833
135904
  relationships: slideRelationships
135834
135905
  });
135906
+ this.slideRelsMap.set(slide.id, slideRelationshipRegistry.toRelationshipMap());
135835
135907
  const existingCommentRelationship = slideRelationshipRegistry.removeCommentRelationships(
135836
135908
  constants.slideCommentRelationshipType
135837
135909
  );
@@ -136850,12 +136922,12 @@ function orderedTemplatePartXml(options) {
136850
136922
  const rebuilt = positionsByRuntime.get(runtime)?.get(partPath);
136851
136923
  const ordered4 = rebuilt ? orderShapeTreeChildren(rewrapped, (node) => rebuilt.get(node), getLocalName2) : orderContainer(rewrapped, sourceXml ? scanSpTreeDocumentOrder(sourceXml) : [], getLocalName2);
136852
136924
  if (ordered4 === spTree) {
136853
- return withOrderedTableParagraphs(xmlObj);
136925
+ return withOrderedTableParagraphs(xmlObj, true);
136854
136926
  }
136855
136927
  const nextRoot = { ...root, "p:cSld": { ...commonSlideData, "p:spTree": ordered4 } };
136856
136928
  const nextPart = { ...xmlObj };
136857
136929
  setOwnXmlProperty(nextPart, rootTag2, nextRoot);
136858
- return withOrderedTableParagraphs(nextPart);
136930
+ return withOrderedTableParagraphs(nextPart, true);
136859
136931
  }
136860
136932
  var ALTERNATE_CONTENT_TAG3;
136861
136933
  var positionsByRuntime;
@@ -138033,19 +138105,18 @@ var init_PptxHandlerRuntimeSaveLegacyPpt = __esm({
138033
138105
  return buildMetroBlobs(pptxBytes, slides);
138034
138106
  }
138035
138107
  /**
138036
- * The master text styles the `.ppt`'s single main master carries: those of
138037
- * the first slide's own master (a binary `.ppt` written here has one
138038
- * master), preferring an edited copy passed in `options.slideMasters` over
138039
- * the styles parsed at load.
138108
+ * The text styles of the master at `masterPath` (the first slide's master
138109
+ * when omitted), preferring an edited copy passed in `options.slideMasters`
138110
+ * over the styles parsed at load.
138040
138111
  */
138041
- legacyMasterTextStyles(slides, options) {
138112
+ legacyMasterTextStyles(slides, options, masterPath) {
138042
138113
  const layoutPath = slides[0]?.layoutPath;
138043
- const masterPath = (layoutPath ? this.resolveMasterPathForLayout(layoutPath) : void 0) ?? this.masterTxStylesCache.keys().next().value;
138044
- if (!masterPath) {
138114
+ const path = (masterPath && this.masterTxStylesCache.has(masterPath) ? masterPath : void 0) ?? (layoutPath ? this.resolveMasterPathForLayout(layoutPath) : void 0) ?? this.masterTxStylesCache.keys().next().value;
138115
+ if (!path) {
138045
138116
  return void 0;
138046
138117
  }
138047
- const edited = options?.slideMasters?.find((master) => master.path === masterPath)?.txStyles;
138048
- return edited ?? this.masterTxStylesCache.get(masterPath);
138118
+ const edited = options?.slideMasters?.find((master) => master.path === path)?.txStyles;
138119
+ return edited ?? this.masterTxStylesCache.get(path);
138049
138120
  }
138050
138121
  /**
138051
138122
  * Serialise `slides` to a legacy binary PowerPoint 97-2003 (`.ppt`) file.
@@ -138062,7 +138133,7 @@ var init_PptxHandlerRuntimeSaveLegacyPpt = __esm({
138062
138133
  async saveAsLegacyPpt(slides, options, saveAsPptx) {
138063
138134
  const pptxBytes = saveAsPptx ? await saveAsPptx() : void 0;
138064
138135
  const metroBlobs = await this.resolveMetroBlobs(slides, pptxBytes);
138065
- const master = pptxBytes ? await buildMasterRoundTripFromPptx(pptxBytes) : void 0;
138136
+ const deckMasters = pptxBytes ? await buildDeckMasterRoundTripsFromPptx(pptxBytes) : void 0;
138066
138137
  this.compatibilityService.resetWarnings();
138067
138138
  const resolvedMedia = await this.resolveAudioMediaBytes(slides);
138068
138139
  const resolvedPictures = await resolvePictureSources(
@@ -138079,11 +138150,25 @@ var init_PptxHandlerRuntimeSaveLegacyPpt = __esm({
138079
138150
  metroBlobs,
138080
138151
  resolvedPictures
138081
138152
  );
138082
- deck.masterStyles = convertMasterTextStyles(
138083
- this.legacyMasterTextStyles(slides, options),
138084
- master?.themeFonts
138085
- );
138086
- deck.master = master;
138153
+ if (deckMasters && deckMasters.masterPaths.length > 1) {
138154
+ deck.masters = deckMasters.masters.map((roundTrip, i2) => ({
138155
+ roundTrip,
138156
+ styles: convertMasterTextStyles(
138157
+ this.legacyMasterTextStyles(slides, options, deckMasters.masterPaths[i2]),
138158
+ roundTrip.themeFonts
138159
+ )
138160
+ }));
138161
+ deck.slides.forEach((slide, i2) => {
138162
+ slide.masterIndex = deckMasters.slideMasterIndex[i2];
138163
+ });
138164
+ } else {
138165
+ const master = deckMasters?.masters[0];
138166
+ deck.masterStyles = convertMasterTextStyles(
138167
+ this.legacyMasterTextStyles(slides, options, deckMasters?.masterPaths[0]),
138168
+ master?.themeFonts
138169
+ );
138170
+ deck.master = master;
138171
+ }
138087
138172
  return buildPptFile(deck, { password: options?.pptPassword });
138088
138173
  }
138089
138174
  };
@@ -151597,7 +151682,7 @@ function readPersistRecord(view, directory, persistId) {
151597
151682
  return readRecordOrThrow(view, offset);
151598
151683
  }
151599
151684
  var init_persist_directory = __esm({
151600
- "../../node_modules/.bun/@christophervr+ole2@0.2.0/node_modules/@christophervr/ole2/dist/ppt/persist-directory.js"() {
151685
+ "../../node_modules/.bun/@christophervr+ole2@0.3.0/node_modules/@christophervr/ole2/dist/ppt/persist-directory.js"() {
151601
151686
  init_record_stream();
151602
151687
  init_record_types();
151603
151688
  }
@@ -185513,6 +185598,250 @@ pptx-ui-checkbox[checked] { border-color: var(--pptx-primary, #6366f1); }
185513
185598
  }
185514
185599
  }
185515
185600
  `;
185601
+ var CONTRACT_REVISION = 1;
185602
+ var CONTRACT_KEY = /* @__PURE__ */ Symbol.for("pptx-viewer.web-control-contract");
185603
+ function assertWebControlContract(registry, names) {
185604
+ for (const name of names) {
185605
+ const ctor = registry.get(name);
185606
+ const revision = ctor?.[CONTRACT_KEY];
185607
+ if (revision !== void 0 && revision !== CONTRACT_REVISION) {
185608
+ throw new Error(
185609
+ `Incompatible ${name} contract (${revision}; expected ${CONTRACT_REVISION}). Use matching viewer bindings in this window.`
185610
+ );
185611
+ }
185612
+ }
185613
+ }
185614
+ function markWebControlContract(ctor) {
185615
+ Object.defineProperty(ctor, CONTRACT_KEY, { value: CONTRACT_REVISION });
185616
+ }
185617
+ var RIBBON_COMMAND_STYLES = `
185618
+ :host { display: inline-flex; flex: none; }
185619
+ button {
185620
+ box-sizing: border-box; display: inline-flex; flex-direction: column; align-items: center;
185621
+ justify-content: flex-start; gap: 2px; min-width: 54px; max-width: 78px; height: 58px;
185622
+ padding: 4px; border: 0; border-radius: 4px; background: transparent;
185623
+ color: var(--pptx-foreground, #f9fafb); cursor: pointer; font: inherit;
185624
+ font-size: 9px; line-height: 11px; text-align: center;
185625
+ }
185626
+ svg { width: 24px; height: 24px; flex: none; color: var(--pptx-primary, #6366f1);
185627
+ fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
185628
+ :host([compact]) button { flex-direction: row; align-items: center; justify-content: flex-start;
185629
+ gap: 6px; min-width: 88px; max-width: none; height: 26px; padding: 0 4px; font-size: 10px; text-align: left; }
185630
+ :host([compact]) svg { width: 16px; height: 16px; }
185631
+ button:hover:not(:disabled) { background: var(--pptx-accent, #33334d); }
185632
+ :host([active]) button { background: color-mix(in srgb, var(--pptx-primary, #6366f1) 15%, transparent); color: var(--pptx-primary, #6366f1); }
185633
+ button:disabled { opacity: .35; cursor: not-allowed; }
185634
+ button:focus-visible { outline: 2px solid var(--pptx-ring, #6366f1); outline-offset: 2px; }
185635
+ @media (pointer: coarse), (max-width: 767px) { :host([compact]) button { min-height: 44px; } }
185636
+ @media (forced-colors: active) {
185637
+ button { color: ButtonText; } svg { color: ButtonText; }
185638
+ button:disabled { color: GrayText; opacity: 1; }
185639
+ button:focus-visible { outline-color: Highlight; }
185640
+ :host([active]) button { border: 1px solid Highlight; }
185641
+ }
185642
+ `;
185643
+ var RIBBON_ICON_PATHS = {
185644
+ camera: "M2 6h4l2-3h4l2 3h4v11H2ZM7 11a3 3 0 1 0 6 0 3 3 0 1 0-6 0",
185645
+ eraser: "M3 12l8-8 6 6-7 7H7ZM3 17h14M7 8l6 6",
185646
+ reset: "M4 10a6 6 0 1 1 1.8 4.2M4 6v4h4",
185647
+ help: "M3 10a7 7 0 1 0 14 0 7 7 0 1 0-14 0M8 7a2 2 0 1 1 3 1.8c-.7.3-1 .8-1 1.7M10 14v.1",
185648
+ "play-start": "M4 3 15 10 4 17ZM17 3v14",
185649
+ play: "M5 3 16 10 5 17Z",
185650
+ presentation: "M2 3h16v11H2ZM7 18h6M10 14v4",
185651
+ list: "M4 4h12v12H4ZM7 8h6M7 11h6",
185652
+ broadcast: "M7 7a4.2 4.2 0 0 0 0 6M13 7a4.2 4.2 0 0 1 0 6M4.5 4.5a7.8 7.8 0 0 0 0 11M15.5 4.5a7.8 7.8 0 0 1 0 11M8.5 10a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0-3 0",
185653
+ video: "M2 5h11v10H2ZM13 10l5-3v6Z",
185654
+ settings: "M3 5h14M6 10h8M8 15h4M6 3v4M12 8v4M10 13v4",
185655
+ "eye-off": "M2.5 10S5.5 5 10 5s7.5 5 7.5 5-3 5-7.5 5-7.5-5-7.5-5ZM4 4l12 12",
185656
+ clock: "M3 10a7 7 0 1 0 14 0 7 7 0 1 0-14 0M10 6v4l3 2",
185657
+ record: "M5 10a5 5 0 1 0 10 0 5 5 0 1 0-10 0",
185658
+ captions: "M2 4h16v12H2ZM5 9h4M11 9h4M5 12h3M10 12h5",
185659
+ keyboard: "M2 5h16v10H2ZM5 8h1M9 8h1M13 8h1M5 11h1M9 11h5",
185660
+ accessibility: "M8 3a2 2 0 1 0 4 0 2 2 0 1 0-4 0M3 7l7 2 7-2M10 9v4M10 13l-4 5M10 13l4 5"
185661
+ };
185662
+ function definePptxRibbonCommand(registry) {
185663
+ if (registry.get("pptx-ui-ribbon-command")) {
185664
+ return;
185665
+ }
185666
+ class RibbonCommand extends HTMLElement {
185667
+ static observedAttributes = [
185668
+ "label",
185669
+ "icon",
185670
+ "disabled",
185671
+ "active",
185672
+ "compact",
185673
+ "pressed",
185674
+ "expanded",
185675
+ "title",
185676
+ "data-ribbon-control"
185677
+ ];
185678
+ button;
185679
+ text;
185680
+ path;
185681
+ constructor() {
185682
+ super();
185683
+ const root = this.attachShadow({ mode: "open" });
185684
+ attachControlStyles(root, RIBBON_COMMAND_STYLES);
185685
+ this.button = document.createElement("button");
185686
+ this.button.type = "button";
185687
+ this.button.setAttribute("part", "button");
185688
+ const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
185689
+ svg.setAttribute("viewBox", "0 0 20 20");
185690
+ svg.setAttribute("aria-hidden", "true");
185691
+ this.path = document.createElementNS("http://www.w3.org/2000/svg", "path");
185692
+ svg.append(this.path);
185693
+ this.text = document.createElement("span");
185694
+ this.button.append(svg, this.text);
185695
+ root.append(this.button);
185696
+ this.button.addEventListener("keydown", (event) => {
185697
+ if ((event.key === " " || event.key === "Enter") && !event.ctrlKey && !event.metaKey && !event.altKey) {
185698
+ event.stopPropagation();
185699
+ }
185700
+ });
185701
+ this.button.addEventListener("click", () => {
185702
+ const id = this.getAttribute("data-ribbon-control");
185703
+ if (!this.button.disabled && id) {
185704
+ this.dispatchEvent(
185705
+ new CustomEvent("command-request", { detail: { id }, bubbles: true, composed: true })
185706
+ );
185707
+ }
185708
+ });
185709
+ }
185710
+ connectedCallback() {
185711
+ this.sync();
185712
+ }
185713
+ attributeChangedCallback() {
185714
+ this.sync();
185715
+ }
185716
+ sync() {
185717
+ this.text.textContent = this.getAttribute("label") ?? "";
185718
+ this.button.title = this.getAttribute("title") ?? this.text.textContent;
185719
+ this.button.disabled = this.hasAttribute("disabled");
185720
+ this.path.setAttribute("d", RIBBON_ICON_PATHS[this.getAttribute("icon") ?? ""] ?? "");
185721
+ for (const attr22 of ["pressed", "expanded"]) {
185722
+ const value = this.getAttribute(attr22);
185723
+ if (value === null) {
185724
+ this.button.removeAttribute(`aria-${attr22}`);
185725
+ } else {
185726
+ this.button.setAttribute(`aria-${attr22}`, value);
185727
+ }
185728
+ }
185729
+ }
185730
+ }
185731
+ registry.define("pptx-ui-ribbon-command", RibbonCommand);
185732
+ }
185733
+ var STYLES = `
185734
+ :host { display: inline-flex; flex: none; align-self: stretch; }
185735
+ .group { box-sizing: border-box; display: flex; flex-direction: column; justify-content: space-between;
185736
+ min-height: 78px; padding: 4px 8px 2px; border-right: 1px solid color-mix(in srgb, var(--pptx-border, #33334d) 60%, transparent); }
185737
+ :host(:last-child) .group { border-right: 0; }
185738
+ .row { display: flex; align-items: flex-start; gap: 4px; }
185739
+ ::slotted(*) { flex-shrink: 0; }
185740
+ .caption { padding-top: 2px; color: var(--pptx-muted-foreground, #94a3b8); font: inherit;
185741
+ font-size: 9px; line-height: 12px; text-align: center; white-space: nowrap; }
185742
+ `;
185743
+ function definePptxRibbonGroup(registry) {
185744
+ if (registry.get("pptx-ui-ribbon-group")) {
185745
+ return;
185746
+ }
185747
+ class RibbonGroup extends HTMLElement {
185748
+ static observedAttributes = ["label"];
185749
+ caption;
185750
+ constructor() {
185751
+ super();
185752
+ const root = this.attachShadow({ mode: "open" });
185753
+ attachControlStyles(root, STYLES);
185754
+ const group2 = document.createElement("div");
185755
+ group2.className = "group";
185756
+ const row = document.createElement("div");
185757
+ row.className = "row";
185758
+ row.append(document.createElement("slot"));
185759
+ this.caption = document.createElement("span");
185760
+ this.caption.className = "caption";
185761
+ group2.append(row, this.caption);
185762
+ root.append(group2);
185763
+ }
185764
+ connectedCallback() {
185765
+ this.setAttribute("role", "group");
185766
+ this.sync();
185767
+ }
185768
+ attributeChangedCallback() {
185769
+ this.sync();
185770
+ }
185771
+ sync() {
185772
+ const label = this.getAttribute("label") ?? "";
185773
+ this.caption.textContent = label;
185774
+ this.setAttribute("aria-label", label);
185775
+ }
185776
+ }
185777
+ registry.define("pptx-ui-ribbon-group", RibbonGroup);
185778
+ }
185779
+ function definePptxRibbonToggle(registry) {
185780
+ if (registry.get("pptx-ui-ribbon-toggle")) {
185781
+ return;
185782
+ }
185783
+ class RibbonToggle extends HTMLElement {
185784
+ static observedAttributes = ["label", "checked", "disabled", "title"];
185785
+ checkbox;
185786
+ text;
185787
+ constructor() {
185788
+ super();
185789
+ const root = this.attachShadow({ mode: "open" });
185790
+ attachControlStyles(
185791
+ root,
185792
+ `
185793
+ :host { display: block; }
185794
+ label { display: flex; align-items: center; gap: 4px; min-height: 22px; padding: 0 4px;
185795
+ color: var(--pptx-foreground, #f9fafb); font: inherit; font-size: 10px; white-space: nowrap; cursor: pointer; }
185796
+ :host([disabled]) label { color: var(--pptx-muted-foreground, #9ca3af); cursor: not-allowed; }
185797
+ @media (pointer: coarse), (max-width: 767px) { label { min-height: 44px; font-size: 12px; } }
185798
+ `
185799
+ );
185800
+ const label = document.createElement("label");
185801
+ this.checkbox = document.createElement("pptx-ui-checkbox");
185802
+ this.text = document.createTextNode("");
185803
+ label.append(this.checkbox, this.text);
185804
+ label.addEventListener("click", (event) => {
185805
+ event.preventDefault();
185806
+ if (event.target !== this.checkbox) {
185807
+ this.checkbox.click();
185808
+ }
185809
+ });
185810
+ this.checkbox.addEventListener("input", (event) => event.stopPropagation());
185811
+ this.checkbox.addEventListener("change", (event) => {
185812
+ event.stopPropagation();
185813
+ const checked = this.checkbox.checked;
185814
+ this.sync();
185815
+ const id = this.getAttribute("data-ribbon-control");
185816
+ if (!this.hasAttribute("disabled") && id) {
185817
+ this.dispatchEvent(
185818
+ new CustomEvent("toggle-request", {
185819
+ detail: { id, checked },
185820
+ bubbles: true,
185821
+ composed: true
185822
+ })
185823
+ );
185824
+ }
185825
+ });
185826
+ root.append(label);
185827
+ }
185828
+ connectedCallback() {
185829
+ this.sync();
185830
+ }
185831
+ attributeChangedCallback() {
185832
+ this.sync();
185833
+ }
185834
+ sync() {
185835
+ const label = this.getAttribute("label") ?? "";
185836
+ this.text.textContent = label;
185837
+ this.checkbox.setAttribute("aria-label", label);
185838
+ this.checkbox.title = this.getAttribute("title") ?? label;
185839
+ this.checkbox.checked = this.hasAttribute("checked");
185840
+ this.checkbox.disabled = this.hasAttribute("disabled");
185841
+ }
185842
+ }
185843
+ registry.define("pptx-ui-ribbon-toggle", RibbonToggle);
185844
+ }
185516
185845
  var SEARCH_STYLES = `
185517
185846
  :host {
185518
185847
  display: flex;
@@ -185952,6 +186281,9 @@ function definePptxSelect(registry) {
185952
186281
  }
185953
186282
  disconnectedCallback() {
185954
186283
  this.close();
186284
+ window.clearTimeout(this.searchTimer);
186285
+ this.searchTimer = 0;
186286
+ this.search = "";
185955
186287
  this.observer.disconnect();
185956
186288
  cancelAnimationFrame(this.refreshFrame);
185957
186289
  this.refreshFrame = 0;
@@ -186123,796 +186455,6 @@ function definePptxSelect(registry) {
186123
186455
  }
186124
186456
  registry.define("pptx-ui-select", PptxSelect);
186125
186457
  }
186126
- function registerPptxWebControls() {
186127
- if (typeof window === "undefined" || !window.customElements) {
186128
- return;
186129
- }
186130
- if (!document.getElementById("pptx-ui-control-hosts")) {
186131
- const style = document.createElement("style");
186132
- style.id = "pptx-ui-control-hosts";
186133
- style.textContent = HOST_STYLES;
186134
- document.head.append(style);
186135
- }
186136
- definePptxSearchField(window.customElements);
186137
- definePptxCheckbox(window.customElements);
186138
- definePptxSelect(window.customElements);
186139
- }
186140
- var defaultThemeColors = {
186141
- background: "#030712",
186142
- // gray-950
186143
- foreground: "#f3f4f6",
186144
- // gray-100
186145
- card: "#111827",
186146
- // gray-900
186147
- cardForeground: "#f3f4f6",
186148
- // gray-100
186149
- popover: "#111827",
186150
- // gray-900
186151
- popoverForeground: "#f3f4f6",
186152
- // gray-100
186153
- primary: "#6366f1",
186154
- // indigo-500
186155
- primaryForeground: "#ffffff",
186156
- // white
186157
- secondary: "#1f2937",
186158
- // gray-800
186159
- secondaryForeground: "#f3f4f6",
186160
- // gray-100
186161
- muted: "#1f2937",
186162
- // gray-800
186163
- mutedForeground: "#9ca3af",
186164
- // gray-400
186165
- accent: "#1f2937",
186166
- // gray-800
186167
- accentForeground: "#f3f4f6",
186168
- // gray-100
186169
- destructive: "#ef4444",
186170
- // red-500
186171
- destructiveForeground: "#ffffff",
186172
- // white
186173
- border: "#374151",
186174
- // gray-700
186175
- input: "#374151",
186176
- // gray-700
186177
- ring: "#6366f1"
186178
- // indigo-500
186179
- };
186180
- var defaultRadius = "0.5rem";
186181
- var lightThemeColors = {
186182
- background: "#f8fafc",
186183
- // slate-50
186184
- foreground: "#0f172a",
186185
- // slate-900
186186
- card: "#ffffff",
186187
- cardForeground: "#0f172a",
186188
- // slate-900
186189
- popover: "#ffffff",
186190
- popoverForeground: "#0f172a",
186191
- // slate-900
186192
- primary: "#4f46e5",
186193
- // indigo-600
186194
- primaryForeground: "#ffffff",
186195
- secondary: "#f1f5f9",
186196
- // slate-100
186197
- secondaryForeground: "#0f172a",
186198
- // slate-900
186199
- muted: "#f1f5f9",
186200
- // slate-100
186201
- mutedForeground: "#64748b",
186202
- // slate-500
186203
- accent: "#f1f5f9",
186204
- // slate-100
186205
- accentForeground: "#0f172a",
186206
- // slate-900
186207
- destructive: "#dc2626",
186208
- // red-600
186209
- destructiveForeground: "#ffffff",
186210
- border: "#e2e8f0",
186211
- // slate-200
186212
- input: "#e2e8f0",
186213
- // slate-200
186214
- ring: "#4f46e5"
186215
- // indigo-600
186216
- };
186217
- var lightTheme = {
186218
- colors: lightThemeColors
186219
- };
186220
- var COLOR_KEY_TO_CSS = {
186221
- background: "background",
186222
- foreground: "foreground",
186223
- card: "card",
186224
- cardForeground: "card-foreground",
186225
- popover: "popover",
186226
- popoverForeground: "popover-foreground",
186227
- primary: "primary",
186228
- primaryForeground: "primary-foreground",
186229
- secondary: "secondary",
186230
- secondaryForeground: "secondary-foreground",
186231
- muted: "muted",
186232
- mutedForeground: "muted-foreground",
186233
- accent: "accent",
186234
- accentForeground: "accent-foreground",
186235
- destructive: "destructive",
186236
- destructiveForeground: "destructive-foreground",
186237
- border: "border",
186238
- input: "input",
186239
- ring: "ring"
186240
- };
186241
- var DERIVED_COLOR_TOKENS = [
186242
- { source: "primary", cssSuffix: "inspector-active" },
186243
- { source: "border", cssSuffix: "inspector-border" }
186244
- ];
186245
- function themeToCssVars(theme, omitDefaults = false) {
186246
- const vars = {};
186247
- if (!theme) {
186248
- return vars;
186249
- }
186250
- const colors = theme.colors;
186251
- if (colors) {
186252
- for (const [key2, cssSuffix] of Object.entries(COLOR_KEY_TO_CSS)) {
186253
- const value = colors[key2];
186254
- if (value === void 0) {
186255
- continue;
186256
- }
186257
- if (omitDefaults && value === defaultThemeColors[key2]) {
186258
- continue;
186259
- }
186260
- vars[`--pptx-${cssSuffix}`] = value;
186261
- vars[`--color-${cssSuffix}`] = value;
186262
- }
186263
- for (const { source, cssSuffix } of DERIVED_COLOR_TOKENS) {
186264
- const value = colors[source];
186265
- if (value === void 0) {
186266
- continue;
186267
- }
186268
- if (omitDefaults && value === defaultThemeColors[source]) {
186269
- continue;
186270
- }
186271
- vars[`--pptx-${cssSuffix}`] = value;
186272
- }
186273
- }
186274
- if (theme.radius !== void 0) {
186275
- if (!omitDefaults || theme.radius !== defaultRadius) {
186276
- vars["--pptx-radius"] = theme.radius;
186277
- const r = theme.radius;
186278
- vars["--radius-sm"] = `calc(${r} - 4px)`;
186279
- vars["--radius-md"] = `calc(${r} - 2px)`;
186280
- vars["--radius-lg"] = r;
186281
- vars["--radius-xl"] = `calc(${r} + 4px)`;
186282
- }
186283
- }
186284
- if (theme.cssVars) {
186285
- for (const [key2, value] of Object.entries(theme.cssVars)) {
186286
- vars[key2] = value;
186287
- }
186288
- }
186289
- return vars;
186290
- }
186291
- function defaultCssVars() {
186292
- const vars = {};
186293
- for (const [key2, cssSuffix] of Object.entries(COLOR_KEY_TO_CSS)) {
186294
- vars[`--pptx-${cssSuffix}`] = defaultThemeColors[key2];
186295
- }
186296
- for (const { source, cssSuffix } of DERIVED_COLOR_TOKENS) {
186297
- vars[`--pptx-${cssSuffix}`] = defaultThemeColors[source];
186298
- }
186299
- vars["--pptx-radius"] = defaultRadius;
186300
- return vars;
186301
- }
186302
- var vermilionLightColors = {
186303
- background: "#fbfaf7",
186304
- foreground: "#1a1d21",
186305
- card: "#ffffff",
186306
- cardForeground: "#1a1d21",
186307
- popover: "#ffffff",
186308
- popoverForeground: "#1a1d21",
186309
- primary: "#c2431f",
186310
- primaryForeground: "#ffffff",
186311
- secondary: "#f2efe8",
186312
- secondaryForeground: "#1a1d21",
186313
- muted: "#f2efe8",
186314
- mutedForeground: "#5a626e",
186315
- accent: "rgba(194, 67, 31, 0.08)",
186316
- accentForeground: "#1a1d21",
186317
- destructive: "#dc2626",
186318
- destructiveForeground: "#ffffff",
186319
- border: "#e6e2d9",
186320
- input: "#e6e2d9",
186321
- ring: "#c2431f"
186322
- };
186323
- var vermilionDarkColors = {
186324
- background: "#0f1113",
186325
- foreground: "#f0efec",
186326
- card: "#171a1e",
186327
- cardForeground: "#f0efec",
186328
- popover: "#171a1e",
186329
- popoverForeground: "#f0efec",
186330
- primary: "#e86a40",
186331
- primaryForeground: "#ffffff",
186332
- secondary: "#1f242b",
186333
- secondaryForeground: "#f0efec",
186334
- muted: "#1f242b",
186335
- mutedForeground: "#9aa1ab",
186336
- accent: "rgba(232, 106, 64, 0.1)",
186337
- accentForeground: "#f0efec",
186338
- destructive: "#ef4444",
186339
- destructiveForeground: "#ffffff",
186340
- border: "#272c33",
186341
- input: "#272c33",
186342
- ring: "#e86a40"
186343
- };
186344
- var vermilionRadius = "0.375rem";
186345
- var vermilionLightTheme = {
186346
- colors: vermilionLightColors,
186347
- radius: vermilionRadius
186348
- };
186349
- var vermilionDarkTheme = {
186350
- colors: vermilionDarkColors,
186351
- radius: vermilionRadius
186352
- };
186353
- var THEME_CATALOG = [
186354
- { key: "default", labelKey: "pptx.settings.theme.default", theme: void 0 },
186355
- { key: "light", labelKey: "pptx.settings.theme.light", theme: lightTheme },
186356
- {
186357
- key: "vermilionLight",
186358
- labelKey: "pptx.settings.theme.vermilionLight",
186359
- theme: vermilionLightTheme
186360
- },
186361
- {
186362
- key: "vermilionDark",
186363
- labelKey: "pptx.settings.theme.vermilionDark",
186364
- theme: vermilionDarkTheme
186365
- }
186366
- ];
186367
- function resolveThemeCatalogEntry(key2, catalog = THEME_CATALOG) {
186368
- return catalog.find((entry5) => entry5.key === key2)?.theme;
186369
- }
186370
- function corePreset(id) {
186371
- const preset22 = THEME_PRESETS.find((p) => p.id === id);
186372
- if (!preset22) {
186373
- throw new Error(`theme-gallery-presets: core THEME_PRESETS is missing "${id}"`);
186374
- }
186375
- return preset22;
186376
- }
186377
- var WISP_PRESET = {
186378
- id: "wisp",
186379
- name: "Wisp",
186380
- colorScheme: {
186381
- dk1: "#000000",
186382
- lt1: "#FFFFFF",
186383
- dk2: "#46393B",
186384
- lt2: "#E8DCD8",
186385
- accent1: "#A53010",
186386
- accent2: "#DE7E18",
186387
- accent3: "#9F8351",
186388
- accent4: "#728653",
186389
- accent5: "#92AA4C",
186390
- accent6: "#6AAC91",
186391
- hlink: "#FB4F14",
186392
- folHlink: "#E25839"
186393
- },
186394
- fontScheme: {
186395
- majorFont: { latin: "Century Gothic" },
186396
- minorFont: { latin: "Century Gothic" }
186397
- }
186398
- };
186399
- var BERLIN_PRESET = {
186400
- id: "berlin",
186401
- name: "Berlin",
186402
- colorScheme: {
186403
- dk1: "#000000",
186404
- lt1: "#FFFFFF",
186405
- dk2: "#3E5C61",
186406
- lt2: "#D5E0D0",
186407
- accent1: "#F09415",
186408
- accent2: "#C1B56B",
186409
- accent3: "#89C2A3",
186410
- accent4: "#729BBE",
186411
- accent5: "#9A90C2",
186412
- accent6: "#BE8DBE",
186413
- hlink: "#25A0DA",
186414
- folHlink: "#FF7F00"
186415
- },
186416
- fontScheme: {
186417
- majorFont: { latin: "Trebuchet MS" },
186418
- minorFont: { latin: "Trebuchet MS" }
186419
- }
186420
- };
186421
- var SLICE_PRESET = {
186422
- id: "slice",
186423
- name: "Slice",
186424
- colorScheme: {
186425
- dk1: "#000000",
186426
- lt1: "#FFFFFF",
186427
- dk2: "#2E3B4C",
186428
- lt2: "#C7CDD3",
186429
- accent1: "#E2751D",
186430
- accent2: "#C53B23",
186431
- accent3: "#A13D69",
186432
- accent4: "#58599E",
186433
- accent5: "#36749D",
186434
- accent6: "#4EA39A",
186435
- hlink: "#FD6B32",
186436
- folHlink: "#D14D0F"
186437
- },
186438
- fontScheme: {
186439
- majorFont: { latin: "Century Gothic" },
186440
- minorFont: { latin: "Century Gothic" }
186441
- }
186442
- };
186443
- var DIVIDEND_PRESET = {
186444
- id: "dividend",
186445
- name: "Dividend",
186446
- colorScheme: {
186447
- dk1: "#000000",
186448
- lt1: "#FFFFFF",
186449
- dk2: "#3D3D3D",
186450
- lt2: "#E1E1E1",
186451
- accent1: "#4D1434",
186452
- accent2: "#903163",
186453
- accent3: "#B2324B",
186454
- accent4: "#D34817",
186455
- accent5: "#E8971C",
186456
- accent6: "#FDCB00",
186457
- hlink: "#A03068",
186458
- folHlink: "#C34882"
186459
- },
186460
- fontScheme: {
186461
- majorFont: { latin: "Gill Sans MT" },
186462
- minorFont: { latin: "Gill Sans MT" }
186463
- }
186464
- };
186465
- [
186466
- corePreset("office"),
186467
- corePreset("facet"),
186468
- corePreset("integral"),
186469
- corePreset("ion"),
186470
- corePreset("retrospect"),
186471
- corePreset("organic"),
186472
- WISP_PRESET,
186473
- BERLIN_PRESET,
186474
- SLICE_PRESET,
186475
- DIVIDEND_PRESET
186476
- ];
186477
- function createPresentationLoadResources(handler) {
186478
- const blobUrls = [];
186479
- let committed = false;
186480
- let released = false;
186481
- return {
186482
- blobUrls,
186483
- /** The live viewer now owns the handler and media URLs. */
186484
- commit() {
186485
- committed = true;
186486
- },
186487
- /** Call in finally, after pending asset reads have settled. */
186488
- releaseIfUncommitted() {
186489
- if (committed || released) {
186490
- return;
186491
- }
186492
- released = true;
186493
- handler.dispose();
186494
- for (const url of blobUrls) {
186495
- if (url.startsWith("blob:")) {
186496
- URL.revokeObjectURL(url);
186497
- }
186498
- }
186499
- }
186500
- };
186501
- }
186502
- function walkAndPatchElements(elements, patch) {
186503
- let mutated = false;
186504
- const next = elements.map((el) => {
186505
- let updated = patch(el);
186506
- if (updated.type === "group" && updated.children?.length) {
186507
- const newChildren = walkAndPatchElements(updated.children, patch);
186508
- if (newChildren !== updated.children) {
186509
- updated = { ...updated, children: newChildren };
186510
- }
186511
- }
186512
- if (updated !== el) {
186513
- mutated = true;
186514
- }
186515
- return updated;
186516
- });
186517
- return mutated ? next : elements;
186518
- }
186519
- function applyImagePathPatches(elements, resolvedMap, refs) {
186520
- const elementPatches = /* @__PURE__ */ new Map();
186521
- for (const ref of refs) {
186522
- const url = resolvedMap.get(ref.path);
186523
- if (!url) {
186524
- continue;
186525
- }
186526
- const existing = elementPatches.get(ref.element.id) ?? {};
186527
- existing[ref.field] = url;
186528
- elementPatches.set(ref.element.id, existing);
186529
- }
186530
- if (elementPatches.size === 0) {
186531
- return elements;
186532
- }
186533
- return walkAndPatchElements(elements, (el) => {
186534
- const patch = elementPatches.get(el.id);
186535
- return patch ? { ...el, ...patch } : el;
186536
- });
186537
- }
186538
- function isExternalUrl(path) {
186539
- return path.startsWith("http://") || path.startsWith("https://") || path.startsWith("data:") || path.startsWith("blob:");
186540
- }
186541
- function collectMediaElements(elements, collector) {
186542
- for (const element of elements) {
186543
- if (element.type === "media") {
186544
- collector.push(element);
186545
- continue;
186546
- }
186547
- if (element.type === "group" && element.children?.length) {
186548
- collectMediaElements(element.children, collector);
186549
- }
186550
- }
186551
- }
186552
- function collectImagePaths(slides) {
186553
- const paths = /* @__PURE__ */ new Set();
186554
- const refs = [];
186555
- const walkElements = (elements) => {
186556
- for (const el of elements) {
186557
- if (el.type === "picture" || el.type === "image") {
186558
- const pic = el;
186559
- if (pic.imagePath && !pic.imageData && !isExternalUrl(pic.imagePath)) {
186560
- paths.add(pic.imagePath);
186561
- refs.push({ element: el, field: "imageData", path: pic.imagePath });
186562
- }
186563
- if (pic.svgPath && !pic.svgData && !isExternalUrl(pic.svgPath)) {
186564
- paths.add(pic.svgPath);
186565
- refs.push({ element: el, field: "svgData", path: pic.svgPath });
186566
- }
186567
- }
186568
- if (el.type === "media") {
186569
- const media = el;
186570
- if (media.posterFramePath && !media.posterFrameData && !isExternalUrl(media.posterFramePath)) {
186571
- paths.add(media.posterFramePath);
186572
- refs.push({
186573
- element: el,
186574
- field: "posterFrameData",
186575
- path: media.posterFramePath
186576
- });
186577
- }
186578
- }
186579
- if (el.type === "model3d") {
186580
- const model = el;
186581
- if (model.modelPath && !model.modelData && !isExternalUrl(model.modelPath)) {
186582
- paths.add(model.modelPath);
186583
- refs.push({ element: el, field: "modelData", path: model.modelPath });
186584
- }
186585
- const posterNeedsResolution = model.posterImage ? !isExternalUrl(model.posterImage) : !model.imageData;
186586
- if (model.imagePath && posterNeedsResolution && !isExternalUrl(model.imagePath)) {
186587
- paths.add(model.imagePath);
186588
- refs.push({ element: el, field: "posterImage", path: model.imagePath });
186589
- }
186590
- }
186591
- if (el.type === "group" && el.children?.length) {
186592
- walkElements(el.children);
186593
- }
186594
- }
186595
- };
186596
- for (const slide of slides) {
186597
- walkElements(slide.elements);
186598
- }
186599
- return { paths, refs };
186600
- }
186601
- function collectTableCellImagePaths(slides) {
186602
- const paths = /* @__PURE__ */ new Set();
186603
- const refs = [];
186604
- const walkElements = (elements) => {
186605
- for (const el of elements) {
186606
- if (el.type === "table") {
186607
- const rows = el.tableData?.rows ?? [];
186608
- rows.forEach((row, rowIndex) => {
186609
- row.cells.forEach((cell, cellIndex) => {
186610
- const path = cell.style?.backgroundImageFillPath;
186611
- if (path && !cell.style?.backgroundImageFillData && !isExternalUrl(path)) {
186612
- paths.add(path);
186613
- refs.push({ element: el, rowIndex, cellIndex, path });
186614
- }
186615
- });
186616
- });
186617
- }
186618
- if (el.type === "group" && el.children?.length) {
186619
- walkElements(el.children);
186620
- }
186621
- }
186622
- };
186623
- for (const slide of slides) {
186624
- walkElements(slide.elements);
186625
- }
186626
- return { paths, refs };
186627
- }
186628
- function applyTableCellImagePatches(elements, resolvedMap, refs) {
186629
- const patchesByElementId = /* @__PURE__ */ new Map();
186630
- for (const ref of refs) {
186631
- const url = resolvedMap.get(ref.path);
186632
- if (!url) {
186633
- continue;
186634
- }
186635
- const list2 = patchesByElementId.get(ref.element.id) ?? [];
186636
- list2.push({ rowIndex: ref.rowIndex, cellIndex: ref.cellIndex, url });
186637
- patchesByElementId.set(ref.element.id, list2);
186638
- }
186639
- if (patchesByElementId.size === 0) {
186640
- return elements;
186641
- }
186642
- return walkAndPatchElements(elements, (el) => {
186643
- const cellPatches = patchesByElementId.get(el.id);
186644
- if (!cellPatches || el.type !== "table") {
186645
- return el;
186646
- }
186647
- const table2 = el;
186648
- const tableData = table2.tableData;
186649
- if (!tableData) {
186650
- return el;
186651
- }
186652
- const newRows = tableData.rows.map((row, rowIndex) => {
186653
- const rowPatches = cellPatches.filter((p) => p.rowIndex === rowIndex);
186654
- if (rowPatches.length === 0) {
186655
- return row;
186656
- }
186657
- const newCells = row.cells.map((cell, cellIndex) => {
186658
- const patch = rowPatches.find((p) => p.cellIndex === cellIndex);
186659
- if (!patch || !cell.style) {
186660
- return cell;
186661
- }
186662
- return {
186663
- ...cell,
186664
- style: { ...cell.style, backgroundImageFillData: patch.url }
186665
- };
186666
- });
186667
- return { ...row, cells: newCells };
186668
- });
186669
- return { ...table2, tableData: { ...tableData, rows: newRows } };
186670
- });
186671
- }
186672
- function buildInitialGuides(presentationGuides, firstSlideGuides) {
186673
- const guides = [];
186674
- if (presentationGuides) {
186675
- for (const g2 of presentationGuides) {
186676
- guides.push({
186677
- id: g2.id,
186678
- axis: g2.orientation === "horz" ? "h" : "v",
186679
- position: guideEmuToPx(g2.positionEmu)
186680
- });
186681
- }
186682
- }
186683
- if (firstSlideGuides) {
186684
- for (const g2 of firstSlideGuides) {
186685
- guides.push({
186686
- id: g2.id,
186687
- axis: g2.orientation === "horz" ? "h" : "v",
186688
- position: guideEmuToPx(g2.positionEmu)
186689
- });
186690
- }
186691
- }
186692
- return guides;
186693
- }
186694
- async function resolveMediaElementSource(mediaElement, handler) {
186695
- const mediaPath = mediaElement.mediaPath;
186696
- if (!mediaPath) {
186697
- return { mediaPath: void 0, url: void 0, isBlobUrl: false, missing: true };
186698
- }
186699
- if (isExternalUrl(mediaPath)) {
186700
- return { mediaPath, url: mediaPath, isBlobUrl: false, missing: false };
186701
- }
186702
- try {
186703
- const isAudioVideo = mediaElement.mediaType === "audio" || mediaElement.mediaType === "video";
186704
- if (isAudioVideo) {
186705
- const arrayBuffer = await handler.getMediaArrayBuffer(mediaPath);
186706
- if (!arrayBuffer) {
186707
- return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
186708
- }
186709
- const mimeType = mediaElement.mediaMimeType || "application/octet-stream";
186710
- const blobUrl = URL.createObjectURL(new Blob([arrayBuffer], { type: mimeType }));
186711
- return { mediaPath, url: blobUrl, isBlobUrl: true, missing: false };
186712
- }
186713
- const dataUrl = await handler.getImageData(mediaPath);
186714
- if (!dataUrl) {
186715
- return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
186716
- }
186717
- return { mediaPath, url: dataUrl, isBlobUrl: false, missing: false };
186718
- } catch {
186719
- return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
186720
- }
186721
- }
186722
- var TABLE_STYLE_FILL_KEYS = [
186723
- "wholeTblFill",
186724
- "band1HFill",
186725
- "band2HFill",
186726
- "band1VFill",
186727
- "band2VFill",
186728
- "lastColFill",
186729
- "firstColFill",
186730
- "lastRowFill",
186731
- "seCellFill",
186732
- "swCellFill",
186733
- "firstRowFill",
186734
- "neCellFill",
186735
- "nwCellFill"
186736
- ];
186737
- function isExternalUrl2(path) {
186738
- return path.startsWith("http://") || path.startsWith("https://") || path.startsWith("data:") || path.startsWith("blob:");
186739
- }
186740
- function collectTableStyleImagePaths(tableStyleMap) {
186741
- const paths = /* @__PURE__ */ new Set();
186742
- const refs = [];
186743
- if (!tableStyleMap) {
186744
- return { paths, refs };
186745
- }
186746
- for (const [styleId, entry5] of Object.entries(tableStyleMap)) {
186747
- for (const fillKey of TABLE_STYLE_FILL_KEYS) {
186748
- const fill = entry5[fillKey];
186749
- const path = fill?.image?.path;
186750
- if (path && !fill?.image?.data && !isExternalUrl2(path)) {
186751
- paths.add(path);
186752
- refs.push({ styleId, fillKey, path });
186753
- }
186754
- }
186755
- }
186756
- return { paths, refs };
186757
- }
186758
- function applyTableStyleImagePatches(tableStyleMap, resolvedMap, refs) {
186759
- const patchesByStyleId = /* @__PURE__ */ new Map();
186760
- for (const ref of refs) {
186761
- const url = resolvedMap.get(ref.path);
186762
- if (!url) {
186763
- continue;
186764
- }
186765
- const list2 = patchesByStyleId.get(ref.styleId) ?? [];
186766
- list2.push({ fillKey: ref.fillKey, url });
186767
- patchesByStyleId.set(ref.styleId, list2);
186768
- }
186769
- if (patchesByStyleId.size === 0) {
186770
- return tableStyleMap;
186771
- }
186772
- const next = { ...tableStyleMap };
186773
- for (const [styleId, patches] of patchesByStyleId) {
186774
- const entry5 = next[styleId];
186775
- if (!entry5) {
186776
- continue;
186777
- }
186778
- const patchedEntry = { ...entry5 };
186779
- for (const { fillKey, url } of patches) {
186780
- const fill = patchedEntry[fillKey];
186781
- if (!fill?.image) {
186782
- continue;
186783
- }
186784
- patchedEntry[fillKey] = { ...fill, image: { ...fill.image, data: url } };
186785
- }
186786
- next[styleId] = patchedEntry;
186787
- }
186788
- return next;
186789
- }
186790
- function collectTextFillBlipPaths(slides) {
186791
- const paths = /* @__PURE__ */ new Set();
186792
- const refs = [];
186793
- const walkElements = (elements) => {
186794
- for (const el of elements) {
186795
- if (hasTextProperties(el) && el.textSegments) {
186796
- el.textSegments.forEach((segment, segmentIndex) => {
186797
- const path = segment.style?.textFillBlipUrl;
186798
- if (path && !isExternalUrl(path)) {
186799
- paths.add(path);
186800
- refs.push({ element: el, segmentIndex, path });
186801
- }
186802
- });
186803
- }
186804
- if (el.type === "group" && el.children?.length) {
186805
- walkElements(el.children);
186806
- }
186807
- }
186808
- };
186809
- for (const slide of slides) {
186810
- walkElements(slide.elements);
186811
- }
186812
- return { paths, refs };
186813
- }
186814
- function applyTextFillBlipPatches(elements, resolvedMap, refs) {
186815
- const patchesByElementId = /* @__PURE__ */ new Map();
186816
- for (const ref of refs) {
186817
- const url = resolvedMap.get(ref.path);
186818
- if (!url) {
186819
- continue;
186820
- }
186821
- const list2 = patchesByElementId.get(ref.element.id) ?? [];
186822
- list2.push({ segmentIndex: ref.segmentIndex, url });
186823
- patchesByElementId.set(ref.element.id, list2);
186824
- }
186825
- if (patchesByElementId.size === 0) {
186826
- return elements;
186827
- }
186828
- return walkAndPatchElements(elements, (el) => {
186829
- const segmentPatches = patchesByElementId.get(el.id);
186830
- if (!segmentPatches || !hasTextProperties(el) || !el.textSegments) {
186831
- return el;
186832
- }
186833
- const newSegments = el.textSegments.map((segment, segmentIndex) => {
186834
- const patch = segmentPatches.find((p) => p.segmentIndex === segmentIndex);
186835
- if (!patch || !segment.style) {
186836
- return segment;
186837
- }
186838
- return { ...segment, style: { ...segment.style, textFillBlipUrl: patch.url } };
186839
- });
186840
- return { ...el, textSegments: newSegments };
186841
- });
186842
- }
186843
- async function resolveTableCellImageUrls(slides, getImageData) {
186844
- const { paths, refs } = collectTableCellImagePaths(slides);
186845
- if (paths.size === 0) {
186846
- return slides;
186847
- }
186848
- const resolvedMap = /* @__PURE__ */ new Map();
186849
- await Promise.all(
186850
- Array.from(paths).map(async (path) => {
186851
- try {
186852
- const url = await getImageData(path);
186853
- if (url) {
186854
- resolvedMap.set(path, url);
186855
- }
186856
- } catch {
186857
- }
186858
- })
186859
- );
186860
- if (resolvedMap.size === 0) {
186861
- return slides;
186862
- }
186863
- return slides.map((slide) => {
186864
- const newElements = applyTableCellImagePatches(slide.elements, resolvedMap, refs);
186865
- return newElements === slide.elements ? slide : { ...slide, elements: newElements };
186866
- });
186867
- }
186868
- async function resolveTableStyleImageUrls(tableStyleMap, getImageData) {
186869
- const { paths, refs } = collectTableStyleImagePaths(tableStyleMap);
186870
- if (paths.size === 0 || !tableStyleMap) {
186871
- return tableStyleMap;
186872
- }
186873
- const resolvedMap = /* @__PURE__ */ new Map();
186874
- await Promise.all(
186875
- Array.from(paths).map(async (path) => {
186876
- try {
186877
- const url = await getImageData(path);
186878
- if (url) {
186879
- resolvedMap.set(path, url);
186880
- }
186881
- } catch {
186882
- }
186883
- })
186884
- );
186885
- if (resolvedMap.size === 0) {
186886
- return tableStyleMap;
186887
- }
186888
- return applyTableStyleImagePatches(tableStyleMap, resolvedMap, refs);
186889
- }
186890
- async function resolveTextFillBlipUrls(slides, getImageData) {
186891
- const { paths, refs } = collectTextFillBlipPaths(slides);
186892
- if (paths.size === 0) {
186893
- return slides;
186894
- }
186895
- const resolvedMap = /* @__PURE__ */ new Map();
186896
- await Promise.all(
186897
- Array.from(paths).map(async (path) => {
186898
- try {
186899
- const url = await getImageData(path);
186900
- if (url) {
186901
- resolvedMap.set(path, url);
186902
- }
186903
- } catch {
186904
- }
186905
- })
186906
- );
186907
- if (resolvedMap.size === 0) {
186908
- return slides;
186909
- }
186910
- return slides.map((slide) => {
186911
- const newElements = applyTextFillBlipPatches(slide.elements, resolvedMap, refs);
186912
- return newElements === slide.elements ? slide : { ...slide, elements: newElements };
186913
- });
186914
- }
186915
- init_constants2();
186916
186458
  function resolveLiveCustomGeometryPath(element) {
186917
186459
  const el = element;
186918
186460
  if (!el.pathData || !el.pathWidth || !el.pathHeight) {
@@ -196815,7 +196357,7 @@ function resolveAutoAdvanceDelayMs(slide, options) {
196815
196357
  }
196816
196358
  return advanceAfterMs;
196817
196359
  }
196818
- var PRESENTATION_INERT_CLICK_SELECTOR = 'a, button, input, select, textarea, video, audio, [data-pptx-action], [role="dialog"]';
196360
+ var PRESENTATION_INERT_CLICK_SELECTOR = 'a, button, input, select, textarea, video, audio, [data-pptx-action], [data-pptx-anim-trigger], [role="dialog"]';
196819
196361
  function isInertMedia(node) {
196820
196362
  return (node.tagName === "VIDEO" || node.tagName === "AUDIO") && !node.controls;
196821
196363
  }
@@ -199979,6 +199521,269 @@ function collectDiagramBuildInfo(timeline) {
199979
199521
  }
199980
199522
  return info;
199981
199523
  }
199524
+ var CLICK_EVENTS = /* @__PURE__ */ new Set(["onClick", "onNext"]);
199525
+ var TIMENODE_EVENTS = /* @__PURE__ */ new Set([
199526
+ "onBegin",
199527
+ "onEnd",
199528
+ "begin",
199529
+ "end",
199530
+ "onStopAudio"
199531
+ ]);
199532
+ function normalizeDelay(delay) {
199533
+ if (delay === void 0) {
199534
+ return { ms: 0, indefinite: false };
199535
+ }
199536
+ if (delay < 0) {
199537
+ return { ms: 0, indefinite: true };
199538
+ }
199539
+ return { ms: delay, indefinite: false };
199540
+ }
199541
+ function resolveEffectiveEndCondition(conditions) {
199542
+ if (!conditions || conditions.length === 0) {
199543
+ return void 0;
199544
+ }
199545
+ const result = {
199546
+ endsOnMouseOut: false,
199547
+ endsOnClick: false,
199548
+ indefinite: false
199549
+ };
199550
+ for (const cond of conditions) {
199551
+ const evt = cond.event;
199552
+ if (evt === "onMouseOut") {
199553
+ result.endsOnMouseOut = true;
199554
+ } else if (evt && CLICK_EVENTS.has(evt)) {
199555
+ result.endsOnClick = true;
199556
+ if (cond.targetShapeId) {
199557
+ result.clickTargetShapeId = cond.targetShapeId;
199558
+ }
199559
+ } else if (evt && TIMENODE_EVENTS.has(evt) && cond.targetTimeNodeId !== void 0) {
199560
+ result.endsWithTimeNodeId = cond.targetTimeNodeId;
199561
+ }
199562
+ const { ms, indefinite } = normalizeDelay(cond.delay);
199563
+ if (indefinite) {
199564
+ result.indefinite = true;
199565
+ } else if (ms > 0 && result.delayMs === void 0) {
199566
+ result.delayMs = ms;
199567
+ }
199568
+ }
199569
+ return result;
199570
+ }
199571
+ function resolveAnimationEnd(anim) {
199572
+ return resolveEffectiveEndCondition(anim.endConditions);
199573
+ }
199574
+ var HOVER_EVENTS = /* @__PURE__ */ new Set(["onMouseOver"]);
199575
+ function isInteractiveTrigger(trigger) {
199576
+ return trigger === "onClick" || trigger === "onShapeClick" || trigger === "onHover";
199577
+ }
199578
+ function classifyCondition(cond) {
199579
+ const evt = cond.event;
199580
+ if (evt && CLICK_EVENTS.has(evt)) {
199581
+ return "click";
199582
+ }
199583
+ if (evt && HOVER_EVENTS.has(evt)) {
199584
+ return "hover";
199585
+ }
199586
+ if (evt === "onMediaBookmark" && cond.bookmarkTarget) {
199587
+ return "bookmark";
199588
+ }
199589
+ if (evt && TIMENODE_EVENTS.has(evt)) {
199590
+ if (cond.targetTimeNodeId !== void 0) {
199591
+ return "timenode";
199592
+ }
199593
+ if (evt === "onStopAudio" && cond.targetShapeId !== void 0) {
199594
+ return "timenode";
199595
+ }
199596
+ }
199597
+ return "delay";
199598
+ }
199599
+ function resolveEffectiveStartCondition(conditions, fallbackTrigger) {
199600
+ const base = {
199601
+ trigger: fallbackTrigger,
199602
+ delayMs: 0,
199603
+ hasClickAlternative: false,
199604
+ hasHoverAlternative: false,
199605
+ indefinite: false,
199606
+ requiresInteraction: isInteractiveTrigger(fallbackTrigger)
199607
+ };
199608
+ if (!conditions || conditions.length === 0) {
199609
+ return base;
199610
+ }
199611
+ let timenode;
199612
+ let bookmarkCond;
199613
+ let delayCond;
199614
+ let clickCond;
199615
+ let hoverCond;
199616
+ for (const cond of conditions) {
199617
+ switch (classifyCondition(cond)) {
199618
+ case "timenode":
199619
+ if (!timenode) {
199620
+ timenode = cond;
199621
+ } else if (cond.targetTimeNodeId !== void 0) {
199622
+ if (timenode.targetTimeNodeId === void 0 || cond.targetTimeNodeId < timenode.targetTimeNodeId) {
199623
+ timenode = cond;
199624
+ }
199625
+ }
199626
+ break;
199627
+ case "bookmark":
199628
+ if (!bookmarkCond) {
199629
+ bookmarkCond = cond;
199630
+ }
199631
+ break;
199632
+ case "delay":
199633
+ if (!delayCond || (cond.delay ?? 0) < (delayCond.delay ?? 0)) {
199634
+ delayCond = cond;
199635
+ }
199636
+ break;
199637
+ case "click":
199638
+ if (!clickCond) {
199639
+ clickCond = cond;
199640
+ }
199641
+ break;
199642
+ case "hover":
199643
+ if (!hoverCond) {
199644
+ hoverCond = cond;
199645
+ }
199646
+ break;
199647
+ }
199648
+ }
199649
+ base.hasClickAlternative = clickCond !== void 0;
199650
+ base.hasHoverAlternative = hoverCond !== void 0;
199651
+ if (clickCond?.targetShapeId) {
199652
+ base.clickTargetShapeId = clickCond.targetShapeId;
199653
+ }
199654
+ if (timenode) {
199655
+ const { ms, indefinite } = normalizeDelay(timenode.delay);
199656
+ base.trigger = timenode.event === "onBegin" || timenode.event === "begin" ? "withPrevious" : "afterPrevious";
199657
+ base.delayMs = ms;
199658
+ base.indefinite = indefinite;
199659
+ base.dependsOnTimeNodeId = timenode.targetTimeNodeId;
199660
+ base.dependsOnShapeId = timenode.targetTimeNodeId === void 0 ? timenode.targetShapeId : void 0;
199661
+ base.dependsOnEvent = timenode.event;
199662
+ base.requiresInteraction = false;
199663
+ return base;
199664
+ }
199665
+ if (bookmarkCond?.bookmarkTarget) {
199666
+ base.trigger = "afterPrevious";
199667
+ base.delayMs = 0;
199668
+ base.dependsOnShapeId = bookmarkCond.bookmarkTarget.shapeId;
199669
+ base.dependsOnEvent = "onMediaBookmark";
199670
+ base.dependsOnBookmarkName = bookmarkCond.bookmarkTarget.bookmarkName;
199671
+ base.requiresInteraction = false;
199672
+ return base;
199673
+ }
199674
+ if (delayCond && (delayCond.delay ?? 0) !== 0) {
199675
+ const { ms, indefinite } = normalizeDelay(delayCond.delay);
199676
+ base.trigger = clickCond ? "onClick" : "afterDelay";
199677
+ base.delayMs = ms;
199678
+ base.indefinite = indefinite;
199679
+ base.requiresInteraction = indefinite;
199680
+ return base;
199681
+ }
199682
+ if (clickCond) {
199683
+ base.trigger = clickCond.targetShapeId ? "onShapeClick" : "onClick";
199684
+ base.requiresInteraction = true;
199685
+ return base;
199686
+ }
199687
+ if (hoverCond) {
199688
+ base.trigger = "onHover";
199689
+ base.requiresInteraction = true;
199690
+ return base;
199691
+ }
199692
+ if (delayCond) {
199693
+ base.trigger = fallbackTrigger;
199694
+ base.delayMs = 0;
199695
+ base.requiresInteraction = false;
199696
+ }
199697
+ return base;
199698
+ }
199699
+ function resolveAnimationStart(anim) {
199700
+ return resolveEffectiveStartCondition(anim.startConditions, anim.trigger ?? "onClick");
199701
+ }
199702
+ var BEZIER_SAMPLES = 8;
199703
+ function cubicAt(p0, c1, c2, p3, t) {
199704
+ const mt = 1 - t;
199705
+ return mt * mt * mt * p0 + 3 * mt * mt * t * c1 + 3 * mt * t * t * c2 + t * t * t * p3;
199706
+ }
199707
+ function allFinite(values) {
199708
+ return values.every((v) => Number.isFinite(v));
199709
+ }
199710
+ function parseMotionPathPoints(motionPath) {
199711
+ const tokens = motionPath.match(/[MLCZmlcz]|-?\d*\.?\d+(?:[eE][-+]?\d+)?/gu);
199712
+ if (!tokens) {
199713
+ return [];
199714
+ }
199715
+ const points4 = [];
199716
+ let curX = 0;
199717
+ let curY = 0;
199718
+ let startX = 0;
199719
+ let startY = 0;
199720
+ let i2 = 0;
199721
+ let cmd = "";
199722
+ const nextNum = () => Number(tokens[i2++]);
199723
+ const push2 = (x, y) => {
199724
+ points4.push({ x: x * 100, y: y * 100 });
199725
+ };
199726
+ while (i2 < tokens.length) {
199727
+ const tok = tokens[i2];
199728
+ if (/^[MLCZmlcz]$/u.test(tok)) {
199729
+ cmd = tok;
199730
+ i2++;
199731
+ if (cmd === "Z" || cmd === "z") {
199732
+ curX = startX;
199733
+ curY = startY;
199734
+ }
199735
+ continue;
199736
+ }
199737
+ const rel = cmd === cmd.toLowerCase();
199738
+ const upper = cmd.toUpperCase();
199739
+ if (upper === "M" || upper === "L") {
199740
+ let x = nextNum();
199741
+ let y = nextNum();
199742
+ if (!allFinite([x, y])) {
199743
+ break;
199744
+ }
199745
+ if (rel) {
199746
+ x += curX;
199747
+ y += curY;
199748
+ }
199749
+ curX = x;
199750
+ curY = y;
199751
+ if (upper === "M") {
199752
+ startX = x;
199753
+ startY = y;
199754
+ cmd = rel ? "l" : "L";
199755
+ }
199756
+ push2(x, y);
199757
+ } else if (upper === "C") {
199758
+ let c1x = nextNum();
199759
+ let c1y = nextNum();
199760
+ let c2x = nextNum();
199761
+ let c2y = nextNum();
199762
+ let ex = nextNum();
199763
+ let ey = nextNum();
199764
+ if (!allFinite([c1x, c1y, c2x, c2y, ex, ey])) {
199765
+ break;
199766
+ }
199767
+ if (rel) {
199768
+ c1x += curX;
199769
+ c1y += curY;
199770
+ c2x += curX;
199771
+ c2y += curY;
199772
+ ex += curX;
199773
+ ey += curY;
199774
+ }
199775
+ for (let s = 1; s <= BEZIER_SAMPLES; s++) {
199776
+ const t = s / BEZIER_SAMPLES;
199777
+ push2(cubicAt(curX, c1x, c2x, ex, t), cubicAt(curY, c1y, c2y, ey, t));
199778
+ }
199779
+ curX = ex;
199780
+ curY = ey;
199781
+ } else {
199782
+ i2++;
199783
+ }
199784
+ }
199785
+ return points4;
199786
+ }
199982
199787
  var BACKGROUND_ANIMATION_ID_SUFFIX = "::pptx-bg";
199983
199788
  function resolveAnimationTargetId(animation) {
199984
199789
  const targetId = (animation.target?.type === "shape" ? animation.target.subShapeId : void 0) ?? animation.targetId ?? "";
@@ -199987,6 +199792,42 @@ function resolveAnimationTargetId(animation) {
199987
199792
  }
199988
199793
  return targetId;
199989
199794
  }
199795
+ var DEFAULT_SLIDE_ASPECT = 16 / 9;
199796
+ function pacedFractions(points4, aspect = DEFAULT_SLIDE_ASPECT) {
199797
+ const lengths = [0];
199798
+ let total = 0;
199799
+ for (let i2 = 1; i2 < points4.length; i2++) {
199800
+ const dx = (points4[i2].x - points4[i2 - 1].x) * aspect;
199801
+ const dy = points4[i2].y - points4[i2 - 1].y;
199802
+ total += Math.hypot(dx, dy);
199803
+ lengths.push(total);
199804
+ }
199805
+ if (total <= 0) {
199806
+ return points4.map((_, i2) => points4.length > 1 ? i2 / (points4.length - 1) : 0);
199807
+ }
199808
+ return lengths.map((length) => length / total);
199809
+ }
199810
+ function pacedPointAt(points4, fractions, progress) {
199811
+ if (points4.length === 0) {
199812
+ return { x: 0, y: 0 };
199813
+ }
199814
+ if (points4.length === 1 || progress <= 0) {
199815
+ return points4[0];
199816
+ }
199817
+ if (progress >= 1) {
199818
+ return points4[points4.length - 1];
199819
+ }
199820
+ let i2 = 1;
199821
+ while (i2 < points4.length - 1 && fractions[i2] < progress) {
199822
+ i2++;
199823
+ }
199824
+ const span = fractions[i2] - fractions[i2 - 1];
199825
+ const ratio2 = span > 0 ? (progress - fractions[i2 - 1]) / span : 1;
199826
+ return {
199827
+ x: points4[i2 - 1].x + (points4[i2].x - points4[i2 - 1].x) * ratio2,
199828
+ y: points4[i2 - 1].y + (points4[i2].y - points4[i2 - 1].y) * ratio2
199829
+ };
199830
+ }
199990
199831
  var IDENT_RE = /^[#a-zA-Z_$][a-zA-Z0-9_]*/u;
199991
199832
  var NUMBER_RE = /^\d+(\.\d+)?|^\.\d+/u;
199992
199833
  function tokenize2(formula) {
@@ -200521,127 +200362,6 @@ function createAttributeTransformModel(anim, box) {
200521
200362
  }
200522
200363
  };
200523
200364
  }
200524
- var BEZIER_SAMPLES = 8;
200525
- function cubicAt(p0, c1, c2, p3, t) {
200526
- const mt = 1 - t;
200527
- return mt * mt * mt * p0 + 3 * mt * mt * t * c1 + 3 * mt * t * t * c2 + t * t * t * p3;
200528
- }
200529
- function allFinite(values) {
200530
- return values.every((v) => Number.isFinite(v));
200531
- }
200532
- function parseMotionPathPoints(motionPath) {
200533
- const tokens = motionPath.match(/[MLCZmlcz]|-?\d*\.?\d+(?:[eE][-+]?\d+)?/gu);
200534
- if (!tokens) {
200535
- return [];
200536
- }
200537
- const points4 = [];
200538
- let curX = 0;
200539
- let curY = 0;
200540
- let startX = 0;
200541
- let startY = 0;
200542
- let i2 = 0;
200543
- let cmd = "";
200544
- const nextNum = () => Number(tokens[i2++]);
200545
- const push2 = (x, y) => {
200546
- points4.push({ x: x * 100, y: y * 100 });
200547
- };
200548
- while (i2 < tokens.length) {
200549
- const tok = tokens[i2];
200550
- if (/^[MLCZmlcz]$/u.test(tok)) {
200551
- cmd = tok;
200552
- i2++;
200553
- if (cmd === "Z" || cmd === "z") {
200554
- curX = startX;
200555
- curY = startY;
200556
- }
200557
- continue;
200558
- }
200559
- const rel = cmd === cmd.toLowerCase();
200560
- const upper = cmd.toUpperCase();
200561
- if (upper === "M" || upper === "L") {
200562
- let x = nextNum();
200563
- let y = nextNum();
200564
- if (!allFinite([x, y])) {
200565
- break;
200566
- }
200567
- if (rel) {
200568
- x += curX;
200569
- y += curY;
200570
- }
200571
- curX = x;
200572
- curY = y;
200573
- if (upper === "M") {
200574
- startX = x;
200575
- startY = y;
200576
- cmd = rel ? "l" : "L";
200577
- }
200578
- push2(x, y);
200579
- } else if (upper === "C") {
200580
- let c1x = nextNum();
200581
- let c1y = nextNum();
200582
- let c2x = nextNum();
200583
- let c2y = nextNum();
200584
- let ex = nextNum();
200585
- let ey = nextNum();
200586
- if (!allFinite([c1x, c1y, c2x, c2y, ex, ey])) {
200587
- break;
200588
- }
200589
- if (rel) {
200590
- c1x += curX;
200591
- c1y += curY;
200592
- c2x += curX;
200593
- c2y += curY;
200594
- ex += curX;
200595
- ey += curY;
200596
- }
200597
- for (let s = 1; s <= BEZIER_SAMPLES; s++) {
200598
- const t = s / BEZIER_SAMPLES;
200599
- push2(cubicAt(curX, c1x, c2x, ex, t), cubicAt(curY, c1y, c2y, ey, t));
200600
- }
200601
- curX = ex;
200602
- curY = ey;
200603
- } else {
200604
- i2++;
200605
- }
200606
- }
200607
- return points4;
200608
- }
200609
- var DEFAULT_SLIDE_ASPECT = 16 / 9;
200610
- function pacedFractions(points4, aspect = DEFAULT_SLIDE_ASPECT) {
200611
- const lengths = [0];
200612
- let total = 0;
200613
- for (let i2 = 1; i2 < points4.length; i2++) {
200614
- const dx = (points4[i2].x - points4[i2 - 1].x) * aspect;
200615
- const dy = points4[i2].y - points4[i2 - 1].y;
200616
- total += Math.hypot(dx, dy);
200617
- lengths.push(total);
200618
- }
200619
- if (total <= 0) {
200620
- return points4.map((_, i2) => points4.length > 1 ? i2 / (points4.length - 1) : 0);
200621
- }
200622
- return lengths.map((length) => length / total);
200623
- }
200624
- function pacedPointAt(points4, fractions, progress) {
200625
- if (points4.length === 0) {
200626
- return { x: 0, y: 0 };
200627
- }
200628
- if (points4.length === 1 || progress <= 0) {
200629
- return points4[0];
200630
- }
200631
- if (progress >= 1) {
200632
- return points4[points4.length - 1];
200633
- }
200634
- let i2 = 1;
200635
- while (i2 < points4.length - 1 && fractions[i2] < progress) {
200636
- i2++;
200637
- }
200638
- const span = fractions[i2] - fractions[i2 - 1];
200639
- const ratio2 = span > 0 ? (progress - fractions[i2 - 1]) / span : 1;
200640
- return {
200641
- x: points4[i2 - 1].x + (points4[i2].x - points4[i2 - 1].x) * ratio2,
200642
- y: points4[i2 - 1].y + (points4[i2].y - points4[i2 - 1].y) * ratio2
200643
- };
200644
- }
200645
200365
  function slideOffset(percent4, axis, origin) {
200646
200366
  const fallback = axis === "w" ? "1280px" : "720px";
200647
200367
  const varName = origin === "parent" ? `--pptx-parent-${axis}` : `--pptx-slide-${axis}`;
@@ -200788,6 +200508,217 @@ function buildTransformKeyframes(anim, uid, prefixes, box) {
200788
200508
  ${lines.join("\n")}
200789
200509
  }` };
200790
200510
  }
200511
+ function buildChainedMotionKeyframes(anim, uid, prefixes, box) {
200512
+ const chain2 = anim.motionChain;
200513
+ if (!chain2 || chain2.length < 2) {
200514
+ return void 0;
200515
+ }
200516
+ const totalMs = anim.durationMs ?? chain2.reduce((sum, segment) => sum + segment.durationMs, 0);
200517
+ if (totalMs <= 0) {
200518
+ return void 0;
200519
+ }
200520
+ const keyframes = [];
200521
+ for (const segment of chain2) {
200522
+ const fractions = pacedFractions(segment.points, box?.slideAspect);
200523
+ const segStartPct = segment.startMs / totalMs * 100;
200524
+ const segSpanPct = segment.durationMs / totalMs * 100;
200525
+ for (let j = 0; j < segment.points.length; j++) {
200526
+ const fraction = fractions[j];
200527
+ const point2 = pacedPointAt(segment.points, fractions, fraction);
200528
+ const progress = Number((segStartPct + fraction * segSpanPct).toFixed(4));
200529
+ const transform6 = `transform: translate(${slideOffset(point2.x, "w", anim.motionOrigin)}, ${slideOffset(point2.y, "h", anim.motionOrigin)})`;
200530
+ const easing = j === 0 ? segment.easing : void 0;
200531
+ const previous = keyframes[keyframes.length - 1];
200532
+ if (previous && previous.progress === progress) {
200533
+ previous.transform = transform6;
200534
+ previous.easing = easing ?? previous.easing;
200535
+ continue;
200536
+ }
200537
+ keyframes.push({ progress, transform: transform6, easing });
200538
+ }
200539
+ }
200540
+ const hideUntilStart = anim.motionChainHideUntilStart === true;
200541
+ if (hideUntilStart && keyframes.length > 0) {
200542
+ keyframes.splice(1, 0, { ...keyframes[0], progress: 0.01 });
200543
+ }
200544
+ const lines = keyframes.map((keyframe, index) => {
200545
+ const easing = keyframe.easing ? `animation-timing-function: ${keyframe.easing}; ` : "";
200546
+ const opacity2 = hideUntilStart && index === 0 ? "opacity: 0; " : hideUntilStart && index === 1 ? "opacity: 1; " : "";
200547
+ return ` ${formatNumber(keyframe.progress, 2)}% { ${easing}${opacity2}${keyframe.transform}; }`;
200548
+ });
200549
+ const name = `${prefixes.transform}-${uid}${hideUntilStart ? "-visibility" : ""}`;
200550
+ return {
200551
+ keyframeName: name,
200552
+ css: `@keyframes ${name} {
200553
+ ${lines.join("\n")}
200554
+ }`
200555
+ };
200556
+ }
200557
+ function isChainedMotionAnimation(anim) {
200558
+ return anim.motionChain !== void 0;
200559
+ }
200560
+ function isChainedMotionSwallowed(anim) {
200561
+ return anim.motionChainSwallowed === true;
200562
+ }
200563
+ function hasChainBlockingExtras(anim) {
200564
+ return Boolean(
200565
+ anim.rotationBy !== void 0 || anim.rotationFrom !== void 0 || anim.rotationTo !== void 0 || anim.scaleByX !== void 0 || anim.scaleByY !== void 0 || anim.scaleFromX !== void 0 || anim.scaleFromY !== void 0 || anim.scaleToX !== void 0 || anim.scaleToY !== void 0 || anim.colorAnimation || anim.attributeAnimations?.length || anim.setAnimations?.length || anim.repeatCount !== void 0 || anim.repeatDurMs !== void 0 || anim.autoReverse || anim.graphicBuildProperties || anim.iterate || anim.speedPct !== void 0 || anim.afterAnimationAction || anim.startConditions?.some(
200566
+ (condition) => condition.targetTimeNodeId !== void 0 || condition.event !== void 0 && condition.event !== "onClick" && condition.event !== "onMouseOver"
200567
+ )
200568
+ );
200569
+ }
200570
+ function authoredStartMs(anim) {
200571
+ return (anim.parGroupDelayMs ?? 0) + Math.max(anim.delayMs ?? 0, anim.triggerDelayMs ?? 0);
200572
+ }
200573
+ function mergeChainedMotionPathAnims(anims) {
200574
+ const candidates = /* @__PURE__ */ new Map();
200575
+ let clickGroup = 0;
200576
+ const clickGroups = [];
200577
+ for (let index = 0; index < anims.length; index++) {
200578
+ const anim = anims[index];
200579
+ if (resolveAnimationStart(anim).trigger === "onClick") {
200580
+ clickGroup++;
200581
+ }
200582
+ clickGroups[index] = clickGroup;
200583
+ if (anim.presetClass !== "path" || !anim.motionPath || anim.parGroupIndex === void 0 || !Number.isFinite(anim.parGroupDelayMs) || !Number.isFinite(anim.durationMs) || (anim.durationMs ?? 0) <= 0) {
200584
+ continue;
200585
+ }
200586
+ if (hasChainBlockingExtras(anim)) {
200587
+ continue;
200588
+ }
200589
+ const targetId = resolveAnimationTargetId(anim);
200590
+ if (!targetId) {
200591
+ continue;
200592
+ }
200593
+ const startMs = authoredStartMs(anim);
200594
+ const candidateKey = JSON.stringify([
200595
+ clickGroup,
200596
+ anim.triggerShapeId,
200597
+ targetId,
200598
+ anim.motionOrigin
200599
+ ]);
200600
+ const run = candidates.get(candidateKey) ?? [];
200601
+ run.push({ index, anim, startMs, endMs: startMs + (anim.durationMs ?? 0) });
200602
+ candidates.set(candidateKey, run);
200603
+ }
200604
+ const swallowedIndices = /* @__PURE__ */ new Set();
200605
+ const replacements = /* @__PURE__ */ new Map();
200606
+ for (const [, run] of candidates) {
200607
+ if (run.length < 2) {
200608
+ continue;
200609
+ }
200610
+ const ordered4 = [...run].sort((left, right) => left.startMs - right.startMs);
200611
+ if (ordered4.slice(1).some((member) => member.anim.trigger === "onClick")) {
200612
+ continue;
200613
+ }
200614
+ if (ordered4.some((member, i2) => i2 > 0 && member.startMs < ordered4[i2 - 1].endMs)) {
200615
+ continue;
200616
+ }
200617
+ const segments = [];
200618
+ const points4 = [];
200619
+ const windowStartMs = ordered4[0].startMs;
200620
+ let windowEndMs = ordered4[0].endMs;
200621
+ let viable = true;
200622
+ for (const member of ordered4) {
200623
+ const segmentPoints = parseMotionPathPoints(member.anim.motionPath ?? "");
200624
+ if (segmentPoints.length < 2) {
200625
+ viable = false;
200626
+ break;
200627
+ }
200628
+ points4.push(...segmentPoints);
200629
+ segments.push({
200630
+ points: segmentPoints,
200631
+ startMs: member.startMs - windowStartMs,
200632
+ durationMs: member.anim.durationMs ?? 0,
200633
+ easing: cssEasingForAccelDecel(member.anim.accel, member.anim.decel)
200634
+ });
200635
+ windowEndMs = Math.max(windowEndMs, member.endMs);
200636
+ }
200637
+ if (!viable) {
200638
+ continue;
200639
+ }
200640
+ const head = ordered4[0];
200641
+ const windowStartMsAbs = windowStartMs;
200642
+ const hasPreChainExit = anims.some(
200643
+ (other, index) => index < head.index && clickGroups[index] === clickGroups[head.index] && other !== head.anim && other.presetClass === "exit" && resolveAnimationTargetId(other) === resolveAnimationTargetId(head.anim) && authoredStartMs(other) + (other.durationMs ?? 0) <= windowStartMsAbs
200644
+ );
200645
+ const synthetic = {
200646
+ ...head.anim,
200647
+ motionPath: pointsToPathString(points4),
200648
+ // The window includes any authored gaps between segments.
200649
+ durationMs: Math.max(1, windowEndMs - windowStartMs),
200650
+ motionChain: segments,
200651
+ motionChainHideUntilStart: hasPreChainExit
200652
+ };
200653
+ replacements.set(head.index, synthetic);
200654
+ for (const member of ordered4.slice(1)) {
200655
+ swallowedIndices.add(member.index);
200656
+ }
200657
+ }
200658
+ if (replacements.size === 0) {
200659
+ return [...anims];
200660
+ }
200661
+ return anims.map((anim, index) => {
200662
+ if (swallowedIndices.has(index)) {
200663
+ return { ...anim, motionChainSwallowed: true };
200664
+ }
200665
+ return replacements.get(index) ?? anim;
200666
+ });
200667
+ }
200668
+ function pointsToPathString(points4) {
200669
+ return points4.map((point2, index) => `${index === 0 ? "M" : "L"} ${point2.x / 100} ${point2.y / 100} `).join("");
200670
+ }
200671
+ function cssKeyframeName(effect) {
200672
+ return `pptx-${effect}`;
200673
+ }
200674
+ function defaultDuration(presetClass) {
200675
+ switch (presetClass) {
200676
+ case "entr":
200677
+ return 500;
200678
+ case "exit":
200679
+ return 500;
200680
+ case "emph":
200681
+ return 800;
200682
+ case "path":
200683
+ return 1e3;
200684
+ default:
200685
+ return 500;
200686
+ }
200687
+ }
200688
+ function fillModeForClass(presetClass) {
200689
+ switch (presetClass) {
200690
+ case "entr":
200691
+ return "both";
200692
+ case "exit":
200693
+ return "forwards";
200694
+ case "emph":
200695
+ return "both";
200696
+ default:
200697
+ return "both";
200698
+ }
200699
+ }
200700
+ function finalizeClickGroup(steps, options) {
200701
+ let maxEnd = 0;
200702
+ for (const step of steps) {
200703
+ const end = step.delayMs + step.durationMs;
200704
+ if (end > maxEnd) {
200705
+ maxEnd = end;
200706
+ }
200707
+ }
200708
+ const group2 = { steps, totalDurationMs: maxEnd };
200709
+ for (const step of steps) {
200710
+ if (group2.seqConcurrent === void 0 && step.seqConcurrent !== void 0) {
200711
+ group2.seqConcurrent = step.seqConcurrent;
200712
+ }
200713
+ if (group2.seqNextAction === void 0 && step.seqNextAction !== void 0) {
200714
+ group2.seqNextAction = step.seqNextAction;
200715
+ }
200716
+ if (group2.seqPrevAction === void 0 && step.seqPrevAction !== void 0) {
200717
+ group2.seqPrevAction = step.seqPrevAction;
200718
+ }
200719
+ }
200720
+ return group2;
200721
+ }
200791
200722
  function resolveEffect(anim, pixelateMosaic) {
200792
200723
  const cls = anim.presetClass;
200793
200724
  const id = anim.presetId;
@@ -200857,6 +200788,15 @@ function boxForAnimation(anim, renderContext) {
200857
200788
  return targetId ? renderContext.getElementBox(targetId) : void 0;
200858
200789
  }
200859
200790
  function buildDynamicKeyframe(anim, uid, renderContext) {
200791
+ const chained = isChainedMotionAnimation(anim) ? buildChainedMotionKeyframes(
200792
+ anim,
200793
+ uid,
200794
+ TIMELINE_TRANSFORM_PREFIXES,
200795
+ boxForAnimation(anim, renderContext)
200796
+ ) : void 0;
200797
+ if (chained) {
200798
+ return chained;
200799
+ }
200860
200800
  const transform6 = buildTransformKeyframes(
200861
200801
  anim,
200862
200802
  uid,
@@ -200887,57 +200827,6 @@ function buildDynamicKeyframe(anim, uid, renderContext) {
200887
200827
  }
200888
200828
  return void 0;
200889
200829
  }
200890
- function cssKeyframeName(effect) {
200891
- return `pptx-${effect}`;
200892
- }
200893
- function defaultDuration(presetClass) {
200894
- switch (presetClass) {
200895
- case "entr":
200896
- return 500;
200897
- case "exit":
200898
- return 500;
200899
- case "emph":
200900
- return 800;
200901
- case "path":
200902
- return 1e3;
200903
- default:
200904
- return 500;
200905
- }
200906
- }
200907
- function fillModeForClass(presetClass) {
200908
- switch (presetClass) {
200909
- case "entr":
200910
- return "both";
200911
- case "exit":
200912
- return "forwards";
200913
- case "emph":
200914
- return "both";
200915
- default:
200916
- return "both";
200917
- }
200918
- }
200919
- function finalizeClickGroup(steps, options) {
200920
- let maxEnd = 0;
200921
- for (const step of steps) {
200922
- const end = step.delayMs + step.durationMs;
200923
- if (end > maxEnd) {
200924
- maxEnd = end;
200925
- }
200926
- }
200927
- const group2 = { steps, totalDurationMs: maxEnd };
200928
- for (const step of steps) {
200929
- if (group2.seqConcurrent === void 0 && step.seqConcurrent !== void 0) {
200930
- group2.seqConcurrent = step.seqConcurrent;
200931
- }
200932
- if (group2.seqNextAction === void 0 && step.seqNextAction !== void 0) {
200933
- group2.seqNextAction = step.seqNextAction;
200934
- }
200935
- if (group2.seqPrevAction === void 0 && step.seqPrevAction !== void 0) {
200936
- group2.seqPrevAction = step.seqPrevAction;
200937
- }
200938
- }
200939
- return group2;
200940
- }
200941
200830
  function clamp015(value) {
200942
200831
  return Math.max(0, Math.min(1, value));
200943
200832
  }
@@ -201074,184 +200963,6 @@ function resolveEffectTiming(anim, baseDurationMs) {
201074
200963
  holdEndState: shouldHoldEndState(anim)
201075
200964
  };
201076
200965
  }
201077
- var CLICK_EVENTS = /* @__PURE__ */ new Set(["onClick", "onNext"]);
201078
- var TIMENODE_EVENTS = /* @__PURE__ */ new Set([
201079
- "onBegin",
201080
- "onEnd",
201081
- "begin",
201082
- "end",
201083
- "onStopAudio"
201084
- ]);
201085
- function normalizeDelay(delay) {
201086
- if (delay === void 0) {
201087
- return { ms: 0, indefinite: false };
201088
- }
201089
- if (delay < 0) {
201090
- return { ms: 0, indefinite: true };
201091
- }
201092
- return { ms: delay, indefinite: false };
201093
- }
201094
- function resolveEffectiveEndCondition(conditions) {
201095
- if (!conditions || conditions.length === 0) {
201096
- return void 0;
201097
- }
201098
- const result = {
201099
- endsOnMouseOut: false,
201100
- endsOnClick: false,
201101
- indefinite: false
201102
- };
201103
- for (const cond of conditions) {
201104
- const evt = cond.event;
201105
- if (evt === "onMouseOut") {
201106
- result.endsOnMouseOut = true;
201107
- } else if (evt && CLICK_EVENTS.has(evt)) {
201108
- result.endsOnClick = true;
201109
- if (cond.targetShapeId) {
201110
- result.clickTargetShapeId = cond.targetShapeId;
201111
- }
201112
- } else if (evt && TIMENODE_EVENTS.has(evt) && cond.targetTimeNodeId !== void 0) {
201113
- result.endsWithTimeNodeId = cond.targetTimeNodeId;
201114
- }
201115
- const { ms, indefinite } = normalizeDelay(cond.delay);
201116
- if (indefinite) {
201117
- result.indefinite = true;
201118
- } else if (ms > 0 && result.delayMs === void 0) {
201119
- result.delayMs = ms;
201120
- }
201121
- }
201122
- return result;
201123
- }
201124
- function resolveAnimationEnd(anim) {
201125
- return resolveEffectiveEndCondition(anim.endConditions);
201126
- }
201127
- var HOVER_EVENTS = /* @__PURE__ */ new Set(["onMouseOver"]);
201128
- function isInteractiveTrigger(trigger) {
201129
- return trigger === "onClick" || trigger === "onShapeClick" || trigger === "onHover";
201130
- }
201131
- function classifyCondition(cond) {
201132
- const evt = cond.event;
201133
- if (evt && CLICK_EVENTS.has(evt)) {
201134
- return "click";
201135
- }
201136
- if (evt && HOVER_EVENTS.has(evt)) {
201137
- return "hover";
201138
- }
201139
- if (evt === "onMediaBookmark" && cond.bookmarkTarget) {
201140
- return "bookmark";
201141
- }
201142
- if (evt && TIMENODE_EVENTS.has(evt)) {
201143
- if (cond.targetTimeNodeId !== void 0) {
201144
- return "timenode";
201145
- }
201146
- if (evt === "onStopAudio" && cond.targetShapeId !== void 0) {
201147
- return "timenode";
201148
- }
201149
- }
201150
- return "delay";
201151
- }
201152
- function resolveEffectiveStartCondition(conditions, fallbackTrigger) {
201153
- const base = {
201154
- trigger: fallbackTrigger,
201155
- delayMs: 0,
201156
- hasClickAlternative: false,
201157
- hasHoverAlternative: false,
201158
- indefinite: false,
201159
- requiresInteraction: isInteractiveTrigger(fallbackTrigger)
201160
- };
201161
- if (!conditions || conditions.length === 0) {
201162
- return base;
201163
- }
201164
- let timenode;
201165
- let bookmarkCond;
201166
- let delayCond;
201167
- let clickCond;
201168
- let hoverCond;
201169
- for (const cond of conditions) {
201170
- switch (classifyCondition(cond)) {
201171
- case "timenode":
201172
- if (!timenode) {
201173
- timenode = cond;
201174
- } else if (cond.targetTimeNodeId !== void 0) {
201175
- if (timenode.targetTimeNodeId === void 0 || cond.targetTimeNodeId < timenode.targetTimeNodeId) {
201176
- timenode = cond;
201177
- }
201178
- }
201179
- break;
201180
- case "bookmark":
201181
- if (!bookmarkCond) {
201182
- bookmarkCond = cond;
201183
- }
201184
- break;
201185
- case "delay":
201186
- if (!delayCond || (cond.delay ?? 0) < (delayCond.delay ?? 0)) {
201187
- delayCond = cond;
201188
- }
201189
- break;
201190
- case "click":
201191
- if (!clickCond) {
201192
- clickCond = cond;
201193
- }
201194
- break;
201195
- case "hover":
201196
- if (!hoverCond) {
201197
- hoverCond = cond;
201198
- }
201199
- break;
201200
- }
201201
- }
201202
- base.hasClickAlternative = clickCond !== void 0;
201203
- base.hasHoverAlternative = hoverCond !== void 0;
201204
- if (clickCond?.targetShapeId) {
201205
- base.clickTargetShapeId = clickCond.targetShapeId;
201206
- }
201207
- if (timenode) {
201208
- const { ms, indefinite } = normalizeDelay(timenode.delay);
201209
- base.trigger = timenode.event === "onBegin" || timenode.event === "begin" ? "withPrevious" : "afterPrevious";
201210
- base.delayMs = ms;
201211
- base.indefinite = indefinite;
201212
- base.dependsOnTimeNodeId = timenode.targetTimeNodeId;
201213
- base.dependsOnShapeId = timenode.targetTimeNodeId === void 0 ? timenode.targetShapeId : void 0;
201214
- base.dependsOnEvent = timenode.event;
201215
- base.requiresInteraction = false;
201216
- return base;
201217
- }
201218
- if (bookmarkCond?.bookmarkTarget) {
201219
- base.trigger = "afterPrevious";
201220
- base.delayMs = 0;
201221
- base.dependsOnShapeId = bookmarkCond.bookmarkTarget.shapeId;
201222
- base.dependsOnEvent = "onMediaBookmark";
201223
- base.dependsOnBookmarkName = bookmarkCond.bookmarkTarget.bookmarkName;
201224
- base.requiresInteraction = false;
201225
- return base;
201226
- }
201227
- if (delayCond && (delayCond.delay ?? 0) !== 0) {
201228
- const { ms, indefinite } = normalizeDelay(delayCond.delay);
201229
- base.trigger = clickCond ? "onClick" : "afterDelay";
201230
- base.delayMs = ms;
201231
- base.indefinite = indefinite;
201232
- base.requiresInteraction = indefinite;
201233
- return base;
201234
- }
201235
- if (clickCond) {
201236
- base.trigger = clickCond.targetShapeId ? "onShapeClick" : "onClick";
201237
- base.requiresInteraction = true;
201238
- return base;
201239
- }
201240
- if (hoverCond) {
201241
- base.trigger = "onHover";
201242
- base.requiresInteraction = true;
201243
- return base;
201244
- }
201245
- if (delayCond) {
201246
- base.trigger = fallbackTrigger;
201247
- base.delayMs = 0;
201248
- base.requiresInteraction = false;
201249
- }
201250
- return base;
201251
- }
201252
- function resolveAnimationStart(anim) {
201253
- return resolveEffectiveStartCondition(anim.startConditions, anim.trigger ?? "onClick");
201254
- }
201255
200966
  function isMediaCommandAnimation(anim) {
201256
200967
  return typeof anim.commandString === "string" && anim.commandString.trim().length > 0;
201257
200968
  }
@@ -202245,6 +201956,49 @@ function composeParallelSteps(left, right) {
202245
201956
  colorTargets: colorTargets.length > 0 ? colorTargets : void 0
202246
201957
  };
202247
201958
  }
201959
+ var TRANSFORM_KEYFRAME_NAME = /^pptx-(?:tl-)?(?:motion|rotate(?:Abs)?|scale(?:Abs)?|transform)-/u;
201960
+ var COLOR_KEYFRAME_NAME = /^pptx-(?:tl-)?(?:color|tavclr)-/u;
201961
+ var FILTER_KEYFRAME_NAME = /^pptx-(?:tl-)?emph-/u;
201962
+ var animatedPropertyCache = /* @__PURE__ */ new Map();
201963
+ function keyframeAnimatedProperties(keyframeName2) {
201964
+ let props = animatedPropertyCache.get(keyframeName2);
201965
+ if (props) {
201966
+ return props;
201967
+ }
201968
+ props = /* @__PURE__ */ new Set();
201969
+ if (TRANSFORM_KEYFRAME_NAME.test(keyframeName2)) {
201970
+ props.add("transform");
201971
+ if (keyframeName2.endsWith("-visibility")) {
201972
+ props.add("opacity");
201973
+ }
201974
+ } else if (COLOR_KEYFRAME_NAME.test(keyframeName2)) {
201975
+ props.add("color");
201976
+ } else if (FILTER_KEYFRAME_NAME.test(keyframeName2)) {
201977
+ props.add("filter");
201978
+ } else {
201979
+ const css = getEffectKeyframes(keyframeName2.replace(/^pptx-/u, ""));
201980
+ if (css) {
201981
+ if (/(?:^|[^-])\btransform\s*:/u.test(css)) {
201982
+ props.add("transform");
201983
+ }
201984
+ if (/(?:^|[^-])\bopacity\s*:/u.test(css)) {
201985
+ props.add("opacity");
201986
+ }
201987
+ if (/(?:^|[^-])\bfilter\s*:/u.test(css)) {
201988
+ props.add("filter");
201989
+ }
201990
+ if (/(?:^|[^-])\b(?:color|fill|stroke)\s*:/u.test(css)) {
201991
+ props.add("color");
201992
+ }
201993
+ } else {
201994
+ props.add("unknown");
201995
+ }
201996
+ }
201997
+ if (!/^pptx-(?:tl-)?(?:motion|rotate|scale|transform|color|tavclr|emph)-/u.test(keyframeName2)) {
201998
+ animatedPropertyCache.set(keyframeName2, props);
201999
+ }
202000
+ return props;
202001
+ }
202248
202002
  function parseTmFilter(raw) {
202249
202003
  if (!raw) {
202250
202004
  return void 0;
@@ -202946,6 +202700,23 @@ function expandIterateAnimation(anim) {
202946
202700
  function processRegularAnimation(state, anim, renderContext, pixelateMosaic) {
202947
202701
  const expandedSteps = expandIterateAnimation(anim);
202948
202702
  for (const singleAnim of expandedSteps) {
202703
+ if (isChainedMotionSwallowed(singleAnim)) {
202704
+ if (singleAnim.soundPath || singleAnim.stopSound) {
202705
+ state.currentGroup.push({
202706
+ elementId: "",
202707
+ cssAnimation: "",
202708
+ keyframeName: "",
202709
+ trigger: singleAnim.trigger ?? "onClick",
202710
+ delayMs: (singleAnim.parGroupDelayMs ?? 0) + Math.max(singleAnim.delayMs ?? 0, singleAnim.triggerDelayMs ?? 0),
202711
+ durationMs: singleAnim.durationMs ?? 0,
202712
+ fillMode: "forwards",
202713
+ presetClass: "emph",
202714
+ soundPath: singleAnim.soundPath,
202715
+ stopSound: singleAnim.stopSound
202716
+ });
202717
+ }
202718
+ continue;
202719
+ }
202949
202720
  const resolved = resolveStepEffect(
202950
202721
  singleAnim,
202951
202722
  renderContext,
@@ -203056,6 +202827,9 @@ function countDynamicUids(interactiveAnims) {
203056
202827
  let count = 0;
203057
202828
  for (const [, anims] of interactiveAnims) {
203058
202829
  for (const anim of anims) {
202830
+ if (isChainedMotionSwallowed(anim)) {
202831
+ continue;
202832
+ }
203059
202833
  const effect = resolveEffect(anim);
203060
202834
  if (!effect) {
203061
202835
  count++;
@@ -203074,6 +202848,23 @@ function buildSequenceGroups(animsByKey, entranceIds, neededKeyframes, dynamicBl
203074
202848
  let subGroupIndex;
203075
202849
  let subGroupStartMs = 0;
203076
202850
  for (const anim of anims) {
202851
+ if (isChainedMotionSwallowed(anim)) {
202852
+ if (anim.soundPath || anim.stopSound) {
202853
+ seqGroup.push({
202854
+ elementId: "",
202855
+ cssAnimation: "",
202856
+ keyframeName: "",
202857
+ trigger: anim.trigger ?? "onShapeClick",
202858
+ delayMs: (anim.parGroupDelayMs ?? 0) + Math.max(anim.delayMs ?? 0, anim.triggerDelayMs ?? 0),
202859
+ durationMs: anim.durationMs ?? 0,
202860
+ fillMode: "forwards",
202861
+ presetClass: "emph",
202862
+ soundPath: anim.soundPath,
202863
+ stopSound: anim.stopSound
202864
+ });
202865
+ }
202866
+ continue;
202867
+ }
203077
202868
  const resolved = resolveStepEffect(anim, renderContext, dynamicUid, false, pixelateMosaic);
203078
202869
  dynamicUid = resolved.nextDynamicUid;
203079
202870
  if (resolved.skip) {
@@ -203264,7 +203055,12 @@ function buildTimeline(nativeAnimations, renderContext, pixelateMosaic) {
203264
203055
  regularAnims.push(anim);
203265
203056
  }
203266
203057
  }
203267
- const { clickGroups, entranceIds, neededKeyframes, dynamicBlocks, dynamicUid } = buildRegularClickGroups(regularAnims, renderContext, pixelateMosaic);
203058
+ const mergedRegularAnims = mergeChainedMotionPathAnims(regularAnims);
203059
+ for (const [shapeId, anims] of interactiveAnims) {
203060
+ interactiveAnims.set(shapeId, mergeChainedMotionPathAnims(anims));
203061
+ }
203062
+ const mergedHoverAnims = mergeChainedMotionPathAnims(hoverAnims);
203063
+ const { clickGroups, entranceIds, neededKeyframes, dynamicBlocks, dynamicUid } = buildRegularClickGroups(mergedRegularAnims, renderContext, pixelateMosaic);
203268
203064
  const interactiveSequences = buildSequenceGroups(
203269
203065
  interactiveAnims,
203270
203066
  entranceIds,
@@ -203275,7 +203071,7 @@ function buildTimeline(nativeAnimations, renderContext, pixelateMosaic) {
203275
203071
  pixelateMosaic
203276
203072
  );
203277
203073
  const { hoverSequences } = buildHoverSequences(
203278
- hoverAnims,
203074
+ mergedHoverAnims,
203279
203075
  entranceIds,
203280
203076
  neededKeyframes,
203281
203077
  dynamicBlocks,
@@ -208695,17 +208491,17 @@ function attachRotateHandlePlacement(button, options = {}) {
208695
208491
  for (const node of ancestors) {
208696
208492
  mutations.observe(node, { attributes: true, attributeFilter: ["style", "class", "hidden"] });
208697
208493
  }
208698
- const controls = options.getObstacleRoot ? options.getObstacleRoot() : button.parentElement;
208699
- if (controls) {
208700
- mutations.observe(controls, {
208494
+ const controls2 = options.getObstacleRoot ? options.getObstacleRoot() : button.parentElement;
208495
+ if (controls2) {
208496
+ mutations.observe(controls2, {
208701
208497
  attributes: true,
208702
208498
  attributeFilter: ["style", "class", "hidden"],
208703
208499
  childList: true
208704
208500
  });
208705
- observed.add(controls);
208501
+ observed.add(controls2);
208706
208502
  for (const control of [
208707
208503
  button,
208708
- ...controls.querySelectorAll("[data-pptx-handle-kind]")
208504
+ ...controls2.querySelectorAll("[data-pptx-handle-kind]")
208709
208505
  ]) {
208710
208506
  observeControl(control);
208711
208507
  }
@@ -211410,6 +211206,9 @@ var translationsEn = {
211410
211206
  // Live captions
211411
211207
  "pptx.subtitles.listening": "Listening\u2026",
211412
211208
  "pptx.subtitles.notSupported": "Subtitles are not supported in this browser.",
211209
+ "pptx.subtitles.spokenLanguage": "Spoken language",
211210
+ "pptx.subtitles.browserLanguage": "Browser language",
211211
+ "pptx.subtitles.settingsDescription": "Choose the language you will speak. Captions use browser speech recognition; translation is not available.",
211413
211212
  // Table (additions)
211414
211213
  "pptx.table.background": "Background",
211415
211214
  "pptx.table.bandColCycle": "Column band size",
@@ -229127,6 +228926,89 @@ function slideShowOptionChange(id, checked) {
229127
228926
  return null;
229128
228927
  }
229129
228928
  }
228929
+ var SLIDE_SHOW_COMMAND_GROUPS = [
228930
+ {
228931
+ id: "slideShow.startSlideShow",
228932
+ labelKey: "pptx.slideShow.start",
228933
+ commands: [
228934
+ {
228935
+ id: "slideShow.startSlideShow.fromBeginning",
228936
+ labelKey: "pptx.slideShow.fromBeginning",
228937
+ icon: "play-start",
228938
+ tooltipKey: "pptx.slideShow.fromBeginningTooltip"
228939
+ },
228940
+ {
228941
+ id: "slideShow.startSlideShow.fromCurrent",
228942
+ labelKey: "pptx.slideShow.fromCurrent",
228943
+ icon: "play",
228944
+ tooltipKey: "pptx.slideShow.fromCurrentTooltip"
228945
+ }
228946
+ ]
228947
+ },
228948
+ {
228949
+ id: "slideShow.present",
228950
+ labelKey: "pptx.slideShow.present",
228951
+ commands: [
228952
+ {
228953
+ id: "slideShow.present.presenterView",
228954
+ labelKey: "pptx.slideShow.presenterView",
228955
+ icon: "presentation",
228956
+ tooltipKey: "pptx.slideShow.presenterViewTooltip"
228957
+ },
228958
+ {
228959
+ id: "slideShow.startSlideShow.customShow",
228960
+ labelKey: "pptx.slideShow.customShow",
228961
+ icon: "list",
228962
+ tooltipKey: "pptx.customShows.customShowTooltip"
228963
+ },
228964
+ {
228965
+ id: "slideShow.present.broadcast",
228966
+ labelKey: "pptx.slideShow.broadcast",
228967
+ icon: "broadcast",
228968
+ tooltipKey: "pptx.slideShow.broadcastTooltip"
228969
+ }
228970
+ ]
228971
+ },
228972
+ {
228973
+ id: "slideShow.setUp",
228974
+ labelKey: "pptx.slideShow.setUpGroup",
228975
+ commands: [
228976
+ {
228977
+ id: "slideShow.setUp.rehearseWithCoach",
228978
+ labelKey: "pptx.slideShow.rehearseCoach",
228979
+ icon: "video",
228980
+ unsupported: true
228981
+ },
228982
+ {
228983
+ id: "slideShow.setUp.setUpSlideShow",
228984
+ labelKey: "pptx.slideShow.setUp",
228985
+ icon: "settings",
228986
+ tooltipKey: "pptx.slideShow.setUpTooltip"
228987
+ },
228988
+ { id: "slideShow.setUp.hideSlide", labelKey: "pptx.slideShow.hideSlide", icon: "eye-off" },
228989
+ {
228990
+ id: "slideShow.setUp.rehearseTimings",
228991
+ labelKey: "pptx.slideShow.rehearseTimings",
228992
+ icon: "clock",
228993
+ tooltipKey: "pptx.slideShow.rehearseTimingsTooltip"
228994
+ },
228995
+ { id: "slideShow.setUp.record", labelKey: "pptx.titleBar.record", icon: "record" }
228996
+ ]
228997
+ }
228998
+ ];
228999
+ var HELP_RIBBON_COMMANDS = [
229000
+ { id: "help.help.options", labelKey: "pptx.settings.title", icon: "settings" },
229001
+ {
229002
+ id: "help.help.keyboardShortcuts",
229003
+ labelKey: "pptx.settings.keyboardShortcuts",
229004
+ icon: "keyboard"
229005
+ },
229006
+ {
229007
+ id: "help.help.accessibility",
229008
+ labelKey: "pptx.ribbon.accessibilityCheck",
229009
+ icon: "accessibility"
229010
+ }
229011
+ ];
229130
229012
  function resetSlideLayoutPath(slide) {
229131
229013
  const path = slide?.layoutPath;
229132
229014
  return typeof path === "string" && path !== "" ? path : void 0;
@@ -232358,20 +232240,20 @@ async function mountModel3D(container, modelUrl, options) {
232358
232240
  scene.add(light);
232359
232241
  }
232360
232242
  scene.add(rig.placeModel(model));
232361
- let controls = null;
232243
+ let controls2 = null;
232362
232244
  const OrbitCtrlCtor = await loadOrbitControlsCtor();
232363
232245
  const enableControls = (on) => {
232364
- if (on && !controls && OrbitCtrlCtor) {
232365
- controls = new OrbitCtrlCtor(camera, canvas);
232366
- controls.enablePan = false;
232367
- controls.enableZoom = true;
232368
- controls.enableRotate = true;
232369
- controls.minDistance = descriptor.authored ? rig.distance * 0.2 : 2;
232370
- controls.maxDistance = descriptor.authored ? rig.distance * 4 : 20;
232371
- controls.update();
232372
- } else if (!on && controls) {
232373
- controls.dispose();
232374
- controls = null;
232246
+ if (on && !controls2 && OrbitCtrlCtor) {
232247
+ controls2 = new OrbitCtrlCtor(camera, canvas);
232248
+ controls2.enablePan = false;
232249
+ controls2.enableZoom = true;
232250
+ controls2.enableRotate = true;
232251
+ controls2.minDistance = descriptor.authored ? rig.distance * 0.2 : 2;
232252
+ controls2.maxDistance = descriptor.authored ? rig.distance * 4 : 20;
232253
+ controls2.update();
232254
+ } else if (!on && controls2) {
232255
+ controls2.dispose();
232256
+ controls2 = null;
232375
232257
  }
232376
232258
  };
232377
232259
  enableControls(options.interactive ?? true);
@@ -232382,7 +232264,7 @@ async function mountModel3D(container, modelUrl, options) {
232382
232264
  return;
232383
232265
  }
232384
232266
  frame2 = requestAnimationFrame(renderLoop);
232385
- controls?.update();
232267
+ controls2?.update();
232386
232268
  renderer.render(scene, camera);
232387
232269
  };
232388
232270
  frame2 = requestAnimationFrame(renderLoop);
@@ -232419,7 +232301,7 @@ async function mountModel3D(container, modelUrl, options) {
232419
232301
  }
232420
232302
  disposed = true;
232421
232303
  cancelAnimationFrame(frame2);
232422
- controls?.dispose();
232304
+ controls2?.dispose();
232423
232305
  disposeModel();
232424
232306
  scene.clear();
232425
232307
  renderer.dispose();
@@ -237329,11 +237211,13 @@ function resolveElementAriaAttributes(element, options) {
237329
237211
  };
237330
237212
  }
237331
237213
  var PRESENTATION_STAGE_ATTRIBUTE = "data-pptx-presenting";
237214
+ var PRESENTATION_ANIM_TRIGGER_ATTRIBUTE = "data-pptx-anim-trigger";
237332
237215
  var PRESENTATION_HIT_TEST_CSS = `
237333
237216
  [${PRESENTATION_STAGE_ATTRIBUTE}] [data-element-id] {
237334
237217
  pointer-events: none;
237335
237218
  }
237336
237219
  [${PRESENTATION_STAGE_ATTRIBUTE}] [data-pptx-action],
237220
+ [${PRESENTATION_STAGE_ATTRIBUTE}] [${PRESENTATION_ANIM_TRIGGER_ATTRIBUTE}],
237337
237221
  [${PRESENTATION_STAGE_ATTRIBUTE}] [data-element-id] a[href],
237338
237222
  [${PRESENTATION_STAGE_ATTRIBUTE}] [data-element-id] video[controls],
237339
237223
  [${PRESENTATION_STAGE_ATTRIBUTE}] [data-element-id] audio[controls] {
@@ -237418,7 +237302,11 @@ function focusableElements(panel2) {
237418
237302
  }
237419
237303
  function activateModalFocus(panel2, options = {}) {
237420
237304
  const doc = panel2.ownerDocument;
237421
- const opener = doc.activeElement instanceof HTMLElement ? doc.activeElement : null;
237305
+ let activeElement = doc.activeElement;
237306
+ while (activeElement?.shadowRoot?.activeElement) {
237307
+ activeElement = activeElement.shadowRoot.activeElement;
237308
+ }
237309
+ const opener = activeElement instanceof HTMLElement ? activeElement : null;
237422
237310
  const restoreFocus = options.restoreFocus ?? true;
237423
237311
  function focusInitial() {
237424
237312
  const candidate = options.initialFocus ?? focusableElements(panel2)[0] ?? panel2;
@@ -241764,6 +241652,73 @@ function hiddenSlideCue(hidden, surface, slideIndex) {
241764
241652
  }
241765
241653
  return { hidden: true, labelId: hiddenSlideLabelId(surface, slideIndex), marker: "true" };
241766
241654
  }
241655
+ function mergeCaptionResults(resultIndex, results) {
241656
+ let finalText = "";
241657
+ let interimText = "";
241658
+ for (let index = resultIndex; index < results.length; index++) {
241659
+ const result = results[index];
241660
+ const fragment = result?.[0]?.transcript ?? "";
241661
+ if (result?.isFinal) {
241662
+ finalText += fragment;
241663
+ } else {
241664
+ interimText += fragment;
241665
+ }
241666
+ }
241667
+ return `${finalText} ${interimText}`.trim();
241668
+ }
241669
+ function getSpeechRecognitionCtor() {
241670
+ const source = globalThis;
241671
+ return source["SpeechRecognition"] ?? source["webkitSpeechRecognition"] ?? null;
241672
+ }
241673
+ var SUBTITLE_LANGUAGES = [
241674
+ "auto",
241675
+ "en-US",
241676
+ "en-GB",
241677
+ "fr-FR",
241678
+ "de-DE",
241679
+ "es-ES",
241680
+ "pt-BR",
241681
+ "it-IT",
241682
+ "ja-JP",
241683
+ "ko-KR",
241684
+ "zh-CN"
241685
+ ];
241686
+ function subtitleLanguageLabel(language) {
241687
+ try {
241688
+ return new Intl.DisplayNames(void 0, { type: "language" }).of(language) ?? language;
241689
+ } catch {
241690
+ return language;
241691
+ }
241692
+ }
241693
+ function normalizeSubtitleSettings(settings) {
241694
+ const spokenLanguage = settings?.spokenLanguage ?? "auto";
241695
+ return {
241696
+ spokenLanguage: SUBTITLE_LANGUAGES.includes(spokenLanguage) ? spokenLanguage : "auto"
241697
+ };
241698
+ }
241699
+ function subtitleSettingsFromOptions(options) {
241700
+ return normalizeSubtitleSettings({ spokenLanguage: options?.accessibility.subtitleLanguage });
241701
+ }
241702
+ function updateSubtitleSettings(store, settings) {
241703
+ store.setValue(
241704
+ "accessibility",
241705
+ "subtitleLanguage",
241706
+ normalizeSubtitleSettings(settings).spokenLanguage
241707
+ );
241708
+ }
241709
+ function subtitleRecognitionLanguage(settings, browserLanguage = "en-US") {
241710
+ return settings.spokenLanguage === "auto" ? browserLanguage || "en-US" : settings.spokenLanguage;
241711
+ }
241712
+ function subtitleSettingsLabels(t) {
241713
+ return {
241714
+ title: t("pptx.slideShow.subtitleSettings"),
241715
+ language: t("pptx.subtitles.spokenLanguage"),
241716
+ browserLanguage: t("pptx.subtitles.browserLanguage"),
241717
+ description: t("pptx.subtitles.settingsDescription"),
241718
+ apply: t("pptx.common.apply"),
241719
+ cancel: t("pptx.common.cancel")
241720
+ };
241721
+ }
241767
241722
  var VIEWER_PREFS_STORAGE_KEY = "pptx-viewer-prefs";
241768
241723
  function hasLocalStorage() {
241769
241724
  return typeof localStorage !== "undefined";
@@ -242128,6 +242083,7 @@ var DEFAULT_VIEWER_OPTIONS = {
242128
242083
  clearCacheOnClose: false
242129
242084
  },
242130
242085
  accessibility: {
242086
+ subtitleLanguage: "auto",
242131
242087
  showAccessibilityStatus: true,
242132
242088
  feedbackWithSound: false,
242133
242089
  soundScheme: "modern",
@@ -243767,7 +243723,7 @@ function resolveRibbonCustomization(ribbon3) {
243767
243723
  const actions = /* @__PURE__ */ new Set();
243768
243724
  const contextualTabs = /* @__PURE__ */ new Set();
243769
243725
  const groups = /* @__PURE__ */ new Set();
243770
- const controls = /* @__PURE__ */ new Set();
243726
+ const controls2 = /* @__PURE__ */ new Set();
243771
243727
  for (const tab of ribbon3?.hiddenTabs ?? []) {
243772
243728
  if (CONTEXTUAL_TAB_IDS.has(tab)) {
243773
243729
  contextualTabs.add(tab);
@@ -243782,19 +243738,19 @@ function resolveRibbonCustomization(ribbon3) {
243782
243738
  }
243783
243739
  for (const button of ribbon3?.hiddenButtons ?? []) {
243784
243740
  if (isRibbonControlId(button)) {
243785
- controls.add(button);
243741
+ controls2.add(button);
243786
243742
  } else {
243787
243743
  actions.add(button);
243788
243744
  }
243789
243745
  }
243790
243746
  for (const [action, control] of BUTTON_CONTROL_ALIASES) {
243791
243747
  if (actions.has(action)) {
243792
- controls.add(control);
243793
- } else if (controls.has(control)) {
243748
+ controls2.add(control);
243749
+ } else if (controls2.has(control)) {
243794
243750
  actions.add(action);
243795
243751
  }
243796
243752
  }
243797
- return { actions, contextualTabs, groups, controls };
243753
+ return { actions, contextualTabs, groups, controls: controls2 };
243798
243754
  }
243799
243755
  var DIALOG_ENTRY_POINTS = {
243800
243756
  options: { actions: [], pages: ["options"], cards: [] },
@@ -243997,13 +243953,13 @@ function customizeSection(tabId, section, resolved) {
243997
243953
  if (resolved.hiddenOptionsSections.has(`${tabId}.${section.id}`)) {
243998
243954
  return null;
243999
243955
  }
244000
- const controls = section.controls.filter((control) => isSettingVisible(resolved, optionsSettingIdOf(control))).map(
243956
+ const controls2 = section.controls.filter((control) => isSettingVisible(resolved, optionsSettingIdOf(control))).map(
244001
243957
  (control) => isSettingLocked(resolved, optionsSettingIdOf(control)) ? { ...control, readOnly: true } : control
244002
243958
  );
244003
- if (controls.length === 0 && section.controls.length > 0 && !section.special) {
243959
+ if (controls2.length === 0 && section.controls.length > 0 && !section.special) {
244004
243960
  return null;
244005
243961
  }
244006
- return { ...section, controls };
243962
+ return { ...section, controls: controls2 };
244007
243963
  }
244008
243964
  function customizeOptionsTabs(tabs, resolved) {
244009
243965
  if (resolved.hiddenOptionsPages.size === 0 && resolved.hiddenOptionsSections.size === 0 && resolved.hiddenSettings.size === 0 && Object.keys(resolved.lockedSettings).length === 0) {
@@ -248908,28 +248864,19 @@ function cursorForTool(tool) {
248908
248864
  return "default";
248909
248865
  }
248910
248866
  }
248911
- function carryBuildState(state) {
248912
- if (!state) {
248913
- return {};
248914
- }
248915
- const carried = {};
248916
- if (state.build) {
248917
- carried.build = state.build;
248918
- }
248919
- if (state.chartReveal) {
248920
- carried.chartReveal = state.chartReveal;
248921
- }
248922
- if (state.diagramReveal) {
248923
- carried.diagramReveal = state.diagramReveal;
248924
- }
248925
- if (state.textStyle) {
248926
- carried.textStyle = state.textStyle;
248927
- }
248928
- return carried;
248929
- }
248867
+ var playbackOwners = /* @__PURE__ */ new WeakMap();
248930
248868
  function applyAnimationGroupSteps(group2, ctx) {
248931
248869
  wireMediaEndedSteps(group2, ctx);
248932
248870
  wireMediaBookmarkSteps(group2, ctx);
248871
+ const ownedAnimations = /* @__PURE__ */ new Map();
248872
+ const owner = /* @__PURE__ */ Symbol("animation group");
248873
+ const owners = playbackOwners.get(ctx.setStates) ?? /* @__PURE__ */ new Map();
248874
+ playbackOwners.set(ctx.setStates, owners);
248875
+ for (const step of group2.steps) {
248876
+ if (step.elementId && !step.command) {
248877
+ owners.set(step.elementId, owner);
248878
+ }
248879
+ }
248933
248880
  for (const step of group2.steps) {
248934
248881
  if (step.command) {
248935
248882
  const command = step.command;
@@ -248943,46 +248890,101 @@ function applyAnimationGroupSteps(group2, ctx) {
248943
248890
  continue;
248944
248891
  }
248945
248892
  if (step.stopSound) {
248946
- ctx.stopSound();
248893
+ if (step.delayMs > 0) {
248894
+ const stopTimer = window.setTimeout(() => {
248895
+ ctx.stopSound();
248896
+ }, step.delayMs);
248897
+ ctx.timers.push(stopTimer);
248898
+ } else {
248899
+ ctx.stopSound();
248900
+ }
248947
248901
  } else if (step.soundPath) {
248948
- (ctx.onPlayActionSound ?? ctx.playSound)(step.soundPath);
248902
+ const soundPath = step.soundPath;
248903
+ if (step.delayMs > 0) {
248904
+ const soundTimer = window.setTimeout(() => {
248905
+ (ctx.onPlayActionSound ?? ctx.playSound)(soundPath);
248906
+ }, step.delayMs);
248907
+ ctx.timers.push(soundTimer);
248908
+ } else {
248909
+ (ctx.onPlayActionSound ?? ctx.playSound)(soundPath);
248910
+ }
248949
248911
  }
248950
248912
  }
248951
248913
  ctx.setStates((previous) => {
248952
248914
  const next = new Map(previous);
248915
+ const componentsByElement = /* @__PURE__ */ new Map();
248953
248916
  for (const step of group2.steps) {
248954
- if (step.command) {
248917
+ if (step.command || !step.elementId) {
248955
248918
  continue;
248956
248919
  }
248957
248920
  const current = next.get(step.elementId);
248958
248921
  const shouldBeVisible = step.presetClass === "exit" ? current?.visible ?? true : true;
248959
248922
  const carried = carryBuildState(current);
248923
+ let components = componentsByElement.get(step.elementId);
248924
+ if (!components) {
248925
+ components = [];
248926
+ componentsByElement.set(step.elementId, components);
248927
+ }
248928
+ if (step.cssAnimation) {
248929
+ const names = [...step.cssAnimation.matchAll(/(?:^|,\s*)([\w-]+)\s+[\d.]+m?s\b/gu)].map(
248930
+ (match) => match[1]
248931
+ );
248932
+ const stepProperties = new Set(
248933
+ (names.length ? names : [step.keyframeName]).flatMap((name) => [
248934
+ ...keyframeAnimatedProperties(name)
248935
+ ])
248936
+ );
248937
+ const takesOverEverything = stepProperties.has("unknown");
248938
+ for (let index = components.length - 1; index >= 0; index--) {
248939
+ const component2 = components[index];
248940
+ const collides = takesOverEverything || component2.properties.has("unknown") || [...stepProperties].some((property) => component2.properties.has(property));
248941
+ if (collides) {
248942
+ components.splice(index, 1);
248943
+ }
248944
+ }
248945
+ components.push({
248946
+ animation: step.cssAnimation,
248947
+ properties: stepProperties,
248948
+ colorTargets: step.colorTargets
248949
+ });
248950
+ ownedAnimations.set(
248951
+ step.elementId,
248952
+ components.map((component2) => component2.animation)
248953
+ );
248954
+ }
248960
248955
  next.set(step.elementId, {
248961
248956
  ...carried,
248962
248957
  visible: shouldBeVisible,
248963
- cssAnimation: step.cssAnimation,
248964
- animatesFill: step.colorTargets?.includes("fill") ? true : void 0,
248965
- animatesStroke: step.colorTargets?.includes("stroke") ? true : void 0,
248958
+ cssAnimation: components.map((component2) => component2.animation).join(", ") || void 0,
248959
+ animatesFill: components.some((component2) => component2.colorTargets?.includes("fill")) || void 0,
248960
+ animatesStroke: components.some((component2) => component2.colorTargets?.includes("stroke")) || void 0,
248966
248961
  textStyle: mergeTextStyleOnStart(carried.textStyle, step.textStyle)
248967
248962
  });
248968
248963
  }
248969
248964
  return next;
248970
248965
  });
248971
248966
  for (const step of group2.steps) {
248972
- if (step.command) {
248967
+ if (step.command || !step.elementId) {
248973
248968
  continue;
248974
248969
  }
248975
248970
  const timer = window.setTimeout(
248976
248971
  () => {
248972
+ const components = ownedAnimations.get(step.elementId) ?? [];
248973
+ const remaining = step.holdEndState ? components : components.filter((animation) => animation !== step.cssAnimation);
248977
248974
  ctx.setStates((previous) => {
248978
248975
  const next = new Map(previous);
248979
248976
  const current = next.get(step.elementId);
248977
+ if (owners.get(step.elementId) !== owner || current?.cssAnimation !== (components.join(", ") || void 0) || step.cssAnimation && !components.includes(step.cssAnimation)) {
248978
+ return next;
248979
+ }
248980
248980
  const visibleAfter = step.presetClass === "exit" || step.hideAfterEffect ? false : current?.visible ?? true;
248981
248981
  const carried = carryBuildState(current);
248982
248982
  next.set(step.elementId, {
248983
248983
  ...carried,
248984
248984
  visible: visibleAfter,
248985
- cssAnimation: step.holdEndState ? step.cssAnimation : void 0,
248985
+ cssAnimation: remaining.join(", ") || void 0,
248986
+ animatesFill: step.colorTargets ? void 0 : current?.animatesFill,
248987
+ animatesStroke: step.colorTargets ? void 0 : current?.animatesStroke,
248986
248988
  textStyle: resolveTextStyleOnCleanup(
248987
248989
  carried.textStyle,
248988
248990
  step.textStyle,
@@ -248991,12 +248993,32 @@ function applyAnimationGroupSteps(group2, ctx) {
248991
248993
  });
248992
248994
  return next;
248993
248995
  });
248996
+ ownedAnimations.set(step.elementId, remaining);
248994
248997
  },
248995
248998
  Math.max(0, step.delayMs + step.durationMs + 8)
248996
248999
  );
248997
249000
  ctx.timers.push(timer);
248998
249001
  }
248999
249002
  }
249003
+ function carryBuildState(state) {
249004
+ if (!state) {
249005
+ return {};
249006
+ }
249007
+ const carried = {};
249008
+ if (state.build) {
249009
+ carried.build = state.build;
249010
+ }
249011
+ if (state.chartReveal) {
249012
+ carried.chartReveal = state.chartReveal;
249013
+ }
249014
+ if (state.diagramReveal) {
249015
+ carried.diagramReveal = state.diagramReveal;
249016
+ }
249017
+ if (state.textStyle) {
249018
+ carried.textStyle = state.textStyle;
249019
+ }
249020
+ return carried;
249021
+ }
249000
249022
  function cancelBuildReveal(handle) {
249001
249023
  if (handle.current !== null && typeof cancelAnimationFrame === "function") {
249002
249024
  cancelAnimationFrame(handle.current);
@@ -253282,6 +253304,1142 @@ function prepareElementUpdateBatch(slides, updates) {
253282
253304
  });
253283
253305
  return changed ? next : null;
253284
253306
  }
253307
+ var RECORD_COMMAND_GROUPS = [
253308
+ {
253309
+ id: "record.camera",
253310
+ labelKey: "pptx.record.camera",
253311
+ commands: [
253312
+ {
253313
+ id: "record.camera.cameo",
253314
+ labelKey: "pptx.record.cameo",
253315
+ icon: "camera",
253316
+ unsupported: true
253317
+ }
253318
+ ]
253319
+ },
253320
+ {
253321
+ id: "record.record",
253322
+ labelKey: "pptx.ribbon.tab.record",
253323
+ commands: [
253324
+ {
253325
+ id: "record.record.fromBeginning",
253326
+ labelKey: "pptx.slideShow.fromBeginning",
253327
+ icon: "video"
253328
+ },
253329
+ { id: "record.record.fromCurrent", labelKey: "pptx.slideShow.fromCurrent", icon: "play" }
253330
+ ]
253331
+ },
253332
+ {
253333
+ id: "record.manage",
253334
+ labelKey: "pptx.record.manage",
253335
+ commands: [
253336
+ {
253337
+ id: "record.manage.clear",
253338
+ labelKey: "pptx.record.clear",
253339
+ icon: "eraser",
253340
+ unsupported: true
253341
+ },
253342
+ {
253343
+ id: "record.manage.reset",
253344
+ labelKey: "pptx.record.resetToCameo",
253345
+ icon: "reset",
253346
+ unsupported: true
253347
+ }
253348
+ ]
253349
+ },
253350
+ {
253351
+ id: "record.help",
253352
+ labelKey: "pptx.ribbon.tab.help",
253353
+ commands: [
253354
+ {
253355
+ id: "record.help.learnMore",
253356
+ labelKey: "pptx.record.learnMore",
253357
+ icon: "help",
253358
+ unsupported: true
253359
+ }
253360
+ ]
253361
+ }
253362
+ ];
253363
+ var SLIDE_SHOW_OPTIONS_STYLES = `
253364
+ :host {
253365
+ display: inline-flex;
253366
+ flex: none;
253367
+ align-items: flex-start;
253368
+ gap: 8px;
253369
+ color: var(--pptx-foreground, #f9fafb);
253370
+ font: inherit;
253371
+ }
253372
+ .column { display: flex; flex-direction: column; gap: 2px; }
253373
+ label {
253374
+ display: flex;
253375
+ align-items: center;
253376
+ gap: 4px;
253377
+ min-height: 22px;
253378
+ padding: 0 4px;
253379
+ font-size: 10px;
253380
+ white-space: nowrap;
253381
+ cursor: pointer;
253382
+ }
253383
+ label:has([disabled]) { color: var(--pptx-muted-foreground, #9ca3af); cursor: not-allowed; }
253384
+ @media (pointer: coarse), (max-width: 767px) {
253385
+ label { min-height: 44px; font-size: 12px; }
253386
+ }
253387
+ `;
253388
+ function definePptxSlideShowOptions(registry) {
253389
+ if (registry.get("pptx-ui-slide-show-options")) {
253390
+ return;
253391
+ }
253392
+ class SlideShowOptions extends HTMLElement {
253393
+ static observedAttributes = ["disabled"];
253394
+ properties;
253395
+ optionLabels = {};
253396
+ rows = /* @__PURE__ */ new Map();
253397
+ constructor() {
253398
+ super();
253399
+ const root = this.attachShadow({ mode: "open" });
253400
+ attachControlStyles(root, SLIDE_SHOW_OPTIONS_STYLES);
253401
+ const columns = [document.createElement("div"), document.createElement("div")];
253402
+ for (const column of columns) {
253403
+ column.className = "column";
253404
+ }
253405
+ SLIDE_SHOW_OPTIONS.forEach((option, index) => {
253406
+ const label = document.createElement("label");
253407
+ const checkbox = document.createElement("pptx-ui-checkbox");
253408
+ const text22 = document.createTextNode("");
253409
+ label.append(checkbox, text22);
253410
+ label.addEventListener("click", (event) => {
253411
+ event.preventDefault();
253412
+ if (event.target !== checkbox) {
253413
+ checkbox.click();
253414
+ }
253415
+ });
253416
+ columns[index < 3 ? 0 : 1].append(label);
253417
+ this.rows.set(option.id, { checkbox, text: text22 });
253418
+ checkbox.addEventListener("change", (event) => {
253419
+ event.stopPropagation();
253420
+ const change = slideShowOptionChange(option.id, checkbox.checked);
253421
+ this.sync();
253422
+ if (!this.disabled && !option.unsupported && change) {
253423
+ this.dispatchEvent(
253424
+ new CustomEvent("show-options-change", {
253425
+ detail: change,
253426
+ bubbles: true,
253427
+ composed: true
253428
+ })
253429
+ );
253430
+ }
253431
+ });
253432
+ checkbox.addEventListener("input", (event) => event.stopPropagation());
253433
+ });
253434
+ columns[1].append(document.createElement("slot"));
253435
+ root.append(...columns);
253436
+ }
253437
+ connectedCallback() {
253438
+ this.sync();
253439
+ }
253440
+ attributeChangedCallback() {
253441
+ this.sync();
253442
+ }
253443
+ get presentationProperties() {
253444
+ return this.properties;
253445
+ }
253446
+ set presentationProperties(value) {
253447
+ this.properties = value;
253448
+ this.sync();
253449
+ }
253450
+ get labels() {
253451
+ return this.optionLabels;
253452
+ }
253453
+ set labels(value) {
253454
+ this.optionLabels = value ?? {};
253455
+ this.sync();
253456
+ }
253457
+ get disabled() {
253458
+ return this.hasAttribute("disabled");
253459
+ }
253460
+ set disabled(value) {
253461
+ this.toggleAttribute("disabled", Boolean(value));
253462
+ }
253463
+ sync() {
253464
+ for (const option of SLIDE_SHOW_OPTIONS) {
253465
+ const row = this.rows.get(option.id);
253466
+ const label = this.optionLabels[option.id] ?? option.labelKey;
253467
+ row.text.textContent = label;
253468
+ row.checkbox.setAttribute("aria-label", label);
253469
+ row.checkbox.checked = readSlideShowOption(this.properties, option.id);
253470
+ row.checkbox.disabled = this.disabled || option.unsupported;
253471
+ }
253472
+ }
253473
+ }
253474
+ registry.define("pptx-ui-slide-show-options", SlideShowOptions);
253475
+ }
253476
+ var SUBTITLE_SETTINGS_STYLES = `
253477
+ :host { display: inline-flex; }
253478
+ dialog { box-sizing: border-box; width: min(440px, calc(100vw - 32px)); max-height: calc(100vh - 32px);
253479
+ margin: auto; padding: 24px; border: 1px solid var(--pptx-border, #374151); border-radius: 10px;
253480
+ background: var(--pptx-background, #181b20); color: var(--pptx-foreground, #f9fafb); font: 14px/1.5 system-ui; }
253481
+ dialog::backdrop { background: #0008; }
253482
+ h2 { margin: 0 0 12px; font-size: 18px; } p { margin: 0 0 20px; }
253483
+ label { display: block; margin-bottom: 8px; }
253484
+ pptx-ui-select { display: block; width: 100%; }
253485
+ footer { display: flex; justify-content: flex-end; gap: 8px; margin-top: 24px; }
253486
+ footer button { padding: 8px 16px; min-height: 44px; border: 1px solid var(--pptx-border, #374151);
253487
+ border-radius: 6px; background: var(--pptx-secondary, #252830); color: inherit; font: inherit; cursor: pointer; }
253488
+ footer button:last-child { background: var(--pptx-primary, #6366f1); color: var(--pptx-primary-foreground, #fff); }
253489
+ footer button:focus-visible { outline: 2px solid var(--pptx-ring, #6366f1); outline-offset: 2px; }
253490
+ @media (forced-colors: active) { dialog { background: Canvas; color: CanvasText; } footer button { color: ButtonText; } }
253491
+ `;
253492
+ function definePptxSubtitleSettings(registry) {
253493
+ if (registry.get("pptx-ui-subtitle-settings")) {
253494
+ return;
253495
+ }
253496
+ class SubtitleSettingsElement extends HTMLElement {
253497
+ current = normalizeSubtitleSettings();
253498
+ text = {
253499
+ title: "Subtitle Settings",
253500
+ language: "Spoken language",
253501
+ browserLanguage: "Browser language",
253502
+ description: "",
253503
+ apply: "Apply",
253504
+ cancel: "Cancel"
253505
+ };
253506
+ command;
253507
+ dialog;
253508
+ heading;
253509
+ description;
253510
+ languageLabel;
253511
+ language;
253512
+ apply;
253513
+ cancel;
253514
+ constructor() {
253515
+ super();
253516
+ const root = this.attachShadow({ mode: "open" });
253517
+ attachControlStyles(root, SUBTITLE_SETTINGS_STYLES);
253518
+ this.command = document.createElement("pptx-ui-ribbon-command");
253519
+ this.command.setAttribute("data-ribbon-control", "slideShow.captions.subtitleSettings");
253520
+ this.command.setAttribute("icon", "captions");
253521
+ this.command.setAttribute("compact", "");
253522
+ this.dialog = document.createElement("dialog");
253523
+ this.heading = document.createElement("h2");
253524
+ this.description = document.createElement("p");
253525
+ this.languageLabel = document.createElement("label");
253526
+ this.language = document.createElement("pptx-ui-select");
253527
+ this.language.id = "spoken-language";
253528
+ this.languageLabel.htmlFor = this.language.id;
253529
+ const footer = document.createElement("footer");
253530
+ this.cancel = document.createElement("button");
253531
+ this.cancel.type = "button";
253532
+ this.apply = document.createElement("button");
253533
+ this.apply.type = "button";
253534
+ footer.append(this.cancel, this.apply);
253535
+ this.dialog.append(this.heading, this.description, this.languageLabel, this.language, footer);
253536
+ root.append(this.command, this.dialog);
253537
+ this.command.addEventListener("command-request", () => this.open());
253538
+ this.cancel.addEventListener("click", () => this.close());
253539
+ this.dialog.addEventListener("cancel", (event) => {
253540
+ event.preventDefault();
253541
+ this.close();
253542
+ });
253543
+ this.dialog.addEventListener("keydown", (event) => {
253544
+ event.stopPropagation();
253545
+ if (event.key === "Tab") {
253546
+ const picker = this.language.shadowRoot?.querySelector("button");
253547
+ const controls2 = [
253548
+ ...picker && !picker.disabled ? [picker] : [],
253549
+ this.cancel,
253550
+ this.apply
253551
+ ];
253552
+ const active2 = event.composedPath()[0];
253553
+ const index = controls2.findIndex((control) => control === active2);
253554
+ event.preventDefault();
253555
+ controls2[(index + (event.shiftKey ? controls2.length - 1 : 1)) % controls2.length].focus();
253556
+ }
253557
+ if (event.key === "Escape") {
253558
+ event.preventDefault();
253559
+ this.close();
253560
+ }
253561
+ });
253562
+ this.apply.addEventListener("click", () => {
253563
+ const settings = normalizeSubtitleSettings({ spokenLanguage: this.language.value });
253564
+ this.dispatchEvent(
253565
+ new CustomEvent("subtitle-settings-change", {
253566
+ detail: settings,
253567
+ bubbles: true,
253568
+ composed: true
253569
+ })
253570
+ );
253571
+ this.close();
253572
+ });
253573
+ }
253574
+ get settings() {
253575
+ return { ...this.current };
253576
+ }
253577
+ set settings(value) {
253578
+ this.current = normalizeSubtitleSettings(value);
253579
+ }
253580
+ get labels() {
253581
+ return this.text;
253582
+ }
253583
+ set labels(value) {
253584
+ this.text = { ...this.text, ...value };
253585
+ this.sync();
253586
+ }
253587
+ get languageDisabled() {
253588
+ return this.language.disabled;
253589
+ }
253590
+ set languageDisabled(value) {
253591
+ this.language.disabled = value;
253592
+ }
253593
+ connectedCallback() {
253594
+ this.sync();
253595
+ }
253596
+ disconnectedCallback() {
253597
+ if (this.dialog.open) {
253598
+ this.dialog.close();
253599
+ }
253600
+ }
253601
+ open() {
253602
+ if (this.dialog.open) {
253603
+ return;
253604
+ }
253605
+ this.sync();
253606
+ this.language.value = this.current.spokenLanguage;
253607
+ this.dialog.showModal();
253608
+ this.language.shadowRoot?.querySelector("button")?.focus();
253609
+ }
253610
+ close() {
253611
+ this.dialog.close();
253612
+ this.command.shadowRoot?.querySelector("button")?.focus();
253613
+ }
253614
+ sync() {
253615
+ this.command.setAttribute("label", this.text.title);
253616
+ this.dialog.setAttribute("aria-label", this.text.title);
253617
+ this.heading.textContent = this.text.title;
253618
+ this.description.textContent = this.text.description;
253619
+ this.languageLabel.textContent = this.text.language;
253620
+ this.language.setAttribute("aria-label", this.text.language);
253621
+ this.cancel.textContent = this.text.cancel;
253622
+ this.apply.textContent = this.text.apply;
253623
+ this.language.replaceChildren(
253624
+ ...SUBTITLE_LANGUAGES.map((value) => {
253625
+ const option = document.createElement("option");
253626
+ option.value = value;
253627
+ option.textContent = value === "auto" ? this.text.browserLanguage : subtitleLanguageLabel(value);
253628
+ return option;
253629
+ })
253630
+ );
253631
+ }
253632
+ }
253633
+ registry.define("pptx-ui-subtitle-settings", SubtitleSettingsElement);
253634
+ }
253635
+ var controls = [
253636
+ ["pptx-ui-search", definePptxSearchField],
253637
+ ["pptx-ui-checkbox", definePptxCheckbox],
253638
+ ["pptx-ui-select", definePptxSelect],
253639
+ ["pptx-ui-slide-show-options", definePptxSlideShowOptions],
253640
+ ["pptx-ui-ribbon-command", definePptxRibbonCommand],
253641
+ ["pptx-ui-ribbon-group", definePptxRibbonGroup],
253642
+ ["pptx-ui-ribbon-toggle", definePptxRibbonToggle],
253643
+ ["pptx-ui-subtitle-settings", definePptxSubtitleSettings]
253644
+ ];
253645
+ function registerPptxWebControls() {
253646
+ if (typeof window === "undefined" || !window.customElements) {
253647
+ return;
253648
+ }
253649
+ const registry = window.customElements;
253650
+ assertWebControlContract(
253651
+ registry,
253652
+ controls.map(([name]) => name)
253653
+ );
253654
+ if (!document.getElementById("pptx-ui-control-hosts")) {
253655
+ const style = document.createElement("style");
253656
+ style.id = "pptx-ui-control-hosts";
253657
+ style.textContent = HOST_STYLES;
253658
+ document.head.append(style);
253659
+ }
253660
+ for (const [name, define] of controls) {
253661
+ if (!registry.get(name)) {
253662
+ define(registry);
253663
+ markWebControlContract(registry.get(name));
253664
+ }
253665
+ }
253666
+ }
253667
+ var defaultThemeColors = {
253668
+ background: "#030712",
253669
+ // gray-950
253670
+ foreground: "#f3f4f6",
253671
+ // gray-100
253672
+ card: "#111827",
253673
+ // gray-900
253674
+ cardForeground: "#f3f4f6",
253675
+ // gray-100
253676
+ popover: "#111827",
253677
+ // gray-900
253678
+ popoverForeground: "#f3f4f6",
253679
+ // gray-100
253680
+ primary: "#6366f1",
253681
+ // indigo-500
253682
+ primaryForeground: "#ffffff",
253683
+ // white
253684
+ secondary: "#1f2937",
253685
+ // gray-800
253686
+ secondaryForeground: "#f3f4f6",
253687
+ // gray-100
253688
+ muted: "#1f2937",
253689
+ // gray-800
253690
+ mutedForeground: "#9ca3af",
253691
+ // gray-400
253692
+ accent: "#1f2937",
253693
+ // gray-800
253694
+ accentForeground: "#f3f4f6",
253695
+ // gray-100
253696
+ destructive: "#ef4444",
253697
+ // red-500
253698
+ destructiveForeground: "#ffffff",
253699
+ // white
253700
+ border: "#374151",
253701
+ // gray-700
253702
+ input: "#374151",
253703
+ // gray-700
253704
+ ring: "#6366f1"
253705
+ // indigo-500
253706
+ };
253707
+ var defaultRadius = "0.5rem";
253708
+ var lightThemeColors = {
253709
+ background: "#f8fafc",
253710
+ // slate-50
253711
+ foreground: "#0f172a",
253712
+ // slate-900
253713
+ card: "#ffffff",
253714
+ cardForeground: "#0f172a",
253715
+ // slate-900
253716
+ popover: "#ffffff",
253717
+ popoverForeground: "#0f172a",
253718
+ // slate-900
253719
+ primary: "#4f46e5",
253720
+ // indigo-600
253721
+ primaryForeground: "#ffffff",
253722
+ secondary: "#f1f5f9",
253723
+ // slate-100
253724
+ secondaryForeground: "#0f172a",
253725
+ // slate-900
253726
+ muted: "#f1f5f9",
253727
+ // slate-100
253728
+ mutedForeground: "#64748b",
253729
+ // slate-500
253730
+ accent: "#f1f5f9",
253731
+ // slate-100
253732
+ accentForeground: "#0f172a",
253733
+ // slate-900
253734
+ destructive: "#dc2626",
253735
+ // red-600
253736
+ destructiveForeground: "#ffffff",
253737
+ border: "#e2e8f0",
253738
+ // slate-200
253739
+ input: "#e2e8f0",
253740
+ // slate-200
253741
+ ring: "#4f46e5"
253742
+ // indigo-600
253743
+ };
253744
+ var lightTheme = {
253745
+ colors: lightThemeColors
253746
+ };
253747
+ var COLOR_KEY_TO_CSS = {
253748
+ background: "background",
253749
+ foreground: "foreground",
253750
+ card: "card",
253751
+ cardForeground: "card-foreground",
253752
+ popover: "popover",
253753
+ popoverForeground: "popover-foreground",
253754
+ primary: "primary",
253755
+ primaryForeground: "primary-foreground",
253756
+ secondary: "secondary",
253757
+ secondaryForeground: "secondary-foreground",
253758
+ muted: "muted",
253759
+ mutedForeground: "muted-foreground",
253760
+ accent: "accent",
253761
+ accentForeground: "accent-foreground",
253762
+ destructive: "destructive",
253763
+ destructiveForeground: "destructive-foreground",
253764
+ border: "border",
253765
+ input: "input",
253766
+ ring: "ring"
253767
+ };
253768
+ var DERIVED_COLOR_TOKENS = [
253769
+ { source: "primary", cssSuffix: "inspector-active" },
253770
+ { source: "border", cssSuffix: "inspector-border" }
253771
+ ];
253772
+ function themeToCssVars(theme, omitDefaults = false) {
253773
+ const vars = {};
253774
+ if (!theme) {
253775
+ return vars;
253776
+ }
253777
+ const colors = theme.colors;
253778
+ if (colors) {
253779
+ for (const [key2, cssSuffix] of Object.entries(COLOR_KEY_TO_CSS)) {
253780
+ const value = colors[key2];
253781
+ if (value === void 0) {
253782
+ continue;
253783
+ }
253784
+ if (omitDefaults && value === defaultThemeColors[key2]) {
253785
+ continue;
253786
+ }
253787
+ vars[`--pptx-${cssSuffix}`] = value;
253788
+ vars[`--color-${cssSuffix}`] = value;
253789
+ }
253790
+ for (const { source, cssSuffix } of DERIVED_COLOR_TOKENS) {
253791
+ const value = colors[source];
253792
+ if (value === void 0) {
253793
+ continue;
253794
+ }
253795
+ if (omitDefaults && value === defaultThemeColors[source]) {
253796
+ continue;
253797
+ }
253798
+ vars[`--pptx-${cssSuffix}`] = value;
253799
+ }
253800
+ }
253801
+ if (theme.radius !== void 0) {
253802
+ if (!omitDefaults || theme.radius !== defaultRadius) {
253803
+ vars["--pptx-radius"] = theme.radius;
253804
+ const r = theme.radius;
253805
+ vars["--radius-sm"] = `calc(${r} - 4px)`;
253806
+ vars["--radius-md"] = `calc(${r} - 2px)`;
253807
+ vars["--radius-lg"] = r;
253808
+ vars["--radius-xl"] = `calc(${r} + 4px)`;
253809
+ }
253810
+ }
253811
+ if (theme.cssVars) {
253812
+ for (const [key2, value] of Object.entries(theme.cssVars)) {
253813
+ vars[key2] = value;
253814
+ }
253815
+ }
253816
+ return vars;
253817
+ }
253818
+ function defaultCssVars() {
253819
+ const vars = {};
253820
+ for (const [key2, cssSuffix] of Object.entries(COLOR_KEY_TO_CSS)) {
253821
+ vars[`--pptx-${cssSuffix}`] = defaultThemeColors[key2];
253822
+ }
253823
+ for (const { source, cssSuffix } of DERIVED_COLOR_TOKENS) {
253824
+ vars[`--pptx-${cssSuffix}`] = defaultThemeColors[source];
253825
+ }
253826
+ vars["--pptx-radius"] = defaultRadius;
253827
+ return vars;
253828
+ }
253829
+ var vermilionLightColors = {
253830
+ background: "#fbfaf7",
253831
+ foreground: "#1a1d21",
253832
+ card: "#ffffff",
253833
+ cardForeground: "#1a1d21",
253834
+ popover: "#ffffff",
253835
+ popoverForeground: "#1a1d21",
253836
+ primary: "#c2431f",
253837
+ primaryForeground: "#ffffff",
253838
+ secondary: "#f2efe8",
253839
+ secondaryForeground: "#1a1d21",
253840
+ muted: "#f2efe8",
253841
+ mutedForeground: "#5a626e",
253842
+ accent: "rgba(194, 67, 31, 0.08)",
253843
+ accentForeground: "#1a1d21",
253844
+ destructive: "#dc2626",
253845
+ destructiveForeground: "#ffffff",
253846
+ border: "#e6e2d9",
253847
+ input: "#e6e2d9",
253848
+ ring: "#c2431f"
253849
+ };
253850
+ var vermilionDarkColors = {
253851
+ background: "#0f1113",
253852
+ foreground: "#f0efec",
253853
+ card: "#171a1e",
253854
+ cardForeground: "#f0efec",
253855
+ popover: "#171a1e",
253856
+ popoverForeground: "#f0efec",
253857
+ primary: "#e86a40",
253858
+ primaryForeground: "#ffffff",
253859
+ secondary: "#1f242b",
253860
+ secondaryForeground: "#f0efec",
253861
+ muted: "#1f242b",
253862
+ mutedForeground: "#9aa1ab",
253863
+ accent: "rgba(232, 106, 64, 0.1)",
253864
+ accentForeground: "#f0efec",
253865
+ destructive: "#ef4444",
253866
+ destructiveForeground: "#ffffff",
253867
+ border: "#272c33",
253868
+ input: "#272c33",
253869
+ ring: "#e86a40"
253870
+ };
253871
+ var vermilionRadius = "0.375rem";
253872
+ var vermilionLightTheme = {
253873
+ colors: vermilionLightColors,
253874
+ radius: vermilionRadius
253875
+ };
253876
+ var vermilionDarkTheme = {
253877
+ colors: vermilionDarkColors,
253878
+ radius: vermilionRadius
253879
+ };
253880
+ var THEME_CATALOG = [
253881
+ { key: "default", labelKey: "pptx.settings.theme.default", theme: void 0 },
253882
+ { key: "light", labelKey: "pptx.settings.theme.light", theme: lightTheme },
253883
+ {
253884
+ key: "vermilionLight",
253885
+ labelKey: "pptx.settings.theme.vermilionLight",
253886
+ theme: vermilionLightTheme
253887
+ },
253888
+ {
253889
+ key: "vermilionDark",
253890
+ labelKey: "pptx.settings.theme.vermilionDark",
253891
+ theme: vermilionDarkTheme
253892
+ }
253893
+ ];
253894
+ function resolveThemeCatalogEntry(key2, catalog = THEME_CATALOG) {
253895
+ return catalog.find((entry5) => entry5.key === key2)?.theme;
253896
+ }
253897
+ function corePreset(id) {
253898
+ const preset22 = THEME_PRESETS.find((p) => p.id === id);
253899
+ if (!preset22) {
253900
+ throw new Error(`theme-gallery-presets: core THEME_PRESETS is missing "${id}"`);
253901
+ }
253902
+ return preset22;
253903
+ }
253904
+ var WISP_PRESET = {
253905
+ id: "wisp",
253906
+ name: "Wisp",
253907
+ colorScheme: {
253908
+ dk1: "#000000",
253909
+ lt1: "#FFFFFF",
253910
+ dk2: "#46393B",
253911
+ lt2: "#E8DCD8",
253912
+ accent1: "#A53010",
253913
+ accent2: "#DE7E18",
253914
+ accent3: "#9F8351",
253915
+ accent4: "#728653",
253916
+ accent5: "#92AA4C",
253917
+ accent6: "#6AAC91",
253918
+ hlink: "#FB4F14",
253919
+ folHlink: "#E25839"
253920
+ },
253921
+ fontScheme: {
253922
+ majorFont: { latin: "Century Gothic" },
253923
+ minorFont: { latin: "Century Gothic" }
253924
+ }
253925
+ };
253926
+ var BERLIN_PRESET = {
253927
+ id: "berlin",
253928
+ name: "Berlin",
253929
+ colorScheme: {
253930
+ dk1: "#000000",
253931
+ lt1: "#FFFFFF",
253932
+ dk2: "#3E5C61",
253933
+ lt2: "#D5E0D0",
253934
+ accent1: "#F09415",
253935
+ accent2: "#C1B56B",
253936
+ accent3: "#89C2A3",
253937
+ accent4: "#729BBE",
253938
+ accent5: "#9A90C2",
253939
+ accent6: "#BE8DBE",
253940
+ hlink: "#25A0DA",
253941
+ folHlink: "#FF7F00"
253942
+ },
253943
+ fontScheme: {
253944
+ majorFont: { latin: "Trebuchet MS" },
253945
+ minorFont: { latin: "Trebuchet MS" }
253946
+ }
253947
+ };
253948
+ var SLICE_PRESET = {
253949
+ id: "slice",
253950
+ name: "Slice",
253951
+ colorScheme: {
253952
+ dk1: "#000000",
253953
+ lt1: "#FFFFFF",
253954
+ dk2: "#2E3B4C",
253955
+ lt2: "#C7CDD3",
253956
+ accent1: "#E2751D",
253957
+ accent2: "#C53B23",
253958
+ accent3: "#A13D69",
253959
+ accent4: "#58599E",
253960
+ accent5: "#36749D",
253961
+ accent6: "#4EA39A",
253962
+ hlink: "#FD6B32",
253963
+ folHlink: "#D14D0F"
253964
+ },
253965
+ fontScheme: {
253966
+ majorFont: { latin: "Century Gothic" },
253967
+ minorFont: { latin: "Century Gothic" }
253968
+ }
253969
+ };
253970
+ var DIVIDEND_PRESET = {
253971
+ id: "dividend",
253972
+ name: "Dividend",
253973
+ colorScheme: {
253974
+ dk1: "#000000",
253975
+ lt1: "#FFFFFF",
253976
+ dk2: "#3D3D3D",
253977
+ lt2: "#E1E1E1",
253978
+ accent1: "#4D1434",
253979
+ accent2: "#903163",
253980
+ accent3: "#B2324B",
253981
+ accent4: "#D34817",
253982
+ accent5: "#E8971C",
253983
+ accent6: "#FDCB00",
253984
+ hlink: "#A03068",
253985
+ folHlink: "#C34882"
253986
+ },
253987
+ fontScheme: {
253988
+ majorFont: { latin: "Gill Sans MT" },
253989
+ minorFont: { latin: "Gill Sans MT" }
253990
+ }
253991
+ };
253992
+ [
253993
+ corePreset("office"),
253994
+ corePreset("facet"),
253995
+ corePreset("integral"),
253996
+ corePreset("ion"),
253997
+ corePreset("retrospect"),
253998
+ corePreset("organic"),
253999
+ WISP_PRESET,
254000
+ BERLIN_PRESET,
254001
+ SLICE_PRESET,
254002
+ DIVIDEND_PRESET
254003
+ ];
254004
+ function createPresentationLoadResources(handler) {
254005
+ const blobUrls = [];
254006
+ let committed = false;
254007
+ let released = false;
254008
+ return {
254009
+ blobUrls,
254010
+ /** The live viewer now owns the handler and media URLs. */
254011
+ commit() {
254012
+ committed = true;
254013
+ },
254014
+ /** Call in finally, after pending asset reads have settled. */
254015
+ releaseIfUncommitted() {
254016
+ if (committed || released) {
254017
+ return;
254018
+ }
254019
+ released = true;
254020
+ handler.dispose();
254021
+ for (const url of blobUrls) {
254022
+ if (url.startsWith("blob:")) {
254023
+ URL.revokeObjectURL(url);
254024
+ }
254025
+ }
254026
+ }
254027
+ };
254028
+ }
254029
+ function walkAndPatchElements(elements, patch) {
254030
+ let mutated = false;
254031
+ const next = elements.map((el) => {
254032
+ let updated = patch(el);
254033
+ if (updated.type === "group" && updated.children?.length) {
254034
+ const newChildren = walkAndPatchElements(updated.children, patch);
254035
+ if (newChildren !== updated.children) {
254036
+ updated = { ...updated, children: newChildren };
254037
+ }
254038
+ }
254039
+ if (updated !== el) {
254040
+ mutated = true;
254041
+ }
254042
+ return updated;
254043
+ });
254044
+ return mutated ? next : elements;
254045
+ }
254046
+ function applyImagePathPatches(elements, resolvedMap, refs) {
254047
+ const elementPatches = /* @__PURE__ */ new Map();
254048
+ for (const ref of refs) {
254049
+ const url = resolvedMap.get(ref.path);
254050
+ if (!url) {
254051
+ continue;
254052
+ }
254053
+ const existing = elementPatches.get(ref.element.id) ?? {};
254054
+ existing[ref.field] = url;
254055
+ elementPatches.set(ref.element.id, existing);
254056
+ }
254057
+ if (elementPatches.size === 0) {
254058
+ return elements;
254059
+ }
254060
+ return walkAndPatchElements(elements, (el) => {
254061
+ const patch = elementPatches.get(el.id);
254062
+ return patch ? { ...el, ...patch } : el;
254063
+ });
254064
+ }
254065
+ function isExternalUrl(path) {
254066
+ return path.startsWith("http://") || path.startsWith("https://") || path.startsWith("data:") || path.startsWith("blob:");
254067
+ }
254068
+ function collectMediaElements(elements, collector) {
254069
+ for (const element of elements) {
254070
+ if (element.type === "media") {
254071
+ collector.push(element);
254072
+ continue;
254073
+ }
254074
+ if (element.type === "group" && element.children?.length) {
254075
+ collectMediaElements(element.children, collector);
254076
+ }
254077
+ }
254078
+ }
254079
+ function collectImagePaths(slides) {
254080
+ const paths = /* @__PURE__ */ new Set();
254081
+ const refs = [];
254082
+ const walkElements = (elements) => {
254083
+ for (const el of elements) {
254084
+ if (el.type === "picture" || el.type === "image") {
254085
+ const pic = el;
254086
+ if (pic.imagePath && !pic.imageData && !isExternalUrl(pic.imagePath)) {
254087
+ paths.add(pic.imagePath);
254088
+ refs.push({ element: el, field: "imageData", path: pic.imagePath });
254089
+ }
254090
+ if (pic.svgPath && !pic.svgData && !isExternalUrl(pic.svgPath)) {
254091
+ paths.add(pic.svgPath);
254092
+ refs.push({ element: el, field: "svgData", path: pic.svgPath });
254093
+ }
254094
+ }
254095
+ if (el.type === "media") {
254096
+ const media = el;
254097
+ if (media.posterFramePath && !media.posterFrameData && !isExternalUrl(media.posterFramePath)) {
254098
+ paths.add(media.posterFramePath);
254099
+ refs.push({
254100
+ element: el,
254101
+ field: "posterFrameData",
254102
+ path: media.posterFramePath
254103
+ });
254104
+ }
254105
+ }
254106
+ if (el.type === "model3d") {
254107
+ const model = el;
254108
+ if (model.modelPath && !model.modelData && !isExternalUrl(model.modelPath)) {
254109
+ paths.add(model.modelPath);
254110
+ refs.push({ element: el, field: "modelData", path: model.modelPath });
254111
+ }
254112
+ const posterNeedsResolution = model.posterImage ? !isExternalUrl(model.posterImage) : !model.imageData;
254113
+ if (model.imagePath && posterNeedsResolution && !isExternalUrl(model.imagePath)) {
254114
+ paths.add(model.imagePath);
254115
+ refs.push({ element: el, field: "posterImage", path: model.imagePath });
254116
+ }
254117
+ }
254118
+ if (el.type === "group" && el.children?.length) {
254119
+ walkElements(el.children);
254120
+ }
254121
+ }
254122
+ };
254123
+ for (const slide of slides) {
254124
+ walkElements(slide.elements);
254125
+ }
254126
+ return { paths, refs };
254127
+ }
254128
+ function collectTableCellImagePaths(slides) {
254129
+ const paths = /* @__PURE__ */ new Set();
254130
+ const refs = [];
254131
+ const walkElements = (elements) => {
254132
+ for (const el of elements) {
254133
+ if (el.type === "table") {
254134
+ const rows = el.tableData?.rows ?? [];
254135
+ rows.forEach((row, rowIndex) => {
254136
+ row.cells.forEach((cell, cellIndex) => {
254137
+ const path = cell.style?.backgroundImageFillPath;
254138
+ if (path && !cell.style?.backgroundImageFillData && !isExternalUrl(path)) {
254139
+ paths.add(path);
254140
+ refs.push({ element: el, rowIndex, cellIndex, path });
254141
+ }
254142
+ });
254143
+ });
254144
+ }
254145
+ if (el.type === "group" && el.children?.length) {
254146
+ walkElements(el.children);
254147
+ }
254148
+ }
254149
+ };
254150
+ for (const slide of slides) {
254151
+ walkElements(slide.elements);
254152
+ }
254153
+ return { paths, refs };
254154
+ }
254155
+ function applyTableCellImagePatches(elements, resolvedMap, refs) {
254156
+ const patchesByElementId = /* @__PURE__ */ new Map();
254157
+ for (const ref of refs) {
254158
+ const url = resolvedMap.get(ref.path);
254159
+ if (!url) {
254160
+ continue;
254161
+ }
254162
+ const list2 = patchesByElementId.get(ref.element.id) ?? [];
254163
+ list2.push({ rowIndex: ref.rowIndex, cellIndex: ref.cellIndex, url });
254164
+ patchesByElementId.set(ref.element.id, list2);
254165
+ }
254166
+ if (patchesByElementId.size === 0) {
254167
+ return elements;
254168
+ }
254169
+ return walkAndPatchElements(elements, (el) => {
254170
+ const cellPatches = patchesByElementId.get(el.id);
254171
+ if (!cellPatches || el.type !== "table") {
254172
+ return el;
254173
+ }
254174
+ const table2 = el;
254175
+ const tableData = table2.tableData;
254176
+ if (!tableData) {
254177
+ return el;
254178
+ }
254179
+ const newRows = tableData.rows.map((row, rowIndex) => {
254180
+ const rowPatches = cellPatches.filter((p) => p.rowIndex === rowIndex);
254181
+ if (rowPatches.length === 0) {
254182
+ return row;
254183
+ }
254184
+ const newCells = row.cells.map((cell, cellIndex) => {
254185
+ const patch = rowPatches.find((p) => p.cellIndex === cellIndex);
254186
+ if (!patch || !cell.style) {
254187
+ return cell;
254188
+ }
254189
+ return {
254190
+ ...cell,
254191
+ style: { ...cell.style, backgroundImageFillData: patch.url }
254192
+ };
254193
+ });
254194
+ return { ...row, cells: newCells };
254195
+ });
254196
+ return { ...table2, tableData: { ...tableData, rows: newRows } };
254197
+ });
254198
+ }
254199
+ function buildInitialGuides(presentationGuides, firstSlideGuides) {
254200
+ const guides = [];
254201
+ if (presentationGuides) {
254202
+ for (const g2 of presentationGuides) {
254203
+ guides.push({
254204
+ id: g2.id,
254205
+ axis: g2.orientation === "horz" ? "h" : "v",
254206
+ position: guideEmuToPx(g2.positionEmu)
254207
+ });
254208
+ }
254209
+ }
254210
+ if (firstSlideGuides) {
254211
+ for (const g2 of firstSlideGuides) {
254212
+ guides.push({
254213
+ id: g2.id,
254214
+ axis: g2.orientation === "horz" ? "h" : "v",
254215
+ position: guideEmuToPx(g2.positionEmu)
254216
+ });
254217
+ }
254218
+ }
254219
+ return guides;
254220
+ }
254221
+ async function resolveMediaElementSource(mediaElement, handler) {
254222
+ const mediaPath = mediaElement.mediaPath;
254223
+ if (!mediaPath) {
254224
+ return { mediaPath: void 0, url: void 0, isBlobUrl: false, missing: true };
254225
+ }
254226
+ if (isExternalUrl(mediaPath)) {
254227
+ return { mediaPath, url: mediaPath, isBlobUrl: false, missing: false };
254228
+ }
254229
+ try {
254230
+ const isAudioVideo = mediaElement.mediaType === "audio" || mediaElement.mediaType === "video";
254231
+ if (isAudioVideo) {
254232
+ const arrayBuffer = await handler.getMediaArrayBuffer(mediaPath);
254233
+ if (!arrayBuffer) {
254234
+ return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
254235
+ }
254236
+ const mimeType = mediaElement.mediaMimeType || "application/octet-stream";
254237
+ const blobUrl = URL.createObjectURL(new Blob([arrayBuffer], { type: mimeType }));
254238
+ return { mediaPath, url: blobUrl, isBlobUrl: true, missing: false };
254239
+ }
254240
+ const dataUrl = await handler.getImageData(mediaPath);
254241
+ if (!dataUrl) {
254242
+ return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
254243
+ }
254244
+ return { mediaPath, url: dataUrl, isBlobUrl: false, missing: false };
254245
+ } catch {
254246
+ return { mediaPath, url: void 0, isBlobUrl: false, missing: true };
254247
+ }
254248
+ }
254249
+ var TABLE_STYLE_FILL_KEYS = [
254250
+ "wholeTblFill",
254251
+ "band1HFill",
254252
+ "band2HFill",
254253
+ "band1VFill",
254254
+ "band2VFill",
254255
+ "lastColFill",
254256
+ "firstColFill",
254257
+ "lastRowFill",
254258
+ "seCellFill",
254259
+ "swCellFill",
254260
+ "firstRowFill",
254261
+ "neCellFill",
254262
+ "nwCellFill"
254263
+ ];
254264
+ function isExternalUrl2(path) {
254265
+ return path.startsWith("http://") || path.startsWith("https://") || path.startsWith("data:") || path.startsWith("blob:");
254266
+ }
254267
+ function collectTableStyleImagePaths(tableStyleMap) {
254268
+ const paths = /* @__PURE__ */ new Set();
254269
+ const refs = [];
254270
+ if (!tableStyleMap) {
254271
+ return { paths, refs };
254272
+ }
254273
+ for (const [styleId, entry5] of Object.entries(tableStyleMap)) {
254274
+ for (const fillKey of TABLE_STYLE_FILL_KEYS) {
254275
+ const fill = entry5[fillKey];
254276
+ const path = fill?.image?.path;
254277
+ if (path && !fill?.image?.data && !isExternalUrl2(path)) {
254278
+ paths.add(path);
254279
+ refs.push({ styleId, fillKey, path });
254280
+ }
254281
+ }
254282
+ }
254283
+ return { paths, refs };
254284
+ }
254285
+ function applyTableStyleImagePatches(tableStyleMap, resolvedMap, refs) {
254286
+ const patchesByStyleId = /* @__PURE__ */ new Map();
254287
+ for (const ref of refs) {
254288
+ const url = resolvedMap.get(ref.path);
254289
+ if (!url) {
254290
+ continue;
254291
+ }
254292
+ const list2 = patchesByStyleId.get(ref.styleId) ?? [];
254293
+ list2.push({ fillKey: ref.fillKey, url });
254294
+ patchesByStyleId.set(ref.styleId, list2);
254295
+ }
254296
+ if (patchesByStyleId.size === 0) {
254297
+ return tableStyleMap;
254298
+ }
254299
+ const next = { ...tableStyleMap };
254300
+ for (const [styleId, patches] of patchesByStyleId) {
254301
+ const entry5 = next[styleId];
254302
+ if (!entry5) {
254303
+ continue;
254304
+ }
254305
+ const patchedEntry = { ...entry5 };
254306
+ for (const { fillKey, url } of patches) {
254307
+ const fill = patchedEntry[fillKey];
254308
+ if (!fill?.image) {
254309
+ continue;
254310
+ }
254311
+ patchedEntry[fillKey] = { ...fill, image: { ...fill.image, data: url } };
254312
+ }
254313
+ next[styleId] = patchedEntry;
254314
+ }
254315
+ return next;
254316
+ }
254317
+ function collectTextFillBlipPaths(slides) {
254318
+ const paths = /* @__PURE__ */ new Set();
254319
+ const refs = [];
254320
+ const walkElements = (elements) => {
254321
+ for (const el of elements) {
254322
+ if (hasTextProperties(el) && el.textSegments) {
254323
+ el.textSegments.forEach((segment, segmentIndex) => {
254324
+ const path = segment.style?.textFillBlipUrl;
254325
+ if (path && !isExternalUrl(path)) {
254326
+ paths.add(path);
254327
+ refs.push({ element: el, segmentIndex, path });
254328
+ }
254329
+ });
254330
+ }
254331
+ if (el.type === "group" && el.children?.length) {
254332
+ walkElements(el.children);
254333
+ }
254334
+ }
254335
+ };
254336
+ for (const slide of slides) {
254337
+ walkElements(slide.elements);
254338
+ }
254339
+ return { paths, refs };
254340
+ }
254341
+ function applyTextFillBlipPatches(elements, resolvedMap, refs) {
254342
+ const patchesByElementId = /* @__PURE__ */ new Map();
254343
+ for (const ref of refs) {
254344
+ const url = resolvedMap.get(ref.path);
254345
+ if (!url) {
254346
+ continue;
254347
+ }
254348
+ const list2 = patchesByElementId.get(ref.element.id) ?? [];
254349
+ list2.push({ segmentIndex: ref.segmentIndex, url });
254350
+ patchesByElementId.set(ref.element.id, list2);
254351
+ }
254352
+ if (patchesByElementId.size === 0) {
254353
+ return elements;
254354
+ }
254355
+ return walkAndPatchElements(elements, (el) => {
254356
+ const segmentPatches = patchesByElementId.get(el.id);
254357
+ if (!segmentPatches || !hasTextProperties(el) || !el.textSegments) {
254358
+ return el;
254359
+ }
254360
+ const newSegments = el.textSegments.map((segment, segmentIndex) => {
254361
+ const patch = segmentPatches.find((p) => p.segmentIndex === segmentIndex);
254362
+ if (!patch || !segment.style) {
254363
+ return segment;
254364
+ }
254365
+ return { ...segment, style: { ...segment.style, textFillBlipUrl: patch.url } };
254366
+ });
254367
+ return { ...el, textSegments: newSegments };
254368
+ });
254369
+ }
254370
+ async function resolveTableCellImageUrls(slides, getImageData) {
254371
+ const { paths, refs } = collectTableCellImagePaths(slides);
254372
+ if (paths.size === 0) {
254373
+ return slides;
254374
+ }
254375
+ const resolvedMap = /* @__PURE__ */ new Map();
254376
+ await Promise.all(
254377
+ Array.from(paths).map(async (path) => {
254378
+ try {
254379
+ const url = await getImageData(path);
254380
+ if (url) {
254381
+ resolvedMap.set(path, url);
254382
+ }
254383
+ } catch {
254384
+ }
254385
+ })
254386
+ );
254387
+ if (resolvedMap.size === 0) {
254388
+ return slides;
254389
+ }
254390
+ return slides.map((slide) => {
254391
+ const newElements = applyTableCellImagePatches(slide.elements, resolvedMap, refs);
254392
+ return newElements === slide.elements ? slide : { ...slide, elements: newElements };
254393
+ });
254394
+ }
254395
+ async function resolveTableStyleImageUrls(tableStyleMap, getImageData) {
254396
+ const { paths, refs } = collectTableStyleImagePaths(tableStyleMap);
254397
+ if (paths.size === 0 || !tableStyleMap) {
254398
+ return tableStyleMap;
254399
+ }
254400
+ const resolvedMap = /* @__PURE__ */ new Map();
254401
+ await Promise.all(
254402
+ Array.from(paths).map(async (path) => {
254403
+ try {
254404
+ const url = await getImageData(path);
254405
+ if (url) {
254406
+ resolvedMap.set(path, url);
254407
+ }
254408
+ } catch {
254409
+ }
254410
+ })
254411
+ );
254412
+ if (resolvedMap.size === 0) {
254413
+ return tableStyleMap;
254414
+ }
254415
+ return applyTableStyleImagePatches(tableStyleMap, resolvedMap, refs);
254416
+ }
254417
+ async function resolveTextFillBlipUrls(slides, getImageData) {
254418
+ const { paths, refs } = collectTextFillBlipPaths(slides);
254419
+ if (paths.size === 0) {
254420
+ return slides;
254421
+ }
254422
+ const resolvedMap = /* @__PURE__ */ new Map();
254423
+ await Promise.all(
254424
+ Array.from(paths).map(async (path) => {
254425
+ try {
254426
+ const url = await getImageData(path);
254427
+ if (url) {
254428
+ resolvedMap.set(path, url);
254429
+ }
254430
+ } catch {
254431
+ }
254432
+ })
254433
+ );
254434
+ if (resolvedMap.size === 0) {
254435
+ return slides;
254436
+ }
254437
+ return slides.map((slide) => {
254438
+ const newElements = applyTextFillBlipPatches(slide.elements, resolvedMap, refs);
254439
+ return newElements === slide.elements ? slide : { ...slide, elements: newElements };
254440
+ });
254441
+ }
254442
+ init_constants2();
253285
254443
  function isChart3DViewEnabled(flags, chartType) {
253286
254444
  if (!flags || !chartType) {
253287
254445
  return false;
@@ -255810,4 +256968,4 @@ registerPptxWebControls();
255810
256968
  * `<p:extLst>` (optional)
255811
256969
  */
255812
256970
 
255813
- export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ANIMATION_DIRECTION_LABEL_KEYS, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_BACK_CLASSES, BACKSTAGE_CARD_IDS, BACKSTAGE_NAV, BACKSTAGE_NAV_CLASSES, BACKSTAGE_PAGE_IDS, BACKSTAGE_TEMPLATES, BAR3D_SHAPE_OPTIONS, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CANVAS_CONTEXT_MENU_COMMAND_IDS, 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, CONTEXTUAL_TAB_GROUPS, CROP_ASPECT_GROUP_LABEL_KEYS, CROP_ASPECT_LABEL_KEY, CROP_ASPECT_PRESETS, CROP_FILL_LABEL_KEY, CROP_FIT_LABEL_KEY, CROP_HANDLE_ARIA_KEY, CROP_LABEL_KEY, 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, DUOTONE_PRESETS, EASE, EDITOR_SHORTCUT_ACTION_IDS, EDIT_POINTS_STYLE, EDIT_POINTS_TARGET_ATTR, EFFECT_SOUND_CATALOGUE, ELEMENT_ACTION_TYPE_OPTIONS, ELEMENT_CONTEXT_MENU_COMMAND_IDS, EMPHASIS_PRESET_VALUES, EMPTY_RESOLVED_CUSTOMIZATION, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPANDED_MAX_HEIGHT, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EditPointsSession, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, FIXED_TAB_GALLERIES, FREEFORM_TOOL_IDS, FREEFORM_TOOL_LABEL_KEYS, FreeformToolSession, 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, MERGE_SHAPES_HINT_KEY, MERGE_SHAPES_LABEL_KEY, MERGE_SHAPES_MENU_ITEMS, 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, OPTIONS_PAGE_IDS, OPTIONS_SECTION_IDS, OPTIONS_SETTING_IDS, 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_CONTEXTUAL_TAB_ATTR, RIBBON_CONTROL_ATTR, RIBBON_GALLERY_ATTR, RIBBON_GALLERY_ITEM_ATTR, RIBBON_GALLERY_POPUP_ATTR, RIBBON_GROUP_ATTR, RIBBON_SCOPE_ATTR, RIBBON_SHAPE_SWATCHES, RIBBON_TAB_IDS, 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_BUTTON_IDS, 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_DIALOG_IDS, VIEWER_EXPORT_FORMAT_IDS, VIEWER_FEATURE_IDS, VIEWER_OPTIONS_TABS, VIEWER_PANEL_IDS, 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, applyMergeShapesPlan, applyMotionPathPreset, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, applyOleSheetCellEdit, applyOutlineEdit, applyPasteSpecialFormat, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyRibbonGalleryItem, applyTableStyleDelete, applyTableStyleFieldEdit, applyTableStyleMapChange, applyTableStylePreset, applyTextStyleUpdate, applyThemeOverrideToSlide, applyThemeToData, applyTransitionSoundFile, applyTransitionStockSound, applyUnderlineVariant, assertElementUpdateTarget, attachCollaborationInlineEditor, attachEditorImagePaste, attachInlineListController, attachOverlayKeyboard, attachPresentationVisibilityPause, attachRotateHandlePlacement, authorConnectorBetweenSites, authoredLetterSpacingPx, autosaveSnapshotMark, availableQuickAccessCommands, backstageCardsFor, bar3DShapePatch, beginChartMarkDrag, beginChartValueDrag, beginCropDrag, beginShapeAdjustment, beginZoomExcursion, bindInlineListParagraph, bindInlineListRun, borrowExternalCollaborationAwareness, bringForward, bringToFront, build3DExtrusionData, buildActiveSessionUsers, buildAnimationTimelineBars, buildAnimationTimelineRows, buildBarActions, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildCanvasContextMenuEntries, buildChartMarkDragGeometry, buildChartQuickActionsDescriptor, buildChartViewModel, buildChromeStyle, buildCollaborationShareUrl, buildCommentMarkers, buildContentPartStrokes, buildContextMenuEntries, buildCreateCollaborationConfig, buildCropOverlay, 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, buildRibbonGallery, buildRunProgramNotice, buildRunTabLines, buildSaveSlides, buildSlidePaneContextMenuEntries, 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, canCropElement, canDrillDown, canEditElementPoints, canGoNext, canGoPrevious, canGroupSelection, canInteractWithElement, canMergeShapes, canRemoveTopLevelNode, canSetStrokeWidth, canUngroupSelection, canUseClipboard, cancelBuildReveal, cancelCropUpdate, canvasToJpegData, cellRunStyle, cellStyleToCss, centeredSvgTextLines, chartDataLabelsTogglePatch, chartGridlinesPatch, chartGridlinesState, chartPartToAttrs, chartPreserveAspectRatio, checkModifyPassword, clampCropValue, clampFlyoutPosition, clampGifDimensions, clampNotesFontSize, clampOptionNumber, clampPercent2, clampSorterZoom, clampTransitionNumber, clampZoomScale, classifyExtraConnections, classifyMediaType, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearPlaybackTimers, clearStoredViewerPrefs, clearTransitionSound, clientToSlidePoint, 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, contextualTabLabelKey, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createActiveAnimationGroup, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createCustomizationController, 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, cropFill, cropFit, cropModeKeyAction, cropSessionChanged, cropToAspectRatio, cursorForTool, customGeometryPathsToSvgSubpaths, customizeBackstageCards, customizeBackstageNav, customizeCanvasContextMenuEntries, customizeContextMenuEntries, customizeOptionsTabs, cycleSelectableElement, defaultCssVars, defaultRadius, defaultThemeColors, defineThreeViewElement, deleteAutosaveSnapshot, deleteSection, deleteTableStyleFromMap, deleteTagFromCollections, demote, deriveSlideFieldContext, deriveViewportBreakpoints, describeCollaborationShellState, describeFontEmbedding, describeSmartArtBounds, describeTableStyleEditor, detectOrientation, detectTouchDevice, directionValuesFor, discardAutosaveRecovery, distributeElements, downloadBlob, downloadDataUrl, dragCropHandle, editCommentInList, effectiveDirection, effectiveTimingCurve, 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, followingText, forgetSessionDeck, formatAxisValue, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, galleryHasItems, galleryItemLabel, 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, 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, inlineGalleryItems, inlineListBodyText, insertCommentMention, insertTableElementColumn, insertTableElementRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isBulletMarkerSegment, isCalloutShape, isCellInRect, isCurrentLayout, isDialogAvailable, isDrawingToolVisible, isEditPointsEnabled, isEditableMotionPath, isEditableTextElement, isEditorControlTarget, isEditorTextInputTarget, isElementActionable, isElementLocked, isElementRendered, isExportAbortError, isFeatureEnabled, isHeaderFooterDateTextVisible, isHeaderFooterFooterTextVisible, isHeaderFooterHeaderTextVisible, isHollowShapeElement, isImageLikeElement, isImageTiled, isInkElement, isKeyboardOpen, isLegacyBinaryPresentation, isLinkedTextBox, isMediaFullscreenActive, isMixedContentBlocked, isMobileViewport, isOptionsPageVisible, isPanelVisible, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isSeriesUsingSecondaryAxis, isStrokeOnlyPresetElement, isSupportedPresentationFile, isTemplateElementId3 as isTemplateElementId, isUrlSafe, isWedgeCalloutPresetShape, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, listChartUserShapeRows, listMediaBookmarkOptions, loadAudienceContent, loadSessionDeck, lockResizeAspect, makeCloneId, makeSlideId, mapCustomizedEditorKey, mapEditingWheel, mapInlineTextFormatKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mapSlideShowStartKey, mapSlideSorterKey, masterViewBackgroundColor, masterViewCrudActions, masterViewCrudFailureKey, masterViewElements, masterViewPseudoSlide, matchCommentMentionAuthors, mayLeaveSlideShow, measurePreviewGeometry, measureSvgViewportRect, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, mediaTrimEndMsFromSeconds, mediaTrimEndSeconds, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, modelDataToBlobUrl, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, mruColorsPatch, nestedTextDecorationStyle, newTableElement, nextPresentedSlide, nextShowSlideIndex, nextToggleValue, normalizeHexColor2 as normalizeHexColor, normalizeStrokeDashType, normalizeTableStyleGuid, notesSegmentsToSpans, observeElementHeight, observeExternalCollaborationReadiness, observeExternalCollaborationSession, observeYDocSlides, oleActionsVisible, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPendingPrintWindow, openPptxFile, openReadingView, openUrlInNewTab, overlayInlineTextSnapshot, overlayMasterViewInlineSnapshot, overlayPointerInput, paintedElementSize, paintedStrokeWidth, panCropImage, paragraphsToSegments, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, parseSegmentsFromRichEditor, partitionTemplateElements, patchChartData, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, placeTileOnPage, placeholderPromptDescriptor, planMergeShapes, playAnimationRibbonPreview, playFeedbackSound, playGroup, playSlideTransitionPreview, pptxActionToElementAction, prepareElementForInsertion, prepareElementUpdateBatch, prepareHtml2CanvasClone, 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, resolveActiveRibbonTab, resolveAudienceScreenPlacement, resolveAuthoredCustomShowId, resolveAuthoredSlideRange, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveAutosaveActivation, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, resolveChartKind, resolveChartThreeViewSpec, resolveCollaborationShellEditability, resolveCollaborationShellState, resolveConnectorEndpointUpdate, resolveDefaultFontFamily, resolveDefaultPrintSettings, resolveDirection, resolveDirection8, resolveDisplayedChartType, resolveEditPointsAvailability, resolveEffectiveHiddenActions, 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, resolveSlidePaneClick, resolveSlideSizeSelection, resolveSlideTransition, resolveSmartArtThreeViewSpec, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTemplateBackgroundRows, resolveTextFillBlipUrls, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransitionSoundAction, resolveTransportForServerUrl, resolveViewerAddinRows, resolveViewportFitOptions, resolveWheelSpokeCount, resolveZoomNavigationTarget, restoreFilteredSeries, restoreInlineListBodySelection, restoreSegmentSelection, restoreSessionDeck, ribbonCustomizationCss, ribbonTransitionUpdates, rulerDragToGuidePosition, runPresentationAction, runProgramNoticeStackStyle, safeOpenUrl, sanitizeColor, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveDeckWithPassword, saveViewerProfile, savedPresentationFileName, scaleFontSizeForAutoFit, scaleSlidesForSizeChange, scanAvailableFontFamilies, scheduleAutoAdvanceChain, scheduleMediaTrimAndFade, schemaLabel, scopeLayoutOptionsToSlide, scrollInspectorSectionIntoView, seedRecentColors, segmentFrameCount, segmentStyleToCss, segmentsToEditorHtml, segmentsToParagraphs, segmentsToPlainText, selectGoogleWebfontFamilies, selectedBookmarkOptionValue, 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, setTrigger, setTriggerBookmark, 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, splitEastAsianBreaks, splitRunByScriptFont, splitRunForMetrics, splitWordsForUnderline, splitsUnderlineIntoWords, startCropSession, stepFontSizePt, stepPresenterZoom, stopAllPersistentAudio, stopCaptureStream, storeAudienceContent, stripUnderlineDecoration, strokeOutlineViewBox, strokeWidthOf, styleShadowFilter, subscribeBarFacePicturePixelSamples, substituteFieldText, surfaceWireframePatch, svgGradientFillRef, svgLineCap, swapPresentationWindows, switchSmartArtLayout, syncGoogleWebfontStylesheet, tableCellCss, tableContainerCss, tableStyleAssignmentUpdate, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, textFontSizePtToPx, textFontSizePxToPt, themeColorLabel, themeColorSchemesEqual, themeColorSwatchRows, themeSwatchCommit, themeToCssVars, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toElementAxes, 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, visibleContextualTabs, visibleTemplateElements, warpPreviewPath, withChartTitle, withChartUserShapeAdded, withChartUserShapeGroupChildAdded, withChartUserShapeRowChartBoxUpdated, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRemoved, withChartUserShapeRowRotationUpdated, withChartUserShapeRowTextUpdated, withChartUserShapeRowUpdated, withConnectorEndpointUpdate, withFrameSlides, withInlineListDecorationDefaults, withSlideSizeOrientation, withSlidesPerPage, writeStoredViewerPrefs, xmlText };
256971
+ export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ANIMATION_DIRECTION_LABEL_KEYS, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_BACK_CLASSES, BACKSTAGE_CARD_IDS, BACKSTAGE_NAV, BACKSTAGE_NAV_CLASSES, BACKSTAGE_PAGE_IDS, BACKSTAGE_TEMPLATES, BAR3D_SHAPE_OPTIONS, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CANVAS_CONTEXT_MENU_COMMAND_IDS, 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, CONTEXTUAL_TAB_GROUPS, CROP_ASPECT_GROUP_LABEL_KEYS, CROP_ASPECT_LABEL_KEY, CROP_ASPECT_PRESETS, CROP_FILL_LABEL_KEY, CROP_FIT_LABEL_KEY, CROP_HANDLE_ARIA_KEY, CROP_LABEL_KEY, 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, DUOTONE_PRESETS, EASE, EDITOR_SHORTCUT_ACTION_IDS, EDIT_POINTS_STYLE, EDIT_POINTS_TARGET_ATTR, EFFECT_SOUND_CATALOGUE, ELEMENT_ACTION_TYPE_OPTIONS, ELEMENT_CONTEXT_MENU_COMMAND_IDS, EMPHASIS_PRESET_VALUES, EMPTY_RESOLVED_CUSTOMIZATION, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPANDED_MAX_HEIGHT, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EditPointsSession, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, FIXED_TAB_GALLERIES, FREEFORM_TOOL_IDS, FREEFORM_TOOL_LABEL_KEYS, FreeformToolSession, GIF_POST_CAPTURE_MAX_SIDE, GRADIENT_TYPE_OPTIONS, GlyphOutlineFontCache, HANDOUT_OPTIONS, HELP_RIBBON_COMMANDS, 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, MERGE_SHAPES_HINT_KEY, MERGE_SHAPES_LABEL_KEY, MERGE_SHAPES_MENU_ITEMS, 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, OPTIONS_PAGE_IDS, OPTIONS_SECTION_IDS, OPTIONS_SETTING_IDS, 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_ANIM_TRIGGER_ATTRIBUTE, 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, RECORD_COMMAND_GROUPS, RIBBON_CONTEXTUAL_TAB_ATTR, RIBBON_CONTROL_ATTR, RIBBON_GALLERY_ATTR, RIBBON_GALLERY_ITEM_ATTR, RIBBON_GALLERY_POPUP_ATTR, RIBBON_GROUP_ATTR, RIBBON_SCOPE_ATTR, RIBBON_SHAPE_SWATCHES, RIBBON_TAB_IDS, RIBBON_TRANSITION_PRESETS, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_SHOW_COMMAND_GROUPS, 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_BUTTON_IDS, 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_DIALOG_IDS, VIEWER_EXPORT_FORMAT_IDS, VIEWER_FEATURE_IDS, VIEWER_OPTIONS_TABS, VIEWER_PANEL_IDS, 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, applyMergeShapesPlan, applyMotionPathPreset, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, applyOleSheetCellEdit, applyOutlineEdit, applyPasteSpecialFormat, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyRibbonGalleryItem, applyTableStyleDelete, applyTableStyleFieldEdit, applyTableStyleMapChange, applyTableStylePreset, applyTextStyleUpdate, applyThemeOverrideToSlide, applyThemeToData, applyTransitionSoundFile, applyTransitionStockSound, applyUnderlineVariant, assertElementUpdateTarget, attachCollaborationInlineEditor, attachEditorImagePaste, attachInlineListController, attachOverlayKeyboard, attachPresentationVisibilityPause, attachRotateHandlePlacement, authorConnectorBetweenSites, authoredLetterSpacingPx, autosaveSnapshotMark, availableQuickAccessCommands, backstageCardsFor, bar3DShapePatch, beginChartMarkDrag, beginChartValueDrag, beginCropDrag, beginShapeAdjustment, beginZoomExcursion, bindInlineListParagraph, bindInlineListRun, borrowExternalCollaborationAwareness, bringForward, bringToFront, build3DExtrusionData, buildActiveSessionUsers, buildAnimationTimelineBars, buildAnimationTimelineRows, buildBarActions, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildCanvasContextMenuEntries, buildChartMarkDragGeometry, buildChartQuickActionsDescriptor, buildChartViewModel, buildChromeStyle, buildCollaborationShareUrl, buildCommentMarkers, buildContentPartStrokes, buildContextMenuEntries, buildCreateCollaborationConfig, buildCropOverlay, 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, buildRibbonGallery, buildRunProgramNotice, buildRunTabLines, buildSaveSlides, buildSlidePaneContextMenuEntries, 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, canCropElement, canDrillDown, canEditElementPoints, canGoNext, canGoPrevious, canGroupSelection, canInteractWithElement, canMergeShapes, canRemoveTopLevelNode, canSetStrokeWidth, canUngroupSelection, canUseClipboard, cancelBuildReveal, cancelCropUpdate, canvasToJpegData, cellRunStyle, cellStyleToCss, centeredSvgTextLines, chartDataLabelsTogglePatch, chartGridlinesPatch, chartGridlinesState, chartPartToAttrs, chartPreserveAspectRatio, checkModifyPassword, clampCropValue, clampFlyoutPosition, clampGifDimensions, clampNotesFontSize, clampOptionNumber, clampPercent2, clampSorterZoom, clampTransitionNumber, clampZoomScale, classifyExtraConnections, classifyMediaType, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearPlaybackTimers, clearStoredViewerPrefs, clearTransitionSound, clientToSlidePoint, 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, contextualTabLabelKey, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createActiveAnimationGroup, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createCustomizationController, 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, cropFill, cropFit, cropModeKeyAction, cropSessionChanged, cropToAspectRatio, cursorForTool, customGeometryPathsToSvgSubpaths, customizeBackstageCards, customizeBackstageNav, customizeCanvasContextMenuEntries, customizeContextMenuEntries, customizeOptionsTabs, cycleSelectableElement, defaultCssVars, defaultRadius, defaultThemeColors, defineThreeViewElement, deleteAutosaveSnapshot, deleteSection, deleteTableStyleFromMap, deleteTagFromCollections, demote, deriveSlideFieldContext, deriveViewportBreakpoints, describeCollaborationShellState, describeFontEmbedding, describeSmartArtBounds, describeTableStyleEditor, detectOrientation, detectTouchDevice, directionValuesFor, discardAutosaveRecovery, distributeElements, downloadBlob, downloadDataUrl, dragCropHandle, editCommentInList, effectiveDirection, effectiveTimingCurve, 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, followingText, forgetSessionDeck, formatAxisValue, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, galleryHasItems, galleryItemLabel, 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, getPresetShapeVectorGeometry, getPrintableArea, getResizeHandleHitAreaStyle, getSelectionControlArtworkStyle, getSelectionOutlineColor, getSelectionTextStyleFlags, getSessionTabId, getShapeAdjustmentHandleDescriptors, getShapeConnectionSites, getSlideBackgroundStyle, getSlideTransitionAnimations, getSoftEdgeSvgFilter, getSpeechRecognitionCtor, getSubstituteFontFamily, getSvgStrokeDasharray, getTableCellBandStyle, getTextBodyRotationTransform, getTextCompensationTransform, getWarpPath, groupElements, groupIntoParagraphs, groupSlidesBySection, guidePxToEmu, handleReadingViewKey, hasCopyableFormat, hasDistinctScriptFonts, hasGlyphEnvelope, hasMultipleSelectedTableCells, hasShapeProperties, hasShowSlideAfter, hasTextProperties, hasTiltData, hexToRgbUnit, hiddenSlideCue, hideChartSeries, hollowTextFillStyle, inlineElementPointerEvents, inlineGalleryItems, inlineListBodyText, insertCommentMention, insertTableElementColumn, insertTableElementRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isBulletMarkerSegment, isCalloutShape, isCellInRect, isCurrentLayout, isDialogAvailable, isDrawingToolVisible, isEditPointsEnabled, isEditableMotionPath, isEditableTextElement, isEditorControlTarget, isEditorTextInputTarget, isElementActionable, isElementLocked, isElementRendered, isExportAbortError, isFeatureEnabled, isHeaderFooterDateTextVisible, isHeaderFooterFooterTextVisible, isHeaderFooterHeaderTextVisible, isHollowShapeElement, isImageLikeElement, isImageTiled, isInkElement, isKeyboardOpen, isLegacyBinaryPresentation, isLinkedTextBox, isMediaFullscreenActive, isMixedContentBlocked, isMobileViewport, isOptionsPageVisible, isPanelVisible, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isSeriesUsingSecondaryAxis, isStrokeOnlyPresetElement, isSupportedPresentationFile, isTemplateElementId3 as isTemplateElementId, isUrlSafe, isWedgeCalloutPresetShape, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, listChartUserShapeRows, listMediaBookmarkOptions, loadAudienceContent, loadSessionDeck, lockResizeAspect, makeCloneId, makeSlideId, mapCustomizedEditorKey, mapEditingWheel, mapInlineTextFormatKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mapSlideShowStartKey, mapSlideSorterKey, masterViewBackgroundColor, masterViewCrudActions, masterViewCrudFailureKey, masterViewElements, masterViewPseudoSlide, matchCommentMentionAuthors, mayLeaveSlideShow, measurePreviewGeometry, measureSvgViewportRect, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, mediaTrimEndMsFromSeconds, mediaTrimEndSeconds, mergeAdditiveSelection, mergeCaptionResults, mergeCells, mergePresentationSnapshot, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, modelDataToBlobUrl, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountModel3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, mruColorsPatch, nestedTextDecorationStyle, newTableElement, nextPresentedSlide, nextShowSlideIndex, nextToggleValue, normalizeHexColor2 as normalizeHexColor, normalizeStrokeDashType, normalizeTableStyleGuid, notesSegmentsToSpans, observeElementHeight, observeExternalCollaborationReadiness, observeExternalCollaborationSession, observeYDocSlides, oleActionsVisible, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPendingPrintWindow, openPptxFile, openReadingView, openUrlInNewTab, overlayInlineTextSnapshot, overlayMasterViewInlineSnapshot, overlayPointerInput, paintedElementSize, paintedStrokeWidth, panCropImage, paragraphsToSegments, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, parseSegmentsFromRichEditor, partitionTemplateElements, patchChartData, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, placeTileOnPage, placeholderPromptDescriptor, planMergeShapes, playAnimationRibbonPreview, playFeedbackSound, playGroup, playSlideTransitionPreview, pptxActionToElementAction, prepareElementForInsertion, prepareElementUpdateBatch, prepareHtml2CanvasClone, 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, 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, resolveActiveRibbonTab, resolveAudienceScreenPlacement, resolveAuthoredCustomShowId, resolveAuthoredSlideRange, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveAutosaveActivation, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, resolveChartKind, resolveChartThreeViewSpec, resolveCollaborationShellEditability, resolveCollaborationShellState, resolveConnectorEndpointUpdate, resolveDefaultFontFamily, resolveDefaultPrintSettings, resolveDirection, resolveDirection8, resolveDisplayedChartType, resolveEditPointsAvailability, resolveEffectiveHiddenActions, 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, resolveSlidePaneClick, resolveSlideSizeSelection, resolveSlideTransition, resolveSmartArtThreeViewSpec, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTemplateBackgroundRows, resolveTextFillBlipUrls, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransitionSoundAction, resolveTransportForServerUrl, resolveViewerAddinRows, resolveViewportFitOptions, resolveWheelSpokeCount, resolveZoomNavigationTarget, restoreFilteredSeries, restoreInlineListBodySelection, restoreSegmentSelection, restoreSessionDeck, ribbonCustomizationCss, ribbonTransitionUpdates, rulerDragToGuidePosition, runPresentationAction, runProgramNoticeStackStyle, safeOpenUrl, sanitizeColor, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveDeckWithPassword, saveViewerProfile, savedPresentationFileName, scaleFontSizeForAutoFit, scaleSlidesForSizeChange, scanAvailableFontFamilies, scheduleAutoAdvanceChain, scheduleMediaTrimAndFade, schemaLabel, scopeLayoutOptionsToSlide, scrollInspectorSectionIntoView, seedRecentColors, segmentFrameCount, segmentStyleToCss, segmentsToEditorHtml, segmentsToParagraphs, segmentsToPlainText, selectGoogleWebfontFamilies, selectedBookmarkOptionValue, 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, setTrigger, setTriggerBookmark, shapeFillChange, shapeOutlineChange, shouldAutoFollowBroadcaster, shouldClearAutosaveCacheOnClose, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldDiscardAutosaveOnSuccessfulSave, shouldLoopContinuously, shouldProbeAutosaveRecovery, shouldRenderHitTarget, shouldRoomSlidesReplaceLoad, shouldShowAccessibilitySection, shouldShowAutosaveRecoveryPrompt, shouldShowElementHandles, shouldShowMediaFullscreenStopButton, shouldStickyActionRow, shouldUseSvgWarp, shouldWriteAutosaveSnapshot, siblingCount, siblingIndex, slideProgressPercent, slideSizeFromPreset, slideSizeToCanvasPx, slideStatusLabel, snapBoxToGrid, splitCell, splitEastAsianBreaks, splitRunByScriptFont, splitRunForMetrics, splitWordsForUnderline, splitsUnderlineIntoWords, startCropSession, stepFontSizePt, stepPresenterZoom, stopAllPersistentAudio, stopCaptureStream, storeAudienceContent, stripUnderlineDecoration, strokeOutlineViewBox, strokeWidthOf, styleShadowFilter, subscribeBarFacePicturePixelSamples, substituteFieldText, subtitleRecognitionLanguage, subtitleSettingsFromOptions, subtitleSettingsLabels, surfaceWireframePatch, svgGradientFillRef, svgLineCap, swapPresentationWindows, switchSmartArtLayout, syncGoogleWebfontStylesheet, tableCellCss, tableContainerCss, tableStyleAssignmentUpdate, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, textFontSizePtToPx, textFontSizePxToPt, themeColorLabel, themeColorSchemesEqual, themeColorSwatchRows, themeSwatchCommit, themeToCssVars, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toElementAxes, toSlideIndex, toggleBlackboard, toggleCommentResolvedInList, togglePresenterTimer, toggleSelectionBullets, toggleSheet, toggleStageElementMedia, toggleText3dExtrusion, transformInlineListCase, transformTextCase, transitionSoundOptions, transitionSoundSelectedValue, transitionStockSoundId, trimmedMediaDurationMs, ungroupElements, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateElement, updateMasterViewElement, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateSubtitleSettings, updateTagInCollections, validateMediaTrimRange, validateRoomId, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewPropertiesPatchFromPreferences, viewerOptionsToPreferences, viewerPreferencesFromViewProperties, visibleContextualTabs, visibleTemplateElements, warpPreviewPath, withChartTitle, withChartUserShapeAdded, withChartUserShapeGroupChildAdded, withChartUserShapeRowChartBoxUpdated, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRemoved, withChartUserShapeRowRotationUpdated, withChartUserShapeRowTextUpdated, withChartUserShapeRowUpdated, withConnectorEndpointUpdate, withFrameSlides, withInlineListDecorationDefaults, withSlideSizeOrientation, withSlidesPerPage, writeStoredViewerPrefs, xmlText };