pptx-react-viewer 2.19.7 → 2.20.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 (108) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +1 -1
  3. package/dist/{AiChatPanel-MAC2Z5SK.js → AiChatPanel-KOKEVIOQ.js} +24 -24
  4. package/dist/AiChatPanel-KOKEVIOQ.js.br +0 -0
  5. package/dist/AiChatPanel-KOKEVIOQ.js.gz +0 -0
  6. package/dist/{AiChatPanel-WVO66CKC.mjs → AiChatPanel-S5UYFWT2.mjs} +4 -4
  7. package/dist/AiChatPanel-S5UYFWT2.mjs.br +0 -0
  8. package/dist/AiChatPanel-S5UYFWT2.mjs.gz +0 -0
  9. package/dist/{Model3DScene-CU4WGIMH.js → Model3DScene-T5372GIJ.js} +2 -2
  10. package/dist/Model3DScene-T5372GIJ.js.br +0 -0
  11. package/dist/Model3DScene-T5372GIJ.js.gz +0 -0
  12. package/dist/{Model3DScene-PTCZUGIT.mjs → Model3DScene-T6QOOVLN.mjs} +1 -1
  13. package/dist/Model3DScene-T6QOOVLN.mjs.br +0 -0
  14. package/dist/Model3DScene-T6QOOVLN.mjs.gz +0 -0
  15. package/dist/{chunk-DZHCLAH3.mjs → chunk-2T7J57AC.mjs} +1 -1
  16. package/dist/chunk-2T7J57AC.mjs.br +0 -0
  17. package/dist/chunk-2T7J57AC.mjs.gz +0 -0
  18. package/dist/{chunk-MVKRI3CZ.js → chunk-6CPUGAK7.js} +2 -0
  19. package/dist/chunk-6CPUGAK7.js.br +0 -0
  20. package/dist/{chunk-MVKRI3CZ.js.gz → chunk-6CPUGAK7.js.gz} +0 -0
  21. package/dist/{chunk-JENKEQZP.js → chunk-AFAAKYYB.js} +1093 -1254
  22. package/dist/chunk-AFAAKYYB.js.br +0 -0
  23. package/dist/chunk-AFAAKYYB.js.gz +0 -0
  24. package/dist/{chunk-V5PW4QCE.js → chunk-BW3ZS73U.js} +178 -172
  25. package/dist/chunk-BW3ZS73U.js.br +0 -0
  26. package/dist/chunk-BW3ZS73U.js.gz +0 -0
  27. package/dist/{chunk-GUGHIQ4P.js → chunk-J56DMNSD.js} +604 -452
  28. package/dist/chunk-J56DMNSD.js.br +0 -0
  29. package/dist/chunk-J56DMNSD.js.gz +0 -0
  30. package/dist/{chunk-SQJBFMEX.mjs → chunk-MZOZNBRO.mjs} +2 -0
  31. package/dist/chunk-MZOZNBRO.mjs.br +0 -0
  32. package/dist/{chunk-SQJBFMEX.mjs.gz → chunk-MZOZNBRO.mjs.gz} +0 -0
  33. package/dist/{chunk-ZPNLWBED.mjs → chunk-QLELFH7A.mjs} +586 -449
  34. package/dist/chunk-QLELFH7A.mjs.br +0 -0
  35. package/dist/chunk-QLELFH7A.mjs.gz +0 -0
  36. package/dist/{chunk-XDF76VFA.js → chunk-SAKMXLW2.js} +382 -379
  37. package/dist/chunk-SAKMXLW2.js.br +0 -0
  38. package/dist/chunk-SAKMXLW2.js.gz +0 -0
  39. package/dist/{chunk-EVM5OFAD.js → chunk-T7OUKBWK.js} +3 -3
  40. package/dist/chunk-T7OUKBWK.js.br +0 -0
  41. package/dist/chunk-T7OUKBWK.js.gz +0 -0
  42. package/dist/{chunk-QZV7XDQG.mjs → chunk-U2UIJRSW.mjs} +25 -19
  43. package/dist/chunk-U2UIJRSW.mjs.br +0 -0
  44. package/dist/chunk-U2UIJRSW.mjs.gz +0 -0
  45. package/dist/{chunk-5BG5BANR.mjs → chunk-XWCN4TGE.mjs} +67 -228
  46. package/dist/chunk-XWCN4TGE.mjs.br +0 -0
  47. package/dist/chunk-XWCN4TGE.mjs.gz +0 -0
  48. package/dist/{chunk-LP3Y4NXE.mjs → chunk-YMNURZ22.mjs} +6 -3
  49. package/dist/chunk-YMNURZ22.mjs.br +0 -0
  50. package/dist/chunk-YMNURZ22.mjs.gz +0 -0
  51. package/dist/i18n.js +4 -4
  52. package/dist/i18n.js.br +0 -0
  53. package/dist/i18n.js.gz +0 -0
  54. package/dist/i18n.mjs +1 -1
  55. package/dist/i18n.mjs.br +0 -0
  56. package/dist/i18n.mjs.gz +0 -0
  57. package/dist/index.js +47 -47
  58. package/dist/index.js.br +0 -0
  59. package/dist/index.js.gz +0 -0
  60. package/dist/index.mjs +6 -6
  61. package/dist/index.mjs.br +0 -0
  62. package/dist/index.mjs.gz +0 -0
  63. package/dist/internals.js +79 -79
  64. package/dist/internals.js.br +0 -0
  65. package/dist/internals.js.gz +0 -0
  66. package/dist/internals.mjs +4 -4
  67. package/dist/internals.mjs.br +0 -0
  68. package/dist/internals.mjs.gz +0 -0
  69. package/dist/pptx-viewer.css +1 -1
  70. package/dist/pptx-viewer.css.br +0 -0
  71. package/dist/pptx-viewer.css.gz +0 -0
  72. package/dist/viewer/index.js +27 -27
  73. package/dist/viewer/index.js.br +0 -0
  74. package/dist/viewer/index.js.gz +0 -0
  75. package/dist/viewer/index.mjs +6 -6
  76. package/dist/viewer/index.mjs.br +0 -0
  77. package/dist/viewer/index.mjs.gz +0 -0
  78. package/package.json +1 -1
  79. package/dist/AiChatPanel-MAC2Z5SK.js.br +0 -0
  80. package/dist/AiChatPanel-MAC2Z5SK.js.gz +0 -0
  81. package/dist/AiChatPanel-WVO66CKC.mjs.br +0 -0
  82. package/dist/AiChatPanel-WVO66CKC.mjs.gz +0 -0
  83. package/dist/Model3DScene-CU4WGIMH.js.br +0 -0
  84. package/dist/Model3DScene-CU4WGIMH.js.gz +0 -0
  85. package/dist/Model3DScene-PTCZUGIT.mjs.br +0 -0
  86. package/dist/Model3DScene-PTCZUGIT.mjs.gz +0 -0
  87. package/dist/chunk-5BG5BANR.mjs.br +0 -0
  88. package/dist/chunk-5BG5BANR.mjs.gz +0 -0
  89. package/dist/chunk-DZHCLAH3.mjs.br +0 -0
  90. package/dist/chunk-DZHCLAH3.mjs.gz +0 -0
  91. package/dist/chunk-EVM5OFAD.js.br +0 -0
  92. package/dist/chunk-EVM5OFAD.js.gz +0 -0
  93. package/dist/chunk-GUGHIQ4P.js.br +0 -0
  94. package/dist/chunk-GUGHIQ4P.js.gz +0 -0
  95. package/dist/chunk-JENKEQZP.js.br +0 -0
  96. package/dist/chunk-JENKEQZP.js.gz +0 -0
  97. package/dist/chunk-LP3Y4NXE.mjs.br +0 -0
  98. package/dist/chunk-LP3Y4NXE.mjs.gz +0 -0
  99. package/dist/chunk-MVKRI3CZ.js.br +0 -0
  100. package/dist/chunk-QZV7XDQG.mjs.br +0 -0
  101. package/dist/chunk-QZV7XDQG.mjs.gz +0 -0
  102. package/dist/chunk-SQJBFMEX.mjs.br +0 -0
  103. package/dist/chunk-V5PW4QCE.js.br +0 -0
  104. package/dist/chunk-V5PW4QCE.js.gz +0 -0
  105. package/dist/chunk-XDF76VFA.js.br +0 -0
  106. package/dist/chunk-XDF76VFA.js.gz +0 -0
  107. package/dist/chunk-ZPNLWBED.mjs.br +0 -0
  108. package/dist/chunk-ZPNLWBED.mjs.gz +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkMVKRI3CZ_js = require('./chunk-MVKRI3CZ.js');
4
- var chunkGUGHIQ4P_js = require('./chunk-GUGHIQ4P.js');
3
+ var chunk6CPUGAK7_js = require('./chunk-6CPUGAK7.js');
4
+ var chunkJ56DMNSD_js = require('./chunk-J56DMNSD.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 chunkGUGHIQ4P_js.getAnimationInitialStyle(preset, nativeAnimation);
18
+ return chunkJ56DMNSD_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 chunkGUGHIQ4P_js.cloneHistorySnapshot(snapshot);
26
+ return chunkJ56DMNSD_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 = chunkGUGHIQ4P_js.VIEWER_SHORTCUT_REFERENCE;
64
+ var SHORTCUT_REFERENCE_ITEMS = chunkJ56DMNSD_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 = chunkGUGHIQ4P_js.SHAPE_PRESET_DEFS.map(
108
+ var SHAPE_PRESETS = chunkJ56DMNSD_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 (!chunkGUGHIQ4P_js.hasShapeProperties(element)) {
267
+ if (!chunkJ56DMNSD_js.hasShapeProperties(element)) {
268
268
  return false;
269
269
  }
270
270
  const st = getShapeType(element.shapeType);
@@ -273,7 +273,7 @@ function isConnectorOrLineElement(element) {
273
273
 
274
274
  // src/viewer/utils/image-style.ts
275
275
  function getImageMaskStyle(element) {
276
- if (!chunkGUGHIQ4P_js.hasShapeProperties(element)) {
276
+ if (!chunkJ56DMNSD_js.hasShapeProperties(element)) {
277
277
  return void 0;
278
278
  }
279
279
  const shapeType = element.shapeType;
@@ -282,7 +282,7 @@ function getImageMaskStyle(element) {
282
282
  }
283
283
  const normalized = shapeType.toLowerCase();
284
284
  if (normalized === "roundrect" || normalized === "round1rect" || normalized === "round2samerect" || normalized === "round2diagrect" || normalized === "sniproundrect" || normalized === "snip1rect" || normalized === "snip2diagrect") {
285
- const radiusPx = chunkGUGHIQ4P_js.getRoundRectRadiusPx2(element);
285
+ const radiusPx = chunkJ56DMNSD_js.getRoundRectRadiusPx2(element);
286
286
  if (radiusPx <= 0.01) {
287
287
  return void 0;
288
288
  }
@@ -294,7 +294,7 @@ function getImageMaskStyle(element) {
294
294
  if (normalized === "can" || normalized === "cylinder") {
295
295
  return { borderRadius: "48% / 12%" };
296
296
  }
297
- const clipPath = chunkGUGHIQ4P_js.getResolvedShapeClipPath(element);
297
+ const clipPath = chunkJ56DMNSD_js.getResolvedShapeClipPath(element);
298
298
  if (!clipPath) {
299
299
  return void 0;
300
300
  }
@@ -303,7 +303,7 @@ function getImageMaskStyle(element) {
303
303
  function getImageRenderStyle(element) {
304
304
  return {
305
305
  ...getImageMaskStyle(element) || {},
306
- ...chunkGUGHIQ4P_js.getImageFitStyle(element)
306
+ ...chunkJ56DMNSD_js.getImageFitStyle(element)
307
307
  };
308
308
  }
309
309
  var CROP_SHAPE_CLIP_PATHS = {
@@ -316,7 +316,7 @@ var CROP_SHAPE_CLIP_PATHS = {
316
316
  star: "polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)"
317
317
  };
318
318
  function getCropShapeClipPath(element) {
319
- if (!chunkGUGHIQ4P_js.isImageLikeElement(element)) {
319
+ if (!chunkJ56DMNSD_js.isImageLikeElement(element)) {
320
320
  return void 0;
321
321
  }
322
322
  const shape = element.cropShape;
@@ -326,7 +326,7 @@ function getCropShapeClipPath(element) {
326
326
  return CROP_SHAPE_CLIP_PATHS[shape];
327
327
  }
328
328
  function getImageTilingStyle2(element) {
329
- return chunkGUGHIQ4P_js.getImageTilingStyle(element);
329
+ return chunkJ56DMNSD_js.getImageTilingStyle(element);
330
330
  }
331
331
 
332
332
  // src/viewer/utils/geometry-image.ts
@@ -526,9 +526,9 @@ function registerMediaElement(elementId, el) {
526
526
  };
527
527
  }
528
528
  function executeMediaCommand(command, frameRoot) {
529
- return chunkGUGHIQ4P_js.runMediaCommand(
529
+ return chunkJ56DMNSD_js.runMediaCommand(
530
530
  command,
531
- (targetId) => registry.get(targetId) ?? chunkGUGHIQ4P_js.findMediaElementByElementId(targetId, frameRoot?.())
531
+ (targetId) => registry.get(targetId) ?? chunkJ56DMNSD_js.findMediaElementByElementId(targetId, frameRoot?.())
532
532
  );
533
533
  }
534
534
  function PresentationMediaController({
@@ -572,7 +572,7 @@ function PresentationMediaController({
572
572
  loop: shouldLoop,
573
573
  volume: playbackVolume,
574
574
  playbackRate
575
- } = chunkGUGHIQ4P_js.mediaPlaybackAttributes({
575
+ } = chunkJ56DMNSD_js.mediaPlaybackAttributes({
576
576
  loop: element.loop,
577
577
  volume: element.volume,
578
578
  playbackSpeed: element.playbackSpeed
@@ -708,7 +708,7 @@ function PresentationMediaController({
708
708
  if (element.playAcrossSlides && element.mediaType === "audio") {
709
709
  const dataUrl = element.mediaData ?? resolvedDataUrl;
710
710
  if (dataUrl) {
711
- chunkGUGHIQ4P_js.registerPersistentAudio(
711
+ chunkJ56DMNSD_js.registerPersistentAudio(
712
712
  element.id,
713
713
  dataUrl,
714
714
  element.mediaMimeType,
@@ -770,7 +770,7 @@ function PresentationMediaController({
770
770
  ] });
771
771
  }
772
772
  function label(key) {
773
- return key === void 0 ? void 0 : chunkMVKRI3CZ_js.translationsEn[key];
773
+ return key === void 0 ? void 0 : chunk6CPUGAK7_js.translationsEn[key];
774
774
  }
775
775
  function FallbackIcon({
776
776
  paths,
@@ -806,17 +806,17 @@ function Badge({
806
806
  "div",
807
807
  {
808
808
  className: `absolute inset-0 flex flex-col items-center justify-center ${isMissing ? "gap-1" : ""}`,
809
- ...{ [chunkGUGHIQ4P_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
809
+ ...{ [chunkJ56DMNSD_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
810
810
  children: [
811
811
  /* @__PURE__ */ jsxRuntime.jsx(
812
812
  FallbackIcon,
813
813
  {
814
- paths: chunkGUGHIQ4P_js.mediaFallbackIcon(visual, element.mediaType),
814
+ paths: chunkJ56DMNSD_js.mediaFallbackIcon(visual, element.mediaType),
815
815
  size: isMissing ? 32 : 48,
816
816
  className: isMissing ? "text-white/60" : "text-white/80 drop-shadow-md"
817
817
  }
818
818
  ),
819
- isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkGUGHIQ4P_js.mediaFallbackLabelKey(visual, element.mediaType)) })
819
+ isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkJ56DMNSD_js.mediaFallbackLabelKey(visual, element.mediaType)) })
820
820
  ]
821
821
  }
822
822
  );
@@ -833,17 +833,17 @@ function Placeholder({
833
833
  "div",
834
834
  {
835
835
  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
- ...{ [chunkGUGHIQ4P_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
836
+ ...{ [chunkJ56DMNSD_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
837
837
  children: [
838
838
  /* @__PURE__ */ jsxRuntime.jsx(
839
839
  FallbackIcon,
840
840
  {
841
- paths: chunkGUGHIQ4P_js.mediaFallbackIcon(visual, element.mediaType),
841
+ paths: chunkJ56DMNSD_js.mediaFallbackIcon(visual, element.mediaType),
842
842
  size: isMissing ? 36 : element.mediaType === "audio" ? 24 : 32,
843
843
  className: isMissing ? "text-white/50" : "text-white/70"
844
844
  }
845
845
  ),
846
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkGUGHIQ4P_js.mediaFallbackLabelKey(visual, element.mediaType)) })
846
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkJ56DMNSD_js.mediaFallbackLabelKey(visual, element.mediaType)) })
847
847
  ]
848
848
  }
849
849
  );
@@ -853,7 +853,7 @@ function renderMediaFallback({
853
853
  posterUrl,
854
854
  surface
855
855
  }) {
856
- const visual = chunkGUGHIQ4P_js.mediaFallbackVisual(surface, {
856
+ const visual = chunkJ56DMNSD_js.mediaFallbackVisual(surface, {
857
857
  hasPoster: Boolean(posterUrl),
858
858
  missing: element.mediaMissing === true
859
859
  });
@@ -863,7 +863,7 @@ function renderMediaFallback({
863
863
  "img",
864
864
  {
865
865
  src: posterUrl,
866
- alt: visual.dimPoster ? chunkMVKRI3CZ_js.translationsEn["pptx.media.posterAlt"] : chunkMVKRI3CZ_js.translationsEn["pptx.media.videoPosterAlt"],
866
+ alt: visual.dimPoster ? chunk6CPUGAK7_js.translationsEn["pptx.media.posterAlt"] : chunk6CPUGAK7_js.translationsEn["pptx.media.videoPosterAlt"],
867
867
  className: `w-full h-full object-contain${visual.dimPoster ? " opacity-50" : ""}`
868
868
  }
869
869
  ),
@@ -874,7 +874,7 @@ function renderMediaFallback({
874
874
  }
875
875
  function renderMediaElement(element, mediaDataUrls, options) {
876
876
  if (element.type !== "media") {
877
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkMVKRI3CZ_js.translationsEn["pptx.media.title"] });
877
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunk6CPUGAK7_js.translationsEn["pptx.media.title"] });
878
878
  }
879
879
  const mediaType = element.mediaType;
880
880
  const mediaPath = element.mediaPath;
@@ -882,7 +882,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
882
882
  const dataUrl = element.mediaData ?? (mediaPath ? mediaDataUrls.get(mediaPath) : void 0);
883
883
  const trimFragment = buildTrimFragment(element);
884
884
  const posterUrl = element.posterFrameData ?? void 0;
885
- const shouldLoop = chunkGUGHIQ4P_js.mediaPlaybackAttributes(element).loop;
885
+ const shouldLoop = chunkJ56DMNSD_js.mediaPlaybackAttributes(element).loop;
886
886
  const shouldAutoPlay = options?.autoPlay === true || element.autoPlay === true;
887
887
  const isFullScreen = options?.fullScreen === true;
888
888
  const isPresentationMode = options?.isPresentationMode === true;
@@ -960,24 +960,24 @@ function renderMediaElement(element, mediaDataUrls, options) {
960
960
  if (surface.presenting || surface.preview) {
961
961
  return null;
962
962
  }
963
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkMVKRI3CZ_js.translationsEn["pptx.media.title"] });
963
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunk6CPUGAK7_js.translationsEn["pptx.media.title"] });
964
964
  }
965
965
 
966
966
  // src/viewer/utils/text-utils.tsx
967
967
  function getTextStyleForElement(element, fallbackColor) {
968
- return chunkGUGHIQ4P_js.buildTextBlockStyle(element, { fallbackColor });
968
+ return chunkJ56DMNSD_js.buildTextBlockStyle(element, { fallbackColor });
969
969
  }
970
970
 
971
971
  // src/viewer/utils/text-layout.tsx
972
972
  function getTextLayoutStyle(element) {
973
- if (!chunkGUGHIQ4P_js.hasTextProperties(element)) {
973
+ if (!chunkJ56DMNSD_js.hasTextProperties(element)) {
974
974
  return {};
975
975
  }
976
- const writingMode = chunkGUGHIQ4P_js.toCssWritingMode(element.textStyle?.textDirection);
977
- const textOrientation = chunkGUGHIQ4P_js.toCssTextOrientation(element.textStyle?.textDirection);
978
- const verticalDirection = chunkGUGHIQ4P_js.toCssVerticalDirection(element.textStyle?.textDirection);
976
+ const writingMode = chunkJ56DMNSD_js.toCssWritingMode(element.textStyle?.textDirection);
977
+ const textOrientation = chunkJ56DMNSD_js.toCssTextOrientation(element.textStyle?.textDirection);
978
+ const verticalDirection = chunkJ56DMNSD_js.toCssVerticalDirection(element.textStyle?.textDirection);
979
979
  const textWrapNone = element.textStyle?.textWrap === "none";
980
- const hasParagraphIndents = chunkGUGHIQ4P_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
980
+ const hasParagraphIndents = chunkJ56DMNSD_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
981
981
  const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
982
982
  const paragraphIndent = element.textStyle?.paragraphIndent;
983
983
  const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
@@ -986,7 +986,7 @@ function getTextLayoutStyle(element) {
986
986
  const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
987
987
  return {
988
988
  // Columns / flex anchoring / anchorCtr / tab-size / kinsoku, from shared.
989
- ...chunkGUGHIQ4P_js.buildTextBodyLayoutStyle(element),
989
+ ...chunkJ56DMNSD_js.buildTextBodyLayoutStyle(element),
990
990
  // Body inset only. Paragraph spacing (spcBef/spcAft) is applied
991
991
  // per-paragraph by the paragraph renderer, not collapsed here.
992
992
  paddingTop: bodyTop,
@@ -1005,7 +1005,7 @@ function getTextLayoutStyle(element) {
1005
1005
 
1006
1006
  // src/viewer/utils/text-effects.tsx
1007
1007
  function buildTextBody3DSceneStyle2(textStyle) {
1008
- return chunkGUGHIQ4P_js.buildTextBody3DSceneStyle(textStyle);
1008
+ return chunkJ56DMNSD_js.buildTextBody3DSceneStyle(textStyle);
1009
1009
  }
1010
1010
 
1011
1011
  // src/viewer/utils/text-warp-css.tsx
@@ -1190,13 +1190,13 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1190
1190
  if (!subElementAnimStates || subElementAnimStates.size === 0) {
1191
1191
  return renderedSegments;
1192
1192
  }
1193
- const paraKey = `${elementId}${chunkGUGHIQ4P_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1193
+ const paraKey = `${elementId}${chunkJ56DMNSD_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1194
1194
  const paraState = subElementAnimStates.get(paraKey);
1195
1195
  if (paraState) {
1196
1196
  const style = buildAnimStyle(paraState);
1197
1197
  return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
1198
1198
  }
1199
- const spec = chunkGUGHIQ4P_js.buildTextBuildSpec(
1199
+ const spec = chunkJ56DMNSD_js.buildTextBuildSpec(
1200
1200
  elementId,
1201
1201
  paraIndex,
1202
1202
  paraRuns.map((run) => ({ text: run.text, style: run })),
@@ -1214,7 +1214,7 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1214
1214
  "span",
1215
1215
  {
1216
1216
  "data-anim-id": span.animId,
1217
- style: chunkGUGHIQ4P_js.textBuildSpanStyle(span),
1217
+ style: chunkJ56DMNSD_js.textBuildSpanStyle(span),
1218
1218
  children: content
1219
1219
  },
1220
1220
  span.animId
@@ -1358,10 +1358,10 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
1358
1358
  if (!needsScriptFonts || !text) {
1359
1359
  return text;
1360
1360
  }
1361
- const runs = chunkGUGHIQ4P_js.segmentByScript(text);
1361
+ const runs = chunkJ56DMNSD_js.segmentByScript(text);
1362
1362
  if (runs.length <= 1) {
1363
1363
  if (runs.length === 1) {
1364
- const font = chunkGUGHIQ4P_js.resolveFontForScript(runs[0].script, scriptFonts);
1364
+ const font = chunkJ56DMNSD_js.resolveFontForScript(runs[0].script, scriptFonts);
1365
1365
  if (font && font !== baseFontFamily) {
1366
1366
  return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { ...nestedStyle, fontFamily: font }, children: text });
1367
1367
  }
@@ -1369,7 +1369,7 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
1369
1369
  return text;
1370
1370
  }
1371
1371
  return runs.map((run, i) => {
1372
- const font = chunkGUGHIQ4P_js.resolveFontForScript(run.script, scriptFonts);
1372
+ const font = chunkJ56DMNSD_js.resolveFontForScript(run.script, scriptFonts);
1373
1373
  if (!font || font === baseFontFamily) {
1374
1374
  return /* @__PURE__ */ jsxRuntime.jsx(React6__default.default.Fragment, { children: run.text }, `${keyPrefix}-r${i}`);
1375
1375
  }
@@ -1380,7 +1380,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
1380
1380
  if (!metric || !text) {
1381
1381
  return inner(text, keyPrefix);
1382
1382
  }
1383
- const pieces = chunkGUGHIQ4P_js.splitRunForMetrics(text, metric.font);
1383
+ const pieces = chunkJ56DMNSD_js.splitRunForMetrics(text, metric.font);
1384
1384
  if (pieces.length <= 1) {
1385
1385
  return inner(text, keyPrefix);
1386
1386
  }
@@ -1389,7 +1389,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
1389
1389
  {
1390
1390
  style: {
1391
1391
  ...metric.nestedStyle,
1392
- letterSpacing: chunkGUGHIQ4P_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1392
+ letterSpacing: chunkJ56DMNSD_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1393
1393
  },
1394
1394
  children: inner(piece.text, `${keyPrefix}-w${i}`)
1395
1395
  },
@@ -1476,8 +1476,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
1476
1476
  });
1477
1477
  }
1478
1478
  function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
1479
- const mathml = chunkGUGHIQ4P_js.convertOmmlToMathMl(equationXml);
1480
- const safeMathml = mathml ? chunkGUGHIQ4P_js.sanitizeMathMl(mathml) : "";
1479
+ const mathml = chunkJ56DMNSD_js.convertOmmlToMathMl(equationXml);
1480
+ const safeMathml = mathml ? chunkJ56DMNSD_js.sanitizeMathMl(mathml) : "";
1481
1481
  const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
1482
1482
  "span",
1483
1483
  {
@@ -1487,7 +1487,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
1487
1487
  },
1488
1488
  dangerouslySetInnerHTML: { __html: safeMathml }
1489
1489
  }
1490
- ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-1 py-0.5 rounded text-xs bg-gray-200/20 text-gray-400 italic", children: chunkMVKRI3CZ_js.translationsEn["pptx.textSegment.equationFallback"] });
1490
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-1 py-0.5 rounded text-xs bg-gray-200/20 text-gray-400 italic", children: chunk6CPUGAK7_js.translationsEn["pptx.textSegment.equationFallback"] });
1491
1491
  if (equationNumber) {
1492
1492
  return /* @__PURE__ */ jsxRuntime.jsxs(
1493
1493
  "span",
@@ -1537,7 +1537,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1537
1537
  const segmentStyle = segment?.style ?? {};
1538
1538
  const textValue = run.text;
1539
1539
  const lines = textValue.split("\n");
1540
- const resolvedSegmentColor = chunkGUGHIQ4P_js.normalizeHexColor(
1540
+ const resolvedSegmentColor = chunkJ56DMNSD_js.normalizeHexColor(
1541
1541
  segmentStyle.color || element.textStyle?.color,
1542
1542
  run.hyperlink ? HYPERLINK_COLOR : fallbackColor
1543
1543
  );
@@ -1545,16 +1545,16 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1545
1545
  const baselineFraction = rawBaseline === 0 ? 0 : Math.abs(rawBaseline) >= 1e3 ? rawBaseline / 1e5 : rawBaseline / 100;
1546
1546
  const baselineFontScale = baselineFraction !== 0 ? BASELINE_FONT_SCALE : 1;
1547
1547
  const rawFontSize = segmentStyle.fontSize || element.textStyle?.fontSize || DEFAULT_TEXT_FONT_SIZE;
1548
- const baseFontSize = rawFontSize * chunkGUGHIQ4P_js.resolveAutoFitFontScale(element.textStyle);
1548
+ const baseFontSize = rawFontSize * chunkJ56DMNSD_js.resolveAutoFitFontScale(element.textStyle);
1549
1549
  const baselineShift = baselineFraction !== 0 ? `${baselineFraction * baseFontSize}px` : void 0;
1550
1550
  const baseFontSizePt = baseFontSize * (72 / 96);
1551
1551
  const fontKerning = typeof segmentStyle.kerning === "number" ? segmentStyle.kerning === 0 ? "none" : baseFontSizePt >= segmentStyle.kerning / 100 ? "normal" : "none" : void 0;
1552
1552
  const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
1553
- const baseFontFamily = rawFontFamily ? chunkGUGHIQ4P_js.getSubstituteFontFamily(
1553
+ const baseFontFamily = rawFontFamily ? chunkJ56DMNSD_js.getSubstituteFontFamily(
1554
1554
  rawFontFamily,
1555
- chunkGUGHIQ4P_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1555
+ chunkJ56DMNSD_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1556
1556
  ) : DEFAULT_FONT_FAMILY2;
1557
- const scriptFont = (name, panose) => name ? chunkGUGHIQ4P_js.getSubstituteFontFamily(name, chunkGUGHIQ4P_js.parsePanoseString(panose)) : baseFontFamily;
1557
+ const scriptFont = (name, panose) => name ? chunkJ56DMNSD_js.getSubstituteFontFamily(name, chunkJ56DMNSD_js.parsePanoseString(panose)) : baseFontFamily;
1558
1558
  const scriptFonts = {
1559
1559
  latin: baseFontFamily,
1560
1560
  eastAsia: scriptFont(
@@ -1570,7 +1570,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1570
1570
  segmentStyle.symbolFontPanose ?? element.textStyle?.symbolFontPanose
1571
1571
  )
1572
1572
  };
1573
- const needsScriptFonts = chunkGUGHIQ4P_js.hasDistinctScriptFonts(scriptFonts);
1573
+ const needsScriptFonts = chunkJ56DMNSD_js.hasDistinctScriptFonts(scriptFonts);
1574
1574
  const authoredLetterSpacing = typeof segmentStyle.characterSpacing === "number" && segmentStyle.characterSpacing !== 0 ? segmentStyle.characterSpacing / 100 * (96 / 72) : 0;
1575
1575
  const metricFont = {
1576
1576
  fontFamily: baseFontFamily,
@@ -1578,7 +1578,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1578
1578
  bold: Boolean(segmentStyle.bold),
1579
1579
  italic: Boolean(segmentStyle.italic)
1580
1580
  };
1581
- const nestedStyle = chunkGUGHIQ4P_js.nestedTextDecorationStyle(run.style);
1581
+ const nestedStyle = chunkJ56DMNSD_js.nestedTextDecorationStyle(run.style);
1582
1582
  const metricContext = { font: metricFont, authoredPx: authoredLetterSpacing, nestedStyle };
1583
1583
  const spanStyle = { ...run.style };
1584
1584
  spanStyle.color = resolvedSegmentColor;
@@ -1586,11 +1586,11 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1586
1586
  spanStyle.fontFamily = baseFontFamily;
1587
1587
  spanStyle.verticalAlign = baselineShift;
1588
1588
  spanStyle.fontKerning = fontKerning;
1589
- spanStyle.letterSpacing = chunkGUGHIQ4P_js.pieceLetterSpacing(
1589
+ spanStyle.letterSpacing = chunkJ56DMNSD_js.pieceLetterSpacing(
1590
1590
  authoredLetterSpacing,
1591
- chunkGUGHIQ4P_js.resolveMetricTrackingPx(textValue, metricFont)
1591
+ chunkJ56DMNSD_js.resolveMetricTrackingPx(textValue, metricFont)
1592
1592
  );
1593
- const hollow = chunkGUGHIQ4P_js.hollowTextFillStyle(segmentStyle, {
1593
+ const hollow = chunkJ56DMNSD_js.hollowTextFillStyle(segmentStyle, {
1594
1594
  color: resolvedSegmentColor,
1595
1595
  textStroke: typeof spanStyle.WebkitTextStroke === "string" ? spanStyle.WebkitTextStroke : void 0
1596
1596
  });
@@ -1687,7 +1687,7 @@ function renderHyperlink(run, spanNode, key, ctx) {
1687
1687
  );
1688
1688
  }
1689
1689
  function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick) {
1690
- if (!chunkGUGHIQ4P_js.hasTextProperties(element)) {
1690
+ if (!chunkJ56DMNSD_js.hasTextProperties(element)) {
1691
1691
  return emptyFallback || null;
1692
1692
  }
1693
1693
  const segments = segmentOverrides ?? element.textSegments;
@@ -1697,7 +1697,7 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
1697
1697
  }
1698
1698
  return element.text || emptyFallback || "";
1699
1699
  }
1700
- const paragraphs = chunkGUGHIQ4P_js.buildParagraphs(element, fieldContext, segmentOverrides);
1700
+ const paragraphs = chunkJ56DMNSD_js.buildParagraphs(element, fieldContext, segmentOverrides);
1701
1701
  const ctx = {
1702
1702
  element,
1703
1703
  fallbackColor,
@@ -1830,13 +1830,13 @@ function hexToRgbUnit(hex) {
1830
1830
  };
1831
1831
  }
1832
1832
  function getDuotoneColors(element) {
1833
- if (!chunkGUGHIQ4P_js.isImageLikeElement(element)) {
1833
+ if (!chunkJ56DMNSD_js.isImageLikeElement(element)) {
1834
1834
  return void 0;
1835
1835
  }
1836
1836
  return element.imageEffects?.duotone;
1837
1837
  }
1838
1838
  function buildLineShadowCss(element) {
1839
- if (!chunkGUGHIQ4P_js.hasShapeProperties(element)) {
1839
+ if (!chunkJ56DMNSD_js.hasShapeProperties(element)) {
1840
1840
  return void 0;
1841
1841
  }
1842
1842
  const ss = element.shapeStyle;
@@ -1847,13 +1847,13 @@ function buildLineShadowCss(element) {
1847
1847
  const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
1848
1848
  const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
1849
1849
  const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
1850
- return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkGUGHIQ4P_js.colorWithOpacity(
1851
- chunkGUGHIQ4P_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1850
+ return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkJ56DMNSD_js.colorWithOpacity(
1851
+ chunkJ56DMNSD_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1852
1852
  opacity
1853
1853
  )}`;
1854
1854
  }
1855
1855
  function buildLineGlowFilter(element) {
1856
- if (!chunkGUGHIQ4P_js.hasShapeProperties(element)) {
1856
+ if (!chunkJ56DMNSD_js.hasShapeProperties(element)) {
1857
1857
  return void 0;
1858
1858
  }
1859
1859
  const ss = element.shapeStyle;
@@ -1862,14 +1862,14 @@ function buildLineGlowFilter(element) {
1862
1862
  }
1863
1863
  const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
1864
1864
  const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
1865
- const glowCol = chunkGUGHIQ4P_js.colorWithOpacity(chunkGUGHIQ4P_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1865
+ const glowCol = chunkJ56DMNSD_js.colorWithOpacity(chunkJ56DMNSD_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1866
1866
  return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
1867
1867
  }
1868
1868
  function getDagDuotoneFilterId(elementId) {
1869
1869
  return `dag-duotone-${elementId}`;
1870
1870
  }
1871
1871
  function hasDagDuotoneEffect(element) {
1872
- if (!chunkGUGHIQ4P_js.hasShapeProperties(element)) {
1872
+ if (!chunkJ56DMNSD_js.hasShapeProperties(element)) {
1873
1873
  return false;
1874
1874
  }
1875
1875
  return Boolean(element.shapeStyle?.dagDuotone);
@@ -1921,7 +1921,7 @@ function renderDagDuotoneSvgFilter(elementId, color1, color2) {
1921
1921
 
1922
1922
  // src/viewer/utils/shape-visual-3d.ts
1923
1923
  function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
1924
- return chunkGUGHIQ4P_js.build3DExtrusionData(
1924
+ return chunkJ56DMNSD_js.build3DExtrusionData(
1925
1925
  shape3d,
1926
1926
  scene3d,
1927
1927
  fillColor,
@@ -1930,7 +1930,7 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
1930
1930
  );
1931
1931
  }
1932
1932
  function apply3dEffects2(base, scene3d, shape3d, fillColorFallback) {
1933
- chunkGUGHIQ4P_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
1933
+ chunkJ56DMNSD_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
1934
1934
  }
1935
1935
 
1936
1936
  // src/viewer/utils/shape-visual-style.ts
@@ -1938,13 +1938,13 @@ function rendersCustomVectorPath(element) {
1938
1938
  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;
1939
1939
  }
1940
1940
  function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _strokeColor, animatesFill, animatesStroke, parentGroupFill) {
1941
- if (!chunkGUGHIQ4P_js.hasShapeProperties(element)) {
1941
+ if (!chunkJ56DMNSD_js.hasShapeProperties(element)) {
1942
1942
  return {};
1943
1943
  }
1944
1944
  const ss = element.shapeStyle;
1945
- const fill = animatesFill ? void 0 : chunkGUGHIQ4P_js.getComputedFillStyle(element, parentGroupFill);
1946
- const fx = chunkGUGHIQ4P_js.getComputedEffectStyle(element);
1947
- const stroke = chunkGUGHIQ4P_js.getComputedStrokeStyle(element);
1945
+ const fill = animatesFill ? void 0 : chunkJ56DMNSD_js.getComputedFillStyle(element, parentGroupFill);
1946
+ const fx = chunkJ56DMNSD_js.getComputedEffectStyle(element);
1947
+ const stroke = chunkJ56DMNSD_js.getComputedStrokeStyle(element);
1948
1948
  const base = {
1949
1949
  // A gradient fill REPLACES the solid fill, it does not sit on top of it;
1950
1950
  // the whole precedence lives in shared's `getComputedFillStyle`.
@@ -1979,7 +1979,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1979
1979
  strokeLinecap: stroke.strokeLinecap
1980
1980
  };
1981
1981
  apply3dEffects2(base, ss?.scene3d, ss?.shape3d, ss?.fillColor ?? fillColor);
1982
- if (rendersCustomVectorPath(element) || chunkGUGHIQ4P_js.isStrokeOnlyPresetElement(element)) {
1982
+ if (rendersCustomVectorPath(element) || chunkJ56DMNSD_js.isStrokeOnlyPresetElement(element)) {
1983
1983
  base.backgroundColor = "transparent";
1984
1984
  base.backgroundImage = void 0;
1985
1985
  base.borderWidth = void 0;
@@ -1990,7 +1990,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1990
1990
  base.backgroundColor = void 0;
1991
1991
  base.backgroundImage = void 0;
1992
1992
  }
1993
- const geometry = chunkGUGHIQ4P_js.resolveShapeGeometry(element);
1993
+ const geometry = chunkJ56DMNSD_js.resolveShapeGeometry(element);
1994
1994
  switch (geometry.kind) {
1995
1995
  case "bare":
1996
1996
  return { backgroundColor: "transparent", borderWidth: 0, borderStyle: "none" };
@@ -2016,13 +2016,13 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
2016
2016
  function getConnectorAdjustment(element, key, fallback) {
2017
2017
  const direct = element.shapeAdjustments?.[key];
2018
2018
  if (typeof direct === "number" && Number.isFinite(direct)) {
2019
- return chunkGUGHIQ4P_js.clampUnitInterval(direct / 1e5);
2019
+ return chunkJ56DMNSD_js.clampUnitInterval(direct / 1e5);
2020
2020
  }
2021
2021
  const fallbackKey = element.shapeAdjustments?.adj;
2022
2022
  if (typeof fallbackKey === "number" && Number.isFinite(fallbackKey)) {
2023
- return chunkGUGHIQ4P_js.clampUnitInterval(fallbackKey / 1e5);
2023
+ return chunkJ56DMNSD_js.clampUnitInterval(fallbackKey / 1e5);
2024
2024
  }
2025
- return chunkGUGHIQ4P_js.clampUnitInterval(fallback);
2025
+ return chunkJ56DMNSD_js.clampUnitInterval(fallback);
2026
2026
  }
2027
2027
  function getConnectorPathGeometry(element) {
2028
2028
  const width = Math.max(element.width, 0);
@@ -2155,7 +2155,7 @@ function toHexByte(value) {
2155
2155
  return clamped.toString(16).padStart(2, "0");
2156
2156
  }
2157
2157
  function shiftHex(hex, factor, towardsWhite) {
2158
- const channels = chunkGUGHIQ4P_js.hexToRgbChannels(hex);
2158
+ const channels = chunkJ56DMNSD_js.hexToRgbChannels(hex);
2159
2159
  if (!channels) {
2160
2160
  return hex;
2161
2161
  }
@@ -2181,7 +2181,7 @@ function buildCustomSubpathPaints(subpaths, hasFill, fillColor, fillOpacity) {
2181
2181
  const fillOff = subpath.fillMode === "none" || !hasFill;
2182
2182
  return {
2183
2183
  d: subpath.d,
2184
- fill: fillOff ? "none" : chunkGUGHIQ4P_js.colorWithOpacity(adjustFillForMode(fillColor, subpath.fillMode), fillOpacity),
2184
+ fill: fillOff ? "none" : chunkJ56DMNSD_js.colorWithOpacity(adjustFillForMode(fillColor, subpath.fillMode), fillOpacity),
2185
2185
  stroked: subpath.stroke !== false
2186
2186
  };
2187
2187
  });
@@ -2197,11 +2197,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
2197
2197
  strokePaint,
2198
2198
  strokeWidth,
2199
2199
  dashArray,
2200
- lineCap: chunkGUGHIQ4P_js.svgLineCap(shapeStyle?.lineCap),
2200
+ lineCap: chunkJ56DMNSD_js.svgLineCap(shapeStyle?.lineCap),
2201
2201
  lineJoin,
2202
2202
  miterLimit,
2203
- offsets: chunkGUGHIQ4P_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
2204
- widths: chunkGUGHIQ4P_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
2203
+ offsets: chunkJ56DMNSD_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
2204
+ widths: chunkJ56DMNSD_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
2205
2205
  };
2206
2206
  }
2207
2207
  function strokeStrands(d, keyBase, ctx) {
@@ -2249,9 +2249,9 @@ function gradientDefs(gradient) {
2249
2249
  }
2250
2250
  function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false, gradient) {
2251
2251
  const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
2252
- const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkGUGHIQ4P_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
2252
+ const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkJ56DMNSD_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
2253
2253
  const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
2254
- const gradientPaint = gradient ? chunkGUGHIQ4P_js.svgGradientFillRef(gradient) : void 0;
2254
+ const gradientPaint = gradient ? chunkJ56DMNSD_js.svgGradientFillRef(gradient) : void 0;
2255
2255
  const nodes = [];
2256
2256
  if (subpaths && needsPerSubpath) {
2257
2257
  const paints = buildCustomSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
@@ -2283,7 +2283,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2283
2283
  "path",
2284
2284
  {
2285
2285
  d: pathData,
2286
- fill: animatesFill ? "inherit" : gradientPaint ?? chunkGUGHIQ4P_js.colorWithOpacity(fillColor, fillOpacity),
2286
+ fill: animatesFill ? "inherit" : gradientPaint ?? chunkJ56DMNSD_js.colorWithOpacity(fillColor, fillOpacity),
2287
2287
  stroke: "none",
2288
2288
  vectorEffect: "non-scaling-stroke"
2289
2289
  },
@@ -2309,14 +2309,14 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2309
2309
  );
2310
2310
  }
2311
2311
  function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
2312
- if (!chunkGUGHIQ4P_js.hasShapeProperties(element)) {
2312
+ if (!chunkJ56DMNSD_js.hasShapeProperties(element)) {
2313
2313
  return null;
2314
2314
  }
2315
2315
  const normalizedType = (element.shapeType || "").toLowerCase();
2316
- const fillPaint = animatesFill ? "inherit" : chunkGUGHIQ4P_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2317
- const strokePaint = animatesStroke ? "inherit" : chunkGUGHIQ4P_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2318
- const dashType = chunkGUGHIQ4P_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2319
- const dashArray = chunkGUGHIQ4P_js.getSvgStrokeDasharray(
2316
+ const fillPaint = animatesFill ? "inherit" : chunkJ56DMNSD_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2317
+ const strokePaint = animatesStroke ? "inherit" : chunkJ56DMNSD_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2318
+ const dashType = chunkJ56DMNSD_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2319
+ const dashArray = chunkJ56DMNSD_js.getSvgStrokeDasharray(
2320
2320
  dashType,
2321
2321
  Math.max(strokeWidth, 1),
2322
2322
  element.shapeStyle?.customDashSegments
@@ -2397,21 +2397,21 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2397
2397
  // container's `background-image` is suppressed for custom geometry, so
2398
2398
  // without this the shape fell back to the parser's representative solid
2399
2399
  // and lost every fade (issue #132).
2400
- chunkGUGHIQ4P_js.buildSvgGradientDef(element.shapeStyle, element.id)
2400
+ chunkJ56DMNSD_js.buildSvgGradientDef(element.shapeStyle, element.id)
2401
2401
  );
2402
2402
  }
2403
- if (chunkGUGHIQ4P_js.isCalloutShape(normalizedType)) {
2403
+ if (chunkJ56DMNSD_js.isCalloutShape(normalizedType)) {
2404
2404
  const width = Math.max(element.width, 1);
2405
2405
  const height = Math.max(element.height, 1);
2406
- const geometry = chunkGUGHIQ4P_js.getCalloutLeaderLineGeometry(
2406
+ const geometry = chunkJ56DMNSD_js.getCalloutLeaderLineGeometry(
2407
2407
  normalizedType,
2408
2408
  width,
2409
2409
  height,
2410
2410
  element.shapeAdjustments
2411
2411
  );
2412
2412
  if (geometry && geometry.points.length >= 2) {
2413
- const leaderPath = chunkGUGHIQ4P_js.buildCalloutLeaderLineSvgPath(geometry);
2414
- const bounds = chunkGUGHIQ4P_js.getCalloutViewBoxBounds(width, height, geometry);
2413
+ const leaderPath = chunkJ56DMNSD_js.buildCalloutLeaderLineSvgPath(geometry);
2414
+ const bounds = chunkJ56DMNSD_js.getCalloutViewBoxBounds(width, height, geometry);
2415
2415
  const lineStroke = Math.max(strokeWidth, 1);
2416
2416
  const offsetLeft = bounds.minX;
2417
2417
  const offsetTop = bounds.minY;
@@ -2474,10 +2474,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2474
2474
  const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
2475
2475
  const endArrowL = element.shapeStyle?.connectorEndArrowLength;
2476
2476
  const compoundLine = element.shapeStyle?.compoundLine;
2477
- const connectorLineCap = chunkGUGHIQ4P_js.svgLineCap(element.shapeStyle?.lineCap);
2477
+ const connectorLineCap = chunkJ56DMNSD_js.svgLineCap(element.shapeStyle?.lineCap);
2478
2478
  const hitTargetWidth = Math.max(strokeWidth * 3, 12);
2479
- const offsets = chunkGUGHIQ4P_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2480
- const widths = chunkGUGHIQ4P_js.getCompoundLineWidths(compoundLine, strokeWidth);
2479
+ const offsets = chunkJ56DMNSD_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2480
+ const widths = chunkJ56DMNSD_js.getCompoundLineWidths(compoundLine, strokeWidth);
2481
2481
  return /* @__PURE__ */ jsxRuntime.jsxs(
2482
2482
  "svg",
2483
2483
  {
@@ -2544,15 +2544,15 @@ function parseGradientFillCss(gradFill) {
2544
2544
  }
2545
2545
  const parsed = stops.map((gs) => {
2546
2546
  const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
2547
- const color = chunkGUGHIQ4P_js.parseDrawingColor(gs) ?? "#888888";
2548
- const opacity = chunkGUGHIQ4P_js.parseDrawingColorOpacity(gs);
2549
- return { pos, color: chunkGUGHIQ4P_js.colorWithOpacity(color, opacity) };
2547
+ const color = chunkJ56DMNSD_js.parseDrawingColor(gs) ?? "#888888";
2548
+ const opacity = chunkJ56DMNSD_js.parseDrawingColorOpacity(gs);
2549
+ return { pos, color: chunkJ56DMNSD_js.colorWithOpacity(color, opacity) };
2550
2550
  }).sort((a, b) => a.pos - b.pos);
2551
2551
  const stopStrings = parsed.map((s) => `${s.color} ${s.pos.toFixed(1)}%`).join(", ");
2552
2552
  const lin = gradFill["a:lin"];
2553
2553
  if (lin) {
2554
2554
  const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
2555
- const angleDeg = Math.round(chunkGUGHIQ4P_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2555
+ const angleDeg = Math.round(chunkJ56DMNSD_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2556
2556
  return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
2557
2557
  }
2558
2558
  const path = gradFill["a:path"];
@@ -2587,8 +2587,8 @@ function parsePatternFillCss(pattFill) {
2587
2587
  if (!pattFill) {
2588
2588
  return void 0;
2589
2589
  }
2590
- const fgColor = chunkGUGHIQ4P_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2591
- const bgColor = chunkGUGHIQ4P_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2590
+ const fgColor = chunkJ56DMNSD_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2591
+ const bgColor = chunkJ56DMNSD_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2592
2592
  const preset = String(pattFill["@_prst"] || "ltDnDiag");
2593
2593
  switch (preset) {
2594
2594
  case "ltHorz":
@@ -2699,11 +2699,11 @@ function parseCellBorders(cellProperties) {
2699
2699
  const prstDash = ln["a:prstDash"];
2700
2700
  const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
2701
2701
  const cssBorderStyle = ooxmlDashToCss(dashVal);
2702
- const color = chunkGUGHIQ4P_js.parseDrawingColor(ln["a:solidFill"]);
2702
+ const color = chunkJ56DMNSD_js.parseDrawingColor(ln["a:solidFill"]);
2703
2703
  if (color) {
2704
- const opacity = chunkGUGHIQ4P_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2704
+ const opacity = chunkJ56DMNSD_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2705
2705
  const key = `${edge.prefix}`;
2706
- borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkGUGHIQ4P_js.colorWithOpacity(color, opacity)}`;
2706
+ borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkJ56DMNSD_js.colorWithOpacity(color, opacity)}`;
2707
2707
  }
2708
2708
  }
2709
2709
  return borderStyle;
@@ -2716,7 +2716,7 @@ function parseCellTextEffects(runProps) {
2716
2716
  const textShadowParts = [];
2717
2717
  const outerShdw = effectLst["a:outerShdw"];
2718
2718
  if (outerShdw) {
2719
- const shdwColor = chunkGUGHIQ4P_js.parseDrawingColor(outerShdw);
2719
+ const shdwColor = chunkJ56DMNSD_js.parseDrawingColor(outerShdw);
2720
2720
  if (shdwColor) {
2721
2721
  const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
2722
2722
  const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
@@ -2734,7 +2734,7 @@ function parseCellTextEffects(runProps) {
2734
2734
  }
2735
2735
  const glow = effectLst["a:glow"];
2736
2736
  if (glow) {
2737
- const glowColor = chunkGUGHIQ4P_js.parseDrawingColor(glow);
2737
+ const glowColor = chunkJ56DMNSD_js.parseDrawingColor(glow);
2738
2738
  if (glowColor) {
2739
2739
  const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
2740
2740
  const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
@@ -2813,10 +2813,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2813
2813
  if (runProps?.["@_u"] !== void 0) {
2814
2814
  cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
2815
2815
  }
2816
- const runColor = chunkGUGHIQ4P_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkGUGHIQ4P_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2816
+ const runColor = chunkJ56DMNSD_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkJ56DMNSD_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2817
2817
  if (runColor) {
2818
- const opacity = chunkGUGHIQ4P_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2819
- cellStyle.color = chunkGUGHIQ4P_js.colorWithOpacity(runColor, opacity);
2818
+ const opacity = chunkJ56DMNSD_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2819
+ cellStyle.color = chunkJ56DMNSD_js.colorWithOpacity(runColor, opacity);
2820
2820
  }
2821
2821
  const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
2822
2822
  if (fontFamily) {
@@ -2826,15 +2826,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2826
2826
  cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
2827
2827
  }
2828
2828
  const cellProperties = cellXml["a:tcPr"];
2829
- const cellFill = chunkGUGHIQ4P_js.parseDrawingColor(
2829
+ const cellFill = chunkJ56DMNSD_js.parseDrawingColor(
2830
2830
  cellProperties?.["a:solidFill"],
2831
2831
  schemeColorOverrides
2832
2832
  );
2833
2833
  if (cellFill) {
2834
- const opacity = chunkGUGHIQ4P_js.parseDrawingColorOpacity(
2834
+ const opacity = chunkJ56DMNSD_js.parseDrawingColorOpacity(
2835
2835
  cellProperties?.["a:solidFill"]
2836
2836
  );
2837
- cellStyle.backgroundColor = chunkGUGHIQ4P_js.colorWithOpacity(cellFill, opacity);
2837
+ cellStyle.backgroundColor = chunkJ56DMNSD_js.colorWithOpacity(cellFill, opacity);
2838
2838
  } else {
2839
2839
  const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
2840
2840
  if (gradCss) {
@@ -2849,16 +2849,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2849
2849
  const edgeBorders = parseCellBorders(cellProperties);
2850
2850
  Object.assign(cellStyle, edgeBorders);
2851
2851
  if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
2852
- const borderColor = chunkGUGHIQ4P_js.parseDrawingColor(
2852
+ const borderColor = chunkJ56DMNSD_js.parseDrawingColor(
2853
2853
  cellProperties?.["a:lnL"]?.["a:solidFill"],
2854
2854
  schemeColorOverrides
2855
- ) || chunkGUGHIQ4P_js.parseDrawingColor(
2855
+ ) || chunkJ56DMNSD_js.parseDrawingColor(
2856
2856
  cellProperties?.["a:lnR"]?.["a:solidFill"],
2857
2857
  schemeColorOverrides
2858
- ) || chunkGUGHIQ4P_js.parseDrawingColor(
2858
+ ) || chunkJ56DMNSD_js.parseDrawingColor(
2859
2859
  cellProperties?.["a:lnT"]?.["a:solidFill"],
2860
2860
  schemeColorOverrides
2861
- ) || chunkGUGHIQ4P_js.parseDrawingColor(
2861
+ ) || chunkJ56DMNSD_js.parseDrawingColor(
2862
2862
  cellProperties?.["a:lnB"]?.["a:solidFill"],
2863
2863
  schemeColorOverrides
2864
2864
  );
@@ -2930,7 +2930,7 @@ function getTableCellBandStyle2(element, rowIndex, cellIndex, rowCount, columnCo
2930
2930
  if (element.type !== "table") {
2931
2931
  return void 0;
2932
2932
  }
2933
- return chunkGUGHIQ4P_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2933
+ return chunkJ56DMNSD_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2934
2934
  tableStyleMap: styleCtx?.tableStyleMap,
2935
2935
  colorScheme: styleCtx?.theme?.colorScheme,
2936
2936
  fontScheme: styleCtx?.theme?.fontScheme
@@ -3006,7 +3006,7 @@ function renderTableCellContent(cell, fallbackText) {
3006
3006
  return /* @__PURE__ */ jsxRuntime.jsx(
3007
3007
  "span",
3008
3008
  {
3009
- style: { position: "relative", ...chunkGUGHIQ4P_js.cellRunStyle(run) },
3009
+ style: { position: "relative", ...chunkJ56DMNSD_js.cellRunStyle(run) },
3010
3010
  children: run.text
3011
3011
  },
3012
3012
  `r-${index}`
@@ -3014,7 +3014,7 @@ function renderTableCellContent(cell, fallbackText) {
3014
3014
  });
3015
3015
  }
3016
3016
  function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
3017
- return chunkGUGHIQ4P_js.getCellDiagonalBorders(style, tableData, pos, {
3017
+ return chunkJ56DMNSD_js.getCellDiagonalBorders(style, tableData, pos, {
3018
3018
  tableStyleMap: styleCtx?.tableStyleMap,
3019
3019
  colorScheme: styleCtx?.theme?.colorScheme,
3020
3020
  fontScheme: styleCtx?.theme?.fontScheme
@@ -3147,7 +3147,7 @@ function TableResizeOverlay({
3147
3147
  const containerRef = React6.useRef(null);
3148
3148
  const [rowBounds, setRowBounds] = React6.useState([]);
3149
3149
  const dragRef = React6.useRef(null);
3150
- const colBoundaries = React6.useMemo(() => chunkGUGHIQ4P_js.computeColumnBoundaries(columnWidths), [columnWidths]);
3150
+ const colBoundaries = React6.useMemo(() => chunkJ56DMNSD_js.computeColumnBoundaries(columnWidths), [columnWidths]);
3151
3151
  const measureRows = React6.useCallback(() => {
3152
3152
  const container = containerRef.current;
3153
3153
  if (!container) {
@@ -3194,11 +3194,11 @@ function TableResizeOverlay({
3194
3194
  const rect = containerRef.current.getBoundingClientRect();
3195
3195
  if (drag.type === "col" && drag.initialWidths && onResizeColumns) {
3196
3196
  const deltaProp = (e.clientX - drag.startPos) / rect.width;
3197
- onResizeColumns(chunkGUGHIQ4P_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
3197
+ onResizeColumns(chunkJ56DMNSD_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
3198
3198
  } else if (drag.type === "row" && onResizeRow) {
3199
3199
  const deltaY = e.clientY - drag.startPos;
3200
- const newHeight = chunkGUGHIQ4P_js.computeResizedRowHeight(
3201
- drag.initialRowHeight ?? chunkGUGHIQ4P_js.DEFAULT_ROW_HEIGHT,
3200
+ const newHeight = chunkJ56DMNSD_js.computeResizedRowHeight(
3201
+ drag.initialRowHeight ?? chunkJ56DMNSD_js.DEFAULT_ROW_HEIGHT,
3202
3202
  deltaY
3203
3203
  );
3204
3204
  onResizeRow(drag.index, newHeight);
@@ -3236,7 +3236,7 @@ function TableResizeOverlay({
3236
3236
  e.stopPropagation();
3237
3237
  const table = containerRef.current?.querySelector("table");
3238
3238
  const tr = table?.querySelectorAll("tbody > tr")[index];
3239
- const actualHeight = tr?.offsetHeight ?? chunkGUGHIQ4P_js.DEFAULT_ROW_HEIGHT;
3239
+ const actualHeight = tr?.offsetHeight ?? chunkJ56DMNSD_js.DEFAULT_ROW_HEIGHT;
3240
3240
  document.body.style.cursor = "row-resize";
3241
3241
  document.body.style.userSelect = "none";
3242
3242
  dragRef.current = {
@@ -3283,7 +3283,7 @@ function renderTableFromTableData(element, textStyle, options) {
3283
3283
  colorScheme: options?.styleCtx?.theme?.colorScheme,
3284
3284
  fontScheme: options?.styleCtx?.theme?.fontScheme
3285
3285
  };
3286
- const cellCss = (cell, rowIndex, cellIndex) => chunkGUGHIQ4P_js.tableCellCss(
3286
+ const cellCss = (cell, rowIndex, cellIndex) => chunkJ56DMNSD_js.tableCellCss(
3287
3287
  tableData,
3288
3288
  cell,
3289
3289
  { rowIndex, cellIndex, rowCount, columnCount },
@@ -3296,7 +3296,7 @@ function renderTableFromTableData(element, textStyle, options) {
3296
3296
  }
3297
3297
  const first = selectedCell.selectedCells[0];
3298
3298
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3299
- return chunkGUGHIQ4P_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3299
+ return chunkJ56DMNSD_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3300
3300
  })();
3301
3301
  return /* @__PURE__ */ jsxRuntime.jsx(
3302
3302
  TableResizeOverlay,
@@ -3317,9 +3317,9 @@ function renderTableFromTableData(element, textStyle, options) {
3317
3317
  {
3318
3318
  className: "w-full h-full border-collapse table-fixed",
3319
3319
  style: {
3320
- fontFamily: chunkGUGHIQ4P_js.DEFAULT_FONT_FAMILY,
3320
+ fontFamily: chunkJ56DMNSD_js.DEFAULT_FONT_FAMILY,
3321
3321
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3322
- ...chunkGUGHIQ4P_js.tableContainerCss(tableData)
3322
+ ...chunkJ56DMNSD_js.tableContainerCss(tableData)
3323
3323
  },
3324
3324
  children: [
3325
3325
  tableData.columnWidths.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: tableData.columnWidths.map((w, ci) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3338,7 +3338,7 @@ function renderTableFromTableData(element, textStyle, options) {
3338
3338
  return null;
3339
3339
  }
3340
3340
  const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
3341
- const isInMultiSelection = chunkGUGHIQ4P_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3341
+ const isInMultiSelection = chunkJ56DMNSD_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3342
3342
  const isCellEditing = isCellSelected && selectedCell?.isEditing;
3343
3343
  const diag = getCellDiagonalBorders2(
3344
3344
  cell.style,
@@ -3367,7 +3367,7 @@ function renderTableFromTableData(element, textStyle, options) {
3367
3367
  }
3368
3368
  event.stopPropagation();
3369
3369
  if (event.shiftKey && selectedCell) {
3370
- const rect = chunkGUGHIQ4P_js.computeSelectionRect(
3370
+ const rect = chunkJ56DMNSD_js.computeSelectionRect(
3371
3371
  selectedCell.rowIndex,
3372
3372
  selectedCell.columnIndex,
3373
3373
  rowIndex,
@@ -3377,7 +3377,7 @@ function renderTableFromTableData(element, textStyle, options) {
3377
3377
  options?.onSelectCell?.({
3378
3378
  rowIndex: selectedCell.rowIndex,
3379
3379
  columnIndex: selectedCell.columnIndex,
3380
- selectedCells: chunkGUGHIQ4P_js.rectToCells(rect)
3380
+ selectedCells: chunkJ56DMNSD_js.rectToCells(rect)
3381
3381
  });
3382
3382
  } else {
3383
3383
  options?.onSelectCell?.({
@@ -3438,7 +3438,7 @@ function renderTableElement(element, textStyle, options) {
3438
3438
  if (tableEl2.tableData && tableEl2.tableData.rows.length > 0) {
3439
3439
  return renderTableFromTableData(tableEl2, textStyle, options);
3440
3440
  }
3441
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkMVKRI3CZ_js.translationsEn["pptx.table.title"] });
3441
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunk6CPUGAK7_js.translationsEn["pptx.table.title"] });
3442
3442
  }
3443
3443
  const selectedCell = options?.selectedCell || null;
3444
3444
  const isEditable = Boolean(options?.editable);
@@ -3453,7 +3453,7 @@ function renderTableElement(element, textStyle, options) {
3453
3453
  }
3454
3454
  const first = selectedCell.selectedCells[0];
3455
3455
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3456
- return chunkGUGHIQ4P_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3456
+ return chunkJ56DMNSD_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3457
3457
  })();
3458
3458
  const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
3459
3459
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -3475,9 +3475,9 @@ function renderTableElement(element, textStyle, options) {
3475
3475
  {
3476
3476
  className: "w-full h-full border-collapse table-fixed",
3477
3477
  style: {
3478
- fontFamily: chunkGUGHIQ4P_js.DEFAULT_FONT_FAMILY,
3478
+ fontFamily: chunkJ56DMNSD_js.DEFAULT_FONT_FAMILY,
3479
3479
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3480
- ...chunkGUGHIQ4P_js.tableContainerCss(tableEl.tableData)
3480
+ ...chunkJ56DMNSD_js.tableContainerCss(tableEl.tableData)
3481
3481
  },
3482
3482
  children: [
3483
3483
  parsedTable.columnPercentages.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((percentage, columnIndex) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3529,7 +3529,7 @@ function renderTableElement(element, textStyle, options) {
3529
3529
  const mergedStyle = {
3530
3530
  ...bandStyle,
3531
3531
  ...xmlCellStyle,
3532
- ...tdCellOverride ? chunkGUGHIQ4P_js.cellStyleToCss(tdCellOverride) : void 0,
3532
+ ...tdCellOverride ? chunkJ56DMNSD_js.cellStyleToCss(tdCellOverride) : void 0,
3533
3533
  ...diag ? { position: "relative" } : void 0
3534
3534
  };
3535
3535
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3539,7 +3539,7 @@ function renderTableElement(element, textStyle, options) {
3539
3539
  "border px-1 py-0.5 align-top",
3540
3540
  isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
3541
3541
  selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
3542
- chunkGUGHIQ4P_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3542
+ chunkJ56DMNSD_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3543
3543
  ),
3544
3544
  colSpan,
3545
3545
  rowSpan: rSpan,
@@ -3550,7 +3550,7 @@ function renderTableElement(element, textStyle, options) {
3550
3550
  }
3551
3551
  event.stopPropagation();
3552
3552
  if (event.shiftKey && selectedCell && tableEl.tableData) {
3553
- const rect = chunkGUGHIQ4P_js.computeSelectionRect(
3553
+ const rect = chunkJ56DMNSD_js.computeSelectionRect(
3554
3554
  selectedCell.rowIndex,
3555
3555
  selectedCell.columnIndex,
3556
3556
  rowIndex,
@@ -3560,7 +3560,7 @@ function renderTableElement(element, textStyle, options) {
3560
3560
  options?.onSelectCell?.({
3561
3561
  rowIndex: selectedCell.rowIndex,
3562
3562
  columnIndex: selectedCell.columnIndex,
3563
- selectedCells: chunkGUGHIQ4P_js.rectToCells(rect)
3563
+ selectedCells: chunkJ56DMNSD_js.rectToCells(rect)
3564
3564
  });
3565
3565
  } else {
3566
3566
  options?.onSelectCell?.({
@@ -3618,26 +3618,24 @@ function renderTableElement(element, textStyle, options) {
3618
3618
  }
3619
3619
  );
3620
3620
  }
3621
- var LEGEND_ITEM_WIDTH = 80;
3622
3621
  function partAttrs(part) {
3623
- return part ? chunkGUGHIQ4P_js.chartPartToAttrs(part) : void 0;
3622
+ return part ? chunkJ56DMNSD_js.chartPartToAttrs(part) : void 0;
3624
3623
  }
3625
3624
  function resolveReactPalette(chartData) {
3626
3625
  if (chartData.colorPalette && chartData.colorPalette.length > 0) {
3627
3626
  return chartData.colorPalette;
3628
3627
  }
3629
- return [...chunkGUGHIQ4P_js.getChartStylePalette(chartData.style?.styleId)];
3628
+ return [...chunkJ56DMNSD_js.getChartStylePalette(chartData.style?.styleId)];
3630
3629
  }
3631
3630
  function buildReactChartViewModel(element) {
3632
3631
  if (element.type !== "chart" || !element.chartData) {
3633
- return chunkGUGHIQ4P_js.buildChartViewModel(element);
3632
+ return chunkJ56DMNSD_js.buildChartViewModel(element);
3634
3633
  }
3635
- const palette = resolveReactPalette(element.chartData);
3636
- const themedElement = {
3634
+ const palette = resolveReactPalette(element.chartData), themedElement = {
3637
3635
  ...element,
3638
3636
  chartData: { ...element.chartData, colorPalette: palette }
3639
3637
  };
3640
- return chunkGUGHIQ4P_js.buildChartViewModel(themedElement);
3638
+ return chunkJ56DMNSD_js.buildChartViewModel(themedElement);
3641
3639
  }
3642
3640
  function renderPrimitive(prim, key) {
3643
3641
  switch (prim.kind) {
@@ -3653,7 +3651,8 @@ function renderPrimitive(prim, key) {
3653
3651
  fill: r.fill,
3654
3652
  rx: r.rx ?? 0,
3655
3653
  opacity: r.opacity ?? 1,
3656
- ...partAttrs(r.part)
3654
+ ...partAttrs(r.part),
3655
+ children: r.title !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: r.title }) : null
3657
3656
  },
3658
3657
  key
3659
3658
  );
@@ -3684,7 +3683,8 @@ function renderPrimitive(prim, key) {
3684
3683
  strokeWidth: p.strokeWidth,
3685
3684
  fill: p.fill,
3686
3685
  opacity: p.opacity ?? 1,
3687
- ...partAttrs(p.part)
3686
+ ...partAttrs(p.part),
3687
+ children: p.title !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: p.title }) : null
3688
3688
  },
3689
3689
  key
3690
3690
  );
@@ -3699,7 +3699,8 @@ function renderPrimitive(prim, key) {
3699
3699
  r: c.r,
3700
3700
  fill: c.fill,
3701
3701
  opacity: c.opacity ?? 1,
3702
- ...partAttrs(c.part)
3702
+ ...partAttrs(c.part),
3703
+ children: c.title !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: c.title }) : null
3703
3704
  },
3704
3705
  key
3705
3706
  );
@@ -3716,7 +3717,8 @@ function renderPrimitive(prim, key) {
3716
3717
  stroke: l.stroke,
3717
3718
  strokeWidth: l.strokeWidth,
3718
3719
  strokeDasharray: l.dashArray,
3719
- opacity: l.opacity ?? 1
3720
+ opacity: l.opacity ?? 1,
3721
+ children: l.title !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: l.title }) : null
3720
3722
  },
3721
3723
  key
3722
3724
  );
@@ -3732,7 +3734,8 @@ function renderPrimitive(prim, key) {
3732
3734
  strokeWidth: p.strokeWidth,
3733
3735
  opacity: p.opacity ?? 1,
3734
3736
  strokeDasharray: p.dashArray,
3735
- ...partAttrs(p.part)
3737
+ ...partAttrs(p.part),
3738
+ children: p.title !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: p.title }) : null
3736
3739
  },
3737
3740
  key
3738
3741
  );
@@ -3779,7 +3782,7 @@ function renderText(t, key) {
3779
3782
  );
3780
3783
  }
3781
3784
  function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3782
- const isVerticalLegend = vm.legendAnchor === "start";
3785
+ const legendItems = chunkJ56DMNSD_js.computeChartLegendLayout(vm);
3783
3786
  return /* @__PURE__ */ jsxRuntime.jsxs(
3784
3787
  "svg",
3785
3788
  {
@@ -3843,31 +3846,34 @@ function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3843
3846
  vm.categoryLabels.map((lbl, i) => renderText(lbl, `${elementId}-cl-${i}`)),
3844
3847
  vm.primitives.map((prim, i) => renderPrimitive(prim, `${elementId}-p-${i}`)),
3845
3848
  vm.dataLabels.map((dl, i) => renderText(dl, `${elementId}-dl-${i}`)),
3846
- vm.legend.map((entry, i) => {
3847
- const x = isVerticalLegend ? vm.legendX : vm.legendX - vm.legend.length * LEGEND_ITEM_WIDTH / 2 + i * LEGEND_ITEM_WIDTH;
3848
- const y = isVerticalLegend ? vm.legendY + i * 14 : vm.legendY;
3849
- return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x.toFixed(1)},${y.toFixed(1)})`, children: [
3850
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: -7, width: 10, height: 10, rx: 2, fill: entry.color }),
3851
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 13, y: 3, fontSize: 9, fill: "#475569", children: entry.label })
3852
- ] }, `${elementId}-lg-${i}`);
3853
- })
3849
+ legendItems.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
3850
+ "g",
3851
+ {
3852
+ transform: `translate(${item.x.toFixed(1)},${item.y.toFixed(1)})`,
3853
+ children: [
3854
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: -7, width: 10, height: 10, rx: 2, fill: item.color }),
3855
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 13, y: 3, fontSize: 9, fill: "#475569", children: item.label })
3856
+ ]
3857
+ },
3858
+ `${elementId}-lg-${i}`
3859
+ ))
3854
3860
  ]
3855
3861
  }
3856
3862
  );
3857
3863
  }
3858
3864
  function renderChartElement(element) {
3859
3865
  if (element.type !== "chart") {
3860
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkMVKRI3CZ_js.translationsEn["pptx.chart.heading"] });
3866
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunk6CPUGAK7_js.translationsEn["pptx.chart.heading"] });
3861
3867
  }
3862
3868
  const chartData = element.chartData;
3863
3869
  if (!chartData || chartData.series.length === 0) {
3864
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkMVKRI3CZ_js.translationsEn["pptx.chart.heading"] });
3870
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunk6CPUGAK7_js.translationsEn["pptx.chart.heading"] });
3865
3871
  }
3866
- const kind = chunkGUGHIQ4P_js.resolveChartKind(chartData.chartType ?? "bar");
3872
+ const kind = chunkJ56DMNSD_js.resolveChartKind(chartData.chartType ?? "bar");
3867
3873
  return renderChartViewModel(
3868
3874
  element.id,
3869
3875
  buildReactChartViewModel(element),
3870
- chunkGUGHIQ4P_js.chartPreserveAspectRatio(kind)
3876
+ chunkJ56DMNSD_js.chartPreserveAspectRatio(kind)
3871
3877
  );
3872
3878
  }
3873
3879
 
@@ -3887,14 +3893,14 @@ function buildNotesPdf(pages) {
3887
3893
  notes: page.notes,
3888
3894
  slideNumber: page.slideNumber
3889
3895
  }));
3890
- const bytes = chunkGUGHIQ4P_js.buildNotesPdfBytes(images, meta);
3896
+ const bytes = chunkJ56DMNSD_js.buildNotesPdfBytes(images, meta);
3891
3897
  const blob = new Blob([bytes], { type: "application/pdf" });
3892
3898
  return URL.createObjectURL(blob);
3893
3899
  }
3894
3900
 
3895
3901
  // src/viewer/utils/pdf-builder-slides.ts
3896
3902
  function buildPdfFromImageData(images) {
3897
- const bytes = chunkGUGHIQ4P_js.buildSlidesPdfBytes(images);
3903
+ const bytes = chunkJ56DMNSD_js.buildSlidesPdfBytes(images);
3898
3904
  const blob = new Blob([bytes], { type: "application/pdf" });
3899
3905
  return URL.createObjectURL(blob);
3900
3906
  }
@@ -3903,7 +3909,7 @@ function buildPdfFromImageData(images) {
3903
3909
  var activePreview = null;
3904
3910
  function startPreviewAnimation(elementId, preset, options) {
3905
3911
  stopPreviewAnimation();
3906
- const descriptor = chunkGUGHIQ4P_js.buildPreviewAnimation(preset, options);
3912
+ const descriptor = chunkJ56DMNSD_js.buildPreviewAnimation(preset, options);
3907
3913
  if (!descriptor) {
3908
3914
  return;
3909
3915
  }
@@ -3916,7 +3922,7 @@ function startMotionPathPreview(elementId, path, options) {
3916
3922
  return;
3917
3923
  }
3918
3924
  const stage = domEl.offsetParent;
3919
- const descriptor = chunkGUGHIQ4P_js.buildMotionPathPreview({
3925
+ const descriptor = chunkJ56DMNSD_js.buildMotionPathPreview({
3920
3926
  path,
3921
3927
  slideWidth: stage?.offsetWidth || DEFAULT_PREVIEW_SLIDE_WIDTH,
3922
3928
  slideHeight: stage?.offsetHeight || DEFAULT_PREVIEW_SLIDE_HEIGHT,