pptx-react-viewer 3.16.6 → 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 (152) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +25 -3
  3. package/dist/{AiChatPanel-6IBPORZC.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-WDNBYHX7.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-MRPRTJWY.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-EMOWMHHK.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-J3GJEGDJ.mjs → Bar3DChartScene-HWIFFGI3.mjs} +1 -1
  16. package/dist/{Bar3DChartScene-J3GJEGDJ.mjs.br → Bar3DChartScene-HWIFFGI3.mjs.br} +0 -0
  17. package/dist/Bar3DChartScene-HWIFFGI3.mjs.gz +0 -0
  18. package/dist/{Bar3DChartScene-THALZEYK.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-Y7MODOK2.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-B26WZNO3.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-XM3JN7M6.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-27GN3D3U.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-URSRUABE.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-4GP2B3PY.mjs → PieChart3DScene-WD5B6NP3.mjs} +1 -1
  37. package/dist/{PieChart3DScene-4GP2B3PY.mjs.br → 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-4OQNB3JY.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-YJ4EYMWQ.mjs → SurfaceChart3DScene-JZGU6BBD.mjs} +1 -1
  45. package/dist/{SurfaceChart3DScene-YJ4EYMWQ.mjs.br → 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-U2H7CQ34.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-TTCWWF47.js → chunk-3UGVURWU.js} +555 -499
  53. package/dist/chunk-3UGVURWU.js.br +0 -0
  54. package/dist/chunk-3UGVURWU.js.gz +0 -0
  55. package/dist/{chunk-VRMITIZZ.js → chunk-4SPZ5IZN.js} +1239 -506
  56. package/dist/chunk-4SPZ5IZN.js.br +0 -0
  57. package/dist/chunk-4SPZ5IZN.js.gz +0 -0
  58. package/dist/{chunk-LTQRC4WB.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-YUIXPWFT.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-QLZHTIH6.mjs → chunk-7YOA4HNP.mjs} +106 -50
  65. package/dist/chunk-7YOA4HNP.mjs.br +0 -0
  66. package/dist/chunk-7YOA4HNP.mjs.gz +0 -0
  67. package/dist/{chunk-RWVMSJ7C.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-C7H7NM2W.js → chunk-KVXB22D3.js} +13 -9
  71. package/dist/chunk-KVXB22D3.js.br +0 -0
  72. package/dist/chunk-KVXB22D3.js.gz +0 -0
  73. package/dist/{chunk-BJL5MJ7A.js → chunk-NJ3WCYYG.js} +169 -169
  74. package/dist/chunk-NJ3WCYYG.js.br +0 -0
  75. package/dist/{chunk-BJL5MJ7A.js.gz → chunk-NJ3WCYYG.js.gz} +0 -0
  76. package/dist/{chunk-PO2PYVHF.mjs → chunk-QTGCOL5H.mjs} +1233 -507
  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-6IBPORZC.mjs.br +0 -0
  110. package/dist/AiChatPanel-6IBPORZC.mjs.gz +0 -0
  111. package/dist/AiChatPanel-WDNBYHX7.js.br +0 -0
  112. package/dist/AiChatPanel-WDNBYHX7.js.gz +0 -0
  113. package/dist/Area3DChartScene-EMOWMHHK.mjs.br +0 -0
  114. package/dist/Area3DChartScene-EMOWMHHK.mjs.gz +0 -0
  115. package/dist/Area3DChartScene-MRPRTJWY.js.br +0 -0
  116. package/dist/Area3DChartScene-MRPRTJWY.js.gz +0 -0
  117. package/dist/Bar3DChartScene-J3GJEGDJ.mjs.gz +0 -0
  118. package/dist/Bar3DChartScene-THALZEYK.js.br +0 -0
  119. package/dist/Bar3DChartScene-THALZEYK.js.gz +0 -0
  120. package/dist/Line3DChartScene-B26WZNO3.js.br +0 -0
  121. package/dist/Line3DChartScene-B26WZNO3.js.gz +0 -0
  122. package/dist/Line3DChartScene-Y7MODOK2.mjs.br +0 -0
  123. package/dist/Line3DChartScene-Y7MODOK2.mjs.gz +0 -0
  124. package/dist/Model3DScene-27GN3D3U.js.br +0 -0
  125. package/dist/Model3DScene-27GN3D3U.js.gz +0 -0
  126. package/dist/Model3DScene-XM3JN7M6.mjs.br +0 -0
  127. package/dist/Model3DScene-XM3JN7M6.mjs.gz +0 -0
  128. package/dist/PieChart3DScene-4GP2B3PY.mjs.gz +0 -0
  129. package/dist/PieChart3DScene-URSRUABE.js.br +0 -0
  130. package/dist/PieChart3DScene-URSRUABE.js.gz +0 -0
  131. package/dist/SurfaceChart3DScene-4OQNB3JY.js.br +0 -0
  132. package/dist/SurfaceChart3DScene-4OQNB3JY.js.gz +0 -0
  133. package/dist/SurfaceChart3DScene-YJ4EYMWQ.mjs.gz +0 -0
  134. package/dist/chunk-BJL5MJ7A.js.br +0 -0
  135. package/dist/chunk-C7H7NM2W.js.br +0 -0
  136. package/dist/chunk-C7H7NM2W.js.gz +0 -0
  137. package/dist/chunk-LTQRC4WB.js.br +0 -0
  138. package/dist/chunk-LTQRC4WB.js.gz +0 -0
  139. package/dist/chunk-PO2PYVHF.mjs.br +0 -0
  140. package/dist/chunk-PO2PYVHF.mjs.gz +0 -0
  141. package/dist/chunk-QLZHTIH6.mjs.br +0 -0
  142. package/dist/chunk-QLZHTIH6.mjs.gz +0 -0
  143. package/dist/chunk-RWVMSJ7C.mjs.br +0 -0
  144. package/dist/chunk-RWVMSJ7C.mjs.gz +0 -0
  145. package/dist/chunk-TTCWWF47.js.br +0 -0
  146. package/dist/chunk-TTCWWF47.js.gz +0 -0
  147. package/dist/chunk-U2H7CQ34.mjs.br +0 -0
  148. package/dist/chunk-U2H7CQ34.mjs.gz +0 -0
  149. package/dist/chunk-VRMITIZZ.js.br +0 -0
  150. package/dist/chunk-VRMITIZZ.js.gz +0 -0
  151. package/dist/chunk-YUIXPWFT.mjs.br +0 -0
  152. package/dist/chunk-YUIXPWFT.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",
@@ -34232,10 +34233,10 @@ function clampByRules(value, rules, type) {
34232
34233
  }
34233
34234
  function ratioConstraint(constraints, types, fallback, rules) {
34234
34235
  for (const type of types) {
34235
- const matches = (constraints ?? []).filter((constraint) => constraint.type === type);
34236
+ const matches2 = (constraints ?? []).filter((constraint) => constraint.type === type);
34236
34237
  const ordered4 = [
34237
- ...matches.filter((constraint) => constraint.for === "ch"),
34238
- ...matches.filter((constraint) => constraint.for !== "ch")
34238
+ ...matches2.filter((constraint) => constraint.for === "ch"),
34239
+ ...matches2.filter((constraint) => constraint.for !== "ch")
34239
34240
  ];
34240
34241
  for (const constraint of ordered4) {
34241
34242
  const ratio = constraintRatio(constraint);
@@ -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;
@@ -40437,14 +40438,14 @@ var init_smartart_hierarchy_composite_child = __esm({
40437
40438
  });
40438
40439
  function findByReference(constraints, type, referenceType, preferredName) {
40439
40440
  const list = constraints ?? [];
40440
- const matches = (c) => c.type === type && c.referenceType === referenceType && typeof c.factor === "number";
40441
+ const matches2 = (c) => c.type === type && c.referenceType === referenceType && typeof c.factor === "number";
40441
40442
  if (preferredName !== void 0) {
40442
- const named = list.find((c) => matches(c) && c.forName === preferredName);
40443
+ const named = list.find((c) => matches2(c) && c.forName === preferredName);
40443
40444
  if (named) {
40444
40445
  return named.factor;
40445
40446
  }
40446
40447
  }
40447
- return list.find(matches)?.factor;
40448
+ return list.find(matches2)?.factor;
40448
40449
  }
40449
40450
  function findDirectAspectRatio(constraints, preferredName) {
40450
40451
  const hRefW = findByReference(constraints, "h", "w", preferredName);
@@ -43112,14 +43113,14 @@ function findDrawingShapeIndex(shapes, nodes, nodeId) {
43112
43113
  const node = nodes.find((n) => n.id === nodeId);
43113
43114
  if (node?.text) {
43114
43115
  const text22 = node.text.trim();
43115
- const matches = [];
43116
+ const matches2 = [];
43116
43117
  for (let i2 = 0; i2 < shapes.length; i2++) {
43117
43118
  if (shapes[i2].text?.trim() === text22) {
43118
- matches.push(i2);
43119
+ matches2.push(i2);
43119
43120
  }
43120
43121
  }
43121
- if (matches.length === 1) {
43122
- return matches[0];
43122
+ if (matches2.length === 1) {
43123
+ return matches2[0];
43123
43124
  }
43124
43125
  }
43125
43126
  return -1;
@@ -43319,14 +43320,14 @@ function findShapeIndexForNode(shapes, nodes, nodeId) {
43319
43320
  const node = nodes.find((n) => n.id === nodeId);
43320
43321
  if (node?.text) {
43321
43322
  const text22 = node.text.trim();
43322
- const matches = [];
43323
+ const matches2 = [];
43323
43324
  for (let i2 = 0; i2 < shapes.length; i2++) {
43324
43325
  if (shapes[i2].text?.trim() === text22) {
43325
- matches.push(i2);
43326
+ matches2.push(i2);
43326
43327
  }
43327
43328
  }
43328
- if (matches.length === 1) {
43329
- return matches[0];
43329
+ if (matches2.length === 1) {
43330
+ return matches2[0];
43330
43331
  }
43331
43332
  }
43332
43333
  return -1;
@@ -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;
@@ -92079,6 +92222,10 @@ function computeUniformSegmentOverrides(textStyle, textSegments) {
92079
92222
  if (nextValue === void 0) {
92080
92223
  return;
92081
92224
  }
92225
+ const baseline = textStyle?.inheritedRunStyle;
92226
+ if (baseline && nextValue === (textStyle?.authoredRunStyle?.[styleKey] ?? baseline[styleKey])) {
92227
+ return;
92228
+ }
92082
92229
  const firstValue = textSegments[0]?.style?.[styleKey];
92083
92230
  const isUniform = textSegments.every((segment) => segment.style?.[styleKey] === firstValue);
92084
92231
  if (isUniform) {
@@ -96980,15 +97127,19 @@ var PptxHandlerRuntime13;
96980
97127
  var init_PptxHandlerRuntimeSaveParagraphs = __esm({
96981
97128
  "src/core/core/runtime/PptxHandlerRuntimeSaveParagraphs.ts"() {
96982
97129
  init_auto_number_format();
97130
+ init_paragraph_insertion_style();
96983
97131
  init_PptxHandlerRuntimeSaveParagraphHelpers();
96984
97132
  init_PptxHandlerRuntimeSaveRunProperties();
96985
97133
  init_run_scoped_text_style();
96986
97134
  PptxHandlerRuntime13 = class extends PptxHandlerRuntime12 {
96987
97135
  isRenderedBulletMarker(segment) {
96988
97136
  const bullet = segment.bulletInfo;
96989
- if (!bullet) {
97137
+ if (!bullet || bullet.none) {
96990
97138
  return false;
96991
97139
  }
97140
+ if (segment.text === "" && (bullet.imageRelId || bullet.imageDataUrl) && !segment.fieldType && !segment.equationXml && segment.rubyText === void 0) {
97141
+ return true;
97142
+ }
96992
97143
  if (bullet.autoNumType) {
96993
97144
  if (bullet.paragraphIndex === void 0) {
96994
97145
  return false;
@@ -97122,6 +97273,11 @@ var init_PptxHandlerRuntimeSaveParagraphs = __esm({
97122
97273
  if (segment.endParaRunProperties) {
97123
97274
  currentEndParaRunProperties = segment.endParaRunProperties;
97124
97275
  }
97276
+ currentEndParaRunProperties = updateEndParagraphProperties(
97277
+ currentEndParaRunProperties,
97278
+ segment.paragraphInsertionStyle,
97279
+ (style) => this.createRunPropertiesFromTextStyle(style, resolveHyperlinkRelationshipId)
97280
+ );
97125
97281
  if (segment.paragraphProperties) {
97126
97282
  currentParagraphProperties = segment.paragraphProperties;
97127
97283
  }
@@ -97152,7 +97308,10 @@ var init_PptxHandlerRuntimeSaveParagraphs = __esm({
97152
97308
  currentRuns.push(eqNode);
97153
97309
  return;
97154
97310
  }
97155
- 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
+ }
97156
97315
  const lineParts = segmentText2.split("\n");
97157
97316
  const isSplitProduct = lineParts.length > 1;
97158
97317
  lineParts.forEach((linePart, lineIndex) => {
@@ -97184,7 +97343,7 @@ var init_PptxHandlerRuntimeSaveParagraphs = __esm({
97184
97343
  }
97185
97344
  });
97186
97345
  });
97187
- if (currentRuns.length > 0 || paragraphs.length === 0) {
97346
+ if (currentRuns.length > 0 || paragraphs.length === 0 || capturedParagraphMeta) {
97188
97347
  pushParagraph();
97189
97348
  }
97190
97349
  return paragraphs;
@@ -97416,17 +97575,20 @@ function classifyGroupChildTag(elementType, xml) {
97416
97575
  function cloneXmlNode(node) {
97417
97576
  return JSON.parse(JSON.stringify(node));
97418
97577
  }
97419
- function buildGroupNonVisualXml(rawGroupXml, modelName, fallbackName) {
97578
+ function buildGroupNonVisualXml(rawGroupXml, modelName, fallbackName, modelShapeId) {
97420
97579
  const rawNv = rawGroupXml?.["p:nvGrpSpPr"];
97421
97580
  if (!rawNv) {
97422
97581
  return {
97423
- "p:cNvPr": { "@_id": "0", "@_name": modelName ?? fallbackName },
97582
+ "p:cNvPr": { "@_id": modelShapeId ?? "0", "@_name": modelName ?? fallbackName },
97424
97583
  "p:cNvGrpSpPr": {},
97425
97584
  "p:nvPr": {}
97426
97585
  };
97427
97586
  }
97428
97587
  const nv = cloneXmlNode(rawNv);
97429
97588
  const cNvPr = nv["p:cNvPr"] ?? {};
97589
+ if (modelShapeId !== void 0) {
97590
+ cNvPr["@_id"] = modelShapeId;
97591
+ }
97430
97592
  if (typeof cNvPr["@_id"] !== "string" || cNvPr["@_id"].length === 0) {
97431
97593
  cNvPr["@_id"] = "0";
97432
97594
  }
@@ -97965,7 +98127,10 @@ var init_PptxHandlerRuntimeSaveShapeXml = __esm({
97965
98127
  */
97966
98128
  buildGroupShapeXml(group2, ctx, ownEmuOverride) {
97967
98129
  if (group2.rawXml && group2.children.length === 0) {
97968
- return group2.rawXml;
98130
+ return {
98131
+ ...group2.rawXml,
98132
+ "p:nvGrpSpPr": buildGroupNonVisualXml(group2.rawXml, group2.name, group2.id, group2.shapeId)
98133
+ };
97969
98134
  }
97970
98135
  const EMU = _PptxHandlerRuntime.EMU_PER_PX;
97971
98136
  const rawGroupXml = group2.rawXml;
@@ -97973,7 +98138,7 @@ var init_PptxHandlerRuntimeSaveShapeXml = __esm({
97973
98138
  const xfrm = buildGroupTransformXml(group2, EMU, ownEmuOverride, rewrap);
97974
98139
  const childSpace = group2;
97975
98140
  const grpXml2 = {
97976
- "p:nvGrpSpPr": buildGroupNonVisualXml(rawGroupXml, group2.name, group2.id),
98141
+ "p:nvGrpSpPr": buildGroupNonVisualXml(rawGroupXml, group2.name, group2.id, group2.shapeId),
97977
98142
  "p:grpSpPr": buildGroupPropertiesXml(rawGroupXml, xfrm)
97978
98143
  };
97979
98144
  const rawExtLst = rawGroupXml?.["p:extLst"];
@@ -106808,6 +106973,7 @@ var init_template_group_node = __esm({
106808
106973
  var PptxHandlerRuntime41;
106809
106974
  var init_PptxHandlerRuntimeSaveElementWriter = __esm({
106810
106975
  "src/core/core/runtime/PptxHandlerRuntimeSaveElementWriter.ts"() {
106976
+ init_services();
106811
106977
  init_types();
106812
106978
  init_chart_color_style_writer();
106813
106979
  init_chart_cx_generator();
@@ -107340,6 +107506,9 @@ var init_PptxHandlerRuntimeSaveElementWriter = __esm({
107340
107506
  );
107341
107507
  }
107342
107508
  this.applyDataSerialization(shape, el, ctx.slide.id);
107509
+ if (ctx.connectorShapeIds) {
107510
+ applyConnectorShapeIds(shape, el, ctx.connectorShapeIds);
107511
+ }
107343
107512
  this.serializeElementActions(shape, el, ctx.resolveHyperlinkRelationshipId);
107344
107513
  this.serializeShapeLocks(shape, el);
107345
107514
  this.applyHiddenToCnvPr(shape, el);
@@ -108278,6 +108447,7 @@ var init_PptxHandlerRuntimeSaveSlideWriter = __esm({
108278
108447
  zooms: []
108279
108448
  };
108280
108449
  const ctx = {
108450
+ connectorShapeIds: resolveConnectorShapeIds(slide.elements, this.maxCnvPrId(spTree)),
108281
108451
  slide,
108282
108452
  slideRelationships,
108283
108453
  slideRelationshipRegistry,
@@ -109075,7 +109245,7 @@ function asObjects3(value) {
109075
109245
  return isXmlObject9(value) ? [value] : [];
109076
109246
  }
109077
109247
  function rememberTemplateSpTreePositions(runtime, partPath, spTree, positionOf) {
109078
- const positions = /* @__PURE__ */ new Map();
109248
+ const positions2 = /* @__PURE__ */ new Map();
109079
109249
  for (const [key2, value] of Object.entries(spTree)) {
109080
109250
  if (!SHAPE_TREE_ELEMENT_TAGS.has(key2) && key2 !== ALTERNATE_CONTENT_TAG3) {
109081
109251
  continue;
@@ -109083,7 +109253,7 @@ function rememberTemplateSpTreePositions(runtime, partPath, spTree, positionOf)
109083
109253
  for (const node of asObjects3(value)) {
109084
109254
  const position2 = positionOf(node);
109085
109255
  if (position2 !== void 0) {
109086
- positions.set(node, position2);
109256
+ positions2.set(node, position2);
109087
109257
  }
109088
109258
  }
109089
109259
  }
@@ -109092,7 +109262,7 @@ function rememberTemplateSpTreePositions(runtime, partPath, spTree, positionOf)
109092
109262
  byPart = /* @__PURE__ */ new Map();
109093
109263
  positionsByRuntime.set(runtime, byPart);
109094
109264
  }
109095
- byPart.set(partPath, positions);
109265
+ byPart.set(partPath, positions2);
109096
109266
  }
109097
109267
  function withReplacedChild(container, tag, indexInType, replacement) {
109098
109268
  const existing = container[tag];
@@ -109121,17 +109291,17 @@ function orderContainer(container, plan, getLocalName2) {
109121
109291
  working = withReplacedChild(working, entry2.tag, entry2.indexInType, ordered4);
109122
109292
  }
109123
109293
  }
109124
- const positions = /* @__PURE__ */ new Map();
109294
+ const positions2 = /* @__PURE__ */ new Map();
109125
109295
  plan.forEach((entry2, position2) => {
109126
109296
  const node = asObjects3(working[entry2.tag])[entry2.indexInType];
109127
- if (node && !positions.has(node)) {
109128
- positions.set(node, position2);
109297
+ if (node && !positions2.has(node)) {
109298
+ positions2.set(node, position2);
109129
109299
  }
109130
109300
  });
109131
- if (positions.size === 0) {
109301
+ if (positions2.size === 0) {
109132
109302
  return working;
109133
109303
  }
109134
- return orderShapeTreeChildren(working, (node) => positions.get(node), getLocalName2);
109304
+ return orderShapeTreeChildren(working, (node) => positions2.get(node), getLocalName2);
109135
109305
  }
109136
109306
  function orderedTemplatePartXml(options) {
109137
109307
  const {
@@ -109183,6 +109353,7 @@ var shapeIdValidator2;
109183
109353
  var PptxHandlerRuntime46;
109184
109354
  var init_PptxHandlerRuntimeSaveMasterElements = __esm({
109185
109355
  "src/core/core/runtime/PptxHandlerRuntimeSaveMasterElements.ts"() {
109356
+ init_services();
109186
109357
  init_builders();
109187
109358
  init_auxiliary_master_node_cache();
109188
109359
  init_master_part_element_signature();
@@ -109272,6 +109443,7 @@ var init_PptxHandlerRuntimeSaveMasterElements = __esm({
109272
109443
  elements: elements2
109273
109444
  };
109274
109445
  const ctx = {
109446
+ connectorShapeIds: resolveConnectorShapeIds(elements2, this.maxCnvPrId(spTree)),
109275
109447
  slide,
109276
109448
  slideRelationships: relationships,
109277
109449
  slideRelationshipRegistry: relationshipRegistry,
@@ -111189,13 +111361,13 @@ var init_PptxHandlerRuntimePlaceholderLookup = __esm({
111189
111361
  findPlaceholderInShapeTree(spTree, expected) {
111190
111362
  return this.scanPlaceholderBuckets(spTree, (info) => this.placeholderMatches(expected, info));
111191
111363
  }
111192
- scanPlaceholderBuckets(spTree, matches) {
111364
+ scanPlaceholderBuckets(spTree, matches2) {
111193
111365
  if (!spTree) {
111194
111366
  return void 0;
111195
111367
  }
111196
111368
  for (const { bucket, nvKey, contextKey } of PLACEHOLDER_BUCKETS) {
111197
111369
  for (const node of this.ensureArray(spTree[bucket])) {
111198
- if (matches(this.extractPlaceholderInfo(xmlPath(node, nvKey, "p:nvPr")))) {
111370
+ if (matches2(this.extractPlaceholderInfo(xmlPath(node, nvKey, "p:nvPr")))) {
111199
111371
  return { [contextKey]: node };
111200
111372
  }
111201
111373
  }
@@ -113050,7 +113222,7 @@ var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
113050
113222
  bulletText = "\u2022 ";
113051
113223
  }
113052
113224
  const bulletStyle = { ...mergedDefaultRunStyle };
113053
- if (paragraphBulletInfo.sizePercent === void 0 && paragraphBulletInfo.sizePts === void 0) {
113225
+ if (paragraphBulletInfo.sizePts === void 0) {
113054
113226
  const firstRunSize = this.resolveFirstRunFontSize(p, paraAlign, ctx);
113055
113227
  if (firstRunSize !== void 0) {
113056
113228
  bulletStyle.fontSize = firstRunSize;
@@ -113263,6 +113435,15 @@ var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
113263
113435
  ...endParaRPrRaw
113264
113436
  };
113265
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
+ }
113266
113447
  const basisFontSize = typeof mergedDefaultRunStyle.fontSize === "number" ? mergedDefaultRunStyle.fontSize : void 0;
113267
113448
  const paragraphOwnProps = this.extractParagraphOwnProperties(p, basisFontSize);
113268
113449
  if (paragraphOwnProps) {
@@ -113283,27 +113464,22 @@ var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
113283
113464
  }
113284
113465
  /**
113285
113466
  * Font size (px) of the first text run in a paragraph, or `undefined` when
113286
- * the paragraph has no run that declares one.
113467
+ * that first run inherits its size.
113287
113468
  *
113288
- * Used to size an unsized bullet the way PowerPoint does: `a:buChar` /
113289
- * `a:buAutoNum` with no `a:buSzPct`/`a:buSzPts` inherits the first run's
113290
- * size. Only `a:r` and `a:fld` carry renderable text; `a:br` does not.
113469
+ * Used as the base for unsized and percentage-sized bullets. Only `a:r`
113470
+ * and `a:fld` carry renderable text; `a:br` does not.
113291
113471
  */
113292
113472
  resolveFirstRunFontSize(p, paraAlign, ctx) {
113293
- for (const key2 of ["a:r", "a:fld"]) {
113294
- const node = p[key2];
113295
- if (!node) {
113473
+ for (const [tag, node] of paragraphContentEntries(p, PARAGRAPH_CONTENT_TAGS).entries) {
113474
+ if (tag !== "a:r" && tag !== "a:fld") {
113296
113475
  continue;
113297
113476
  }
113298
- const first = this.ensureArray(node)[0];
113299
- const runProps = first?.["a:rPr"];
113477
+ const runProps = node?.["a:rPr"];
113300
113478
  if (!runProps) {
113301
- continue;
113479
+ return void 0;
113302
113480
  }
113303
113481
  const style = this.extractTextRunStyle(runProps, paraAlign, ctx.slideRelationshipMap);
113304
- if (typeof style.fontSize === "number") {
113305
- return style.fontSize;
113306
- }
113482
+ return typeof style.fontSize === "number" ? style.fontSize : void 0;
113307
113483
  }
113308
113484
  return void 0;
113309
113485
  }
@@ -113687,6 +113863,7 @@ var init_PptxHandlerRuntimeShapeParsing = __esm({
113687
113863
  skewY,
113688
113864
  flipHorizontal,
113689
113865
  flipVertical,
113866
+ inheritedTransform: !spPr?.["a:xfrm"] && xfrm && off && ext ? { x, y, width, height, rotation, skewX, skewY, flipHorizontal, flipVertical } : void 0,
113690
113867
  actionClick,
113691
113868
  actionHover,
113692
113869
  locks,
@@ -113775,6 +113952,7 @@ var init_PptxHandlerRuntimePictureParsing = __esm({
113775
113952
  const skewX = xfrm["@_skewX"] ? parseEmuInt2(xfrm["@_skewX"]) / 6e4 : void 0;
113776
113953
  const skewY = xfrm["@_skewY"] ? parseEmuInt2(xfrm["@_skewY"]) / 6e4 : void 0;
113777
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;
113778
113956
  const nvPr = pic?.["p:nvPicPr"]?.["p:nvPr"];
113779
113957
  const mediaReference = parseDrawingMediaReference(nvPr, this.externalRelsMap.get(slidePath));
113780
113958
  if (mediaReference) {
@@ -113835,6 +114013,7 @@ var init_PptxHandlerRuntimePictureParsing = __esm({
113835
114013
  return {
113836
114014
  id,
113837
114015
  type: "media",
114016
+ inheritedTransform,
113838
114017
  x,
113839
114018
  y,
113840
114019
  width,
@@ -114043,6 +114222,7 @@ var init_PptxHandlerRuntimePictureParsing = __esm({
114043
114222
  id,
114044
114223
  name: picElementName || void 0,
114045
114224
  type: "picture",
114225
+ inheritedTransform,
114046
114226
  x,
114047
114227
  y,
114048
114228
  width,
@@ -116379,6 +116559,7 @@ var init_PptxHandlerRuntimeMasterElements = __esm({
116379
116559
  var PptxHandlerRuntime77;
116380
116560
  var init_PptxHandlerRuntimeAuxiliaryMasterElements = __esm({
116381
116561
  "src/core/core/runtime/PptxHandlerRuntimeAuxiliaryMasterElements.ts"() {
116562
+ init_services();
116382
116563
  init_auxiliary_master_node_cache();
116383
116564
  init_master_part_background_cache();
116384
116565
  init_master_part_element_signature();
@@ -116436,6 +116617,7 @@ var init_PptxHandlerRuntimeAuxiliaryMasterElements = __esm({
116436
116617
  } finally {
116437
116618
  this.currentSlideClrMapOverride = previousClrMapOverride;
116438
116619
  }
116620
+ reconcileAnimationTargets(part.elements, void 0, void 0);
116439
116621
  rememberMasterPartElementSignature(this, partPath, part.elements);
116440
116622
  this.rememberUnparsedMasterNodes(partPath, spTree, part.elements);
116441
116623
  }
@@ -122571,6 +122753,7 @@ var init_core = __esm({
122571
122753
  init_types2();
122572
122754
  init_table_structural_ops();
122573
122755
  init_table_style_defaults();
122756
+ init_auto_number_sequence();
122574
122757
  init_table_style_editor();
122575
122758
  init_table_style_entry_parse();
122576
122759
  }
@@ -139426,8 +139609,8 @@ var TextSegmentRenderer = class {
139426
139609
  return defaultText;
139427
139610
  }
139428
139611
  wrapCode(text22) {
139429
- const matches = text22.match(/`+/g);
139430
- const maxTicks = matches && matches.length > 0 ? Math.max(...matches.map((entry2) => entry2.length)) : 0;
139612
+ const matches2 = text22.match(/`+/g);
139613
+ const maxTicks = matches2 && matches2.length > 0 ? Math.max(...matches2.map((entry2) => entry2.length)) : 0;
139431
139614
  const fence = "`".repeat(Math.max(1, maxTicks + 1));
139432
139615
  return `${fence}${text22}${fence}`;
139433
139616
  }
@@ -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
  }
@@ -161481,9 +161664,9 @@ function resolveDrawingShapeNodeId(shape, shapeIndex, shapes, nodes) {
161481
161664
  }
161482
161665
  const text22 = shape.text?.trim();
161483
161666
  if (text22) {
161484
- const matches = nodes.filter((n) => n.text.trim() === text22);
161485
- if (matches.length === 1) {
161486
- return matches[0].id;
161667
+ const matches2 = nodes.filter((n) => n.text.trim() === text22);
161668
+ if (matches2.length === 1) {
161669
+ return matches2[0].id;
161487
161670
  }
161488
161671
  }
161489
161672
  return void 0;
@@ -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) {
@@ -176328,8 +177075,8 @@ function splitWordsForUnderline(text22) {
176328
177075
  return [];
176329
177076
  }
176330
177077
  const pieces = [];
176331
- const matches = text22.matchAll(/(\s+)|(\S+)/gu);
176332
- for (const match of matches) {
177078
+ const matches2 = text22.matchAll(/(\s+)|(\S+)/gu);
177079
+ for (const match of matches2) {
176333
177080
  if (match[1] !== void 0) {
176334
177081
  pieces.push({ text: match[1], underline: false });
176335
177082
  } else if (match[2] !== void 0) {
@@ -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,53 @@ 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
+ }
181234
+ function renumberRemappedParagraphs(segments) {
181235
+ const sequence = createAutoNumberSequence();
181236
+ let first = true;
181237
+ return segments.map((segment) => {
181238
+ const paragraphStart = first;
181239
+ first = isParagraphSeparatorSegment(segment);
181240
+ if (!paragraphStart) {
181241
+ return segment;
181242
+ }
181243
+ const info = segment.bulletInfo;
181244
+ const level = segment.paragraphLevel ?? 0;
181245
+ if (!info?.autoNumType || !resolveParagraphBullet(segment)?.isNumbered) {
181246
+ breakAutoNumberRun(sequence, level);
181247
+ return segment;
181248
+ }
181249
+ const ordinal = nextAutoNumber(sequence, level, info.autoNumType, info.autoNumStartAt ?? 1) - (info.autoNumStartAt ?? 1);
181250
+ if (info.paragraphIndex === void 0 || info.paragraphIndex === ordinal) {
181251
+ return segment;
181252
+ }
181253
+ const updated = { ...segment, bulletInfo: { ...info, paragraphIndex: ordinal } };
181254
+ if (isBulletMarkerSegment(segment)) {
181255
+ const resolved = resolveParagraphBullet(updated);
181256
+ if (resolved) {
181257
+ updated.text = resolved.marker + (segment.text.match(/\s+$/u)?.[0] ?? "");
181258
+ }
181259
+ }
181260
+ return updated;
181261
+ });
181262
+ }
180624
181263
  function withoutRenderedBulletPrefix(text22, originalSegments, dedicatedMarker) {
180625
181264
  if (!dedicatedMarker) {
180626
181265
  return text22;
@@ -180641,10 +181280,14 @@ function withoutRenderedBulletPrefix(text22, originalSegments, dedicatedMarker)
180641
181280
  }
180642
181281
  return withoutMarker;
180643
181282
  }
180644
- function continueAutoNumberedParagraph(segments, donorSegments, offset) {
181283
+ function continueListParagraph(segments, donorSegments) {
180645
181284
  const donor = donorSegments[0];
180646
181285
  const paragraphIndex = donor?.bulletInfo?.paragraphIndex;
180647
- 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))) {
180648
181291
  return segments;
180649
181292
  }
180650
181293
  const [first, ...rest] = segments;
@@ -180652,13 +181295,13 @@ function continueAutoNumberedParagraph(segments, donorSegments, offset) {
180652
181295
  ...first,
180653
181296
  bulletInfo: {
180654
181297
  ...donor.bulletInfo,
180655
- paragraphIndex: paragraphIndex + offset
181298
+ ...bullet.isNumbered && typeof paragraphIndex === "number" && Number.isFinite(paragraphIndex) ? { paragraphIndex: paragraphIndex + 1 } : {}
180656
181299
  }
180657
181300
  };
180658
181301
  if (donor.paragraphLevel !== void 0) {
180659
181302
  continued.paragraphLevel = donor.paragraphLevel;
180660
181303
  }
180661
- if (isBulletMarkerSegment(donor)) {
181304
+ if (bullet.isNumbered && typeof paragraphIndex === "number" && Number.isFinite(paragraphIndex) && isBulletMarkerSegment(donor)) {
180662
181305
  const resolved = resolveParagraphBullet(continued);
180663
181306
  if (resolved) {
180664
181307
  const trailingWhitespace = donor.text.match(/\s+$/u)?.[0] ?? "";
@@ -180667,10 +181310,91 @@ function continueAutoNumberedParagraph(segments, donorSegments, offset) {
180667
181310
  }
180668
181311
  return [continued, ...rest];
180669
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
+ }
181336
+ function matches(text22, paragraph) {
181337
+ const first = paragraph.segments[0];
181338
+ const marker = first && isBulletMarkerSegment(first) && (!first.bulletInfo?.autoNumType || first.bulletInfo.paragraphIndex !== void 0) ? first : void 0;
181339
+ const body = paragraph.segments.slice(marker ? 1 : 0).map((segment) => segment.text).join("");
181340
+ return text22 === body || withoutRenderedBulletPrefix(text22, paragraph.segments, marker) === body;
181341
+ }
181342
+ function alignParagraphSources(texts, original) {
181343
+ const sources = Array.from({ length: texts.length });
181344
+ let prefix = 0;
181345
+ while (prefix < texts.length && prefix < original.length && matches(texts[prefix], original[prefix])) {
181346
+ sources[prefix] = prefix;
181347
+ prefix += 1;
181348
+ }
181349
+ let oldEnd = original.length;
181350
+ let newEnd = texts.length;
181351
+ while (oldEnd > prefix && newEnd > prefix && matches(texts[newEnd - 1], original[oldEnd - 1])) {
181352
+ sources[--newEnd] = --oldEnd;
181353
+ }
181354
+ const anchors = [];
181355
+ const oldCount = oldEnd - prefix;
181356
+ const newCount = newEnd - prefix;
181357
+ if (oldCount * newCount <= 1e4) {
181358
+ const lengths = Array.from({ length: oldCount + 1 }, () => new Uint16Array(newCount + 1));
181359
+ for (let old2 = oldCount - 1; old2 >= 0; old2--) {
181360
+ for (let next2 = newCount - 1; next2 >= 0; next2--) {
181361
+ lengths[old2][next2] = matches(texts[prefix + next2], original[prefix + old2]) ? lengths[old2 + 1][next2 + 1] + 1 : Math.max(lengths[old2 + 1][next2], lengths[old2][next2 + 1]);
181362
+ }
181363
+ }
181364
+ let old = 0;
181365
+ let next = 0;
181366
+ while (old < oldCount && next < newCount) {
181367
+ if (matches(texts[prefix + next], original[prefix + old])) {
181368
+ anchors.push([prefix + next++, prefix + old++]);
181369
+ } else if (lengths[old + 1][next] >= lengths[old][next + 1]) {
181370
+ old++;
181371
+ } else {
181372
+ next++;
181373
+ }
181374
+ }
181375
+ }
181376
+ anchors.push([newEnd, oldEnd]);
181377
+ let oldCursor = prefix;
181378
+ let newCursor = prefix;
181379
+ for (const [newAnchor, oldAnchor] of anchors) {
181380
+ while (oldCursor < oldAnchor && newCursor < newAnchor) {
181381
+ sources[newCursor++] = oldCursor++;
181382
+ }
181383
+ if (newAnchor < newEnd) {
181384
+ sources[newAnchor] = oldAnchor;
181385
+ }
181386
+ oldCursor = oldAnchor + 1;
181387
+ newCursor = newAnchor + 1;
181388
+ }
181389
+ return sources;
181390
+ }
180670
181391
  function isAtomicOriginalSegment(seg) {
180671
181392
  return seg.fieldType !== void 0 || seg.equationXml !== void 0;
180672
181393
  }
180673
181394
  function copySegmentMetadata(from, to) {
181395
+ if (!from) {
181396
+ return to;
181397
+ }
180674
181398
  if (from.equationXml !== void 0) {
180675
181399
  to.equationXml = from.equationXml;
180676
181400
  }
@@ -180691,26 +181415,6 @@ function copySegmentMetadata(from, to) {
180691
181415
  }
180692
181416
  return to;
180693
181417
  }
180694
- function restoreParagraphMetadata(from, segments) {
180695
- if (segments.length === 0) {
180696
- return segments;
180697
- }
180698
- const [first, ...rest] = segments;
180699
- const restored = { ...first };
180700
- delete restored.paragraphLevel;
180701
- delete restored.paragraphProperties;
180702
- delete restored.endParaRunProperties;
180703
- if (from?.paragraphLevel !== void 0) {
180704
- restored.paragraphLevel = from.paragraphLevel;
180705
- }
180706
- if (from?.paragraphProperties !== void 0) {
180707
- restored.paragraphProperties = from.paragraphProperties;
180708
- }
180709
- if (from?.endParaRunProperties !== void 0) {
180710
- restored.endParaRunProperties = from.endParaRunProperties;
180711
- }
180712
- return [restored, ...rest];
180713
- }
180714
181418
  function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180715
181419
  const fallbackStyle = { ...elementTextStyle };
180716
181420
  if (!originalSegments || originalSegments.length === 0) {
@@ -180728,9 +181432,10 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180728
181432
  }
180729
181433
  }
180730
181434
  const newParagraphTexts = newText.split("\n");
181435
+ const paragraphSources = alignParagraphSources(newParagraphTexts, originalParagraphs);
180731
181436
  const firstContentSeg = originalParagraphs.flatMap((paragraph) => paragraph.segments).find((s) => s.text.trim().length > 0);
180732
181437
  const baseFallbackStyle = firstContentSeg?.style ? { ...firstContentSeg.style } : fallbackStyle;
180733
- function remapParagraph(paraNewText, paraOrigSegments) {
181438
+ function remapParagraph(paraNewText, paraOrigSegments, isOriginalParagraph = true) {
180734
181439
  if (paraOrigSegments.length === 0) {
180735
181440
  return paraNewText.length > 0 ? [{ text: paraNewText, style: { ...baseFallbackStyle } }] : [{ text: "", style: { ...baseFallbackStyle } }];
180736
181441
  }
@@ -180738,12 +181443,8 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180738
181443
  const dedicatedMarker = isBulletMarkerSegment(firstSegment) && (!firstSegment.bulletInfo?.autoNumType || firstSegment.bulletInfo.paragraphIndex !== void 0) ? firstSegment : void 0;
180739
181444
  if (dedicatedMarker) {
180740
181445
  const contentSegments = paraOrigSegments.slice(1);
180741
- const contentText = withoutRenderedBulletPrefix(
180742
- paraNewText,
180743
- paraOrigSegments,
180744
- dedicatedMarker
180745
- );
180746
- 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 } }];
180747
181448
  return [dedicatedMarker, ...content];
180748
181449
  }
180749
181450
  const paragraphBulletInfo = paraOrigSegments[0].bulletInfo;
@@ -180758,7 +181459,7 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180758
181459
  const totalOrigLen = paraOrigSegments.reduce((sum, s) => sum + s.text.length, 0);
180759
181460
  if (totalOrigLen === 0) {
180760
181461
  const result = [
180761
- copySegmentMetadata(paraOrigSegments[0], {
181462
+ copySegmentMetadata(isOriginalParagraph ? paraOrigSegments[0] : void 0, {
180762
181463
  text: paraNewText,
180763
181464
  style: { ...paraOrigSegments[0].style }
180764
181465
  })
@@ -180772,7 +181473,7 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180772
181473
  let newPos = 0;
180773
181474
  for (let i2 = 0; i2 < paraOrigSegments.length; i2++) {
180774
181475
  const origSeg = paraOrigSegments[i2];
180775
- const isLastSeg = i2 === paraOrigSegments.length - 1 && !isAtomicOriginalSegment(origSeg);
181476
+ const isLastSeg = i2 === paraOrigSegments.length - 1 && (!isOriginalParagraph || !isAtomicOriginalSegment(origSeg));
180776
181477
  const origLen = origSeg.text.length;
180777
181478
  if (newPos >= paraNewText.length) {
180778
181479
  break;
@@ -180784,7 +181485,7 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180784
181485
  segText = paraNewText.slice(newPos, newPos + origLen);
180785
181486
  }
180786
181487
  if (segText.length > 0) {
180787
- const outSeg = copySegmentMetadata(origSeg, {
181488
+ const outSeg = copySegmentMetadata(isOriginalParagraph ? origSeg : void 0, {
180788
181489
  text: segText,
180789
181490
  style: { ...origSeg.style }
180790
181491
  });
@@ -180803,10 +181504,13 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180803
181504
  });
180804
181505
  }
180805
181506
  if (remapped.length === 0) {
180806
- const fallback = copySegmentMetadata(paraOrigSegments[0], {
180807
- text: paraNewText,
180808
- style: { ...paraOrigSegments[0].style }
180809
- });
181507
+ const fallback = copySegmentMetadata(
181508
+ isOriginalParagraph ? paraOrigSegments[0] : void 0,
181509
+ {
181510
+ text: paraNewText,
181511
+ style: { ...paraOrigSegments[0].style }
181512
+ }
181513
+ );
180810
181514
  if (paragraphBulletInfo) {
180811
181515
  fallback.bulletInfo = paragraphBulletInfo;
180812
181516
  }
@@ -180816,26 +181520,30 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180816
181520
  }
180817
181521
  const output = [];
180818
181522
  const lastOrigPara = originalParagraphs[originalParagraphs.length - 1]?.segments;
181523
+ let precedingParagraph;
180819
181524
  for (let pi = 0; pi < newParagraphTexts.length; pi++) {
180820
181525
  if (pi > 0) {
180821
- const precedingOrigPara = originalParagraphs[pi - 1]?.segments ?? [];
181526
+ const precedingOrigPara = originalParagraphs[paragraphSources[pi - 1] ?? -1]?.segments ?? [];
180822
181527
  const breakStyle = precedingOrigPara[0]?.style ? { ...precedingOrigPara[0].style } : { ...baseFallbackStyle };
180823
- 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
+ );
180824
181532
  }
180825
- const originalParagraph = originalParagraphs[pi];
180826
- const origPara = originalParagraph?.segments ?? lastOrigPara ?? [];
180827
- let paraSegments = restoreParagraphMetadata(
181533
+ const originalParagraph = originalParagraphs[paragraphSources[pi] ?? -1];
181534
+ const origPara = originalParagraph?.segments ?? precedingParagraph ?? lastOrigPara ?? [];
181535
+ let paraSegments = restoreParagraphMetadata2(
180828
181536
  originalParagraph?.segments[0] ?? originalParagraph?.terminator,
180829
- remapParagraph(newParagraphTexts[pi], origPara)
181537
+ (originalParagraph && remapEmptyParagraph(newParagraphTexts[pi], origPara, originalParagraph.terminator)) ?? remapParagraph(newParagraphTexts[pi], origPara, originalParagraph !== void 0)
180830
181538
  );
180831
- if (!originalParagraph) {
180832
- paraSegments = continueAutoNumberedParagraph(
180833
- paraSegments,
180834
- lastOrigPara ?? [],
180835
- pi - originalParagraphs.length + 1
180836
- );
181539
+ if (!originalParagraph && precedingParagraph) {
181540
+ paraSegments = continueListParagraph(paraSegments, precedingParagraph);
180837
181541
  }
180838
181542
  output.push(...paraSegments);
181543
+ precedingParagraph = paraSegments;
181544
+ }
181545
+ if (paragraphSources.some((source, index) => source !== void 0 && source !== index)) {
181546
+ return renumberRemappedParagraphs(output);
180839
181547
  }
180840
181548
  return output.length > 0 ? output : [{ text: "", style: { ...baseFallbackStyle } }];
180841
181549
  }
@@ -181750,6 +182458,9 @@ function buildSegmentAttrs(seg) {
181750
182458
  if (seg.endParaRunProperties) {
181751
182459
  a.pr = JSON.stringify(seg.endParaRunProperties);
181752
182460
  }
182461
+ if (seg.paragraphInsertionStyle) {
182462
+ a.pi = JSON.stringify(seg.paragraphInsertionStyle);
182463
+ }
181753
182464
  if (typeof seg.fieldType === "string") {
181754
182465
  a.ft = seg.fieldType;
181755
182466
  }
@@ -181856,6 +182567,12 @@ function decodeDelta(delta) {
181856
182567
  } catch {
181857
182568
  }
181858
182569
  }
182570
+ if (a.pi) {
182571
+ try {
182572
+ seg.paragraphInsertionStyle = JSON.parse(a.pi);
182573
+ } catch {
182574
+ }
182575
+ }
181859
182576
  if (a.ft) {
181860
182577
  seg.fieldType = a.ft;
181861
182578
  }
@@ -182044,6 +182761,7 @@ var COMPLEX_ELEMENT_FIELDS = {
182044
182761
  children: "_ch",
182045
182762
  paragraphIndents: "_pi",
182046
182763
  rawXml: "_rx",
182764
+ inheritedTransform: "_it",
182047
182765
  extLstXml: "_elx",
182048
182766
  actionClick: "_ac",
182049
182767
  actionHover: "_av",
@@ -190046,86 +190764,6 @@ function projectDrawingShapes(elementId, shapes, viewBox, palette, style) {
190046
190764
  function styleShadowFilter(style) {
190047
190765
  return styleShadow(style);
190048
190766
  }
190049
- function textFontSizePxToPt(fontSizePx2) {
190050
- return Math.round(fontSizePx2 * (72 / 96) * 100) / 100;
190051
- }
190052
- function textFontSizePtToPx(fontSizePt) {
190053
- return fontSizePt * (96 / 72);
190054
- }
190055
- var COMMON_FONT_FAMILIES = [
190056
- "Abadi",
190057
- "Aptos",
190058
- "Aptos Display",
190059
- "Arial",
190060
- "Arial Black",
190061
- "Arial Narrow",
190062
- "Bahnschrift",
190063
- "Book Antiqua",
190064
- "Bookman Old Style",
190065
- "Calibri",
190066
- "Calibri Light",
190067
- "Cambria",
190068
- "Candara",
190069
- "Century Gothic",
190070
- "Comic Sans MS",
190071
- "Consolas",
190072
- "Corbel",
190073
- "Courier New",
190074
- "Franklin Gothic Book",
190075
- "Franklin Gothic Medium",
190076
- "Garamond",
190077
- "Georgia",
190078
- "Gill Sans MT",
190079
- "Helvetica",
190080
- "Impact",
190081
- "Inter",
190082
- "Lucida Console",
190083
- "Lucida Sans Unicode",
190084
- "Microsoft Sans Serif",
190085
- "Montserrat",
190086
- "Noto Sans",
190087
- "Open Sans",
190088
- "Palatino Linotype",
190089
- "Poppins",
190090
- "Roboto",
190091
- "Rockwell",
190092
- "Segoe UI",
190093
- "Source Sans Pro",
190094
- "Tahoma",
190095
- "Times New Roman",
190096
- "Trebuchet MS",
190097
- "Tw Cen MT",
190098
- "Verdana"
190099
- ];
190100
- var COMMON_FONT_SIZES = [
190101
- 8,
190102
- 9,
190103
- 10,
190104
- 11,
190105
- 12,
190106
- 14,
190107
- 16,
190108
- 18,
190109
- 20,
190110
- 24,
190111
- 28,
190112
- 32,
190113
- 36,
190114
- 40,
190115
- 44,
190116
- 48,
190117
- 54,
190118
- 60,
190119
- 72,
190120
- 96
190121
- ];
190122
- var CHARACTER_SPACING_OPTIONS = [
190123
- { label: "Very Tight", i18nKey: "pptx.text.characterSpacingVeryTight", value: -150 },
190124
- { label: "Tight", i18nKey: "pptx.text.characterSpacingTight", value: -75 },
190125
- { label: "Normal", i18nKey: "pptx.text.characterSpacingNormal", value: 0 },
190126
- { label: "Loose", i18nKey: "pptx.text.characterSpacingLoose", value: 75 },
190127
- { label: "Very Loose", i18nKey: "pptx.text.characterSpacingVeryLoose", value: 150 }
190128
- ];
190129
190767
  var GOOGLE_FONTS_CSS2_BASE = "https://fonts.googleapis.com/css2";
190130
190768
  var GOOGLE_WEBFONT_AXIS = "ital,wght@0,400;0,700;1,400;1,700";
190131
190769
  var DISPLAY_PARAM = "display=swap";
@@ -192336,7 +192974,7 @@ function isBulletMarker(segment) {
192336
192974
  const marker = bullet.char ? `${bullet.char} ` : bullet.imageRelId || bullet.imageDataUrl ? "\u{1F4CE} " : "\u2022 ";
192337
192975
  return segment.text === marker;
192338
192976
  }
192339
- function isParagraphSeparator2(segment) {
192977
+ function isParagraphSeparator(segment) {
192340
192978
  return Boolean(segment.isParagraphBreak) || segment.text === "\n" && !segment.isLineBreak;
192341
192979
  }
192342
192980
  function groupElementParagraphs(element) {
@@ -192350,7 +192988,7 @@ function groupElementParagraphs(element) {
192350
192988
  }
192351
192989
  const groups = [{ content: [] }];
192352
192990
  for (const segment of segments) {
192353
- if (isParagraphSeparator2(segment)) {
192991
+ if (isParagraphSeparator(segment)) {
192354
192992
  groups.push({ content: [] });
192355
192993
  continue;
192356
192994
  }
@@ -192442,8 +193080,37 @@ function buildElementClipboardPayload(element, isTemplate) {
192442
193080
  function cloneElementForPaste(element, options = {}) {
192443
193081
  const clone3 = structuredClone(element);
192444
193082
  const intoTemplate = options.intoTemplate ?? false;
192445
- clone3.id = makeCloneId(intoTemplate, element.id);
192446
- 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);
192447
193114
  clone3.x += options.offsetX ?? PASTE_OFFSET_PX;
192448
193115
  clone3.y += options.offsetY ?? PASTE_OFFSET_PX;
192449
193116
  return clone3;
@@ -192684,6 +193351,7 @@ var GUARD_DEFAULTS = {
192684
193351
  canEdit: true,
192685
193352
  isPresenting: false,
192686
193353
  hasSelection: false,
193354
+ canPaste: true,
192687
193355
  isEditingText: false,
192688
193356
  isDrawing: false,
192689
193357
  isTextInputTarget: false
@@ -192741,6 +193409,9 @@ function mapEditorKey(input, guard = {}) {
192741
193409
  if (mod && !alt) {
192742
193410
  const chord2 = resolveChord(key2, Boolean(input.shiftKey), state.hasSelection);
192743
193411
  if (chord2) {
193412
+ if (chord2.action === "paste" && state.canPaste === false) {
193413
+ return NO_ACTION;
193414
+ }
192744
193415
  return chord2;
192745
193416
  }
192746
193417
  }
@@ -193599,8 +194270,8 @@ function applyFindReplacements(slides, toReplace, replacement) {
193599
194270
  }
193600
194271
  const nextSlides = slides.slice();
193601
194272
  let totalReplacements = 0;
193602
- for (const [, matches] of grouped) {
193603
- const sorted = matches.slice().sort((a, b) => b.startOffset - a.startOffset);
194273
+ for (const [, matches2] of grouped) {
194274
+ const sorted = matches2.slice().sort((a, b) => b.startOffset - a.startOffset);
193604
194275
  for (const match of sorted) {
193605
194276
  const slide = nextSlides[match.slideIndex];
193606
194277
  if (!slide) {
@@ -196051,6 +196722,12 @@ var COMMON_FONTS = [
196051
196722
  "Tw Cen MT",
196052
196723
  "Verdana"
196053
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
+ }
196054
196731
  function isHeaderFooterDateTextVisible(draft) {
196055
196732
  return Boolean(draft.hasDateTime) && !draft.dateTimeAuto;
196056
196733
  }
@@ -199780,10 +200457,15 @@ function resolveSlideSizeRescaleTransform(oldSize, newSize, mode) {
199780
200457
  };
199781
200458
  }
199782
200459
  function scaleTextSegment(segment, scale2) {
199783
- if (typeof segment.style.fontSize !== "number") {
200460
+ const insertion = segment.paragraphInsertionStyle;
200461
+ if (typeof segment.style.fontSize !== "number" && typeof insertion?.fontSize !== "number") {
199784
200462
  return segment;
199785
200463
  }
199786
- 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
+ };
199787
200469
  }
199788
200470
  function scaleFontSizesDeep(element, scale2) {
199789
200471
  let next = element;
@@ -200596,6 +201278,50 @@ function wrapForeignObjectSvg(bodyMarkup, tile) {
200596
201278
  const { viewBoxX, viewBoxY, viewBoxWidth, viewBoxHeight, outputWidth, outputHeight } = tile;
200597
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>`;
200598
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
+ }
200599
201325
  var FALLBACK_DOWNLOAD_NAME = "presentation.pptx";
200600
201326
  var REVOKE_DELAY_MS = 200;
200601
201327
  var OPEN_REVOKE_DELAY_MS = 6e4;
@@ -202992,4 +203718,4 @@ async function rasterResultToPngBlob(result) {
202992
203718
  * `<p:extLst>` (optional)
202993
203719
  */
202994
203720
 
202995
- 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 };