pptx-react-viewer 3.17.1 → 3.18.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 (225) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +33 -31
  3. package/dist/{AiChatPanel-SINEEZBW.mjs → AiChatPanel-DDZC6IRK.mjs} +4 -4
  4. package/dist/AiChatPanel-DDZC6IRK.mjs.br +0 -0
  5. package/dist/AiChatPanel-DDZC6IRK.mjs.gz +0 -0
  6. package/dist/{AiChatPanel-GYH43XWW.js → AiChatPanel-T2QSCUQR.js} +25 -25
  7. package/dist/AiChatPanel-T2QSCUQR.js.br +0 -0
  8. package/dist/AiChatPanel-T2QSCUQR.js.gz +0 -0
  9. package/dist/{Area3DChartScene-D7GSJGPQ.js → Area3DChartScene-WEU2MP3B.js} +2 -2
  10. package/dist/Area3DChartScene-WEU2MP3B.js.br +0 -0
  11. package/dist/Area3DChartScene-WEU2MP3B.js.gz +0 -0
  12. package/dist/{Area3DChartScene-X5SM67PZ.mjs → Area3DChartScene-WTKQDHC7.mjs} +1 -1
  13. package/dist/Area3DChartScene-WTKQDHC7.mjs.br +0 -0
  14. package/dist/Area3DChartScene-WTKQDHC7.mjs.gz +0 -0
  15. package/dist/{Bar3DChartScene-M72WQW5Y.js → Bar3DChartScene-25G6TG53.js} +2 -2
  16. package/dist/Bar3DChartScene-25G6TG53.js.br +0 -0
  17. package/dist/Bar3DChartScene-25G6TG53.js.gz +0 -0
  18. package/dist/{Bar3DChartScene-HWIFFGI3.mjs → Bar3DChartScene-A5ICLHXS.mjs} +1 -1
  19. package/dist/{Bar3DChartScene-HWIFFGI3.mjs.br → Bar3DChartScene-A5ICLHXS.mjs.br} +0 -0
  20. package/dist/Bar3DChartScene-A5ICLHXS.mjs.gz +0 -0
  21. package/dist/{GLTFLoader-374ZNTXW.mjs → GLTFLoader-IWJFC4XI.mjs} +54 -16
  22. package/dist/GLTFLoader-IWJFC4XI.mjs.br +0 -0
  23. package/dist/GLTFLoader-IWJFC4XI.mjs.gz +0 -0
  24. package/dist/{GLTFLoader-Q7BHCGAW.js → GLTFLoader-KY7AYPMX.js} +178 -140
  25. package/dist/GLTFLoader-KY7AYPMX.js.br +0 -0
  26. package/dist/GLTFLoader-KY7AYPMX.js.gz +0 -0
  27. package/dist/{Line3DChartScene-7MPZWVF3.mjs → Line3DChartScene-ARCDLHXQ.mjs} +1 -1
  28. package/dist/Line3DChartScene-ARCDLHXQ.mjs.br +0 -0
  29. package/dist/Line3DChartScene-ARCDLHXQ.mjs.gz +0 -0
  30. package/dist/{Line3DChartScene-YOZEEQZ3.js → Line3DChartScene-WRZ52Z2Z.js} +2 -2
  31. package/dist/Line3DChartScene-WRZ52Z2Z.js.br +0 -0
  32. package/dist/Line3DChartScene-WRZ52Z2Z.js.gz +0 -0
  33. package/dist/{Model3DScene-5IJSNGDZ.js → Model3DScene-JGUG5NPX.js} +2 -2
  34. package/dist/Model3DScene-JGUG5NPX.js.br +0 -0
  35. package/dist/Model3DScene-JGUG5NPX.js.gz +0 -0
  36. package/dist/{Model3DScene-57LVY5QW.mjs → Model3DScene-PBKBL2YU.mjs} +1 -1
  37. package/dist/Model3DScene-PBKBL2YU.mjs.br +0 -0
  38. package/dist/Model3DScene-PBKBL2YU.mjs.gz +0 -0
  39. package/dist/OrbitControls-2XOMWUVE.mjs +3 -0
  40. package/dist/OrbitControls-2XOMWUVE.mjs.br +0 -0
  41. package/dist/OrbitControls-2XOMWUVE.mjs.gz +0 -0
  42. package/dist/OrbitControls-CGYUF3BY.js +12 -0
  43. package/dist/OrbitControls-CGYUF3BY.js.br +0 -0
  44. package/dist/OrbitControls-CGYUF3BY.js.gz +0 -0
  45. package/dist/{PieChart3DScene-UBI6X66Q.js → PieChart3DScene-S25DNSRS.js} +2 -2
  46. package/dist/PieChart3DScene-S25DNSRS.js.br +0 -0
  47. package/dist/PieChart3DScene-S25DNSRS.js.gz +0 -0
  48. package/dist/{PieChart3DScene-WD5B6NP3.mjs → PieChart3DScene-ZNKXS62H.mjs} +1 -1
  49. package/dist/{PieChart3DScene-WD5B6NP3.mjs.br → PieChart3DScene-ZNKXS62H.mjs.br} +0 -0
  50. package/dist/PieChart3DScene-ZNKXS62H.mjs.gz +0 -0
  51. package/dist/{SmartArt3DScene-ODKCGJBO.mjs → SmartArt3DScene-QZGIABOK.mjs} +2 -2
  52. package/dist/SmartArt3DScene-QZGIABOK.mjs.br +0 -0
  53. package/dist/SmartArt3DScene-QZGIABOK.mjs.gz +0 -0
  54. package/dist/{SmartArt3DScene-BK7QN3WT.js → SmartArt3DScene-T236GYUT.js} +33 -33
  55. package/dist/SmartArt3DScene-T236GYUT.js.br +0 -0
  56. package/dist/SmartArt3DScene-T236GYUT.js.gz +0 -0
  57. package/dist/{SurfaceChart3DScene-JZGU6BBD.mjs → SurfaceChart3DScene-EBT7RPCX.mjs} +1 -1
  58. package/dist/SurfaceChart3DScene-EBT7RPCX.mjs.br +0 -0
  59. package/dist/SurfaceChart3DScene-EBT7RPCX.mjs.gz +0 -0
  60. package/dist/{SurfaceChart3DScene-JGNPYQ32.js → SurfaceChart3DScene-LXBC3HMV.js} +2 -2
  61. package/dist/SurfaceChart3DScene-LXBC3HMV.js.br +0 -0
  62. package/dist/SurfaceChart3DScene-LXBC3HMV.js.gz +0 -0
  63. package/dist/{chunk-KVXB22D3.js → chunk-2LTTSFLD.js} +5 -5
  64. package/dist/chunk-2LTTSFLD.js.br +0 -0
  65. package/dist/chunk-2LTTSFLD.js.gz +0 -0
  66. package/dist/{chunk-VYSMTC5C.mjs → chunk-2OCTGK4L.mjs} +6 -110
  67. package/dist/chunk-2OCTGK4L.mjs.br +0 -0
  68. package/dist/chunk-2OCTGK4L.mjs.gz +0 -0
  69. package/dist/{chunk-IXKAIIA2.mjs → chunk-3KKPRPVE.mjs} +114 -126
  70. package/dist/chunk-3KKPRPVE.mjs.br +0 -0
  71. package/dist/chunk-3KKPRPVE.mjs.gz +0 -0
  72. package/dist/{chunk-B4QYQLZU.js → chunk-3N6AC4HA.js} +1122 -693
  73. package/dist/chunk-3N6AC4HA.js.br +0 -0
  74. package/dist/chunk-3N6AC4HA.js.gz +0 -0
  75. package/dist/{chunk-OAKDJYYT.mjs → chunk-5S3A6HL3.mjs} +121 -42
  76. package/dist/chunk-5S3A6HL3.mjs.br +0 -0
  77. package/dist/chunk-5S3A6HL3.mjs.gz +0 -0
  78. package/dist/{chunk-IRG7SIUX.js → chunk-6R2EUDJQ.js} +1399 -1411
  79. package/dist/chunk-6R2EUDJQ.js.br +0 -0
  80. package/dist/chunk-6R2EUDJQ.js.gz +0 -0
  81. package/dist/{chunk-XBMKFZVP.mjs → chunk-7TAWW5QQ.mjs} +1120 -694
  82. package/dist/chunk-7TAWW5QQ.mjs.br +0 -0
  83. package/dist/chunk-7TAWW5QQ.mjs.gz +0 -0
  84. package/dist/{chunk-64FUV37N.js → chunk-BRJN3ZMG.js} +2 -1
  85. package/dist/chunk-BRJN3ZMG.js.br +0 -0
  86. package/dist/{chunk-64FUV37N.js.gz → chunk-BRJN3ZMG.js.gz} +0 -0
  87. package/dist/{chunk-QTGCOL5H.mjs → chunk-GNRVDNCV.mjs} +1707 -435
  88. package/dist/chunk-GNRVDNCV.mjs.br +0 -0
  89. package/dist/chunk-GNRVDNCV.mjs.gz +0 -0
  90. package/dist/{chunk-6C2WYLZY.js → chunk-IXS7DALE.js} +45 -39
  91. package/dist/chunk-IXS7DALE.js.br +0 -0
  92. package/dist/chunk-IXS7DALE.js.gz +0 -0
  93. package/dist/{chunk-7FBKS7OS.js → chunk-LJ46KXUV.js} +179 -283
  94. package/dist/chunk-LJ46KXUV.js.br +0 -0
  95. package/dist/chunk-LJ46KXUV.js.gz +0 -0
  96. package/dist/{chunk-LAU34UMB.mjs → chunk-MQUTXOET.mjs} +2 -1
  97. package/dist/chunk-MQUTXOET.mjs.br +0 -0
  98. package/dist/{chunk-LAU34UMB.mjs.gz → chunk-MQUTXOET.mjs.gz} +0 -0
  99. package/dist/{chunk-3CBDTD46.mjs → chunk-MV2GCDBR.mjs} +8 -2
  100. package/dist/chunk-MV2GCDBR.mjs.br +0 -0
  101. package/dist/chunk-MV2GCDBR.mjs.gz +0 -0
  102. package/dist/{chunk-4SPZ5IZN.js → chunk-V32F4I45.js} +1713 -439
  103. package/dist/chunk-V32F4I45.js.br +0 -0
  104. package/dist/chunk-V32F4I45.js.gz +0 -0
  105. package/dist/{chunk-E55VEC37.js → chunk-WGBXO4LM.js} +576 -497
  106. package/dist/chunk-WGBXO4LM.js.br +0 -0
  107. package/dist/chunk-WGBXO4LM.js.gz +0 -0
  108. package/dist/{chunk-7YJBRPCT.mjs → chunk-WRO37U2O.mjs} +1 -1
  109. package/dist/chunk-WRO37U2O.mjs.br +0 -0
  110. package/dist/chunk-WRO37U2O.mjs.gz +0 -0
  111. package/dist/i18n.js +4 -4
  112. package/dist/i18n.js.br +0 -0
  113. package/dist/i18n.js.gz +0 -0
  114. package/dist/i18n.mjs +1 -1
  115. package/dist/i18n.mjs.br +0 -0
  116. package/dist/i18n.mjs.gz +0 -0
  117. package/dist/index.d.ts +2 -0
  118. package/dist/index.js +47 -47
  119. package/dist/index.js.br +0 -0
  120. package/dist/index.js.gz +0 -0
  121. package/dist/index.mjs +6 -6
  122. package/dist/index.mjs.br +0 -0
  123. package/dist/index.mjs.gz +0 -0
  124. package/dist/internals.d.ts +18 -0
  125. package/dist/internals.d.ts.map +1 -1
  126. package/dist/internals.js +79 -79
  127. package/dist/internals.js.br +0 -0
  128. package/dist/internals.js.gz +0 -0
  129. package/dist/internals.mjs +4 -4
  130. package/dist/internals.mjs.br +0 -0
  131. package/dist/internals.mjs.gz +0 -0
  132. package/dist/pptx-viewer.css +1 -1
  133. package/dist/pptx-viewer.css.br +0 -0
  134. package/dist/pptx-viewer.css.gz +0 -0
  135. package/dist/three.module-LGUV2LI6.mjs +2 -0
  136. package/dist/three.module-LGUV2LI6.mjs.br +0 -0
  137. package/dist/three.module-LGUV2LI6.mjs.gz +0 -0
  138. package/dist/{three.module-GNNNRIMK.js → three.module-YZ4M24WM.js} +454 -442
  139. package/dist/three.module-YZ4M24WM.js.br +0 -0
  140. package/dist/three.module-YZ4M24WM.js.gz +0 -0
  141. package/dist/{useViewerBuildingBlocks-DkUGmlkP.d.ts → useViewerBuildingBlocks-4Tj6P8Fm.d.ts} +3 -1
  142. package/dist/useViewerBuildingBlocks-4Tj6P8Fm.d.ts.map +1 -0
  143. package/dist/viewer/index.js +27 -27
  144. package/dist/viewer/index.js.br +0 -0
  145. package/dist/viewer/index.js.gz +0 -0
  146. package/dist/viewer/index.mjs +6 -6
  147. package/dist/viewer/index.mjs.br +0 -0
  148. package/dist/viewer/index.mjs.gz +0 -0
  149. package/package.json +3 -3
  150. package/dist/AiChatPanel-GYH43XWW.js.br +0 -0
  151. package/dist/AiChatPanel-GYH43XWW.js.gz +0 -0
  152. package/dist/AiChatPanel-SINEEZBW.mjs.br +0 -0
  153. package/dist/AiChatPanel-SINEEZBW.mjs.gz +0 -0
  154. package/dist/Area3DChartScene-D7GSJGPQ.js.br +0 -0
  155. package/dist/Area3DChartScene-D7GSJGPQ.js.gz +0 -0
  156. package/dist/Area3DChartScene-X5SM67PZ.mjs.br +0 -0
  157. package/dist/Area3DChartScene-X5SM67PZ.mjs.gz +0 -0
  158. package/dist/Bar3DChartScene-HWIFFGI3.mjs.gz +0 -0
  159. package/dist/Bar3DChartScene-M72WQW5Y.js.br +0 -0
  160. package/dist/Bar3DChartScene-M72WQW5Y.js.gz +0 -0
  161. package/dist/GLTFLoader-374ZNTXW.mjs.br +0 -0
  162. package/dist/GLTFLoader-374ZNTXW.mjs.gz +0 -0
  163. package/dist/GLTFLoader-Q7BHCGAW.js.br +0 -0
  164. package/dist/GLTFLoader-Q7BHCGAW.js.gz +0 -0
  165. package/dist/Line3DChartScene-7MPZWVF3.mjs.br +0 -0
  166. package/dist/Line3DChartScene-7MPZWVF3.mjs.gz +0 -0
  167. package/dist/Line3DChartScene-YOZEEQZ3.js.br +0 -0
  168. package/dist/Line3DChartScene-YOZEEQZ3.js.gz +0 -0
  169. package/dist/Model3DScene-57LVY5QW.mjs.br +0 -0
  170. package/dist/Model3DScene-57LVY5QW.mjs.gz +0 -0
  171. package/dist/Model3DScene-5IJSNGDZ.js.br +0 -0
  172. package/dist/Model3DScene-5IJSNGDZ.js.gz +0 -0
  173. package/dist/OrbitControls-SMYCPLXO.js +0 -12
  174. package/dist/OrbitControls-SMYCPLXO.js.br +0 -3
  175. package/dist/OrbitControls-SMYCPLXO.js.gz +0 -0
  176. package/dist/OrbitControls-ZTGHPI5G.mjs +0 -3
  177. package/dist/OrbitControls-ZTGHPI5G.mjs.br +0 -0
  178. package/dist/OrbitControls-ZTGHPI5G.mjs.gz +0 -0
  179. package/dist/PieChart3DScene-UBI6X66Q.js.br +0 -0
  180. package/dist/PieChart3DScene-UBI6X66Q.js.gz +0 -0
  181. package/dist/PieChart3DScene-WD5B6NP3.mjs.gz +0 -0
  182. package/dist/SmartArt3DScene-BK7QN3WT.js.br +0 -0
  183. package/dist/SmartArt3DScene-BK7QN3WT.js.gz +0 -0
  184. package/dist/SmartArt3DScene-ODKCGJBO.mjs.br +0 -0
  185. package/dist/SmartArt3DScene-ODKCGJBO.mjs.gz +0 -0
  186. package/dist/SurfaceChart3DScene-JGNPYQ32.js.br +0 -0
  187. package/dist/SurfaceChart3DScene-JGNPYQ32.js.gz +0 -0
  188. package/dist/SurfaceChart3DScene-JZGU6BBD.mjs.br +0 -0
  189. package/dist/SurfaceChart3DScene-JZGU6BBD.mjs.gz +0 -0
  190. package/dist/chunk-3CBDTD46.mjs.br +0 -0
  191. package/dist/chunk-3CBDTD46.mjs.gz +0 -0
  192. package/dist/chunk-4SPZ5IZN.js.br +0 -0
  193. package/dist/chunk-4SPZ5IZN.js.gz +0 -0
  194. package/dist/chunk-64FUV37N.js.br +0 -0
  195. package/dist/chunk-6C2WYLZY.js.br +0 -0
  196. package/dist/chunk-6C2WYLZY.js.gz +0 -0
  197. package/dist/chunk-7FBKS7OS.js.br +0 -0
  198. package/dist/chunk-7FBKS7OS.js.gz +0 -0
  199. package/dist/chunk-7YJBRPCT.mjs.br +0 -0
  200. package/dist/chunk-7YJBRPCT.mjs.gz +0 -0
  201. package/dist/chunk-B4QYQLZU.js.br +0 -0
  202. package/dist/chunk-B4QYQLZU.js.gz +0 -0
  203. package/dist/chunk-E55VEC37.js.br +0 -0
  204. package/dist/chunk-E55VEC37.js.gz +0 -0
  205. package/dist/chunk-IRG7SIUX.js.br +0 -0
  206. package/dist/chunk-IRG7SIUX.js.gz +0 -0
  207. package/dist/chunk-IXKAIIA2.mjs.br +0 -0
  208. package/dist/chunk-IXKAIIA2.mjs.gz +0 -0
  209. package/dist/chunk-KVXB22D3.js.br +0 -0
  210. package/dist/chunk-KVXB22D3.js.gz +0 -0
  211. package/dist/chunk-LAU34UMB.mjs.br +0 -0
  212. package/dist/chunk-OAKDJYYT.mjs.br +0 -0
  213. package/dist/chunk-OAKDJYYT.mjs.gz +0 -0
  214. package/dist/chunk-QTGCOL5H.mjs.br +0 -0
  215. package/dist/chunk-QTGCOL5H.mjs.gz +0 -0
  216. package/dist/chunk-VYSMTC5C.mjs.br +0 -0
  217. package/dist/chunk-VYSMTC5C.mjs.gz +0 -0
  218. package/dist/chunk-XBMKFZVP.mjs.br +0 -0
  219. package/dist/chunk-XBMKFZVP.mjs.gz +0 -0
  220. package/dist/three.module-AC7ESV4W.mjs +0 -2
  221. package/dist/three.module-AC7ESV4W.mjs.br +0 -0
  222. package/dist/three.module-AC7ESV4W.mjs.gz +0 -0
  223. package/dist/three.module-GNNNRIMK.js.br +0 -0
  224. package/dist/three.module-GNNNRIMK.js.gz +0 -0
  225. package/dist/useViewerBuildingBlocks-DkUGmlkP.d.ts.map +0 -1
@@ -8115,11 +8115,11 @@ function createBuiltinVariables(ctx) {
8115
8115
  vars.set("b", h2);
8116
8116
  vars.set("hc", w / 2);
8117
8117
  vars.set("vc", h2 / 2);
8118
- const widthDivisors = [2, 3, 4, 5, 6, 8, 10, 12];
8118
+ const widthDivisors = [2, 3, 4, 5, 6, 8, 10, 12, 16, 32];
8119
8119
  for (const d of widthDivisors) {
8120
8120
  vars.set(`wd${d}`, w / d);
8121
8121
  }
8122
- const heightDivisors = [2, 3, 4, 5, 6, 8, 10, 12];
8122
+ const heightDivisors = [2, 3, 4, 5, 6, 8, 10, 12, 16, 32];
8123
8123
  for (const d of heightDivisors) {
8124
8124
  vars.set(`hd${d}`, h2 / d);
8125
8125
  }
@@ -37105,9 +37105,9 @@ function compoundChildIds(role, node, childrenOf) {
37105
37105
  const children13 = childrenOf.get(node.id) ?? [];
37106
37106
  const start = role.presentationOf?.start?.[chIndex] ?? 1;
37107
37107
  const count = role.presentationOf?.count?.[chIndex];
37108
- const positions2 = positionRange(start, count, 1, children13.length);
37108
+ const positions = positionRange(start, count, 1, children13.length);
37109
37109
  const ids = [];
37110
- for (const position2 of positions2) {
37110
+ for (const position2 of positions) {
37111
37111
  const child262 = children13[position2 - 1];
37112
37112
  if (!child262 || child262.text.trim().length === 0) {
37113
37113
  continue;
@@ -48828,7 +48828,7 @@ function parseValueColors(node, colorParser) {
48828
48828
  return colors.length > 0 ? colors : void 0;
48829
48829
  }
48830
48830
  function parseValueColorPositions(node, xmlLookup) {
48831
- const positions2 = [];
48831
+ const positions = [];
48832
48832
  for (const posNode of xmlLookup.getChildrenArrayByLocalName(node, "pos")) {
48833
48833
  const kind = POSITION_KIND_MAP[String(posNode["@_type"] ?? "").trim()];
48834
48834
  if (!kind) {
@@ -48842,9 +48842,9 @@ function parseValueColorPositions(node, xmlLookup) {
48842
48842
  entry2.value = num;
48843
48843
  }
48844
48844
  }
48845
- positions2.push(entry2);
48845
+ positions.push(entry2);
48846
48846
  }
48847
- return positions2.length > 0 ? positions2 : void 0;
48847
+ return positions.length > 0 ? positions : void 0;
48848
48848
  }
48849
48849
  function parseCxValueColors(series, xmlLookup, colorParser) {
48850
48850
  const valueColorsNode = xmlLookup.getChildByLocalName(series, "valueColors");
@@ -48860,9 +48860,9 @@ function parseCxValueColors(series, xmlLookup, colorParser) {
48860
48860
  }
48861
48861
  }
48862
48862
  if (valueColorPositionsNode) {
48863
- const positions2 = parseValueColorPositions(valueColorPositionsNode, xmlLookup);
48864
- if (positions2) {
48865
- result.valueColorPositions = positions2;
48863
+ const positions = parseValueColorPositions(valueColorPositionsNode, xmlLookup);
48864
+ if (positions) {
48865
+ result.valueColorPositions = positions;
48866
48866
  }
48867
48867
  }
48868
48868
  return Object.keys(result).length > 0 ? result : void 0;
@@ -51598,6 +51598,55 @@ function toStrictNamespaceUri(uri) {
51598
51598
  function isTransitionalNamespaceUri(uri) {
51599
51599
  return TRANSITIONAL_TO_STRICT_NS.has(uri) || deriveStrictUri(uri) !== void 0;
51600
51600
  }
51601
+ function isXmlWhitespace(char) {
51602
+ return char.trim().length === 0;
51603
+ }
51604
+ function isConvertibleAttributeName(name) {
51605
+ return name === "Type" || name === "uri" || name === "xmlns" || name.startsWith("xmlns:") && /^[A-Za-z_][\w.-]*$/u.test(name.slice("xmlns:".length));
51606
+ }
51607
+ function containsConvertibleStrictNamespaceAttribute(xml) {
51608
+ let index = 0;
51609
+ while (index < xml.length) {
51610
+ while (index < xml.length && !isXmlWhitespace(xml[index])) {
51611
+ index++;
51612
+ }
51613
+ while (index < xml.length && isXmlWhitespace(xml[index])) {
51614
+ index++;
51615
+ }
51616
+ const nameStart = index;
51617
+ while (index < xml.length && !isXmlWhitespace(xml[index]) && xml[index] !== "=") {
51618
+ index++;
51619
+ }
51620
+ const name = xml.slice(nameStart, index);
51621
+ if (!isConvertibleAttributeName(name)) {
51622
+ continue;
51623
+ }
51624
+ while (index < xml.length && isXmlWhitespace(xml[index])) {
51625
+ index++;
51626
+ }
51627
+ if (xml[index] !== "=") {
51628
+ continue;
51629
+ }
51630
+ index++;
51631
+ while (index < xml.length && isXmlWhitespace(xml[index])) {
51632
+ index++;
51633
+ }
51634
+ const quote = xml[index];
51635
+ if (quote !== '"' && quote !== "'") {
51636
+ continue;
51637
+ }
51638
+ const valueStart = ++index;
51639
+ const valueEnd = xml.indexOf(quote, valueStart);
51640
+ if (valueEnd === -1) {
51641
+ return false;
51642
+ }
51643
+ if (isTransitionalNamespaceUri(xml.slice(valueStart, valueEnd))) {
51644
+ return true;
51645
+ }
51646
+ index = valueEnd + 1;
51647
+ }
51648
+ return false;
51649
+ }
51601
51650
  function convertXmlToStrict(node, setConformance = false) {
51602
51651
  if (typeof node !== "object" || node === null || Array.isArray(node)) {
51603
51652
  return node;
@@ -52060,6 +52109,178 @@ var init_activex_serializer = __esm({
52060
52109
  "src/core/utils/activex-serializer.ts"() {
52061
52110
  }
52062
52111
  });
52112
+ function parseShapeId(value, allowZero = false) {
52113
+ const text22 = String(value ?? "").trim();
52114
+ if (!/^\d+$/.test(text22)) {
52115
+ return void 0;
52116
+ }
52117
+ const id = Number(text22);
52118
+ return Number.isSafeInteger(id) && id >= (allowZero ? 0 : 1) && id <= MAX_SHAPE_ID ? id : void 0;
52119
+ }
52120
+ function visitXmlObjects(value, visit, tag = "") {
52121
+ if (Array.isArray(value)) {
52122
+ for (const item of value) {
52123
+ visitXmlObjects(item, visit, tag);
52124
+ }
52125
+ } else if (value && typeof value === "object") {
52126
+ const node = value;
52127
+ visit(node, tag);
52128
+ for (const [key2, child262] of Object.entries(node)) {
52129
+ if (!key2.startsWith("@_")) {
52130
+ visitXmlObjects(child262, visit, key2);
52131
+ }
52132
+ }
52133
+ }
52134
+ }
52135
+ function remapAttribute(node, attribute6, ids) {
52136
+ const current = node[attribute6];
52137
+ if (current === void 0) {
52138
+ return;
52139
+ }
52140
+ const replacement = ids.get(String(current).trim());
52141
+ if (replacement !== void 0) {
52142
+ node[attribute6] = replacement;
52143
+ }
52144
+ }
52145
+ function remapShapeIdReferences(root, ids) {
52146
+ if (ids.size === 0) {
52147
+ return;
52148
+ }
52149
+ visitXmlObjects(root, (node, tag) => {
52150
+ if (ID_REFERENCE_TAGS.has(tag)) {
52151
+ remapAttribute(node, "@_id", ids);
52152
+ } else if (SPID_REFERENCE_TAGS.has(tag)) {
52153
+ remapAttribute(node, "@_spid", ids);
52154
+ } else if (tag === "pptx:animation") {
52155
+ for (const attribute6 of EDITOR_ANIMATION_ID_ATTRIBUTES) {
52156
+ remapAttribute(node, attribute6, ids);
52157
+ }
52158
+ }
52159
+ });
52160
+ }
52161
+ function findCnvPrNode(rawXml) {
52162
+ if (!rawXml) {
52163
+ return void 0;
52164
+ }
52165
+ for (const nvTag of NV_CONTAINER_TAGS) {
52166
+ const nv = rawXml[nvTag];
52167
+ const cNvPr = nv?.["p:cNvPr"] ?? nv?.["p14:cNvPr"];
52168
+ if (cNvPr) {
52169
+ return cNvPr;
52170
+ }
52171
+ }
52172
+ return void 0;
52173
+ }
52174
+ function flattenElements(elements2, out) {
52175
+ for (const element of elements2) {
52176
+ out.push(element);
52177
+ if (element.type === "group" && Array.isArray(element.children)) {
52178
+ flattenElements(element.children, out);
52179
+ }
52180
+ }
52181
+ }
52182
+ function remapElementShapeIds(elements2, ids) {
52183
+ if (ids.size === 0) {
52184
+ return 0;
52185
+ }
52186
+ const flat = [];
52187
+ flattenElements(elements2, flat);
52188
+ const declaredId = (element) => {
52189
+ const cNvPr = findCnvPrNode(element.rawXml);
52190
+ if (cNvPr?.["@_id"] !== void 0) {
52191
+ return String(cNvPr["@_id"]).trim();
52192
+ }
52193
+ return element.shapeId;
52194
+ };
52195
+ const holders = /* @__PURE__ */ new Map();
52196
+ for (const element of flat) {
52197
+ const declared = declaredId(element);
52198
+ if (declared !== void 0 && ids.has(declared)) {
52199
+ holders.set(declared, (holders.get(declared) ?? 0) + 1);
52200
+ }
52201
+ }
52202
+ const keptKeys = /* @__PURE__ */ new Set();
52203
+ const inPlaceRepairedIds = /* @__PURE__ */ new Set();
52204
+ for (const element of flat) {
52205
+ const rawId = findCnvPrNode(element.rawXml)?.["@_id"];
52206
+ if (rawId !== void 0) {
52207
+ inPlaceRepairedIds.add(String(rawId).trim());
52208
+ }
52209
+ }
52210
+ let changed = 0;
52211
+ for (const element of flat) {
52212
+ const rawXml = element.rawXml;
52213
+ const cNvPr = findCnvPrNode(rawXml);
52214
+ const rawId = cNvPr?.["@_id"] === void 0 ? void 0 : String(cNvPr["@_id"]).trim();
52215
+ const declared = rawId ?? element.shapeId;
52216
+ let touched = false;
52217
+ if (declared !== void 0 && ids.has(declared)) {
52218
+ const fresh = ids.get(declared);
52219
+ const retainsOldId = inPlaceRepairedIds.has(fresh);
52220
+ if (!retainsOldId && ((holders.get(declared) ?? 0) === 1 || keptKeys.has(declared))) {
52221
+ if (cNvPr && rawId !== void 0) {
52222
+ cNvPr["@_id"] = fresh;
52223
+ }
52224
+ if (element.shapeId !== void 0) {
52225
+ element.shapeId = fresh;
52226
+ }
52227
+ touched = true;
52228
+ } else if (!retainsOldId) {
52229
+ keptKeys.add(declared);
52230
+ }
52231
+ } else if (rawId !== void 0 && element.shapeId !== void 0 && element.shapeId !== rawId) {
52232
+ if (ids.get(element.shapeId) === rawId) {
52233
+ element.shapeId = rawId;
52234
+ touched = true;
52235
+ }
52236
+ }
52237
+ if (rawXml) {
52238
+ remapShapeIdReferences(rawXml, ids);
52239
+ }
52240
+ const style = "shapeStyle" in element ? element.shapeStyle : void 0;
52241
+ for (const connection of [style?.connectorStartConnection, style?.connectorEndConnection]) {
52242
+ const replacement = connection?.shapeId === void 0 ? void 0 : ids.get(connection.shapeId.trim());
52243
+ if (connection && replacement !== void 0) {
52244
+ connection.shapeId = replacement;
52245
+ touched = true;
52246
+ }
52247
+ }
52248
+ if (touched) {
52249
+ changed += 1;
52250
+ }
52251
+ }
52252
+ return changed;
52253
+ }
52254
+ var MAX_SHAPE_ID;
52255
+ var ID_REFERENCE_TAGS;
52256
+ var SPID_REFERENCE_TAGS;
52257
+ var EDITOR_ANIMATION_ID_ATTRIBUTES;
52258
+ var NV_CONTAINER_TAGS;
52259
+ var init_shape_ids = __esm({
52260
+ "src/core/utils/shape-ids.ts"() {
52261
+ MAX_SHAPE_ID = 4294967295;
52262
+ ID_REFERENCE_TAGS = /* @__PURE__ */ new Set(["a:stCxn", "a:endCxn"]);
52263
+ SPID_REFERENCE_TAGS = /* @__PURE__ */ new Set([
52264
+ "p:spTgt",
52265
+ "p:bldP",
52266
+ "p:bldOleChart",
52267
+ "p:bldDgm",
52268
+ "p:bldGraphic",
52269
+ "p:inkTgt",
52270
+ "p:control"
52271
+ ]);
52272
+ EDITOR_ANIMATION_ID_ATTRIBUTES = ["@_elementId", "@_triggerShapeId"];
52273
+ NV_CONTAINER_TAGS = [
52274
+ "p:nvSpPr",
52275
+ "p:nvPicPr",
52276
+ "p:nvCxnSpPr",
52277
+ "p:nvGrpSpPr",
52278
+ "p:nvGraphicFramePr",
52279
+ "p:nvContentPartPr",
52280
+ "p14:nvContentPartPr"
52281
+ ];
52282
+ }
52283
+ });
52063
52284
  function parseKinsoku(presentationXml3) {
52064
52285
  if (!presentationXml3) {
52065
52286
  return void 0;
@@ -52772,6 +52993,19 @@ var init_font_substitution = __esm({
52772
52993
  // fallbacks must stay condensed, or short numeric labels sized to the
52773
52994
  // narrow face overflow their text boxes and wrap (issue #132, "77%").
52774
52995
  "Bebas Neue": ["Oswald", "Arial Narrow", "Impact", "sans-serif"],
52996
+ // Office stores named Source Sans weights as separate family names (e.g. a
52997
+ // theme authored with "Source Sans Pro ExtraLight" as its own face), while
52998
+ // Google Fonts and most local installs expose the base family with a
52999
+ // weight axis instead. Keep the authored face first for a browser that
53000
+ // does have it installed under that exact name, then fall back to the
53001
+ // metrically compatible base family before generic sans-serif.
53002
+ "Source Sans Pro ExtraLight": [
53003
+ "Source Sans Pro",
53004
+ "Calibri Light",
53005
+ "Segoe UI Light",
53006
+ "Arial",
53007
+ "sans-serif"
53008
+ ],
52775
53009
  "Century Gothic": ["URW Gothic", "Futura", "sans-serif"],
52776
53010
  Oswald: ["Agency FB", "Arial Narrow", "sans-serif"],
52777
53011
  "Franklin Gothic": ["Liberation Sans", "Helvetica Neue", "sans-serif"],
@@ -52871,6 +53105,11 @@ var init_pptx_validator_conformance_xml = __esm({
52871
53105
  };
52872
53106
  }
52873
53107
  });
53108
+ var init_pptx_validator_content_order = __esm({
53109
+ "src/core/utils/pptx-validator-content-order.ts"() {
53110
+ init_pptx_validator_conformance_xml();
53111
+ }
53112
+ });
52874
53113
  var init_pptx_validator_facet_constants = __esm({
52875
53114
  "src/core/utils/pptx-validator-facet-constants.ts"() {
52876
53115
  }
@@ -52891,6 +53130,12 @@ var init_pptx_validator_mce = __esm({
52891
53130
  init_pptx_validator_conformance_xml();
52892
53131
  }
52893
53132
  });
53133
+ var init_pptx_validator_slide_parts = __esm({
53134
+ "src/core/utils/pptx-validator-slide-parts.ts"() {
53135
+ init_pptx_validator_conformance_xml();
53136
+ init_pptx_validator_content_order();
53137
+ }
53138
+ });
52894
53139
  var init_pptx_validator_transitions = __esm({
52895
53140
  "src/core/utils/pptx-validator-transitions.ts"() {
52896
53141
  init_pptx_validator_conformance_xml();
@@ -52907,9 +53152,11 @@ var init_pptx_validator_transitions = __esm({
52907
53152
  var init_pptx_validator_conformance = __esm({
52908
53153
  "src/core/utils/pptx-validator-conformance.ts"() {
52909
53154
  init_pptx_validator_conformance_xml();
53155
+ init_pptx_validator_content_order();
52910
53156
  init_pptx_validator_facets();
52911
53157
  init_pptx_validator_helpers();
52912
53158
  init_pptx_validator_mce();
53159
+ init_pptx_validator_slide_parts();
52913
53160
  init_pptx_validator_transitions();
52914
53161
  }
52915
53162
  });
@@ -52982,6 +53229,192 @@ var init_pptx_validator = __esm({
52982
53229
  init_pptx_validator_repair();
52983
53230
  }
52984
53231
  });
53232
+ function normalizeFace(face) {
53233
+ return face?.trim().toLowerCase() ?? "";
53234
+ }
53235
+ function themeFace(scheme, role, script) {
53236
+ const group2 = role === "major" ? scheme?.majorFont : scheme?.minorFont;
53237
+ return group2?.[script] || group2?.latin;
53238
+ }
53239
+ function parseThemeFontToken(token2) {
53240
+ const match = token2?.trim().toLowerCase().match(TOKEN_PATTERN);
53241
+ if (!match) {
53242
+ return void 0;
53243
+ }
53244
+ const role = match[1] === "mj" ? "major" : "minor";
53245
+ const script = match[2] === "ea" ? "eastAsia" : match[2] === "cs" ? "complexScript" : "latin";
53246
+ return { role, script };
53247
+ }
53248
+ function placeholderFontRole(element) {
53249
+ const placeholderType2 = element.placeholderType?.trim().toLowerCase();
53250
+ if (!placeholderType2) {
53251
+ return void 0;
53252
+ }
53253
+ return placeholderType2 === "title" || placeholderType2 === "ctrtitle" ? "major" : "minor";
53254
+ }
53255
+ function resolveFace(current, token2, script, oldScheme, newScheme, fallbackRole) {
53256
+ const parsed = parseThemeFontToken(token2);
53257
+ if (parsed) {
53258
+ const linked = themeFace(newScheme, parsed.role, parsed.script);
53259
+ return linked && linked !== current ? linked : void 0;
53260
+ }
53261
+ if (!fallbackRole || !current) {
53262
+ return void 0;
53263
+ }
53264
+ const oldFace = themeFace(oldScheme, fallbackRole, script);
53265
+ const newFace = themeFace(newScheme, fallbackRole, script);
53266
+ if (!oldFace || !newFace || normalizeFace(current) !== normalizeFace(oldFace)) {
53267
+ return void 0;
53268
+ }
53269
+ return newFace !== current ? newFace : void 0;
53270
+ }
53271
+ function remapTextStyleFonts(style, oldScheme, newScheme, fallbackRole) {
53272
+ const latin = resolveFace(
53273
+ style.fontFamily,
53274
+ style.latinFontThemeToken,
53275
+ "latin",
53276
+ oldScheme,
53277
+ newScheme,
53278
+ fallbackRole
53279
+ );
53280
+ const eastAsia = resolveFace(
53281
+ style.eastAsiaFont,
53282
+ style.eastAsiaFontThemeToken,
53283
+ "eastAsia",
53284
+ oldScheme,
53285
+ newScheme,
53286
+ fallbackRole
53287
+ );
53288
+ const complexScript = resolveFace(
53289
+ style.complexScriptFont,
53290
+ style.complexScriptFontThemeToken,
53291
+ "complexScript",
53292
+ oldScheme,
53293
+ newScheme,
53294
+ fallbackRole
53295
+ );
53296
+ if (latin === void 0 && eastAsia === void 0 && complexScript === void 0) {
53297
+ return style;
53298
+ }
53299
+ return {
53300
+ ...style,
53301
+ ...latin !== void 0 && { fontFamily: latin },
53302
+ ...eastAsia !== void 0 && { eastAsiaFont: eastAsia },
53303
+ ...complexScript !== void 0 && { complexScriptFont: complexScript }
53304
+ };
53305
+ }
53306
+ function remapSegmentFonts(segments, oldScheme, newScheme, fallbackRole) {
53307
+ let changed = false;
53308
+ const next = segments.map((segment) => {
53309
+ if (!segment.style) {
53310
+ return segment;
53311
+ }
53312
+ const style = remapTextStyleFonts(segment.style, oldScheme, newScheme, fallbackRole);
53313
+ if (style === segment.style) {
53314
+ return segment;
53315
+ }
53316
+ changed = true;
53317
+ return { ...segment, style };
53318
+ });
53319
+ return changed ? next : segments;
53320
+ }
53321
+ function remapTableFonts(tableData, oldScheme, newScheme) {
53322
+ let changed = false;
53323
+ const rows = tableData.rows.map((row) => {
53324
+ let rowChanged = false;
53325
+ const cells2 = row.cells.map((cell) => {
53326
+ const face = resolveFace(
53327
+ cell.style?.fontFamily,
53328
+ void 0,
53329
+ "latin",
53330
+ oldScheme,
53331
+ newScheme,
53332
+ "minor"
53333
+ );
53334
+ if (face === void 0) {
53335
+ return cell;
53336
+ }
53337
+ rowChanged = true;
53338
+ return { ...cell, style: { ...cell.style, fontFamily: face } };
53339
+ });
53340
+ if (!rowChanged) {
53341
+ return row;
53342
+ }
53343
+ changed = true;
53344
+ return { ...row, cells: cells2 };
53345
+ });
53346
+ return changed ? { ...tableData, rows } : tableData;
53347
+ }
53348
+ function remapElementFonts(element, oldScheme, newScheme) {
53349
+ const patched = { ...element };
53350
+ let changed = false;
53351
+ const fallbackRole = placeholderFontRole(element);
53352
+ if ("textStyle" in element && element.textStyle) {
53353
+ const textStyle = remapTextStyleFonts(element.textStyle, oldScheme, newScheme, fallbackRole);
53354
+ if (textStyle !== element.textStyle) {
53355
+ patched.textStyle = textStyle;
53356
+ changed = true;
53357
+ }
53358
+ }
53359
+ if ("textSegments" in element && element.textSegments) {
53360
+ const textSegments = remapSegmentFonts(
53361
+ element.textSegments,
53362
+ oldScheme,
53363
+ newScheme,
53364
+ fallbackRole
53365
+ );
53366
+ if (textSegments !== element.textSegments) {
53367
+ patched.textSegments = textSegments;
53368
+ changed = true;
53369
+ }
53370
+ }
53371
+ if (element.type === "group" && element.children) {
53372
+ const children13 = reResolveElementFonts(element.children, oldScheme, newScheme);
53373
+ if (children13 !== element.children) {
53374
+ patched.children = children13;
53375
+ changed = true;
53376
+ }
53377
+ }
53378
+ if (element.type === "table" && element.tableData) {
53379
+ const tableData = remapTableFonts(element.tableData, oldScheme, newScheme);
53380
+ if (tableData !== element.tableData) {
53381
+ patched.tableData = tableData;
53382
+ changed = true;
53383
+ }
53384
+ }
53385
+ return changed ? patched : element;
53386
+ }
53387
+ function reResolveElementFonts(elements2, oldFontScheme, newFontScheme) {
53388
+ let changed = false;
53389
+ const next = elements2.map((element) => {
53390
+ const remapped = remapElementFonts(element, oldFontScheme, newFontScheme);
53391
+ if (remapped !== element) {
53392
+ changed = true;
53393
+ }
53394
+ return remapped;
53395
+ });
53396
+ return changed ? next : elements2;
53397
+ }
53398
+ function reResolveSlideFonts(slides, oldFontScheme, newFontScheme) {
53399
+ let changed = false;
53400
+ const next = slides.map((slide) => {
53401
+ const elements2 = reResolveElementFonts(slide.elements, oldFontScheme, newFontScheme);
53402
+ const notesSegments = slide.notesSegments ? remapSegmentFonts(slide.notesSegments, oldFontScheme, newFontScheme, "minor") : slide.notesSegments;
53403
+ const notesShapes = slide.notesShapes ? reResolveElementFonts(slide.notesShapes, oldFontScheme, newFontScheme) : slide.notesShapes;
53404
+ if (elements2 === slide.elements && notesSegments === slide.notesSegments && notesShapes === slide.notesShapes) {
53405
+ return slide;
53406
+ }
53407
+ changed = true;
53408
+ return { ...slide, elements: elements2, notesSegments, notesShapes };
53409
+ });
53410
+ return changed ? next : slides;
53411
+ }
53412
+ var TOKEN_PATTERN;
53413
+ var init_theme_font_switching = __esm({
53414
+ "src/core/utils/theme-font-switching.ts"() {
53415
+ TOKEN_PATTERN = /^\+(mj|mn)-(lt|ea|cs)$/u;
53416
+ }
53417
+ });
52985
53418
  function normalizeHex2(hex4) {
52986
53419
  if (!hex4) {
52987
53420
  return "";
@@ -52994,7 +53427,7 @@ function buildColorRemapTable(oldColorMap, newColorMap) {
52994
53427
  for (const key2 of allKeys) {
52995
53428
  const oldVal = normalizeHex2(oldColorMap[key2]);
52996
53429
  const newVal = normalizeHex2(newColorMap[key2]);
52997
- if (oldVal && newVal && oldVal !== newVal) {
53430
+ if (oldVal && newVal && oldVal !== newVal && !remap.has(oldVal)) {
52998
53431
  remap.set(oldVal, `#${newVal}`);
52999
53432
  remap.set(`#${oldVal}`, `#${newVal}`);
53000
53433
  }
@@ -53212,7 +53645,8 @@ function reResolveElementColors(elements2, oldColorMap, newColorScheme) {
53212
53645
  function applyThemeToData(data, newColorScheme, newFontScheme, themeName) {
53213
53646
  const oldColorMap = data.themeColorMap ?? {};
53214
53647
  const newColorMap = buildThemeColorMap(newColorScheme);
53215
- const newSlides = reResolveSlideColors(data.slides, oldColorMap, newColorScheme);
53648
+ const recolouredSlides = reResolveSlideColors(data.slides, oldColorMap, newColorScheme);
53649
+ const newSlides = newFontScheme ? reResolveSlideFonts(recolouredSlides, data.theme?.fontScheme, newFontScheme) : recolouredSlides;
53216
53650
  const newTheme = {
53217
53651
  ...data.theme,
53218
53652
  colorScheme: newColorScheme,
@@ -53231,6 +53665,7 @@ var init_theme_switching = __esm({
53231
53665
  init_theme_color_ref();
53232
53666
  init_theme();
53233
53667
  init_gradient_angle();
53668
+ init_theme_font_switching();
53234
53669
  }
53235
53670
  });
53236
53671
  function applyThemeOverrideToSlide(slide, baseColorScheme, nextOverride) {
@@ -60216,6 +60651,7 @@ var init_utils = __esm({
60216
60651
  init_vml_parser();
60217
60652
  init_activex_parser();
60218
60653
  init_activex_serializer();
60654
+ init_shape_ids();
60219
60655
  init_kinsoku_parser();
60220
60656
  init_smart_tags_parser();
60221
60657
  init_header_footer_placeholder();
@@ -60225,6 +60661,7 @@ var init_utils = __esm({
60225
60661
  init_font_substitution();
60226
60662
  init_pptx_validator();
60227
60663
  init_theme_switching();
60664
+ init_theme_font_switching();
60228
60665
  init_slide_theme_override();
60229
60666
  init_smartart_layout_definition();
60230
60667
  init_smartart_definition_metadata();
@@ -60467,14 +60904,109 @@ var init_custom_geometry_live_eval = __esm({
60467
60904
  ensureArray7 = (value) => ensureArrayValue(value);
60468
60905
  }
60469
60906
  });
60470
- var init_connector_elbow_geometry = __esm({
60471
- "src/core/geometry/connector-elbow-geometry.ts"() {
60907
+ function formatCoordinate(value) {
60908
+ return String(Number(value.toFixed(12)));
60909
+ }
60910
+ function flipPresetPath(pathData, width, height, flipH, flipV) {
60911
+ const tokens = pathData.match(PATH_TOKEN);
60912
+ if (!tokens) {
60913
+ return void 0;
60472
60914
  }
60473
- });
60915
+ const output = [];
60916
+ let command = "";
60917
+ let coordinateIndex = 0;
60918
+ for (const token2 of tokens) {
60919
+ if (/^[A-Z]$/u.test(token2)) {
60920
+ command = token2;
60921
+ coordinateIndex = 0;
60922
+ if (!(command in COMMAND_ARITY)) {
60923
+ return void 0;
60924
+ }
60925
+ output.push(command);
60926
+ continue;
60927
+ }
60928
+ const arity = COMMAND_ARITY[command];
60929
+ if (!arity || coordinateIndex >= arity) {
60930
+ return void 0;
60931
+ }
60932
+ const value = Number(token2);
60933
+ const isX = coordinateIndex % 2 === 0;
60934
+ const flipped = isX ? flipH ? width - value : value : flipV ? height - value : value;
60935
+ output.push(formatCoordinate(flipped));
60936
+ coordinateIndex += 1;
60937
+ }
60938
+ return output.join(" ");
60939
+ }
60940
+ function evaluateConnectorPresetPath(shapeType, width, height, adjustments, flipH, flipV) {
60941
+ if (!CONNECTOR_PRESET.test(shapeType)) {
60942
+ return void 0;
60943
+ }
60944
+ const pathData = evaluatePresetShape(shapeType, width, height, adjustments)?.svgPath;
60945
+ if (!pathData || !flipH && !flipV) {
60946
+ return pathData;
60947
+ }
60948
+ return flipPresetPath(pathData, width, height, flipH, flipV);
60949
+ }
60950
+ var CONNECTOR_PRESET;
60951
+ var PATH_TOKEN;
60952
+ var COMMAND_ARITY;
60953
+ var init_connector_preset_geometry = __esm({
60954
+ "src/core/geometry/connector-preset-geometry.ts"() {
60955
+ init_preset_shape_evaluator();
60956
+ CONNECTOR_PRESET = /^(?:bent|curved)connector[2-5]$/iu;
60957
+ PATH_TOKEN = /[MLQCZ]|[-+]?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?/giu;
60958
+ COMMAND_ARITY = {
60959
+ M: 2,
60960
+ L: 2,
60961
+ Q: 4,
60962
+ C: 6,
60963
+ Z: 0
60964
+ };
60965
+ }
60966
+ });
60967
+ function getConnectorPathGeometry(element) {
60968
+ const width = Math.max(element.width, 0);
60969
+ const height = Math.max(element.height, 0);
60970
+ const shapeType = element.shapeType || "";
60971
+ const point = (x, y) => `${x} ${y}`;
60972
+ const rawSpPr = element.rawXml?.["p:spPr"];
60973
+ const rawXfrm = rawSpPr?.["a:xfrm"];
60974
+ const xmlBoolean = (value) => value === true || value === 1 || value === "1" || value === "true";
60975
+ const flipH = element.flipHorizontal ?? xmlBoolean(rawXfrm?.["@_flipH"]);
60976
+ const flipV = element.flipVertical ?? xmlBoolean(rawXfrm?.["@_flipV"]);
60977
+ const startX2 = flipH ? width : 0;
60978
+ const startY = flipV ? height : 0;
60979
+ const endX = flipH ? 0 : width;
60980
+ const endY = flipV ? 0 : height;
60981
+ const presetPath = evaluateConnectorPresetPath(
60982
+ shapeType,
60983
+ width,
60984
+ height,
60985
+ element.shapeAdjustments,
60986
+ flipH,
60987
+ flipV
60988
+ );
60989
+ if (presetPath) {
60990
+ return {
60991
+ startX: startX2,
60992
+ startY,
60993
+ endX,
60994
+ endY,
60995
+ pathData: presetPath
60996
+ };
60997
+ }
60998
+ return {
60999
+ startX: startX2,
61000
+ startY,
61001
+ endX,
61002
+ endY,
61003
+ pathData: `M ${point(startX2, startY)} L ${point(endX, endY)}`
61004
+ };
61005
+ }
60474
61006
  var init_connector_geometry = __esm({
60475
61007
  "src/core/geometry/connector-geometry.ts"() {
60476
61008
  init_color_primitives();
60477
- init_connector_elbow_geometry();
61009
+ init_connector_preset_geometry();
60478
61010
  }
60479
61011
  });
60480
61012
  function isTextOrientationMatrix(value) {
@@ -70081,39 +70613,76 @@ function collectCnvPrNodes(node, results, ensureArray20) {
70081
70613
  }
70082
70614
  }
70083
70615
  }
70616
+ var ShapeIdAllocator;
70084
70617
  var PptxShapeIdValidator;
70085
70618
  var init_PptxShapeIdValidator = __esm({
70086
70619
  "src/core/core/builders/PptxShapeIdValidator.ts"() {
70620
+ init_shape_ids();
70621
+ ShapeIdAllocator = class {
70622
+ constructor(used, maxId) {
70623
+ this.used = used;
70624
+ this.maxId = maxId;
70625
+ }
70626
+ used;
70627
+ maxId;
70628
+ gapCursor = 1;
70629
+ next() {
70630
+ if (this.maxId < MAX_SHAPE_ID) {
70631
+ this.maxId += 1;
70632
+ this.used.add(this.maxId);
70633
+ return this.maxId;
70634
+ }
70635
+ while (this.gapCursor <= MAX_SHAPE_ID && this.used.has(this.gapCursor)) {
70636
+ this.gapCursor += 1;
70637
+ }
70638
+ if (this.gapCursor > MAX_SHAPE_ID) {
70639
+ throw new Error("No free DrawingML shape id left in this shape tree.");
70640
+ }
70641
+ this.used.add(this.gapCursor);
70642
+ return this.gapCursor;
70643
+ }
70644
+ };
70087
70645
  PptxShapeIdValidator = class {
70088
- validateAndDeduplicateIds(spTree, ensureArray20) {
70646
+ validateAndDeduplicateIds(spTree, ensureArray20, referenceRoot = spTree) {
70647
+ return this.repairShapeIds(spTree, ensureArray20, referenceRoot).reassigned;
70648
+ }
70649
+ /**
70650
+ * Same repair, but also returns the old-id -> new-id map so a caller can
70651
+ * replay it onto state that lives outside `referenceRoot` (the live element
70652
+ * model, a cached `rawTiming`, typed ActiveX controls).
70653
+ */
70654
+ repairShapeIds(spTree, ensureArray20, referenceRoot = spTree) {
70655
+ const ids = /* @__PURE__ */ new Map();
70089
70656
  const cNvPrNodes = [];
70090
70657
  collectCnvPrNodes(spTree, cNvPrNodes, ensureArray20);
70091
70658
  if (cNvPrNodes.length === 0) {
70092
- return 0;
70659
+ return { reassigned: 0, ids };
70093
70660
  }
70094
70661
  const usedIds = /* @__PURE__ */ new Set();
70095
- const duplicates = [];
70662
+ const invalid = [];
70096
70663
  let maxId = 0;
70097
70664
  for (const cNvPr of cNvPrNodes) {
70098
- const idRaw = Number.parseInt(String(cNvPr["@_id"] ?? "0"), 10);
70099
- const id = Number.isFinite(idRaw) ? idRaw : 0;
70665
+ const id = parseShapeId(cNvPr["@_id"], true);
70666
+ if (id === void 0 || id === 0 || usedIds.has(id)) {
70667
+ invalid.push(cNvPr);
70668
+ continue;
70669
+ }
70670
+ usedIds.add(id);
70100
70671
  if (id > maxId) {
70101
70672
  maxId = id;
70102
70673
  }
70103
- if (id === 0 || usedIds.has(id)) {
70104
- duplicates.push(cNvPr);
70105
- } else {
70106
- usedIds.add(id);
70107
- }
70108
70674
  }
70109
- let reassigned = 0;
70110
- for (const cNvPr of duplicates) {
70111
- maxId += 1;
70112
- cNvPr["@_id"] = String(maxId);
70113
- usedIds.add(maxId);
70114
- reassigned += 1;
70675
+ const allocator = new ShapeIdAllocator(usedIds, maxId);
70676
+ for (const cNvPr of invalid) {
70677
+ const oldId = String(cNvPr["@_id"] ?? "").trim();
70678
+ const fresh = String(allocator.next());
70679
+ cNvPr["@_id"] = fresh;
70680
+ if (oldId.length > 0) {
70681
+ ids.set(oldId, fresh);
70682
+ }
70115
70683
  }
70116
- return reassigned;
70684
+ remapShapeIdReferences(referenceRoot, ids);
70685
+ return { reassigned: invalid.length, ids };
70117
70686
  }
70118
70687
  };
70119
70688
  }
@@ -78496,6 +79065,62 @@ var init_embedded_font_list = __esm({
78496
79065
  };
78497
79066
  }
78498
79067
  });
79068
+ function partRelsPath(partPath) {
79069
+ const lastSlash = partPath.lastIndexOf("/");
79070
+ if (lastSlash < 0) {
79071
+ return `_rels/${partPath}.rels`;
79072
+ }
79073
+ const directory = partPath.slice(0, lastSlash);
79074
+ const fileName = partPath.slice(lastSlash + 1);
79075
+ return `${directory}/_rels/${fileName}.rels`;
79076
+ }
79077
+ var init_part_rels_path = __esm({
79078
+ "src/core/utils/part-rels-path.ts"() {
79079
+ }
79080
+ });
79081
+ function isEmptyTextElement(element) {
79082
+ if (element.type !== "text" || !hasTextProperties(element)) {
79083
+ return false;
79084
+ }
79085
+ if (element.text && element.text.trim().length > 0) {
79086
+ return false;
79087
+ }
79088
+ return !element.textSegments?.some((segment) => segment.text.trim().length > 0);
79089
+ }
79090
+ function enrichEmptyPlaceholderPrompts(elements2, resolver) {
79091
+ return elements2.map((element) => {
79092
+ if (!isEmptyTextElement(element) || element.promptText) {
79093
+ return element;
79094
+ }
79095
+ const defaults = resolver.resolveDefaults(element);
79096
+ const placeholderType2 = resolver.placeholderType(element);
79097
+ if (!defaults && placeholderType2 === void 0) {
79098
+ return element;
79099
+ }
79100
+ const textStyle = { ...element.textStyle ?? {} };
79101
+ if (defaults) {
79102
+ resolver.applyBodyDefaults(textStyle, defaults);
79103
+ const firstLevel = defaults.levelStyles?.[0];
79104
+ if (firstLevel) {
79105
+ resolver.applyLevelDefaults(textStyle, firstLevel);
79106
+ }
79107
+ }
79108
+ const enriched = {
79109
+ ...element,
79110
+ ...defaults?.promptText ? { promptText: defaults.promptText } : {},
79111
+ ...Object.keys(textStyle).length > 0 ? { textStyle } : {}
79112
+ };
79113
+ if (placeholderType2 !== void 0) {
79114
+ enriched.placeholderType = placeholderType2;
79115
+ }
79116
+ return enriched;
79117
+ });
79118
+ }
79119
+ var init_layout_switch_placeholder_prompts = __esm({
79120
+ "src/core/core/runtime/layout-switch-placeholder-prompts.ts"() {
79121
+ init_types();
79122
+ }
79123
+ });
78499
79124
  var DEFAULT_MAX_UNCOMPRESSED_BYTES;
78500
79125
  var MAX_ZIP_ENTRY_COUNT;
78501
79126
  var ZipBombError;
@@ -81485,19 +82110,6 @@ var init_color_scheme_index = __esm({
81485
82110
  };
81486
82111
  }
81487
82112
  });
81488
- function partRelsPath(partPath) {
81489
- const lastSlash = partPath.lastIndexOf("/");
81490
- if (lastSlash < 0) {
81491
- return `_rels/${partPath}.rels`;
81492
- }
81493
- const directory = partPath.slice(0, lastSlash);
81494
- const fileName = partPath.slice(lastSlash + 1);
81495
- return `${directory}/_rels/${fileName}.rels`;
81496
- }
81497
- var init_part_rels_path = __esm({
81498
- "src/core/utils/part-rels-path.ts"() {
81499
- }
81500
- });
81501
82113
  function rememberAuxiliaryMasterUnparsedNodes(runtime, partPath, nodesByTag) {
81502
82114
  let byPart = unparsedNodesByRuntime.get(runtime);
81503
82115
  if (!byPart) {
@@ -81555,6 +82167,16 @@ function masterPartElementSignature(elements2) {
81555
82167
  return "";
81556
82168
  }
81557
82169
  }
82170
+ function templateElementSignature(element) {
82171
+ try {
82172
+ return JSON.stringify(
82173
+ element,
82174
+ (key2, value) => TEMPLATE_ELEMENT_SKIP_KEYS.has(key2) ? void 0 : value
82175
+ );
82176
+ } catch {
82177
+ return "";
82178
+ }
82179
+ }
81558
82180
  function rememberMasterPartElementSignature(runtime, partPath, elements2) {
81559
82181
  let byPart = signaturesByRuntime.get(runtime);
81560
82182
  if (!byPart) {
@@ -81575,6 +82197,7 @@ function masterPartElementsChanged(runtime, partPath, elements2) {
81575
82197
  }
81576
82198
  var signaturesByRuntime;
81577
82199
  var SIGNATURE_SKIP_KEYS;
82200
+ var TEMPLATE_ELEMENT_SKIP_KEYS;
81578
82201
  var init_master_part_element_signature = __esm({
81579
82202
  "src/core/core/runtime/master-part-element-signature.ts"() {
81580
82203
  signaturesByRuntime = /* @__PURE__ */ new WeakMap();
@@ -81586,6 +82209,10 @@ var init_master_part_element_signature = __esm({
81586
82209
  "posterSrc",
81587
82210
  "thumbnailSrc"
81588
82211
  ]);
82212
+ TEMPLATE_ELEMENT_SKIP_KEYS = /* @__PURE__ */ new Set([
82213
+ ...SIGNATURE_SKIP_KEYS,
82214
+ "shapeId"
82215
+ ]);
81589
82216
  }
81590
82217
  });
81591
82218
  function masterPartIdPrefix(rootTag2, partPath) {
@@ -82863,6 +83490,86 @@ var init_pptx_print_properties = __esm({
82863
83490
  findKey13 = (node, name) => Object.keys(node).find((key2) => localName20(key2) === name);
82864
83491
  }
82865
83492
  });
83493
+ function canonicalPlaceholderType(value) {
83494
+ const text22 = String(value ?? "").trim();
83495
+ if (text22.length === 0) {
83496
+ return void 0;
83497
+ }
83498
+ return CANONICAL_BY_LOWER2.get(text22.toLowerCase());
83499
+ }
83500
+ function canonicalizePlaceholderTypes(root) {
83501
+ let changed = 0;
83502
+ const visit = (value, tag) => {
83503
+ if (Array.isArray(value)) {
83504
+ for (const item of value) {
83505
+ visit(item, tag);
83506
+ }
83507
+ return;
83508
+ }
83509
+ if (!value || typeof value !== "object") {
83510
+ return;
83511
+ }
83512
+ const node = value;
83513
+ if (tag === "p:ph" && node["@_type"] !== void 0) {
83514
+ const canonical = canonicalPlaceholderType(node["@_type"]);
83515
+ if (canonical !== void 0 && canonical !== String(node["@_type"])) {
83516
+ node["@_type"] = canonical;
83517
+ changed += 1;
83518
+ }
83519
+ }
83520
+ for (const [key2, child262] of Object.entries(node)) {
83521
+ if (!key2.startsWith("@_")) {
83522
+ visit(child262, key2);
83523
+ }
83524
+ }
83525
+ };
83526
+ visit(root, "");
83527
+ return changed;
83528
+ }
83529
+ var VALID_PLACEHOLDER_TYPES;
83530
+ var CANONICAL_BY_LOWER2;
83531
+ var init_placeholder_validation = __esm({
83532
+ "src/core/utils/placeholder-validation.ts"() {
83533
+ VALID_PLACEHOLDER_TYPES = /* @__PURE__ */ new Set([
83534
+ "body",
83535
+ "chart",
83536
+ "clipArt",
83537
+ "ctrTitle",
83538
+ "dgm",
83539
+ "dt",
83540
+ "ftr",
83541
+ "hdr",
83542
+ "media",
83543
+ "obj",
83544
+ "pic",
83545
+ "sldImg",
83546
+ "sldNum",
83547
+ "subTitle",
83548
+ "tbl",
83549
+ "title",
83550
+ // Additional types from extended specs
83551
+ "half",
83552
+ "qtr",
83553
+ "txAndClipArt",
83554
+ "txAndChart",
83555
+ "txAndMedia",
83556
+ "txAndObj",
83557
+ "txAndTwoObj",
83558
+ "txOverObj",
83559
+ "objAndTx",
83560
+ "twoObj",
83561
+ "twoObjAndObj",
83562
+ "twoObjAndTx",
83563
+ "twoObjOverTx",
83564
+ "objOverTx",
83565
+ "twoColTx",
83566
+ "fourObj"
83567
+ ]);
83568
+ CANONICAL_BY_LOWER2 = new Map(
83569
+ Array.from(VALID_PLACEHOLDER_TYPES, (type) => [type.toLowerCase(), type])
83570
+ );
83571
+ }
83572
+ });
82866
83573
  function elementRectEmu(el) {
82867
83574
  return {
82868
83575
  x: el.xEmu ?? Math.round(el.x * EMU_PER_PX),
@@ -84968,10 +85675,10 @@ var init_group_writer = __esm({
84968
85675
  ZERO_RECT = { x: 0, y: 0, w: 0, h: 0 };
84969
85676
  }
84970
85677
  });
84971
- var ShapeIdAllocator;
85678
+ var ShapeIdAllocator2;
84972
85679
  var init_shape_id_allocator = __esm({
84973
85680
  "src/core/ppt/writer/shape-id-allocator.ts"() {
84974
- ShapeIdAllocator = class {
85681
+ ShapeIdAllocator2 = class {
84975
85682
  current;
84976
85683
  constructor(drawingId, clusterSize) {
84977
85684
  this.current = drawingId * clusterSize - 1;
@@ -85007,7 +85714,7 @@ function buildBackgroundShape(rgb2, allocator) {
85007
85714
  return record(OA.SpContainer, data, 0, true);
85008
85715
  }
85009
85716
  function buildDrawing(canvasRect, shapes, backgroundRgb, fonts, drawingId, hyperlinks, oleEmbeds, mediaEmbeds) {
85010
- const allocator = new ShapeIdAllocator(drawingId, SHAPE_ID_CLUSTER_SIZE2);
85717
+ const allocator = new ShapeIdAllocator2(drawingId, SHAPE_ID_CLUSTER_SIZE2);
85011
85718
  const spgrData = new ByteWriter().bytes(buildCanvasPatriarch(allocator));
85012
85719
  if (backgroundRgb) {
85013
85720
  spgrData.bytes(buildBackgroundShape(backgroundRgb, allocator));
@@ -91106,7 +91813,7 @@ function scorePlaceholderMatch(element, source, target) {
91106
91813
  }
91107
91814
  const sourceType = normalizeType(source.type);
91108
91815
  const targetType = normalizeType(target.type);
91109
- let score = 0;
91816
+ let score = 1;
91110
91817
  if (source.idx !== void 0 && source.idx === target.idx) {
91111
91818
  score += 100;
91112
91819
  }
@@ -93638,11 +94345,97 @@ var init_SvgExporter = __esm({
93638
94345
  };
93639
94346
  }
93640
94347
  });
94348
+ var TemplateElementBaselineTracker;
94349
+ var init_template_element_baselines = __esm({
94350
+ "src/core/core/runtime/template-element-baselines.ts"() {
94351
+ init_master_part_element_signature();
94352
+ TemplateElementBaselineTracker = class {
94353
+ /** Element id -> signature of the copy the owning part currently holds. */
94354
+ baselines = /* @__PURE__ */ new Map();
94355
+ /** Copies superseded by a written edit; skipped on every later save. */
94356
+ stale = /* @__PURE__ */ new WeakSet();
94357
+ /** Element id -> signature written back during the save in progress. */
94358
+ pending = /* @__PURE__ */ new Map();
94359
+ /** Every copy the save in progress looked at, keyed by element id. */
94360
+ seen = /* @__PURE__ */ new Map();
94361
+ /** Forget everything; called wherever the other per-load caches are cleared. */
94362
+ reset() {
94363
+ this.baselines.clear();
94364
+ this.pending.clear();
94365
+ this.seen.clear();
94366
+ this.stale = /* @__PURE__ */ new WeakSet();
94367
+ }
94368
+ /**
94369
+ * Record the as-parsed signature of freshly produced inherited copies. A
94370
+ * baseline is written once per id: a later re-parse of the same part (layout
94371
+ * switch, preview decoding) must not move it, because the part's XML may by
94372
+ * then already carry an edit the tracker has committed.
94373
+ */
94374
+ recordBaselines(elements2) {
94375
+ for (const element of elements2) {
94376
+ if (!this.baselines.has(element.id)) {
94377
+ this.baselines.set(element.id, templateElementSignature(element));
94378
+ }
94379
+ }
94380
+ }
94381
+ /** Drop any bookkeeping left over from a save that did not complete. */
94382
+ beginSave() {
94383
+ this.pending.clear();
94384
+ this.seen.clear();
94385
+ }
94386
+ /**
94387
+ * Decide whether the save writer has to write this copy back into its
94388
+ * part. `false` means the part already holds it (or a newer edit of it),
94389
+ * so the shared `rawXml` must be left untouched.
94390
+ */
94391
+ shouldWriteBack(element) {
94392
+ if (this.stale.has(element)) {
94393
+ return false;
94394
+ }
94395
+ const signature = templateElementSignature(element);
94396
+ this.remember(element, signature);
94397
+ const baseline = this.baselines.get(element.id);
94398
+ if (baseline !== void 0 && baseline === signature) {
94399
+ return false;
94400
+ }
94401
+ this.pending.set(element.id, signature);
94402
+ return true;
94403
+ }
94404
+ /**
94405
+ * Promote the signatures written during this save to baselines, and mark
94406
+ * every other copy of the same id that still matched the previous baseline
94407
+ * as stale.
94408
+ */
94409
+ commitSave() {
94410
+ for (const [id, signature] of this.pending) {
94411
+ const previous = this.baselines.get(id);
94412
+ for (const copy2 of this.seen.get(id) ?? []) {
94413
+ if (copy2.signature !== signature && copy2.signature === previous) {
94414
+ this.stale.add(copy2.element);
94415
+ }
94416
+ }
94417
+ this.baselines.set(id, signature);
94418
+ }
94419
+ this.pending.clear();
94420
+ this.seen.clear();
94421
+ }
94422
+ remember(element, signature) {
94423
+ const copies = this.seen.get(element.id);
94424
+ if (copies) {
94425
+ copies.push({ element, signature });
94426
+ } else {
94427
+ this.seen.set(element.id, [{ element, signature }]);
94428
+ }
94429
+ }
94430
+ };
94431
+ }
94432
+ });
93641
94433
  var PptxHandlerRuntime;
93642
94434
  var init_PptxHandlerRuntimeState = __esm({
93643
94435
  "src/core/core/runtime/PptxHandlerRuntimeState.ts"() {
93644
94436
  init_utils();
93645
94437
  init_part_rels_path();
94438
+ init_template_element_baselines();
93646
94439
  PptxHandlerRuntime = class {
93647
94440
  /** The in-memory ZIP archive representing the OPC (.pptx) package. */
93648
94441
  zip;
@@ -93672,6 +94465,13 @@ var init_PptxHandlerRuntimeState = __esm({
93672
94465
  layoutCache = /* @__PURE__ */ new Map();
93673
94466
  /** Cached parsed master elements keyed by master archive path. */
93674
94467
  masterCache = /* @__PURE__ */ new Map();
94468
+ /**
94469
+ * As-parsed signatures of the `layout-` / `master-` element copies merged
94470
+ * into slides, plus the copies a later edit has superseded. Lets the save
94471
+ * writer patch a shared template `rawXml` node only from the copy that was
94472
+ * actually edited; see `template-element-baselines.ts`.
94473
+ */
94474
+ templateElementBaselines = new TemplateElementBaselineTracker();
93675
94475
  /** Raw parsed layout XML objects keyed by layout archive path. */
93676
94476
  layoutXmlMap = /* @__PURE__ */ new Map();
93677
94477
  /** Raw parsed master XML objects keyed by master archive path. */
@@ -99520,6 +100320,7 @@ var init_PptxHandlerRuntimeTextEditing = __esm({
99520
100320
  }
99521
100321
  });
99522
100322
  var PptxHandlerRuntime21;
100323
+ var NON_MATERIALIZED_PLACEHOLDER_TYPES;
99523
100324
  var init_PptxHandlerRuntimeLayoutSwitching = __esm({
99524
100325
  "src/core/core/runtime/PptxHandlerRuntimeLayoutSwitching.ts"() {
99525
100326
  init_constants();
@@ -99739,11 +100540,15 @@ var init_PptxHandlerRuntimeLayoutSwitching = __esm({
99739
100540
  ...slot,
99740
100541
  matched: false
99741
100542
  }));
99742
- const resultElements = [];
99743
- for (const element of elements2) {
100543
+ const claimOrder = [
100544
+ ...elements2.filter((element) => !this.isUntouchedPlaceholderPrompt(element)),
100545
+ ...elements2.filter((element) => this.isUntouchedPlaceholderPrompt(element))
100546
+ ];
100547
+ const remappedByElement = /* @__PURE__ */ new Map();
100548
+ for (const element of claimOrder) {
99744
100549
  const phInfo = this.getElementPlaceholderInfo(element);
99745
100550
  if (!phInfo) {
99746
- resultElements.push(element);
100551
+ remappedByElement.set(element, element);
99747
100552
  continue;
99748
100553
  }
99749
100554
  let resolvedLayoutPh;
@@ -99782,18 +100587,31 @@ var init_PptxHandlerRuntimeLayoutSwitching = __esm({
99782
100587
  if (updatedElement.rawXml) {
99783
100588
  retargetPlaceholder(updatedElement.rawXml, resolvedLayoutPh.phInfo);
99784
100589
  }
99785
- resultElements.push(updatedElement);
99786
- } else if (!this.isUntouchedPlaceholderPrompt(element)) {
99787
- resultElements.push(element);
100590
+ const retyped = updatedElement;
100591
+ if (resolvedLayoutPh.phInfo.type) {
100592
+ retyped.placeholderType = resolvedLayoutPh.phInfo.type;
100593
+ } else {
100594
+ delete retyped.placeholderType;
100595
+ }
100596
+ remappedByElement.set(element, updatedElement);
100597
+ } else {
100598
+ remappedByElement.set(element, this.isUntouchedPlaceholderPrompt(element) ? null : element);
100599
+ }
100600
+ }
100601
+ const resultElements = [];
100602
+ for (const element of elements2) {
100603
+ const remapped = remappedByElement.get(element);
100604
+ if (remapped) {
100605
+ resultElements.push(remapped);
99788
100606
  }
99789
100607
  }
99790
100608
  let slotIndex = 0;
100609
+ const generatedElements = [];
99791
100610
  for (const lp of targets) {
99792
100611
  if (lp.matched) {
99793
100612
  continue;
99794
100613
  }
99795
- const skipTypes = /* @__PURE__ */ new Set(["dt", "ftr", "sldnum", "hdr"]);
99796
- if (lp.phInfo.type && skipTypes.has(lp.phInfo.type)) {
100614
+ if (lp.phInfo.type && NON_MATERIALIZED_PLACEHOLDER_TYPES.has(lp.phInfo.type)) {
99797
100615
  continue;
99798
100616
  }
99799
100617
  const emptyElement = createEmptyPlaceholderElement(
@@ -99805,12 +100623,25 @@ var init_PptxHandlerRuntimeLayoutSwitching = __esm({
99805
100623
  `${newLayoutPath}-${slotIndex++}-${Date.now()}`
99806
100624
  );
99807
100625
  if (emptyElement) {
99808
- resultElements.push(emptyElement);
100626
+ generatedElements.push(emptyElement);
99809
100627
  }
99810
100628
  }
99811
- return resultElements;
100629
+ return [...generatedElements, ...resultElements];
99812
100630
  }
99813
100631
  };
100632
+ NON_MATERIALIZED_PLACEHOLDER_TYPES = /* @__PURE__ */ new Set([
100633
+ "dt",
100634
+ "ftr",
100635
+ "sldnum",
100636
+ "hdr",
100637
+ "pic",
100638
+ "clipart",
100639
+ "chart",
100640
+ "tbl",
100641
+ "dgm",
100642
+ "media",
100643
+ "sldimg"
100644
+ ]);
99814
100645
  }
99815
100646
  });
99816
100647
  function writeCellFill(tcPr, style, resolveColorXml) {
@@ -103923,12 +104754,8 @@ var init_PptxHandlerRuntimeSaveDocumentParts = __esm({
103923
104754
  continue;
103924
104755
  }
103925
104756
  const isPresentationXml = path === "ppt/presentation.xml";
103926
- if (!isPresentationXml) {
103927
- const candidateUris = xmlText2.match(/https?:\/\/[^"'<>\s]+/gu);
103928
- const hasConvertibleUri = candidateUris?.some((uri) => isTransitionalNamespaceUri(uri));
103929
- if (!hasConvertibleUri) {
103930
- continue;
103931
- }
104757
+ if (!isPresentationXml && !containsConvertibleStrictNamespaceAttribute(xmlText2)) {
104758
+ continue;
103932
104759
  }
103933
104760
  try {
103934
104761
  const parsed = parse2(xmlText2);
@@ -105435,6 +106262,16 @@ var init_PptxHandlerRuntimeSaveTextWriter = __esm({
105435
106262
  };
105436
106263
  }
105437
106264
  });
106265
+ function shouldWritePictureGeometry(el, spPr) {
106266
+ if (el.type !== "picture" && el.type !== "image") {
106267
+ return true;
106268
+ }
106269
+ return Boolean(spPr["a:prstGeom"] || spPr["a:custGeom"]);
106270
+ }
106271
+ var init_save_picture_geometry_gate = __esm({
106272
+ "src/core/core/runtime/save-picture-geometry-gate.ts"() {
106273
+ }
106274
+ });
105438
106275
  function getMediaReferenceContainer(shape) {
105439
106276
  if (!shape) {
105440
106277
  return void 0;
@@ -105456,6 +106293,7 @@ var init_PptxHandlerRuntimeSaveElementEmbedding = __esm({
105456
106293
  init_drawing_media_reference();
105457
106294
  init_xml_access();
105458
106295
  init_PptxHandlerRuntimeSaveTextWriter();
106296
+ init_save_picture_geometry_gate();
105459
106297
  PptxHandlerRuntime32 = class extends PptxHandlerRuntime31 {
105460
106298
  /** Serialize table, chart, and SmartArt data when applicable. */
105461
106299
  applyDataSerialization(shape, el, slideId) {
@@ -105497,7 +106335,7 @@ var init_PptxHandlerRuntimeSaveElementEmbedding = __esm({
105497
106335
  return;
105498
106336
  }
105499
106337
  const spPr = ensureXmlChild(shape, "p:spPr");
105500
- if (!spPr) {
106338
+ if (!spPr || !shouldWritePictureGeometry(el, spPr)) {
105501
106339
  return;
105502
106340
  }
105503
106341
  const elWithPaths = el;
@@ -107353,6 +108191,9 @@ var init_PptxHandlerRuntimeSaveElementWriter = __esm({
107353
108191
  * transforms, geometry, styles, text, and sorts into collectors.
107354
108192
  */
107355
108193
  processSlideElement(el, collectors, ctx) {
108194
+ if (this.isOwnTemplateElement(el, ctx) && !this.templateElementBaselines.shouldWriteBack(el)) {
108195
+ return;
108196
+ }
107356
108197
  let shape = el.rawXml;
107357
108198
  if ((el.type === "picture" || el.type === "image") && typeof el.imageData === "string") {
107358
108199
  shape = this.processImageEmbedding(el, shape, ctx) ?? shape;
@@ -107535,6 +108376,135 @@ var init_PptxHandlerRuntimeSaveElementWriter = __esm({
107535
108376
  };
107536
108377
  }
107537
108378
  });
108379
+ function structuralPartRootTag(path) {
108380
+ return PART_ROOT_BY_PATH.find(([pattern]) => pattern.test(path))?.[1];
108381
+ }
108382
+ function spTreeOfPartRoot(root) {
108383
+ const cSld = root?.["p:cSld"];
108384
+ return cSld?.["p:spTree"];
108385
+ }
108386
+ function prescanStructuralPart(xml) {
108387
+ let suspectIds = false;
108388
+ const seen = /* @__PURE__ */ new Set();
108389
+ for (const match of xml.matchAll(CNVPR_ID_RE)) {
108390
+ const id = parseShapeId(match[1] ?? match[2], true);
108391
+ if (id === void 0 || seen.has(id)) {
108392
+ suspectIds = true;
108393
+ break;
108394
+ }
108395
+ seen.add(id);
108396
+ }
108397
+ let placeholderCasing = false;
108398
+ for (const match of xml.matchAll(PH_TYPE_RE)) {
108399
+ const raw = match[1] ?? match[2] ?? "";
108400
+ const canonical = canonicalPlaceholderType(raw);
108401
+ if (canonical !== void 0 && canonical !== raw) {
108402
+ placeholderCasing = true;
108403
+ break;
108404
+ }
108405
+ }
108406
+ return { suspectIds, placeholderCasing };
108407
+ }
108408
+ function countDeclaredIds(node, counts, ensureArray20) {
108409
+ for (const [nvTag, cNvPrTag] of NV_CONTAINERS3) {
108410
+ const cNvPr = node[nvTag]?.[cNvPrTag];
108411
+ if (!cNvPr) {
108412
+ continue;
108413
+ }
108414
+ const id = parseShapeId(cNvPr["@_id"], true);
108415
+ if (id === void 0) {
108416
+ return false;
108417
+ }
108418
+ counts.set(id, (counts.get(id) ?? 0) + 1);
108419
+ }
108420
+ for (const listKey of SHAPE_LISTS) {
108421
+ for (const child262 of ensureArray20(node[listKey])) {
108422
+ if (!countDeclaredIds(child262, counts, ensureArray20)) {
108423
+ return false;
108424
+ }
108425
+ }
108426
+ }
108427
+ for (const envelope of ensureArray20(node["mc:AlternateContent"])) {
108428
+ const merged = /* @__PURE__ */ new Map();
108429
+ for (const branchKey of ["mc:Choice", "mc:Fallback"]) {
108430
+ for (const branch of ensureArray20(envelope[branchKey])) {
108431
+ const branchCounts = /* @__PURE__ */ new Map();
108432
+ if (!countDeclaredIds(branch, branchCounts, ensureArray20)) {
108433
+ return false;
108434
+ }
108435
+ for (const [id, count] of branchCounts) {
108436
+ merged.set(id, Math.max(merged.get(id) ?? 0, count));
108437
+ }
108438
+ }
108439
+ }
108440
+ for (const [id, count] of merged) {
108441
+ counts.set(id, (counts.get(id) ?? 0) + count);
108442
+ }
108443
+ }
108444
+ return true;
108445
+ }
108446
+ function hasStructuralIdDefects(spTree, ensureArray20) {
108447
+ const counts = /* @__PURE__ */ new Map();
108448
+ if (!countDeclaredIds(spTree, counts, ensureArray20)) {
108449
+ return true;
108450
+ }
108451
+ for (const count of counts.values()) {
108452
+ if (count > 1) {
108453
+ return true;
108454
+ }
108455
+ }
108456
+ return false;
108457
+ }
108458
+ function applyShapeIdMapToSlide(slide, ids) {
108459
+ if (ids.size === 0) {
108460
+ return;
108461
+ }
108462
+ remapElementShapeIds(
108463
+ slide.elements.filter((element) => !isTemplateElementId(element.id)),
108464
+ ids
108465
+ );
108466
+ if (slide.rawTiming) {
108467
+ remapShapeIdReferences(slide.rawTiming, ids);
108468
+ }
108469
+ for (const control of slide.activeXControls ?? []) {
108470
+ const replacement = control.shapeId === void 0 ? void 0 : ids.get(control.shapeId.trim());
108471
+ if (replacement !== void 0) {
108472
+ control.shapeId = replacement;
108473
+ }
108474
+ }
108475
+ }
108476
+ var PART_ROOT_BY_PATH;
108477
+ var CNVPR_ID_RE;
108478
+ var PH_TYPE_RE;
108479
+ var NV_CONTAINERS3;
108480
+ var SHAPE_LISTS;
108481
+ var init_save_structural_id_gate = __esm({
108482
+ "src/core/core/runtime/save-structural-id-gate.ts"() {
108483
+ init_group_ops();
108484
+ init_placeholder_validation();
108485
+ init_shape_ids();
108486
+ PART_ROOT_BY_PATH = [
108487
+ [/^ppt\/slides\/[^/]+\.xml$/u, "p:sld"],
108488
+ [/^ppt\/slideLayouts\/[^/]+\.xml$/u, "p:sldLayout"],
108489
+ [/^ppt\/slideMasters\/[^/]+\.xml$/u, "p:sldMaster"],
108490
+ [/^ppt\/notesSlides\/[^/]+\.xml$/u, "p:notes"],
108491
+ [/^ppt\/notesMasters\/[^/]+\.xml$/u, "p:notesMaster"],
108492
+ [/^ppt\/handoutMasters\/[^/]+\.xml$/u, "p:handoutMaster"]
108493
+ ];
108494
+ CNVPR_ID_RE = /<(?:p|p14):cNvPr\b[^>]*?\sid\s*=\s*(?:"([^"]*)"|'([^']*)')/gu;
108495
+ PH_TYPE_RE = /<p:ph\b[^>]*?\stype\s*=\s*(?:"([^"]*)"|'([^']*)')/gu;
108496
+ NV_CONTAINERS3 = [
108497
+ ["p:nvSpPr", "p:cNvPr"],
108498
+ ["p:nvPicPr", "p:cNvPr"],
108499
+ ["p:nvCxnSpPr", "p:cNvPr"],
108500
+ ["p:nvGrpSpPr", "p:cNvPr"],
108501
+ ["p:nvGraphicFramePr", "p:cNvPr"],
108502
+ ["p:nvContentPartPr", "p:cNvPr"],
108503
+ ["p14:nvContentPartPr", "p14:cNvPr"]
108504
+ ];
108505
+ SHAPE_LISTS = ["p:sp", "p:pic", "p:cxnSp", "p:graphicFrame", "p:grpSp", "p:contentPart"];
108506
+ }
108507
+ });
107538
108508
  function hashString(hasher, text22) {
107539
108509
  hasher.update(`s${text22.length}:`);
107540
108510
  if (text22.length <= FULL_HASH_LIMIT) {
@@ -108148,6 +109118,7 @@ var init_PptxHandlerRuntimeSaveSlideWriter = __esm({
108148
109118
  init_builders();
108149
109119
  init_authored_slide_background();
108150
109120
  init_PptxHandlerRuntimeSaveElementWriter();
109121
+ init_save_structural_id_gate();
108151
109122
  init_slide_fingerprint();
108152
109123
  init_slide_save_xml_order();
108153
109124
  init_slide_transition_reconcile();
@@ -108497,11 +109468,13 @@ var init_PptxHandlerRuntimeSaveSlideWriter = __esm({
108497
109468
  this.wrapNewContentPartEnvelopes(spTree, collectors.contentParts);
108498
109469
  this.wrapNewModel3DEnvelopes(spTree, collectors.model3ds);
108499
109470
  this.wrapNewZoomEnvelopes(spTree, collectors.zooms);
108500
- const reassigned = shapeIdValidator.validateAndDeduplicateIds(
109471
+ const { reassigned, ids: reassignedIds } = shapeIdValidator.repairShapeIds(
108501
109472
  spTree,
108502
- (v) => this.ensureArray(v)
109473
+ (v) => this.ensureArray(v),
109474
+ xmlObj
108503
109475
  );
108504
109476
  if (reassigned > 0) {
109477
+ applyShapeIdMapToSlide(slide, reassignedIds);
108505
109478
  this.compatibilityService.reportWarning({
108506
109479
  code: "SHAPE_ID_DEDUPLICATED",
108507
109480
  message: `Reassigned ${reassigned} duplicate shape ID(s) on slide '${slide.id}'.`,
@@ -109245,7 +110218,7 @@ function asObjects3(value) {
109245
110218
  return isXmlObject9(value) ? [value] : [];
109246
110219
  }
109247
110220
  function rememberTemplateSpTreePositions(runtime, partPath, spTree, positionOf) {
109248
- const positions2 = /* @__PURE__ */ new Map();
110221
+ const positions = /* @__PURE__ */ new Map();
109249
110222
  for (const [key2, value] of Object.entries(spTree)) {
109250
110223
  if (!SHAPE_TREE_ELEMENT_TAGS.has(key2) && key2 !== ALTERNATE_CONTENT_TAG3) {
109251
110224
  continue;
@@ -109253,7 +110226,7 @@ function rememberTemplateSpTreePositions(runtime, partPath, spTree, positionOf)
109253
110226
  for (const node of asObjects3(value)) {
109254
110227
  const position2 = positionOf(node);
109255
110228
  if (position2 !== void 0) {
109256
- positions2.set(node, position2);
110229
+ positions.set(node, position2);
109257
110230
  }
109258
110231
  }
109259
110232
  }
@@ -109262,7 +110235,7 @@ function rememberTemplateSpTreePositions(runtime, partPath, spTree, positionOf)
109262
110235
  byPart = /* @__PURE__ */ new Map();
109263
110236
  positionsByRuntime.set(runtime, byPart);
109264
110237
  }
109265
- byPart.set(partPath, positions2);
110238
+ byPart.set(partPath, positions);
109266
110239
  }
109267
110240
  function withReplacedChild(container, tag, indexInType, replacement) {
109268
110241
  const existing = container[tag];
@@ -109291,17 +110264,17 @@ function orderContainer(container, plan, getLocalName2) {
109291
110264
  working = withReplacedChild(working, entry2.tag, entry2.indexInType, ordered4);
109292
110265
  }
109293
110266
  }
109294
- const positions2 = /* @__PURE__ */ new Map();
110267
+ const positions = /* @__PURE__ */ new Map();
109295
110268
  plan.forEach((entry2, position2) => {
109296
110269
  const node = asObjects3(working[entry2.tag])[entry2.indexInType];
109297
- if (node && !positions2.has(node)) {
109298
- positions2.set(node, position2);
110270
+ if (node && !positions.has(node)) {
110271
+ positions.set(node, position2);
109299
110272
  }
109300
110273
  });
109301
- if (positions2.size === 0) {
110274
+ if (positions.size === 0) {
109302
110275
  return working;
109303
110276
  }
109304
- return orderShapeTreeChildren(working, (node) => positions2.get(node), getLocalName2);
110277
+ return orderShapeTreeChildren(working, (node) => positions.get(node), getLocalName2);
109305
110278
  }
109306
110279
  function orderedTemplatePartXml(options) {
109307
110280
  const {
@@ -109354,6 +110327,7 @@ var PptxHandlerRuntime46;
109354
110327
  var init_PptxHandlerRuntimeSaveMasterElements = __esm({
109355
110328
  "src/core/core/runtime/PptxHandlerRuntimeSaveMasterElements.ts"() {
109356
110329
  init_services();
110330
+ init_shape_ids();
109357
110331
  init_builders();
109358
110332
  init_auxiliary_master_node_cache();
109359
110333
  init_master_part_element_signature();
@@ -109463,7 +110437,12 @@ var init_PptxHandlerRuntimeSaveMasterElements = __esm({
109463
110437
  }
109464
110438
  this.publishMasterCollectors(partPath, spTree, collectors);
109465
110439
  this.reapplyAlternateContentEnvelopes(spTree, collectors);
109466
- shapeIdValidator2.validateAndDeduplicateIds(spTree, (value) => this.ensureArray(value));
110440
+ const idRepair = shapeIdValidator2.repairShapeIds(
110441
+ spTree,
110442
+ (value) => this.ensureArray(value),
110443
+ root
110444
+ );
110445
+ remapElementShapeIds(elements2, idRepair.ids);
109467
110446
  rememberTemplateSpTreePositions(this, partPath, spTree, (node) => childOrder3.positionOf(node));
109468
110447
  relsRoot["Relationship"] = relationships;
109469
110448
  relsData["Relationships"] = relsRoot;
@@ -110513,7 +111492,104 @@ var init_PptxHandlerRuntimeSaveLegacyPpt = __esm({
110513
111492
  };
110514
111493
  }
110515
111494
  });
111495
+ var shapeIdValidator3;
110516
111496
  var PptxHandlerRuntime53;
111497
+ var init_PptxHandlerRuntimeSaveStructuralIds = __esm({
111498
+ "src/core/core/runtime/PptxHandlerRuntimeSaveStructuralIds.ts"() {
111499
+ init_placeholder_validation();
111500
+ init_shape_ids();
111501
+ init_builders();
111502
+ init_PptxHandlerRuntimeSaveLegacyPpt();
111503
+ init_save_structural_id_gate();
111504
+ init_slide_fingerprint();
111505
+ init_template_sp_tree_order();
111506
+ shapeIdValidator3 = new PptxShapeIdValidator();
111507
+ PptxHandlerRuntime53 = class extends PptxHandlerRuntime52 {
111508
+ async repairStructuralIdsBeforeExport(slides) {
111509
+ for (const path of Object.keys(this.zip.files)) {
111510
+ const rootTag2 = structuralPartRootTag(path);
111511
+ if (rootTag2 === void 0) {
111512
+ continue;
111513
+ }
111514
+ const xml = await this.zip.file(path)?.async("string");
111515
+ if (xml === void 0) {
111516
+ continue;
111517
+ }
111518
+ const scan = prescanStructuralPart(xml);
111519
+ if (!scan.suspectIds && !scan.placeholderCasing) {
111520
+ continue;
111521
+ }
111522
+ await this.repairStructuralPart(path, rootTag2, xml, scan.suspectIds, slides);
111523
+ }
111524
+ }
111525
+ /** The loader's cached parse of a part, which the live model's `rawXml` nodes belong to. */
111526
+ cachedStructuralPart(path) {
111527
+ return this.slideMap.get(path) ?? this.layoutXmlMap.get(path) ?? this.masterXmlMap.get(path);
111528
+ }
111529
+ async repairStructuralPart(path, rootTag2, xml, suspectIds, slides) {
111530
+ const fresh = this.parser.parse(xml);
111531
+ const ensureArray20 = (value) => this.ensureArray(value);
111532
+ const freshTree = spTreeOfPartRoot(fresh[rootTag2]);
111533
+ const needsIds = suspectIds && freshTree !== void 0 && hasStructuralIdDefects(freshTree, ensureArray20);
111534
+ const cached = this.cachedStructuralPart(path);
111535
+ let target = cached ?? fresh;
111536
+ let repair = this.repairPartObject(target, rootTag2, needsIds, ensureArray20);
111537
+ if (repair.reassigned === 0 && repair.casing === 0 && cached !== void 0) {
111538
+ target = fresh;
111539
+ repair = this.repairPartObject(target, rootTag2, needsIds, ensureArray20);
111540
+ }
111541
+ if (repair.reassigned === 0 && repair.casing === 0) {
111542
+ return;
111543
+ }
111544
+ if (repair.ids.size > 0) {
111545
+ const slide = slides.find((candidate) => candidate.id === path);
111546
+ if (slide) {
111547
+ applyShapeIdMapToSlide(slide, repair.ids);
111548
+ this.savedSlideFingerprints.set(slide.id, fingerprintSlide(slide));
111549
+ }
111550
+ const templateElements = this.layoutCache.get(path) ?? this.masterCache.get(path);
111551
+ if (templateElements) {
111552
+ remapElementShapeIds(templateElements, repair.ids);
111553
+ }
111554
+ }
111555
+ const ordered4 = orderedTemplatePartXml({
111556
+ runtime: this,
111557
+ partPath: path,
111558
+ xmlObj: target,
111559
+ rootTag: rootTag2,
111560
+ sourceXml: xml,
111561
+ getLocalName: (key2) => this.compatibilityService.getXmlLocalName(key2),
111562
+ alternateContentBlockByRawXml: this.alternateContentBlockByRawXml
111563
+ });
111564
+ this.zip.file(path, this.builder.build(ordered4));
111565
+ if (repair.reassigned > 0) {
111566
+ this.compatibilityService.reportWarning({
111567
+ code: "SHAPE_ID_DEDUPLICATED",
111568
+ message: `Reassigned ${repair.reassigned} invalid or duplicate shape ID(s) in '${path}'.`,
111569
+ scope: "save",
111570
+ slideId: path
111571
+ });
111572
+ }
111573
+ if (repair.casing > 0) {
111574
+ this.compatibilityService.reportWarning({
111575
+ code: "PLACEHOLDER_TYPE_CANONICALIZED",
111576
+ message: `Corrected the casing of ${repair.casing} placeholder type(s) in '${path}'.`,
111577
+ scope: "save",
111578
+ slideId: path
111579
+ });
111580
+ }
111581
+ }
111582
+ repairPartObject(xmlObj, rootTag2, needsIds, ensureArray20) {
111583
+ const root = xmlObj[rootTag2];
111584
+ const spTree = spTreeOfPartRoot(root);
111585
+ const idRepair = needsIds && root !== void 0 && spTree !== void 0 ? shapeIdValidator3.repairShapeIds(spTree, ensureArray20, root) : { reassigned: 0, ids: /* @__PURE__ */ new Map() };
111586
+ const casing = root === void 0 ? 0 : canonicalizePlaceholderTypes(root);
111587
+ return { ...idRepair, casing };
111588
+ }
111589
+ };
111590
+ }
111591
+ });
111592
+ var PptxHandlerRuntime54;
110517
111593
  var init_PptxHandlerRuntimeSavePipeline = __esm({
110518
111594
  "src/core/core/runtime/PptxHandlerRuntimeSavePipeline.ts"() {
110519
111595
  init_modern_comment_package();
@@ -110521,8 +111597,8 @@ var init_PptxHandlerRuntimeSavePipeline = __esm({
110521
111597
  init_factories();
110522
111598
  init_header_footer_parts();
110523
111599
  init_pptx_print_properties();
110524
- init_PptxHandlerRuntimeSaveLegacyPpt();
110525
- PptxHandlerRuntime53 = class _PptxHandlerRuntime extends PptxHandlerRuntime52 {
111600
+ init_PptxHandlerRuntimeSaveStructuralIds();
111601
+ PptxHandlerRuntime54 = class _PptxHandlerRuntime extends PptxHandlerRuntime53 {
110526
111602
  /**
110527
111603
  * Resolve the effective conformance class for this save operation.
110528
111604
  *
@@ -110561,9 +111637,11 @@ var init_PptxHandlerRuntimeSavePipeline = __esm({
110561
111637
  });
110562
111638
  await this.ensureNotesMasterForAuthoredNotes(slides, saveConstants);
110563
111639
  await this.ensureHandoutMasterInfrastructure(options?.handoutMaster, saveConstants);
111640
+ this.templateElementBaselines.beginSave();
110564
111641
  for (const slide of slides) {
110565
111642
  await this.processSlideForSave(slide, saveSession, saveConstants);
110566
111643
  }
111644
+ this.templateElementBaselines.commitSave();
110567
111645
  const contentTypesXml3 = await this.zip.file("[Content_Types].xml")?.async("string");
110568
111646
  if (contentTypesXml3) {
110569
111647
  const contentTypesData = this.parser.parse(contentTypesXml3);
@@ -110727,6 +111805,7 @@ var init_PptxHandlerRuntimeSavePipeline = __esm({
110727
111805
  await this.stripDigitalSignatures();
110728
111806
  const outputFormat = options?.outputFormat ?? "pptx";
110729
111807
  await this.applyOutputFormatOverrides(outputFormat);
111808
+ await this.repairStructuralIdsBeforeExport(slides);
110730
111809
  if (effectiveConformance === "strict") {
110731
111810
  await this.convertZipToStrictConformance();
110732
111811
  }
@@ -110810,14 +111889,14 @@ var init_PptxHandlerRuntimeSavePipeline = __esm({
110810
111889
  }
110811
111890
  });
110812
111891
  var SPECIAL_PLACEHOLDER_TYPES;
110813
- var PptxHandlerRuntime54;
111892
+ var PptxHandlerRuntime55;
110814
111893
  var init_PptxHandlerRuntimeElementParsing = __esm({
110815
111894
  "src/core/core/runtime/PptxHandlerRuntimeElementParsing.ts"() {
110816
111895
  init_utils();
110817
111896
  init_placeholder_index();
110818
111897
  init_PptxHandlerRuntimeSavePipeline();
110819
111898
  SPECIAL_PLACEHOLDER_TYPES = /* @__PURE__ */ new Set(["dt", "ftr", "hdr", "sldnum"]);
110820
- PptxHandlerRuntime54 = class _PptxHandlerRuntime extends PptxHandlerRuntime53 {
111899
+ PptxHandlerRuntime55 = class _PptxHandlerRuntime extends PptxHandlerRuntime54 {
110821
111900
  /**
110822
111901
  * Parse media data (video/audio path and MIME type) from graphic frame data.
110823
111902
  */
@@ -111112,11 +112191,11 @@ function readBoolean(value) {
111112
112191
  }
111113
112192
  return String(value) !== "0" && String(value).toLowerCase() !== "false";
111114
112193
  }
111115
- var PptxHandlerRuntime55;
112194
+ var PptxHandlerRuntime56;
111116
112195
  var init_PptxHandlerRuntimeZoomParsing = __esm({
111117
112196
  "src/core/core/runtime/PptxHandlerRuntimeZoomParsing.ts"() {
111118
112197
  init_PptxHandlerRuntimeElementParsing();
111119
- PptxHandlerRuntime55 = class _PptxHandlerRuntime extends PptxHandlerRuntime54 {
112198
+ PptxHandlerRuntime56 = class _PptxHandlerRuntime extends PptxHandlerRuntime55 {
111120
112199
  /** Parse an Office 2016 `pslz:sldZm` slide Zoom object. */
111121
112200
  async parseSlideZoomElement(zoom, id, slidePath) {
111122
112201
  try {
@@ -111183,12 +112262,12 @@ function readBoolean2(value) {
111183
112262
  }
111184
112263
  return String(value) !== "0" && String(value).toLowerCase() !== "false";
111185
112264
  }
111186
- var PptxHandlerRuntime56;
112265
+ var PptxHandlerRuntime57;
111187
112266
  var init_PptxHandlerRuntimeSectionZoomParsing = __esm({
111188
112267
  "src/core/core/runtime/PptxHandlerRuntimeSectionZoomParsing.ts"() {
111189
112268
  init_presentation_section_parser();
111190
112269
  init_PptxHandlerRuntimeZoomParsing();
111191
- PptxHandlerRuntime56 = class _PptxHandlerRuntime extends PptxHandlerRuntime55 {
112270
+ PptxHandlerRuntime57 = class _PptxHandlerRuntime extends PptxHandlerRuntime56 {
111192
112271
  /** Parse an Office 2016 `psezm:sectionZm` section Zoom object. */
111193
112272
  async parseSectionZoomElement(zoom, id, slidePath) {
111194
112273
  try {
@@ -111248,12 +112327,12 @@ var init_PptxHandlerRuntimeSectionZoomParsing = __esm({
111248
112327
  };
111249
112328
  }
111250
112329
  });
111251
- var PptxHandlerRuntime57;
112330
+ var PptxHandlerRuntime58;
111252
112331
  var init_PptxHandlerRuntimeSummaryZoomParsing = __esm({
111253
112332
  "src/core/core/runtime/PptxHandlerRuntimeSummaryZoomParsing.ts"() {
111254
112333
  init_presentation_section_parser();
111255
112334
  init_PptxHandlerRuntimeSectionZoomParsing();
111256
- PptxHandlerRuntime57 = class _PptxHandlerRuntime extends PptxHandlerRuntime56 {
112335
+ PptxHandlerRuntime58 = class _PptxHandlerRuntime extends PptxHandlerRuntime57 {
111257
112336
  /** Parse an Office 2016 Summary Zoom container and all section tiles. */
111258
112337
  async parseSummaryZoomElement(zoom, id, slidePath) {
111259
112338
  try {
@@ -111344,7 +112423,7 @@ var init_PptxHandlerRuntimeSummaryZoomParsing = __esm({
111344
112423
  }
111345
112424
  });
111346
112425
  var PLACEHOLDER_BUCKETS;
111347
- var PptxHandlerRuntime58;
112426
+ var PptxHandlerRuntime59;
111348
112427
  var init_PptxHandlerRuntimePlaceholderLookup = __esm({
111349
112428
  "src/core/core/runtime/PptxHandlerRuntimePlaceholderLookup.ts"() {
111350
112429
  init_header_footer_placeholder();
@@ -111357,7 +112436,7 @@ var init_PptxHandlerRuntimePlaceholderLookup = __esm({
111357
112436
  { bucket: "p:pic", nvKey: "p:nvPicPr", contextKey: "picture" },
111358
112437
  { bucket: "p:graphicFrame", nvKey: "p:nvGraphicFramePr", contextKey: "graphicFrame" }
111359
112438
  ];
111360
- PptxHandlerRuntime58 = class extends PptxHandlerRuntime57 {
112439
+ PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
111361
112440
  findPlaceholderInShapeTree(spTree, expected) {
111362
112441
  return this.scanPlaceholderBuckets(spTree, (info) => this.placeholderMatches(expected, info));
111363
112442
  }
@@ -111590,14 +112669,22 @@ var init_preset_avlst_fmla = __esm({
111590
112669
  ]);
111591
112670
  }
111592
112671
  });
111593
- var PptxHandlerRuntime59;
112672
+ function parseBoundedRectFraction(value) {
112673
+ const fraction = parseOoxmlPercent(value);
112674
+ if (fraction === void 0) {
112675
+ return void 0;
112676
+ }
112677
+ return Math.max(-10, Math.min(10, fraction));
112678
+ }
112679
+ var PptxHandlerRuntime60;
111594
112680
  var init_PptxHandlerRuntimeGeometryParsing = __esm({
111595
112681
  "src/core/core/runtime/PptxHandlerRuntimeGeometryParsing.ts"() {
112682
+ init_color_primitives();
111596
112683
  init_custom_geometry_parser();
111597
112684
  init_guide_formula();
111598
112685
  init_PptxHandlerRuntimePlaceholderLookup();
111599
112686
  init_preset_avlst_fmla();
111600
- PptxHandlerRuntime59 = class _PptxHandlerRuntime extends PptxHandlerRuntime58 {
112687
+ PptxHandlerRuntime60 = class _PptxHandlerRuntime extends PptxHandlerRuntime59 {
111601
112688
  parseGeometryAdjustments(prstGeom) {
111602
112689
  if (!prstGeom) {
111603
112690
  return void 0;
@@ -111968,11 +113055,7 @@ var init_PptxHandlerRuntimeGeometryParsing = __esm({
111968
113055
  * hostile input.
111969
113056
  */
111970
113057
  parseCropFraction(value) {
111971
- const raw = Number.parseInt(String(value ?? ""), 10);
111972
- if (!Number.isFinite(raw)) {
111973
- return void 0;
111974
- }
111975
- return Math.max(-1e6, Math.min(1e6, raw)) / 1e5;
113058
+ return parseBoundedRectFraction(value);
111976
113059
  }
111977
113060
  readImageCropFromBlipFill(blipFill) {
111978
113061
  const result = {};
@@ -111999,11 +113082,7 @@ var init_PptxHandlerRuntimeGeometryParsing = __esm({
111999
113082
  * magnitude is capped at 10x the frame to bound hostile input.
112000
113083
  */
112001
113084
  parseSignedRectFraction(value) {
112002
- const raw = Number.parseInt(String(value ?? ""), 10);
112003
- if (!Number.isFinite(raw)) {
112004
- return void 0;
112005
- }
112006
- return Math.max(-1e6, Math.min(1e6, raw)) / 1e5;
113085
+ return parseBoundedRectFraction(value);
112007
113086
  }
112008
113087
  extractShapeStyle(spPr, styleNode) {
112009
113088
  return this.shapeStyleExtractor.extractShapeStyle(spPr, styleNode);
@@ -112011,12 +113090,12 @@ var init_PptxHandlerRuntimeGeometryParsing = __esm({
112011
113090
  };
112012
113091
  }
112013
113092
  });
112014
- var PptxHandlerRuntime60;
113093
+ var PptxHandlerRuntime61;
112015
113094
  var init_PptxHandlerRuntimeShapeImageFill = __esm({
112016
113095
  "src/core/core/runtime/PptxHandlerRuntimeShapeImageFill.ts"() {
112017
113096
  init_xml_access();
112018
113097
  init_PptxHandlerRuntimeGeometryParsing();
112019
- PptxHandlerRuntime60 = class _PptxHandlerRuntime extends PptxHandlerRuntime59 {
113098
+ PptxHandlerRuntime61 = class _PptxHandlerRuntime extends PptxHandlerRuntime60 {
112020
113099
  /**
112021
113100
  * Parse a shape that has an image fill (a:blipFill inside spPr)
112022
113101
  * This handles shapes like rectangles filled with images (e.g., wood texture backgrounds)
@@ -112228,12 +113307,12 @@ var init_PptxHandlerRuntimeShapeImageFill = __esm({
112228
113307
  };
112229
113308
  }
112230
113309
  });
112231
- var PptxHandlerRuntime61;
113310
+ var PptxHandlerRuntime62;
112232
113311
  var init_PptxHandlerRuntimeTextDefaults = __esm({
112233
113312
  "src/core/core/runtime/PptxHandlerRuntimeTextDefaults.ts"() {
112234
113313
  init_color();
112235
113314
  init_PptxHandlerRuntimeShapeImageFill();
112236
- PptxHandlerRuntime61 = class extends PptxHandlerRuntime60 {
113315
+ PptxHandlerRuntime62 = class extends PptxHandlerRuntime61 {
112237
113316
  /**
112238
113317
  * Apply {@link PlaceholderDefaults} body-level properties to a
112239
113318
  * {@link TextStyle} as fallback values (only sets fields that are
@@ -112410,7 +113489,7 @@ var init_PptxHandlerRuntimeTextDefaults = __esm({
112410
113489
  };
112411
113490
  }
112412
113491
  });
112413
- var PptxHandlerRuntime62;
113492
+ var PptxHandlerRuntime63;
112414
113493
  var init_PptxHandlerRuntimeBulletParsing = __esm({
112415
113494
  "src/core/core/runtime/PptxHandlerRuntimeBulletParsing.ts"() {
112416
113495
  init_theme_color_ref();
@@ -112419,7 +113498,7 @@ var init_PptxHandlerRuntimeBulletParsing = __esm({
112419
113498
  init_paragraph_properties_parser();
112420
113499
  init_xml_access();
112421
113500
  init_PptxHandlerRuntimeTextDefaults();
112422
- PptxHandlerRuntime62 = class extends PptxHandlerRuntime61 {
113501
+ PptxHandlerRuntime63 = class extends PptxHandlerRuntime62 {
112423
113502
  resolveParagraphBulletInfo(paragraph, paragraphIndex, txBody, inheritedTxBody, isBodyPlaceholder = false, slidePath, effectiveLevelStyles) {
112424
113503
  if (!paragraph) {
112425
113504
  return null;
@@ -112618,7 +113697,7 @@ var init_PptxHandlerRuntimeBulletParsing = __esm({
112618
113697
  };
112619
113698
  }
112620
113699
  });
112621
- var PptxHandlerRuntime63;
113700
+ var PptxHandlerRuntime64;
112622
113701
  var init_PptxHandlerRuntimeShapeBodyParsing = __esm({
112623
113702
  "src/core/core/runtime/PptxHandlerRuntimeShapeBodyParsing.ts"() {
112624
113703
  init_alternate_content();
@@ -112626,7 +113705,7 @@ var init_PptxHandlerRuntimeShapeBodyParsing = __esm({
112626
113705
  init_text_body_scene3d();
112627
113706
  init_text_body_sp3d();
112628
113707
  init_PptxHandlerRuntimeBulletParsing();
112629
- PptxHandlerRuntime63 = class _PptxHandlerRuntime extends PptxHandlerRuntime62 {
113708
+ PptxHandlerRuntime64 = class _PptxHandlerRuntime extends PptxHandlerRuntime63 {
112630
113709
  /**
112631
113710
  * Parse `a:spLocks` attributes into a structured {@link PptxShapeLocks} object.
112632
113711
  * Returns `undefined` when the node is absent or contains no lock attributes.
@@ -112847,12 +113926,12 @@ var init_PptxHandlerRuntimeShapeBodyParsing = __esm({
112847
113926
  };
112848
113927
  }
112849
113928
  });
112850
- var PptxHandlerRuntime64;
113929
+ var PptxHandlerRuntime65;
112851
113930
  var init_PptxHandlerRuntimeShapeTextParsing = __esm({
112852
113931
  "src/core/core/runtime/PptxHandlerRuntimeShapeTextParsing.ts"() {
112853
113932
  init_paragraph_properties_parser();
112854
113933
  init_PptxHandlerRuntimeShapeBodyParsing();
112855
- PptxHandlerRuntime64 = class _PptxHandlerRuntime extends PptxHandlerRuntime63 {
113934
+ PptxHandlerRuntime65 = class _PptxHandlerRuntime extends PptxHandlerRuntime64 {
112856
113935
  /**
112857
113936
  * A copy of an `a:lstStyle` level entry without its `a:defRPr`: run
112858
113937
  * defaults follow their own precedence chain, so only the paragraph-level
@@ -113143,7 +114222,7 @@ var init_PptxHandlerRuntimeShapeTextParsing = __esm({
113143
114222
  }
113144
114223
  });
113145
114224
  var PARAGRAPH_CONTENT_TAGS;
113146
- var PptxHandlerRuntime65;
114225
+ var PptxHandlerRuntime66;
113147
114226
  var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
113148
114227
  "src/core/core/runtime/PptxHandlerRuntimeShapeParagraphContentParsing.ts"() {
113149
114228
  init_utils();
@@ -113162,7 +114241,7 @@ var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
113162
114241
  "mc:AlternateContent",
113163
114242
  "a:br"
113164
114243
  ]);
113165
- PptxHandlerRuntime65 = class extends PptxHandlerRuntime64 {
114244
+ PptxHandlerRuntime66 = class extends PptxHandlerRuntime65 {
113166
114245
  /**
113167
114246
  * Collect text content (runs, fields, equations, bullets) for a single
113168
114247
  * paragraph and return text parts + segments. The returned `seedStyle`
@@ -113591,7 +114670,7 @@ var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
113591
114670
  };
113592
114671
  }
113593
114672
  });
113594
- var PptxHandlerRuntime66;
114673
+ var PptxHandlerRuntime67;
113595
114674
  var init_PptxHandlerRuntimeShapeParsing = __esm({
113596
114675
  "src/core/core/runtime/PptxHandlerRuntimeShapeParsing.ts"() {
113597
114676
  init_decorative_extension();
@@ -113601,7 +114680,7 @@ var init_PptxHandlerRuntimeShapeParsing = __esm({
113601
114680
  init_auto_number_sequence();
113602
114681
  init_element_paragraph_geometry();
113603
114682
  init_PptxHandlerRuntimeShapeParagraphContentParsing();
113604
- PptxHandlerRuntime66 = class _PptxHandlerRuntime extends PptxHandlerRuntime65 {
114683
+ PptxHandlerRuntime67 = class _PptxHandlerRuntime extends PptxHandlerRuntime66 {
113605
114684
  parseShape(shape, id, slidePath) {
113606
114685
  try {
113607
114686
  const spPr = shape["p:spPr"];
@@ -113908,7 +114987,7 @@ function parseEmuInt2(value) {
113908
114987
  }
113909
114988
  var INT32_MIN2;
113910
114989
  var INT32_MAX2;
113911
- var PptxHandlerRuntime67;
114990
+ var PptxHandlerRuntime68;
113912
114991
  var init_PptxHandlerRuntimePictureParsing = __esm({
113913
114992
  "src/core/core/runtime/PptxHandlerRuntimePictureParsing.ts"() {
113914
114993
  init_crop_shape_geometry();
@@ -113921,7 +115000,7 @@ var init_PptxHandlerRuntimePictureParsing = __esm({
113921
115000
  init_shape_lock_containers();
113922
115001
  INT32_MIN2 = -2147483648;
113923
115002
  INT32_MAX2 = 2147483647;
113924
- PptxHandlerRuntime67 = class _PptxHandlerRuntime extends PptxHandlerRuntime66 {
115003
+ PptxHandlerRuntime68 = class _PptxHandlerRuntime extends PptxHandlerRuntime67 {
113925
115004
  async parsePicture(pic, id, slidePath) {
113926
115005
  try {
113927
115006
  const spPr = pic["p:spPr"];
@@ -114275,13 +115354,13 @@ var init_PptxHandlerRuntimePictureParsing = __esm({
114275
115354
  };
114276
115355
  }
114277
115356
  });
114278
- var PptxHandlerRuntime68;
115357
+ var PptxHandlerRuntime69;
114279
115358
  var init_PptxHandlerRuntimeSpTreeParsing = __esm({
114280
115359
  "src/core/core/runtime/PptxHandlerRuntimeSpTreeParsing.ts"() {
114281
115360
  init_alternate_content();
114282
115361
  init_vml_parser();
114283
115362
  init_PptxHandlerRuntimePictureParsing();
114284
- PptxHandlerRuntime68 = class _PptxHandlerRuntime extends PptxHandlerRuntime67 {
115363
+ PptxHandlerRuntime69 = class _PptxHandlerRuntime extends PptxHandlerRuntime68 {
114285
115364
  /**
114286
115365
  * Known element tag names that appear as direct children of `p:spTree`
114287
115366
  * (or `p:grpSp`) and represent renderable shapes/objects.
@@ -114663,7 +115742,7 @@ var init_PptxHandlerRuntimeSpTreeParsing = __esm({
114663
115742
  };
114664
115743
  }
114665
115744
  });
114666
- var PptxHandlerRuntime69;
115745
+ var PptxHandlerRuntime70;
114667
115746
  var init_PptxHandlerRuntimeGroupParsing = __esm({
114668
115747
  "src/core/core/runtime/PptxHandlerRuntimeGroupParsing.ts"() {
114669
115748
  init_transform_utils();
@@ -114672,7 +115751,7 @@ var init_PptxHandlerRuntimeGroupParsing = __esm({
114672
115751
  init_group_shape_geometry();
114673
115752
  init_PptxHandlerRuntimeSpTreeParsing();
114674
115753
  init_shape_lock_containers();
114675
- PptxHandlerRuntime69 = class _PptxHandlerRuntime extends PptxHandlerRuntime68 {
115754
+ PptxHandlerRuntime70 = class _PptxHandlerRuntime extends PptxHandlerRuntime69 {
114676
115755
  /**
114677
115756
  * Parse the children of a `<p:grpSp>` into the group's own pixel space.
114678
115757
  *
@@ -114874,11 +115953,11 @@ var init_PptxHandlerRuntimeGroupParsing = __esm({
114874
115953
  };
114875
115954
  }
114876
115955
  });
114877
- var PptxHandlerRuntime70;
115956
+ var PptxHandlerRuntime71;
114878
115957
  var init_PptxHandlerRuntimeSlideParsing = __esm({
114879
115958
  "src/core/core/runtime/PptxHandlerRuntimeSlideParsing.ts"() {
114880
115959
  init_PptxHandlerRuntimeGroupParsing();
114881
- PptxHandlerRuntime70 = class extends PptxHandlerRuntime69 {
115960
+ PptxHandlerRuntime71 = class extends PptxHandlerRuntime70 {
114882
115961
  /**
114883
115962
  * Parse text body from a connector shape (p:cxnSp > p:txBody).
114884
115963
  * Uses the same text run extraction logic as regular shapes but
@@ -114989,7 +116068,7 @@ var init_PptxHandlerRuntimeSlideParsing = __esm({
114989
116068
  }
114990
116069
  });
114991
116070
  var DEFAULT_CLR_MAP_ALIAS;
114992
- var PptxHandlerRuntime71;
116071
+ var PptxHandlerRuntime72;
114993
116072
  var init_PptxHandlerRuntimeColorAndEffects = __esm({
114994
116073
  "src/core/core/runtime/PptxHandlerRuntimeColorAndEffects.ts"() {
114995
116074
  init_PptxHandlerRuntimeSlideParsing();
@@ -114999,7 +116078,7 @@ var init_PptxHandlerRuntimeColorAndEffects = __esm({
114999
116078
  bg2: "lt2",
115000
116079
  tx2: "dk2"
115001
116080
  };
115002
- PptxHandlerRuntime71 = class extends PptxHandlerRuntime70 {
116081
+ PptxHandlerRuntime72 = class extends PptxHandlerRuntime71 {
115003
116082
  /**
115004
116083
  * Forward declaration – implemented in PptxHandlerRuntimeThemeProcessing.
115005
116084
  * Re-resolves gradient stops by substituting `phClr` with the given colour.
@@ -115141,14 +116220,14 @@ var init_PptxHandlerRuntimeColorAndEffects = __esm({
115141
116220
  };
115142
116221
  }
115143
116222
  });
115144
- var PptxHandlerRuntime72;
116223
+ var PptxHandlerRuntime73;
115145
116224
  var init_PptxHandlerRuntimeBackgroundParsing = __esm({
115146
116225
  "src/core/core/runtime/PptxHandlerRuntimeBackgroundParsing.ts"() {
115147
116226
  init_part_rels_path();
115148
116227
  init_strip_parent_dir_segments();
115149
116228
  init_xml_access();
115150
116229
  init_PptxHandlerRuntimeColorAndEffects();
115151
- PptxHandlerRuntime72 = class extends PptxHandlerRuntime71 {
116230
+ PptxHandlerRuntime73 = class extends PptxHandlerRuntime72 {
115152
116231
  /**
115153
116232
  * Preserve the visual properties authored on a background `a:blipFill`.
115154
116233
  *
@@ -115592,14 +116671,14 @@ var init_PptxHandlerRuntimeBackgroundParsing = __esm({
115592
116671
  };
115593
116672
  }
115594
116673
  });
115595
- var PptxHandlerRuntime73;
116674
+ var PptxHandlerRuntime74;
115596
116675
  var init_PptxHandlerRuntimeSlideUtils = __esm({
115597
116676
  "src/core/core/runtime/PptxHandlerRuntimeSlideUtils.ts"() {
115598
116677
  init_part_rels_path();
115599
116678
  init_strip_parent_dir_segments();
115600
116679
  init_notes_body_shapes();
115601
116680
  init_PptxHandlerRuntimeBackgroundParsing();
115602
- PptxHandlerRuntime73 = class extends PptxHandlerRuntime72 {
116681
+ PptxHandlerRuntime74 = class extends PptxHandlerRuntime73 {
115603
116682
  /**
115604
116683
  * Retrieve the background gradient from a layout, falling back to master.
115605
116684
  */
@@ -115942,14 +117021,14 @@ var init_PptxHandlerRuntimeSlideUtils = __esm({
115942
117021
  };
115943
117022
  }
115944
117023
  });
115945
- var PptxHandlerRuntime74;
117024
+ var PptxHandlerRuntime75;
115946
117025
  var init_PptxHandlerRuntimePlaceholderStyles = __esm({
115947
117026
  "src/core/core/runtime/PptxHandlerRuntimePlaceholderStyles.ts"() {
115948
117027
  init_color_xml_preservation();
115949
117028
  init_paragraph_properties_parser();
115950
117029
  init_xml_access();
115951
117030
  init_PptxHandlerRuntimeSlideUtils();
115952
- PptxHandlerRuntime74 = class extends PptxHandlerRuntime73 {
117031
+ PptxHandlerRuntime75 = class extends PptxHandlerRuntime74 {
115953
117032
  /**
115954
117033
  * Parse a single `a:lvlXpPr` node into a structured
115955
117034
  * {@link PlaceholderTextLevelStyle}.
@@ -116099,11 +117178,11 @@ var init_PptxHandlerRuntimePlaceholderStyles = __esm({
116099
117178
  };
116100
117179
  }
116101
117180
  });
116102
- var PptxHandlerRuntime75;
117181
+ var PptxHandlerRuntime76;
116103
117182
  var init_PptxHandlerRuntimePlaceholderDefaults = __esm({
116104
117183
  "src/core/core/runtime/PptxHandlerRuntimePlaceholderDefaults.ts"() {
116105
117184
  init_PptxHandlerRuntimePlaceholderStyles();
116106
- PptxHandlerRuntime75 = class _PptxHandlerRuntime extends PptxHandlerRuntime74 {
117185
+ PptxHandlerRuntime76 = class _PptxHandlerRuntime extends PptxHandlerRuntime75 {
116107
117186
  /**
116108
117187
  * Extract structured {@link PlaceholderDefaults} from a layout or master
116109
117188
  * shape that carries a `p:ph` element.
@@ -116265,14 +117344,14 @@ function parseHeaderFooterFlags(hf) {
116265
117344
  }
116266
117345
  return Object.keys(result).length > 0 ? result : void 0;
116267
117346
  }
116268
- var PptxHandlerRuntime76;
117347
+ var PptxHandlerRuntime77;
116269
117348
  var init_PptxHandlerRuntimeMasterElements = __esm({
116270
117349
  "src/core/core/runtime/PptxHandlerRuntimeMasterElements.ts"() {
116271
117350
  init_part_rels_path();
116272
117351
  init_strip_parent_dir_segments();
116273
117352
  init_xml_access();
116274
117353
  init_PptxHandlerRuntimePlaceholderDefaults();
116275
- PptxHandlerRuntime76 = class extends PptxHandlerRuntime75 {
117354
+ PptxHandlerRuntime77 = class extends PptxHandlerRuntime76 {
116276
117355
  /**
116277
117356
  * Parse a `CT_TextListStyle` node (`a:defPPr` + `a:lvl1pPr` … `a:lvl9pPr`)
116278
117357
  * into a level-keyed style map. Used for `<p:txStyles>` children
@@ -116556,7 +117635,7 @@ var init_PptxHandlerRuntimeMasterElements = __esm({
116556
117635
  };
116557
117636
  }
116558
117637
  });
116559
- var PptxHandlerRuntime77;
117638
+ var PptxHandlerRuntime78;
116560
117639
  var init_PptxHandlerRuntimeAuxiliaryMasterElements = __esm({
116561
117640
  "src/core/core/runtime/PptxHandlerRuntimeAuxiliaryMasterElements.ts"() {
116562
117641
  init_services();
@@ -116565,7 +117644,7 @@ var init_PptxHandlerRuntimeAuxiliaryMasterElements = __esm({
116565
117644
  init_master_part_element_signature();
116566
117645
  init_master_part_tags();
116567
117646
  init_PptxHandlerRuntimeMasterElements();
116568
- PptxHandlerRuntime77 = class extends PptxHandlerRuntime76 {
117647
+ PptxHandlerRuntime78 = class extends PptxHandlerRuntime77 {
116569
117648
  /** Parse every editable element in a master or layout shape tree. */
116570
117649
  async enrichMasterPartElements(part, rootTag2) {
116571
117650
  if (!part) {
@@ -116670,14 +117749,14 @@ var init_PptxHandlerRuntimeAuxiliaryMasterElements = __esm({
116670
117749
  };
116671
117750
  }
116672
117751
  });
116673
- var PptxHandlerRuntime78;
117752
+ var PptxHandlerRuntime79;
116674
117753
  var init_PptxHandlerRuntimeLayoutElements = __esm({
116675
117754
  "src/core/core/runtime/PptxHandlerRuntimeLayoutElements.ts"() {
116676
117755
  init_part_rels_path();
116677
117756
  init_strip_parent_dir_segments();
116678
117757
  init_xml_access();
116679
117758
  init_PptxHandlerRuntimeAuxiliaryMasterElements();
116680
- PptxHandlerRuntime78 = class extends PptxHandlerRuntime77 {
117759
+ PptxHandlerRuntime79 = class extends PptxHandlerRuntime78 {
116681
117760
  /**
116682
117761
  * Parse the layout artwork inherited by a slide.
116683
117762
  *
@@ -116861,6 +117940,7 @@ var init_PptxHandlerRuntimeLayoutElements = __esm({
116861
117940
  const masterElements = showMasterSp ? await this.getMasterElements(layoutPath) : [];
116862
117941
  this.currentSlideClrMapOverride = prevClrMapOverride;
116863
117942
  const allElements = [...masterElements, ...elements2];
117943
+ this.templateElementBaselines.recordBaselines(allElements);
116864
117944
  this.layoutCache.set(layoutPath, allElements);
116865
117945
  return allElements;
116866
117946
  } catch (e) {
@@ -116871,13 +117951,13 @@ var init_PptxHandlerRuntimeLayoutElements = __esm({
116871
117951
  };
116872
117952
  }
116873
117953
  });
116874
- var PptxHandlerRuntime79;
117954
+ var PptxHandlerRuntime80;
116875
117955
  var init_PptxHandlerRuntimeLayoutPreviews = __esm({
116876
117956
  "src/core/core/runtime/PptxHandlerRuntimeLayoutPreviews.ts"() {
116877
117957
  init_constants();
116878
117958
  init_xml_access();
116879
117959
  init_PptxHandlerRuntimeLayoutElements();
116880
- PptxHandlerRuntime79 = class extends PptxHandlerRuntime78 {
117960
+ PptxHandlerRuntime80 = class extends PptxHandlerRuntime79 {
116881
117961
  layoutPreviewCache = /* @__PURE__ */ new Map();
116882
117962
  /**
116883
117963
  * Build (or return the memoised) preview for one layout.
@@ -116990,7 +118070,7 @@ function extractFillStyleListChildOrder(rawXml, listTag) {
116990
118070
  return order;
116991
118071
  }
116992
118072
  var FILL_LIST_CHILD_TAGS;
116993
- var PptxHandlerRuntime80;
118073
+ var PptxHandlerRuntime81;
116994
118074
  var init_PptxHandlerRuntimeThemeFormatScheme = __esm({
116995
118075
  "src/core/core/runtime/PptxHandlerRuntimeThemeFormatScheme.ts"() {
116996
118076
  init_PptxHandlerRuntimeLayoutPreviews();
@@ -117001,7 +118081,7 @@ var init_PptxHandlerRuntimeThemeFormatScheme = __esm({
117001
118081
  "a:noFill",
117002
118082
  "a:grpFill"
117003
118083
  ];
117004
- PptxHandlerRuntime80 = class _PptxHandlerRuntime extends PptxHandlerRuntime79 {
118084
+ PptxHandlerRuntime81 = class _PptxHandlerRuntime extends PptxHandlerRuntime80 {
117005
118085
  /**
117006
118086
  * Build a fill-style entry for one child node based on its tag.
117007
118087
  */
@@ -117284,12 +118364,12 @@ var init_PptxHandlerRuntimeThemeFormatScheme = __esm({
117284
118364
  };
117285
118365
  }
117286
118366
  });
117287
- var PptxHandlerRuntime81;
118367
+ var PptxHandlerRuntime82;
117288
118368
  var init_PptxHandlerRuntimeThemeOverrides = __esm({
117289
118369
  "src/core/core/runtime/PptxHandlerRuntimeThemeOverrides.ts"() {
117290
118370
  init_color_scheme_index();
117291
118371
  init_PptxHandlerRuntimeThemeFormatScheme();
117292
- PptxHandlerRuntime81 = class extends PptxHandlerRuntime80 {
118372
+ PptxHandlerRuntime82 = class extends PptxHandlerRuntime81 {
117293
118373
  /**
117294
118374
  * Parse the `a:fmtScheme` element from the theme into a structured
117295
118375
  * {@link PptxThemeFormatScheme}. Each sub-list (fillStyleLst, lnStyleLst,
@@ -117512,12 +118592,12 @@ var init_PptxHandlerRuntimeThemeOverrides = __esm({
117512
118592
  };
117513
118593
  }
117514
118594
  });
117515
- var PptxHandlerRuntime82;
118595
+ var PptxHandlerRuntime83;
117516
118596
  var init_PptxHandlerRuntimeThemeRefResolution = __esm({
117517
118597
  "src/core/core/runtime/PptxHandlerRuntimeThemeRefResolution.ts"() {
117518
118598
  init_utils();
117519
118599
  init_PptxHandlerRuntimeThemeOverrides();
117520
- PptxHandlerRuntime82 = class extends PptxHandlerRuntime81 {
118600
+ PptxHandlerRuntime83 = class extends PptxHandlerRuntime82 {
117521
118601
  /**
117522
118602
  * Resolve a `a:effectRef` element into concrete effect properties
117523
118603
  * by looking up `@_idx` in the theme format scheme's effect style list.
@@ -117760,11 +118840,11 @@ var init_PptxHandlerRuntimeThemeRefResolution = __esm({
117760
118840
  function isPresentationThemePartPath(path) {
117761
118841
  return /^ppt\/theme\/(?!themeOverride)[^/]+\.xml$/iu.test(path);
117762
118842
  }
117763
- var PptxHandlerRuntime83;
118843
+ var PptxHandlerRuntime84;
117764
118844
  var init_PptxHandlerRuntimeThemeLoading = __esm({
117765
118845
  "src/core/core/runtime/PptxHandlerRuntimeThemeLoading.ts"() {
117766
118846
  init_PptxHandlerRuntimeThemeRefResolution();
117767
- PptxHandlerRuntime83 = class extends PptxHandlerRuntime82 {
118847
+ PptxHandlerRuntime84 = class extends PptxHandlerRuntime83 {
117768
118848
  async resolvePrimaryThemePath() {
117769
118849
  const masterFiles = this.zip.file(/^ppt\/slideMasters\/slideMaster\d+\.xml$/);
117770
118850
  if (!masterFiles || masterFiles.length === 0) {
@@ -118301,13 +119381,13 @@ var init_theme_scheme_edit = __esm({
118301
119381
  }
118302
119382
  });
118303
119383
  var THEME_PART_PATTERN;
118304
- var PptxHandlerRuntime84;
119384
+ var PptxHandlerRuntime85;
118305
119385
  var init_PptxHandlerRuntimeThemeProcessing = __esm({
118306
119386
  "src/core/core/runtime/PptxHandlerRuntimeThemeProcessing.ts"() {
118307
119387
  init_PptxHandlerRuntimeThemeLoading();
118308
119388
  init_theme_scheme_edit();
118309
119389
  THEME_PART_PATTERN = /^ppt\/theme\/theme\d+\.xml$/;
118310
- PptxHandlerRuntime84 = class extends PptxHandlerRuntime83 {
119390
+ PptxHandlerRuntime85 = class extends PptxHandlerRuntime84 {
118311
119391
  /**
118312
119392
  * The theme parts an edit should touch, primary theme first.
118313
119393
  *
@@ -118460,14 +119540,14 @@ var init_PptxHandlerRuntimeThemeProcessing = __esm({
118460
119540
  };
118461
119541
  }
118462
119542
  });
118463
- var PptxHandlerRuntime85;
119543
+ var PptxHandlerRuntime86;
118464
119544
  var init_PptxHandlerRuntimeComments = __esm({
118465
119545
  "src/core/core/runtime/PptxHandlerRuntimeComments.ts"() {
118466
119546
  init_legacy_comment_threading();
118467
119547
  init_modern_comment_xml();
118468
119548
  init_xml_access();
118469
119549
  init_PptxHandlerRuntimeThemeProcessing();
118470
- PptxHandlerRuntime85 = class _PptxHandlerRuntime extends PptxHandlerRuntime84 {
119550
+ PptxHandlerRuntime86 = class _PptxHandlerRuntime extends PptxHandlerRuntime85 {
118471
119551
  /**
118472
119552
  * Parse modern threaded comments (PowerPoint 2019+ / Office 365).
118473
119553
  * Modern comments use `p188:cmLst`/`p15:cmLst` roots within
@@ -118694,7 +119774,7 @@ var init_PptxHandlerRuntimeComments = __esm({
118694
119774
  };
118695
119775
  }
118696
119776
  });
118697
- var PptxHandlerRuntime86;
119777
+ var PptxHandlerRuntime87;
118698
119778
  var init_PptxHandlerRuntimeSmartArtXmlUtils = __esm({
118699
119779
  "src/core/core/runtime/PptxHandlerRuntimeSmartArtXmlUtils.ts"() {
118700
119780
  init_smartart_color_lists();
@@ -118702,7 +119782,7 @@ var init_PptxHandlerRuntimeSmartArtXmlUtils = __esm({
118702
119782
  init_smart_art_text_helpers();
118703
119783
  init_PptxHandlerRuntimeComments();
118704
119784
  init_smartart_text_paragraphs();
118705
- PptxHandlerRuntime86 = class extends PptxHandlerRuntime85 {
119785
+ PptxHandlerRuntime87 = class extends PptxHandlerRuntime86 {
118706
119786
  async readXmlPartByRelationshipId(slidePath, relationshipId2) {
118707
119787
  const normalizedRelationshipId = String(relationshipId2 || "").trim();
118708
119788
  if (normalizedRelationshipId.length === 0) {
@@ -119192,7 +120272,7 @@ var init_smartart_text_style_resolution = __esm({
119192
120272
  "src/core/core/runtime/smartart-text-style-resolution.ts"() {
119193
120273
  }
119194
120274
  });
119195
- var PptxHandlerRuntime87;
120275
+ var PptxHandlerRuntime88;
119196
120276
  var init_PptxHandlerRuntimeSmartArtParsing = __esm({
119197
120277
  "src/core/core/runtime/PptxHandlerRuntimeSmartArtParsing.ts"() {
119198
120278
  init_smartart_connector_labels();
@@ -119203,7 +120283,7 @@ var init_PptxHandlerRuntimeSmartArtParsing = __esm({
119203
120283
  init_smartart_style_label_refs();
119204
120284
  init_smartart_text_paragraphs();
119205
120285
  init_smartart_text_style_resolution();
119206
- PptxHandlerRuntime87 = class _PptxHandlerRuntime extends PptxHandlerRuntime86 {
120286
+ PptxHandlerRuntime88 = class _PptxHandlerRuntime extends PptxHandlerRuntime87 {
119207
120287
  reportIncompleteSmartArtRelationships(graphicFrame, relationshipIds, slidePath) {
119208
120288
  const missing = [
119209
120289
  ["dm", relationshipIds?.dataRelId],
@@ -119593,7 +120673,7 @@ var init_smartart_layout_category = __esm({
119593
120673
  ];
119594
120674
  }
119595
120675
  });
119596
- var PptxHandlerRuntime88;
120676
+ var PptxHandlerRuntime89;
119597
120677
  var init_PptxHandlerRuntimeSmartArt = __esm({
119598
120678
  "src/core/core/runtime/PptxHandlerRuntimeSmartArt.ts"() {
119599
120679
  init_utils();
@@ -119606,7 +120686,7 @@ var init_PptxHandlerRuntimeSmartArt = __esm({
119606
120686
  init_smartart_text_paragraphs();
119607
120687
  init_smartart_text_style_resolution();
119608
120688
  init_smartart_xml_builders();
119609
- PptxHandlerRuntime88 = class _PptxHandlerRuntime extends PptxHandlerRuntime87 {
120689
+ PptxHandlerRuntime89 = class _PptxHandlerRuntime extends PptxHandlerRuntime88 {
119610
120690
  async getSmartArtDataForGraphicFrame(slidePath, graphicFrame) {
119611
120691
  const graphicData = this.xmlLookupService.getChildByLocalName(
119612
120692
  this.xmlLookupService.getChildByLocalName(graphicFrame, "graphic"),
@@ -119825,12 +120905,12 @@ var init_PptxHandlerRuntimeSmartArt = __esm({
119825
120905
  };
119826
120906
  }
119827
120907
  });
119828
- var PptxHandlerRuntime89;
120908
+ var PptxHandlerRuntime90;
119829
120909
  var init_PptxHandlerRuntimeChartDetection = __esm({
119830
120910
  "src/core/core/runtime/PptxHandlerRuntimeChartDetection.ts"() {
119831
120911
  init_chart_multi_level_category_parser();
119832
120912
  init_PptxHandlerRuntimeSmartArt();
119833
- PptxHandlerRuntime89 = class extends PptxHandlerRuntime88 {
120913
+ PptxHandlerRuntime90 = class extends PptxHandlerRuntime89 {
119834
120914
  detectChartType(plotArea) {
119835
120915
  if (!plotArea) {
119836
120916
  return "unknown";
@@ -120040,14 +121120,14 @@ function parseNumberVal(node) {
120040
121120
  return Number.isFinite(num) ? num : void 0;
120041
121121
  }
120042
121122
  var CHART_DATA_DISPLAY_OPTIONS_EXT_URI2;
120043
- var PptxHandlerRuntime90;
121123
+ var PptxHandlerRuntime91;
120044
121124
  var init_PptxHandlerRuntimeChartParsingHelpers = __esm({
120045
121125
  "src/core/core/runtime/PptxHandlerRuntimeChartParsingHelpers.ts"() {
120046
121126
  init_chart_ext_lookup();
120047
121127
  init_chart_pivot_source2();
120048
121128
  init_PptxHandlerRuntimeChartDetection();
120049
121129
  CHART_DATA_DISPLAY_OPTIONS_EXT_URI2 = "{56B9EC1D-385E-4148-901F-78D8002777C0}";
120050
- PptxHandlerRuntime90 = class extends PptxHandlerRuntime89 {
121130
+ PptxHandlerRuntime91 = class extends PptxHandlerRuntime90 {
120051
121131
  /**
120052
121132
  * Parse `c:plotVisOnly` from the chart root element.
120053
121133
  *
@@ -120306,14 +121386,14 @@ var init_PptxHandlerRuntimeChartParsingHelpers = __esm({
120306
121386
  }
120307
121387
  });
120308
121388
  var CHART_USER_SHAPES_REL_TYPE2;
120309
- var PptxHandlerRuntime91;
121389
+ var PptxHandlerRuntime92;
120310
121390
  var init_PptxHandlerRuntimeChartExternalData = __esm({
120311
121391
  "src/core/core/runtime/PptxHandlerRuntimeChartExternalData.ts"() {
120312
121392
  init_chart_user_shapes_parser();
120313
121393
  init_chart_xlsx_parser();
120314
121394
  init_PptxHandlerRuntimeChartParsingHelpers();
120315
121395
  CHART_USER_SHAPES_REL_TYPE2 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes";
120316
- PptxHandlerRuntime91 = class extends PptxHandlerRuntime90 {
121396
+ PptxHandlerRuntime92 = class extends PptxHandlerRuntime91 {
120317
121397
  /**
120318
121398
  * Parse `c:externalData` from the chart's `c:chartSpace` and resolve
120319
121399
  * the external relationship target from the chart part's .rels file.
@@ -120470,12 +121550,12 @@ var init_PptxHandlerRuntimeChartExternalData = __esm({
120470
121550
  };
120471
121551
  }
120472
121552
  });
120473
- var PptxHandlerRuntime92;
121553
+ var PptxHandlerRuntime93;
120474
121554
  var init_PptxHandlerRuntimeChartColorStyle = __esm({
120475
121555
  "src/core/core/runtime/PptxHandlerRuntimeChartColorStyle.ts"() {
120476
121556
  init_chart_style_definition_parser();
120477
121557
  init_PptxHandlerRuntimeChartExternalData();
120478
- PptxHandlerRuntime92 = class extends PptxHandlerRuntime91 {
121558
+ PptxHandlerRuntime93 = class extends PptxHandlerRuntime92 {
120479
121559
  /**
120480
121560
  * Parse the Office 2013+ chart-style part (`ppt/charts/style#.xml`)
120481
121561
  * referenced from the chart's relationships, sibling to
@@ -120615,7 +121695,7 @@ var init_PptxHandlerRuntimeChartColorStyle = __esm({
120615
121695
  }
120616
121696
  });
120617
121697
  var SCATTER_STYLES;
120618
- var PptxHandlerRuntime93;
121698
+ var PptxHandlerRuntime94;
120619
121699
  var init_PptxHandlerRuntimeChartParsing = __esm({
120620
121700
  "src/core/core/runtime/PptxHandlerRuntimeChartParsing.ts"() {
120621
121701
  init_chart_advanced_parser();
@@ -120652,7 +121732,7 @@ var init_PptxHandlerRuntimeChartParsing = __esm({
120652
121732
  "smooth",
120653
121733
  "smoothMarker"
120654
121734
  ]);
120655
- PptxHandlerRuntime93 = class extends PptxHandlerRuntime92 {
121735
+ PptxHandlerRuntime94 = class extends PptxHandlerRuntime93 {
120656
121736
  /**
120657
121737
  * Parse chart data from a graphic frame element on a slide.
120658
121738
  *
@@ -121304,14 +122384,14 @@ var init_PptxHandlerRuntimeChartParsing = __esm({
121304
122384
  };
121305
122385
  }
121306
122386
  });
121307
- var PptxHandlerRuntime94;
122387
+ var PptxHandlerRuntime95;
121308
122388
  var init_PptxHandlerRuntimePresentationStructure = __esm({
121309
122389
  "src/core/core/runtime/PptxHandlerRuntimePresentationStructure.ts"() {
121310
122390
  init_kinsoku_parser();
121311
122391
  init_presentation_section_parser();
121312
122392
  init_header_footer_parts();
121313
122393
  init_PptxHandlerRuntimeChartParsing();
121314
- PptxHandlerRuntime94 = class extends PptxHandlerRuntime93 {
122394
+ PptxHandlerRuntime95 = class extends PptxHandlerRuntime94 {
121315
122395
  parseEditorAnimations(slideXml3) {
121316
122396
  return this.editorAnimationService.parseEditorAnimations(slideXml3);
121317
122397
  }
@@ -121496,7 +122576,7 @@ var init_PptxHandlerRuntimePresentationStructure = __esm({
121496
122576
  };
121497
122577
  }
121498
122578
  });
121499
- var PptxHandlerRuntime95;
122579
+ var PptxHandlerRuntime96;
121500
122580
  var init_PptxHandlerRuntimeEmbeddedFonts = __esm({
121501
122581
  "src/core/core/runtime/PptxHandlerRuntimeEmbeddedFonts.ts"() {
121502
122582
  init_eot_parser();
@@ -121505,7 +122585,7 @@ var init_PptxHandlerRuntimeEmbeddedFonts = __esm({
121505
122585
  init_strip_parent_dir_segments();
121506
122586
  init_xml_access();
121507
122587
  init_PptxHandlerRuntimePresentationStructure();
121508
- PptxHandlerRuntime95 = class extends PptxHandlerRuntime94 {
122588
+ PptxHandlerRuntime96 = class extends PptxHandlerRuntime95 {
121509
122589
  async getEmbeddedFonts(fontList) {
121510
122590
  if (!fontList || fontList.fonts.length === 0) {
121511
122591
  return [];
@@ -121708,7 +122788,7 @@ var init_PptxHandlerRuntimeEmbeddedFonts = __esm({
121708
122788
  }
121709
122789
  });
121710
122790
  var MAX_OLE_EMBEDDING_BYTES;
121711
- var PptxHandlerRuntime96;
122791
+ var PptxHandlerRuntime97;
121712
122792
  var init_PptxHandlerRuntimeLoadSession = __esm({
121713
122793
  "src/core/core/runtime/PptxHandlerRuntimeLoadSession.ts"() {
121714
122794
  init_ole_embedded_extract();
@@ -121718,7 +122798,7 @@ var init_PptxHandlerRuntimeLoadSession = __esm({
121718
122798
  init_authored_slide_background();
121719
122799
  init_PptxHandlerRuntimeEmbeddedFonts();
121720
122800
  MAX_OLE_EMBEDDING_BYTES = 25 * 1024 * 1024;
121721
- PptxHandlerRuntime96 = class _PptxHandlerRuntime extends PptxHandlerRuntime95 {
122801
+ PptxHandlerRuntime97 = class _PptxHandlerRuntime extends PptxHandlerRuntime96 {
121722
122802
  isZipContainer(data) {
121723
122803
  const bytes = new Uint8Array(data);
121724
122804
  if (bytes.byteLength < 4) {
@@ -121777,6 +122857,7 @@ var init_PptxHandlerRuntimeLoadSession = __esm({
121777
122857
  this.savedSlideFingerprints.clear();
121778
122858
  this.layoutCache.clear();
121779
122859
  this.masterCache.clear();
122860
+ this.templateElementBaselines.reset();
121780
122861
  this.layoutXmlMap.clear();
121781
122862
  this.masterXmlMap.clear();
121782
122863
  this.masterTxStylesCache.clear();
@@ -122075,19 +123156,22 @@ var init_PptxHandlerRuntimeLoadSession = __esm({
122075
123156
  };
122076
123157
  }
122077
123158
  });
122078
- var PptxHandlerRuntime97;
123159
+ var PptxHandlerRuntime98;
122079
123160
  var init_PptxHandlerRuntimeLoadPipeline = __esm({
122080
123161
  "src/core/core/runtime/PptxHandlerRuntimeLoadPipeline.ts"() {
122081
123162
  init_fluent();
122082
123163
  init_embedded_font_list();
122083
123164
  init_guide_utils();
122084
123165
  init_layout_display_name();
123166
+ init_part_rels_path();
122085
123167
  init_smart_tags_parser();
122086
123168
  init_strip_parent_dir_segments();
122087
123169
  init_builders();
123170
+ init_authored_slide_background();
123171
+ init_layout_switch_placeholder_prompts();
122088
123172
  init_PptxHandlerRuntimeLoadSession();
122089
123173
  init_slide_fingerprint();
122090
- PptxHandlerRuntime97 = class extends PptxHandlerRuntime96 {
123174
+ PptxHandlerRuntime98 = class extends PptxHandlerRuntime97 {
122091
123175
  async buildLoadData(presentationState, slidesWithWarnings, slideMasters) {
122092
123176
  const headerFooter = this.extractHeaderFooter();
122093
123177
  const presentationProperties = await this.parsePresentationProperties();
@@ -122249,6 +123333,7 @@ var init_PptxHandlerRuntimeLoadPipeline = __esm({
122249
123333
  this.externalRelsMap.clear();
122250
123334
  this.layoutCache.clear();
122251
123335
  this.masterCache.clear();
123336
+ this.templateElementBaselines.reset();
122252
123337
  this.layoutXmlMap.clear();
122253
123338
  this.masterXmlMap.clear();
122254
123339
  this.masterTxStylesCache.clear();
@@ -122510,15 +123595,28 @@ var init_PptxHandlerRuntimeLoadPipeline = __esm({
122510
123595
  }
122511
123596
  }
122512
123597
  }
123598
+ if (!this.slideRelsMap.has(slidePath)) {
123599
+ this.slideRelsMap.set(
123600
+ slidePath,
123601
+ /* @__PURE__ */ new Map([["rId1", `../slideLayouts/${layoutPath.split("/").pop()}`]])
123602
+ );
123603
+ }
122513
123604
  this.layoutCache.delete(layoutPath);
122514
- const remappedElements = this.remapElementsToNewLayout(
122515
- slide.elements,
122516
- layoutXml,
122517
- layoutPath
123605
+ await this.getLayoutElements(slidePath);
123606
+ const remappedElements = enrichEmptyPlaceholderPrompts(
123607
+ this.remapElementsToNewLayout(slide.elements, layoutXml, layoutPath),
123608
+ {
123609
+ resolveDefaults: (element) => {
123610
+ const phInfo = this.getElementPlaceholderInfo(element);
123611
+ return phInfo ? this.lookupPlaceholderDefaults(slidePath, phInfo) : void 0;
123612
+ },
123613
+ placeholderType: (element) => this.getElementPlaceholderInfo(element)?.type,
123614
+ applyBodyDefaults: (textStyle, defaults) => this.applyPlaceholderBodyDefaults(textStyle, defaults),
123615
+ applyLevelDefaults: (textStyle, level) => this.applyPlaceholderLevelDefaults(textStyle, level)
123616
+ }
122518
123617
  );
122519
123618
  const sldLayout = layoutXml["p:sldLayout"];
122520
123619
  const layoutName = String(sldLayout?.["p:cSld"]?.["@_name"] || "").trim() || layoutPath;
122521
- const layoutBgColor = this.extractBackgroundColor(layoutXml, "p:sldLayout");
122522
123620
  const updated = {
122523
123621
  ...slide,
122524
123622
  elements: remappedElements,
@@ -122526,10 +123624,24 @@ var init_PptxHandlerRuntimeLoadPipeline = __esm({
122526
123624
  layoutName,
122527
123625
  isDirty: true
122528
123626
  };
122529
- if (!slide.rawXml || !this.extractBackgroundColor(slide.rawXml)) {
122530
- if (layoutBgColor) {
122531
- updated.backgroundColor = layoutBgColor;
122532
- }
123627
+ const origin = slideBackgroundOrigin(this, slidePath);
123628
+ const inheritsBackground = origin ? slideBackgroundIsPurelyInherited(origin, slide) : !slide.rawXml || !this.extractBackgroundColor(slide.rawXml);
123629
+ if (inheritsBackground) {
123630
+ await this.loadSlideRelationships(layoutPath, partRelsPath(layoutPath));
123631
+ const [color2, gradient, image] = await Promise.all([
123632
+ this.getLayoutBackgroundColor(slidePath),
123633
+ this.getLayoutBackgroundGradient(slidePath),
123634
+ this.getLayoutBackgroundImage(slidePath)
123635
+ ]);
123636
+ updated.backgroundColor = color2 ?? slide.backgroundColor;
123637
+ updated.backgroundGradient = gradient;
123638
+ updated.backgroundImage = image;
123639
+ rememberSlideBackgroundOrigin(this, slidePath, {
123640
+ authored: false,
123641
+ color: updated.backgroundColor,
123642
+ gradient,
123643
+ image
123644
+ });
122533
123645
  }
122534
123646
  slides[slideIndex] = updated;
122535
123647
  return updated;
@@ -122537,14 +123649,14 @@ var init_PptxHandlerRuntimeLoadPipeline = __esm({
122537
123649
  };
122538
123650
  }
122539
123651
  });
122540
- var PptxHandlerRuntime98;
123652
+ var PptxHandlerRuntime99;
122541
123653
  var init_PptxHandlerRuntimeImplementation = __esm({
122542
123654
  "src/core/core/runtime/PptxHandlerRuntimeImplementation.ts"() {
122543
123655
  init_PptxElementXmlBuilder();
122544
123656
  init_builders();
122545
123657
  init_factories();
122546
123658
  init_PptxHandlerRuntimeLoadPipeline();
122547
- PptxHandlerRuntime98 = class _PptxHandlerRuntime extends PptxHandlerRuntime97 {
123659
+ PptxHandlerRuntime99 = class _PptxHandlerRuntime extends PptxHandlerRuntime98 {
122548
123660
  constructor(dependencyFactory = new PptxRuntimeDependencyFactory()) {
122549
123661
  super();
122550
123662
  this.dependencyFactory = dependencyFactory;
@@ -122681,11 +123793,11 @@ var init_PptxHandlerRuntimeImplementation = __esm({
122681
123793
  };
122682
123794
  }
122683
123795
  });
122684
- var PptxHandlerRuntime99;
123796
+ var PptxHandlerRuntime100;
122685
123797
  var init_PptxHandlerRuntime = __esm({
122686
123798
  "src/core/core/PptxHandlerRuntime.ts"() {
122687
123799
  init_PptxHandlerRuntimeImplementation();
122688
- PptxHandlerRuntime99 = class extends PptxHandlerRuntime98 {
123800
+ PptxHandlerRuntime100 = class extends PptxHandlerRuntime99 {
122689
123801
  };
122690
123802
  }
122691
123803
  });
@@ -122693,7 +123805,7 @@ var createDefaultPptxHandlerRuntime;
122693
123805
  var init_PptxHandlerRuntimeFactory = __esm({
122694
123806
  "src/core/core/PptxHandlerRuntimeFactory.ts"() {
122695
123807
  init_PptxHandlerRuntime();
122696
- createDefaultPptxHandlerRuntime = () => new PptxHandlerRuntime99();
123808
+ createDefaultPptxHandlerRuntime = () => new PptxHandlerRuntime100();
122697
123809
  }
122698
123810
  });
122699
123811
  function deepClone(value) {
@@ -175190,7 +176302,7 @@ function markerText(info) {
175190
176302
  }
175191
176303
  function infoForParagraph(previous, kind, ordinal) {
175192
176304
  if (kind === "none") {
175193
- return { ...previous, none: true };
176305
+ return { none: true };
175194
176306
  }
175195
176307
  const sameKind = previous && (kind === "numbered" ? Boolean(previous.autoNumType) : Boolean(
175196
176308
  previous.char || previous.imageRelId || previous.imageDataUrl || previous.imageBlipFillXml
@@ -175261,75 +176373,218 @@ function elementSegments(element) {
175261
176373
  { text: text22, style: { ...element.textStyle } }
175262
176374
  ]);
175263
176375
  }
175264
- function splitParagraphs2(segments) {
175265
- const paragraphs = [
175266
- { segments: [] }
175267
- ];
175268
- for (const segment of segments) {
176376
+ function splitBulletParagraphs(segments) {
176377
+ const paragraphs = [{ segments: [], indices: [] }];
176378
+ for (const [index, segment] of segments.entries()) {
175269
176379
  if (isParagraphSeparatorSegment(segment)) {
175270
176380
  paragraphs[paragraphs.length - 1].terminator = segment;
175271
- paragraphs.push({ segments: [] });
176381
+ paragraphs.push({ segments: [], indices: [] });
175272
176382
  } else {
175273
176383
  paragraphs[paragraphs.length - 1].segments.push(segment);
176384
+ paragraphs[paragraphs.length - 1].indices.push(index);
175274
176385
  }
175275
176386
  }
175276
176387
  return paragraphs;
175277
176388
  }
175278
- function elementBulletKind(element) {
175279
- for (const paragraph of splitParagraphs2(elementSegments(element))) {
175280
- if (paragraph.segments.length) {
175281
- return paragraphBulletKind(paragraph.segments);
175282
- }
176389
+ function resolveBulletSegments(element, override) {
176390
+ if (override?.length) {
176391
+ return [...override];
175283
176392
  }
175284
- return "none";
176393
+ return elementSegments(element);
175285
176394
  }
175286
- function setElementBullets(element, kind, range) {
175287
- if (!hasTextProperties(element)) {
175288
- return {};
176395
+ function paragraphsBulletKind(paragraphs) {
176396
+ let kind;
176397
+ for (const paragraph of paragraphs) {
176398
+ if (paragraph.segments.length === 0) {
176399
+ continue;
176400
+ }
176401
+ const current = paragraphBulletKind(paragraph.segments);
176402
+ if (kind !== void 0 && kind !== current) {
176403
+ return "mixed";
176404
+ }
176405
+ kind = current;
175289
176406
  }
175290
- if (range && (!Number.isInteger(range.startParagraph) || !Number.isInteger(range.endParagraph) || range.startParagraph < 0 || range.endParagraph < range.startParagraph)) {
175291
- return {};
176407
+ return kind ?? "none";
176408
+ }
176409
+ function elementBulletKind(element) {
176410
+ return paragraphsBulletKind(splitBulletParagraphs(resolveBulletSegments(element)));
176411
+ }
176412
+ function inScope(paragraph, selection) {
176413
+ if (!selection) {
176414
+ return true;
175292
176415
  }
175293
- const paragraphs = splitParagraphs2(elementSegments(element));
175294
- if (range && range.startParagraph >= paragraphs.length) {
175295
- return {};
176416
+ return paragraph.indices.some(
176417
+ (index) => index >= selection.startSegIdx && index <= selection.endSegIdx
176418
+ );
176419
+ }
176420
+ function selectionBulletKind(element, selection, segments) {
176421
+ const paragraphs = splitBulletParagraphs(resolveBulletSegments(element, segments));
176422
+ return paragraphsBulletKind(paragraphs.filter((paragraph) => inScope(paragraph, selection)));
176423
+ }
176424
+ function setSelectionBullets(element, kind, selection, segments) {
176425
+ if (!hasTextProperties(element)) {
176426
+ return { patch: {}, newSelection: selection };
175296
176427
  }
176428
+ const source = resolveBulletSegments(element, segments);
175297
176429
  const next = [];
175298
- const sequence = createAutoNumberSequence();
175299
- for (const [index, paragraph] of paragraphs.entries()) {
175300
- const selected = !range || index >= range.startParagraph && index <= range.endParagraph;
175301
- let segments = paragraph.segments;
175302
- if (selected) {
175303
- const empty = {
175304
- ...paragraph.terminator,
175305
- text: "",
175306
- style: { ...paragraph.terminator?.style }
175307
- };
175308
- delete empty.isParagraphBreak;
175309
- delete empty.isLineBreak;
175310
- segments = toggleParagraphBullet(segments.length ? segments : [empty], kind);
175311
- }
175312
- const first = segments[0] ?? paragraph.terminator;
175313
- const info = first?.bulletInfo;
175314
- const level = first?.paragraphLevel ?? 0;
175315
- if (info?.autoNumType && paragraphBulletKind(segments) === "numbered") {
175316
- const startAt = info.autoNumStartAt ?? 1;
175317
- const ordinal = nextAutoNumber(sequence, level, info.autoNumType, startAt) - startAt;
175318
- if (info.paragraphIndex !== ordinal) {
175319
- segments = toggleParagraphBullet(segments, "numbered", ordinal);
175320
- }
176430
+ const indexMap = /* @__PURE__ */ new Map();
176431
+ let ordinal = 0;
176432
+ for (const paragraph of splitBulletParagraphs(source)) {
176433
+ const content = paragraph.indices.filter(
176434
+ (_index, position2) => !isBulletMarkerSegment(paragraph.segments[position2])
176435
+ );
176436
+ if (paragraph.segments.length > 0 && content.length > 0 && inScope(paragraph, selection)) {
176437
+ const rewritten = toggleParagraphBullet(paragraph.segments, kind, ordinal);
176438
+ ordinal += 1;
176439
+ const contentStart = next.length + (kind === "none" ? 0 : 1);
176440
+ for (const [position2, index] of content.entries()) {
176441
+ indexMap.set(index, contentStart + position2);
176442
+ }
176443
+ next.push(...rewritten);
175321
176444
  } else {
175322
- breakAutoNumberRun(sequence, level);
176445
+ for (const [position2, index] of paragraph.indices.entries()) {
176446
+ indexMap.set(index, next.length + position2);
176447
+ }
176448
+ next.push(...paragraph.segments);
175323
176449
  }
175324
- next.push(...segments);
175325
176450
  if (paragraph.terminator) {
175326
176451
  next.push(paragraph.terminator);
175327
176452
  }
175328
176453
  }
175329
- return {
175330
- textSegments: next,
175331
- textStyle: withoutListType(element.textStyle)
175332
- };
176454
+ const textStyle = withoutListType(element.textStyle);
176455
+ const newSelection = selection ? {
176456
+ startSegIdx: indexMap.get(selection.startSegIdx) ?? selection.startSegIdx,
176457
+ startOffset: selection.startOffset,
176458
+ endSegIdx: indexMap.get(selection.endSegIdx) ?? selection.endSegIdx,
176459
+ endOffset: selection.endOffset
176460
+ } : null;
176461
+ return { patch: { textSegments: next, textStyle }, newSelection };
176462
+ }
176463
+ function toggleSelectionBullets(element, kind, selection, segments) {
176464
+ const current = selectionBulletKind(element, selection, segments);
176465
+ return setSelectionBullets(element, current === kind ? "none" : kind, selection, segments);
176466
+ }
176467
+ var TEXT_DECORATION_FLAGS = [
176468
+ "bold",
176469
+ "italic",
176470
+ "underline",
176471
+ "strikethrough"
176472
+ ];
176473
+ function isContentSegment(segment) {
176474
+ return !segment.isParagraphBreak && segment.text !== "\n" && segment.text.length > 0 && !isBulletMarkerSegment(segment);
176475
+ }
176476
+ function contentSegmentsInSelection(segments, selection) {
176477
+ if (!segments) {
176478
+ return [];
176479
+ }
176480
+ return segments.filter(
176481
+ (segment, index) => isContentSegment(segment) && (!selection || index >= selection.startSegIdx && index <= selection.endSegIdx)
176482
+ );
176483
+ }
176484
+ function flagState(values) {
176485
+ if (values.every((value) => value)) {
176486
+ return "on";
176487
+ }
176488
+ return values.some((value) => value) ? "mixed" : "off";
176489
+ }
176490
+ function getSelectionTextStyleFlags(segments, selection, elementTextStyle) {
176491
+ const runs = contentSegmentsInSelection(segments, selection);
176492
+ const flags = {};
176493
+ for (const flag of TEXT_DECORATION_FLAGS) {
176494
+ const body = elementTextStyle?.[flag] ?? false;
176495
+ flags[flag] = runs.length === 0 ? flagState([body]) : flagState(runs.map((run) => run.style?.[flag] ?? body));
176496
+ }
176497
+ return flags;
176498
+ }
176499
+ function nextToggleValue(state) {
176500
+ return state !== "on";
176501
+ }
176502
+ var BODY_TEXT_STYLE_KEYS = /* @__PURE__ */ new Set([
176503
+ // autofit (`a:normAutofit` / `a:spAutoFit`)
176504
+ "autoFit",
176505
+ "autoFitMode",
176506
+ "autoFitFontScale",
176507
+ "autoFitLineSpacingReduction",
176508
+ // `a:bodyPr` anchoring, direction, rotation
176509
+ "vAlign",
176510
+ "anchorCenter",
176511
+ "textDirection",
176512
+ "textBodyRotation",
176513
+ "upright",
176514
+ // `a:bodyPr` columns, overflow, wrap
176515
+ "columnCount",
176516
+ "columnSpacing",
176517
+ "rtlColumns",
176518
+ "hOverflow",
176519
+ "vertOverflow",
176520
+ "textWrap",
176521
+ // `a:bodyPr` insets
176522
+ "bodyInsetLeft",
176523
+ "bodyInsetTop",
176524
+ "bodyInsetRight",
176525
+ "bodyInsetBottom",
176526
+ // paragraph geometry the block applies body-wide
176527
+ "paragraphMarginLeft",
176528
+ "paragraphMarginRight",
176529
+ "paragraphIndent",
176530
+ "paragraphSpacingBefore",
176531
+ "paragraphSpacingAfter",
176532
+ "lineSpacing",
176533
+ "lineSpacingExactPt",
176534
+ "tabStops",
176535
+ "defaultTabSize",
176536
+ "eaLineBreak",
176537
+ "latinLineBreak",
176538
+ "fontAlignment",
176539
+ "hangingPunctuation",
176540
+ // `a:bodyPr` flags
176541
+ "spaceFirstLastParagraph",
176542
+ "fromWordArt",
176543
+ "forceAntiAlias",
176544
+ "compatibleLineSpacing",
176545
+ // warp and 3D scene on the body
176546
+ "textWarpPreset",
176547
+ "textWarpAdj",
176548
+ "textWarpAdj2",
176549
+ "text3d",
176550
+ "textBodyScene3d",
176551
+ "textBodyScene3dXml",
176552
+ "flatText",
176553
+ "bodyPropertiesExtLstXml"
176554
+ ]);
176555
+ function isBodyTextStyleKey(key2) {
176556
+ return BODY_TEXT_STYLE_KEYS.has(key2);
176557
+ }
176558
+ function splitTextStyleUpdate(updates) {
176559
+ const body = {};
176560
+ const run = {};
176561
+ for (const [key2, value] of Object.entries(updates)) {
176562
+ (isBodyTextStyleKey(key2) ? body : run)[key2] = value;
176563
+ }
176564
+ return { body, run };
176565
+ }
176566
+ function reconcileDecorationFlags(segments, textStyle, flags) {
176567
+ const nextStyle = { ...textStyle ?? {} };
176568
+ let nextSegments = [...segments];
176569
+ for (const flag of flags) {
176570
+ const body = nextStyle[flag] ?? false;
176571
+ const content = nextSegments.filter(isContentSegment);
176572
+ if (content.length === 0) {
176573
+ continue;
176574
+ }
176575
+ if (content.every((segment) => segment.style?.[flag] ?? body)) {
176576
+ nextStyle[flag] = true;
176577
+ continue;
176578
+ }
176579
+ if (!body) {
176580
+ continue;
176581
+ }
176582
+ delete nextStyle[flag];
176583
+ nextSegments = nextSegments.map(
176584
+ (segment) => isContentSegment(segment) && segment.style?.[flag] === void 0 ? { ...segment, style: { ...segment.style, [flag]: true } } : segment
176585
+ );
176586
+ }
176587
+ return { textStyle: nextStyle, textSegments: nextSegments };
175333
176588
  }
175334
176589
  function updateTextSegmentStyle(segment, updates, options = {}) {
175335
176590
  return {
@@ -175590,128 +176845,37 @@ function findTextPositionInSegment(editor, segIdx, charOffset) {
175590
176845
  }
175591
176846
  return null;
175592
176847
  }
175593
- function positions(segments) {
175594
- let offset = 0;
175595
- let paragraph = 0;
175596
- let first = true;
175597
- return segments.map((segment) => {
175598
- const marker = first && isBulletMarkerSegment(segment);
175599
- const start = offset;
175600
- if (!marker) {
175601
- offset += segment.text.length;
175602
- }
175603
- const entry2 = {
175604
- start,
175605
- end: offset,
175606
- paragraph,
175607
- editable: !marker && !isParagraphSeparatorSegment(segment)
175608
- };
175609
- first = isParagraphSeparatorSegment(segment);
175610
- if (first) {
175611
- paragraph += 1;
175612
- }
175613
- return entry2;
175614
- });
175615
- }
175616
- function restorePoint(segments, offset, end) {
175617
- const entries = positions(segments);
175618
- let fallback = { index: 0, offset: 0 };
175619
- for (const [index, entry2] of entries.entries()) {
175620
- if (!entry2.editable) {
175621
- continue;
175622
- }
175623
- fallback = { index, offset: segments[index].text.length };
175624
- if (end ? offset <= entry2.end : offset < entry2.end) {
175625
- return { index, offset: Math.max(0, offset - entry2.start) };
175626
- }
175627
- }
175628
- return fallback;
175629
- }
175630
- function restoreParagraphMetadata(original, updated) {
175631
- const firstRuns = original.filter(
175632
- (_, index) => index === 0 || isParagraphSeparatorSegment(original[index - 1])
175633
- );
175634
- let paragraph = 0;
175635
- return updated.map((segment, index) => {
175636
- const first = index === 0 || isParagraphSeparatorSegment(updated[index - 1]);
175637
- if (!first) {
175638
- return segment;
175639
- }
175640
- const source = firstRuns[paragraph++];
175641
- if (!source) {
175642
- return segment;
175643
- }
175644
- return {
175645
- ...segment,
175646
- bulletInfo: source.bulletInfo,
175647
- paragraphLevel: source.paragraphLevel,
175648
- paragraphProperties: source.paragraphProperties,
175649
- endParaRunProperties: source.endParaRunProperties
175650
- };
175651
- });
175652
- }
175653
- function selectedParagraphBulletKind(element, selection) {
175654
- if (!selection || !hasTextProperties(element) || !element.textSegments) {
175655
- return elementBulletKind(element);
175656
- }
175657
- let first = selection.startSegIdx;
175658
- while (first > 0 && !isParagraphSeparatorSegment(element.textSegments[first - 1])) {
175659
- first -= 1;
175660
- }
175661
- return paragraphBulletKind(element.textSegments.slice(first));
175662
- }
175663
- function applyListStyleUpdate(element, updates, selection) {
175664
- if (!hasTextProperties(element) || !updates.listType) {
175665
- return { patch: {}, selection };
175666
- }
175667
- const { listType, ...characterStyle } = updates;
175668
- let segments = element.textSegments;
175669
- let workingSelection = selection;
175670
- if (segments && Object.keys(characterStyle).length > 0) {
175671
- if (selection) {
175672
- const styled = applyStyleToSelectedSegments(segments, selection, characterStyle);
175673
- segments = restoreParagraphMetadata(segments, styled.newSegments);
175674
- workingSelection = styled.newSelection;
175675
- } else {
175676
- segments = segments.map((segment) => updateTextSegmentStyle(segment, characterStyle));
175677
- }
175678
- }
175679
- const working = {
175680
- ...element,
175681
- textSegments: segments,
175682
- textStyle: selection ? element.textStyle : { ...element.textStyle, ...characterStyle }
175683
- };
175684
- if (!workingSelection || !segments) {
175685
- return { patch: setElementBullets(working, listType), selection: null };
175686
- }
175687
- const entries = positions(segments);
175688
- const startEntry = entries[workingSelection.startSegIdx];
175689
- const endEntry = entries[workingSelection.endSegIdx];
175690
- if (!startEntry || !endEntry) {
175691
- return { patch: {}, selection: null };
175692
- }
175693
- const startOffset = startEntry.start + workingSelection.startOffset;
175694
- const endOffset = endEntry.start + workingSelection.endOffset;
175695
- const lastSelected = [...entries].reverse().find((entry2) => entry2.start < endOffset);
175696
- const patch = setElementBullets(working, listType, {
175697
- startParagraph: startEntry.paragraph,
175698
- endParagraph: lastSelected?.paragraph ?? endEntry.paragraph
175699
- });
175700
- const next = { ...working, ...patch };
175701
- const nextSegments = hasTextProperties(next) ? next.textSegments : void 0;
175702
- if (!nextSegments) {
175703
- return { patch, selection: null };
175704
- }
175705
- const start = restorePoint(nextSegments, startOffset, false);
175706
- const end = restorePoint(nextSegments, endOffset, true);
176848
+ function applyTextStyleUpdate(element, updates, selection, segments) {
176849
+ if (!hasTextProperties(element)) {
176850
+ return { patch: {}, newSelection: null };
176851
+ }
176852
+ const current = segments ?? element.textSegments;
176853
+ if (selection && current && current.length > 0) {
176854
+ const { body, run } = splitTextStyleUpdate(updates);
176855
+ let textStyle2 = { ...element.textStyle, ...body };
176856
+ let textSegments2 = [...current];
176857
+ let newSelection = selection;
176858
+ if (Object.keys(run).length > 0) {
176859
+ const scoped = applyStyleToSelectedSegments(textSegments2, selection, run);
176860
+ textSegments2 = scoped.newSegments;
176861
+ newSelection = scoped.newSelection;
176862
+ }
176863
+ const touched = TEXT_DECORATION_FLAGS.filter((flag) => flag in run);
176864
+ if (touched.length > 0) {
176865
+ const reconciled = reconcileDecorationFlags(textSegments2, textStyle2, touched);
176866
+ textStyle2 = reconciled.textStyle;
176867
+ textSegments2 = reconciled.textSegments;
176868
+ }
176869
+ return { patch: { textStyle: textStyle2, textSegments: textSegments2 }, newSelection };
176870
+ }
176871
+ const textStyle = { ...element.textStyle, ...updates };
176872
+ const textSegments = current?.map((segment) => ({
176873
+ ...segment,
176874
+ style: { ...segment.style, ...updates }
176875
+ }));
175707
176876
  return {
175708
- patch,
175709
- selection: {
175710
- startSegIdx: start.index,
175711
- startOffset: start.offset,
175712
- endSegIdx: end.index,
175713
- endOffset: end.offset
175714
- }
176877
+ patch: textSegments ? { textStyle, textSegments } : { textStyle },
176878
+ newSelection: null
175715
176879
  };
175716
176880
  }
175717
176881
  var DEBOUNCE_MS = 600;
@@ -176860,12 +178024,15 @@ function buildTextBlockStyle(element, options = {}) {
176860
178024
  const bodyIndent = hasParagraphIndents ? 0 : ts?.paragraphIndent || 0;
176861
178025
  const bodyMarginLeft = hasParagraphIndents ? 0 : ts?.paragraphMarginLeft || 0;
176862
178026
  const bodyMarginRight = hasParagraphIndents ? 0 : ts?.paragraphMarginRight || 0;
178027
+ const hasTextSegments = (element.textSegments?.length ?? 0) > 0;
176863
178028
  const decorations = [];
176864
- if (ts?.underline || ts?.hyperlink) {
176865
- decorations.push("underline");
176866
- }
176867
- if (ts?.strikethrough) {
176868
- decorations.push("line-through");
178029
+ if (!hasTextSegments) {
178030
+ if (ts?.underline || ts?.hyperlink) {
178031
+ decorations.push("underline");
178032
+ }
178033
+ if (ts?.strikethrough) {
178034
+ decorations.push("line-through");
178035
+ }
176869
178036
  }
176870
178037
  const style = {};
176871
178038
  if (options.bodyLayout) {
@@ -176881,7 +178048,7 @@ function buildTextBlockStyle(element, options = {}) {
176881
178048
  }
176882
178049
  }
176883
178050
  style.color = ts?.hyperlink ? normalizeHexColor2(ts?.color, HYPERLINK_COLOR) : normalizeHexColor2(ts?.color, fallbackColor);
176884
- if ((element.textSegments?.length ?? 0) === 0 && ts?.highlightColor) {
178051
+ if (!hasTextSegments && ts?.highlightColor) {
176885
178052
  style.backgroundColor = normalizeHexColor2(ts.highlightColor, void 0);
176886
178053
  }
176887
178054
  style.textAlign = resolveCssTextAlign(ts?.align, isRtl) ?? "left";
@@ -176894,7 +178061,7 @@ function buildTextBlockStyle(element, options = {}) {
176894
178061
  style.fontWeight = ts?.bold ? 700 : 400;
176895
178062
  style.fontStyle = ts?.italic ? "italic" : "normal";
176896
178063
  style.textDecorationLine = decorations.length > 0 ? decorations.join(" ") : "none";
176897
- if (ts?.strikethrough && ts?.strikeType === "dblStrike") {
178064
+ if (!hasTextSegments && ts?.strikethrough && ts?.strikeType === "dblStrike") {
176898
178065
  style.textDecorationStyle = "double";
176899
178066
  }
176900
178067
  style.lineHeight = resolveLineHeight(ts);
@@ -181231,6 +182398,9 @@ function remapEmptyParagraph(text22, segments, terminator) {
181231
182398
  delete first.isParagraphBreak;
181232
182399
  return [{ ...first, text: text22, style: { ...insertionStyle } }];
181233
182400
  }
182401
+ function trailingWhitespace(text22) {
182402
+ return text22.slice(text22.trimEnd().length);
182403
+ }
181234
182404
  function renumberRemappedParagraphs(segments) {
181235
182405
  const sequence = createAutoNumberSequence();
181236
182406
  let first = true;
@@ -181254,7 +182424,7 @@ function renumberRemappedParagraphs(segments) {
181254
182424
  if (isBulletMarkerSegment(segment)) {
181255
182425
  const resolved = resolveParagraphBullet(updated);
181256
182426
  if (resolved) {
181257
- updated.text = resolved.marker + (segment.text.match(/\s+$/u)?.[0] ?? "");
182427
+ updated.text = resolved.marker + trailingWhitespace(segment.text);
181258
182428
  }
181259
182429
  }
181260
182430
  return updated;
@@ -181304,8 +182474,7 @@ function continueListParagraph(segments, donorSegments) {
181304
182474
  if (bullet.isNumbered && typeof paragraphIndex === "number" && Number.isFinite(paragraphIndex) && isBulletMarkerSegment(donor)) {
181305
182475
  const resolved = resolveParagraphBullet(continued);
181306
182476
  if (resolved) {
181307
- const trailingWhitespace = donor.text.match(/\s+$/u)?.[0] ?? "";
181308
- continued.text = `${resolved.marker}${trailingWhitespace}`;
182477
+ continued.text = `${resolved.marker}${trailingWhitespace(donor.text)}`;
181309
182478
  }
181310
182479
  }
181311
182480
  return [continued, ...rest];
@@ -181538,6 +182707,22 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
181538
182707
  );
181539
182708
  if (!originalParagraph && precedingParagraph) {
181540
182709
  paraSegments = continueListParagraph(paraSegments, precedingParagraph);
182710
+ const donor = precedingParagraph[0];
182711
+ if (donor?.paragraphProperties?.alignment !== void 0 && paraSegments[0]) {
182712
+ paraSegments = [
182713
+ {
182714
+ ...paraSegments[0],
182715
+ paragraphLevel: donor.paragraphLevel,
182716
+ paragraphProperties: donor.paragraphProperties
182717
+ },
182718
+ ...paraSegments.slice(1)
182719
+ ];
182720
+ }
182721
+ } else if (!originalParagraph && pi === 0 && paraSegments[0]) {
182722
+ const firstOriginal = originalParagraphs[0]?.segments[0];
182723
+ if (firstOriginal?.paragraphLevel !== void 0) {
182724
+ paraSegments = [{ ...paraSegments[0], paragraphLevel: firstOriginal.paragraphLevel }];
182725
+ }
181541
182726
  }
181542
182727
  output.push(...paraSegments);
181543
182728
  precedingParagraph = paraSegments;
@@ -181648,7 +182833,7 @@ function adjustmentRange(def, key2, vars, isAngular) {
181648
182833
  }
181649
182834
  return isAngular ? { min: 0, max: ANGLE_UNITS_PER_TURN } : { min: -UNBOUNDED_CARTESIAN, max: UNBOUNDED_CARTESIAN };
181650
182835
  }
181651
- var COMMAND_ARITY = {
182836
+ var COMMAND_ARITY2 = {
181652
182837
  M: { take: 2, points: [0] },
181653
182838
  L: { take: 2, points: [0] },
181654
182839
  Q: { take: 4, points: [0, 2] },
@@ -181668,7 +182853,7 @@ function pathCoordinates(paths) {
181668
182853
  i2 += 1;
181669
182854
  continue;
181670
182855
  }
181671
- const arity = COMMAND_ARITY[command];
182856
+ const arity = COMMAND_ARITY2[command];
181672
182857
  if (!arity) {
181673
182858
  i2 += 1;
181674
182859
  continue;
@@ -187560,14 +188745,14 @@ var THREE_UNAVAILABLE = {
187560
188745
  var FOV = 50;
187561
188746
  async function loadThree() {
187562
188747
  try {
187563
- return await import('./three.module-AC7ESV4W.mjs');
188748
+ return await import('./three.module-LGUV2LI6.mjs');
187564
188749
  } catch {
187565
188750
  return null;
187566
188751
  }
187567
188752
  }
187568
188753
  async function loadGltfLoaderCtor() {
187569
188754
  try {
187570
- const mod = await import('./GLTFLoader-374ZNTXW.mjs');
188755
+ const mod = await import('./GLTFLoader-IWJFC4XI.mjs');
187571
188756
  return mod.GLTFLoader;
187572
188757
  } catch {
187573
188758
  return null;
@@ -187575,7 +188760,7 @@ async function loadGltfLoaderCtor() {
187575
188760
  }
187576
188761
  async function loadOrbitControlsCtor() {
187577
188762
  try {
187578
- const mod = await import('./OrbitControls-ZTGHPI5G.mjs');
188763
+ const mod = await import('./OrbitControls-2XOMWUVE.mjs');
187579
188764
  return mod.OrbitControls;
187580
188765
  } catch {
187581
188766
  return null;
@@ -187922,14 +189107,14 @@ function createChart3DLabelProjector(three, doc, labels) {
187922
189107
  }
187923
189108
  async function loadChart3DThree() {
187924
189109
  try {
187925
- return await import('./three.module-AC7ESV4W.mjs');
189110
+ return await import('./three.module-LGUV2LI6.mjs');
187926
189111
  } catch {
187927
189112
  return null;
187928
189113
  }
187929
189114
  }
187930
189115
  async function loadChart3DOrbitControls() {
187931
189116
  try {
187932
- const mod = await import('./OrbitControls-ZTGHPI5G.mjs');
189117
+ const mod = await import('./OrbitControls-2XOMWUVE.mjs');
187933
189118
  return mod.OrbitControls;
187934
189119
  } catch {
187935
189120
  return null;
@@ -190764,27 +191949,41 @@ function projectDrawingShapes(elementId, shapes, viewBox, palette, style) {
190764
191949
  function styleShadowFilter(style) {
190765
191950
  return styleShadow(style);
190766
191951
  }
191952
+ function collectFontsFromElement(element, fonts) {
191953
+ if (hasTextProperties(element)) {
191954
+ if (element.textStyle?.fontFamily) {
191955
+ fonts.add(element.textStyle.fontFamily);
191956
+ }
191957
+ for (const segment of element.textSegments ?? []) {
191958
+ if (segment.style?.fontFamily) {
191959
+ fonts.add(segment.style.fontFamily);
191960
+ }
191961
+ }
191962
+ }
191963
+ if (element.type === "group") {
191964
+ for (const child27 of element.children ?? []) {
191965
+ collectFontsFromElement(child27, fonts);
191966
+ }
191967
+ }
191968
+ }
191969
+ function collectUsedFonts(slides) {
191970
+ const fonts = /* @__PURE__ */ new Set();
191971
+ for (const slide of slides) {
191972
+ for (const element of slide.elements ?? []) {
191973
+ collectFontsFromElement(element, fonts);
191974
+ }
191975
+ }
191976
+ return [...fonts].sort();
191977
+ }
190767
191978
  var GOOGLE_FONTS_CSS2_BASE = "https://fonts.googleapis.com/css2";
190768
191979
  var GOOGLE_WEBFONT_AXIS = "ital,wght@0,400;0,700;1,400;1,700";
190769
191980
  var DISPLAY_PARAM = "display=swap";
190770
191981
  function collectReferencedFontFamilies(slides) {
190771
191982
  const families = /* @__PURE__ */ new Set();
190772
- const visit = (elements) => {
190773
- for (const el of elements) {
190774
- if (el.type === "group") {
190775
- visit(el.children);
190776
- }
190777
- if (hasTextProperties(el) && el.textSegments) {
190778
- for (const seg of el.textSegments) {
190779
- if (seg.style.fontFamily) {
190780
- families.add(seg.style.fontFamily);
190781
- }
190782
- }
190783
- }
190784
- }
190785
- };
190786
191983
  for (const slide of slides) {
190787
- visit(slide.elements);
191984
+ for (const el of slide.elements) {
191985
+ collectFontsFromElement(el, families);
191986
+ }
190788
191987
  }
190789
191988
  return families;
190790
191989
  }
@@ -198362,32 +199561,6 @@ function computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight,
198362
199561
  visibleRange: { start: visibleStart, end: visibleEnd }
198363
199562
  };
198364
199563
  }
198365
- function collectFontsFromElement(element, fonts) {
198366
- if (hasTextProperties(element)) {
198367
- if (element.textStyle?.fontFamily) {
198368
- fonts.add(element.textStyle.fontFamily);
198369
- }
198370
- for (const segment of element.textSegments ?? []) {
198371
- if (segment.style?.fontFamily) {
198372
- fonts.add(segment.style.fontFamily);
198373
- }
198374
- }
198375
- }
198376
- if (element.type === "group") {
198377
- for (const child27 of element.children ?? []) {
198378
- collectFontsFromElement(child27, fonts);
198379
- }
198380
- }
198381
- }
198382
- function collectUsedFonts(slides) {
198383
- const fonts = /* @__PURE__ */ new Set();
198384
- for (const slide of slides) {
198385
- for (const element of slide.elements ?? []) {
198386
- collectFontsFromElement(element, fonts);
198387
- }
198388
- }
198389
- return [...fonts].sort();
198390
- }
198391
199564
  function browserFontSource() {
198392
199565
  return typeof document === "undefined" ? void 0 : document.fonts;
198393
199566
  }
@@ -201178,13 +202351,26 @@ async function fetchAsDataUrl(url) {
201178
202351
  return null;
201179
202352
  }
201180
202353
  }
201181
- var CSS_URL_PATTERN = /url\(\s*(?:"([^"]*)"|'([^']*)'|([^"')\s]+))\s*\)/u;
201182
202354
  function extractCssUrl(value) {
201183
- const match = CSS_URL_PATTERN.exec(value);
201184
- if (!match) {
202355
+ const start = value.indexOf("url(");
202356
+ if (start === -1) {
202357
+ return null;
202358
+ }
202359
+ const contents = value.slice(start + "url(".length).trimStart();
202360
+ const quote = contents[0];
202361
+ if (quote === '"' || quote === "'") {
202362
+ const end2 = contents.indexOf(quote, 1);
202363
+ if (end2 === -1 || !contents.slice(end2 + 1).trimStart().startsWith(")")) {
202364
+ return null;
202365
+ }
202366
+ return contents.slice(1, end2);
202367
+ }
202368
+ const end = contents.indexOf(")");
202369
+ if (end === -1) {
201185
202370
  return null;
201186
202371
  }
201187
- return match[1] ?? match[2] ?? match[3] ?? null;
202372
+ const url = contents.slice(0, end).trimEnd();
202373
+ return url && !url.includes('"') && !url.includes("'") && !url.includes(" ") && !url.includes(" ") ? url : null;
201188
202374
  }
201189
202375
  function needsEmbedding(url) {
201190
202376
  return url.startsWith("blob:") || url.startsWith("http:") || url.startsWith("https:");
@@ -201322,6 +202508,89 @@ function calculateViewportFit(input, defaults = DEFAULTS2) {
201322
202508
  availableHeight
201323
202509
  };
201324
202510
  }
202511
+ var FREEFORM_COORD_SCALE = 100;
202512
+ var FREEFORM_MIN_POINTS = 2;
202513
+ var FREEFORM_CLOSE_TOLERANCE_FACTOR = 3;
202514
+ var FREEFORM_CLOSE_TOLERANCE_MIN_PX = 4;
202515
+ function freeformCloseTolerance(strokeWidth) {
202516
+ return Math.max(FREEFORM_CLOSE_TOLERANCE_MIN_PX, strokeWidth * FREEFORM_CLOSE_TOLERANCE_FACTOR);
202517
+ }
202518
+ function isFreeformStrokeClosed(points4, tolerance) {
202519
+ if (points4.length < 3) {
202520
+ return false;
202521
+ }
202522
+ const first = points4[0];
202523
+ const last = points4[points4.length - 1];
202524
+ return Math.hypot(last.x - first.x, last.y - first.y) <= tolerance;
202525
+ }
202526
+ function buildFreeformStrokeGeometry(points4, strokeWidth, options = {}) {
202527
+ if (points4.length < FREEFORM_MIN_POINTS) {
202528
+ return null;
202529
+ }
202530
+ let minX = Infinity;
202531
+ let minY = Infinity;
202532
+ let maxX = -Infinity;
202533
+ let maxY = -Infinity;
202534
+ for (const point of points4) {
202535
+ minX = Math.min(minX, point.x);
202536
+ minY = Math.min(minY, point.y);
202537
+ maxX = Math.max(maxX, point.x);
202538
+ maxY = Math.max(maxY, point.y);
202539
+ }
202540
+ minX -= strokeWidth;
202541
+ minY -= strokeWidth;
202542
+ maxX += strokeWidth;
202543
+ maxY += strokeWidth;
202544
+ const width = Math.max(maxX - minX, 1);
202545
+ const height = Math.max(maxY - minY, 1);
202546
+ const segments = points4.map((point, index) => {
202547
+ const pt = {
202548
+ x: Math.round((point.x - minX) * FREEFORM_COORD_SCALE),
202549
+ y: Math.round((point.y - minY) * FREEFORM_COORD_SCALE)
202550
+ };
202551
+ return index === 0 ? { type: "moveTo", pt } : { type: "lineTo", pt };
202552
+ });
202553
+ const closed = isFreeformStrokeClosed(
202554
+ points4,
202555
+ options.closeTolerance ?? freeformCloseTolerance(strokeWidth)
202556
+ );
202557
+ if (closed) {
202558
+ segments.push({ type: "close" });
202559
+ }
202560
+ return {
202561
+ x: minX,
202562
+ y: minY,
202563
+ width,
202564
+ height,
202565
+ path: {
202566
+ width: Math.round(width * FREEFORM_COORD_SCALE),
202567
+ height: Math.round(height * FREEFORM_COORD_SCALE),
202568
+ segments
202569
+ },
202570
+ closed
202571
+ };
202572
+ }
202573
+ function buildFreeformShapeElement(points4, options) {
202574
+ const geometry = buildFreeformStrokeGeometry(points4, options.width, options);
202575
+ if (!geometry) {
202576
+ return null;
202577
+ }
202578
+ return {
202579
+ id: options.id ?? createEditorId("shape"),
202580
+ type: "shape",
202581
+ x: geometry.x,
202582
+ y: geometry.y,
202583
+ width: geometry.width,
202584
+ height: geometry.height,
202585
+ shapeType: "custom",
202586
+ shapeStyle: {
202587
+ fillColor: "transparent",
202588
+ strokeColor: options.color,
202589
+ strokeWidth: options.width
202590
+ },
202591
+ customGeometryPaths: [geometry.path]
202592
+ };
202593
+ }
201325
202594
  var FALLBACK_DOWNLOAD_NAME = "presentation.pptx";
201326
202595
  var REVOKE_DELAY_MS = 200;
201327
202596
  var OPEN_REVOKE_DELAY_MS = 6e4;
@@ -203486,15 +204755,18 @@ async function rasterizeElementTiles(element, naturalWidth, naturalHeight, doc,
203486
204755
  return { fullWidth: plan.fullWidth, fullHeight: plan.fullHeight, tiled: plan.tiled, tiles };
203487
204756
  }
203488
204757
  function groupTilesByRow(tiles) {
203489
- const rowCount = tiles.reduce((max, t) => Math.max(max, t.row), 0) + 1;
203490
- const rows = Array.from({ length: rowCount }, () => []);
203491
- for (const tile of tiles) {
203492
- if (!Number.isInteger(tile.row) || !Number.isInteger(tile.col) || tile.row < 0 || tile.col < 0) {
203493
- continue;
203494
- }
203495
- rows[tile.row][tile.col] = tile;
203496
- }
203497
- return rows;
204758
+ const validTiles = tiles.filter(
204759
+ (tile) => Number.isInteger(tile.row) && Number.isInteger(tile.col) && tile.row >= 0 && tile.col >= 0
204760
+ );
204761
+ const rowCount = validTiles.reduce((max, tile) => Math.max(max, tile.row), 0) + 1;
204762
+ return Array.from({ length: rowCount }, (_rowIndex, row) => {
204763
+ const tilesInRow = validTiles.filter((tile) => tile.row === row);
204764
+ const colCount = tilesInRow.reduce((max, tile) => Math.max(max, tile.col), -1) + 1;
204765
+ return Array.from(
204766
+ { length: colCount },
204767
+ (_columnIndex, col) => tilesInRow.find((tile) => tile.col === col)
204768
+ );
204769
+ });
203498
204770
  }
203499
204771
  function combineTileRowPixels(tiles, fullWidth) {
203500
204772
  if (tiles.length === 0) {
@@ -203718,4 +204990,4 @@ async function rasterResultToPngBlob(result) {
203718
204990
  * `<p:extLst>` (optional)
203719
204991
  */
203720
204992
 
203721
- export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BAR3D_SHAPE_OPTIONS, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, CHARACTER_SPACING_OPTIONS, CHART_TYPE_OPTIONS, COLOR_MAP_ALIAS_KEYS, COMMENT_MARKER_SIZE, COMMENT_MENTION_ATTRIBUTE, COMMENT_MENTION_CLASS, COMMON_FONTS, COMMON_FONT_SIZES, COMPOUND_LINE_OPTIONS, CONNECTION_TIMEOUT_MS, CONNECTOR_SITE_SNAP_PX, CUSTOM_FONT_ACCEPT, DEBOUNCE_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_FONT_FAMILY2 as DEFAULT_FONT_FAMILY, DEFAULT_INSERT_CHART_KIND, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_PALETTE2, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PREFERENCES, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, EFFECT_SOUND_CATALOGUE, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPANDED_MAX_HEIGHT, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GIF_POST_CAPTURE_MAX_SIDE, GRADIENT_TYPE_OPTIONS, GlyphOutlineFontCache, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INDENT_PX, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, 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, MIN_TOUCH_TARGET_PX, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OFFICE_COLOR_SWATCHES, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, 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, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RIBBON_SHAPE_SWATCHES, RIBBON_TRANSITION_PRESETS, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_SHOW_OPTIONS, SLIDE_SIZE_PRESETS, SLIDE_TEMPLATES, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_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_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_MORPH_OPTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_SOUND_NONE_VALUE, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SPEED_OPTIONS, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptAutosaveRecovery, acceptsPresentationInput, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addCommentToList, addQuickAccessCommand, addSection, addSiblingAfter, addSmartArtNodeAsChild, addTableStyleToMap, addTagToCollections, advanceChartMarkDrag, advanceChartValueDrag, advanceMainSequence, alignElements, animationEffectLabel, annotationOverlayZIndex, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyAnimationTimelineOrder, applyAutoCorrect, applyCaseTransformToSegments, applyChartPartHighlight, applyColorChange, applyDuotone, applyFindReplacements, applyFormatToElement, applyHighlightClickStyle, applyImagePathPatches, applyListStyleUpdate, applyMasterViewCrudAction, applyMotionPathPreset, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, applyOleSheetCellEdit, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyStyleToSelectedSegments, applyTableStyleDelete, applyTableStyleFieldEdit, applyTableStyleMapChange, applyTableStylePreset, applyThemeOverrideToSlide, applyThemeToData, applyTransitionSoundFile, applyTransitionStockSound, attachPresentationVisibilityPause, authorConnectorBetweenSites, autosaveSnapshotMark, availableQuickAccessCommands, backstageCardsFor, bar3DShapePatch, beginChartMarkDrag, beginChartValueDrag, beginShapeAdjustment, bringForward, bringToFront, build3DExtrusionData, buildActiveSessionUsers, buildAnimationTimelineBars, buildAnimationTimelineRows, buildAreaChart3DDataForElement, buildBarActions, buildBarChart3DDataForElement, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartMarkDragGeometry, buildChartViewModel, buildChromeStyle, buildCollaborationShareUrl, buildCommentMarkers, buildContentPartStrokes, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDeckSaveOptions, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildFontCatalog, buildGlyphEnvelope, buildHandoutsHtml, buildHollowHitOutline, buildInitialGuides, buildInkGroupStrokes, buildInlineTextCommitPatch, buildJoinCollaborationConfig, buildLayoutPreviewGeometry, buildLineChart3DDataForElement, buildLiveInkStrokeView, buildMorphAnimationRules, buildMorphTransitionPlan, buildMotionPathPreview, buildNotesHtml, buildNotesPdfBytes, buildNotesPrintHtml, buildOleContentUpdatePatch, buildOleEditDialogDescriptor, buildOleObjectNamePatch, buildOutline, buildOutlineHtml, buildParagraphs, buildPieChart3DDataForElement, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildRectPathGradient, buildRunProgramNotice, buildRunTabLines, buildSaveSlides, buildSlideTemplateContent, buildSlideTemplateSlide, buildSlidesHtml, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildSmartArtPreviewElement, buildStrokeOutline, buildStrokePathD, buildSubpathFillOverlay, buildSubpathPaints, buildSummaryZoomView, buildSurfaceChart3DDataForElement, buildSvgGradientDef, buildTabContext, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBodyLayoutStyle, buildTextBuildSpec, buildTextStyleOverrideCss, buildThemeColorGrid, buildThemeColorMap, buildThemeColorSwatchGrid, buildTiledSlidesPdfBytes, buildUserFontFaceStyles, calculateViewportFit, canAddTopLevelNode, canCommitActionType, canDrillDown, canGoNext, canGoPrevious, canGroupSelection, canInteractWithElement, canRemoveTopLevelNode, canSetStrokeWidth, canUngroupSelection, canUseClipboard, cancelBuildReveal, canvasToJpegData, cellRunStyle, cellStyleToCss, centeredSvgTextLines, chartGridlinesPatch, chartGridlinesState, chartPartToAttrs, chartPreserveAspectRatio, checkModifyPassword, clampCropValue, clampGifDimensions, clampNotesFontSize, clampOptionNumber, clampPercent2, clampSorterZoom, clampTransitionNumber, clampUnitInterval2 as clampUnitInterval, clampZoomScale, classifyExtraConnections, classifyMediaType, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearPlaybackTimers, clearStoredViewerPrefs, clearTransitionSound, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collapseChartTitleRunsForEdit, collectCoherent3DOffNodeIds, collectConnectorSiteCandidates, collectImagePaths, collectMediaElements, collectReferencedFontFamilies, collectUsedFonts, colorWithOpacity, commentMentionQuery, commentTextSegments, comparePresentation, compatToastStackStyle, compatibilityWarningToasts, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeAnchoredPopupPosition, computeChartLegendLayout, computeColorFilter, computeColumnBoundaries, computeDrawingViewBox, computeEntranceAnimationDelay, computeGridSpacingPx, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSlideIndices, computeSmartArtElementLayout, computeSnapToShape, computeSplitCell, computeVirtualRange, connectorWrapperTransform, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createActiveAnimationGroup, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDefaultChartUserShape, createDefaultChartUserShapeGroupChild, createDepartureChannel, createGlyphOutlineLookup, createInitialPresentationSnapshot, createPlainNotesSegments, createPresenceProjector, createPresentationKeyBuffer, createPresentationLoadResources, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createSyncGate, createTableStyleEntry, createTouchGestureRecognizer, createViewerOptionsStore, createViewerZoomStore, createWheelStepBuffer, cursorForTool, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableStyleFromMap, deleteTagFromCollections, demote, deriveSlideFieldContext, deriveViewportBreakpoints, describeFontEmbedding, describeSmartArtBounds, describeTableStyleEditor, detectOrientation, detectTouchDevice, discardAutosaveRecovery, distributeElements, downloadBlob, downloadDataUrl, editCommentInList, elementActionToPptxAction, elementBulletKind, elementIdSelector, elementLockTogglePatch, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, ensureChartInteractionStyles, erasePresentationInkAt, evenColumnWidths, evenRowHeights, exportDeckJson, extraQuickAccessCommands, fetchGoogleWebfontOutlineBytes, filterCommands, filterHiddenSlideIndices, filterInteractableIds, filterRenderedElements, findChartPartTarget, findConnectorSiteNear, findEraserHitElementId, findInSlides, findSelectedThemeSwatch, findSmartArtNodeText, finishPrintWindow, firstShowSlideIndex, flattenNodes, flattenTagCollections, forgetSessionDeck, formatAxisValue, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateNoteLineCount, generateTicks, getActiveXControlOverlayView, getAnimationColorBaseStyle, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getBarFacePicturePixelSampleVersion, getBevelLightingSvgFilter, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getChartUserShapeGroupTransform, getChartUserShapeRowChartBox, getCompoundLineOffsets, getCompoundLineWidths, getComputedEffectStyle, getComputedFillStyle, getComputedStrokeStyle, getConnectorEndpointHandles, getContentPartReplayStyles, getCropShapeClipPath, getCurrentParagraphIndex, getDenseGridLayoutPlan, getDensePanelTouchTargetPx, getDraggedShapeAdjustments, getDuotoneCachedResult, getEffectSoundAsset, getEffectSoundState, getEffectStyleSource, getElementLabel, getElementTransform, getElementTransformWithoutRotation, getFragmentedTransitionDescriptor, getGroupChildParentFill, getImageColorWashStyle, getImageEffectsFilter, getImageEffectsOpacity, getImageFitStyle, getImageSvgFilters, getImageTilingStyle, getInkReplayStyles, getInlineEditorSelection, getLocalStorageUsageSummary, getNonVisualDescriptionFields, getNotesPrintableArea, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDocumentParagraphs, getOleNestedDeckDetail, getOleObjectTypeLabel, getOleSheetGrid, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPresetShapeVectorGeometry, getPrintableArea, 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, insertCommentMention, insertTableElementColumn, insertTableElementRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isCalloutShape, isCellInRect, isCurrentLayout, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementLocked, isElementRendered, isExportAbortError, isHeaderFooterDateTextVisible, isHeaderFooterFooterTextVisible, isHeaderFooterHeaderTextVisible, isHollowShapeElement, isImageLikeElement, isImageTiled, isInkElement, isKeyboardOpen, isLegacyBinaryPresentation, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isSeriesUsingSecondaryAxis, isStrokeOnlyPresetElement, isSupportedPresentationFile, isTemplateElementId3 as isTemplateElementId, isUrlSafe, isWedgeCalloutPresetShape, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, listChartUserShapeRows, loadAudienceContent, loadSessionDeck, lockResizeAspect, makeCloneId, makeSlideId, mapEditingWheel, mapEditorKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mapSlideShowStartKey, mapSlideSorterKey, masterViewBackgroundColor, masterViewCrudActions, masterViewCrudFailureKey, masterViewElements, masterViewPseudoSlide, matchCommentMentionAuthors, mayLeaveSlideShow, measureSvgViewportRect, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, mediaTrimEndMsFromSeconds, mediaTrimEndSeconds, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, modelDataToBlobUrl, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountAreaChart3D, mountBarChart3D, mountLineChart3D, mountModel3D, mountPieChart3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, mruColorsPatch, nestedTextDecorationStyle, newTableElement, nextPresentedSlide, nextShowSlideIndex, normalizeColorsForCapture, normalizeHexColor2 as normalizeHexColor, normalizeStrokeDashType, normalizeTableStyleGuid, notesSegmentsToSpans, observeYDocSlides, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPendingPrintWindow, openPptxFile, openReadingView, openUrlInNewTab, paintedStrokeWidth, paragraphsToSegments, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, parseSegmentsFromRichEditor, partitionTemplateElements, patchChartData, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, placeTileOnPage, placeholderPromptDescriptor, playFeedbackSound, playGroup, playSlideTransitionPreview, polygonsToSvgPath, pptxActionToElementAction, prepareElementForInsertion, preprocessCssForCapture, presentationBaseName, presentationEntrySlideIndex, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, probeAutosaveRecovery, projectDrawingShapes, promote, publishLiveGeometry, publishLiveInlineText, pushRecentColor, quickStyleSwatchCss, radarStylePatch, rasterResultToPngBlob, rasterizeElement, rasterizeElementTiledToCanvas, rasterizeElementTiles, reResolveElementColors, reResolveSlideColors, readBackstageRecentFile, readEditableText, readOnlyRecommendation, readRibbonTransitionDraft, readSlideShowOption, readSlidesFromYDoc, readSoundFileAsDataUrl, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, redistributeColumnWidth, registerCollaborationTeardown, registerCrossSlideAudio, registerCustomFont, remapTextToSegments, rememberSessionDeck, removeChartCategory, removeChartSeries, removeCommentFromList, removeEmptyNode, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorder2 as reorder, reorderAnimationTimelineRows, replaceMasterViewElements, replaceOleFile, replyToCommentInList, rerouteConnectorsForMovedElements, resetPresenterTimer, resetSlideLayoutPath, resolve3DRenderingFlags, resolveActionType, resolveAudienceScreenPlacement, resolveAuthoredCustomShowId, resolveAuthoredSlideRange, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveAutosaveActivation, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, resolveChartKind, resolveConnectorEndpointUpdate, resolveDefaultFontFamily, resolveDefaultPrintSettings, resolveDisplayedChartType, resolveElementActionAffordance, resolveElementAriaAttributes, resolveElementHighlightClick, resolveElementInteractivity, resolveExpiredAutosaveSnapshots, resolveExportCaptureDecision, resolveFontKerning, resolveGoogleWebfontHref, resolveGroupChildFill, resolveHistoryDepth, resolveImageResolutionScale, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, resolveMediaElementSource, resolveMediaTimeNodeElementIds, resolveMetricTrackingPx, resolveNotesSchematicBodyFontSizePx, resolveNotesSegments, resolveOleType, resolveOleVerbTarget, resolveOptionRootClasses, resolvePalette, resolvePresentationAction, resolveProfileInitial, resolveRevealedChartData, resolveRevealedDrawingShapeNodeIds, resolveRevealedDrawingShapes, resolveRevealedSmartArtNodes, resolveScreenTip, resolveScriptFontSet, resolveSelectionPaneRename, resolveShapeGeometry, resolveShowSlideIndexes, resolveSlideSizeSelection, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTemplateBackgroundRows, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransitionSoundAction, resolveTransportForServerUrl, resolveViewerAddinRows, resolveViewportFitOptions, restoreFilteredSeries, restoreSegmentSelection, restoreSessionDeck, ribbonTransitionUpdates, rulerDragToGuidePosition, runPresentationAction, runProgramNoticeStackStyle, safeOpenUrl, sanitizeColor, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveDeckWithPassword, saveViewerProfile, savedPresentationFileName, scaleSlidesForSizeChange, scanAvailableFontFamilies, scheduleAutoAdvanceChain, scheduleMediaTrimAndFade, schemaLabel, scopeLayoutOptionsToSlide, seedRecentColors, segmentFrameCount, segmentsToEditorHtml, segmentsToParagraphs, segmentsToPlainText, selectGoogleWebfontFamilies, selectedParagraphBulletKind, sendBackward, sendToBack, seriesSecondaryAxisPatch, setAfterAnimation, setAfterAnimationColor, setCachedResult, setCellText, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDataLabelsRangeCache, setDuotoneCachedResult, setEffectSound, setEffectStockSound, setMasterViewBackgroundColor, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shapeFillChange, shapeOutlineChange, shouldAutoFollowBroadcaster, shouldClearAutosaveCacheOnClose, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldDiscardAutosaveOnSuccessfulSave, shouldLoopContinuously, shouldProbeAutosaveRecovery, shouldRoomSlidesReplaceLoad, shouldShowAccessibilitySection, shouldShowAutosaveRecoveryPrompt, shouldShowElementHandles, shouldStickyActionRow, shouldUseSvgWarp, shouldWriteAutosaveSnapshot, siblingCount, siblingIndex, slideProgressPercent, slideShowOptionChange, slideSizeFromPreset, slideSizeToCanvasPx, slideStatusLabel, snapBoxToGrid, splitCell, splitRunByScriptFont, splitRunForMetrics, splitWordsForUnderline, stepPresenterZoom, stopAllPersistentAudio, storeAudienceContent, stripUnderlineDecoration, strokeOutlineViewBox, strokeWidthOf, styleShadowFilter, subscribeBarFacePicturePixelSamples, substituteFieldText, surfaceWireframePatch, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, tableCellCss, tableContainerCss, tableStyleAssignmentUpdate, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, textFontSizePtToPx, textFontSizePxToPt, themeColorLabel, themeColorSchemesEqual, themeColorSwatchRows, themeSwatchCommit, themeToCssVars, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, toggleBlackboard, toggleCommentResolvedInList, togglePresenterTimer, toggleSheet, toggleStageElementMedia, toggleText3dExtrusion, transformTextCase, transitionSoundOptions, transitionSoundSelectedValue, transitionStockSoundId, trimmedMediaDurationMs, ungroupElements, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateElement, updateMasterViewElement, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, updateTextSegmentStyle, validateMediaTrimRange, validateRoomId, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewPropertiesPatchFromPreferences, viewerOptionsToPreferences, viewerPreferencesFromViewProperties, visibleTemplateElements, warpPreviewPath, withChartPointValue, withChartTitle, withChartUserShapeAdded, withChartUserShapeGroupChildAdded, withChartUserShapeRowChartBoxUpdated, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRemoved, withChartUserShapeRowRotationUpdated, withChartUserShapeRowTextUpdated, withChartUserShapeRowUpdated, withConnectorEndpointUpdate, withFrameSlides, withSlideSizeOrientation, withSlidesPerPage, writeStoredViewerPrefs, xmlText };
204993
+ export { ACTION_BUTTON_PRESETS, ACTION_INDICATOR_CLASS, ACTION_INDICATOR_ICON_PATH, ARTISTIC_EFFECTS, AVATAR_COLOR_SWATCHES, BACKSTAGE_NAV, BACKSTAGE_TEMPLATES, BAR3D_SHAPE_OPTIONS, BEVEL_PRESETS, BROADCAST_THROTTLE_MS, CATEGORIES, CHARACTER_SPACING_OPTIONS, CHART_TYPE_OPTIONS, COLOR_MAP_ALIAS_KEYS, COMMENT_MARKER_SIZE, COMMENT_MENTION_ATTRIBUTE, COMMENT_MENTION_CLASS, COMMON_FONTS, COMMON_FONT_SIZES, COMPOUND_LINE_OPTIONS, CONNECTION_TIMEOUT_MS, CONNECTOR_SITE_SNAP_PX, CUSTOM_FONT_ACCEPT, DEBOUNCE_MS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_COLOR_CHANGE_TOLERANCE, DEFAULT_COLOR_MAP, DEFAULT_FONT_FAMILY2 as DEFAULT_FONT_FAMILY, DEFAULT_INSERT_CHART_KIND, DEFAULT_MOTION_PATH_PRESET_ID, DEFAULT_PALETTE2, DEFAULT_QUICK_ACCESS_COMMAND_IDS, DEFAULT_ROW_HEIGHT, DEFAULT_VIEWER_OPTIONS, DEFAULT_VIEWER_PREFERENCES, DEFAULT_VIEWER_PROFILE, DEFAULT_VIRTUAL_OVERSCAN, DIRECTIONAL_PRESETS, DUOTONE_PRESETS, EFFECT_SOUND_CATALOGUE, ELEMENT_ACTION_TYPE_OPTIONS, EMPHASIS_PRESET_VALUES, ENTRANCE_PRESET_VALUES, EQUATION_TEMPLATES, EXIT_PRESET_VALUES, EXPANDED_MAX_HEIGHT, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, EncryptedFileError, FILL_MODE_OPTIONS, FILL_PATTERN_LABEL_KEYS, GIF_POST_CAPTURE_MAX_SIDE, GRADIENT_TYPE_OPTIONS, GlyphOutlineFontCache, HANDOUT_OPTIONS, HIDDEN_SLIDE_LABEL_KEY, HIDDEN_SLIDE_SLASH_GRADIENT, HIGHLIGHTER_COLORS, INDENT_PX, INK_REPLAY_KEYFRAMES, INSERT_CHART_TYPES, 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, MIN_TOUCH_TARGET_PX, MIN_ZOOM_SCALE, MOBILE_BREAKPOINT, MORPH_CROSSFADE_GROUP_STYLE, MORPH_CROSSFADE_HALF_STYLE, MOTION_PATH_FAMILIES, NOTES_FONT_SIZE_DEFAULT, NOTES_FONT_SIZE_MAX, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_STEP, NUM, OFFICE_COLOR_SWATCHES, OUTLINE_LEVEL_ATTR, OUTLINE_ROW_ATTR, OUTLINE_SLIDE_ATTR, OUTLINE_VIEW_ATTR, 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, READING_VIEW_ATTR, READING_VIEW_COUNTER_ATTR, READING_VIEW_STAGE_ATTR, RIBBON_SHAPE_SWATCHES, RIBBON_TRANSITION_PRESETS, RULER_FONT_SIZE, RULER_THICKNESS, SECTION_HEADING, SEL, SHAPE_PRESET_DEFS, SHAPE_QUICK_STYLES, SHORTCUT_REFERENCE_ITEMS, SLIDE_SHOW_OPTIONS, SLIDE_SIZE_PRESETS, SLIDE_TEMPLATES, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_OPTIONS, SLIDE_VIRTUALIZATION_THRESHOLD, SMARTART_COLOR_SCHEME_LABEL_KEYS, SMARTART_PREVIEW_ELEMENT_HEIGHT, SMARTART_PREVIEW_ELEMENT_WIDTH, SMARTART_STYLE_LABEL_KEYS, SORTER_MAX_ZOOM, SORTER_MIN_ZOOM, SORTER_ZOOM_STEP, STATUS_BAR_CLASSES, STROKE_DASH_OPTIONS2 as STROKE_DASH_OPTIONS, SURFACE_WIREFRAME_OPTIONS, SWITCHABLE_LAYOUT_TYPES, SvgExporter, TABLET_BREAKPOINT, TABLE_STYLE_BORDER_SIDES, TABLE_STYLE_BORDER_SIDE_LABEL_KEYS, TABLE_STYLE_DASH_PRESETS, TABLE_STYLE_EDITOR_PARTS, TABLE_STYLE_PRESETS, TAB_ROW_ACTION_CLASSES, TEXT_BUILD_ID_SEP, TEXT_DECORATION_FLAGS, TEXT_WARP_PRESETS, THEME_CATALOG, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_SLOT_LABEL_KEYS, THEME_PRESETS, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, TOOLBAR_TABS, TRANSITION_DIR_ARROWS, TRANSITION_MORPH_OPTIONS, TRANSITION_ORIENTATION_TYPES, TRANSITION_SOUND_NONE_VALUE, TRANSITION_SOUND_OTHER_VALUE, TRANSITION_SPEED_OPTIONS, TRANSITION_VALID_DIRECTIONS, ThemePresets, VIEWER_OPTIONS_TABS, VIEWER_PREFS_STORAGE_KEY, VIEWER_SHORTCUT_REFERENCE, WEBM_MIME_CANDIDATES, acceptAutosaveRecovery, acceptsPresentationInput, actionAffordanceLabels, activateModalFocus, addChartCategory, addChartSeries, addCommentToList, addQuickAccessCommand, addSection, addSiblingAfter, addSmartArtNodeAsChild, addTableStyleToMap, addTagToCollections, advanceChartMarkDrag, advanceChartValueDrag, advanceMainSequence, alignElements, animationEffectLabel, annotationOverlayZIndex, appendPresentationInkPoint, appendTableElementColumn, appendTableElementRow, apply3dEffects, applyAcceptAllSlides, applyAcceptSlide, applyAnimationTimelineOrder, applyAutoCorrect, applyCaseTransformToSegments, applyChartPartHighlight, applyColorChange, applyDuotone, applyFindReplacements, applyFormatToElement, applyHighlightClickStyle, applyImagePathPatches, applyMasterViewCrudAction, applyMotionPathPreset, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, applyOleSheetCellEdit, applyOutlineEdit, applyPreferenceToOptions, applyReadingViewCommand, applyRehearsalTimings, applyReroutedConnectors, applyResize, applyTableStyleDelete, applyTableStyleFieldEdit, applyTableStyleMapChange, applyTableStylePreset, applyTextStyleUpdate, applyThemeOverrideToSlide, applyThemeToData, applyTransitionSoundFile, applyTransitionStockSound, attachPresentationVisibilityPause, authorConnectorBetweenSites, autosaveSnapshotMark, availableQuickAccessCommands, backstageCardsFor, bar3DShapePatch, beginChartMarkDrag, beginChartValueDrag, beginShapeAdjustment, bringForward, bringToFront, build3DExtrusionData, buildActiveSessionUsers, buildAnimationTimelineBars, buildAnimationTimelineRows, buildAreaChart3DDataForElement, buildBarActions, buildBarChart3DDataForElement, buildBroadcastViewerUrl, buildCacheKey, buildCalloutLeaderLineSvgPath, buildChartMarkDragGeometry, buildChartViewModel, buildChromeStyle, buildCollaborationShareUrl, buildCommentMarkers, buildContentPartStrokes, buildContextMenuEntries, buildCreateCollaborationConfig, buildCssGradientFromShapeStyle, buildDeckSaveOptions, buildDirectionGrid, buildDuotoneCacheKey, buildElementClipboardPayload, buildFieldSubstitutionContext, buildFontCatalog, buildFreeformShapeElement, buildGlyphEnvelope, buildHandoutsHtml, buildHollowHitOutline, buildInitialGuides, buildInkGroupStrokes, buildInlineTextCommitPatch, buildJoinCollaborationConfig, buildLayoutPreviewGeometry, buildLineChart3DDataForElement, buildLiveInkStrokeView, buildMorphAnimationRules, buildMorphTransitionPlan, buildMotionPathPreview, buildNotesHtml, buildNotesPdfBytes, buildNotesPrintHtml, buildOleContentUpdatePatch, buildOleEditDialogDescriptor, buildOleObjectNamePatch, buildOutline, buildOutlineHtml, buildParagraphs, buildPieChart3DDataForElement, buildPresentationAudienceUrl, buildPreviewAnimation, buildPreviewElements, buildPrintDocument, buildPrintHtmlDocument, buildRectPathGradient, buildRunProgramNotice, buildRunTabLines, buildSaveSlides, buildSlideTemplateContent, buildSlideTemplateSlide, buildSlidesHtml, buildSmartArt3DModel, buildSmartArtA11y, buildSmartArtPresetData, buildSmartArtPreviewElement, buildStrokeOutline, buildStrokePathD, buildSubpathFillOverlay, buildSubpathPaints, buildSummaryZoomView, buildSurfaceChart3DDataForElement, buildSvgGradientDef, buildTabContext, buildTableDataGrid, buildTextBlockStyle, buildTextBody3DSceneStyle, buildTextBodyLayoutStyle, buildTextBuildSpec, buildTextStyleOverrideCss, buildThemeColorGrid, buildThemeColorMap, buildThemeColorSwatchGrid, buildTiledSlidesPdfBytes, buildUserFontFaceStyles, calculateViewportFit, canAddTopLevelNode, canCommitActionType, canDrillDown, canGoNext, canGoPrevious, canGroupSelection, canInteractWithElement, canRemoveTopLevelNode, canSetStrokeWidth, canUngroupSelection, canUseClipboard, cancelBuildReveal, canvasToJpegData, cellRunStyle, cellStyleToCss, centeredSvgTextLines, chartGridlinesPatch, chartGridlinesState, chartPartToAttrs, chartPreserveAspectRatio, checkModifyPassword, clampCropValue, clampGifDimensions, clampNotesFontSize, clampOptionNumber, clampPercent2, clampSorterZoom, clampTransitionNumber, clampZoomScale, classifyExtraConnections, classifyMediaType, clearAllLocalViewerData, clearAudienceContent, clearLocalAwareness, clearMotionPath, clearPlaybackTimers, clearStoredViewerPrefs, clearTransitionSound, cloneElementForPaste, cloneHistorySnapshot, cloneSlide, cloneTemplateElementsBySlideId, collapseChartTitleRunsForEdit, collectCoherent3DOffNodeIds, collectConnectorSiteCandidates, collectImagePaths, collectMediaElements, collectReferencedFontFamilies, collectUsedFonts, colorWithOpacity, commentMentionQuery, commentTextSegments, comparePresentation, compatToastStackStyle, compatibilityWarningToasts, compileEquationTemplateMathMl, compileLatexEquation, computeAllNotesPages, computeAnchoredPopupPosition, computeChartLegendLayout, computeColorFilter, computeColumnBoundaries, computeDrawingViewBox, computeEntranceAnimationDelay, computeGridSpacingPx, computeHandoutLayout, computeInlineEditorRect, computeKeyboardInset, computeMarqueeHitIds, computeMergeCellDown, computeMergeCellRight, computeResizedColumnWidths, computeResizedRowHeight, computeScrollDelta, computeSelectionRect, computeSlideIndices, computeSmartArtElementLayout, computeSnapToShape, computeSplitCell, computeVirtualRange, connectorWrapperTransform, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, copyFormatFromElement, createActiveAnimationGroup, createBackstagePresentation, createBlankSlide, createCollaborationLivePatcher, createDefaultChartElement, createDefaultChartUserShape, createDefaultChartUserShapeGroupChild, createDepartureChannel, createGlyphOutlineLookup, createInitialPresentationSnapshot, createPlainNotesSegments, createPresenceProjector, createPresentationKeyBuffer, createPresentationLoadResources, createPresentationSessionId, createPresenterShowGuard, createPresenterTimer, createSyncGate, createTableStyleEntry, createTouchGestureRecognizer, createViewerOptionsStore, createViewerZoomStore, createWheelStepBuffer, cursorForTool, customGeometryPathsToSvgSubpaths, defaultCssVars, defaultRadius, defaultThemeColors, deleteAutosaveSnapshot, deleteSection, deleteTableStyleFromMap, deleteTagFromCollections, demote, deriveSlideFieldContext, deriveViewportBreakpoints, describeFontEmbedding, describeSmartArtBounds, describeTableStyleEditor, detectOrientation, detectTouchDevice, discardAutosaveRecovery, distributeElements, downloadBlob, downloadDataUrl, editCommentInList, elementActionToPptxAction, elementBulletKind, elementIdSelector, elementLockTogglePatch, encodeGif, endAudienceDisplay, ensureActionAffordanceStyles, ensureChartInteractionStyles, erasePresentationInkAt, evenColumnWidths, evenRowHeights, exportDeckJson, extraQuickAccessCommands, fetchGoogleWebfontOutlineBytes, filterCommands, filterHiddenSlideIndices, filterInteractableIds, filterRenderedElements, findChartPartTarget, findConnectorSiteNear, findEraserHitElementId, findInSlides, findSelectedThemeSwatch, findSmartArtNodeText, finishPrintWindow, firstShowSlideIndex, flattenNodes, flattenTagCollections, forgetSessionDeck, formatAxisValue, formatBackstageDate, formatBackstageSize, formatBytes, formatCommentTimestamp, formatElapsed, formatMobileElapsed, formatRelativeTime, formatSlideCounter, formatTime, formatVersionTimestamp, fpsToFrameIntervalMs, generateBroadcastRoomId, generateElementId, generateNoteLineCount, generateTicks, getActiveXControlOverlayView, getAnimationColorBaseStyle, getAnimationInitialStyle, getAriaLabel, getAriaRole, getAriaRoleDescription, getBarFacePicturePixelSampleVersion, getBevelLightingSvgFilter, getCachedResult, getCalloutLeaderLineGeometry, getCalloutViewBoxBounds, getCellDiagonalBorders, getChartStylePalette, getChartUserShapeGroupTransform, getChartUserShapeRowChartBox, 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, getImageFitStyle, getImageSvgFilters, getImageTilingStyle, getInkReplayStyles, getInlineEditorSelection, getLocalStorageUsageSummary, getNonVisualDescriptionFields, getNotesPrintableArea, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDocumentParagraphs, getOleNestedDeckDetail, getOleObjectTypeLabel, getOleSheetGrid, getOleTypeColor, getOleTypeLabel, getOverflowSegments, getPatternSvg, getPendingSelectionRestore, getPresetShapeClipPath, getPresetShapeVectorGeometry, getPrintableArea, 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, insertCommentMention, insertTableElementColumn, insertTableElementRow, isActionHidden, isBlackboardActive, isBrowserOpenableMime, isCalloutShape, isCellInRect, isCurrentLayout, isEditableMotionPath, isEditableTextElement, isEditorTextInputTarget, isElementActionable, isElementLocked, isElementRendered, isExportAbortError, isHeaderFooterDateTextVisible, isHeaderFooterFooterTextVisible, isHeaderFooterHeaderTextVisible, isHollowShapeElement, isImageLikeElement, isImageTiled, isInkElement, isKeyboardOpen, isLegacyBinaryPresentation, isLinkedTextBox, isMixedContentBlocked, isMobileViewport, isPpactionUrl, isPresentationAdvanceClick, isPresentationSessionMessage, isSeriesUsingSecondaryAxis, isStrokeOnlyPresetElement, isSupportedPresentationFile, isTemplateElementId3 as isTemplateElementId, isUrlSafe, isWedgeCalloutPresetShape, lastShowSlideIndex, listAutosaveSnapshots, listBackstageRecentFiles, listChartUserShapeRows, loadAudienceContent, loadSessionDeck, lockResizeAspect, makeCloneId, makeSlideId, mapEditingWheel, mapEditorKey, mapOutlineKey, mapPresentationKey, mapPresentationWheel, mapSlideShowStartKey, mapSlideSorterKey, masterViewBackgroundColor, masterViewCrudActions, masterViewCrudFailureKey, masterViewElements, masterViewPseudoSlide, matchCommentMentionAuthors, mayLeaveSlideShow, measureSvgViewportRect, mediaFallbackIcon, mediaFallbackLabelKey, mediaFallbackVisual, mediaPlaybackAttributes, mediaTransportVisible, mediaTrimEndAbsoluteMs, mediaTrimEndMsFromAbsoluteMs, mediaTrimEndMsFromSeconds, mediaTrimEndSeconds, mergeAdditiveSelection, mergeCells, mergePresentationSnapshot, mergeShapes, mergeSlideTransition, mobileElapsedSince, mobileSlideCounter, modelDataToBlobUrl, morphOptionToMode, motionPathEndPixel, motionPathFamilyLabelKey, motionPathFor, motionPathPresetIdForPath, motionPathPresetLabelKey, motionPathPresetsByFamily, motionPathToSvgD, mountAreaChart3D, mountBarChart3D, mountLineChart3D, mountModel3D, mountPieChart3D, mountSurfaceChart3D, movePresenterPointer, moveQuickAccessCommand, moveSectionDown, moveSectionUp, moveSlidesToSection, mruColorsPatch, nestedTextDecorationStyle, newTableElement, nextPresentedSlide, nextShowSlideIndex, nextToggleValue, normalizeColorsForCapture, normalizeHexColor2 as normalizeHexColor, normalizeStrokeDashType, normalizeTableStyleGuid, notesSegmentsToSpans, observeYDocSlides, ooxmlGradientAngleToCssDegrees, openNativeEyeDropper, openPendingPrintWindow, openPptxFile, openReadingView, openUrlInNewTab, paintedStrokeWidth, paragraphsToSegments, parseDrawingColor, parseDrawingColorOpacity, parsePanoseString, parsePpactionUrl, parseSegmentsFromRichEditor, partitionTemplateElements, patchChartData, pickSupportedMimeType, pieceLetterSpacing, placeAudienceWindow, placeCaretAtEnd, placeTileOnPage, placeholderPromptDescriptor, playFeedbackSound, playGroup, playSlideTransitionPreview, polygonsToSvgPath, pptxActionToElementAction, prepareElementForInsertion, preprocessCssForCapture, presentationBaseName, presentationEntrySlideIndex, presentationInkPath, presenterElapsed, presenterNextDisabled, presenterPaneAdvancesOnClick, presenterPrevDisabled, presenterTimerProgress, previousShowSlideIndex, printPropertiesFrameSlides, printPropertiesSlidesPerPage, probeAutosaveRecovery, projectDrawingShapes, promote, publishLiveGeometry, publishLiveInlineText, pushRecentColor, quickStyleSwatchCss, radarStylePatch, rasterResultToPngBlob, rasterizeElement, rasterizeElementTiledToCanvas, rasterizeElementTiles, reResolveElementColors, reResolveSlideColors, readBackstageRecentFile, readEditableText, readOnlyRecommendation, readRibbonTransitionDraft, readSlideShowOption, readSlidesFromYDoc, readSoundFileAsDataUrl, readStoredViewerPrefs, readViewportMetrics, readingViewFitScale, rebuildDrawingShapesIfCleared, reconcileSlidesInYDoc, recordProgressPercent, rectToCells, redistributeColumnWidth, registerCollaborationTeardown, registerCrossSlideAudio, registerCustomFont, remapTextToSegments, rememberSessionDeck, removeChartCategory, removeChartSeries, removeCommentFromList, removeEmptyNode, removeLastTableElementColumn, removeLastTableElementRow, removeQuickAccessCommand, removeSmartArtNode, removeTableElementColumn, removeTableElementRow, renameSection, reorder2 as reorder, reorderAnimationTimelineRows, replaceMasterViewElements, replaceOleFile, replyToCommentInList, rerouteConnectorsForMovedElements, resetPresenterTimer, resetSlideLayoutPath, resolve3DRenderingFlags, resolveActionType, resolveAudienceScreenPlacement, resolveAuthoredCustomShowId, resolveAuthoredSlideRange, resolveAutoAdvanceDelayMs, resolveAutoFitFontScale, resolveAutosaveActivation, resolveAutosaveIntervalMs, resolveAutosaveIntervalSeconds, resolveChartKind, resolveConnectorEndpointUpdate, resolveDefaultFontFamily, resolveDefaultPrintSettings, resolveDisplayedChartType, resolveElementActionAffordance, resolveElementAriaAttributes, resolveElementHighlightClick, resolveElementInteractivity, resolveExpiredAutosaveSnapshots, resolveExportCaptureDecision, resolveFontKerning, resolveGoogleWebfontHref, resolveGroupChildFill, resolveHistoryDepth, resolveImageResolutionScale, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, resolveMediaElementSource, resolveMediaTimeNodeElementIds, resolveMetricTrackingPx, resolveNotesSchematicBodyFontSizePx, resolveNotesSegments, resolveOleType, resolveOleVerbTarget, resolveOptionRootClasses, resolvePalette, resolvePresentationAction, resolveProfileInitial, resolveRevealedChartData, resolveRevealedDrawingShapeNodeIds, resolveRevealedDrawingShapes, resolveRevealedSmartArtNodes, resolveScreenTip, resolveScriptFontSet, resolveSelectionPaneRename, resolveShapeGeometry, resolveShowSlideIndexes, resolveSlideSizeSelection, resolveTableCellImageUrls, resolveTableStyleImageUrls, resolveTemplateBackgroundRows, resolveThemeCatalogEntry, resolveTitleBarStatusKey, resolveTransitionDurationMs, resolveTransitionSoundAction, resolveTransportForServerUrl, resolveViewerAddinRows, resolveViewportFitOptions, restoreFilteredSeries, restoreSegmentSelection, restoreSessionDeck, ribbonTransitionUpdates, rulerDragToGuidePosition, runPresentationAction, runProgramNoticeStackStyle, safeOpenUrl, sanitizeColor, sanitizeGradientStops, sanitizeMathMl, saveAutosaveSnapshot, saveDeckWithPassword, saveViewerProfile, savedPresentationFileName, scaleSlidesForSizeChange, scanAvailableFontFamilies, scheduleAutoAdvanceChain, scheduleMediaTrimAndFade, schemaLabel, scopeLayoutOptionsToSlide, seedRecentColors, segmentFrameCount, segmentsToEditorHtml, segmentsToParagraphs, segmentsToPlainText, selectGoogleWebfontFamilies, sendBackward, sendToBack, seriesSecondaryAxisPatch, setAfterAnimation, setAfterAnimationColor, setCachedResult, setCellText, setChartAxisGridlineStyle, setChartAxisLogScale, setChartAxisTitleStyle, setChartCategoryLabel, setChartCellValue, setChartDataPointExplosion, setChartDataPointFill, setChartDataPointLabel, setChartDataPointMarker, setChartSeriesChartType, setChartSeriesMarker, setDataLabelsRangeCache, setDuotoneCachedResult, setEffectSound, setEffectStockSound, setMasterViewBackgroundColor, setMotionPath, setMotionPathEnd, setPendingSelectionRestore, setSmartArtNodeStyle, setTableElementCellText, shapeFillChange, shapeOutlineChange, shouldAutoFollowBroadcaster, shouldClearAutosaveCacheOnClose, shouldCommitSmartArtNodeText, shouldConfirmExternalHyperlink, shouldDiscardAutosaveOnSuccessfulSave, shouldLoopContinuously, shouldProbeAutosaveRecovery, shouldRoomSlidesReplaceLoad, shouldShowAccessibilitySection, shouldShowAutosaveRecoveryPrompt, shouldShowElementHandles, shouldStickyActionRow, shouldUseSvgWarp, shouldWriteAutosaveSnapshot, siblingCount, siblingIndex, slideProgressPercent, slideShowOptionChange, slideSizeFromPreset, slideSizeToCanvasPx, slideStatusLabel, snapBoxToGrid, splitCell, splitRunByScriptFont, splitRunForMetrics, splitWordsForUnderline, stepPresenterZoom, stopAllPersistentAudio, storeAudienceContent, stripUnderlineDecoration, strokeOutlineViewBox, strokeWidthOf, styleShadowFilter, subscribeBarFacePicturePixelSamples, substituteFieldText, surfaceWireframePatch, svgGradientFillRef, svgLineCap, svgPathToPolygons, swapPresentationWindows, switchSmartArtLayout, tableCellCss, tableContainerCss, tableStyleAssignmentUpdate, templateSchemeFromTheme, text3dEmuToPt, text3dPtToEmu, textBuildSpanStyle, textFontSizePtToPx, textFontSizePxToPt, themeColorLabel, themeColorSchemesEqual, themeColorSwatchRows, themeSwatchCommit, themeToCssVars, toCssTextOrientation, toCssVerticalDirection, toCssWritingMode, toSlideIndex, toggleBlackboard, toggleCommentResolvedInList, togglePresenterTimer, toggleSelectionBullets, toggleSheet, toggleStageElementMedia, toggleText3dExtrusion, transformTextCase, transitionSoundOptions, transitionSoundSelectedValue, transitionStockSoundId, trimmedMediaDurationMs, ungroupElements, updateCellTextInRawXml, updateCellTextStyleInRawXml, updateElement, updateMasterViewElement, updateMergeAttrsInRawXml, updateSmartArtNodeText, updateTagInCollections, validateMediaTrimRange, validateRoomId, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, viewPropertiesPatchFromPreferences, viewerOptionsToPreferences, viewerPreferencesFromViewProperties, visibleTemplateElements, warpPreviewPath, withChartPointValue, withChartTitle, withChartUserShapeAdded, withChartUserShapeGroupChildAdded, withChartUserShapeRowChartBoxUpdated, withChartUserShapeRowFlipUpdated, withChartUserShapeRowRemoved, withChartUserShapeRowRotationUpdated, withChartUserShapeRowTextUpdated, withChartUserShapeRowUpdated, withConnectorEndpointUpdate, withFrameSlides, withSlideSizeOrientation, withSlidesPerPage, writeStoredViewerPrefs, xmlText };