pptx-react-viewer 4.2.0 → 4.4.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 (136) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/dist/{AiChatPanel-SEIRQ3XP.mjs → AiChatPanel-QJHUDIWT.mjs} +4 -4
  3. package/dist/AiChatPanel-QJHUDIWT.mjs.br +0 -0
  4. package/dist/AiChatPanel-QJHUDIWT.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-VVTLQXQ5.js → AiChatPanel-UFMSTNCB.js} +28 -28
  6. package/dist/AiChatPanel-UFMSTNCB.js.br +0 -0
  7. package/dist/AiChatPanel-UFMSTNCB.js.gz +0 -0
  8. package/dist/{Model3DScene-DCTVSK2F.mjs → Model3DScene-3GOC5HUS.mjs} +1 -1
  9. package/dist/Model3DScene-3GOC5HUS.mjs.br +0 -0
  10. package/dist/Model3DScene-3GOC5HUS.mjs.gz +0 -0
  11. package/dist/{Model3DScene-SCWQXMEA.js → Model3DScene-KXNJBAQD.js} +2 -2
  12. package/dist/Model3DScene-KXNJBAQD.js.br +0 -0
  13. package/dist/Model3DScene-KXNJBAQD.js.gz +0 -0
  14. package/dist/{chunk-S65QSO6T.js → chunk-7WWINBGF.js} +17172 -8075
  15. package/dist/chunk-7WWINBGF.js.br +0 -0
  16. package/dist/chunk-7WWINBGF.js.gz +0 -0
  17. package/dist/{chunk-KTSDPBQZ.js → chunk-AI6K5EAE.js} +1270 -1079
  18. package/dist/chunk-AI6K5EAE.js.br +0 -0
  19. package/dist/chunk-AI6K5EAE.js.gz +0 -0
  20. package/dist/{chunk-3WYNGYB6.js → chunk-CSY422LU.js} +5 -5
  21. package/dist/chunk-CSY422LU.js.br +0 -0
  22. package/dist/chunk-CSY422LU.js.gz +0 -0
  23. package/dist/{chunk-VPJOJJ36.mjs → chunk-D3TZOCQP.mjs} +17139 -8067
  24. package/dist/chunk-D3TZOCQP.mjs.br +0 -0
  25. package/dist/chunk-D3TZOCQP.mjs.gz +0 -0
  26. package/dist/{chunk-NXGUR2DO.js → chunk-I4D6JQOI.js} +27 -2
  27. package/dist/chunk-I4D6JQOI.js.br +0 -0
  28. package/dist/chunk-I4D6JQOI.js.gz +0 -0
  29. package/dist/{chunk-PC7H3C5W.mjs → chunk-JQXN6PO7.mjs} +27 -2
  30. package/dist/chunk-JQXN6PO7.mjs.br +0 -0
  31. package/dist/chunk-JQXN6PO7.mjs.gz +0 -0
  32. package/dist/{chunk-ZYIJODUR.mjs → chunk-LUHUYBGW.mjs} +211 -20
  33. package/dist/chunk-LUHUYBGW.mjs.br +0 -0
  34. package/dist/chunk-LUHUYBGW.mjs.gz +0 -0
  35. package/dist/{chunk-5MRNT4V6.js → chunk-OWTHF5N4.js} +209 -187
  36. package/dist/chunk-OWTHF5N4.js.br +0 -0
  37. package/dist/chunk-OWTHF5N4.js.gz +0 -0
  38. package/dist/{chunk-4GTDG2FH.mjs → chunk-WCHKDZP6.mjs} +660 -197
  39. package/dist/chunk-WCHKDZP6.mjs.br +0 -0
  40. package/dist/chunk-WCHKDZP6.mjs.gz +0 -0
  41. package/dist/{chunk-B5YZABYX.mjs → chunk-WNFHFFYE.mjs} +32 -10
  42. package/dist/chunk-WNFHFFYE.mjs.br +0 -0
  43. package/dist/chunk-WNFHFFYE.mjs.gz +0 -0
  44. package/dist/{chunk-L4XBWL7J.mjs → chunk-XMKLY2SE.mjs} +1 -1
  45. package/dist/chunk-XMKLY2SE.mjs.br +0 -0
  46. package/dist/chunk-XMKLY2SE.mjs.gz +0 -0
  47. package/dist/{chunk-P2SBIMYF.js → chunk-YJKR7Z3X.js} +2161 -1698
  48. package/dist/chunk-YJKR7Z3X.js.br +0 -0
  49. package/dist/chunk-YJKR7Z3X.js.gz +0 -0
  50. package/dist/i18n/de.cjs +25 -2
  51. package/dist/i18n/de.cjs.br +0 -0
  52. package/dist/i18n/de.cjs.gz +0 -0
  53. package/dist/i18n/de.mjs +25 -2
  54. package/dist/i18n/de.mjs.br +0 -0
  55. package/dist/i18n/de.mjs.gz +0 -0
  56. package/dist/i18n/es.cjs +25 -2
  57. package/dist/i18n/es.cjs.br +0 -0
  58. package/dist/i18n/es.cjs.gz +0 -0
  59. package/dist/i18n/es.mjs +25 -2
  60. package/dist/i18n/es.mjs.br +0 -0
  61. package/dist/i18n/es.mjs.gz +0 -0
  62. package/dist/i18n/fr.cjs +25 -2
  63. package/dist/i18n/fr.cjs.br +0 -0
  64. package/dist/i18n/fr.cjs.gz +0 -0
  65. package/dist/i18n/fr.mjs +25 -2
  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 +25 -2
  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 +25 -2
  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 +311 -6
  81. package/dist/index.js +49 -49
  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 +461 -42
  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 +274 -4
  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 +1 -1
  105. package/dist/AiChatPanel-SEIRQ3XP.mjs.br +0 -0
  106. package/dist/AiChatPanel-SEIRQ3XP.mjs.gz +0 -0
  107. package/dist/AiChatPanel-VVTLQXQ5.js.br +0 -0
  108. package/dist/AiChatPanel-VVTLQXQ5.js.gz +0 -0
  109. package/dist/Model3DScene-DCTVSK2F.mjs.br +0 -0
  110. package/dist/Model3DScene-DCTVSK2F.mjs.gz +0 -0
  111. package/dist/Model3DScene-SCWQXMEA.js.br +0 -0
  112. package/dist/Model3DScene-SCWQXMEA.js.gz +0 -0
  113. package/dist/chunk-3WYNGYB6.js.br +0 -0
  114. package/dist/chunk-3WYNGYB6.js.gz +0 -0
  115. package/dist/chunk-4GTDG2FH.mjs.br +0 -0
  116. package/dist/chunk-4GTDG2FH.mjs.gz +0 -0
  117. package/dist/chunk-5MRNT4V6.js.br +0 -0
  118. package/dist/chunk-5MRNT4V6.js.gz +0 -0
  119. package/dist/chunk-B5YZABYX.mjs.br +0 -0
  120. package/dist/chunk-B5YZABYX.mjs.gz +0 -0
  121. package/dist/chunk-KTSDPBQZ.js.br +0 -0
  122. package/dist/chunk-KTSDPBQZ.js.gz +0 -0
  123. package/dist/chunk-L4XBWL7J.mjs.br +0 -0
  124. package/dist/chunk-L4XBWL7J.mjs.gz +0 -0
  125. package/dist/chunk-NXGUR2DO.js.br +0 -0
  126. package/dist/chunk-NXGUR2DO.js.gz +0 -0
  127. package/dist/chunk-P2SBIMYF.js.br +0 -0
  128. package/dist/chunk-P2SBIMYF.js.gz +0 -0
  129. package/dist/chunk-PC7H3C5W.mjs.br +0 -0
  130. package/dist/chunk-PC7H3C5W.mjs.gz +0 -0
  131. package/dist/chunk-S65QSO6T.js.br +0 -0
  132. package/dist/chunk-S65QSO6T.js.gz +0 -0
  133. package/dist/chunk-VPJOJJ36.mjs.br +0 -0
  134. package/dist/chunk-VPJOJJ36.mjs.gz +0 -0
  135. package/dist/chunk-ZYIJODUR.mjs.br +0 -0
  136. package/dist/chunk-ZYIJODUR.mjs.gz +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkS65QSO6T_js = require('./chunk-S65QSO6T.js');
4
- var chunkNXGUR2DO_js = require('./chunk-NXGUR2DO.js');
3
+ var chunk7WWINBGF_js = require('./chunk-7WWINBGF.js');
4
+ var chunkI4D6JQOI_js = require('./chunk-I4D6JQOI.js');
5
5
  var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
7
  var React7 = require('react');
@@ -15,7 +15,7 @@ var React7__default = /*#__PURE__*/_interopDefault(React7);
15
15
 
16
16
  // src/viewer/utils/animation-effects.ts
17
17
  function getAnimationInitialStyle2(preset, nativeAnimation) {
18
- return chunkS65QSO6T_js.getAnimationInitialStyle(preset, nativeAnimation);
18
+ return chunk7WWINBGF_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 chunkS65QSO6T_js.cloneHistorySnapshot(snapshot);
26
+ return chunk7WWINBGF_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 = chunkS65QSO6T_js.VIEWER_SHORTCUT_REFERENCE;
64
+ var SHORTCUT_REFERENCE_ITEMS = chunk7WWINBGF_js.VIEWER_SHORTCUT_REFERENCE;
65
65
 
66
66
  // src/viewer/constants/transitions-animations.ts
67
67
  var ANIMATION_PRESET_OPTIONS = [
@@ -89,7 +89,7 @@ var GLYPH_COMPONENTS = {
89
89
  plus: lu.LuPlus,
90
90
  triangle: lu.LuTriangle
91
91
  };
92
- var SHAPE_PRESETS = chunkS65QSO6T_js.SHAPE_PRESET_DEFS.map(
92
+ var SHAPE_PRESETS = chunk7WWINBGF_js.SHAPE_PRESET_DEFS.map(
93
93
  (def) => ({
94
94
  type: def.type,
95
95
  label: def.label,
@@ -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 = chunkS65QSO6T_js.STROKE_DASH_OPTIONS;
117
+ var STROKE_DASH_OPTIONS2 = chunk7WWINBGF_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 (!chunkS65QSO6T_js.hasShapeProperties(element)) {
226
+ if (!chunk7WWINBGF_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 (!chunkS65QSO6T_js.hasShapeProperties(element)) {
235
+ if (!chunk7WWINBGF_js.hasShapeProperties(element)) {
236
236
  return void 0;
237
237
  }
238
- const geometry = chunkS65QSO6T_js.resolveShapeGeometry(element);
238
+ const geometry = chunk7WWINBGF_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 = chunkS65QSO6T_js.getImageFitStyle(element);
246
- const counterTransform = chunkS65QSO6T_js.getImageFillCounterTransform(element, Boolean(fit.transform));
245
+ const fit = chunk7WWINBGF_js.getImageFitStyle(element);
246
+ const counterTransform = chunk7WWINBGF_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 = chunkS65QSO6T_js.hasShapeProperties(element) ? chunkS65QSO6T_js.getComputedFillStyle(element) : void 0;
265
+ const fill = chunk7WWINBGF_js.hasShapeProperties(element) ? chunk7WWINBGF_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 (!chunkS65QSO6T_js.isImageLikeElement(element)) {
278
+ if (!chunk7WWINBGF_js.isImageLikeElement(element)) {
279
279
  return void 0;
280
280
  }
281
- return chunkS65QSO6T_js.getCropShapeClipPath(element.cropShape, element.width, element.height);
281
+ return chunk7WWINBGF_js.getCropShapeClipPath(element.cropShape, element.width, element.height);
282
282
  }
283
- function getImageTilingStyle2(element) {
284
- return chunkS65QSO6T_js.getImageTilingStyle(element);
283
+ function getImageTilingStyle2(element, nativeSize) {
284
+ return chunk7WWINBGF_js.getImageTilingStyle(element, nativeSize);
285
285
  }
286
286
 
287
287
  // src/viewer/utils/geometry-image.ts
@@ -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" } : chunkS65QSO6T_js.getImageFitStyle(element),
416
+ style: isFullScreen ? { objectFit: "cover" } : chunk7WWINBGF_js.getImageFitStyle(element),
417
417
  controls: showTransport,
418
418
  preload: "metadata",
419
419
  playsInline: true,
@@ -470,7 +470,7 @@ function PresentationMediaController({
470
470
  const [isMediaPlaying, setIsMediaPlaying] = React7.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 } = chunkS65QSO6T_js.mediaPlaybackAttributes({
473
+ const { volume: playbackVolume, playbackRate } = chunk7WWINBGF_js.mediaPlaybackAttributes({
474
474
  loop: element.loop,
475
475
  volume: element.volume,
476
476
  playbackSpeed: element.playbackSpeed
@@ -518,7 +518,7 @@ function PresentationMediaController({
518
518
  if (!el || !isPresentationMode) {
519
519
  return;
520
520
  }
521
- return chunkS65QSO6T_js.scheduleMediaTrimAndFade(el, {
521
+ return chunk7WWINBGF_js.scheduleMediaTrimAndFade(el, {
522
522
  trimStartMs: element.trimStartMs,
523
523
  trimEndMs: element.trimEndMs,
524
524
  fadeInDuration: element.fadeInDuration,
@@ -539,7 +539,7 @@ function PresentationMediaController({
539
539
  }
540
540
  if (element.playAcrossSlides && element.mediaType === "audio") {
541
541
  const dataUrl = element.mediaData ?? resolvedDataUrl;
542
- if (chunkS65QSO6T_js.registerCrossSlideAudio(element, dataUrl)) {
542
+ if (chunk7WWINBGF_js.registerCrossSlideAudio(element, dataUrl)) {
543
543
  return;
544
544
  }
545
545
  }
@@ -571,7 +571,11 @@ function PresentationMediaController({
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
- isFullScreen && isPresentationMode && isMediaPlaying && /* @__PURE__ */ jsxRuntime.jsx(
574
+ chunk7WWINBGF_js.shouldShowMediaFullscreenStopButton({
575
+ fullScreen: isFullScreen,
576
+ presenting: isPresentationMode,
577
+ playing: isMediaPlaying
578
+ }) && /* @__PURE__ */ jsxRuntime.jsx(
575
579
  "button",
576
580
  {
577
581
  type: "button",
@@ -584,7 +588,7 @@ function PresentationMediaController({
584
588
  ] });
585
589
  }
586
590
  function label(key) {
587
- return key === void 0 ? void 0 : chunkNXGUR2DO_js.translationsEn[key];
591
+ return key === void 0 ? void 0 : chunkI4D6JQOI_js.translationsEn[key];
588
592
  }
589
593
  function FallbackIcon({
590
594
  paths,
@@ -620,17 +624,17 @@ function Badge({
620
624
  "div",
621
625
  {
622
626
  className: `absolute inset-0 flex flex-col items-center justify-center ${isMissing ? "gap-1" : ""}`,
623
- ...{ [chunkS65QSO6T_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
627
+ ...{ [chunk7WWINBGF_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
624
628
  children: [
625
629
  /* @__PURE__ */ jsxRuntime.jsx(
626
630
  FallbackIcon,
627
631
  {
628
- paths: chunkS65QSO6T_js.mediaFallbackIcon(visual, element.mediaType),
632
+ paths: chunk7WWINBGF_js.mediaFallbackIcon(visual, element.mediaType),
629
633
  size: isMissing ? 32 : 48,
630
634
  className: isMissing ? "text-white/60" : "text-white/80 drop-shadow-md"
631
635
  }
632
636
  ),
633
- isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkS65QSO6T_js.mediaFallbackLabelKey(visual, element.mediaType)) })
637
+ isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunk7WWINBGF_js.mediaFallbackLabelKey(visual, element.mediaType)) })
634
638
  ]
635
639
  }
636
640
  );
@@ -647,17 +651,17 @@ function Placeholder({
647
651
  "div",
648
652
  {
649
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"}`,
650
- ...{ [chunkS65QSO6T_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
654
+ ...{ [chunk7WWINBGF_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
651
655
  children: [
652
656
  /* @__PURE__ */ jsxRuntime.jsx(
653
657
  FallbackIcon,
654
658
  {
655
- paths: chunkS65QSO6T_js.mediaFallbackIcon(visual, element.mediaType),
659
+ paths: chunk7WWINBGF_js.mediaFallbackIcon(visual, element.mediaType),
656
660
  size: isMissing ? 36 : element.mediaType === "audio" ? 24 : 32,
657
661
  className: isMissing ? "text-white/50" : "text-white/70"
658
662
  }
659
663
  ),
660
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkS65QSO6T_js.mediaFallbackLabelKey(visual, element.mediaType)) })
664
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunk7WWINBGF_js.mediaFallbackLabelKey(visual, element.mediaType)) })
661
665
  ]
662
666
  }
663
667
  );
@@ -667,7 +671,7 @@ function renderMediaFallback({
667
671
  posterUrl,
668
672
  surface
669
673
  }) {
670
- const visual = chunkS65QSO6T_js.mediaFallbackVisual(surface, {
674
+ const visual = chunk7WWINBGF_js.mediaFallbackVisual(surface, {
671
675
  hasPoster: Boolean(posterUrl),
672
676
  missing: element.mediaMissing === true
673
677
  });
@@ -677,9 +681,9 @@ function renderMediaFallback({
677
681
  "img",
678
682
  {
679
683
  src: posterUrl,
680
- alt: visual.dimPoster ? chunkNXGUR2DO_js.translationsEn["pptx.media.posterAlt"] : chunkNXGUR2DO_js.translationsEn["pptx.media.videoPosterAlt"],
684
+ alt: visual.dimPoster ? chunkI4D6JQOI_js.translationsEn["pptx.media.posterAlt"] : chunkI4D6JQOI_js.translationsEn["pptx.media.videoPosterAlt"],
681
685
  className: `w-full h-full${visual.dimPoster ? " opacity-50" : ""}`,
682
- style: chunkS65QSO6T_js.getImageFitStyle(element)
686
+ style: chunk7WWINBGF_js.getImageFitStyle(element)
683
687
  }
684
688
  ),
685
689
  /* @__PURE__ */ jsxRuntime.jsx(Badge, { visual, element })
@@ -689,7 +693,7 @@ function renderMediaFallback({
689
693
  }
690
694
  function renderMediaElement(element, mediaDataUrls, options) {
691
695
  if (element.type !== "media") {
692
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkNXGUR2DO_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: chunkI4D6JQOI_js.translationsEn["pptx.media.title"] });
693
697
  }
694
698
  const mediaType = element.mediaType;
695
699
  const mediaPath = element.mediaPath;
@@ -697,7 +701,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
697
701
  const dataUrl = element.mediaData ?? (mediaPath ? mediaDataUrls.get(mediaPath) : void 0);
698
702
  const trimFragment = buildTrimFragment(element);
699
703
  const posterUrl = element.posterFrameData ?? void 0;
700
- const shouldLoop = chunkS65QSO6T_js.mediaPlaybackAttributes(element).loop;
704
+ const shouldLoop = chunk7WWINBGF_js.mediaPlaybackAttributes(element).loop;
701
705
  const shouldAutoPlay = options?.autoPlay === true || element.autoPlay === true;
702
706
  const isFullScreen = options?.fullScreen === true;
703
707
  const isPresentationMode = options?.isPresentationMode === true;
@@ -710,6 +714,20 @@ function renderMediaElement(element, mediaDataUrls, options) {
710
714
  return renderMediaFallback({ element, posterUrl, surface });
711
715
  }
712
716
  if (mediaType === "video") {
717
+ const onlineVideo = chunk7WWINBGF_js.getOnlineVideoEmbed(element);
718
+ if (onlineVideo) {
719
+ return /* @__PURE__ */ jsxRuntime.jsx(
720
+ "iframe",
721
+ {
722
+ src: onlineVideo.embedUrl,
723
+ title: chunkI4D6JQOI_js.translationsEn["pptx.media.onlineVideoTitle"],
724
+ className: "w-full h-full border-0 pointer-events-auto",
725
+ allow: chunk7WWINBGF_js.ONLINE_VIDEO_IFRAME_ALLOW,
726
+ allowFullScreen: true,
727
+ sandbox: chunk7WWINBGF_js.ONLINE_VIDEO_IFRAME_SANDBOX
728
+ }
729
+ );
730
+ }
713
731
  if (dataUrl) {
714
732
  return /* @__PURE__ */ jsxRuntime.jsx(
715
733
  PresentationMediaController,
@@ -775,42 +793,42 @@ function renderMediaElement(element, mediaDataUrls, options) {
775
793
  if (surface.presenting || surface.preview) {
776
794
  return null;
777
795
  }
778
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkNXGUR2DO_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: chunkI4D6JQOI_js.translationsEn["pptx.media.title"] });
779
797
  }
780
798
 
781
799
  // src/viewer/utils/text-utils.tsx
782
800
  function getTextStyleForElement(element, fallbackColor) {
783
- return chunkS65QSO6T_js.buildTextBlockStyle(element, { fallbackColor });
801
+ return chunk7WWINBGF_js.buildTextBlockStyle(element, { fallbackColor });
784
802
  }
785
803
 
786
804
  // src/viewer/utils/text-layout.tsx
787
805
  function getTextLayoutStyle(element) {
788
- if (!chunkS65QSO6T_js.hasTextProperties(element)) {
806
+ if (!chunk7WWINBGF_js.hasTextProperties(element)) {
789
807
  return {};
790
808
  }
791
- const writingMode = chunkS65QSO6T_js.toCssWritingMode(element.textStyle?.textDirection);
792
- const textOrientation = chunkS65QSO6T_js.toCssTextOrientation(element.textStyle?.textDirection);
793
- const verticalDirection = chunkS65QSO6T_js.toCssVerticalDirection(element.textStyle?.textDirection);
809
+ const writingMode = chunk7WWINBGF_js.toCssWritingMode(element.textStyle?.textDirection);
810
+ const textOrientation = chunk7WWINBGF_js.toCssTextOrientation(element.textStyle?.textDirection);
811
+ const verticalDirection = chunk7WWINBGF_js.toCssVerticalDirection(element.textStyle?.textDirection);
794
812
  const textWrapNone = element.textStyle?.textWrap === "none";
795
813
  const shapeAutoFitTextBox = element.textStyle?.autoFitMode === "shrink" && (element.type === "text" || element.locks?.txBox === true);
796
- const hasParagraphIndents = chunkS65QSO6T_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
814
+ const hasParagraphIndents = chunk7WWINBGF_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
797
815
  const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
798
816
  const paragraphIndent = element.textStyle?.paragraphIndent;
799
817
  const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
800
818
  const textIndent = !hasParagraphIndents && typeof paragraphIndent === "number" && paragraphIndent !== 0 ? paragraphIndent : void 0;
801
819
  const bodyTop = element.textStyle?.bodyInsetTop ?? DEFAULT_BODY_INSET_TB_PX;
802
820
  const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
821
+ const bodyLayoutStyle = chunk7WWINBGF_js.buildTextBodyLayoutStyle(element);
803
822
  return {
804
- // Columns / flex anchoring / anchorCtr / tab-size / kinsoku, from shared.
805
- ...chunkS65QSO6T_js.buildTextBodyLayoutStyle(element),
823
+ ...bodyLayoutStyle,
806
824
  // Body inset only. Paragraph spacing (spcBef/spcAft) is applied
807
825
  // per-paragraph by the paragraph renderer, not collapsed here.
808
826
  paddingTop: bodyTop,
809
827
  paddingBottom: bodyBottom,
810
828
  writingMode,
811
829
  textOrientation,
812
- direction: verticalDirection,
813
- marginLeft,
830
+ direction: verticalDirection ?? bodyLayoutStyle.direction,
831
+ marginLeft: marginLeft ?? bodyLayoutStyle.marginLeft,
814
832
  textIndent,
815
833
  ...shapeAutoFitTextBox ? {
816
834
  width: textWrapNone ? "max-content" : "100%",
@@ -830,7 +848,7 @@ function getTextLayoutStyle(element) {
830
848
 
831
849
  // src/viewer/utils/text-effects.tsx
832
850
  function buildTextBody3DSceneStyle2(textStyle, elementSize) {
833
- return chunkS65QSO6T_js.buildTextBody3DSceneStyle(textStyle, elementSize);
851
+ return chunk7WWINBGF_js.buildTextBody3DSceneStyle(textStyle, elementSize);
834
852
  }
835
853
 
836
854
  // src/viewer/utils/text-warp-css.tsx
@@ -1015,13 +1033,13 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1015
1033
  if (!subElementAnimStates || subElementAnimStates.size === 0) {
1016
1034
  return renderedSegments;
1017
1035
  }
1018
- const paraKey = `${elementId}${chunkS65QSO6T_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1036
+ const paraKey = `${elementId}${chunk7WWINBGF_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1019
1037
  const paraState = subElementAnimStates.get(paraKey);
1020
1038
  if (paraState) {
1021
1039
  const style = buildAnimStyle(paraState);
1022
1040
  return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
1023
1041
  }
1024
- const spec = chunkS65QSO6T_js.buildTextBuildSpec(
1042
+ const spec = chunk7WWINBGF_js.buildTextBuildSpec(
1025
1043
  elementId,
1026
1044
  paraIndex,
1027
1045
  paraRuns.map((run) => ({ text: run.text, style: run })),
@@ -1039,7 +1057,7 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1039
1057
  "span",
1040
1058
  {
1041
1059
  "data-anim-id": span.animId,
1042
- style: chunkS65QSO6T_js.textBuildSpanStyle(span),
1060
+ style: chunk7WWINBGF_js.textBuildSpanStyle(span),
1043
1061
  children: content
1044
1062
  },
1045
1063
  span.animId
@@ -1050,13 +1068,13 @@ function renderUnderlineWords(text, isUnderlineWords, wordDecoration, metric, ke
1050
1068
  if (!isUnderlineWords || !text) {
1051
1069
  return inner(text, keyPrefix, metric);
1052
1070
  }
1053
- const pieces = chunkS65QSO6T_js.splitWordsForUnderline(text);
1071
+ const pieces = chunk7WWINBGF_js.splitWordsForUnderline(text);
1054
1072
  if (pieces.length === 0) {
1055
1073
  return inner(text, keyPrefix, metric);
1056
1074
  }
1057
1075
  const gapMetric = metric ? {
1058
1076
  ...metric,
1059
- nestedStyle: metric.nestedStyle ? chunkS65QSO6T_js.stripUnderlineDecoration(metric.nestedStyle) : void 0
1077
+ nestedStyle: metric.nestedStyle ? chunk7WWINBGF_js.stripUnderlineDecoration(metric.nestedStyle) : void 0
1060
1078
  } : void 0;
1061
1079
  return pieces.map((piece, i) => {
1062
1080
  const key = `${keyPrefix}-u${i}`;
@@ -1089,7 +1107,7 @@ function makeSegmentPieceRenderer(needsScriptFonts, scriptFonts, baseFontFamily,
1089
1107
  );
1090
1108
  }
1091
1109
  function renderTabbedLine(line, ctx, keyPrefix, renderPiece, nestedStyle, underlineWords = false) {
1092
- const [lineLayout] = chunkS65QSO6T_js.buildRunTabLines(
1110
+ const [lineLayout] = chunk7WWINBGF_js.buildRunTabLines(
1093
1111
  line,
1094
1112
  ctx,
1095
1113
  nestedStyle,
@@ -1108,7 +1126,7 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
1108
1126
  if (!needsScriptFonts || !text) {
1109
1127
  return text;
1110
1128
  }
1111
- const pieces = chunkS65QSO6T_js.splitRunByScriptFont(
1129
+ const pieces = chunk7WWINBGF_js.splitRunByScriptFont(
1112
1130
  text,
1113
1131
  scriptFonts,
1114
1132
  baseFontFamily,
@@ -1125,7 +1143,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
1125
1143
  if (!metric || !text) {
1126
1144
  return inner(text, keyPrefix);
1127
1145
  }
1128
- const pieces = chunkS65QSO6T_js.splitRunForMetrics(text, metric.font);
1146
+ const pieces = chunk7WWINBGF_js.splitRunForMetrics(text, metric.font);
1129
1147
  if (pieces.length <= 1) {
1130
1148
  return inner(text, keyPrefix);
1131
1149
  }
@@ -1134,7 +1152,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
1134
1152
  {
1135
1153
  style: {
1136
1154
  ...metric.nestedStyle,
1137
- letterSpacing: chunkS65QSO6T_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1155
+ letterSpacing: chunk7WWINBGF_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1138
1156
  },
1139
1157
  children: inner(piece.text, `${keyPrefix}-w${i}`)
1140
1158
  },
@@ -1210,8 +1228,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
1210
1228
  });
1211
1229
  }
1212
1230
  function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
1213
- const mathml = chunkS65QSO6T_js.convertOmmlToMathMl(equationXml);
1214
- const safeMathml = mathml ? chunkS65QSO6T_js.sanitizeMathMl(mathml) : "";
1231
+ const mathml = chunk7WWINBGF_js.convertOmmlToMathMl(equationXml);
1232
+ const safeMathml = mathml ? chunk7WWINBGF_js.sanitizeMathMl(mathml) : "";
1215
1233
  const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
1216
1234
  "span",
1217
1235
  {
@@ -1221,7 +1239,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
1221
1239
  },
1222
1240
  dangerouslySetInnerHTML: { __html: safeMathml }
1223
1241
  }
1224
- ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-1 py-0.5 rounded text-xs bg-gray-200/20 text-gray-400 italic", children: chunkNXGUR2DO_js.translationsEn["pptx.textSegment.equationFallback"] });
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: chunkI4D6JQOI_js.translationsEn["pptx.textSegment.equationFallback"] });
1225
1243
  if (equationNumber) {
1226
1244
  return /* @__PURE__ */ jsxRuntime.jsxs(
1227
1245
  "span",
@@ -1344,7 +1362,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1344
1362
  const segmentStyle = segment?.style ?? {};
1345
1363
  const textValue = run.text;
1346
1364
  const lines = textValue.split("\n");
1347
- const resolvedSegmentColor = chunkS65QSO6T_js.normalizeHexColor(
1365
+ const resolvedSegmentColor = chunk7WWINBGF_js.normalizeHexColor(
1348
1366
  segmentStyle.color || element.textStyle?.color,
1349
1367
  run.hyperlink ? HYPERLINK_COLOR : fallbackColor
1350
1368
  );
@@ -1352,16 +1370,19 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1352
1370
  const baselineFraction = rawBaseline === 0 ? 0 : Math.abs(rawBaseline) >= 1e3 ? rawBaseline / 1e5 : rawBaseline / 100;
1353
1371
  const baselineFontScale = baselineFraction !== 0 ? BASELINE_FONT_SCALE : 1;
1354
1372
  const rawFontSize = segmentStyle.fontSize || element.textStyle?.fontSize || DEFAULT_TEXT_FONT_SIZE;
1355
- const baseFontSize = rawFontSize * chunkS65QSO6T_js.resolveAutoFitFontScale(element.textStyle);
1373
+ const baseFontSize = rawFontSize * chunk7WWINBGF_js.resolveAutoFitFontScale(element.textStyle);
1356
1374
  const baselineShift = baselineFraction !== 0 ? `${baselineFraction * baseFontSize}px` : void 0;
1357
- const fontKerning = chunkS65QSO6T_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
1375
+ const fontKerning = chunk7WWINBGF_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
1376
+ const scriptFallbackWins = Boolean(
1377
+ segmentStyle.scriptFallbackFont && segmentStyle.fontFamilyIsCascadeDefault
1378
+ );
1358
1379
  const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
1359
- const baseFontFamily = rawFontFamily ? chunkS65QSO6T_js.getSubstituteFontFamily(
1380
+ const baseFontFamily = scriptFallbackWins ? chunk7WWINBGF_js.getSubstituteFontFamily(segmentStyle.scriptFallbackFont) : rawFontFamily ? chunk7WWINBGF_js.getSubstituteFontFamily(
1360
1381
  rawFontFamily,
1361
- chunkS65QSO6T_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1382
+ chunk7WWINBGF_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1362
1383
  ) : DEFAULT_FONT_FAMILY2;
1363
- const scriptFonts = chunkS65QSO6T_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
1364
- const needsScriptFonts = chunkS65QSO6T_js.hasDistinctScriptFonts(scriptFonts);
1384
+ const scriptFonts = chunk7WWINBGF_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
1385
+ const needsScriptFonts = chunk7WWINBGF_js.hasDistinctScriptFonts(scriptFonts);
1365
1386
  const authoredLetterSpacing = typeof segmentStyle.characterSpacing === "number" && segmentStyle.characterSpacing !== 0 ? segmentStyle.characterSpacing / 100 * (96 / 72) : 0;
1366
1387
  const metricFont = {
1367
1388
  fontFamily: baseFontFamily,
@@ -1369,7 +1390,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1369
1390
  bold: Boolean(segmentStyle.bold),
1370
1391
  italic: Boolean(segmentStyle.italic)
1371
1392
  };
1372
- const nestedStyle = chunkS65QSO6T_js.nestedTextDecorationStyle(run.style);
1393
+ const nestedStyle = chunk7WWINBGF_js.nestedTextDecorationStyle(run.style);
1373
1394
  const metricContext = { font: metricFont, authoredPx: authoredLetterSpacing, nestedStyle };
1374
1395
  const spanStyle = { ...run.style };
1375
1396
  spanStyle.color = resolvedSegmentColor;
@@ -1377,11 +1398,11 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1377
1398
  spanStyle.fontFamily = baseFontFamily;
1378
1399
  spanStyle.verticalAlign = baselineShift;
1379
1400
  spanStyle.fontKerning = fontKerning;
1380
- spanStyle.letterSpacing = chunkS65QSO6T_js.pieceLetterSpacing(
1401
+ spanStyle.letterSpacing = chunk7WWINBGF_js.pieceLetterSpacing(
1381
1402
  authoredLetterSpacing,
1382
- chunkS65QSO6T_js.resolveMetricTrackingPx(textValue, metricFont)
1403
+ chunk7WWINBGF_js.resolveMetricTrackingPx(textValue, metricFont)
1383
1404
  );
1384
- const hollow = chunkS65QSO6T_js.hollowTextFillStyle(segmentStyle, {
1405
+ const hollow = chunk7WWINBGF_js.hollowTextFillStyle(segmentStyle, {
1385
1406
  color: resolvedSegmentColor,
1386
1407
  textStroke: typeof spanStyle.WebkitTextStroke === "string" ? spanStyle.WebkitTextStroke : void 0
1387
1408
  });
@@ -1396,7 +1417,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1396
1417
  const isUnderlineWords = Boolean(segmentStyle.underline) && segmentStyle.underlineStyle === "words";
1397
1418
  const wordDecoration = isUnderlineWords ? nestedStyle ?? run.underlineWordPieces?.find((piece) => piece.style)?.style : void 0;
1398
1419
  if (isUnderlineWords) {
1399
- const stripped = chunkS65QSO6T_js.stripUnderlineDecoration(spanStyle);
1420
+ const stripped = chunk7WWINBGF_js.stripUnderlineDecoration(spanStyle);
1400
1421
  spanStyle.textDecoration = stripped.textDecoration;
1401
1422
  delete spanStyle.textDecorationStyle;
1402
1423
  delete spanStyle.textDecorationThickness;
@@ -1412,7 +1433,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1412
1433
  scriptFonts,
1413
1434
  baseFontFamily,
1414
1435
  findHighlights,
1415
- chunkS65QSO6T_js.buildTabContext(
1436
+ chunk7WWINBGF_js.buildTabContext(
1416
1437
  element.textStyle?.tabStops,
1417
1438
  element.textStyle?.defaultTabSize,
1418
1439
  baseFontSize,
@@ -1444,14 +1465,14 @@ function renderSeededListRun(seed, runs, segments, context) {
1444
1465
  const segment = sourceRun ? segments[seed.segmentIndex] : { text: seed.text, style: seed.style };
1445
1466
  const resolvedSegment = {
1446
1467
  ...segment,
1447
- style: chunkS65QSO6T_js.withInlineListDecorationDefaults(segment.style, context.element.textStyle)
1468
+ style: chunk7WWINBGF_js.withInlineListDecorationDefaults(segment.style, context.element.textStyle)
1448
1469
  };
1449
- const decorationCss = chunkS65QSO6T_js.segmentStyleToCss(
1470
+ const decorationCss = chunk7WWINBGF_js.segmentStyleToCss(
1450
1471
  resolvedSegment,
1451
- chunkS65QSO6T_js.resolveAutoFitFontScale(context.element.textStyle)
1472
+ chunk7WWINBGF_js.resolveAutoFitFontScale(context.element.textStyle)
1452
1473
  );
1453
- chunkS65QSO6T_js.applyUnderlineVariant(decorationCss, resolvedSegment);
1454
- const run = sourceRun ? { ...sourceRun, style: { ...sourceRun.style, ...chunkS65QSO6T_js.nestedTextDecorationStyle(decorationCss) } } : {
1474
+ chunk7WWINBGF_js.applyUnderlineVariant(decorationCss, resolvedSegment);
1475
+ const run = sourceRun ? { ...sourceRun, style: { ...sourceRun.style, ...chunk7WWINBGF_js.nestedTextDecorationStyle(decorationCss) } } : {
1455
1476
  text: seed.text,
1456
1477
  style: decorationCss,
1457
1478
  segmentIndex: seed.segmentIndex
@@ -1466,7 +1487,7 @@ function renderSeededListRun(seed, runs, segments, context) {
1466
1487
  });
1467
1488
  }
1468
1489
  function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick, placeholderPrompt, inlineListSeed) {
1469
- if (!chunkS65QSO6T_js.hasTextProperties(element)) {
1490
+ if (!chunk7WWINBGF_js.hasTextProperties(element)) {
1470
1491
  return emptyFallback || null;
1471
1492
  }
1472
1493
  const segments = segmentOverrides ?? element.textSegments;
@@ -1476,7 +1497,7 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
1476
1497
  }
1477
1498
  return element.text || emptyFallback || "";
1478
1499
  }
1479
- const paragraphs = chunkS65QSO6T_js.buildParagraphs(
1500
+ const paragraphs = chunk7WWINBGF_js.buildParagraphs(
1480
1501
  element,
1481
1502
  fieldContext,
1482
1503
  segmentOverrides,
@@ -1622,13 +1643,13 @@ function renderBulletMarker(para, paraIndex, elementId) {
1622
1643
  );
1623
1644
  }
1624
1645
  function getDuotoneColors(element) {
1625
- if (!chunkS65QSO6T_js.isImageLikeElement(element)) {
1646
+ if (!chunk7WWINBGF_js.isImageLikeElement(element)) {
1626
1647
  return void 0;
1627
1648
  }
1628
1649
  return element.imageEffects?.duotone;
1629
1650
  }
1630
1651
  function buildLineShadowCss(element) {
1631
- if (!chunkS65QSO6T_js.hasShapeProperties(element)) {
1652
+ if (!chunk7WWINBGF_js.hasShapeProperties(element)) {
1632
1653
  return void 0;
1633
1654
  }
1634
1655
  const ss = element.shapeStyle;
@@ -1639,13 +1660,13 @@ function buildLineShadowCss(element) {
1639
1660
  const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
1640
1661
  const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
1641
1662
  const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
1642
- return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkS65QSO6T_js.colorWithOpacity(
1643
- chunkS65QSO6T_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1663
+ return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunk7WWINBGF_js.colorWithOpacity(
1664
+ chunk7WWINBGF_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1644
1665
  opacity
1645
1666
  )}`;
1646
1667
  }
1647
1668
  function buildLineGlowFilter(element) {
1648
- if (!chunkS65QSO6T_js.hasShapeProperties(element)) {
1669
+ if (!chunk7WWINBGF_js.hasShapeProperties(element)) {
1649
1670
  return void 0;
1650
1671
  }
1651
1672
  const ss = element.shapeStyle;
@@ -1654,22 +1675,22 @@ function buildLineGlowFilter(element) {
1654
1675
  }
1655
1676
  const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
1656
1677
  const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
1657
- const glowCol = chunkS65QSO6T_js.colorWithOpacity(chunkS65QSO6T_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1678
+ const glowCol = chunk7WWINBGF_js.colorWithOpacity(chunk7WWINBGF_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1658
1679
  return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
1659
1680
  }
1660
1681
  function getDagDuotoneFilterId(elementId) {
1661
1682
  return `dag-duotone-${elementId}`;
1662
1683
  }
1663
1684
  function hasDagDuotoneEffect(element) {
1664
- if (!chunkS65QSO6T_js.hasShapeProperties(element)) {
1685
+ if (!chunk7WWINBGF_js.hasShapeProperties(element)) {
1665
1686
  return false;
1666
1687
  }
1667
1688
  return Boolean(element.shapeStyle?.dagDuotone);
1668
1689
  }
1669
1690
  function renderDagDuotoneSvgFilter(elementId, color1, color2) {
1670
1691
  const filterId = getDagDuotoneFilterId(elementId);
1671
- const c1 = chunkS65QSO6T_js.hexToRgbUnit(color1);
1672
- const c2 = chunkS65QSO6T_js.hexToRgbUnit(color2);
1692
+ const c1 = chunk7WWINBGF_js.hexToRgbUnit(color1);
1693
+ const c2 = chunk7WWINBGF_js.hexToRgbUnit(color2);
1673
1694
  const grayscaleMatrix = [
1674
1695
  0.2126,
1675
1696
  0.7152,
@@ -1713,7 +1734,7 @@ function renderDagDuotoneSvgFilter(elementId, color1, color2) {
1713
1734
 
1714
1735
  // src/viewer/utils/shape-visual-3d.ts
1715
1736
  function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
1716
- return chunkS65QSO6T_js.build3DExtrusionData(
1737
+ return chunk7WWINBGF_js.build3DExtrusionData(
1717
1738
  shape3d,
1718
1739
  scene3d,
1719
1740
  fillColor,
@@ -1722,7 +1743,7 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
1722
1743
  );
1723
1744
  }
1724
1745
  function apply3dEffects2(base, scene3d, shape3d, fillColorFallback, elementSize, elementId) {
1725
- chunkS65QSO6T_js.apply3dEffects(
1746
+ chunk7WWINBGF_js.apply3dEffects(
1726
1747
  base,
1727
1748
  scene3d,
1728
1749
  shape3d,
@@ -1737,11 +1758,11 @@ function rendersCustomVectorPath(element) {
1737
1758
  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;
1738
1759
  }
1739
1760
  function rendersWedgeCalloutVector(element) {
1740
- return element.type === "shape" && chunkS65QSO6T_js.isWedgeCalloutPresetShape(element.shapeType);
1761
+ return element.type === "shape" && chunk7WWINBGF_js.isWedgeCalloutPresetShape(element.shapeType);
1741
1762
  }
1742
1763
  function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _strokeColor, animatesFill, animatesStroke, parentGroupFill) {
1743
1764
  if (element.type === "group") {
1744
- const fx2 = chunkS65QSO6T_js.getComputedEffectStyle(element);
1765
+ const fx2 = chunk7WWINBGF_js.getComputedEffectStyle(element);
1745
1766
  const groupStyle = {};
1746
1767
  if (fx2.filter) {
1747
1768
  groupStyle.filter = fx2.filter;
@@ -1751,13 +1772,13 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1751
1772
  }
1752
1773
  return groupStyle;
1753
1774
  }
1754
- if (!chunkS65QSO6T_js.hasShapeProperties(element)) {
1775
+ if (!chunk7WWINBGF_js.hasShapeProperties(element)) {
1755
1776
  return {};
1756
1777
  }
1757
1778
  const ss = element.shapeStyle;
1758
- const fill = animatesFill ? void 0 : chunkS65QSO6T_js.getComputedFillStyle(element, parentGroupFill);
1759
- const fx = chunkS65QSO6T_js.getComputedEffectStyle(element);
1760
- const stroke = chunkS65QSO6T_js.getComputedStrokeStyle(element);
1779
+ const fill = animatesFill ? void 0 : chunk7WWINBGF_js.getComputedFillStyle(element, parentGroupFill);
1780
+ const fx = chunk7WWINBGF_js.getComputedEffectStyle(element);
1781
+ const stroke = chunk7WWINBGF_js.getComputedStrokeStyle(element);
1761
1782
  const base = {
1762
1783
  // A gradient fill REPLACES the solid fill, it does not sit on top of it;
1763
1784
  // the whole precedence lives in shared's `getComputedFillStyle`.
@@ -1796,7 +1817,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1796
1817
  };
1797
1818
  Object.assign(
1798
1819
  base,
1799
- chunkS65QSO6T_js.getAnimationColorBaseStyle(element, {
1820
+ chunk7WWINBGF_js.getAnimationColorBaseStyle(element, {
1800
1821
  animatesFill,
1801
1822
  animatesStroke,
1802
1823
  parentGroupFill
@@ -1818,7 +1839,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1818
1839
  },
1819
1840
  element.id
1820
1841
  );
1821
- if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || chunkS65QSO6T_js.isStrokeOnlyPresetElement(element)) {
1842
+ if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || chunk7WWINBGF_js.isStrokeOnlyPresetElement(element)) {
1822
1843
  base.backgroundColor = "transparent";
1823
1844
  base.backgroundImage = void 0;
1824
1845
  base.borderWidth = void 0;
@@ -1832,7 +1853,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1832
1853
  if (rendersWedgeCalloutVector(element)) {
1833
1854
  return base;
1834
1855
  }
1835
- const geometry = chunkS65QSO6T_js.resolveShapeGeometry(element);
1856
+ const geometry = chunk7WWINBGF_js.resolveShapeGeometry(element);
1836
1857
  switch (geometry.kind) {
1837
1858
  case "bare":
1838
1859
  return { backgroundColor: "transparent", borderWidth: 0, borderStyle: "none" };
@@ -1856,7 +1877,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1856
1877
  }
1857
1878
  }
1858
1879
  function getConnectorPathGeometry2(element) {
1859
- return chunkS65QSO6T_js.getConnectorPathGeometry(element);
1880
+ return chunk7WWINBGF_js.getConnectorPathGeometry(element);
1860
1881
  }
1861
1882
  var ARROW_SIZE_SCALE = {
1862
1883
  sm: 0.6,
@@ -1925,11 +1946,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
1925
1946
  strokePaint,
1926
1947
  strokeWidth,
1927
1948
  dashArray,
1928
- lineCap: chunkS65QSO6T_js.svgLineCap(shapeStyle?.lineCap),
1949
+ lineCap: chunk7WWINBGF_js.svgLineCap(shapeStyle?.lineCap),
1929
1950
  lineJoin,
1930
1951
  miterLimit,
1931
- offsets: chunkS65QSO6T_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
1932
- widths: chunkS65QSO6T_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
1952
+ offsets: chunk7WWINBGF_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
1953
+ widths: chunk7WWINBGF_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
1933
1954
  };
1934
1955
  }
1935
1956
  function strokeStrands(d, keyBase, ctx) {
@@ -1952,12 +1973,12 @@ function strokeStrands(d, keyBase, ctx) {
1952
1973
  }
1953
1974
  function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false, gradient) {
1954
1975
  const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
1955
- const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkS65QSO6T_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
1976
+ const subpaths = structuredPaths && structuredPaths.length > 0 ? chunk7WWINBGF_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
1956
1977
  const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
1957
- const gradientPaint = gradient ? chunkS65QSO6T_js.svgGradientFillRef(gradient) : void 0;
1978
+ const gradientPaint = gradient ? chunk7WWINBGF_js.svgGradientFillRef(gradient) : void 0;
1958
1979
  const nodes = [];
1959
1980
  if (subpaths && needsPerSubpath) {
1960
- const paints = chunkS65QSO6T_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
1981
+ const paints = chunk7WWINBGF_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
1961
1982
  paints.forEach((paint, idx) => {
1962
1983
  if (paint.fill !== "none") {
1963
1984
  const mode = subpaths[idx]?.fillMode;
@@ -1986,7 +2007,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
1986
2007
  "path",
1987
2008
  {
1988
2009
  d: pathData,
1989
- fill: animatesFill ? "inherit" : gradientPaint ?? chunkS65QSO6T_js.colorWithOpacity(fillColor, fillOpacity),
2010
+ fill: animatesFill ? "inherit" : gradientPaint ?? chunk7WWINBGF_js.colorWithOpacity(fillColor, fillOpacity),
1990
2011
  stroke: "none",
1991
2012
  vectorEffect: "non-scaling-stroke"
1992
2013
  },
@@ -2012,14 +2033,14 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2012
2033
  );
2013
2034
  }
2014
2035
  function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
2015
- if (!chunkS65QSO6T_js.hasShapeProperties(element)) {
2036
+ if (!chunk7WWINBGF_js.hasShapeProperties(element)) {
2016
2037
  return null;
2017
2038
  }
2018
2039
  const normalizedType = (element.shapeType || "").toLowerCase();
2019
- const fillPaint = animatesFill ? "inherit" : chunkS65QSO6T_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2020
- const strokePaint = animatesStroke ? "inherit" : chunkS65QSO6T_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2021
- const dashType = chunkS65QSO6T_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2022
- const dashArray = chunkS65QSO6T_js.getSvgStrokeDasharray(
2040
+ const fillPaint = animatesFill ? "inherit" : chunk7WWINBGF_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2041
+ const strokePaint = animatesStroke ? "inherit" : chunk7WWINBGF_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2042
+ const dashType = chunk7WWINBGF_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2043
+ const dashArray = chunk7WWINBGF_js.getSvgStrokeDasharray(
2023
2044
  dashType,
2024
2045
  Math.max(strokeWidth, 1),
2025
2046
  element.shapeStyle?.customDashSegments
@@ -2100,13 +2121,13 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2100
2121
  // container's `background-image` is suppressed for custom geometry, so
2101
2122
  // without this the shape fell back to the parser's representative solid
2102
2123
  // and lost every fade (issue #132).
2103
- chunkS65QSO6T_js.buildSvgGradientDef(element.shapeStyle, element.id)
2124
+ chunk7WWINBGF_js.buildSvgGradientDef(element.shapeStyle, element.id)
2104
2125
  );
2105
2126
  }
2106
- if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !chunkS65QSO6T_js.buildStrokeOutline(element)) {
2127
+ if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !chunk7WWINBGF_js.buildStrokeOutline(element)) {
2107
2128
  const width = Math.max(element.width, 1);
2108
2129
  const height = Math.max(element.height, 1);
2109
- const geometry = chunkS65QSO6T_js.getPresetShapeVectorGeometry(
2130
+ const geometry = chunk7WWINBGF_js.getPresetShapeVectorGeometry(
2110
2131
  element.shapeType || "rect",
2111
2132
  width,
2112
2133
  height,
@@ -2134,18 +2155,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2134
2155
  );
2135
2156
  }
2136
2157
  }
2137
- if (element.type === "shape" && chunkS65QSO6T_js.isWedgeCalloutPresetShape(element.shapeType)) {
2158
+ if (element.type === "shape" && chunk7WWINBGF_js.isWedgeCalloutPresetShape(element.shapeType)) {
2138
2159
  const width = Math.max(element.width, 1);
2139
2160
  const height = Math.max(element.height, 1);
2140
- const geometry = chunkS65QSO6T_js.getPresetShapeVectorGeometry(
2161
+ const geometry = chunk7WWINBGF_js.getPresetShapeVectorGeometry(
2141
2162
  element.shapeType,
2142
2163
  width,
2143
2164
  height,
2144
2165
  element.shapeAdjustments
2145
2166
  );
2146
2167
  if (geometry) {
2147
- const gradient = chunkS65QSO6T_js.buildSvgGradientDef(element.shapeStyle, element.id);
2148
- const gradientPaint = gradient ? chunkS65QSO6T_js.svgGradientFillRef(gradient) : void 0;
2168
+ const gradient = chunk7WWINBGF_js.buildSvgGradientDef(element.shapeStyle, element.id);
2169
+ const gradientPaint = gradient ? chunk7WWINBGF_js.svgGradientFillRef(gradient) : void 0;
2149
2170
  return /* @__PURE__ */ jsxRuntime.jsxs(
2150
2171
  "svg",
2151
2172
  {
@@ -2178,18 +2199,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2178
2199
  );
2179
2200
  }
2180
2201
  }
2181
- if (chunkS65QSO6T_js.isCalloutShape(normalizedType)) {
2202
+ if (chunk7WWINBGF_js.isCalloutShape(normalizedType)) {
2182
2203
  const width = Math.max(element.width, 1);
2183
2204
  const height = Math.max(element.height, 1);
2184
- const geometry = chunkS65QSO6T_js.getCalloutLeaderLineGeometry(
2205
+ const geometry = chunk7WWINBGF_js.getCalloutLeaderLineGeometry(
2185
2206
  normalizedType,
2186
2207
  width,
2187
2208
  height,
2188
2209
  element.shapeAdjustments
2189
2210
  );
2190
2211
  if (geometry && geometry.points.length >= 2) {
2191
- const leaderPath = chunkS65QSO6T_js.buildCalloutLeaderLineSvgPath(geometry);
2192
- const bounds = chunkS65QSO6T_js.getCalloutViewBoxBounds(width, height, geometry);
2212
+ const leaderPath = chunk7WWINBGF_js.buildCalloutLeaderLineSvgPath(geometry);
2213
+ const bounds = chunk7WWINBGF_js.getCalloutViewBoxBounds(width, height, geometry);
2193
2214
  const lineStroke = Math.max(strokeWidth, 1);
2194
2215
  const offsetLeft = bounds.minX;
2195
2216
  const offsetTop = bounds.minY;
@@ -2252,10 +2273,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2252
2273
  const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
2253
2274
  const endArrowL = element.shapeStyle?.connectorEndArrowLength;
2254
2275
  const compoundLine = element.shapeStyle?.compoundLine;
2255
- const connectorLineCap = chunkS65QSO6T_js.svgLineCap(element.shapeStyle?.lineCap);
2276
+ const connectorLineCap = chunk7WWINBGF_js.svgLineCap(element.shapeStyle?.lineCap);
2256
2277
  const hitTargetWidth = Math.max(strokeWidth * 3, 12);
2257
- const offsets = chunkS65QSO6T_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2258
- const widths = chunkS65QSO6T_js.getCompoundLineWidths(compoundLine, strokeWidth);
2278
+ const offsets = chunk7WWINBGF_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2279
+ const widths = chunk7WWINBGF_js.getCompoundLineWidths(compoundLine, strokeWidth);
2259
2280
  return /* @__PURE__ */ jsxRuntime.jsxs(
2260
2281
  "svg",
2261
2282
  {
@@ -2322,15 +2343,15 @@ function parseGradientFillCss(gradFill) {
2322
2343
  }
2323
2344
  const rawStops = stops.map((gs) => {
2324
2345
  const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
2325
- const color = chunkS65QSO6T_js.parseDrawingColor(gs) ?? "#888888";
2326
- const opacity = chunkS65QSO6T_js.parseDrawingColorOpacity(gs);
2346
+ const color = chunk7WWINBGF_js.parseDrawingColor(gs) ?? "#888888";
2347
+ const opacity = chunk7WWINBGF_js.parseDrawingColorOpacity(gs);
2327
2348
  return { position: pos, color, opacity };
2328
2349
  }).sort((a, b) => a.position - b.position);
2329
- const stopStrings = rawStops.map((s) => `${chunkS65QSO6T_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
2350
+ const stopStrings = rawStops.map((s) => `${chunk7WWINBGF_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
2330
2351
  const lin = gradFill["a:lin"];
2331
2352
  if (lin) {
2332
2353
  const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
2333
- const angleDeg = Math.round(chunkS65QSO6T_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2354
+ const angleDeg = Math.round(chunk7WWINBGF_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2334
2355
  return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
2335
2356
  }
2336
2357
  const path = gradFill["a:path"];
@@ -2344,7 +2365,7 @@ function parseGradientFillCss(gradFill) {
2344
2365
  b: Number.parseInt(String(fillToRectXml["@_b"] || "0"), 10) / 1e5
2345
2366
  } : void 0;
2346
2367
  if (pathType === "rect") {
2347
- return chunkS65QSO6T_js.buildRectPathGradient(rawStops, void 0, fillToRect);
2368
+ return chunk7WWINBGF_js.buildRectPathGradient(rawStops, void 0, fillToRect);
2348
2369
  }
2349
2370
  let cx = 50;
2350
2371
  let cy = 50;
@@ -2366,8 +2387,8 @@ function parsePatternFillCss(pattFill) {
2366
2387
  if (!pattFill) {
2367
2388
  return void 0;
2368
2389
  }
2369
- const fgColor = chunkS65QSO6T_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2370
- const bgColor = chunkS65QSO6T_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2390
+ const fgColor = chunk7WWINBGF_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2391
+ const bgColor = chunk7WWINBGF_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2371
2392
  const preset = String(pattFill["@_prst"] || "ltDnDiag");
2372
2393
  switch (preset) {
2373
2394
  case "ltHorz":
@@ -2478,11 +2499,11 @@ function parseCellBorders(cellProperties) {
2478
2499
  const prstDash = ln["a:prstDash"];
2479
2500
  const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
2480
2501
  const cssBorderStyle = ooxmlDashToCss(dashVal);
2481
- const color = chunkS65QSO6T_js.parseDrawingColor(ln["a:solidFill"]);
2502
+ const color = chunk7WWINBGF_js.parseDrawingColor(ln["a:solidFill"]);
2482
2503
  if (color) {
2483
- const opacity = chunkS65QSO6T_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2504
+ const opacity = chunk7WWINBGF_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2484
2505
  const key = `${edge.prefix}`;
2485
- borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkS65QSO6T_js.colorWithOpacity(color, opacity)}`;
2506
+ borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunk7WWINBGF_js.colorWithOpacity(color, opacity)}`;
2486
2507
  }
2487
2508
  }
2488
2509
  return borderStyle;
@@ -2495,7 +2516,7 @@ function parseCellTextEffects(runProps) {
2495
2516
  const textShadowParts = [];
2496
2517
  const outerShdw = effectLst["a:outerShdw"];
2497
2518
  if (outerShdw) {
2498
- const shdwColor = chunkS65QSO6T_js.parseDrawingColor(outerShdw);
2519
+ const shdwColor = chunk7WWINBGF_js.parseDrawingColor(outerShdw);
2499
2520
  if (shdwColor) {
2500
2521
  const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
2501
2522
  const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
@@ -2513,7 +2534,7 @@ function parseCellTextEffects(runProps) {
2513
2534
  }
2514
2535
  const glow = effectLst["a:glow"];
2515
2536
  if (glow) {
2516
- const glowColor = chunkS65QSO6T_js.parseDrawingColor(glow);
2537
+ const glowColor = chunk7WWINBGF_js.parseDrawingColor(glow);
2517
2538
  if (glowColor) {
2518
2539
  const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
2519
2540
  const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
@@ -2535,11 +2556,11 @@ function extractCellText(cellXml) {
2535
2556
  const textParts = [];
2536
2557
  const runs = ensureArrayValue(paragraph["a:r"]);
2537
2558
  runs.forEach((run) => {
2538
- textParts.push(chunkS65QSO6T_js.xmlText(run["a:t"]) ?? "");
2559
+ textParts.push(chunk7WWINBGF_js.xmlText(run["a:t"]) ?? "");
2539
2560
  });
2540
2561
  const fields = ensureArrayValue(paragraph["a:fld"]);
2541
2562
  fields.forEach((field) => {
2542
- textParts.push(chunkS65QSO6T_js.xmlText(field["a:t"]) ?? "");
2563
+ textParts.push(chunk7WWINBGF_js.xmlText(field["a:t"]) ?? "");
2543
2564
  });
2544
2565
  paragraphTexts.push(textParts.join(""));
2545
2566
  });
@@ -2583,10 +2604,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2583
2604
  if (runProps?.["@_u"] !== void 0) {
2584
2605
  cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
2585
2606
  }
2586
- const runColor = chunkS65QSO6T_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkS65QSO6T_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2607
+ const runColor = chunk7WWINBGF_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunk7WWINBGF_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2587
2608
  if (runColor) {
2588
- const opacity = chunkS65QSO6T_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2589
- cellStyle.color = chunkS65QSO6T_js.colorWithOpacity(runColor, opacity);
2609
+ const opacity = chunk7WWINBGF_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2610
+ cellStyle.color = chunk7WWINBGF_js.colorWithOpacity(runColor, opacity);
2590
2611
  }
2591
2612
  const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
2592
2613
  if (fontFamily) {
@@ -2596,15 +2617,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2596
2617
  cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
2597
2618
  }
2598
2619
  const cellProperties = cellXml["a:tcPr"];
2599
- const cellFill = chunkS65QSO6T_js.parseDrawingColor(
2620
+ const cellFill = chunk7WWINBGF_js.parseDrawingColor(
2600
2621
  cellProperties?.["a:solidFill"],
2601
2622
  schemeColorOverrides
2602
2623
  );
2603
2624
  if (cellFill) {
2604
- const opacity = chunkS65QSO6T_js.parseDrawingColorOpacity(
2625
+ const opacity = chunk7WWINBGF_js.parseDrawingColorOpacity(
2605
2626
  cellProperties?.["a:solidFill"]
2606
2627
  );
2607
- cellStyle.backgroundColor = chunkS65QSO6T_js.colorWithOpacity(cellFill, opacity);
2628
+ cellStyle.backgroundColor = chunk7WWINBGF_js.colorWithOpacity(cellFill, opacity);
2608
2629
  } else {
2609
2630
  const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
2610
2631
  if (gradCss) {
@@ -2619,16 +2640,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2619
2640
  const edgeBorders = parseCellBorders(cellProperties);
2620
2641
  Object.assign(cellStyle, edgeBorders);
2621
2642
  if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
2622
- const borderColor = chunkS65QSO6T_js.parseDrawingColor(
2643
+ const borderColor = chunk7WWINBGF_js.parseDrawingColor(
2623
2644
  cellProperties?.["a:lnL"]?.["a:solidFill"],
2624
2645
  schemeColorOverrides
2625
- ) || chunkS65QSO6T_js.parseDrawingColor(
2646
+ ) || chunk7WWINBGF_js.parseDrawingColor(
2626
2647
  cellProperties?.["a:lnR"]?.["a:solidFill"],
2627
2648
  schemeColorOverrides
2628
- ) || chunkS65QSO6T_js.parseDrawingColor(
2649
+ ) || chunk7WWINBGF_js.parseDrawingColor(
2629
2650
  cellProperties?.["a:lnT"]?.["a:solidFill"],
2630
2651
  schemeColorOverrides
2631
- ) || chunkS65QSO6T_js.parseDrawingColor(
2652
+ ) || chunk7WWINBGF_js.parseDrawingColor(
2632
2653
  cellProperties?.["a:lnB"]?.["a:solidFill"],
2633
2654
  schemeColorOverrides
2634
2655
  );
@@ -2700,7 +2721,7 @@ function getTableCellBandStyle2(element, rowIndex, cellIndex, rowCount, columnCo
2700
2721
  if (element.type !== "table") {
2701
2722
  return void 0;
2702
2723
  }
2703
- return chunkS65QSO6T_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2724
+ return chunk7WWINBGF_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2704
2725
  tableStyleMap: styleCtx?.tableStyleMap,
2705
2726
  colorScheme: styleCtx?.theme?.colorScheme,
2706
2727
  fontScheme: styleCtx?.theme?.fontScheme
@@ -2780,7 +2801,7 @@ function renderTableCellContent(cell, fallbackText) {
2780
2801
  return /* @__PURE__ */ jsxRuntime.jsx(
2781
2802
  "span",
2782
2803
  {
2783
- style: { position: "relative", ...chunkS65QSO6T_js.cellRunStyle(run) },
2804
+ style: { position: "relative", ...chunk7WWINBGF_js.cellRunStyle(run) },
2784
2805
  children: run.text
2785
2806
  },
2786
2807
  `r-${index}`
@@ -2788,7 +2809,7 @@ function renderTableCellContent(cell, fallbackText) {
2788
2809
  });
2789
2810
  }
2790
2811
  function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
2791
- return chunkS65QSO6T_js.getCellDiagonalBorders(style, tableData, pos, {
2812
+ return chunk7WWINBGF_js.getCellDiagonalBorders(style, tableData, pos, {
2792
2813
  tableStyleMap: styleCtx?.tableStyleMap,
2793
2814
  colorScheme: styleCtx?.theme?.colorScheme,
2794
2815
  fontScheme: styleCtx?.theme?.fontScheme
@@ -2921,7 +2942,7 @@ function TableResizeOverlay({
2921
2942
  const containerRef = React7.useRef(null);
2922
2943
  const [rowBounds, setRowBounds] = React7.useState([]);
2923
2944
  const dragRef = React7.useRef(null);
2924
- const colBoundaries = React7.useMemo(() => chunkS65QSO6T_js.computeColumnBoundaries(columnWidths), [columnWidths]);
2945
+ const colBoundaries = React7.useMemo(() => chunk7WWINBGF_js.computeColumnBoundaries(columnWidths), [columnWidths]);
2925
2946
  const measureRows = React7.useCallback(() => {
2926
2947
  const container = containerRef.current;
2927
2948
  if (!container) {
@@ -2968,11 +2989,11 @@ function TableResizeOverlay({
2968
2989
  const rect = containerRef.current.getBoundingClientRect();
2969
2990
  if (e.clientX !== drag.startPos && drag.type === "col" && drag.initialWidths && onResizeColumns) {
2970
2991
  const deltaProp = (e.clientX - drag.startPos) / rect.width;
2971
- onResizeColumns(chunkS65QSO6T_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
2992
+ onResizeColumns(chunk7WWINBGF_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
2972
2993
  } else if (e.clientY !== drag.startPos && drag.type === "row" && onResizeRow) {
2973
2994
  const deltaY = e.clientY - drag.startPos;
2974
- const newHeight = chunkS65QSO6T_js.computeResizedRowHeight(
2975
- drag.initialRowHeight ?? chunkS65QSO6T_js.DEFAULT_ROW_HEIGHT,
2995
+ const newHeight = chunk7WWINBGF_js.computeResizedRowHeight(
2996
+ drag.initialRowHeight ?? chunk7WWINBGF_js.DEFAULT_ROW_HEIGHT,
2976
2997
  deltaY
2977
2998
  );
2978
2999
  onResizeRow(drag.index, newHeight);
@@ -3010,7 +3031,7 @@ function TableResizeOverlay({
3010
3031
  e.stopPropagation();
3011
3032
  const table = containerRef.current?.querySelector("table");
3012
3033
  const tr = table?.querySelectorAll("tbody > tr")[index];
3013
- const actualHeight = tr?.offsetHeight ?? chunkS65QSO6T_js.DEFAULT_ROW_HEIGHT;
3034
+ const actualHeight = tr?.offsetHeight ?? chunk7WWINBGF_js.DEFAULT_ROW_HEIGHT;
3014
3035
  document.body.style.cursor = "row-resize";
3015
3036
  document.body.style.userSelect = "none";
3016
3037
  dragRef.current = {
@@ -3050,14 +3071,14 @@ function renderTableFromTableData(element, textStyle, options) {
3050
3071
  const rowCount = tableData.rows.length;
3051
3072
  const columnCount = tableData.columnWidths.length;
3052
3073
  const selectedCell = options?.selectedCell || null;
3053
- const isEditable = Boolean(options?.editable) && chunkS65QSO6T_js.canDrillDown(element);
3074
+ const isEditable = Boolean(options?.editable) && chunk7WWINBGF_js.canDrillDown(element);
3054
3075
  const hasCellSelectionHandler = typeof options?.onSelectCell === "function";
3055
3076
  const sharedCtx = {
3056
3077
  tableStyleMap: options?.styleCtx?.tableStyleMap,
3057
3078
  colorScheme: options?.styleCtx?.theme?.colorScheme,
3058
3079
  fontScheme: options?.styleCtx?.theme?.fontScheme
3059
3080
  };
3060
- const cellCss = (cell, rowIndex, cellIndex) => chunkS65QSO6T_js.tableCellCss(
3081
+ const cellCss = (cell, rowIndex, cellIndex) => chunk7WWINBGF_js.tableCellCss(
3061
3082
  tableData,
3062
3083
  cell,
3063
3084
  { rowIndex, cellIndex, rowCount, columnCount },
@@ -3070,7 +3091,7 @@ function renderTableFromTableData(element, textStyle, options) {
3070
3091
  }
3071
3092
  const first = selectedCell.selectedCells[0];
3072
3093
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3073
- return chunkS65QSO6T_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3094
+ return chunk7WWINBGF_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3074
3095
  })();
3075
3096
  return /* @__PURE__ */ jsxRuntime.jsx(
3076
3097
  TableResizeOverlay,
@@ -3091,9 +3112,9 @@ function renderTableFromTableData(element, textStyle, options) {
3091
3112
  {
3092
3113
  className: "w-full h-full border-collapse table-fixed",
3093
3114
  style: {
3094
- fontFamily: chunkS65QSO6T_js.DEFAULT_FONT_FAMILY,
3115
+ fontFamily: chunk7WWINBGF_js.DEFAULT_FONT_FAMILY,
3095
3116
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3096
- ...chunkS65QSO6T_js.tableContainerCss(tableData)
3117
+ ...chunk7WWINBGF_js.tableContainerCss(tableData)
3097
3118
  },
3098
3119
  children: [
3099
3120
  tableData.columnWidths.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: tableData.columnWidths.map((w, ci) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3112,7 +3133,7 @@ function renderTableFromTableData(element, textStyle, options) {
3112
3133
  return null;
3113
3134
  }
3114
3135
  const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
3115
- const isInMultiSelection = chunkS65QSO6T_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3136
+ const isInMultiSelection = chunk7WWINBGF_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3116
3137
  const isCellEditing = isCellSelected && selectedCell?.isEditing;
3117
3138
  const diag = getCellDiagonalBorders2(
3118
3139
  cell.style,
@@ -3141,7 +3162,7 @@ function renderTableFromTableData(element, textStyle, options) {
3141
3162
  }
3142
3163
  event.stopPropagation();
3143
3164
  if (event.shiftKey && selectedCell) {
3144
- const rect = chunkS65QSO6T_js.computeSelectionRect(
3165
+ const rect = chunk7WWINBGF_js.computeSelectionRect(
3145
3166
  selectedCell.rowIndex,
3146
3167
  selectedCell.columnIndex,
3147
3168
  rowIndex,
@@ -3151,7 +3172,7 @@ function renderTableFromTableData(element, textStyle, options) {
3151
3172
  options?.onSelectCell?.({
3152
3173
  rowIndex: selectedCell.rowIndex,
3153
3174
  columnIndex: selectedCell.columnIndex,
3154
- selectedCells: chunkS65QSO6T_js.rectToCells(rect)
3175
+ selectedCells: chunk7WWINBGF_js.rectToCells(rect)
3155
3176
  });
3156
3177
  } else {
3157
3178
  options?.onSelectCell?.({
@@ -3212,10 +3233,10 @@ function renderTableElement(element, textStyle, options) {
3212
3233
  if (tableEl2.tableData && tableEl2.tableData.rows.length > 0) {
3213
3234
  return renderTableFromTableData(tableEl2, textStyle, options);
3214
3235
  }
3215
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkNXGUR2DO_js.translationsEn["pptx.table.title"] });
3236
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkI4D6JQOI_js.translationsEn["pptx.table.title"] });
3216
3237
  }
3217
3238
  const selectedCell = options?.selectedCell || null;
3218
- const isEditable = Boolean(options?.editable) && chunkS65QSO6T_js.canDrillDown(element);
3239
+ const isEditable = Boolean(options?.editable) && chunk7WWINBGF_js.canDrillDown(element);
3219
3240
  const hasCellSelectionHandler = typeof options?.onSelectCell === "function";
3220
3241
  const tableEl = element;
3221
3242
  const xmlSelectionRect = (() => {
@@ -3227,7 +3248,7 @@ function renderTableElement(element, textStyle, options) {
3227
3248
  }
3228
3249
  const first = selectedCell.selectedCells[0];
3229
3250
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3230
- return chunkS65QSO6T_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3251
+ return chunk7WWINBGF_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3231
3252
  })();
3232
3253
  const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
3233
3254
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -3249,9 +3270,9 @@ function renderTableElement(element, textStyle, options) {
3249
3270
  {
3250
3271
  className: "w-full h-full border-collapse table-fixed",
3251
3272
  style: {
3252
- fontFamily: chunkS65QSO6T_js.DEFAULT_FONT_FAMILY,
3273
+ fontFamily: chunk7WWINBGF_js.DEFAULT_FONT_FAMILY,
3253
3274
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3254
- ...chunkS65QSO6T_js.tableContainerCss(tableEl.tableData)
3275
+ ...chunk7WWINBGF_js.tableContainerCss(tableEl.tableData)
3255
3276
  },
3256
3277
  children: [
3257
3278
  parsedTable.columnPercentages.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((percentage, columnIndex) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3308,7 +3329,7 @@ function renderTableElement(element, textStyle, options) {
3308
3329
  color: textStyle.color,
3309
3330
  ...bandStyle,
3310
3331
  ...xmlCellStyle,
3311
- ...tdCellOverride ? chunkS65QSO6T_js.cellStyleToCss(tdCellOverride) : void 0,
3332
+ ...tdCellOverride ? chunk7WWINBGF_js.cellStyleToCss(tdCellOverride) : void 0,
3312
3333
  ...diag ? { position: "relative" } : void 0
3313
3334
  };
3314
3335
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3318,7 +3339,7 @@ function renderTableElement(element, textStyle, options) {
3318
3339
  "border px-1 py-0.5 align-top",
3319
3340
  isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
3320
3341
  selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
3321
- chunkS65QSO6T_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3342
+ chunk7WWINBGF_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3322
3343
  ),
3323
3344
  colSpan,
3324
3345
  rowSpan: rSpan,
@@ -3329,7 +3350,7 @@ function renderTableElement(element, textStyle, options) {
3329
3350
  }
3330
3351
  event.stopPropagation();
3331
3352
  if (event.shiftKey && selectedCell && tableEl.tableData) {
3332
- const rect = chunkS65QSO6T_js.computeSelectionRect(
3353
+ const rect = chunk7WWINBGF_js.computeSelectionRect(
3333
3354
  selectedCell.rowIndex,
3334
3355
  selectedCell.columnIndex,
3335
3356
  rowIndex,
@@ -3339,7 +3360,7 @@ function renderTableElement(element, textStyle, options) {
3339
3360
  options?.onSelectCell?.({
3340
3361
  rowIndex: selectedCell.rowIndex,
3341
3362
  columnIndex: selectedCell.columnIndex,
3342
- selectedCells: chunkS65QSO6T_js.rectToCells(rect)
3363
+ selectedCells: chunk7WWINBGF_js.rectToCells(rect)
3343
3364
  });
3344
3365
  } else {
3345
3366
  options?.onSelectCell?.({
@@ -3398,23 +3419,23 @@ function renderTableElement(element, textStyle, options) {
3398
3419
  );
3399
3420
  }
3400
3421
  function partAttrs(part) {
3401
- return part ? chunkS65QSO6T_js.chartPartToAttrs(part) : void 0;
3422
+ return part ? chunk7WWINBGF_js.chartPartToAttrs(part) : void 0;
3402
3423
  }
3403
3424
  function resolveReactPalette(chartData) {
3404
3425
  if (chartData.colorPalette && chartData.colorPalette.length > 0) {
3405
3426
  return chartData.colorPalette;
3406
3427
  }
3407
- return [...chunkS65QSO6T_js.getChartStylePalette(chartData.style?.styleId)];
3428
+ return [...chunk7WWINBGF_js.getChartStylePalette(chartData.style?.styleId)];
3408
3429
  }
3409
3430
  function buildReactChartViewModel(element) {
3410
3431
  if (element.type !== "chart" || !element.chartData) {
3411
- return chunkS65QSO6T_js.buildChartViewModel(element);
3432
+ return chunk7WWINBGF_js.buildChartViewModel(element);
3412
3433
  }
3413
3434
  const palette = resolveReactPalette(element.chartData), themedElement = {
3414
3435
  ...element,
3415
3436
  chartData: { ...element.chartData, colorPalette: palette }
3416
3437
  };
3417
- return chunkS65QSO6T_js.buildChartViewModel(themedElement);
3438
+ return chunk7WWINBGF_js.buildChartViewModel(themedElement);
3418
3439
  }
3419
3440
  function renderPrimitive(prim, key) {
3420
3441
  switch (prim.kind) {
@@ -3445,6 +3466,7 @@ function renderPrimitive(prim, key) {
3445
3466
  fill: p.fill,
3446
3467
  stroke: p.stroke ?? "none",
3447
3468
  strokeWidth: p.strokeWidth ?? 0,
3469
+ strokeDasharray: p.dashArray,
3448
3470
  fillOpacity: p.opacity ?? 1,
3449
3471
  ...partAttrs(p.part),
3450
3472
  children: p.title !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: p.title }) : null
@@ -3565,7 +3587,7 @@ function renderText(t, key) {
3565
3587
  );
3566
3588
  }
3567
3589
  function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3568
- const legendItems = chunkS65QSO6T_js.computeChartLegendLayout(vm);
3590
+ const legendItems = chunk7WWINBGF_js.computeChartLegendLayout(vm);
3569
3591
  return /* @__PURE__ */ jsxRuntime.jsxs(
3570
3592
  "svg",
3571
3593
  {
@@ -3705,17 +3727,17 @@ function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3705
3727
  }
3706
3728
  function renderChartElement(element) {
3707
3729
  if (element.type !== "chart") {
3708
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkNXGUR2DO_js.translationsEn["pptx.chart.heading"] });
3730
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkI4D6JQOI_js.translationsEn["pptx.chart.heading"] });
3709
3731
  }
3710
3732
  const chartData = element.chartData;
3711
3733
  if (!chartData || chartData.series.length === 0) {
3712
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkNXGUR2DO_js.translationsEn["pptx.chart.heading"] });
3734
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkI4D6JQOI_js.translationsEn["pptx.chart.heading"] });
3713
3735
  }
3714
- const kind = chunkS65QSO6T_js.resolveChartKind(chartData.chartType ?? "bar");
3736
+ const kind = chunk7WWINBGF_js.resolveChartKind(chartData.chartType ?? "bar");
3715
3737
  return renderChartViewModel(
3716
3738
  element.id,
3717
3739
  buildReactChartViewModel(element),
3718
- chunkS65QSO6T_js.chartPreserveAspectRatio(kind)
3740
+ chunk7WWINBGF_js.chartPreserveAspectRatio(kind)
3719
3741
  );
3720
3742
  }
3721
3743
 
@@ -3735,14 +3757,14 @@ function buildNotesPdf(pages) {
3735
3757
  notes: page.notes,
3736
3758
  slideNumber: page.slideNumber
3737
3759
  }));
3738
- const bytes = chunkS65QSO6T_js.buildNotesPdfBytes(images, meta);
3760
+ const bytes = chunk7WWINBGF_js.buildNotesPdfBytes(images, meta);
3739
3761
  const blob = new Blob([bytes], { type: "application/pdf" });
3740
3762
  return URL.createObjectURL(blob);
3741
3763
  }
3742
3764
 
3743
3765
  // src/viewer/utils/pdf-builder-slides.ts
3744
3766
  function buildPdfFromTiledImageData(pages) {
3745
- const bytes = chunkS65QSO6T_js.buildTiledSlidesPdfBytes(pages);
3767
+ const bytes = chunk7WWINBGF_js.buildTiledSlidesPdfBytes(pages);
3746
3768
  const blob = new Blob([bytes], { type: "application/pdf" });
3747
3769
  return URL.createObjectURL(blob);
3748
3770
  }
@@ -3751,7 +3773,7 @@ function buildPdfFromTiledImageData(pages) {
3751
3773
  var activePreview = null;
3752
3774
  function startPreviewAnimation(elementId, preset, options) {
3753
3775
  stopPreviewAnimation();
3754
- const descriptor = chunkS65QSO6T_js.buildPreviewAnimation(preset, options);
3776
+ const descriptor = chunk7WWINBGF_js.buildPreviewAnimation(preset, options);
3755
3777
  if (!descriptor) {
3756
3778
  return;
3757
3779
  }
@@ -3764,7 +3786,7 @@ function startMotionPathPreview(elementId, path, options) {
3764
3786
  return;
3765
3787
  }
3766
3788
  const stage = domEl.offsetParent;
3767
- const descriptor = chunkS65QSO6T_js.buildMotionPathPreview({
3789
+ const descriptor = chunk7WWINBGF_js.buildMotionPathPreview({
3768
3790
  path,
3769
3791
  slideWidth: stage?.offsetWidth || DEFAULT_PREVIEW_SLIDE_WIDTH,
3770
3792
  slideHeight: stage?.offsetHeight || DEFAULT_PREVIEW_SLIDE_HEIGHT,