pptx-react-viewer 2.6.5 → 2.6.7

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 (96) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{AiChatPanel-5JEL2M7L.mjs → AiChatPanel-E5PVW4MN.mjs} +3 -3
  3. package/dist/AiChatPanel-E5PVW4MN.mjs.br +0 -0
  4. package/dist/AiChatPanel-E5PVW4MN.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-GMP3TU7S.js → AiChatPanel-I22AHEBC.js} +22 -22
  6. package/dist/AiChatPanel-I22AHEBC.js.br +0 -0
  7. package/dist/AiChatPanel-I22AHEBC.js.gz +0 -0
  8. package/dist/{Model3DScene-LPA4HGFY.mjs → Model3DScene-UYOY6QJN.mjs} +1 -1
  9. package/dist/Model3DScene-UYOY6QJN.mjs.br +0 -0
  10. package/dist/Model3DScene-UYOY6QJN.mjs.gz +0 -0
  11. package/dist/{Model3DScene-E4WWASL7.js → Model3DScene-VC3HMMBO.js} +2 -2
  12. package/dist/Model3DScene-VC3HMMBO.js.br +0 -0
  13. package/dist/Model3DScene-VC3HMMBO.js.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-JT64KYVP.mjs → SurfaceChart3DScene-PDULQ4DY.mjs} +1 -1
  15. package/dist/{SurfaceChart3DScene-JT64KYVP.mjs.br → SurfaceChart3DScene-PDULQ4DY.mjs.br} +0 -0
  16. package/dist/SurfaceChart3DScene-PDULQ4DY.mjs.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-EOJ6FO7H.js → SurfaceChart3DScene-YMRRZC5V.js} +2 -2
  18. package/dist/SurfaceChart3DScene-YMRRZC5V.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-YMRRZC5V.js.gz +0 -0
  20. package/dist/{chunk-HHUBO5OD.mjs → chunk-5QS6ANI7.mjs} +1 -1
  21. package/dist/chunk-5QS6ANI7.mjs.br +0 -0
  22. package/dist/chunk-5QS6ANI7.mjs.gz +0 -0
  23. package/dist/{chunk-FBVQ453Z.js → chunk-5XXNNTE2.js} +843 -843
  24. package/dist/chunk-5XXNNTE2.js.br +0 -0
  25. package/dist/chunk-5XXNNTE2.js.gz +0 -0
  26. package/dist/{chunk-NZYSI3BL.js → chunk-AB4WM3RK.js} +253 -243
  27. package/dist/chunk-AB4WM3RK.js.br +0 -0
  28. package/dist/chunk-AB4WM3RK.js.gz +0 -0
  29. package/dist/{chunk-MVXW7BHH.mjs → chunk-B7DXNZPM.mjs} +2 -2
  30. package/dist/chunk-B7DXNZPM.mjs.br +0 -0
  31. package/dist/chunk-B7DXNZPM.mjs.gz +0 -0
  32. package/dist/{chunk-CZPAFVPN.js → chunk-C4JFU2XG.js} +315 -315
  33. package/dist/chunk-C4JFU2XG.js.br +0 -0
  34. package/dist/chunk-C4JFU2XG.js.gz +0 -0
  35. package/dist/{chunk-2QSHMCJH.mjs → chunk-CKERNV36.mjs} +7 -7
  36. package/dist/chunk-CKERNV36.mjs.br +0 -0
  37. package/dist/chunk-CKERNV36.mjs.gz +0 -0
  38. package/dist/{chunk-GMW7VRFD.mjs → chunk-LR546YFN.mjs} +75 -5
  39. package/dist/chunk-LR546YFN.mjs.br +0 -0
  40. package/dist/{chunk-GMW7VRFD.mjs.gz → chunk-LR546YFN.mjs.gz} +0 -0
  41. package/dist/{chunk-Z2ZC5QTJ.js → chunk-QOWFOMZP.js} +75 -5
  42. package/dist/chunk-QOWFOMZP.js.br +0 -0
  43. package/dist/{chunk-Z2ZC5QTJ.js.gz → chunk-QOWFOMZP.js.gz} +0 -0
  44. package/dist/{chunk-D754TQ4S.js → chunk-TJFZ7ZP6.js} +3 -3
  45. package/dist/chunk-TJFZ7ZP6.js.br +0 -0
  46. package/dist/{chunk-D754TQ4S.js.gz → chunk-TJFZ7ZP6.js.gz} +0 -0
  47. package/dist/{chunk-A3WQ6JDW.mjs → chunk-Y6WE6JJO.mjs} +20 -10
  48. package/dist/chunk-Y6WE6JJO.mjs.br +0 -0
  49. package/dist/chunk-Y6WE6JJO.mjs.gz +0 -0
  50. package/dist/index.js +34 -34
  51. package/dist/index.js.br +0 -0
  52. package/dist/index.js.gz +0 -0
  53. package/dist/index.mjs +5 -5
  54. package/dist/index.mjs.br +0 -0
  55. package/dist/index.mjs.gz +0 -0
  56. package/dist/internals.js +78 -78
  57. package/dist/internals.js.br +0 -0
  58. package/dist/internals.js.gz +0 -0
  59. package/dist/internals.mjs +3 -3
  60. package/dist/internals.mjs.br +0 -0
  61. package/dist/internals.mjs.gz +0 -0
  62. package/dist/viewer/index.js +21 -21
  63. package/dist/viewer/index.js.br +0 -0
  64. package/dist/viewer/index.js.gz +0 -0
  65. package/dist/viewer/index.mjs +5 -5
  66. package/dist/viewer/index.mjs.br +0 -0
  67. package/dist/viewer/index.mjs.gz +0 -0
  68. package/package.json +1 -1
  69. package/dist/AiChatPanel-5JEL2M7L.mjs.br +0 -0
  70. package/dist/AiChatPanel-5JEL2M7L.mjs.gz +0 -0
  71. package/dist/AiChatPanel-GMP3TU7S.js.br +0 -0
  72. package/dist/AiChatPanel-GMP3TU7S.js.gz +0 -0
  73. package/dist/Model3DScene-E4WWASL7.js.br +0 -0
  74. package/dist/Model3DScene-E4WWASL7.js.gz +0 -0
  75. package/dist/Model3DScene-LPA4HGFY.mjs.br +0 -0
  76. package/dist/Model3DScene-LPA4HGFY.mjs.gz +0 -0
  77. package/dist/SurfaceChart3DScene-EOJ6FO7H.js.br +0 -0
  78. package/dist/SurfaceChart3DScene-EOJ6FO7H.js.gz +0 -0
  79. package/dist/SurfaceChart3DScene-JT64KYVP.mjs.gz +0 -0
  80. package/dist/chunk-2QSHMCJH.mjs.br +0 -0
  81. package/dist/chunk-2QSHMCJH.mjs.gz +0 -0
  82. package/dist/chunk-A3WQ6JDW.mjs.br +0 -0
  83. package/dist/chunk-A3WQ6JDW.mjs.gz +0 -0
  84. package/dist/chunk-CZPAFVPN.js.br +0 -0
  85. package/dist/chunk-CZPAFVPN.js.gz +0 -0
  86. package/dist/chunk-D754TQ4S.js.br +0 -0
  87. package/dist/chunk-FBVQ453Z.js.br +0 -0
  88. package/dist/chunk-FBVQ453Z.js.gz +0 -0
  89. package/dist/chunk-GMW7VRFD.mjs.br +0 -0
  90. package/dist/chunk-HHUBO5OD.mjs.br +0 -0
  91. package/dist/chunk-HHUBO5OD.mjs.gz +0 -0
  92. package/dist/chunk-MVXW7BHH.mjs.br +0 -0
  93. package/dist/chunk-MVXW7BHH.mjs.gz +0 -0
  94. package/dist/chunk-NZYSI3BL.js.br +0 -0
  95. package/dist/chunk-NZYSI3BL.js.gz +0 -0
  96. package/dist/chunk-Z2ZC5QTJ.js.br +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk25VSL2BB_js = require('./chunk-25VSL2BB.js');
4
- var chunkZ2ZC5QTJ_js = require('./chunk-Z2ZC5QTJ.js');
4
+ var chunkQOWFOMZP_js = require('./chunk-QOWFOMZP.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 chunkZ2ZC5QTJ_js.getAnimationInitialStyle(preset, nativeAnimation);
18
+ return chunkQOWFOMZP_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 chunkZ2ZC5QTJ_js.cloneHistorySnapshot(snapshot);
26
+ return chunkQOWFOMZP_js.cloneHistorySnapshot(snapshot);
27
27
  }
28
28
 
29
29
  // src/viewer/constants/scalar.ts
@@ -133,7 +133,7 @@ var GLYPH_COMPONENTS = {
133
133
  plus: lu.LuPlus,
134
134
  triangle: lu.LuTriangle
135
135
  };
136
- var SHAPE_PRESETS = chunkZ2ZC5QTJ_js.SHAPE_PRESET_DEFS.map(
136
+ var SHAPE_PRESETS = chunkQOWFOMZP_js.SHAPE_PRESET_DEFS.map(
137
137
  (def) => ({
138
138
  type: def.type,
139
139
  label: def.label,
@@ -251,7 +251,7 @@ function isConnectorOrLineElement(element) {
251
251
  if (element.type === "connector") {
252
252
  return true;
253
253
  }
254
- if (!chunkZ2ZC5QTJ_js.hasShapeProperties(element)) {
254
+ if (!chunkQOWFOMZP_js.hasShapeProperties(element)) {
255
255
  return false;
256
256
  }
257
257
  const st = getShapeType(element.shapeType);
@@ -262,12 +262,12 @@ function isConnectorOrLineElement(element) {
262
262
  function partitionTemplateElements(slides) {
263
263
  const templateElementsBySlideId = {};
264
264
  const nextSlides = slides.map((slide) => {
265
- const template = slide.elements.filter((el) => chunkZ2ZC5QTJ_js.isTemplateElement(el));
265
+ const template = slide.elements.filter((el) => chunkQOWFOMZP_js.isTemplateElement(el));
266
266
  if (template.length === 0) {
267
267
  return slide;
268
268
  }
269
269
  templateElementsBySlideId[slide.id] = template;
270
- return { ...slide, elements: slide.elements.filter((el) => !chunkZ2ZC5QTJ_js.isTemplateElement(el)) };
270
+ return { ...slide, elements: slide.elements.filter((el) => !chunkQOWFOMZP_js.isTemplateElement(el)) };
271
271
  });
272
272
  return { slides: nextSlides, templateElementsBySlideId };
273
273
  }
@@ -283,7 +283,7 @@ function buildSaveSlides(slides, templateElementsBySlideId) {
283
283
 
284
284
  // src/viewer/utils/image-style.ts
285
285
  function getImageMaskStyle(element) {
286
- if (!chunkZ2ZC5QTJ_js.hasShapeProperties(element)) {
286
+ if (!chunkQOWFOMZP_js.hasShapeProperties(element)) {
287
287
  return void 0;
288
288
  }
289
289
  const shapeType = element.shapeType;
@@ -292,7 +292,7 @@ function getImageMaskStyle(element) {
292
292
  }
293
293
  const normalized = shapeType.toLowerCase();
294
294
  if (normalized === "roundrect" || normalized === "round1rect" || normalized === "round2samerect" || normalized === "round2diagrect" || normalized === "sniproundrect" || normalized === "snip1rect" || normalized === "snip2diagrect") {
295
- const radiusPx = chunkZ2ZC5QTJ_js.getRoundRectRadiusPx(element);
295
+ const radiusPx = chunkQOWFOMZP_js.getRoundRectRadiusPx(element);
296
296
  if (radiusPx <= 0.01) {
297
297
  return void 0;
298
298
  }
@@ -304,7 +304,7 @@ function getImageMaskStyle(element) {
304
304
  if (normalized === "can" || normalized === "cylinder") {
305
305
  return { borderRadius: "48% / 12%" };
306
306
  }
307
- const clipPath = chunkZ2ZC5QTJ_js.getResolvedShapeClipPath(element);
307
+ const clipPath = chunkQOWFOMZP_js.getResolvedShapeClipPath(element);
308
308
  if (!clipPath) {
309
309
  return void 0;
310
310
  }
@@ -312,7 +312,7 @@ function getImageMaskStyle(element) {
312
312
  }
313
313
  function getImageRenderStyle(element) {
314
314
  const maskStyle = getImageMaskStyle(element) || {};
315
- if (!chunkZ2ZC5QTJ_js.isImageLikeElement(element)) {
315
+ if (!chunkQOWFOMZP_js.isImageLikeElement(element)) {
316
316
  return {
317
317
  ...maskStyle,
318
318
  width: "100%",
@@ -320,10 +320,10 @@ function getImageRenderStyle(element) {
320
320
  objectFit: "cover"
321
321
  };
322
322
  }
323
- const cropLeft = chunkZ2ZC5QTJ_js.clampCropValue(element.cropLeft);
324
- const cropTop = chunkZ2ZC5QTJ_js.clampCropValue(element.cropTop);
325
- const cropRight = chunkZ2ZC5QTJ_js.clampCropValue(element.cropRight);
326
- const cropBottom = chunkZ2ZC5QTJ_js.clampCropValue(element.cropBottom);
323
+ const cropLeft = chunkQOWFOMZP_js.clampCropValue(element.cropLeft);
324
+ const cropTop = chunkQOWFOMZP_js.clampCropValue(element.cropTop);
325
+ const cropRight = chunkQOWFOMZP_js.clampCropValue(element.cropRight);
326
+ const cropBottom = chunkQOWFOMZP_js.clampCropValue(element.cropBottom);
327
327
  const hasCrop = cropLeft + cropRight > 1e-4 || cropTop + cropBottom > 1e-4;
328
328
  if (!hasCrop) {
329
329
  return {
@@ -335,10 +335,10 @@ function getImageRenderStyle(element) {
335
335
  }
336
336
  const safeHorizontalScale = cropLeft + cropRight >= 0.99 ? 0.99 / (cropLeft + cropRight) : 1;
337
337
  const safeVerticalScale = cropTop + cropBottom >= 0.99 ? 0.99 / (cropTop + cropBottom) : 1;
338
- const normalizedLeft = chunkZ2ZC5QTJ_js.clampCropValue(cropLeft * safeHorizontalScale);
339
- const normalizedRight = chunkZ2ZC5QTJ_js.clampCropValue(cropRight * safeHorizontalScale);
340
- const normalizedTop = chunkZ2ZC5QTJ_js.clampCropValue(cropTop * safeVerticalScale);
341
- const normalizedBottom = chunkZ2ZC5QTJ_js.clampCropValue(cropBottom * safeVerticalScale);
338
+ const normalizedLeft = chunkQOWFOMZP_js.clampCropValue(cropLeft * safeHorizontalScale);
339
+ const normalizedRight = chunkQOWFOMZP_js.clampCropValue(cropRight * safeHorizontalScale);
340
+ const normalizedTop = chunkQOWFOMZP_js.clampCropValue(cropTop * safeVerticalScale);
341
+ const normalizedBottom = chunkQOWFOMZP_js.clampCropValue(cropBottom * safeVerticalScale);
342
342
  const remainingWidth = Math.max(0.01, 1 - normalizedLeft - normalizedRight);
343
343
  const remainingHeight = Math.max(0.01, 1 - normalizedTop - normalizedBottom);
344
344
  const tx = Math.round(-normalizedLeft / remainingWidth * 1e4) / 100;
@@ -367,7 +367,7 @@ var CROP_SHAPE_CLIP_PATHS = {
367
367
  star: "polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)"
368
368
  };
369
369
  function getCropShapeClipPath(element) {
370
- if (!chunkZ2ZC5QTJ_js.isImageLikeElement(element)) {
370
+ if (!chunkQOWFOMZP_js.isImageLikeElement(element)) {
371
371
  return void 0;
372
372
  }
373
373
  const shape = element.cropShape;
@@ -377,7 +377,7 @@ function getCropShapeClipPath(element) {
377
377
  return CROP_SHAPE_CLIP_PATHS[shape];
378
378
  }
379
379
  function isImageTiled(element) {
380
- if (!chunkZ2ZC5QTJ_js.isImageLikeElement(element)) {
380
+ if (!chunkQOWFOMZP_js.isImageLikeElement(element)) {
381
381
  return false;
382
382
  }
383
383
  return typeof element.tileScaleX === "number" || typeof element.tileScaleY === "number";
@@ -435,7 +435,7 @@ function buildMirrorTiledBackground(src, flip, scaleX, scaleY) {
435
435
  };
436
436
  }
437
437
  function getImageTilingStyle(element) {
438
- if (!chunkZ2ZC5QTJ_js.isImageLikeElement(element) || !isImageTiled(element)) {
438
+ if (!chunkQOWFOMZP_js.isImageLikeElement(element) || !isImageTiled(element)) {
439
439
  return void 0;
440
440
  }
441
441
  const scaleX = typeof element.tileScaleX === "number" ? element.tileScaleX * 100 : 100;
@@ -719,7 +719,7 @@ function executeMediaCommand(command) {
719
719
  if (!el) {
720
720
  return false;
721
721
  }
722
- const parsed = chunkZ2ZC5QTJ_js.parseMediaCommand(command.command);
722
+ const parsed = chunkQOWFOMZP_js.parseMediaCommand(command.command);
723
723
  if (!parsed) {
724
724
  return false;
725
725
  }
@@ -1171,7 +1171,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
1171
1171
 
1172
1172
  // src/viewer/utils/text-utils.tsx
1173
1173
  function getTextStyleForElement(element, fallbackColor) {
1174
- if (!chunkZ2ZC5QTJ_js.hasTextProperties(element)) {
1174
+ if (!chunkQOWFOMZP_js.hasTextProperties(element)) {
1175
1175
  return { color: fallbackColor };
1176
1176
  }
1177
1177
  const textDecorationTokens = [];
@@ -1185,7 +1185,7 @@ function getTextStyleForElement(element, fallbackColor) {
1185
1185
  const textDecorationStyle = isDoubleStrike ? "double" : void 0;
1186
1186
  const hasItalicRuns = element.textStyle?.italic || Boolean(element.textSegments?.some((segment) => segment.style?.italic));
1187
1187
  const isRtl = element.textStyle?.rtl === true;
1188
- const resolvedTextColor = element.textStyle?.hyperlink ? chunkZ2ZC5QTJ_js.normalizeHexColor(element.textStyle?.color, HYPERLINK_COLOR) : chunkZ2ZC5QTJ_js.normalizeHexColor(element.textStyle?.color, fallbackColor);
1188
+ const resolvedTextColor = element.textStyle?.hyperlink ? chunkQOWFOMZP_js.normalizeHexColor(element.textStyle?.color, HYPERLINK_COLOR) : chunkQOWFOMZP_js.normalizeHexColor(element.textStyle?.color, fallbackColor);
1189
1189
  const bodyTop = element.textStyle?.bodyInsetTop ?? DEFAULT_BODY_INSET_TB_PX;
1190
1190
  const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
1191
1191
  const bodyLeft = element.textStyle?.bodyInsetLeft ?? DEFAULT_BODY_INSET_LR_PX;
@@ -1194,15 +1194,15 @@ function getTextStyleForElement(element, fallbackColor) {
1194
1194
  const bodyIndent = hasParagraphIndents ? 0 : element.textStyle?.paragraphIndent || 0;
1195
1195
  const bodyMarginLeft = hasParagraphIndents ? 0 : element.textStyle?.paragraphMarginLeft || 0;
1196
1196
  const bodyMarginRight = hasParagraphIndents ? 0 : element.textStyle?.paragraphMarginRight || 0;
1197
- const writingMode = chunkZ2ZC5QTJ_js.toCssWritingMode(element.textStyle?.textDirection);
1198
- const textOrientation = chunkZ2ZC5QTJ_js.toCssTextOrientation(element.textStyle?.textDirection);
1199
- const verticalDirection = chunkZ2ZC5QTJ_js.toCssVerticalDirection(element.textStyle?.textDirection);
1197
+ const writingMode = chunkQOWFOMZP_js.toCssWritingMode(element.textStyle?.textDirection);
1198
+ const textOrientation = chunkQOWFOMZP_js.toCssTextOrientation(element.textStyle?.textDirection);
1199
+ const verticalDirection = chunkQOWFOMZP_js.toCssVerticalDirection(element.textStyle?.textDirection);
1200
1200
  const resolvedDirection = verticalDirection || (isRtl ? "rtl" : "ltr");
1201
1201
  const resolvedUnicodeBidi = isRtl ? "plaintext" : void 0;
1202
1202
  const hasSegments = (element.textSegments?.length ?? 0) > 0;
1203
1203
  return {
1204
1204
  color: resolvedTextColor,
1205
- backgroundColor: !hasSegments && element.textStyle?.highlightColor ? chunkZ2ZC5QTJ_js.normalizeHexColor(element.textStyle.highlightColor, void 0) : void 0,
1205
+ backgroundColor: !hasSegments && element.textStyle?.highlightColor ? chunkQOWFOMZP_js.normalizeHexColor(element.textStyle.highlightColor, void 0) : void 0,
1206
1206
  textAlign: (() => {
1207
1207
  const a = element.textStyle?.align;
1208
1208
  if (a === "justLow" || a === "dist" || a === "thaiDist") {
@@ -1218,7 +1218,7 @@ function getTextStyleForElement(element, fallbackColor) {
1218
1218
  textDecorationLine: textDecorationTokens.length > 0 ? textDecorationTokens.join(" ") : "none",
1219
1219
  textDecorationStyle,
1220
1220
  fontFamily: element.textStyle?.fontFamily || DEFAULT_FONT_FAMILY,
1221
- lineHeight: chunkZ2ZC5QTJ_js.resolveLineHeight(element.textStyle, hasItalicRuns),
1221
+ lineHeight: chunkQOWFOMZP_js.resolveLineHeight(element.textStyle, hasItalicRuns),
1222
1222
  paddingTop: bodyTop + (hasItalicRuns ? 1 : 0),
1223
1223
  paddingBottom: bodyBottom + (hasItalicRuns ? 1 : 0),
1224
1224
  paddingLeft: bodyLeft + bodyMarginLeft,
@@ -1231,7 +1231,7 @@ function getTextStyleForElement(element, fallbackColor) {
1231
1231
  // Auto-fit: use OOXML-provided fontScale/lnSpcReduction when available,
1232
1232
  // otherwise fall back to heuristic estimation. The pure font-scale maths
1233
1233
  // now lives in pptx-viewer-shared (computeAutoFitTextStyle).
1234
- ...chunkZ2ZC5QTJ_js.computeAutoFitTextStyle({
1234
+ ...chunkQOWFOMZP_js.computeAutoFitTextStyle({
1235
1235
  textStyle: element.textStyle,
1236
1236
  text: element.text ?? "",
1237
1237
  width: element.width,
@@ -1265,13 +1265,13 @@ function computeTabSize(tabStops, defaultTabSize) {
1265
1265
  return avgGap > 0 ? `${Math.round(avgGap)}px` : fromDefault;
1266
1266
  }
1267
1267
  function getTextLayoutStyle(element) {
1268
- if (!chunkZ2ZC5QTJ_js.hasTextProperties(element)) {
1268
+ if (!chunkQOWFOMZP_js.hasTextProperties(element)) {
1269
1269
  return {};
1270
1270
  }
1271
1271
  const verticalAlign = element.textStyle?.vAlign || "top";
1272
- const writingMode = chunkZ2ZC5QTJ_js.toCssWritingMode(element.textStyle?.textDirection);
1273
- const textOrientation = chunkZ2ZC5QTJ_js.toCssTextOrientation(element.textStyle?.textDirection);
1274
- const verticalDirection = chunkZ2ZC5QTJ_js.toCssVerticalDirection(element.textStyle?.textDirection);
1272
+ const writingMode = chunkQOWFOMZP_js.toCssWritingMode(element.textStyle?.textDirection);
1273
+ const textOrientation = chunkQOWFOMZP_js.toCssTextOrientation(element.textStyle?.textDirection);
1274
+ const verticalDirection = chunkQOWFOMZP_js.toCssVerticalDirection(element.textStyle?.textDirection);
1275
1275
  const parsedColumnCount = Number(element.textStyle?.columnCount);
1276
1276
  const columnCount = Number.isFinite(parsedColumnCount) ? Math.max(1, Math.min(16, Math.round(parsedColumnCount))) : 1;
1277
1277
  const hasColumns = columnCount > 1;
@@ -1279,7 +1279,7 @@ function getTextLayoutStyle(element) {
1279
1279
  const tabStops = element.textStyle?.tabStops;
1280
1280
  const tabSize = computeTabSize(tabStops, element.textStyle?.defaultTabSize);
1281
1281
  const textWrapNone = element.textStyle?.textWrap === "none";
1282
- const hasParagraphIndents = chunkZ2ZC5QTJ_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
1282
+ const hasParagraphIndents = chunkQOWFOMZP_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
1283
1283
  const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
1284
1284
  const paragraphIndent = element.textStyle?.paragraphIndent;
1285
1285
  const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
@@ -1288,7 +1288,7 @@ function getTextLayoutStyle(element) {
1288
1288
  const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
1289
1289
  const parsedColumnSpacing = Number(element.textStyle?.columnSpacing);
1290
1290
  const columnGap = Number.isFinite(parsedColumnSpacing) && parsedColumnSpacing > 0 ? `${parsedColumnSpacing}px` : "0.75em";
1291
- const kinsokuStyles = chunkZ2ZC5QTJ_js.getKinsokuLineBreakStyles(element.textStyle);
1291
+ const kinsokuStyles = chunkQOWFOMZP_js.getKinsokuLineBreakStyles(element.textStyle);
1292
1292
  if (hasColumns) {
1293
1293
  return {
1294
1294
  display: "block",
@@ -1335,10 +1335,10 @@ function getTextLayoutStyle(element) {
1335
1335
 
1336
1336
  // src/viewer/utils/text-effects.tsx
1337
1337
  function buildTextFillCss2(style) {
1338
- return chunkZ2ZC5QTJ_js.buildTextFillCss(style);
1338
+ return chunkQOWFOMZP_js.buildTextFillCss(style);
1339
1339
  }
1340
1340
  function buildTextBody3DSceneStyle2(textStyle) {
1341
- return chunkZ2ZC5QTJ_js.buildTextBody3DSceneStyle(textStyle);
1341
+ return chunkQOWFOMZP_js.buildTextBody3DSceneStyle(textStyle);
1342
1342
  }
1343
1343
 
1344
1344
  // src/viewer/utils/text-warp-css.tsx
@@ -1523,13 +1523,13 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1523
1523
  if (!subElementAnimStates || subElementAnimStates.size === 0) {
1524
1524
  return renderedSegments;
1525
1525
  }
1526
- const paraKey = `${elementId}${chunkZ2ZC5QTJ_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1526
+ const paraKey = `${elementId}${chunkQOWFOMZP_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
1527
1527
  const paraState = subElementAnimStates.get(paraKey);
1528
1528
  if (paraState) {
1529
1529
  const style = buildAnimStyle(paraState);
1530
1530
  return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
1531
1531
  }
1532
- const spec = chunkZ2ZC5QTJ_js.buildTextBuildSpec(
1532
+ const spec = chunkQOWFOMZP_js.buildTextBuildSpec(
1533
1533
  elementId,
1534
1534
  paraIndex,
1535
1535
  paraSegments.map((entry) => ({ text: entry.segment.text, style: entry })),
@@ -1547,7 +1547,7 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
1547
1547
  "span",
1548
1548
  {
1549
1549
  "data-anim-id": span.animId,
1550
- style: chunkZ2ZC5QTJ_js.textBuildSpanStyle(span),
1550
+ style: chunkQOWFOMZP_js.textBuildSpanStyle(span),
1551
1551
  children: content
1552
1552
  },
1553
1553
  span.animId
@@ -1691,10 +1691,10 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
1691
1691
  if (!needsScriptFonts || !text) {
1692
1692
  return text;
1693
1693
  }
1694
- const runs = chunkZ2ZC5QTJ_js.segmentByScript(text);
1694
+ const runs = chunkQOWFOMZP_js.segmentByScript(text);
1695
1695
  if (runs.length <= 1) {
1696
1696
  if (runs.length === 1) {
1697
- const font = chunkZ2ZC5QTJ_js.resolveFontForScript(runs[0].script, scriptFonts);
1697
+ const font = chunkQOWFOMZP_js.resolveFontForScript(runs[0].script, scriptFonts);
1698
1698
  if (font && font !== baseFontFamily) {
1699
1699
  return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontFamily: font }, children: text });
1700
1700
  }
@@ -1702,7 +1702,7 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
1702
1702
  return text;
1703
1703
  }
1704
1704
  return runs.map((run, i) => {
1705
- const font = chunkZ2ZC5QTJ_js.resolveFontForScript(run.script, scriptFonts);
1705
+ const font = chunkQOWFOMZP_js.resolveFontForScript(run.script, scriptFonts);
1706
1706
  if (!font || font === baseFontFamily) {
1707
1707
  return /* @__PURE__ */ jsxRuntime.jsx(React6__default.default.Fragment, { children: run.text }, `${keyPrefix}-r${i}`);
1708
1708
  }
@@ -1774,8 +1774,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
1774
1774
  );
1775
1775
  }
1776
1776
  function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
1777
- const mathml = chunkZ2ZC5QTJ_js.convertOmmlToMathMl(equationXml);
1778
- const safeMathml = mathml ? chunkZ2ZC5QTJ_js.sanitizeMathMl(mathml) : "";
1777
+ const mathml = chunkQOWFOMZP_js.convertOmmlToMathMl(equationXml);
1778
+ const safeMathml = mathml ? chunkQOWFOMZP_js.sanitizeMathMl(mathml) : "";
1779
1779
  const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
1780
1780
  "span",
1781
1781
  {
@@ -1825,7 +1825,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
1825
1825
  return /* @__PURE__ */ jsxRuntime.jsx("span", { children: equationContent }, `${elementId}-seg-${segmentIndex}`);
1826
1826
  }
1827
1827
  function renderPictureBullet(elementId, segmentIndex, bulletInfo, baseFontSize) {
1828
- const picture = chunkZ2ZC5QTJ_js.resolvePictureBullet(bulletInfo, baseFontSize) ?? {
1828
+ const picture = chunkQOWFOMZP_js.resolvePictureBullet(bulletInfo, baseFontSize) ?? {
1829
1829
  sizePx: baseFontSize,
1830
1830
  fallbackMarker: "\u2022",
1831
1831
  accessibleLabel: "Bullet"
@@ -1865,7 +1865,7 @@ function renderPictureBullet(elementId, segmentIndex, bulletInfo, baseFontSize)
1865
1865
  `${elementId}-seg-${segmentIndex}-bullet-img`
1866
1866
  );
1867
1867
  }
1868
- function renderSingleSegment(element, segment, segmentIndex, fallbackColor, findHighlights, bulletInfo, onHyperlinkClick, fieldContext, paragraphRtl, requireCtrlClick) {
1868
+ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, findHighlights, bulletInfo, onHyperlinkClick, fieldContext, paragraphRtl, requireCtrlClick, bulletHangPx) {
1869
1869
  if (segment.equationXml) {
1870
1870
  return renderEquationSegment(
1871
1871
  element.id,
@@ -1875,7 +1875,8 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
1875
1875
  );
1876
1876
  }
1877
1877
  const segmentStyle = segment.style || {};
1878
- const textValue = chunkZ2ZC5QTJ_js.substituteFieldText(segment.text || "", segment.fieldType, fieldContext);
1878
+ const rawText = bulletInfo && typeof bulletHangPx === "number" ? (segment.text || "").trimEnd() : segment.text || "";
1879
+ const textValue = chunkQOWFOMZP_js.substituteFieldText(rawText, segment.fieldType, fieldContext);
1879
1880
  const lines = textValue.split("\n");
1880
1881
  const textDecorationTokens = [];
1881
1882
  if (segmentStyle.underline || segmentStyle.hyperlink) {
@@ -1885,8 +1886,8 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
1885
1886
  textDecorationTokens.push("line-through");
1886
1887
  }
1887
1888
  const isDoubleStrike = segmentStyle.strikethrough && segmentStyle.strikeType === "dblStrike";
1888
- const resolvedSegmentColor = segmentStyle.hyperlink ? chunkZ2ZC5QTJ_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, HYPERLINK_COLOR) : chunkZ2ZC5QTJ_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, fallbackColor);
1889
- const underlineDecoration = chunkZ2ZC5QTJ_js.resolveUnderlineDecorationStyle(
1889
+ const resolvedSegmentColor = segmentStyle.hyperlink ? chunkQOWFOMZP_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, HYPERLINK_COLOR) : chunkQOWFOMZP_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, fallbackColor);
1890
+ const underlineDecoration = chunkQOWFOMZP_js.resolveUnderlineDecorationStyle(
1890
1891
  Boolean(isDoubleStrike),
1891
1892
  segmentStyle.underlineStyle
1892
1893
  );
@@ -1902,14 +1903,14 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
1902
1903
  const baseFontSizePt = baseFontSize * (72 / 96);
1903
1904
  const fontKerning = typeof segmentStyle.kerning === "number" ? segmentStyle.kerning === 0 ? "none" : baseFontSizePt >= segmentStyle.kerning / 100 ? "normal" : "none" : void 0;
1904
1905
  const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
1905
- const baseFontFamily = rawFontFamily ? chunkZ2ZC5QTJ_js.getSubstituteFontFamily(rawFontFamily) : DEFAULT_FONT_FAMILY;
1906
+ const baseFontFamily = rawFontFamily ? chunkQOWFOMZP_js.getSubstituteFontFamily(rawFontFamily) : DEFAULT_FONT_FAMILY;
1906
1907
  const scriptFonts = {
1907
1908
  latin: baseFontFamily,
1908
1909
  eastAsia: segmentStyle.eastAsiaFont || element.textStyle?.eastAsiaFont || baseFontFamily,
1909
1910
  complexScript: segmentStyle.complexScriptFont || element.textStyle?.complexScriptFont || baseFontFamily,
1910
1911
  symbol: segmentStyle.symbolFont || element.textStyle?.symbolFont || baseFontFamily
1911
1912
  };
1912
- const needsScriptFonts = chunkZ2ZC5QTJ_js.hasDistinctScriptFonts(scriptFonts);
1913
+ const needsScriptFonts = chunkQOWFOMZP_js.hasDistinctScriptFonts(scriptFonts);
1913
1914
  const spanStyle = {
1914
1915
  color: resolvedSegmentColor,
1915
1916
  fontSize: baseFontSize * baselineFontScale,
@@ -1927,15 +1928,15 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
1927
1928
  fontVariantCaps: segmentStyle.textCaps === "small" ? "small-caps" : void 0,
1928
1929
  letterSpacing,
1929
1930
  fontKerning,
1930
- backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ? chunkZ2ZC5QTJ_js.normalizeHexColor(segmentStyle.highlightColor, "transparent") : void 0,
1931
+ backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ? chunkQOWFOMZP_js.normalizeHexColor(segmentStyle.highlightColor, "transparent") : void 0,
1931
1932
  ...textFillStyles,
1932
- textDecorationColor: segmentStyle.underlineColor ? chunkZ2ZC5QTJ_js.normalizeHexColor(segmentStyle.underlineColor, void 0) : void 0,
1933
- WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${chunkZ2ZC5QTJ_js.normalizeHexColor(segmentStyle.textOutlineColor, "#000000")}` : segmentStyle.textOutlineWidth ? `${segmentStyle.textOutlineWidth}px currentColor` : void 0,
1933
+ textDecorationColor: segmentStyle.underlineColor ? chunkQOWFOMZP_js.normalizeHexColor(segmentStyle.underlineColor, void 0) : void 0,
1934
+ WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${chunkQOWFOMZP_js.normalizeHexColor(segmentStyle.textOutlineColor, "#000000")}` : segmentStyle.textOutlineWidth ? `${segmentStyle.textOutlineWidth}px currentColor` : void 0,
1934
1935
  paintOrder: segmentStyle.textOutlineWidth ? "stroke fill" : void 0,
1935
- textShadow: chunkZ2ZC5QTJ_js.buildTextShadowCss(segmentStyle),
1936
- filter: chunkZ2ZC5QTJ_js.buildTextRunFilterChain(segmentStyle),
1937
- opacity: chunkZ2ZC5QTJ_js.getTextAlphaOpacity(segmentStyle),
1938
- WebkitBoxReflect: chunkZ2ZC5QTJ_js.buildTextReflectionCss(segmentStyle)
1936
+ textShadow: chunkQOWFOMZP_js.buildTextShadowCss(segmentStyle),
1937
+ filter: chunkQOWFOMZP_js.buildTextRunFilterChain(segmentStyle),
1938
+ opacity: chunkQOWFOMZP_js.getTextAlphaOpacity(segmentStyle),
1939
+ WebkitBoxReflect: chunkQOWFOMZP_js.buildTextReflectionCss(segmentStyle)
1939
1940
  };
1940
1941
  const runRtl = segmentStyle.rtl;
1941
1942
  if (runRtl !== void 0 && runRtl !== paragraphRtl) {
@@ -1955,7 +1956,12 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
1955
1956
  spanStyle.fontSize = baseFontSize * (bulletInfo.sizePercent / 100) * baselineFontScale;
1956
1957
  }
1957
1958
  if (bulletInfo.color) {
1958
- spanStyle.color = chunkZ2ZC5QTJ_js.normalizeHexColor(bulletInfo.color, resolvedSegmentColor);
1959
+ spanStyle.color = chunkQOWFOMZP_js.normalizeHexColor(bulletInfo.color, resolvedSegmentColor);
1960
+ }
1961
+ if (typeof bulletHangPx === "number" && bulletHangPx > 0) {
1962
+ spanStyle.display = "inline-block";
1963
+ spanStyle.minWidth = bulletHangPx;
1964
+ spanStyle.textIndent = 0;
1959
1965
  }
1960
1966
  }
1961
1967
  if (bulletInfo?.imageDataUrl || bulletInfo?.imageRelId) {
@@ -1995,7 +2001,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
1995
2001
  textAlign: segment.rubyAlignment === "l" ? "left" : segment.rubyAlignment === "r" ? "right" : segment.rubyAlignment === "dist" || segment.rubyAlignment === "distCat" || segment.rubyAlignment === "distLetter" ? "justify" : "center"
1996
2002
  };
1997
2003
  if (segment.rubyStyle?.color) {
1998
- rubyStyle.color = chunkZ2ZC5QTJ_js.normalizeHexColor(segment.rubyStyle.color, resolvedSegmentColor);
2004
+ rubyStyle.color = chunkQOWFOMZP_js.normalizeHexColor(segment.rubyStyle.color, resolvedSegmentColor);
1999
2005
  }
2000
2006
  innerContent = /* @__PURE__ */ jsxRuntime.jsxs("ruby", { children: [
2001
2007
  baseContent,
@@ -2078,19 +2084,19 @@ function groupSegmentsIntoParagraphs(segments) {
2078
2084
  for (let i = 0; i < segments.length; i++) {
2079
2085
  const seg = segments[i];
2080
2086
  if (seg.text === "\n") {
2081
- paragraphs.push(current);
2087
+ paragraphs.push({ entries: current, terminator: seg });
2082
2088
  current = [];
2083
2089
  } else {
2084
2090
  current.push({ segment: seg, globalIndex: i });
2085
2091
  }
2086
2092
  }
2087
2093
  if (current.length > 0 || paragraphs.length === 0) {
2088
- paragraphs.push(current);
2094
+ paragraphs.push({ entries: current });
2089
2095
  }
2090
2096
  return paragraphs;
2091
2097
  }
2092
2098
  function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick) {
2093
- if (!chunkZ2ZC5QTJ_js.hasTextProperties(element)) {
2099
+ if (!chunkQOWFOMZP_js.hasTextProperties(element)) {
2094
2100
  return emptyFallback || null;
2095
2101
  }
2096
2102
  const effectiveSegments = segmentOverrides ?? element.textSegments;
@@ -2111,12 +2117,12 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
2111
2117
  return element.text || emptyFallback || "";
2112
2118
  }
2113
2119
  const paragraphs = groupSegmentsIntoParagraphs(effectiveSegments);
2114
- const paragraphIndents = chunkZ2ZC5QTJ_js.hasTextProperties(element) ? element.paragraphIndents : void 0;
2115
- const elementRtl = chunkZ2ZC5QTJ_js.hasTextProperties(element) ? element.textStyle?.rtl : void 0;
2116
- const elementAlign = chunkZ2ZC5QTJ_js.hasTextProperties(element) ? element.textStyle?.align : void 0;
2117
- const bodyStyle = chunkZ2ZC5QTJ_js.hasTextProperties(element) ? element.textStyle : void 0;
2120
+ const paragraphIndents = chunkQOWFOMZP_js.hasTextProperties(element) ? element.paragraphIndents : void 0;
2121
+ const elementRtl = chunkQOWFOMZP_js.hasTextProperties(element) ? element.textStyle?.rtl : void 0;
2122
+ const elementAlign = chunkQOWFOMZP_js.hasTextProperties(element) ? element.textStyle?.align : void 0;
2123
+ const bodyStyle = chunkQOWFOMZP_js.hasTextProperties(element) ? element.textStyle : void 0;
2118
2124
  const spaceFirstLast = bodyStyle?.spaceFirstLastParagraph !== false;
2119
- return paragraphs.map((paraSegments, paraIndex) => {
2125
+ return paragraphs.map(({ entries: paraSegments, terminator }, paraIndex) => {
2120
2126
  const paraIndent = paragraphIndents?.[paraIndex];
2121
2127
  const rawMarginLeft = typeof paraIndent?.marginLeft === "number" && paraIndent.marginLeft !== 0 ? paraIndent.marginLeft : void 0;
2122
2128
  const rawTextIndent = typeof paraIndent?.indent === "number" && paraIndent.indent !== 0 ? paraIndent.indent : void 0;
@@ -2129,16 +2135,16 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
2129
2135
  return Boolean(segment.text) && segment.text.trim().length > 0;
2130
2136
  });
2131
2137
  const hasBullet = bulletInfo && !bulletInfo.none && hasVisibleTextContent;
2132
- const paraRtl = chunkZ2ZC5QTJ_js.resolveParagraphRtl(paraSegments, elementRtl);
2138
+ const paraRtl = chunkQOWFOMZP_js.resolveParagraphRtl(paraSegments, elementRtl);
2133
2139
  const isRtlParagraph = paraRtl === true;
2134
- const paraAlign = chunkZ2ZC5QTJ_js.resolveParagraphAlign(paraSegments, elementAlign);
2135
- const cssTextAlign = chunkZ2ZC5QTJ_js.resolveCssTextAlign(paraAlign, isRtlParagraph);
2140
+ const paraAlign = chunkQOWFOMZP_js.resolveParagraphAlign(paraSegments, elementAlign);
2141
+ const cssTextAlign = chunkQOWFOMZP_js.resolveCssTextAlign(paraAlign, isRtlParagraph);
2136
2142
  const paraMarginLeft = isRtlParagraph ? void 0 : rawMarginLeft;
2137
2143
  const paraMarginRight = isRtlParagraph ? rawMarginLeft : void 0;
2138
2144
  const paraTextIndent = rawTextIndent;
2139
- const paraKinsokuStyle = chunkZ2ZC5QTJ_js.getKinsokuLineBreakStyles(firstSeg?.segment.style);
2145
+ const paraKinsokuStyle = chunkQOWFOMZP_js.getKinsokuLineBreakStyles(firstSeg?.segment.style);
2140
2146
  const hasParaKinsoku = Object.keys(paraKinsokuStyle).length > 0;
2141
- const paraProps = effectiveSegments[firstSeg?.globalIndex ?? -1]?.paragraphProperties;
2147
+ const paraProps = effectiveSegments[firstSeg?.globalIndex ?? -1]?.paragraphProperties ?? (paraSegments.length === 0 ? terminator?.paragraphProperties : void 0);
2142
2148
  const spacing = resolveParagraphSpacing({
2143
2149
  paraProps,
2144
2150
  bodyStyle,
@@ -2146,8 +2152,8 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
2146
2152
  isLast: paraIndex === paragraphs.length - 1,
2147
2153
  spaceFirstLast
2148
2154
  });
2149
- const strutFontSize = chunkZ2ZC5QTJ_js.resolveParagraphStrutFontSize(
2150
- paraSegments.map(({ segment }) => segment),
2155
+ const strutFontSize = chunkQOWFOMZP_js.resolveParagraphStrutFontSize(
2156
+ paraSegments.length > 0 ? paraSegments.map(({ segment }) => segment) : terminator ? [terminator] : [],
2151
2157
  bodyStyle?.fontSize
2152
2158
  );
2153
2159
  const hasParaSpacing = spacing.marginTop !== void 0 || spacing.marginBottom !== void 0 || spacing.lineHeight !== void 0;
@@ -2199,7 +2205,11 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
2199
2205
  onHyperlinkClick,
2200
2206
  fieldContext,
2201
2207
  paraRtl,
2202
- requireCtrlClick
2208
+ requireCtrlClick,
2209
+ // Marker box = the hanging distance, so the first line's text
2210
+ // lands on the indent stop (see `bulletHangPx` in
2211
+ // `renderSingleSegment`).
2212
+ hasBullet && globalIndex === firstSeg.globalIndex && typeof paraTextIndent === "number" && paraTextIndent < 0 ? -paraTextIndent : void 0
2203
2213
  )
2204
2214
  );
2205
2215
  const wrappedContent = wrapWithTextBuildAnimation(
@@ -2246,13 +2256,13 @@ function hexToRgbUnit(hex) {
2246
2256
  };
2247
2257
  }
2248
2258
  function getDuotoneColors(element) {
2249
- if (!chunkZ2ZC5QTJ_js.isImageLikeElement(element)) {
2259
+ if (!chunkQOWFOMZP_js.isImageLikeElement(element)) {
2250
2260
  return void 0;
2251
2261
  }
2252
2262
  return element.imageEffects?.duotone;
2253
2263
  }
2254
2264
  function buildLineShadowCss(element) {
2255
- if (!chunkZ2ZC5QTJ_js.hasShapeProperties(element)) {
2265
+ if (!chunkQOWFOMZP_js.hasShapeProperties(element)) {
2256
2266
  return void 0;
2257
2267
  }
2258
2268
  const ss = element.shapeStyle;
@@ -2263,13 +2273,13 @@ function buildLineShadowCss(element) {
2263
2273
  const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
2264
2274
  const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
2265
2275
  const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
2266
- return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkZ2ZC5QTJ_js.colorWithOpacity(
2267
- chunkZ2ZC5QTJ_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
2276
+ return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkQOWFOMZP_js.colorWithOpacity(
2277
+ chunkQOWFOMZP_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
2268
2278
  opacity
2269
2279
  )}`;
2270
2280
  }
2271
2281
  function buildLineGlowFilter(element) {
2272
- if (!chunkZ2ZC5QTJ_js.hasShapeProperties(element)) {
2282
+ if (!chunkQOWFOMZP_js.hasShapeProperties(element)) {
2273
2283
  return void 0;
2274
2284
  }
2275
2285
  const ss = element.shapeStyle;
@@ -2278,7 +2288,7 @@ function buildLineGlowFilter(element) {
2278
2288
  }
2279
2289
  const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
2280
2290
  const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
2281
- const glowCol = chunkZ2ZC5QTJ_js.colorWithOpacity(chunkZ2ZC5QTJ_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
2291
+ const glowCol = chunkQOWFOMZP_js.colorWithOpacity(chunkQOWFOMZP_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
2282
2292
  return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
2283
2293
  }
2284
2294
  function mapDagBlendModeToCss(blend) {
@@ -2302,7 +2312,7 @@ function getDagDuotoneFilterId(elementId) {
2302
2312
  return `dag-duotone-${elementId}`;
2303
2313
  }
2304
2314
  function hasDagDuotoneEffect(element) {
2305
- if (!chunkZ2ZC5QTJ_js.hasShapeProperties(element)) {
2315
+ if (!chunkQOWFOMZP_js.hasShapeProperties(element)) {
2306
2316
  return false;
2307
2317
  }
2308
2318
  return Boolean(element.shapeStyle?.dagDuotone);
@@ -2365,7 +2375,7 @@ function getRoundRectRadiusPx2(element) {
2365
2375
 
2366
2376
  // src/viewer/utils/shape-visual-3d.ts
2367
2377
  function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
2368
- return chunkZ2ZC5QTJ_js.build3DExtrusionData(
2378
+ return chunkQOWFOMZP_js.build3DExtrusionData(
2369
2379
  shape3d,
2370
2380
  scene3d,
2371
2381
  fillColor,
@@ -2374,7 +2384,7 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
2374
2384
  );
2375
2385
  }
2376
2386
  function apply3dEffects2(base, scene3d, shape3d, fillColorFallback) {
2377
- chunkZ2ZC5QTJ_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
2387
+ chunkQOWFOMZP_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
2378
2388
  }
2379
2389
 
2380
2390
  // src/viewer/utils/vector-subpath-paint.ts
@@ -2383,7 +2393,7 @@ function toHexByte(value) {
2383
2393
  return clamped.toString(16).padStart(2, "0");
2384
2394
  }
2385
2395
  function shiftHex(hex, factor, towardsWhite) {
2386
- const channels = chunkZ2ZC5QTJ_js.hexToRgbChannels(hex);
2396
+ const channels = chunkQOWFOMZP_js.hexToRgbChannels(hex);
2387
2397
  if (!channels) {
2388
2398
  return hex;
2389
2399
  }
@@ -2409,13 +2419,13 @@ function buildCustomSubpathPaints(subpaths, hasFill, fillColor, fillOpacity) {
2409
2419
  const fillOff = subpath.fillMode === "none" || !hasFill;
2410
2420
  return {
2411
2421
  d: subpath.d,
2412
- fill: fillOff ? "none" : chunkZ2ZC5QTJ_js.colorWithOpacity(adjustFillForMode(fillColor, subpath.fillMode), fillOpacity),
2422
+ fill: fillOff ? "none" : chunkQOWFOMZP_js.colorWithOpacity(adjustFillForMode(fillColor, subpath.fillMode), fillOpacity),
2413
2423
  stroked: subpath.stroke !== false
2414
2424
  };
2415
2425
  });
2416
2426
  }
2417
2427
  function getStrokeOnlyPresetPaths(element) {
2418
- if (element.type !== "shape" || !chunkZ2ZC5QTJ_js.hasShapeProperties(element)) {
2428
+ if (element.type !== "shape" || !chunkQOWFOMZP_js.hasShapeProperties(element)) {
2419
2429
  return void 0;
2420
2430
  }
2421
2431
  const shapeType = element.shapeType;
@@ -2425,7 +2435,7 @@ function getStrokeOnlyPresetPaths(element) {
2425
2435
  if (element.pathData) {
2426
2436
  return void 0;
2427
2437
  }
2428
- const result = chunkZ2ZC5QTJ_js.evaluatePresetShape(
2438
+ const result = chunkQOWFOMZP_js.evaluatePresetShape(
2429
2439
  shapeType,
2430
2440
  Math.max(element.width, 1),
2431
2441
  Math.max(element.height, 1),
@@ -2440,27 +2450,27 @@ function getStrokeOnlyPresetPaths(element) {
2440
2450
 
2441
2451
  // src/viewer/utils/shape-visual-style.ts
2442
2452
  function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
2443
- if (!chunkZ2ZC5QTJ_js.hasShapeProperties(element)) {
2453
+ if (!chunkQOWFOMZP_js.hasShapeProperties(element)) {
2444
2454
  return {};
2445
2455
  }
2446
2456
  const normalizedShapeType = getShapeType(element.shapeType);
2447
- const clipPath = chunkZ2ZC5QTJ_js.getResolvedShapeClipPath(element);
2457
+ const clipPath = chunkQOWFOMZP_js.getResolvedShapeClipPath(element);
2448
2458
  const rendersCustomVectorPath = (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;
2449
2459
  const rendersStrokeOnlyPreset = Boolean(getStrokeOnlyPresetPaths(element));
2450
2460
  const fillOpacity = element.shapeStyle?.fillOpacity;
2451
2461
  const strokeOpacity = element.shapeStyle?.strokeOpacity;
2452
- const strokeDash = chunkZ2ZC5QTJ_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2453
- const fillGradient = chunkZ2ZC5QTJ_js.buildCssGradientFromShapeStyle(element.shapeStyle) || element.shapeStyle?.fillGradient;
2454
- const shadowCss = chunkZ2ZC5QTJ_js.buildShadowCssFromShapeStyle(element.shapeStyle);
2455
- const innerShadowCss = chunkZ2ZC5QTJ_js.buildInnerShadowCssFromShapeStyle(element.shapeStyle);
2456
- const resolvedFillColor = chunkZ2ZC5QTJ_js.colorWithOpacity(fillColor, fillOpacity);
2457
- const resolvedStrokeColor = chunkZ2ZC5QTJ_js.colorWithOpacity(strokeColor, strokeOpacity);
2462
+ const strokeDash = chunkQOWFOMZP_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2463
+ const fillGradient = chunkQOWFOMZP_js.buildCssGradientFromShapeStyle(element.shapeStyle) || element.shapeStyle?.fillGradient;
2464
+ const shadowCss = chunkQOWFOMZP_js.buildShadowCssFromShapeStyle(element.shapeStyle);
2465
+ const innerShadowCss = chunkQOWFOMZP_js.buildInnerShadowCssFromShapeStyle(element.shapeStyle);
2466
+ const resolvedFillColor = chunkQOWFOMZP_js.colorWithOpacity(fillColor, fillOpacity);
2467
+ const resolvedStrokeColor = chunkQOWFOMZP_js.colorWithOpacity(strokeColor, strokeOpacity);
2458
2468
  const ss = element.shapeStyle;
2459
2469
  const hasFillOverlayColor = Boolean(
2460
2470
  ss?.dagFillOverlayColor && ss.dagFillOverlayColor !== "transparent"
2461
2471
  );
2462
2472
  const combinedShadowParts = [];
2463
- const multiLayerShadow = chunkZ2ZC5QTJ_js.buildMultiLayerShadowCss(element.shapeStyle);
2473
+ const multiLayerShadow = chunkQOWFOMZP_js.buildMultiLayerShadowCss(element.shapeStyle);
2464
2474
  if (multiLayerShadow) {
2465
2475
  combinedShadowParts.push(multiLayerShadow);
2466
2476
  } else if (shadowCss) {
@@ -2469,7 +2479,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
2469
2479
  if (innerShadowCss) {
2470
2480
  combinedShadowParts.push(innerShadowCss);
2471
2481
  }
2472
- const glowBoxShadow = chunkZ2ZC5QTJ_js.buildGlowBoxShadow(ss?.glowColor, ss?.glowRadius, ss?.glowOpacity);
2482
+ const glowBoxShadow = chunkQOWFOMZP_js.buildGlowBoxShadow(ss?.glowColor, ss?.glowRadius, ss?.glowOpacity);
2473
2483
  if (glowBoxShadow) {
2474
2484
  combinedShadowParts.push(glowBoxShadow);
2475
2485
  }
@@ -2477,7 +2487,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
2477
2487
  if (lineShadow) {
2478
2488
  combinedShadowParts.push(lineShadow);
2479
2489
  }
2480
- const compoundLineShadow = chunkZ2ZC5QTJ_js.getCompoundLineBoxShadow(
2490
+ const compoundLineShadow = chunkQOWFOMZP_js.getCompoundLineBoxShadow(
2481
2491
  element.shapeStyle?.compoundLine,
2482
2492
  strokeWidth,
2483
2493
  resolvedStrokeColor
@@ -2490,11 +2500,11 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
2490
2500
  if (ss?.glowColor && ss.glowColor !== "transparent" && ss.glowRadius) {
2491
2501
  const glowOpacity = typeof ss.glowOpacity === "number" ? ss.glowOpacity : 0.75;
2492
2502
  const glowRad = Math.round(Math.max(0, ss.glowRadius));
2493
- const glowCol = chunkZ2ZC5QTJ_js.colorWithOpacity(chunkZ2ZC5QTJ_js.normalizeHexColor(ss.glowColor, "#ffff00"), glowOpacity);
2503
+ const glowCol = chunkQOWFOMZP_js.colorWithOpacity(chunkQOWFOMZP_js.normalizeHexColor(ss.glowColor, "#ffff00"), glowOpacity);
2494
2504
  filterParts.push(`drop-shadow(0 0 ${glowRad}px ${glowCol})`);
2495
2505
  }
2496
2506
  if (typeof ss?.softEdgeRadius === "number" && ss.softEdgeRadius > 0) {
2497
- filterParts.push(`url(#${chunkZ2ZC5QTJ_js.getSoftEdgeFilterId(element.id)})`);
2507
+ filterParts.push(`url(#${chunkQOWFOMZP_js.getSoftEdgeFilterId(element.id)})`);
2498
2508
  }
2499
2509
  if (typeof ss?.blurRadius === "number" && ss.blurRadius > 0) {
2500
2510
  filterParts.push(`blur(${Math.round(ss.blurRadius)}px)`);
@@ -2503,13 +2513,13 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
2503
2513
  if (lineGlowCss) {
2504
2514
  filterParts.push(lineGlowCss);
2505
2515
  }
2506
- const dagFilter = chunkZ2ZC5QTJ_js.getEffectDagFilter(ss, element.id);
2516
+ const dagFilter = chunkQOWFOMZP_js.getEffectDagFilter(ss, element.id);
2507
2517
  if (dagFilter) {
2508
2518
  filterParts.push(dagFilter);
2509
2519
  }
2510
2520
  const lineJoinCss = ss?.lineJoin === "round" ? "round" : ss?.lineJoin === "bevel" ? "bevel" : ss?.lineJoin === "miter" ? "miter" : void 0;
2511
2521
  const miterLimitCss = ss?.lineJoin === "miter" && typeof ss?.miterLimit === "number" ? Math.max(ss.miterLimit / 1e5, 1) : void 0;
2512
- const patternFill = chunkZ2ZC5QTJ_js.buildPatternFillCss(element.shapeStyle);
2522
+ const patternFill = chunkQOWFOMZP_js.buildPatternFillCss(element.shapeStyle);
2513
2523
  const imageFillUrl = ss?.fillMode === "image" && ss.fillImageUrl ? ss.fillImageUrl : void 0;
2514
2524
  const imageFillMode = ss?.fillImageMode || "stretch";
2515
2525
  let reflectCss;
@@ -2521,7 +2531,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
2521
2531
  const endOpacity = typeof ss.reflectionEndOpacity === "number" ? ss.reflectionEndOpacity : 0;
2522
2532
  const fadeLength = typeof ss.reflectionEndPosition === "number" ? Math.round(ss.reflectionEndPosition * Math.max(element.height, 1)) : 100;
2523
2533
  const blurRadius = typeof ss.reflectionBlurRadius === "number" ? ss.reflectionBlurRadius : 0;
2524
- reflectCss = chunkZ2ZC5QTJ_js.buildReflectionCss(distance, startOpacity, endOpacity, fadeLength, blurRadius);
2534
+ reflectCss = chunkQOWFOMZP_js.buildReflectionCss(distance, startOpacity, endOpacity, fadeLength, blurRadius);
2525
2535
  }
2526
2536
  }
2527
2537
  const base = {
@@ -2563,9 +2573,9 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
2563
2573
  // two adjacent 40px buttons rendered with a 2px gap PowerPoint does not
2564
2574
  // draw. The affordance is an `outline` instead (see `ElementRenderer`),
2565
2575
  // which paints in the same place without taking part in layout.
2566
- borderWidth: strokeWidth > 0 ? chunkZ2ZC5QTJ_js.getCompoundLineBorderWidth(ss?.compoundLine, strokeWidth) : 0,
2576
+ borderWidth: strokeWidth > 0 ? chunkQOWFOMZP_js.getCompoundLineBorderWidth(ss?.compoundLine, strokeWidth) : 0,
2567
2577
  borderColor: strokeWidth > 0 ? resolvedStrokeColor : void 0,
2568
- borderStyle: strokeWidth > 0 ? chunkZ2ZC5QTJ_js.getCssBorderDashStyle(strokeDash, ss?.compoundLine) : void 0,
2578
+ borderStyle: strokeWidth > 0 ? chunkQOWFOMZP_js.getCssBorderDashStyle(strokeDash, ss?.compoundLine) : void 0,
2569
2579
  strokeLinejoin: lineJoinCss,
2570
2580
  strokeMiterlimit: miterLimitCss,
2571
2581
  strokeLinecap: ss?.lineCap === "rnd" ? "round" : ss?.lineCap === "sq" ? "square" : ss?.lineCap === "flat" ? "butt" : void 0
@@ -2621,7 +2631,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
2621
2631
  borderWidth: 0,
2622
2632
  borderTopWidth: Math.max(strokeWidth, 2),
2623
2633
  borderTopColor: resolvedStrokeColor,
2624
- borderTopStyle: chunkZ2ZC5QTJ_js.getCssBorderDashStyle(strokeDash)
2634
+ borderTopStyle: chunkQOWFOMZP_js.getCssBorderDashStyle(strokeDash)
2625
2635
  };
2626
2636
  }
2627
2637
  if (normalizedShapeType === "cylinder") {
@@ -2635,13 +2645,13 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
2635
2645
  function getConnectorAdjustment(element, key, fallback) {
2636
2646
  const direct = element.shapeAdjustments?.[key];
2637
2647
  if (typeof direct === "number" && Number.isFinite(direct)) {
2638
- return chunkZ2ZC5QTJ_js.clampUnitInterval(direct / 1e5);
2648
+ return chunkQOWFOMZP_js.clampUnitInterval(direct / 1e5);
2639
2649
  }
2640
2650
  const fallbackKey = element.shapeAdjustments?.adj;
2641
2651
  if (typeof fallbackKey === "number" && Number.isFinite(fallbackKey)) {
2642
- return chunkZ2ZC5QTJ_js.clampUnitInterval(fallbackKey / 1e5);
2652
+ return chunkQOWFOMZP_js.clampUnitInterval(fallbackKey / 1e5);
2643
2653
  }
2644
- return chunkZ2ZC5QTJ_js.clampUnitInterval(fallback);
2654
+ return chunkQOWFOMZP_js.clampUnitInterval(fallback);
2645
2655
  }
2646
2656
  function getConnectorPathGeometry(element) {
2647
2657
  const width = Math.max(element.width, 1);
@@ -2778,11 +2788,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
2778
2788
  strokePaint,
2779
2789
  strokeWidth,
2780
2790
  dashArray,
2781
- lineCap: chunkZ2ZC5QTJ_js.svgLineCap(shapeStyle?.lineCap),
2791
+ lineCap: chunkQOWFOMZP_js.svgLineCap(shapeStyle?.lineCap),
2782
2792
  lineJoin,
2783
2793
  miterLimit,
2784
- offsets: chunkZ2ZC5QTJ_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
2785
- widths: chunkZ2ZC5QTJ_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
2794
+ offsets: chunkQOWFOMZP_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
2795
+ widths: chunkQOWFOMZP_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
2786
2796
  };
2787
2797
  }
2788
2798
  function strokeStrands(d, keyBase, ctx) {
@@ -2805,7 +2815,7 @@ function strokeStrands(d, keyBase, ctx) {
2805
2815
  }
2806
2816
  function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false) {
2807
2817
  const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
2808
- const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkZ2ZC5QTJ_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
2818
+ const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkQOWFOMZP_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
2809
2819
  const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
2810
2820
  const nodes = [];
2811
2821
  if (subpaths && needsPerSubpath) {
@@ -2836,7 +2846,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
2836
2846
  "path",
2837
2847
  {
2838
2848
  d: pathData,
2839
- fill: animatesFill ? "inherit" : chunkZ2ZC5QTJ_js.colorWithOpacity(fillColor, fillOpacity),
2849
+ fill: animatesFill ? "inherit" : chunkQOWFOMZP_js.colorWithOpacity(fillColor, fillOpacity),
2840
2850
  stroke: "none",
2841
2851
  vectorEffect: "non-scaling-stroke"
2842
2852
  },
@@ -2878,14 +2888,14 @@ function renderStrokeOnlyPreset(presetPaths, width, height, shapeStyle, strokePa
2878
2888
  );
2879
2889
  }
2880
2890
  function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
2881
- if (!chunkZ2ZC5QTJ_js.hasShapeProperties(element)) {
2891
+ if (!chunkQOWFOMZP_js.hasShapeProperties(element)) {
2882
2892
  return null;
2883
2893
  }
2884
2894
  const normalizedType = (element.shapeType || "").toLowerCase();
2885
- const fillPaint = animatesFill ? "inherit" : chunkZ2ZC5QTJ_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2886
- const strokePaint = animatesStroke ? "inherit" : chunkZ2ZC5QTJ_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2887
- const dashType = chunkZ2ZC5QTJ_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2888
- const dashArray = chunkZ2ZC5QTJ_js.getSvgStrokeDasharray(
2895
+ const fillPaint = animatesFill ? "inherit" : chunkQOWFOMZP_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
2896
+ const strokePaint = animatesStroke ? "inherit" : chunkQOWFOMZP_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
2897
+ const dashType = chunkQOWFOMZP_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
2898
+ const dashArray = chunkQOWFOMZP_js.getSvgStrokeDasharray(
2889
2899
  dashType,
2890
2900
  Math.max(strokeWidth, 1),
2891
2901
  element.shapeStyle?.customDashSegments
@@ -2964,18 +2974,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
2964
2974
  Boolean(animatesFill)
2965
2975
  );
2966
2976
  }
2967
- if (chunkZ2ZC5QTJ_js.isCalloutShape(normalizedType)) {
2977
+ if (chunkQOWFOMZP_js.isCalloutShape(normalizedType)) {
2968
2978
  const width = Math.max(element.width, 1);
2969
2979
  const height = Math.max(element.height, 1);
2970
- const geometry = chunkZ2ZC5QTJ_js.getCalloutLeaderLineGeometry(
2980
+ const geometry = chunkQOWFOMZP_js.getCalloutLeaderLineGeometry(
2971
2981
  normalizedType,
2972
2982
  width,
2973
2983
  height,
2974
2984
  element.shapeAdjustments
2975
2985
  );
2976
2986
  if (geometry && geometry.points.length >= 2) {
2977
- const leaderPath = chunkZ2ZC5QTJ_js.buildCalloutLeaderLineSvgPath(geometry);
2978
- const bounds = chunkZ2ZC5QTJ_js.getCalloutViewBoxBounds(width, height, geometry);
2987
+ const leaderPath = chunkQOWFOMZP_js.buildCalloutLeaderLineSvgPath(geometry);
2988
+ const bounds = chunkQOWFOMZP_js.getCalloutViewBoxBounds(width, height, geometry);
2979
2989
  const lineStroke = Math.max(strokeWidth, 1);
2980
2990
  const offsetLeft = bounds.minX;
2981
2991
  const offsetTop = bounds.minY;
@@ -3038,10 +3048,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
3038
3048
  const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
3039
3049
  const endArrowL = element.shapeStyle?.connectorEndArrowLength;
3040
3050
  const compoundLine = element.shapeStyle?.compoundLine;
3041
- const connectorLineCap = chunkZ2ZC5QTJ_js.svgLineCap(element.shapeStyle?.lineCap);
3051
+ const connectorLineCap = chunkQOWFOMZP_js.svgLineCap(element.shapeStyle?.lineCap);
3042
3052
  const hitTargetWidth = Math.max(strokeWidth * 3, 12);
3043
- const offsets = chunkZ2ZC5QTJ_js.getCompoundLineOffsets(compoundLine, strokeWidth);
3044
- const widths = chunkZ2ZC5QTJ_js.getCompoundLineWidths(compoundLine, strokeWidth);
3053
+ const offsets = chunkQOWFOMZP_js.getCompoundLineOffsets(compoundLine, strokeWidth);
3054
+ const widths = chunkQOWFOMZP_js.getCompoundLineWidths(compoundLine, strokeWidth);
3045
3055
  return /* @__PURE__ */ jsxRuntime.jsxs(
3046
3056
  "svg",
3047
3057
  {
@@ -3120,15 +3130,15 @@ function parseGradientFillCss(gradFill) {
3120
3130
  }
3121
3131
  const parsed = stops.map((gs) => {
3122
3132
  const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
3123
- const color = chunkZ2ZC5QTJ_js.parseDrawingColor(gs) ?? "#888888";
3124
- const opacity = chunkZ2ZC5QTJ_js.parseDrawingColorOpacity(gs);
3125
- return { pos, color: chunkZ2ZC5QTJ_js.colorWithOpacity(color, opacity) };
3133
+ const color = chunkQOWFOMZP_js.parseDrawingColor(gs) ?? "#888888";
3134
+ const opacity = chunkQOWFOMZP_js.parseDrawingColorOpacity(gs);
3135
+ return { pos, color: chunkQOWFOMZP_js.colorWithOpacity(color, opacity) };
3126
3136
  }).sort((a, b) => a.pos - b.pos);
3127
3137
  const stopStrings = parsed.map((s) => `${s.color} ${s.pos.toFixed(1)}%`).join(", ");
3128
3138
  const lin = gradFill["a:lin"];
3129
3139
  if (lin) {
3130
3140
  const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
3131
- const angleDeg = Math.round(chunkZ2ZC5QTJ_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
3141
+ const angleDeg = Math.round(chunkQOWFOMZP_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
3132
3142
  return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
3133
3143
  }
3134
3144
  const path = gradFill["a:path"];
@@ -3163,8 +3173,8 @@ function parsePatternFillCss(pattFill) {
3163
3173
  if (!pattFill) {
3164
3174
  return void 0;
3165
3175
  }
3166
- const fgColor = chunkZ2ZC5QTJ_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
3167
- const bgColor = chunkZ2ZC5QTJ_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
3176
+ const fgColor = chunkQOWFOMZP_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
3177
+ const bgColor = chunkQOWFOMZP_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
3168
3178
  const preset = String(pattFill["@_prst"] || "ltDnDiag");
3169
3179
  switch (preset) {
3170
3180
  case "ltHorz":
@@ -3275,11 +3285,11 @@ function parseCellBorders(cellProperties) {
3275
3285
  const prstDash = ln["a:prstDash"];
3276
3286
  const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
3277
3287
  const cssBorderStyle = ooxmlDashToCss(dashVal);
3278
- const color = chunkZ2ZC5QTJ_js.parseDrawingColor(ln["a:solidFill"]);
3288
+ const color = chunkQOWFOMZP_js.parseDrawingColor(ln["a:solidFill"]);
3279
3289
  if (color) {
3280
- const opacity = chunkZ2ZC5QTJ_js.parseDrawingColorOpacity(ln["a:solidFill"]);
3290
+ const opacity = chunkQOWFOMZP_js.parseDrawingColorOpacity(ln["a:solidFill"]);
3281
3291
  const key = `${edge.prefix}`;
3282
- borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkZ2ZC5QTJ_js.colorWithOpacity(color, opacity)}`;
3292
+ borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkQOWFOMZP_js.colorWithOpacity(color, opacity)}`;
3283
3293
  }
3284
3294
  }
3285
3295
  return borderStyle;
@@ -3292,7 +3302,7 @@ function parseCellTextEffects(runProps) {
3292
3302
  const textShadowParts = [];
3293
3303
  const outerShdw = effectLst["a:outerShdw"];
3294
3304
  if (outerShdw) {
3295
- const shdwColor = chunkZ2ZC5QTJ_js.parseDrawingColor(outerShdw);
3305
+ const shdwColor = chunkQOWFOMZP_js.parseDrawingColor(outerShdw);
3296
3306
  if (shdwColor) {
3297
3307
  const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
3298
3308
  const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
@@ -3310,7 +3320,7 @@ function parseCellTextEffects(runProps) {
3310
3320
  }
3311
3321
  const glow = effectLst["a:glow"];
3312
3322
  if (glow) {
3313
- const glowColor = chunkZ2ZC5QTJ_js.parseDrawingColor(glow);
3323
+ const glowColor = chunkQOWFOMZP_js.parseDrawingColor(glow);
3314
3324
  if (glowColor) {
3315
3325
  const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
3316
3326
  const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
@@ -3389,10 +3399,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
3389
3399
  if (runProps?.["@_u"] !== void 0) {
3390
3400
  cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
3391
3401
  }
3392
- const runColor = chunkZ2ZC5QTJ_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkZ2ZC5QTJ_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
3402
+ const runColor = chunkQOWFOMZP_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkQOWFOMZP_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
3393
3403
  if (runColor) {
3394
- const opacity = chunkZ2ZC5QTJ_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
3395
- cellStyle.color = chunkZ2ZC5QTJ_js.colorWithOpacity(runColor, opacity);
3404
+ const opacity = chunkQOWFOMZP_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
3405
+ cellStyle.color = chunkQOWFOMZP_js.colorWithOpacity(runColor, opacity);
3396
3406
  }
3397
3407
  const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
3398
3408
  if (fontFamily) {
@@ -3402,15 +3412,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
3402
3412
  cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
3403
3413
  }
3404
3414
  const cellProperties = cellXml["a:tcPr"];
3405
- const cellFill = chunkZ2ZC5QTJ_js.parseDrawingColor(
3415
+ const cellFill = chunkQOWFOMZP_js.parseDrawingColor(
3406
3416
  cellProperties?.["a:solidFill"],
3407
3417
  schemeColorOverrides
3408
3418
  );
3409
3419
  if (cellFill) {
3410
- const opacity = chunkZ2ZC5QTJ_js.parseDrawingColorOpacity(
3420
+ const opacity = chunkQOWFOMZP_js.parseDrawingColorOpacity(
3411
3421
  cellProperties?.["a:solidFill"]
3412
3422
  );
3413
- cellStyle.backgroundColor = chunkZ2ZC5QTJ_js.colorWithOpacity(cellFill, opacity);
3423
+ cellStyle.backgroundColor = chunkQOWFOMZP_js.colorWithOpacity(cellFill, opacity);
3414
3424
  } else {
3415
3425
  const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
3416
3426
  if (gradCss) {
@@ -3425,16 +3435,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
3425
3435
  const edgeBorders = parseCellBorders(cellProperties);
3426
3436
  Object.assign(cellStyle, edgeBorders);
3427
3437
  if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
3428
- const borderColor = chunkZ2ZC5QTJ_js.parseDrawingColor(
3438
+ const borderColor = chunkQOWFOMZP_js.parseDrawingColor(
3429
3439
  cellProperties?.["a:lnL"]?.["a:solidFill"],
3430
3440
  schemeColorOverrides
3431
- ) || chunkZ2ZC5QTJ_js.parseDrawingColor(
3441
+ ) || chunkQOWFOMZP_js.parseDrawingColor(
3432
3442
  cellProperties?.["a:lnR"]?.["a:solidFill"],
3433
3443
  schemeColorOverrides
3434
- ) || chunkZ2ZC5QTJ_js.parseDrawingColor(
3444
+ ) || chunkQOWFOMZP_js.parseDrawingColor(
3435
3445
  cellProperties?.["a:lnT"]?.["a:solidFill"],
3436
3446
  schemeColorOverrides
3437
- ) || chunkZ2ZC5QTJ_js.parseDrawingColor(
3447
+ ) || chunkQOWFOMZP_js.parseDrawingColor(
3438
3448
  cellProperties?.["a:lnB"]?.["a:solidFill"],
3439
3449
  schemeColorOverrides
3440
3450
  );
@@ -3513,10 +3523,10 @@ function resolveTableStyleFillColor(fill, colorScheme) {
3513
3523
  }
3514
3524
  let color = base;
3515
3525
  if (fill.tint !== void 0 && fill.tint > 0) {
3516
- color = chunkZ2ZC5QTJ_js.tintColor2(color, fill.tint / 1e5);
3526
+ color = chunkQOWFOMZP_js.tintColor2(color, fill.tint / 1e5);
3517
3527
  }
3518
3528
  if (fill.shade !== void 0 && fill.shade > 0) {
3519
- color = chunkZ2ZC5QTJ_js.shadeColor2(color, 1 - fill.shade / 1e5);
3529
+ color = chunkQOWFOMZP_js.shadeColor2(color, 1 - fill.shade / 1e5);
3520
3530
  }
3521
3531
  return color;
3522
3532
  }
@@ -3541,7 +3551,7 @@ function applyTableStyleText(text, colorScheme, style, fontScheme) {
3541
3551
  style.fontFamily = text.fontFace;
3542
3552
  applied = true;
3543
3553
  } else {
3544
- const refFont = chunkZ2ZC5QTJ_js.resolveFontRefIdx(text.fontRefIdx, fontScheme);
3554
+ const refFont = chunkQOWFOMZP_js.resolveFontRefIdx(text.fontRefIdx, fontScheme);
3545
3555
  if (refFont) {
3546
3556
  style.fontFamily = refFont;
3547
3557
  applied = true;
@@ -3552,10 +3562,10 @@ function applyTableStyleText(text, colorScheme, style, fontScheme) {
3552
3562
  if (base) {
3553
3563
  let color = base;
3554
3564
  if (text.fontTint !== void 0 && text.fontTint > 0) {
3555
- color = chunkZ2ZC5QTJ_js.tintColor2(color, text.fontTint / 1e5);
3565
+ color = chunkQOWFOMZP_js.tintColor2(color, text.fontTint / 1e5);
3556
3566
  }
3557
3567
  if (text.fontShade !== void 0 && text.fontShade > 0) {
3558
- color = chunkZ2ZC5QTJ_js.shadeColor2(color, 1 - text.fontShade / 1e5);
3568
+ color = chunkQOWFOMZP_js.shadeColor2(color, 1 - text.fontShade / 1e5);
3559
3569
  }
3560
3570
  style.color = color;
3561
3571
  applied = true;
@@ -3744,7 +3754,7 @@ function parseTableElementData(element, fallbackTextStyle) {
3744
3754
  };
3745
3755
  }
3746
3756
  function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
3747
- return chunkZ2ZC5QTJ_js.getCellDiagonalBorders(style, tableData, pos, {
3757
+ return chunkQOWFOMZP_js.getCellDiagonalBorders(style, tableData, pos, {
3748
3758
  tableStyleMap: styleCtx?.tableStyleMap,
3749
3759
  colorScheme: styleCtx?.theme?.colorScheme,
3750
3760
  fontScheme: styleCtx?.theme?.fontScheme
@@ -3892,9 +3902,9 @@ function cellStyleToCss(style) {
3892
3902
  if (style.gradientFillCss) {
3893
3903
  css.background = style.gradientFillCss;
3894
3904
  } else if (style.fillMode === "pattern" && style.patternFillPreset) {
3895
- const fg = chunkZ2ZC5QTJ_js.normalizeHexColor(style.patternFillForeground, "#000000");
3896
- const bg = chunkZ2ZC5QTJ_js.normalizeHexColor(style.patternFillBackground, "#ffffff");
3897
- const svgPattern = chunkZ2ZC5QTJ_js.getPatternSvg(style.patternFillPreset, fg, bg);
3905
+ const fg = chunkQOWFOMZP_js.normalizeHexColor(style.patternFillForeground, "#000000");
3906
+ const bg = chunkQOWFOMZP_js.normalizeHexColor(style.patternFillBackground, "#ffffff");
3907
+ const svgPattern = chunkQOWFOMZP_js.getPatternSvg(style.patternFillPreset, fg, bg);
3898
3908
  if (svgPattern) {
3899
3909
  const encoded = encodeURIComponent(svgPattern);
3900
3910
  css.backgroundImage = `url("data:image/svg+xml,${encoded}")`;
@@ -3970,7 +3980,7 @@ function cellStyleToCss(style) {
3970
3980
  if (edge.width || edge.color) {
3971
3981
  const w = edge.width ?? 1;
3972
3982
  const c = edge.color ?? style.borderColor ?? "#000000";
3973
- const s = chunkZ2ZC5QTJ_js.ooxmlDashToCssBorderStyle(edge.dash);
3983
+ const s = chunkQOWFOMZP_js.ooxmlDashToCssBorderStyle(edge.dash);
3974
3984
  css[edge.prefix] = `${w}px ${s} ${c}`;
3975
3985
  }
3976
3986
  }
@@ -4001,7 +4011,7 @@ function cellStyleToCss(style) {
4001
4011
  css.textShadow = textShadowParts.join(", ");
4002
4012
  }
4003
4013
  if (style.cell3D) {
4004
- Object.assign(css, chunkZ2ZC5QTJ_js.cell3DBevelCss(style.cell3D));
4014
+ Object.assign(css, chunkQOWFOMZP_js.cell3DBevelCss(style.cell3D));
4005
4015
  }
4006
4016
  return css;
4007
4017
  }
@@ -4015,7 +4025,7 @@ function TableResizeOverlay({
4015
4025
  const containerRef = React6.useRef(null);
4016
4026
  const [rowBounds, setRowBounds] = React6.useState([]);
4017
4027
  const dragRef = React6.useRef(null);
4018
- const colBoundaries = React6.useMemo(() => chunkZ2ZC5QTJ_js.computeColumnBoundaries(columnWidths), [columnWidths]);
4028
+ const colBoundaries = React6.useMemo(() => chunkQOWFOMZP_js.computeColumnBoundaries(columnWidths), [columnWidths]);
4019
4029
  const measureRows = React6.useCallback(() => {
4020
4030
  const container = containerRef.current;
4021
4031
  if (!container) {
@@ -4062,11 +4072,11 @@ function TableResizeOverlay({
4062
4072
  const rect = containerRef.current.getBoundingClientRect();
4063
4073
  if (drag.type === "col" && drag.initialWidths && onResizeColumns) {
4064
4074
  const deltaProp = (e.clientX - drag.startPos) / rect.width;
4065
- onResizeColumns(chunkZ2ZC5QTJ_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
4075
+ onResizeColumns(chunkQOWFOMZP_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
4066
4076
  } else if (drag.type === "row" && onResizeRow) {
4067
4077
  const deltaY = e.clientY - drag.startPos;
4068
- const newHeight = chunkZ2ZC5QTJ_js.computeResizedRowHeight(
4069
- drag.initialRowHeight ?? chunkZ2ZC5QTJ_js.DEFAULT_ROW_HEIGHT,
4078
+ const newHeight = chunkQOWFOMZP_js.computeResizedRowHeight(
4079
+ drag.initialRowHeight ?? chunkQOWFOMZP_js.DEFAULT_ROW_HEIGHT,
4070
4080
  deltaY
4071
4081
  );
4072
4082
  onResizeRow(drag.index, newHeight);
@@ -4104,7 +4114,7 @@ function TableResizeOverlay({
4104
4114
  e.stopPropagation();
4105
4115
  const table = containerRef.current?.querySelector("table");
4106
4116
  const tr = table?.querySelectorAll("tbody > tr")[index];
4107
- const actualHeight = tr?.offsetHeight ?? chunkZ2ZC5QTJ_js.DEFAULT_ROW_HEIGHT;
4117
+ const actualHeight = tr?.offsetHeight ?? chunkQOWFOMZP_js.DEFAULT_ROW_HEIGHT;
4108
4118
  document.body.style.cursor = "row-resize";
4109
4119
  document.body.style.userSelect = "none";
4110
4120
  dragRef.current = {
@@ -4152,7 +4162,7 @@ function renderTableFromTableData(element, textStyle, options) {
4152
4162
  }
4153
4163
  const first = selectedCell.selectedCells[0];
4154
4164
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
4155
- return chunkZ2ZC5QTJ_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
4165
+ return chunkQOWFOMZP_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
4156
4166
  })();
4157
4167
  return /* @__PURE__ */ jsxRuntime.jsx(
4158
4168
  TableResizeOverlay,
@@ -4185,7 +4195,7 @@ function renderTableFromTableData(element, textStyle, options) {
4185
4195
  return null;
4186
4196
  }
4187
4197
  const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
4188
- const isInMultiSelection = chunkZ2ZC5QTJ_js.isCellInRect(rowIndex, cellIndex, selectionRect);
4198
+ const isInMultiSelection = chunkQOWFOMZP_js.isCellInRect(rowIndex, cellIndex, selectionRect);
4189
4199
  const isCellEditing = isCellSelected && selectedCell?.isEditing;
4190
4200
  const diag = getCellDiagonalBorders2(
4191
4201
  cell.style,
@@ -4215,7 +4225,7 @@ function renderTableFromTableData(element, textStyle, options) {
4215
4225
  }
4216
4226
  event.stopPropagation();
4217
4227
  if (event.shiftKey && selectedCell) {
4218
- const rect = chunkZ2ZC5QTJ_js.computeSelectionRect(
4228
+ const rect = chunkQOWFOMZP_js.computeSelectionRect(
4219
4229
  selectedCell.rowIndex,
4220
4230
  selectedCell.columnIndex,
4221
4231
  rowIndex,
@@ -4225,7 +4235,7 @@ function renderTableFromTableData(element, textStyle, options) {
4225
4235
  options?.onSelectCell?.({
4226
4236
  rowIndex: selectedCell.rowIndex,
4227
4237
  columnIndex: selectedCell.columnIndex,
4228
- selectedCells: chunkZ2ZC5QTJ_js.rectToCells(rect)
4238
+ selectedCells: chunkQOWFOMZP_js.rectToCells(rect)
4229
4239
  });
4230
4240
  } else {
4231
4241
  options?.onSelectCell?.({
@@ -4302,7 +4312,7 @@ function renderTableElement(element, textStyle, options) {
4302
4312
  }
4303
4313
  const first = selectedCell.selectedCells[0];
4304
4314
  const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
4305
- return chunkZ2ZC5QTJ_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
4315
+ return chunkQOWFOMZP_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
4306
4316
  })();
4307
4317
  const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
4308
4318
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -4379,7 +4389,7 @@ function renderTableElement(element, textStyle, options) {
4379
4389
  "border px-1 py-0.5 align-top",
4380
4390
  isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
4381
4391
  selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
4382
- chunkZ2ZC5QTJ_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
4392
+ chunkQOWFOMZP_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
4383
4393
  ),
4384
4394
  colSpan,
4385
4395
  rowSpan: rSpan,
@@ -4390,7 +4400,7 @@ function renderTableElement(element, textStyle, options) {
4390
4400
  }
4391
4401
  event.stopPropagation();
4392
4402
  if (event.shiftKey && selectedCell && tableEl.tableData) {
4393
- const rect = chunkZ2ZC5QTJ_js.computeSelectionRect(
4403
+ const rect = chunkQOWFOMZP_js.computeSelectionRect(
4394
4404
  selectedCell.rowIndex,
4395
4405
  selectedCell.columnIndex,
4396
4406
  rowIndex,
@@ -4400,7 +4410,7 @@ function renderTableElement(element, textStyle, options) {
4400
4410
  options?.onSelectCell?.({
4401
4411
  rowIndex: selectedCell.rowIndex,
4402
4412
  columnIndex: selectedCell.columnIndex,
4403
- selectedCells: chunkZ2ZC5QTJ_js.rectToCells(rect)
4413
+ selectedCells: chunkQOWFOMZP_js.rectToCells(rect)
4404
4414
  });
4405
4415
  } else {
4406
4416
  options?.onSelectCell?.({
@@ -4455,24 +4465,24 @@ function renderTableElement(element, textStyle, options) {
4455
4465
  }
4456
4466
  var LEGEND_ITEM_WIDTH = 80;
4457
4467
  function partAttrs(part) {
4458
- return part ? chunkZ2ZC5QTJ_js.chartPartToAttrs(part) : void 0;
4468
+ return part ? chunkQOWFOMZP_js.chartPartToAttrs(part) : void 0;
4459
4469
  }
4460
4470
  function resolveReactPalette(chartData) {
4461
4471
  if (chartData.colorPalette && chartData.colorPalette.length > 0) {
4462
4472
  return chartData.colorPalette;
4463
4473
  }
4464
- return [...chunkZ2ZC5QTJ_js.getChartStylePalette(chartData.style?.styleId)];
4474
+ return [...chunkQOWFOMZP_js.getChartStylePalette(chartData.style?.styleId)];
4465
4475
  }
4466
4476
  function buildReactChartViewModel(element) {
4467
4477
  if (element.type !== "chart" || !element.chartData) {
4468
- return chunkZ2ZC5QTJ_js.buildChartViewModel(element);
4478
+ return chunkQOWFOMZP_js.buildChartViewModel(element);
4469
4479
  }
4470
4480
  const palette = resolveReactPalette(element.chartData);
4471
4481
  const themedElement = {
4472
4482
  ...element,
4473
4483
  chartData: { ...element.chartData, colorPalette: palette }
4474
4484
  };
4475
- return chunkZ2ZC5QTJ_js.buildChartViewModel(themedElement);
4485
+ return chunkQOWFOMZP_js.buildChartViewModel(themedElement);
4476
4486
  }
4477
4487
  function renderPrimitive(prim, key) {
4478
4488
  switch (prim.kind) {
@@ -4861,7 +4871,7 @@ function renderMapChart(element, chartData, categoryLabels) {
4861
4871
  const unmatchedRows = [];
4862
4872
  categories.forEach((cat, i) => {
4863
4873
  const value = values[i] ?? 0;
4864
- const code = chunkZ2ZC5QTJ_js.resolveRegionCode(cat);
4874
+ const code = chunkQOWFOMZP_js.resolveRegionCode(cat);
4865
4875
  if (code) {
4866
4876
  regionValueMap.set(code, { value, label: cat });
4867
4877
  } else {
@@ -4899,8 +4909,8 @@ function renderMapChart(element, chartData, categoryLabels) {
4899
4909
  let fill = "#e2e8f0";
4900
4910
  let dataLabel = null;
4901
4911
  if (entry) {
4902
- const t = chunkZ2ZC5QTJ_js.normalizeValue(entry.value, minVal, maxVal);
4903
- fill = chunkZ2ZC5QTJ_js.sequentialColorScale(t);
4912
+ const t = chunkQOWFOMZP_js.normalizeValue(entry.value, minVal, maxVal);
4913
+ fill = chunkQOWFOMZP_js.sequentialColorScale(t);
4904
4914
  dataLabel = /* @__PURE__ */ jsxRuntime.jsx(
4905
4915
  "text",
4906
4916
  {
@@ -4911,7 +4921,7 @@ function renderMapChart(element, chartData, categoryLabels) {
4911
4921
  fontWeight: 600,
4912
4922
  fill: "#1e293b",
4913
4923
  style: { pointerEvents: "none" },
4914
- children: chunkZ2ZC5QTJ_js.formatAxisValue(entry.value)
4924
+ children: chunkQOWFOMZP_js.formatAxisValue(entry.value)
4915
4925
  },
4916
4926
  `${element.id}-map-dl-${region.code}`
4917
4927
  );
@@ -4929,7 +4939,7 @@ function renderMapChart(element, chartData, categoryLabels) {
4929
4939
  opacity: 0.9,
4930
4940
  children: /* @__PURE__ */ jsxRuntime.jsxs("title", { children: [
4931
4941
  region.name,
4932
- entry ? `: ${chunkZ2ZC5QTJ_js.formatAxisValue(entry.value)}` : ""
4942
+ entry ? `: ${chunkQOWFOMZP_js.formatAxisValue(entry.value)}` : ""
4933
4943
  ] })
4934
4944
  }
4935
4945
  ),
@@ -4967,7 +4977,7 @@ function renderMapChart(element, chartData, categoryLabels) {
4967
4977
  fontSize: 7,
4968
4978
  fill: "#64748b",
4969
4979
  textAnchor: "middle",
4970
- children: chunkZ2ZC5QTJ_js.formatAxisValue(minVal)
4980
+ children: chunkQOWFOMZP_js.formatAxisValue(minVal)
4971
4981
  },
4972
4982
  `${element.id}-map-legend-min`
4973
4983
  ),
@@ -4979,7 +4989,7 @@ function renderMapChart(element, chartData, categoryLabels) {
4979
4989
  fontSize: 7,
4980
4990
  fill: "#64748b",
4981
4991
  textAnchor: "middle",
4982
- children: chunkZ2ZC5QTJ_js.formatAxisValue(maxVal)
4992
+ children: chunkQOWFOMZP_js.formatAxisValue(maxVal)
4983
4993
  },
4984
4994
  `${element.id}-map-legend-max`
4985
4995
  )
@@ -5045,7 +5055,7 @@ function renderMapChart(element, chartData, categoryLabels) {
5045
5055
  y,
5046
5056
  fontSize,
5047
5057
  fill: "#475569",
5048
- children: chunkZ2ZC5QTJ_js.formatAxisValue(row.value)
5058
+ children: chunkQOWFOMZP_js.formatAxisValue(row.value)
5049
5059
  },
5050
5060
  `${element.id}-map-ft-val-${i}`
5051
5061
  )
@@ -5116,7 +5126,7 @@ function renderStackedBarChart(element, _chartData, _categoryLabels) {
5116
5126
 
5117
5127
  // src/viewer/utils/chart-overlay-utils.ts
5118
5128
  function sColor(series, idx) {
5119
- return chunkZ2ZC5QTJ_js.seriesColor(series, idx);
5129
+ return chunkQOWFOMZP_js.seriesColor(series, idx);
5120
5130
  }
5121
5131
  function valToY(val, range, topY, bottomY) {
5122
5132
  const usable = bottomY - topY;
@@ -5655,7 +5665,7 @@ function renderLegend(id, style, series, layout, colorPalette) {
5655
5665
  width: 10,
5656
5666
  height: 10,
5657
5667
  rx: 2,
5658
- fill: chunkZ2ZC5QTJ_js.seriesColor(s, i, style?.styleId, colorPalette)
5668
+ fill: chunkQOWFOMZP_js.seriesColor(s, i, style?.styleId, colorPalette)
5659
5669
  },
5660
5670
  `${id}-leg-r-${i}`
5661
5671
  )
@@ -5679,7 +5689,7 @@ function renderLegend(id, style, series, layout, colorPalette) {
5679
5689
  width: 10,
5680
5690
  height: 10,
5681
5691
  rx: 2,
5682
- fill: chunkZ2ZC5QTJ_js.seriesColor(s, i, style?.styleId, colorPalette)
5692
+ fill: chunkQOWFOMZP_js.seriesColor(s, i, style?.styleId, colorPalette)
5683
5693
  }
5684
5694
  ),
5685
5695
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: x + 14, y: cy + 8, fontSize: 9, fill: "#475569", children: s.name || `Series ${i + 1}` })
@@ -5692,9 +5702,9 @@ function renderGridlines(id, style, range, layout) {
5692
5702
  }
5693
5703
  const lines = [];
5694
5704
  if (range.logScale && range.logBase) {
5695
- const ticks = chunkZ2ZC5QTJ_js.generateLogTicks(range);
5705
+ const ticks = chunkQOWFOMZP_js.generateLogTicks(range);
5696
5706
  ticks.forEach((tickVal, i) => {
5697
- const y = chunkZ2ZC5QTJ_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
5707
+ const y = chunkQOWFOMZP_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
5698
5708
  lines.push(
5699
5709
  /* @__PURE__ */ jsxRuntime.jsx(
5700
5710
  "line",
@@ -5715,7 +5725,7 @@ function renderGridlines(id, style, range, layout) {
5715
5725
  const steps = 4;
5716
5726
  for (let i = 0; i <= steps; i++) {
5717
5727
  const val = range.min + range.span * i / steps;
5718
- const y = chunkZ2ZC5QTJ_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
5728
+ const y = chunkQOWFOMZP_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
5719
5729
  lines.push(
5720
5730
  /* @__PURE__ */ jsxRuntime.jsx(
5721
5731
  "line",
@@ -5739,9 +5749,9 @@ function renderValueAxis(id, range, layout, axisFormatting) {
5739
5749
  const labels = [];
5740
5750
  const hasDisplayUnits = Boolean(axisFormatting?.displayUnits);
5741
5751
  if (range.logScale && range.logBase) {
5742
- const ticks = chunkZ2ZC5QTJ_js.generateLogTicks(range);
5752
+ const ticks = chunkQOWFOMZP_js.generateLogTicks(range);
5743
5753
  ticks.forEach((tickVal, i) => {
5744
- const y = chunkZ2ZC5QTJ_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
5754
+ const y = chunkQOWFOMZP_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
5745
5755
  labels.push(
5746
5756
  /* @__PURE__ */ jsxRuntime.jsx(
5747
5757
  "text",
@@ -5751,7 +5761,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
5751
5761
  textAnchor: "end",
5752
5762
  fontSize: 8,
5753
5763
  fill: "#64748b",
5754
- children: hasDisplayUnits ? chunkZ2ZC5QTJ_js.formatAxisValueWithUnits(tickVal, axisFormatting) : chunkZ2ZC5QTJ_js.formatAxisValue(tickVal)
5764
+ children: hasDisplayUnits ? chunkQOWFOMZP_js.formatAxisValueWithUnits(tickVal, axisFormatting) : chunkQOWFOMZP_js.formatAxisValue(tickVal)
5755
5765
  },
5756
5766
  `${id}-vaxis-log-${i}`
5757
5767
  )
@@ -5761,7 +5771,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
5761
5771
  const steps = 4;
5762
5772
  for (let i = 0; i <= steps; i++) {
5763
5773
  const val = range.min + range.span * i / steps;
5764
- const y = chunkZ2ZC5QTJ_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
5774
+ const y = chunkQOWFOMZP_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
5765
5775
  labels.push(
5766
5776
  /* @__PURE__ */ jsxRuntime.jsx(
5767
5777
  "text",
@@ -5771,7 +5781,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
5771
5781
  textAnchor: "end",
5772
5782
  fontSize: 8,
5773
5783
  fill: "#64748b",
5774
- children: hasDisplayUnits ? chunkZ2ZC5QTJ_js.formatAxisValueWithUnits(val, axisFormatting) : chunkZ2ZC5QTJ_js.formatAxisValue(val)
5784
+ children: hasDisplayUnits ? chunkQOWFOMZP_js.formatAxisValueWithUnits(val, axisFormatting) : chunkQOWFOMZP_js.formatAxisValue(val)
5775
5785
  },
5776
5786
  `${id}-vaxis-${i}`
5777
5787
  )
@@ -5779,7 +5789,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
5779
5789
  }
5780
5790
  }
5781
5791
  if (hasDisplayUnits) {
5782
- const unitLabel = chunkZ2ZC5QTJ_js.getDisplayUnitLabel(
5792
+ const unitLabel = chunkQOWFOMZP_js.getDisplayUnitLabel(
5783
5793
  axisFormatting.displayUnits,
5784
5794
  axisFormatting.displayUnitsLabel
5785
5795
  );
@@ -5854,7 +5864,7 @@ function renderZeroLine(id, range, layout) {
5854
5864
  if (range.min >= 0) {
5855
5865
  return null;
5856
5866
  }
5857
- const y = chunkZ2ZC5QTJ_js.valueToY(0, range, layout.plotTop, layout.plotBottom);
5867
+ const y = chunkQOWFOMZP_js.valueToY(0, range, layout.plotTop, layout.plotBottom);
5858
5868
  return /* @__PURE__ */ jsxRuntime.jsx(
5859
5869
  "line",
5860
5870
  {
@@ -5878,7 +5888,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
5878
5888
  const hasDisplayUnits = Boolean(axisFormatting?.displayUnits);
5879
5889
  for (let i = 0; i <= steps; i++) {
5880
5890
  const val = range.min + range.span * i / steps;
5881
- const y = chunkZ2ZC5QTJ_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
5891
+ const y = chunkQOWFOMZP_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
5882
5892
  labels.push(
5883
5893
  /* @__PURE__ */ jsxRuntime.jsx(
5884
5894
  "text",
@@ -5890,7 +5900,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
5890
5900
  fontFamily,
5891
5901
  fontWeight,
5892
5902
  fill: fontColor,
5893
- children: hasDisplayUnits ? chunkZ2ZC5QTJ_js.formatAxisValueWithUnits(val, axisFormatting) : chunkZ2ZC5QTJ_js.formatAxisValue(val)
5903
+ children: hasDisplayUnits ? chunkQOWFOMZP_js.formatAxisValueWithUnits(val, axisFormatting) : chunkQOWFOMZP_js.formatAxisValue(val)
5894
5904
  },
5895
5905
  `${id}-sec-vaxis-${i}`
5896
5906
  )
@@ -5914,7 +5924,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
5914
5924
  );
5915
5925
  }
5916
5926
  if (hasDisplayUnits) {
5917
- const unitLabel = chunkZ2ZC5QTJ_js.getDisplayUnitLabel(
5927
+ const unitLabel = chunkQOWFOMZP_js.getDisplayUnitLabel(
5918
5928
  axisFormatting.displayUnits,
5919
5929
  axisFormatting.displayUnitsLabel
5920
5930
  );
@@ -5945,7 +5955,7 @@ function renderSecondaryAxisTicks(id, range, layout) {
5945
5955
  const ticks = [];
5946
5956
  for (let i = 0; i <= steps; i++) {
5947
5957
  const val = range.min + range.span * i / steps;
5948
- const y = chunkZ2ZC5QTJ_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
5958
+ const y = chunkQOWFOMZP_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
5949
5959
  ticks.push(
5950
5960
  /* @__PURE__ */ jsxRuntime.jsx(
5951
5961
  "line",
@@ -5972,7 +5982,7 @@ function renderSecondaryGridlines(id, range, layout, axisFormatting) {
5972
5982
  const gridColor = axisFormatting.majorGridlinesSpPr?.strokeColor ?? "#e2e8f0";
5973
5983
  for (let i = 0; i <= steps; i++) {
5974
5984
  const val = range.min + range.span * i / steps;
5975
- const y = chunkZ2ZC5QTJ_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
5985
+ const y = chunkQOWFOMZP_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
5976
5986
  lines.push(
5977
5987
  /* @__PURE__ */ jsxRuntime.jsx(
5978
5988
  "line",
@@ -6134,7 +6144,7 @@ function renderChartDataTable(elementId, chartData, svgWidth) {
6134
6144
  width: 8,
6135
6145
  height: 8,
6136
6146
  borderRadius: 2,
6137
- backgroundColor: chunkZ2ZC5QTJ_js.seriesColor(
6147
+ backgroundColor: chunkQOWFOMZP_js.seriesColor(
6138
6148
  s,
6139
6149
  si,
6140
6150
  chartData.style?.styleId,
@@ -6173,8 +6183,8 @@ function renderChartDataTable(elementId, chartData, svgWidth) {
6173
6183
  function renderStockChart(element, chartData, categoryLabels) {
6174
6184
  const style = chartData.style;
6175
6185
  const legendPos = style?.legendPosition || "b";
6176
- const range = chunkZ2ZC5QTJ_js.computeValueRangeForChart(chartData.series, chartData.axes);
6177
- const layout = chunkZ2ZC5QTJ_js.computeLayout(element.width, element.height, style, true, legendPos);
6186
+ const range = chunkQOWFOMZP_js.computeValueRangeForChart(chartData.series, chartData.axes);
6187
+ const layout = chunkQOWFOMZP_js.computeLayout(element.width, element.height, style, true, legendPos);
6178
6188
  const catCount = Math.max(categoryLabels.length, 1);
6179
6189
  const barGroupWidth = layout.plotWidth / catCount;
6180
6190
  const candleWidth = barGroupWidth * 0.5;
@@ -6195,10 +6205,10 @@ function renderStockChart(element, chartData, categoryLabels) {
6195
6205
  const close = closeSeries.values[ci] ?? high;
6196
6206
  const isUp = close >= open;
6197
6207
  const cx = layout.plotLeft + barGroupWidth * ci + barGroupWidth / 2;
6198
- const highY = chunkZ2ZC5QTJ_js.valueToY(high, range, layout.plotTop, layout.plotBottom);
6199
- const lowY = chunkZ2ZC5QTJ_js.valueToY(low, range, layout.plotTop, layout.plotBottom);
6200
- const openY = chunkZ2ZC5QTJ_js.valueToY(open, range, layout.plotTop, layout.plotBottom);
6201
- const closeY = chunkZ2ZC5QTJ_js.valueToY(close, range, layout.plotTop, layout.plotBottom);
6208
+ const highY = chunkQOWFOMZP_js.valueToY(high, range, layout.plotTop, layout.plotBottom);
6209
+ const lowY = chunkQOWFOMZP_js.valueToY(low, range, layout.plotTop, layout.plotBottom);
6210
+ const openY = chunkQOWFOMZP_js.valueToY(open, range, layout.plotTop, layout.plotBottom);
6211
+ const closeY = chunkQOWFOMZP_js.valueToY(close, range, layout.plotTop, layout.plotBottom);
6202
6212
  elements.push(
6203
6213
  /* @__PURE__ */ jsxRuntime.jsx(
6204
6214
  "line",
@@ -6241,7 +6251,7 @@ function renderStockChart(element, chartData, categoryLabels) {
6241
6251
  textAnchor: "middle",
6242
6252
  fontSize: 7,
6243
6253
  fill: "#334155",
6244
- children: chunkZ2ZC5QTJ_js.formatAxisValue(close)
6254
+ children: chunkQOWFOMZP_js.formatAxisValue(close)
6245
6255
  },
6246
6256
  `${element.id}-stock-dl-${ci}`
6247
6257
  )
@@ -6283,7 +6293,7 @@ function FailedToLoad() {
6283
6293
  var LazySurfaceChart3DScene = React6__default.default.lazy(
6284
6294
  async () => {
6285
6295
  try {
6286
- return await import('./SurfaceChart3DScene-EOJ6FO7H.js');
6296
+ return await import('./SurfaceChart3DScene-YMRRZC5V.js');
6287
6297
  } catch {
6288
6298
  return { default: FailedToLoad };
6289
6299
  }
@@ -6307,7 +6317,7 @@ var SurfaceChart3DErrorBoundary = class extends React6__default.default.Componen
6307
6317
  function buildSurfaceData(chartData, categoryLabels) {
6308
6318
  const rows = chartData.series.length;
6309
6319
  const cols = Math.max(categoryLabels.length, 1);
6310
- const range = chunkZ2ZC5QTJ_js.computeValueRangeForChart(chartData.series, chartData.axes);
6320
+ const range = chunkQOWFOMZP_js.computeValueRangeForChart(chartData.series, chartData.axes);
6311
6321
  const heightMap = new Float32Array(rows * cols);
6312
6322
  const colorMap = new Float32Array(rows * cols * 3);
6313
6323
  for (let r = 0; r < rows; r++) {
@@ -6427,8 +6437,8 @@ function darkenRgb(r, g, b, factor) {
6427
6437
  function renderIsometricSurfaceChart(element, chartData, categoryLabels) {
6428
6438
  const style = chartData.style;
6429
6439
  const legendPos = style?.legendPosition || "b";
6430
- const layout = chunkZ2ZC5QTJ_js.computeLayout(element.width, element.height, style, false, legendPos);
6431
- const range = chunkZ2ZC5QTJ_js.computeValueRangeForChart(chartData.series, chartData.axes);
6440
+ const layout = chunkQOWFOMZP_js.computeLayout(element.width, element.height, style, false, legendPos);
6441
+ const range = chunkQOWFOMZP_js.computeValueRangeForChart(chartData.series, chartData.axes);
6432
6442
  const catCount = Math.max(categoryLabels.length, 1);
6433
6443
  const seriesCount = chartData.series.length;
6434
6444
  const cols = catCount - 1;
@@ -6518,8 +6528,8 @@ function renderIsometricSurfaceChart(element, chartData, categoryLabels) {
6518
6528
  function renderFlatSurfaceChart(element, chartData, categoryLabels) {
6519
6529
  const style = chartData.style;
6520
6530
  const legendPos = style?.legendPosition || "b";
6521
- const layout = chunkZ2ZC5QTJ_js.computeLayout(element.width, element.height, style, true, legendPos);
6522
- const range = chunkZ2ZC5QTJ_js.computeValueRangeForChart(chartData.series, chartData.axes);
6531
+ const layout = chunkQOWFOMZP_js.computeLayout(element.width, element.height, style, true, legendPos);
6532
+ const range = chunkQOWFOMZP_js.computeValueRangeForChart(chartData.series, chartData.axes);
6523
6533
  const catCount = Math.max(categoryLabels.length, 1);
6524
6534
  const seriesCount = chartData.series.length;
6525
6535
  const cellW = layout.plotWidth / Math.max(catCount - 1, 1);
@@ -6582,7 +6592,7 @@ function renderSurfaceChart(element, chartData, categoryLabels) {
6582
6592
  function renderTreemapChart(element, chartData, categoryLabels) {
6583
6593
  const style = chartData.style;
6584
6594
  const legendPos = style?.legendPosition || "b";
6585
- const layout = chunkZ2ZC5QTJ_js.computeLayout(element.width, element.height, style, false, legendPos);
6595
+ const layout = chunkQOWFOMZP_js.computeLayout(element.width, element.height, style, false, legendPos);
6586
6596
  const allValues = chartData.series.flatMap((s) => s.values);
6587
6597
  const totalAbs = allValues.reduce((sum, v) => sum + Math.abs(v), 0) || 1;
6588
6598
  const rects = [];
@@ -6605,7 +6615,7 @@ function renderTreemapChart(element, chartData, categoryLabels) {
6605
6615
  y: curY,
6606
6616
  width: Math.max(w - 1, 1),
6607
6617
  height: Math.max(h - 1, 1),
6608
- fill: chunkZ2ZC5QTJ_js.paletteColor(item.index, chartData.style?.styleId, chartData.colorPalette),
6618
+ fill: chunkQOWFOMZP_js.paletteColor(item.index, chartData.style?.styleId, chartData.colorPalette),
6609
6619
  rx: 2,
6610
6620
  opacity: 0.85
6611
6621
  },
@@ -6658,8 +6668,8 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
6658
6668
  const style = chartData.style;
6659
6669
  const legendPos = style?.legendPosition || "b";
6660
6670
  const values = chartData.series[0]?.values ?? [];
6661
- const range = chunkZ2ZC5QTJ_js.computeValueRangeForChart(chartData.series, chartData.axes);
6662
- const layout = chunkZ2ZC5QTJ_js.computeLayout(element.width, element.height, style, true, legendPos);
6671
+ const range = chunkQOWFOMZP_js.computeValueRangeForChart(chartData.series, chartData.axes);
6672
+ const layout = chunkQOWFOMZP_js.computeLayout(element.width, element.height, style, true, legendPos);
6663
6673
  const catCount = Math.max(categoryLabels.length, values.length, 1);
6664
6674
  const barWidth = layout.plotWidth / catCount * 0.6;
6665
6675
  const gap = layout.plotWidth / catCount * 0.2;
@@ -6670,8 +6680,8 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
6670
6680
  const isLast = i === values.length - 1;
6671
6681
  const startVal = isLast ? 0 : runningTotal;
6672
6682
  const endVal = isLast ? runningTotal + val : runningTotal + val;
6673
- const barStartY = chunkZ2ZC5QTJ_js.valueToY(startVal, range, layout.plotTop, layout.plotBottom);
6674
- const barEndY = chunkZ2ZC5QTJ_js.valueToY(endVal, range, layout.plotTop, layout.plotBottom);
6683
+ const barStartY = chunkQOWFOMZP_js.valueToY(startVal, range, layout.plotTop, layout.plotBottom);
6684
+ const barEndY = chunkQOWFOMZP_js.valueToY(endVal, range, layout.plotTop, layout.plotBottom);
6675
6685
  const x = layout.plotLeft + layout.plotWidth / catCount * i + gap;
6676
6686
  const y = Math.min(barStartY, barEndY);
6677
6687
  const h = Math.max(Math.abs(barEndY - barStartY), 1);
@@ -6700,7 +6710,7 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
6700
6710
  textAnchor: "middle",
6701
6711
  fontSize: 7,
6702
6712
  fill: "#334155",
6703
- children: chunkZ2ZC5QTJ_js.formatAxisValue(isLast ? endVal : val)
6713
+ children: chunkQOWFOMZP_js.formatAxisValue(isLast ? endVal : val)
6704
6714
  },
6705
6715
  `${element.id}-wf-dl-${i}`
6706
6716
  )
@@ -6748,18 +6758,18 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
6748
6758
  function renderComboChart(element, chartData, categoryLabels) {
6749
6759
  const style = chartData.style;
6750
6760
  const legendPos = style?.legendPosition || "b";
6751
- const layoutOpts = chunkZ2ZC5QTJ_js.computeLayoutOptions(
6761
+ const layoutOpts = chunkQOWFOMZP_js.computeLayoutOptions(
6752
6762
  chartData.axes,
6753
6763
  chartData.dataTable,
6754
6764
  chartData.series.length
6755
6765
  );
6756
- const layout = chunkZ2ZC5QTJ_js.computeLayout(element.width, element.height, style, true, legendPos, layoutOpts);
6757
- const { primary, secondary } = chunkZ2ZC5QTJ_js.splitSeriesByAxis(chartData.series, chartData.axes);
6766
+ const layout = chunkQOWFOMZP_js.computeLayout(element.width, element.height, style, true, legendPos, layoutOpts);
6767
+ const { primary, secondary } = chunkQOWFOMZP_js.splitSeriesByAxis(chartData.series, chartData.axes);
6758
6768
  const primarySeries = primary.length > 0 ? primary.map((e) => e.series) : chartData.series;
6759
6769
  const secondarySeries = secondary.map((e) => e.series);
6760
- const range = chunkZ2ZC5QTJ_js.computeValueRangeForChart(primarySeries, chartData.axes);
6761
- const secondaryRange = secondarySeries.length > 0 ? chunkZ2ZC5QTJ_js.computeValueRange(secondarySeries) : void 0;
6762
- const secondaryAxisFmt = chunkZ2ZC5QTJ_js.getSecondaryValueAxis(chartData.axes);
6770
+ const range = chunkQOWFOMZP_js.computeValueRangeForChart(primarySeries, chartData.axes);
6771
+ const secondaryRange = secondarySeries.length > 0 ? chunkQOWFOMZP_js.computeValueRange(secondarySeries) : void 0;
6772
+ const secondaryAxisFmt = chunkQOWFOMZP_js.getSecondaryValueAxis(chartData.axes);
6763
6773
  const catCount = Math.max(categoryLabels.length, 1);
6764
6774
  const barSeriesCount = 1;
6765
6775
  const barGroupWidth = layout.plotWidth / catCount;
@@ -6775,8 +6785,8 @@ function renderComboChart(element, chartData, categoryLabels) {
6775
6785
  const barRange = isBarSecondary && secondaryRange ? secondaryRange : range;
6776
6786
  barSeries.values.forEach((val, vi) => {
6777
6787
  const x = layout.plotLeft + barGroupWidth * vi + barOffset;
6778
- const zeroY = chunkZ2ZC5QTJ_js.valueToY(0, barRange, layout.plotTop, layout.plotBottom);
6779
- const valY = chunkZ2ZC5QTJ_js.valueToY(val, barRange, layout.plotTop, layout.plotBottom);
6788
+ const zeroY = chunkQOWFOMZP_js.valueToY(0, barRange, layout.plotTop, layout.plotBottom);
6789
+ const valY = chunkQOWFOMZP_js.valueToY(val, barRange, layout.plotTop, layout.plotBottom);
6780
6790
  const y = Math.min(zeroY, valY);
6781
6791
  const h = Math.max(Math.abs(zeroY - valY), 1);
6782
6792
  barElements.push(
@@ -6787,7 +6797,7 @@ function renderComboChart(element, chartData, categoryLabels) {
6787
6797
  y,
6788
6798
  width: barWidth,
6789
6799
  height: h,
6790
- fill: chunkZ2ZC5QTJ_js.seriesColor(barSeries, 0, chartData.style?.styleId, chartData.colorPalette),
6800
+ fill: chunkQOWFOMZP_js.seriesColor(barSeries, 0, chartData.style?.styleId, chartData.colorPalette),
6791
6801
  rx: 1
6792
6802
  },
6793
6803
  `${element.id}-combo-bar-${vi}`
@@ -6803,7 +6813,7 @@ function renderComboChart(element, chartData, categoryLabels) {
6803
6813
  textAnchor: "middle",
6804
6814
  fontSize: 7,
6805
6815
  fill: "#334155",
6806
- children: chunkZ2ZC5QTJ_js.formatAxisValue(val)
6816
+ children: chunkQOWFOMZP_js.formatAxisValue(val)
6807
6817
  },
6808
6818
  `${element.id}-combo-bar-dl-${vi}`
6809
6819
  )
@@ -6820,10 +6830,10 @@ function renderComboChart(element, chartData, categoryLabels) {
6820
6830
  const activeRange = isSecondary && secondaryRange ? secondaryRange : range;
6821
6831
  const points = series.values.map((val, vi) => {
6822
6832
  const x = layout.plotLeft + barGroupWidth * vi + barGroupWidth / 2;
6823
- const y = chunkZ2ZC5QTJ_js.valueToY(val, activeRange, layout.plotTop, layout.plotBottom);
6833
+ const y = chunkQOWFOMZP_js.valueToY(val, activeRange, layout.plotTop, layout.plotBottom);
6824
6834
  return { x, y, val };
6825
6835
  });
6826
- const c = chunkZ2ZC5QTJ_js.seriesColor(series, seriesIdx, chartData.style?.styleId, chartData.colorPalette);
6836
+ const c = chunkQOWFOMZP_js.seriesColor(series, seriesIdx, chartData.style?.styleId, chartData.colorPalette);
6827
6837
  lineElements.push(
6828
6838
  /* @__PURE__ */ jsxRuntime.jsx(
6829
6839
  "polyline",
@@ -6850,7 +6860,7 @@ function renderComboChart(element, chartData, categoryLabels) {
6850
6860
  textAnchor: "middle",
6851
6861
  fontSize: 7,
6852
6862
  fill: "#334155",
6853
- children: chunkZ2ZC5QTJ_js.formatAxisValue(p.val)
6863
+ children: chunkQOWFOMZP_js.formatAxisValue(p.val)
6854
6864
  },
6855
6865
  `${element.id}-combo-line-dl-${si}-${vi}`
6856
6866
  )
@@ -7996,14 +8006,14 @@ function buildNotesPdf(pages) {
7996
8006
  notes: page.notes,
7997
8007
  slideNumber: page.slideNumber
7998
8008
  }));
7999
- const bytes = chunkZ2ZC5QTJ_js.buildNotesPdfBytes(images, meta);
8009
+ const bytes = chunkQOWFOMZP_js.buildNotesPdfBytes(images, meta);
8000
8010
  const blob = new Blob([bytes], { type: "application/pdf" });
8001
8011
  return URL.createObjectURL(blob);
8002
8012
  }
8003
8013
 
8004
8014
  // src/viewer/utils/pdf-builder-slides.ts
8005
8015
  function buildPdfFromImageData(images) {
8006
- const bytes = chunkZ2ZC5QTJ_js.buildSlidesPdfBytes(images);
8016
+ const bytes = chunkQOWFOMZP_js.buildSlidesPdfBytes(images);
8007
8017
  const blob = new Blob([bytes], { type: "application/pdf" });
8008
8018
  return URL.createObjectURL(blob);
8009
8019
  }
@@ -8012,7 +8022,7 @@ function buildPdfFromImageData(images) {
8012
8022
  var activePreview = null;
8013
8023
  function startPreviewAnimation(elementId, preset, options) {
8014
8024
  stopPreviewAnimation();
8015
- const descriptor = chunkZ2ZC5QTJ_js.buildPreviewAnimation(preset, options);
8025
+ const descriptor = chunkQOWFOMZP_js.buildPreviewAnimation(preset, options);
8016
8026
  if (!descriptor) {
8017
8027
  return;
8018
8028
  }