pptx-react-viewer 2.6.4 → 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.
- package/CHANGELOG.md +6 -0
- package/dist/{AiChatPanel-5JEL2M7L.mjs → AiChatPanel-E5PVW4MN.mjs} +3 -3
- package/dist/AiChatPanel-E5PVW4MN.mjs.br +0 -0
- package/dist/AiChatPanel-E5PVW4MN.mjs.gz +0 -0
- package/dist/{AiChatPanel-GMP3TU7S.js → AiChatPanel-I22AHEBC.js} +22 -22
- package/dist/AiChatPanel-I22AHEBC.js.br +0 -0
- package/dist/AiChatPanel-I22AHEBC.js.gz +0 -0
- package/dist/{Model3DScene-LPA4HGFY.mjs → Model3DScene-UYOY6QJN.mjs} +1 -1
- package/dist/Model3DScene-UYOY6QJN.mjs.br +0 -0
- package/dist/Model3DScene-UYOY6QJN.mjs.gz +0 -0
- package/dist/{Model3DScene-E4WWASL7.js → Model3DScene-VC3HMMBO.js} +2 -2
- package/dist/Model3DScene-VC3HMMBO.js.br +0 -0
- package/dist/Model3DScene-VC3HMMBO.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-JT64KYVP.mjs → SurfaceChart3DScene-PDULQ4DY.mjs} +1 -1
- package/dist/{SurfaceChart3DScene-JT64KYVP.mjs.br → SurfaceChart3DScene-PDULQ4DY.mjs.br} +0 -0
- package/dist/SurfaceChart3DScene-PDULQ4DY.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-EOJ6FO7H.js → SurfaceChart3DScene-YMRRZC5V.js} +2 -2
- package/dist/SurfaceChart3DScene-YMRRZC5V.js.br +0 -0
- package/dist/SurfaceChart3DScene-YMRRZC5V.js.gz +0 -0
- package/dist/{chunk-HHUBO5OD.mjs → chunk-5QS6ANI7.mjs} +1 -1
- package/dist/chunk-5QS6ANI7.mjs.br +0 -0
- package/dist/chunk-5QS6ANI7.mjs.gz +0 -0
- package/dist/{chunk-K26WJWSH.js → chunk-5XXNNTE2.js} +849 -845
- package/dist/chunk-5XXNNTE2.js.br +0 -0
- package/dist/chunk-5XXNNTE2.js.gz +0 -0
- package/dist/{chunk-NZYSI3BL.js → chunk-AB4WM3RK.js} +253 -243
- package/dist/chunk-AB4WM3RK.js.br +0 -0
- package/dist/chunk-AB4WM3RK.js.gz +0 -0
- package/dist/{chunk-MVXW7BHH.mjs → chunk-B7DXNZPM.mjs} +2 -2
- package/dist/chunk-B7DXNZPM.mjs.br +0 -0
- package/dist/chunk-B7DXNZPM.mjs.gz +0 -0
- package/dist/{chunk-CZPAFVPN.js → chunk-C4JFU2XG.js} +315 -315
- package/dist/chunk-C4JFU2XG.js.br +0 -0
- package/dist/chunk-C4JFU2XG.js.gz +0 -0
- package/dist/{chunk-PQDHPMQG.mjs → chunk-CKERNV36.mjs} +13 -9
- package/dist/chunk-CKERNV36.mjs.br +0 -0
- package/dist/chunk-CKERNV36.mjs.gz +0 -0
- package/dist/{chunk-GMW7VRFD.mjs → chunk-LR546YFN.mjs} +75 -5
- package/dist/chunk-LR546YFN.mjs.br +0 -0
- package/dist/{chunk-GMW7VRFD.mjs.gz → chunk-LR546YFN.mjs.gz} +0 -0
- package/dist/{chunk-Z2ZC5QTJ.js → chunk-QOWFOMZP.js} +75 -5
- package/dist/chunk-QOWFOMZP.js.br +0 -0
- package/dist/{chunk-Z2ZC5QTJ.js.gz → chunk-QOWFOMZP.js.gz} +0 -0
- package/dist/{chunk-D754TQ4S.js → chunk-TJFZ7ZP6.js} +3 -3
- package/dist/chunk-TJFZ7ZP6.js.br +0 -0
- package/dist/{chunk-D754TQ4S.js.gz → chunk-TJFZ7ZP6.js.gz} +0 -0
- package/dist/{chunk-A3WQ6JDW.mjs → chunk-Y6WE6JJO.mjs} +20 -10
- package/dist/chunk-Y6WE6JJO.mjs.br +0 -0
- package/dist/chunk-Y6WE6JJO.mjs.gz +0 -0
- package/dist/index.js +34 -34
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.js +78 -78
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +3 -3
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/viewer/index.js +21 -21
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +5 -5
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +1 -1
- package/dist/AiChatPanel-5JEL2M7L.mjs.br +0 -0
- package/dist/AiChatPanel-5JEL2M7L.mjs.gz +0 -0
- package/dist/AiChatPanel-GMP3TU7S.js.br +0 -0
- package/dist/AiChatPanel-GMP3TU7S.js.gz +0 -0
- package/dist/Model3DScene-E4WWASL7.js.br +0 -0
- package/dist/Model3DScene-E4WWASL7.js.gz +0 -0
- package/dist/Model3DScene-LPA4HGFY.mjs.br +0 -0
- package/dist/Model3DScene-LPA4HGFY.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-EOJ6FO7H.js.br +0 -0
- package/dist/SurfaceChart3DScene-EOJ6FO7H.js.gz +0 -0
- package/dist/SurfaceChart3DScene-JT64KYVP.mjs.gz +0 -0
- package/dist/chunk-A3WQ6JDW.mjs.br +0 -0
- package/dist/chunk-A3WQ6JDW.mjs.gz +0 -0
- package/dist/chunk-CZPAFVPN.js.br +0 -0
- package/dist/chunk-CZPAFVPN.js.gz +0 -0
- package/dist/chunk-D754TQ4S.js.br +0 -0
- package/dist/chunk-GMW7VRFD.mjs.br +0 -0
- package/dist/chunk-HHUBO5OD.mjs.br +0 -0
- package/dist/chunk-HHUBO5OD.mjs.gz +0 -0
- package/dist/chunk-K26WJWSH.js.br +0 -0
- package/dist/chunk-K26WJWSH.js.gz +0 -0
- package/dist/chunk-MVXW7BHH.mjs.br +0 -0
- package/dist/chunk-MVXW7BHH.mjs.gz +0 -0
- package/dist/chunk-NZYSI3BL.js.br +0 -0
- package/dist/chunk-NZYSI3BL.js.gz +0 -0
- package/dist/chunk-PQDHPMQG.mjs.br +0 -0
- package/dist/chunk-PQDHPMQG.mjs.gz +0 -0
- 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
|
|
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
|
|
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
|
|
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 =
|
|
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 (!
|
|
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) =>
|
|
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) => !
|
|
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 (!
|
|
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 =
|
|
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 =
|
|
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 (!
|
|
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 =
|
|
324
|
-
const cropTop =
|
|
325
|
-
const cropRight =
|
|
326
|
-
const 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 =
|
|
339
|
-
const normalizedRight =
|
|
340
|
-
const normalizedTop =
|
|
341
|
-
const normalizedBottom =
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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 =
|
|
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 (!
|
|
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 ?
|
|
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 =
|
|
1198
|
-
const textOrientation =
|
|
1199
|
-
const verticalDirection =
|
|
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 ?
|
|
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:
|
|
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
|
-
...
|
|
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 (!
|
|
1268
|
+
if (!chunkQOWFOMZP_js.hasTextProperties(element)) {
|
|
1269
1269
|
return {};
|
|
1270
1270
|
}
|
|
1271
1271
|
const verticalAlign = element.textStyle?.vAlign || "top";
|
|
1272
|
-
const writingMode =
|
|
1273
|
-
const textOrientation =
|
|
1274
|
-
const verticalDirection =
|
|
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 =
|
|
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 =
|
|
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
|
|
1338
|
+
return chunkQOWFOMZP_js.buildTextFillCss(style);
|
|
1339
1339
|
}
|
|
1340
1340
|
function buildTextBody3DSceneStyle2(textStyle) {
|
|
1341
|
-
return
|
|
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}${
|
|
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 =
|
|
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:
|
|
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 =
|
|
1694
|
+
const runs = chunkQOWFOMZP_js.segmentByScript(text);
|
|
1695
1695
|
if (runs.length <= 1) {
|
|
1696
1696
|
if (runs.length === 1) {
|
|
1697
|
-
const font =
|
|
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 =
|
|
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 =
|
|
1778
|
-
const safeMathml = 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 =
|
|
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
|
|
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 ?
|
|
1889
|
-
const underlineDecoration =
|
|
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 ?
|
|
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 =
|
|
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 ?
|
|
1931
|
+
backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ? chunkQOWFOMZP_js.normalizeHexColor(segmentStyle.highlightColor, "transparent") : void 0,
|
|
1931
1932
|
...textFillStyles,
|
|
1932
|
-
textDecorationColor: segmentStyle.underlineColor ?
|
|
1933
|
-
WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${
|
|
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:
|
|
1936
|
-
filter:
|
|
1937
|
-
opacity:
|
|
1938
|
-
WebkitBoxReflect:
|
|
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 =
|
|
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 =
|
|
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 (!
|
|
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 =
|
|
2115
|
-
const elementRtl =
|
|
2116
|
-
const elementAlign =
|
|
2117
|
-
const bodyStyle =
|
|
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 =
|
|
2138
|
+
const paraRtl = chunkQOWFOMZP_js.resolveParagraphRtl(paraSegments, elementRtl);
|
|
2133
2139
|
const isRtlParagraph = paraRtl === true;
|
|
2134
|
-
const paraAlign =
|
|
2135
|
-
const cssTextAlign =
|
|
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 =
|
|
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 =
|
|
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 (!
|
|
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 (!
|
|
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 ${
|
|
2267
|
-
|
|
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 (!
|
|
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 =
|
|
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 (!
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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" :
|
|
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" || !
|
|
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 =
|
|
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 (!
|
|
2453
|
+
if (!chunkQOWFOMZP_js.hasShapeProperties(element)) {
|
|
2444
2454
|
return {};
|
|
2445
2455
|
}
|
|
2446
2456
|
const normalizedShapeType = getShapeType(element.shapeType);
|
|
2447
|
-
const clipPath =
|
|
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 =
|
|
2453
|
-
const fillGradient =
|
|
2454
|
-
const shadowCss =
|
|
2455
|
-
const innerShadowCss =
|
|
2456
|
-
const resolvedFillColor =
|
|
2457
|
-
const resolvedStrokeColor =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(#${
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 ?
|
|
2576
|
+
borderWidth: strokeWidth > 0 ? chunkQOWFOMZP_js.getCompoundLineBorderWidth(ss?.compoundLine, strokeWidth) : 0,
|
|
2567
2577
|
borderColor: strokeWidth > 0 ? resolvedStrokeColor : void 0,
|
|
2568
|
-
borderStyle: strokeWidth > 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:
|
|
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
|
|
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
|
|
2652
|
+
return chunkQOWFOMZP_js.clampUnitInterval(fallbackKey / 1e5);
|
|
2643
2653
|
}
|
|
2644
|
-
return
|
|
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:
|
|
2791
|
+
lineCap: chunkQOWFOMZP_js.svgLineCap(shapeStyle?.lineCap),
|
|
2782
2792
|
lineJoin,
|
|
2783
2793
|
miterLimit,
|
|
2784
|
-
offsets:
|
|
2785
|
-
widths:
|
|
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 ?
|
|
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" :
|
|
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 (!
|
|
2891
|
+
if (!chunkQOWFOMZP_js.hasShapeProperties(element)) {
|
|
2882
2892
|
return null;
|
|
2883
2893
|
}
|
|
2884
2894
|
const normalizedType = (element.shapeType || "").toLowerCase();
|
|
2885
|
-
const fillPaint = animatesFill ? "inherit" :
|
|
2886
|
-
const strokePaint = animatesStroke ? "inherit" :
|
|
2887
|
-
const dashType =
|
|
2888
|
-
const dashArray =
|
|
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 (
|
|
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 =
|
|
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 =
|
|
2978
|
-
const bounds =
|
|
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 =
|
|
3051
|
+
const connectorLineCap = chunkQOWFOMZP_js.svgLineCap(element.shapeStyle?.lineCap);
|
|
3042
3052
|
const hitTargetWidth = Math.max(strokeWidth * 3, 12);
|
|
3043
|
-
const offsets =
|
|
3044
|
-
const widths =
|
|
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 =
|
|
3124
|
-
const opacity =
|
|
3125
|
-
return { pos, color:
|
|
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(
|
|
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 =
|
|
3167
|
-
const bgColor =
|
|
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 =
|
|
3288
|
+
const color = chunkQOWFOMZP_js.parseDrawingColor(ln["a:solidFill"]);
|
|
3279
3289
|
if (color) {
|
|
3280
|
-
const opacity =
|
|
3290
|
+
const opacity = chunkQOWFOMZP_js.parseDrawingColorOpacity(ln["a:solidFill"]);
|
|
3281
3291
|
const key = `${edge.prefix}`;
|
|
3282
|
-
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${
|
|
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 =
|
|
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 =
|
|
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 =
|
|
3402
|
+
const runColor = chunkQOWFOMZP_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkQOWFOMZP_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
|
|
3393
3403
|
if (runColor) {
|
|
3394
|
-
const opacity =
|
|
3395
|
-
cellStyle.color =
|
|
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 =
|
|
3415
|
+
const cellFill = chunkQOWFOMZP_js.parseDrawingColor(
|
|
3406
3416
|
cellProperties?.["a:solidFill"],
|
|
3407
3417
|
schemeColorOverrides
|
|
3408
3418
|
);
|
|
3409
3419
|
if (cellFill) {
|
|
3410
|
-
const opacity =
|
|
3420
|
+
const opacity = chunkQOWFOMZP_js.parseDrawingColorOpacity(
|
|
3411
3421
|
cellProperties?.["a:solidFill"]
|
|
3412
3422
|
);
|
|
3413
|
-
cellStyle.backgroundColor =
|
|
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 =
|
|
3438
|
+
const borderColor = chunkQOWFOMZP_js.parseDrawingColor(
|
|
3429
3439
|
cellProperties?.["a:lnL"]?.["a:solidFill"],
|
|
3430
3440
|
schemeColorOverrides
|
|
3431
|
-
) ||
|
|
3441
|
+
) || chunkQOWFOMZP_js.parseDrawingColor(
|
|
3432
3442
|
cellProperties?.["a:lnR"]?.["a:solidFill"],
|
|
3433
3443
|
schemeColorOverrides
|
|
3434
|
-
) ||
|
|
3444
|
+
) || chunkQOWFOMZP_js.parseDrawingColor(
|
|
3435
3445
|
cellProperties?.["a:lnT"]?.["a:solidFill"],
|
|
3436
3446
|
schemeColorOverrides
|
|
3437
|
-
) ||
|
|
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 =
|
|
3526
|
+
color = chunkQOWFOMZP_js.tintColor2(color, fill.tint / 1e5);
|
|
3517
3527
|
}
|
|
3518
3528
|
if (fill.shade !== void 0 && fill.shade > 0) {
|
|
3519
|
-
color =
|
|
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 =
|
|
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 =
|
|
3565
|
+
color = chunkQOWFOMZP_js.tintColor2(color, text.fontTint / 1e5);
|
|
3556
3566
|
}
|
|
3557
3567
|
if (text.fontShade !== void 0 && text.fontShade > 0) {
|
|
3558
|
-
color =
|
|
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
|
|
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 =
|
|
3896
|
-
const bg =
|
|
3897
|
-
const svgPattern =
|
|
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 =
|
|
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,
|
|
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(() =>
|
|
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(
|
|
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 =
|
|
4069
|
-
drag.initialRowHeight ??
|
|
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 ??
|
|
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
|
|
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 =
|
|
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 =
|
|
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:
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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:
|
|
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 ?
|
|
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 [...
|
|
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
|
|
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
|
|
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 =
|
|
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 =
|
|
4903
|
-
fill =
|
|
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:
|
|
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 ? `: ${
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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 =
|
|
5705
|
+
const ticks = chunkQOWFOMZP_js.generateLogTicks(range);
|
|
5696
5706
|
ticks.forEach((tickVal, i) => {
|
|
5697
|
-
const y =
|
|
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 =
|
|
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 =
|
|
5752
|
+
const ticks = chunkQOWFOMZP_js.generateLogTicks(range);
|
|
5743
5753
|
ticks.forEach((tickVal, i) => {
|
|
5744
|
-
const y =
|
|
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 ?
|
|
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 =
|
|
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 ?
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 ?
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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:
|
|
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 =
|
|
6177
|
-
const layout =
|
|
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 =
|
|
6199
|
-
const lowY =
|
|
6200
|
-
const openY =
|
|
6201
|
-
const closeY =
|
|
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:
|
|
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-
|
|
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 =
|
|
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 =
|
|
6431
|
-
const range =
|
|
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 =
|
|
6522
|
-
const range =
|
|
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 =
|
|
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:
|
|
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 =
|
|
6662
|
-
const layout =
|
|
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 =
|
|
6674
|
-
const barEndY =
|
|
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:
|
|
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 =
|
|
6761
|
+
const layoutOpts = chunkQOWFOMZP_js.computeLayoutOptions(
|
|
6752
6762
|
chartData.axes,
|
|
6753
6763
|
chartData.dataTable,
|
|
6754
6764
|
chartData.series.length
|
|
6755
6765
|
);
|
|
6756
|
-
const layout =
|
|
6757
|
-
const { primary, secondary } =
|
|
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 =
|
|
6761
|
-
const secondaryRange = secondarySeries.length > 0 ?
|
|
6762
|
-
const secondaryAxisFmt =
|
|
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 =
|
|
6779
|
-
const valY =
|
|
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:
|
|
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:
|
|
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 =
|
|
6833
|
+
const y = chunkQOWFOMZP_js.valueToY(val, activeRange, layout.plotTop, layout.plotBottom);
|
|
6824
6834
|
return { x, y, val };
|
|
6825
6835
|
});
|
|
6826
|
-
const c =
|
|
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:
|
|
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 =
|
|
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 =
|
|
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 =
|
|
8025
|
+
const descriptor = chunkQOWFOMZP_js.buildPreviewAnimation(preset, options);
|
|
8016
8026
|
if (!descriptor) {
|
|
8017
8027
|
return;
|
|
8018
8028
|
}
|