pptx-react-viewer 3.16.6 → 3.16.7

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 (140) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/{AiChatPanel-6IBPORZC.mjs → AiChatPanel-GLDW5OK4.mjs} +3 -3
  3. package/dist/AiChatPanel-GLDW5OK4.mjs.br +0 -0
  4. package/dist/AiChatPanel-GLDW5OK4.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-WDNBYHX7.js → AiChatPanel-N25STHYW.js} +24 -24
  6. package/dist/AiChatPanel-N25STHYW.js.br +0 -0
  7. package/dist/AiChatPanel-N25STHYW.js.gz +0 -0
  8. package/dist/{Area3DChartScene-MRPRTJWY.js → Area3DChartScene-5POI5LF7.js} +2 -2
  9. package/dist/Area3DChartScene-5POI5LF7.js.br +0 -0
  10. package/dist/Area3DChartScene-5POI5LF7.js.gz +0 -0
  11. package/dist/{Area3DChartScene-EMOWMHHK.mjs → Area3DChartScene-FCHO4SK6.mjs} +1 -1
  12. package/dist/Area3DChartScene-FCHO4SK6.mjs.br +0 -0
  13. package/dist/Area3DChartScene-FCHO4SK6.mjs.gz +0 -0
  14. package/dist/{Bar3DChartScene-THALZEYK.js → Bar3DChartScene-5CY5GRV5.js} +2 -2
  15. package/dist/Bar3DChartScene-5CY5GRV5.js.br +0 -0
  16. package/dist/Bar3DChartScene-5CY5GRV5.js.gz +0 -0
  17. package/dist/{Bar3DChartScene-J3GJEGDJ.mjs → Bar3DChartScene-M3LLHXAL.mjs} +1 -1
  18. package/dist/Bar3DChartScene-M3LLHXAL.mjs.br +0 -0
  19. package/dist/Bar3DChartScene-M3LLHXAL.mjs.gz +0 -0
  20. package/dist/{Line3DChartScene-B26WZNO3.js → Line3DChartScene-3TP7OUIP.js} +2 -2
  21. package/dist/Line3DChartScene-3TP7OUIP.js.br +0 -0
  22. package/dist/Line3DChartScene-3TP7OUIP.js.gz +0 -0
  23. package/dist/{Line3DChartScene-Y7MODOK2.mjs → Line3DChartScene-77TZRLJY.mjs} +1 -1
  24. package/dist/Line3DChartScene-77TZRLJY.mjs.br +0 -0
  25. package/dist/Line3DChartScene-77TZRLJY.mjs.gz +0 -0
  26. package/dist/{Model3DScene-27GN3D3U.js → Model3DScene-CBETCFMI.js} +2 -2
  27. package/dist/Model3DScene-CBETCFMI.js.br +0 -0
  28. package/dist/Model3DScene-CBETCFMI.js.gz +0 -0
  29. package/dist/{Model3DScene-XM3JN7M6.mjs → Model3DScene-QINKUHM2.mjs} +1 -1
  30. package/dist/Model3DScene-QINKUHM2.mjs.br +0 -0
  31. package/dist/Model3DScene-QINKUHM2.mjs.gz +0 -0
  32. package/dist/{PieChart3DScene-4GP2B3PY.mjs → PieChart3DScene-H2DJSHW7.mjs} +1 -1
  33. package/dist/PieChart3DScene-H2DJSHW7.mjs.br +0 -0
  34. package/dist/PieChart3DScene-H2DJSHW7.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-URSRUABE.js → PieChart3DScene-NFXFVG7R.js} +2 -2
  36. package/dist/PieChart3DScene-NFXFVG7R.js.br +0 -0
  37. package/dist/PieChart3DScene-NFXFVG7R.js.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-4OQNB3JY.js → SurfaceChart3DScene-2IN5YKKE.js} +2 -2
  39. package/dist/SurfaceChart3DScene-2IN5YKKE.js.br +0 -0
  40. package/dist/SurfaceChart3DScene-2IN5YKKE.js.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-YJ4EYMWQ.mjs → SurfaceChart3DScene-4AGI4O3L.mjs} +1 -1
  42. package/dist/SurfaceChart3DScene-4AGI4O3L.mjs.br +0 -0
  43. package/dist/SurfaceChart3DScene-4AGI4O3L.mjs.gz +0 -0
  44. package/dist/{chunk-VRMITIZZ.js → chunk-3FVOKV4E.js} +135 -42
  45. package/dist/chunk-3FVOKV4E.js.br +0 -0
  46. package/dist/chunk-3FVOKV4E.js.gz +0 -0
  47. package/dist/{chunk-QLZHTIH6.mjs → chunk-3PUFHKXW.mjs} +6 -3
  48. package/dist/chunk-3PUFHKXW.mjs.br +0 -0
  49. package/dist/chunk-3PUFHKXW.mjs.gz +0 -0
  50. package/dist/{chunk-BJL5MJ7A.js → chunk-4NSDMKFE.js} +169 -169
  51. package/dist/chunk-4NSDMKFE.js.br +0 -0
  52. package/dist/chunk-4NSDMKFE.js.gz +0 -0
  53. package/dist/{chunk-TTCWWF47.js → chunk-4Q6VIX6M.js} +455 -452
  54. package/dist/chunk-4Q6VIX6M.js.br +0 -0
  55. package/dist/chunk-4Q6VIX6M.js.gz +0 -0
  56. package/dist/{chunk-YUIXPWFT.mjs → chunk-7ELFYC6K.mjs} +1 -1
  57. package/dist/chunk-7ELFYC6K.mjs.br +0 -0
  58. package/dist/chunk-7ELFYC6K.mjs.gz +0 -0
  59. package/dist/{chunk-U2H7CQ34.mjs → chunk-B3YVURJB.mjs} +1 -1
  60. package/dist/chunk-B3YVURJB.mjs.br +0 -0
  61. package/dist/chunk-B3YVURJB.mjs.gz +0 -0
  62. package/dist/{chunk-RWVMSJ7C.mjs → chunk-I5YSAIL5.mjs} +12 -12
  63. package/dist/chunk-I5YSAIL5.mjs.br +0 -0
  64. package/dist/chunk-I5YSAIL5.mjs.gz +0 -0
  65. package/dist/{chunk-LTQRC4WB.js → chunk-SQNEE6AM.js} +1291 -1291
  66. package/dist/chunk-SQNEE6AM.js.br +0 -0
  67. package/dist/chunk-SQNEE6AM.js.gz +0 -0
  68. package/dist/{chunk-C7H7NM2W.js → chunk-TYVSLRC7.js} +5 -5
  69. package/dist/chunk-TYVSLRC7.js.br +0 -0
  70. package/dist/chunk-TYVSLRC7.js.gz +0 -0
  71. package/dist/{chunk-PO2PYVHF.mjs → chunk-XMD6ZWUO.mjs} +135 -42
  72. package/dist/chunk-XMD6ZWUO.mjs.br +0 -0
  73. package/dist/chunk-XMD6ZWUO.mjs.gz +0 -0
  74. package/dist/index.js +45 -45
  75. package/dist/index.js.br +0 -0
  76. package/dist/index.js.gz +0 -0
  77. package/dist/index.mjs +5 -5
  78. package/dist/index.mjs.br +0 -0
  79. package/dist/index.mjs.gz +0 -0
  80. package/dist/internals.js +78 -78
  81. package/dist/internals.js.br +0 -0
  82. package/dist/internals.js.gz +0 -0
  83. package/dist/internals.mjs +3 -3
  84. package/dist/internals.mjs.br +0 -0
  85. package/dist/internals.mjs.gz +0 -0
  86. package/dist/viewer/index.js +26 -26
  87. package/dist/viewer/index.js.br +0 -0
  88. package/dist/viewer/index.js.gz +0 -0
  89. package/dist/viewer/index.mjs +5 -5
  90. package/dist/viewer/index.mjs.br +0 -0
  91. package/dist/viewer/index.mjs.gz +0 -0
  92. package/package.json +1 -1
  93. package/dist/AiChatPanel-6IBPORZC.mjs.br +0 -0
  94. package/dist/AiChatPanel-6IBPORZC.mjs.gz +0 -0
  95. package/dist/AiChatPanel-WDNBYHX7.js.br +0 -0
  96. package/dist/AiChatPanel-WDNBYHX7.js.gz +0 -0
  97. package/dist/Area3DChartScene-EMOWMHHK.mjs.br +0 -0
  98. package/dist/Area3DChartScene-EMOWMHHK.mjs.gz +0 -0
  99. package/dist/Area3DChartScene-MRPRTJWY.js.br +0 -0
  100. package/dist/Area3DChartScene-MRPRTJWY.js.gz +0 -0
  101. package/dist/Bar3DChartScene-J3GJEGDJ.mjs.br +0 -0
  102. package/dist/Bar3DChartScene-J3GJEGDJ.mjs.gz +0 -0
  103. package/dist/Bar3DChartScene-THALZEYK.js.br +0 -0
  104. package/dist/Bar3DChartScene-THALZEYK.js.gz +0 -0
  105. package/dist/Line3DChartScene-B26WZNO3.js.br +0 -0
  106. package/dist/Line3DChartScene-B26WZNO3.js.gz +0 -0
  107. package/dist/Line3DChartScene-Y7MODOK2.mjs.br +0 -0
  108. package/dist/Line3DChartScene-Y7MODOK2.mjs.gz +0 -0
  109. package/dist/Model3DScene-27GN3D3U.js.br +0 -0
  110. package/dist/Model3DScene-27GN3D3U.js.gz +0 -0
  111. package/dist/Model3DScene-XM3JN7M6.mjs.br +0 -0
  112. package/dist/Model3DScene-XM3JN7M6.mjs.gz +0 -0
  113. package/dist/PieChart3DScene-4GP2B3PY.mjs.br +0 -0
  114. package/dist/PieChart3DScene-4GP2B3PY.mjs.gz +0 -0
  115. package/dist/PieChart3DScene-URSRUABE.js.br +0 -0
  116. package/dist/PieChart3DScene-URSRUABE.js.gz +0 -0
  117. package/dist/SurfaceChart3DScene-4OQNB3JY.js.br +0 -0
  118. package/dist/SurfaceChart3DScene-4OQNB3JY.js.gz +0 -0
  119. package/dist/SurfaceChart3DScene-YJ4EYMWQ.mjs.br +0 -0
  120. package/dist/SurfaceChart3DScene-YJ4EYMWQ.mjs.gz +0 -0
  121. package/dist/chunk-BJL5MJ7A.js.br +0 -0
  122. package/dist/chunk-BJL5MJ7A.js.gz +0 -0
  123. package/dist/chunk-C7H7NM2W.js.br +0 -0
  124. package/dist/chunk-C7H7NM2W.js.gz +0 -0
  125. package/dist/chunk-LTQRC4WB.js.br +0 -0
  126. package/dist/chunk-LTQRC4WB.js.gz +0 -0
  127. package/dist/chunk-PO2PYVHF.mjs.br +0 -0
  128. package/dist/chunk-PO2PYVHF.mjs.gz +0 -0
  129. package/dist/chunk-QLZHTIH6.mjs.br +0 -0
  130. package/dist/chunk-QLZHTIH6.mjs.gz +0 -0
  131. package/dist/chunk-RWVMSJ7C.mjs.br +0 -0
  132. package/dist/chunk-RWVMSJ7C.mjs.gz +0 -0
  133. package/dist/chunk-TTCWWF47.js.br +0 -0
  134. package/dist/chunk-TTCWWF47.js.gz +0 -0
  135. package/dist/chunk-U2H7CQ34.mjs.br +0 -0
  136. package/dist/chunk-U2H7CQ34.mjs.gz +0 -0
  137. package/dist/chunk-VRMITIZZ.js.br +0 -0
  138. package/dist/chunk-VRMITIZZ.js.gz +0 -0
  139. package/dist/chunk-YUIXPWFT.mjs.br +0 -0
  140. package/dist/chunk-YUIXPWFT.mjs.gz +0 -0
@@ -34239,10 +34239,10 @@ function clampByRules(value, rules, type) {
34239
34239
  }
34240
34240
  function ratioConstraint(constraints, types, fallback, rules) {
34241
34241
  for (const type of types) {
34242
- const matches = (constraints ?? []).filter((constraint) => constraint.type === type);
34242
+ const matches2 = (constraints ?? []).filter((constraint) => constraint.type === type);
34243
34243
  const ordered4 = [
34244
- ...matches.filter((constraint) => constraint.for === "ch"),
34245
- ...matches.filter((constraint) => constraint.for !== "ch")
34244
+ ...matches2.filter((constraint) => constraint.for === "ch"),
34245
+ ...matches2.filter((constraint) => constraint.for !== "ch")
34246
34246
  ];
34247
34247
  for (const constraint of ordered4) {
34248
34248
  const ratio = constraintRatio(constraint);
@@ -40444,14 +40444,14 @@ var init_smartart_hierarchy_composite_child = __esm({
40444
40444
  });
40445
40445
  function findByReference(constraints, type, referenceType, preferredName) {
40446
40446
  const list = constraints ?? [];
40447
- const matches = (c) => c.type === type && c.referenceType === referenceType && typeof c.factor === "number";
40447
+ const matches2 = (c) => c.type === type && c.referenceType === referenceType && typeof c.factor === "number";
40448
40448
  if (preferredName !== void 0) {
40449
- const named = list.find((c) => matches(c) && c.forName === preferredName);
40449
+ const named = list.find((c) => matches2(c) && c.forName === preferredName);
40450
40450
  if (named) {
40451
40451
  return named.factor;
40452
40452
  }
40453
40453
  }
40454
- return list.find(matches)?.factor;
40454
+ return list.find(matches2)?.factor;
40455
40455
  }
40456
40456
  function findDirectAspectRatio(constraints, preferredName) {
40457
40457
  const hRefW = findByReference(constraints, "h", "w", preferredName);
@@ -43119,14 +43119,14 @@ function findDrawingShapeIndex(shapes, nodes, nodeId) {
43119
43119
  const node = nodes.find((n) => n.id === nodeId);
43120
43120
  if (node?.text) {
43121
43121
  const text22 = node.text.trim();
43122
- const matches = [];
43122
+ const matches2 = [];
43123
43123
  for (let i2 = 0; i2 < shapes.length; i2++) {
43124
43124
  if (shapes[i2].text?.trim() === text22) {
43125
- matches.push(i2);
43125
+ matches2.push(i2);
43126
43126
  }
43127
43127
  }
43128
- if (matches.length === 1) {
43129
- return matches[0];
43128
+ if (matches2.length === 1) {
43129
+ return matches2[0];
43130
43130
  }
43131
43131
  }
43132
43132
  return -1;
@@ -43326,14 +43326,14 @@ function findShapeIndexForNode(shapes, nodes, nodeId) {
43326
43326
  const node = nodes.find((n) => n.id === nodeId);
43327
43327
  if (node?.text) {
43328
43328
  const text22 = node.text.trim();
43329
- const matches = [];
43329
+ const matches2 = [];
43330
43330
  for (let i2 = 0; i2 < shapes.length; i2++) {
43331
43331
  if (shapes[i2].text?.trim() === text22) {
43332
- matches.push(i2);
43332
+ matches2.push(i2);
43333
43333
  }
43334
43334
  }
43335
- if (matches.length === 1) {
43336
- return matches[0];
43335
+ if (matches2.length === 1) {
43336
+ return matches2[0];
43337
43337
  }
43338
43338
  }
43339
43339
  return -1;
@@ -92086,6 +92086,10 @@ function computeUniformSegmentOverrides(textStyle, textSegments) {
92086
92086
  if (nextValue === void 0) {
92087
92087
  return;
92088
92088
  }
92089
+ const baseline = textStyle?.inheritedRunStyle;
92090
+ if (baseline && nextValue === (textStyle?.authoredRunStyle?.[styleKey] ?? baseline[styleKey])) {
92091
+ return;
92092
+ }
92089
92093
  const firstValue = textSegments[0]?.style?.[styleKey];
92090
92094
  const isUniform = textSegments.every((segment) => segment.style?.[styleKey] === firstValue);
92091
92095
  if (isUniform) {
@@ -111196,13 +111200,13 @@ var init_PptxHandlerRuntimePlaceholderLookup = __esm({
111196
111200
  findPlaceholderInShapeTree(spTree, expected) {
111197
111201
  return this.scanPlaceholderBuckets(spTree, (info) => this.placeholderMatches(expected, info));
111198
111202
  }
111199
- scanPlaceholderBuckets(spTree, matches) {
111203
+ scanPlaceholderBuckets(spTree, matches2) {
111200
111204
  if (!spTree) {
111201
111205
  return void 0;
111202
111206
  }
111203
111207
  for (const { bucket, nvKey, contextKey } of PLACEHOLDER_BUCKETS) {
111204
111208
  for (const node of this.ensureArray(spTree[bucket])) {
111205
- if (matches(this.extractPlaceholderInfo(xmlPath(node, nvKey, "p:nvPr")))) {
111209
+ if (matches2(this.extractPlaceholderInfo(xmlPath(node, nvKey, "p:nvPr")))) {
111206
111210
  return { [contextKey]: node };
111207
111211
  }
111208
111212
  }
@@ -113057,7 +113061,7 @@ var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
113057
113061
  bulletText = "\u2022 ";
113058
113062
  }
113059
113063
  const bulletStyle = { ...mergedDefaultRunStyle };
113060
- if (paragraphBulletInfo.sizePercent === void 0 && paragraphBulletInfo.sizePts === void 0) {
113064
+ if (paragraphBulletInfo.sizePts === void 0) {
113061
113065
  const firstRunSize = this.resolveFirstRunFontSize(p, paraAlign, ctx);
113062
113066
  if (firstRunSize !== void 0) {
113063
113067
  bulletStyle.fontSize = firstRunSize;
@@ -113290,27 +113294,22 @@ var init_PptxHandlerRuntimeShapeParagraphContentParsing = __esm({
113290
113294
  }
113291
113295
  /**
113292
113296
  * Font size (px) of the first text run in a paragraph, or `undefined` when
113293
- * the paragraph has no run that declares one.
113297
+ * that first run inherits its size.
113294
113298
  *
113295
- * Used to size an unsized bullet the way PowerPoint does: `a:buChar` /
113296
- * `a:buAutoNum` with no `a:buSzPct`/`a:buSzPts` inherits the first run's
113297
- * size. Only `a:r` and `a:fld` carry renderable text; `a:br` does not.
113299
+ * Used as the base for unsized and percentage-sized bullets. Only `a:r`
113300
+ * and `a:fld` carry renderable text; `a:br` does not.
113298
113301
  */
113299
113302
  resolveFirstRunFontSize(p, paraAlign, ctx) {
113300
- for (const key2 of ["a:r", "a:fld"]) {
113301
- const node = p[key2];
113302
- if (!node) {
113303
+ for (const [tag, node] of paragraphContentEntries(p, PARAGRAPH_CONTENT_TAGS).entries) {
113304
+ if (tag !== "a:r" && tag !== "a:fld") {
113303
113305
  continue;
113304
113306
  }
113305
- const first = this.ensureArray(node)[0];
113306
- const runProps = first?.["a:rPr"];
113307
+ const runProps = node?.["a:rPr"];
113307
113308
  if (!runProps) {
113308
- continue;
113309
+ return void 0;
113309
113310
  }
113310
113311
  const style = this.extractTextRunStyle(runProps, paraAlign, ctx.slideRelationshipMap);
113311
- if (typeof style.fontSize === "number") {
113312
- return style.fontSize;
113313
- }
113312
+ return typeof style.fontSize === "number" ? style.fontSize : void 0;
113314
113313
  }
113315
113314
  return void 0;
113316
113315
  }
@@ -122578,6 +122577,7 @@ var init_core = __esm({
122578
122577
  init_types2();
122579
122578
  init_table_structural_ops();
122580
122579
  init_table_style_defaults();
122580
+ init_auto_number_sequence();
122581
122581
  init_table_style_editor();
122582
122582
  init_table_style_entry_parse();
122583
122583
  }
@@ -139433,8 +139433,8 @@ var TextSegmentRenderer = class {
139433
139433
  return defaultText;
139434
139434
  }
139435
139435
  wrapCode(text22) {
139436
- const matches = text22.match(/`+/g);
139437
- const maxTicks = matches && matches.length > 0 ? Math.max(...matches.map((entry2) => entry2.length)) : 0;
139436
+ const matches2 = text22.match(/`+/g);
139437
+ const maxTicks = matches2 && matches2.length > 0 ? Math.max(...matches2.map((entry2) => entry2.length)) : 0;
139438
139438
  const fence = "`".repeat(Math.max(1, maxTicks + 1));
139439
139439
  return `${fence}${text22}${fence}`;
139440
139440
  }
@@ -161488,9 +161488,9 @@ function resolveDrawingShapeNodeId(shape, shapeIndex, shapes, nodes) {
161488
161488
  }
161489
161489
  const text22 = shape.text?.trim();
161490
161490
  if (text22) {
161491
- const matches = nodes.filter((n) => n.text.trim() === text22);
161492
- if (matches.length === 1) {
161493
- return matches[0].id;
161491
+ const matches2 = nodes.filter((n) => n.text.trim() === text22);
161492
+ if (matches2.length === 1) {
161493
+ return matches2[0].id;
161494
161494
  }
161495
161495
  }
161496
161496
  return void 0;
@@ -176335,8 +176335,8 @@ function splitWordsForUnderline(text22) {
176335
176335
  return [];
176336
176336
  }
176337
176337
  const pieces = [];
176338
- const matches = text22.matchAll(/(\s+)|(\S+)/gu);
176339
- for (const match of matches) {
176338
+ const matches2 = text22.matchAll(/(\s+)|(\S+)/gu);
176339
+ for (const match of matches2) {
176340
176340
  if (match[1] !== void 0) {
176341
176341
  pieces.push({ text: match[1], underline: false });
176342
176342
  } else if (match[2] !== void 0) {
@@ -180628,6 +180628,35 @@ function hasCopyableFormat(element) {
180628
180628
  }
180629
180629
  return hasShapeProperties(element) || hasTextProperties(element);
180630
180630
  }
180631
+ function renumberRemappedParagraphs(segments) {
180632
+ const sequence = createAutoNumberSequence();
180633
+ let first = true;
180634
+ return segments.map((segment) => {
180635
+ const paragraphStart = first;
180636
+ first = isParagraphSeparatorSegment(segment);
180637
+ if (!paragraphStart) {
180638
+ return segment;
180639
+ }
180640
+ const info = segment.bulletInfo;
180641
+ const level = segment.paragraphLevel ?? 0;
180642
+ if (!info?.autoNumType || !resolveParagraphBullet(segment)?.isNumbered) {
180643
+ breakAutoNumberRun(sequence, level);
180644
+ return segment;
180645
+ }
180646
+ const ordinal = nextAutoNumber(sequence, level, info.autoNumType, info.autoNumStartAt ?? 1) - (info.autoNumStartAt ?? 1);
180647
+ if (info.paragraphIndex === void 0 || info.paragraphIndex === ordinal) {
180648
+ return segment;
180649
+ }
180650
+ const updated = { ...segment, bulletInfo: { ...info, paragraphIndex: ordinal } };
180651
+ if (isBulletMarkerSegment(segment)) {
180652
+ const resolved = resolveParagraphBullet(updated);
180653
+ if (resolved) {
180654
+ updated.text = resolved.marker + (segment.text.match(/\s+$/u)?.[0] ?? "");
180655
+ }
180656
+ }
180657
+ return updated;
180658
+ });
180659
+ }
180631
180660
  function withoutRenderedBulletPrefix(text22, originalSegments, dedicatedMarker) {
180632
180661
  if (!dedicatedMarker) {
180633
180662
  return text22;
@@ -180674,6 +180703,61 @@ function continueAutoNumberedParagraph(segments, donorSegments, offset) {
180674
180703
  }
180675
180704
  return [continued, ...rest];
180676
180705
  }
180706
+ function matches(text22, paragraph) {
180707
+ const first = paragraph.segments[0];
180708
+ const marker = first && isBulletMarkerSegment(first) && (!first.bulletInfo?.autoNumType || first.bulletInfo.paragraphIndex !== void 0) ? first : void 0;
180709
+ const body = paragraph.segments.slice(marker ? 1 : 0).map((segment) => segment.text).join("");
180710
+ return text22 === body || withoutRenderedBulletPrefix(text22, paragraph.segments, marker) === body;
180711
+ }
180712
+ function alignParagraphSources(texts, original) {
180713
+ const sources = Array.from({ length: texts.length });
180714
+ let prefix = 0;
180715
+ while (prefix < texts.length && prefix < original.length && matches(texts[prefix], original[prefix])) {
180716
+ sources[prefix] = prefix;
180717
+ prefix += 1;
180718
+ }
180719
+ let oldEnd = original.length;
180720
+ let newEnd = texts.length;
180721
+ while (oldEnd > prefix && newEnd > prefix && matches(texts[newEnd - 1], original[oldEnd - 1])) {
180722
+ sources[--newEnd] = --oldEnd;
180723
+ }
180724
+ const anchors = [];
180725
+ const oldCount = oldEnd - prefix;
180726
+ const newCount = newEnd - prefix;
180727
+ if (oldCount * newCount <= 1e4) {
180728
+ const lengths = Array.from({ length: oldCount + 1 }, () => new Uint16Array(newCount + 1));
180729
+ for (let old2 = oldCount - 1; old2 >= 0; old2--) {
180730
+ for (let next2 = newCount - 1; next2 >= 0; next2--) {
180731
+ 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]);
180732
+ }
180733
+ }
180734
+ let old = 0;
180735
+ let next = 0;
180736
+ while (old < oldCount && next < newCount) {
180737
+ if (matches(texts[prefix + next], original[prefix + old])) {
180738
+ anchors.push([prefix + next++, prefix + old++]);
180739
+ } else if (lengths[old + 1][next] >= lengths[old][next + 1]) {
180740
+ old++;
180741
+ } else {
180742
+ next++;
180743
+ }
180744
+ }
180745
+ }
180746
+ anchors.push([newEnd, oldEnd]);
180747
+ let oldCursor = prefix;
180748
+ let newCursor = prefix;
180749
+ for (const [newAnchor, oldAnchor] of anchors) {
180750
+ while (oldCursor < oldAnchor && newCursor < newAnchor) {
180751
+ sources[newCursor++] = oldCursor++;
180752
+ }
180753
+ if (newAnchor < newEnd) {
180754
+ sources[newAnchor] = oldAnchor;
180755
+ }
180756
+ oldCursor = oldAnchor + 1;
180757
+ newCursor = newAnchor + 1;
180758
+ }
180759
+ return sources;
180760
+ }
180677
180761
  function isAtomicOriginalSegment(seg) {
180678
180762
  return seg.fieldType !== void 0 || seg.equationXml !== void 0;
180679
180763
  }
@@ -180735,6 +180819,7 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180735
180819
  }
180736
180820
  }
180737
180821
  const newParagraphTexts = newText.split("\n");
180822
+ const paragraphSources = alignParagraphSources(newParagraphTexts, originalParagraphs);
180738
180823
  const firstContentSeg = originalParagraphs.flatMap((paragraph) => paragraph.segments).find((s) => s.text.trim().length > 0);
180739
180824
  const baseFallbackStyle = firstContentSeg?.style ? { ...firstContentSeg.style } : fallbackStyle;
180740
180825
  function remapParagraph(paraNewText, paraOrigSegments) {
@@ -180823,19 +180908,24 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180823
180908
  }
180824
180909
  const output = [];
180825
180910
  const lastOrigPara = originalParagraphs[originalParagraphs.length - 1]?.segments;
180911
+ const lastSourceOffset = [...paragraphSources].reverse().findIndex((source) => source !== void 0);
180912
+ const appendStart = Math.max(
180913
+ originalParagraphs.length,
180914
+ lastSourceOffset < 0 ? 0 : paragraphSources.length - lastSourceOffset
180915
+ );
180826
180916
  for (let pi = 0; pi < newParagraphTexts.length; pi++) {
180827
180917
  if (pi > 0) {
180828
- const precedingOrigPara = originalParagraphs[pi - 1]?.segments ?? [];
180918
+ const precedingOrigPara = originalParagraphs[paragraphSources[pi - 1] ?? -1]?.segments ?? [];
180829
180919
  const breakStyle = precedingOrigPara[0]?.style ? { ...precedingOrigPara[0].style } : { ...baseFallbackStyle };
180830
180920
  output.push({ text: "\n", style: breakStyle, isParagraphBreak: true });
180831
180921
  }
180832
- const originalParagraph = originalParagraphs[pi];
180922
+ const originalParagraph = originalParagraphs[paragraphSources[pi] ?? -1];
180833
180923
  const origPara = originalParagraph?.segments ?? lastOrigPara ?? [];
180834
180924
  let paraSegments = restoreParagraphMetadata(
180835
180925
  originalParagraph?.segments[0] ?? originalParagraph?.terminator,
180836
180926
  remapParagraph(newParagraphTexts[pi], origPara)
180837
180927
  );
180838
- if (!originalParagraph) {
180928
+ if (!originalParagraph && pi >= appendStart) {
180839
180929
  paraSegments = continueAutoNumberedParagraph(
180840
180930
  paraSegments,
180841
180931
  lastOrigPara ?? [],
@@ -180844,6 +180934,9 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
180844
180934
  }
180845
180935
  output.push(...paraSegments);
180846
180936
  }
180937
+ if (paragraphSources.some((source, index) => source !== void 0 && source !== index)) {
180938
+ return renumberRemappedParagraphs(output);
180939
+ }
180847
180940
  return output.length > 0 ? output : [{ text: "", style: { ...baseFallbackStyle } }];
180848
180941
  }
180849
180942
  function mergeCoincidentHandles(handles) {
@@ -193606,8 +193699,8 @@ function applyFindReplacements(slides, toReplace, replacement) {
193606
193699
  }
193607
193700
  const nextSlides = slides.slice();
193608
193701
  let totalReplacements = 0;
193609
- for (const [, matches] of grouped) {
193610
- const sorted = matches.slice().sort((a, b) => b.startOffset - a.startOffset);
193702
+ for (const [, matches2] of grouped) {
193703
+ const sorted = matches2.slice().sort((a, b) => b.startOffset - a.startOffset);
193611
193704
  for (const match of sorted) {
193612
193705
  const slide = nextSlides[match.slideIndex];
193613
193706
  if (!slide) {
Binary file
Binary file
@@ -1,5 +1,5 @@
1
- import { cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, UNGROUPED_SECTION_ID, DEFAULT_SECTION_GROUP_ID, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, buildPdfFromTiledImageData, buildNotesPdf, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-U2H7CQ34.mjs';
2
- import { GlyphOutlineFontCache, createGlyphOutlineLookup, DEFAULT_VIEWER_OPTIONS, TOOLBAR_TABS, MIN_TOUCH_TARGET_PX, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createPresenceProjector, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, createWheelStepBuffer, createViewerZoomStore, clampZoomScale, mapEditingWheel, createActiveAnimationGroup, cancelBuildReveal, clearPlaybackTimers, PresentationAnimationController, resolveMediaTimeNodeElementIds, advanceMainSequence, playGroup, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, resolveAutoAdvanceDelayMs, hasShowSlideAfter, nextShowSlideIndex, previousShowSlideIndex, createPresenterShowGuard, firstShowSlideIndex, attachPresentationVisibilityPause, presentationEntrySlideIndex, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, visibleTemplateElements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, createPresentationLoadResources, collectMediaElements, resolveMediaElementSource, collectImagePaths, applyImagePathPatches, resolveTableCellImageUrls, resolveTableStyleImageUrls, partitionTemplateElements, seedRecentColors, resolveAuthoredCustomShowId, buildInitialGuides, readOnlyRecommendation, compatibilityWarningToasts, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, hasTextProperties, remapTextToSegments, updateMasterViewElement, isTemplateElementId, updateElement, hasShapeProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, masterViewElements, replaceMasterViewElements, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, canInteractWithElement, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, resolveImageResolutionScale, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, describeFontEmbedding, isMobileViewport, resolveAuthoredSlideRange, mayLeaveSlideShow, stopAllPersistentAudio, guidePxToEmu, buildSaveSlides, buildDeckSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, collectReferencedFontFamilies, resolveGoogleWebfontHref, selectGoogleWebfontFamilies, fetchGoogleWebfontOutlineBytes, mapSlideShowStartKey, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, checkModifyPassword, viewerPreferencesFromViewProperties, DEFAULT_VIEWER_PREFERENCES, viewPropertiesPatchFromPreferences, openPptxFile, readBackstageRecentFile, isActionHidden, buildInlineTextCommitPatch, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, savedPresentationFileName, downloadBlob, exportDeckJson, groupElements, generateElementId, makeCloneId, ungroupElements, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, mapPresentationKey, lastShowSlideIndex, mapPresentationWheel, openPendingPrintWindow, computeColorFilter, filterHiddenSlideIndices, computeSlideIndices, buildPrintDocument, finishPrintWindow, buildPrintHtmlDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, reResolveElementColors, scheduleAutoAdvanceChain, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, resolveTransitionSoundAction, runPresentationAction, safeOpenUrl, buildRunProgramNotice, toggleStageElementMedia, resolveOleVerbTarget, downloadDataUrl, openUrlInNewTab, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, resolveExportCaptureDecision, recordProgressPercent, computeGridSpacingPx, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, resolveHistoryDepth, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, replyToCommentInList, removeTableElementColumn, insertTableElementColumn, removeTableElementRow, insertTableElementRow, updateCellTextStyleInRawXml, setCellText, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, GIF_POST_CAPTURE_MAX_SIDE, encodeGif, rasterResultToPngBlob, rasterizeElementTiles, placeTileOnPage, PDF_SLIDES_PAGE_WIDTH_PT, PDF_SLIDES_PAGE_HEIGHT_PT, canvasToJpegData, rasterizeElementTiledToCanvas, isPpactionUrl, parsePpactionUrl, resolvePresentationAction, ACTION_BUTTON_PRESETS, elementActionToPptxAction, isUrlSafe, buildSmartArtPresetData, classifyMediaType, computeSnapToShape, publishLiveGeometry, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, clampGifDimensions, rasterizeElement, shouldConfirmExternalHyperlink, applyResize, lockResizeAspect, snapBoxToGrid, applyMotionPathPreset } from './chunk-PO2PYVHF.mjs';
1
+ import { cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, UNGROUPED_SECTION_ID, DEFAULT_SECTION_GROUP_ID, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, buildPdfFromTiledImageData, buildNotesPdf, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-B3YVURJB.mjs';
2
+ import { GlyphOutlineFontCache, createGlyphOutlineLookup, DEFAULT_VIEWER_OPTIONS, TOOLBAR_TABS, MIN_TOUCH_TARGET_PX, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createPresenceProjector, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, createWheelStepBuffer, createViewerZoomStore, clampZoomScale, mapEditingWheel, createActiveAnimationGroup, cancelBuildReveal, clearPlaybackTimers, PresentationAnimationController, resolveMediaTimeNodeElementIds, advanceMainSequence, playGroup, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, resolveAutoAdvanceDelayMs, hasShowSlideAfter, nextShowSlideIndex, previousShowSlideIndex, createPresenterShowGuard, firstShowSlideIndex, attachPresentationVisibilityPause, presentationEntrySlideIndex, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, visibleTemplateElements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, createPresentationLoadResources, collectMediaElements, resolveMediaElementSource, collectImagePaths, applyImagePathPatches, resolveTableCellImageUrls, resolveTableStyleImageUrls, partitionTemplateElements, seedRecentColors, resolveAuthoredCustomShowId, buildInitialGuides, readOnlyRecommendation, compatibilityWarningToasts, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, hasTextProperties, remapTextToSegments, updateMasterViewElement, isTemplateElementId, updateElement, hasShapeProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, masterViewElements, replaceMasterViewElements, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, canInteractWithElement, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, resolveImageResolutionScale, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, describeFontEmbedding, isMobileViewport, resolveAuthoredSlideRange, mayLeaveSlideShow, stopAllPersistentAudio, guidePxToEmu, buildSaveSlides, buildDeckSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, collectReferencedFontFamilies, resolveGoogleWebfontHref, selectGoogleWebfontFamilies, fetchGoogleWebfontOutlineBytes, mapSlideShowStartKey, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, checkModifyPassword, viewerPreferencesFromViewProperties, DEFAULT_VIEWER_PREFERENCES, viewPropertiesPatchFromPreferences, openPptxFile, readBackstageRecentFile, isActionHidden, buildInlineTextCommitPatch, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, savedPresentationFileName, downloadBlob, exportDeckJson, groupElements, generateElementId, makeCloneId, ungroupElements, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, mapPresentationKey, lastShowSlideIndex, mapPresentationWheel, openPendingPrintWindow, computeColorFilter, filterHiddenSlideIndices, computeSlideIndices, buildPrintDocument, finishPrintWindow, buildPrintHtmlDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, reResolveElementColors, scheduleAutoAdvanceChain, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, resolveTransitionSoundAction, runPresentationAction, safeOpenUrl, buildRunProgramNotice, toggleStageElementMedia, resolveOleVerbTarget, downloadDataUrl, openUrlInNewTab, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, resolveExportCaptureDecision, recordProgressPercent, computeGridSpacingPx, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, resolveHistoryDepth, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, replyToCommentInList, removeTableElementColumn, insertTableElementColumn, removeTableElementRow, insertTableElementRow, updateCellTextStyleInRawXml, setCellText, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, GIF_POST_CAPTURE_MAX_SIDE, encodeGif, rasterResultToPngBlob, rasterizeElementTiles, placeTileOnPage, PDF_SLIDES_PAGE_WIDTH_PT, PDF_SLIDES_PAGE_HEIGHT_PT, canvasToJpegData, rasterizeElementTiledToCanvas, isPpactionUrl, parsePpactionUrl, resolvePresentationAction, ACTION_BUTTON_PRESETS, elementActionToPptxAction, isUrlSafe, buildSmartArtPresetData, classifyMediaType, computeSnapToShape, publishLiveGeometry, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, clampGifDimensions, rasterizeElement, shouldConfirmExternalHyperlink, applyResize, lockResizeAspect, snapBoxToGrid, applyMotionPathPreset } from './chunk-XMD6ZWUO.mjs';
3
3
  import { translationsEn } from './chunk-HMX3MQR7.mjs';
4
4
  import { createContext, useRef, useState, useEffect, useCallback, useMemo, useLayoutEffect, useContext, useImperativeHandle, useSyncExternalStore } from 'react';
5
5
  import { useTranslation } from 'react-i18next';
@@ -4968,6 +4968,8 @@ function processPointerUp(input) {
4968
4968
  setSnapLines([]);
4969
4969
  if (wasMoved) {
4970
4970
  markDirty();
4971
+ }
4972
+ if (drag || rs || adj || marquee) {
4971
4973
  setPointerCommitNonce((n) => n + 1);
4972
4974
  }
4973
4975
  }
@@ -11688,7 +11690,8 @@ function useViewerBuildingBlocksState(input) {
11688
11690
  preMasterMode: state.preMasterMode,
11689
11691
  hasDigitalSignatures: state.hasDigitalSignatures,
11690
11692
  isDirty: state.isDirty,
11691
- history
11693
+ history,
11694
+ embeddedFontFamilies: state.embeddedFonts.map((font) => font.name)
11692
11695
  });
11693
11696
  const readOnlyRec = useReadOnlyRecommendationState(content);
11694
11697
  const compatToastsState = useCompatibilityToastsState();
Binary file
Binary file