pptx-react-viewer 3.5.0 → 3.5.2

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 (141) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/{AiChatPanel-M7RSMOZV.js → AiChatPanel-AR6FYCHC.js} +24 -24
  3. package/dist/AiChatPanel-AR6FYCHC.js.br +0 -0
  4. package/dist/AiChatPanel-AR6FYCHC.js.gz +0 -0
  5. package/dist/{AiChatPanel-KZX4NZ5R.mjs → AiChatPanel-GZCDFIGE.mjs} +3 -3
  6. package/dist/AiChatPanel-GZCDFIGE.mjs.br +0 -0
  7. package/dist/AiChatPanel-GZCDFIGE.mjs.gz +0 -0
  8. package/dist/{Area3DChartScene-AD6BO2VM.mjs → Area3DChartScene-EZFIY4YQ.mjs} +1 -1
  9. package/dist/Area3DChartScene-EZFIY4YQ.mjs.br +0 -0
  10. package/dist/Area3DChartScene-EZFIY4YQ.mjs.gz +0 -0
  11. package/dist/{Area3DChartScene-7AYWOGBC.js → Area3DChartScene-NB6Q6KNP.js} +2 -2
  12. package/dist/Area3DChartScene-NB6Q6KNP.js.br +0 -0
  13. package/dist/Area3DChartScene-NB6Q6KNP.js.gz +0 -0
  14. package/dist/{Bar3DChartScene-FWKMBT4O.js → Bar3DChartScene-3A6MUJW7.js} +2 -2
  15. package/dist/Bar3DChartScene-3A6MUJW7.js.br +0 -0
  16. package/dist/Bar3DChartScene-3A6MUJW7.js.gz +0 -0
  17. package/dist/{Bar3DChartScene-JOGF3C5E.mjs → Bar3DChartScene-ZVTJM5EB.mjs} +1 -1
  18. package/dist/Bar3DChartScene-ZVTJM5EB.mjs.br +0 -0
  19. package/dist/Bar3DChartScene-ZVTJM5EB.mjs.gz +0 -0
  20. package/dist/{Line3DChartScene-X2BJNGIK.js → Line3DChartScene-RQGOPRGY.js} +2 -2
  21. package/dist/Line3DChartScene-RQGOPRGY.js.br +0 -0
  22. package/dist/Line3DChartScene-RQGOPRGY.js.gz +0 -0
  23. package/dist/{Line3DChartScene-ADORAAXV.mjs → Line3DChartScene-XTWON2Q4.mjs} +1 -1
  24. package/dist/Line3DChartScene-XTWON2Q4.mjs.br +0 -0
  25. package/dist/Line3DChartScene-XTWON2Q4.mjs.gz +0 -0
  26. package/dist/{Model3DScene-RORDMQ6Q.mjs → Model3DScene-42VYK4DR.mjs} +1 -1
  27. package/dist/Model3DScene-42VYK4DR.mjs.br +0 -0
  28. package/dist/Model3DScene-42VYK4DR.mjs.gz +0 -0
  29. package/dist/{Model3DScene-KSZHZAVD.js → Model3DScene-V4WPP5CC.js} +2 -2
  30. package/dist/{Model3DScene-KSZHZAVD.js.br → Model3DScene-V4WPP5CC.js.br} +0 -0
  31. package/dist/Model3DScene-V4WPP5CC.js.gz +0 -0
  32. package/dist/{PieChart3DScene-IXJHU3MI.mjs → PieChart3DScene-GHNKD5TN.mjs} +1 -1
  33. package/dist/PieChart3DScene-GHNKD5TN.mjs.br +0 -0
  34. package/dist/PieChart3DScene-GHNKD5TN.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-BXMI7U2X.js → PieChart3DScene-UVYGUNRM.js} +2 -2
  36. package/dist/PieChart3DScene-UVYGUNRM.js.br +0 -0
  37. package/dist/PieChart3DScene-UVYGUNRM.js.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-SJ2IDLP6.mjs → SurfaceChart3DScene-AEKTCMYZ.mjs} +1 -1
  39. package/dist/SurfaceChart3DScene-AEKTCMYZ.mjs.br +0 -0
  40. package/dist/SurfaceChart3DScene-AEKTCMYZ.mjs.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-TTBGVNYL.js → SurfaceChart3DScene-E7OHBIM3.js} +2 -2
  42. package/dist/{SurfaceChart3DScene-TTBGVNYL.js.br → SurfaceChart3DScene-E7OHBIM3.js.br} +0 -0
  43. package/dist/SurfaceChart3DScene-E7OHBIM3.js.gz +0 -0
  44. package/dist/{chunk-X6OJYCTW.mjs → chunk-3LYWPIRW.mjs} +1 -1
  45. package/dist/chunk-3LYWPIRW.mjs.br +0 -0
  46. package/dist/chunk-3LYWPIRW.mjs.gz +0 -0
  47. package/dist/{chunk-C7ZSRYF4.mjs → chunk-5F4RXVTA.mjs} +7 -2
  48. package/dist/chunk-5F4RXVTA.mjs.br +0 -0
  49. package/dist/chunk-5F4RXVTA.mjs.gz +0 -0
  50. package/dist/{chunk-AU5YFUUK.js → chunk-5FIC2LG3.js} +339 -206
  51. package/dist/chunk-5FIC2LG3.js.br +0 -0
  52. package/dist/chunk-5FIC2LG3.js.gz +0 -0
  53. package/dist/{chunk-24XC5C2B.mjs → chunk-HNTAGERM.mjs} +5 -1
  54. package/dist/chunk-HNTAGERM.mjs.br +0 -0
  55. package/dist/chunk-HNTAGERM.mjs.gz +0 -0
  56. package/dist/{chunk-AEP6X24D.js → chunk-LIIV45TR.js} +164 -160
  57. package/dist/chunk-LIIV45TR.js.br +0 -0
  58. package/dist/chunk-LIIV45TR.js.gz +0 -0
  59. package/dist/{chunk-X7L3RHFQ.mjs → chunk-OHNNWSCP.mjs} +337 -207
  60. package/dist/chunk-OHNNWSCP.mjs.br +0 -0
  61. package/dist/chunk-OHNNWSCP.mjs.gz +0 -0
  62. package/dist/{chunk-XSHYXVPD.js → chunk-OTKVJT4R.js} +1197 -1184
  63. package/dist/chunk-OTKVJT4R.js.br +0 -0
  64. package/dist/chunk-OTKVJT4R.js.gz +0 -0
  65. package/dist/{chunk-DUC32SQJ.mjs → chunk-RCPRMTPJ.mjs} +41 -28
  66. package/dist/chunk-RCPRMTPJ.mjs.br +0 -0
  67. package/dist/chunk-RCPRMTPJ.mjs.gz +0 -0
  68. package/dist/{chunk-JTS7AZYQ.js → chunk-VEU3QLEZ.js} +5 -5
  69. package/dist/chunk-VEU3QLEZ.js.br +0 -0
  70. package/dist/chunk-VEU3QLEZ.js.gz +0 -0
  71. package/dist/{chunk-HCTJCUGP.js → chunk-XGNK2IZ4.js} +435 -430
  72. package/dist/chunk-XGNK2IZ4.js.br +0 -0
  73. package/dist/chunk-XGNK2IZ4.js.gz +0 -0
  74. package/dist/index.d.ts +1 -0
  75. package/dist/index.js +45 -45
  76. package/dist/index.js.br +0 -0
  77. package/dist/index.js.gz +0 -0
  78. package/dist/index.mjs +5 -5
  79. package/dist/index.mjs.br +0 -0
  80. package/dist/index.mjs.gz +0 -0
  81. package/dist/internals.d.ts +1 -0
  82. package/dist/internals.js +78 -78
  83. package/dist/internals.js.br +0 -0
  84. package/dist/internals.js.gz +0 -0
  85. package/dist/internals.mjs +3 -3
  86. package/dist/internals.mjs.br +0 -0
  87. package/dist/internals.mjs.gz +0 -0
  88. package/dist/viewer/index.d.ts +1 -0
  89. package/dist/viewer/index.js +26 -26
  90. package/dist/viewer/index.js.br +0 -0
  91. package/dist/viewer/index.js.gz +0 -0
  92. package/dist/viewer/index.mjs +5 -5
  93. package/dist/viewer/index.mjs.br +0 -0
  94. package/dist/viewer/index.mjs.gz +0 -0
  95. package/package.json +1 -1
  96. package/dist/AiChatPanel-KZX4NZ5R.mjs.br +0 -0
  97. package/dist/AiChatPanel-KZX4NZ5R.mjs.gz +0 -0
  98. package/dist/AiChatPanel-M7RSMOZV.js.br +0 -0
  99. package/dist/AiChatPanel-M7RSMOZV.js.gz +0 -0
  100. package/dist/Area3DChartScene-7AYWOGBC.js.br +0 -0
  101. package/dist/Area3DChartScene-7AYWOGBC.js.gz +0 -0
  102. package/dist/Area3DChartScene-AD6BO2VM.mjs.br +0 -3
  103. package/dist/Area3DChartScene-AD6BO2VM.mjs.gz +0 -0
  104. package/dist/Bar3DChartScene-FWKMBT4O.js.br +0 -0
  105. package/dist/Bar3DChartScene-FWKMBT4O.js.gz +0 -0
  106. package/dist/Bar3DChartScene-JOGF3C5E.mjs.br +0 -0
  107. package/dist/Bar3DChartScene-JOGF3C5E.mjs.gz +0 -0
  108. package/dist/Line3DChartScene-ADORAAXV.mjs.br +0 -3
  109. package/dist/Line3DChartScene-ADORAAXV.mjs.gz +0 -0
  110. package/dist/Line3DChartScene-X2BJNGIK.js.br +0 -0
  111. package/dist/Line3DChartScene-X2BJNGIK.js.gz +0 -0
  112. package/dist/Model3DScene-KSZHZAVD.js.gz +0 -0
  113. package/dist/Model3DScene-RORDMQ6Q.mjs.br +0 -0
  114. package/dist/Model3DScene-RORDMQ6Q.mjs.gz +0 -0
  115. package/dist/PieChart3DScene-BXMI7U2X.js.br +0 -0
  116. package/dist/PieChart3DScene-BXMI7U2X.js.gz +0 -0
  117. package/dist/PieChart3DScene-IXJHU3MI.mjs.br +0 -0
  118. package/dist/PieChart3DScene-IXJHU3MI.mjs.gz +0 -0
  119. package/dist/SurfaceChart3DScene-SJ2IDLP6.mjs.br +0 -0
  120. package/dist/SurfaceChart3DScene-SJ2IDLP6.mjs.gz +0 -0
  121. package/dist/SurfaceChart3DScene-TTBGVNYL.js.gz +0 -0
  122. package/dist/chunk-24XC5C2B.mjs.br +0 -0
  123. package/dist/chunk-24XC5C2B.mjs.gz +0 -0
  124. package/dist/chunk-AEP6X24D.js.br +0 -0
  125. package/dist/chunk-AEP6X24D.js.gz +0 -0
  126. package/dist/chunk-AU5YFUUK.js.br +0 -0
  127. package/dist/chunk-AU5YFUUK.js.gz +0 -0
  128. package/dist/chunk-C7ZSRYF4.mjs.br +0 -0
  129. package/dist/chunk-C7ZSRYF4.mjs.gz +0 -0
  130. package/dist/chunk-DUC32SQJ.mjs.br +0 -0
  131. package/dist/chunk-DUC32SQJ.mjs.gz +0 -0
  132. package/dist/chunk-HCTJCUGP.js.br +0 -0
  133. package/dist/chunk-HCTJCUGP.js.gz +0 -0
  134. package/dist/chunk-JTS7AZYQ.js.br +0 -0
  135. package/dist/chunk-JTS7AZYQ.js.gz +0 -0
  136. package/dist/chunk-X6OJYCTW.mjs.br +0 -0
  137. package/dist/chunk-X6OJYCTW.mjs.gz +0 -0
  138. package/dist/chunk-X7L3RHFQ.mjs.br +0 -0
  139. package/dist/chunk-X7L3RHFQ.mjs.gz +0 -0
  140. package/dist/chunk-XSHYXVPD.js.br +0 -0
  141. package/dist/chunk-XSHYXVPD.js.gz +0 -0
@@ -59233,7 +59233,7 @@ function renderTable(el, defaults) {
59233
59233
  const bgColor = cell.style?.backgroundColor ?? "none";
59234
59234
  const borderColor = cell.style?.borderColor ?? "#CCCCCC";
59235
59235
  const textColor = cell.style?.color ?? "#000000";
59236
- const fontSize = cell.style?.fontSize ?? defaults.defaultFontSize;
59236
+ const fontSize = cell.style?.fontSize !== void 0 ? cell.style.fontSize * (96 / 72) : defaults.defaultFontSize;
59237
59237
  const bold = cell.style?.bold;
59238
59238
  parts.push(
59239
59239
  `<rect${attrs2({
@@ -62976,8 +62976,16 @@ var PptxHandlerRuntime13 = class extends PptxHandlerRuntime12 {
62976
62976
  if (!bullet) {
62977
62977
  return false;
62978
62978
  }
62979
- const marker = bullet.char ? `${bullet.char} ` : bullet.imageRelId || bullet.imageDataUrl ? "\u{1F4CE} " : bullet.autoNumType ? void 0 : "\u2022 ";
62980
- return marker ? segment.text === marker : bullet.paragraphIndex !== void 0;
62979
+ if (bullet.autoNumType) {
62980
+ if (bullet.paragraphIndex === void 0) {
62981
+ return false;
62982
+ }
62983
+ const ordinal = Math.max(1, (bullet.autoNumStartAt ?? 1) + bullet.paragraphIndex);
62984
+ const marker2 = formatAutoNumberMarker(bullet.autoNumType, ordinal);
62985
+ return segment.text === marker2 || segment.text === `${marker2} `;
62986
+ }
62987
+ const marker = bullet.char ? `${bullet.char} ` : bullet.imageRelId || bullet.imageDataUrl ? "\u{1F4CE} " : "\u2022 ";
62988
+ return segment.text === marker;
62981
62989
  }
62982
62990
  createParagraphsFromTextContent(text22, textStyle, textSegments, resolveHyperlinkRelationshipId) {
62983
62991
  const runScopedTextStyle = toRunScopedTextStyle(textStyle);
@@ -99513,7 +99521,7 @@ ${htmlRows.join("\n")}
99513
99521
  rules.push(`vertical-align:${style.vAlign}`);
99514
99522
  }
99515
99523
  if (style?.fontSize) {
99516
- rules.push(`font-size:${Math.round(style.fontSize)}px`);
99524
+ rules.push(`font-size:${style.fontSize}pt`);
99517
99525
  }
99518
99526
  const safeColor = cssColorSafe(style?.color);
99519
99527
  if (safeColor) {
@@ -121726,7 +121734,7 @@ function cellStyleToCss(style) {
121726
121734
  css.fontFamily = style.fontFamily;
121727
121735
  }
121728
121736
  if (style.fontSize) {
121729
- css.fontSize = `${style.fontSize}px`;
121737
+ css.fontSize = `${style.fontSize}pt`;
121730
121738
  }
121731
121739
  if (style.bold) {
121732
121740
  css.fontWeight = "bold";
@@ -123330,6 +123338,89 @@ function round2(value) {
123330
123338
  function round6(value) {
123331
123339
  return Math.round(value * 1e6) / 1e6;
123332
123340
  }
123341
+ function resolvePictureBullet(info, baseFontSize) {
123342
+ if (!info.imageDataUrl && !info.imageRelId && !info.imageBlipFillXml) {
123343
+ return void 0;
123344
+ }
123345
+ const sizePx = typeof info.sizePts === "number" ? info.sizePts : typeof info.sizePercent === "number" ? baseFontSize * (info.sizePercent / 100) : baseFontSize;
123346
+ return {
123347
+ ...info.imageDataUrl ? { src: info.imageDataUrl } : {},
123348
+ sizePx,
123349
+ fallbackMarker: "\u2022",
123350
+ accessibleLabel: "Bullet",
123351
+ ...info.imageRelId ? { imageRelId: info.imageRelId } : {}
123352
+ };
123353
+ }
123354
+ function resolveParagraphBullet(firstSegment, baseFontSize = firstSegment?.style?.fontSize ?? 16) {
123355
+ if (!firstSegment) {
123356
+ return void 0;
123357
+ }
123358
+ if (firstSegment.style?.listType === "none") {
123359
+ return void 0;
123360
+ }
123361
+ const info = firstSegment.bulletInfo;
123362
+ if (!info || info.none) {
123363
+ return void 0;
123364
+ }
123365
+ const color2 = info.color;
123366
+ const fontFamily = info.fontFamily;
123367
+ const sizePts = typeof info.sizePts === "number" ? info.sizePts : void 0;
123368
+ const sizePercent = typeof info.sizePercent === "number" ? info.sizePercent : void 0;
123369
+ const picture = resolvePictureBullet(info, baseFontSize);
123370
+ if (picture) {
123371
+ return {
123372
+ marker: picture.fallbackMarker,
123373
+ isNumbered: false,
123374
+ color: color2,
123375
+ fontFamily,
123376
+ sizePts,
123377
+ sizePercent,
123378
+ picture
123379
+ };
123380
+ }
123381
+ if (info.autoNumType) {
123382
+ const startAt = typeof info.autoNumStartAt === "number" ? info.autoNumStartAt : 1;
123383
+ const paraIdx = typeof info.paragraphIndex === "number" ? info.paragraphIndex : 0;
123384
+ const seqNum = Math.max(1, startAt + paraIdx);
123385
+ return {
123386
+ marker: formatAutoNumberMarker(info.autoNumType, seqNum),
123387
+ isNumbered: true,
123388
+ color: color2,
123389
+ fontFamily,
123390
+ sizePts,
123391
+ sizePercent
123392
+ };
123393
+ }
123394
+ if (info.char) {
123395
+ return { marker: info.char, isNumbered: false, color: color2, fontFamily, sizePts, sizePercent };
123396
+ }
123397
+ return void 0;
123398
+ }
123399
+ var INDENT_PX_PER_LEVEL = 18;
123400
+ function bulletIndentPx(level) {
123401
+ const lvl = typeof level === "number" && level > 0 ? level : 0;
123402
+ return lvl * INDENT_PX_PER_LEVEL;
123403
+ }
123404
+ function resolveParagraphIndent(paraIndent, paragraphLevel) {
123405
+ const marginLeft = typeof paraIndent?.marginLeft === "number" && paraIndent.marginLeft !== 0 ? paraIndent.marginLeft : void 0;
123406
+ const textIndent = typeof paraIndent?.indent === "number" && paraIndent.indent !== 0 ? paraIndent.indent : void 0;
123407
+ if (marginLeft === void 0 && textIndent === void 0) {
123408
+ const levelPx = bulletIndentPx(paragraphLevel);
123409
+ return levelPx > 0 ? { marginLeftPx: levelPx } : {};
123410
+ }
123411
+ return { marginLeftPx: marginLeft, textIndentPx: textIndent };
123412
+ }
123413
+ function isBulletMarkerSegment(segment) {
123414
+ const bullet = segment.bulletInfo;
123415
+ if (!bullet || bullet.none) {
123416
+ return false;
123417
+ }
123418
+ const resolved = resolveParagraphBullet(segment);
123419
+ if (!resolved) {
123420
+ return false;
123421
+ }
123422
+ return segment.text.trim() === resolved.marker.trim() && segment.text.trim().length > 0;
123423
+ }
123333
123424
  var OUTLINE_VIEW_ATTR = "data-pptx-outline-view";
123334
123425
  var OUTLINE_ROW_ATTR = "data-pptx-outline-row";
123335
123426
  var OUTLINE_SLIDE_ATTR = "data-pptx-outline-slide";
@@ -123385,10 +123476,13 @@ function isBulletMarker(segment) {
123385
123476
  if (!bullet) {
123386
123477
  return false;
123387
123478
  }
123388
- const marker = bullet.char ? `${bullet.char} ` : bullet.imageRelId || bullet.imageDataUrl ? "\u{1F4CE} " : bullet.autoNumType ? void 0 : "\u2022 ";
123389
- return marker ? segment.text === marker : bullet.paragraphIndex !== void 0;
123479
+ if (bullet.autoNumType) {
123480
+ return bullet.paragraphIndex !== void 0 && isBulletMarkerSegment(segment);
123481
+ }
123482
+ const marker = bullet.char ? `${bullet.char} ` : bullet.imageRelId || bullet.imageDataUrl ? "\u{1F4CE} " : "\u2022 ";
123483
+ return segment.text === marker;
123390
123484
  }
123391
- function isParagraphSeparator(segment) {
123485
+ function isParagraphSeparator2(segment) {
123392
123486
  return Boolean(segment.isParagraphBreak) || segment.text === "\n" && !segment.isLineBreak;
123393
123487
  }
123394
123488
  function groupElementParagraphs(element) {
@@ -123402,7 +123496,7 @@ function groupElementParagraphs(element) {
123402
123496
  }
123403
123497
  const groups = [{ content: [] }];
123404
123498
  for (const segment of segments) {
123405
- if (isParagraphSeparator(segment)) {
123499
+ if (isParagraphSeparator2(segment)) {
123406
123500
  groups.push({ content: [] });
123407
123501
  continue;
123408
123502
  }
@@ -128428,78 +128522,6 @@ function rulerDragToGuidePosition(pointerOffsetPx, scale, slideLengthPx) {
128428
128522
  }
128429
128523
  return position2;
128430
128524
  }
128431
- function resolvePictureBullet(info, baseFontSize) {
128432
- if (!info.imageDataUrl && !info.imageRelId && !info.imageBlipFillXml) {
128433
- return void 0;
128434
- }
128435
- const sizePx = typeof info.sizePts === "number" ? info.sizePts : typeof info.sizePercent === "number" ? baseFontSize * (info.sizePercent / 100) : baseFontSize;
128436
- return {
128437
- ...info.imageDataUrl ? { src: info.imageDataUrl } : {},
128438
- sizePx,
128439
- fallbackMarker: "\u2022",
128440
- accessibleLabel: "Bullet",
128441
- ...info.imageRelId ? { imageRelId: info.imageRelId } : {}
128442
- };
128443
- }
128444
- function resolveParagraphBullet(firstSegment, baseFontSize = firstSegment?.style?.fontSize ?? 16) {
128445
- if (!firstSegment) {
128446
- return void 0;
128447
- }
128448
- if (firstSegment.style?.listType === "none") {
128449
- return void 0;
128450
- }
128451
- const info = firstSegment.bulletInfo;
128452
- if (!info || info.none) {
128453
- return void 0;
128454
- }
128455
- const color2 = info.color;
128456
- const fontFamily = info.fontFamily;
128457
- const sizePts = typeof info.sizePts === "number" ? info.sizePts : void 0;
128458
- const sizePercent = typeof info.sizePercent === "number" ? info.sizePercent : void 0;
128459
- const picture = resolvePictureBullet(info, baseFontSize);
128460
- if (picture) {
128461
- return {
128462
- marker: picture.fallbackMarker,
128463
- isNumbered: false,
128464
- color: color2,
128465
- fontFamily,
128466
- sizePts,
128467
- sizePercent,
128468
- picture
128469
- };
128470
- }
128471
- if (info.autoNumType) {
128472
- const startAt = typeof info.autoNumStartAt === "number" ? info.autoNumStartAt : 1;
128473
- const paraIdx = typeof info.paragraphIndex === "number" ? info.paragraphIndex : 0;
128474
- const seqNum = Math.max(1, startAt + paraIdx);
128475
- return {
128476
- marker: formatAutoNumberMarker(info.autoNumType, seqNum),
128477
- isNumbered: true,
128478
- color: color2,
128479
- fontFamily,
128480
- sizePts,
128481
- sizePercent
128482
- };
128483
- }
128484
- if (info.char) {
128485
- return { marker: info.char, isNumbered: false, color: color2, fontFamily, sizePts, sizePercent };
128486
- }
128487
- return void 0;
128488
- }
128489
- var INDENT_PX_PER_LEVEL = 18;
128490
- function bulletIndentPx(level) {
128491
- const lvl = typeof level === "number" && level > 0 ? level : 0;
128492
- return lvl * INDENT_PX_PER_LEVEL;
128493
- }
128494
- function resolveParagraphIndent(paraIndent, paragraphLevel) {
128495
- const marginLeft = typeof paraIndent?.marginLeft === "number" && paraIndent.marginLeft !== 0 ? paraIndent.marginLeft : void 0;
128496
- const textIndent = typeof paraIndent?.indent === "number" && paraIndent.indent !== 0 ? paraIndent.indent : void 0;
128497
- if (marginLeft === void 0 && textIndent === void 0) {
128498
- const levelPx = bulletIndentPx(paragraphLevel);
128499
- return levelPx > 0 ? { marginLeftPx: levelPx } : {};
128500
- }
128501
- return { marginLeftPx: marginLeft, textIndentPx: textIndent };
128502
- }
128503
128525
  var DEBOUNCE_MS = 600;
128504
128526
  var EXPANDED_MAX_HEIGHT = 200;
128505
128527
  var PX_TO_PT = 0.75;
@@ -133132,75 +133154,81 @@ function buildThemeColorGrid(colorScheme, translate) {
133132
133154
  function themeColorLabel(key2, translate) {
133133
133155
  return translate ? schemaLabel(THEME_COLOR_SLOT_LABEL_KEYS, key2, translate) : THEME_COLOR_LABELS[key2];
133134
133156
  }
133135
- var pendingRestore = null;
133136
- function setPendingSelectionRestore(sel) {
133137
- pendingRestore = sel;
133138
- }
133139
- function getPendingSelectionRestore() {
133140
- const sel = pendingRestore;
133141
- pendingRestore = null;
133142
- return sel;
133143
- }
133144
133157
  function getInlineEditorSelection(segments) {
133145
- if (!segments || segments.length === 0) {
133158
+ if (!segments?.length) {
133146
133159
  return null;
133147
133160
  }
133148
- const sel = window.getSelection();
133149
- if (!sel || sel.rangeCount === 0 || sel.isCollapsed) {
133161
+ const selection = window.getSelection();
133162
+ if (!selection || selection.rangeCount === 0 || selection.isCollapsed) {
133163
+ return null;
133164
+ }
133165
+ const range = selection.getRangeAt(0);
133166
+ const editor = findEditorContainer(range.startContainer);
133167
+ if (!editor || !editor.contains(range.endContainer) || range.toString().length === 0) {
133150
133168
  return null;
133151
133169
  }
133152
- const { anchorNode, anchorOffset, focusNode, focusOffset } = sel;
133153
- if (!anchorNode || !focusNode) {
133170
+ const start = getSegmentPosition(editor, range.startContainer, range.startOffset, segments);
133171
+ const end = getSegmentPosition(editor, range.endContainer, range.endOffset, segments);
133172
+ if (!start || !end) {
133154
133173
  return null;
133155
133174
  }
133156
- const editor = findEditorContainer(anchorNode);
133157
- if (!editor || !editor.contains(focusNode)) {
133175
+ const renderedSpans = Array.from(editor.querySelectorAll("[data-seg-idx]"));
133176
+ const startSpanIndex = renderedSpans.indexOf(start.span);
133177
+ const endSpanIndex = renderedSpans.indexOf(end.span);
133178
+ if (startSpanIndex < 0 || endSpanIndex < startSpanIndex) {
133158
133179
  return null;
133159
133180
  }
133160
- const anchorInfo = getSegmentPosition(editor, anchorNode, anchorOffset, segments);
133161
- const focusInfo = getSegmentPosition(editor, focusNode, focusOffset, segments);
133162
- if (!anchorInfo || !focusInfo) {
133181
+ const selectedSpans = renderedSpans.slice(startSpanIndex, endSpanIndex + 1);
133182
+ const first = selectedSpans.find(
133183
+ (span) => isEditableSpan(span, segments) && (span !== start.span || start.offset < start.textLength)
133184
+ );
133185
+ const last = [...selectedSpans].reverse().find((span) => isEditableSpan(span, segments) && (span !== end.span || end.offset > 0));
133186
+ if (!first || !last) {
133163
133187
  return null;
133164
133188
  }
133165
- const [start, end] = anchorInfo.absOffset <= focusInfo.absOffset ? [anchorInfo, focusInfo] : [focusInfo, anchorInfo];
133166
133189
  return {
133167
- startSegIdx: start.segIdx,
133168
- startOffset: start.offsetInSeg,
133169
- endSegIdx: end.segIdx,
133170
- endOffset: end.offsetInSeg
133190
+ startSegIdx: getSegmentIndex(first),
133191
+ startOffset: first === start.span ? start.offset : 0,
133192
+ endSegIdx: getSegmentIndex(last),
133193
+ endOffset: last === end.span ? end.offset : last.textContent?.length ?? 0
133171
133194
  };
133172
133195
  }
133196
+ function isEditableSpan(span, segments) {
133197
+ const segment = segments[getSegmentIndex(span)];
133198
+ return Boolean(
133199
+ segment && !segment.isParagraphBreak && segment.text !== "\n" && !isBulletMarkerSegment(segment) && (span.textContent?.length ?? 0) > 0
133200
+ );
133201
+ }
133202
+ function getSegmentIndex(span) {
133203
+ return Number(span.getAttribute("data-seg-idx"));
133204
+ }
133173
133205
  function findEditorContainer(node) {
133174
- const el = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
133175
- return el?.closest("[data-inline-editor]") ?? null;
133206
+ const element = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
133207
+ return element?.closest("[data-inline-editor]") ?? null;
133176
133208
  }
133177
133209
  function getSegmentPosition(editor, node, offset, segments) {
133178
- const el = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
133179
- if (!el) {
133180
- return null;
133181
- }
133182
- const segSpan = el.closest("[data-seg-idx]");
133183
- if (!segSpan || !editor.contains(segSpan)) {
133210
+ const element = node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
133211
+ const span = element?.closest("[data-seg-idx]");
133212
+ if (!span || !editor.contains(span)) {
133184
133213
  return null;
133185
133214
  }
133186
- const segIdx = parseInt(segSpan.getAttribute("data-seg-idx"), 10);
133187
- if (isNaN(segIdx) || segIdx < 0 || segIdx >= segments.length) {
133215
+ const segIdx = getSegmentIndex(span);
133216
+ if (!Number.isInteger(segIdx) || segIdx < 0 || segIdx >= segments.length) {
133188
133217
  return null;
133189
133218
  }
133190
- const offsetInSeg = getTextOffsetWithin(segSpan, node, offset);
133191
- let absOffset = 0;
133192
- for (let i = 0; i < segIdx; i++) {
133193
- absOffset += segments[i].text.length;
133194
- }
133195
- absOffset += offsetInSeg;
133196
- return { segIdx, offsetInSeg, absOffset };
133219
+ return {
133220
+ segIdx,
133221
+ offset: getTextOffsetWithin(span, node, offset),
133222
+ span,
133223
+ textLength: span.textContent?.length ?? 0
133224
+ };
133197
133225
  }
133198
133226
  function getTextOffsetWithin(container, targetNode, targetOffset) {
133199
133227
  if (targetNode === container || targetNode.nodeType === Node.ELEMENT_NODE) {
133200
133228
  const parent = targetNode === container ? container : targetNode;
133201
133229
  let count = 0;
133202
- for (let i = 0; i < targetOffset && i < parent.childNodes.length; i++) {
133203
- count += (parent.childNodes[i].textContent || "").length;
133230
+ for (let index = 0; index < targetOffset && index < parent.childNodes.length; index++) {
133231
+ count += parent.childNodes[index].textContent?.length ?? 0;
133204
133232
  }
133205
133233
  return count;
133206
133234
  }
@@ -133215,6 +133243,15 @@ function getTextOffsetWithin(container, targetNode, targetOffset) {
133215
133243
  }
133216
133244
  return charCount;
133217
133245
  }
133246
+ var pendingRestore = null;
133247
+ function setPendingSelectionRestore(sel) {
133248
+ pendingRestore = sel;
133249
+ }
133250
+ function getPendingSelectionRestore() {
133251
+ const sel = pendingRestore;
133252
+ pendingRestore = null;
133253
+ return sel;
133254
+ }
133218
133255
  function applyStyleToSelectedSegments(segments, selection, updates) {
133219
133256
  const { startSegIdx, startOffset, endSegIdx, endOffset } = selection;
133220
133257
  const result = [];
@@ -133863,6 +133900,26 @@ function hasCopyableFormat(element) {
133863
133900
  }
133864
133901
  return hasShapeProperties(element) || hasTextProperties(element);
133865
133902
  }
133903
+ function withoutRenderedBulletPrefix(text22, originalSegments, dedicatedMarker) {
133904
+ if (!dedicatedMarker) {
133905
+ return text22;
133906
+ }
133907
+ const resolved = resolveParagraphBullet(dedicatedMarker);
133908
+ if (!resolved || !text22.startsWith(resolved.marker)) {
133909
+ return text22;
133910
+ }
133911
+ const withoutMarker = text22.slice(resolved.marker.length);
133912
+ const originalContent = originalSegments.slice(1).map((segment) => segment.text).join("");
133913
+ if (originalContent.trim().length === 0) {
133914
+ return text22;
133915
+ }
133916
+ const originalLeadingSpaces = originalContent.length - originalContent.trimStart().length;
133917
+ const editedLeadingSpaces = withoutMarker.length - withoutMarker.trimStart().length;
133918
+ if (editedLeadingSpaces > originalLeadingSpaces) {
133919
+ return withoutMarker.slice(1);
133920
+ }
133921
+ return withoutMarker;
133922
+ }
133866
133923
  function isAtomicOriginalSegment(seg) {
133867
133924
  return seg.fieldType !== void 0 || seg.equationXml !== void 0;
133868
133925
  }
@@ -133887,26 +133944,61 @@ function copySegmentMetadata(from, to) {
133887
133944
  }
133888
133945
  return to;
133889
133946
  }
133947
+ function restoreParagraphMetadata(from, segments) {
133948
+ if (segments.length === 0) {
133949
+ return segments;
133950
+ }
133951
+ const [first, ...rest] = segments;
133952
+ const restored = { ...first };
133953
+ delete restored.paragraphLevel;
133954
+ delete restored.paragraphProperties;
133955
+ delete restored.endParaRunProperties;
133956
+ if (from?.paragraphLevel !== void 0) {
133957
+ restored.paragraphLevel = from.paragraphLevel;
133958
+ }
133959
+ if (from?.paragraphProperties !== void 0) {
133960
+ restored.paragraphProperties = from.paragraphProperties;
133961
+ }
133962
+ if (from?.endParaRunProperties !== void 0) {
133963
+ restored.endParaRunProperties = from.endParaRunProperties;
133964
+ }
133965
+ return [restored, ...rest];
133966
+ }
133890
133967
  function remapTextToSegments(newText, originalSegments, elementTextStyle) {
133891
133968
  const fallbackStyle = { ...elementTextStyle };
133892
133969
  if (!originalSegments || originalSegments.length === 0) {
133893
133970
  return [{ text: newText, style: fallbackStyle }];
133894
133971
  }
133895
- const originalParagraphs = [[]];
133972
+ const originalParagraphs = [
133973
+ { segments: [] }
133974
+ ];
133896
133975
  for (const seg of originalSegments) {
133897
133976
  if (seg.text === "\n" || seg.isParagraphBreak) {
133898
- originalParagraphs.push([]);
133977
+ originalParagraphs[originalParagraphs.length - 1].terminator = seg;
133978
+ originalParagraphs.push({ segments: [] });
133899
133979
  } else {
133900
- originalParagraphs[originalParagraphs.length - 1].push(seg);
133980
+ originalParagraphs[originalParagraphs.length - 1].segments.push(seg);
133901
133981
  }
133902
133982
  }
133903
133983
  const newParagraphTexts = newText.split("\n");
133904
- const firstContentSeg = originalParagraphs.flat().find((s) => s.text.trim().length > 0);
133984
+ const firstContentSeg = originalParagraphs.flatMap((paragraph) => paragraph.segments).find((s) => s.text.trim().length > 0);
133905
133985
  const baseFallbackStyle = firstContentSeg?.style ? { ...firstContentSeg.style } : fallbackStyle;
133906
133986
  function remapParagraph(paraNewText, paraOrigSegments) {
133907
133987
  if (paraOrigSegments.length === 0) {
133908
133988
  return paraNewText.length > 0 ? [{ text: paraNewText, style: { ...baseFallbackStyle } }] : [{ text: "", style: { ...baseFallbackStyle } }];
133909
133989
  }
133990
+ const firstSegment = paraOrigSegments[0];
133991
+ const dedicatedMarker = isBulletMarkerSegment(firstSegment) && (!firstSegment.bulletInfo?.autoNumType || firstSegment.bulletInfo.paragraphIndex !== void 0) ? firstSegment : void 0;
133992
+ if (dedicatedMarker) {
133993
+ const contentSegments = paraOrigSegments.slice(1);
133994
+ const contentText = withoutRenderedBulletPrefix(
133995
+ paraNewText,
133996
+ paraOrigSegments,
133997
+ dedicatedMarker
133998
+ );
133999
+ const content = contentSegments.length > 0 ? remapParagraph(contentText, contentSegments) : [{ text: contentText, style: { ...dedicatedMarker.style } }];
134000
+ return [dedicatedMarker, ...content];
134001
+ }
133910
134002
  const paragraphBulletInfo = paraOrigSegments[0].bulletInfo;
133911
134003
  if (paraNewText.length === 0) {
133912
134004
  const emptyStyle = { ...paraOrigSegments[0].style };
@@ -133976,15 +134068,19 @@ function remapTextToSegments(newText, originalSegments, elementTextStyle) {
133976
134068
  return remapped;
133977
134069
  }
133978
134070
  const output = [];
133979
- const lastOrigPara = originalParagraphs[originalParagraphs.length - 1];
134071
+ const lastOrigPara = originalParagraphs[originalParagraphs.length - 1]?.segments;
133980
134072
  for (let pi = 0; pi < newParagraphTexts.length; pi++) {
133981
134073
  if (pi > 0) {
133982
- const precedingOrigPara = originalParagraphs[pi - 1] ?? [];
134074
+ const precedingOrigPara = originalParagraphs[pi - 1]?.segments ?? [];
133983
134075
  const breakStyle = precedingOrigPara[0]?.style ? { ...precedingOrigPara[0].style } : { ...baseFallbackStyle };
133984
134076
  output.push({ text: "\n", style: breakStyle, isParagraphBreak: true });
133985
134077
  }
133986
- const origPara = originalParagraphs[pi] ?? lastOrigPara ?? [];
133987
- const paraSegments = remapParagraph(newParagraphTexts[pi], origPara);
134078
+ const originalParagraph = originalParagraphs[pi];
134079
+ const origPara = originalParagraph?.segments ?? lastOrigPara ?? [];
134080
+ const paraSegments = restoreParagraphMetadata(
134081
+ originalParagraph?.segments[0] ?? originalParagraph?.terminator,
134082
+ remapParagraph(newParagraphTexts[pi], origPara)
134083
+ );
133988
134084
  output.push(...paraSegments);
133989
134085
  }
133990
134086
  return output.length > 0 ? output : [{ text: "", style: { ...baseFallbackStyle } }];
@@ -141571,6 +141667,86 @@ function projectDrawingShapes(elementId, shapes, viewBox, palette, style) {
141571
141667
  function styleShadowFilter(style) {
141572
141668
  return styleShadow(style);
141573
141669
  }
141670
+ function textFontSizePxToPt(fontSizePx2) {
141671
+ return Math.round(fontSizePx2 * (72 / 96) * 100) / 100;
141672
+ }
141673
+ function textFontSizePtToPx(fontSizePt) {
141674
+ return fontSizePt * (96 / 72);
141675
+ }
141676
+ var COMMON_FONT_FAMILIES = [
141677
+ "Abadi",
141678
+ "Aptos",
141679
+ "Aptos Display",
141680
+ "Arial",
141681
+ "Arial Black",
141682
+ "Arial Narrow",
141683
+ "Bahnschrift",
141684
+ "Book Antiqua",
141685
+ "Bookman Old Style",
141686
+ "Calibri",
141687
+ "Calibri Light",
141688
+ "Cambria",
141689
+ "Candara",
141690
+ "Century Gothic",
141691
+ "Comic Sans MS",
141692
+ "Consolas",
141693
+ "Corbel",
141694
+ "Courier New",
141695
+ "Franklin Gothic Book",
141696
+ "Franklin Gothic Medium",
141697
+ "Garamond",
141698
+ "Georgia",
141699
+ "Gill Sans MT",
141700
+ "Helvetica",
141701
+ "Impact",
141702
+ "Inter",
141703
+ "Lucida Console",
141704
+ "Lucida Sans Unicode",
141705
+ "Microsoft Sans Serif",
141706
+ "Montserrat",
141707
+ "Noto Sans",
141708
+ "Open Sans",
141709
+ "Palatino Linotype",
141710
+ "Poppins",
141711
+ "Roboto",
141712
+ "Rockwell",
141713
+ "Segoe UI",
141714
+ "Source Sans Pro",
141715
+ "Tahoma",
141716
+ "Times New Roman",
141717
+ "Trebuchet MS",
141718
+ "Tw Cen MT",
141719
+ "Verdana"
141720
+ ];
141721
+ var COMMON_FONT_SIZES = [
141722
+ 8,
141723
+ 9,
141724
+ 10,
141725
+ 11,
141726
+ 12,
141727
+ 14,
141728
+ 16,
141729
+ 18,
141730
+ 20,
141731
+ 24,
141732
+ 28,
141733
+ 32,
141734
+ 36,
141735
+ 40,
141736
+ 44,
141737
+ 48,
141738
+ 54,
141739
+ 60,
141740
+ 72,
141741
+ 96
141742
+ ];
141743
+ var CHARACTER_SPACING_OPTIONS = [
141744
+ { label: "Very Tight", i18nKey: "pptx.text.characterSpacingVeryTight", value: -150 },
141745
+ { label: "Tight", i18nKey: "pptx.text.characterSpacingTight", value: -75 },
141746
+ { label: "Normal", i18nKey: "pptx.text.characterSpacingNormal", value: 0 },
141747
+ { label: "Loose", i18nKey: "pptx.text.characterSpacingLoose", value: 75 },
141748
+ { label: "Very Loose", i18nKey: "pptx.text.characterSpacingVeryLoose", value: 150 }
141749
+ ];
141574
141750
  var FONT_NAME_UNSAFE_CHARS = /["\\\n\r;}<>]/u;
141575
141751
  var FONT_FORMAT_ALLOWED = /* @__PURE__ */ new Set(["truetype", "opentype", "woff", "woff2"]);
141576
141752
  var FONT_DATA_URL_PATTERN = /^data:font\/[a-z0-9+.-]+(?:;charset=[a-z0-9-]+)?;base64,[a-z0-9+/=]+$/iu;
@@ -149384,80 +149560,6 @@ var SHAPE_PRESET_DEFS = [
149384
149560
  glyphClass: ""
149385
149561
  }
149386
149562
  ];
149387
- var COMMON_FONT_FAMILIES = [
149388
- "Abadi",
149389
- "Aptos",
149390
- "Aptos Display",
149391
- "Arial",
149392
- "Arial Black",
149393
- "Arial Narrow",
149394
- "Bahnschrift",
149395
- "Book Antiqua",
149396
- "Bookman Old Style",
149397
- "Calibri",
149398
- "Calibri Light",
149399
- "Cambria",
149400
- "Candara",
149401
- "Century Gothic",
149402
- "Comic Sans MS",
149403
- "Consolas",
149404
- "Corbel",
149405
- "Courier New",
149406
- "Franklin Gothic Book",
149407
- "Franklin Gothic Medium",
149408
- "Garamond",
149409
- "Georgia",
149410
- "Gill Sans MT",
149411
- "Helvetica",
149412
- "Impact",
149413
- "Inter",
149414
- "Lucida Console",
149415
- "Lucida Sans Unicode",
149416
- "Microsoft Sans Serif",
149417
- "Montserrat",
149418
- "Noto Sans",
149419
- "Open Sans",
149420
- "Palatino Linotype",
149421
- "Poppins",
149422
- "Roboto",
149423
- "Rockwell",
149424
- "Segoe UI",
149425
- "Source Sans Pro",
149426
- "Tahoma",
149427
- "Times New Roman",
149428
- "Trebuchet MS",
149429
- "Tw Cen MT",
149430
- "Verdana"
149431
- ];
149432
- var COMMON_FONT_SIZES = [
149433
- 8,
149434
- 9,
149435
- 10,
149436
- 11,
149437
- 12,
149438
- 14,
149439
- 16,
149440
- 18,
149441
- 20,
149442
- 24,
149443
- 28,
149444
- 32,
149445
- 36,
149446
- 40,
149447
- 44,
149448
- 48,
149449
- 54,
149450
- 60,
149451
- 72,
149452
- 96
149453
- ];
149454
- var CHARACTER_SPACING_OPTIONS = [
149455
- { label: "Very Tight", i18nKey: "pptx.text.characterSpacingVeryTight", value: -150 },
149456
- { label: "Tight", i18nKey: "pptx.text.characterSpacingTight", value: -75 },
149457
- { label: "Normal", i18nKey: "pptx.text.characterSpacingNormal", value: 0 },
149458
- { label: "Loose", i18nKey: "pptx.text.characterSpacingLoose", value: 75 },
149459
- { label: "Very Loose", i18nKey: "pptx.text.characterSpacingVeryLoose", value: 150 }
149460
- ];
149461
149563
  var GROUP_LABEL_KEYS = {
149462
149564
  theme: "pptx.font.group.theme",
149463
149565
  embedded: "pptx.font.group.embedded",
@@ -152322,6 +152424,34 @@ function updateElement(slides, slideIndex, elementId, updates) {
152322
152424
  )
152323
152425
  );
152324
152426
  }
152427
+ function readEditableText(root) {
152428
+ let out = "";
152429
+ const walk2 = (node) => {
152430
+ for (const child27 of Array.from(node.childNodes)) {
152431
+ if (child27.nodeType === 3) {
152432
+ out += child27.nodeValue ?? "";
152433
+ continue;
152434
+ }
152435
+ if (!(child27 instanceof HTMLElement)) {
152436
+ continue;
152437
+ }
152438
+ if (child27.hasAttribute("data-pptx-bullet-marker")) {
152439
+ continue;
152440
+ }
152441
+ if (child27.tagName === "BR") {
152442
+ out += "\n";
152443
+ continue;
152444
+ }
152445
+ const isBlock = child27.tagName === "DIV" || child27.tagName === "P";
152446
+ if (isBlock && out.length > 0 && !out.endsWith("\n")) {
152447
+ out += "\n";
152448
+ }
152449
+ walk2(child27);
152450
+ }
152451
+ };
152452
+ walk2(root);
152453
+ return out;
152454
+ }
152325
152455
  var STROKE_DASH_OPTIONS = [
152326
152456
  { value: "solid", label: "Solid", i18nKey: "pptx.stroke.dashSolid" },
152327
152457
  { value: "dot", label: "Dot", i18nKey: "pptx.stroke.dashDot" },
@@ -155211,6 +155341,7 @@ exports.radarStylePatch = radarStylePatch;
155211
155341
  exports.reResolveElementColors = reResolveElementColors;
155212
155342
  exports.reResolveSlideColors = reResolveSlideColors;
155213
155343
  exports.readBackstageRecentFile = readBackstageRecentFile;
155344
+ exports.readEditableText = readEditableText;
155214
155345
  exports.readOnlyRecommendation = readOnlyRecommendation;
155215
155346
  exports.readRibbonTransitionDraft = readRibbonTransitionDraft;
155216
155347
  exports.readSlideShowOption = readSlideShowOption;
@@ -155392,6 +155523,8 @@ exports.templateSchemeFromTheme = templateSchemeFromTheme;
155392
155523
  exports.text3dEmuToPt = text3dEmuToPt;
155393
155524
  exports.text3dPtToEmu = text3dPtToEmu;
155394
155525
  exports.textBuildSpanStyle = textBuildSpanStyle;
155526
+ exports.textFontSizePtToPx = textFontSizePtToPx;
155527
+ exports.textFontSizePxToPt = textFontSizePxToPt;
155395
155528
  exports.themeColorLabel = themeColorLabel;
155396
155529
  exports.themeColorSchemesEqual = themeColorSchemesEqual;
155397
155530
  exports.themeToCssVars = themeToCssVars;