pptx-react-viewer 4.5.0 → 4.7.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 (137) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +34 -33
  3. package/dist/{AiChatPanel-P2N6X2KB.js → AiChatPanel-3YILWCBX.js} +28 -28
  4. package/dist/AiChatPanel-3YILWCBX.js.br +0 -0
  5. package/dist/AiChatPanel-3YILWCBX.js.gz +0 -0
  6. package/dist/{AiChatPanel-HXGCZPUX.mjs → AiChatPanel-X2MVL5UP.mjs} +4 -4
  7. package/dist/AiChatPanel-X2MVL5UP.mjs.br +0 -0
  8. package/dist/AiChatPanel-X2MVL5UP.mjs.gz +0 -0
  9. package/dist/{Model3DScene-PIFMH2TU.js → Model3DScene-G7P6ZAIO.js} +2 -2
  10. package/dist/Model3DScene-G7P6ZAIO.js.br +0 -0
  11. package/dist/Model3DScene-G7P6ZAIO.js.gz +0 -0
  12. package/dist/{Model3DScene-QXMMJRV3.mjs → Model3DScene-QFWI5CEE.mjs} +1 -1
  13. package/dist/Model3DScene-QFWI5CEE.mjs.br +0 -0
  14. package/dist/Model3DScene-QFWI5CEE.mjs.gz +0 -0
  15. package/dist/{chunk-T35BGKZG.js → chunk-2BM4GBFZ.js} +5 -5
  16. package/dist/chunk-2BM4GBFZ.js.br +0 -0
  17. package/dist/chunk-2BM4GBFZ.js.gz +0 -0
  18. package/dist/{chunk-ZF5S3HHW.mjs → chunk-5J6NW3YS.mjs} +55 -28
  19. package/dist/chunk-5J6NW3YS.mjs.br +0 -0
  20. package/dist/chunk-5J6NW3YS.mjs.gz +0 -0
  21. package/dist/{chunk-LYZQLV7R.js → chunk-AQIXKTAT.js} +13881 -8722
  22. package/dist/chunk-AQIXKTAT.js.br +0 -0
  23. package/dist/chunk-AQIXKTAT.js.gz +0 -0
  24. package/dist/{chunk-DX2JCSQ4.mjs → chunk-E5OIDWHO.mjs} +1 -1
  25. package/dist/chunk-E5OIDWHO.mjs.br +0 -0
  26. package/dist/chunk-E5OIDWHO.mjs.gz +0 -0
  27. package/dist/{chunk-6FVYG27J.js → chunk-FYAOOACZ.js} +241 -214
  28. package/dist/chunk-FYAOOACZ.js.br +0 -0
  29. package/dist/chunk-FYAOOACZ.js.gz +0 -0
  30. package/dist/{chunk-PRXJ3J5W.mjs → chunk-OECUSL2B.mjs} +129 -311
  31. package/dist/chunk-OECUSL2B.mjs.br +0 -0
  32. package/dist/chunk-OECUSL2B.mjs.gz +0 -0
  33. package/dist/{chunk-VZNIVS3X.mjs → chunk-QLDHUKH2.mjs} +13808 -8718
  34. package/dist/chunk-QLDHUKH2.mjs.br +0 -0
  35. package/dist/chunk-QLDHUKH2.mjs.gz +0 -0
  36. package/dist/{chunk-Y4VRYQQS.js → chunk-SR7ETIBF.js} +931 -1112
  37. package/dist/chunk-SR7ETIBF.js.br +0 -0
  38. package/dist/chunk-SR7ETIBF.js.gz +0 -0
  39. package/dist/{chunk-IDV2ITXM.mjs → chunk-UBYFLXAU.mjs} +1383 -208
  40. package/dist/chunk-UBYFLXAU.mjs.br +0 -0
  41. package/dist/chunk-UBYFLXAU.mjs.gz +0 -0
  42. package/dist/{chunk-UMQV2432.js → chunk-UIAU3NR2.js} +45 -0
  43. package/dist/chunk-UIAU3NR2.js.br +0 -0
  44. package/dist/chunk-UIAU3NR2.js.gz +0 -0
  45. package/dist/{chunk-UZFCFYK6.js → chunk-VF4RA27Q.js} +3245 -2070
  46. package/dist/chunk-VF4RA27Q.js.br +0 -0
  47. package/dist/chunk-VF4RA27Q.js.gz +0 -0
  48. package/dist/{chunk-APAVAD2A.mjs → chunk-WIEBQGQI.mjs} +45 -0
  49. package/dist/chunk-WIEBQGQI.mjs.br +0 -0
  50. package/dist/chunk-WIEBQGQI.mjs.gz +0 -0
  51. package/dist/i18n/de.cjs +71 -21
  52. package/dist/i18n/de.cjs.br +0 -0
  53. package/dist/i18n/de.cjs.gz +0 -0
  54. package/dist/i18n/de.mjs +71 -21
  55. package/dist/i18n/de.mjs.br +0 -0
  56. package/dist/i18n/de.mjs.gz +0 -0
  57. package/dist/i18n/es.cjs +71 -21
  58. package/dist/i18n/es.cjs.br +0 -0
  59. package/dist/i18n/es.cjs.gz +0 -0
  60. package/dist/i18n/es.mjs +71 -21
  61. package/dist/i18n/es.mjs.br +0 -0
  62. package/dist/i18n/es.mjs.gz +0 -0
  63. package/dist/i18n/fr.cjs +71 -21
  64. package/dist/i18n/fr.cjs.br +0 -0
  65. package/dist/i18n/fr.cjs.gz +0 -0
  66. package/dist/i18n/fr.mjs +71 -21
  67. package/dist/i18n/fr.mjs.br +0 -0
  68. package/dist/i18n/fr.mjs.gz +0 -0
  69. package/dist/i18n/zh-CN.cjs +49 -4
  70. package/dist/i18n/zh-CN.cjs.br +0 -0
  71. package/dist/i18n/zh-CN.cjs.gz +0 -0
  72. package/dist/i18n/zh-CN.mjs +49 -4
  73. package/dist/i18n/zh-CN.mjs.br +0 -0
  74. package/dist/i18n/zh-CN.mjs.gz +0 -0
  75. package/dist/i18n.js +4 -4
  76. package/dist/i18n.js.br +0 -0
  77. package/dist/i18n.js.gz +0 -0
  78. package/dist/i18n.mjs +1 -1
  79. package/dist/i18n.mjs.br +0 -0
  80. package/dist/i18n.mjs.gz +0 -0
  81. package/dist/index.d.ts +438 -13
  82. package/dist/index.js +105 -49
  83. package/dist/index.js.br +0 -0
  84. package/dist/index.js.gz +0 -0
  85. package/dist/index.mjs +6 -6
  86. package/dist/index.mjs.br +0 -0
  87. package/dist/index.mjs.gz +0 -0
  88. package/dist/internals.d.ts +501 -15
  89. package/dist/internals.js +105 -105
  90. package/dist/internals.js.br +0 -0
  91. package/dist/internals.js.gz +0 -0
  92. package/dist/internals.mjs +4 -4
  93. package/dist/internals.mjs.br +0 -0
  94. package/dist/internals.mjs.gz +0 -0
  95. package/dist/pptx-viewer.css +1 -1
  96. package/dist/pptx-viewer.css.br +0 -0
  97. package/dist/pptx-viewer.css.gz +0 -0
  98. package/dist/viewer/index.d.ts +515 -12
  99. package/dist/viewer/index.js +27 -27
  100. package/dist/viewer/index.js.br +0 -0
  101. package/dist/viewer/index.js.gz +0 -0
  102. package/dist/viewer/index.mjs +6 -6
  103. package/dist/viewer/index.mjs.br +3 -4
  104. package/dist/viewer/index.mjs.gz +0 -0
  105. package/package.json +1 -1
  106. package/dist/AiChatPanel-HXGCZPUX.mjs.br +0 -0
  107. package/dist/AiChatPanel-HXGCZPUX.mjs.gz +0 -0
  108. package/dist/AiChatPanel-P2N6X2KB.js.br +0 -0
  109. package/dist/AiChatPanel-P2N6X2KB.js.gz +0 -0
  110. package/dist/Model3DScene-PIFMH2TU.js.br +0 -0
  111. package/dist/Model3DScene-PIFMH2TU.js.gz +0 -0
  112. package/dist/Model3DScene-QXMMJRV3.mjs.br +0 -0
  113. package/dist/Model3DScene-QXMMJRV3.mjs.gz +0 -0
  114. package/dist/chunk-6FVYG27J.js.br +0 -0
  115. package/dist/chunk-6FVYG27J.js.gz +0 -0
  116. package/dist/chunk-APAVAD2A.mjs.br +0 -0
  117. package/dist/chunk-APAVAD2A.mjs.gz +0 -0
  118. package/dist/chunk-DX2JCSQ4.mjs.br +0 -0
  119. package/dist/chunk-DX2JCSQ4.mjs.gz +0 -0
  120. package/dist/chunk-IDV2ITXM.mjs.br +0 -0
  121. package/dist/chunk-IDV2ITXM.mjs.gz +0 -0
  122. package/dist/chunk-LYZQLV7R.js.br +0 -0
  123. package/dist/chunk-LYZQLV7R.js.gz +0 -0
  124. package/dist/chunk-PRXJ3J5W.mjs.br +0 -0
  125. package/dist/chunk-PRXJ3J5W.mjs.gz +0 -0
  126. package/dist/chunk-T35BGKZG.js.br +0 -0
  127. package/dist/chunk-T35BGKZG.js.gz +0 -0
  128. package/dist/chunk-UMQV2432.js.br +0 -0
  129. package/dist/chunk-UMQV2432.js.gz +0 -0
  130. package/dist/chunk-UZFCFYK6.js.br +0 -0
  131. package/dist/chunk-UZFCFYK6.js.gz +0 -0
  132. package/dist/chunk-VZNIVS3X.mjs.br +0 -0
  133. package/dist/chunk-VZNIVS3X.mjs.gz +0 -0
  134. package/dist/chunk-Y4VRYQQS.js.br +0 -0
  135. package/dist/chunk-Y4VRYQQS.js.gz +0 -0
  136. package/dist/chunk-ZF5S3HHW.mjs.br +0 -0
  137. package/dist/chunk-ZF5S3HHW.mjs.gz +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkLYZQLV7R_js = require('./chunk-LYZQLV7R.js');
4
- var chunkUMQV2432_js = require('./chunk-UMQV2432.js');
3
+ var chunkAQIXKTAT_js = require('./chunk-AQIXKTAT.js');
4
+ var chunkUIAU3NR2_js = require('./chunk-UIAU3NR2.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 chunkLYZQLV7R_js.getAnimationInitialStyle(preset, nativeAnimation);
18
+ return chunkAQIXKTAT_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 chunkLYZQLV7R_js.cloneHistorySnapshot(snapshot);
26
+ return chunkAQIXKTAT_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 = chunkLYZQLV7R_js.VIEWER_SHORTCUT_REFERENCE;
64
+ var SHORTCUT_REFERENCE_ITEMS = chunkAQIXKTAT_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 = chunkLYZQLV7R_js.SHAPE_PRESET_DEFS.map(
92
+ var SHAPE_PRESETS = chunkAQIXKTAT_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 = chunkLYZQLV7R_js.STROKE_DASH_OPTIONS;
117
+ var STROKE_DASH_OPTIONS2 = chunkAQIXKTAT_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 (!chunkLYZQLV7R_js.hasShapeProperties(element)) {
226
+ if (!chunkAQIXKTAT_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 (!chunkLYZQLV7R_js.hasShapeProperties(element)) {
235
+ if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
236
236
  return void 0;
237
237
  }
238
- const geometry = chunkLYZQLV7R_js.resolveShapeGeometry(element);
238
+ const geometry = chunkAQIXKTAT_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 = chunkLYZQLV7R_js.getImageFitStyle(element);
246
- const counterTransform = chunkLYZQLV7R_js.getImageFillCounterTransform(element, Boolean(fit.transform));
245
+ const fit = chunkAQIXKTAT_js.getImageFitStyle(element);
246
+ const counterTransform = chunkAQIXKTAT_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 = chunkLYZQLV7R_js.hasShapeProperties(element) ? chunkLYZQLV7R_js.getComputedFillStyle(element) : void 0;
265
+ const fill = chunkAQIXKTAT_js.hasShapeProperties(element) ? chunkAQIXKTAT_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 (!chunkLYZQLV7R_js.isImageLikeElement(element)) {
278
+ if (!chunkAQIXKTAT_js.isImageLikeElement(element)) {
279
279
  return void 0;
280
280
  }
281
- return chunkLYZQLV7R_js.getCropShapeClipPath(element.cropShape, element.width, element.height);
281
+ return chunkAQIXKTAT_js.getCropShapeClipPath(element.cropShape, element.width, element.height);
282
282
  }
283
283
  function getImageTilingStyle2(element, nativeSize) {
284
- return chunkLYZQLV7R_js.getImageTilingStyle(element, nativeSize);
284
+ return chunkAQIXKTAT_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" } : chunkLYZQLV7R_js.getImageFitStyle(element),
416
+ style: isFullScreen ? { objectFit: "cover" } : chunkAQIXKTAT_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 } = chunkLYZQLV7R_js.mediaPlaybackAttributes({
473
+ const { volume: playbackVolume, playbackRate } = chunkAQIXKTAT_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 chunkLYZQLV7R_js.scheduleMediaTrimAndFade(el, {
521
+ return chunkAQIXKTAT_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 (chunkLYZQLV7R_js.registerCrossSlideAudio(element, dataUrl)) {
542
+ if (chunkAQIXKTAT_js.registerCrossSlideAudio(element, dataUrl)) {
543
543
  return;
544
544
  }
545
545
  }
@@ -571,7 +571,7 @@ 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
- chunkLYZQLV7R_js.shouldShowMediaFullscreenStopButton({
574
+ chunkAQIXKTAT_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 : chunkUMQV2432_js.translationsEn[key];
591
+ return key === void 0 ? void 0 : chunkUIAU3NR2_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
- ...{ [chunkLYZQLV7R_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
627
+ ...{ [chunkAQIXKTAT_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
628
628
  children: [
629
629
  /* @__PURE__ */ jsxRuntime.jsx(
630
630
  FallbackIcon,
631
631
  {
632
- paths: chunkLYZQLV7R_js.mediaFallbackIcon(visual, element.mediaType),
632
+ paths: chunkAQIXKTAT_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(chunkLYZQLV7R_js.mediaFallbackLabelKey(visual, element.mediaType)) })
637
+ isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkAQIXKTAT_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
- ...{ [chunkLYZQLV7R_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
654
+ ...{ [chunkAQIXKTAT_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
655
655
  children: [
656
656
  /* @__PURE__ */ jsxRuntime.jsx(
657
657
  FallbackIcon,
658
658
  {
659
- paths: chunkLYZQLV7R_js.mediaFallbackIcon(visual, element.mediaType),
659
+ paths: chunkAQIXKTAT_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(chunkLYZQLV7R_js.mediaFallbackLabelKey(visual, element.mediaType)) })
664
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkAQIXKTAT_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 = chunkLYZQLV7R_js.mediaFallbackVisual(surface, {
674
+ const visual = chunkAQIXKTAT_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 ? chunkUMQV2432_js.translationsEn["pptx.media.posterAlt"] : chunkUMQV2432_js.translationsEn["pptx.media.videoPosterAlt"],
684
+ alt: visual.dimPoster ? chunkUIAU3NR2_js.translationsEn["pptx.media.posterAlt"] : chunkUIAU3NR2_js.translationsEn["pptx.media.videoPosterAlt"],
685
685
  className: `w-full h-full${visual.dimPoster ? " opacity-50" : ""}`,
686
- style: chunkLYZQLV7R_js.getImageFitStyle(element)
686
+ style: chunkAQIXKTAT_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: chunkUMQV2432_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: chunkUIAU3NR2_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 = chunkLYZQLV7R_js.mediaPlaybackAttributes(element).loop;
704
+ const shouldLoop = chunkAQIXKTAT_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 = chunkLYZQLV7R_js.getOnlineVideoEmbed(element);
717
+ const onlineVideo = chunkAQIXKTAT_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: chunkUMQV2432_js.translationsEn["pptx.media.onlineVideoTitle"],
723
+ title: chunkUIAU3NR2_js.translationsEn["pptx.media.onlineVideoTitle"],
724
724
  className: "w-full h-full border-0 pointer-events-auto",
725
- allow: chunkLYZQLV7R_js.ONLINE_VIDEO_IFRAME_ALLOW,
725
+ allow: chunkAQIXKTAT_js.ONLINE_VIDEO_IFRAME_ALLOW,
726
726
  allowFullScreen: true,
727
- sandbox: chunkLYZQLV7R_js.ONLINE_VIDEO_IFRAME_SANDBOX
727
+ sandbox: chunkAQIXKTAT_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: chunkUMQV2432_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: chunkUIAU3NR2_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 chunkLYZQLV7R_js.buildTextBlockStyle(element, { fallbackColor });
801
+ return chunkAQIXKTAT_js.buildTextBlockStyle(element, { fallbackColor });
802
802
  }
803
803
 
804
804
  // src/viewer/utils/text-layout.tsx
805
805
  function getTextLayoutStyle(element) {
806
- if (!chunkLYZQLV7R_js.hasTextProperties(element)) {
806
+ if (!chunkAQIXKTAT_js.hasTextProperties(element)) {
807
807
  return {};
808
808
  }
809
- const writingMode = chunkLYZQLV7R_js.toCssWritingMode(element.textStyle?.textDirection);
810
- const textOrientation = chunkLYZQLV7R_js.toCssTextOrientation(element.textStyle?.textDirection);
811
- const verticalDirection = chunkLYZQLV7R_js.toCssVerticalDirection(element.textStyle?.textDirection);
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);
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 = chunkLYZQLV7R_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
814
+ const hasParagraphIndents = chunkAQIXKTAT_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 = chunkLYZQLV7R_js.buildTextBodyLayoutStyle(element);
821
+ const bodyLayoutStyle = chunkAQIXKTAT_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 chunkLYZQLV7R_js.buildTextBody3DSceneStyle(textStyle, elementSize);
851
+ return chunkAQIXKTAT_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}${chunkLYZQLV7R_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1036
+ const paraKey = `${elementId}${chunkAQIXKTAT_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 = chunkLYZQLV7R_js.buildTextBuildSpec(
1042
+ const spec = chunkAQIXKTAT_js.buildTextBuildSpec(
1043
1043
  elementId,
1044
1044
  paraIndex,
1045
1045
  paraRuns.map((run) => ({ text: run.text, style: run })),
@@ -1057,7 +1057,7 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1057
1057
  "span",
1058
1058
  {
1059
1059
  "data-anim-id": span.animId,
1060
- style: chunkLYZQLV7R_js.textBuildSpanStyle(span),
1060
+ style: chunkAQIXKTAT_js.textBuildSpanStyle(span),
1061
1061
  children: content
1062
1062
  },
1063
1063
  span.animId
@@ -1068,13 +1068,13 @@ function renderUnderlineWords(text, isUnderlineWords, wordDecoration, metric, ke
1068
1068
  if (!isUnderlineWords || !text) {
1069
1069
  return inner(text, keyPrefix, metric);
1070
1070
  }
1071
- const pieces = chunkLYZQLV7R_js.splitWordsForUnderline(text);
1071
+ const pieces = chunkAQIXKTAT_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 ? chunkLYZQLV7R_js.stripUnderlineDecoration(metric.nestedStyle) : void 0
1077
+ nestedStyle: metric.nestedStyle ? chunkAQIXKTAT_js.stripUnderlineDecoration(metric.nestedStyle) : void 0
1078
1078
  } : void 0;
1079
1079
  return pieces.map((piece, i) => {
1080
1080
  const key = `${keyPrefix}-u${i}`;
@@ -1107,7 +1107,7 @@ function makeSegmentPieceRenderer(needsScriptFonts, scriptFonts, baseFontFamily,
1107
1107
  );
1108
1108
  }
1109
1109
  function renderTabbedLine(line, ctx, keyPrefix, renderPiece, nestedStyle, underlineWords = false) {
1110
- const [lineLayout] = chunkLYZQLV7R_js.buildRunTabLines(
1110
+ const [lineLayout] = chunkAQIXKTAT_js.buildRunTabLines(
1111
1111
  line,
1112
1112
  ctx,
1113
1113
  nestedStyle,
@@ -1126,7 +1126,7 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
1126
1126
  if (!needsScriptFonts || !text) {
1127
1127
  return text;
1128
1128
  }
1129
- const pieces = chunkLYZQLV7R_js.splitRunByScriptFont(
1129
+ const pieces = chunkAQIXKTAT_js.splitRunByScriptFont(
1130
1130
  text,
1131
1131
  scriptFonts,
1132
1132
  baseFontFamily,
@@ -1143,7 +1143,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
1143
1143
  if (!metric || !text) {
1144
1144
  return inner(text, keyPrefix);
1145
1145
  }
1146
- const pieces = chunkLYZQLV7R_js.splitRunForMetrics(text, metric.font);
1146
+ const pieces = chunkAQIXKTAT_js.splitRunForMetrics(text, metric.font);
1147
1147
  if (pieces.length <= 1) {
1148
1148
  return inner(text, keyPrefix);
1149
1149
  }
@@ -1152,7 +1152,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
1152
1152
  {
1153
1153
  style: {
1154
1154
  ...metric.nestedStyle,
1155
- letterSpacing: chunkLYZQLV7R_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1155
+ letterSpacing: chunkAQIXKTAT_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1156
1156
  },
1157
1157
  children: inner(piece.text, `${keyPrefix}-w${i}`)
1158
1158
  },
@@ -1228,8 +1228,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
1228
1228
  });
1229
1229
  }
1230
1230
  function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber, fontSize) {
1231
- const mathml = chunkLYZQLV7R_js.convertOmmlToMathMl(equationXml);
1232
- const safeMathml = mathml ? chunkLYZQLV7R_js.sanitizeMathMl(mathml) : "";
1231
+ const mathml = chunkAQIXKTAT_js.convertOmmlToMathMl(equationXml);
1232
+ const safeMathml = mathml ? chunkAQIXKTAT_js.sanitizeMathMl(mathml) : "";
1233
1233
  const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
1234
1234
  "span",
1235
1235
  {
@@ -1239,7 +1239,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
1239
1239
  },
1240
1240
  dangerouslySetInnerHTML: { __html: safeMathml }
1241
1241
  }
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: chunkUMQV2432_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: chunkUIAU3NR2_js.translationsEn["pptx.textSegment.equationFallback"] });
1243
1243
  if (equationNumber) {
1244
1244
  return /* @__PURE__ */ jsxRuntime.jsxs(
1245
1245
  "span",
@@ -1369,7 +1369,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1369
1369
  const segmentStyle = segment?.style ?? {};
1370
1370
  const textValue = run.text;
1371
1371
  const lines = textValue.split("\n");
1372
- const resolvedSegmentColor = chunkLYZQLV7R_js.normalizeHexColor(
1372
+ const resolvedSegmentColor = chunkAQIXKTAT_js.normalizeHexColor(
1373
1373
  segmentStyle.color || element.textStyle?.color,
1374
1374
  run.hyperlink ? HYPERLINK_COLOR : fallbackColor
1375
1375
  );
@@ -1377,22 +1377,22 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1377
1377
  const baselineFraction = rawBaseline === 0 ? 0 : Math.abs(rawBaseline) >= 1e3 ? rawBaseline / 1e5 : rawBaseline / 100;
1378
1378
  const baselineFontScale = baselineFraction !== 0 ? BASELINE_FONT_SCALE : 1;
1379
1379
  const rawFontSize = segmentStyle.fontSize || element.textStyle?.fontSize || DEFAULT_TEXT_FONT_SIZE;
1380
- const baseFontSize = chunkLYZQLV7R_js.scaleFontSizeForAutoFit(
1380
+ const baseFontSize = chunkAQIXKTAT_js.scaleFontSizeForAutoFit(
1381
1381
  rawFontSize,
1382
- chunkLYZQLV7R_js.resolveAutoFitFontScale(element.textStyle)
1382
+ chunkAQIXKTAT_js.resolveAutoFitFontScale(element.textStyle)
1383
1383
  );
1384
1384
  const baselineShift = baselineFraction !== 0 ? `${baselineFraction * baseFontSize}px` : void 0;
1385
- const fontKerning = chunkLYZQLV7R_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
1385
+ const fontKerning = chunkAQIXKTAT_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
1386
1386
  const scriptFallbackWins = Boolean(
1387
1387
  segmentStyle.scriptFallbackFont && segmentStyle.fontFamilyIsCascadeDefault
1388
1388
  );
1389
1389
  const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
1390
- const baseFontFamily = scriptFallbackWins ? chunkLYZQLV7R_js.getSubstituteFontFamily(segmentStyle.scriptFallbackFont) : rawFontFamily ? chunkLYZQLV7R_js.getSubstituteFontFamily(
1390
+ const baseFontFamily = scriptFallbackWins ? chunkAQIXKTAT_js.getSubstituteFontFamily(segmentStyle.scriptFallbackFont) : rawFontFamily ? chunkAQIXKTAT_js.getSubstituteFontFamily(
1391
1391
  rawFontFamily,
1392
- chunkLYZQLV7R_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1392
+ chunkAQIXKTAT_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1393
1393
  ) : DEFAULT_FONT_FAMILY2;
1394
- const scriptFonts = chunkLYZQLV7R_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
1395
- const needsScriptFonts = chunkLYZQLV7R_js.hasDistinctScriptFonts(scriptFonts);
1394
+ const scriptFonts = chunkAQIXKTAT_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
1395
+ const needsScriptFonts = chunkAQIXKTAT_js.hasDistinctScriptFonts(scriptFonts);
1396
1396
  const authoredLetterSpacing = typeof segmentStyle.characterSpacing === "number" && segmentStyle.characterSpacing !== 0 ? segmentStyle.characterSpacing / 100 * (96 / 72) : 0;
1397
1397
  const metricFont = {
1398
1398
  fontFamily: baseFontFamily,
@@ -1400,7 +1400,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1400
1400
  bold: Boolean(segmentStyle.bold),
1401
1401
  italic: Boolean(segmentStyle.italic)
1402
1402
  };
1403
- const nestedStyle = chunkLYZQLV7R_js.nestedTextDecorationStyle(run.style);
1403
+ const nestedStyle = chunkAQIXKTAT_js.nestedTextDecorationStyle(run.style);
1404
1404
  const metricContext = { font: metricFont, authoredPx: authoredLetterSpacing, nestedStyle };
1405
1405
  const spanStyle = { ...run.style };
1406
1406
  spanStyle.color = resolvedSegmentColor;
@@ -1408,11 +1408,11 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1408
1408
  spanStyle.fontFamily = baseFontFamily;
1409
1409
  spanStyle.verticalAlign = baselineShift;
1410
1410
  spanStyle.fontKerning = fontKerning;
1411
- spanStyle.letterSpacing = chunkLYZQLV7R_js.pieceLetterSpacing(
1411
+ spanStyle.letterSpacing = chunkAQIXKTAT_js.pieceLetterSpacing(
1412
1412
  authoredLetterSpacing,
1413
- chunkLYZQLV7R_js.resolveMetricTrackingPx(textValue, metricFont)
1413
+ chunkAQIXKTAT_js.resolveMetricTrackingPx(textValue, metricFont)
1414
1414
  );
1415
- const hollow = chunkLYZQLV7R_js.hollowTextFillStyle(segmentStyle, {
1415
+ const hollow = chunkAQIXKTAT_js.hollowTextFillStyle(segmentStyle, {
1416
1416
  color: resolvedSegmentColor,
1417
1417
  textStroke: typeof spanStyle.WebkitTextStroke === "string" ? spanStyle.WebkitTextStroke : void 0
1418
1418
  });
@@ -1424,10 +1424,10 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1424
1424
  spanStyle.direction = runRtl ? "rtl" : "ltr";
1425
1425
  spanStyle.unicodeBidi = runRtl !== ctx.paragraphRtl ? "bidi-override" : "embed";
1426
1426
  }
1427
- const isUnderlineWords = Boolean(segmentStyle.underline) && segmentStyle.underlineStyle === "words";
1427
+ const isUnderlineWords = chunkAQIXKTAT_js.splitsUnderlineIntoWords(segmentStyle);
1428
1428
  const wordDecoration = isUnderlineWords ? nestedStyle ?? run.underlineWordPieces?.find((piece) => piece.style)?.style : void 0;
1429
1429
  if (isUnderlineWords) {
1430
- const stripped = chunkLYZQLV7R_js.stripUnderlineDecoration(spanStyle);
1430
+ const stripped = chunkAQIXKTAT_js.stripUnderlineDecoration(spanStyle);
1431
1431
  spanStyle.textDecoration = stripped.textDecoration;
1432
1432
  delete spanStyle.textDecorationStyle;
1433
1433
  delete spanStyle.textDecorationThickness;
@@ -1443,13 +1443,14 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1443
1443
  scriptFonts,
1444
1444
  baseFontFamily,
1445
1445
  findHighlights,
1446
- chunkLYZQLV7R_js.buildTabContext(
1446
+ chunkAQIXKTAT_js.buildTabContext(
1447
1447
  element.textStyle?.tabStops,
1448
1448
  element.textStyle?.defaultTabSize,
1449
1449
  baseFontSize,
1450
1450
  baseFontFamily,
1451
1451
  Boolean(segmentStyle.bold),
1452
- Boolean(segmentStyle.italic)
1452
+ Boolean(segmentStyle.italic),
1453
+ { language: segmentStyle.language, rtl: ctx.paragraphRtl === true }
1453
1454
  ),
1454
1455
  metricContext,
1455
1456
  isUnderlineWords,
@@ -1475,14 +1476,14 @@ function renderSeededListRun(seed, runs, segments, context) {
1475
1476
  const segment = sourceRun ? segments[seed.segmentIndex] : { text: seed.text, style: seed.style };
1476
1477
  const resolvedSegment = {
1477
1478
  ...segment,
1478
- style: chunkLYZQLV7R_js.withInlineListDecorationDefaults(segment.style, context.element.textStyle)
1479
+ style: chunkAQIXKTAT_js.withInlineListDecorationDefaults(segment.style, context.element.textStyle)
1479
1480
  };
1480
- const decorationCss = chunkLYZQLV7R_js.segmentStyleToCss(
1481
+ const decorationCss = chunkAQIXKTAT_js.segmentStyleToCss(
1481
1482
  resolvedSegment,
1482
- chunkLYZQLV7R_js.resolveAutoFitFontScale(context.element.textStyle)
1483
+ chunkAQIXKTAT_js.resolveAutoFitFontScale(context.element.textStyle)
1483
1484
  );
1484
- chunkLYZQLV7R_js.applyUnderlineVariant(decorationCss, resolvedSegment);
1485
- const run = sourceRun ? { ...sourceRun, style: { ...sourceRun.style, ...chunkLYZQLV7R_js.nestedTextDecorationStyle(decorationCss) } } : {
1485
+ chunkAQIXKTAT_js.applyUnderlineVariant(decorationCss, resolvedSegment);
1486
+ const run = sourceRun ? { ...sourceRun, style: { ...sourceRun.style, ...chunkAQIXKTAT_js.nestedTextDecorationStyle(decorationCss) } } : {
1486
1487
  text: seed.text,
1487
1488
  style: decorationCss,
1488
1489
  segmentIndex: seed.segmentIndex
@@ -1497,7 +1498,7 @@ function renderSeededListRun(seed, runs, segments, context) {
1497
1498
  });
1498
1499
  }
1499
1500
  function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick, placeholderPrompt, inlineListSeed) {
1500
- if (!chunkLYZQLV7R_js.hasTextProperties(element)) {
1501
+ if (!chunkAQIXKTAT_js.hasTextProperties(element)) {
1501
1502
  return emptyFallback || null;
1502
1503
  }
1503
1504
  const segments = segmentOverrides ?? element.textSegments;
@@ -1507,7 +1508,7 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
1507
1508
  }
1508
1509
  return element.text || emptyFallback || "";
1509
1510
  }
1510
- const paragraphs = chunkLYZQLV7R_js.buildParagraphs(
1511
+ const paragraphs = chunkAQIXKTAT_js.buildParagraphs(
1511
1512
  element,
1512
1513
  fieldContext,
1513
1514
  segmentOverrides,
@@ -1653,13 +1654,13 @@ function renderBulletMarker(para, paraIndex, elementId) {
1653
1654
  );
1654
1655
  }
1655
1656
  function getDuotoneColors(element) {
1656
- if (!chunkLYZQLV7R_js.isImageLikeElement(element)) {
1657
+ if (!chunkAQIXKTAT_js.isImageLikeElement(element)) {
1657
1658
  return void 0;
1658
1659
  }
1659
1660
  return element.imageEffects?.duotone;
1660
1661
  }
1661
1662
  function buildLineShadowCss(element) {
1662
- if (!chunkLYZQLV7R_js.hasShapeProperties(element)) {
1663
+ if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
1663
1664
  return void 0;
1664
1665
  }
1665
1666
  const ss = element.shapeStyle;
@@ -1670,13 +1671,13 @@ function buildLineShadowCss(element) {
1670
1671
  const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
1671
1672
  const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
1672
1673
  const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
1673
- return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkLYZQLV7R_js.colorWithOpacity(
1674
- chunkLYZQLV7R_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1674
+ return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkAQIXKTAT_js.colorWithOpacity(
1675
+ chunkAQIXKTAT_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1675
1676
  opacity
1676
1677
  )}`;
1677
1678
  }
1678
1679
  function buildLineGlowFilter(element) {
1679
- if (!chunkLYZQLV7R_js.hasShapeProperties(element)) {
1680
+ if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
1680
1681
  return void 0;
1681
1682
  }
1682
1683
  const ss = element.shapeStyle;
@@ -1685,22 +1686,22 @@ function buildLineGlowFilter(element) {
1685
1686
  }
1686
1687
  const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
1687
1688
  const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
1688
- const glowCol = chunkLYZQLV7R_js.colorWithOpacity(chunkLYZQLV7R_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1689
+ const glowCol = chunkAQIXKTAT_js.colorWithOpacity(chunkAQIXKTAT_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1689
1690
  return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
1690
1691
  }
1691
1692
  function getDagDuotoneFilterId(elementId) {
1692
1693
  return `dag-duotone-${elementId}`;
1693
1694
  }
1694
1695
  function hasDagDuotoneEffect(element) {
1695
- if (!chunkLYZQLV7R_js.hasShapeProperties(element)) {
1696
+ if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
1696
1697
  return false;
1697
1698
  }
1698
1699
  return Boolean(element.shapeStyle?.dagDuotone);
1699
1700
  }
1700
1701
  function renderDagDuotoneSvgFilter(elementId, color1, color2) {
1701
1702
  const filterId = getDagDuotoneFilterId(elementId);
1702
- const c1 = chunkLYZQLV7R_js.hexToRgbUnit(color1);
1703
- const c2 = chunkLYZQLV7R_js.hexToRgbUnit(color2);
1703
+ const c1 = chunkAQIXKTAT_js.hexToRgbUnit(color1);
1704
+ const c2 = chunkAQIXKTAT_js.hexToRgbUnit(color2);
1704
1705
  const grayscaleMatrix = [
1705
1706
  0.2126,
1706
1707
  0.7152,
@@ -1744,7 +1745,7 @@ function renderDagDuotoneSvgFilter(elementId, color1, color2) {
1744
1745
 
1745
1746
  // src/viewer/utils/shape-visual-3d.ts
1746
1747
  function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
1747
- return chunkLYZQLV7R_js.build3DExtrusionData(
1748
+ return chunkAQIXKTAT_js.build3DExtrusionData(
1748
1749
  shape3d,
1749
1750
  scene3d,
1750
1751
  fillColor,
@@ -1753,7 +1754,7 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
1753
1754
  );
1754
1755
  }
1755
1756
  function apply3dEffects2(base, scene3d, shape3d, fillColorFallback, elementSize, elementId) {
1756
- chunkLYZQLV7R_js.apply3dEffects(
1757
+ chunkAQIXKTAT_js.apply3dEffects(
1757
1758
  base,
1758
1759
  scene3d,
1759
1760
  shape3d,
@@ -1768,11 +1769,11 @@ function rendersCustomVectorPath(element) {
1768
1769
  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;
1769
1770
  }
1770
1771
  function rendersWedgeCalloutVector(element) {
1771
- return element.type === "shape" && chunkLYZQLV7R_js.isWedgeCalloutPresetShape(element.shapeType);
1772
+ return element.type === "shape" && chunkAQIXKTAT_js.isWedgeCalloutPresetShape(element.shapeType);
1772
1773
  }
1773
1774
  function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _strokeColor, animatesFill, animatesStroke, parentGroupFill) {
1774
1775
  if (element.type === "group") {
1775
- const fx2 = chunkLYZQLV7R_js.getComputedEffectStyle(element);
1776
+ const fx2 = chunkAQIXKTAT_js.getComputedEffectStyle(element);
1776
1777
  const groupStyle = {};
1777
1778
  if (fx2.filter) {
1778
1779
  groupStyle.filter = fx2.filter;
@@ -1782,13 +1783,13 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1782
1783
  }
1783
1784
  return groupStyle;
1784
1785
  }
1785
- if (!chunkLYZQLV7R_js.hasShapeProperties(element)) {
1786
+ if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
1786
1787
  return {};
1787
1788
  }
1788
1789
  const ss = element.shapeStyle;
1789
- const fill = animatesFill ? void 0 : chunkLYZQLV7R_js.getComputedFillStyle(element, parentGroupFill);
1790
- const fx = chunkLYZQLV7R_js.getComputedEffectStyle(element);
1791
- const stroke = chunkLYZQLV7R_js.getComputedStrokeStyle(element);
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);
1792
1793
  const base = {
1793
1794
  // A gradient fill REPLACES the solid fill, it does not sit on top of it;
1794
1795
  // the whole precedence lives in shared's `getComputedFillStyle`.
@@ -1827,7 +1828,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1827
1828
  };
1828
1829
  Object.assign(
1829
1830
  base,
1830
- chunkLYZQLV7R_js.getAnimationColorBaseStyle(element, {
1831
+ chunkAQIXKTAT_js.getAnimationColorBaseStyle(element, {
1831
1832
  animatesFill,
1832
1833
  animatesStroke,
1833
1834
  parentGroupFill
@@ -1849,7 +1850,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1849
1850
  },
1850
1851
  element.id
1851
1852
  );
1852
- if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || chunkLYZQLV7R_js.isStrokeOnlyPresetElement(element)) {
1853
+ if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || chunkAQIXKTAT_js.isStrokeOnlyPresetElement(element)) {
1853
1854
  base.backgroundColor = "transparent";
1854
1855
  base.backgroundImage = void 0;
1855
1856
  base.borderWidth = void 0;
@@ -1863,7 +1864,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1863
1864
  if (rendersWedgeCalloutVector(element)) {
1864
1865
  return base;
1865
1866
  }
1866
- const geometry = chunkLYZQLV7R_js.resolveShapeGeometry(element);
1867
+ const geometry = chunkAQIXKTAT_js.resolveShapeGeometry(element);
1867
1868
  switch (geometry.kind) {
1868
1869
  case "bare":
1869
1870
  return { backgroundColor: "transparent", borderWidth: 0, borderStyle: "none" };
@@ -1887,7 +1888,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1887
1888
  }
1888
1889
  }
1889
1890
  function getConnectorPathGeometry2(element) {
1890
- return chunkLYZQLV7R_js.getConnectorPathGeometry(element);
1891
+ return chunkAQIXKTAT_js.getConnectorPathGeometry(element);
1891
1892
  }
1892
1893
  var ARROW_SIZE_SCALE = {
1893
1894
  sm: 0.6,
@@ -1956,11 +1957,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
1956
1957
  strokePaint,
1957
1958
  strokeWidth,
1958
1959
  dashArray,
1959
- lineCap: chunkLYZQLV7R_js.svgLineCap(shapeStyle?.lineCap),
1960
+ lineCap: chunkAQIXKTAT_js.svgLineCap(shapeStyle?.lineCap),
1960
1961
  lineJoin,
1961
1962
  miterLimit,
1962
- offsets: chunkLYZQLV7R_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
1963
- widths: chunkLYZQLV7R_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
1963
+ offsets: chunkAQIXKTAT_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
1964
+ widths: chunkAQIXKTAT_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
1964
1965
  };
1965
1966
  }
1966
1967
  function strokeStrands(d, keyBase, ctx) {
@@ -1983,12 +1984,12 @@ function strokeStrands(d, keyBase, ctx) {
1983
1984
  }
1984
1985
  function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false, gradient) {
1985
1986
  const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
1986
- const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkLYZQLV7R_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
1987
+ const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkAQIXKTAT_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
1987
1988
  const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
1988
- const gradientPaint = gradient ? chunkLYZQLV7R_js.svgGradientFillRef(gradient) : void 0;
1989
+ const gradientPaint = gradient ? chunkAQIXKTAT_js.svgGradientFillRef(gradient) : void 0;
1989
1990
  const nodes = [];
1990
1991
  if (subpaths && needsPerSubpath) {
1991
- const paints = chunkLYZQLV7R_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
1992
+ const paints = chunkAQIXKTAT_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
1992
1993
  paints.forEach((paint, idx) => {
1993
1994
  if (paint.fill !== "none") {
1994
1995
  const mode = subpaths[idx]?.fillMode;
@@ -2017,7 +2018,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2017
2018
  "path",
2018
2019
  {
2019
2020
  d: pathData,
2020
- fill: animatesFill ? "inherit" : gradientPaint ?? chunkLYZQLV7R_js.colorWithOpacity(fillColor, fillOpacity),
2021
+ fill: animatesFill ? "inherit" : gradientPaint ?? chunkAQIXKTAT_js.colorWithOpacity(fillColor, fillOpacity),
2021
2022
  stroke: "none",
2022
2023
  vectorEffect: "non-scaling-stroke"
2023
2024
  },
@@ -2033,7 +2034,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2033
2034
  "svg",
2034
2035
  {
2035
2036
  viewBox: `0 0 ${pathWidth} ${pathHeight}`,
2036
- className: "w-full h-full pointer-events-none",
2037
+ className: "absolute inset-0 w-full h-full pointer-events-none",
2037
2038
  preserveAspectRatio: "none",
2038
2039
  children: [
2039
2040
  animatesFill ? null : renderSvgGradientDefs(gradient),
@@ -2043,14 +2044,14 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2043
2044
  );
2044
2045
  }
2045
2046
  function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
2046
- if (!chunkLYZQLV7R_js.hasShapeProperties(element)) {
2047
+ if (!chunkAQIXKTAT_js.hasShapeProperties(element)) {
2047
2048
  return null;
2048
2049
  }
2049
2050
  const normalizedType = (element.shapeType || "").toLowerCase();
2050
- const fillPaint = animatesFill ? "inherit" : chunkLYZQLV7R_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2051
- const strokePaint = animatesStroke ? "inherit" : chunkLYZQLV7R_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2052
- const dashType = chunkLYZQLV7R_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2053
- const dashArray = chunkLYZQLV7R_js.getSvgStrokeDasharray(
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(
2054
2055
  dashType,
2055
2056
  Math.max(strokeWidth, 1),
2056
2057
  element.shapeStyle?.customDashSegments
@@ -2131,13 +2132,13 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2131
2132
  // container's `background-image` is suppressed for custom geometry, so
2132
2133
  // without this the shape fell back to the parser's representative solid
2133
2134
  // and lost every fade (issue #132).
2134
- chunkLYZQLV7R_js.buildSvgGradientDef(element.shapeStyle, element.id)
2135
+ chunkAQIXKTAT_js.buildSvgGradientDef(element.shapeStyle, element.id)
2135
2136
  );
2136
2137
  }
2137
- if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !chunkLYZQLV7R_js.buildStrokeOutline(element)) {
2138
+ if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !chunkAQIXKTAT_js.buildStrokeOutline(element)) {
2138
2139
  const width = Math.max(element.width, 1);
2139
2140
  const height = Math.max(element.height, 1);
2140
- const geometry = chunkLYZQLV7R_js.getPresetShapeVectorGeometry(
2141
+ const geometry = chunkAQIXKTAT_js.getPresetShapeVectorGeometry(
2141
2142
  element.shapeType || "rect",
2142
2143
  width,
2143
2144
  height,
@@ -2165,18 +2166,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2165
2166
  );
2166
2167
  }
2167
2168
  }
2168
- if (element.type === "shape" && chunkLYZQLV7R_js.isWedgeCalloutPresetShape(element.shapeType)) {
2169
+ if (element.type === "shape" && chunkAQIXKTAT_js.isWedgeCalloutPresetShape(element.shapeType)) {
2169
2170
  const width = Math.max(element.width, 1);
2170
2171
  const height = Math.max(element.height, 1);
2171
- const geometry = chunkLYZQLV7R_js.getPresetShapeVectorGeometry(
2172
+ const geometry = chunkAQIXKTAT_js.getPresetShapeVectorGeometry(
2172
2173
  element.shapeType,
2173
2174
  width,
2174
2175
  height,
2175
2176
  element.shapeAdjustments
2176
2177
  );
2177
2178
  if (geometry) {
2178
- const gradient = chunkLYZQLV7R_js.buildSvgGradientDef(element.shapeStyle, element.id);
2179
- const gradientPaint = gradient ? chunkLYZQLV7R_js.svgGradientFillRef(gradient) : void 0;
2179
+ const gradient = chunkAQIXKTAT_js.buildSvgGradientDef(element.shapeStyle, element.id);
2180
+ const gradientPaint = gradient ? chunkAQIXKTAT_js.svgGradientFillRef(gradient) : void 0;
2180
2181
  return /* @__PURE__ */ jsxRuntime.jsxs(
2181
2182
  "svg",
2182
2183
  {
@@ -2209,18 +2210,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2209
2210
  );
2210
2211
  }
2211
2212
  }
2212
- if (chunkLYZQLV7R_js.isCalloutShape(normalizedType)) {
2213
+ if (chunkAQIXKTAT_js.isCalloutShape(normalizedType)) {
2213
2214
  const width = Math.max(element.width, 1);
2214
2215
  const height = Math.max(element.height, 1);
2215
- const geometry = chunkLYZQLV7R_js.getCalloutLeaderLineGeometry(
2216
+ const geometry = chunkAQIXKTAT_js.getCalloutLeaderLineGeometry(
2216
2217
  normalizedType,
2217
2218
  width,
2218
2219
  height,
2219
2220
  element.shapeAdjustments
2220
2221
  );
2221
2222
  if (geometry && geometry.points.length >= 2) {
2222
- const leaderPath = chunkLYZQLV7R_js.buildCalloutLeaderLineSvgPath(geometry);
2223
- const bounds = chunkLYZQLV7R_js.getCalloutViewBoxBounds(width, height, geometry);
2223
+ const leaderPath = chunkAQIXKTAT_js.buildCalloutLeaderLineSvgPath(geometry);
2224
+ const bounds = chunkAQIXKTAT_js.getCalloutViewBoxBounds(width, height, geometry);
2224
2225
  const lineStroke = Math.max(strokeWidth, 1);
2225
2226
  const offsetLeft = bounds.minX;
2226
2227
  const offsetTop = bounds.minY;
@@ -2283,10 +2284,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2283
2284
  const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
2284
2285
  const endArrowL = element.shapeStyle?.connectorEndArrowLength;
2285
2286
  const compoundLine = element.shapeStyle?.compoundLine;
2286
- const connectorLineCap = chunkLYZQLV7R_js.svgLineCap(element.shapeStyle?.lineCap);
2287
+ const connectorLineCap = chunkAQIXKTAT_js.svgLineCap(element.shapeStyle?.lineCap);
2287
2288
  const hitTargetWidth = Math.max(strokeWidth * 3, 12);
2288
- const offsets = chunkLYZQLV7R_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2289
- const widths = chunkLYZQLV7R_js.getCompoundLineWidths(compoundLine, strokeWidth);
2289
+ const offsets = chunkAQIXKTAT_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2290
+ const widths = chunkAQIXKTAT_js.getCompoundLineWidths(compoundLine, strokeWidth);
2290
2291
  return /* @__PURE__ */ jsxRuntime.jsxs(
2291
2292
  "svg",
2292
2293
  {
@@ -2353,15 +2354,15 @@ function parseGradientFillCss(gradFill) {
2353
2354
  }
2354
2355
  const rawStops = stops.map((gs) => {
2355
2356
  const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
2356
- const color = chunkLYZQLV7R_js.parseDrawingColor(gs) ?? "#888888";
2357
- const opacity = chunkLYZQLV7R_js.parseDrawingColorOpacity(gs);
2357
+ const color = chunkAQIXKTAT_js.parseDrawingColor(gs) ?? "#888888";
2358
+ const opacity = chunkAQIXKTAT_js.parseDrawingColorOpacity(gs);
2358
2359
  return { position: pos, color, opacity };
2359
2360
  }).sort((a, b) => a.position - b.position);
2360
- const stopStrings = rawStops.map((s) => `${chunkLYZQLV7R_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
2361
+ const stopStrings = rawStops.map((s) => `${chunkAQIXKTAT_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
2361
2362
  const lin = gradFill["a:lin"];
2362
2363
  if (lin) {
2363
2364
  const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
2364
- const angleDeg = Math.round(chunkLYZQLV7R_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2365
+ const angleDeg = Math.round(chunkAQIXKTAT_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2365
2366
  return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
2366
2367
  }
2367
2368
  const path = gradFill["a:path"];
@@ -2375,7 +2376,7 @@ function parseGradientFillCss(gradFill) {
2375
2376
  b: Number.parseInt(String(fillToRectXml["@_b"] || "0"), 10) / 1e5
2376
2377
  } : void 0;
2377
2378
  if (pathType === "rect") {
2378
- return chunkLYZQLV7R_js.buildRectPathGradient(rawStops, void 0, fillToRect);
2379
+ return chunkAQIXKTAT_js.buildRectPathGradient(rawStops, void 0, fillToRect);
2379
2380
  }
2380
2381
  let cx = 50;
2381
2382
  let cy = 50;
@@ -2397,8 +2398,8 @@ function parsePatternFillCss(pattFill) {
2397
2398
  if (!pattFill) {
2398
2399
  return void 0;
2399
2400
  }
2400
- const fgColor = chunkLYZQLV7R_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2401
- const bgColor = chunkLYZQLV7R_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2401
+ const fgColor = chunkAQIXKTAT_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2402
+ const bgColor = chunkAQIXKTAT_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2402
2403
  const preset = String(pattFill["@_prst"] || "ltDnDiag");
2403
2404
  switch (preset) {
2404
2405
  case "ltHorz":
@@ -2509,11 +2510,11 @@ function parseCellBorders(cellProperties) {
2509
2510
  const prstDash = ln["a:prstDash"];
2510
2511
  const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
2511
2512
  const cssBorderStyle = ooxmlDashToCss(dashVal);
2512
- const color = chunkLYZQLV7R_js.parseDrawingColor(ln["a:solidFill"]);
2513
+ const color = chunkAQIXKTAT_js.parseDrawingColor(ln["a:solidFill"]);
2513
2514
  if (color) {
2514
- const opacity = chunkLYZQLV7R_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2515
+ const opacity = chunkAQIXKTAT_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2515
2516
  const key = `${edge.prefix}`;
2516
- borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkLYZQLV7R_js.colorWithOpacity(color, opacity)}`;
2517
+ borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkAQIXKTAT_js.colorWithOpacity(color, opacity)}`;
2517
2518
  }
2518
2519
  }
2519
2520
  return borderStyle;
@@ -2526,7 +2527,7 @@ function parseCellTextEffects(runProps) {
2526
2527
  const textShadowParts = [];
2527
2528
  const outerShdw = effectLst["a:outerShdw"];
2528
2529
  if (outerShdw) {
2529
- const shdwColor = chunkLYZQLV7R_js.parseDrawingColor(outerShdw);
2530
+ const shdwColor = chunkAQIXKTAT_js.parseDrawingColor(outerShdw);
2530
2531
  if (shdwColor) {
2531
2532
  const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
2532
2533
  const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
@@ -2544,7 +2545,7 @@ function parseCellTextEffects(runProps) {
2544
2545
  }
2545
2546
  const glow = effectLst["a:glow"];
2546
2547
  if (glow) {
2547
- const glowColor = chunkLYZQLV7R_js.parseDrawingColor(glow);
2548
+ const glowColor = chunkAQIXKTAT_js.parseDrawingColor(glow);
2548
2549
  if (glowColor) {
2549
2550
  const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
2550
2551
  const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
@@ -2566,11 +2567,11 @@ function extractCellText(cellXml) {
2566
2567
  const textParts = [];
2567
2568
  const runs = ensureArrayValue(paragraph["a:r"]);
2568
2569
  runs.forEach((run) => {
2569
- textParts.push(chunkLYZQLV7R_js.xmlText(run["a:t"]) ?? "");
2570
+ textParts.push(chunkAQIXKTAT_js.xmlText(run["a:t"]) ?? "");
2570
2571
  });
2571
2572
  const fields = ensureArrayValue(paragraph["a:fld"]);
2572
2573
  fields.forEach((field) => {
2573
- textParts.push(chunkLYZQLV7R_js.xmlText(field["a:t"]) ?? "");
2574
+ textParts.push(chunkAQIXKTAT_js.xmlText(field["a:t"]) ?? "");
2574
2575
  });
2575
2576
  paragraphTexts.push(textParts.join(""));
2576
2577
  });
@@ -2614,10 +2615,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2614
2615
  if (runProps?.["@_u"] !== void 0) {
2615
2616
  cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
2616
2617
  }
2617
- const runColor = chunkLYZQLV7R_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkLYZQLV7R_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2618
+ const runColor = chunkAQIXKTAT_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkAQIXKTAT_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2618
2619
  if (runColor) {
2619
- const opacity = chunkLYZQLV7R_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2620
- cellStyle.color = chunkLYZQLV7R_js.colorWithOpacity(runColor, opacity);
2620
+ const opacity = chunkAQIXKTAT_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2621
+ cellStyle.color = chunkAQIXKTAT_js.colorWithOpacity(runColor, opacity);
2621
2622
  }
2622
2623
  const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
2623
2624
  if (fontFamily) {
@@ -2627,15 +2628,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2627
2628
  cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
2628
2629
  }
2629
2630
  const cellProperties = cellXml["a:tcPr"];
2630
- const cellFill = chunkLYZQLV7R_js.parseDrawingColor(
2631
+ const cellFill = chunkAQIXKTAT_js.parseDrawingColor(
2631
2632
  cellProperties?.["a:solidFill"],
2632
2633
  schemeColorOverrides
2633
2634
  );
2634
2635
  if (cellFill) {
2635
- const opacity = chunkLYZQLV7R_js.parseDrawingColorOpacity(
2636
+ const opacity = chunkAQIXKTAT_js.parseDrawingColorOpacity(
2636
2637
  cellProperties?.["a:solidFill"]
2637
2638
  );
2638
- cellStyle.backgroundColor = chunkLYZQLV7R_js.colorWithOpacity(cellFill, opacity);
2639
+ cellStyle.backgroundColor = chunkAQIXKTAT_js.colorWithOpacity(cellFill, opacity);
2639
2640
  } else {
2640
2641
  const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
2641
2642
  if (gradCss) {
@@ -2650,16 +2651,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2650
2651
  const edgeBorders = parseCellBorders(cellProperties);
2651
2652
  Object.assign(cellStyle, edgeBorders);
2652
2653
  if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
2653
- const borderColor = chunkLYZQLV7R_js.parseDrawingColor(
2654
+ const borderColor = chunkAQIXKTAT_js.parseDrawingColor(
2654
2655
  cellProperties?.["a:lnL"]?.["a:solidFill"],
2655
2656
  schemeColorOverrides
2656
- ) || chunkLYZQLV7R_js.parseDrawingColor(
2657
+ ) || chunkAQIXKTAT_js.parseDrawingColor(
2657
2658
  cellProperties?.["a:lnR"]?.["a:solidFill"],
2658
2659
  schemeColorOverrides
2659
- ) || chunkLYZQLV7R_js.parseDrawingColor(
2660
+ ) || chunkAQIXKTAT_js.parseDrawingColor(
2660
2661
  cellProperties?.["a:lnT"]?.["a:solidFill"],
2661
2662
  schemeColorOverrides
2662
- ) || chunkLYZQLV7R_js.parseDrawingColor(
2663
+ ) || chunkAQIXKTAT_js.parseDrawingColor(
2663
2664
  cellProperties?.["a:lnB"]?.["a:solidFill"],
2664
2665
  schemeColorOverrides
2665
2666
  );
@@ -2731,7 +2732,7 @@ function getTableCellBandStyle2(element, rowIndex, cellIndex, rowCount, columnCo
2731
2732
  if (element.type !== "table") {
2732
2733
  return void 0;
2733
2734
  }
2734
- return chunkLYZQLV7R_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2735
+ return chunkAQIXKTAT_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2735
2736
  tableStyleMap: styleCtx?.tableStyleMap,
2736
2737
  colorScheme: styleCtx?.theme?.colorScheme,
2737
2738
  fontScheme: styleCtx?.theme?.fontScheme
@@ -2811,7 +2812,7 @@ function renderTableCellContent(cell, fallbackText) {
2811
2812
  return /* @__PURE__ */ jsxRuntime.jsx(
2812
2813
  "span",
2813
2814
  {
2814
- style: { position: "relative", ...chunkLYZQLV7R_js.cellRunStyle(run) },
2815
+ style: { position: "relative", ...chunkAQIXKTAT_js.cellRunStyle(run) },
2815
2816
  children: run.text
2816
2817
  },
2817
2818
  `r-${index}`
@@ -2819,7 +2820,7 @@ function renderTableCellContent(cell, fallbackText) {
2819
2820
  });
2820
2821
  }
2821
2822
  function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
2822
- return chunkLYZQLV7R_js.getCellDiagonalBorders(style, tableData, pos, {
2823
+ return chunkAQIXKTAT_js.getCellDiagonalBorders(style, tableData, pos, {
2823
2824
  tableStyleMap: styleCtx?.tableStyleMap,
2824
2825
  colorScheme: styleCtx?.theme?.colorScheme,
2825
2826
  fontScheme: styleCtx?.theme?.fontScheme
@@ -2952,7 +2953,7 @@ function TableResizeOverlay({
2952
2953
  const containerRef = React7.useRef(null);
2953
2954
  const [rowBounds, setRowBounds] = React7.useState([]);
2954
2955
  const dragRef = React7.useRef(null);
2955
- const colBoundaries = React7.useMemo(() => chunkLYZQLV7R_js.computeColumnBoundaries(columnWidths), [columnWidths]);
2956
+ const colBoundaries = React7.useMemo(() => chunkAQIXKTAT_js.computeColumnBoundaries(columnWidths), [columnWidths]);
2956
2957
  const measureRows = React7.useCallback(() => {
2957
2958
  const container = containerRef.current;
2958
2959
  if (!container) {
@@ -2999,11 +3000,11 @@ function TableResizeOverlay({
2999
3000
  const rect = containerRef.current.getBoundingClientRect();
3000
3001
  if (e.clientX !== drag.startPos && drag.type === "col" && drag.initialWidths && onResizeColumns) {
3001
3002
  const deltaProp = (e.clientX - drag.startPos) / rect.width;
3002
- onResizeColumns(chunkLYZQLV7R_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
3003
+ onResizeColumns(chunkAQIXKTAT_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
3003
3004
  } else if (e.clientY !== drag.startPos && drag.type === "row" && onResizeRow) {
3004
3005
  const deltaY = e.clientY - drag.startPos;
3005
- const newHeight = chunkLYZQLV7R_js.computeResizedRowHeight(
3006
- drag.initialRowHeight ?? chunkLYZQLV7R_js.DEFAULT_ROW_HEIGHT,
3006
+ const newHeight = chunkAQIXKTAT_js.computeResizedRowHeight(
3007
+ drag.initialRowHeight ?? chunkAQIXKTAT_js.DEFAULT_ROW_HEIGHT,
3007
3008
  deltaY
3008
3009
  );
3009
3010
  onResizeRow(drag.index, newHeight);
@@ -3041,7 +3042,7 @@ function TableResizeOverlay({
3041
3042
  e.stopPropagation();
3042
3043
  const table = containerRef.current?.querySelector("table");
3043
3044
  const tr = table?.querySelectorAll("tbody > tr")[index];
3044
- const actualHeight = tr?.offsetHeight ?? chunkLYZQLV7R_js.DEFAULT_ROW_HEIGHT;
3045
+ const actualHeight = tr?.offsetHeight ?? chunkAQIXKTAT_js.DEFAULT_ROW_HEIGHT;
3045
3046
  document.body.style.cursor = "row-resize";
3046
3047
  document.body.style.userSelect = "none";
3047
3048
  dragRef.current = {
@@ -3081,14 +3082,14 @@ function renderTableFromTableData(element, textStyle, options) {
3081
3082
  const rowCount = tableData.rows.length;
3082
3083
  const columnCount = tableData.columnWidths.length;
3083
3084
  const selectedCell = options?.selectedCell || null;
3084
- const isEditable = Boolean(options?.editable) && chunkLYZQLV7R_js.canDrillDown(element);
3085
+ const isEditable = Boolean(options?.editable) && chunkAQIXKTAT_js.canDrillDown(element);
3085
3086
  const hasCellSelectionHandler = typeof options?.onSelectCell === "function";
3086
3087
  const sharedCtx = {
3087
3088
  tableStyleMap: options?.styleCtx?.tableStyleMap,
3088
3089
  colorScheme: options?.styleCtx?.theme?.colorScheme,
3089
3090
  fontScheme: options?.styleCtx?.theme?.fontScheme
3090
3091
  };
3091
- const cellCss = (cell, rowIndex, cellIndex) => chunkLYZQLV7R_js.tableCellCss(
3092
+ const cellCss = (cell, rowIndex, cellIndex) => chunkAQIXKTAT_js.tableCellCss(
3092
3093
  tableData,
3093
3094
  cell,
3094
3095
  { rowIndex, cellIndex, rowCount, columnCount },
@@ -3101,7 +3102,7 @@ function renderTableFromTableData(element, textStyle, options) {
3101
3102
  }
3102
3103
  const first = selectedCell.selectedCells[0];
3103
3104
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3104
- return chunkLYZQLV7R_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3105
+ return chunkAQIXKTAT_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3105
3106
  })();
3106
3107
  return /* @__PURE__ */ jsxRuntime.jsx(
3107
3108
  TableResizeOverlay,
@@ -3122,9 +3123,9 @@ function renderTableFromTableData(element, textStyle, options) {
3122
3123
  {
3123
3124
  className: "w-full h-full border-collapse table-fixed",
3124
3125
  style: {
3125
- fontFamily: chunkLYZQLV7R_js.DEFAULT_FONT_FAMILY,
3126
+ fontFamily: chunkAQIXKTAT_js.DEFAULT_FONT_FAMILY,
3126
3127
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3127
- ...chunkLYZQLV7R_js.tableContainerCss(tableData)
3128
+ ...chunkAQIXKTAT_js.tableContainerCss(tableData)
3128
3129
  },
3129
3130
  children: [
3130
3131
  tableData.columnWidths.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: tableData.columnWidths.map((w, ci) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3143,7 +3144,7 @@ function renderTableFromTableData(element, textStyle, options) {
3143
3144
  return null;
3144
3145
  }
3145
3146
  const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
3146
- const isInMultiSelection = chunkLYZQLV7R_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3147
+ const isInMultiSelection = chunkAQIXKTAT_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3147
3148
  const isCellEditing = isCellSelected && selectedCell?.isEditing;
3148
3149
  const diag = getCellDiagonalBorders2(
3149
3150
  cell.style,
@@ -3172,7 +3173,7 @@ function renderTableFromTableData(element, textStyle, options) {
3172
3173
  }
3173
3174
  event.stopPropagation();
3174
3175
  if (event.shiftKey && selectedCell) {
3175
- const rect = chunkLYZQLV7R_js.computeSelectionRect(
3176
+ const rect = chunkAQIXKTAT_js.computeSelectionRect(
3176
3177
  selectedCell.rowIndex,
3177
3178
  selectedCell.columnIndex,
3178
3179
  rowIndex,
@@ -3182,7 +3183,7 @@ function renderTableFromTableData(element, textStyle, options) {
3182
3183
  options?.onSelectCell?.({
3183
3184
  rowIndex: selectedCell.rowIndex,
3184
3185
  columnIndex: selectedCell.columnIndex,
3185
- selectedCells: chunkLYZQLV7R_js.rectToCells(rect)
3186
+ selectedCells: chunkAQIXKTAT_js.rectToCells(rect)
3186
3187
  });
3187
3188
  } else {
3188
3189
  options?.onSelectCell?.({
@@ -3243,10 +3244,10 @@ function renderTableElement(element, textStyle, options) {
3243
3244
  if (tableEl2.tableData && tableEl2.tableData.rows.length > 0) {
3244
3245
  return renderTableFromTableData(tableEl2, textStyle, options);
3245
3246
  }
3246
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkUMQV2432_js.translationsEn["pptx.table.title"] });
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"] });
3247
3248
  }
3248
3249
  const selectedCell = options?.selectedCell || null;
3249
- const isEditable = Boolean(options?.editable) && chunkLYZQLV7R_js.canDrillDown(element);
3250
+ const isEditable = Boolean(options?.editable) && chunkAQIXKTAT_js.canDrillDown(element);
3250
3251
  const hasCellSelectionHandler = typeof options?.onSelectCell === "function";
3251
3252
  const tableEl = element;
3252
3253
  const xmlSelectionRect = (() => {
@@ -3258,7 +3259,7 @@ function renderTableElement(element, textStyle, options) {
3258
3259
  }
3259
3260
  const first = selectedCell.selectedCells[0];
3260
3261
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3261
- return chunkLYZQLV7R_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3262
+ return chunkAQIXKTAT_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3262
3263
  })();
3263
3264
  const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
3264
3265
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -3280,9 +3281,9 @@ function renderTableElement(element, textStyle, options) {
3280
3281
  {
3281
3282
  className: "w-full h-full border-collapse table-fixed",
3282
3283
  style: {
3283
- fontFamily: chunkLYZQLV7R_js.DEFAULT_FONT_FAMILY,
3284
+ fontFamily: chunkAQIXKTAT_js.DEFAULT_FONT_FAMILY,
3284
3285
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3285
- ...chunkLYZQLV7R_js.tableContainerCss(tableEl.tableData)
3286
+ ...chunkAQIXKTAT_js.tableContainerCss(tableEl.tableData)
3286
3287
  },
3287
3288
  children: [
3288
3289
  parsedTable.columnPercentages.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((percentage, columnIndex) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3339,7 +3340,7 @@ function renderTableElement(element, textStyle, options) {
3339
3340
  color: textStyle.color,
3340
3341
  ...bandStyle,
3341
3342
  ...xmlCellStyle,
3342
- ...tdCellOverride ? chunkLYZQLV7R_js.cellStyleToCss(tdCellOverride) : void 0,
3343
+ ...tdCellOverride ? chunkAQIXKTAT_js.cellStyleToCss(tdCellOverride) : void 0,
3343
3344
  ...diag ? { position: "relative" } : void 0
3344
3345
  };
3345
3346
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3349,7 +3350,7 @@ function renderTableElement(element, textStyle, options) {
3349
3350
  "border px-1 py-0.5 align-top",
3350
3351
  isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
3351
3352
  selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
3352
- chunkLYZQLV7R_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : 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
3353
3354
  ),
3354
3355
  colSpan,
3355
3356
  rowSpan: rSpan,
@@ -3360,7 +3361,7 @@ function renderTableElement(element, textStyle, options) {
3360
3361
  }
3361
3362
  event.stopPropagation();
3362
3363
  if (event.shiftKey && selectedCell && tableEl.tableData) {
3363
- const rect = chunkLYZQLV7R_js.computeSelectionRect(
3364
+ const rect = chunkAQIXKTAT_js.computeSelectionRect(
3364
3365
  selectedCell.rowIndex,
3365
3366
  selectedCell.columnIndex,
3366
3367
  rowIndex,
@@ -3370,7 +3371,7 @@ function renderTableElement(element, textStyle, options) {
3370
3371
  options?.onSelectCell?.({
3371
3372
  rowIndex: selectedCell.rowIndex,
3372
3373
  columnIndex: selectedCell.columnIndex,
3373
- selectedCells: chunkLYZQLV7R_js.rectToCells(rect)
3374
+ selectedCells: chunkAQIXKTAT_js.rectToCells(rect)
3374
3375
  });
3375
3376
  } else {
3376
3377
  options?.onSelectCell?.({
@@ -3428,24 +3429,27 @@ function renderTableElement(element, textStyle, options) {
3428
3429
  }
3429
3430
  );
3430
3431
  }
3432
+ function renderGradientStops(stops) {
3433
+ return stops.map((stop, i) => /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: stop.offset, stopColor: stop.color, stopOpacity: stop.opacity }, i));
3434
+ }
3431
3435
  function partAttrs(part) {
3432
- return part ? chunkLYZQLV7R_js.chartPartToAttrs(part) : void 0;
3436
+ return part ? chunkAQIXKTAT_js.chartPartToAttrs(part) : void 0;
3433
3437
  }
3434
3438
  function resolveReactPalette(chartData) {
3435
3439
  if (chartData.colorPalette && chartData.colorPalette.length > 0) {
3436
3440
  return chartData.colorPalette;
3437
3441
  }
3438
- return [...chunkLYZQLV7R_js.getChartStylePalette(chartData.style?.styleId)];
3442
+ return [...chunkAQIXKTAT_js.getChartStylePalette(chartData.style?.styleId)];
3439
3443
  }
3440
3444
  function buildReactChartViewModel(element) {
3441
3445
  if (element.type !== "chart" || !element.chartData) {
3442
- return chunkLYZQLV7R_js.buildChartViewModel(element);
3446
+ return chunkAQIXKTAT_js.buildChartViewModel(element);
3443
3447
  }
3444
3448
  const palette = resolveReactPalette(element.chartData), themedElement = {
3445
3449
  ...element,
3446
3450
  chartData: { ...element.chartData, colorPalette: palette }
3447
3451
  };
3448
- return chunkLYZQLV7R_js.buildChartViewModel(themedElement);
3452
+ return chunkAQIXKTAT_js.buildChartViewModel(themedElement);
3449
3453
  }
3450
3454
  function renderPrimitive(prim, key) {
3451
3455
  switch (prim.kind) {
@@ -3597,7 +3601,7 @@ function renderText(t, key) {
3597
3601
  );
3598
3602
  }
3599
3603
  function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3600
- const legendItems = chunkLYZQLV7R_js.computeChartLegendLayout(vm);
3604
+ const legendItems = chunkAQIXKTAT_js.computeChartLegendLayout(vm);
3601
3605
  return /* @__PURE__ */ jsxRuntime.jsxs(
3602
3606
  "svg",
3603
3607
  {
@@ -3605,29 +3609,52 @@ function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3605
3609
  viewBox: `0 0 ${vm.svgWidth} ${vm.svgHeight}`,
3606
3610
  preserveAspectRatio,
3607
3611
  children: [
3608
- vm.defs && vm.defs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("defs", { children: vm.defs.map((def, i) => /* @__PURE__ */ jsxRuntime.jsx(
3609
- "pattern",
3610
- {
3611
- id: def.id,
3612
- patternUnits: def.patternUnits,
3613
- x: def.x,
3614
- y: def.y,
3615
- width: def.width,
3616
- height: def.height,
3617
- children: /* @__PURE__ */ jsxRuntime.jsx(
3618
- "image",
3619
- {
3620
- href: def.href,
3621
- x: 0,
3622
- y: 0,
3623
- width: def.width,
3624
- height: def.height,
3625
- preserveAspectRatio: def.preserveAspectRatio
3626
- }
3627
- )
3628
- },
3629
- `${elementId}-def-${i}`
3630
- )) }),
3612
+ vm.defs && vm.defs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("defs", { children: vm.defs.map(
3613
+ (def, i) => def.kind === "linearGradient" ? /* @__PURE__ */ jsxRuntime.jsx(
3614
+ "linearGradient",
3615
+ {
3616
+ id: def.id,
3617
+ x1: def.x1,
3618
+ y1: def.y1,
3619
+ x2: def.x2,
3620
+ y2: def.y2,
3621
+ children: renderGradientStops(def.stops)
3622
+ },
3623
+ `${elementId}-def-${i}`
3624
+ ) : def.kind === "radialGradient" ? /* @__PURE__ */ jsxRuntime.jsx(
3625
+ "radialGradient",
3626
+ {
3627
+ id: def.id,
3628
+ cx: def.cx,
3629
+ cy: def.cy,
3630
+ r: def.r,
3631
+ children: renderGradientStops(def.stops)
3632
+ },
3633
+ `${elementId}-def-${i}`
3634
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
3635
+ "pattern",
3636
+ {
3637
+ id: def.id,
3638
+ patternUnits: def.patternUnits,
3639
+ x: def.x,
3640
+ y: def.y,
3641
+ width: def.width,
3642
+ height: def.height,
3643
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3644
+ "image",
3645
+ {
3646
+ href: def.href,
3647
+ x: 0,
3648
+ y: 0,
3649
+ width: def.width,
3650
+ height: def.height,
3651
+ preserveAspectRatio: def.preserveAspectRatio
3652
+ }
3653
+ )
3654
+ },
3655
+ `${elementId}-def-${i}`
3656
+ )
3657
+ ) }),
3631
3658
  vm.areaFill && /* @__PURE__ */ jsxRuntime.jsx(
3632
3659
  "rect",
3633
3660
  {
@@ -3737,17 +3764,17 @@ function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3737
3764
  }
3738
3765
  function renderChartElement(element) {
3739
3766
  if (element.type !== "chart") {
3740
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkUMQV2432_js.translationsEn["pptx.chart.heading"] });
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"] });
3741
3768
  }
3742
3769
  const chartData = element.chartData;
3743
3770
  if (!chartData || chartData.series.length === 0) {
3744
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkUMQV2432_js.translationsEn["pptx.chart.heading"] });
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"] });
3745
3772
  }
3746
- const kind = chunkLYZQLV7R_js.resolveChartKind(chartData.chartType ?? "bar");
3773
+ const kind = chunkAQIXKTAT_js.resolveChartKind(chartData.chartType ?? "bar");
3747
3774
  return renderChartViewModel(
3748
3775
  element.id,
3749
3776
  buildReactChartViewModel(element),
3750
- chunkLYZQLV7R_js.chartPreserveAspectRatio(kind)
3777
+ chunkAQIXKTAT_js.chartPreserveAspectRatio(kind)
3751
3778
  );
3752
3779
  }
3753
3780
 
@@ -3767,14 +3794,14 @@ function buildNotesPdf(pages) {
3767
3794
  notes: page.notes,
3768
3795
  slideNumber: page.slideNumber
3769
3796
  }));
3770
- const bytes = chunkLYZQLV7R_js.buildNotesPdfBytes(images, meta);
3797
+ const bytes = chunkAQIXKTAT_js.buildNotesPdfBytes(images, meta);
3771
3798
  const blob = new Blob([bytes], { type: "application/pdf" });
3772
3799
  return URL.createObjectURL(blob);
3773
3800
  }
3774
3801
 
3775
3802
  // src/viewer/utils/pdf-builder-slides.ts
3776
3803
  function buildPdfFromTiledImageData(pages) {
3777
- const bytes = chunkLYZQLV7R_js.buildTiledSlidesPdfBytes(pages);
3804
+ const bytes = chunkAQIXKTAT_js.buildTiledSlidesPdfBytes(pages);
3778
3805
  const blob = new Blob([bytes], { type: "application/pdf" });
3779
3806
  return URL.createObjectURL(blob);
3780
3807
  }
@@ -3783,7 +3810,7 @@ function buildPdfFromTiledImageData(pages) {
3783
3810
  var activePreview = null;
3784
3811
  function startPreviewAnimation(elementId, preset, options) {
3785
3812
  stopPreviewAnimation();
3786
- const descriptor = chunkLYZQLV7R_js.buildPreviewAnimation(preset, options);
3813
+ const descriptor = chunkAQIXKTAT_js.buildPreviewAnimation(preset, options);
3787
3814
  if (!descriptor) {
3788
3815
  return;
3789
3816
  }
@@ -3796,7 +3823,7 @@ function startMotionPathPreview(elementId, path, options) {
3796
3823
  return;
3797
3824
  }
3798
3825
  const stage = domEl.offsetParent;
3799
- const descriptor = chunkLYZQLV7R_js.buildMotionPathPreview({
3826
+ const descriptor = chunkAQIXKTAT_js.buildMotionPathPreview({
3800
3827
  path,
3801
3828
  slideWidth: stage?.offsetWidth || DEFAULT_PREVIEW_SLIDE_WIDTH,
3802
3829
  slideHeight: stage?.offsetHeight || DEFAULT_PREVIEW_SLIDE_HEIGHT,