pptx-react-viewer 3.1.3 → 3.1.5

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 (151) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{AiChatPanel-5JAQBLTU.mjs → AiChatPanel-ITCVRVKP.mjs} +3 -3
  3. package/dist/AiChatPanel-ITCVRVKP.mjs.br +0 -0
  4. package/dist/AiChatPanel-ITCVRVKP.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-C3E7UV7T.js → AiChatPanel-TO5PHBGW.js} +23 -23
  6. package/dist/AiChatPanel-TO5PHBGW.js.br +0 -0
  7. package/dist/AiChatPanel-TO5PHBGW.js.gz +0 -0
  8. package/dist/{Area3DChartScene-XY2PKRMA.js → Area3DChartScene-2UNQ3J3V.js} +2 -2
  9. package/dist/Area3DChartScene-2UNQ3J3V.js.br +0 -0
  10. package/dist/Area3DChartScene-2UNQ3J3V.js.gz +0 -0
  11. package/dist/{Area3DChartScene-KE434ERF.mjs → Area3DChartScene-7PHPDOTG.mjs} +1 -1
  12. package/dist/Area3DChartScene-7PHPDOTG.mjs.br +0 -0
  13. package/dist/Area3DChartScene-7PHPDOTG.mjs.gz +0 -0
  14. package/dist/{Bar3DChartScene-2KQABQZM.mjs → Bar3DChartScene-BLPUHYRZ.mjs} +1 -1
  15. package/dist/Bar3DChartScene-BLPUHYRZ.mjs.br +0 -0
  16. package/dist/Bar3DChartScene-BLPUHYRZ.mjs.gz +0 -0
  17. package/dist/{Bar3DChartScene-YMADUUZN.js → Bar3DChartScene-MC5S3AGT.js} +2 -2
  18. package/dist/Bar3DChartScene-MC5S3AGT.js.br +0 -0
  19. package/dist/Bar3DChartScene-MC5S3AGT.js.gz +0 -0
  20. package/dist/{Line3DChartScene-AB7N6ORX.js → Line3DChartScene-JVVZRIDD.js} +2 -2
  21. package/dist/Line3DChartScene-JVVZRIDD.js.br +0 -0
  22. package/dist/Line3DChartScene-JVVZRIDD.js.gz +0 -0
  23. package/dist/{Line3DChartScene-K3BSK6BB.mjs → Line3DChartScene-L5B4YFG3.mjs} +1 -1
  24. package/dist/Line3DChartScene-L5B4YFG3.mjs.br +0 -0
  25. package/dist/Line3DChartScene-L5B4YFG3.mjs.gz +0 -0
  26. package/dist/{Model3DScene-NT5RRIB5.mjs → Model3DScene-6TNWS5LV.mjs} +1 -1
  27. package/dist/Model3DScene-6TNWS5LV.mjs.br +0 -0
  28. package/dist/Model3DScene-6TNWS5LV.mjs.gz +0 -0
  29. package/dist/{Model3DScene-VSLGUWC7.js → Model3DScene-LRDNQNKJ.js} +2 -2
  30. package/dist/Model3DScene-LRDNQNKJ.js.br +0 -0
  31. package/dist/Model3DScene-LRDNQNKJ.js.gz +0 -0
  32. package/dist/{PieChart3DScene-6MUFRFYJ.js → PieChart3DScene-PZWZCXHX.js} +2 -2
  33. package/dist/PieChart3DScene-PZWZCXHX.js.br +0 -0
  34. package/dist/PieChart3DScene-PZWZCXHX.js.gz +0 -0
  35. package/dist/{PieChart3DScene-NFRBKII7.mjs → PieChart3DScene-XXAIVP4I.mjs} +1 -1
  36. package/dist/PieChart3DScene-XXAIVP4I.mjs.br +0 -0
  37. package/dist/PieChart3DScene-XXAIVP4I.mjs.gz +0 -0
  38. package/dist/{SurfaceChart3DScene-UKIOTKJC.mjs → SurfaceChart3DScene-CRUGJSCY.mjs} +1 -1
  39. package/dist/SurfaceChart3DScene-CRUGJSCY.mjs.br +1 -0
  40. package/dist/SurfaceChart3DScene-CRUGJSCY.mjs.gz +0 -0
  41. package/dist/{SurfaceChart3DScene-2UQOKVFB.js → SurfaceChart3DScene-UBQV3ZN2.js} +2 -2
  42. package/dist/SurfaceChart3DScene-UBQV3ZN2.js.br +0 -0
  43. package/dist/SurfaceChart3DScene-UBQV3ZN2.js.gz +0 -0
  44. package/dist/UTIF-LAD5QYGQ.mjs +6400 -0
  45. package/dist/UTIF-LAD5QYGQ.mjs.br +0 -0
  46. package/dist/UTIF-LAD5QYGQ.mjs.gz +0 -0
  47. package/dist/UTIF-POYWAAGO.js +6402 -0
  48. package/dist/UTIF-POYWAAGO.js.br +0 -0
  49. package/dist/UTIF-POYWAAGO.js.gz +0 -0
  50. package/dist/{chunk-BZ6OM3H5.mjs → chunk-A2UAUSJM.mjs} +113 -6
  51. package/dist/chunk-A2UAUSJM.mjs.br +0 -0
  52. package/dist/chunk-A2UAUSJM.mjs.gz +0 -0
  53. package/dist/{chunk-ACVLIDUS.mjs → chunk-BPWSJLLG.mjs} +158 -29
  54. package/dist/chunk-BPWSJLLG.mjs.br +0 -0
  55. package/dist/chunk-BPWSJLLG.mjs.gz +0 -0
  56. package/dist/{chunk-K4DUVYZ7.js → chunk-LGVNUG3G.js} +3 -3
  57. package/dist/chunk-LGVNUG3G.js.br +0 -0
  58. package/dist/chunk-LGVNUG3G.js.gz +0 -0
  59. package/dist/{chunk-XBR7W47W.js → chunk-LXYDXLKZ.js} +510 -403
  60. package/dist/chunk-LXYDXLKZ.js.br +0 -0
  61. package/dist/chunk-LXYDXLKZ.js.gz +0 -0
  62. package/dist/{chunk-5WH6UVWC.mjs → chunk-P3VXXUZM.mjs} +253 -77
  63. package/dist/chunk-P3VXXUZM.mjs.br +0 -0
  64. package/dist/chunk-P3VXXUZM.mjs.gz +0 -0
  65. package/dist/{chunk-Z3DEULRJ.mjs → chunk-QOLYY7E3.mjs} +1 -1
  66. package/dist/chunk-QOLYY7E3.mjs.br +0 -0
  67. package/dist/chunk-QOLYY7E3.mjs.gz +0 -0
  68. package/dist/{chunk-OABOL32L.js → chunk-T2QG2HD5.js} +302 -171
  69. package/dist/chunk-T2QG2HD5.js.br +0 -0
  70. package/dist/chunk-T2QG2HD5.js.gz +0 -0
  71. package/dist/{chunk-SRAXNEJX.mjs → chunk-XIHK52SB.mjs} +1525 -341
  72. package/dist/chunk-XIHK52SB.mjs.br +0 -0
  73. package/dist/chunk-XIHK52SB.mjs.gz +0 -0
  74. package/dist/{chunk-HMZA25W2.js → chunk-YDEEINER.js} +1528 -343
  75. package/dist/chunk-YDEEINER.js.br +0 -0
  76. package/dist/chunk-YDEEINER.js.gz +0 -0
  77. package/dist/{chunk-GCOGKBK3.js → chunk-ZPF4L6SD.js} +1342 -1166
  78. package/dist/chunk-ZPF4L6SD.js.br +0 -0
  79. package/dist/chunk-ZPF4L6SD.js.gz +0 -0
  80. package/dist/index.d.ts +139 -3
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +49 -49
  83. package/dist/index.js.br +0 -0
  84. package/dist/index.js.gz +0 -0
  85. package/dist/index.mjs +5 -5
  86. package/dist/index.mjs.br +0 -0
  87. package/dist/index.mjs.gz +0 -0
  88. package/dist/internals.d.ts +139 -3
  89. package/dist/internals.d.ts.map +1 -1
  90. package/dist/internals.js +78 -78
  91. package/dist/internals.js.br +0 -0
  92. package/dist/internals.js.gz +0 -0
  93. package/dist/internals.mjs +3 -3
  94. package/dist/internals.mjs.br +0 -0
  95. package/dist/internals.mjs.gz +0 -0
  96. package/dist/viewer/index.d.ts +139 -3
  97. package/dist/viewer/index.js +26 -26
  98. package/dist/viewer/index.js.br +0 -0
  99. package/dist/viewer/index.js.gz +0 -0
  100. package/dist/viewer/index.mjs +5 -5
  101. package/dist/viewer/index.mjs.br +0 -0
  102. package/dist/viewer/index.mjs.gz +0 -0
  103. package/package.json +2 -2
  104. package/dist/AiChatPanel-5JAQBLTU.mjs.br +0 -0
  105. package/dist/AiChatPanel-5JAQBLTU.mjs.gz +0 -0
  106. package/dist/AiChatPanel-C3E7UV7T.js.br +0 -0
  107. package/dist/AiChatPanel-C3E7UV7T.js.gz +0 -0
  108. package/dist/Area3DChartScene-KE434ERF.mjs.br +0 -0
  109. package/dist/Area3DChartScene-KE434ERF.mjs.gz +0 -0
  110. package/dist/Area3DChartScene-XY2PKRMA.js.br +0 -0
  111. package/dist/Area3DChartScene-XY2PKRMA.js.gz +0 -0
  112. package/dist/Bar3DChartScene-2KQABQZM.mjs.br +0 -0
  113. package/dist/Bar3DChartScene-2KQABQZM.mjs.gz +0 -0
  114. package/dist/Bar3DChartScene-YMADUUZN.js.br +0 -0
  115. package/dist/Bar3DChartScene-YMADUUZN.js.gz +0 -0
  116. package/dist/Line3DChartScene-AB7N6ORX.js.br +0 -0
  117. package/dist/Line3DChartScene-AB7N6ORX.js.gz +0 -0
  118. package/dist/Line3DChartScene-K3BSK6BB.mjs.br +0 -0
  119. package/dist/Line3DChartScene-K3BSK6BB.mjs.gz +0 -0
  120. package/dist/Model3DScene-NT5RRIB5.mjs.br +0 -0
  121. package/dist/Model3DScene-NT5RRIB5.mjs.gz +0 -0
  122. package/dist/Model3DScene-VSLGUWC7.js.br +0 -0
  123. package/dist/Model3DScene-VSLGUWC7.js.gz +0 -0
  124. package/dist/PieChart3DScene-6MUFRFYJ.js.br +0 -0
  125. package/dist/PieChart3DScene-6MUFRFYJ.js.gz +0 -0
  126. package/dist/PieChart3DScene-NFRBKII7.mjs.br +0 -0
  127. package/dist/PieChart3DScene-NFRBKII7.mjs.gz +0 -0
  128. package/dist/SurfaceChart3DScene-2UQOKVFB.js.br +0 -0
  129. package/dist/SurfaceChart3DScene-2UQOKVFB.js.gz +0 -0
  130. package/dist/SurfaceChart3DScene-UKIOTKJC.mjs.br +0 -0
  131. package/dist/SurfaceChart3DScene-UKIOTKJC.mjs.gz +0 -0
  132. package/dist/chunk-5WH6UVWC.mjs.br +0 -0
  133. package/dist/chunk-5WH6UVWC.mjs.gz +0 -0
  134. package/dist/chunk-ACVLIDUS.mjs.br +0 -0
  135. package/dist/chunk-ACVLIDUS.mjs.gz +0 -0
  136. package/dist/chunk-BZ6OM3H5.mjs.br +0 -0
  137. package/dist/chunk-BZ6OM3H5.mjs.gz +0 -0
  138. package/dist/chunk-GCOGKBK3.js.br +0 -0
  139. package/dist/chunk-GCOGKBK3.js.gz +0 -0
  140. package/dist/chunk-HMZA25W2.js.br +0 -0
  141. package/dist/chunk-HMZA25W2.js.gz +0 -0
  142. package/dist/chunk-K4DUVYZ7.js.br +0 -0
  143. package/dist/chunk-K4DUVYZ7.js.gz +0 -0
  144. package/dist/chunk-OABOL32L.js.br +0 -0
  145. package/dist/chunk-OABOL32L.js.gz +0 -0
  146. package/dist/chunk-SRAXNEJX.mjs.br +0 -0
  147. package/dist/chunk-SRAXNEJX.mjs.gz +0 -0
  148. package/dist/chunk-XBR7W47W.js.br +0 -0
  149. package/dist/chunk-XBR7W47W.js.gz +0 -0
  150. package/dist/chunk-Z3DEULRJ.mjs.br +0 -0
  151. package/dist/chunk-Z3DEULRJ.mjs.gz +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ var chunkYDEEINER_js = require('./chunk-YDEEINER.js');
3
4
  var chunkSWRY3SI5_js = require('./chunk-SWRY3SI5.js');
4
- var chunkHMZA25W2_js = require('./chunk-HMZA25W2.js');
5
5
  var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
7
  var React6 = require('react');
@@ -15,7 +15,7 @@ var React6__default = /*#__PURE__*/_interopDefault(React6);
15
15
 
16
16
  // src/viewer/utils/animation-effects.ts
17
17
  function getAnimationInitialStyle2(preset, nativeAnimation) {
18
- return chunkHMZA25W2_js.getAnimationInitialStyle(preset, nativeAnimation);
18
+ return chunkYDEEINER_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 chunkHMZA25W2_js.cloneHistorySnapshot(snapshot);
26
+ return chunkYDEEINER_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 = chunkHMZA25W2_js.VIEWER_SHORTCUT_REFERENCE;
64
+ var SHORTCUT_REFERENCE_ITEMS = chunkYDEEINER_js.VIEWER_SHORTCUT_REFERENCE;
65
65
 
66
66
  // src/viewer/constants/theme.ts
67
67
  var THEME_COLOR_SWATCHES = [
@@ -105,7 +105,7 @@ var GLYPH_COMPONENTS = {
105
105
  plus: lu.LuPlus,
106
106
  triangle: lu.LuTriangle
107
107
  };
108
- var SHAPE_PRESETS = chunkHMZA25W2_js.SHAPE_PRESET_DEFS.map(
108
+ var SHAPE_PRESETS = chunkYDEEINER_js.SHAPE_PRESET_DEFS.map(
109
109
  (def) => ({
110
110
  type: def.type,
111
111
  label: def.label,
@@ -264,7 +264,7 @@ function isConnectorOrLineElement(element) {
264
264
  if (element.type === "connector") {
265
265
  return true;
266
266
  }
267
- if (!chunkHMZA25W2_js.hasShapeProperties(element)) {
267
+ if (!chunkYDEEINER_js.hasShapeProperties(element)) {
268
268
  return false;
269
269
  }
270
270
  const st = getShapeType(element.shapeType);
@@ -273,37 +273,43 @@ function isConnectorOrLineElement(element) {
273
273
 
274
274
  // src/viewer/utils/image-style.ts
275
275
  function getImageMaskStyle(element) {
276
- if (!chunkHMZA25W2_js.hasShapeProperties(element)) {
276
+ if (!chunkYDEEINER_js.hasShapeProperties(element)) {
277
277
  return void 0;
278
278
  }
279
- const shapeType = element.shapeType;
280
- if (!shapeType) {
281
- return void 0;
282
- }
283
- const normalized = shapeType.toLowerCase();
284
- if (normalized === "roundrect" || normalized === "round1rect" || normalized === "round2samerect" || normalized === "round2diagrect" || normalized === "sniproundrect" || normalized === "snip1rect" || normalized === "snip2diagrect") {
285
- const radiusPx = chunkHMZA25W2_js.getRoundRectRadiusPx2(element);
286
- if (radiusPx <= 0.01) {
287
- return void 0;
288
- }
289
- return { borderRadius: radiusPx };
279
+ const geometry = chunkYDEEINER_js.resolveShapeGeometry(element);
280
+ if (geometry.kind === "borderRadius") {
281
+ return { borderRadius: geometry.radius };
290
282
  }
291
- if (normalized === "ellipse" || normalized === "oval") {
292
- return { borderRadius: "50%" };
293
- }
294
- if (normalized === "can" || normalized === "cylinder") {
295
- return { borderRadius: "48% / 12%" };
296
- }
297
- const clipPath = chunkHMZA25W2_js.getResolvedShapeClipPath(element);
298
- if (!clipPath) {
299
- return void 0;
300
- }
301
- return { clipPath };
283
+ return geometry.kind === "clipPath" ? { clipPath: geometry.clipPath } : void 0;
302
284
  }
303
285
  function getImageRenderStyle(element) {
286
+ const fit = chunkYDEEINER_js.getImageFitStyle(element);
287
+ return {
288
+ // A translated/scaled crop must be masked by its stationary wrapper, not
289
+ // by the moving bitmap itself.
290
+ ...fit.transform ? {} : getImageMaskStyle(element) || {},
291
+ ...fit
292
+ };
293
+ }
294
+ function getImageSurfaceMaskStyle(element) {
295
+ const mask = getImageMaskStyle(element);
296
+ return {
297
+ overflow: "hidden",
298
+ borderRadius: mask?.borderRadius,
299
+ clipPath: mask?.clipPath ?? getCropShapeClipPath(element)
300
+ };
301
+ }
302
+ function getImageSurfaceStyle(element) {
303
+ const fill = chunkYDEEINER_js.hasShapeProperties(element) ? chunkYDEEINER_js.getComputedFillStyle(element) : void 0;
304
304
  return {
305
- ...getImageMaskStyle(element) || {},
306
- ...chunkHMZA25W2_js.getImageFitStyle(element)
305
+ position: "absolute",
306
+ inset: 0,
307
+ ...getImageSurfaceMaskStyle(element),
308
+ backgroundColor: fill?.backgroundColor ?? "transparent",
309
+ backgroundImage: fill?.backgroundImage,
310
+ backgroundRepeat: fill?.backgroundRepeat,
311
+ backgroundSize: fill?.backgroundSize,
312
+ backgroundPosition: fill?.backgroundPosition
307
313
  };
308
314
  }
309
315
  var CROP_SHAPE_CLIP_PATHS = {
@@ -316,7 +322,7 @@ var CROP_SHAPE_CLIP_PATHS = {
316
322
  star: "polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)"
317
323
  };
318
324
  function getCropShapeClipPath(element) {
319
- if (!chunkHMZA25W2_js.isImageLikeElement(element)) {
325
+ if (!chunkYDEEINER_js.isImageLikeElement(element)) {
320
326
  return void 0;
321
327
  }
322
328
  const shape = element.cropShape;
@@ -326,7 +332,7 @@ function getCropShapeClipPath(element) {
326
332
  return CROP_SHAPE_CLIP_PATHS[shape];
327
333
  }
328
334
  function getImageTilingStyle2(element) {
329
- return chunkHMZA25W2_js.getImageTilingStyle(element);
335
+ return chunkYDEEINER_js.getImageTilingStyle(element);
330
336
  }
331
337
 
332
338
  // src/viewer/utils/geometry-image.ts
@@ -467,7 +473,8 @@ function VideoWithMetadata({
467
473
  "video",
468
474
  {
469
475
  ref: mediaRef,
470
- className: `w-full h-full pointer-events-auto ${isFullScreen ? "object-cover" : "object-contain"}`,
476
+ className: "w-full h-full pointer-events-auto",
477
+ style: isFullScreen ? { objectFit: "cover" } : chunkYDEEINER_js.getImageFitStyle(element),
471
478
  controls: showTransport,
472
479
  preload: "metadata",
473
480
  playsInline: true,
@@ -526,9 +533,9 @@ function registerMediaElement(elementId, el) {
526
533
  };
527
534
  }
528
535
  function executeMediaCommand(command, frameRoot) {
529
- return chunkHMZA25W2_js.runMediaCommand(
536
+ return chunkYDEEINER_js.runMediaCommand(
530
537
  command,
531
- (targetId) => registry.get(targetId) ?? chunkHMZA25W2_js.findMediaElementByElementId(targetId, frameRoot?.())
538
+ (targetId) => registry.get(targetId) ?? chunkYDEEINER_js.findMediaElementByElementId(targetId, frameRoot?.())
532
539
  );
533
540
  }
534
541
  function PresentationMediaController({
@@ -572,7 +579,7 @@ function PresentationMediaController({
572
579
  loop: shouldLoop,
573
580
  volume: playbackVolume,
574
581
  playbackRate
575
- } = chunkHMZA25W2_js.mediaPlaybackAttributes({
582
+ } = chunkYDEEINER_js.mediaPlaybackAttributes({
576
583
  loop: element.loop,
577
584
  volume: element.volume,
578
585
  playbackSpeed: element.playbackSpeed
@@ -708,7 +715,7 @@ function PresentationMediaController({
708
715
  if (element.playAcrossSlides && element.mediaType === "audio") {
709
716
  const dataUrl = element.mediaData ?? resolvedDataUrl;
710
717
  if (dataUrl) {
711
- chunkHMZA25W2_js.registerPersistentAudio(
718
+ chunkYDEEINER_js.registerPersistentAudio(
712
719
  element.id,
713
720
  dataUrl,
714
721
  element.mediaMimeType,
@@ -806,17 +813,17 @@ function Badge({
806
813
  "div",
807
814
  {
808
815
  className: `absolute inset-0 flex flex-col items-center justify-center ${isMissing ? "gap-1" : ""}`,
809
- ...{ [chunkHMZA25W2_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
816
+ ...{ [chunkYDEEINER_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
810
817
  children: [
811
818
  /* @__PURE__ */ jsxRuntime.jsx(
812
819
  FallbackIcon,
813
820
  {
814
- paths: chunkHMZA25W2_js.mediaFallbackIcon(visual, element.mediaType),
821
+ paths: chunkYDEEINER_js.mediaFallbackIcon(visual, element.mediaType),
815
822
  size: isMissing ? 32 : 48,
816
823
  className: isMissing ? "text-white/60" : "text-white/80 drop-shadow-md"
817
824
  }
818
825
  ),
819
- isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkHMZA25W2_js.mediaFallbackLabelKey(visual, element.mediaType)) })
826
+ isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkYDEEINER_js.mediaFallbackLabelKey(visual, element.mediaType)) })
820
827
  ]
821
828
  }
822
829
  );
@@ -833,17 +840,17 @@ function Placeholder({
833
840
  "div",
834
841
  {
835
842
  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"}`,
836
- ...{ [chunkHMZA25W2_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
843
+ ...{ [chunkYDEEINER_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
837
844
  children: [
838
845
  /* @__PURE__ */ jsxRuntime.jsx(
839
846
  FallbackIcon,
840
847
  {
841
- paths: chunkHMZA25W2_js.mediaFallbackIcon(visual, element.mediaType),
848
+ paths: chunkYDEEINER_js.mediaFallbackIcon(visual, element.mediaType),
842
849
  size: isMissing ? 36 : element.mediaType === "audio" ? 24 : 32,
843
850
  className: isMissing ? "text-white/50" : "text-white/70"
844
851
  }
845
852
  ),
846
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkHMZA25W2_js.mediaFallbackLabelKey(visual, element.mediaType)) })
853
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkYDEEINER_js.mediaFallbackLabelKey(visual, element.mediaType)) })
847
854
  ]
848
855
  }
849
856
  );
@@ -853,7 +860,7 @@ function renderMediaFallback({
853
860
  posterUrl,
854
861
  surface
855
862
  }) {
856
- const visual = chunkHMZA25W2_js.mediaFallbackVisual(surface, {
863
+ const visual = chunkYDEEINER_js.mediaFallbackVisual(surface, {
857
864
  hasPoster: Boolean(posterUrl),
858
865
  missing: element.mediaMissing === true
859
866
  });
@@ -864,7 +871,8 @@ function renderMediaFallback({
864
871
  {
865
872
  src: posterUrl,
866
873
  alt: visual.dimPoster ? chunkSWRY3SI5_js.translationsEn["pptx.media.posterAlt"] : chunkSWRY3SI5_js.translationsEn["pptx.media.videoPosterAlt"],
867
- className: `w-full h-full object-contain${visual.dimPoster ? " opacity-50" : ""}`
874
+ className: `w-full h-full${visual.dimPoster ? " opacity-50" : ""}`,
875
+ style: chunkYDEEINER_js.getImageFitStyle(element)
868
876
  }
869
877
  ),
870
878
  /* @__PURE__ */ jsxRuntime.jsx(Badge, { visual, element })
@@ -882,7 +890,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
882
890
  const dataUrl = element.mediaData ?? (mediaPath ? mediaDataUrls.get(mediaPath) : void 0);
883
891
  const trimFragment = buildTrimFragment(element);
884
892
  const posterUrl = element.posterFrameData ?? void 0;
885
- const shouldLoop = chunkHMZA25W2_js.mediaPlaybackAttributes(element).loop;
893
+ const shouldLoop = chunkYDEEINER_js.mediaPlaybackAttributes(element).loop;
886
894
  const shouldAutoPlay = options?.autoPlay === true || element.autoPlay === true;
887
895
  const isFullScreen = options?.fullScreen === true;
888
896
  const isPresentationMode = options?.isPresentationMode === true;
@@ -965,19 +973,20 @@ function renderMediaElement(element, mediaDataUrls, options) {
965
973
 
966
974
  // src/viewer/utils/text-utils.tsx
967
975
  function getTextStyleForElement(element, fallbackColor) {
968
- return chunkHMZA25W2_js.buildTextBlockStyle(element, { fallbackColor });
976
+ return chunkYDEEINER_js.buildTextBlockStyle(element, { fallbackColor });
969
977
  }
970
978
 
971
979
  // src/viewer/utils/text-layout.tsx
972
980
  function getTextLayoutStyle(element) {
973
- if (!chunkHMZA25W2_js.hasTextProperties(element)) {
981
+ if (!chunkYDEEINER_js.hasTextProperties(element)) {
974
982
  return {};
975
983
  }
976
- const writingMode = chunkHMZA25W2_js.toCssWritingMode(element.textStyle?.textDirection);
977
- const textOrientation = chunkHMZA25W2_js.toCssTextOrientation(element.textStyle?.textDirection);
978
- const verticalDirection = chunkHMZA25W2_js.toCssVerticalDirection(element.textStyle?.textDirection);
984
+ const writingMode = chunkYDEEINER_js.toCssWritingMode(element.textStyle?.textDirection);
985
+ const textOrientation = chunkYDEEINER_js.toCssTextOrientation(element.textStyle?.textDirection);
986
+ const verticalDirection = chunkYDEEINER_js.toCssVerticalDirection(element.textStyle?.textDirection);
979
987
  const textWrapNone = element.textStyle?.textWrap === "none";
980
- const hasParagraphIndents = chunkHMZA25W2_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
988
+ const shapeAutoFitTextBox = element.textStyle?.autoFitMode === "shrink" && (element.type === "text" || element.locks?.txBox === true);
989
+ const hasParagraphIndents = chunkYDEEINER_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
981
990
  const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
982
991
  const paragraphIndent = element.textStyle?.paragraphIndent;
983
992
  const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
@@ -986,7 +995,7 @@ function getTextLayoutStyle(element) {
986
995
  const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
987
996
  return {
988
997
  // Columns / flex anchoring / anchorCtr / tab-size / kinsoku, from shared.
989
- ...chunkHMZA25W2_js.buildTextBodyLayoutStyle(element),
998
+ ...chunkYDEEINER_js.buildTextBodyLayoutStyle(element),
990
999
  // Body inset only. Paragraph spacing (spcBef/spcAft) is applied
991
1000
  // per-paragraph by the paragraph renderer, not collapsed here.
992
1001
  paddingTop: bodyTop,
@@ -996,6 +1005,15 @@ function getTextLayoutStyle(element) {
996
1005
  direction: verticalDirection,
997
1006
  marginLeft,
998
1007
  textIndent,
1008
+ ...shapeAutoFitTextBox ? {
1009
+ width: textWrapNone ? "max-content" : "100%",
1010
+ minWidth: "100%",
1011
+ height: "max-content",
1012
+ minHeight: "100%",
1013
+ whiteSpace: "pre-wrap",
1014
+ wordBreak: textWrapNone ? "normal" : "break-word",
1015
+ overflow: "visible"
1016
+ } : {},
999
1017
  ...textWrapNone ? {
1000
1018
  whiteSpace: "nowrap",
1001
1019
  overflow: "visible"
@@ -1005,7 +1023,7 @@ function getTextLayoutStyle(element) {
1005
1023
 
1006
1024
  // src/viewer/utils/text-effects.tsx
1007
1025
  function buildTextBody3DSceneStyle2(textStyle) {
1008
- return chunkHMZA25W2_js.buildTextBody3DSceneStyle(textStyle);
1026
+ return chunkYDEEINER_js.buildTextBody3DSceneStyle(textStyle);
1009
1027
  }
1010
1028
 
1011
1029
  // src/viewer/utils/text-warp-css.tsx
@@ -1190,13 +1208,13 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1190
1208
  if (!subElementAnimStates || subElementAnimStates.size === 0) {
1191
1209
  return renderedSegments;
1192
1210
  }
1193
- const paraKey = `${elementId}${chunkHMZA25W2_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1211
+ const paraKey = `${elementId}${chunkYDEEINER_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1194
1212
  const paraState = subElementAnimStates.get(paraKey);
1195
1213
  if (paraState) {
1196
1214
  const style = buildAnimStyle(paraState);
1197
1215
  return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
1198
1216
  }
1199
- const spec = chunkHMZA25W2_js.buildTextBuildSpec(
1217
+ const spec = chunkYDEEINER_js.buildTextBuildSpec(
1200
1218
  elementId,
1201
1219
  paraIndex,
1202
1220
  paraRuns.map((run) => ({ text: run.text, style: run })),
@@ -1214,7 +1232,7 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1214
1232
  "span",
1215
1233
  {
1216
1234
  "data-anim-id": span.animId,
1217
- style: chunkHMZA25W2_js.textBuildSpanStyle(span),
1235
+ style: chunkYDEEINER_js.textBuildSpanStyle(span),
1218
1236
  children: content
1219
1237
  },
1220
1238
  span.animId
@@ -1222,7 +1240,7 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1222
1240
  });
1223
1241
  }
1224
1242
  function renderTabbedLine(line, ctx, keyPrefix, renderPiece, nestedStyle) {
1225
- const [lineLayout] = chunkHMZA25W2_js.buildRunTabLines(line, ctx, nestedStyle);
1243
+ const [lineLayout] = chunkYDEEINER_js.buildRunTabLines(line, ctx, nestedStyle);
1226
1244
  return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block", whiteSpace: "nowrap" }, children: lineLayout.pieces.map((piece, i) => {
1227
1245
  const key = `${keyPrefix}-tab-${i}`;
1228
1246
  return /* @__PURE__ */ jsxRuntime.jsxs(React6__default.default.Fragment, { children: [
@@ -1235,7 +1253,7 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
1235
1253
  if (!needsScriptFonts || !text) {
1236
1254
  return text;
1237
1255
  }
1238
- const pieces = chunkHMZA25W2_js.splitRunByScriptFont(
1256
+ const pieces = chunkYDEEINER_js.splitRunByScriptFont(
1239
1257
  text,
1240
1258
  scriptFonts,
1241
1259
  baseFontFamily,
@@ -1252,7 +1270,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
1252
1270
  if (!metric || !text) {
1253
1271
  return inner(text, keyPrefix);
1254
1272
  }
1255
- const pieces = chunkHMZA25W2_js.splitRunForMetrics(text, metric.font);
1273
+ const pieces = chunkYDEEINER_js.splitRunForMetrics(text, metric.font);
1256
1274
  if (pieces.length <= 1) {
1257
1275
  return inner(text, keyPrefix);
1258
1276
  }
@@ -1261,7 +1279,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
1261
1279
  {
1262
1280
  style: {
1263
1281
  ...metric.nestedStyle,
1264
- letterSpacing: chunkHMZA25W2_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1282
+ letterSpacing: chunkYDEEINER_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1265
1283
  },
1266
1284
  children: inner(piece.text, `${keyPrefix}-w${i}`)
1267
1285
  },
@@ -1348,8 +1366,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
1348
1366
  });
1349
1367
  }
1350
1368
  function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
1351
- const mathml = chunkHMZA25W2_js.convertOmmlToMathMl(equationXml);
1352
- const safeMathml = mathml ? chunkHMZA25W2_js.sanitizeMathMl(mathml) : "";
1369
+ const mathml = chunkYDEEINER_js.convertOmmlToMathMl(equationXml);
1370
+ const safeMathml = mathml ? chunkYDEEINER_js.sanitizeMathMl(mathml) : "";
1353
1371
  const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
1354
1372
  "span",
1355
1373
  {
@@ -1477,7 +1495,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1477
1495
  const segmentStyle = segment?.style ?? {};
1478
1496
  const textValue = run.text;
1479
1497
  const lines = textValue.split("\n");
1480
- const resolvedSegmentColor = chunkHMZA25W2_js.normalizeHexColor(
1498
+ const resolvedSegmentColor = chunkYDEEINER_js.normalizeHexColor(
1481
1499
  segmentStyle.color || element.textStyle?.color,
1482
1500
  run.hyperlink ? HYPERLINK_COLOR : fallbackColor
1483
1501
  );
@@ -1485,16 +1503,16 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1485
1503
  const baselineFraction = rawBaseline === 0 ? 0 : Math.abs(rawBaseline) >= 1e3 ? rawBaseline / 1e5 : rawBaseline / 100;
1486
1504
  const baselineFontScale = baselineFraction !== 0 ? BASELINE_FONT_SCALE : 1;
1487
1505
  const rawFontSize = segmentStyle.fontSize || element.textStyle?.fontSize || DEFAULT_TEXT_FONT_SIZE;
1488
- const baseFontSize = rawFontSize * chunkHMZA25W2_js.resolveAutoFitFontScale(element.textStyle);
1506
+ const baseFontSize = rawFontSize * chunkYDEEINER_js.resolveAutoFitFontScale(element.textStyle);
1489
1507
  const baselineShift = baselineFraction !== 0 ? `${baselineFraction * baseFontSize}px` : void 0;
1490
- const fontKerning = chunkHMZA25W2_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
1508
+ const fontKerning = chunkYDEEINER_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
1491
1509
  const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
1492
- const baseFontFamily = rawFontFamily ? chunkHMZA25W2_js.getSubstituteFontFamily(
1510
+ const baseFontFamily = rawFontFamily ? chunkYDEEINER_js.getSubstituteFontFamily(
1493
1511
  rawFontFamily,
1494
- chunkHMZA25W2_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1512
+ chunkYDEEINER_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1495
1513
  ) : DEFAULT_FONT_FAMILY2;
1496
- const scriptFonts = chunkHMZA25W2_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
1497
- const needsScriptFonts = chunkHMZA25W2_js.hasDistinctScriptFonts(scriptFonts);
1514
+ const scriptFonts = chunkYDEEINER_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
1515
+ const needsScriptFonts = chunkYDEEINER_js.hasDistinctScriptFonts(scriptFonts);
1498
1516
  const authoredLetterSpacing = typeof segmentStyle.characterSpacing === "number" && segmentStyle.characterSpacing !== 0 ? segmentStyle.characterSpacing / 100 * (96 / 72) : 0;
1499
1517
  const metricFont = {
1500
1518
  fontFamily: baseFontFamily,
@@ -1502,7 +1520,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1502
1520
  bold: Boolean(segmentStyle.bold),
1503
1521
  italic: Boolean(segmentStyle.italic)
1504
1522
  };
1505
- const nestedStyle = chunkHMZA25W2_js.nestedTextDecorationStyle(run.style);
1523
+ const nestedStyle = chunkYDEEINER_js.nestedTextDecorationStyle(run.style);
1506
1524
  const metricContext = { font: metricFont, authoredPx: authoredLetterSpacing, nestedStyle };
1507
1525
  const spanStyle = { ...run.style };
1508
1526
  spanStyle.color = resolvedSegmentColor;
@@ -1510,11 +1528,11 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1510
1528
  spanStyle.fontFamily = baseFontFamily;
1511
1529
  spanStyle.verticalAlign = baselineShift;
1512
1530
  spanStyle.fontKerning = fontKerning;
1513
- spanStyle.letterSpacing = chunkHMZA25W2_js.pieceLetterSpacing(
1531
+ spanStyle.letterSpacing = chunkYDEEINER_js.pieceLetterSpacing(
1514
1532
  authoredLetterSpacing,
1515
- chunkHMZA25W2_js.resolveMetricTrackingPx(textValue, metricFont)
1533
+ chunkYDEEINER_js.resolveMetricTrackingPx(textValue, metricFont)
1516
1534
  );
1517
- const hollow = chunkHMZA25W2_js.hollowTextFillStyle(segmentStyle, {
1535
+ const hollow = chunkYDEEINER_js.hollowTextFillStyle(segmentStyle, {
1518
1536
  color: resolvedSegmentColor,
1519
1537
  textStroke: typeof spanStyle.WebkitTextStroke === "string" ? spanStyle.WebkitTextStroke : void 0
1520
1538
  });
@@ -1535,7 +1553,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1535
1553
  scriptFonts,
1536
1554
  baseFontFamily,
1537
1555
  findHighlights,
1538
- chunkHMZA25W2_js.buildTabContext(
1556
+ chunkYDEEINER_js.buildTabContext(
1539
1557
  element.textStyle?.tabStops,
1540
1558
  element.textStyle?.defaultTabSize,
1541
1559
  baseFontSize,
@@ -1561,7 +1579,7 @@ function renderRubyOrText(run, baseContent) {
1561
1579
  ] });
1562
1580
  }
1563
1581
  function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick) {
1564
- if (!chunkHMZA25W2_js.hasTextProperties(element)) {
1582
+ if (!chunkYDEEINER_js.hasTextProperties(element)) {
1565
1583
  return emptyFallback || null;
1566
1584
  }
1567
1585
  const segments = segmentOverrides ?? element.textSegments;
@@ -1571,7 +1589,7 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
1571
1589
  }
1572
1590
  return element.text || emptyFallback || "";
1573
1591
  }
1574
- const paragraphs = chunkHMZA25W2_js.buildParagraphs(element, fieldContext, segmentOverrides);
1592
+ const paragraphs = chunkYDEEINER_js.buildParagraphs(element, fieldContext, segmentOverrides);
1575
1593
  const ctx = {
1576
1594
  element,
1577
1595
  fallbackColor,
@@ -1704,13 +1722,13 @@ function hexToRgbUnit(hex) {
1704
1722
  };
1705
1723
  }
1706
1724
  function getDuotoneColors(element) {
1707
- if (!chunkHMZA25W2_js.isImageLikeElement(element)) {
1725
+ if (!chunkYDEEINER_js.isImageLikeElement(element)) {
1708
1726
  return void 0;
1709
1727
  }
1710
1728
  return element.imageEffects?.duotone;
1711
1729
  }
1712
1730
  function buildLineShadowCss(element) {
1713
- if (!chunkHMZA25W2_js.hasShapeProperties(element)) {
1731
+ if (!chunkYDEEINER_js.hasShapeProperties(element)) {
1714
1732
  return void 0;
1715
1733
  }
1716
1734
  const ss = element.shapeStyle;
@@ -1721,13 +1739,13 @@ function buildLineShadowCss(element) {
1721
1739
  const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
1722
1740
  const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
1723
1741
  const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
1724
- return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkHMZA25W2_js.colorWithOpacity(
1725
- chunkHMZA25W2_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1742
+ return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkYDEEINER_js.colorWithOpacity(
1743
+ chunkYDEEINER_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1726
1744
  opacity
1727
1745
  )}`;
1728
1746
  }
1729
1747
  function buildLineGlowFilter(element) {
1730
- if (!chunkHMZA25W2_js.hasShapeProperties(element)) {
1748
+ if (!chunkYDEEINER_js.hasShapeProperties(element)) {
1731
1749
  return void 0;
1732
1750
  }
1733
1751
  const ss = element.shapeStyle;
@@ -1736,14 +1754,14 @@ function buildLineGlowFilter(element) {
1736
1754
  }
1737
1755
  const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
1738
1756
  const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
1739
- const glowCol = chunkHMZA25W2_js.colorWithOpacity(chunkHMZA25W2_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1757
+ const glowCol = chunkYDEEINER_js.colorWithOpacity(chunkYDEEINER_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1740
1758
  return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
1741
1759
  }
1742
1760
  function getDagDuotoneFilterId(elementId) {
1743
1761
  return `dag-duotone-${elementId}`;
1744
1762
  }
1745
1763
  function hasDagDuotoneEffect(element) {
1746
- if (!chunkHMZA25W2_js.hasShapeProperties(element)) {
1764
+ if (!chunkYDEEINER_js.hasShapeProperties(element)) {
1747
1765
  return false;
1748
1766
  }
1749
1767
  return Boolean(element.shapeStyle?.dagDuotone);
@@ -1795,7 +1813,7 @@ function renderDagDuotoneSvgFilter(elementId, color1, color2) {
1795
1813
 
1796
1814
  // src/viewer/utils/shape-visual-3d.ts
1797
1815
  function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
1798
- return chunkHMZA25W2_js.build3DExtrusionData(
1816
+ return chunkYDEEINER_js.build3DExtrusionData(
1799
1817
  shape3d,
1800
1818
  scene3d,
1801
1819
  fillColor,
@@ -1804,21 +1822,24 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
1804
1822
  );
1805
1823
  }
1806
1824
  function apply3dEffects2(base, scene3d, shape3d, fillColorFallback) {
1807
- chunkHMZA25W2_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
1825
+ chunkYDEEINER_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
1808
1826
  }
1809
1827
 
1810
1828
  // src/viewer/utils/shape-visual-style.ts
1811
1829
  function rendersCustomVectorPath(element) {
1812
1830
  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;
1813
1831
  }
1832
+ function rendersWedgeCalloutVector(element) {
1833
+ return element.type === "shape" && chunkYDEEINER_js.isWedgeCalloutPresetShape(element.shapeType);
1834
+ }
1814
1835
  function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _strokeColor, animatesFill, animatesStroke, parentGroupFill) {
1815
- if (!chunkHMZA25W2_js.hasShapeProperties(element)) {
1836
+ if (!chunkYDEEINER_js.hasShapeProperties(element)) {
1816
1837
  return {};
1817
1838
  }
1818
1839
  const ss = element.shapeStyle;
1819
- const fill = animatesFill ? void 0 : chunkHMZA25W2_js.getComputedFillStyle(element, parentGroupFill);
1820
- const fx = chunkHMZA25W2_js.getComputedEffectStyle(element);
1821
- const stroke = chunkHMZA25W2_js.getComputedStrokeStyle(element);
1840
+ const fill = animatesFill ? void 0 : chunkYDEEINER_js.getComputedFillStyle(element, parentGroupFill);
1841
+ const fx = chunkYDEEINER_js.getComputedEffectStyle(element);
1842
+ const stroke = chunkYDEEINER_js.getComputedStrokeStyle(element);
1822
1843
  const base = {
1823
1844
  // A gradient fill REPLACES the solid fill, it does not sit on top of it;
1824
1845
  // the whole precedence lives in shared's `getComputedFillStyle`.
@@ -1855,8 +1876,21 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1855
1876
  strokeMiterlimit: stroke.strokeMiterlimit,
1856
1877
  strokeLinecap: stroke.strokeLinecap
1857
1878
  };
1879
+ Object.assign(
1880
+ base,
1881
+ chunkYDEEINER_js.getAnimationColorBaseStyle(element, {
1882
+ animatesFill,
1883
+ animatesStroke,
1884
+ parentGroupFill
1885
+ })
1886
+ );
1887
+ if (element.type === "image" || element.type === "picture") {
1888
+ base.borderWidth = 0;
1889
+ base.borderColor = void 0;
1890
+ base.borderStyle = void 0;
1891
+ }
1858
1892
  apply3dEffects2(base, ss?.scene3d, ss?.shape3d, ss?.fillColor ?? fillColor);
1859
- if (rendersCustomVectorPath(element) || chunkHMZA25W2_js.isStrokeOnlyPresetElement(element)) {
1893
+ if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || chunkYDEEINER_js.isStrokeOnlyPresetElement(element)) {
1860
1894
  base.backgroundColor = "transparent";
1861
1895
  base.backgroundImage = void 0;
1862
1896
  base.borderWidth = void 0;
@@ -1867,7 +1901,10 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1867
1901
  base.backgroundColor = void 0;
1868
1902
  base.backgroundImage = void 0;
1869
1903
  }
1870
- const geometry = chunkHMZA25W2_js.resolveShapeGeometry(element);
1904
+ if (rendersWedgeCalloutVector(element)) {
1905
+ return base;
1906
+ }
1907
+ const geometry = chunkYDEEINER_js.resolveShapeGeometry(element);
1871
1908
  switch (geometry.kind) {
1872
1909
  case "bare":
1873
1910
  return { backgroundColor: "transparent", borderWidth: 0, borderStyle: "none" };
@@ -1893,13 +1930,13 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1893
1930
  function getConnectorAdjustment(element, key, fallback) {
1894
1931
  const direct = element.shapeAdjustments?.[key];
1895
1932
  if (typeof direct === "number" && Number.isFinite(direct)) {
1896
- return chunkHMZA25W2_js.clampUnitInterval(direct / 1e5);
1933
+ return chunkYDEEINER_js.clampUnitInterval(direct / 1e5);
1897
1934
  }
1898
1935
  const fallbackKey = element.shapeAdjustments?.adj;
1899
1936
  if (typeof fallbackKey === "number" && Number.isFinite(fallbackKey)) {
1900
- return chunkHMZA25W2_js.clampUnitInterval(fallbackKey / 1e5);
1937
+ return chunkYDEEINER_js.clampUnitInterval(fallbackKey / 1e5);
1901
1938
  }
1902
- return chunkHMZA25W2_js.clampUnitInterval(fallback);
1939
+ return chunkYDEEINER_js.clampUnitInterval(fallback);
1903
1940
  }
1904
1941
  function getConnectorPathGeometry(element) {
1905
1942
  const width = Math.max(element.width, 0);
@@ -2036,11 +2073,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
2036
2073
  strokePaint,
2037
2074
  strokeWidth,
2038
2075
  dashArray,
2039
- lineCap: chunkHMZA25W2_js.svgLineCap(shapeStyle?.lineCap),
2076
+ lineCap: chunkYDEEINER_js.svgLineCap(shapeStyle?.lineCap),
2040
2077
  lineJoin,
2041
2078
  miterLimit,
2042
- offsets: chunkHMZA25W2_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
2043
- widths: chunkHMZA25W2_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
2079
+ offsets: chunkYDEEINER_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
2080
+ widths: chunkYDEEINER_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
2044
2081
  };
2045
2082
  }
2046
2083
  function strokeStrands(d, keyBase, ctx) {
@@ -2088,12 +2125,12 @@ function gradientDefs(gradient) {
2088
2125
  }
2089
2126
  function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false, gradient) {
2090
2127
  const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
2091
- const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkHMZA25W2_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
2128
+ const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkYDEEINER_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
2092
2129
  const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
2093
- const gradientPaint = gradient ? chunkHMZA25W2_js.svgGradientFillRef(gradient) : void 0;
2130
+ const gradientPaint = gradient ? chunkYDEEINER_js.svgGradientFillRef(gradient) : void 0;
2094
2131
  const nodes = [];
2095
2132
  if (subpaths && needsPerSubpath) {
2096
- const paints = chunkHMZA25W2_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
2133
+ const paints = chunkYDEEINER_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
2097
2134
  paints.forEach((paint, idx) => {
2098
2135
  if (paint.fill !== "none") {
2099
2136
  const mode = subpaths[idx]?.fillMode;
@@ -2122,7 +2159,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2122
2159
  "path",
2123
2160
  {
2124
2161
  d: pathData,
2125
- fill: animatesFill ? "inherit" : gradientPaint ?? chunkHMZA25W2_js.colorWithOpacity(fillColor, fillOpacity),
2162
+ fill: animatesFill ? "inherit" : gradientPaint ?? chunkYDEEINER_js.colorWithOpacity(fillColor, fillOpacity),
2126
2163
  stroke: "none",
2127
2164
  vectorEffect: "non-scaling-stroke"
2128
2165
  },
@@ -2147,15 +2184,32 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2147
2184
  }
2148
2185
  );
2149
2186
  }
2187
+ function renderGradientDefs(gradient) {
2188
+ if (!gradient) {
2189
+ return null;
2190
+ }
2191
+ const stops = gradient.stops.map((stop, index) => /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: stop.offset, stopColor: stop.color, stopOpacity: stop.opacity }, index));
2192
+ return /* @__PURE__ */ jsxRuntime.jsx("defs", { children: gradient.kind === "radial" ? /* @__PURE__ */ jsxRuntime.jsx("radialGradient", { id: gradient.id, cx: gradient.cx, cy: gradient.cy, r: gradient.r, children: stops }) : /* @__PURE__ */ jsxRuntime.jsx(
2193
+ "linearGradient",
2194
+ {
2195
+ id: gradient.id,
2196
+ x1: gradient.x1,
2197
+ y1: gradient.y1,
2198
+ x2: gradient.x2,
2199
+ y2: gradient.y2,
2200
+ children: stops
2201
+ }
2202
+ ) });
2203
+ }
2150
2204
  function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
2151
- if (!chunkHMZA25W2_js.hasShapeProperties(element)) {
2205
+ if (!chunkYDEEINER_js.hasShapeProperties(element)) {
2152
2206
  return null;
2153
2207
  }
2154
2208
  const normalizedType = (element.shapeType || "").toLowerCase();
2155
- const fillPaint = animatesFill ? "inherit" : chunkHMZA25W2_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2156
- const strokePaint = animatesStroke ? "inherit" : chunkHMZA25W2_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2157
- const dashType = chunkHMZA25W2_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2158
- const dashArray = chunkHMZA25W2_js.getSvgStrokeDasharray(
2209
+ const fillPaint = animatesFill ? "inherit" : chunkYDEEINER_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2210
+ const strokePaint = animatesStroke ? "inherit" : chunkYDEEINER_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2211
+ const dashType = chunkYDEEINER_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2212
+ const dashArray = chunkYDEEINER_js.getSvgStrokeDasharray(
2159
2213
  dashType,
2160
2214
  Math.max(strokeWidth, 1),
2161
2215
  element.shapeStyle?.customDashSegments
@@ -2236,21 +2290,96 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2236
2290
  // container's `background-image` is suppressed for custom geometry, so
2237
2291
  // without this the shape fell back to the parser's representative solid
2238
2292
  // and lost every fade (issue #132).
2239
- chunkHMZA25W2_js.buildSvgGradientDef(element.shapeStyle, element.id)
2293
+ chunkYDEEINER_js.buildSvgGradientDef(element.shapeStyle, element.id)
2294
+ );
2295
+ }
2296
+ if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !chunkYDEEINER_js.buildStrokeOutline(element)) {
2297
+ const width = Math.max(element.width, 1);
2298
+ const height = Math.max(element.height, 1);
2299
+ const geometry = chunkYDEEINER_js.getPresetShapeVectorGeometry(
2300
+ element.shapeType || "rect",
2301
+ width,
2302
+ height,
2303
+ element.shapeAdjustments
2240
2304
  );
2305
+ if (geometry) {
2306
+ return /* @__PURE__ */ jsxRuntime.jsx(
2307
+ "svg",
2308
+ {
2309
+ viewBox: `${geometry.minX} ${geometry.minY} ${geometry.viewWidth} ${geometry.viewHeight}`,
2310
+ className: "w-full h-full pointer-events-none",
2311
+ preserveAspectRatio: "none",
2312
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2313
+ "path",
2314
+ {
2315
+ d: geometry.d,
2316
+ fill: "none",
2317
+ stroke: strokePaint,
2318
+ strokeWidth: strokeWidth * 2,
2319
+ strokeDasharray: dashArray,
2320
+ vectorEffect: "non-scaling-stroke"
2321
+ }
2322
+ )
2323
+ }
2324
+ );
2325
+ }
2326
+ }
2327
+ if (element.type === "shape" && chunkYDEEINER_js.isWedgeCalloutPresetShape(element.shapeType)) {
2328
+ const width = Math.max(element.width, 1);
2329
+ const height = Math.max(element.height, 1);
2330
+ const geometry = chunkYDEEINER_js.getPresetShapeVectorGeometry(
2331
+ element.shapeType,
2332
+ width,
2333
+ height,
2334
+ element.shapeAdjustments
2335
+ );
2336
+ if (geometry) {
2337
+ const gradient = chunkYDEEINER_js.buildSvgGradientDef(element.shapeStyle, element.id);
2338
+ const gradientPaint = gradient ? chunkYDEEINER_js.svgGradientFillRef(gradient) : void 0;
2339
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2340
+ "svg",
2341
+ {
2342
+ viewBox: `${geometry.minX} ${geometry.minY} ${geometry.viewWidth} ${geometry.viewHeight}`,
2343
+ className: "pointer-events-none",
2344
+ preserveAspectRatio: "none",
2345
+ style: {
2346
+ position: "absolute",
2347
+ left: geometry.minX,
2348
+ top: geometry.minY,
2349
+ width: geometry.viewWidth,
2350
+ height: geometry.viewHeight,
2351
+ overflow: "visible"
2352
+ },
2353
+ children: [
2354
+ animatesFill ? null : renderGradientDefs(gradient),
2355
+ /* @__PURE__ */ jsxRuntime.jsx(
2356
+ "path",
2357
+ {
2358
+ d: geometry.d,
2359
+ fill: hasFill ? animatesFill ? "inherit" : gradientPaint ?? fillPaint : "none",
2360
+ stroke: strokeWidth > 0 ? strokePaint : "none",
2361
+ strokeWidth,
2362
+ strokeDasharray: dashArray,
2363
+ vectorEffect: "non-scaling-stroke"
2364
+ }
2365
+ )
2366
+ ]
2367
+ }
2368
+ );
2369
+ }
2241
2370
  }
2242
- if (chunkHMZA25W2_js.isCalloutShape(normalizedType)) {
2371
+ if (chunkYDEEINER_js.isCalloutShape(normalizedType)) {
2243
2372
  const width = Math.max(element.width, 1);
2244
2373
  const height = Math.max(element.height, 1);
2245
- const geometry = chunkHMZA25W2_js.getCalloutLeaderLineGeometry(
2374
+ const geometry = chunkYDEEINER_js.getCalloutLeaderLineGeometry(
2246
2375
  normalizedType,
2247
2376
  width,
2248
2377
  height,
2249
2378
  element.shapeAdjustments
2250
2379
  );
2251
2380
  if (geometry && geometry.points.length >= 2) {
2252
- const leaderPath = chunkHMZA25W2_js.buildCalloutLeaderLineSvgPath(geometry);
2253
- const bounds = chunkHMZA25W2_js.getCalloutViewBoxBounds(width, height, geometry);
2381
+ const leaderPath = chunkYDEEINER_js.buildCalloutLeaderLineSvgPath(geometry);
2382
+ const bounds = chunkYDEEINER_js.getCalloutViewBoxBounds(width, height, geometry);
2254
2383
  const lineStroke = Math.max(strokeWidth, 1);
2255
2384
  const offsetLeft = bounds.minX;
2256
2385
  const offsetTop = bounds.minY;
@@ -2313,10 +2442,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2313
2442
  const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
2314
2443
  const endArrowL = element.shapeStyle?.connectorEndArrowLength;
2315
2444
  const compoundLine = element.shapeStyle?.compoundLine;
2316
- const connectorLineCap = chunkHMZA25W2_js.svgLineCap(element.shapeStyle?.lineCap);
2445
+ const connectorLineCap = chunkYDEEINER_js.svgLineCap(element.shapeStyle?.lineCap);
2317
2446
  const hitTargetWidth = Math.max(strokeWidth * 3, 12);
2318
- const offsets = chunkHMZA25W2_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2319
- const widths = chunkHMZA25W2_js.getCompoundLineWidths(compoundLine, strokeWidth);
2447
+ const offsets = chunkYDEEINER_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2448
+ const widths = chunkYDEEINER_js.getCompoundLineWidths(compoundLine, strokeWidth);
2320
2449
  return /* @__PURE__ */ jsxRuntime.jsxs(
2321
2450
  "svg",
2322
2451
  {
@@ -2383,15 +2512,15 @@ function parseGradientFillCss(gradFill) {
2383
2512
  }
2384
2513
  const rawStops = stops.map((gs) => {
2385
2514
  const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
2386
- const color = chunkHMZA25W2_js.parseDrawingColor(gs) ?? "#888888";
2387
- const opacity = chunkHMZA25W2_js.parseDrawingColorOpacity(gs);
2515
+ const color = chunkYDEEINER_js.parseDrawingColor(gs) ?? "#888888";
2516
+ const opacity = chunkYDEEINER_js.parseDrawingColorOpacity(gs);
2388
2517
  return { position: pos, color, opacity };
2389
2518
  }).sort((a, b) => a.position - b.position);
2390
- const stopStrings = rawStops.map((s) => `${chunkHMZA25W2_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
2519
+ const stopStrings = rawStops.map((s) => `${chunkYDEEINER_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
2391
2520
  const lin = gradFill["a:lin"];
2392
2521
  if (lin) {
2393
2522
  const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
2394
- const angleDeg = Math.round(chunkHMZA25W2_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2523
+ const angleDeg = Math.round(chunkYDEEINER_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2395
2524
  return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
2396
2525
  }
2397
2526
  const path = gradFill["a:path"];
@@ -2405,7 +2534,7 @@ function parseGradientFillCss(gradFill) {
2405
2534
  b: Number.parseInt(String(fillToRectXml["@_b"] || "0"), 10) / 1e5
2406
2535
  } : void 0;
2407
2536
  if (pathType === "rect") {
2408
- return chunkHMZA25W2_js.buildRectPathGradient(rawStops, void 0, fillToRect);
2537
+ return chunkYDEEINER_js.buildRectPathGradient(rawStops, void 0, fillToRect);
2409
2538
  }
2410
2539
  let cx = 50;
2411
2540
  let cy = 50;
@@ -2427,8 +2556,8 @@ function parsePatternFillCss(pattFill) {
2427
2556
  if (!pattFill) {
2428
2557
  return void 0;
2429
2558
  }
2430
- const fgColor = chunkHMZA25W2_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2431
- const bgColor = chunkHMZA25W2_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2559
+ const fgColor = chunkYDEEINER_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2560
+ const bgColor = chunkYDEEINER_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2432
2561
  const preset = String(pattFill["@_prst"] || "ltDnDiag");
2433
2562
  switch (preset) {
2434
2563
  case "ltHorz":
@@ -2539,11 +2668,11 @@ function parseCellBorders(cellProperties) {
2539
2668
  const prstDash = ln["a:prstDash"];
2540
2669
  const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
2541
2670
  const cssBorderStyle = ooxmlDashToCss(dashVal);
2542
- const color = chunkHMZA25W2_js.parseDrawingColor(ln["a:solidFill"]);
2671
+ const color = chunkYDEEINER_js.parseDrawingColor(ln["a:solidFill"]);
2543
2672
  if (color) {
2544
- const opacity = chunkHMZA25W2_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2673
+ const opacity = chunkYDEEINER_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2545
2674
  const key = `${edge.prefix}`;
2546
- borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkHMZA25W2_js.colorWithOpacity(color, opacity)}`;
2675
+ borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkYDEEINER_js.colorWithOpacity(color, opacity)}`;
2547
2676
  }
2548
2677
  }
2549
2678
  return borderStyle;
@@ -2556,7 +2685,7 @@ function parseCellTextEffects(runProps) {
2556
2685
  const textShadowParts = [];
2557
2686
  const outerShdw = effectLst["a:outerShdw"];
2558
2687
  if (outerShdw) {
2559
- const shdwColor = chunkHMZA25W2_js.parseDrawingColor(outerShdw);
2688
+ const shdwColor = chunkYDEEINER_js.parseDrawingColor(outerShdw);
2560
2689
  if (shdwColor) {
2561
2690
  const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
2562
2691
  const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
@@ -2574,7 +2703,7 @@ function parseCellTextEffects(runProps) {
2574
2703
  }
2575
2704
  const glow = effectLst["a:glow"];
2576
2705
  if (glow) {
2577
- const glowColor = chunkHMZA25W2_js.parseDrawingColor(glow);
2706
+ const glowColor = chunkYDEEINER_js.parseDrawingColor(glow);
2578
2707
  if (glowColor) {
2579
2708
  const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
2580
2709
  const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
@@ -2654,10 +2783,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2654
2783
  if (runProps?.["@_u"] !== void 0) {
2655
2784
  cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
2656
2785
  }
2657
- const runColor = chunkHMZA25W2_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkHMZA25W2_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2786
+ const runColor = chunkYDEEINER_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkYDEEINER_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2658
2787
  if (runColor) {
2659
- const opacity = chunkHMZA25W2_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2660
- cellStyle.color = chunkHMZA25W2_js.colorWithOpacity(runColor, opacity);
2788
+ const opacity = chunkYDEEINER_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2789
+ cellStyle.color = chunkYDEEINER_js.colorWithOpacity(runColor, opacity);
2661
2790
  }
2662
2791
  const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
2663
2792
  if (fontFamily) {
@@ -2667,15 +2796,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2667
2796
  cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
2668
2797
  }
2669
2798
  const cellProperties = cellXml["a:tcPr"];
2670
- const cellFill = chunkHMZA25W2_js.parseDrawingColor(
2799
+ const cellFill = chunkYDEEINER_js.parseDrawingColor(
2671
2800
  cellProperties?.["a:solidFill"],
2672
2801
  schemeColorOverrides
2673
2802
  );
2674
2803
  if (cellFill) {
2675
- const opacity = chunkHMZA25W2_js.parseDrawingColorOpacity(
2804
+ const opacity = chunkYDEEINER_js.parseDrawingColorOpacity(
2676
2805
  cellProperties?.["a:solidFill"]
2677
2806
  );
2678
- cellStyle.backgroundColor = chunkHMZA25W2_js.colorWithOpacity(cellFill, opacity);
2807
+ cellStyle.backgroundColor = chunkYDEEINER_js.colorWithOpacity(cellFill, opacity);
2679
2808
  } else {
2680
2809
  const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
2681
2810
  if (gradCss) {
@@ -2690,16 +2819,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2690
2819
  const edgeBorders = parseCellBorders(cellProperties);
2691
2820
  Object.assign(cellStyle, edgeBorders);
2692
2821
  if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
2693
- const borderColor = chunkHMZA25W2_js.parseDrawingColor(
2822
+ const borderColor = chunkYDEEINER_js.parseDrawingColor(
2694
2823
  cellProperties?.["a:lnL"]?.["a:solidFill"],
2695
2824
  schemeColorOverrides
2696
- ) || chunkHMZA25W2_js.parseDrawingColor(
2825
+ ) || chunkYDEEINER_js.parseDrawingColor(
2697
2826
  cellProperties?.["a:lnR"]?.["a:solidFill"],
2698
2827
  schemeColorOverrides
2699
- ) || chunkHMZA25W2_js.parseDrawingColor(
2828
+ ) || chunkYDEEINER_js.parseDrawingColor(
2700
2829
  cellProperties?.["a:lnT"]?.["a:solidFill"],
2701
2830
  schemeColorOverrides
2702
- ) || chunkHMZA25W2_js.parseDrawingColor(
2831
+ ) || chunkYDEEINER_js.parseDrawingColor(
2703
2832
  cellProperties?.["a:lnB"]?.["a:solidFill"],
2704
2833
  schemeColorOverrides
2705
2834
  );
@@ -2771,7 +2900,7 @@ function getTableCellBandStyle2(element, rowIndex, cellIndex, rowCount, columnCo
2771
2900
  if (element.type !== "table") {
2772
2901
  return void 0;
2773
2902
  }
2774
- return chunkHMZA25W2_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2903
+ return chunkYDEEINER_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2775
2904
  tableStyleMap: styleCtx?.tableStyleMap,
2776
2905
  colorScheme: styleCtx?.theme?.colorScheme,
2777
2906
  fontScheme: styleCtx?.theme?.fontScheme
@@ -2847,7 +2976,7 @@ function renderTableCellContent(cell, fallbackText) {
2847
2976
  return /* @__PURE__ */ jsxRuntime.jsx(
2848
2977
  "span",
2849
2978
  {
2850
- style: { position: "relative", ...chunkHMZA25W2_js.cellRunStyle(run) },
2979
+ style: { position: "relative", ...chunkYDEEINER_js.cellRunStyle(run) },
2851
2980
  children: run.text
2852
2981
  },
2853
2982
  `r-${index}`
@@ -2855,7 +2984,7 @@ function renderTableCellContent(cell, fallbackText) {
2855
2984
  });
2856
2985
  }
2857
2986
  function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
2858
- return chunkHMZA25W2_js.getCellDiagonalBorders(style, tableData, pos, {
2987
+ return chunkYDEEINER_js.getCellDiagonalBorders(style, tableData, pos, {
2859
2988
  tableStyleMap: styleCtx?.tableStyleMap,
2860
2989
  colorScheme: styleCtx?.theme?.colorScheme,
2861
2990
  fontScheme: styleCtx?.theme?.fontScheme
@@ -2988,7 +3117,7 @@ function TableResizeOverlay({
2988
3117
  const containerRef = React6.useRef(null);
2989
3118
  const [rowBounds, setRowBounds] = React6.useState([]);
2990
3119
  const dragRef = React6.useRef(null);
2991
- const colBoundaries = React6.useMemo(() => chunkHMZA25W2_js.computeColumnBoundaries(columnWidths), [columnWidths]);
3120
+ const colBoundaries = React6.useMemo(() => chunkYDEEINER_js.computeColumnBoundaries(columnWidths), [columnWidths]);
2992
3121
  const measureRows = React6.useCallback(() => {
2993
3122
  const container = containerRef.current;
2994
3123
  if (!container) {
@@ -3035,11 +3164,11 @@ function TableResizeOverlay({
3035
3164
  const rect = containerRef.current.getBoundingClientRect();
3036
3165
  if (drag.type === "col" && drag.initialWidths && onResizeColumns) {
3037
3166
  const deltaProp = (e.clientX - drag.startPos) / rect.width;
3038
- onResizeColumns(chunkHMZA25W2_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
3167
+ onResizeColumns(chunkYDEEINER_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
3039
3168
  } else if (drag.type === "row" && onResizeRow) {
3040
3169
  const deltaY = e.clientY - drag.startPos;
3041
- const newHeight = chunkHMZA25W2_js.computeResizedRowHeight(
3042
- drag.initialRowHeight ?? chunkHMZA25W2_js.DEFAULT_ROW_HEIGHT,
3170
+ const newHeight = chunkYDEEINER_js.computeResizedRowHeight(
3171
+ drag.initialRowHeight ?? chunkYDEEINER_js.DEFAULT_ROW_HEIGHT,
3043
3172
  deltaY
3044
3173
  );
3045
3174
  onResizeRow(drag.index, newHeight);
@@ -3077,7 +3206,7 @@ function TableResizeOverlay({
3077
3206
  e.stopPropagation();
3078
3207
  const table = containerRef.current?.querySelector("table");
3079
3208
  const tr = table?.querySelectorAll("tbody > tr")[index];
3080
- const actualHeight = tr?.offsetHeight ?? chunkHMZA25W2_js.DEFAULT_ROW_HEIGHT;
3209
+ const actualHeight = tr?.offsetHeight ?? chunkYDEEINER_js.DEFAULT_ROW_HEIGHT;
3081
3210
  document.body.style.cursor = "row-resize";
3082
3211
  document.body.style.userSelect = "none";
3083
3212
  dragRef.current = {
@@ -3124,7 +3253,7 @@ function renderTableFromTableData(element, textStyle, options) {
3124
3253
  colorScheme: options?.styleCtx?.theme?.colorScheme,
3125
3254
  fontScheme: options?.styleCtx?.theme?.fontScheme
3126
3255
  };
3127
- const cellCss = (cell, rowIndex, cellIndex) => chunkHMZA25W2_js.tableCellCss(
3256
+ const cellCss = (cell, rowIndex, cellIndex) => chunkYDEEINER_js.tableCellCss(
3128
3257
  tableData,
3129
3258
  cell,
3130
3259
  { rowIndex, cellIndex, rowCount, columnCount },
@@ -3137,7 +3266,7 @@ function renderTableFromTableData(element, textStyle, options) {
3137
3266
  }
3138
3267
  const first = selectedCell.selectedCells[0];
3139
3268
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3140
- return chunkHMZA25W2_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3269
+ return chunkYDEEINER_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3141
3270
  })();
3142
3271
  return /* @__PURE__ */ jsxRuntime.jsx(
3143
3272
  TableResizeOverlay,
@@ -3158,9 +3287,9 @@ function renderTableFromTableData(element, textStyle, options) {
3158
3287
  {
3159
3288
  className: "w-full h-full border-collapse table-fixed",
3160
3289
  style: {
3161
- fontFamily: chunkHMZA25W2_js.DEFAULT_FONT_FAMILY,
3290
+ fontFamily: chunkYDEEINER_js.DEFAULT_FONT_FAMILY,
3162
3291
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3163
- ...chunkHMZA25W2_js.tableContainerCss(tableData)
3292
+ ...chunkYDEEINER_js.tableContainerCss(tableData)
3164
3293
  },
3165
3294
  children: [
3166
3295
  tableData.columnWidths.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: tableData.columnWidths.map((w, ci) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3179,7 +3308,7 @@ function renderTableFromTableData(element, textStyle, options) {
3179
3308
  return null;
3180
3309
  }
3181
3310
  const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
3182
- const isInMultiSelection = chunkHMZA25W2_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3311
+ const isInMultiSelection = chunkYDEEINER_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3183
3312
  const isCellEditing = isCellSelected && selectedCell?.isEditing;
3184
3313
  const diag = getCellDiagonalBorders2(
3185
3314
  cell.style,
@@ -3208,7 +3337,7 @@ function renderTableFromTableData(element, textStyle, options) {
3208
3337
  }
3209
3338
  event.stopPropagation();
3210
3339
  if (event.shiftKey && selectedCell) {
3211
- const rect = chunkHMZA25W2_js.computeSelectionRect(
3340
+ const rect = chunkYDEEINER_js.computeSelectionRect(
3212
3341
  selectedCell.rowIndex,
3213
3342
  selectedCell.columnIndex,
3214
3343
  rowIndex,
@@ -3218,7 +3347,7 @@ function renderTableFromTableData(element, textStyle, options) {
3218
3347
  options?.onSelectCell?.({
3219
3348
  rowIndex: selectedCell.rowIndex,
3220
3349
  columnIndex: selectedCell.columnIndex,
3221
- selectedCells: chunkHMZA25W2_js.rectToCells(rect)
3350
+ selectedCells: chunkYDEEINER_js.rectToCells(rect)
3222
3351
  });
3223
3352
  } else {
3224
3353
  options?.onSelectCell?.({
@@ -3294,7 +3423,7 @@ function renderTableElement(element, textStyle, options) {
3294
3423
  }
3295
3424
  const first = selectedCell.selectedCells[0];
3296
3425
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3297
- return chunkHMZA25W2_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3426
+ return chunkYDEEINER_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3298
3427
  })();
3299
3428
  const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
3300
3429
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -3316,9 +3445,9 @@ function renderTableElement(element, textStyle, options) {
3316
3445
  {
3317
3446
  className: "w-full h-full border-collapse table-fixed",
3318
3447
  style: {
3319
- fontFamily: chunkHMZA25W2_js.DEFAULT_FONT_FAMILY,
3448
+ fontFamily: chunkYDEEINER_js.DEFAULT_FONT_FAMILY,
3320
3449
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3321
- ...chunkHMZA25W2_js.tableContainerCss(tableEl.tableData)
3450
+ ...chunkYDEEINER_js.tableContainerCss(tableEl.tableData)
3322
3451
  },
3323
3452
  children: [
3324
3453
  parsedTable.columnPercentages.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((percentage, columnIndex) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3375,7 +3504,7 @@ function renderTableElement(element, textStyle, options) {
3375
3504
  color: textStyle.color,
3376
3505
  ...bandStyle,
3377
3506
  ...xmlCellStyle,
3378
- ...tdCellOverride ? chunkHMZA25W2_js.cellStyleToCss(tdCellOverride) : void 0,
3507
+ ...tdCellOverride ? chunkYDEEINER_js.cellStyleToCss(tdCellOverride) : void 0,
3379
3508
  ...diag ? { position: "relative" } : void 0
3380
3509
  };
3381
3510
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3385,7 +3514,7 @@ function renderTableElement(element, textStyle, options) {
3385
3514
  "border px-1 py-0.5 align-top",
3386
3515
  isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
3387
3516
  selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
3388
- chunkHMZA25W2_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3517
+ chunkYDEEINER_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3389
3518
  ),
3390
3519
  colSpan,
3391
3520
  rowSpan: rSpan,
@@ -3396,7 +3525,7 @@ function renderTableElement(element, textStyle, options) {
3396
3525
  }
3397
3526
  event.stopPropagation();
3398
3527
  if (event.shiftKey && selectedCell && tableEl.tableData) {
3399
- const rect = chunkHMZA25W2_js.computeSelectionRect(
3528
+ const rect = chunkYDEEINER_js.computeSelectionRect(
3400
3529
  selectedCell.rowIndex,
3401
3530
  selectedCell.columnIndex,
3402
3531
  rowIndex,
@@ -3406,7 +3535,7 @@ function renderTableElement(element, textStyle, options) {
3406
3535
  options?.onSelectCell?.({
3407
3536
  rowIndex: selectedCell.rowIndex,
3408
3537
  columnIndex: selectedCell.columnIndex,
3409
- selectedCells: chunkHMZA25W2_js.rectToCells(rect)
3538
+ selectedCells: chunkYDEEINER_js.rectToCells(rect)
3410
3539
  });
3411
3540
  } else {
3412
3541
  options?.onSelectCell?.({
@@ -3465,23 +3594,23 @@ function renderTableElement(element, textStyle, options) {
3465
3594
  );
3466
3595
  }
3467
3596
  function partAttrs(part) {
3468
- return part ? chunkHMZA25W2_js.chartPartToAttrs(part) : void 0;
3597
+ return part ? chunkYDEEINER_js.chartPartToAttrs(part) : void 0;
3469
3598
  }
3470
3599
  function resolveReactPalette(chartData) {
3471
3600
  if (chartData.colorPalette && chartData.colorPalette.length > 0) {
3472
3601
  return chartData.colorPalette;
3473
3602
  }
3474
- return [...chunkHMZA25W2_js.getChartStylePalette(chartData.style?.styleId)];
3603
+ return [...chunkYDEEINER_js.getChartStylePalette(chartData.style?.styleId)];
3475
3604
  }
3476
3605
  function buildReactChartViewModel(element) {
3477
3606
  if (element.type !== "chart" || !element.chartData) {
3478
- return chunkHMZA25W2_js.buildChartViewModel(element);
3607
+ return chunkYDEEINER_js.buildChartViewModel(element);
3479
3608
  }
3480
3609
  const palette = resolveReactPalette(element.chartData), themedElement = {
3481
3610
  ...element,
3482
3611
  chartData: { ...element.chartData, colorPalette: palette }
3483
3612
  };
3484
- return chunkHMZA25W2_js.buildChartViewModel(themedElement);
3613
+ return chunkYDEEINER_js.buildChartViewModel(themedElement);
3485
3614
  }
3486
3615
  function renderPrimitive(prim, key) {
3487
3616
  switch (prim.kind) {
@@ -3630,7 +3759,7 @@ function renderText(t, key) {
3630
3759
  );
3631
3760
  }
3632
3761
  function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3633
- const legendItems = chunkHMZA25W2_js.computeChartLegendLayout(vm);
3762
+ const legendItems = chunkYDEEINER_js.computeChartLegendLayout(vm);
3634
3763
  return /* @__PURE__ */ jsxRuntime.jsxs(
3635
3764
  "svg",
3636
3765
  {
@@ -3729,11 +3858,11 @@ function renderChartElement(element) {
3729
3858
  if (!chartData || chartData.series.length === 0) {
3730
3859
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkSWRY3SI5_js.translationsEn["pptx.chart.heading"] });
3731
3860
  }
3732
- const kind = chunkHMZA25W2_js.resolveChartKind(chartData.chartType ?? "bar");
3861
+ const kind = chunkYDEEINER_js.resolveChartKind(chartData.chartType ?? "bar");
3733
3862
  return renderChartViewModel(
3734
3863
  element.id,
3735
3864
  buildReactChartViewModel(element),
3736
- chunkHMZA25W2_js.chartPreserveAspectRatio(kind)
3865
+ chunkYDEEINER_js.chartPreserveAspectRatio(kind)
3737
3866
  );
3738
3867
  }
3739
3868
 
@@ -3753,14 +3882,14 @@ function buildNotesPdf(pages) {
3753
3882
  notes: page.notes,
3754
3883
  slideNumber: page.slideNumber
3755
3884
  }));
3756
- const bytes = chunkHMZA25W2_js.buildNotesPdfBytes(images, meta);
3885
+ const bytes = chunkYDEEINER_js.buildNotesPdfBytes(images, meta);
3757
3886
  const blob = new Blob([bytes], { type: "application/pdf" });
3758
3887
  return URL.createObjectURL(blob);
3759
3888
  }
3760
3889
 
3761
3890
  // src/viewer/utils/pdf-builder-slides.ts
3762
3891
  function buildPdfFromImageData(images) {
3763
- const bytes = chunkHMZA25W2_js.buildSlidesPdfBytes(images);
3892
+ const bytes = chunkYDEEINER_js.buildSlidesPdfBytes(images);
3764
3893
  const blob = new Blob([bytes], { type: "application/pdf" });
3765
3894
  return URL.createObjectURL(blob);
3766
3895
  }
@@ -3769,7 +3898,7 @@ function buildPdfFromImageData(images) {
3769
3898
  var activePreview = null;
3770
3899
  function startPreviewAnimation(elementId, preset, options) {
3771
3900
  stopPreviewAnimation();
3772
- const descriptor = chunkHMZA25W2_js.buildPreviewAnimation(preset, options);
3901
+ const descriptor = chunkYDEEINER_js.buildPreviewAnimation(preset, options);
3773
3902
  if (!descriptor) {
3774
3903
  return;
3775
3904
  }
@@ -3782,7 +3911,7 @@ function startMotionPathPreview(elementId, path, options) {
3782
3911
  return;
3783
3912
  }
3784
3913
  const stage = domEl.offsetParent;
3785
- const descriptor = chunkHMZA25W2_js.buildMotionPathPreview({
3914
+ const descriptor = chunkYDEEINER_js.buildMotionPathPreview({
3786
3915
  path,
3787
3916
  slideWidth: stage?.offsetWidth || DEFAULT_PREVIEW_SLIDE_WIDTH,
3788
3917
  slideHeight: stage?.offsetHeight || DEFAULT_PREVIEW_SLIDE_HEIGHT,
@@ -3880,6 +4009,8 @@ exports.getConnectorPathGeometry = getConnectorPathGeometry;
3880
4009
  exports.getCropShapeClipPath = getCropShapeClipPath;
3881
4010
  exports.getDuotoneColors = getDuotoneColors;
3882
4011
  exports.getImageRenderStyle = getImageRenderStyle;
4012
+ exports.getImageSurfaceMaskStyle = getImageSurfaceMaskStyle;
4013
+ exports.getImageSurfaceStyle = getImageSurfaceStyle;
3883
4014
  exports.getImageTilingStyle = getImageTilingStyle2;
3884
4015
  exports.getShapeVisualStyle = getShapeVisualStyle;
3885
4016
  exports.getTextLayoutStyle = getTextLayoutStyle;