pptx-react-viewer 3.16.7 → 3.17.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 (155) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +25 -3
  3. package/dist/{AiChatPanel-GLDW5OK4.mjs → AiChatPanel-4LKH44IE.mjs} +3 -3
  4. package/dist/AiChatPanel-4LKH44IE.mjs.br +0 -0
  5. package/dist/AiChatPanel-4LKH44IE.mjs.gz +0 -0
  6. package/dist/{AiChatPanel-N25STHYW.js → AiChatPanel-VWVGQ5DD.js} +24 -24
  7. package/dist/AiChatPanel-VWVGQ5DD.js.br +0 -0
  8. package/dist/AiChatPanel-VWVGQ5DD.js.gz +0 -0
  9. package/dist/{Area3DChartScene-5POI5LF7.js → Area3DChartScene-D7GSJGPQ.js} +2 -2
  10. package/dist/Area3DChartScene-D7GSJGPQ.js.br +0 -0
  11. package/dist/Area3DChartScene-D7GSJGPQ.js.gz +0 -0
  12. package/dist/{Area3DChartScene-FCHO4SK6.mjs → Area3DChartScene-X5SM67PZ.mjs} +1 -1
  13. package/dist/Area3DChartScene-X5SM67PZ.mjs.br +0 -0
  14. package/dist/Area3DChartScene-X5SM67PZ.mjs.gz +0 -0
  15. package/dist/{Bar3DChartScene-M3LLHXAL.mjs → Bar3DChartScene-HWIFFGI3.mjs} +1 -1
  16. package/dist/Bar3DChartScene-HWIFFGI3.mjs.br +0 -0
  17. package/dist/Bar3DChartScene-HWIFFGI3.mjs.gz +0 -0
  18. package/dist/{Bar3DChartScene-5CY5GRV5.js → Bar3DChartScene-M72WQW5Y.js} +2 -2
  19. package/dist/Bar3DChartScene-M72WQW5Y.js.br +0 -0
  20. package/dist/Bar3DChartScene-M72WQW5Y.js.gz +0 -0
  21. package/dist/{Line3DChartScene-77TZRLJY.mjs → Line3DChartScene-7MPZWVF3.mjs} +1 -1
  22. package/dist/Line3DChartScene-7MPZWVF3.mjs.br +0 -0
  23. package/dist/Line3DChartScene-7MPZWVF3.mjs.gz +0 -0
  24. package/dist/{Line3DChartScene-3TP7OUIP.js → Line3DChartScene-YOZEEQZ3.js} +2 -2
  25. package/dist/Line3DChartScene-YOZEEQZ3.js.br +0 -0
  26. package/dist/Line3DChartScene-YOZEEQZ3.js.gz +0 -0
  27. package/dist/{Model3DScene-QINKUHM2.mjs → Model3DScene-57LVY5QW.mjs} +1 -1
  28. package/dist/Model3DScene-57LVY5QW.mjs.br +0 -0
  29. package/dist/Model3DScene-57LVY5QW.mjs.gz +0 -0
  30. package/dist/{Model3DScene-CBETCFMI.js → Model3DScene-5IJSNGDZ.js} +2 -2
  31. package/dist/Model3DScene-5IJSNGDZ.js.br +0 -0
  32. package/dist/Model3DScene-5IJSNGDZ.js.gz +0 -0
  33. package/dist/{PieChart3DScene-NFXFVG7R.js → PieChart3DScene-UBI6X66Q.js} +2 -2
  34. package/dist/PieChart3DScene-UBI6X66Q.js.br +0 -0
  35. package/dist/PieChart3DScene-UBI6X66Q.js.gz +0 -0
  36. package/dist/{PieChart3DScene-H2DJSHW7.mjs → PieChart3DScene-WD5B6NP3.mjs} +1 -1
  37. package/dist/PieChart3DScene-WD5B6NP3.mjs.br +0 -0
  38. package/dist/PieChart3DScene-WD5B6NP3.mjs.gz +0 -0
  39. package/dist/{PowerPointViewer-Cl6jBPNw.d.ts → PowerPointViewer-Cde_wzd0.d.ts} +2 -2
  40. package/dist/{PowerPointViewer-Cl6jBPNw.d.ts.map → PowerPointViewer-Cde_wzd0.d.ts.map} +1 -1
  41. package/dist/{SurfaceChart3DScene-2IN5YKKE.js → SurfaceChart3DScene-JGNPYQ32.js} +2 -2
  42. package/dist/SurfaceChart3DScene-JGNPYQ32.js.br +0 -0
  43. package/dist/SurfaceChart3DScene-JGNPYQ32.js.gz +0 -0
  44. package/dist/{SurfaceChart3DScene-4AGI4O3L.mjs → SurfaceChart3DScene-JZGU6BBD.mjs} +1 -1
  45. package/dist/SurfaceChart3DScene-JZGU6BBD.mjs.br +0 -0
  46. package/dist/SurfaceChart3DScene-JZGU6BBD.mjs.gz +0 -0
  47. package/dist/{audience-content-store-CB2WVM1K.d.ts → audience-content-store-A8Km8rBo.d.ts} +2 -2
  48. package/dist/{audience-content-store-CB2WVM1K.d.ts.map → audience-content-store-A8Km8rBo.d.ts.map} +1 -1
  49. package/dist/{chunk-B3YVURJB.mjs → chunk-23PW4Y4R.mjs} +1 -1
  50. package/dist/chunk-23PW4Y4R.mjs.br +0 -0
  51. package/dist/chunk-23PW4Y4R.mjs.gz +0 -0
  52. package/dist/{chunk-4Q6VIX6M.js → chunk-3UGVURWU.js} +551 -498
  53. package/dist/chunk-3UGVURWU.js.br +0 -0
  54. package/dist/chunk-3UGVURWU.js.gz +0 -0
  55. package/dist/{chunk-3FVOKV4E.js → chunk-4SPZ5IZN.js} +1110 -470
  56. package/dist/chunk-4SPZ5IZN.js.br +0 -0
  57. package/dist/chunk-4SPZ5IZN.js.gz +0 -0
  58. package/dist/{chunk-SQNEE6AM.js → chunk-72LYFUGL.js} +1323 -1310
  59. package/dist/chunk-72LYFUGL.js.br +0 -0
  60. package/dist/chunk-72LYFUGL.js.gz +0 -0
  61. package/dist/{chunk-7ELFYC6K.mjs → chunk-7YJBRPCT.mjs} +9 -5
  62. package/dist/chunk-7YJBRPCT.mjs.br +0 -0
  63. package/dist/chunk-7YJBRPCT.mjs.gz +0 -0
  64. package/dist/{chunk-3PUFHKXW.mjs → chunk-7YOA4HNP.mjs} +102 -49
  65. package/dist/chunk-7YOA4HNP.mjs.br +0 -0
  66. package/dist/chunk-7YOA4HNP.mjs.gz +0 -0
  67. package/dist/{chunk-I5YSAIL5.mjs → chunk-EDMJYVCS.mjs} +44 -31
  68. package/dist/chunk-EDMJYVCS.mjs.br +0 -0
  69. package/dist/chunk-EDMJYVCS.mjs.gz +0 -0
  70. package/dist/{chunk-TYVSLRC7.js → chunk-KVXB22D3.js} +13 -9
  71. package/dist/chunk-KVXB22D3.js.br +0 -0
  72. package/dist/{chunk-TYVSLRC7.js.gz → chunk-KVXB22D3.js.gz} +0 -0
  73. package/dist/{chunk-4NSDMKFE.js → chunk-NJ3WCYYG.js} +169 -169
  74. package/dist/chunk-NJ3WCYYG.js.br +0 -0
  75. package/dist/chunk-NJ3WCYYG.js.gz +0 -0
  76. package/dist/{chunk-XMD6ZWUO.mjs → chunk-QTGCOL5H.mjs} +1104 -471
  77. package/dist/chunk-QTGCOL5H.mjs.br +0 -0
  78. package/dist/chunk-QTGCOL5H.mjs.gz +0 -0
  79. package/dist/index.d.ts +33 -3
  80. package/dist/index.js +45 -45
  81. package/dist/index.js.br +0 -0
  82. package/dist/index.js.gz +0 -0
  83. package/dist/index.mjs +5 -5
  84. package/dist/index.mjs.br +0 -0
  85. package/dist/index.mjs.gz +0 -0
  86. package/dist/internals.d.ts +38 -3
  87. package/dist/internals.d.ts.map +1 -1
  88. package/dist/internals.js +78 -78
  89. package/dist/internals.js.br +0 -0
  90. package/dist/internals.js.gz +0 -0
  91. package/dist/internals.mjs +3 -3
  92. package/dist/internals.mjs.br +0 -0
  93. package/dist/internals.mjs.gz +0 -0
  94. package/dist/pptx-viewer.css +1 -1
  95. package/dist/pptx-viewer.css.br +0 -0
  96. package/dist/pptx-viewer.css.gz +0 -0
  97. package/dist/{types-Bzdkiakq.d.ts → types-BqB2ZCwS.d.ts} +3 -3
  98. package/dist/{types-Bzdkiakq.d.ts.map → types-BqB2ZCwS.d.ts.map} +1 -1
  99. package/dist/{useViewerBuildingBlocks-FbK-4ORi.d.ts → useViewerBuildingBlocks-DkUGmlkP.d.ts} +4 -4
  100. package/dist/{useViewerBuildingBlocks-FbK-4ORi.d.ts.map → useViewerBuildingBlocks-DkUGmlkP.d.ts.map} +1 -1
  101. package/dist/viewer/index.d.ts +31 -1
  102. package/dist/viewer/index.js +26 -26
  103. package/dist/viewer/index.js.br +0 -0
  104. package/dist/viewer/index.js.gz +0 -0
  105. package/dist/viewer/index.mjs +5 -5
  106. package/dist/viewer/index.mjs.br +0 -0
  107. package/dist/viewer/index.mjs.gz +0 -0
  108. package/package.json +1 -1
  109. package/dist/AiChatPanel-GLDW5OK4.mjs.br +0 -0
  110. package/dist/AiChatPanel-GLDW5OK4.mjs.gz +0 -0
  111. package/dist/AiChatPanel-N25STHYW.js.br +0 -0
  112. package/dist/AiChatPanel-N25STHYW.js.gz +0 -0
  113. package/dist/Area3DChartScene-5POI5LF7.js.br +0 -0
  114. package/dist/Area3DChartScene-5POI5LF7.js.gz +0 -0
  115. package/dist/Area3DChartScene-FCHO4SK6.mjs.br +0 -0
  116. package/dist/Area3DChartScene-FCHO4SK6.mjs.gz +0 -0
  117. package/dist/Bar3DChartScene-5CY5GRV5.js.br +0 -0
  118. package/dist/Bar3DChartScene-5CY5GRV5.js.gz +0 -0
  119. package/dist/Bar3DChartScene-M3LLHXAL.mjs.br +0 -0
  120. package/dist/Bar3DChartScene-M3LLHXAL.mjs.gz +0 -0
  121. package/dist/Line3DChartScene-3TP7OUIP.js.br +0 -0
  122. package/dist/Line3DChartScene-3TP7OUIP.js.gz +0 -0
  123. package/dist/Line3DChartScene-77TZRLJY.mjs.br +0 -0
  124. package/dist/Line3DChartScene-77TZRLJY.mjs.gz +0 -0
  125. package/dist/Model3DScene-CBETCFMI.js.br +0 -0
  126. package/dist/Model3DScene-CBETCFMI.js.gz +0 -0
  127. package/dist/Model3DScene-QINKUHM2.mjs.br +0 -0
  128. package/dist/Model3DScene-QINKUHM2.mjs.gz +0 -0
  129. package/dist/PieChart3DScene-H2DJSHW7.mjs.br +0 -0
  130. package/dist/PieChart3DScene-H2DJSHW7.mjs.gz +0 -0
  131. package/dist/PieChart3DScene-NFXFVG7R.js.br +0 -0
  132. package/dist/PieChart3DScene-NFXFVG7R.js.gz +0 -0
  133. package/dist/SurfaceChart3DScene-2IN5YKKE.js.br +0 -0
  134. package/dist/SurfaceChart3DScene-2IN5YKKE.js.gz +0 -0
  135. package/dist/SurfaceChart3DScene-4AGI4O3L.mjs.br +0 -0
  136. package/dist/SurfaceChart3DScene-4AGI4O3L.mjs.gz +0 -0
  137. package/dist/chunk-3FVOKV4E.js.br +0 -0
  138. package/dist/chunk-3FVOKV4E.js.gz +0 -0
  139. package/dist/chunk-3PUFHKXW.mjs.br +0 -0
  140. package/dist/chunk-3PUFHKXW.mjs.gz +0 -0
  141. package/dist/chunk-4NSDMKFE.js.br +0 -0
  142. package/dist/chunk-4NSDMKFE.js.gz +0 -0
  143. package/dist/chunk-4Q6VIX6M.js.br +0 -0
  144. package/dist/chunk-4Q6VIX6M.js.gz +0 -0
  145. package/dist/chunk-7ELFYC6K.mjs.br +0 -0
  146. package/dist/chunk-7ELFYC6K.mjs.gz +0 -0
  147. package/dist/chunk-B3YVURJB.mjs.br +0 -0
  148. package/dist/chunk-B3YVURJB.mjs.gz +0 -0
  149. package/dist/chunk-I5YSAIL5.mjs.br +0 -0
  150. package/dist/chunk-I5YSAIL5.mjs.gz +0 -0
  151. package/dist/chunk-SQNEE6AM.js.br +0 -0
  152. package/dist/chunk-SQNEE6AM.js.gz +0 -0
  153. package/dist/chunk-TYVSLRC7.js.br +0 -0
  154. package/dist/chunk-XMD6ZWUO.mjs.br +0 -0
  155. package/dist/chunk-XMD6ZWUO.mjs.gz +0 -0
@@ -7049,6 +7049,7 @@ var init_collaboration_field_schema = __esm({
7049
7049
  hidden: "scalar",
7050
7050
  opacity: "scalar",
7051
7051
  rawXml: "complex",
7052
+ inheritedTransform: "complex",
7052
7053
  actionClick: "complex",
7053
7054
  actionHover: "complex",
7054
7055
  locks: "complex",
@@ -37104,9 +37105,9 @@ function compoundChildIds(role, node, childrenOf) {
37104
37105
  const children13 = childrenOf.get(node.id) ?? [];
37105
37106
  const start = role.presentationOf?.start?.[chIndex] ?? 1;
37106
37107
  const count = role.presentationOf?.count?.[chIndex];
37107
- const positions = positionRange(start, count, 1, children13.length);
37108
+ const positions2 = positionRange(start, count, 1, children13.length);
37108
37109
  const ids = [];
37109
- for (const position2 of positions) {
37110
+ for (const position2 of positions2) {
37110
37111
  const child262 = children13[position2 - 1];
37111
37112
  if (!child262 || child262.text.trim().length === 0) {
37112
37113
  continue;
@@ -48827,7 +48828,7 @@ function parseValueColors(node, colorParser) {
48827
48828
  return colors.length > 0 ? colors : void 0;
48828
48829
  }
48829
48830
  function parseValueColorPositions(node, xmlLookup) {
48830
- const positions = [];
48831
+ const positions2 = [];
48831
48832
  for (const posNode of xmlLookup.getChildrenArrayByLocalName(node, "pos")) {
48832
48833
  const kind = POSITION_KIND_MAP[String(posNode["@_type"] ?? "").trim()];
48833
48834
  if (!kind) {
@@ -48841,9 +48842,9 @@ function parseValueColorPositions(node, xmlLookup) {
48841
48842
  entry2.value = num;
48842
48843
  }
48843
48844
  }
48844
- positions.push(entry2);
48845
+ positions2.push(entry2);
48845
48846
  }
48846
- return positions.length > 0 ? positions : void 0;
48847
+ return positions2.length > 0 ? positions2 : void 0;
48847
48848
  }
48848
48849
  function parseCxValueColors(series, xmlLookup, colorParser) {
48849
48850
  const valueColorsNode = xmlLookup.getChildByLocalName(series, "valueColors");
@@ -48859,9 +48860,9 @@ function parseCxValueColors(series, xmlLookup, colorParser) {
48859
48860
  }
48860
48861
  }
48861
48862
  if (valueColorPositionsNode) {
48862
- const positions = parseValueColorPositions(valueColorPositionsNode, xmlLookup);
48863
- if (positions) {
48864
- result.valueColorPositions = positions;
48863
+ const positions2 = parseValueColorPositions(valueColorPositionsNode, xmlLookup);
48864
+ if (positions2) {
48865
+ result.valueColorPositions = positions2;
48865
48866
  }
48866
48867
  }
48867
48868
  return Object.keys(result).length > 0 ? result : void 0;
@@ -63570,15 +63571,48 @@ var init_group_tight_rewrap = __esm({
63570
63571
  init_group_tight_rewrap_own_box();
63571
63572
  }
63572
63573
  });
63574
+ function materializeInheritedShapeTransform(shape, element) {
63575
+ const baseline = element.inheritedTransform;
63576
+ const envelope = element.type === "text" || element.type === "shape" ? "p:nvSpPr" : element.type === "picture" || element.type === "media" ? "p:nvPicPr" : void 0;
63577
+ if (!baseline || !envelope || !xmlChild(shape, envelope)) {
63578
+ return void 0;
63579
+ }
63580
+ if (["x", "y", "width", "height"].some(
63581
+ (key2) => !Number.isFinite(element[key2]) || !Number.isFinite(baseline[key2])
63582
+ ) || NUMERIC_KEYS.some(
63583
+ (key2) => !Number.isFinite(element[key2] ?? 0) || !Number.isFinite(baseline[key2] ?? 0)
63584
+ ) || element.width < 0 || element.height < 0 || baseline.width < 0 || baseline.height < 0) {
63585
+ return void 0;
63586
+ }
63587
+ const changed = NUMERIC_KEYS.some((key2) => (element[key2] ?? 0) !== (baseline[key2] ?? 0)) || Boolean(element.flipHorizontal) !== Boolean(baseline.flipHorizontal) || Boolean(element.flipVertical) !== Boolean(baseline.flipVertical);
63588
+ if (!changed) {
63589
+ return void 0;
63590
+ }
63591
+ const transform6 = {};
63592
+ const properties = { ...xmlChild(shape, "p:spPr") };
63593
+ delete properties["a:xfrm"];
63594
+ shape["p:spPr"] = { "a:xfrm": transform6, ...properties };
63595
+ return transform6;
63596
+ }
63597
+ var NUMERIC_KEYS;
63598
+ var init_inherited_shape_transform = __esm({
63599
+ "src/core/core/builders/inherited-shape-transform.ts"() {
63600
+ init_xml_access();
63601
+ NUMERIC_KEYS = ["x", "y", "width", "height", "rotation", "skewX", "skewY"];
63602
+ }
63603
+ });
63573
63604
  var PptxElementTransformUpdater;
63574
63605
  var init_PptxElementTransformUpdater = __esm({
63575
63606
  "src/core/core/builders/PptxElementTransformUpdater.ts"() {
63576
63607
  init_rotated_resize_anchor();
63577
63608
  init_xfrm_emu_resolution();
63609
+ init_xml_access();
63578
63610
  init_group_tight_rewrap();
63611
+ init_inherited_shape_transform();
63579
63612
  PptxElementTransformUpdater = class {
63580
63613
  applyTransform(shape, element, emuPerPx, enclosingGroupChildSpace) {
63581
- const transform6 = shape["p:spPr"]?.["a:xfrm"] || shape["p:xfrm"];
63614
+ const transform6 = shape["p:spPr"]?.["a:xfrm"] || shape["p:xfrm"] || // A group's child geometry uses a different frame from the load-time baseline.
63615
+ !enclosingGroupChildSpace && materializeInheritedShapeTransform(shape, element);
63582
63616
  if (!transform6) {
63583
63617
  return;
63584
63618
  }
@@ -63599,8 +63633,9 @@ var init_PptxElementTransformUpdater = __esm({
63599
63633
  } else {
63600
63634
  const naiveOffX = resolveXfrmEmu(element.x, element.xEmu, emuPerPx);
63601
63635
  const naiveOffY = resolveXfrmEmu(element.y, element.yEmu, emuPerPx);
63636
+ const rotationChanged = element.inheritedTransform !== void 0 && (element.inheritedTransform.rotation ?? 0) !== (element.rotation ?? 0);
63602
63637
  const rotatedResize = resolveRotatedResizeOffset({
63603
- rotationDeg: element.rotation,
63638
+ rotationDeg: rotationChanged ? void 0 : element.rotation,
63604
63639
  oldOffXEmu: element.xEmu,
63605
63640
  oldOffYEmu: element.yEmu,
63606
63641
  oldExtWidthEmu: element.widthEmu,
@@ -63626,14 +63661,20 @@ var init_PptxElementTransformUpdater = __esm({
63626
63661
  if (element.skewY !== void 0) {
63627
63662
  transform6["@_skewY"] = String(Math.round(element.skewY * 6e4));
63628
63663
  }
63664
+ const nonVisual = xmlChild(shape, "p:nvSpPr") ?? xmlChild(shape, "p:nvPicPr");
63665
+ const isPlaceholder = xmlHasChild(xmlChild(nonVisual, "p:nvPr"), "p:ph");
63629
63666
  if (element.flipHorizontal) {
63630
63667
  transform6["@_flipH"] = "1";
63631
- } else {
63668
+ } else if (element.inheritedTransform?.flipHorizontal || isPlaceholder && transform6["@_flipH"] !== void 0 && transform6["@_flipH"] !== "false") {
63669
+ transform6["@_flipH"] = "0";
63670
+ } else if (transform6["@_flipH"] !== "0" && transform6["@_flipH"] !== "false") {
63632
63671
  delete transform6["@_flipH"];
63633
63672
  }
63634
63673
  if (element.flipVertical) {
63635
63674
  transform6["@_flipV"] = "1";
63636
- } else {
63675
+ } else if (element.inheritedTransform?.flipVertical || isPlaceholder && transform6["@_flipV"] !== void 0 && transform6["@_flipV"] !== "false") {
63676
+ transform6["@_flipV"] = "0";
63677
+ } else if (transform6["@_flipV"] !== "0" && transform6["@_flipV"] !== "false") {
63637
63678
  delete transform6["@_flipV"];
63638
63679
  }
63639
63680
  }
@@ -74201,45 +74242,40 @@ var init_PptxEditorAnimationService = __esm({
74201
74242
  };
74202
74243
  }
74203
74244
  });
74204
- function flattenElements(elements2, out) {
74205
- for (const el of elements2) {
74206
- out.push(el);
74207
- if (el.type === "group" && Array.isArray(el.children)) {
74208
- flattenElements(el.children, out);
74209
- }
74210
- }
74211
- }
74212
- function maxShapeId(elements2) {
74213
- let max = 0;
74214
- for (const el of elements2) {
74215
- if (el.shapeId !== void 0) {
74216
- const n = Number.parseInt(el.shapeId, 10);
74217
- if (Number.isFinite(n) && n > max) {
74218
- max = n;
74245
+ function createShapeIdResolver(elements2, reservedMaxId = 0) {
74246
+ const byId = /* @__PURE__ */ new Map();
74247
+ let maxId = reservedMaxId;
74248
+ const visit = (element) => {
74249
+ byId.set(element.id, element);
74250
+ if (element.shapeId !== void 0) {
74251
+ const value = Number.parseInt(element.shapeId, 10);
74252
+ if (Number.isFinite(value)) {
74253
+ maxId = Math.max(maxId, value);
74219
74254
  }
74220
74255
  }
74221
- }
74222
- return max;
74223
- }
74224
- function remapEditorAnimationsToShapeIds(elements2, animations, reservedMaxId = 0) {
74225
- const flat = [];
74226
- flattenElements(elements2, flat);
74227
- const byId = /* @__PURE__ */ new Map();
74228
- for (const el of flat) {
74229
- byId.set(el.id, el);
74230
- }
74231
- let nextId2 = Math.max(maxShapeId(flat), reservedMaxId) + 1;
74232
- const resolve2 = (elementId) => {
74233
- const el = byId.get(elementId);
74234
- if (!el) {
74256
+ if (element.type === "group") {
74257
+ element.children.forEach(visit);
74258
+ }
74259
+ };
74260
+ elements2.forEach(visit);
74261
+ return (elementId) => {
74262
+ const element = byId.get(elementId);
74263
+ if (!element) {
74235
74264
  return void 0;
74236
74265
  }
74237
- if (el.shapeId === void 0) {
74238
- el.shapeId = String(nextId2);
74239
- nextId2 += 1;
74266
+ if (element.shapeId === void 0) {
74267
+ maxId += 1;
74268
+ element.shapeId = String(maxId);
74240
74269
  }
74241
- return el.shapeId;
74270
+ return element.shapeId;
74242
74271
  };
74272
+ }
74273
+ var init_shape_id_resolver = __esm({
74274
+ "src/core/services/shape-id-resolver.ts"() {
74275
+ }
74276
+ });
74277
+ function remapEditorAnimationsToShapeIds(elements2, animations, reservedMaxId = 0) {
74278
+ const resolve2 = createShapeIdResolver(elements2, reservedMaxId);
74243
74279
  return animations.map((anim) => {
74244
74280
  const resolvedElement = resolve2(anim.elementId);
74245
74281
  const resolvedTrigger = anim.triggerShapeId !== void 0 ? resolve2(anim.triggerShapeId) : void 0;
@@ -74255,6 +74291,67 @@ function remapEditorAnimationsToShapeIds(elements2, animations, reservedMaxId =
74255
74291
  }
74256
74292
  var init_animation_shape_id_assign = __esm({
74257
74293
  "src/core/services/animation-shape-id-assign.ts"() {
74294
+ init_shape_id_resolver();
74295
+ }
74296
+ });
74297
+ function resolveConnectorShapeIds(elements2, reservedMaxId) {
74298
+ const resolve2 = createShapeIdResolver(elements2, reservedMaxId);
74299
+ const result = /* @__PURE__ */ new Map();
74300
+ const visit = (element) => {
74301
+ const nativeId = resolve2(element.id);
74302
+ if (nativeId !== void 0) {
74303
+ result.set(element.id, nativeId);
74304
+ }
74305
+ if (element.type === "group") {
74306
+ element.children.forEach(visit);
74307
+ }
74308
+ };
74309
+ elements2.forEach(visit);
74310
+ return result;
74311
+ }
74312
+ function applyConnectorShapeIds(shape, element, nativeIds) {
74313
+ if (element.type !== "connector" || !element.shapeStyle) {
74314
+ return;
74315
+ }
74316
+ const nv = xmlChild(shape, "p:nvCxnSpPr");
74317
+ if (!nv) {
74318
+ return;
74319
+ }
74320
+ const connections = xmlChild(nv, "p:cNvCxnSpPr") ?? {};
74321
+ for (const [tag, reference] of [
74322
+ ["a:stCxn", element.shapeStyle.connectorStartConnection],
74323
+ ["a:endCxn", element.shapeStyle.connectorEndConnection]
74324
+ ]) {
74325
+ if (!reference?.shapeId) {
74326
+ continue;
74327
+ }
74328
+ const nativeId = nativeIds.get(reference.shapeId) ?? (/^\d+$/.test(reference.shapeId) ? reference.shapeId : void 0);
74329
+ if (nativeId === void 0) {
74330
+ if (!element.rawXml) {
74331
+ delete connections[tag];
74332
+ }
74333
+ continue;
74334
+ }
74335
+ connections[tag] = {
74336
+ ...xmlChild(connections, tag),
74337
+ "@_id": nativeId,
74338
+ "@_idx": String(reference.connectionSiteIndex ?? 0)
74339
+ };
74340
+ }
74341
+ if (Object.keys(connections).length > 0) {
74342
+ nv["p:cNvCxnSpPr"] = reorderObjectKeys(connections, [
74343
+ "a:cxnSpLocks",
74344
+ "a:stCxn",
74345
+ "a:endCxn",
74346
+ "a:extLst"
74347
+ ]);
74348
+ }
74349
+ }
74350
+ var init_connector_shape_id_assign = __esm({
74351
+ "src/core/services/connector-shape-id-assign.ts"() {
74352
+ init_xml_access();
74353
+ init_xml_reorder();
74354
+ init_shape_id_resolver();
74258
74355
  }
74259
74356
  });
74260
74357
  function createGroupContext() {
@@ -77593,6 +77690,7 @@ var init_services = __esm({
77593
77690
  init_PptxEditorAnimationService();
77594
77691
  init_animation_target_reconcile();
77595
77692
  init_animation_shape_id_assign();
77693
+ init_connector_shape_id_assign();
77596
77694
  init_animation_sound_merge();
77597
77695
  init_PptxNativeAnimationService();
77598
77696
  init_PptxSlideTransitionService();
@@ -83809,10 +83907,10 @@ function buildFbse(picture, foDelay, size) {
83809
83907
  function buildDgg(shapesPerDrawing, totalShapes) {
83810
83908
  const drawingCount = shapesPerDrawing.length;
83811
83909
  const lastDrawingShapeCount = shapesPerDrawing[drawingCount - 1] ?? 0;
83812
- const maxShapeId2 = drawingCount * SHAPE_ID_CLUSTER_SIZE + lastDrawingShapeCount;
83910
+ const maxShapeId = drawingCount * SHAPE_ID_CLUSTER_SIZE + lastDrawingShapeCount;
83813
83911
  const cidcl = drawingCount + 1;
83814
83912
  const cspSaved = totalShapes - drawingCount;
83815
- const w = new ByteWriter().u32(maxShapeId2).u32(cidcl).u32(cspSaved).u32(drawingCount);
83913
+ const w = new ByteWriter().u32(maxShapeId).u32(cidcl).u32(cspSaved).u32(drawingCount);
83816
83914
  shapesPerDrawing.forEach((count, i2) => {
83817
83915
  const drawingId = i2 + 1;
83818
83916
  w.u32(drawingId).u32(count);
@@ -91986,6 +92084,51 @@ var init_notes_paragraph_scoped_xml = __esm({
91986
92084
  DEFAULT_END_PARA_RPR = { "@_lang": "en-US" };
91987
92085
  }
91988
92086
  });
92087
+ function updateEndParagraphProperties(existing, style, serialize) {
92088
+ if (!style?.inheritedRunStyle) {
92089
+ return existing;
92090
+ }
92091
+ const baseline = serialize({ ...style, ...style.inheritedRunStyle, ...style.authoredRunStyle });
92092
+ const current = serialize(style);
92093
+ const attributes = {};
92094
+ const children13 = /* @__PURE__ */ new Map();
92095
+ for (const key2 of /* @__PURE__ */ new Set([...Object.keys(baseline), ...Object.keys(current)])) {
92096
+ if (JSON.stringify(baseline[key2]) === JSON.stringify(current[key2])) {
92097
+ continue;
92098
+ }
92099
+ if (key2.startsWith("@_")) {
92100
+ attributes[key2.slice(2)] = current[key2] === void 0 ? null : String(current[key2]);
92101
+ } else {
92102
+ children13.set(key2, current[key2] ?? null);
92103
+ }
92104
+ }
92105
+ if (Object.keys(attributes).length === 0 && children13.size === 0) {
92106
+ return existing;
92107
+ }
92108
+ const fillKeys = [
92109
+ "a:noFill",
92110
+ "a:solidFill",
92111
+ "a:gradFill",
92112
+ "a:blipFill",
92113
+ "a:pattFill",
92114
+ "a:grpFill"
92115
+ ];
92116
+ const changedFill = fillKeys.find((key2) => children13.get(key2));
92117
+ if (changedFill) {
92118
+ for (const key2 of fillKeys) {
92119
+ if (key2 !== changedFill) {
92120
+ children13.set(key2, null);
92121
+ }
92122
+ }
92123
+ }
92124
+ return mergeOrderedXml(existing, attributes, children13, DEF_RPR_CHILD_ORDER);
92125
+ }
92126
+ var init_paragraph_insertion_style = __esm({
92127
+ "src/core/core/runtime/paragraph-insertion-style.ts"() {
92128
+ init_ordered_xml_merge();
92129
+ init_placeholder_level_style_serializer();
92130
+ }
92131
+ });
91989
92132
  function stripMarker(run, marker) {
91990
92133
  const { [marker]: _drop, ...rest } = run;
91991
92134
  return rest;
@@ -96984,15 +97127,19 @@ var PptxHandlerRuntime13;
96984
97127
  var init_PptxHandlerRuntimeSaveParagraphs = __esm({
96985
97128
  "src/core/core/runtime/PptxHandlerRuntimeSaveParagraphs.ts"() {
96986
97129
  init_auto_number_format();
97130
+ init_paragraph_insertion_style();
96987
97131
  init_PptxHandlerRuntimeSaveParagraphHelpers();
96988
97132
  init_PptxHandlerRuntimeSaveRunProperties();
96989
97133
  init_run_scoped_text_style();
96990
97134
  PptxHandlerRuntime13 = class extends PptxHandlerRuntime12 {
96991
97135
  isRenderedBulletMarker(segment) {
96992
97136
  const bullet = segment.bulletInfo;
96993
- if (!bullet) {
97137
+ if (!bullet || bullet.none) {
96994
97138
  return false;
96995
97139
  }
97140
+ if (segment.text === "" && (bullet.imageRelId || bullet.imageDataUrl) && !segment.fieldType && !segment.equationXml && segment.rubyText === void 0) {
97141
+ return true;
97142
+ }
96996
97143
  if (bullet.autoNumType) {
96997
97144
  if (bullet.paragraphIndex === void 0) {
96998
97145
  return false;
@@ -97126,6 +97273,11 @@ var init_PptxHandlerRuntimeSaveParagraphs = __esm({
97126
97273
  if (segment.endParaRunProperties) {
97127
97274
  currentEndParaRunProperties = segment.endParaRunProperties;
97128
97275
  }
97276
+ currentEndParaRunProperties = updateEndParagraphProperties(
97277
+ currentEndParaRunProperties,
97278
+ segment.paragraphInsertionStyle,
97279
+ (style) => this.createRunPropertiesFromTextStyle(style, resolveHyperlinkRelationshipId)
97280
+ );
97129
97281
  if (segment.paragraphProperties) {
97130
97282
  currentParagraphProperties = segment.paragraphProperties;
97131
97283
  }
@@ -97156,7 +97308,10 @@ var init_PptxHandlerRuntimeSaveParagraphs = __esm({
97156
97308
  currentRuns.push(eqNode);
97157
97309
  return;
97158
97310
  }
97159
- const segmentText2 = String(segment.text ?? "");
97311
+ const segmentText2 = segment.isParagraphBreak ? "\n" : String(segment.text ?? "");
97312
+ if (segmentText2 === "" && segment.paragraphInsertionStyle && !segment.fieldType && segment.rubyText === void 0) {
97313
+ return;
97314
+ }
97160
97315
  const lineParts = segmentText2.split("\n");
97161
97316
  const isSplitProduct = lineParts.length > 1;
97162
97317
  lineParts.forEach((linePart, lineIndex) => {
@@ -97188,7 +97343,7 @@ var init_PptxHandlerRuntimeSaveParagraphs = __esm({
97188
97343
  }
97189
97344
  });
97190
97345
  });
97191
- if (currentRuns.length > 0 || paragraphs.length === 0) {
97346
+ if (currentRuns.length > 0 || paragraphs.length === 0 || capturedParagraphMeta) {
97192
97347
  pushParagraph();
97193
97348
  }
97194
97349
  return paragraphs;
@@ -97420,17 +97575,20 @@ function classifyGroupChildTag(elementType, xml) {
97420
97575
  function cloneXmlNode(node) {
97421
97576
  return JSON.parse(JSON.stringify(node));
97422
97577
  }
97423
- function buildGroupNonVisualXml(rawGroupXml, modelName, fallbackName) {
97578
+ function buildGroupNonVisualXml(rawGroupXml, modelName, fallbackName, modelShapeId) {
97424
97579
  const rawNv = rawGroupXml?.["p:nvGrpSpPr"];
97425
97580
  if (!rawNv) {
97426
97581
  return {
97427
- "p:cNvPr": { "@_id": "0", "@_name": modelName ?? fallbackName },
97582
+ "p:cNvPr": { "@_id": modelShapeId ?? "0", "@_name": modelName ?? fallbackName },
97428
97583
  "p:cNvGrpSpPr": {},
97429
97584
  "p:nvPr": {}
97430
97585
  };
97431
97586
  }
97432
97587
  const nv = cloneXmlNode(rawNv);
97433
97588
  const cNvPr = nv["p:cNvPr"] ?? {};
97589
+ if (modelShapeId !== void 0) {
97590
+ cNvPr["@_id"] = modelShapeId;
97591
+ }
97434
97592
  if (typeof cNvPr["@_id"] !== "string" || cNvPr["@_id"].length === 0) {
97435
97593
  cNvPr["@_id"] = "0";
97436
97594
  }
@@ -97969,7 +98127,10 @@ var init_PptxHandlerRuntimeSaveShapeXml = __esm({
97969
98127
  */
97970
98128
  buildGroupShapeXml(group2, ctx, ownEmuOverride) {
97971
98129
  if (group2.rawXml && group2.children.length === 0) {
97972
- return group2.rawXml;
98130
+ return {
98131
+ ...group2.rawXml,
98132
+ "p:nvGrpSpPr": buildGroupNonVisualXml(group2.rawXml, group2.name, group2.id, group2.shapeId)
98133
+ };
97973
98134
  }
97974
98135
  const EMU = _PptxHandlerRuntime.EMU_PER_PX;
97975
98136
  const rawGroupXml = group2.rawXml;
@@ -97977,7 +98138,7 @@ var init_PptxHandlerRuntimeSaveShapeXml = __esm({
97977
98138
  const xfrm = buildGroupTransformXml(group2, EMU, ownEmuOverride, rewrap);
97978
98139
  const childSpace = group2;
97979
98140
  const grpXml2 = {
97980
- "p:nvGrpSpPr": buildGroupNonVisualXml(rawGroupXml, group2.name, group2.id),
98141
+ "p:nvGrpSpPr": buildGroupNonVisualXml(rawGroupXml, group2.name, group2.id, group2.shapeId),
97981
98142
  "p:grpSpPr": buildGroupPropertiesXml(rawGroupXml, xfrm)
97982
98143
  };
97983
98144
  const rawExtLst = rawGroupXml?.["p:extLst"];
@@ -106812,6 +106973,7 @@ var init_template_group_node = __esm({
106812
106973
  var PptxHandlerRuntime41;
106813
106974
  var init_PptxHandlerRuntimeSaveElementWriter = __esm({
106814
106975
  "src/core/core/runtime/PptxHandlerRuntimeSaveElementWriter.ts"() {
106976
+ init_services();
106815
106977
  init_types();
106816
106978
  init_chart_color_style_writer();
106817
106979
  init_chart_cx_generator();
@@ -107344,6 +107506,9 @@ var init_PptxHandlerRuntimeSaveElementWriter = __esm({
107344
107506
  );
107345
107507
  }
107346
107508
  this.applyDataSerialization(shape, el, ctx.slide.id);
107509
+ if (ctx.connectorShapeIds) {
107510
+ applyConnectorShapeIds(shape, el, ctx.connectorShapeIds);
107511
+ }
107347
107512
  this.serializeElementActions(shape, el, ctx.resolveHyperlinkRelationshipId);
107348
107513
  this.serializeShapeLocks(shape, el);
107349
107514
  this.applyHiddenToCnvPr(shape, el);
@@ -108282,6 +108447,7 @@ var init_PptxHandlerRuntimeSaveSlideWriter = __esm({
108282
108447
  zooms: []
108283
108448
  };
108284
108449
  const ctx = {
108450
+ connectorShapeIds: resolveConnectorShapeIds(slide.elements, this.maxCnvPrId(spTree)),
108285
108451
  slide,
108286
108452
  slideRelationships,
108287
108453
  slideRelationshipRegistry,
@@ -109079,7 +109245,7 @@ function asObjects3(value) {
109079
109245
  return isXmlObject9(value) ? [value] : [];
109080
109246
  }
109081
109247
  function rememberTemplateSpTreePositions(runtime, partPath, spTree, positionOf) {
109082
- const positions = /* @__PURE__ */ new Map();
109248
+ const positions2 = /* @__PURE__ */ new Map();
109083
109249
  for (const [key2, value] of Object.entries(spTree)) {
109084
109250
  if (!SHAPE_TREE_ELEMENT_TAGS.has(key2) && key2 !== ALTERNATE_CONTENT_TAG3) {
109085
109251
  continue;
@@ -109087,7 +109253,7 @@ function rememberTemplateSpTreePositions(runtime, partPath, spTree, positionOf)
109087
109253
  for (const node of asObjects3(value)) {
109088
109254
  const position2 = positionOf(node);
109089
109255
  if (position2 !== void 0) {
109090
- positions.set(node, position2);
109256
+ positions2.set(node, position2);
109091
109257
  }
109092
109258
  }
109093
109259
  }
@@ -109096,7 +109262,7 @@ function rememberTemplateSpTreePositions(runtime, partPath, spTree, positionOf)
109096
109262
  byPart = /* @__PURE__ */ new Map();
109097
109263
  positionsByRuntime.set(runtime, byPart);
109098
109264
  }
109099
- byPart.set(partPath, positions);
109265
+ byPart.set(partPath, positions2);
109100
109266
  }
109101
109267
  function withReplacedChild(container, tag, indexInType, replacement) {
109102
109268
  const existing = container[tag];
@@ -109125,17 +109291,17 @@ function orderContainer(container, plan, getLocalName2) {
109125
109291
  working = withReplacedChild(working, entry2.tag, entry2.indexInType, ordered4);
109126
109292
  }
109127
109293
  }
109128
- const positions = /* @__PURE__ */ new Map();
109294
+ const positions2 = /* @__PURE__ */ new Map();
109129
109295
  plan.forEach((entry2, position2) => {
109130
109296
  const node = asObjects3(working[entry2.tag])[entry2.indexInType];
109131
- if (node && !positions.has(node)) {
109132
- positions.set(node, position2);
109297
+ if (node && !positions2.has(node)) {
109298
+ positions2.set(node, position2);
109133
109299
  }
109134
109300
  });
109135
- if (positions.size === 0) {
109301
+ if (positions2.size === 0) {
109136
109302
  return working;
109137
109303
  }
109138
- return orderShapeTreeChildren(working, (node) => positions.get(node), getLocalName2);
109304
+ return orderShapeTreeChildren(working, (node) => positions2.get(node), getLocalName2);
109139
109305
  }
109140
109306
  function orderedTemplatePartXml(options) {
109141
109307
  const {
@@ -109187,6 +109353,7 @@ var shapeIdValidator2;
109187
109353
  var PptxHandlerRuntime46;
109188
109354
  var init_PptxHandlerRuntimeSaveMasterElements = __esm({
109189
109355
  "src/core/core/runtime/PptxHandlerRuntimeSaveMasterElements.ts"() {
109356
+ init_services();
109190
109357
  init_builders();
109191
109358
  init_auxiliary_master_node_cache();
109192
109359
  init_master_part_element_signature();
@@ -109276,6 +109443,7 @@ var init_PptxHandlerRuntimeSaveMasterElements = __esm({
109276
109443
  elements: elements2
109277
109444
  };
109278
109445
  const ctx = {
109446
+ connectorShapeIds: resolveConnectorShapeIds(elements2, this.maxCnvPrId(spTree)),
109279
109447
  slide,
109280
109448
  slideRelationships: relationships,
109281
109449
  slideRelationshipRegistry: relationshipRegistry,
@@ -113267,6 +113435,15 @@ var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
113267
113435
  ...endParaRPrRaw
113268
113436
  };
113269
113437
  }
113438
+ if (entries.length === 0) {
113439
+ segments[firstSegmentIndex].paragraphInsertionStyle = withAuthoredSplit(
113440
+ endParaRPrRaw && typeof endParaRPrRaw === "object" ? this.extractTextRunStyle(
113441
+ endParaRPrRaw,
113442
+ paraAlign,
113443
+ ctx.slideRelationshipMap
113444
+ ) : {}
113445
+ );
113446
+ }
113270
113447
  const basisFontSize = typeof mergedDefaultRunStyle.fontSize === "number" ? mergedDefaultRunStyle.fontSize : void 0;
113271
113448
  const paragraphOwnProps = this.extractParagraphOwnProperties(p, basisFontSize);
113272
113449
  if (paragraphOwnProps) {
@@ -113686,6 +113863,7 @@ var init_PptxHandlerRuntimeShapeParsing = __esm({
113686
113863
  skewY,
113687
113864
  flipHorizontal,
113688
113865
  flipVertical,
113866
+ inheritedTransform: !spPr?.["a:xfrm"] && xfrm && off && ext ? { x, y, width, height, rotation, skewX, skewY, flipHorizontal, flipVertical } : void 0,
113689
113867
  actionClick,
113690
113868
  actionHover,
113691
113869
  locks,
@@ -113774,6 +113952,7 @@ var init_PptxHandlerRuntimePictureParsing = __esm({
113774
113952
  const skewX = xfrm["@_skewX"] ? parseEmuInt2(xfrm["@_skewX"]) / 6e4 : void 0;
113775
113953
  const skewY = xfrm["@_skewY"] ? parseEmuInt2(xfrm["@_skewY"]) / 6e4 : void 0;
113776
113954
  const { flipHorizontal, flipVertical } = this.readFlipState(xfrm);
113955
+ const inheritedTransform = !spPr?.["a:xfrm"] && off && ext ? { x, y, width, height, rotation, skewX, skewY, flipHorizontal, flipVertical } : void 0;
113777
113956
  const nvPr = pic?.["p:nvPicPr"]?.["p:nvPr"];
113778
113957
  const mediaReference = parseDrawingMediaReference(nvPr, this.externalRelsMap.get(slidePath));
113779
113958
  if (mediaReference) {
@@ -113834,6 +114013,7 @@ var init_PptxHandlerRuntimePictureParsing = __esm({
113834
114013
  return {
113835
114014
  id,
113836
114015
  type: "media",
114016
+ inheritedTransform,
113837
114017
  x,
113838
114018
  y,
113839
114019
  width,
@@ -114042,6 +114222,7 @@ var init_PptxHandlerRuntimePictureParsing = __esm({
114042
114222
  id,
114043
114223
  name: picElementName || void 0,
114044
114224
  type: "picture",
114225
+ inheritedTransform,
114045
114226
  x,
114046
114227
  y,
114047
114228
  width,
@@ -116378,6 +116559,7 @@ var init_PptxHandlerRuntimeMasterElements = __esm({
116378
116559
  var PptxHandlerRuntime77;
116379
116560
  var init_PptxHandlerRuntimeAuxiliaryMasterElements = __esm({
116380
116561
  "src/core/core/runtime/PptxHandlerRuntimeAuxiliaryMasterElements.ts"() {
116562
+ init_services();
116381
116563
  init_auxiliary_master_node_cache();
116382
116564
  init_master_part_background_cache();
116383
116565
  init_master_part_element_signature();
@@ -116435,6 +116617,7 @@ var init_PptxHandlerRuntimeAuxiliaryMasterElements = __esm({
116435
116617
  } finally {
116436
116618
  this.currentSlideClrMapOverride = previousClrMapOverride;
116437
116619
  }
116620
+ reconcileAnimationTargets(part.elements, void 0, void 0);
116438
116621
  rememberMasterPartElementSignature(this, partPath, part.elements);
116439
116622
  this.rememberUnparsedMasterNodes(partPath, spTree, part.elements);
116440
116623
  }
@@ -153024,21 +153207,21 @@ function categoryX3(value, count, layout, mode) {
153024
153207
  }
153025
153208
  return layout.plotLeft + value / Math.max(count - 1, 1) * layout.plotWidth;
153026
153209
  }
153027
- function positionedCategoryX(value, positions, fallback) {
153028
- if (!positions || positions.length === 0) {
153210
+ function positionedCategoryX(value, positions2, fallback) {
153211
+ if (!positions2 || positions2.length === 0) {
153029
153212
  return fallback(value);
153030
153213
  }
153031
153214
  const lower = Math.floor(value);
153032
153215
  const upper = Math.ceil(value);
153033
153216
  const at = (index) => {
153034
- if (positions[index] !== void 0) {
153035
- return positions[index];
153217
+ if (positions2[index] !== void 0) {
153218
+ return positions2[index];
153036
153219
  }
153037
- const lastIndex = positions.length - 1;
153038
- const last = positions[lastIndex] ?? 0;
153039
- const beforeLast = lastIndex > 0 ? positions[lastIndex - 1] ?? positions[0] ?? 0 : positions[0] ?? 0;
153220
+ const lastIndex = positions2.length - 1;
153221
+ const last = positions2[lastIndex] ?? 0;
153222
+ const beforeLast = lastIndex > 0 ? positions2[lastIndex - 1] ?? positions2[0] ?? 0 : positions2[0] ?? 0;
153040
153223
  const gap = last - beforeLast;
153041
- return last + gap * (index - positions.length + 1);
153224
+ return last + gap * (index - positions2.length + 1);
153042
153225
  };
153043
153226
  return at(lower) + (at(upper) - at(lower)) * (value - lower);
153044
153227
  }
@@ -174956,16 +175139,580 @@ function resolveParagraphIndent(paraIndent, paragraphLevel) {
174956
175139
  }
174957
175140
  return { marginLeftPx: marginLeft, textIndentPx: textIndent };
174958
175141
  }
175142
+ var DEFAULT_BULLET_CHAR = "\u2022";
175143
+ var DEFAULT_AUTONUM_TYPE = "arabicPeriod";
175144
+ function bulletInfoForKind(kind, ordinal = 0) {
175145
+ if (kind === "none") {
175146
+ return { none: true };
175147
+ }
175148
+ if (kind === "bullet") {
175149
+ return { char: DEFAULT_BULLET_CHAR };
175150
+ }
175151
+ return { autoNumType: DEFAULT_AUTONUM_TYPE, autoNumStartAt: 1, paragraphIndex: ordinal };
175152
+ }
174959
175153
  function isBulletMarkerSegment(segment) {
174960
- const bullet = segment.bulletInfo;
174961
- if (!bullet || bullet.none) {
175154
+ const info = segment.bulletInfo;
175155
+ if (!info || info.none || segment.fieldType || segment.isLineBreak) {
174962
175156
  return false;
174963
175157
  }
174964
- const resolved = resolveParagraphBullet(segment);
174965
- if (!resolved) {
175158
+ if (!info.char && !info.autoNumType && !info.imageRelId && !info.imageDataUrl && !info.imageBlipFillXml) {
174966
175159
  return false;
174967
175160
  }
174968
- return segment.text.trim() === resolved.marker.trim() && segment.text.trim().length > 0;
175161
+ if (info.autoNumType) {
175162
+ if (info.paragraphIndex === void 0) {
175163
+ return false;
175164
+ }
175165
+ const marker = markerText(info);
175166
+ return segment.text === marker || segment.text === `${marker} `;
175167
+ }
175168
+ return segment.text === markerText(info);
175169
+ }
175170
+ function paragraphBulletKind(paragraph) {
175171
+ const resolved = resolveParagraphBullet(paragraph[0]);
175172
+ return resolved ? resolved.isNumbered ? "numbered" : "bullet" : "none";
175173
+ }
175174
+ function withoutListType(style) {
175175
+ const next = { ...style };
175176
+ delete next.listType;
175177
+ return next;
175178
+ }
175179
+ function markerText(info) {
175180
+ if (info.imageRelId || info.imageDataUrl || info.imageBlipFillXml) {
175181
+ return "\u{1F4CE} ";
175182
+ }
175183
+ if (info.autoNumType) {
175184
+ return formatAutoNumberMarker(
175185
+ info.autoNumType,
175186
+ Math.max(1, (info.autoNumStartAt ?? 1) + (info.paragraphIndex ?? 0))
175187
+ );
175188
+ }
175189
+ return `${info.char ?? DEFAULT_BULLET_CHAR} `;
175190
+ }
175191
+ function infoForParagraph(previous, kind, ordinal) {
175192
+ if (kind === "none") {
175193
+ return { ...previous, none: true };
175194
+ }
175195
+ const sameKind = previous && (kind === "numbered" ? Boolean(previous.autoNumType) : Boolean(
175196
+ previous.char || previous.imageRelId || previous.imageDataUrl || previous.imageBlipFillXml
175197
+ ) && !previous.autoNumType);
175198
+ const info = sameKind ? { ...previous } : bulletInfoForKind(kind, ordinal);
175199
+ delete info.none;
175200
+ if (kind === "numbered" && ordinal !== void 0) {
175201
+ info.paragraphIndex = ordinal;
175202
+ }
175203
+ return info;
175204
+ }
175205
+ function toggleParagraphBullet(paragraph, kind, ordinal) {
175206
+ const source = paragraph[0];
175207
+ if (!source) {
175208
+ return [];
175209
+ }
175210
+ if (paragraph.length === 1 && source.paragraphInsertionStyle && (source.text === "" || isBulletMarkerSegment(source))) {
175211
+ const info2 = infoForParagraph(source.bulletInfo, kind, ordinal);
175212
+ const picture = info2.imageRelId || info2.imageDataUrl || info2.imageBlipFillXml;
175213
+ return [
175214
+ {
175215
+ ...source,
175216
+ text: kind === "none" || picture ? "" : markerText(info2),
175217
+ style: withoutListType(source.style),
175218
+ bulletInfo: info2
175219
+ }
175220
+ ];
175221
+ }
175222
+ const content = isBulletMarkerSegment(source) ? paragraph.slice(1) : [...paragraph];
175223
+ const first = content[0] ?? { text: "", style: source.style };
175224
+ const meta = {
175225
+ ...source.paragraphLevel !== void 0 ? { paragraphLevel: source.paragraphLevel } : {},
175226
+ ...source.paragraphProperties ? { paragraphProperties: source.paragraphProperties } : {},
175227
+ ...source.endParaRunProperties ? { endParaRunProperties: source.endParaRunProperties } : {},
175228
+ ...source.paragraphInsertionStyle ? { paragraphInsertionStyle: source.paragraphInsertionStyle } : {}
175229
+ };
175230
+ const info = infoForParagraph(source.bulletInfo, kind, ordinal);
175231
+ const body = { ...first, ...meta, style: withoutListType(first.style) };
175232
+ const rest = content.slice(1).map((segment) => {
175233
+ if (!segment.bulletInfo) {
175234
+ return segment;
175235
+ }
175236
+ const run = { ...segment };
175237
+ delete run.bulletInfo;
175238
+ return run;
175239
+ });
175240
+ if (kind === "none" || info.imageRelId || info.imageDataUrl || info.imageBlipFillXml) {
175241
+ return [{ ...body, bulletInfo: info }, ...rest];
175242
+ }
175243
+ delete body.bulletInfo;
175244
+ delete body.paragraphInsertionStyle;
175245
+ const markerStyle = isBulletMarkerSegment(source) && paragraphBulletKind([source]) === kind ? source.style : first.style;
175246
+ return [
175247
+ { text: markerText(info), style: withoutListType(markerStyle), ...meta, bulletInfo: info },
175248
+ body,
175249
+ ...rest
175250
+ ];
175251
+ }
175252
+ function elementSegments(element) {
175253
+ if (!hasTextProperties(element)) {
175254
+ return [];
175255
+ }
175256
+ if (element.textSegments?.length) {
175257
+ return element.textSegments;
175258
+ }
175259
+ return (element.text ?? "").split("\n").flatMap((text22, index) => [
175260
+ ...index ? [{ text: "\n", style: { ...element.textStyle }, isParagraphBreak: true }] : [],
175261
+ { text: text22, style: { ...element.textStyle } }
175262
+ ]);
175263
+ }
175264
+ function splitParagraphs2(segments) {
175265
+ const paragraphs = [
175266
+ { segments: [] }
175267
+ ];
175268
+ for (const segment of segments) {
175269
+ if (isParagraphSeparatorSegment(segment)) {
175270
+ paragraphs[paragraphs.length - 1].terminator = segment;
175271
+ paragraphs.push({ segments: [] });
175272
+ } else {
175273
+ paragraphs[paragraphs.length - 1].segments.push(segment);
175274
+ }
175275
+ }
175276
+ return paragraphs;
175277
+ }
175278
+ function elementBulletKind(element) {
175279
+ for (const paragraph of splitParagraphs2(elementSegments(element))) {
175280
+ if (paragraph.segments.length) {
175281
+ return paragraphBulletKind(paragraph.segments);
175282
+ }
175283
+ }
175284
+ return "none";
175285
+ }
175286
+ function setElementBullets(element, kind, range) {
175287
+ if (!hasTextProperties(element)) {
175288
+ return {};
175289
+ }
175290
+ if (range && (!Number.isInteger(range.startParagraph) || !Number.isInteger(range.endParagraph) || range.startParagraph < 0 || range.endParagraph < range.startParagraph)) {
175291
+ return {};
175292
+ }
175293
+ const paragraphs = splitParagraphs2(elementSegments(element));
175294
+ if (range && range.startParagraph >= paragraphs.length) {
175295
+ return {};
175296
+ }
175297
+ 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
+ }
175321
+ } else {
175322
+ breakAutoNumberRun(sequence, level);
175323
+ }
175324
+ next.push(...segments);
175325
+ if (paragraph.terminator) {
175326
+ next.push(paragraph.terminator);
175327
+ }
175328
+ }
175329
+ return {
175330
+ textSegments: next,
175331
+ textStyle: withoutListType(element.textStyle)
175332
+ };
175333
+ }
175334
+ function updateTextSegmentStyle(segment, updates, options = {}) {
175335
+ return {
175336
+ ...segment,
175337
+ ...options.updateBodyStyle === false ? {} : { style: { ...segment.style, ...updates } },
175338
+ ...segment.paragraphInsertionStyle ? { paragraphInsertionStyle: { ...segment.paragraphInsertionStyle, ...updates } } : {}
175339
+ };
175340
+ }
175341
+ function getInlineEditorSelection(segments) {
175342
+ if (!segments?.length) {
175343
+ return null;
175344
+ }
175345
+ const selection = window.getSelection();
175346
+ if (!selection || selection.rangeCount === 0 || selection.isCollapsed) {
175347
+ return null;
175348
+ }
175349
+ const range = selection.getRangeAt(0);
175350
+ const editor = findEditorContainer(range.startContainer);
175351
+ if (!editor || !editor.contains(range.endContainer) || range.toString().length === 0) {
175352
+ return null;
175353
+ }
175354
+ const start = getSegmentPosition(editor, range.startContainer, range.startOffset, segments);
175355
+ const end = getSegmentPosition(editor, range.endContainer, range.endOffset, segments);
175356
+ if (!start || !end) {
175357
+ return null;
175358
+ }
175359
+ const renderedSpans = Array.from(editor.querySelectorAll("[data-seg-idx]"));
175360
+ const startSpanIndex = renderedSpans.indexOf(start.span);
175361
+ const endSpanIndex = renderedSpans.indexOf(end.span);
175362
+ if (startSpanIndex < 0 || endSpanIndex < startSpanIndex) {
175363
+ return null;
175364
+ }
175365
+ const selectedSpans = renderedSpans.slice(startSpanIndex, endSpanIndex + 1);
175366
+ const first = selectedSpans.find(
175367
+ (span) => isEditableSpan(span, segments) && (span !== start.span || start.offset < start.textLength)
175368
+ );
175369
+ const last = [...selectedSpans].reverse().find((span) => isEditableSpan(span, segments) && (span !== end.span || end.offset > 0));
175370
+ if (!first || !last) {
175371
+ return null;
175372
+ }
175373
+ return {
175374
+ startSegIdx: getSegmentIndex(first),
175375
+ startOffset: first === start.span ? start.offset : 0,
175376
+ endSegIdx: getSegmentIndex(last),
175377
+ endOffset: last === end.span ? end.offset : last.textContent?.length ?? 0
175378
+ };
175379
+ }
175380
+ function isEditableSpan(span, segments) {
175381
+ const segment = segments[getSegmentIndex(span)];
175382
+ return Boolean(
175383
+ segment && !segment.isParagraphBreak && segment.text !== "\n" && !isBulletMarkerSegment(segment) && (span.textContent?.length ?? 0) > 0
175384
+ );
175385
+ }
175386
+ function getSegmentIndex(span) {
175387
+ return Number(span.getAttribute("data-seg-idx"));
175388
+ }
175389
+ function findEditorContainer(node) {
175390
+ const element = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
175391
+ return element?.closest("[data-inline-editor]") ?? null;
175392
+ }
175393
+ function getSegmentPosition(editor, node, offset, segments) {
175394
+ const element = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
175395
+ const span = element?.closest("[data-seg-idx]");
175396
+ if (!span || !editor.contains(span)) {
175397
+ return null;
175398
+ }
175399
+ const segIdx = getSegmentIndex(span);
175400
+ if (!Number.isInteger(segIdx) || segIdx < 0 || segIdx >= segments.length) {
175401
+ return null;
175402
+ }
175403
+ return {
175404
+ segIdx,
175405
+ offset: getTextOffsetWithin(span, node, offset),
175406
+ span,
175407
+ textLength: span.textContent?.length ?? 0
175408
+ };
175409
+ }
175410
+ function getTextOffsetWithin(container, targetNode, targetOffset) {
175411
+ if (targetNode === container || targetNode.nodeType === Node.ELEMENT_NODE) {
175412
+ const parent = targetNode === container ? container : targetNode;
175413
+ let count = 0;
175414
+ for (let index = 0; index < targetOffset && index < parent.childNodes.length; index++) {
175415
+ count += parent.childNodes[index].textContent?.length ?? 0;
175416
+ }
175417
+ return count;
175418
+ }
175419
+ const walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT);
175420
+ let charCount = 0;
175421
+ let node;
175422
+ while (node = walker.nextNode()) {
175423
+ if (node === targetNode) {
175424
+ return charCount + targetOffset;
175425
+ }
175426
+ charCount += node.length;
175427
+ }
175428
+ return charCount;
175429
+ }
175430
+ var pendingRestore = null;
175431
+ function setPendingSelectionRestore(sel) {
175432
+ pendingRestore = sel;
175433
+ }
175434
+ function getPendingSelectionRestore() {
175435
+ const sel = pendingRestore;
175436
+ pendingRestore = null;
175437
+ return sel;
175438
+ }
175439
+ function applyStyleToSelectedSegments(segments, selection, updates) {
175440
+ const { startSegIdx, startOffset, endSegIdx, endOffset } = selection;
175441
+ const result = [];
175442
+ let newStartSegIdx = -1;
175443
+ let newStartOffset = 0;
175444
+ let newEndSegIdx = -1;
175445
+ let newEndOffset = 0;
175446
+ for (let i2 = 0; i2 < segments.length; i2++) {
175447
+ const seg = i2 >= startSegIdx && i2 <= endSegIdx ? updateTextSegmentStyle(segments[i2], updates, { updateBodyStyle: false }) : segments[i2];
175448
+ if (seg.isParagraphBreak || seg.text === "\n") {
175449
+ result.push({ ...seg, style: { ...seg.style } });
175450
+ continue;
175451
+ }
175452
+ if (i2 < startSegIdx) {
175453
+ result.push({ ...seg, style: { ...seg.style } });
175454
+ continue;
175455
+ }
175456
+ if (i2 > endSegIdx) {
175457
+ result.push({ ...seg, style: { ...seg.style } });
175458
+ continue;
175459
+ }
175460
+ if (seg.paragraphInsertionStyle && (seg.text === "" || isBulletMarkerSegment(seg))) {
175461
+ newStartSegIdx = newStartSegIdx < 0 ? result.length : newStartSegIdx;
175462
+ newEndSegIdx = result.length;
175463
+ result.push(seg);
175464
+ continue;
175465
+ }
175466
+ if (i2 === startSegIdx && i2 === endSegIdx) {
175467
+ splitSingle(seg, startOffset, endOffset, updates, result);
175468
+ const partsAdded = (startOffset > 0 ? 1 : 0) + 1 + (endOffset < seg.text.length ? 1 : 0);
175469
+ const selectedPartIdx = result.length - partsAdded + (startOffset > 0 ? 1 : 0);
175470
+ newStartSegIdx = selectedPartIdx;
175471
+ newStartOffset = 0;
175472
+ newEndSegIdx = selectedPartIdx;
175473
+ newEndOffset = endOffset - startOffset;
175474
+ continue;
175475
+ }
175476
+ if (i2 === startSegIdx) {
175477
+ if (startOffset === 0) {
175478
+ newStartSegIdx = result.length;
175479
+ newStartOffset = 0;
175480
+ result.push({ ...seg, style: { ...seg.style, ...updates } });
175481
+ } else {
175482
+ const beforeSeg = {
175483
+ text: seg.text.slice(0, startOffset),
175484
+ style: { ...seg.style }
175485
+ };
175486
+ if (seg.bulletInfo) {
175487
+ beforeSeg.bulletInfo = seg.bulletInfo;
175488
+ }
175489
+ result.push(beforeSeg);
175490
+ newStartSegIdx = result.length;
175491
+ newStartOffset = 0;
175492
+ result.push({
175493
+ text: seg.text.slice(startOffset),
175494
+ style: { ...seg.style, ...updates }
175495
+ });
175496
+ }
175497
+ continue;
175498
+ }
175499
+ if (i2 === endSegIdx) {
175500
+ if (endOffset >= seg.text.length) {
175501
+ result.push({ ...seg, style: { ...seg.style, ...updates } });
175502
+ newEndSegIdx = result.length - 1;
175503
+ newEndOffset = seg.text.length;
175504
+ } else {
175505
+ result.push({
175506
+ text: seg.text.slice(0, endOffset),
175507
+ style: { ...seg.style, ...updates }
175508
+ });
175509
+ newEndSegIdx = result.length - 1;
175510
+ newEndOffset = endOffset;
175511
+ result.push({
175512
+ text: seg.text.slice(endOffset),
175513
+ style: { ...seg.style }
175514
+ });
175515
+ }
175516
+ continue;
175517
+ }
175518
+ result.push({ ...seg, style: { ...seg.style, ...updates } });
175519
+ }
175520
+ return {
175521
+ newSegments: result,
175522
+ newSelection: {
175523
+ startSegIdx: newStartSegIdx,
175524
+ startOffset: newStartOffset,
175525
+ endSegIdx: newEndSegIdx,
175526
+ endOffset: newEndOffset
175527
+ }
175528
+ };
175529
+ }
175530
+ function splitSingle(seg, startOffset, endOffset, updates, result) {
175531
+ if (startOffset === 0 && endOffset >= seg.text.length) {
175532
+ result.push({ ...seg, style: { ...seg.style, ...updates } });
175533
+ return;
175534
+ }
175535
+ if (startOffset > 0) {
175536
+ const beforeSeg = {
175537
+ text: seg.text.slice(0, startOffset),
175538
+ style: { ...seg.style }
175539
+ };
175540
+ if (seg.bulletInfo) {
175541
+ beforeSeg.bulletInfo = seg.bulletInfo;
175542
+ }
175543
+ result.push(beforeSeg);
175544
+ }
175545
+ result.push({
175546
+ text: seg.text.slice(startOffset, endOffset),
175547
+ style: { ...seg.style, ...updates }
175548
+ });
175549
+ if (endOffset < seg.text.length) {
175550
+ result.push({
175551
+ text: seg.text.slice(endOffset),
175552
+ style: { ...seg.style }
175553
+ });
175554
+ }
175555
+ }
175556
+ function restoreSegmentSelection(editor, startSegIdx, startOffset, endSegIdx, endOffset) {
175557
+ const sel = window.getSelection();
175558
+ if (!sel) {
175559
+ return;
175560
+ }
175561
+ const startPos = findTextPositionInSegment(editor, startSegIdx, startOffset);
175562
+ const endPos = findTextPositionInSegment(editor, endSegIdx, endOffset);
175563
+ if (!startPos || !endPos) {
175564
+ return;
175565
+ }
175566
+ const range = document.createRange();
175567
+ range.setStart(startPos.node, startPos.offset);
175568
+ range.setEnd(endPos.node, endPos.offset);
175569
+ sel.removeAllRanges();
175570
+ sel.addRange(range);
175571
+ }
175572
+ function findTextPositionInSegment(editor, segIdx, charOffset) {
175573
+ const segSpan = editor.querySelector(`[data-seg-idx="${segIdx}"]`);
175574
+ if (!segSpan) {
175575
+ return null;
175576
+ }
175577
+ const walker = document.createTreeWalker(segSpan, NodeFilter.SHOW_TEXT);
175578
+ let charCount = 0;
175579
+ let node;
175580
+ while (node = walker.nextNode()) {
175581
+ const textLen = node.length;
175582
+ if (charCount + textLen >= charOffset) {
175583
+ return { node, offset: charOffset - charCount };
175584
+ }
175585
+ charCount += textLen;
175586
+ }
175587
+ const lastTextNode = segSpan.querySelector("*") ? null : segSpan.firstChild;
175588
+ if (lastTextNode && lastTextNode.nodeType === Node.TEXT_NODE) {
175589
+ return { node: lastTextNode, offset: lastTextNode.length };
175590
+ }
175591
+ return null;
175592
+ }
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);
175707
+ return {
175708
+ patch,
175709
+ selection: {
175710
+ startSegIdx: start.index,
175711
+ startOffset: start.offset,
175712
+ endSegIdx: end.index,
175713
+ endOffset: end.offset
175714
+ }
175715
+ };
174969
175716
  }
174970
175717
  var DEBOUNCE_MS = 600;
174971
175718
  var EXPANDED_MAX_HEIGHT = 200;
@@ -175688,15 +176435,15 @@ function computeTabSize(tabStops, defaultTabSize) {
175688
176435
  const pos2 = tabStops[0].position;
175689
176436
  return typeof pos2 === "number" && pos2 > 0 ? `${Math.round(pos2)}px` : fromDefault;
175690
176437
  }
175691
- const positions = tabStops.map((t) => t.position).filter((p) => typeof p === "number" && p > 0).sort((a, b) => a - b);
175692
- if (positions.length < 2) {
175693
- return positions.length === 1 ? `${Math.round(positions[0])}px` : fromDefault;
176438
+ const positions2 = tabStops.map((t) => t.position).filter((p) => typeof p === "number" && p > 0).sort((a, b) => a - b);
176439
+ if (positions2.length < 2) {
176440
+ return positions2.length === 1 ? `${Math.round(positions2[0])}px` : fromDefault;
175694
176441
  }
175695
176442
  let totalGap = 0;
175696
- for (let i2 = 1; i2 < positions.length; i2++) {
175697
- totalGap += positions[i2] - positions[i2 - 1];
176443
+ for (let i2 = 1; i2 < positions2.length; i2++) {
176444
+ totalGap += positions2[i2] - positions2[i2 - 1];
175698
176445
  }
175699
- const avgGap = totalGap / (positions.length - 1);
176446
+ const avgGap = totalGap / (positions2.length - 1);
175700
176447
  return avgGap > 0 ? `${Math.round(avgGap)}px` : fromDefault;
175701
176448
  }
175702
176449
  function resolveTextOverflowClip(textStyle) {
@@ -179861,252 +180608,6 @@ function buildThemeColorGrid(colorScheme, translate) {
179861
180608
  function themeColorLabel(key2, translate) {
179862
180609
  return translate ? schemaLabel(THEME_COLOR_SLOT_LABEL_KEYS, key2, translate) : THEME_COLOR_LABELS[key2];
179863
180610
  }
179864
- function getInlineEditorSelection(segments) {
179865
- if (!segments?.length) {
179866
- return null;
179867
- }
179868
- const selection = window.getSelection();
179869
- if (!selection || selection.rangeCount === 0 || selection.isCollapsed) {
179870
- return null;
179871
- }
179872
- const range = selection.getRangeAt(0);
179873
- const editor = findEditorContainer(range.startContainer);
179874
- if (!editor || !editor.contains(range.endContainer) || range.toString().length === 0) {
179875
- return null;
179876
- }
179877
- const start = getSegmentPosition(editor, range.startContainer, range.startOffset, segments);
179878
- const end = getSegmentPosition(editor, range.endContainer, range.endOffset, segments);
179879
- if (!start || !end) {
179880
- return null;
179881
- }
179882
- const renderedSpans = Array.from(editor.querySelectorAll("[data-seg-idx]"));
179883
- const startSpanIndex = renderedSpans.indexOf(start.span);
179884
- const endSpanIndex = renderedSpans.indexOf(end.span);
179885
- if (startSpanIndex < 0 || endSpanIndex < startSpanIndex) {
179886
- return null;
179887
- }
179888
- const selectedSpans = renderedSpans.slice(startSpanIndex, endSpanIndex + 1);
179889
- const first = selectedSpans.find(
179890
- (span) => isEditableSpan(span, segments) && (span !== start.span || start.offset < start.textLength)
179891
- );
179892
- const last = [...selectedSpans].reverse().find((span) => isEditableSpan(span, segments) && (span !== end.span || end.offset > 0));
179893
- if (!first || !last) {
179894
- return null;
179895
- }
179896
- return {
179897
- startSegIdx: getSegmentIndex(first),
179898
- startOffset: first === start.span ? start.offset : 0,
179899
- endSegIdx: getSegmentIndex(last),
179900
- endOffset: last === end.span ? end.offset : last.textContent?.length ?? 0
179901
- };
179902
- }
179903
- function isEditableSpan(span, segments) {
179904
- const segment = segments[getSegmentIndex(span)];
179905
- return Boolean(
179906
- segment && !segment.isParagraphBreak && segment.text !== "\n" && !isBulletMarkerSegment(segment) && (span.textContent?.length ?? 0) > 0
179907
- );
179908
- }
179909
- function getSegmentIndex(span) {
179910
- return Number(span.getAttribute("data-seg-idx"));
179911
- }
179912
- function findEditorContainer(node) {
179913
- const element = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
179914
- return element?.closest("[data-inline-editor]") ?? null;
179915
- }
179916
- function getSegmentPosition(editor, node, offset, segments) {
179917
- const element = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
179918
- const span = element?.closest("[data-seg-idx]");
179919
- if (!span || !editor.contains(span)) {
179920
- return null;
179921
- }
179922
- const segIdx = getSegmentIndex(span);
179923
- if (!Number.isInteger(segIdx) || segIdx < 0 || segIdx >= segments.length) {
179924
- return null;
179925
- }
179926
- return {
179927
- segIdx,
179928
- offset: getTextOffsetWithin(span, node, offset),
179929
- span,
179930
- textLength: span.textContent?.length ?? 0
179931
- };
179932
- }
179933
- function getTextOffsetWithin(container, targetNode, targetOffset) {
179934
- if (targetNode === container || targetNode.nodeType === Node.ELEMENT_NODE) {
179935
- const parent = targetNode === container ? container : targetNode;
179936
- let count = 0;
179937
- for (let index = 0; index < targetOffset && index < parent.childNodes.length; index++) {
179938
- count += parent.childNodes[index].textContent?.length ?? 0;
179939
- }
179940
- return count;
179941
- }
179942
- const walker = document.createTreeWalker(container, NodeFilter.SHOW_TEXT);
179943
- let charCount = 0;
179944
- let node;
179945
- while (node = walker.nextNode()) {
179946
- if (node === targetNode) {
179947
- return charCount + targetOffset;
179948
- }
179949
- charCount += node.length;
179950
- }
179951
- return charCount;
179952
- }
179953
- var pendingRestore = null;
179954
- function setPendingSelectionRestore(sel) {
179955
- pendingRestore = sel;
179956
- }
179957
- function getPendingSelectionRestore() {
179958
- const sel = pendingRestore;
179959
- pendingRestore = null;
179960
- return sel;
179961
- }
179962
- function applyStyleToSelectedSegments(segments, selection, updates) {
179963
- const { startSegIdx, startOffset, endSegIdx, endOffset } = selection;
179964
- const result = [];
179965
- let newStartSegIdx = -1;
179966
- let newStartOffset = 0;
179967
- let newEndSegIdx = -1;
179968
- let newEndOffset = 0;
179969
- for (let i2 = 0; i2 < segments.length; i2++) {
179970
- const seg = segments[i2];
179971
- if (seg.isParagraphBreak || seg.text === "\n") {
179972
- result.push({ ...seg, style: { ...seg.style } });
179973
- continue;
179974
- }
179975
- if (i2 < startSegIdx) {
179976
- result.push({ ...seg, style: { ...seg.style } });
179977
- continue;
179978
- }
179979
- if (i2 > endSegIdx) {
179980
- result.push({ ...seg, style: { ...seg.style } });
179981
- continue;
179982
- }
179983
- if (i2 === startSegIdx && i2 === endSegIdx) {
179984
- splitSingle(seg, startOffset, endOffset, updates, result);
179985
- const partsAdded = (startOffset > 0 ? 1 : 0) + 1 + (endOffset < seg.text.length ? 1 : 0);
179986
- const selectedPartIdx = result.length - partsAdded + (startOffset > 0 ? 1 : 0);
179987
- newStartSegIdx = selectedPartIdx;
179988
- newStartOffset = 0;
179989
- newEndSegIdx = selectedPartIdx;
179990
- newEndOffset = endOffset - startOffset;
179991
- continue;
179992
- }
179993
- if (i2 === startSegIdx) {
179994
- if (startOffset === 0) {
179995
- newStartSegIdx = result.length;
179996
- newStartOffset = 0;
179997
- result.push({ ...seg, style: { ...seg.style, ...updates } });
179998
- } else {
179999
- const beforeSeg = {
180000
- text: seg.text.slice(0, startOffset),
180001
- style: { ...seg.style }
180002
- };
180003
- if (seg.bulletInfo) {
180004
- beforeSeg.bulletInfo = seg.bulletInfo;
180005
- }
180006
- result.push(beforeSeg);
180007
- newStartSegIdx = result.length;
180008
- newStartOffset = 0;
180009
- result.push({
180010
- text: seg.text.slice(startOffset),
180011
- style: { ...seg.style, ...updates }
180012
- });
180013
- }
180014
- continue;
180015
- }
180016
- if (i2 === endSegIdx) {
180017
- if (endOffset >= seg.text.length) {
180018
- result.push({ ...seg, style: { ...seg.style, ...updates } });
180019
- newEndSegIdx = result.length - 1;
180020
- newEndOffset = seg.text.length;
180021
- } else {
180022
- result.push({
180023
- text: seg.text.slice(0, endOffset),
180024
- style: { ...seg.style, ...updates }
180025
- });
180026
- newEndSegIdx = result.length - 1;
180027
- newEndOffset = endOffset;
180028
- result.push({
180029
- text: seg.text.slice(endOffset),
180030
- style: { ...seg.style }
180031
- });
180032
- }
180033
- continue;
180034
- }
180035
- result.push({ ...seg, style: { ...seg.style, ...updates } });
180036
- }
180037
- return {
180038
- newSegments: result,
180039
- newSelection: {
180040
- startSegIdx: newStartSegIdx,
180041
- startOffset: newStartOffset,
180042
- endSegIdx: newEndSegIdx,
180043
- endOffset: newEndOffset
180044
- }
180045
- };
180046
- }
180047
- function splitSingle(seg, startOffset, endOffset, updates, result) {
180048
- if (startOffset === 0 && endOffset >= seg.text.length) {
180049
- result.push({ ...seg, style: { ...seg.style, ...updates } });
180050
- return;
180051
- }
180052
- if (startOffset > 0) {
180053
- const beforeSeg = {
180054
- text: seg.text.slice(0, startOffset),
180055
- style: { ...seg.style }
180056
- };
180057
- if (seg.bulletInfo) {
180058
- beforeSeg.bulletInfo = seg.bulletInfo;
180059
- }
180060
- result.push(beforeSeg);
180061
- }
180062
- result.push({
180063
- text: seg.text.slice(startOffset, endOffset),
180064
- style: { ...seg.style, ...updates }
180065
- });
180066
- if (endOffset < seg.text.length) {
180067
- result.push({
180068
- text: seg.text.slice(endOffset),
180069
- style: { ...seg.style }
180070
- });
180071
- }
180072
- }
180073
- function restoreSegmentSelection(editor, startSegIdx, startOffset, endSegIdx, endOffset) {
180074
- const sel = window.getSelection();
180075
- if (!sel) {
180076
- return;
180077
- }
180078
- const startPos = findTextPositionInSegment(editor, startSegIdx, startOffset);
180079
- const endPos = findTextPositionInSegment(editor, endSegIdx, endOffset);
180080
- if (!startPos || !endPos) {
180081
- return;
180082
- }
180083
- const range = document.createRange();
180084
- range.setStart(startPos.node, startPos.offset);
180085
- range.setEnd(endPos.node, endPos.offset);
180086
- sel.removeAllRanges();
180087
- sel.addRange(range);
180088
- }
180089
- function findTextPositionInSegment(editor, segIdx, charOffset) {
180090
- const segSpan = editor.querySelector(`[data-seg-idx="${segIdx}"]`);
180091
- if (!segSpan) {
180092
- return null;
180093
- }
180094
- const walker = document.createTreeWalker(segSpan, NodeFilter.SHOW_TEXT);
180095
- let charCount = 0;
180096
- let node;
180097
- while (node = walker.nextNode()) {
180098
- const textLen = node.length;
180099
- if (charCount + textLen >= charOffset) {
180100
- return { node, offset: charOffset - charCount };
180101
- }
180102
- charCount += textLen;
180103
- }
180104
- const lastTextNode = segSpan.querySelector("*") ? null : segSpan.firstChild;
180105
- if (lastTextNode && lastTextNode.nodeType === Node.TEXT_NODE) {
180106
- return { node: lastTextNode, offset: lastTextNode.length };
180107
- }
180108
- return null;
180109
- }
180110
180611
  function placeCaretAtEnd(el) {
180111
180612
  const doc = el.ownerDocument;
180112
180613
  const win = doc.defaultView;
@@ -180533,6 +181034,100 @@ function withConnectorEndpointUpdate(connector, update) {
180533
181034
  function connectorWrapperTransform(element) {
180534
181035
  return element.rotation ? `rotate(${element.rotation}deg)` : void 0;
180535
181036
  }
181037
+ function textFontSizePxToPt(fontSizePx2) {
181038
+ return Math.round(fontSizePx2 * (72 / 96) * 100) / 100;
181039
+ }
181040
+ function textFontSizePtToPx(fontSizePt) {
181041
+ return fontSizePt * (96 / 72);
181042
+ }
181043
+ var COMMON_FONT_FAMILIES = [
181044
+ "Abadi",
181045
+ "Aptos",
181046
+ "Aptos Display",
181047
+ "Arial",
181048
+ "Arial Black",
181049
+ "Arial Narrow",
181050
+ "Bahnschrift",
181051
+ "Book Antiqua",
181052
+ "Bookman Old Style",
181053
+ "Calibri",
181054
+ "Calibri Light",
181055
+ "Cambria",
181056
+ "Candara",
181057
+ "Century Gothic",
181058
+ "Comic Sans MS",
181059
+ "Consolas",
181060
+ "Corbel",
181061
+ "Courier New",
181062
+ "Franklin Gothic Book",
181063
+ "Franklin Gothic Medium",
181064
+ "Garamond",
181065
+ "Georgia",
181066
+ "Gill Sans MT",
181067
+ "Helvetica",
181068
+ "Impact",
181069
+ "Inter",
181070
+ "Lucida Console",
181071
+ "Lucida Sans Unicode",
181072
+ "Microsoft Sans Serif",
181073
+ "Montserrat",
181074
+ "Noto Sans",
181075
+ "Open Sans",
181076
+ "Palatino Linotype",
181077
+ "Poppins",
181078
+ "Roboto",
181079
+ "Rockwell",
181080
+ "Segoe UI",
181081
+ "Source Sans Pro",
181082
+ "Tahoma",
181083
+ "Times New Roman",
181084
+ "Trebuchet MS",
181085
+ "Tw Cen MT",
181086
+ "Verdana"
181087
+ ];
181088
+ var COMMON_FONT_SIZES = [
181089
+ 8,
181090
+ 9,
181091
+ 10,
181092
+ 11,
181093
+ 12,
181094
+ 14,
181095
+ 16,
181096
+ 18,
181097
+ 20,
181098
+ 24,
181099
+ 28,
181100
+ 32,
181101
+ 36,
181102
+ 40,
181103
+ 44,
181104
+ 48,
181105
+ 54,
181106
+ 60,
181107
+ 72,
181108
+ 96
181109
+ ];
181110
+ var CHARACTER_SPACING_OPTIONS = [
181111
+ { label: "Very Tight", i18nKey: "pptx.text.characterSpacingVeryTight", value: -150 },
181112
+ { label: "Tight", i18nKey: "pptx.text.characterSpacingTight", value: -75 },
181113
+ { label: "Normal", i18nKey: "pptx.text.characterSpacingNormal", value: 0 },
181114
+ { label: "Loose", i18nKey: "pptx.text.characterSpacingLoose", value: 75 },
181115
+ { label: "Very Loose", i18nKey: "pptx.text.characterSpacingVeryLoose", value: 150 }
181116
+ ];
181117
+ function textStylePatch(el, changes) {
181118
+ const base = hasTextProperties(el) ? el.textStyle ?? {} : {};
181119
+ return {
181120
+ ...hasTextProperties(el) && el.textSegments?.some((segment) => segment.paragraphInsertionStyle) ? {
181121
+ textSegments: el.textSegments.map(
181122
+ (segment) => updateTextSegmentStyle(segment, changes, { updateBodyStyle: false })
181123
+ )
181124
+ } : {},
181125
+ textStyle: {
181126
+ ...base,
181127
+ ...changes
181128
+ }
181129
+ };
181130
+ }
180536
181131
  function copyFormatFromElement(element) {
180537
181132
  const result = {};
180538
181133
  if (hasShapeProperties(element) && element.shapeStyle) {
@@ -180607,10 +181202,7 @@ function applyFormatToElement(element, format) {
180607
181202
  if (format.textStyle && hasTextProperties(updated)) {
180608
181203
  updated = {
180609
181204
  ...updated,
180610
- textStyle: {
180611
- ...updated.textStyle,
180612
- ...definedEntries2(format.textStyle)
180613
- }
181205
+ ...textStylePatch(updated, definedEntries2(format.textStyle))
180614
181206
  };
180615
181207
  }
180616
181208
  return updated;
@@ -180621,6 +181213,24 @@ function hasCopyableFormat(element) {
180621
181213
  }
180622
181214
  return hasShapeProperties(element) || hasTextProperties(element);
180623
181215
  }
181216
+ function remapEmptyParagraph(text22, segments, terminator) {
181217
+ const source = segments[0] ?? terminator;
181218
+ const insertionStyle = source?.paragraphInsertionStyle;
181219
+ if (!source || !insertionStyle || segments.length > 1 || segments.length > 0 && source.text !== "" && !isBulletMarkerSegment(source)) {
181220
+ return void 0;
181221
+ }
181222
+ if (text22.length === 0) {
181223
+ return segments.map((segment) => ({ ...segment }));
181224
+ }
181225
+ const first = { ...source };
181226
+ delete first.paragraphInsertionStyle;
181227
+ const bullet = first.bulletInfo;
181228
+ if (bullet && !bullet.none && segments.length > 0) {
181229
+ return [first, { text: text22, style: { ...insertionStyle } }];
181230
+ }
181231
+ delete first.isParagraphBreak;
181232
+ return [{ ...first, text: text22, style: { ...insertionStyle } }];
181233
+ }
180624
181234
  function renumberRemappedParagraphs(segments) {
180625
181235
  const sequence = createAutoNumberSequence();
180626
181236
  let first = true;
@@ -180670,10 +181280,14 @@ function withoutRenderedBulletPrefix(text22, originalSegments, dedicatedMarker)
180670
181280
  }
180671
181281
  return withoutMarker;
180672
181282
  }
180673
- function continueAutoNumberedParagraph(segments, donorSegments, offset) {
181283
+ function continueListParagraph(segments, donorSegments) {
180674
181284
  const donor = donorSegments[0];
180675
181285
  const paragraphIndex = donor?.bulletInfo?.paragraphIndex;
180676
- if (segments.length === 0 || !donor?.bulletInfo?.autoNumType || typeof paragraphIndex !== "number" || !Number.isFinite(paragraphIndex)) {
181286
+ const bullet = resolveParagraphBullet(donor);
181287
+ if (segments.length === 0 || !bullet) {
181288
+ return segments;
181289
+ }
181290
+ if (bullet.isNumbered && (typeof paragraphIndex !== "number" || !Number.isFinite(paragraphIndex))) {
180677
181291
  return segments;
180678
181292
  }
180679
181293
  const [first, ...rest] = segments;
@@ -180681,13 +181295,13 @@ function continueAutoNumberedParagraph(segments, donorSegments, offset) {
180681
181295
  ...first,
180682
181296
  bulletInfo: {
180683
181297
  ...donor.bulletInfo,
180684
- paragraphIndex: paragraphIndex + offset
181298
+ ...bullet.isNumbered && typeof paragraphIndex === "number" && Number.isFinite(paragraphIndex) ? { paragraphIndex: paragraphIndex + 1 } : {}
180685
181299
  }
180686
181300
  };
180687
181301
  if (donor.paragraphLevel !== void 0) {
180688
181302
  continued.paragraphLevel = donor.paragraphLevel;
180689
181303
  }
180690
- if (isBulletMarkerSegment(donor)) {
181304
+ if (bullet.isNumbered && typeof paragraphIndex === "number" && Number.isFinite(paragraphIndex) && isBulletMarkerSegment(donor)) {
180691
181305
  const resolved = resolveParagraphBullet(continued);
180692
181306
  if (resolved) {
180693
181307
  const trailingWhitespace = donor.text.match(/\s+$/u)?.[0] ?? "";
@@ -180696,6 +181310,29 @@ function continueAutoNumberedParagraph(segments, donorSegments, offset) {
180696
181310
  }
180697
181311
  return [continued, ...rest];
180698
181312
  }
181313
+ function restoreParagraphMetadata2(from, segments) {
181314
+ if (segments.length === 0) {
181315
+ return segments;
181316
+ }
181317
+ const [first, ...rest] = segments;
181318
+ const restored = { ...first };
181319
+ delete restored.paragraphLevel;
181320
+ delete restored.paragraphProperties;
181321
+ delete restored.endParaRunProperties;
181322
+ if (!from) {
181323
+ delete restored.paragraphInsertionStyle;
181324
+ }
181325
+ if (from?.paragraphLevel !== void 0) {
181326
+ restored.paragraphLevel = from.paragraphLevel;
181327
+ }
181328
+ if (from?.paragraphProperties !== void 0) {
181329
+ restored.paragraphProperties = from.paragraphProperties;
181330
+ }
181331
+ if (from?.endParaRunProperties !== void 0) {
181332
+ restored.endParaRunProperties = from.endParaRunProperties;
181333
+ }
181334
+ return [restored, ...rest];
181335
+ }
180699
181336
  function matches(text22, paragraph) {
180700
181337
  const first = paragraph.segments[0];
180701
181338
  const marker = first && isBulletMarkerSegment(first) && (!first.bulletInfo?.autoNumType || first.bulletInfo.paragraphIndex !== void 0) ? first : void 0;
@@ -180755,6 +181392,9 @@ function isAtomicOriginalSegment(seg) {
180755
181392
  return seg.fieldType !== void 0 || seg.equationXml !== void 0;
180756
181393
  }
180757
181394
  function copySegmentMetadata(from, to) {
181395
+ if (!from) {
181396
+ return to;
181397
+ }
180758
181398
  if (from.equationXml !== void 0) {
180759
181399
  to.equationXml = from.equationXml;
180760
181400
  }
@@ -180775,26 +181415,6 @@ function copySegmentMetadata(from, to) {
180775
181415
  }
180776
181416
  return to;
180777
181417
  }
180778
- function restoreParagraphMetadata(from, segments) {
180779
- if (segments.length === 0) {
180780
- return segments;
180781
- }
180782
- const [first, ...rest] = segments;
180783
- const restored = { ...first };
180784
- delete restored.paragraphLevel;
180785
- delete restored.paragraphProperties;
180786
- delete restored.endParaRunProperties;
180787
- if (from?.paragraphLevel !== void 0) {
180788
- restored.paragraphLevel = from.paragraphLevel;
180789
- }
180790
- if (from?.paragraphProperties !== void 0) {
180791
- restored.paragraphProperties = from.paragraphProperties;
180792
- }
180793
- if (from?.endParaRunProperties !== void 0) {
180794
- restored.endParaRunProperties = from.endParaRunProperties;
180795
- }
180796
- return [restored, ...rest];
180797
- }
180798
181418
  function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180799
181419
  const fallbackStyle = { ...elementTextStyle };
180800
181420
  if (!originalSegments || originalSegments.length === 0) {
@@ -180815,7 +181435,7 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180815
181435
  const paragraphSources = alignParagraphSources(newParagraphTexts, originalParagraphs);
180816
181436
  const firstContentSeg = originalParagraphs.flatMap((paragraph) => paragraph.segments).find((s) => s.text.trim().length > 0);
180817
181437
  const baseFallbackStyle = firstContentSeg?.style ? { ...firstContentSeg.style } : fallbackStyle;
180818
- function remapParagraph(paraNewText, paraOrigSegments) {
181438
+ function remapParagraph(paraNewText, paraOrigSegments, isOriginalParagraph = true) {
180819
181439
  if (paraOrigSegments.length === 0) {
180820
181440
  return paraNewText.length > 0 ? [{ text: paraNewText, style: { ...baseFallbackStyle } }] : [{ text: "", style: { ...baseFallbackStyle } }];
180821
181441
  }
@@ -180823,12 +181443,8 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180823
181443
  const dedicatedMarker = isBulletMarkerSegment(firstSegment) && (!firstSegment.bulletInfo?.autoNumType || firstSegment.bulletInfo.paragraphIndex !== void 0) ? firstSegment : void 0;
180824
181444
  if (dedicatedMarker) {
180825
181445
  const contentSegments = paraOrigSegments.slice(1);
180826
- const contentText = withoutRenderedBulletPrefix(
180827
- paraNewText,
180828
- paraOrigSegments,
180829
- dedicatedMarker
180830
- );
180831
- const content = contentSegments.length > 0 ? remapParagraph(contentText, contentSegments) : [{ text: contentText, style: { ...dedicatedMarker.style } }];
181446
+ const contentText = isOriginalParagraph ? withoutRenderedBulletPrefix(paraNewText, paraOrigSegments, dedicatedMarker) : paraNewText;
181447
+ const content = contentSegments.length > 0 ? remapParagraph(contentText, contentSegments, isOriginalParagraph) : [{ text: contentText, style: { ...dedicatedMarker.style } }];
180832
181448
  return [dedicatedMarker, ...content];
180833
181449
  }
180834
181450
  const paragraphBulletInfo = paraOrigSegments[0].bulletInfo;
@@ -180843,7 +181459,7 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180843
181459
  const totalOrigLen = paraOrigSegments.reduce((sum, s) => sum + s.text.length, 0);
180844
181460
  if (totalOrigLen === 0) {
180845
181461
  const result = [
180846
- copySegmentMetadata(paraOrigSegments[0], {
181462
+ copySegmentMetadata(isOriginalParagraph ? paraOrigSegments[0] : void 0, {
180847
181463
  text: paraNewText,
180848
181464
  style: { ...paraOrigSegments[0].style }
180849
181465
  })
@@ -180857,7 +181473,7 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180857
181473
  let newPos = 0;
180858
181474
  for (let i2 = 0; i2 < paraOrigSegments.length; i2++) {
180859
181475
  const origSeg = paraOrigSegments[i2];
180860
- const isLastSeg = i2 === paraOrigSegments.length - 1 && !isAtomicOriginalSegment(origSeg);
181476
+ const isLastSeg = i2 === paraOrigSegments.length - 1 && (!isOriginalParagraph || !isAtomicOriginalSegment(origSeg));
180861
181477
  const origLen = origSeg.text.length;
180862
181478
  if (newPos >= paraNewText.length) {
180863
181479
  break;
@@ -180869,7 +181485,7 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180869
181485
  segText = paraNewText.slice(newPos, newPos + origLen);
180870
181486
  }
180871
181487
  if (segText.length > 0) {
180872
- const outSeg = copySegmentMetadata(origSeg, {
181488
+ const outSeg = copySegmentMetadata(isOriginalParagraph ? origSeg : void 0, {
180873
181489
  text: segText,
180874
181490
  style: { ...origSeg.style }
180875
181491
  });
@@ -180888,10 +181504,13 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180888
181504
  });
180889
181505
  }
180890
181506
  if (remapped.length === 0) {
180891
- const fallback = copySegmentMetadata(paraOrigSegments[0], {
180892
- text: paraNewText,
180893
- style: { ...paraOrigSegments[0].style }
180894
- });
181507
+ const fallback = copySegmentMetadata(
181508
+ isOriginalParagraph ? paraOrigSegments[0] : void 0,
181509
+ {
181510
+ text: paraNewText,
181511
+ style: { ...paraOrigSegments[0].style }
181512
+ }
181513
+ );
180895
181514
  if (paragraphBulletInfo) {
180896
181515
  fallback.bulletInfo = paragraphBulletInfo;
180897
181516
  }
@@ -180901,31 +181520,27 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180901
181520
  }
180902
181521
  const output = [];
180903
181522
  const lastOrigPara = originalParagraphs[originalParagraphs.length - 1]?.segments;
180904
- const lastSourceOffset = [...paragraphSources].reverse().findIndex((source) => source !== void 0);
180905
- const appendStart = Math.max(
180906
- originalParagraphs.length,
180907
- lastSourceOffset < 0 ? 0 : paragraphSources.length - lastSourceOffset
180908
- );
181523
+ let precedingParagraph;
180909
181524
  for (let pi = 0; pi < newParagraphTexts.length; pi++) {
180910
181525
  if (pi > 0) {
180911
181526
  const precedingOrigPara = originalParagraphs[paragraphSources[pi - 1] ?? -1]?.segments ?? [];
180912
181527
  const breakStyle = precedingOrigPara[0]?.style ? { ...precedingOrigPara[0].style } : { ...baseFallbackStyle };
180913
- output.push({ text: "\n", style: breakStyle, isParagraphBreak: true });
181528
+ const terminator = originalParagraphs[paragraphSources[pi - 1] ?? -1]?.terminator;
181529
+ output.push(
181530
+ terminator?.paragraphInsertionStyle && newParagraphTexts[pi - 1] === "" ? { ...terminator, text: "\n", isParagraphBreak: true } : { text: "\n", style: breakStyle, isParagraphBreak: true }
181531
+ );
180914
181532
  }
180915
181533
  const originalParagraph = originalParagraphs[paragraphSources[pi] ?? -1];
180916
- const origPara = originalParagraph?.segments ?? lastOrigPara ?? [];
180917
- let paraSegments = restoreParagraphMetadata(
181534
+ const origPara = originalParagraph?.segments ?? precedingParagraph ?? lastOrigPara ?? [];
181535
+ let paraSegments = restoreParagraphMetadata2(
180918
181536
  originalParagraph?.segments[0] ?? originalParagraph?.terminator,
180919
- remapParagraph(newParagraphTexts[pi], origPara)
181537
+ (originalParagraph && remapEmptyParagraph(newParagraphTexts[pi], origPara, originalParagraph.terminator)) ?? remapParagraph(newParagraphTexts[pi], origPara, originalParagraph !== void 0)
180920
181538
  );
180921
- if (!originalParagraph && pi >= appendStart) {
180922
- paraSegments = continueAutoNumberedParagraph(
180923
- paraSegments,
180924
- lastOrigPara ?? [],
180925
- pi - originalParagraphs.length + 1
180926
- );
181539
+ if (!originalParagraph && precedingParagraph) {
181540
+ paraSegments = continueListParagraph(paraSegments, precedingParagraph);
180927
181541
  }
180928
181542
  output.push(...paraSegments);
181543
+ precedingParagraph = paraSegments;
180929
181544
  }
180930
181545
  if (paragraphSources.some((source, index) => source !== void 0 && source !== index)) {
180931
181546
  return renumberRemappedParagraphs(output);
@@ -181843,6 +182458,9 @@ function buildSegmentAttrs(seg) {
181843
182458
  if (seg.endParaRunProperties) {
181844
182459
  a.pr = JSON.stringify(seg.endParaRunProperties);
181845
182460
  }
182461
+ if (seg.paragraphInsertionStyle) {
182462
+ a.pi = JSON.stringify(seg.paragraphInsertionStyle);
182463
+ }
181846
182464
  if (typeof seg.fieldType === "string") {
181847
182465
  a.ft = seg.fieldType;
181848
182466
  }
@@ -181949,6 +182567,12 @@ function decodeDelta(delta) {
181949
182567
  } catch {
181950
182568
  }
181951
182569
  }
182570
+ if (a.pi) {
182571
+ try {
182572
+ seg.paragraphInsertionStyle = JSON.parse(a.pi);
182573
+ } catch {
182574
+ }
182575
+ }
181952
182576
  if (a.ft) {
181953
182577
  seg.fieldType = a.ft;
181954
182578
  }
@@ -182137,6 +182761,7 @@ var COMPLEX_ELEMENT_FIELDS = {
182137
182761
  children: "_ch",
182138
182762
  paragraphIndents: "_pi",
182139
182763
  rawXml: "_rx",
182764
+ inheritedTransform: "_it",
182140
182765
  extLstXml: "_elx",
182141
182766
  actionClick: "_ac",
182142
182767
  actionHover: "_av",
@@ -190139,86 +190764,6 @@ function projectDrawingShapes(elementId, shapes, viewBox, palette, style) {
190139
190764
  function styleShadowFilter(style) {
190140
190765
  return styleShadow(style);
190141
190766
  }
190142
- function textFontSizePxToPt(fontSizePx2) {
190143
- return Math.round(fontSizePx2 * (72 / 96) * 100) / 100;
190144
- }
190145
- function textFontSizePtToPx(fontSizePt) {
190146
- return fontSizePt * (96 / 72);
190147
- }
190148
- var COMMON_FONT_FAMILIES = [
190149
- "Abadi",
190150
- "Aptos",
190151
- "Aptos Display",
190152
- "Arial",
190153
- "Arial Black",
190154
- "Arial Narrow",
190155
- "Bahnschrift",
190156
- "Book Antiqua",
190157
- "Bookman Old Style",
190158
- "Calibri",
190159
- "Calibri Light",
190160
- "Cambria",
190161
- "Candara",
190162
- "Century Gothic",
190163
- "Comic Sans MS",
190164
- "Consolas",
190165
- "Corbel",
190166
- "Courier New",
190167
- "Franklin Gothic Book",
190168
- "Franklin Gothic Medium",
190169
- "Garamond",
190170
- "Georgia",
190171
- "Gill Sans MT",
190172
- "Helvetica",
190173
- "Impact",
190174
- "Inter",
190175
- "Lucida Console",
190176
- "Lucida Sans Unicode",
190177
- "Microsoft Sans Serif",
190178
- "Montserrat",
190179
- "Noto Sans",
190180
- "Open Sans",
190181
- "Palatino Linotype",
190182
- "Poppins",
190183
- "Roboto",
190184
- "Rockwell",
190185
- "Segoe UI",
190186
- "Source Sans Pro",
190187
- "Tahoma",
190188
- "Times New Roman",
190189
- "Trebuchet MS",
190190
- "Tw Cen MT",
190191
- "Verdana"
190192
- ];
190193
- var COMMON_FONT_SIZES = [
190194
- 8,
190195
- 9,
190196
- 10,
190197
- 11,
190198
- 12,
190199
- 14,
190200
- 16,
190201
- 18,
190202
- 20,
190203
- 24,
190204
- 28,
190205
- 32,
190206
- 36,
190207
- 40,
190208
- 44,
190209
- 48,
190210
- 54,
190211
- 60,
190212
- 72,
190213
- 96
190214
- ];
190215
- var CHARACTER_SPACING_OPTIONS = [
190216
- { label: "Very Tight", i18nKey: "pptx.text.characterSpacingVeryTight", value: -150 },
190217
- { label: "Tight", i18nKey: "pptx.text.characterSpacingTight", value: -75 },
190218
- { label: "Normal", i18nKey: "pptx.text.characterSpacingNormal", value: 0 },
190219
- { label: "Loose", i18nKey: "pptx.text.characterSpacingLoose", value: 75 },
190220
- { label: "Very Loose", i18nKey: "pptx.text.characterSpacingVeryLoose", value: 150 }
190221
- ];
190222
190767
  var GOOGLE_FONTS_CSS2_BASE = "https://fonts.googleapis.com/css2";
190223
190768
  var GOOGLE_WEBFONT_AXIS = "ital,wght@0,400;0,700;1,400;1,700";
190224
190769
  var DISPLAY_PARAM = "display=swap";
@@ -192429,7 +192974,7 @@ function isBulletMarker(segment) {
192429
192974
  const marker = bullet.char ? `${bullet.char} ` : bullet.imageRelId || bullet.imageDataUrl ? "\u{1F4CE} " : "\u2022 ";
192430
192975
  return segment.text === marker;
192431
192976
  }
192432
- function isParagraphSeparator2(segment) {
192977
+ function isParagraphSeparator(segment) {
192433
192978
  return Boolean(segment.isParagraphBreak) || segment.text === "\n" && !segment.isLineBreak;
192434
192979
  }
192435
192980
  function groupElementParagraphs(element) {
@@ -192443,7 +192988,7 @@ function groupElementParagraphs(element) {
192443
192988
  }
192444
192989
  const groups = [{ content: [] }];
192445
192990
  for (const segment of segments) {
192446
- if (isParagraphSeparator2(segment)) {
192991
+ if (isParagraphSeparator(segment)) {
192447
192992
  groups.push({ content: [] });
192448
192993
  continue;
192449
192994
  }
@@ -192535,8 +193080,37 @@ function buildElementClipboardPayload(element, isTemplate) {
192535
193080
  function cloneElementForPaste(element, options = {}) {
192536
193081
  const clone3 = structuredClone(element);
192537
193082
  const intoTemplate = options.intoTemplate ?? false;
192538
- clone3.id = makeCloneId(intoTemplate, element.id);
192539
- reassignDescendantIds(clone3, () => makeCloneId(intoTemplate, element.id));
193083
+ const modelIds = /* @__PURE__ */ new Map();
193084
+ const nativeIds = /* @__PURE__ */ new Map();
193085
+ const mintId = (node) => {
193086
+ const id = makeCloneId(intoTemplate, element.id);
193087
+ modelIds.set(node.id, id);
193088
+ if (node.shapeId !== void 0) {
193089
+ nativeIds.set(node.shapeId, id);
193090
+ }
193091
+ delete node.shapeId;
193092
+ return id;
193093
+ };
193094
+ clone3.id = mintId(clone3);
193095
+ reassignDescendantIds(clone3, mintId);
193096
+ const remapConnections = (node) => {
193097
+ if (node.type === "group") {
193098
+ node.children.forEach(remapConnections);
193099
+ }
193100
+ if (node.type !== "connector") {
193101
+ return;
193102
+ }
193103
+ for (const ref of [
193104
+ node.shapeStyle?.connectorStartConnection,
193105
+ node.shapeStyle?.connectorEndConnection
193106
+ ]) {
193107
+ if (!ref?.shapeId) {
193108
+ continue;
193109
+ }
193110
+ ref.shapeId = modelIds.get(ref.shapeId) ?? nativeIds.get(ref.shapeId) ?? ref.shapeId;
193111
+ }
193112
+ };
193113
+ remapConnections(clone3);
192540
193114
  clone3.x += options.offsetX ?? PASTE_OFFSET_PX;
192541
193115
  clone3.y += options.offsetY ?? PASTE_OFFSET_PX;
192542
193116
  return clone3;
@@ -192777,6 +193351,7 @@ var GUARD_DEFAULTS = {
192777
193351
  canEdit: true,
192778
193352
  isPresenting: false,
192779
193353
  hasSelection: false,
193354
+ canPaste: true,
192780
193355
  isEditingText: false,
192781
193356
  isDrawing: false,
192782
193357
  isTextInputTarget: false
@@ -192834,6 +193409,9 @@ function mapEditorKey(input, guard = {}) {
192834
193409
  if (mod && !alt) {
192835
193410
  const chord2 = resolveChord(key2, Boolean(input.shiftKey), state.hasSelection);
192836
193411
  if (chord2) {
193412
+ if (chord2.action === "paste" && state.canPaste === false) {
193413
+ return NO_ACTION;
193414
+ }
192837
193415
  return chord2;
192838
193416
  }
192839
193417
  }
@@ -196144,6 +196722,12 @@ var COMMON_FONTS = [
196144
196722
  "Tw Cen MT",
196145
196723
  "Verdana"
196146
196724
  ];
196725
+ function prepareElementForInsertion(element, target) {
196726
+ if (!target.canEdit || target.mode !== "edit" || !target.hasActiveSlide || target.editTemplateMode) {
196727
+ return void 0;
196728
+ }
196729
+ return cloneElementForPaste(element, { offsetX: 0, offsetY: 0 });
196730
+ }
196147
196731
  function isHeaderFooterDateTextVisible(draft) {
196148
196732
  return Boolean(draft.hasDateTime) && !draft.dateTimeAuto;
196149
196733
  }
@@ -199873,10 +200457,15 @@ function resolveSlideSizeRescaleTransform(oldSize, newSize, mode) {
199873
200457
  };
199874
200458
  }
199875
200459
  function scaleTextSegment(segment, scale2) {
199876
- if (typeof segment.style.fontSize !== "number") {
200460
+ const insertion = segment.paragraphInsertionStyle;
200461
+ if (typeof segment.style.fontSize !== "number" && typeof insertion?.fontSize !== "number") {
199877
200462
  return segment;
199878
200463
  }
199879
- return { ...segment, style: { ...segment.style, fontSize: segment.style.fontSize * scale2 } };
200464
+ return {
200465
+ ...segment,
200466
+ ...typeof segment.style.fontSize === "number" ? { style: { ...segment.style, fontSize: segment.style.fontSize * scale2 } } : {},
200467
+ ...typeof insertion?.fontSize === "number" ? { paragraphInsertionStyle: { ...insertion, fontSize: insertion.fontSize * scale2 } } : {}
200468
+ };
199880
200469
  }
199881
200470
  function scaleFontSizesDeep(element, scale2) {
199882
200471
  let next = element;
@@ -200689,6 +201278,50 @@ function wrapForeignObjectSvg(bodyMarkup, tile) {
200689
201278
  const { viewBoxX, viewBoxY, viewBoxWidth, viewBoxHeight, outputWidth, outputHeight } = tile;
200690
201279
  return `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="${outputWidth}" height="${outputHeight}" viewBox="${viewBoxX} ${viewBoxY} ${viewBoxWidth} ${viewBoxHeight}">${bodyMarkup}</svg>`;
200691
201280
  }
201281
+ var DEFAULTS2 = {
201282
+ fitPadding: { horizontal: 0, vertical: 0 },
201283
+ maxFitScale: null
201284
+ };
201285
+ function validPadding(value, fallback) {
201286
+ return Number.isFinite(value) && value >= 0 ? value : fallback;
201287
+ }
201288
+ function resolveViewportFitOptions(options = {}, defaults = DEFAULTS2) {
201289
+ const base = typeof defaults.fitPadding === "number" ? { horizontal: defaults.fitPadding, vertical: defaults.fitPadding } : defaults.fitPadding;
201290
+ const padding = options.fitPadding ?? base;
201291
+ const horizontal = typeof padding === "number" ? padding : padding.horizontal;
201292
+ const vertical = typeof padding === "number" ? padding : padding.vertical;
201293
+ const cap = options.maxFitScale;
201294
+ return {
201295
+ fitPadding: {
201296
+ horizontal: validPadding(horizontal, base.horizontal),
201297
+ vertical: validPadding(vertical, base.vertical)
201298
+ },
201299
+ maxFitScale: cap === null ? null : typeof cap === "number" && Number.isFinite(cap) && cap > 0 ? cap : defaults.maxFitScale
201300
+ };
201301
+ }
201302
+ function calculateViewportFit(input, defaults = DEFAULTS2) {
201303
+ const { fitPadding, maxFitScale } = resolveViewportFitOptions(input, defaults);
201304
+ const availableWidth = Math.max(
201305
+ 0,
201306
+ validPadding(input.viewportWidth, 0) - 2 * fitPadding.horizontal - validPadding(input.horizontalGutter ?? 0, 0)
201307
+ );
201308
+ const availableHeight = Math.max(
201309
+ 0,
201310
+ validPadding(input.viewportHeight, 0) - 2 * fitPadding.vertical - validPadding(input.verticalGutter ?? 0, 0)
201311
+ );
201312
+ const fallback = typeof input.fallbackScale === "number" && Number.isFinite(input.fallbackScale) && input.fallbackScale > 0 ? input.fallbackScale : 1;
201313
+ const validCanvas = Number.isFinite(input.canvasWidth) && input.canvasWidth > 0 && Number.isFinite(input.canvasHeight) && input.canvasHeight > 0;
201314
+ const scale2 = availableWidth > 0 && availableHeight > 0 && validCanvas ? Math.min(
201315
+ availableWidth / input.canvasWidth,
201316
+ availableHeight / input.canvasHeight,
201317
+ maxFitScale ?? Number.POSITIVE_INFINITY
201318
+ ) : fallback;
201319
+ return {
201320
+ scale: Number.isFinite(scale2) && scale2 > 0 ? scale2 : fallback,
201321
+ availableWidth,
201322
+ availableHeight
201323
+ };
201324
+ }
200692
201325
  var FALLBACK_DOWNLOAD_NAME = "presentation.pptx";
200693
201326
  var REVOKE_DELAY_MS = 200;
200694
201327
  var OPEN_REVOKE_DELAY_MS = 6e4;
@@ -203085,4 +203718,4 @@ async function rasterResultToPngBlob(result) {
203085
203718
  * `<p:extLst>` (optional)
203086
203719
  */
203087
203720
 
203088
- 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, 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, 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, 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, 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, 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, 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 };
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 };