pptx-react-viewer 2.22.0 → 3.0.1

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 (107) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/dist/{AiChatPanel-KDHDYBMP.mjs → AiChatPanel-DMBQPAGB.mjs} +3 -3
  3. package/dist/AiChatPanel-DMBQPAGB.mjs.br +0 -0
  4. package/dist/AiChatPanel-DMBQPAGB.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-WVRT4OLF.js → AiChatPanel-NLIUZ5RI.js} +23 -23
  6. package/dist/AiChatPanel-NLIUZ5RI.js.br +0 -0
  7. package/dist/AiChatPanel-NLIUZ5RI.js.gz +0 -0
  8. package/dist/{Model3DScene-COI2CG35.js → Model3DScene-JNZN42TU.js} +2 -2
  9. package/dist/Model3DScene-JNZN42TU.js.br +0 -0
  10. package/dist/Model3DScene-JNZN42TU.js.gz +0 -0
  11. package/dist/{Model3DScene-I5SQKIZC.mjs → Model3DScene-ZO6U7YVU.mjs} +1 -1
  12. package/dist/Model3DScene-ZO6U7YVU.mjs.br +0 -0
  13. package/dist/Model3DScene-ZO6U7YVU.mjs.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-6LTF5QPW.mjs → SurfaceChart3DScene-P6CVRWDQ.mjs} +1 -1
  15. package/dist/SurfaceChart3DScene-P6CVRWDQ.mjs.br +0 -0
  16. package/dist/SurfaceChart3DScene-P6CVRWDQ.mjs.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-2N4TPYPU.js → SurfaceChart3DScene-PGD4ZCLI.js} +2 -2
  18. package/dist/SurfaceChart3DScene-PGD4ZCLI.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-PGD4ZCLI.js.gz +0 -0
  20. package/dist/{chunk-YNHWNFE3.js → chunk-3MW6F3K7.js} +451 -399
  21. package/dist/chunk-3MW6F3K7.js.br +0 -0
  22. package/dist/chunk-3MW6F3K7.js.gz +0 -0
  23. package/dist/{chunk-KK6DOUES.js → chunk-54SDLPJY.js} +1275 -1248
  24. package/dist/chunk-54SDLPJY.js.br +0 -0
  25. package/dist/chunk-54SDLPJY.js.gz +0 -0
  26. package/dist/{chunk-TWU72BY4.mjs → chunk-BGAJLL4N.mjs} +70 -18
  27. package/dist/chunk-BGAJLL4N.mjs.br +0 -0
  28. package/dist/chunk-BGAJLL4N.mjs.gz +0 -0
  29. package/dist/{chunk-RJFKXPMU.mjs → chunk-OB4PKKIN.mjs} +1 -1
  30. package/dist/chunk-OB4PKKIN.mjs.br +0 -0
  31. package/dist/chunk-OB4PKKIN.mjs.gz +0 -0
  32. package/dist/{chunk-57TM4MV4.mjs → chunk-OXPD2UYI.mjs} +13085 -6709
  33. package/dist/chunk-OXPD2UYI.mjs.br +0 -0
  34. package/dist/chunk-OXPD2UYI.mjs.gz +0 -0
  35. package/dist/{chunk-7BZYDUNM.mjs → chunk-S6PFSR7I.mjs} +108 -255
  36. package/dist/chunk-S6PFSR7I.mjs.br +0 -0
  37. package/dist/chunk-S6PFSR7I.mjs.gz +0 -0
  38. package/dist/{chunk-34UAGEJM.js → chunk-SDOQKSKI.js} +13103 -6715
  39. package/dist/chunk-SDOQKSKI.js.br +0 -0
  40. package/dist/chunk-SDOQKSKI.js.gz +0 -0
  41. package/dist/{chunk-XIBTR7KJ.mjs → chunk-VGHEHM66.mjs} +254 -227
  42. package/dist/chunk-VGHEHM66.mjs.br +0 -0
  43. package/dist/chunk-VGHEHM66.mjs.gz +0 -0
  44. package/dist/{chunk-POP5IWYB.js → chunk-WFMSDYVQ.js} +3 -3
  45. package/dist/chunk-WFMSDYVQ.js.br +0 -0
  46. package/dist/chunk-WFMSDYVQ.js.gz +0 -0
  47. package/dist/{chunk-K7TFZ5MW.js → chunk-XMLPTDPM.js} +248 -396
  48. package/dist/chunk-XMLPTDPM.js.br +0 -0
  49. package/dist/chunk-XMLPTDPM.js.gz +0 -0
  50. package/dist/index.d.ts +475 -19
  51. package/dist/index.js +45 -45
  52. package/dist/index.js.br +0 -0
  53. package/dist/index.js.gz +0 -0
  54. package/dist/index.mjs +5 -5
  55. package/dist/index.mjs.br +0 -0
  56. package/dist/index.mjs.gz +0 -0
  57. package/dist/internals.d.ts +492 -21
  58. package/dist/internals.d.ts.map +1 -1
  59. package/dist/internals.js +78 -78
  60. package/dist/internals.js.br +0 -0
  61. package/dist/internals.js.gz +0 -0
  62. package/dist/internals.mjs +3 -3
  63. package/dist/internals.mjs.br +0 -0
  64. package/dist/internals.mjs.gz +0 -0
  65. package/dist/pptx-viewer.css +1 -1
  66. package/dist/pptx-viewer.css.br +0 -0
  67. package/dist/pptx-viewer.css.gz +0 -0
  68. package/dist/viewer/index.d.ts +472 -17
  69. package/dist/viewer/index.js +26 -26
  70. package/dist/viewer/index.js.br +0 -0
  71. package/dist/viewer/index.js.gz +0 -0
  72. package/dist/viewer/index.mjs +5 -5
  73. package/dist/viewer/index.mjs.br +0 -0
  74. package/dist/viewer/index.mjs.gz +0 -0
  75. package/package.json +2 -2
  76. package/dist/AiChatPanel-KDHDYBMP.mjs.br +0 -0
  77. package/dist/AiChatPanel-KDHDYBMP.mjs.gz +0 -0
  78. package/dist/AiChatPanel-WVRT4OLF.js.br +0 -0
  79. package/dist/AiChatPanel-WVRT4OLF.js.gz +0 -0
  80. package/dist/Model3DScene-COI2CG35.js.br +0 -0
  81. package/dist/Model3DScene-COI2CG35.js.gz +0 -0
  82. package/dist/Model3DScene-I5SQKIZC.mjs.br +0 -0
  83. package/dist/Model3DScene-I5SQKIZC.mjs.gz +0 -0
  84. package/dist/SurfaceChart3DScene-2N4TPYPU.js.br +0 -0
  85. package/dist/SurfaceChart3DScene-2N4TPYPU.js.gz +0 -0
  86. package/dist/SurfaceChart3DScene-6LTF5QPW.mjs.br +0 -0
  87. package/dist/SurfaceChart3DScene-6LTF5QPW.mjs.gz +0 -0
  88. package/dist/chunk-34UAGEJM.js.br +0 -0
  89. package/dist/chunk-34UAGEJM.js.gz +0 -0
  90. package/dist/chunk-57TM4MV4.mjs.br +0 -0
  91. package/dist/chunk-57TM4MV4.mjs.gz +0 -0
  92. package/dist/chunk-7BZYDUNM.mjs.br +0 -0
  93. package/dist/chunk-7BZYDUNM.mjs.gz +0 -0
  94. package/dist/chunk-K7TFZ5MW.js.br +0 -0
  95. package/dist/chunk-K7TFZ5MW.js.gz +0 -0
  96. package/dist/chunk-KK6DOUES.js.br +0 -0
  97. package/dist/chunk-KK6DOUES.js.gz +0 -0
  98. package/dist/chunk-POP5IWYB.js.br +0 -0
  99. package/dist/chunk-POP5IWYB.js.gz +0 -0
  100. package/dist/chunk-RJFKXPMU.mjs.br +0 -0
  101. package/dist/chunk-RJFKXPMU.mjs.gz +0 -0
  102. package/dist/chunk-TWU72BY4.mjs.br +0 -0
  103. package/dist/chunk-TWU72BY4.mjs.gz +0 -0
  104. package/dist/chunk-XIBTR7KJ.mjs.br +0 -0
  105. package/dist/chunk-XIBTR7KJ.mjs.gz +0 -0
  106. package/dist/chunk-YNHWNFE3.js.br +0 -0
  107. package/dist/chunk-YNHWNFE3.js.gz +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkU6A5FWWE_js = require('./chunk-U6A5FWWE.js');
4
- var chunk34UAGEJM_js = require('./chunk-34UAGEJM.js');
4
+ var chunkSDOQKSKI_js = require('./chunk-SDOQKSKI.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 chunk34UAGEJM_js.getAnimationInitialStyle(preset, nativeAnimation);
18
+ return chunkSDOQKSKI_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 chunk34UAGEJM_js.cloneHistorySnapshot(snapshot);
26
+ return chunkSDOQKSKI_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 = chunk34UAGEJM_js.VIEWER_SHORTCUT_REFERENCE;
64
+ var SHORTCUT_REFERENCE_ITEMS = chunkSDOQKSKI_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 = chunk34UAGEJM_js.SHAPE_PRESET_DEFS.map(
108
+ var SHAPE_PRESETS = chunkSDOQKSKI_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 (!chunk34UAGEJM_js.hasShapeProperties(element)) {
267
+ if (!chunkSDOQKSKI_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 (!chunk34UAGEJM_js.hasShapeProperties(element)) {
276
+ if (!chunkSDOQKSKI_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 = chunk34UAGEJM_js.getRoundRectRadiusPx2(element);
285
+ const radiusPx = chunkSDOQKSKI_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 = chunk34UAGEJM_js.getResolvedShapeClipPath(element);
297
+ const clipPath = chunkSDOQKSKI_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
- ...chunk34UAGEJM_js.getImageFitStyle(element)
306
+ ...chunkSDOQKSKI_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 (!chunk34UAGEJM_js.isImageLikeElement(element)) {
319
+ if (!chunkSDOQKSKI_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 chunk34UAGEJM_js.getImageTilingStyle(element);
329
+ return chunkSDOQKSKI_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 chunk34UAGEJM_js.runMediaCommand(
529
+ return chunkSDOQKSKI_js.runMediaCommand(
530
530
  command,
531
- (targetId) => registry.get(targetId) ?? chunk34UAGEJM_js.findMediaElementByElementId(targetId, frameRoot?.())
531
+ (targetId) => registry.get(targetId) ?? chunkSDOQKSKI_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
- } = chunk34UAGEJM_js.mediaPlaybackAttributes({
575
+ } = chunkSDOQKSKI_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
- chunk34UAGEJM_js.registerPersistentAudio(
711
+ chunkSDOQKSKI_js.registerPersistentAudio(
712
712
  element.id,
713
713
  dataUrl,
714
714
  element.mediaMimeType,
@@ -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
- ...{ [chunk34UAGEJM_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
809
+ ...{ [chunkSDOQKSKI_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
810
810
  children: [
811
811
  /* @__PURE__ */ jsxRuntime.jsx(
812
812
  FallbackIcon,
813
813
  {
814
- paths: chunk34UAGEJM_js.mediaFallbackIcon(visual, element.mediaType),
814
+ paths: chunkSDOQKSKI_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(chunk34UAGEJM_js.mediaFallbackLabelKey(visual, element.mediaType)) })
819
+ isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkSDOQKSKI_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
- ...{ [chunk34UAGEJM_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
836
+ ...{ [chunkSDOQKSKI_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
837
837
  children: [
838
838
  /* @__PURE__ */ jsxRuntime.jsx(
839
839
  FallbackIcon,
840
840
  {
841
- paths: chunk34UAGEJM_js.mediaFallbackIcon(visual, element.mediaType),
841
+ paths: chunkSDOQKSKI_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(chunk34UAGEJM_js.mediaFallbackLabelKey(visual, element.mediaType)) })
846
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkSDOQKSKI_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 = chunk34UAGEJM_js.mediaFallbackVisual(surface, {
856
+ const visual = chunkSDOQKSKI_js.mediaFallbackVisual(surface, {
857
857
  hasPoster: Boolean(posterUrl),
858
858
  missing: element.mediaMissing === true
859
859
  });
@@ -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 = chunk34UAGEJM_js.mediaPlaybackAttributes(element).loop;
885
+ const shouldLoop = chunkSDOQKSKI_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;
@@ -965,19 +965,19 @@ function renderMediaElement(element, mediaDataUrls, options) {
965
965
 
966
966
  // src/viewer/utils/text-utils.tsx
967
967
  function getTextStyleForElement(element, fallbackColor) {
968
- return chunk34UAGEJM_js.buildTextBlockStyle(element, { fallbackColor });
968
+ return chunkSDOQKSKI_js.buildTextBlockStyle(element, { fallbackColor });
969
969
  }
970
970
 
971
971
  // src/viewer/utils/text-layout.tsx
972
972
  function getTextLayoutStyle(element) {
973
- if (!chunk34UAGEJM_js.hasTextProperties(element)) {
973
+ if (!chunkSDOQKSKI_js.hasTextProperties(element)) {
974
974
  return {};
975
975
  }
976
- const writingMode = chunk34UAGEJM_js.toCssWritingMode(element.textStyle?.textDirection);
977
- const textOrientation = chunk34UAGEJM_js.toCssTextOrientation(element.textStyle?.textDirection);
978
- const verticalDirection = chunk34UAGEJM_js.toCssVerticalDirection(element.textStyle?.textDirection);
976
+ const writingMode = chunkSDOQKSKI_js.toCssWritingMode(element.textStyle?.textDirection);
977
+ const textOrientation = chunkSDOQKSKI_js.toCssTextOrientation(element.textStyle?.textDirection);
978
+ const verticalDirection = chunkSDOQKSKI_js.toCssVerticalDirection(element.textStyle?.textDirection);
979
979
  const textWrapNone = element.textStyle?.textWrap === "none";
980
- const hasParagraphIndents = chunk34UAGEJM_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
980
+ const hasParagraphIndents = chunkSDOQKSKI_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
- ...chunk34UAGEJM_js.buildTextBodyLayoutStyle(element),
989
+ ...chunkSDOQKSKI_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 chunk34UAGEJM_js.buildTextBody3DSceneStyle(textStyle);
1008
+ return chunkSDOQKSKI_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}${chunk34UAGEJM_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1193
+ const paraKey = `${elementId}${chunkSDOQKSKI_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 = chunk34UAGEJM_js.buildTextBuildSpec(
1199
+ const spec = chunkSDOQKSKI_js.buildTextBuildSpec(
1200
1200
  elementId,
1201
1201
  paraIndex,
1202
1202
  paraRuns.map((run) => ({ text: run.text, style: run })),
@@ -1214,143 +1214,20 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1214
1214
  "span",
1215
1215
  {
1216
1216
  "data-anim-id": span.animId,
1217
- style: chunk34UAGEJM_js.textBuildSpanStyle(span),
1217
+ style: chunkSDOQKSKI_js.textBuildSpanStyle(span),
1218
1218
  children: content
1219
1219
  },
1220
1220
  span.animId
1221
1221
  );
1222
1222
  });
1223
1223
  }
1224
- var EPS = 0.01;
1225
- var FALLBACK_STEP_PX = 48;
1226
- function buildTabContext(tabStops, defaultTabSize, fontSizePx, fontFamily, bold, italic) {
1227
- if (!tabStops || tabStops.length === 0) {
1228
- return void 0;
1229
- }
1230
- const font = `${italic ? "italic " : ""}${bold ? "700" : "400"} ${fontSizePx}px ${fontFamily}`;
1231
- return {
1232
- tabStops,
1233
- defaultTabSize: typeof defaultTabSize === "number" && defaultTabSize > 0 ? defaultTabSize : 0,
1234
- font
1235
- };
1236
- }
1237
- function leaderGlyph(leader) {
1238
- switch (leader) {
1239
- case "dot":
1240
- return ".";
1241
- case "hyphen":
1242
- return "-";
1243
- case "underscore":
1244
- return "_";
1245
- default:
1246
- return "";
1247
- }
1248
- }
1249
- function decimalIndex(text) {
1250
- return text.indexOf(".");
1251
- }
1252
- function computeTabbedLayout(segments, tabStops, measure, defaultTabSize) {
1253
- const stops = tabStops.filter((s) => Number.isFinite(s.position) && s.position > 0).sort((a, b) => a.position - b.position);
1254
- const step = Number.isFinite(defaultTabSize) && defaultTabSize > 0 ? defaultTabSize : FALLBACK_STEP_PX;
1255
- const pieces = [];
1256
- let cursor = 0;
1257
- segments.forEach((text, i) => {
1258
- if (i === 0) {
1259
- pieces.push({ text, left: 0, leaderWidth: 0, leaderChar: "" });
1260
- cursor = measure(text);
1261
- return;
1262
- }
1263
- const stop = stops.find((s) => s.position > cursor + EPS);
1264
- const width = measure(text);
1265
- let tabX;
1266
- let align;
1267
- let leader;
1268
- if (stop) {
1269
- tabX = stop.position;
1270
- align = stop.align;
1271
- leader = stop.leader;
1272
- } else {
1273
- tabX = Math.floor(cursor / step + 1 + EPS) * step;
1274
- align = "l";
1275
- leader = void 0;
1276
- }
1277
- let left;
1278
- if (align === "ctr") {
1279
- left = tabX - width / 2;
1280
- } else if (align === "r") {
1281
- left = tabX - width;
1282
- } else if (align === "dec") {
1283
- const decIdx = decimalIndex(text);
1284
- const beforeWidth = decIdx >= 0 ? measure(text.slice(0, decIdx)) : width;
1285
- left = tabX - beforeWidth;
1286
- } else {
1287
- left = tabX;
1288
- }
1289
- if (left < cursor) {
1290
- left = cursor;
1291
- }
1292
- const leaderWidth = left - cursor;
1293
- const leaderChar = leaderWidth > 0.5 ? leaderGlyph(leader) : "";
1294
- pieces.push({ text, left, leaderWidth, leaderChar });
1295
- cursor = left + width;
1296
- });
1297
- return pieces;
1298
- }
1299
- var cachedCtx;
1300
- function getMeasureCtx() {
1301
- if (cachedCtx !== void 0) {
1302
- return cachedCtx;
1303
- }
1304
- if (typeof document === "undefined") {
1305
- cachedCtx = null;
1306
- return null;
1307
- }
1308
- cachedCtx = document.createElement("canvas").getContext("2d");
1309
- return cachedCtx;
1310
- }
1311
- function estimateWidth(text) {
1312
- return text.length * 8;
1313
- }
1314
- function measureTextWidth(text, font) {
1315
- const ctx = getMeasureCtx();
1316
- if (!ctx) {
1317
- return estimateWidth(text);
1318
- }
1319
- ctx.font = font;
1320
- return ctx.measureText(text).width;
1321
- }
1322
- function fillLeader(glyph, width, font) {
1323
- const glyphWidth = Math.max(1, measureTextWidth(glyph, font));
1324
- const count = Math.ceil(width / glyphWidth) + 1;
1325
- return glyph.repeat(count);
1326
- }
1327
1224
  function renderTabbedLine(line, ctx, keyPrefix, renderPiece, nestedStyle) {
1328
- const segments = line.split(" ");
1329
- const pieces = computeTabbedLayout(
1330
- segments,
1331
- ctx.tabStops,
1332
- (t) => measureTextWidth(t, ctx.font),
1333
- ctx.defaultTabSize
1334
- );
1335
- return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block", whiteSpace: "nowrap" }, children: pieces.map((piece, i) => {
1225
+ const [lineLayout] = chunkSDOQKSKI_js.buildRunTabLines(line, ctx, nestedStyle);
1226
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block", whiteSpace: "nowrap" }, children: lineLayout.pieces.map((piece, i) => {
1336
1227
  const key = `${keyPrefix}-tab-${i}`;
1337
1228
  return /* @__PURE__ */ jsxRuntime.jsxs(React6__default.default.Fragment, { children: [
1338
- piece.leaderWidth > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
1339
- "span",
1340
- {
1341
- "aria-hidden": "true",
1342
- style: {
1343
- display: "inline-block",
1344
- width: piece.leaderWidth,
1345
- overflow: "hidden",
1346
- whiteSpace: "nowrap",
1347
- textAlign: "right",
1348
- verticalAlign: "baseline"
1349
- },
1350
- children: piece.leaderChar ? fillLeader(piece.leaderChar, piece.leaderWidth, ctx.font) : ""
1351
- }
1352
- ) : null,
1353
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { ...nestedStyle, display: "inline-block", whiteSpace: "pre" }, children: renderPiece(piece.text, key) })
1229
+ piece.leaderStyle ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", style: piece.leaderStyle, children: piece.leaderText }) : null,
1230
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: piece.style, children: renderPiece(piece.text, key) })
1354
1231
  ] }, key);
1355
1232
  }) });
1356
1233
  }
@@ -1358,29 +1235,24 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
1358
1235
  if (!needsScriptFonts || !text) {
1359
1236
  return text;
1360
1237
  }
1361
- const runs = chunk34UAGEJM_js.segmentByScript(text);
1362
- if (runs.length <= 1) {
1363
- if (runs.length === 1) {
1364
- const font = chunk34UAGEJM_js.resolveFontForScript(runs[0].script, scriptFonts);
1365
- if (font && font !== baseFontFamily) {
1366
- return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { ...nestedStyle, fontFamily: font }, children: text });
1367
- }
1368
- }
1238
+ const pieces = chunkSDOQKSKI_js.splitRunByScriptFont(
1239
+ text,
1240
+ scriptFonts,
1241
+ baseFontFamily,
1242
+ nestedStyle
1243
+ );
1244
+ if (!pieces) {
1369
1245
  return text;
1370
1246
  }
1371
- return runs.map((run, i) => {
1372
- const font = chunk34UAGEJM_js.resolveFontForScript(run.script, scriptFonts);
1373
- if (!font || font === baseFontFamily) {
1374
- return /* @__PURE__ */ jsxRuntime.jsx(React6__default.default.Fragment, { children: run.text }, `${keyPrefix}-r${i}`);
1375
- }
1376
- return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { ...nestedStyle, fontFamily: font }, children: run.text }, `${keyPrefix}-r${i}`);
1377
- });
1247
+ return pieces.map(
1248
+ (piece, i) => piece.style ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: piece.style, children: piece.text }, `${keyPrefix}-r${i}`) : /* @__PURE__ */ jsxRuntime.jsx(React6__default.default.Fragment, { children: piece.text }, `${keyPrefix}-r${i}`)
1249
+ );
1378
1250
  }
1379
1251
  function renderMetricPieces(text, metric, keyPrefix, inner) {
1380
1252
  if (!metric || !text) {
1381
1253
  return inner(text, keyPrefix);
1382
1254
  }
1383
- const pieces = chunk34UAGEJM_js.splitRunForMetrics(text, metric.font);
1255
+ const pieces = chunkSDOQKSKI_js.splitRunForMetrics(text, metric.font);
1384
1256
  if (pieces.length <= 1) {
1385
1257
  return inner(text, keyPrefix);
1386
1258
  }
@@ -1389,7 +1261,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
1389
1261
  {
1390
1262
  style: {
1391
1263
  ...metric.nestedStyle,
1392
- letterSpacing: chunk34UAGEJM_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1264
+ letterSpacing: chunkSDOQKSKI_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1393
1265
  },
1394
1266
  children: inner(piece.text, `${keyPrefix}-w${i}`)
1395
1267
  },
@@ -1476,8 +1348,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
1476
1348
  });
1477
1349
  }
1478
1350
  function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
1479
- const mathml = chunk34UAGEJM_js.convertOmmlToMathMl(equationXml);
1480
- const safeMathml = mathml ? chunk34UAGEJM_js.sanitizeMathMl(mathml) : "";
1351
+ const mathml = chunkSDOQKSKI_js.convertOmmlToMathMl(equationXml);
1352
+ const safeMathml = mathml ? chunkSDOQKSKI_js.sanitizeMathMl(mathml) : "";
1481
1353
  const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
1482
1354
  "span",
1483
1355
  {
@@ -1526,6 +1398,74 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
1526
1398
  }
1527
1399
  return /* @__PURE__ */ jsxRuntime.jsx("span", { children: equationContent }, `${elementId}-seg-${segmentIndex}`);
1528
1400
  }
1401
+ function renderHyperlink(run, spanNode, key, ctx) {
1402
+ const url = run.hyperlink?.url;
1403
+ const onHyperlinkClick = ctx.onHyperlinkClick;
1404
+ if (!url || !onHyperlinkClick) {
1405
+ return spanNode;
1406
+ }
1407
+ const requireCtrlClick = ctx.requireCtrlClick;
1408
+ const displayUrl = url.startsWith("ppaction://") ? url.replace(/^ppaction:\/\//u, "").split("?")[0] : url;
1409
+ const follow = (modified) => {
1410
+ if (requireCtrlClick && !modified) {
1411
+ return false;
1412
+ }
1413
+ onHyperlinkClick(url);
1414
+ return true;
1415
+ };
1416
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1417
+ "span",
1418
+ {
1419
+ role: "link",
1420
+ tabIndex: 0,
1421
+ className: requireCtrlClick ? "group/link relative" : void 0,
1422
+ style: { cursor: requireCtrlClick ? void 0 : "pointer", pointerEvents: "auto" },
1423
+ title: run.hyperlink?.tooltip,
1424
+ onClick: (e) => {
1425
+ if (!follow(e.ctrlKey || e.metaKey)) {
1426
+ return;
1427
+ }
1428
+ e.stopPropagation();
1429
+ e.preventDefault();
1430
+ },
1431
+ onKeyDown: (e) => {
1432
+ if (e.key !== "Enter" && e.key !== " ") {
1433
+ return;
1434
+ }
1435
+ if (!follow(e.ctrlKey || e.metaKey)) {
1436
+ return;
1437
+ }
1438
+ e.preventDefault();
1439
+ e.stopPropagation();
1440
+ },
1441
+ children: [
1442
+ spanNode,
1443
+ requireCtrlClick && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pointer-events-none absolute left-0 top-full z-[9999] mt-1 max-w-64 opacity-0 transition-opacity duration-150 group-hover/link:opacity-100", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-col rounded border border-border bg-popover px-2.5 py-1.5 shadow-lg", children: [
1444
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs text-foreground", children: displayUrl }),
1445
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-0.5 text-[10px] text-muted-foreground", children: "Ctrl+Click to follow link" })
1446
+ ] }) })
1447
+ ]
1448
+ },
1449
+ `${key}-link`
1450
+ );
1451
+ }
1452
+ function wrapWithTextReflection(run, key, spanNode, spanStyle, baseContent) {
1453
+ if (!run.reflection) {
1454
+ return spanNode;
1455
+ }
1456
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { position: "relative", display: "inline-block" }, children: [
1457
+ spanNode,
1458
+ /* @__PURE__ */ jsxRuntime.jsx(
1459
+ "span",
1460
+ {
1461
+ "aria-hidden": "true",
1462
+ className: "pptx-react-text-reflection",
1463
+ style: run.reflection,
1464
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: spanStyle, children: baseContent })
1465
+ }
1466
+ )
1467
+ ] }, `${key}-reflwrap`);
1468
+ }
1529
1469
  var BASELINE_FONT_SCALE = 0.65;
1530
1470
  function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1531
1471
  const { element, fallbackColor, findHighlights, onHyperlinkClick } = ctx;
@@ -1537,7 +1477,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1537
1477
  const segmentStyle = segment?.style ?? {};
1538
1478
  const textValue = run.text;
1539
1479
  const lines = textValue.split("\n");
1540
- const resolvedSegmentColor = chunk34UAGEJM_js.normalizeHexColor(
1480
+ const resolvedSegmentColor = chunkSDOQKSKI_js.normalizeHexColor(
1541
1481
  segmentStyle.color || element.textStyle?.color,
1542
1482
  run.hyperlink ? HYPERLINK_COLOR : fallbackColor
1543
1483
  );
@@ -1545,32 +1485,16 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1545
1485
  const baselineFraction = rawBaseline === 0 ? 0 : Math.abs(rawBaseline) >= 1e3 ? rawBaseline / 1e5 : rawBaseline / 100;
1546
1486
  const baselineFontScale = baselineFraction !== 0 ? BASELINE_FONT_SCALE : 1;
1547
1487
  const rawFontSize = segmentStyle.fontSize || element.textStyle?.fontSize || DEFAULT_TEXT_FONT_SIZE;
1548
- const baseFontSize = rawFontSize * chunk34UAGEJM_js.resolveAutoFitFontScale(element.textStyle);
1488
+ const baseFontSize = rawFontSize * chunkSDOQKSKI_js.resolveAutoFitFontScale(element.textStyle);
1549
1489
  const baselineShift = baselineFraction !== 0 ? `${baselineFraction * baseFontSize}px` : void 0;
1550
- const baseFontSizePt = baseFontSize * (72 / 96);
1551
- const fontKerning = typeof segmentStyle.kerning === "number" ? segmentStyle.kerning === 0 ? "none" : baseFontSizePt >= segmentStyle.kerning / 100 ? "normal" : "none" : void 0;
1490
+ const fontKerning = chunkSDOQKSKI_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
1552
1491
  const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
1553
- const baseFontFamily = rawFontFamily ? chunk34UAGEJM_js.getSubstituteFontFamily(
1492
+ const baseFontFamily = rawFontFamily ? chunkSDOQKSKI_js.getSubstituteFontFamily(
1554
1493
  rawFontFamily,
1555
- chunk34UAGEJM_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1494
+ chunkSDOQKSKI_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1556
1495
  ) : DEFAULT_FONT_FAMILY2;
1557
- const scriptFont = (name, panose) => name ? chunk34UAGEJM_js.getSubstituteFontFamily(name, chunk34UAGEJM_js.parsePanoseString(panose)) : baseFontFamily;
1558
- const scriptFonts = {
1559
- latin: baseFontFamily,
1560
- eastAsia: scriptFont(
1561
- segmentStyle.eastAsiaFont || element.textStyle?.eastAsiaFont,
1562
- segmentStyle.eastAsiaFontPanose ?? element.textStyle?.eastAsiaFontPanose
1563
- ),
1564
- complexScript: scriptFont(
1565
- segmentStyle.complexScriptFont || element.textStyle?.complexScriptFont,
1566
- segmentStyle.complexScriptFontPanose ?? element.textStyle?.complexScriptFontPanose
1567
- ),
1568
- symbol: scriptFont(
1569
- segmentStyle.symbolFont || element.textStyle?.symbolFont,
1570
- segmentStyle.symbolFontPanose ?? element.textStyle?.symbolFontPanose
1571
- )
1572
- };
1573
- const needsScriptFonts = chunk34UAGEJM_js.hasDistinctScriptFonts(scriptFonts);
1496
+ const scriptFonts = chunkSDOQKSKI_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
1497
+ const needsScriptFonts = chunkSDOQKSKI_js.hasDistinctScriptFonts(scriptFonts);
1574
1498
  const authoredLetterSpacing = typeof segmentStyle.characterSpacing === "number" && segmentStyle.characterSpacing !== 0 ? segmentStyle.characterSpacing / 100 * (96 / 72) : 0;
1575
1499
  const metricFont = {
1576
1500
  fontFamily: baseFontFamily,
@@ -1578,7 +1502,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1578
1502
  bold: Boolean(segmentStyle.bold),
1579
1503
  italic: Boolean(segmentStyle.italic)
1580
1504
  };
1581
- const nestedStyle = chunk34UAGEJM_js.nestedTextDecorationStyle(run.style);
1505
+ const nestedStyle = chunkSDOQKSKI_js.nestedTextDecorationStyle(run.style);
1582
1506
  const metricContext = { font: metricFont, authoredPx: authoredLetterSpacing, nestedStyle };
1583
1507
  const spanStyle = { ...run.style };
1584
1508
  spanStyle.color = resolvedSegmentColor;
@@ -1586,11 +1510,11 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1586
1510
  spanStyle.fontFamily = baseFontFamily;
1587
1511
  spanStyle.verticalAlign = baselineShift;
1588
1512
  spanStyle.fontKerning = fontKerning;
1589
- spanStyle.letterSpacing = chunk34UAGEJM_js.pieceLetterSpacing(
1513
+ spanStyle.letterSpacing = chunkSDOQKSKI_js.pieceLetterSpacing(
1590
1514
  authoredLetterSpacing,
1591
- chunk34UAGEJM_js.resolveMetricTrackingPx(textValue, metricFont)
1515
+ chunkSDOQKSKI_js.resolveMetricTrackingPx(textValue, metricFont)
1592
1516
  );
1593
- const hollow = chunk34UAGEJM_js.hollowTextFillStyle(segmentStyle, {
1517
+ const hollow = chunkSDOQKSKI_js.hollowTextFillStyle(segmentStyle, {
1594
1518
  color: resolvedSegmentColor,
1595
1519
  textStroke: typeof spanStyle.WebkitTextStroke === "string" ? spanStyle.WebkitTextStroke : void 0
1596
1520
  });
@@ -1611,7 +1535,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1611
1535
  scriptFonts,
1612
1536
  baseFontFamily,
1613
1537
  findHighlights,
1614
- buildTabContext(
1538
+ chunkSDOQKSKI_js.buildTabContext(
1615
1539
  element.textStyle?.tabStops,
1616
1540
  element.textStyle?.defaultTabSize,
1617
1541
  baseFontSize,
@@ -1622,7 +1546,8 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1622
1546
  metricContext
1623
1547
  );
1624
1548
  const spanNode = /* @__PURE__ */ jsxRuntime.jsx("span", { "data-seg-idx": segmentIndex, style: spanStyle, children: renderRubyOrText(run, baseContent) }, key);
1625
- return run.hyperlink && onHyperlinkClick ? renderHyperlink(run, spanNode, key, ctx) : spanNode;
1549
+ const reflectedNode = wrapWithTextReflection(run, key, spanNode, spanStyle, baseContent);
1550
+ return run.hyperlink && onHyperlinkClick ? renderHyperlink(run, reflectedNode, key, ctx) : reflectedNode;
1626
1551
  }
1627
1552
  function renderRubyOrText(run, baseContent) {
1628
1553
  if (!run.ruby) {
@@ -1635,59 +1560,8 @@ function renderRubyOrText(run, baseContent) {
1635
1560
  /* @__PURE__ */ jsxRuntime.jsx("rp", { children: ")" })
1636
1561
  ] });
1637
1562
  }
1638
- function renderHyperlink(run, spanNode, key, ctx) {
1639
- const url = run.hyperlink?.url;
1640
- const onHyperlinkClick = ctx.onHyperlinkClick;
1641
- if (!url || !onHyperlinkClick) {
1642
- return spanNode;
1643
- }
1644
- const requireCtrlClick = ctx.requireCtrlClick;
1645
- const displayUrl = url.startsWith("ppaction://") ? url.replace(/^ppaction:\/\//u, "").split("?")[0] : url;
1646
- const follow = (modified) => {
1647
- if (requireCtrlClick && !modified) {
1648
- return false;
1649
- }
1650
- onHyperlinkClick(url);
1651
- return true;
1652
- };
1653
- return /* @__PURE__ */ jsxRuntime.jsxs(
1654
- "span",
1655
- {
1656
- role: "link",
1657
- tabIndex: 0,
1658
- className: requireCtrlClick ? "group/link relative" : void 0,
1659
- style: { cursor: requireCtrlClick ? void 0 : "pointer", pointerEvents: "auto" },
1660
- title: run.hyperlink?.tooltip,
1661
- onClick: (e) => {
1662
- if (!follow(e.ctrlKey || e.metaKey)) {
1663
- return;
1664
- }
1665
- e.stopPropagation();
1666
- e.preventDefault();
1667
- },
1668
- onKeyDown: (e) => {
1669
- if (e.key !== "Enter" && e.key !== " ") {
1670
- return;
1671
- }
1672
- if (!follow(e.ctrlKey || e.metaKey)) {
1673
- return;
1674
- }
1675
- e.preventDefault();
1676
- e.stopPropagation();
1677
- },
1678
- children: [
1679
- spanNode,
1680
- requireCtrlClick && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pointer-events-none absolute left-0 top-full z-[9999] mt-1 max-w-64 opacity-0 transition-opacity duration-150 group-hover/link:opacity-100", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-col rounded border border-border bg-popover px-2.5 py-1.5 shadow-lg", children: [
1681
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs text-foreground", children: displayUrl }),
1682
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-0.5 text-[10px] text-muted-foreground", children: "Ctrl+Click to follow link" })
1683
- ] }) })
1684
- ]
1685
- },
1686
- `${key}-link`
1687
- );
1688
- }
1689
1563
  function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick) {
1690
- if (!chunk34UAGEJM_js.hasTextProperties(element)) {
1564
+ if (!chunkSDOQKSKI_js.hasTextProperties(element)) {
1691
1565
  return emptyFallback || null;
1692
1566
  }
1693
1567
  const segments = segmentOverrides ?? element.textSegments;
@@ -1697,7 +1571,7 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
1697
1571
  }
1698
1572
  return element.text || emptyFallback || "";
1699
1573
  }
1700
- const paragraphs = chunk34UAGEJM_js.buildParagraphs(element, fieldContext, segmentOverrides);
1574
+ const paragraphs = chunkSDOQKSKI_js.buildParagraphs(element, fieldContext, segmentOverrides);
1701
1575
  const ctx = {
1702
1576
  element,
1703
1577
  fallbackColor,
@@ -1830,13 +1704,13 @@ function hexToRgbUnit(hex) {
1830
1704
  };
1831
1705
  }
1832
1706
  function getDuotoneColors(element) {
1833
- if (!chunk34UAGEJM_js.isImageLikeElement(element)) {
1707
+ if (!chunkSDOQKSKI_js.isImageLikeElement(element)) {
1834
1708
  return void 0;
1835
1709
  }
1836
1710
  return element.imageEffects?.duotone;
1837
1711
  }
1838
1712
  function buildLineShadowCss(element) {
1839
- if (!chunk34UAGEJM_js.hasShapeProperties(element)) {
1713
+ if (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
1840
1714
  return void 0;
1841
1715
  }
1842
1716
  const ss = element.shapeStyle;
@@ -1847,13 +1721,13 @@ function buildLineShadowCss(element) {
1847
1721
  const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
1848
1722
  const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
1849
1723
  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 ${chunk34UAGEJM_js.colorWithOpacity(
1851
- chunk34UAGEJM_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1724
+ return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkSDOQKSKI_js.colorWithOpacity(
1725
+ chunkSDOQKSKI_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1852
1726
  opacity
1853
1727
  )}`;
1854
1728
  }
1855
1729
  function buildLineGlowFilter(element) {
1856
- if (!chunk34UAGEJM_js.hasShapeProperties(element)) {
1730
+ if (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
1857
1731
  return void 0;
1858
1732
  }
1859
1733
  const ss = element.shapeStyle;
@@ -1862,14 +1736,14 @@ function buildLineGlowFilter(element) {
1862
1736
  }
1863
1737
  const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
1864
1738
  const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
1865
- const glowCol = chunk34UAGEJM_js.colorWithOpacity(chunk34UAGEJM_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1739
+ const glowCol = chunkSDOQKSKI_js.colorWithOpacity(chunkSDOQKSKI_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1866
1740
  return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
1867
1741
  }
1868
1742
  function getDagDuotoneFilterId(elementId) {
1869
1743
  return `dag-duotone-${elementId}`;
1870
1744
  }
1871
1745
  function hasDagDuotoneEffect(element) {
1872
- if (!chunk34UAGEJM_js.hasShapeProperties(element)) {
1746
+ if (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
1873
1747
  return false;
1874
1748
  }
1875
1749
  return Boolean(element.shapeStyle?.dagDuotone);
@@ -1921,7 +1795,7 @@ function renderDagDuotoneSvgFilter(elementId, color1, color2) {
1921
1795
 
1922
1796
  // src/viewer/utils/shape-visual-3d.ts
1923
1797
  function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
1924
- return chunk34UAGEJM_js.build3DExtrusionData(
1798
+ return chunkSDOQKSKI_js.build3DExtrusionData(
1925
1799
  shape3d,
1926
1800
  scene3d,
1927
1801
  fillColor,
@@ -1930,7 +1804,7 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
1930
1804
  );
1931
1805
  }
1932
1806
  function apply3dEffects2(base, scene3d, shape3d, fillColorFallback) {
1933
- chunk34UAGEJM_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
1807
+ chunkSDOQKSKI_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
1934
1808
  }
1935
1809
 
1936
1810
  // src/viewer/utils/shape-visual-style.ts
@@ -1938,13 +1812,13 @@ function rendersCustomVectorPath(element) {
1938
1812
  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
1813
  }
1940
1814
  function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _strokeColor, animatesFill, animatesStroke, parentGroupFill) {
1941
- if (!chunk34UAGEJM_js.hasShapeProperties(element)) {
1815
+ if (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
1942
1816
  return {};
1943
1817
  }
1944
1818
  const ss = element.shapeStyle;
1945
- const fill = animatesFill ? void 0 : chunk34UAGEJM_js.getComputedFillStyle(element, parentGroupFill);
1946
- const fx = chunk34UAGEJM_js.getComputedEffectStyle(element);
1947
- const stroke = chunk34UAGEJM_js.getComputedStrokeStyle(element);
1819
+ const fill = animatesFill ? void 0 : chunkSDOQKSKI_js.getComputedFillStyle(element, parentGroupFill);
1820
+ const fx = chunkSDOQKSKI_js.getComputedEffectStyle(element);
1821
+ const stroke = chunkSDOQKSKI_js.getComputedStrokeStyle(element);
1948
1822
  const base = {
1949
1823
  // A gradient fill REPLACES the solid fill, it does not sit on top of it;
1950
1824
  // the whole precedence lives in shared's `getComputedFillStyle`.
@@ -1959,7 +1833,10 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1959
1833
  // opposite end along the edge. Paint from the border box instead.
1960
1834
  backgroundOrigin: "border-box",
1961
1835
  boxShadow: fx.boxShadow,
1962
- WebkitBoxReflect: fx.webkitBoxReflect,
1836
+ // Reflection is no longer a single CSS property (`-webkit-box-reflect`
1837
+ // never worked in Firefox): `ElementRenderer` renders a mirrored sibling
1838
+ // node instead, using shared's `getReflectionWrapperStyle` directly (see
1839
+ // `ReflectionOverlay`).
1963
1840
  filter: fx.filter,
1964
1841
  opacity: fx.opacity,
1965
1842
  // Only proxy the DAG blend onto the whole element for the blend-only case:
@@ -1979,7 +1856,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1979
1856
  strokeLinecap: stroke.strokeLinecap
1980
1857
  };
1981
1858
  apply3dEffects2(base, ss?.scene3d, ss?.shape3d, ss?.fillColor ?? fillColor);
1982
- if (rendersCustomVectorPath(element) || chunk34UAGEJM_js.isStrokeOnlyPresetElement(element)) {
1859
+ if (rendersCustomVectorPath(element) || chunkSDOQKSKI_js.isStrokeOnlyPresetElement(element)) {
1983
1860
  base.backgroundColor = "transparent";
1984
1861
  base.backgroundImage = void 0;
1985
1862
  base.borderWidth = void 0;
@@ -1990,7 +1867,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1990
1867
  base.backgroundColor = void 0;
1991
1868
  base.backgroundImage = void 0;
1992
1869
  }
1993
- const geometry = chunk34UAGEJM_js.resolveShapeGeometry(element);
1870
+ const geometry = chunkSDOQKSKI_js.resolveShapeGeometry(element);
1994
1871
  switch (geometry.kind) {
1995
1872
  case "bare":
1996
1873
  return { backgroundColor: "transparent", borderWidth: 0, borderStyle: "none" };
@@ -2016,13 +1893,13 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
2016
1893
  function getConnectorAdjustment(element, key, fallback) {
2017
1894
  const direct = element.shapeAdjustments?.[key];
2018
1895
  if (typeof direct === "number" && Number.isFinite(direct)) {
2019
- return chunk34UAGEJM_js.clampUnitInterval(direct / 1e5);
1896
+ return chunkSDOQKSKI_js.clampUnitInterval(direct / 1e5);
2020
1897
  }
2021
1898
  const fallbackKey = element.shapeAdjustments?.adj;
2022
1899
  if (typeof fallbackKey === "number" && Number.isFinite(fallbackKey)) {
2023
- return chunk34UAGEJM_js.clampUnitInterval(fallbackKey / 1e5);
1900
+ return chunkSDOQKSKI_js.clampUnitInterval(fallbackKey / 1e5);
2024
1901
  }
2025
- return chunk34UAGEJM_js.clampUnitInterval(fallback);
1902
+ return chunkSDOQKSKI_js.clampUnitInterval(fallback);
2026
1903
  }
2027
1904
  function getConnectorPathGeometry(element) {
2028
1905
  const width = Math.max(element.width, 0);
@@ -2148,44 +2025,6 @@ function renderConnectorMarker(markerId, arrowType, color, arrowWidth, arrowLeng
2148
2025
  }
2149
2026
  );
2150
2027
  }
2151
-
2152
- // src/viewer/utils/vector-subpath-paint.ts
2153
- function toHexByte(value) {
2154
- const clamped = Math.max(0, Math.min(255, Math.round(value)));
2155
- return clamped.toString(16).padStart(2, "0");
2156
- }
2157
- function shiftHex(hex, factor, towardsWhite) {
2158
- const channels = chunk34UAGEJM_js.hexToRgbChannels(hex);
2159
- if (!channels) {
2160
- return hex;
2161
- }
2162
- const shift = (c) => towardsWhite ? c + (255 - c) * factor : c * (1 - factor);
2163
- return `#${toHexByte(shift(channels.r))}${toHexByte(shift(channels.g))}${toHexByte(shift(channels.b))}`;
2164
- }
2165
- function adjustFillForMode(fillHex, mode) {
2166
- switch (mode) {
2167
- case "lighten":
2168
- return shiftHex(fillHex, 0.4, true);
2169
- case "lightenLess":
2170
- return shiftHex(fillHex, 0.2, true);
2171
- case "darken":
2172
- return shiftHex(fillHex, 0.4, false);
2173
- case "darkenLess":
2174
- return shiftHex(fillHex, 0.2, false);
2175
- default:
2176
- return fillHex;
2177
- }
2178
- }
2179
- function buildCustomSubpathPaints(subpaths, hasFill, fillColor, fillOpacity) {
2180
- return subpaths.map((subpath) => {
2181
- const fillOff = subpath.fillMode === "none" || !hasFill;
2182
- return {
2183
- d: subpath.d,
2184
- fill: fillOff ? "none" : chunk34UAGEJM_js.colorWithOpacity(adjustFillForMode(fillColor, subpath.fillMode), fillOpacity),
2185
- stroked: subpath.stroke !== false
2186
- };
2187
- });
2188
- }
2189
2028
  function joinStyle(shapeStyle) {
2190
2029
  const lineJoin = shapeStyle?.lineJoin === "bevel" ? "bevel" : shapeStyle?.lineJoin === "miter" ? "miter" : "round";
2191
2030
  const miterLimit = lineJoin === "miter" && typeof shapeStyle?.miterLimit === "number" ? Math.max(shapeStyle.miterLimit / 1e5, 1) : void 0;
@@ -2197,11 +2036,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
2197
2036
  strokePaint,
2198
2037
  strokeWidth,
2199
2038
  dashArray,
2200
- lineCap: chunk34UAGEJM_js.svgLineCap(shapeStyle?.lineCap),
2039
+ lineCap: chunkSDOQKSKI_js.svgLineCap(shapeStyle?.lineCap),
2201
2040
  lineJoin,
2202
2041
  miterLimit,
2203
- offsets: chunk34UAGEJM_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
2204
- widths: chunk34UAGEJM_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
2042
+ offsets: chunkSDOQKSKI_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
2043
+ widths: chunkSDOQKSKI_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
2205
2044
  };
2206
2045
  }
2207
2046
  function strokeStrands(d, keyBase, ctx) {
@@ -2249,12 +2088,12 @@ function gradientDefs(gradient) {
2249
2088
  }
2250
2089
  function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false, gradient) {
2251
2090
  const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
2252
- const subpaths = structuredPaths && structuredPaths.length > 0 ? chunk34UAGEJM_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
2091
+ const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkSDOQKSKI_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
2253
2092
  const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
2254
- const gradientPaint = gradient ? chunk34UAGEJM_js.svgGradientFillRef(gradient) : void 0;
2093
+ const gradientPaint = gradient ? chunkSDOQKSKI_js.svgGradientFillRef(gradient) : void 0;
2255
2094
  const nodes = [];
2256
2095
  if (subpaths && needsPerSubpath) {
2257
- const paints = buildCustomSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
2096
+ const paints = chunkSDOQKSKI_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
2258
2097
  paints.forEach((paint, idx) => {
2259
2098
  if (paint.fill !== "none") {
2260
2099
  const mode = subpaths[idx]?.fillMode;
@@ -2283,7 +2122,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2283
2122
  "path",
2284
2123
  {
2285
2124
  d: pathData,
2286
- fill: animatesFill ? "inherit" : gradientPaint ?? chunk34UAGEJM_js.colorWithOpacity(fillColor, fillOpacity),
2125
+ fill: animatesFill ? "inherit" : gradientPaint ?? chunkSDOQKSKI_js.colorWithOpacity(fillColor, fillOpacity),
2287
2126
  stroke: "none",
2288
2127
  vectorEffect: "non-scaling-stroke"
2289
2128
  },
@@ -2309,14 +2148,14 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2309
2148
  );
2310
2149
  }
2311
2150
  function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
2312
- if (!chunk34UAGEJM_js.hasShapeProperties(element)) {
2151
+ if (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
2313
2152
  return null;
2314
2153
  }
2315
2154
  const normalizedType = (element.shapeType || "").toLowerCase();
2316
- const fillPaint = animatesFill ? "inherit" : chunk34UAGEJM_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2317
- const strokePaint = animatesStroke ? "inherit" : chunk34UAGEJM_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2318
- const dashType = chunk34UAGEJM_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2319
- const dashArray = chunk34UAGEJM_js.getSvgStrokeDasharray(
2155
+ const fillPaint = animatesFill ? "inherit" : chunkSDOQKSKI_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2156
+ const strokePaint = animatesStroke ? "inherit" : chunkSDOQKSKI_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2157
+ const dashType = chunkSDOQKSKI_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2158
+ const dashArray = chunkSDOQKSKI_js.getSvgStrokeDasharray(
2320
2159
  dashType,
2321
2160
  Math.max(strokeWidth, 1),
2322
2161
  element.shapeStyle?.customDashSegments
@@ -2397,21 +2236,21 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2397
2236
  // container's `background-image` is suppressed for custom geometry, so
2398
2237
  // without this the shape fell back to the parser's representative solid
2399
2238
  // and lost every fade (issue #132).
2400
- chunk34UAGEJM_js.buildSvgGradientDef(element.shapeStyle, element.id)
2239
+ chunkSDOQKSKI_js.buildSvgGradientDef(element.shapeStyle, element.id)
2401
2240
  );
2402
2241
  }
2403
- if (chunk34UAGEJM_js.isCalloutShape(normalizedType)) {
2242
+ if (chunkSDOQKSKI_js.isCalloutShape(normalizedType)) {
2404
2243
  const width = Math.max(element.width, 1);
2405
2244
  const height = Math.max(element.height, 1);
2406
- const geometry = chunk34UAGEJM_js.getCalloutLeaderLineGeometry(
2245
+ const geometry = chunkSDOQKSKI_js.getCalloutLeaderLineGeometry(
2407
2246
  normalizedType,
2408
2247
  width,
2409
2248
  height,
2410
2249
  element.shapeAdjustments
2411
2250
  );
2412
2251
  if (geometry && geometry.points.length >= 2) {
2413
- const leaderPath = chunk34UAGEJM_js.buildCalloutLeaderLineSvgPath(geometry);
2414
- const bounds = chunk34UAGEJM_js.getCalloutViewBoxBounds(width, height, geometry);
2252
+ const leaderPath = chunkSDOQKSKI_js.buildCalloutLeaderLineSvgPath(geometry);
2253
+ const bounds = chunkSDOQKSKI_js.getCalloutViewBoxBounds(width, height, geometry);
2415
2254
  const lineStroke = Math.max(strokeWidth, 1);
2416
2255
  const offsetLeft = bounds.minX;
2417
2256
  const offsetTop = bounds.minY;
@@ -2474,10 +2313,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2474
2313
  const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
2475
2314
  const endArrowL = element.shapeStyle?.connectorEndArrowLength;
2476
2315
  const compoundLine = element.shapeStyle?.compoundLine;
2477
- const connectorLineCap = chunk34UAGEJM_js.svgLineCap(element.shapeStyle?.lineCap);
2316
+ const connectorLineCap = chunkSDOQKSKI_js.svgLineCap(element.shapeStyle?.lineCap);
2478
2317
  const hitTargetWidth = Math.max(strokeWidth * 3, 12);
2479
- const offsets = chunk34UAGEJM_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2480
- const widths = chunk34UAGEJM_js.getCompoundLineWidths(compoundLine, strokeWidth);
2318
+ const offsets = chunkSDOQKSKI_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2319
+ const widths = chunkSDOQKSKI_js.getCompoundLineWidths(compoundLine, strokeWidth);
2481
2320
  return /* @__PURE__ */ jsxRuntime.jsxs(
2482
2321
  "svg",
2483
2322
  {
@@ -2544,15 +2383,15 @@ function parseGradientFillCss(gradFill) {
2544
2383
  }
2545
2384
  const parsed = stops.map((gs) => {
2546
2385
  const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
2547
- const color = chunk34UAGEJM_js.parseDrawingColor(gs) ?? "#888888";
2548
- const opacity = chunk34UAGEJM_js.parseDrawingColorOpacity(gs);
2549
- return { pos, color: chunk34UAGEJM_js.colorWithOpacity(color, opacity) };
2386
+ const color = chunkSDOQKSKI_js.parseDrawingColor(gs) ?? "#888888";
2387
+ const opacity = chunkSDOQKSKI_js.parseDrawingColorOpacity(gs);
2388
+ return { pos, color: chunkSDOQKSKI_js.colorWithOpacity(color, opacity) };
2550
2389
  }).sort((a, b) => a.pos - b.pos);
2551
2390
  const stopStrings = parsed.map((s) => `${s.color} ${s.pos.toFixed(1)}%`).join(", ");
2552
2391
  const lin = gradFill["a:lin"];
2553
2392
  if (lin) {
2554
2393
  const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
2555
- const angleDeg = Math.round(chunk34UAGEJM_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2394
+ const angleDeg = Math.round(chunkSDOQKSKI_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2556
2395
  return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
2557
2396
  }
2558
2397
  const path = gradFill["a:path"];
@@ -2587,8 +2426,8 @@ function parsePatternFillCss(pattFill) {
2587
2426
  if (!pattFill) {
2588
2427
  return void 0;
2589
2428
  }
2590
- const fgColor = chunk34UAGEJM_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2591
- const bgColor = chunk34UAGEJM_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2429
+ const fgColor = chunkSDOQKSKI_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2430
+ const bgColor = chunkSDOQKSKI_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2592
2431
  const preset = String(pattFill["@_prst"] || "ltDnDiag");
2593
2432
  switch (preset) {
2594
2433
  case "ltHorz":
@@ -2699,11 +2538,11 @@ function parseCellBorders(cellProperties) {
2699
2538
  const prstDash = ln["a:prstDash"];
2700
2539
  const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
2701
2540
  const cssBorderStyle = ooxmlDashToCss(dashVal);
2702
- const color = chunk34UAGEJM_js.parseDrawingColor(ln["a:solidFill"]);
2541
+ const color = chunkSDOQKSKI_js.parseDrawingColor(ln["a:solidFill"]);
2703
2542
  if (color) {
2704
- const opacity = chunk34UAGEJM_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2543
+ const opacity = chunkSDOQKSKI_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2705
2544
  const key = `${edge.prefix}`;
2706
- borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunk34UAGEJM_js.colorWithOpacity(color, opacity)}`;
2545
+ borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkSDOQKSKI_js.colorWithOpacity(color, opacity)}`;
2707
2546
  }
2708
2547
  }
2709
2548
  return borderStyle;
@@ -2716,7 +2555,7 @@ function parseCellTextEffects(runProps) {
2716
2555
  const textShadowParts = [];
2717
2556
  const outerShdw = effectLst["a:outerShdw"];
2718
2557
  if (outerShdw) {
2719
- const shdwColor = chunk34UAGEJM_js.parseDrawingColor(outerShdw);
2558
+ const shdwColor = chunkSDOQKSKI_js.parseDrawingColor(outerShdw);
2720
2559
  if (shdwColor) {
2721
2560
  const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
2722
2561
  const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
@@ -2734,7 +2573,7 @@ function parseCellTextEffects(runProps) {
2734
2573
  }
2735
2574
  const glow = effectLst["a:glow"];
2736
2575
  if (glow) {
2737
- const glowColor = chunk34UAGEJM_js.parseDrawingColor(glow);
2576
+ const glowColor = chunkSDOQKSKI_js.parseDrawingColor(glow);
2738
2577
  if (glowColor) {
2739
2578
  const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
2740
2579
  const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
@@ -2814,10 +2653,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2814
2653
  if (runProps?.["@_u"] !== void 0) {
2815
2654
  cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
2816
2655
  }
2817
- const runColor = chunk34UAGEJM_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunk34UAGEJM_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2656
+ const runColor = chunkSDOQKSKI_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkSDOQKSKI_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2818
2657
  if (runColor) {
2819
- const opacity = chunk34UAGEJM_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2820
- cellStyle.color = chunk34UAGEJM_js.colorWithOpacity(runColor, opacity);
2658
+ const opacity = chunkSDOQKSKI_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2659
+ cellStyle.color = chunkSDOQKSKI_js.colorWithOpacity(runColor, opacity);
2821
2660
  }
2822
2661
  const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
2823
2662
  if (fontFamily) {
@@ -2827,15 +2666,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2827
2666
  cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
2828
2667
  }
2829
2668
  const cellProperties = cellXml["a:tcPr"];
2830
- const cellFill = chunk34UAGEJM_js.parseDrawingColor(
2669
+ const cellFill = chunkSDOQKSKI_js.parseDrawingColor(
2831
2670
  cellProperties?.["a:solidFill"],
2832
2671
  schemeColorOverrides
2833
2672
  );
2834
2673
  if (cellFill) {
2835
- const opacity = chunk34UAGEJM_js.parseDrawingColorOpacity(
2674
+ const opacity = chunkSDOQKSKI_js.parseDrawingColorOpacity(
2836
2675
  cellProperties?.["a:solidFill"]
2837
2676
  );
2838
- cellStyle.backgroundColor = chunk34UAGEJM_js.colorWithOpacity(cellFill, opacity);
2677
+ cellStyle.backgroundColor = chunkSDOQKSKI_js.colorWithOpacity(cellFill, opacity);
2839
2678
  } else {
2840
2679
  const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
2841
2680
  if (gradCss) {
@@ -2850,16 +2689,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2850
2689
  const edgeBorders = parseCellBorders(cellProperties);
2851
2690
  Object.assign(cellStyle, edgeBorders);
2852
2691
  if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
2853
- const borderColor = chunk34UAGEJM_js.parseDrawingColor(
2692
+ const borderColor = chunkSDOQKSKI_js.parseDrawingColor(
2854
2693
  cellProperties?.["a:lnL"]?.["a:solidFill"],
2855
2694
  schemeColorOverrides
2856
- ) || chunk34UAGEJM_js.parseDrawingColor(
2695
+ ) || chunkSDOQKSKI_js.parseDrawingColor(
2857
2696
  cellProperties?.["a:lnR"]?.["a:solidFill"],
2858
2697
  schemeColorOverrides
2859
- ) || chunk34UAGEJM_js.parseDrawingColor(
2698
+ ) || chunkSDOQKSKI_js.parseDrawingColor(
2860
2699
  cellProperties?.["a:lnT"]?.["a:solidFill"],
2861
2700
  schemeColorOverrides
2862
- ) || chunk34UAGEJM_js.parseDrawingColor(
2701
+ ) || chunkSDOQKSKI_js.parseDrawingColor(
2863
2702
  cellProperties?.["a:lnB"]?.["a:solidFill"],
2864
2703
  schemeColorOverrides
2865
2704
  );
@@ -2931,7 +2770,7 @@ function getTableCellBandStyle2(element, rowIndex, cellIndex, rowCount, columnCo
2931
2770
  if (element.type !== "table") {
2932
2771
  return void 0;
2933
2772
  }
2934
- return chunk34UAGEJM_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2773
+ return chunkSDOQKSKI_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2935
2774
  tableStyleMap: styleCtx?.tableStyleMap,
2936
2775
  colorScheme: styleCtx?.theme?.colorScheme,
2937
2776
  fontScheme: styleCtx?.theme?.fontScheme
@@ -3007,7 +2846,7 @@ function renderTableCellContent(cell, fallbackText) {
3007
2846
  return /* @__PURE__ */ jsxRuntime.jsx(
3008
2847
  "span",
3009
2848
  {
3010
- style: { position: "relative", ...chunk34UAGEJM_js.cellRunStyle(run) },
2849
+ style: { position: "relative", ...chunkSDOQKSKI_js.cellRunStyle(run) },
3011
2850
  children: run.text
3012
2851
  },
3013
2852
  `r-${index}`
@@ -3015,7 +2854,7 @@ function renderTableCellContent(cell, fallbackText) {
3015
2854
  });
3016
2855
  }
3017
2856
  function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
3018
- return chunk34UAGEJM_js.getCellDiagonalBorders(style, tableData, pos, {
2857
+ return chunkSDOQKSKI_js.getCellDiagonalBorders(style, tableData, pos, {
3019
2858
  tableStyleMap: styleCtx?.tableStyleMap,
3020
2859
  colorScheme: styleCtx?.theme?.colorScheme,
3021
2860
  fontScheme: styleCtx?.theme?.fontScheme
@@ -3148,7 +2987,7 @@ function TableResizeOverlay({
3148
2987
  const containerRef = React6.useRef(null);
3149
2988
  const [rowBounds, setRowBounds] = React6.useState([]);
3150
2989
  const dragRef = React6.useRef(null);
3151
- const colBoundaries = React6.useMemo(() => chunk34UAGEJM_js.computeColumnBoundaries(columnWidths), [columnWidths]);
2990
+ const colBoundaries = React6.useMemo(() => chunkSDOQKSKI_js.computeColumnBoundaries(columnWidths), [columnWidths]);
3152
2991
  const measureRows = React6.useCallback(() => {
3153
2992
  const container = containerRef.current;
3154
2993
  if (!container) {
@@ -3195,11 +3034,11 @@ function TableResizeOverlay({
3195
3034
  const rect = containerRef.current.getBoundingClientRect();
3196
3035
  if (drag.type === "col" && drag.initialWidths && onResizeColumns) {
3197
3036
  const deltaProp = (e.clientX - drag.startPos) / rect.width;
3198
- onResizeColumns(chunk34UAGEJM_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
3037
+ onResizeColumns(chunkSDOQKSKI_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
3199
3038
  } else if (drag.type === "row" && onResizeRow) {
3200
3039
  const deltaY = e.clientY - drag.startPos;
3201
- const newHeight = chunk34UAGEJM_js.computeResizedRowHeight(
3202
- drag.initialRowHeight ?? chunk34UAGEJM_js.DEFAULT_ROW_HEIGHT,
3040
+ const newHeight = chunkSDOQKSKI_js.computeResizedRowHeight(
3041
+ drag.initialRowHeight ?? chunkSDOQKSKI_js.DEFAULT_ROW_HEIGHT,
3203
3042
  deltaY
3204
3043
  );
3205
3044
  onResizeRow(drag.index, newHeight);
@@ -3237,7 +3076,7 @@ function TableResizeOverlay({
3237
3076
  e.stopPropagation();
3238
3077
  const table = containerRef.current?.querySelector("table");
3239
3078
  const tr = table?.querySelectorAll("tbody > tr")[index];
3240
- const actualHeight = tr?.offsetHeight ?? chunk34UAGEJM_js.DEFAULT_ROW_HEIGHT;
3079
+ const actualHeight = tr?.offsetHeight ?? chunkSDOQKSKI_js.DEFAULT_ROW_HEIGHT;
3241
3080
  document.body.style.cursor = "row-resize";
3242
3081
  document.body.style.userSelect = "none";
3243
3082
  dragRef.current = {
@@ -3284,7 +3123,7 @@ function renderTableFromTableData(element, textStyle, options) {
3284
3123
  colorScheme: options?.styleCtx?.theme?.colorScheme,
3285
3124
  fontScheme: options?.styleCtx?.theme?.fontScheme
3286
3125
  };
3287
- const cellCss = (cell, rowIndex, cellIndex) => chunk34UAGEJM_js.tableCellCss(
3126
+ const cellCss = (cell, rowIndex, cellIndex) => chunkSDOQKSKI_js.tableCellCss(
3288
3127
  tableData,
3289
3128
  cell,
3290
3129
  { rowIndex, cellIndex, rowCount, columnCount },
@@ -3297,7 +3136,7 @@ function renderTableFromTableData(element, textStyle, options) {
3297
3136
  }
3298
3137
  const first = selectedCell.selectedCells[0];
3299
3138
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3300
- return chunk34UAGEJM_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3139
+ return chunkSDOQKSKI_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3301
3140
  })();
3302
3141
  return /* @__PURE__ */ jsxRuntime.jsx(
3303
3142
  TableResizeOverlay,
@@ -3318,9 +3157,9 @@ function renderTableFromTableData(element, textStyle, options) {
3318
3157
  {
3319
3158
  className: "w-full h-full border-collapse table-fixed",
3320
3159
  style: {
3321
- fontFamily: chunk34UAGEJM_js.DEFAULT_FONT_FAMILY,
3160
+ fontFamily: chunkSDOQKSKI_js.DEFAULT_FONT_FAMILY,
3322
3161
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3323
- ...chunk34UAGEJM_js.tableContainerCss(tableData)
3162
+ ...chunkSDOQKSKI_js.tableContainerCss(tableData)
3324
3163
  },
3325
3164
  children: [
3326
3165
  tableData.columnWidths.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: tableData.columnWidths.map((w, ci) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3339,7 +3178,7 @@ function renderTableFromTableData(element, textStyle, options) {
3339
3178
  return null;
3340
3179
  }
3341
3180
  const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
3342
- const isInMultiSelection = chunk34UAGEJM_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3181
+ const isInMultiSelection = chunkSDOQKSKI_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3343
3182
  const isCellEditing = isCellSelected && selectedCell?.isEditing;
3344
3183
  const diag = getCellDiagonalBorders2(
3345
3184
  cell.style,
@@ -3368,7 +3207,7 @@ function renderTableFromTableData(element, textStyle, options) {
3368
3207
  }
3369
3208
  event.stopPropagation();
3370
3209
  if (event.shiftKey && selectedCell) {
3371
- const rect = chunk34UAGEJM_js.computeSelectionRect(
3210
+ const rect = chunkSDOQKSKI_js.computeSelectionRect(
3372
3211
  selectedCell.rowIndex,
3373
3212
  selectedCell.columnIndex,
3374
3213
  rowIndex,
@@ -3378,7 +3217,7 @@ function renderTableFromTableData(element, textStyle, options) {
3378
3217
  options?.onSelectCell?.({
3379
3218
  rowIndex: selectedCell.rowIndex,
3380
3219
  columnIndex: selectedCell.columnIndex,
3381
- selectedCells: chunk34UAGEJM_js.rectToCells(rect)
3220
+ selectedCells: chunkSDOQKSKI_js.rectToCells(rect)
3382
3221
  });
3383
3222
  } else {
3384
3223
  options?.onSelectCell?.({
@@ -3454,7 +3293,7 @@ function renderTableElement(element, textStyle, options) {
3454
3293
  }
3455
3294
  const first = selectedCell.selectedCells[0];
3456
3295
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3457
- return chunk34UAGEJM_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3296
+ return chunkSDOQKSKI_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3458
3297
  })();
3459
3298
  const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
3460
3299
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -3476,9 +3315,9 @@ function renderTableElement(element, textStyle, options) {
3476
3315
  {
3477
3316
  className: "w-full h-full border-collapse table-fixed",
3478
3317
  style: {
3479
- fontFamily: chunk34UAGEJM_js.DEFAULT_FONT_FAMILY,
3318
+ fontFamily: chunkSDOQKSKI_js.DEFAULT_FONT_FAMILY,
3480
3319
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3481
- ...chunk34UAGEJM_js.tableContainerCss(tableEl.tableData)
3320
+ ...chunkSDOQKSKI_js.tableContainerCss(tableEl.tableData)
3482
3321
  },
3483
3322
  children: [
3484
3323
  parsedTable.columnPercentages.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((percentage, columnIndex) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3535,7 +3374,7 @@ function renderTableElement(element, textStyle, options) {
3535
3374
  color: textStyle.color,
3536
3375
  ...bandStyle,
3537
3376
  ...xmlCellStyle,
3538
- ...tdCellOverride ? chunk34UAGEJM_js.cellStyleToCss(tdCellOverride) : void 0,
3377
+ ...tdCellOverride ? chunkSDOQKSKI_js.cellStyleToCss(tdCellOverride) : void 0,
3539
3378
  ...diag ? { position: "relative" } : void 0
3540
3379
  };
3541
3380
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3545,7 +3384,7 @@ function renderTableElement(element, textStyle, options) {
3545
3384
  "border px-1 py-0.5 align-top",
3546
3385
  isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
3547
3386
  selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
3548
- chunk34UAGEJM_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3387
+ chunkSDOQKSKI_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3549
3388
  ),
3550
3389
  colSpan,
3551
3390
  rowSpan: rSpan,
@@ -3556,7 +3395,7 @@ function renderTableElement(element, textStyle, options) {
3556
3395
  }
3557
3396
  event.stopPropagation();
3558
3397
  if (event.shiftKey && selectedCell && tableEl.tableData) {
3559
- const rect = chunk34UAGEJM_js.computeSelectionRect(
3398
+ const rect = chunkSDOQKSKI_js.computeSelectionRect(
3560
3399
  selectedCell.rowIndex,
3561
3400
  selectedCell.columnIndex,
3562
3401
  rowIndex,
@@ -3566,7 +3405,7 @@ function renderTableElement(element, textStyle, options) {
3566
3405
  options?.onSelectCell?.({
3567
3406
  rowIndex: selectedCell.rowIndex,
3568
3407
  columnIndex: selectedCell.columnIndex,
3569
- selectedCells: chunk34UAGEJM_js.rectToCells(rect)
3408
+ selectedCells: chunkSDOQKSKI_js.rectToCells(rect)
3570
3409
  });
3571
3410
  } else {
3572
3411
  options?.onSelectCell?.({
@@ -3625,23 +3464,23 @@ function renderTableElement(element, textStyle, options) {
3625
3464
  );
3626
3465
  }
3627
3466
  function partAttrs(part) {
3628
- return part ? chunk34UAGEJM_js.chartPartToAttrs(part) : void 0;
3467
+ return part ? chunkSDOQKSKI_js.chartPartToAttrs(part) : void 0;
3629
3468
  }
3630
3469
  function resolveReactPalette(chartData) {
3631
3470
  if (chartData.colorPalette && chartData.colorPalette.length > 0) {
3632
3471
  return chartData.colorPalette;
3633
3472
  }
3634
- return [...chunk34UAGEJM_js.getChartStylePalette(chartData.style?.styleId)];
3473
+ return [...chunkSDOQKSKI_js.getChartStylePalette(chartData.style?.styleId)];
3635
3474
  }
3636
3475
  function buildReactChartViewModel(element) {
3637
3476
  if (element.type !== "chart" || !element.chartData) {
3638
- return chunk34UAGEJM_js.buildChartViewModel(element);
3477
+ return chunkSDOQKSKI_js.buildChartViewModel(element);
3639
3478
  }
3640
3479
  const palette = resolveReactPalette(element.chartData), themedElement = {
3641
3480
  ...element,
3642
3481
  chartData: { ...element.chartData, colorPalette: palette }
3643
3482
  };
3644
- return chunk34UAGEJM_js.buildChartViewModel(themedElement);
3483
+ return chunkSDOQKSKI_js.buildChartViewModel(themedElement);
3645
3484
  }
3646
3485
  function renderPrimitive(prim, key) {
3647
3486
  switch (prim.kind) {
@@ -3779,6 +3618,8 @@ function renderText(t, key) {
3779
3618
  fontSize: t.fontSize,
3780
3619
  fill: t.fill,
3781
3620
  fontWeight: t.fontWeight ?? "normal",
3621
+ fontStyle: t.fontStyle ?? "normal",
3622
+ fontFamily: t.fontFamily,
3782
3623
  dominantBaseline: t.dominantBaseline,
3783
3624
  opacity: t.opacity ?? 1,
3784
3625
  transform: t.transform,
@@ -3788,7 +3629,7 @@ function renderText(t, key) {
3788
3629
  );
3789
3630
  }
3790
3631
  function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3791
- const legendItems = chunk34UAGEJM_js.computeChartLegendLayout(vm);
3632
+ const legendItems = chunkSDOQKSKI_js.computeChartLegendLayout(vm);
3792
3633
  return /* @__PURE__ */ jsxRuntime.jsxs(
3793
3634
  "svg",
3794
3635
  {
@@ -3858,7 +3699,19 @@ function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3858
3699
  transform: `translate(${item.x.toFixed(1)},${item.y.toFixed(1)})`,
3859
3700
  children: [
3860
3701
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: -7, width: 10, height: 10, rx: 2, fill: item.color }),
3861
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 13, y: 3, fontSize: 9, fill: "#475569", children: item.label })
3702
+ /* @__PURE__ */ jsxRuntime.jsx(
3703
+ "text",
3704
+ {
3705
+ x: 13,
3706
+ y: 3,
3707
+ fontSize: item.fontSize,
3708
+ fill: item.fill,
3709
+ fontWeight: item.fontWeight,
3710
+ fontStyle: item.fontStyle,
3711
+ fontFamily: item.fontFamily,
3712
+ children: item.label
3713
+ }
3714
+ )
3862
3715
  ]
3863
3716
  },
3864
3717
  `${elementId}-lg-${i}`
@@ -3875,11 +3728,11 @@ function renderChartElement(element) {
3875
3728
  if (!chartData || chartData.series.length === 0) {
3876
3729
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkU6A5FWWE_js.translationsEn["pptx.chart.heading"] });
3877
3730
  }
3878
- const kind = chunk34UAGEJM_js.resolveChartKind(chartData.chartType ?? "bar");
3731
+ const kind = chunkSDOQKSKI_js.resolveChartKind(chartData.chartType ?? "bar");
3879
3732
  return renderChartViewModel(
3880
3733
  element.id,
3881
3734
  buildReactChartViewModel(element),
3882
- chunk34UAGEJM_js.chartPreserveAspectRatio(kind)
3735
+ chunkSDOQKSKI_js.chartPreserveAspectRatio(kind)
3883
3736
  );
3884
3737
  }
3885
3738
 
@@ -3899,14 +3752,14 @@ function buildNotesPdf(pages) {
3899
3752
  notes: page.notes,
3900
3753
  slideNumber: page.slideNumber
3901
3754
  }));
3902
- const bytes = chunk34UAGEJM_js.buildNotesPdfBytes(images, meta);
3755
+ const bytes = chunkSDOQKSKI_js.buildNotesPdfBytes(images, meta);
3903
3756
  const blob = new Blob([bytes], { type: "application/pdf" });
3904
3757
  return URL.createObjectURL(blob);
3905
3758
  }
3906
3759
 
3907
3760
  // src/viewer/utils/pdf-builder-slides.ts
3908
3761
  function buildPdfFromImageData(images) {
3909
- const bytes = chunk34UAGEJM_js.buildSlidesPdfBytes(images);
3762
+ const bytes = chunkSDOQKSKI_js.buildSlidesPdfBytes(images);
3910
3763
  const blob = new Blob([bytes], { type: "application/pdf" });
3911
3764
  return URL.createObjectURL(blob);
3912
3765
  }
@@ -3915,7 +3768,7 @@ function buildPdfFromImageData(images) {
3915
3768
  var activePreview = null;
3916
3769
  function startPreviewAnimation(elementId, preset, options) {
3917
3770
  stopPreviewAnimation();
3918
- const descriptor = chunk34UAGEJM_js.buildPreviewAnimation(preset, options);
3771
+ const descriptor = chunkSDOQKSKI_js.buildPreviewAnimation(preset, options);
3919
3772
  if (!descriptor) {
3920
3773
  return;
3921
3774
  }
@@ -3928,7 +3781,7 @@ function startMotionPathPreview(elementId, path, options) {
3928
3781
  return;
3929
3782
  }
3930
3783
  const stage = domEl.offsetParent;
3931
- const descriptor = chunk34UAGEJM_js.buildMotionPathPreview({
3784
+ const descriptor = chunkSDOQKSKI_js.buildMotionPathPreview({
3932
3785
  path,
3933
3786
  slideWidth: stage?.offsetWidth || DEFAULT_PREVIEW_SLIDE_WIDTH,
3934
3787
  slideHeight: stage?.offsetHeight || DEFAULT_PREVIEW_SLIDE_HEIGHT,
@@ -4000,7 +3853,6 @@ exports.DEFAULT_TABLE_COLUMNS = DEFAULT_TABLE_COLUMNS;
4000
3853
  exports.DEFAULT_TABLE_ROWS = DEFAULT_TABLE_ROWS;
4001
3854
  exports.DEFAULT_TEXT_COLOR = DEFAULT_TEXT_COLOR;
4002
3855
  exports.DEFAULT_TEXT_FONT_SIZE = DEFAULT_TEXT_FONT_SIZE;
4003
- exports.EMU_PER_PX = EMU_PER_PX;
4004
3856
  exports.GRID_SIZE = GRID_SIZE;
4005
3857
  exports.HYPERLINK_COLOR = HYPERLINK_COLOR;
4006
3858
  exports.MIN_ELEMENT_SIZE = MIN_ELEMENT_SIZE;