pptx-react-viewer 4.7.0 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/dist/{AiChatPanel-3YILWCBX.js → AiChatPanel-WJ64Q6KO.js} +28 -28
  3. package/dist/AiChatPanel-WJ64Q6KO.js.br +0 -0
  4. package/dist/AiChatPanel-WJ64Q6KO.js.gz +0 -0
  5. package/dist/{AiChatPanel-X2MVL5UP.mjs → AiChatPanel-YRWC7C3B.mjs} +4 -4
  6. package/dist/AiChatPanel-YRWC7C3B.mjs.br +0 -0
  7. package/dist/AiChatPanel-YRWC7C3B.mjs.gz +0 -0
  8. package/dist/{Model3DScene-QFWI5CEE.mjs → Model3DScene-DS6AQWFV.mjs} +1 -1
  9. package/dist/Model3DScene-DS6AQWFV.mjs.br +0 -0
  10. package/dist/Model3DScene-DS6AQWFV.mjs.gz +0 -0
  11. package/dist/{Model3DScene-G7P6ZAIO.js → Model3DScene-VHDYCHO5.js} +2 -2
  12. package/dist/{Model3DScene-G7P6ZAIO.js.br → Model3DScene-VHDYCHO5.js.br} +0 -0
  13. package/dist/Model3DScene-VHDYCHO5.js.gz +0 -0
  14. package/dist/{chunk-FYAOOACZ.js → chunk-7NTNFOPT.js} +287 -255
  15. package/dist/chunk-7NTNFOPT.js.br +0 -0
  16. package/dist/chunk-7NTNFOPT.js.gz +0 -0
  17. package/dist/{chunk-WIEBQGQI.mjs → chunk-HDH4KFDK.mjs} +323 -96
  18. package/dist/chunk-HDH4KFDK.mjs.br +0 -0
  19. package/dist/chunk-HDH4KFDK.mjs.gz +0 -0
  20. package/dist/{chunk-UBYFLXAU.mjs → chunk-K5HZD63F.mjs} +2548 -1857
  21. package/dist/chunk-K5HZD63F.mjs.br +0 -0
  22. package/dist/chunk-K5HZD63F.mjs.gz +0 -0
  23. package/dist/{chunk-UIAU3NR2.js → chunk-KPKO2ELT.js} +323 -96
  24. package/dist/chunk-KPKO2ELT.js.br +0 -0
  25. package/dist/chunk-KPKO2ELT.js.gz +0 -0
  26. package/dist/{chunk-OECUSL2B.mjs → chunk-M6KW27TZ.mjs} +8 -7
  27. package/dist/chunk-M6KW27TZ.mjs.br +0 -0
  28. package/dist/chunk-M6KW27TZ.mjs.gz +0 -0
  29. package/dist/{chunk-VF4RA27Q.js → chunk-NMXIX7E4.js} +4565 -3874
  30. package/dist/chunk-NMXIX7E4.js.br +0 -0
  31. package/dist/chunk-NMXIX7E4.js.gz +0 -0
  32. package/dist/{chunk-QLDHUKH2.mjs → chunk-PJT2DTOS.mjs} +43189 -15692
  33. package/dist/chunk-PJT2DTOS.mjs.br +0 -0
  34. package/dist/chunk-PJT2DTOS.mjs.gz +0 -0
  35. package/dist/{chunk-2BM4GBFZ.js → chunk-PSJTZIIK.js} +5 -5
  36. package/dist/chunk-PSJTZIIK.js.br +0 -0
  37. package/dist/chunk-PSJTZIIK.js.gz +0 -0
  38. package/dist/{chunk-5J6NW3YS.mjs → chunk-Y7RTQOD6.mjs} +81 -49
  39. package/dist/chunk-Y7RTQOD6.mjs.br +0 -0
  40. package/dist/chunk-Y7RTQOD6.mjs.gz +0 -0
  41. package/dist/{chunk-AQIXKTAT.js → chunk-YWAFJZ23.js} +43214 -15695
  42. package/dist/chunk-YWAFJZ23.js.br +0 -0
  43. package/dist/chunk-YWAFJZ23.js.gz +0 -0
  44. package/dist/{chunk-SR7ETIBF.js → chunk-ZZ6IPWOP.js} +819 -818
  45. package/dist/chunk-ZZ6IPWOP.js.br +0 -0
  46. package/dist/chunk-ZZ6IPWOP.js.gz +0 -0
  47. package/dist/{chunk-E5OIDWHO.mjs → chunk-ZZY24BB7.mjs} +1 -1
  48. package/dist/chunk-ZZY24BB7.mjs.br +0 -0
  49. package/dist/chunk-ZZY24BB7.mjs.gz +0 -0
  50. package/dist/i18n/de.cjs +340 -105
  51. package/dist/i18n/de.cjs.br +0 -0
  52. package/dist/i18n/de.cjs.gz +0 -0
  53. package/dist/i18n/de.mjs +340 -105
  54. package/dist/i18n/de.mjs.br +0 -0
  55. package/dist/i18n/de.mjs.gz +0 -0
  56. package/dist/i18n/es.cjs +340 -105
  57. package/dist/i18n/es.cjs.br +0 -0
  58. package/dist/i18n/es.cjs.gz +0 -0
  59. package/dist/i18n/es.mjs +340 -105
  60. package/dist/i18n/es.mjs.br +0 -0
  61. package/dist/i18n/es.mjs.gz +0 -0
  62. package/dist/i18n/fr.cjs +340 -105
  63. package/dist/i18n/fr.cjs.br +0 -0
  64. package/dist/i18n/fr.cjs.gz +0 -0
  65. package/dist/i18n/fr.mjs +340 -105
  66. package/dist/i18n/fr.mjs.br +0 -0
  67. package/dist/i18n/fr.mjs.gz +0 -0
  68. package/dist/i18n/zh-CN.cjs +342 -107
  69. package/dist/i18n/zh-CN.cjs.br +0 -0
  70. package/dist/i18n/zh-CN.cjs.gz +0 -0
  71. package/dist/i18n/zh-CN.mjs +342 -107
  72. package/dist/i18n/zh-CN.mjs.br +0 -0
  73. package/dist/i18n/zh-CN.mjs.gz +0 -0
  74. package/dist/i18n.js +4 -4
  75. package/dist/i18n.js.br +0 -0
  76. package/dist/i18n.js.gz +0 -0
  77. package/dist/i18n.mjs +1 -1
  78. package/dist/i18n.mjs.br +0 -0
  79. package/dist/i18n.mjs.gz +0 -0
  80. package/dist/index.d.ts +762 -22
  81. package/dist/index.js +63 -63
  82. package/dist/index.js.br +0 -0
  83. package/dist/index.js.gz +0 -0
  84. package/dist/index.mjs +6 -6
  85. package/dist/index.mjs.br +0 -0
  86. package/dist/index.mjs.gz +0 -0
  87. package/dist/internals.d.ts +754 -11
  88. package/dist/internals.js +105 -105
  89. package/dist/internals.js.br +0 -0
  90. package/dist/internals.js.gz +0 -0
  91. package/dist/internals.mjs +4 -4
  92. package/dist/internals.mjs.br +0 -0
  93. package/dist/internals.mjs.gz +0 -0
  94. package/dist/pptx-viewer.css +1 -1
  95. package/dist/pptx-viewer.css.br +0 -0
  96. package/dist/pptx-viewer.css.gz +0 -0
  97. package/dist/viewer/index.d.ts +739 -22
  98. package/dist/viewer/index.js +27 -27
  99. package/dist/viewer/index.js.br +0 -0
  100. package/dist/viewer/index.js.gz +0 -0
  101. package/dist/viewer/index.mjs +6 -6
  102. package/dist/viewer/index.mjs.br +0 -0
  103. package/dist/viewer/index.mjs.gz +0 -0
  104. package/package.json +3 -2
  105. package/dist/AiChatPanel-3YILWCBX.js.br +0 -0
  106. package/dist/AiChatPanel-3YILWCBX.js.gz +0 -0
  107. package/dist/AiChatPanel-X2MVL5UP.mjs.br +0 -0
  108. package/dist/AiChatPanel-X2MVL5UP.mjs.gz +0 -0
  109. package/dist/Model3DScene-G7P6ZAIO.js.gz +0 -0
  110. package/dist/Model3DScene-QFWI5CEE.mjs.br +0 -0
  111. package/dist/Model3DScene-QFWI5CEE.mjs.gz +0 -0
  112. package/dist/chunk-2BM4GBFZ.js.br +0 -0
  113. package/dist/chunk-2BM4GBFZ.js.gz +0 -0
  114. package/dist/chunk-5J6NW3YS.mjs.br +0 -0
  115. package/dist/chunk-5J6NW3YS.mjs.gz +0 -0
  116. package/dist/chunk-AQIXKTAT.js.br +0 -0
  117. package/dist/chunk-AQIXKTAT.js.gz +0 -0
  118. package/dist/chunk-E5OIDWHO.mjs.br +0 -0
  119. package/dist/chunk-E5OIDWHO.mjs.gz +0 -0
  120. package/dist/chunk-FYAOOACZ.js.br +0 -0
  121. package/dist/chunk-FYAOOACZ.js.gz +0 -0
  122. package/dist/chunk-OECUSL2B.mjs.br +0 -0
  123. package/dist/chunk-OECUSL2B.mjs.gz +0 -0
  124. package/dist/chunk-QLDHUKH2.mjs.br +0 -0
  125. package/dist/chunk-QLDHUKH2.mjs.gz +0 -0
  126. package/dist/chunk-SR7ETIBF.js.br +0 -0
  127. package/dist/chunk-SR7ETIBF.js.gz +0 -0
  128. package/dist/chunk-UBYFLXAU.mjs.br +0 -0
  129. package/dist/chunk-UBYFLXAU.mjs.gz +0 -0
  130. package/dist/chunk-UIAU3NR2.js.br +0 -0
  131. package/dist/chunk-UIAU3NR2.js.gz +0 -0
  132. package/dist/chunk-VF4RA27Q.js.br +0 -0
  133. package/dist/chunk-VF4RA27Q.js.gz +0 -0
  134. package/dist/chunk-WIEBQGQI.mjs.br +0 -0
  135. package/dist/chunk-WIEBQGQI.mjs.gz +0 -0
@@ -1,21 +1,21 @@
1
1
  'use strict';
2
2
 
3
- var chunkAQIXKTAT_js = require('./chunk-AQIXKTAT.js');
4
- var chunkUIAU3NR2_js = require('./chunk-UIAU3NR2.js');
3
+ var chunkYWAFJZ23_js = require('./chunk-YWAFJZ23.js');
4
+ var chunkKPKO2ELT_js = require('./chunk-KPKO2ELT.js');
5
5
  var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
- var React7 = require('react');
7
+ var React8 = require('react');
8
8
  var lu = require('react-icons/lu');
9
9
  var jsxRuntime = require('react/jsx-runtime');
10
10
  var reactI18next = require('react-i18next');
11
11
 
12
12
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
13
 
14
- var React7__default = /*#__PURE__*/_interopDefault(React7);
14
+ var React8__default = /*#__PURE__*/_interopDefault(React8);
15
15
 
16
16
  // src/viewer/utils/animation-effects.ts
17
17
  function getAnimationInitialStyle2(preset, nativeAnimation) {
18
- return chunkAQIXKTAT_js.getAnimationInitialStyle(preset, nativeAnimation);
18
+ return chunkYWAFJZ23_js.getAnimationInitialStyle(preset, nativeAnimation);
19
19
  }
20
20
  function cn(...inputs) {
21
21
  return tailwindMerge.twMerge(clsx.clsx(inputs));
@@ -23,7 +23,7 @@ function cn(...inputs) {
23
23
 
24
24
  // src/viewer/utils/clone.ts
25
25
  function cloneHistorySnapshot2(snapshot) {
26
- return chunkAQIXKTAT_js.cloneHistorySnapshot(snapshot);
26
+ return chunkYWAFJZ23_js.cloneHistorySnapshot(snapshot);
27
27
  }
28
28
 
29
29
  // src/viewer/constants/scalar.ts
@@ -61,7 +61,7 @@ var TOOLBAR_SECTIONS = [
61
61
  { id: "view", labelKey: "pptx.ribbon.tab.view" },
62
62
  { id: "help", labelKey: "pptx.ribbon.tab.help" }
63
63
  ];
64
- var SHORTCUT_REFERENCE_ITEMS = chunkAQIXKTAT_js.VIEWER_SHORTCUT_REFERENCE;
64
+ var SHORTCUT_REFERENCE_ITEMS = chunkYWAFJZ23_js.VIEWER_SHORTCUT_REFERENCE;
65
65
 
66
66
  // src/viewer/constants/transitions-animations.ts
67
67
  var ANIMATION_PRESET_OPTIONS = [
@@ -89,12 +89,12 @@ var GLYPH_COMPONENTS = {
89
89
  plus: lu.LuPlus,
90
90
  triangle: lu.LuTriangle
91
91
  };
92
- var SHAPE_PRESETS = chunkAQIXKTAT_js.SHAPE_PRESET_DEFS.map(
92
+ var SHAPE_PRESETS = chunkYWAFJZ23_js.SHAPE_PRESET_DEFS.map(
93
93
  (def) => ({
94
94
  type: def.type,
95
95
  label: def.label,
96
96
  i18nKey: def.i18nKey,
97
- icon: React7__default.default.createElement(GLYPH_COMPONENTS[def.glyph], {
97
+ icon: React8__default.default.createElement(GLYPH_COMPONENTS[def.glyph], {
98
98
  className: def.glyphClass ? `w-3.5 h-3.5 ${def.glyphClass}` : "w-3.5 h-3.5"
99
99
  })
100
100
  })
@@ -114,7 +114,7 @@ var ARROW_SIZE_OPTIONS = [
114
114
  { value: "med", label: "Medium", i18nKey: "pptx.connectorOptions.sizeMedium" },
115
115
  { value: "lg", label: "Large", i18nKey: "pptx.connectorOptions.sizeLarge" }
116
116
  ];
117
- var STROKE_DASH_OPTIONS2 = chunkAQIXKTAT_js.STROKE_DASH_OPTIONS;
117
+ var STROKE_DASH_OPTIONS2 = chunkYWAFJZ23_js.STROKE_DASH_OPTIONS;
118
118
 
119
119
  // src/viewer/utils/shape-types.tsx
120
120
  function getShapeType(shapeType) {
@@ -223,7 +223,7 @@ function isConnectorOrLineElement(element) {
223
223
  if (element.type === "connector") {
224
224
  return true;
225
225
  }
226
- if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
226
+ if (!chunkYWAFJZ23_js.hasShapeProperties(element)) {
227
227
  return false;
228
228
  }
229
229
  const st = getShapeType(element.shapeType);
@@ -232,18 +232,18 @@ function isConnectorOrLineElement(element) {
232
232
 
233
233
  // src/viewer/utils/image-style.ts
234
234
  function getImageMaskStyle(element) {
235
- if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
235
+ if (!chunkYWAFJZ23_js.hasShapeProperties(element)) {
236
236
  return void 0;
237
237
  }
238
- const geometry = chunkAQIXKTAT_js.resolveShapeGeometry(element);
238
+ const geometry = chunkYWAFJZ23_js.resolveShapeGeometry(element);
239
239
  if (geometry.kind === "borderRadius") {
240
240
  return { borderRadius: geometry.radius };
241
241
  }
242
242
  return geometry.kind === "clipPath" ? { clipPath: geometry.clipPath } : void 0;
243
243
  }
244
244
  function getImageRenderStyle(element) {
245
- const fit = chunkAQIXKTAT_js.getImageFitStyle(element);
246
- const counterTransform = chunkAQIXKTAT_js.getImageFillCounterTransform(element, Boolean(fit.transform));
245
+ const fit = chunkYWAFJZ23_js.getImageFitStyle(element);
246
+ const counterTransform = chunkYWAFJZ23_js.getImageFillCounterTransform(element, Boolean(fit.transform));
247
247
  return {
248
248
  // A translated/scaled crop, or a rotWithShape=false counter-transform,
249
249
  // must be masked by the stationary wrapper, not by the moving/counter-
@@ -262,7 +262,7 @@ function getImageSurfaceMaskStyle(element) {
262
262
  };
263
263
  }
264
264
  function getImageSurfaceStyle(element) {
265
- const fill = chunkAQIXKTAT_js.hasShapeProperties(element) ? chunkAQIXKTAT_js.getComputedFillStyle(element) : void 0;
265
+ const fill = chunkYWAFJZ23_js.hasShapeProperties(element) ? chunkYWAFJZ23_js.getComputedFillStyle(element) : void 0;
266
266
  return {
267
267
  position: "absolute",
268
268
  inset: 0,
@@ -275,13 +275,13 @@ function getImageSurfaceStyle(element) {
275
275
  };
276
276
  }
277
277
  function getCropShapeClipPath2(element) {
278
- if (!chunkAQIXKTAT_js.isImageLikeElement(element)) {
278
+ if (!chunkYWAFJZ23_js.isImageLikeElement(element)) {
279
279
  return void 0;
280
280
  }
281
- return chunkAQIXKTAT_js.getCropShapeClipPath(element.cropShape, element.width, element.height);
281
+ return chunkYWAFJZ23_js.getCropShapeClipPath(element.cropShape, element.width, element.height);
282
282
  }
283
283
  function getImageTilingStyle2(element, nativeSize) {
284
- return chunkAQIXKTAT_js.getImageTilingStyle(element, nativeSize);
284
+ return chunkYWAFJZ23_js.getImageTilingStyle(element, nativeSize);
285
285
  }
286
286
 
287
287
  // src/viewer/utils/geometry-image.ts
@@ -329,8 +329,8 @@ function buildTrimFragment(element) {
329
329
  return `#t=${(start / 1e3).toFixed(3)}`;
330
330
  }
331
331
  function useMediaMetadataExtraction(mediaRef, element) {
332
- const [metadata, setMetadata] = React7.useState(element.metadata);
333
- React7.useEffect(() => {
332
+ const [metadata, setMetadata] = React8.useState(element.metadata);
333
+ React8.useEffect(() => {
334
334
  const el = mediaRef.current;
335
335
  if (!el) {
336
336
  return;
@@ -413,7 +413,7 @@ function VideoWithMetadata({
413
413
  {
414
414
  ref: mediaRef,
415
415
  className: "w-full h-full pointer-events-auto",
416
- style: isFullScreen ? { objectFit: "cover" } : chunkAQIXKTAT_js.getImageFitStyle(element),
416
+ style: isFullScreen ? { objectFit: "cover" } : chunkYWAFJZ23_js.getImageFitStyle(element),
417
417
  controls: showTransport,
418
418
  preload: "metadata",
419
419
  playsInline: true,
@@ -466,28 +466,28 @@ function PresentationMediaController({
466
466
  children
467
467
  }) {
468
468
  const { t } = reactI18next.useTranslation();
469
- const mediaRef = React7.useRef(null);
470
- const [isMediaPlaying, setIsMediaPlaying] = React7.useState(false);
469
+ const mediaRef = React8.useRef(null);
470
+ const [isMediaPlaying, setIsMediaPlaying] = React8.useState(false);
471
471
  const trimStartSec = element.trimStartMs !== void 0 ? element.trimStartMs / 1e3 : 0;
472
472
  const hideWhenNotPlaying = isPresentationMode && element.hideWhenNotPlaying === true;
473
- const { volume: playbackVolume, playbackRate } = chunkAQIXKTAT_js.mediaPlaybackAttributes({
473
+ const { volume: playbackVolume, playbackRate } = chunkYWAFJZ23_js.mediaPlaybackAttributes({
474
474
  loop: element.loop,
475
475
  volume: element.volume,
476
476
  playbackSpeed: element.playbackSpeed
477
477
  });
478
- React7.useEffect(() => {
478
+ React8.useEffect(() => {
479
479
  const el = mediaRef.current;
480
480
  if (el) {
481
481
  el.volume = playbackVolume;
482
482
  }
483
483
  }, [playbackVolume]);
484
- React7.useEffect(() => {
484
+ React8.useEffect(() => {
485
485
  const el = mediaRef.current;
486
486
  if (el) {
487
487
  el.playbackRate = playbackRate;
488
488
  }
489
489
  }, [playbackRate]);
490
- React7.useEffect(() => {
490
+ React8.useEffect(() => {
491
491
  const el = mediaRef.current;
492
492
  if (!el) {
493
493
  return;
@@ -513,12 +513,12 @@ function PresentationMediaController({
513
513
  el.removeEventListener("ended", handleEnded);
514
514
  };
515
515
  }, [onPlayStateChange]);
516
- React7.useEffect(() => {
516
+ React8.useEffect(() => {
517
517
  const el = mediaRef.current;
518
518
  if (!el || !isPresentationMode) {
519
519
  return;
520
520
  }
521
- return chunkAQIXKTAT_js.scheduleMediaTrimAndFade(el, {
521
+ return chunkYWAFJZ23_js.scheduleMediaTrimAndFade(el, {
522
522
  trimStartMs: element.trimStartMs,
523
523
  trimEndMs: element.trimEndMs,
524
524
  fadeInDuration: element.fadeInDuration,
@@ -533,13 +533,13 @@ function PresentationMediaController({
533
533
  element.fadeOutDuration,
534
534
  playbackVolume
535
535
  ]);
536
- React7.useEffect(() => {
536
+ React8.useEffect(() => {
537
537
  if (!isPresentationMode || !shouldAutoPlay) {
538
538
  return;
539
539
  }
540
540
  if (element.playAcrossSlides && element.mediaType === "audio") {
541
541
  const dataUrl = element.mediaData ?? resolvedDataUrl;
542
- if (chunkAQIXKTAT_js.registerCrossSlideAudio(element, dataUrl)) {
542
+ if (chunkYWAFJZ23_js.registerCrossSlideAudio(element, dataUrl)) {
543
543
  return;
544
544
  }
545
545
  }
@@ -561,17 +561,17 @@ function PresentationMediaController({
561
561
  transition: "opacity 0.3s ease",
562
562
  pointerEvents: isMediaPlaying ? "auto" : "none"
563
563
  } : {};
564
- const handleStopFullScreen = React7.useCallback(() => {
564
+ const handleStopFullScreen = React8.useCallback(() => {
565
565
  const el = mediaRef.current;
566
566
  if (el && !el.paused) {
567
567
  el.pause();
568
568
  }
569
569
  }, []);
570
- const noopOnPlay = React7.useCallback(() => {
570
+ const noopOnPlay = React8.useCallback(() => {
571
571
  }, []);
572
572
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full h-full", style: wrapperStyle, children: [
573
573
  children({ mediaRef, onPlay: noopOnPlay, isMediaPlaying }),
574
- chunkAQIXKTAT_js.shouldShowMediaFullscreenStopButton({
574
+ chunkYWAFJZ23_js.shouldShowMediaFullscreenStopButton({
575
575
  fullScreen: isFullScreen,
576
576
  presenting: isPresentationMode,
577
577
  playing: isMediaPlaying
@@ -588,7 +588,7 @@ function PresentationMediaController({
588
588
  ] });
589
589
  }
590
590
  function label(key) {
591
- return key === void 0 ? void 0 : chunkUIAU3NR2_js.translationsEn[key];
591
+ return key === void 0 ? void 0 : chunkKPKO2ELT_js.translationsEn[key];
592
592
  }
593
593
  function FallbackIcon({
594
594
  paths,
@@ -624,17 +624,17 @@ function Badge({
624
624
  "div",
625
625
  {
626
626
  className: `absolute inset-0 flex flex-col items-center justify-center ${isMissing ? "gap-1" : ""}`,
627
- ...{ [chunkAQIXKTAT_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
627
+ ...{ [chunkYWAFJZ23_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
628
628
  children: [
629
629
  /* @__PURE__ */ jsxRuntime.jsx(
630
630
  FallbackIcon,
631
631
  {
632
- paths: chunkAQIXKTAT_js.mediaFallbackIcon(visual, element.mediaType),
632
+ paths: chunkYWAFJZ23_js.mediaFallbackIcon(visual, element.mediaType),
633
633
  size: isMissing ? 32 : 48,
634
634
  className: isMissing ? "text-white/60" : "text-white/80 drop-shadow-md"
635
635
  }
636
636
  ),
637
- isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkAQIXKTAT_js.mediaFallbackLabelKey(visual, element.mediaType)) })
637
+ isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkYWAFJZ23_js.mediaFallbackLabelKey(visual, element.mediaType)) })
638
638
  ]
639
639
  }
640
640
  );
@@ -651,17 +651,17 @@ function Placeholder({
651
651
  "div",
652
652
  {
653
653
  className: `w-full h-full flex flex-col items-center justify-center gap-1 pointer-events-none rounded ${isMissing ? "bg-black/30 border border-dashed border-white/20" : element.mediaType === "audio" ? "bg-black/10" : "bg-black/20"}`,
654
- ...{ [chunkAQIXKTAT_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
654
+ ...{ [chunkYWAFJZ23_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
655
655
  children: [
656
656
  /* @__PURE__ */ jsxRuntime.jsx(
657
657
  FallbackIcon,
658
658
  {
659
- paths: chunkAQIXKTAT_js.mediaFallbackIcon(visual, element.mediaType),
659
+ paths: chunkYWAFJZ23_js.mediaFallbackIcon(visual, element.mediaType),
660
660
  size: isMissing ? 36 : element.mediaType === "audio" ? 24 : 32,
661
661
  className: isMissing ? "text-white/50" : "text-white/70"
662
662
  }
663
663
  ),
664
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkAQIXKTAT_js.mediaFallbackLabelKey(visual, element.mediaType)) })
664
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkYWAFJZ23_js.mediaFallbackLabelKey(visual, element.mediaType)) })
665
665
  ]
666
666
  }
667
667
  );
@@ -671,7 +671,7 @@ function renderMediaFallback({
671
671
  posterUrl,
672
672
  surface
673
673
  }) {
674
- const visual = chunkAQIXKTAT_js.mediaFallbackVisual(surface, {
674
+ const visual = chunkYWAFJZ23_js.mediaFallbackVisual(surface, {
675
675
  hasPoster: Boolean(posterUrl),
676
676
  missing: element.mediaMissing === true
677
677
  });
@@ -681,9 +681,9 @@ function renderMediaFallback({
681
681
  "img",
682
682
  {
683
683
  src: posterUrl,
684
- alt: visual.dimPoster ? chunkUIAU3NR2_js.translationsEn["pptx.media.posterAlt"] : chunkUIAU3NR2_js.translationsEn["pptx.media.videoPosterAlt"],
684
+ alt: visual.dimPoster ? chunkKPKO2ELT_js.translationsEn["pptx.media.posterAlt"] : chunkKPKO2ELT_js.translationsEn["pptx.media.videoPosterAlt"],
685
685
  className: `w-full h-full${visual.dimPoster ? " opacity-50" : ""}`,
686
- style: chunkAQIXKTAT_js.getImageFitStyle(element)
686
+ style: chunkYWAFJZ23_js.getImageFitStyle(element)
687
687
  }
688
688
  ),
689
689
  /* @__PURE__ */ jsxRuntime.jsx(Badge, { visual, element })
@@ -693,7 +693,7 @@ function renderMediaFallback({
693
693
  }
694
694
  function renderMediaElement(element, mediaDataUrls, options) {
695
695
  if (element.type !== "media") {
696
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkUIAU3NR2_js.translationsEn["pptx.media.title"] });
696
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkKPKO2ELT_js.translationsEn["pptx.media.title"] });
697
697
  }
698
698
  const mediaType = element.mediaType;
699
699
  const mediaPath = element.mediaPath;
@@ -701,7 +701,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
701
701
  const dataUrl = element.mediaData ?? (mediaPath ? mediaDataUrls.get(mediaPath) : void 0);
702
702
  const trimFragment = buildTrimFragment(element);
703
703
  const posterUrl = element.posterFrameData ?? void 0;
704
- const shouldLoop = chunkAQIXKTAT_js.mediaPlaybackAttributes(element).loop;
704
+ const shouldLoop = chunkYWAFJZ23_js.mediaPlaybackAttributes(element).loop;
705
705
  const shouldAutoPlay = options?.autoPlay === true || element.autoPlay === true;
706
706
  const isFullScreen = options?.fullScreen === true;
707
707
  const isPresentationMode = options?.isPresentationMode === true;
@@ -714,17 +714,17 @@ function renderMediaElement(element, mediaDataUrls, options) {
714
714
  return renderMediaFallback({ element, posterUrl, surface });
715
715
  }
716
716
  if (mediaType === "video") {
717
- const onlineVideo = chunkAQIXKTAT_js.getOnlineVideoEmbed(element);
717
+ const onlineVideo = chunkYWAFJZ23_js.getOnlineVideoEmbed(element);
718
718
  if (onlineVideo) {
719
719
  return /* @__PURE__ */ jsxRuntime.jsx(
720
720
  "iframe",
721
721
  {
722
722
  src: onlineVideo.embedUrl,
723
- title: chunkUIAU3NR2_js.translationsEn["pptx.media.onlineVideoTitle"],
723
+ title: chunkKPKO2ELT_js.translationsEn["pptx.media.onlineVideoTitle"],
724
724
  className: "w-full h-full border-0 pointer-events-auto",
725
- allow: chunkAQIXKTAT_js.ONLINE_VIDEO_IFRAME_ALLOW,
725
+ allow: chunkYWAFJZ23_js.ONLINE_VIDEO_IFRAME_ALLOW,
726
726
  allowFullScreen: true,
727
- sandbox: chunkAQIXKTAT_js.ONLINE_VIDEO_IFRAME_SANDBOX
727
+ sandbox: chunkYWAFJZ23_js.ONLINE_VIDEO_IFRAME_SANDBOX
728
728
  }
729
729
  );
730
730
  }
@@ -793,32 +793,32 @@ function renderMediaElement(element, mediaDataUrls, options) {
793
793
  if (surface.presenting || surface.preview) {
794
794
  return null;
795
795
  }
796
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkUIAU3NR2_js.translationsEn["pptx.media.title"] });
796
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkKPKO2ELT_js.translationsEn["pptx.media.title"] });
797
797
  }
798
798
 
799
799
  // src/viewer/utils/text-utils.tsx
800
800
  function getTextStyleForElement(element, fallbackColor) {
801
- return chunkAQIXKTAT_js.buildTextBlockStyle(element, { fallbackColor });
801
+ return chunkYWAFJZ23_js.buildTextBlockStyle(element, { fallbackColor });
802
802
  }
803
803
 
804
804
  // src/viewer/utils/text-layout.tsx
805
805
  function getTextLayoutStyle(element) {
806
- if (!chunkAQIXKTAT_js.hasTextProperties(element)) {
806
+ if (!chunkYWAFJZ23_js.hasTextProperties(element)) {
807
807
  return {};
808
808
  }
809
- const writingMode = chunkAQIXKTAT_js.toCssWritingMode(element.textStyle?.textDirection);
810
- const textOrientation = chunkAQIXKTAT_js.toCssTextOrientation(element.textStyle?.textDirection);
811
- const verticalDirection = chunkAQIXKTAT_js.toCssVerticalDirection(element.textStyle?.textDirection);
809
+ const writingMode = chunkYWAFJZ23_js.toCssWritingMode(element.textStyle?.textDirection);
810
+ const textOrientation = chunkYWAFJZ23_js.toCssTextOrientation(element.textStyle?.textDirection);
811
+ const verticalDirection = chunkYWAFJZ23_js.toCssVerticalDirection(element.textStyle?.textDirection);
812
812
  const textWrapNone = element.textStyle?.textWrap === "none";
813
813
  const shapeAutoFitTextBox = element.textStyle?.autoFitMode === "shrink" && (element.type === "text" || element.locks?.txBox === true);
814
- const hasParagraphIndents = chunkAQIXKTAT_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
814
+ const hasParagraphIndents = chunkYWAFJZ23_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
815
815
  const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
816
816
  const paragraphIndent = element.textStyle?.paragraphIndent;
817
817
  const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
818
818
  const textIndent = !hasParagraphIndents && typeof paragraphIndent === "number" && paragraphIndent !== 0 ? paragraphIndent : void 0;
819
819
  const bodyTop = element.textStyle?.bodyInsetTop ?? DEFAULT_BODY_INSET_TB_PX;
820
820
  const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
821
- const bodyLayoutStyle = chunkAQIXKTAT_js.buildTextBodyLayoutStyle(element);
821
+ const bodyLayoutStyle = chunkYWAFJZ23_js.buildTextBodyLayoutStyle(element);
822
822
  return {
823
823
  ...bodyLayoutStyle,
824
824
  // Body inset only. Paragraph spacing (spcBef/spcAft) is applied
@@ -848,7 +848,7 @@ function getTextLayoutStyle(element) {
848
848
 
849
849
  // src/viewer/utils/text-effects.tsx
850
850
  function buildTextBody3DSceneStyle2(textStyle, elementSize) {
851
- return chunkAQIXKTAT_js.buildTextBody3DSceneStyle(textStyle, elementSize);
851
+ return chunkYWAFJZ23_js.buildTextBody3DSceneStyle(textStyle, elementSize);
852
852
  }
853
853
 
854
854
  // src/viewer/utils/text-warp-css.tsx
@@ -1033,13 +1033,13 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1033
1033
  if (!subElementAnimStates || subElementAnimStates.size === 0) {
1034
1034
  return renderedSegments;
1035
1035
  }
1036
- const paraKey = `${elementId}${chunkAQIXKTAT_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1036
+ const paraKey = `${elementId}${chunkYWAFJZ23_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1037
1037
  const paraState = subElementAnimStates.get(paraKey);
1038
1038
  if (paraState) {
1039
1039
  const style = buildAnimStyle(paraState);
1040
1040
  return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
1041
1041
  }
1042
- const spec = chunkAQIXKTAT_js.buildTextBuildSpec(
1042
+ const spec = chunkYWAFJZ23_js.buildTextBuildSpec(
1043
1043
  elementId,
1044
1044
  paraIndex,
1045
1045
  paraRuns.map((run) => ({ text: run.text, style: run })),
@@ -1051,13 +1051,13 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1051
1051
  return spec.spans.map((span, index) => {
1052
1052
  const content = span.style && renderPiece ? renderPiece(span.style, span.text, String(index)) : span.text;
1053
1053
  if (!span.animId) {
1054
- return /* @__PURE__ */ jsxRuntime.jsx(React7__default.default.Fragment, { children: content }, `ws-${index}`);
1054
+ return /* @__PURE__ */ jsxRuntime.jsx(React8__default.default.Fragment, { children: content }, `ws-${index}`);
1055
1055
  }
1056
1056
  return /* @__PURE__ */ jsxRuntime.jsx(
1057
1057
  "span",
1058
1058
  {
1059
1059
  "data-anim-id": span.animId,
1060
- style: chunkAQIXKTAT_js.textBuildSpanStyle(span),
1060
+ style: chunkYWAFJZ23_js.textBuildSpanStyle(span),
1061
1061
  children: content
1062
1062
  },
1063
1063
  span.animId
@@ -1068,28 +1068,29 @@ function renderUnderlineWords(text, isUnderlineWords, wordDecoration, metric, ke
1068
1068
  if (!isUnderlineWords || !text) {
1069
1069
  return inner(text, keyPrefix, metric);
1070
1070
  }
1071
- const pieces = chunkAQIXKTAT_js.splitWordsForUnderline(text);
1071
+ const pieces = chunkYWAFJZ23_js.splitWordsForUnderline(text);
1072
1072
  if (pieces.length === 0) {
1073
1073
  return inner(text, keyPrefix, metric);
1074
1074
  }
1075
1075
  const gapMetric = metric ? {
1076
1076
  ...metric,
1077
- nestedStyle: metric.nestedStyle ? chunkAQIXKTAT_js.stripUnderlineDecoration(metric.nestedStyle) : void 0
1077
+ nestedStyle: metric.nestedStyle ? chunkYWAFJZ23_js.stripUnderlineDecoration(metric.nestedStyle) : void 0
1078
1078
  } : void 0;
1079
1079
  return pieces.map((piece, i) => {
1080
1080
  const key = `${keyPrefix}-u${i}`;
1081
+ const following = chunkYWAFJZ23_js.followingText(pieces, i, metric?.following);
1081
1082
  if (!piece.underline) {
1082
- return /* @__PURE__ */ jsxRuntime.jsx(React7__default.default.Fragment, { children: inner(piece.text, key, gapMetric) }, key);
1083
+ return /* @__PURE__ */ jsxRuntime.jsx(React8__default.default.Fragment, { children: inner(piece.text, key, gapMetric && { ...gapMetric, following }) }, key);
1083
1084
  }
1084
- return /* @__PURE__ */ jsxRuntime.jsx("span", { style: wordDecoration, children: inner(piece.text, key, metric) }, key);
1085
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { style: wordDecoration, children: inner(piece.text, key, metric && { ...metric, following }) }, key);
1085
1086
  });
1086
1087
  }
1087
1088
  function makeSegmentPieceRenderer(needsScriptFonts, scriptFonts, baseFontFamily, isUnderlineWords, wordDecoration, metric) {
1088
- return (text, key) => renderUnderlineWords(
1089
+ return (text, key, following) => renderUnderlineWords(
1089
1090
  text,
1090
1091
  isUnderlineWords,
1091
1092
  wordDecoration,
1092
- metric,
1093
+ metric && { ...metric, following },
1093
1094
  key,
1094
1095
  (subText, subKey, subMetric) => renderMetricPieces(
1095
1096
  subText,
@@ -1107,7 +1108,7 @@ function makeSegmentPieceRenderer(needsScriptFonts, scriptFonts, baseFontFamily,
1107
1108
  );
1108
1109
  }
1109
1110
  function renderTabbedLine(line, ctx, keyPrefix, renderPiece, nestedStyle, underlineWords = false) {
1110
- const [lineLayout] = chunkAQIXKTAT_js.buildRunTabLines(
1111
+ const [lineLayout] = chunkYWAFJZ23_js.buildRunTabLines(
1111
1112
  line,
1112
1113
  ctx,
1113
1114
  nestedStyle,
@@ -1116,17 +1117,51 @@ function renderTabbedLine(line, ctx, keyPrefix, renderPiece, nestedStyle, underl
1116
1117
  );
1117
1118
  return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block", whiteSpace: "nowrap" }, children: lineLayout.pieces.map((piece, i) => {
1118
1119
  const key = `${keyPrefix}-tab-${i}`;
1119
- return /* @__PURE__ */ jsxRuntime.jsxs(React7__default.default.Fragment, { children: [
1120
+ return /* @__PURE__ */ jsxRuntime.jsxs(React8__default.default.Fragment, { children: [
1120
1121
  piece.leaderStyle ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", style: piece.leaderStyle, children: piece.leaderText }) : null,
1121
1122
  piece.words ? piece.words.map((word, w) => /* @__PURE__ */ jsxRuntime.jsx("span", { style: word.style, children: renderPiece(word.text, `${key}-w${w}`) }, `${key}-w${w}`)) : /* @__PURE__ */ jsxRuntime.jsx("span", { style: piece.style, children: renderPiece(piece.text, key) })
1122
1123
  ] }, key);
1123
1124
  }) });
1124
1125
  }
1126
+ function renderEastAsianPieces(text, metric, keyPrefix, inner, baseStyle, following) {
1127
+ const parts = chunkYWAFJZ23_js.splitEastAsianBreaks(text, metric.eastAsian, metric.font, following);
1128
+ if (parts.length === 1 && !parts[0].style) {
1129
+ return inner(parts[0].text, keyPrefix);
1130
+ }
1131
+ return parts.map((part, i) => {
1132
+ const key = `${keyPrefix}-e${i}`;
1133
+ return part.style ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: { ...baseStyle ?? metric.nestedStyle, ...part.style }, children: inner(part.text, key) }, key) : /* @__PURE__ */ jsxRuntime.jsx(React8__default.default.Fragment, { children: inner(part.text, key) }, key);
1134
+ });
1135
+ }
1136
+ function renderMetricPieces(text, metric, keyPrefix, inner) {
1137
+ if (!metric || !text) {
1138
+ return inner(text, keyPrefix);
1139
+ }
1140
+ const pieces = chunkYWAFJZ23_js.splitRunForMetrics(text, metric.font);
1141
+ if (pieces.length <= 1) {
1142
+ return renderEastAsianPieces(text, metric, keyPrefix, inner, void 0, metric.following);
1143
+ }
1144
+ return pieces.map((piece, i) => {
1145
+ const key = `${keyPrefix}-w${i}`;
1146
+ const style = {
1147
+ ...metric.nestedStyle,
1148
+ letterSpacing: chunkYWAFJZ23_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1149
+ };
1150
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { style, children: renderEastAsianPieces(
1151
+ piece.text,
1152
+ metric,
1153
+ key,
1154
+ inner,
1155
+ style,
1156
+ chunkYWAFJZ23_js.followingText(pieces, i, metric.following)
1157
+ ) }, key);
1158
+ });
1159
+ }
1125
1160
  function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFamily, keyPrefix, nestedStyle) {
1126
1161
  if (!needsScriptFonts || !text) {
1127
1162
  return text;
1128
1163
  }
1129
- const pieces = chunkAQIXKTAT_js.splitRunByScriptFont(
1164
+ const pieces = chunkYWAFJZ23_js.splitRunByScriptFont(
1130
1165
  text,
1131
1166
  scriptFonts,
1132
1167
  baseFontFamily,
@@ -1136,29 +1171,9 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
1136
1171
  return text;
1137
1172
  }
1138
1173
  return pieces.map(
1139
- (piece, i) => piece.style ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: piece.style, children: piece.text }, `${keyPrefix}-r${i}`) : /* @__PURE__ */ jsxRuntime.jsx(React7__default.default.Fragment, { children: piece.text }, `${keyPrefix}-r${i}`)
1174
+ (piece, i) => piece.style ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: piece.style, children: piece.text }, `${keyPrefix}-r${i}`) : /* @__PURE__ */ jsxRuntime.jsx(React8__default.default.Fragment, { children: piece.text }, `${keyPrefix}-r${i}`)
1140
1175
  );
1141
1176
  }
1142
- function renderMetricPieces(text, metric, keyPrefix, inner) {
1143
- if (!metric || !text) {
1144
- return inner(text, keyPrefix);
1145
- }
1146
- const pieces = chunkAQIXKTAT_js.splitRunForMetrics(text, metric.font);
1147
- if (pieces.length <= 1) {
1148
- return inner(text, keyPrefix);
1149
- }
1150
- return pieces.map((piece, i) => /* @__PURE__ */ jsxRuntime.jsx(
1151
- "span",
1152
- {
1153
- style: {
1154
- ...metric.nestedStyle,
1155
- letterSpacing: chunkAQIXKTAT_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1156
- },
1157
- children: inner(piece.text, `${keyPrefix}-w${i}`)
1158
- },
1159
- `${keyPrefix}-w${i}`
1160
- ));
1161
- }
1162
1177
  function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsScriptFonts, scriptFonts, baseFontFamily, findHighlights, tabContext, metric, isUnderlineWords = false, wordDecoration) {
1163
1178
  const segHl = findHighlights?.get(segmentIndex);
1164
1179
  const renderLeaf = makeSegmentPieceRenderer(
@@ -1172,7 +1187,7 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
1172
1187
  if (!segHl || segHl.length === 0) {
1173
1188
  return lines.map((line, lineIndex) => {
1174
1189
  const lineKey = `${elementId}-seg-${segmentIndex}-line-${lineIndex}`;
1175
- return /* @__PURE__ */ jsxRuntime.jsxs(React7__default.default.Fragment, { children: [
1190
+ return /* @__PURE__ */ jsxRuntime.jsxs(React8__default.default.Fragment, { children: [
1176
1191
  tabContext && line.includes(" ") ? renderTabbedLine(
1177
1192
  line,
1178
1193
  tabContext,
@@ -1180,7 +1195,7 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
1180
1195
  renderLeaf,
1181
1196
  metric?.nestedStyle,
1182
1197
  isUnderlineWords
1183
- ) : renderLeaf(line, lineKey),
1198
+ ) : renderLeaf(line, lineKey, lineIndex < lines.length - 1 ? "\n" : metric?.following),
1184
1199
  lineIndex < lines.length - 1 ? /* @__PURE__ */ jsxRuntime.jsx("br", {}) : null
1185
1200
  ] }, lineKey);
1186
1201
  });
@@ -1221,15 +1236,15 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
1221
1236
  color: "inherit",
1222
1237
  borderRadius: 2
1223
1238
  },
1224
- children: renderLeaf(chunk.text, chunkKey)
1239
+ children: renderLeaf(chunk.text, chunkKey, chunkYWAFJZ23_js.followingText(chunks, ci, metric?.following))
1225
1240
  },
1226
1241
  chunkKey
1227
- ) : /* @__PURE__ */ jsxRuntime.jsx(React7__default.default.Fragment, { children: renderLeaf(chunk.text, chunkKey) }, chunkKey);
1242
+ ) : /* @__PURE__ */ jsxRuntime.jsx(React8__default.default.Fragment, { children: renderLeaf(chunk.text, chunkKey, chunkYWAFJZ23_js.followingText(chunks, ci, metric?.following)) }, chunkKey);
1228
1243
  });
1229
1244
  }
1230
1245
  function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber, fontSize) {
1231
- const mathml = chunkAQIXKTAT_js.convertOmmlToMathMl(equationXml);
1232
- const safeMathml = mathml ? chunkAQIXKTAT_js.sanitizeMathMl(mathml) : "";
1246
+ const mathml = chunkYWAFJZ23_js.convertOmmlToMathMl(equationXml);
1247
+ const safeMathml = mathml ? chunkYWAFJZ23_js.sanitizeMathMl(mathml) : "";
1233
1248
  const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
1234
1249
  "span",
1235
1250
  {
@@ -1239,7 +1254,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
1239
1254
  },
1240
1255
  dangerouslySetInnerHTML: { __html: safeMathml }
1241
1256
  }
1242
- ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-1 py-0.5 rounded text-xs bg-gray-200/20 text-gray-400 italic", children: chunkUIAU3NR2_js.translationsEn["pptx.textSegment.equationFallback"] });
1257
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-1 py-0.5 rounded text-xs bg-gray-200/20 text-gray-400 italic", children: chunkKPKO2ELT_js.translationsEn["pptx.textSegment.equationFallback"] });
1243
1258
  if (equationNumber) {
1244
1259
  return /* @__PURE__ */ jsxRuntime.jsxs(
1245
1260
  "span",
@@ -1369,7 +1384,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1369
1384
  const segmentStyle = segment?.style ?? {};
1370
1385
  const textValue = run.text;
1371
1386
  const lines = textValue.split("\n");
1372
- const resolvedSegmentColor = chunkAQIXKTAT_js.normalizeHexColor(
1387
+ const resolvedSegmentColor = chunkYWAFJZ23_js.normalizeHexColor(
1373
1388
  segmentStyle.color || element.textStyle?.color,
1374
1389
  run.hyperlink ? HYPERLINK_COLOR : fallbackColor
1375
1390
  );
@@ -1377,42 +1392,48 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1377
1392
  const baselineFraction = rawBaseline === 0 ? 0 : Math.abs(rawBaseline) >= 1e3 ? rawBaseline / 1e5 : rawBaseline / 100;
1378
1393
  const baselineFontScale = baselineFraction !== 0 ? BASELINE_FONT_SCALE : 1;
1379
1394
  const rawFontSize = segmentStyle.fontSize || element.textStyle?.fontSize || DEFAULT_TEXT_FONT_SIZE;
1380
- const baseFontSize = chunkAQIXKTAT_js.scaleFontSizeForAutoFit(
1395
+ const baseFontSize = chunkYWAFJZ23_js.scaleFontSizeForAutoFit(
1381
1396
  rawFontSize,
1382
- chunkAQIXKTAT_js.resolveAutoFitFontScale(element.textStyle)
1397
+ chunkYWAFJZ23_js.resolveAutoFitFontScale(element.textStyle)
1383
1398
  );
1384
1399
  const baselineShift = baselineFraction !== 0 ? `${baselineFraction * baseFontSize}px` : void 0;
1385
- const fontKerning = chunkAQIXKTAT_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
1400
+ const fontKerning = chunkYWAFJZ23_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
1386
1401
  const scriptFallbackWins = Boolean(
1387
1402
  segmentStyle.scriptFallbackFont && segmentStyle.fontFamilyIsCascadeDefault
1388
1403
  );
1389
1404
  const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
1390
- const baseFontFamily = scriptFallbackWins ? chunkAQIXKTAT_js.getSubstituteFontFamily(segmentStyle.scriptFallbackFont) : rawFontFamily ? chunkAQIXKTAT_js.getSubstituteFontFamily(
1405
+ const baseFontFamily = scriptFallbackWins ? chunkYWAFJZ23_js.getSubstituteFontFamily(segmentStyle.scriptFallbackFont) : rawFontFamily ? chunkYWAFJZ23_js.getSubstituteFontFamily(
1391
1406
  rawFontFamily,
1392
- chunkAQIXKTAT_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1407
+ chunkYWAFJZ23_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1393
1408
  ) : DEFAULT_FONT_FAMILY2;
1394
- const scriptFonts = chunkAQIXKTAT_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
1395
- const needsScriptFonts = chunkAQIXKTAT_js.hasDistinctScriptFonts(scriptFonts);
1396
- const authoredLetterSpacing = typeof segmentStyle.characterSpacing === "number" && segmentStyle.characterSpacing !== 0 ? segmentStyle.characterSpacing / 100 * (96 / 72) : 0;
1409
+ const scriptFonts = chunkYWAFJZ23_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
1410
+ const needsScriptFonts = chunkYWAFJZ23_js.hasDistinctScriptFonts(scriptFonts);
1411
+ const authoredLetterSpacing = chunkYWAFJZ23_js.authoredLetterSpacingPx(segmentStyle);
1397
1412
  const metricFont = {
1398
1413
  fontFamily: baseFontFamily,
1399
1414
  fontSizePx: baseFontSize * baselineFontScale,
1400
1415
  bold: Boolean(segmentStyle.bold),
1401
1416
  italic: Boolean(segmentStyle.italic)
1402
1417
  };
1403
- const nestedStyle = chunkAQIXKTAT_js.nestedTextDecorationStyle(run.style);
1404
- const metricContext = { font: metricFont, authoredPx: authoredLetterSpacing, nestedStyle };
1418
+ const nestedStyle = chunkYWAFJZ23_js.nestedTextDecorationStyle(run.style);
1419
+ const metricContext = {
1420
+ font: metricFont,
1421
+ authoredPx: authoredLetterSpacing,
1422
+ nestedStyle,
1423
+ eastAsian: ctx.eastAsianBreaks,
1424
+ following: ctx.eastAsianFollowing
1425
+ };
1405
1426
  const spanStyle = { ...run.style };
1406
1427
  spanStyle.color = resolvedSegmentColor;
1407
1428
  spanStyle.fontSize = baseFontSize * baselineFontScale;
1408
1429
  spanStyle.fontFamily = baseFontFamily;
1409
1430
  spanStyle.verticalAlign = baselineShift;
1410
1431
  spanStyle.fontKerning = fontKerning;
1411
- spanStyle.letterSpacing = chunkAQIXKTAT_js.pieceLetterSpacing(
1432
+ spanStyle.letterSpacing = chunkYWAFJZ23_js.pieceLetterSpacing(
1412
1433
  authoredLetterSpacing,
1413
- chunkAQIXKTAT_js.resolveMetricTrackingPx(textValue, metricFont)
1434
+ chunkYWAFJZ23_js.resolveMetricTrackingPx(textValue, metricFont)
1414
1435
  );
1415
- const hollow = chunkAQIXKTAT_js.hollowTextFillStyle(segmentStyle, {
1436
+ const hollow = chunkYWAFJZ23_js.hollowTextFillStyle(segmentStyle, {
1416
1437
  color: resolvedSegmentColor,
1417
1438
  textStroke: typeof spanStyle.WebkitTextStroke === "string" ? spanStyle.WebkitTextStroke : void 0
1418
1439
  });
@@ -1424,10 +1445,10 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1424
1445
  spanStyle.direction = runRtl ? "rtl" : "ltr";
1425
1446
  spanStyle.unicodeBidi = runRtl !== ctx.paragraphRtl ? "bidi-override" : "embed";
1426
1447
  }
1427
- const isUnderlineWords = chunkAQIXKTAT_js.splitsUnderlineIntoWords(segmentStyle);
1448
+ const isUnderlineWords = chunkYWAFJZ23_js.splitsUnderlineIntoWords(segmentStyle);
1428
1449
  const wordDecoration = isUnderlineWords ? nestedStyle ?? run.underlineWordPieces?.find((piece) => piece.style)?.style : void 0;
1429
1450
  if (isUnderlineWords) {
1430
- const stripped = chunkAQIXKTAT_js.stripUnderlineDecoration(spanStyle);
1451
+ const stripped = chunkYWAFJZ23_js.stripUnderlineDecoration(spanStyle);
1431
1452
  spanStyle.textDecoration = stripped.textDecoration;
1432
1453
  delete spanStyle.textDecorationStyle;
1433
1454
  delete spanStyle.textDecorationThickness;
@@ -1443,7 +1464,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1443
1464
  scriptFonts,
1444
1465
  baseFontFamily,
1445
1466
  findHighlights,
1446
- chunkAQIXKTAT_js.buildTabContext(
1467
+ chunkYWAFJZ23_js.buildTabContext(
1447
1468
  element.textStyle?.tabStops,
1448
1469
  element.textStyle?.defaultTabSize,
1449
1470
  baseFontSize,
@@ -1476,29 +1497,29 @@ function renderSeededListRun(seed, runs, segments, context) {
1476
1497
  const segment = sourceRun ? segments[seed.segmentIndex] : { text: seed.text, style: seed.style };
1477
1498
  const resolvedSegment = {
1478
1499
  ...segment,
1479
- style: chunkAQIXKTAT_js.withInlineListDecorationDefaults(segment.style, context.element.textStyle)
1500
+ style: chunkYWAFJZ23_js.withInlineListDecorationDefaults(segment.style, context.element.textStyle)
1480
1501
  };
1481
- const decorationCss = chunkAQIXKTAT_js.segmentStyleToCss(
1502
+ const decorationCss = chunkYWAFJZ23_js.segmentStyleToCss(
1482
1503
  resolvedSegment,
1483
- chunkAQIXKTAT_js.resolveAutoFitFontScale(context.element.textStyle)
1504
+ chunkYWAFJZ23_js.resolveAutoFitFontScale(context.element.textStyle)
1484
1505
  );
1485
- chunkAQIXKTAT_js.applyUnderlineVariant(decorationCss, resolvedSegment);
1486
- const run = sourceRun ? { ...sourceRun, style: { ...sourceRun.style, ...chunkAQIXKTAT_js.nestedTextDecorationStyle(decorationCss) } } : {
1506
+ chunkYWAFJZ23_js.applyUnderlineVariant(decorationCss, resolvedSegment);
1507
+ const run = sourceRun ? { ...sourceRun, style: { ...sourceRun.style, ...chunkYWAFJZ23_js.nestedTextDecorationStyle(decorationCss) } } : {
1487
1508
  text: seed.text,
1488
1509
  style: decorationCss,
1489
1510
  segmentIndex: seed.segmentIndex
1490
1511
  };
1491
1512
  const rendered = renderParagraphRun(run, resolvedSegment, context);
1492
- if (!React7__default.default.isValidElement(rendered)) {
1513
+ if (!React8__default.default.isValidElement(rendered)) {
1493
1514
  return rendered;
1494
1515
  }
1495
- return React7__default.default.cloneElement(rendered, {
1516
+ return React8__default.default.cloneElement(rendered, {
1496
1517
  "data-pptx-list-run": seed.token,
1497
1518
  ...seed.text === "" ? { children: /* @__PURE__ */ jsxRuntime.jsx("br", {}) } : {}
1498
1519
  });
1499
1520
  }
1500
1521
  function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick, placeholderPrompt, inlineListSeed) {
1501
- if (!chunkAQIXKTAT_js.hasTextProperties(element)) {
1522
+ if (!chunkYWAFJZ23_js.hasTextProperties(element)) {
1502
1523
  return emptyFallback || null;
1503
1524
  }
1504
1525
  const segments = segmentOverrides ?? element.textSegments;
@@ -1508,12 +1529,10 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
1508
1529
  }
1509
1530
  return element.text || emptyFallback || "";
1510
1531
  }
1511
- const paragraphs = chunkAQIXKTAT_js.buildParagraphs(
1512
- element,
1513
- fieldContext,
1514
- segmentOverrides,
1515
- inlineListSeed ? { preserveTrailingEmpty: true } : void 0
1516
- );
1532
+ const paragraphs = chunkYWAFJZ23_js.buildParagraphs(element, fieldContext, segmentOverrides, {
1533
+ preserveTrailingEmpty: inlineListSeed ? true : void 0,
1534
+ eastAsianRunPieces: false
1535
+ });
1517
1536
  const ctx = {
1518
1537
  element,
1519
1538
  fallbackColor,
@@ -1547,10 +1566,19 @@ function joinRunsBySegment(runs) {
1547
1566
  }
1548
1567
  function renderParagraph(para, paraIndex, paraCount, segments, ctx, subElementAnimStates, inlineListSeed) {
1549
1568
  const element = ctx.element;
1550
- const runCtx = { ...ctx, paragraphRtl: para.rtl };
1569
+ const runCtx = {
1570
+ ...ctx,
1571
+ paragraphRtl: para.rtl,
1572
+ eastAsianBreaks: para.eastAsianBreaks
1573
+ };
1551
1574
  const runs = joinRunsBySegment(para.runs);
1552
1575
  const listParagraph = inlineListSeed?.paragraphs[paraIndex];
1553
- const renderedRuns = listParagraph ? listParagraph.runs.map((run) => renderSeededListRun(run, runs, segments, runCtx)) : runs.map((run) => renderParagraphRun(run, segments[run.segmentIndex ?? -1], runCtx));
1576
+ const renderedRuns = listParagraph ? listParagraph.runs.map((run) => renderSeededListRun(run, runs, segments, runCtx)) : runs.map(
1577
+ (run, i) => renderParagraphRun(run, segments[run.segmentIndex ?? -1], {
1578
+ ...runCtx,
1579
+ eastAsianFollowing: para.eastAsianBreaks ? chunkYWAFJZ23_js.followingText(runs, i) : void 0
1580
+ })
1581
+ );
1554
1582
  const paraStyle = {
1555
1583
  // `text-align`, BiDi `direction` / `unicode-bidi` and the kinsoku
1556
1584
  // line-break rules, resolved by shared from this paragraph's own `a:pPr`.
@@ -1597,7 +1625,7 @@ function renderParagraph(para, paraIndex, paraCount, segments, ctx, subElementAn
1597
1625
  );
1598
1626
  const needsWrapper = Boolean(listParagraph) || Object.keys(paraStyle).length > 0 || marker !== null;
1599
1627
  if (!needsWrapper) {
1600
- return /* @__PURE__ */ jsxRuntime.jsxs(React7__default.default.Fragment, { children: [
1628
+ return /* @__PURE__ */ jsxRuntime.jsxs(React8__default.default.Fragment, { children: [
1601
1629
  wrappedContent,
1602
1630
  paraIndex < paraCount - 1 ? /* @__PURE__ */ jsxRuntime.jsx("br", {}) : null
1603
1631
  ] }, `${element.id}-para-${paraIndex}`);
@@ -1654,13 +1682,13 @@ function renderBulletMarker(para, paraIndex, elementId) {
1654
1682
  );
1655
1683
  }
1656
1684
  function getDuotoneColors(element) {
1657
- if (!chunkAQIXKTAT_js.isImageLikeElement(element)) {
1685
+ if (!chunkYWAFJZ23_js.isImageLikeElement(element)) {
1658
1686
  return void 0;
1659
1687
  }
1660
1688
  return element.imageEffects?.duotone;
1661
1689
  }
1662
1690
  function buildLineShadowCss(element) {
1663
- if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
1691
+ if (!chunkYWAFJZ23_js.hasShapeProperties(element)) {
1664
1692
  return void 0;
1665
1693
  }
1666
1694
  const ss = element.shapeStyle;
@@ -1671,13 +1699,13 @@ function buildLineShadowCss(element) {
1671
1699
  const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
1672
1700
  const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
1673
1701
  const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
1674
- return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkAQIXKTAT_js.colorWithOpacity(
1675
- chunkAQIXKTAT_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1702
+ return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkYWAFJZ23_js.colorWithOpacity(
1703
+ chunkYWAFJZ23_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1676
1704
  opacity
1677
1705
  )}`;
1678
1706
  }
1679
1707
  function buildLineGlowFilter(element) {
1680
- if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
1708
+ if (!chunkYWAFJZ23_js.hasShapeProperties(element)) {
1681
1709
  return void 0;
1682
1710
  }
1683
1711
  const ss = element.shapeStyle;
@@ -1686,22 +1714,22 @@ function buildLineGlowFilter(element) {
1686
1714
  }
1687
1715
  const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
1688
1716
  const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
1689
- const glowCol = chunkAQIXKTAT_js.colorWithOpacity(chunkAQIXKTAT_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1717
+ const glowCol = chunkYWAFJZ23_js.colorWithOpacity(chunkYWAFJZ23_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1690
1718
  return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
1691
1719
  }
1692
1720
  function getDagDuotoneFilterId(elementId) {
1693
1721
  return `dag-duotone-${elementId}`;
1694
1722
  }
1695
1723
  function hasDagDuotoneEffect(element) {
1696
- if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
1724
+ if (!chunkYWAFJZ23_js.hasShapeProperties(element)) {
1697
1725
  return false;
1698
1726
  }
1699
1727
  return Boolean(element.shapeStyle?.dagDuotone);
1700
1728
  }
1701
1729
  function renderDagDuotoneSvgFilter(elementId, color1, color2) {
1702
1730
  const filterId = getDagDuotoneFilterId(elementId);
1703
- const c1 = chunkAQIXKTAT_js.hexToRgbUnit(color1);
1704
- const c2 = chunkAQIXKTAT_js.hexToRgbUnit(color2);
1731
+ const c1 = chunkYWAFJZ23_js.hexToRgbUnit(color1);
1732
+ const c2 = chunkYWAFJZ23_js.hexToRgbUnit(color2);
1705
1733
  const grayscaleMatrix = [
1706
1734
  0.2126,
1707
1735
  0.7152,
@@ -1745,7 +1773,7 @@ function renderDagDuotoneSvgFilter(elementId, color1, color2) {
1745
1773
 
1746
1774
  // src/viewer/utils/shape-visual-3d.ts
1747
1775
  function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
1748
- return chunkAQIXKTAT_js.build3DExtrusionData(
1776
+ return chunkYWAFJZ23_js.build3DExtrusionData(
1749
1777
  shape3d,
1750
1778
  scene3d,
1751
1779
  fillColor,
@@ -1754,7 +1782,7 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
1754
1782
  );
1755
1783
  }
1756
1784
  function apply3dEffects2(base, scene3d, shape3d, fillColorFallback, elementSize, elementId) {
1757
- chunkAQIXKTAT_js.apply3dEffects(
1785
+ chunkYWAFJZ23_js.apply3dEffects(
1758
1786
  base,
1759
1787
  scene3d,
1760
1788
  shape3d,
@@ -1769,11 +1797,11 @@ function rendersCustomVectorPath(element) {
1769
1797
  return (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;
1770
1798
  }
1771
1799
  function rendersWedgeCalloutVector(element) {
1772
- return element.type === "shape" && chunkAQIXKTAT_js.isWedgeCalloutPresetShape(element.shapeType);
1800
+ return element.type === "shape" && chunkYWAFJZ23_js.isWedgeCalloutPresetShape(element.shapeType);
1773
1801
  }
1774
1802
  function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _strokeColor, animatesFill, animatesStroke, parentGroupFill) {
1775
1803
  if (element.type === "group") {
1776
- const fx2 = chunkAQIXKTAT_js.getComputedEffectStyle(element);
1804
+ const fx2 = chunkYWAFJZ23_js.getComputedEffectStyle(element);
1777
1805
  const groupStyle = {};
1778
1806
  if (fx2.filter) {
1779
1807
  groupStyle.filter = fx2.filter;
@@ -1783,13 +1811,13 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1783
1811
  }
1784
1812
  return groupStyle;
1785
1813
  }
1786
- if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
1814
+ if (!chunkYWAFJZ23_js.hasShapeProperties(element)) {
1787
1815
  return {};
1788
1816
  }
1789
1817
  const ss = element.shapeStyle;
1790
- const fill = animatesFill ? void 0 : chunkAQIXKTAT_js.getComputedFillStyle(element, parentGroupFill);
1791
- const fx = chunkAQIXKTAT_js.getComputedEffectStyle(element);
1792
- const stroke = chunkAQIXKTAT_js.getComputedStrokeStyle(element);
1818
+ const fill = animatesFill ? void 0 : chunkYWAFJZ23_js.getComputedFillStyle(element, parentGroupFill);
1819
+ const fx = chunkYWAFJZ23_js.getComputedEffectStyle(element);
1820
+ const stroke = chunkYWAFJZ23_js.getComputedStrokeStyle(element);
1793
1821
  const base = {
1794
1822
  // A gradient fill REPLACES the solid fill, it does not sit on top of it;
1795
1823
  // the whole precedence lives in shared's `getComputedFillStyle`.
@@ -1828,7 +1856,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1828
1856
  };
1829
1857
  Object.assign(
1830
1858
  base,
1831
- chunkAQIXKTAT_js.getAnimationColorBaseStyle(element, {
1859
+ chunkYWAFJZ23_js.getAnimationColorBaseStyle(element, {
1832
1860
  animatesFill,
1833
1861
  animatesStroke,
1834
1862
  parentGroupFill
@@ -1850,7 +1878,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1850
1878
  },
1851
1879
  element.id
1852
1880
  );
1853
- if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || chunkAQIXKTAT_js.isStrokeOnlyPresetElement(element)) {
1881
+ if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || chunkYWAFJZ23_js.isStrokeOnlyPresetElement(element)) {
1854
1882
  base.backgroundColor = "transparent";
1855
1883
  base.backgroundImage = void 0;
1856
1884
  base.borderWidth = void 0;
@@ -1864,7 +1892,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1864
1892
  if (rendersWedgeCalloutVector(element)) {
1865
1893
  return base;
1866
1894
  }
1867
- const geometry = chunkAQIXKTAT_js.resolveShapeGeometry(element);
1895
+ const geometry = chunkYWAFJZ23_js.resolveShapeGeometry(element);
1868
1896
  switch (geometry.kind) {
1869
1897
  case "bare":
1870
1898
  return { backgroundColor: "transparent", borderWidth: 0, borderStyle: "none" };
@@ -1888,7 +1916,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1888
1916
  }
1889
1917
  }
1890
1918
  function getConnectorPathGeometry2(element) {
1891
- return chunkAQIXKTAT_js.getConnectorPathGeometry(element);
1919
+ return chunkYWAFJZ23_js.getConnectorPathGeometry(element);
1892
1920
  }
1893
1921
  var ARROW_SIZE_SCALE = {
1894
1922
  sm: 0.6,
@@ -1957,11 +1985,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
1957
1985
  strokePaint,
1958
1986
  strokeWidth,
1959
1987
  dashArray,
1960
- lineCap: chunkAQIXKTAT_js.svgLineCap(shapeStyle?.lineCap),
1988
+ lineCap: chunkYWAFJZ23_js.svgLineCap(shapeStyle?.lineCap),
1961
1989
  lineJoin,
1962
1990
  miterLimit,
1963
- offsets: chunkAQIXKTAT_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
1964
- widths: chunkAQIXKTAT_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
1991
+ offsets: chunkYWAFJZ23_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
1992
+ widths: chunkYWAFJZ23_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
1965
1993
  };
1966
1994
  }
1967
1995
  function strokeStrands(d, keyBase, ctx) {
@@ -1984,12 +2012,12 @@ function strokeStrands(d, keyBase, ctx) {
1984
2012
  }
1985
2013
  function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false, gradient) {
1986
2014
  const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
1987
- const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkAQIXKTAT_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
2015
+ const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkYWAFJZ23_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
1988
2016
  const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
1989
- const gradientPaint = gradient ? chunkAQIXKTAT_js.svgGradientFillRef(gradient) : void 0;
2017
+ const gradientPaint = gradient ? chunkYWAFJZ23_js.svgGradientFillRef(gradient) : void 0;
1990
2018
  const nodes = [];
1991
2019
  if (subpaths && needsPerSubpath) {
1992
- const paints = chunkAQIXKTAT_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
2020
+ const paints = chunkYWAFJZ23_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
1993
2021
  paints.forEach((paint, idx) => {
1994
2022
  if (paint.fill !== "none") {
1995
2023
  const mode = subpaths[idx]?.fillMode;
@@ -2018,7 +2046,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2018
2046
  "path",
2019
2047
  {
2020
2048
  d: pathData,
2021
- fill: animatesFill ? "inherit" : gradientPaint ?? chunkAQIXKTAT_js.colorWithOpacity(fillColor, fillOpacity),
2049
+ fill: animatesFill ? "inherit" : gradientPaint ?? chunkYWAFJZ23_js.colorWithOpacity(fillColor, fillOpacity),
2022
2050
  stroke: "none",
2023
2051
  vectorEffect: "non-scaling-stroke"
2024
2052
  },
@@ -2044,14 +2072,14 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2044
2072
  );
2045
2073
  }
2046
2074
  function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
2047
- if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
2075
+ if (!chunkYWAFJZ23_js.hasShapeProperties(element)) {
2048
2076
  return null;
2049
2077
  }
2050
2078
  const normalizedType = (element.shapeType || "").toLowerCase();
2051
- const fillPaint = animatesFill ? "inherit" : chunkAQIXKTAT_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2052
- const strokePaint = animatesStroke ? "inherit" : chunkAQIXKTAT_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2053
- const dashType = chunkAQIXKTAT_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2054
- const dashArray = chunkAQIXKTAT_js.getSvgStrokeDasharray(
2079
+ const fillPaint = animatesFill ? "inherit" : chunkYWAFJZ23_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2080
+ const strokePaint = animatesStroke ? "inherit" : chunkYWAFJZ23_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2081
+ const dashType = chunkYWAFJZ23_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2082
+ const dashArray = chunkYWAFJZ23_js.getSvgStrokeDasharray(
2055
2083
  dashType,
2056
2084
  Math.max(strokeWidth, 1),
2057
2085
  element.shapeStyle?.customDashSegments
@@ -2132,13 +2160,13 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2132
2160
  // container's `background-image` is suppressed for custom geometry, so
2133
2161
  // without this the shape fell back to the parser's representative solid
2134
2162
  // and lost every fade (issue #132).
2135
- chunkAQIXKTAT_js.buildSvgGradientDef(element.shapeStyle, element.id)
2163
+ chunkYWAFJZ23_js.buildSvgGradientDef(element.shapeStyle, element.id)
2136
2164
  );
2137
2165
  }
2138
- if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !chunkAQIXKTAT_js.buildStrokeOutline(element)) {
2166
+ if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !chunkYWAFJZ23_js.buildStrokeOutline(element)) {
2139
2167
  const width = Math.max(element.width, 1);
2140
2168
  const height = Math.max(element.height, 1);
2141
- const geometry = chunkAQIXKTAT_js.getPresetShapeVectorGeometry(
2169
+ const geometry = chunkYWAFJZ23_js.getPresetShapeVectorGeometry(
2142
2170
  element.shapeType || "rect",
2143
2171
  width,
2144
2172
  height,
@@ -2166,18 +2194,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2166
2194
  );
2167
2195
  }
2168
2196
  }
2169
- if (element.type === "shape" && chunkAQIXKTAT_js.isWedgeCalloutPresetShape(element.shapeType)) {
2197
+ if (element.type === "shape" && chunkYWAFJZ23_js.isWedgeCalloutPresetShape(element.shapeType)) {
2170
2198
  const width = Math.max(element.width, 1);
2171
2199
  const height = Math.max(element.height, 1);
2172
- const geometry = chunkAQIXKTAT_js.getPresetShapeVectorGeometry(
2200
+ const geometry = chunkYWAFJZ23_js.getPresetShapeVectorGeometry(
2173
2201
  element.shapeType,
2174
2202
  width,
2175
2203
  height,
2176
2204
  element.shapeAdjustments
2177
2205
  );
2178
2206
  if (geometry) {
2179
- const gradient = chunkAQIXKTAT_js.buildSvgGradientDef(element.shapeStyle, element.id);
2180
- const gradientPaint = gradient ? chunkAQIXKTAT_js.svgGradientFillRef(gradient) : void 0;
2207
+ const gradient = chunkYWAFJZ23_js.buildSvgGradientDef(element.shapeStyle, element.id);
2208
+ const gradientPaint = gradient ? chunkYWAFJZ23_js.svgGradientFillRef(gradient) : void 0;
2181
2209
  return /* @__PURE__ */ jsxRuntime.jsxs(
2182
2210
  "svg",
2183
2211
  {
@@ -2210,18 +2238,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2210
2238
  );
2211
2239
  }
2212
2240
  }
2213
- if (chunkAQIXKTAT_js.isCalloutShape(normalizedType)) {
2241
+ if (chunkYWAFJZ23_js.isCalloutShape(normalizedType)) {
2214
2242
  const width = Math.max(element.width, 1);
2215
2243
  const height = Math.max(element.height, 1);
2216
- const geometry = chunkAQIXKTAT_js.getCalloutLeaderLineGeometry(
2244
+ const geometry = chunkYWAFJZ23_js.getCalloutLeaderLineGeometry(
2217
2245
  normalizedType,
2218
2246
  width,
2219
2247
  height,
2220
2248
  element.shapeAdjustments
2221
2249
  );
2222
2250
  if (geometry && geometry.points.length >= 2) {
2223
- const leaderPath = chunkAQIXKTAT_js.buildCalloutLeaderLineSvgPath(geometry);
2224
- const bounds = chunkAQIXKTAT_js.getCalloutViewBoxBounds(width, height, geometry);
2251
+ const leaderPath = chunkYWAFJZ23_js.buildCalloutLeaderLineSvgPath(geometry);
2252
+ const bounds = chunkYWAFJZ23_js.getCalloutViewBoxBounds(width, height, geometry);
2225
2253
  const lineStroke = Math.max(strokeWidth, 1);
2226
2254
  const offsetLeft = bounds.minX;
2227
2255
  const offsetTop = bounds.minY;
@@ -2284,10 +2312,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2284
2312
  const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
2285
2313
  const endArrowL = element.shapeStyle?.connectorEndArrowLength;
2286
2314
  const compoundLine = element.shapeStyle?.compoundLine;
2287
- const connectorLineCap = chunkAQIXKTAT_js.svgLineCap(element.shapeStyle?.lineCap);
2315
+ const connectorLineCap = chunkYWAFJZ23_js.svgLineCap(element.shapeStyle?.lineCap);
2288
2316
  const hitTargetWidth = Math.max(strokeWidth * 3, 12);
2289
- const offsets = chunkAQIXKTAT_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2290
- const widths = chunkAQIXKTAT_js.getCompoundLineWidths(compoundLine, strokeWidth);
2317
+ const offsets = chunkYWAFJZ23_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2318
+ const widths = chunkYWAFJZ23_js.getCompoundLineWidths(compoundLine, strokeWidth);
2291
2319
  return /* @__PURE__ */ jsxRuntime.jsxs(
2292
2320
  "svg",
2293
2321
  {
@@ -2354,15 +2382,15 @@ function parseGradientFillCss(gradFill) {
2354
2382
  }
2355
2383
  const rawStops = stops.map((gs) => {
2356
2384
  const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
2357
- const color = chunkAQIXKTAT_js.parseDrawingColor(gs) ?? "#888888";
2358
- const opacity = chunkAQIXKTAT_js.parseDrawingColorOpacity(gs);
2385
+ const color = chunkYWAFJZ23_js.parseDrawingColor(gs) ?? "#888888";
2386
+ const opacity = chunkYWAFJZ23_js.parseDrawingColorOpacity(gs);
2359
2387
  return { position: pos, color, opacity };
2360
2388
  }).sort((a, b) => a.position - b.position);
2361
- const stopStrings = rawStops.map((s) => `${chunkAQIXKTAT_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
2389
+ const stopStrings = rawStops.map((s) => `${chunkYWAFJZ23_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
2362
2390
  const lin = gradFill["a:lin"];
2363
2391
  if (lin) {
2364
2392
  const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
2365
- const angleDeg = Math.round(chunkAQIXKTAT_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2393
+ const angleDeg = Math.round(chunkYWAFJZ23_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2366
2394
  return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
2367
2395
  }
2368
2396
  const path = gradFill["a:path"];
@@ -2376,7 +2404,7 @@ function parseGradientFillCss(gradFill) {
2376
2404
  b: Number.parseInt(String(fillToRectXml["@_b"] || "0"), 10) / 1e5
2377
2405
  } : void 0;
2378
2406
  if (pathType === "rect") {
2379
- return chunkAQIXKTAT_js.buildRectPathGradient(rawStops, void 0, fillToRect);
2407
+ return chunkYWAFJZ23_js.buildRectPathGradient(rawStops, void 0, fillToRect);
2380
2408
  }
2381
2409
  let cx = 50;
2382
2410
  let cy = 50;
@@ -2398,8 +2426,8 @@ function parsePatternFillCss(pattFill) {
2398
2426
  if (!pattFill) {
2399
2427
  return void 0;
2400
2428
  }
2401
- const fgColor = chunkAQIXKTAT_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2402
- const bgColor = chunkAQIXKTAT_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2429
+ const fgColor = chunkYWAFJZ23_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2430
+ const bgColor = chunkYWAFJZ23_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2403
2431
  const preset = String(pattFill["@_prst"] || "ltDnDiag");
2404
2432
  switch (preset) {
2405
2433
  case "ltHorz":
@@ -2510,11 +2538,11 @@ function parseCellBorders(cellProperties) {
2510
2538
  const prstDash = ln["a:prstDash"];
2511
2539
  const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
2512
2540
  const cssBorderStyle = ooxmlDashToCss(dashVal);
2513
- const color = chunkAQIXKTAT_js.parseDrawingColor(ln["a:solidFill"]);
2541
+ const color = chunkYWAFJZ23_js.parseDrawingColor(ln["a:solidFill"]);
2514
2542
  if (color) {
2515
- const opacity = chunkAQIXKTAT_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2543
+ const opacity = chunkYWAFJZ23_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2516
2544
  const key = `${edge.prefix}`;
2517
- borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkAQIXKTAT_js.colorWithOpacity(color, opacity)}`;
2545
+ borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkYWAFJZ23_js.colorWithOpacity(color, opacity)}`;
2518
2546
  }
2519
2547
  }
2520
2548
  return borderStyle;
@@ -2527,7 +2555,7 @@ function parseCellTextEffects(runProps) {
2527
2555
  const textShadowParts = [];
2528
2556
  const outerShdw = effectLst["a:outerShdw"];
2529
2557
  if (outerShdw) {
2530
- const shdwColor = chunkAQIXKTAT_js.parseDrawingColor(outerShdw);
2558
+ const shdwColor = chunkYWAFJZ23_js.parseDrawingColor(outerShdw);
2531
2559
  if (shdwColor) {
2532
2560
  const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
2533
2561
  const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
@@ -2545,7 +2573,7 @@ function parseCellTextEffects(runProps) {
2545
2573
  }
2546
2574
  const glow = effectLst["a:glow"];
2547
2575
  if (glow) {
2548
- const glowColor = chunkAQIXKTAT_js.parseDrawingColor(glow);
2576
+ const glowColor = chunkYWAFJZ23_js.parseDrawingColor(glow);
2549
2577
  if (glowColor) {
2550
2578
  const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
2551
2579
  const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
@@ -2567,11 +2595,11 @@ function extractCellText(cellXml) {
2567
2595
  const textParts = [];
2568
2596
  const runs = ensureArrayValue(paragraph["a:r"]);
2569
2597
  runs.forEach((run) => {
2570
- textParts.push(chunkAQIXKTAT_js.xmlText(run["a:t"]) ?? "");
2598
+ textParts.push(chunkYWAFJZ23_js.xmlText(run["a:t"]) ?? "");
2571
2599
  });
2572
2600
  const fields = ensureArrayValue(paragraph["a:fld"]);
2573
2601
  fields.forEach((field) => {
2574
- textParts.push(chunkAQIXKTAT_js.xmlText(field["a:t"]) ?? "");
2602
+ textParts.push(chunkYWAFJZ23_js.xmlText(field["a:t"]) ?? "");
2575
2603
  });
2576
2604
  paragraphTexts.push(textParts.join(""));
2577
2605
  });
@@ -2615,10 +2643,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2615
2643
  if (runProps?.["@_u"] !== void 0) {
2616
2644
  cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
2617
2645
  }
2618
- const runColor = chunkAQIXKTAT_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkAQIXKTAT_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2646
+ const runColor = chunkYWAFJZ23_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkYWAFJZ23_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2619
2647
  if (runColor) {
2620
- const opacity = chunkAQIXKTAT_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2621
- cellStyle.color = chunkAQIXKTAT_js.colorWithOpacity(runColor, opacity);
2648
+ const opacity = chunkYWAFJZ23_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2649
+ cellStyle.color = chunkYWAFJZ23_js.colorWithOpacity(runColor, opacity);
2622
2650
  }
2623
2651
  const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
2624
2652
  if (fontFamily) {
@@ -2628,15 +2656,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2628
2656
  cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
2629
2657
  }
2630
2658
  const cellProperties = cellXml["a:tcPr"];
2631
- const cellFill = chunkAQIXKTAT_js.parseDrawingColor(
2659
+ const cellFill = chunkYWAFJZ23_js.parseDrawingColor(
2632
2660
  cellProperties?.["a:solidFill"],
2633
2661
  schemeColorOverrides
2634
2662
  );
2635
2663
  if (cellFill) {
2636
- const opacity = chunkAQIXKTAT_js.parseDrawingColorOpacity(
2664
+ const opacity = chunkYWAFJZ23_js.parseDrawingColorOpacity(
2637
2665
  cellProperties?.["a:solidFill"]
2638
2666
  );
2639
- cellStyle.backgroundColor = chunkAQIXKTAT_js.colorWithOpacity(cellFill, opacity);
2667
+ cellStyle.backgroundColor = chunkYWAFJZ23_js.colorWithOpacity(cellFill, opacity);
2640
2668
  } else {
2641
2669
  const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
2642
2670
  if (gradCss) {
@@ -2651,16 +2679,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2651
2679
  const edgeBorders = parseCellBorders(cellProperties);
2652
2680
  Object.assign(cellStyle, edgeBorders);
2653
2681
  if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
2654
- const borderColor = chunkAQIXKTAT_js.parseDrawingColor(
2682
+ const borderColor = chunkYWAFJZ23_js.parseDrawingColor(
2655
2683
  cellProperties?.["a:lnL"]?.["a:solidFill"],
2656
2684
  schemeColorOverrides
2657
- ) || chunkAQIXKTAT_js.parseDrawingColor(
2685
+ ) || chunkYWAFJZ23_js.parseDrawingColor(
2658
2686
  cellProperties?.["a:lnR"]?.["a:solidFill"],
2659
2687
  schemeColorOverrides
2660
- ) || chunkAQIXKTAT_js.parseDrawingColor(
2688
+ ) || chunkYWAFJZ23_js.parseDrawingColor(
2661
2689
  cellProperties?.["a:lnT"]?.["a:solidFill"],
2662
2690
  schemeColorOverrides
2663
- ) || chunkAQIXKTAT_js.parseDrawingColor(
2691
+ ) || chunkYWAFJZ23_js.parseDrawingColor(
2664
2692
  cellProperties?.["a:lnB"]?.["a:solidFill"],
2665
2693
  schemeColorOverrides
2666
2694
  );
@@ -2732,7 +2760,7 @@ function getTableCellBandStyle2(element, rowIndex, cellIndex, rowCount, columnCo
2732
2760
  if (element.type !== "table") {
2733
2761
  return void 0;
2734
2762
  }
2735
- return chunkAQIXKTAT_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2763
+ return chunkYWAFJZ23_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2736
2764
  tableStyleMap: styleCtx?.tableStyleMap,
2737
2765
  colorScheme: styleCtx?.theme?.colorScheme,
2738
2766
  fontScheme: styleCtx?.theme?.fontScheme
@@ -2812,7 +2840,7 @@ function renderTableCellContent(cell, fallbackText) {
2812
2840
  return /* @__PURE__ */ jsxRuntime.jsx(
2813
2841
  "span",
2814
2842
  {
2815
- style: { position: "relative", ...chunkAQIXKTAT_js.cellRunStyle(run) },
2843
+ style: { position: "relative", ...chunkYWAFJZ23_js.cellRunStyle(run) },
2816
2844
  children: run.text
2817
2845
  },
2818
2846
  `r-${index}`
@@ -2820,7 +2848,7 @@ function renderTableCellContent(cell, fallbackText) {
2820
2848
  });
2821
2849
  }
2822
2850
  function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
2823
- return chunkAQIXKTAT_js.getCellDiagonalBorders(style, tableData, pos, {
2851
+ return chunkYWAFJZ23_js.getCellDiagonalBorders(style, tableData, pos, {
2824
2852
  tableStyleMap: styleCtx?.tableStyleMap,
2825
2853
  colorScheme: styleCtx?.theme?.colorScheme,
2826
2854
  fontScheme: styleCtx?.theme?.fontScheme
@@ -2879,18 +2907,18 @@ function TableCellInput({
2879
2907
  onCommit,
2880
2908
  onCancel
2881
2909
  }) {
2882
- const inputRef = React7.useRef(null);
2883
- const committedRef = React7.useRef(false);
2884
- const onCommitRef = React7.useRef(onCommit);
2910
+ const inputRef = React8.useRef(null);
2911
+ const committedRef = React8.useRef(false);
2912
+ const onCommitRef = React8.useRef(onCommit);
2885
2913
  onCommitRef.current = onCommit;
2886
- React7.useEffect(() => {
2914
+ React8.useEffect(() => {
2887
2915
  const el = inputRef.current;
2888
2916
  if (el) {
2889
2917
  el.focus();
2890
2918
  el.select();
2891
2919
  }
2892
2920
  }, []);
2893
- React7.useEffect(() => {
2921
+ React8.useEffect(() => {
2894
2922
  const input = inputRef.current;
2895
2923
  return () => {
2896
2924
  if (!committedRef.current && input) {
@@ -2950,11 +2978,11 @@ function TableResizeOverlay({
2950
2978
  onResizeColumns,
2951
2979
  onResizeRow
2952
2980
  }) {
2953
- const containerRef = React7.useRef(null);
2954
- const [rowBounds, setRowBounds] = React7.useState([]);
2955
- const dragRef = React7.useRef(null);
2956
- const colBoundaries = React7.useMemo(() => chunkAQIXKTAT_js.computeColumnBoundaries(columnWidths), [columnWidths]);
2957
- const measureRows = React7.useCallback(() => {
2981
+ const containerRef = React8.useRef(null);
2982
+ const [rowBounds, setRowBounds] = React8.useState([]);
2983
+ const dragRef = React8.useRef(null);
2984
+ const colBoundaries = React8.useMemo(() => chunkYWAFJZ23_js.computeColumnBoundaries(columnWidths), [columnWidths]);
2985
+ const measureRows = React8.useCallback(() => {
2958
2986
  const container = containerRef.current;
2959
2987
  if (!container) {
2960
2988
  return;
@@ -2979,10 +3007,10 @@ function TableResizeOverlay({
2979
3007
  return bounds;
2980
3008
  });
2981
3009
  }, []);
2982
- React7.useLayoutEffect(() => {
3010
+ React8.useLayoutEffect(() => {
2983
3011
  measureRows();
2984
3012
  });
2985
- React7.useEffect(() => {
3013
+ React8.useEffect(() => {
2986
3014
  const handleMouseMove = (e) => {
2987
3015
  const drag = dragRef.current;
2988
3016
  if (!drag) {
@@ -3000,11 +3028,11 @@ function TableResizeOverlay({
3000
3028
  const rect = containerRef.current.getBoundingClientRect();
3001
3029
  if (e.clientX !== drag.startPos && drag.type === "col" && drag.initialWidths && onResizeColumns) {
3002
3030
  const deltaProp = (e.clientX - drag.startPos) / rect.width;
3003
- onResizeColumns(chunkAQIXKTAT_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
3031
+ onResizeColumns(chunkYWAFJZ23_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
3004
3032
  } else if (e.clientY !== drag.startPos && drag.type === "row" && onResizeRow) {
3005
3033
  const deltaY = e.clientY - drag.startPos;
3006
- const newHeight = chunkAQIXKTAT_js.computeResizedRowHeight(
3007
- drag.initialRowHeight ?? chunkAQIXKTAT_js.DEFAULT_ROW_HEIGHT,
3034
+ const newHeight = chunkYWAFJZ23_js.computeResizedRowHeight(
3035
+ drag.initialRowHeight ?? chunkYWAFJZ23_js.DEFAULT_ROW_HEIGHT,
3008
3036
  deltaY
3009
3037
  );
3010
3038
  onResizeRow(drag.index, newHeight);
@@ -3042,7 +3070,7 @@ function TableResizeOverlay({
3042
3070
  e.stopPropagation();
3043
3071
  const table = containerRef.current?.querySelector("table");
3044
3072
  const tr = table?.querySelectorAll("tbody > tr")[index];
3045
- const actualHeight = tr?.offsetHeight ?? chunkAQIXKTAT_js.DEFAULT_ROW_HEIGHT;
3073
+ const actualHeight = tr?.offsetHeight ?? chunkYWAFJZ23_js.DEFAULT_ROW_HEIGHT;
3046
3074
  document.body.style.cursor = "row-resize";
3047
3075
  document.body.style.userSelect = "none";
3048
3076
  dragRef.current = {
@@ -3082,14 +3110,14 @@ function renderTableFromTableData(element, textStyle, options) {
3082
3110
  const rowCount = tableData.rows.length;
3083
3111
  const columnCount = tableData.columnWidths.length;
3084
3112
  const selectedCell = options?.selectedCell || null;
3085
- const isEditable = Boolean(options?.editable) && chunkAQIXKTAT_js.canDrillDown(element);
3113
+ const isEditable = Boolean(options?.editable) && chunkYWAFJZ23_js.canDrillDown(element);
3086
3114
  const hasCellSelectionHandler = typeof options?.onSelectCell === "function";
3087
3115
  const sharedCtx = {
3088
3116
  tableStyleMap: options?.styleCtx?.tableStyleMap,
3089
3117
  colorScheme: options?.styleCtx?.theme?.colorScheme,
3090
3118
  fontScheme: options?.styleCtx?.theme?.fontScheme
3091
3119
  };
3092
- const cellCss = (cell, rowIndex, cellIndex) => chunkAQIXKTAT_js.tableCellCss(
3120
+ const cellCss = (cell, rowIndex, cellIndex) => chunkYWAFJZ23_js.tableCellCss(
3093
3121
  tableData,
3094
3122
  cell,
3095
3123
  { rowIndex, cellIndex, rowCount, columnCount },
@@ -3102,7 +3130,7 @@ function renderTableFromTableData(element, textStyle, options) {
3102
3130
  }
3103
3131
  const first = selectedCell.selectedCells[0];
3104
3132
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3105
- return chunkAQIXKTAT_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3133
+ return chunkYWAFJZ23_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3106
3134
  })();
3107
3135
  return /* @__PURE__ */ jsxRuntime.jsx(
3108
3136
  TableResizeOverlay,
@@ -3123,9 +3151,9 @@ function renderTableFromTableData(element, textStyle, options) {
3123
3151
  {
3124
3152
  className: "w-full h-full border-collapse table-fixed",
3125
3153
  style: {
3126
- fontFamily: chunkAQIXKTAT_js.DEFAULT_FONT_FAMILY,
3154
+ fontFamily: chunkYWAFJZ23_js.DEFAULT_FONT_FAMILY,
3127
3155
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3128
- ...chunkAQIXKTAT_js.tableContainerCss(tableData)
3156
+ ...chunkYWAFJZ23_js.tableContainerCss(tableData)
3129
3157
  },
3130
3158
  children: [
3131
3159
  tableData.columnWidths.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: tableData.columnWidths.map((w, ci) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3144,7 +3172,7 @@ function renderTableFromTableData(element, textStyle, options) {
3144
3172
  return null;
3145
3173
  }
3146
3174
  const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
3147
- const isInMultiSelection = chunkAQIXKTAT_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3175
+ const isInMultiSelection = chunkYWAFJZ23_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3148
3176
  const isCellEditing = isCellSelected && selectedCell?.isEditing;
3149
3177
  const diag = getCellDiagonalBorders2(
3150
3178
  cell.style,
@@ -3173,7 +3201,7 @@ function renderTableFromTableData(element, textStyle, options) {
3173
3201
  }
3174
3202
  event.stopPropagation();
3175
3203
  if (event.shiftKey && selectedCell) {
3176
- const rect = chunkAQIXKTAT_js.computeSelectionRect(
3204
+ const rect = chunkYWAFJZ23_js.computeSelectionRect(
3177
3205
  selectedCell.rowIndex,
3178
3206
  selectedCell.columnIndex,
3179
3207
  rowIndex,
@@ -3183,7 +3211,7 @@ function renderTableFromTableData(element, textStyle, options) {
3183
3211
  options?.onSelectCell?.({
3184
3212
  rowIndex: selectedCell.rowIndex,
3185
3213
  columnIndex: selectedCell.columnIndex,
3186
- selectedCells: chunkAQIXKTAT_js.rectToCells(rect)
3214
+ selectedCells: chunkYWAFJZ23_js.rectToCells(rect)
3187
3215
  });
3188
3216
  } else {
3189
3217
  options?.onSelectCell?.({
@@ -3244,10 +3272,10 @@ function renderTableElement(element, textStyle, options) {
3244
3272
  if (tableEl2.tableData && tableEl2.tableData.rows.length > 0) {
3245
3273
  return renderTableFromTableData(tableEl2, textStyle, options);
3246
3274
  }
3247
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkUIAU3NR2_js.translationsEn["pptx.table.title"] });
3275
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkKPKO2ELT_js.translationsEn["pptx.table.title"] });
3248
3276
  }
3249
3277
  const selectedCell = options?.selectedCell || null;
3250
- const isEditable = Boolean(options?.editable) && chunkAQIXKTAT_js.canDrillDown(element);
3278
+ const isEditable = Boolean(options?.editable) && chunkYWAFJZ23_js.canDrillDown(element);
3251
3279
  const hasCellSelectionHandler = typeof options?.onSelectCell === "function";
3252
3280
  const tableEl = element;
3253
3281
  const xmlSelectionRect = (() => {
@@ -3259,7 +3287,7 @@ function renderTableElement(element, textStyle, options) {
3259
3287
  }
3260
3288
  const first = selectedCell.selectedCells[0];
3261
3289
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3262
- return chunkAQIXKTAT_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3290
+ return chunkYWAFJZ23_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3263
3291
  })();
3264
3292
  const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
3265
3293
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -3281,9 +3309,9 @@ function renderTableElement(element, textStyle, options) {
3281
3309
  {
3282
3310
  className: "w-full h-full border-collapse table-fixed",
3283
3311
  style: {
3284
- fontFamily: chunkAQIXKTAT_js.DEFAULT_FONT_FAMILY,
3312
+ fontFamily: chunkYWAFJZ23_js.DEFAULT_FONT_FAMILY,
3285
3313
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3286
- ...chunkAQIXKTAT_js.tableContainerCss(tableEl.tableData)
3314
+ ...chunkYWAFJZ23_js.tableContainerCss(tableEl.tableData)
3287
3315
  },
3288
3316
  children: [
3289
3317
  parsedTable.columnPercentages.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((percentage, columnIndex) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3340,7 +3368,7 @@ function renderTableElement(element, textStyle, options) {
3340
3368
  color: textStyle.color,
3341
3369
  ...bandStyle,
3342
3370
  ...xmlCellStyle,
3343
- ...tdCellOverride ? chunkAQIXKTAT_js.cellStyleToCss(tdCellOverride) : void 0,
3371
+ ...tdCellOverride ? chunkYWAFJZ23_js.cellStyleToCss(tdCellOverride) : void 0,
3344
3372
  ...diag ? { position: "relative" } : void 0
3345
3373
  };
3346
3374
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3350,7 +3378,7 @@ function renderTableElement(element, textStyle, options) {
3350
3378
  "border px-1 py-0.5 align-top",
3351
3379
  isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
3352
3380
  selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
3353
- chunkAQIXKTAT_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3381
+ chunkYWAFJZ23_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3354
3382
  ),
3355
3383
  colSpan,
3356
3384
  rowSpan: rSpan,
@@ -3361,7 +3389,7 @@ function renderTableElement(element, textStyle, options) {
3361
3389
  }
3362
3390
  event.stopPropagation();
3363
3391
  if (event.shiftKey && selectedCell && tableEl.tableData) {
3364
- const rect = chunkAQIXKTAT_js.computeSelectionRect(
3392
+ const rect = chunkYWAFJZ23_js.computeSelectionRect(
3365
3393
  selectedCell.rowIndex,
3366
3394
  selectedCell.columnIndex,
3367
3395
  rowIndex,
@@ -3371,7 +3399,7 @@ function renderTableElement(element, textStyle, options) {
3371
3399
  options?.onSelectCell?.({
3372
3400
  rowIndex: selectedCell.rowIndex,
3373
3401
  columnIndex: selectedCell.columnIndex,
3374
- selectedCells: chunkAQIXKTAT_js.rectToCells(rect)
3402
+ selectedCells: chunkYWAFJZ23_js.rectToCells(rect)
3375
3403
  });
3376
3404
  } else {
3377
3405
  options?.onSelectCell?.({
@@ -3433,23 +3461,23 @@ function renderGradientStops(stops) {
3433
3461
  return stops.map((stop, i) => /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: stop.offset, stopColor: stop.color, stopOpacity: stop.opacity }, i));
3434
3462
  }
3435
3463
  function partAttrs(part) {
3436
- return part ? chunkAQIXKTAT_js.chartPartToAttrs(part) : void 0;
3464
+ return part ? chunkYWAFJZ23_js.chartPartToAttrs(part) : void 0;
3437
3465
  }
3438
3466
  function resolveReactPalette(chartData) {
3439
3467
  if (chartData.colorPalette && chartData.colorPalette.length > 0) {
3440
3468
  return chartData.colorPalette;
3441
3469
  }
3442
- return [...chunkAQIXKTAT_js.getChartStylePalette(chartData.style?.styleId)];
3470
+ return [...chunkYWAFJZ23_js.getChartStylePalette(chartData.style?.styleId)];
3443
3471
  }
3444
3472
  function buildReactChartViewModel(element) {
3445
3473
  if (element.type !== "chart" || !element.chartData) {
3446
- return chunkAQIXKTAT_js.buildChartViewModel(element);
3474
+ return chunkYWAFJZ23_js.buildChartViewModel(element);
3447
3475
  }
3448
3476
  const palette = resolveReactPalette(element.chartData), themedElement = {
3449
3477
  ...element,
3450
3478
  chartData: { ...element.chartData, colorPalette: palette }
3451
3479
  };
3452
- return chunkAQIXKTAT_js.buildChartViewModel(themedElement);
3480
+ return chunkYWAFJZ23_js.buildChartViewModel(themedElement);
3453
3481
  }
3454
3482
  function renderPrimitive(prim, key) {
3455
3483
  switch (prim.kind) {
@@ -3601,7 +3629,7 @@ function renderText(t, key) {
3601
3629
  );
3602
3630
  }
3603
3631
  function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3604
- const legendItems = chunkAQIXKTAT_js.computeChartLegendLayout(vm);
3632
+ const legendItems = chunkYWAFJZ23_js.computeChartLegendLayout(vm);
3605
3633
  return /* @__PURE__ */ jsxRuntime.jsxs(
3606
3634
  "svg",
3607
3635
  {
@@ -3764,17 +3792,17 @@ function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3764
3792
  }
3765
3793
  function renderChartElement(element) {
3766
3794
  if (element.type !== "chart") {
3767
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkUIAU3NR2_js.translationsEn["pptx.chart.heading"] });
3795
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkKPKO2ELT_js.translationsEn["pptx.chart.heading"] });
3768
3796
  }
3769
3797
  const chartData = element.chartData;
3770
3798
  if (!chartData || chartData.series.length === 0) {
3771
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkUIAU3NR2_js.translationsEn["pptx.chart.heading"] });
3799
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkKPKO2ELT_js.translationsEn["pptx.chart.heading"] });
3772
3800
  }
3773
- const kind = chunkAQIXKTAT_js.resolveChartKind(chartData.chartType ?? "bar");
3801
+ const kind = chunkYWAFJZ23_js.resolveChartKind(chartData.chartType ?? "bar");
3774
3802
  return renderChartViewModel(
3775
3803
  element.id,
3776
3804
  buildReactChartViewModel(element),
3777
- chunkAQIXKTAT_js.chartPreserveAspectRatio(kind)
3805
+ chunkYWAFJZ23_js.chartPreserveAspectRatio(kind)
3778
3806
  );
3779
3807
  }
3780
3808
 
@@ -3794,14 +3822,14 @@ function buildNotesPdf(pages) {
3794
3822
  notes: page.notes,
3795
3823
  slideNumber: page.slideNumber
3796
3824
  }));
3797
- const bytes = chunkAQIXKTAT_js.buildNotesPdfBytes(images, meta);
3825
+ const bytes = chunkYWAFJZ23_js.buildNotesPdfBytes(images, meta);
3798
3826
  const blob = new Blob([bytes], { type: "application/pdf" });
3799
3827
  return URL.createObjectURL(blob);
3800
3828
  }
3801
3829
 
3802
3830
  // src/viewer/utils/pdf-builder-slides.ts
3803
3831
  function buildPdfFromTiledImageData(pages) {
3804
- const bytes = chunkAQIXKTAT_js.buildTiledSlidesPdfBytes(pages);
3832
+ const bytes = chunkYWAFJZ23_js.buildTiledSlidesPdfBytes(pages);
3805
3833
  const blob = new Blob([bytes], { type: "application/pdf" });
3806
3834
  return URL.createObjectURL(blob);
3807
3835
  }
@@ -3810,7 +3838,11 @@ function buildPdfFromTiledImageData(pages) {
3810
3838
  var activePreview = null;
3811
3839
  function startPreviewAnimation(elementId, preset, options) {
3812
3840
  stopPreviewAnimation();
3813
- const descriptor = chunkAQIXKTAT_js.buildPreviewAnimation(preset, options);
3841
+ const domEl = document.querySelector(`[data-element-id="${elementId}"]`);
3842
+ const descriptor = chunkYWAFJZ23_js.buildPreviewAnimation(preset, {
3843
+ ...options,
3844
+ geometry: domEl ? chunkYWAFJZ23_js.measurePreviewGeometry(domEl) : void 0
3845
+ });
3814
3846
  if (!descriptor) {
3815
3847
  return;
3816
3848
  }
@@ -3823,7 +3855,7 @@ function startMotionPathPreview(elementId, path, options) {
3823
3855
  return;
3824
3856
  }
3825
3857
  const stage = domEl.offsetParent;
3826
- const descriptor = chunkAQIXKTAT_js.buildMotionPathPreview({
3858
+ const descriptor = chunkYWAFJZ23_js.buildMotionPathPreview({
3827
3859
  path,
3828
3860
  slideWidth: stage?.offsetWidth || DEFAULT_PREVIEW_SLIDE_WIDTH,
3829
3861
  slideHeight: stage?.offsetHeight || DEFAULT_PREVIEW_SLIDE_HEIGHT,