pptx-react-viewer 1.25.1 → 1.25.3

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 (90) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{Model3DScene-AWSM6CYB.js → Model3DScene-F2GUSTZI.js} +3 -3
  3. package/dist/Model3DScene-F2GUSTZI.js.br +0 -0
  4. package/dist/Model3DScene-F2GUSTZI.js.gz +0 -0
  5. package/dist/{Model3DScene-2QZ7CADN.mjs → Model3DScene-IQLE5JLL.mjs} +2 -2
  6. package/dist/Model3DScene-IQLE5JLL.mjs.br +0 -0
  7. package/dist/Model3DScene-IQLE5JLL.mjs.gz +0 -0
  8. package/dist/{SurfaceChart3DScene-PJ36HRGC.js → SurfaceChart3DScene-4OMD7LWR.js} +3 -3
  9. package/dist/SurfaceChart3DScene-4OMD7LWR.js.br +0 -0
  10. package/dist/SurfaceChart3DScene-4OMD7LWR.js.gz +0 -0
  11. package/dist/{SurfaceChart3DScene-IW4WGZHH.mjs → SurfaceChart3DScene-JG26PJ7O.mjs} +2 -2
  12. package/dist/SurfaceChart3DScene-JG26PJ7O.mjs.br +0 -0
  13. package/dist/SurfaceChart3DScene-JG26PJ7O.mjs.gz +0 -0
  14. package/dist/{chunk-CYZLRYJV.js → chunk-2V6BD4JQ.js} +130 -39
  15. package/dist/chunk-2V6BD4JQ.js.br +0 -0
  16. package/dist/chunk-2V6BD4JQ.js.gz +0 -0
  17. package/dist/{chunk-ASN2DZSP.js → chunk-5G3SPYQE.js} +812 -810
  18. package/dist/chunk-5G3SPYQE.js.br +0 -0
  19. package/dist/chunk-5G3SPYQE.js.gz +0 -0
  20. package/dist/{chunk-M7JHZV3P.mjs → chunk-DAI4KM5W.mjs} +130 -39
  21. package/dist/chunk-DAI4KM5W.mjs.br +0 -0
  22. package/dist/chunk-DAI4KM5W.mjs.gz +0 -0
  23. package/dist/{chunk-PMGLZ7N4.mjs → chunk-DVM75RMN.mjs} +63 -6
  24. package/dist/chunk-DVM75RMN.mjs.br +0 -0
  25. package/dist/chunk-DVM75RMN.mjs.gz +0 -0
  26. package/dist/{chunk-RVKPHAK5.mjs → chunk-GNXWU7UG.mjs} +10 -8
  27. package/dist/chunk-GNXWU7UG.mjs.br +0 -0
  28. package/dist/chunk-GNXWU7UG.mjs.gz +0 -0
  29. package/dist/{chunk-QTIJWFJX.mjs → chunk-NYBERTS7.mjs} +12 -4
  30. package/dist/chunk-NYBERTS7.mjs.br +0 -0
  31. package/dist/chunk-NYBERTS7.mjs.gz +0 -0
  32. package/dist/{chunk-NIWO2WYI.js → chunk-UXVFNGJH.js} +96 -39
  33. package/dist/chunk-UXVFNGJH.js.br +0 -0
  34. package/dist/chunk-UXVFNGJH.js.gz +0 -0
  35. package/dist/{chunk-NT5FIWWU.js → chunk-ZUJHFLOR.js} +472 -464
  36. package/dist/chunk-ZUJHFLOR.js.br +0 -0
  37. package/dist/chunk-ZUJHFLOR.js.gz +0 -0
  38. package/dist/{dist-RHAXXX2R.mjs → dist-E3IHM3OU.mjs} +1 -1
  39. package/dist/dist-E3IHM3OU.mjs.br +0 -0
  40. package/dist/dist-E3IHM3OU.mjs.gz +0 -0
  41. package/dist/{dist-AFRACFHO.js → dist-ZA77P2O5.js} +562 -562
  42. package/dist/dist-ZA77P2O5.js.br +0 -0
  43. package/dist/dist-ZA77P2O5.js.gz +0 -0
  44. package/dist/hooks-unstable.js +78 -78
  45. package/dist/hooks-unstable.js.br +0 -0
  46. package/dist/hooks-unstable.js.gz +0 -0
  47. package/dist/hooks-unstable.mjs +3 -3
  48. package/dist/hooks-unstable.mjs.br +0 -0
  49. package/dist/hooks-unstable.mjs.gz +0 -0
  50. package/dist/index.js +33 -33
  51. package/dist/index.js.br +0 -0
  52. package/dist/index.js.gz +0 -0
  53. package/dist/index.mjs +4 -4
  54. package/dist/index.mjs.br +0 -0
  55. package/dist/index.mjs.gz +0 -0
  56. package/dist/viewer/index.js +20 -20
  57. package/dist/viewer/index.js.br +0 -0
  58. package/dist/viewer/index.js.gz +0 -0
  59. package/dist/viewer/index.mjs +4 -4
  60. package/dist/viewer/index.mjs.br +0 -0
  61. package/dist/viewer/index.mjs.gz +0 -0
  62. package/package.json +1 -1
  63. package/dist/Model3DScene-2QZ7CADN.mjs.br +0 -0
  64. package/dist/Model3DScene-2QZ7CADN.mjs.gz +0 -0
  65. package/dist/Model3DScene-AWSM6CYB.js.br +0 -0
  66. package/dist/Model3DScene-AWSM6CYB.js.gz +0 -0
  67. package/dist/SurfaceChart3DScene-IW4WGZHH.mjs.br +0 -0
  68. package/dist/SurfaceChart3DScene-IW4WGZHH.mjs.gz +0 -0
  69. package/dist/SurfaceChart3DScene-PJ36HRGC.js.br +0 -0
  70. package/dist/SurfaceChart3DScene-PJ36HRGC.js.gz +0 -0
  71. package/dist/chunk-ASN2DZSP.js.br +0 -0
  72. package/dist/chunk-ASN2DZSP.js.gz +0 -0
  73. package/dist/chunk-CYZLRYJV.js.br +0 -0
  74. package/dist/chunk-CYZLRYJV.js.gz +0 -0
  75. package/dist/chunk-M7JHZV3P.mjs.br +0 -0
  76. package/dist/chunk-M7JHZV3P.mjs.gz +0 -0
  77. package/dist/chunk-NIWO2WYI.js.br +0 -0
  78. package/dist/chunk-NIWO2WYI.js.gz +0 -0
  79. package/dist/chunk-NT5FIWWU.js.br +0 -0
  80. package/dist/chunk-NT5FIWWU.js.gz +0 -0
  81. package/dist/chunk-PMGLZ7N4.mjs.br +0 -0
  82. package/dist/chunk-PMGLZ7N4.mjs.gz +0 -0
  83. package/dist/chunk-QTIJWFJX.mjs.br +0 -0
  84. package/dist/chunk-QTIJWFJX.mjs.gz +0 -0
  85. package/dist/chunk-RVKPHAK5.mjs.br +0 -0
  86. package/dist/chunk-RVKPHAK5.mjs.gz +0 -0
  87. package/dist/dist-AFRACFHO.js.br +0 -0
  88. package/dist/dist-AFRACFHO.js.gz +0 -0
  89. package/dist/dist-RHAXXX2R.mjs.br +0 -0
  90. package/dist/dist-RHAXXX2R.mjs.gz +0 -0
Binary file
Binary file
@@ -7098,14 +7098,52 @@ function extractSourceOrders(xml) {
7098
7098
  }
7099
7099
  return orders;
7100
7100
  }
7101
+ function ensureArrayLocal(value) {
7102
+ return Array.isArray(value) ? value : value === void 0 ? [] : [value];
7103
+ }
7104
+ function countsSignature(counts) {
7105
+ return [...counts.entries()].sort((a, b) => a[0] < b[0] ? -1 : 1).map(([name, count]) => `${name}:${count}`).join(",");
7106
+ }
7107
+ function pathSignature(path) {
7108
+ const counts = /* @__PURE__ */ new Map();
7109
+ for (const key of Object.keys(path)) {
7110
+ const name = localName(key);
7111
+ if (!PATH_COMMANDS.has(name)) {
7112
+ continue;
7113
+ }
7114
+ counts.set(name, (counts.get(name) ?? 0) + ensureArrayLocal(path[key]).length);
7115
+ }
7116
+ return countsSignature(counts);
7117
+ }
7118
+ function orderSignature(order) {
7119
+ const counts = /* @__PURE__ */ new Map();
7120
+ for (const name of order) {
7121
+ counts.set(name, (counts.get(name) ?? 0) + 1);
7122
+ }
7123
+ return countsSignature(counts);
7124
+ }
7101
7125
  function annotateCustomGeometryCommandOrder(xml, parsed) {
7102
7126
  const orders = extractSourceOrders(xml);
7103
7127
  if (orders.length === 0) {
7104
7128
  return;
7105
7129
  }
7106
7130
  const paths = collectParsedPaths(parsed);
7107
- for (let index = 0; index < Math.min(paths.length, orders.length); index++) {
7108
- commandOrder.set(paths[index], orders[index]);
7131
+ const ordersBySignature = /* @__PURE__ */ new Map();
7132
+ for (const order of orders) {
7133
+ const signature = orderSignature(order);
7134
+ const bucket = ordersBySignature.get(signature);
7135
+ if (bucket) {
7136
+ bucket.push(order);
7137
+ } else {
7138
+ ordersBySignature.set(signature, [order]);
7139
+ }
7140
+ }
7141
+ for (const path of paths) {
7142
+ const bucket = ordersBySignature.get(pathSignature(path));
7143
+ const order = bucket?.shift();
7144
+ if (order) {
7145
+ commandOrder.set(path, order);
7146
+ }
7109
7147
  }
7110
7148
  }
7111
7149
  function orderedPathCommandEntries(path, ensureArray16) {
@@ -29487,15 +29525,15 @@ function getConnectorPathGeometry(element) {
29487
29525
  }
29488
29526
  function getElementTransform(element) {
29489
29527
  const transforms = [];
29528
+ if (element.rotation) {
29529
+ transforms.push(`rotate(${element.rotation}deg)`);
29530
+ }
29490
29531
  if (element.flipHorizontal) {
29491
29532
  transforms.push("scaleX(-1)");
29492
29533
  }
29493
29534
  if (element.flipVertical) {
29494
29535
  transforms.push("scaleY(-1)");
29495
29536
  }
29496
- if (element.rotation) {
29497
- transforms.push(`rotate(${element.rotation}deg)`);
29498
- }
29499
29537
  return transforms.length > 0 ? transforms.join(" ") : void 0;
29500
29538
  }
29501
29539
  function getTextCompensationTransform(element) {
@@ -67597,7 +67635,7 @@ var PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
67597
67635
  pointsToPixels(points3) {
67598
67636
  return points3 * (96 / 72);
67599
67637
  }
67600
- parseParagraphSpacingPx(spacingNode) {
67638
+ parseParagraphSpacingPx(spacingNode, basisFontSizePx) {
67601
67639
  if (!spacingNode) {
67602
67640
  return void 0;
67603
67641
  }
@@ -67608,6 +67646,13 @@ var PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
67608
67646
  if (Number.isFinite(spacingPointsRaw)) {
67609
67647
  return this.pointsToPixels(spacingPointsRaw / 100);
67610
67648
  }
67649
+ const spacingPercentRaw = Number.parseInt(
67650
+ String(spacingNode["a:spcPct"]?.["@_val"] || ""),
67651
+ 10
67652
+ );
67653
+ if (Number.isFinite(spacingPercentRaw) && typeof basisFontSizePx === "number" && basisFontSizePx > 0) {
67654
+ return spacingPercentRaw / 1e5 * basisFontSizePx;
67655
+ }
67611
67656
  return void 0;
67612
67657
  }
67613
67658
  parseLineSpacingMultiplier(lineSpacingNode) {
@@ -67685,7 +67730,7 @@ var PptxHandlerRuntime59 = class extends PptxHandlerRuntime58 {
67685
67730
  }
67686
67731
  };
67687
67732
  var PptxHandlerRuntime60 = class extends PptxHandlerRuntime59 {
67688
- resolveParagraphBulletInfo(paragraph, paragraphIndex, txBody, inheritedTxBody, isBodyPlaceholder = false, slidePath) {
67733
+ resolveParagraphBulletInfo(paragraph, paragraphIndex, txBody, inheritedTxBody, isBodyPlaceholder = false, slidePath, effectiveLevelStyles) {
67689
67734
  if (!paragraph) {
67690
67735
  return null;
67691
67736
  }
@@ -67721,11 +67766,8 @@ var PptxHandlerRuntime60 = class extends PptxHandlerRuntime59 {
67721
67766
  }
67722
67767
  }
67723
67768
  if (!resolvedBulletProps) {
67724
- if (isBodyPlaceholder) {
67725
- const presentationLevelStyle = this.presentationDefaultTextStyle?.levelStyles?.[normalizedLevel - 1] ?? this.presentationDefaultTextStyle?.levelStyles?.[-1];
67726
- return this.createBulletInfoFromLevelStyle(presentationLevelStyle, paragraphIndex);
67727
- }
67728
- return null;
67769
+ const fallbackLevelStyle = effectiveLevelStyles?.[normalizedLevel - 1] ?? effectiveLevelStyles?.[-1] ?? (isBodyPlaceholder ? this.presentationDefaultTextStyle?.levelStyles?.[normalizedLevel - 1] ?? this.presentationDefaultTextStyle?.levelStyles?.[-1] : void 0);
67770
+ return this.createBulletInfoFromLevelStyle(fallbackLevelStyle, paragraphIndex);
67729
67771
  }
67730
67772
  const buFont = resolvedBulletProps["a:buFont"];
67731
67773
  const fontFamily = buFont?.["@_typeface"] ? String(buFont["@_typeface"]) : void 0;
@@ -68211,16 +68253,21 @@ var PptxHandlerRuntime62 = class _PptxHandlerRuntime26 extends PptxHandlerRuntim
68211
68253
  textStyle.align = paraAlign;
68212
68254
  }
68213
68255
  }
68256
+ const spacingBasisPx = typeof textStyle.fontSize === "number" ? textStyle.fontSize : void 0;
68214
68257
  if (textStyle.paragraphSpacingBefore === void 0) {
68215
68258
  const spacingBefore = this.parseParagraphSpacingPx(
68216
- pPr?.["a:spcBef"]
68259
+ pPr?.["a:spcBef"],
68260
+ spacingBasisPx
68217
68261
  );
68218
68262
  if (spacingBefore !== void 0) {
68219
68263
  textStyle.paragraphSpacingBefore = spacingBefore;
68220
68264
  }
68221
68265
  }
68222
68266
  if (textStyle.paragraphSpacingAfter === void 0) {
68223
- const spacingAfter = this.parseParagraphSpacingPx(pPr?.["a:spcAft"]);
68267
+ const spacingAfter = this.parseParagraphSpacingPx(
68268
+ pPr?.["a:spcAft"],
68269
+ spacingBasisPx
68270
+ );
68224
68271
  if (spacingAfter !== void 0) {
68225
68272
  textStyle.paragraphSpacingAfter = spacingAfter;
68226
68273
  }
@@ -68392,7 +68439,8 @@ var PptxHandlerRuntime63 = class extends PptxHandlerRuntime62 {
68392
68439
  ctx.txBody,
68393
68440
  ctx.inheritedTxBody,
68394
68441
  isBodyPlaceholder,
68395
- ctx.slidePath
68442
+ ctx.slidePath,
68443
+ ctx.effectiveLevelStyles
68396
68444
  );
68397
68445
  if (paragraphBulletInfo && !paragraphBulletInfo.none) {
68398
68446
  let bulletText;
@@ -69983,6 +70031,7 @@ var PptxHandlerRuntime69 = class extends PptxHandlerRuntime68 {
69983
70031
  if (!normalized) {
69984
70032
  return void 0;
69985
70033
  }
70034
+ const canon = (key) => key.toLowerCase() === "folhlink" ? "folHlink" : key;
69986
70035
  if (normalized === "phclr") {
69987
70036
  const injected = this.themeColorMap["phclr"];
69988
70037
  if (injected) {
@@ -69992,17 +70041,18 @@ var PptxHandlerRuntime69 = class extends PptxHandlerRuntime68 {
69992
70041
  }
69993
70042
  const overrideMap = this.currentSlideClrMapOverride ?? this.currentMasterClrMap;
69994
70043
  if (overrideMap) {
69995
- const remapped = overrideMap[normalized];
70044
+ const remapped = overrideMap[canon(normalized)];
69996
70045
  if (remapped) {
69997
- return this.themeColorMap[remapped] || this.getDefaultSchemeColorMap()[remapped];
70046
+ const target = canon(remapped);
70047
+ return this.themeColorMap[target] || this.getDefaultSchemeColorMap()[target];
69998
70048
  }
69999
70049
  } else {
70000
70050
  const defaultAliasTarget = DEFAULT_CLR_MAP_ALIAS[normalized];
70001
70051
  if (defaultAliasTarget) {
70002
- return this.themeColorMap[defaultAliasTarget] || this.themeColorMap[normalized] || this.getDefaultSchemeColorMap()[normalized];
70052
+ return this.themeColorMap[defaultAliasTarget] || this.themeColorMap[canon(normalized)] || this.getDefaultSchemeColorMap()[canon(normalized)];
70003
70053
  }
70004
70054
  }
70005
- return this.themeColorMap[normalized] || this.getDefaultSchemeColorMap()[normalized];
70055
+ return this.themeColorMap[canon(normalized)] || this.getDefaultSchemeColorMap()[canon(normalized)];
70006
70056
  }
70007
70057
  normalizeStrokeDashType(value) {
70008
70058
  const normalized = String(value ?? "").trim();
@@ -70289,6 +70339,40 @@ var PptxHandlerRuntime70 = class extends PptxHandlerRuntime69 {
70289
70339
  }
70290
70340
  return void 0;
70291
70341
  }
70342
+ /**
70343
+ * Reuse the cached parse of a layout XML part, parsing (and caching) on a
70344
+ * miss. Background resolution runs per slide but the layout/master parts are
70345
+ * large (a themed master can be ~200 KB); re-parsing them for every slide
70346
+ * dominated load time, so share the same parsed object `getLayoutElements`
70347
+ * already populated.
70348
+ */
70349
+ async resolveCachedLayoutXml(layoutPath) {
70350
+ const cached = this.layoutXmlMap.get(layoutPath);
70351
+ if (cached) {
70352
+ return cached;
70353
+ }
70354
+ const xml = await this.zip.file(layoutPath)?.async("string");
70355
+ if (!xml) {
70356
+ return void 0;
70357
+ }
70358
+ const parsed = this.parser.parse(xml);
70359
+ this.layoutXmlMap.set(layoutPath, parsed);
70360
+ return parsed;
70361
+ }
70362
+ /** Reuse the cached parse of a master XML part, parsing (and caching) on a miss. */
70363
+ async resolveCachedMasterXml(masterPath) {
70364
+ const cached = this.masterXmlMap.get(masterPath);
70365
+ if (cached) {
70366
+ return cached;
70367
+ }
70368
+ const xml = await this.zip.file(masterPath)?.async("string");
70369
+ if (!xml) {
70370
+ return void 0;
70371
+ }
70372
+ const parsed = this.parser.parse(xml);
70373
+ this.masterXmlMap.set(masterPath, parsed);
70374
+ return parsed;
70375
+ }
70292
70376
  async getMasterBackgroundImage(layoutPath) {
70293
70377
  const layoutRels = this.slideRelsMap.get(layoutPath);
70294
70378
  if (!layoutRels) {
@@ -70299,9 +70383,8 @@ var PptxHandlerRuntime70 = class extends PptxHandlerRuntime69 {
70299
70383
  const layoutDir = layoutPath.substring(0, layoutPath.lastIndexOf("/") + 1);
70300
70384
  const masterPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${stripParentDirSegments(target)}`;
70301
70385
  try {
70302
- const masterXmlStr = await this.zip.file(masterPath)?.async("string");
70303
- if (masterXmlStr) {
70304
- const masterXmlObj = this.parser.parse(masterXmlStr);
70386
+ const masterXmlObj = await this.resolveCachedMasterXml(masterPath);
70387
+ if (masterXmlObj) {
70305
70388
  const masterRelsPath = `${masterPath.replace("slideMasters/", "slideMasters/_rels/")}.rels`;
70306
70389
  await this.loadSlideRelationships(masterPath, masterRelsPath);
70307
70390
  return this.extractBackgroundImage(masterXmlObj, masterPath, "p:sldMaster");
@@ -70323,9 +70406,8 @@ var PptxHandlerRuntime70 = class extends PptxHandlerRuntime69 {
70323
70406
  const slideDir = slidePath.substring(0, slidePath.lastIndexOf("/") + 1);
70324
70407
  const layoutPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${stripParentDirSegments(target)}`;
70325
70408
  try {
70326
- const layoutXmlStr = await this.zip.file(layoutPath)?.async("string");
70327
- if (layoutXmlStr) {
70328
- const layoutXmlObj = this.parser.parse(layoutXmlStr);
70409
+ const layoutXmlObj = await this.resolveCachedLayoutXml(layoutPath);
70410
+ if (layoutXmlObj) {
70329
70411
  const layoutRelsPath = `${layoutPath.replace("slideLayouts/", "slideLayouts/_rels/")}.rels`;
70330
70412
  await this.loadSlideRelationships(layoutPath, layoutRelsPath);
70331
70413
  const bg = this.extractBackgroundImage(layoutXmlObj, layoutPath, "p:sldLayout");
@@ -70351,9 +70433,8 @@ var PptxHandlerRuntime70 = class extends PptxHandlerRuntime69 {
70351
70433
  const slideDir = slidePath.substring(0, slidePath.lastIndexOf("/") + 1);
70352
70434
  const layoutPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${stripParentDirSegments(target)}`;
70353
70435
  try {
70354
- const layoutXmlStr = await this.zip.file(layoutPath)?.async("string");
70355
- if (layoutXmlStr) {
70356
- const layoutXmlObj = this.parser.parse(layoutXmlStr);
70436
+ const layoutXmlObj = await this.resolveCachedLayoutXml(layoutPath);
70437
+ if (layoutXmlObj) {
70357
70438
  const layoutBg = this.extractBackgroundColor(layoutXmlObj, "p:sldLayout");
70358
70439
  if (layoutBg) {
70359
70440
  return layoutBg;
@@ -70380,9 +70461,8 @@ var PptxHandlerRuntime70 = class extends PptxHandlerRuntime69 {
70380
70461
  const layoutDir = layoutPath.substring(0, layoutPath.lastIndexOf("/") + 1);
70381
70462
  const masterPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${stripParentDirSegments(target)}`;
70382
70463
  try {
70383
- const masterXmlStr = await this.zip.file(masterPath)?.async("string");
70384
- if (masterXmlStr) {
70385
- const masterXmlObj = this.parser.parse(masterXmlStr);
70464
+ const masterXmlObj = await this.resolveCachedMasterXml(masterPath);
70465
+ if (masterXmlObj) {
70386
70466
  return this.extractBackgroundColor(masterXmlObj, "p:sldMaster");
70387
70467
  }
70388
70468
  } catch {
@@ -70407,9 +70487,8 @@ var PptxHandlerRuntime71 = class extends PptxHandlerRuntime70 {
70407
70487
  const slideDir = slidePath.substring(0, slidePath.lastIndexOf("/") + 1);
70408
70488
  const layoutPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(slideDir, target) : `ppt/${stripParentDirSegments(target)}`;
70409
70489
  try {
70410
- const layoutXmlStr = await this.zip.file(layoutPath)?.async("string");
70411
- if (layoutXmlStr) {
70412
- const layoutXmlObj = this.parser.parse(layoutXmlStr);
70490
+ const layoutXmlObj = await this.resolveCachedLayoutXml(layoutPath);
70491
+ if (layoutXmlObj) {
70413
70492
  const layoutGrad = this.extractBackgroundGradient(layoutXmlObj, "p:sldLayout");
70414
70493
  if (layoutGrad) {
70415
70494
  return layoutGrad;
@@ -70436,9 +70515,8 @@ var PptxHandlerRuntime71 = class extends PptxHandlerRuntime70 {
70436
70515
  const layoutDir = layoutPath.substring(0, layoutPath.lastIndexOf("/") + 1);
70437
70516
  const masterPath = target.startsWith("/") ? target.substring(1) : target.startsWith("..") ? this.resolvePath(layoutDir, target) : `ppt/${stripParentDirSegments(target)}`;
70438
70517
  try {
70439
- const masterXmlStr = await this.zip.file(masterPath)?.async("string");
70440
- if (masterXmlStr) {
70441
- const masterXmlObj = this.parser.parse(masterXmlStr);
70518
+ const masterXmlObj = await this.resolveCachedMasterXml(masterPath);
70519
+ if (masterXmlObj) {
70442
70520
  return this.extractBackgroundGradient(masterXmlObj, "p:sldMaster");
70443
70521
  }
70444
70522
  } catch {
@@ -70751,11 +70829,24 @@ var PptxHandlerRuntime72 = class _PptxHandlerRuntime31 extends PptxHandlerRuntim
70751
70829
  }
70752
70830
  }
70753
70831
  }
70754
- const spcBef = this.parseParagraphSpacingPx(levelProps["a:spcBef"]);
70832
+ const defRPrSzRaw = Number.parseInt(
70833
+ String(
70834
+ levelProps["a:defRPr"]?.["@_sz"] || ""
70835
+ ),
70836
+ 10
70837
+ );
70838
+ const basisFontSizePx = Number.isFinite(defRPrSzRaw) ? this.pointsToPixels(defRPrSzRaw / 100) : void 0;
70839
+ const spcBef = this.parseParagraphSpacingPx(
70840
+ levelProps["a:spcBef"],
70841
+ basisFontSizePx
70842
+ );
70755
70843
  if (spcBef !== void 0) {
70756
70844
  style.spaceBefore = spcBef;
70757
70845
  }
70758
- const spcAft = this.parseParagraphSpacingPx(levelProps["a:spcAft"]);
70846
+ const spcAft = this.parseParagraphSpacingPx(
70847
+ levelProps["a:spcAft"],
70848
+ basisFontSizePx
70849
+ );
70759
70850
  if (spcAft !== void 0) {
70760
70851
  style.spaceAfter = spcAft;
70761
70852
  }
Binary file
Binary file
@@ -1,4 +1,4 @@
1
- import { MIN_ELEMENT_SIZE, guideEmuToPx, THEME_COLOR_SCHEME_KEYS, hasShapeProperties, hasTextProperties, createChartElement, getShapeClipPath, getAdjustmentAwareShapeClipPath, getShapeClipPathFromPreset, getCloudPathForRendering, hslToRgb, PRESET_COLOR_MAP, isImageLikeElement, stripXmlOrderSuffix, orderedXmlKey, applyDrawingColorTransforms } from './chunk-M7JHZV3P.mjs';
1
+ import { MIN_ELEMENT_SIZE, guideEmuToPx, THEME_COLOR_SCHEME_KEYS, hasShapeProperties, hasTextProperties, createChartElement, getShapeClipPath, getAdjustmentAwareShapeClipPath, getShapeClipPathFromPreset, getCloudPathForRendering, hslToRgb, PRESET_COLOR_MAP, isImageLikeElement, stripXmlOrderSuffix, orderedXmlKey, applyDrawingColorTransforms } from './chunk-DAI4KM5W.mjs';
2
2
  import DOMPurify from 'dompurify';
3
3
 
4
4
  var defaultThemeColors = {
@@ -341,13 +341,70 @@ function getResolvedShapeClipPathFor(shapeType, width, height, adjustments) {
341
341
  }
342
342
  return getShapeClipPath(shapeType);
343
343
  }
344
+ function buildCustomGeometryClipPath(pathData, pathWidth, pathHeight, elemWidth, elemHeight) {
345
+ if (!pathData || !Number.isFinite(pathWidth) || !Number.isFinite(pathHeight) || pathWidth <= 0 || pathHeight <= 0 || !Number.isFinite(elemWidth) || !Number.isFinite(elemHeight) || elemWidth <= 0 || elemHeight <= 0) {
346
+ return void 0;
347
+ }
348
+ const sx = elemWidth / pathWidth;
349
+ const sy = elemHeight / pathHeight;
350
+ const round = (n) => {
351
+ const r = Math.round(n * 100) / 100;
352
+ return Object.is(r, -0) ? "0" : String(r);
353
+ };
354
+ const tokens = pathData.match(/[MLCQZAHVmlcqzahv][^MLCQZAHVmlcqzahv]*/g) ?? [];
355
+ const out = [];
356
+ for (const token of tokens) {
357
+ const cmd = token[0];
358
+ const upper = cmd.toUpperCase();
359
+ if (upper === "Z") {
360
+ out.push("Z");
361
+ continue;
362
+ }
363
+ const nums = (token.slice(1).match(/-?[\d.]+(?:e-?\d+)?/gi) ?? []).map(Number);
364
+ if (upper === "A") {
365
+ const parts = [];
366
+ for (let i = 0; i + 6 < nums.length; i += 7) {
367
+ parts.push(
368
+ round(nums[i] * sx),
369
+ round(nums[i + 1] * sy),
370
+ String(nums[i + 2]),
371
+ String(nums[i + 3]),
372
+ String(nums[i + 4]),
373
+ round(nums[i + 5] * sx),
374
+ round(nums[i + 6] * sy)
375
+ );
376
+ }
377
+ out.push(`A ${parts.join(" ")}`);
378
+ continue;
379
+ }
380
+ const scaled = nums.map((n, i) => round(n * (i % 2 === 0 ? sx : sy)));
381
+ out.push(`${upper} ${scaled.join(" ")}`);
382
+ }
383
+ if (out.length === 0) {
384
+ return void 0;
385
+ }
386
+ return `path('${out.join(" ")}')`;
387
+ }
344
388
  function getResolvedShapeClipPath(element, width, height) {
389
+ const w = typeof width === "number" ? width : element.width;
390
+ const h = typeof height === "number" ? height : element.height;
391
+ const custom = element;
392
+ if (custom.pathData && custom.pathWidth && custom.pathHeight) {
393
+ const customClip = buildCustomGeometryClipPath(
394
+ custom.pathData,
395
+ custom.pathWidth,
396
+ custom.pathHeight,
397
+ w,
398
+ h
399
+ );
400
+ if (customClip) {
401
+ return customClip;
402
+ }
403
+ }
345
404
  const shapeType = element.shapeType;
346
405
  if (!shapeType) {
347
406
  return void 0;
348
407
  }
349
- const w = typeof width === "number" ? width : element.width;
350
- const h = typeof height === "number" ? height : element.height;
351
408
  const adjustments = element.shapeAdjustments;
352
409
  return getResolvedShapeClipPathFor(shapeType, w, h, adjustments);
353
410
  }
@@ -984,15 +1041,15 @@ function getSvgStrokeDasharray(dashType, strokeWidth, customDashSegments) {
984
1041
  }
985
1042
  function getElementTransform(element) {
986
1043
  const transforms = [];
1044
+ if (element.rotation) {
1045
+ transforms.push(`rotate(${element.rotation}deg)`);
1046
+ }
987
1047
  if (element.flipHorizontal) {
988
1048
  transforms.push("scaleX(-1)");
989
1049
  }
990
1050
  if (element.flipVertical) {
991
1051
  transforms.push("scaleY(-1)");
992
1052
  }
993
- if (element.rotation) {
994
- transforms.push(`rotate(${element.rotation}deg)`);
995
- }
996
1053
  if (element.skewX) {
997
1054
  transforms.push(`skewX(${element.skewX}deg)`);
998
1055
  }
Binary file
Binary file
@@ -1,7 +1,7 @@
1
- import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useFollowMode, useBroadcastFollower, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_TRANSITION_OPTIONS, SLIDE_NAV_THUMBNAIL_WIDTH, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, startPreviewAnimation, stopPreviewAnimation } from './chunk-QTIJWFJX.mjs';
2
- import { RULER_THICKNESS, RULER_FONT_SIZE, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, EQUATION_TEMPLATES, convertLatexToOmml, convertOmmlToMathMl, sanitizeMathMl, DEFAULT_VIEWER_OPTIONS, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, buildSmartArtA11y, buildCssGradientFromShapeStyle, getElementLabel, themeToCssVars, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, activateModalFocus, buildCollaborationShareUrl, presentationInkPath, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, formatElapsed, computeInlineEditorRect, findSmartArtNodeText, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, computeSmartArtLayout, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getWarpPath, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, SLIDE_VIRTUALIZATION_THRESHOLD, getShapeAdjustmentHandleDescriptor, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, formatSlideCounter, isUrlSafe, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, groupIntoParagraphs, substituteFieldText, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, getConnectionSites, generateTicks, getCommentMarkerPosition, buildThemeColorGrid, THEME_COLOR_LABELS, buildSmartArtPresetData, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, TABLE_STYLE_PRESETS, formatCommentTimestamp, DIRECTIONAL_PRESETS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, DUOTONE_PRESETS, ARTISTIC_EFFECTS, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS } from './chunk-PMGLZ7N4.mjs';
1
+ import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useFollowMode, useBroadcastFollower, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_TRANSITION_OPTIONS, SLIDE_NAV_THUMBNAIL_WIDTH, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, startPreviewAnimation, stopPreviewAnimation } from './chunk-NYBERTS7.mjs';
2
+ import { RULER_THICKNESS, RULER_FONT_SIZE, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, EQUATION_TEMPLATES, convertLatexToOmml, convertOmmlToMathMl, sanitizeMathMl, DEFAULT_VIEWER_OPTIONS, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, buildSmartArtA11y, buildCssGradientFromShapeStyle, getElementLabel, themeToCssVars, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, activateModalFocus, buildCollaborationShareUrl, presentationInkPath, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, formatElapsed, computeInlineEditorRect, findSmartArtNodeText, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, computeSmartArtLayout, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getWarpPath, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, SLIDE_VIRTUALIZATION_THRESHOLD, getShapeAdjustmentHandleDescriptor, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, formatSlideCounter, isUrlSafe, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, groupIntoParagraphs, substituteFieldText, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, getConnectionSites, generateTicks, getCommentMarkerPosition, buildThemeColorGrid, THEME_COLOR_LABELS, buildSmartArtPresetData, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, TABLE_STYLE_PRESETS, formatCommentTimestamp, DIRECTIONAL_PRESETS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, DUOTONE_PRESETS, ARTISTIC_EFFECTS, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS } from './chunk-DVM75RMN.mjs';
3
3
  import { LOCALE_CATALOG, translationsEn } from './chunk-M3SIFXWD.mjs';
4
- import { hasShapeProperties, hasTextProperties, SWITCHABLE_LAYOUT_TYPES, isInkElement, isImageLikeElement, getLinkedTextBoxSegments, themeColorSchemesEqual, setSmartArtNodeStyle, updateSmartArtNodeText, getSubstituteFontFamily, THEME_COLOR_SCHEME_KEYS, chartDataChangeType, chartDataUpdatePoint, chartDataAddCategory, chartDataRemoveCategory, chartDataAddSeries, chartDataRemoveSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, pptxActionToElementAction, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, addSmartArtNodeAsChild, removeSmartArtNode, elementActionToPptxAction, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode } from './chunk-M7JHZV3P.mjs';
4
+ import { hasShapeProperties, hasTextProperties, SWITCHABLE_LAYOUT_TYPES, isInkElement, isImageLikeElement, getLinkedTextBoxSegments, themeColorSchemesEqual, setSmartArtNodeStyle, updateSmartArtNodeText, getSubstituteFontFamily, THEME_COLOR_SCHEME_KEYS, chartDataChangeType, chartDataUpdatePoint, chartDataAddCategory, chartDataRemoveCategory, chartDataAddSeries, chartDataRemoveSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, pptxActionToElementAction, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, addSmartArtNodeAsChild, removeSmartArtNode, elementActionToPptxAction, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode } from './chunk-DAI4KM5W.mjs';
5
5
  import React32, { createContext, useMemo, useState, useCallback, forwardRef, useEffect, useRef, useContext, Suspense, useLayoutEffect, useDeferredValue } from 'react';
6
6
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
7
  import { useTranslation } from 'react-i18next';
@@ -1334,7 +1334,7 @@ function AccountPage() {
1334
1334
  return void 0;
1335
1335
  });
1336
1336
  };
1337
- const version = "1.25.0" ;
1337
+ const version = "1.25.2" ;
1338
1338
  return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
1339
1339
  /* @__PURE__ */ jsxs("section", { className: cardClass, children: [
1340
1340
  /* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -6766,7 +6766,7 @@ function ResizeHandles({
6766
6766
  const rect = wrapper.getBoundingClientRect();
6767
6767
  const cx = rect.left + rect.width / 2;
6768
6768
  const cy = rect.top + rect.height / 2;
6769
- const base = nonRotationTransform ? `${nonRotationTransform} ` : "";
6769
+ const base = nonRotationTransform ? ` ${nonRotationTransform}` : "";
6770
6770
  const startDeg = rotation ?? 0;
6771
6771
  let last = startDeg;
6772
6772
  if (pointerId !== void 0) {
@@ -6779,7 +6779,7 @@ function ResizeHandles({
6779
6779
  }
6780
6780
  deg = Math.round((deg % 360 + 360) % 360);
6781
6781
  last = deg;
6782
- wrapper.style.transform = `${base}rotate(${deg}deg)`;
6782
+ wrapper.style.transform = `rotate(${deg}deg)${base}`;
6783
6783
  };
6784
6784
  const onPointerMove = (ev) => apply(ev.clientX, ev.clientY, ev.shiftKey);
6785
6785
  const end = () => {
@@ -8264,7 +8264,7 @@ function FailedToLoad() {
8264
8264
  var LazyModel3DScene = React32.lazy(
8265
8265
  async () => {
8266
8266
  try {
8267
- return await import('./Model3DScene-2QZ7CADN.mjs');
8267
+ return await import('./Model3DScene-IQLE5JLL.mjs');
8268
8268
  } catch {
8269
8269
  return { default: FailedToLoad };
8270
8270
  }
@@ -11001,7 +11001,7 @@ function getScopedElementHandlers(elementId, options) {
11001
11001
  var noop = () => {
11002
11002
  };
11003
11003
  var EMPTY_MEDIA_DATA_URLS = /* @__PURE__ */ new Map();
11004
- function StaticElementRenderer({
11004
+ function StaticElementRendererImpl({
11005
11005
  element,
11006
11006
  activeSlide,
11007
11007
  allSlides,
@@ -11079,6 +11079,8 @@ function StaticElementRenderer({
11079
11079
  }
11080
11080
  );
11081
11081
  }
11082
+ var StaticElementRenderer = React32.memo(StaticElementRendererImpl);
11083
+ StaticElementRenderer.displayName = "StaticElementRenderer";
11082
11084
  var ElementRenderer = React32.memo(
11083
11085
  // oxlint-disable-next-line prefer-arrow-callback -- named fn gives the memo component its displayName
11084
11086
  function ElementRendererInner({
Binary file
Binary file
@@ -1,6 +1,6 @@
1
- import { SHAPE_PRESET_DEFS, TOOLBAR_TABS, computeValueRangeForChart, cloneTemplateElementsBySlideId, cloneSlide, countTextSegments, expandTextBuildAnimations, TimelineEngine, TEXT_BUILD_ID_SEP, computeEntranceAnimationDelay, storePresentationDeck, loadPresentationDeck, clearPresentationDeck, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, isPresentationSessionMessage, collectMediaElements, collectImagePaths, buildInitialGuides, saveAutosaveSnapshot, getAnimationInitialStyle, normalizeHexColor, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, computeAutoFitTextStyle, resolveLineHeight, getKinsokuLineBreakStyles, buildTextBody3DSceneStyle, resolveParagraphRtl, resolveParagraphAlign, resolveCssTextAlign, colorWithOpacity, build3DExtrusionData, getResolvedShapeClipPath, normalizeStrokeDashType, buildCssGradientFromShapeStyle, buildShadowCssFromShapeStyle, buildInnerShadowCssFromShapeStyle, buildMultiLayerShadowCss, buildGlowBoxShadow, getCompoundLineBoxShadow, getEffectDagFilter, buildPatternFillCss, buildReflectionCss, getCssBorderDashStyle, getCompoundLineBorderWidth, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, clampCropValue, computeSelectionRect, rectToCells, isCellInRect, buildChartViewModel, buildPreviewAnimation, isTemplateElementId, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, remapTextToSegments, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createViewerOptionsStore, createSyncGate, validateRoomId, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, BROADCAST_THROTTLE_MS, sanitizeColor, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, downloadBlob, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, derivePresenceList, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, cloneHistorySnapshot, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, isTemplateElement, substituteFieldText, resolveUnderlineDecorationStyle, hasDistinctScriptFonts, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, apply3dEffects, clampUnitInterval, getRoundRectRadiusPx, computeColumnBoundaries, parseDrawingColor, parseDrawingColorOpacity, getPatternSvg, ooxmlDashToCssBorderStyle, getChartStylePalette, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, sanitizeDownloadFilename, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, rerouteConnectorsForMovedElements, applyReroutedConnectors, buildPrintHtmlDocument, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, resolvePictureBullet, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, tintColor2, shadeColor2, deleteTableColumn, insertTableColumn, deleteTableRow, insertTableRow, splitCell, mergeCells, buildSlidesPdfBytes, buildNotesPdfBytes, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, buildSmartArtPresetData, computeSnapToShape, computeMarqueeHitIds, mergeAdditiveSelection, segmentByScript, resolveFontForScript, generateLogTicks, formatAxisValueWithUnits, getDisplayUnitLabel, applyResize, snapBoxToGrid, chartPartToAttrs } from './chunk-PMGLZ7N4.mjs';
1
+ import { SHAPE_PRESET_DEFS, TOOLBAR_TABS, computeValueRangeForChart, cloneTemplateElementsBySlideId, cloneSlide, countTextSegments, expandTextBuildAnimations, TimelineEngine, TEXT_BUILD_ID_SEP, computeEntranceAnimationDelay, storePresentationDeck, loadPresentationDeck, clearPresentationDeck, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, isPresentationSessionMessage, collectMediaElements, collectImagePaths, buildInitialGuides, saveAutosaveSnapshot, getAnimationInitialStyle, normalizeHexColor, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, computeAutoFitTextStyle, resolveLineHeight, getKinsokuLineBreakStyles, buildTextBody3DSceneStyle, resolveParagraphRtl, resolveParagraphAlign, resolveCssTextAlign, colorWithOpacity, build3DExtrusionData, getResolvedShapeClipPath, normalizeStrokeDashType, buildCssGradientFromShapeStyle, buildShadowCssFromShapeStyle, buildInnerShadowCssFromShapeStyle, buildMultiLayerShadowCss, buildGlowBoxShadow, getCompoundLineBoxShadow, getEffectDagFilter, buildPatternFillCss, buildReflectionCss, getCssBorderDashStyle, getCompoundLineBorderWidth, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, clampCropValue, computeSelectionRect, rectToCells, isCellInRect, buildChartViewModel, buildPreviewAnimation, isTemplateElementId, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, remapTextToSegments, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createViewerOptionsStore, createSyncGate, validateRoomId, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, BROADCAST_THROTTLE_MS, sanitizeColor, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, downloadBlob, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, derivePresenceList, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, cloneHistorySnapshot, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, isTemplateElement, substituteFieldText, resolveUnderlineDecorationStyle, hasDistinctScriptFonts, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, apply3dEffects, clampUnitInterval, getRoundRectRadiusPx, computeColumnBoundaries, parseDrawingColor, parseDrawingColorOpacity, getPatternSvg, ooxmlDashToCssBorderStyle, getChartStylePalette, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, sanitizeDownloadFilename, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, rerouteConnectorsForMovedElements, applyReroutedConnectors, buildPrintHtmlDocument, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, resolvePictureBullet, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, tintColor2, shadeColor2, deleteTableColumn, insertTableColumn, deleteTableRow, insertTableRow, splitCell, mergeCells, buildSlidesPdfBytes, buildNotesPdfBytes, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, buildSmartArtPresetData, computeSnapToShape, computeMarqueeHitIds, mergeAdditiveSelection, segmentByScript, resolveFontForScript, generateLogTicks, formatAxisValueWithUnits, getDisplayUnitLabel, applyResize, snapBoxToGrid, chartPartToAttrs } from './chunk-DVM75RMN.mjs';
2
2
  import { translationsEn } from './chunk-M3SIFXWD.mjs';
3
- import { hasTextProperties, PptxHandler, EncryptedFileError, hasShapeProperties, isImageLikeElement, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, guidePxToEmu, mergeShapes, getSubstituteFontFamily, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, SvgExporter, rebuildTableStructureInRawXml, updateCellTextStyleInRawXml, updateCellTextInRawXml, updateMergeAttrsInRawXml, elementActionToPptxAction } from './chunk-M7JHZV3P.mjs';
3
+ import { hasTextProperties, PptxHandler, EncryptedFileError, hasShapeProperties, isImageLikeElement, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, guidePxToEmu, mergeShapes, getSubstituteFontFamily, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, SvgExporter, rebuildTableStructureInRawXml, updateCellTextStyleInRawXml, updateCellTextInRawXml, updateMergeAttrsInRawXml, elementActionToPptxAction } from './chunk-DAI4KM5W.mjs';
4
4
  import React3, { useState, useEffect, useMemo, Suspense, useRef, useCallback, useSyncExternalStore, useImperativeHandle, useLayoutEffect } from 'react';
5
5
  import { LuTriangle, LuPlus, LuMoveRight, LuMinus, LuDiamond, LuDatabase, LuCircle, LuSquare } from 'react-icons/lu';
6
6
  import { clsx } from 'clsx';
@@ -4800,6 +4800,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
4800
4800
  }
4801
4801
  const normalizedShapeType = getShapeType(element.shapeType);
4802
4802
  const clipPath = getResolvedShapeClipPath(element);
4803
+ const rendersCustomVectorPath = (element.type === "shape" || element.type === "image" || element.type === "picture") && Boolean(element.pathData) && typeof element.pathWidth === "number" && element.pathWidth > 0 && typeof element.pathHeight === "number" && element.pathHeight > 0;
4803
4804
  const fillOpacity = element.shapeStyle?.fillOpacity;
4804
4805
  const strokeOpacity = element.shapeStyle?.strokeOpacity;
4805
4806
  const strokeDash = normalizeStrokeDashType(element.shapeStyle?.strokeDash);
@@ -4891,6 +4892,13 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
4891
4892
  strokeLinecap: ss?.lineCap === "rnd" ? "round" : ss?.lineCap === "sq" ? "square" : void 0
4892
4893
  };
4893
4894
  apply3dEffects2(base, ss?.scene3d, ss?.shape3d);
4895
+ if (rendersCustomVectorPath) {
4896
+ base.backgroundColor = "transparent";
4897
+ base.backgroundImage = void 0;
4898
+ base.borderWidth = void 0;
4899
+ base.borderColor = void 0;
4900
+ base.borderStyle = void 0;
4901
+ }
4894
4902
  if (element.type === "connector" || normalizedShapeType === "connector") {
4895
4903
  return {
4896
4904
  backgroundColor: "transparent",
@@ -8502,7 +8510,7 @@ function FailedToLoad() {
8502
8510
  var LazySurfaceChart3DScene = React3.lazy(
8503
8511
  async () => {
8504
8512
  try {
8505
- return await import('./SurfaceChart3DScene-IW4WGZHH.mjs');
8513
+ return await import('./SurfaceChart3DScene-JG26PJ7O.mjs');
8506
8514
  } catch {
8507
8515
  return { default: FailedToLoad };
8508
8516
  }
@@ -17106,7 +17114,7 @@ function useYjsDocumentSync({
17106
17114
  return;
17107
17115
  }
17108
17116
  try {
17109
- const { PptxHandler: PptxHandler2 } = await import('./dist-RHAXXX2R.mjs');
17117
+ const { PptxHandler: PptxHandler2 } = await import('./dist-E3IHM3OU.mjs');
17110
17118
  const handler = new PptxHandler2();
17111
17119
  await handler.load(sourceBytes.buffer);
17112
17120
  const currentSlides = readSlidesFromYDoc(
Binary file
Binary file