pptx-react-viewer 4.1.6 → 4.3.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 (194) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/{AiChatPanel-DRCY3T2Z.js → AiChatPanel-7UQA25FA.js} +28 -28
  3. package/dist/AiChatPanel-7UQA25FA.js.br +0 -0
  4. package/dist/AiChatPanel-7UQA25FA.js.gz +0 -0
  5. package/dist/{AiChatPanel-Y2RKSHOO.mjs → AiChatPanel-UCEK3ZTD.mjs} +4 -4
  6. package/dist/AiChatPanel-UCEK3ZTD.mjs.br +0 -0
  7. package/dist/AiChatPanel-UCEK3ZTD.mjs.gz +0 -0
  8. package/dist/{Model3DScene-ITHRMCLT.mjs → Model3DScene-AI2JTBQM.mjs} +1 -1
  9. package/dist/Model3DScene-AI2JTBQM.mjs.br +0 -0
  10. package/dist/Model3DScene-AI2JTBQM.mjs.gz +0 -0
  11. package/dist/{Model3DScene-VJZS726S.js → Model3DScene-X3DS3ELB.js} +2 -2
  12. package/dist/Model3DScene-X3DS3ELB.js.br +0 -0
  13. package/dist/Model3DScene-X3DS3ELB.js.gz +0 -0
  14. package/dist/{chunk-IXS7DALE.js → OrbitControls-4TDJCTBA.js} +1 -0
  15. package/dist/OrbitControls-4TDJCTBA.js.br +0 -0
  16. package/dist/OrbitControls-4TDJCTBA.js.gz +0 -0
  17. package/dist/{chunk-MV2GCDBR.mjs → OrbitControls-WCOIJFFL.mjs} +1 -0
  18. package/dist/OrbitControls-WCOIJFFL.mjs.br +0 -0
  19. package/dist/OrbitControls-WCOIJFFL.mjs.gz +0 -0
  20. package/dist/{chunk-FT3MMIXW.mjs → chunk-3UWJWJCR.mjs} +69243 -56884
  21. package/dist/chunk-3UWJWJCR.mjs.br +0 -0
  22. package/dist/chunk-3UWJWJCR.mjs.gz +0 -0
  23. package/dist/{chunk-LNSYROED.js → chunk-42XEZVUQ.js} +1322 -1216
  24. package/dist/chunk-42XEZVUQ.js.br +0 -0
  25. package/dist/chunk-42XEZVUQ.js.gz +0 -0
  26. package/dist/{chunk-P5LF34BT.js → chunk-E7O4HTS5.js} +195 -187
  27. package/dist/chunk-E7O4HTS5.js.br +0 -0
  28. package/dist/chunk-E7O4HTS5.js.gz +0 -0
  29. package/dist/{chunk-2O66VMWK.js → chunk-KAO5USPE.js} +5 -5
  30. package/dist/chunk-KAO5USPE.js.br +0 -0
  31. package/dist/chunk-KAO5USPE.js.gz +0 -0
  32. package/dist/{chunk-PC7H3C5W.mjs → chunk-OBQ453H6.mjs} +2 -2
  33. package/dist/chunk-OBQ453H6.mjs.br +0 -0
  34. package/dist/chunk-OBQ453H6.mjs.gz +0 -0
  35. package/dist/{chunk-KDTE5JOW.mjs → chunk-PLDG3CXW.mjs} +18 -10
  36. package/dist/chunk-PLDG3CXW.mjs.br +0 -0
  37. package/dist/chunk-PLDG3CXW.mjs.gz +0 -0
  38. package/dist/{chunk-YHTDDCSC.mjs → chunk-RXYLPESV.mjs} +265 -159
  39. package/dist/chunk-RXYLPESV.mjs.br +0 -0
  40. package/dist/chunk-RXYLPESV.mjs.gz +0 -0
  41. package/dist/{chunk-OFSKGB3W.mjs → chunk-SKTZSG7Q.mjs} +531 -748
  42. package/dist/chunk-SKTZSG7Q.mjs.br +0 -0
  43. package/dist/chunk-SKTZSG7Q.mjs.gz +0 -0
  44. package/dist/{chunk-QMSSDBKN.js → chunk-UTI4CLYJ.js} +69255 -56897
  45. package/dist/chunk-UTI4CLYJ.js.br +0 -0
  46. package/dist/chunk-UTI4CLYJ.js.gz +0 -0
  47. package/dist/{chunk-NXGUR2DO.js → chunk-W5KLLGVH.js} +2 -2
  48. package/dist/chunk-W5KLLGVH.js.br +0 -0
  49. package/dist/chunk-W5KLLGVH.js.gz +0 -0
  50. package/dist/{chunk-VWGJXNMR.js → chunk-Y7LI2JIR.js} +1992 -2215
  51. package/dist/chunk-Y7LI2JIR.js.br +0 -0
  52. package/dist/chunk-Y7LI2JIR.js.gz +0 -0
  53. package/dist/{chunk-QEYWSHNE.mjs → chunk-YQJOCGOK.mjs} +1 -1
  54. package/dist/chunk-YQJOCGOK.mjs.br +0 -0
  55. package/dist/chunk-YQJOCGOK.mjs.gz +0 -0
  56. package/dist/i18n/de.cjs +2 -2
  57. package/dist/i18n/de.cjs.br +0 -0
  58. package/dist/i18n/de.cjs.gz +0 -0
  59. package/dist/i18n/de.mjs +2 -2
  60. package/dist/i18n/de.mjs.br +0 -0
  61. package/dist/i18n/de.mjs.gz +0 -0
  62. package/dist/i18n/es.cjs +2 -2
  63. package/dist/i18n/es.cjs.br +0 -0
  64. package/dist/i18n/es.cjs.gz +0 -0
  65. package/dist/i18n/es.mjs +2 -2
  66. package/dist/i18n/es.mjs.br +0 -0
  67. package/dist/i18n/es.mjs.gz +0 -0
  68. package/dist/i18n/fr.cjs +2 -2
  69. package/dist/i18n/fr.cjs.br +0 -0
  70. package/dist/i18n/fr.cjs.gz +0 -0
  71. package/dist/i18n/fr.mjs +2 -2
  72. package/dist/i18n/fr.mjs.br +0 -0
  73. package/dist/i18n/fr.mjs.gz +0 -0
  74. package/dist/i18n/zh-CN.cjs +2 -2
  75. package/dist/i18n/zh-CN.cjs.br +0 -0
  76. package/dist/i18n/zh-CN.cjs.gz +0 -0
  77. package/dist/i18n/zh-CN.mjs +2 -2
  78. package/dist/i18n/zh-CN.mjs.br +0 -0
  79. package/dist/i18n/zh-CN.mjs.gz +0 -0
  80. package/dist/i18n.js +4 -4
  81. package/dist/i18n.js.br +0 -0
  82. package/dist/i18n.js.gz +0 -0
  83. package/dist/i18n.mjs +1 -1
  84. package/dist/i18n.mjs.br +0 -0
  85. package/dist/i18n.mjs.gz +0 -0
  86. package/dist/index.d.ts +310 -22
  87. package/dist/index.js +49 -49
  88. package/dist/index.js.br +0 -0
  89. package/dist/index.js.gz +0 -0
  90. package/dist/index.mjs +6 -6
  91. package/dist/index.mjs.br +0 -0
  92. package/dist/index.mjs.gz +0 -0
  93. package/dist/internals.d.ts +358 -22
  94. package/dist/internals.js +105 -105
  95. package/dist/internals.js.br +0 -0
  96. package/dist/internals.js.gz +0 -0
  97. package/dist/internals.mjs +4 -4
  98. package/dist/internals.mjs.br +0 -0
  99. package/dist/internals.mjs.gz +0 -0
  100. package/dist/pptx-viewer.css +1 -1
  101. package/dist/pptx-viewer.css.br +0 -0
  102. package/dist/pptx-viewer.css.gz +0 -0
  103. package/dist/viewer/index.d.ts +278 -3
  104. package/dist/viewer/index.js +27 -27
  105. package/dist/viewer/index.js.br +0 -0
  106. package/dist/viewer/index.js.gz +0 -0
  107. package/dist/viewer/index.mjs +6 -6
  108. package/dist/viewer/index.mjs.br +0 -0
  109. package/dist/viewer/index.mjs.gz +0 -0
  110. package/package.json +1 -1
  111. package/dist/AiChatPanel-DRCY3T2Z.js.br +0 -0
  112. package/dist/AiChatPanel-DRCY3T2Z.js.gz +0 -0
  113. package/dist/AiChatPanel-Y2RKSHOO.mjs.br +0 -0
  114. package/dist/AiChatPanel-Y2RKSHOO.mjs.gz +0 -0
  115. package/dist/Area3DChartScene-J4LMNSGM.js +0 -64
  116. package/dist/Area3DChartScene-J4LMNSGM.js.br +0 -0
  117. package/dist/Area3DChartScene-J4LMNSGM.js.gz +0 -0
  118. package/dist/Area3DChartScene-TDACCSOI.mjs +0 -62
  119. package/dist/Area3DChartScene-TDACCSOI.mjs.br +0 -0
  120. package/dist/Area3DChartScene-TDACCSOI.mjs.gz +0 -0
  121. package/dist/Bar3DChartScene-AD72DLBJ.mjs +0 -62
  122. package/dist/Bar3DChartScene-AD72DLBJ.mjs.br +0 -0
  123. package/dist/Bar3DChartScene-AD72DLBJ.mjs.gz +0 -0
  124. package/dist/Bar3DChartScene-T7334CTK.js +0 -64
  125. package/dist/Bar3DChartScene-T7334CTK.js.br +0 -0
  126. package/dist/Bar3DChartScene-T7334CTK.js.gz +0 -0
  127. package/dist/Line3DChartScene-2ZQSCHK3.mjs +0 -62
  128. package/dist/Line3DChartScene-2ZQSCHK3.mjs.br +0 -0
  129. package/dist/Line3DChartScene-2ZQSCHK3.mjs.gz +0 -0
  130. package/dist/Line3DChartScene-ELVKCFJZ.js +0 -64
  131. package/dist/Line3DChartScene-ELVKCFJZ.js.br +0 -0
  132. package/dist/Line3DChartScene-ELVKCFJZ.js.gz +0 -0
  133. package/dist/Model3DScene-ITHRMCLT.mjs.br +0 -0
  134. package/dist/Model3DScene-ITHRMCLT.mjs.gz +0 -0
  135. package/dist/Model3DScene-VJZS726S.js.br +0 -0
  136. package/dist/Model3DScene-VJZS726S.js.gz +0 -0
  137. package/dist/OrbitControls-2XOMWUVE.mjs +0 -3
  138. package/dist/OrbitControls-2XOMWUVE.mjs.br +0 -0
  139. package/dist/OrbitControls-2XOMWUVE.mjs.gz +0 -0
  140. package/dist/OrbitControls-CGYUF3BY.js +0 -12
  141. package/dist/OrbitControls-CGYUF3BY.js.br +0 -0
  142. package/dist/OrbitControls-CGYUF3BY.js.gz +0 -0
  143. package/dist/PieChart3DScene-N3DM33FW.js +0 -58
  144. package/dist/PieChart3DScene-N3DM33FW.js.br +0 -0
  145. package/dist/PieChart3DScene-N3DM33FW.js.gz +0 -0
  146. package/dist/PieChart3DScene-PYHOA7BO.mjs +0 -56
  147. package/dist/PieChart3DScene-PYHOA7BO.mjs.br +0 -0
  148. package/dist/PieChart3DScene-PYHOA7BO.mjs.gz +0 -0
  149. package/dist/SmartArt3DScene-D4VNNPHS.mjs +0 -500
  150. package/dist/SmartArt3DScene-D4VNNPHS.mjs.br +0 -0
  151. package/dist/SmartArt3DScene-D4VNNPHS.mjs.gz +0 -0
  152. package/dist/SmartArt3DScene-NHD7CZJ5.js +0 -502
  153. package/dist/SmartArt3DScene-NHD7CZJ5.js.br +0 -0
  154. package/dist/SmartArt3DScene-NHD7CZJ5.js.gz +0 -0
  155. package/dist/SurfaceChart3DScene-IFBUOLNB.mjs +0 -62
  156. package/dist/SurfaceChart3DScene-IFBUOLNB.mjs.br +0 -0
  157. package/dist/SurfaceChart3DScene-IFBUOLNB.mjs.gz +0 -0
  158. package/dist/SurfaceChart3DScene-PUWIMT7V.js +0 -64
  159. package/dist/SurfaceChart3DScene-PUWIMT7V.js.br +0 -0
  160. package/dist/SurfaceChart3DScene-PUWIMT7V.js.gz +0 -0
  161. package/dist/chunk-2O66VMWK.js.br +0 -0
  162. package/dist/chunk-2O66VMWK.js.gz +0 -0
  163. package/dist/chunk-DNR6CH6I.js +0 -30
  164. package/dist/chunk-DNR6CH6I.js.br +0 -0
  165. package/dist/chunk-DNR6CH6I.js.gz +0 -0
  166. package/dist/chunk-FT3MMIXW.mjs.br +0 -0
  167. package/dist/chunk-FT3MMIXW.mjs.gz +0 -0
  168. package/dist/chunk-IXS7DALE.js.br +0 -0
  169. package/dist/chunk-IXS7DALE.js.gz +0 -0
  170. package/dist/chunk-KDTE5JOW.mjs.br +0 -0
  171. package/dist/chunk-KDTE5JOW.mjs.gz +0 -0
  172. package/dist/chunk-LNSYROED.js.br +0 -0
  173. package/dist/chunk-LNSYROED.js.gz +0 -0
  174. package/dist/chunk-MV2GCDBR.mjs.br +0 -0
  175. package/dist/chunk-MV2GCDBR.mjs.gz +0 -0
  176. package/dist/chunk-NXGUR2DO.js.br +0 -0
  177. package/dist/chunk-NXGUR2DO.js.gz +0 -0
  178. package/dist/chunk-OFSKGB3W.mjs.br +0 -0
  179. package/dist/chunk-OFSKGB3W.mjs.gz +0 -0
  180. package/dist/chunk-P5LF34BT.js.br +0 -0
  181. package/dist/chunk-P5LF34BT.js.gz +0 -0
  182. package/dist/chunk-PC7H3C5W.mjs.br +0 -0
  183. package/dist/chunk-PC7H3C5W.mjs.gz +0 -0
  184. package/dist/chunk-QEYWSHNE.mjs.br +0 -0
  185. package/dist/chunk-QEYWSHNE.mjs.gz +0 -0
  186. package/dist/chunk-QMSSDBKN.js.br +0 -0
  187. package/dist/chunk-QMSSDBKN.js.gz +0 -0
  188. package/dist/chunk-T6GFCLSM.mjs +0 -27
  189. package/dist/chunk-T6GFCLSM.mjs.br +0 -4
  190. package/dist/chunk-T6GFCLSM.mjs.gz +0 -0
  191. package/dist/chunk-VWGJXNMR.js.br +0 -0
  192. package/dist/chunk-VWGJXNMR.js.gz +0 -0
  193. package/dist/chunk-YHTDDCSC.mjs.br +0 -0
  194. package/dist/chunk-YHTDDCSC.mjs.gz +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkQMSSDBKN_js = require('./chunk-QMSSDBKN.js');
4
- var chunkNXGUR2DO_js = require('./chunk-NXGUR2DO.js');
3
+ var chunkUTI4CLYJ_js = require('./chunk-UTI4CLYJ.js');
4
+ var chunkW5KLLGVH_js = require('./chunk-W5KLLGVH.js');
5
5
  var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
7
  var React7 = require('react');
@@ -15,7 +15,7 @@ var React7__default = /*#__PURE__*/_interopDefault(React7);
15
15
 
16
16
  // src/viewer/utils/animation-effects.ts
17
17
  function getAnimationInitialStyle2(preset, nativeAnimation) {
18
- return chunkQMSSDBKN_js.getAnimationInitialStyle(preset, nativeAnimation);
18
+ return chunkUTI4CLYJ_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 chunkQMSSDBKN_js.cloneHistorySnapshot(snapshot);
26
+ return chunkUTI4CLYJ_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 = chunkQMSSDBKN_js.VIEWER_SHORTCUT_REFERENCE;
64
+ var SHORTCUT_REFERENCE_ITEMS = chunkUTI4CLYJ_js.VIEWER_SHORTCUT_REFERENCE;
65
65
 
66
66
  // src/viewer/constants/transitions-animations.ts
67
67
  var ANIMATION_PRESET_OPTIONS = [
@@ -89,7 +89,7 @@ var GLYPH_COMPONENTS = {
89
89
  plus: lu.LuPlus,
90
90
  triangle: lu.LuTriangle
91
91
  };
92
- var SHAPE_PRESETS = chunkQMSSDBKN_js.SHAPE_PRESET_DEFS.map(
92
+ var SHAPE_PRESETS = chunkUTI4CLYJ_js.SHAPE_PRESET_DEFS.map(
93
93
  (def) => ({
94
94
  type: def.type,
95
95
  label: def.label,
@@ -114,7 +114,7 @@ var ARROW_SIZE_OPTIONS = [
114
114
  { value: "med", label: "Medium", i18nKey: "pptx.connectorOptions.sizeMedium" },
115
115
  { value: "lg", label: "Large", i18nKey: "pptx.connectorOptions.sizeLarge" }
116
116
  ];
117
- var STROKE_DASH_OPTIONS2 = chunkQMSSDBKN_js.STROKE_DASH_OPTIONS;
117
+ var STROKE_DASH_OPTIONS2 = chunkUTI4CLYJ_js.STROKE_DASH_OPTIONS;
118
118
 
119
119
  // src/viewer/utils/shape-types.tsx
120
120
  function getShapeType(shapeType) {
@@ -223,7 +223,7 @@ function isConnectorOrLineElement(element) {
223
223
  if (element.type === "connector") {
224
224
  return true;
225
225
  }
226
- if (!chunkQMSSDBKN_js.hasShapeProperties(element)) {
226
+ if (!chunkUTI4CLYJ_js.hasShapeProperties(element)) {
227
227
  return false;
228
228
  }
229
229
  const st = getShapeType(element.shapeType);
@@ -232,18 +232,18 @@ function isConnectorOrLineElement(element) {
232
232
 
233
233
  // src/viewer/utils/image-style.ts
234
234
  function getImageMaskStyle(element) {
235
- if (!chunkQMSSDBKN_js.hasShapeProperties(element)) {
235
+ if (!chunkUTI4CLYJ_js.hasShapeProperties(element)) {
236
236
  return void 0;
237
237
  }
238
- const geometry = chunkQMSSDBKN_js.resolveShapeGeometry(element);
238
+ const geometry = chunkUTI4CLYJ_js.resolveShapeGeometry(element);
239
239
  if (geometry.kind === "borderRadius") {
240
240
  return { borderRadius: geometry.radius };
241
241
  }
242
242
  return geometry.kind === "clipPath" ? { clipPath: geometry.clipPath } : void 0;
243
243
  }
244
244
  function getImageRenderStyle(element) {
245
- const fit = chunkQMSSDBKN_js.getImageFitStyle(element);
246
- const counterTransform = chunkQMSSDBKN_js.getImageFillCounterTransform(element, Boolean(fit.transform));
245
+ const fit = chunkUTI4CLYJ_js.getImageFitStyle(element);
246
+ const counterTransform = chunkUTI4CLYJ_js.getImageFillCounterTransform(element, Boolean(fit.transform));
247
247
  return {
248
248
  // A translated/scaled crop, or a rotWithShape=false counter-transform,
249
249
  // must be masked by the stationary wrapper, not by the moving/counter-
@@ -262,7 +262,7 @@ function getImageSurfaceMaskStyle(element) {
262
262
  };
263
263
  }
264
264
  function getImageSurfaceStyle(element) {
265
- const fill = chunkQMSSDBKN_js.hasShapeProperties(element) ? chunkQMSSDBKN_js.getComputedFillStyle(element) : void 0;
265
+ const fill = chunkUTI4CLYJ_js.hasShapeProperties(element) ? chunkUTI4CLYJ_js.getComputedFillStyle(element) : void 0;
266
266
  return {
267
267
  position: "absolute",
268
268
  inset: 0,
@@ -275,13 +275,13 @@ function getImageSurfaceStyle(element) {
275
275
  };
276
276
  }
277
277
  function getCropShapeClipPath2(element) {
278
- if (!chunkQMSSDBKN_js.isImageLikeElement(element)) {
278
+ if (!chunkUTI4CLYJ_js.isImageLikeElement(element)) {
279
279
  return void 0;
280
280
  }
281
- return chunkQMSSDBKN_js.getCropShapeClipPath(element.cropShape, element.width, element.height);
281
+ return chunkUTI4CLYJ_js.getCropShapeClipPath(element.cropShape, element.width, element.height);
282
282
  }
283
- function getImageTilingStyle2(element) {
284
- return chunkQMSSDBKN_js.getImageTilingStyle(element);
283
+ function getImageTilingStyle2(element, nativeSize) {
284
+ return chunkUTI4CLYJ_js.getImageTilingStyle(element, nativeSize);
285
285
  }
286
286
 
287
287
  // src/viewer/utils/geometry-image.ts
@@ -413,7 +413,7 @@ function VideoWithMetadata({
413
413
  {
414
414
  ref: mediaRef,
415
415
  className: "w-full h-full pointer-events-auto",
416
- style: isFullScreen ? { objectFit: "cover" } : chunkQMSSDBKN_js.getImageFitStyle(element),
416
+ style: isFullScreen ? { objectFit: "cover" } : chunkUTI4CLYJ_js.getImageFitStyle(element),
417
417
  controls: showTransport,
418
418
  preload: "metadata",
419
419
  playsInline: true,
@@ -470,7 +470,7 @@ function PresentationMediaController({
470
470
  const [isMediaPlaying, setIsMediaPlaying] = React7.useState(false);
471
471
  const trimStartSec = element.trimStartMs !== void 0 ? element.trimStartMs / 1e3 : 0;
472
472
  const hideWhenNotPlaying = isPresentationMode && element.hideWhenNotPlaying === true;
473
- const { volume: playbackVolume, playbackRate } = chunkQMSSDBKN_js.mediaPlaybackAttributes({
473
+ const { volume: playbackVolume, playbackRate } = chunkUTI4CLYJ_js.mediaPlaybackAttributes({
474
474
  loop: element.loop,
475
475
  volume: element.volume,
476
476
  playbackSpeed: element.playbackSpeed
@@ -518,7 +518,7 @@ function PresentationMediaController({
518
518
  if (!el || !isPresentationMode) {
519
519
  return;
520
520
  }
521
- return chunkQMSSDBKN_js.scheduleMediaTrimAndFade(el, {
521
+ return chunkUTI4CLYJ_js.scheduleMediaTrimAndFade(el, {
522
522
  trimStartMs: element.trimStartMs,
523
523
  trimEndMs: element.trimEndMs,
524
524
  fadeInDuration: element.fadeInDuration,
@@ -539,7 +539,7 @@ function PresentationMediaController({
539
539
  }
540
540
  if (element.playAcrossSlides && element.mediaType === "audio") {
541
541
  const dataUrl = element.mediaData ?? resolvedDataUrl;
542
- if (chunkQMSSDBKN_js.registerCrossSlideAudio(element, dataUrl)) {
542
+ if (chunkUTI4CLYJ_js.registerCrossSlideAudio(element, dataUrl)) {
543
543
  return;
544
544
  }
545
545
  }
@@ -571,7 +571,11 @@ function PresentationMediaController({
571
571
  }, []);
572
572
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full h-full", style: wrapperStyle, children: [
573
573
  children({ mediaRef, onPlay: noopOnPlay, isMediaPlaying }),
574
- isFullScreen && isPresentationMode && isMediaPlaying && /* @__PURE__ */ jsxRuntime.jsx(
574
+ chunkUTI4CLYJ_js.shouldShowMediaFullscreenStopButton({
575
+ fullScreen: isFullScreen,
576
+ presenting: isPresentationMode,
577
+ playing: isMediaPlaying
578
+ }) && /* @__PURE__ */ jsxRuntime.jsx(
575
579
  "button",
576
580
  {
577
581
  type: "button",
@@ -584,7 +588,7 @@ function PresentationMediaController({
584
588
  ] });
585
589
  }
586
590
  function label(key) {
587
- return key === void 0 ? void 0 : chunkNXGUR2DO_js.translationsEn[key];
591
+ return key === void 0 ? void 0 : chunkW5KLLGVH_js.translationsEn[key];
588
592
  }
589
593
  function FallbackIcon({
590
594
  paths,
@@ -620,17 +624,17 @@ function Badge({
620
624
  "div",
621
625
  {
622
626
  className: `absolute inset-0 flex flex-col items-center justify-center ${isMissing ? "gap-1" : ""}`,
623
- ...{ [chunkQMSSDBKN_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
627
+ ...{ [chunkUTI4CLYJ_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
624
628
  children: [
625
629
  /* @__PURE__ */ jsxRuntime.jsx(
626
630
  FallbackIcon,
627
631
  {
628
- paths: chunkQMSSDBKN_js.mediaFallbackIcon(visual, element.mediaType),
632
+ paths: chunkUTI4CLYJ_js.mediaFallbackIcon(visual, element.mediaType),
629
633
  size: isMissing ? 32 : 48,
630
634
  className: isMissing ? "text-white/60" : "text-white/80 drop-shadow-md"
631
635
  }
632
636
  ),
633
- isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkQMSSDBKN_js.mediaFallbackLabelKey(visual, element.mediaType)) })
637
+ isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkUTI4CLYJ_js.mediaFallbackLabelKey(visual, element.mediaType)) })
634
638
  ]
635
639
  }
636
640
  );
@@ -647,17 +651,17 @@ function Placeholder({
647
651
  "div",
648
652
  {
649
653
  className: `w-full h-full flex flex-col items-center justify-center gap-1 pointer-events-none rounded ${isMissing ? "bg-black/30 border border-dashed border-white/20" : element.mediaType === "audio" ? "bg-black/10" : "bg-black/20"}`,
650
- ...{ [chunkQMSSDBKN_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
654
+ ...{ [chunkUTI4CLYJ_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
651
655
  children: [
652
656
  /* @__PURE__ */ jsxRuntime.jsx(
653
657
  FallbackIcon,
654
658
  {
655
- paths: chunkQMSSDBKN_js.mediaFallbackIcon(visual, element.mediaType),
659
+ paths: chunkUTI4CLYJ_js.mediaFallbackIcon(visual, element.mediaType),
656
660
  size: isMissing ? 36 : element.mediaType === "audio" ? 24 : 32,
657
661
  className: isMissing ? "text-white/50" : "text-white/70"
658
662
  }
659
663
  ),
660
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkQMSSDBKN_js.mediaFallbackLabelKey(visual, element.mediaType)) })
664
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkUTI4CLYJ_js.mediaFallbackLabelKey(visual, element.mediaType)) })
661
665
  ]
662
666
  }
663
667
  );
@@ -667,7 +671,7 @@ function renderMediaFallback({
667
671
  posterUrl,
668
672
  surface
669
673
  }) {
670
- const visual = chunkQMSSDBKN_js.mediaFallbackVisual(surface, {
674
+ const visual = chunkUTI4CLYJ_js.mediaFallbackVisual(surface, {
671
675
  hasPoster: Boolean(posterUrl),
672
676
  missing: element.mediaMissing === true
673
677
  });
@@ -677,9 +681,9 @@ function renderMediaFallback({
677
681
  "img",
678
682
  {
679
683
  src: posterUrl,
680
- alt: visual.dimPoster ? chunkNXGUR2DO_js.translationsEn["pptx.media.posterAlt"] : chunkNXGUR2DO_js.translationsEn["pptx.media.videoPosterAlt"],
684
+ alt: visual.dimPoster ? chunkW5KLLGVH_js.translationsEn["pptx.media.posterAlt"] : chunkW5KLLGVH_js.translationsEn["pptx.media.videoPosterAlt"],
681
685
  className: `w-full h-full${visual.dimPoster ? " opacity-50" : ""}`,
682
- style: chunkQMSSDBKN_js.getImageFitStyle(element)
686
+ style: chunkUTI4CLYJ_js.getImageFitStyle(element)
683
687
  }
684
688
  ),
685
689
  /* @__PURE__ */ jsxRuntime.jsx(Badge, { visual, element })
@@ -689,7 +693,7 @@ function renderMediaFallback({
689
693
  }
690
694
  function renderMediaElement(element, mediaDataUrls, options) {
691
695
  if (element.type !== "media") {
692
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkNXGUR2DO_js.translationsEn["pptx.media.title"] });
696
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkW5KLLGVH_js.translationsEn["pptx.media.title"] });
693
697
  }
694
698
  const mediaType = element.mediaType;
695
699
  const mediaPath = element.mediaPath;
@@ -697,7 +701,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
697
701
  const dataUrl = element.mediaData ?? (mediaPath ? mediaDataUrls.get(mediaPath) : void 0);
698
702
  const trimFragment = buildTrimFragment(element);
699
703
  const posterUrl = element.posterFrameData ?? void 0;
700
- const shouldLoop = chunkQMSSDBKN_js.mediaPlaybackAttributes(element).loop;
704
+ const shouldLoop = chunkUTI4CLYJ_js.mediaPlaybackAttributes(element).loop;
701
705
  const shouldAutoPlay = options?.autoPlay === true || element.autoPlay === true;
702
706
  const isFullScreen = options?.fullScreen === true;
703
707
  const isPresentationMode = options?.isPresentationMode === true;
@@ -775,42 +779,42 @@ function renderMediaElement(element, mediaDataUrls, options) {
775
779
  if (surface.presenting || surface.preview) {
776
780
  return null;
777
781
  }
778
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkNXGUR2DO_js.translationsEn["pptx.media.title"] });
782
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkW5KLLGVH_js.translationsEn["pptx.media.title"] });
779
783
  }
780
784
 
781
785
  // src/viewer/utils/text-utils.tsx
782
786
  function getTextStyleForElement(element, fallbackColor) {
783
- return chunkQMSSDBKN_js.buildTextBlockStyle(element, { fallbackColor });
787
+ return chunkUTI4CLYJ_js.buildTextBlockStyle(element, { fallbackColor });
784
788
  }
785
789
 
786
790
  // src/viewer/utils/text-layout.tsx
787
791
  function getTextLayoutStyle(element) {
788
- if (!chunkQMSSDBKN_js.hasTextProperties(element)) {
792
+ if (!chunkUTI4CLYJ_js.hasTextProperties(element)) {
789
793
  return {};
790
794
  }
791
- const writingMode = chunkQMSSDBKN_js.toCssWritingMode(element.textStyle?.textDirection);
792
- const textOrientation = chunkQMSSDBKN_js.toCssTextOrientation(element.textStyle?.textDirection);
793
- const verticalDirection = chunkQMSSDBKN_js.toCssVerticalDirection(element.textStyle?.textDirection);
795
+ const writingMode = chunkUTI4CLYJ_js.toCssWritingMode(element.textStyle?.textDirection);
796
+ const textOrientation = chunkUTI4CLYJ_js.toCssTextOrientation(element.textStyle?.textDirection);
797
+ const verticalDirection = chunkUTI4CLYJ_js.toCssVerticalDirection(element.textStyle?.textDirection);
794
798
  const textWrapNone = element.textStyle?.textWrap === "none";
795
799
  const shapeAutoFitTextBox = element.textStyle?.autoFitMode === "shrink" && (element.type === "text" || element.locks?.txBox === true);
796
- const hasParagraphIndents = chunkQMSSDBKN_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
800
+ const hasParagraphIndents = chunkUTI4CLYJ_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
797
801
  const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
798
802
  const paragraphIndent = element.textStyle?.paragraphIndent;
799
803
  const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
800
804
  const textIndent = !hasParagraphIndents && typeof paragraphIndent === "number" && paragraphIndent !== 0 ? paragraphIndent : void 0;
801
805
  const bodyTop = element.textStyle?.bodyInsetTop ?? DEFAULT_BODY_INSET_TB_PX;
802
806
  const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
807
+ const bodyLayoutStyle = chunkUTI4CLYJ_js.buildTextBodyLayoutStyle(element);
803
808
  return {
804
- // Columns / flex anchoring / anchorCtr / tab-size / kinsoku, from shared.
805
- ...chunkQMSSDBKN_js.buildTextBodyLayoutStyle(element),
809
+ ...bodyLayoutStyle,
806
810
  // Body inset only. Paragraph spacing (spcBef/spcAft) is applied
807
811
  // per-paragraph by the paragraph renderer, not collapsed here.
808
812
  paddingTop: bodyTop,
809
813
  paddingBottom: bodyBottom,
810
814
  writingMode,
811
815
  textOrientation,
812
- direction: verticalDirection,
813
- marginLeft,
816
+ direction: verticalDirection ?? bodyLayoutStyle.direction,
817
+ marginLeft: marginLeft ?? bodyLayoutStyle.marginLeft,
814
818
  textIndent,
815
819
  ...shapeAutoFitTextBox ? {
816
820
  width: textWrapNone ? "max-content" : "100%",
@@ -830,7 +834,7 @@ function getTextLayoutStyle(element) {
830
834
 
831
835
  // src/viewer/utils/text-effects.tsx
832
836
  function buildTextBody3DSceneStyle2(textStyle, elementSize) {
833
- return chunkQMSSDBKN_js.buildTextBody3DSceneStyle(textStyle, elementSize);
837
+ return chunkUTI4CLYJ_js.buildTextBody3DSceneStyle(textStyle, elementSize);
834
838
  }
835
839
 
836
840
  // src/viewer/utils/text-warp-css.tsx
@@ -1015,13 +1019,13 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1015
1019
  if (!subElementAnimStates || subElementAnimStates.size === 0) {
1016
1020
  return renderedSegments;
1017
1021
  }
1018
- const paraKey = `${elementId}${chunkQMSSDBKN_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1022
+ const paraKey = `${elementId}${chunkUTI4CLYJ_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1019
1023
  const paraState = subElementAnimStates.get(paraKey);
1020
1024
  if (paraState) {
1021
1025
  const style = buildAnimStyle(paraState);
1022
1026
  return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
1023
1027
  }
1024
- const spec = chunkQMSSDBKN_js.buildTextBuildSpec(
1028
+ const spec = chunkUTI4CLYJ_js.buildTextBuildSpec(
1025
1029
  elementId,
1026
1030
  paraIndex,
1027
1031
  paraRuns.map((run) => ({ text: run.text, style: run })),
@@ -1039,7 +1043,7 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1039
1043
  "span",
1040
1044
  {
1041
1045
  "data-anim-id": span.animId,
1042
- style: chunkQMSSDBKN_js.textBuildSpanStyle(span),
1046
+ style: chunkUTI4CLYJ_js.textBuildSpanStyle(span),
1043
1047
  children: content
1044
1048
  },
1045
1049
  span.animId
@@ -1050,13 +1054,13 @@ function renderUnderlineWords(text, isUnderlineWords, wordDecoration, metric, ke
1050
1054
  if (!isUnderlineWords || !text) {
1051
1055
  return inner(text, keyPrefix, metric);
1052
1056
  }
1053
- const pieces = chunkQMSSDBKN_js.splitWordsForUnderline(text);
1057
+ const pieces = chunkUTI4CLYJ_js.splitWordsForUnderline(text);
1054
1058
  if (pieces.length === 0) {
1055
1059
  return inner(text, keyPrefix, metric);
1056
1060
  }
1057
1061
  const gapMetric = metric ? {
1058
1062
  ...metric,
1059
- nestedStyle: metric.nestedStyle ? chunkQMSSDBKN_js.stripUnderlineDecoration(metric.nestedStyle) : void 0
1063
+ nestedStyle: metric.nestedStyle ? chunkUTI4CLYJ_js.stripUnderlineDecoration(metric.nestedStyle) : void 0
1060
1064
  } : void 0;
1061
1065
  return pieces.map((piece, i) => {
1062
1066
  const key = `${keyPrefix}-u${i}`;
@@ -1089,7 +1093,7 @@ function makeSegmentPieceRenderer(needsScriptFonts, scriptFonts, baseFontFamily,
1089
1093
  );
1090
1094
  }
1091
1095
  function renderTabbedLine(line, ctx, keyPrefix, renderPiece, nestedStyle, underlineWords = false) {
1092
- const [lineLayout] = chunkQMSSDBKN_js.buildRunTabLines(
1096
+ const [lineLayout] = chunkUTI4CLYJ_js.buildRunTabLines(
1093
1097
  line,
1094
1098
  ctx,
1095
1099
  nestedStyle,
@@ -1108,7 +1112,7 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
1108
1112
  if (!needsScriptFonts || !text) {
1109
1113
  return text;
1110
1114
  }
1111
- const pieces = chunkQMSSDBKN_js.splitRunByScriptFont(
1115
+ const pieces = chunkUTI4CLYJ_js.splitRunByScriptFont(
1112
1116
  text,
1113
1117
  scriptFonts,
1114
1118
  baseFontFamily,
@@ -1125,7 +1129,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
1125
1129
  if (!metric || !text) {
1126
1130
  return inner(text, keyPrefix);
1127
1131
  }
1128
- const pieces = chunkQMSSDBKN_js.splitRunForMetrics(text, metric.font);
1132
+ const pieces = chunkUTI4CLYJ_js.splitRunForMetrics(text, metric.font);
1129
1133
  if (pieces.length <= 1) {
1130
1134
  return inner(text, keyPrefix);
1131
1135
  }
@@ -1134,7 +1138,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
1134
1138
  {
1135
1139
  style: {
1136
1140
  ...metric.nestedStyle,
1137
- letterSpacing: chunkQMSSDBKN_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1141
+ letterSpacing: chunkUTI4CLYJ_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
1138
1142
  },
1139
1143
  children: inner(piece.text, `${keyPrefix}-w${i}`)
1140
1144
  },
@@ -1210,8 +1214,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
1210
1214
  });
1211
1215
  }
1212
1216
  function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
1213
- const mathml = chunkQMSSDBKN_js.convertOmmlToMathMl(equationXml);
1214
- const safeMathml = mathml ? chunkQMSSDBKN_js.sanitizeMathMl(mathml) : "";
1217
+ const mathml = chunkUTI4CLYJ_js.convertOmmlToMathMl(equationXml);
1218
+ const safeMathml = mathml ? chunkUTI4CLYJ_js.sanitizeMathMl(mathml) : "";
1215
1219
  const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
1216
1220
  "span",
1217
1221
  {
@@ -1221,7 +1225,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
1221
1225
  },
1222
1226
  dangerouslySetInnerHTML: { __html: safeMathml }
1223
1227
  }
1224
- ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-1 py-0.5 rounded text-xs bg-gray-200/20 text-gray-400 italic", children: chunkNXGUR2DO_js.translationsEn["pptx.textSegment.equationFallback"] });
1228
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-1 py-0.5 rounded text-xs bg-gray-200/20 text-gray-400 italic", children: chunkW5KLLGVH_js.translationsEn["pptx.textSegment.equationFallback"] });
1225
1229
  if (equationNumber) {
1226
1230
  return /* @__PURE__ */ jsxRuntime.jsxs(
1227
1231
  "span",
@@ -1344,7 +1348,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1344
1348
  const segmentStyle = segment?.style ?? {};
1345
1349
  const textValue = run.text;
1346
1350
  const lines = textValue.split("\n");
1347
- const resolvedSegmentColor = chunkQMSSDBKN_js.normalizeHexColor(
1351
+ const resolvedSegmentColor = chunkUTI4CLYJ_js.normalizeHexColor(
1348
1352
  segmentStyle.color || element.textStyle?.color,
1349
1353
  run.hyperlink ? HYPERLINK_COLOR : fallbackColor
1350
1354
  );
@@ -1352,16 +1356,19 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1352
1356
  const baselineFraction = rawBaseline === 0 ? 0 : Math.abs(rawBaseline) >= 1e3 ? rawBaseline / 1e5 : rawBaseline / 100;
1353
1357
  const baselineFontScale = baselineFraction !== 0 ? BASELINE_FONT_SCALE : 1;
1354
1358
  const rawFontSize = segmentStyle.fontSize || element.textStyle?.fontSize || DEFAULT_TEXT_FONT_SIZE;
1355
- const baseFontSize = rawFontSize * chunkQMSSDBKN_js.resolveAutoFitFontScale(element.textStyle);
1359
+ const baseFontSize = rawFontSize * chunkUTI4CLYJ_js.resolveAutoFitFontScale(element.textStyle);
1356
1360
  const baselineShift = baselineFraction !== 0 ? `${baselineFraction * baseFontSize}px` : void 0;
1357
- const fontKerning = chunkQMSSDBKN_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
1361
+ const fontKerning = chunkUTI4CLYJ_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
1362
+ const scriptFallbackWins = Boolean(
1363
+ segmentStyle.scriptFallbackFont && segmentStyle.fontFamilyIsCascadeDefault
1364
+ );
1358
1365
  const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
1359
- const baseFontFamily = rawFontFamily ? chunkQMSSDBKN_js.getSubstituteFontFamily(
1366
+ const baseFontFamily = scriptFallbackWins ? chunkUTI4CLYJ_js.getSubstituteFontFamily(segmentStyle.scriptFallbackFont) : rawFontFamily ? chunkUTI4CLYJ_js.getSubstituteFontFamily(
1360
1367
  rawFontFamily,
1361
- chunkQMSSDBKN_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1368
+ chunkUTI4CLYJ_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
1362
1369
  ) : DEFAULT_FONT_FAMILY2;
1363
- const scriptFonts = chunkQMSSDBKN_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
1364
- const needsScriptFonts = chunkQMSSDBKN_js.hasDistinctScriptFonts(scriptFonts);
1370
+ const scriptFonts = chunkUTI4CLYJ_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
1371
+ const needsScriptFonts = chunkUTI4CLYJ_js.hasDistinctScriptFonts(scriptFonts);
1365
1372
  const authoredLetterSpacing = typeof segmentStyle.characterSpacing === "number" && segmentStyle.characterSpacing !== 0 ? segmentStyle.characterSpacing / 100 * (96 / 72) : 0;
1366
1373
  const metricFont = {
1367
1374
  fontFamily: baseFontFamily,
@@ -1369,7 +1376,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1369
1376
  bold: Boolean(segmentStyle.bold),
1370
1377
  italic: Boolean(segmentStyle.italic)
1371
1378
  };
1372
- const nestedStyle = chunkQMSSDBKN_js.nestedTextDecorationStyle(run.style);
1379
+ const nestedStyle = chunkUTI4CLYJ_js.nestedTextDecorationStyle(run.style);
1373
1380
  const metricContext = { font: metricFont, authoredPx: authoredLetterSpacing, nestedStyle };
1374
1381
  const spanStyle = { ...run.style };
1375
1382
  spanStyle.color = resolvedSegmentColor;
@@ -1377,11 +1384,11 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1377
1384
  spanStyle.fontFamily = baseFontFamily;
1378
1385
  spanStyle.verticalAlign = baselineShift;
1379
1386
  spanStyle.fontKerning = fontKerning;
1380
- spanStyle.letterSpacing = chunkQMSSDBKN_js.pieceLetterSpacing(
1387
+ spanStyle.letterSpacing = chunkUTI4CLYJ_js.pieceLetterSpacing(
1381
1388
  authoredLetterSpacing,
1382
- chunkQMSSDBKN_js.resolveMetricTrackingPx(textValue, metricFont)
1389
+ chunkUTI4CLYJ_js.resolveMetricTrackingPx(textValue, metricFont)
1383
1390
  );
1384
- const hollow = chunkQMSSDBKN_js.hollowTextFillStyle(segmentStyle, {
1391
+ const hollow = chunkUTI4CLYJ_js.hollowTextFillStyle(segmentStyle, {
1385
1392
  color: resolvedSegmentColor,
1386
1393
  textStroke: typeof spanStyle.WebkitTextStroke === "string" ? spanStyle.WebkitTextStroke : void 0
1387
1394
  });
@@ -1396,7 +1403,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1396
1403
  const isUnderlineWords = Boolean(segmentStyle.underline) && segmentStyle.underlineStyle === "words";
1397
1404
  const wordDecoration = isUnderlineWords ? nestedStyle ?? run.underlineWordPieces?.find((piece) => piece.style)?.style : void 0;
1398
1405
  if (isUnderlineWords) {
1399
- const stripped = chunkQMSSDBKN_js.stripUnderlineDecoration(spanStyle);
1406
+ const stripped = chunkUTI4CLYJ_js.stripUnderlineDecoration(spanStyle);
1400
1407
  spanStyle.textDecoration = stripped.textDecoration;
1401
1408
  delete spanStyle.textDecorationStyle;
1402
1409
  delete spanStyle.textDecorationThickness;
@@ -1412,7 +1419,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
1412
1419
  scriptFonts,
1413
1420
  baseFontFamily,
1414
1421
  findHighlights,
1415
- chunkQMSSDBKN_js.buildTabContext(
1422
+ chunkUTI4CLYJ_js.buildTabContext(
1416
1423
  element.textStyle?.tabStops,
1417
1424
  element.textStyle?.defaultTabSize,
1418
1425
  baseFontSize,
@@ -1444,14 +1451,14 @@ function renderSeededListRun(seed, runs, segments, context) {
1444
1451
  const segment = sourceRun ? segments[seed.segmentIndex] : { text: seed.text, style: seed.style };
1445
1452
  const resolvedSegment = {
1446
1453
  ...segment,
1447
- style: chunkQMSSDBKN_js.withInlineListDecorationDefaults(segment.style, context.element.textStyle)
1454
+ style: chunkUTI4CLYJ_js.withInlineListDecorationDefaults(segment.style, context.element.textStyle)
1448
1455
  };
1449
- const decorationCss = chunkQMSSDBKN_js.segmentStyleToCss(
1456
+ const decorationCss = chunkUTI4CLYJ_js.segmentStyleToCss(
1450
1457
  resolvedSegment,
1451
- chunkQMSSDBKN_js.resolveAutoFitFontScale(context.element.textStyle)
1458
+ chunkUTI4CLYJ_js.resolveAutoFitFontScale(context.element.textStyle)
1452
1459
  );
1453
- chunkQMSSDBKN_js.applyUnderlineVariant(decorationCss, resolvedSegment);
1454
- const run = sourceRun ? { ...sourceRun, style: { ...sourceRun.style, ...chunkQMSSDBKN_js.nestedTextDecorationStyle(decorationCss) } } : {
1460
+ chunkUTI4CLYJ_js.applyUnderlineVariant(decorationCss, resolvedSegment);
1461
+ const run = sourceRun ? { ...sourceRun, style: { ...sourceRun.style, ...chunkUTI4CLYJ_js.nestedTextDecorationStyle(decorationCss) } } : {
1455
1462
  text: seed.text,
1456
1463
  style: decorationCss,
1457
1464
  segmentIndex: seed.segmentIndex
@@ -1466,7 +1473,7 @@ function renderSeededListRun(seed, runs, segments, context) {
1466
1473
  });
1467
1474
  }
1468
1475
  function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick, placeholderPrompt, inlineListSeed) {
1469
- if (!chunkQMSSDBKN_js.hasTextProperties(element)) {
1476
+ if (!chunkUTI4CLYJ_js.hasTextProperties(element)) {
1470
1477
  return emptyFallback || null;
1471
1478
  }
1472
1479
  const segments = segmentOverrides ?? element.textSegments;
@@ -1476,7 +1483,7 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
1476
1483
  }
1477
1484
  return element.text || emptyFallback || "";
1478
1485
  }
1479
- const paragraphs = chunkQMSSDBKN_js.buildParagraphs(
1486
+ const paragraphs = chunkUTI4CLYJ_js.buildParagraphs(
1480
1487
  element,
1481
1488
  fieldContext,
1482
1489
  segmentOverrides,
@@ -1622,13 +1629,13 @@ function renderBulletMarker(para, paraIndex, elementId) {
1622
1629
  );
1623
1630
  }
1624
1631
  function getDuotoneColors(element) {
1625
- if (!chunkQMSSDBKN_js.isImageLikeElement(element)) {
1632
+ if (!chunkUTI4CLYJ_js.isImageLikeElement(element)) {
1626
1633
  return void 0;
1627
1634
  }
1628
1635
  return element.imageEffects?.duotone;
1629
1636
  }
1630
1637
  function buildLineShadowCss(element) {
1631
- if (!chunkQMSSDBKN_js.hasShapeProperties(element)) {
1638
+ if (!chunkUTI4CLYJ_js.hasShapeProperties(element)) {
1632
1639
  return void 0;
1633
1640
  }
1634
1641
  const ss = element.shapeStyle;
@@ -1639,13 +1646,13 @@ function buildLineShadowCss(element) {
1639
1646
  const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
1640
1647
  const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
1641
1648
  const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
1642
- return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkQMSSDBKN_js.colorWithOpacity(
1643
- chunkQMSSDBKN_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1649
+ return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkUTI4CLYJ_js.colorWithOpacity(
1650
+ chunkUTI4CLYJ_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
1644
1651
  opacity
1645
1652
  )}`;
1646
1653
  }
1647
1654
  function buildLineGlowFilter(element) {
1648
- if (!chunkQMSSDBKN_js.hasShapeProperties(element)) {
1655
+ if (!chunkUTI4CLYJ_js.hasShapeProperties(element)) {
1649
1656
  return void 0;
1650
1657
  }
1651
1658
  const ss = element.shapeStyle;
@@ -1654,22 +1661,22 @@ function buildLineGlowFilter(element) {
1654
1661
  }
1655
1662
  const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
1656
1663
  const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
1657
- const glowCol = chunkQMSSDBKN_js.colorWithOpacity(chunkQMSSDBKN_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1664
+ const glowCol = chunkUTI4CLYJ_js.colorWithOpacity(chunkUTI4CLYJ_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
1658
1665
  return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
1659
1666
  }
1660
1667
  function getDagDuotoneFilterId(elementId) {
1661
1668
  return `dag-duotone-${elementId}`;
1662
1669
  }
1663
1670
  function hasDagDuotoneEffect(element) {
1664
- if (!chunkQMSSDBKN_js.hasShapeProperties(element)) {
1671
+ if (!chunkUTI4CLYJ_js.hasShapeProperties(element)) {
1665
1672
  return false;
1666
1673
  }
1667
1674
  return Boolean(element.shapeStyle?.dagDuotone);
1668
1675
  }
1669
1676
  function renderDagDuotoneSvgFilter(elementId, color1, color2) {
1670
1677
  const filterId = getDagDuotoneFilterId(elementId);
1671
- const c1 = chunkQMSSDBKN_js.hexToRgbUnit(color1);
1672
- const c2 = chunkQMSSDBKN_js.hexToRgbUnit(color2);
1678
+ const c1 = chunkUTI4CLYJ_js.hexToRgbUnit(color1);
1679
+ const c2 = chunkUTI4CLYJ_js.hexToRgbUnit(color2);
1673
1680
  const grayscaleMatrix = [
1674
1681
  0.2126,
1675
1682
  0.7152,
@@ -1713,7 +1720,7 @@ function renderDagDuotoneSvgFilter(elementId, color1, color2) {
1713
1720
 
1714
1721
  // src/viewer/utils/shape-visual-3d.ts
1715
1722
  function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
1716
- return chunkQMSSDBKN_js.build3DExtrusionData(
1723
+ return chunkUTI4CLYJ_js.build3DExtrusionData(
1717
1724
  shape3d,
1718
1725
  scene3d,
1719
1726
  fillColor,
@@ -1722,7 +1729,7 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
1722
1729
  );
1723
1730
  }
1724
1731
  function apply3dEffects2(base, scene3d, shape3d, fillColorFallback, elementSize, elementId) {
1725
- chunkQMSSDBKN_js.apply3dEffects(
1732
+ chunkUTI4CLYJ_js.apply3dEffects(
1726
1733
  base,
1727
1734
  scene3d,
1728
1735
  shape3d,
@@ -1737,11 +1744,11 @@ function rendersCustomVectorPath(element) {
1737
1744
  return (element.type === "shape" || element.type === "image" || element.type === "picture") && Boolean(element.pathData) && typeof element.pathWidth === "number" && element.pathWidth > 0 && typeof element.pathHeight === "number" && element.pathHeight > 0;
1738
1745
  }
1739
1746
  function rendersWedgeCalloutVector(element) {
1740
- return element.type === "shape" && chunkQMSSDBKN_js.isWedgeCalloutPresetShape(element.shapeType);
1747
+ return element.type === "shape" && chunkUTI4CLYJ_js.isWedgeCalloutPresetShape(element.shapeType);
1741
1748
  }
1742
1749
  function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _strokeColor, animatesFill, animatesStroke, parentGroupFill) {
1743
1750
  if (element.type === "group") {
1744
- const fx2 = chunkQMSSDBKN_js.getComputedEffectStyle(element);
1751
+ const fx2 = chunkUTI4CLYJ_js.getComputedEffectStyle(element);
1745
1752
  const groupStyle = {};
1746
1753
  if (fx2.filter) {
1747
1754
  groupStyle.filter = fx2.filter;
@@ -1751,13 +1758,13 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1751
1758
  }
1752
1759
  return groupStyle;
1753
1760
  }
1754
- if (!chunkQMSSDBKN_js.hasShapeProperties(element)) {
1761
+ if (!chunkUTI4CLYJ_js.hasShapeProperties(element)) {
1755
1762
  return {};
1756
1763
  }
1757
1764
  const ss = element.shapeStyle;
1758
- const fill = animatesFill ? void 0 : chunkQMSSDBKN_js.getComputedFillStyle(element, parentGroupFill);
1759
- const fx = chunkQMSSDBKN_js.getComputedEffectStyle(element);
1760
- const stroke = chunkQMSSDBKN_js.getComputedStrokeStyle(element);
1765
+ const fill = animatesFill ? void 0 : chunkUTI4CLYJ_js.getComputedFillStyle(element, parentGroupFill);
1766
+ const fx = chunkUTI4CLYJ_js.getComputedEffectStyle(element);
1767
+ const stroke = chunkUTI4CLYJ_js.getComputedStrokeStyle(element);
1761
1768
  const base = {
1762
1769
  // A gradient fill REPLACES the solid fill, it does not sit on top of it;
1763
1770
  // the whole precedence lives in shared's `getComputedFillStyle`.
@@ -1796,7 +1803,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1796
1803
  };
1797
1804
  Object.assign(
1798
1805
  base,
1799
- chunkQMSSDBKN_js.getAnimationColorBaseStyle(element, {
1806
+ chunkUTI4CLYJ_js.getAnimationColorBaseStyle(element, {
1800
1807
  animatesFill,
1801
1808
  animatesStroke,
1802
1809
  parentGroupFill
@@ -1818,7 +1825,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1818
1825
  },
1819
1826
  element.id
1820
1827
  );
1821
- if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || chunkQMSSDBKN_js.isStrokeOnlyPresetElement(element)) {
1828
+ if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || chunkUTI4CLYJ_js.isStrokeOnlyPresetElement(element)) {
1822
1829
  base.backgroundColor = "transparent";
1823
1830
  base.backgroundImage = void 0;
1824
1831
  base.borderWidth = void 0;
@@ -1832,7 +1839,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1832
1839
  if (rendersWedgeCalloutVector(element)) {
1833
1840
  return base;
1834
1841
  }
1835
- const geometry = chunkQMSSDBKN_js.resolveShapeGeometry(element);
1842
+ const geometry = chunkUTI4CLYJ_js.resolveShapeGeometry(element);
1836
1843
  switch (geometry.kind) {
1837
1844
  case "bare":
1838
1845
  return { backgroundColor: "transparent", borderWidth: 0, borderStyle: "none" };
@@ -1856,7 +1863,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1856
1863
  }
1857
1864
  }
1858
1865
  function getConnectorPathGeometry2(element) {
1859
- return chunkQMSSDBKN_js.getConnectorPathGeometry(element);
1866
+ return chunkUTI4CLYJ_js.getConnectorPathGeometry(element);
1860
1867
  }
1861
1868
  var ARROW_SIZE_SCALE = {
1862
1869
  sm: 0.6,
@@ -1925,11 +1932,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
1925
1932
  strokePaint,
1926
1933
  strokeWidth,
1927
1934
  dashArray,
1928
- lineCap: chunkQMSSDBKN_js.svgLineCap(shapeStyle?.lineCap),
1935
+ lineCap: chunkUTI4CLYJ_js.svgLineCap(shapeStyle?.lineCap),
1929
1936
  lineJoin,
1930
1937
  miterLimit,
1931
- offsets: chunkQMSSDBKN_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
1932
- widths: chunkQMSSDBKN_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
1938
+ offsets: chunkUTI4CLYJ_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
1939
+ widths: chunkUTI4CLYJ_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
1933
1940
  };
1934
1941
  }
1935
1942
  function strokeStrands(d, keyBase, ctx) {
@@ -1952,12 +1959,12 @@ function strokeStrands(d, keyBase, ctx) {
1952
1959
  }
1953
1960
  function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false, gradient) {
1954
1961
  const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
1955
- const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkQMSSDBKN_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
1962
+ const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkUTI4CLYJ_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
1956
1963
  const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
1957
- const gradientPaint = gradient ? chunkQMSSDBKN_js.svgGradientFillRef(gradient) : void 0;
1964
+ const gradientPaint = gradient ? chunkUTI4CLYJ_js.svgGradientFillRef(gradient) : void 0;
1958
1965
  const nodes = [];
1959
1966
  if (subpaths && needsPerSubpath) {
1960
- const paints = chunkQMSSDBKN_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
1967
+ const paints = chunkUTI4CLYJ_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
1961
1968
  paints.forEach((paint, idx) => {
1962
1969
  if (paint.fill !== "none") {
1963
1970
  const mode = subpaths[idx]?.fillMode;
@@ -1986,7 +1993,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
1986
1993
  "path",
1987
1994
  {
1988
1995
  d: pathData,
1989
- fill: animatesFill ? "inherit" : gradientPaint ?? chunkQMSSDBKN_js.colorWithOpacity(fillColor, fillOpacity),
1996
+ fill: animatesFill ? "inherit" : gradientPaint ?? chunkUTI4CLYJ_js.colorWithOpacity(fillColor, fillOpacity),
1990
1997
  stroke: "none",
1991
1998
  vectorEffect: "non-scaling-stroke"
1992
1999
  },
@@ -2012,14 +2019,14 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2012
2019
  );
2013
2020
  }
2014
2021
  function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
2015
- if (!chunkQMSSDBKN_js.hasShapeProperties(element)) {
2022
+ if (!chunkUTI4CLYJ_js.hasShapeProperties(element)) {
2016
2023
  return null;
2017
2024
  }
2018
2025
  const normalizedType = (element.shapeType || "").toLowerCase();
2019
- const fillPaint = animatesFill ? "inherit" : chunkQMSSDBKN_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2020
- const strokePaint = animatesStroke ? "inherit" : chunkQMSSDBKN_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2021
- const dashType = chunkQMSSDBKN_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2022
- const dashArray = chunkQMSSDBKN_js.getSvgStrokeDasharray(
2026
+ const fillPaint = animatesFill ? "inherit" : chunkUTI4CLYJ_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2027
+ const strokePaint = animatesStroke ? "inherit" : chunkUTI4CLYJ_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2028
+ const dashType = chunkUTI4CLYJ_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2029
+ const dashArray = chunkUTI4CLYJ_js.getSvgStrokeDasharray(
2023
2030
  dashType,
2024
2031
  Math.max(strokeWidth, 1),
2025
2032
  element.shapeStyle?.customDashSegments
@@ -2100,13 +2107,13 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2100
2107
  // container's `background-image` is suppressed for custom geometry, so
2101
2108
  // without this the shape fell back to the parser's representative solid
2102
2109
  // and lost every fade (issue #132).
2103
- chunkQMSSDBKN_js.buildSvgGradientDef(element.shapeStyle, element.id)
2110
+ chunkUTI4CLYJ_js.buildSvgGradientDef(element.shapeStyle, element.id)
2104
2111
  );
2105
2112
  }
2106
- if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !chunkQMSSDBKN_js.buildStrokeOutline(element)) {
2113
+ if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !chunkUTI4CLYJ_js.buildStrokeOutline(element)) {
2107
2114
  const width = Math.max(element.width, 1);
2108
2115
  const height = Math.max(element.height, 1);
2109
- const geometry = chunkQMSSDBKN_js.getPresetShapeVectorGeometry(
2116
+ const geometry = chunkUTI4CLYJ_js.getPresetShapeVectorGeometry(
2110
2117
  element.shapeType || "rect",
2111
2118
  width,
2112
2119
  height,
@@ -2134,18 +2141,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2134
2141
  );
2135
2142
  }
2136
2143
  }
2137
- if (element.type === "shape" && chunkQMSSDBKN_js.isWedgeCalloutPresetShape(element.shapeType)) {
2144
+ if (element.type === "shape" && chunkUTI4CLYJ_js.isWedgeCalloutPresetShape(element.shapeType)) {
2138
2145
  const width = Math.max(element.width, 1);
2139
2146
  const height = Math.max(element.height, 1);
2140
- const geometry = chunkQMSSDBKN_js.getPresetShapeVectorGeometry(
2147
+ const geometry = chunkUTI4CLYJ_js.getPresetShapeVectorGeometry(
2141
2148
  element.shapeType,
2142
2149
  width,
2143
2150
  height,
2144
2151
  element.shapeAdjustments
2145
2152
  );
2146
2153
  if (geometry) {
2147
- const gradient = chunkQMSSDBKN_js.buildSvgGradientDef(element.shapeStyle, element.id);
2148
- const gradientPaint = gradient ? chunkQMSSDBKN_js.svgGradientFillRef(gradient) : void 0;
2154
+ const gradient = chunkUTI4CLYJ_js.buildSvgGradientDef(element.shapeStyle, element.id);
2155
+ const gradientPaint = gradient ? chunkUTI4CLYJ_js.svgGradientFillRef(gradient) : void 0;
2149
2156
  return /* @__PURE__ */ jsxRuntime.jsxs(
2150
2157
  "svg",
2151
2158
  {
@@ -2178,18 +2185,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2178
2185
  );
2179
2186
  }
2180
2187
  }
2181
- if (chunkQMSSDBKN_js.isCalloutShape(normalizedType)) {
2188
+ if (chunkUTI4CLYJ_js.isCalloutShape(normalizedType)) {
2182
2189
  const width = Math.max(element.width, 1);
2183
2190
  const height = Math.max(element.height, 1);
2184
- const geometry = chunkQMSSDBKN_js.getCalloutLeaderLineGeometry(
2191
+ const geometry = chunkUTI4CLYJ_js.getCalloutLeaderLineGeometry(
2185
2192
  normalizedType,
2186
2193
  width,
2187
2194
  height,
2188
2195
  element.shapeAdjustments
2189
2196
  );
2190
2197
  if (geometry && geometry.points.length >= 2) {
2191
- const leaderPath = chunkQMSSDBKN_js.buildCalloutLeaderLineSvgPath(geometry);
2192
- const bounds = chunkQMSSDBKN_js.getCalloutViewBoxBounds(width, height, geometry);
2198
+ const leaderPath = chunkUTI4CLYJ_js.buildCalloutLeaderLineSvgPath(geometry);
2199
+ const bounds = chunkUTI4CLYJ_js.getCalloutViewBoxBounds(width, height, geometry);
2193
2200
  const lineStroke = Math.max(strokeWidth, 1);
2194
2201
  const offsetLeft = bounds.minX;
2195
2202
  const offsetTop = bounds.minY;
@@ -2252,10 +2259,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2252
2259
  const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
2253
2260
  const endArrowL = element.shapeStyle?.connectorEndArrowLength;
2254
2261
  const compoundLine = element.shapeStyle?.compoundLine;
2255
- const connectorLineCap = chunkQMSSDBKN_js.svgLineCap(element.shapeStyle?.lineCap);
2262
+ const connectorLineCap = chunkUTI4CLYJ_js.svgLineCap(element.shapeStyle?.lineCap);
2256
2263
  const hitTargetWidth = Math.max(strokeWidth * 3, 12);
2257
- const offsets = chunkQMSSDBKN_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2258
- const widths = chunkQMSSDBKN_js.getCompoundLineWidths(compoundLine, strokeWidth);
2264
+ const offsets = chunkUTI4CLYJ_js.getCompoundLineOffsets(compoundLine, strokeWidth);
2265
+ const widths = chunkUTI4CLYJ_js.getCompoundLineWidths(compoundLine, strokeWidth);
2259
2266
  return /* @__PURE__ */ jsxRuntime.jsxs(
2260
2267
  "svg",
2261
2268
  {
@@ -2322,15 +2329,15 @@ function parseGradientFillCss(gradFill) {
2322
2329
  }
2323
2330
  const rawStops = stops.map((gs) => {
2324
2331
  const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
2325
- const color = chunkQMSSDBKN_js.parseDrawingColor(gs) ?? "#888888";
2326
- const opacity = chunkQMSSDBKN_js.parseDrawingColorOpacity(gs);
2332
+ const color = chunkUTI4CLYJ_js.parseDrawingColor(gs) ?? "#888888";
2333
+ const opacity = chunkUTI4CLYJ_js.parseDrawingColorOpacity(gs);
2327
2334
  return { position: pos, color, opacity };
2328
2335
  }).sort((a, b) => a.position - b.position);
2329
- const stopStrings = rawStops.map((s) => `${chunkQMSSDBKN_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
2336
+ const stopStrings = rawStops.map((s) => `${chunkUTI4CLYJ_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
2330
2337
  const lin = gradFill["a:lin"];
2331
2338
  if (lin) {
2332
2339
  const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
2333
- const angleDeg = Math.round(chunkQMSSDBKN_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2340
+ const angleDeg = Math.round(chunkUTI4CLYJ_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
2334
2341
  return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
2335
2342
  }
2336
2343
  const path = gradFill["a:path"];
@@ -2344,7 +2351,7 @@ function parseGradientFillCss(gradFill) {
2344
2351
  b: Number.parseInt(String(fillToRectXml["@_b"] || "0"), 10) / 1e5
2345
2352
  } : void 0;
2346
2353
  if (pathType === "rect") {
2347
- return chunkQMSSDBKN_js.buildRectPathGradient(rawStops, void 0, fillToRect);
2354
+ return chunkUTI4CLYJ_js.buildRectPathGradient(rawStops, void 0, fillToRect);
2348
2355
  }
2349
2356
  let cx = 50;
2350
2357
  let cy = 50;
@@ -2366,8 +2373,8 @@ function parsePatternFillCss(pattFill) {
2366
2373
  if (!pattFill) {
2367
2374
  return void 0;
2368
2375
  }
2369
- const fgColor = chunkQMSSDBKN_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2370
- const bgColor = chunkQMSSDBKN_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2376
+ const fgColor = chunkUTI4CLYJ_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
2377
+ const bgColor = chunkUTI4CLYJ_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
2371
2378
  const preset = String(pattFill["@_prst"] || "ltDnDiag");
2372
2379
  switch (preset) {
2373
2380
  case "ltHorz":
@@ -2478,11 +2485,11 @@ function parseCellBorders(cellProperties) {
2478
2485
  const prstDash = ln["a:prstDash"];
2479
2486
  const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
2480
2487
  const cssBorderStyle = ooxmlDashToCss(dashVal);
2481
- const color = chunkQMSSDBKN_js.parseDrawingColor(ln["a:solidFill"]);
2488
+ const color = chunkUTI4CLYJ_js.parseDrawingColor(ln["a:solidFill"]);
2482
2489
  if (color) {
2483
- const opacity = chunkQMSSDBKN_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2490
+ const opacity = chunkUTI4CLYJ_js.parseDrawingColorOpacity(ln["a:solidFill"]);
2484
2491
  const key = `${edge.prefix}`;
2485
- borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkQMSSDBKN_js.colorWithOpacity(color, opacity)}`;
2492
+ borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkUTI4CLYJ_js.colorWithOpacity(color, opacity)}`;
2486
2493
  }
2487
2494
  }
2488
2495
  return borderStyle;
@@ -2495,7 +2502,7 @@ function parseCellTextEffects(runProps) {
2495
2502
  const textShadowParts = [];
2496
2503
  const outerShdw = effectLst["a:outerShdw"];
2497
2504
  if (outerShdw) {
2498
- const shdwColor = chunkQMSSDBKN_js.parseDrawingColor(outerShdw);
2505
+ const shdwColor = chunkUTI4CLYJ_js.parseDrawingColor(outerShdw);
2499
2506
  if (shdwColor) {
2500
2507
  const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
2501
2508
  const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
@@ -2513,7 +2520,7 @@ function parseCellTextEffects(runProps) {
2513
2520
  }
2514
2521
  const glow = effectLst["a:glow"];
2515
2522
  if (glow) {
2516
- const glowColor = chunkQMSSDBKN_js.parseDrawingColor(glow);
2523
+ const glowColor = chunkUTI4CLYJ_js.parseDrawingColor(glow);
2517
2524
  if (glowColor) {
2518
2525
  const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
2519
2526
  const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
@@ -2535,11 +2542,11 @@ function extractCellText(cellXml) {
2535
2542
  const textParts = [];
2536
2543
  const runs = ensureArrayValue(paragraph["a:r"]);
2537
2544
  runs.forEach((run) => {
2538
- textParts.push(chunkQMSSDBKN_js.xmlText(run["a:t"]) ?? "");
2545
+ textParts.push(chunkUTI4CLYJ_js.xmlText(run["a:t"]) ?? "");
2539
2546
  });
2540
2547
  const fields = ensureArrayValue(paragraph["a:fld"]);
2541
2548
  fields.forEach((field) => {
2542
- textParts.push(chunkQMSSDBKN_js.xmlText(field["a:t"]) ?? "");
2549
+ textParts.push(chunkUTI4CLYJ_js.xmlText(field["a:t"]) ?? "");
2543
2550
  });
2544
2551
  paragraphTexts.push(textParts.join(""));
2545
2552
  });
@@ -2583,10 +2590,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2583
2590
  if (runProps?.["@_u"] !== void 0) {
2584
2591
  cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
2585
2592
  }
2586
- const runColor = chunkQMSSDBKN_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkQMSSDBKN_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2593
+ const runColor = chunkUTI4CLYJ_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkUTI4CLYJ_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
2587
2594
  if (runColor) {
2588
- const opacity = chunkQMSSDBKN_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2589
- cellStyle.color = chunkQMSSDBKN_js.colorWithOpacity(runColor, opacity);
2595
+ const opacity = chunkUTI4CLYJ_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
2596
+ cellStyle.color = chunkUTI4CLYJ_js.colorWithOpacity(runColor, opacity);
2590
2597
  }
2591
2598
  const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
2592
2599
  if (fontFamily) {
@@ -2596,15 +2603,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2596
2603
  cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
2597
2604
  }
2598
2605
  const cellProperties = cellXml["a:tcPr"];
2599
- const cellFill = chunkQMSSDBKN_js.parseDrawingColor(
2606
+ const cellFill = chunkUTI4CLYJ_js.parseDrawingColor(
2600
2607
  cellProperties?.["a:solidFill"],
2601
2608
  schemeColorOverrides
2602
2609
  );
2603
2610
  if (cellFill) {
2604
- const opacity = chunkQMSSDBKN_js.parseDrawingColorOpacity(
2611
+ const opacity = chunkUTI4CLYJ_js.parseDrawingColorOpacity(
2605
2612
  cellProperties?.["a:solidFill"]
2606
2613
  );
2607
- cellStyle.backgroundColor = chunkQMSSDBKN_js.colorWithOpacity(cellFill, opacity);
2614
+ cellStyle.backgroundColor = chunkUTI4CLYJ_js.colorWithOpacity(cellFill, opacity);
2608
2615
  } else {
2609
2616
  const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
2610
2617
  if (gradCss) {
@@ -2619,16 +2626,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
2619
2626
  const edgeBorders = parseCellBorders(cellProperties);
2620
2627
  Object.assign(cellStyle, edgeBorders);
2621
2628
  if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
2622
- const borderColor = chunkQMSSDBKN_js.parseDrawingColor(
2629
+ const borderColor = chunkUTI4CLYJ_js.parseDrawingColor(
2623
2630
  cellProperties?.["a:lnL"]?.["a:solidFill"],
2624
2631
  schemeColorOverrides
2625
- ) || chunkQMSSDBKN_js.parseDrawingColor(
2632
+ ) || chunkUTI4CLYJ_js.parseDrawingColor(
2626
2633
  cellProperties?.["a:lnR"]?.["a:solidFill"],
2627
2634
  schemeColorOverrides
2628
- ) || chunkQMSSDBKN_js.parseDrawingColor(
2635
+ ) || chunkUTI4CLYJ_js.parseDrawingColor(
2629
2636
  cellProperties?.["a:lnT"]?.["a:solidFill"],
2630
2637
  schemeColorOverrides
2631
- ) || chunkQMSSDBKN_js.parseDrawingColor(
2638
+ ) || chunkUTI4CLYJ_js.parseDrawingColor(
2632
2639
  cellProperties?.["a:lnB"]?.["a:solidFill"],
2633
2640
  schemeColorOverrides
2634
2641
  );
@@ -2700,7 +2707,7 @@ function getTableCellBandStyle2(element, rowIndex, cellIndex, rowCount, columnCo
2700
2707
  if (element.type !== "table") {
2701
2708
  return void 0;
2702
2709
  }
2703
- return chunkQMSSDBKN_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2710
+ return chunkUTI4CLYJ_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
2704
2711
  tableStyleMap: styleCtx?.tableStyleMap,
2705
2712
  colorScheme: styleCtx?.theme?.colorScheme,
2706
2713
  fontScheme: styleCtx?.theme?.fontScheme
@@ -2780,7 +2787,7 @@ function renderTableCellContent(cell, fallbackText) {
2780
2787
  return /* @__PURE__ */ jsxRuntime.jsx(
2781
2788
  "span",
2782
2789
  {
2783
- style: { position: "relative", ...chunkQMSSDBKN_js.cellRunStyle(run) },
2790
+ style: { position: "relative", ...chunkUTI4CLYJ_js.cellRunStyle(run) },
2784
2791
  children: run.text
2785
2792
  },
2786
2793
  `r-${index}`
@@ -2788,7 +2795,7 @@ function renderTableCellContent(cell, fallbackText) {
2788
2795
  });
2789
2796
  }
2790
2797
  function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
2791
- return chunkQMSSDBKN_js.getCellDiagonalBorders(style, tableData, pos, {
2798
+ return chunkUTI4CLYJ_js.getCellDiagonalBorders(style, tableData, pos, {
2792
2799
  tableStyleMap: styleCtx?.tableStyleMap,
2793
2800
  colorScheme: styleCtx?.theme?.colorScheme,
2794
2801
  fontScheme: styleCtx?.theme?.fontScheme
@@ -2921,7 +2928,7 @@ function TableResizeOverlay({
2921
2928
  const containerRef = React7.useRef(null);
2922
2929
  const [rowBounds, setRowBounds] = React7.useState([]);
2923
2930
  const dragRef = React7.useRef(null);
2924
- const colBoundaries = React7.useMemo(() => chunkQMSSDBKN_js.computeColumnBoundaries(columnWidths), [columnWidths]);
2931
+ const colBoundaries = React7.useMemo(() => chunkUTI4CLYJ_js.computeColumnBoundaries(columnWidths), [columnWidths]);
2925
2932
  const measureRows = React7.useCallback(() => {
2926
2933
  const container = containerRef.current;
2927
2934
  if (!container) {
@@ -2968,11 +2975,11 @@ function TableResizeOverlay({
2968
2975
  const rect = containerRef.current.getBoundingClientRect();
2969
2976
  if (e.clientX !== drag.startPos && drag.type === "col" && drag.initialWidths && onResizeColumns) {
2970
2977
  const deltaProp = (e.clientX - drag.startPos) / rect.width;
2971
- onResizeColumns(chunkQMSSDBKN_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
2978
+ onResizeColumns(chunkUTI4CLYJ_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
2972
2979
  } else if (e.clientY !== drag.startPos && drag.type === "row" && onResizeRow) {
2973
2980
  const deltaY = e.clientY - drag.startPos;
2974
- const newHeight = chunkQMSSDBKN_js.computeResizedRowHeight(
2975
- drag.initialRowHeight ?? chunkQMSSDBKN_js.DEFAULT_ROW_HEIGHT,
2981
+ const newHeight = chunkUTI4CLYJ_js.computeResizedRowHeight(
2982
+ drag.initialRowHeight ?? chunkUTI4CLYJ_js.DEFAULT_ROW_HEIGHT,
2976
2983
  deltaY
2977
2984
  );
2978
2985
  onResizeRow(drag.index, newHeight);
@@ -3010,7 +3017,7 @@ function TableResizeOverlay({
3010
3017
  e.stopPropagation();
3011
3018
  const table = containerRef.current?.querySelector("table");
3012
3019
  const tr = table?.querySelectorAll("tbody > tr")[index];
3013
- const actualHeight = tr?.offsetHeight ?? chunkQMSSDBKN_js.DEFAULT_ROW_HEIGHT;
3020
+ const actualHeight = tr?.offsetHeight ?? chunkUTI4CLYJ_js.DEFAULT_ROW_HEIGHT;
3014
3021
  document.body.style.cursor = "row-resize";
3015
3022
  document.body.style.userSelect = "none";
3016
3023
  dragRef.current = {
@@ -3050,14 +3057,14 @@ function renderTableFromTableData(element, textStyle, options) {
3050
3057
  const rowCount = tableData.rows.length;
3051
3058
  const columnCount = tableData.columnWidths.length;
3052
3059
  const selectedCell = options?.selectedCell || null;
3053
- const isEditable = Boolean(options?.editable) && chunkQMSSDBKN_js.canDrillDown(element);
3060
+ const isEditable = Boolean(options?.editable) && chunkUTI4CLYJ_js.canDrillDown(element);
3054
3061
  const hasCellSelectionHandler = typeof options?.onSelectCell === "function";
3055
3062
  const sharedCtx = {
3056
3063
  tableStyleMap: options?.styleCtx?.tableStyleMap,
3057
3064
  colorScheme: options?.styleCtx?.theme?.colorScheme,
3058
3065
  fontScheme: options?.styleCtx?.theme?.fontScheme
3059
3066
  };
3060
- const cellCss = (cell, rowIndex, cellIndex) => chunkQMSSDBKN_js.tableCellCss(
3067
+ const cellCss = (cell, rowIndex, cellIndex) => chunkUTI4CLYJ_js.tableCellCss(
3061
3068
  tableData,
3062
3069
  cell,
3063
3070
  { rowIndex, cellIndex, rowCount, columnCount },
@@ -3070,7 +3077,7 @@ function renderTableFromTableData(element, textStyle, options) {
3070
3077
  }
3071
3078
  const first = selectedCell.selectedCells[0];
3072
3079
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3073
- return chunkQMSSDBKN_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3080
+ return chunkUTI4CLYJ_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
3074
3081
  })();
3075
3082
  return /* @__PURE__ */ jsxRuntime.jsx(
3076
3083
  TableResizeOverlay,
@@ -3091,9 +3098,9 @@ function renderTableFromTableData(element, textStyle, options) {
3091
3098
  {
3092
3099
  className: "w-full h-full border-collapse table-fixed",
3093
3100
  style: {
3094
- fontFamily: chunkQMSSDBKN_js.DEFAULT_FONT_FAMILY,
3101
+ fontFamily: chunkUTI4CLYJ_js.DEFAULT_FONT_FAMILY,
3095
3102
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3096
- ...chunkQMSSDBKN_js.tableContainerCss(tableData)
3103
+ ...chunkUTI4CLYJ_js.tableContainerCss(tableData)
3097
3104
  },
3098
3105
  children: [
3099
3106
  tableData.columnWidths.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: tableData.columnWidths.map((w, ci) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3112,7 +3119,7 @@ function renderTableFromTableData(element, textStyle, options) {
3112
3119
  return null;
3113
3120
  }
3114
3121
  const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
3115
- const isInMultiSelection = chunkQMSSDBKN_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3122
+ const isInMultiSelection = chunkUTI4CLYJ_js.isCellInRect(rowIndex, cellIndex, selectionRect);
3116
3123
  const isCellEditing = isCellSelected && selectedCell?.isEditing;
3117
3124
  const diag = getCellDiagonalBorders2(
3118
3125
  cell.style,
@@ -3141,7 +3148,7 @@ function renderTableFromTableData(element, textStyle, options) {
3141
3148
  }
3142
3149
  event.stopPropagation();
3143
3150
  if (event.shiftKey && selectedCell) {
3144
- const rect = chunkQMSSDBKN_js.computeSelectionRect(
3151
+ const rect = chunkUTI4CLYJ_js.computeSelectionRect(
3145
3152
  selectedCell.rowIndex,
3146
3153
  selectedCell.columnIndex,
3147
3154
  rowIndex,
@@ -3151,7 +3158,7 @@ function renderTableFromTableData(element, textStyle, options) {
3151
3158
  options?.onSelectCell?.({
3152
3159
  rowIndex: selectedCell.rowIndex,
3153
3160
  columnIndex: selectedCell.columnIndex,
3154
- selectedCells: chunkQMSSDBKN_js.rectToCells(rect)
3161
+ selectedCells: chunkUTI4CLYJ_js.rectToCells(rect)
3155
3162
  });
3156
3163
  } else {
3157
3164
  options?.onSelectCell?.({
@@ -3212,10 +3219,10 @@ function renderTableElement(element, textStyle, options) {
3212
3219
  if (tableEl2.tableData && tableEl2.tableData.rows.length > 0) {
3213
3220
  return renderTableFromTableData(tableEl2, textStyle, options);
3214
3221
  }
3215
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkNXGUR2DO_js.translationsEn["pptx.table.title"] });
3222
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkW5KLLGVH_js.translationsEn["pptx.table.title"] });
3216
3223
  }
3217
3224
  const selectedCell = options?.selectedCell || null;
3218
- const isEditable = Boolean(options?.editable) && chunkQMSSDBKN_js.canDrillDown(element);
3225
+ const isEditable = Boolean(options?.editable) && chunkUTI4CLYJ_js.canDrillDown(element);
3219
3226
  const hasCellSelectionHandler = typeof options?.onSelectCell === "function";
3220
3227
  const tableEl = element;
3221
3228
  const xmlSelectionRect = (() => {
@@ -3227,7 +3234,7 @@ function renderTableElement(element, textStyle, options) {
3227
3234
  }
3228
3235
  const first = selectedCell.selectedCells[0];
3229
3236
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
3230
- return chunkQMSSDBKN_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3237
+ return chunkUTI4CLYJ_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
3231
3238
  })();
3232
3239
  const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
3233
3240
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -3249,9 +3256,9 @@ function renderTableElement(element, textStyle, options) {
3249
3256
  {
3250
3257
  className: "w-full h-full border-collapse table-fixed",
3251
3258
  style: {
3252
- fontFamily: chunkQMSSDBKN_js.DEFAULT_FONT_FAMILY,
3259
+ fontFamily: chunkUTI4CLYJ_js.DEFAULT_FONT_FAMILY,
3253
3260
  // `a:tblPr@rtl` mirrors the column order for RTL decks.
3254
- ...chunkQMSSDBKN_js.tableContainerCss(tableEl.tableData)
3261
+ ...chunkUTI4CLYJ_js.tableContainerCss(tableEl.tableData)
3255
3262
  },
3256
3263
  children: [
3257
3264
  parsedTable.columnPercentages.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((percentage, columnIndex) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -3308,7 +3315,7 @@ function renderTableElement(element, textStyle, options) {
3308
3315
  color: textStyle.color,
3309
3316
  ...bandStyle,
3310
3317
  ...xmlCellStyle,
3311
- ...tdCellOverride ? chunkQMSSDBKN_js.cellStyleToCss(tdCellOverride) : void 0,
3318
+ ...tdCellOverride ? chunkUTI4CLYJ_js.cellStyleToCss(tdCellOverride) : void 0,
3312
3319
  ...diag ? { position: "relative" } : void 0
3313
3320
  };
3314
3321
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3318,7 +3325,7 @@ function renderTableElement(element, textStyle, options) {
3318
3325
  "border px-1 py-0.5 align-top",
3319
3326
  isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
3320
3327
  selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
3321
- chunkQMSSDBKN_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3328
+ chunkUTI4CLYJ_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
3322
3329
  ),
3323
3330
  colSpan,
3324
3331
  rowSpan: rSpan,
@@ -3329,7 +3336,7 @@ function renderTableElement(element, textStyle, options) {
3329
3336
  }
3330
3337
  event.stopPropagation();
3331
3338
  if (event.shiftKey && selectedCell && tableEl.tableData) {
3332
- const rect = chunkQMSSDBKN_js.computeSelectionRect(
3339
+ const rect = chunkUTI4CLYJ_js.computeSelectionRect(
3333
3340
  selectedCell.rowIndex,
3334
3341
  selectedCell.columnIndex,
3335
3342
  rowIndex,
@@ -3339,7 +3346,7 @@ function renderTableElement(element, textStyle, options) {
3339
3346
  options?.onSelectCell?.({
3340
3347
  rowIndex: selectedCell.rowIndex,
3341
3348
  columnIndex: selectedCell.columnIndex,
3342
- selectedCells: chunkQMSSDBKN_js.rectToCells(rect)
3349
+ selectedCells: chunkUTI4CLYJ_js.rectToCells(rect)
3343
3350
  });
3344
3351
  } else {
3345
3352
  options?.onSelectCell?.({
@@ -3398,23 +3405,23 @@ function renderTableElement(element, textStyle, options) {
3398
3405
  );
3399
3406
  }
3400
3407
  function partAttrs(part) {
3401
- return part ? chunkQMSSDBKN_js.chartPartToAttrs(part) : void 0;
3408
+ return part ? chunkUTI4CLYJ_js.chartPartToAttrs(part) : void 0;
3402
3409
  }
3403
3410
  function resolveReactPalette(chartData) {
3404
3411
  if (chartData.colorPalette && chartData.colorPalette.length > 0) {
3405
3412
  return chartData.colorPalette;
3406
3413
  }
3407
- return [...chunkQMSSDBKN_js.getChartStylePalette(chartData.style?.styleId)];
3414
+ return [...chunkUTI4CLYJ_js.getChartStylePalette(chartData.style?.styleId)];
3408
3415
  }
3409
3416
  function buildReactChartViewModel(element) {
3410
3417
  if (element.type !== "chart" || !element.chartData) {
3411
- return chunkQMSSDBKN_js.buildChartViewModel(element);
3418
+ return chunkUTI4CLYJ_js.buildChartViewModel(element);
3412
3419
  }
3413
3420
  const palette = resolveReactPalette(element.chartData), themedElement = {
3414
3421
  ...element,
3415
3422
  chartData: { ...element.chartData, colorPalette: palette }
3416
3423
  };
3417
- return chunkQMSSDBKN_js.buildChartViewModel(themedElement);
3424
+ return chunkUTI4CLYJ_js.buildChartViewModel(themedElement);
3418
3425
  }
3419
3426
  function renderPrimitive(prim, key) {
3420
3427
  switch (prim.kind) {
@@ -3445,6 +3452,7 @@ function renderPrimitive(prim, key) {
3445
3452
  fill: p.fill,
3446
3453
  stroke: p.stroke ?? "none",
3447
3454
  strokeWidth: p.strokeWidth ?? 0,
3455
+ strokeDasharray: p.dashArray,
3448
3456
  fillOpacity: p.opacity ?? 1,
3449
3457
  ...partAttrs(p.part),
3450
3458
  children: p.title !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: p.title }) : null
@@ -3565,7 +3573,7 @@ function renderText(t, key) {
3565
3573
  );
3566
3574
  }
3567
3575
  function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3568
- const legendItems = chunkQMSSDBKN_js.computeChartLegendLayout(vm);
3576
+ const legendItems = chunkUTI4CLYJ_js.computeChartLegendLayout(vm);
3569
3577
  return /* @__PURE__ */ jsxRuntime.jsxs(
3570
3578
  "svg",
3571
3579
  {
@@ -3705,17 +3713,17 @@ function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
3705
3713
  }
3706
3714
  function renderChartElement(element) {
3707
3715
  if (element.type !== "chart") {
3708
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkNXGUR2DO_js.translationsEn["pptx.chart.heading"] });
3716
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkW5KLLGVH_js.translationsEn["pptx.chart.heading"] });
3709
3717
  }
3710
3718
  const chartData = element.chartData;
3711
3719
  if (!chartData || chartData.series.length === 0) {
3712
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkNXGUR2DO_js.translationsEn["pptx.chart.heading"] });
3720
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkW5KLLGVH_js.translationsEn["pptx.chart.heading"] });
3713
3721
  }
3714
- const kind = chunkQMSSDBKN_js.resolveChartKind(chartData.chartType ?? "bar");
3722
+ const kind = chunkUTI4CLYJ_js.resolveChartKind(chartData.chartType ?? "bar");
3715
3723
  return renderChartViewModel(
3716
3724
  element.id,
3717
3725
  buildReactChartViewModel(element),
3718
- chunkQMSSDBKN_js.chartPreserveAspectRatio(kind)
3726
+ chunkUTI4CLYJ_js.chartPreserveAspectRatio(kind)
3719
3727
  );
3720
3728
  }
3721
3729
 
@@ -3735,14 +3743,14 @@ function buildNotesPdf(pages) {
3735
3743
  notes: page.notes,
3736
3744
  slideNumber: page.slideNumber
3737
3745
  }));
3738
- const bytes = chunkQMSSDBKN_js.buildNotesPdfBytes(images, meta);
3746
+ const bytes = chunkUTI4CLYJ_js.buildNotesPdfBytes(images, meta);
3739
3747
  const blob = new Blob([bytes], { type: "application/pdf" });
3740
3748
  return URL.createObjectURL(blob);
3741
3749
  }
3742
3750
 
3743
3751
  // src/viewer/utils/pdf-builder-slides.ts
3744
3752
  function buildPdfFromTiledImageData(pages) {
3745
- const bytes = chunkQMSSDBKN_js.buildTiledSlidesPdfBytes(pages);
3753
+ const bytes = chunkUTI4CLYJ_js.buildTiledSlidesPdfBytes(pages);
3746
3754
  const blob = new Blob([bytes], { type: "application/pdf" });
3747
3755
  return URL.createObjectURL(blob);
3748
3756
  }
@@ -3751,7 +3759,7 @@ function buildPdfFromTiledImageData(pages) {
3751
3759
  var activePreview = null;
3752
3760
  function startPreviewAnimation(elementId, preset, options) {
3753
3761
  stopPreviewAnimation();
3754
- const descriptor = chunkQMSSDBKN_js.buildPreviewAnimation(preset, options);
3762
+ const descriptor = chunkUTI4CLYJ_js.buildPreviewAnimation(preset, options);
3755
3763
  if (!descriptor) {
3756
3764
  return;
3757
3765
  }
@@ -3764,7 +3772,7 @@ function startMotionPathPreview(elementId, path, options) {
3764
3772
  return;
3765
3773
  }
3766
3774
  const stage = domEl.offsetParent;
3767
- const descriptor = chunkQMSSDBKN_js.buildMotionPathPreview({
3775
+ const descriptor = chunkUTI4CLYJ_js.buildMotionPathPreview({
3768
3776
  path,
3769
3777
  slideWidth: stage?.offsetWidth || DEFAULT_PREVIEW_SLIDE_WIDTH,
3770
3778
  slideHeight: stage?.offsetHeight || DEFAULT_PREVIEW_SLIDE_HEIGHT,