pptx-react-viewer 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/{AiChatPanel-SXYMXFYS.mjs → AiChatPanel-EMF3UYCE.mjs} +3 -3
- package/dist/AiChatPanel-EMF3UYCE.mjs.br +0 -0
- package/dist/AiChatPanel-EMF3UYCE.mjs.gz +0 -0
- package/dist/{AiChatPanel-HLLGXBZF.js → AiChatPanel-OHSLJNYG.js} +22 -22
- package/dist/AiChatPanel-OHSLJNYG.js.br +0 -0
- package/dist/AiChatPanel-OHSLJNYG.js.gz +0 -0
- package/dist/{Model3DScene-ZQBWLAMC.js → Model3DScene-ULHIJPMU.js} +2 -2
- package/dist/Model3DScene-ULHIJPMU.js.br +0 -0
- package/dist/Model3DScene-ULHIJPMU.js.gz +0 -0
- package/dist/{Model3DScene-IECT4RWT.mjs → Model3DScene-X6QJTWHV.mjs} +1 -1
- package/dist/{Model3DScene-IECT4RWT.mjs.br → Model3DScene-X6QJTWHV.mjs.br} +0 -0
- package/dist/Model3DScene-X6QJTWHV.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-4KRMRWW6.js → SurfaceChart3DScene-K7Q5NYZ4.js} +2 -2
- package/dist/SurfaceChart3DScene-K7Q5NYZ4.js.br +0 -0
- package/dist/SurfaceChart3DScene-K7Q5NYZ4.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-52C3IMPQ.mjs → SurfaceChart3DScene-PRCKQJQQ.mjs} +1 -1
- package/dist/{SurfaceChart3DScene-52C3IMPQ.mjs.br → SurfaceChart3DScene-PRCKQJQQ.mjs.br} +0 -0
- package/dist/SurfaceChart3DScene-PRCKQJQQ.mjs.gz +0 -0
- package/dist/{chunk-VEZO33T2.js → chunk-7Q7AEPO7.js} +378 -324
- package/dist/chunk-7Q7AEPO7.js.br +0 -0
- package/dist/chunk-7Q7AEPO7.js.gz +0 -0
- package/dist/{chunk-XSBFV6TL.js → chunk-I4AFCPUC.js} +843 -844
- package/dist/chunk-I4AFCPUC.js.br +0 -0
- package/dist/chunk-I4AFCPUC.js.gz +0 -0
- package/dist/{chunk-KK7FWBGO.mjs → chunk-JSFUU2BB.mjs} +7 -8
- package/dist/chunk-JSFUU2BB.mjs.br +0 -0
- package/dist/chunk-JSFUU2BB.mjs.gz +0 -0
- package/dist/{chunk-LRIXPSVT.mjs → chunk-LIQGO45T.mjs} +72 -18
- package/dist/chunk-LIQGO45T.mjs.br +0 -0
- package/dist/chunk-LIQGO45T.mjs.gz +0 -0
- package/dist/{chunk-WK56SFN7.js → chunk-LTEDT475.js} +392 -68
- package/dist/chunk-LTEDT475.js.br +0 -0
- package/dist/chunk-LTEDT475.js.gz +0 -0
- package/dist/{chunk-5GHLRHBR.js → chunk-MJAEB43A.js} +3 -3
- package/dist/chunk-MJAEB43A.js.br +0 -0
- package/dist/chunk-MJAEB43A.js.gz +0 -0
- package/dist/{chunk-5TPQJWEO.js → chunk-NVH3RIN7.js} +271 -279
- package/dist/chunk-NVH3RIN7.js.br +0 -0
- package/dist/chunk-NVH3RIN7.js.gz +0 -0
- package/dist/{chunk-G6Q3NXRV.mjs → chunk-TGVID6BB.mjs} +40 -48
- package/dist/chunk-TGVID6BB.mjs.br +0 -0
- package/dist/chunk-TGVID6BB.mjs.gz +0 -0
- package/dist/{chunk-QBZA2GMB.mjs → chunk-VOV2N3NY.mjs} +388 -69
- package/dist/chunk-VOV2N3NY.mjs.br +0 -0
- package/dist/chunk-VOV2N3NY.mjs.gz +0 -0
- package/dist/{chunk-Q6FC2552.mjs → chunk-WJKMTDXS.mjs} +1 -1
- package/dist/chunk-WJKMTDXS.mjs.br +0 -0
- package/dist/chunk-WJKMTDXS.mjs.gz +0 -0
- package/dist/index.d.ts +33 -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.d.ts +58 -1
- package/dist/internals.d.ts.map +1 -1
- 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.d.ts +33 -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-HLLGXBZF.js.br +0 -0
- package/dist/AiChatPanel-HLLGXBZF.js.gz +0 -0
- package/dist/AiChatPanel-SXYMXFYS.mjs.br +0 -0
- package/dist/AiChatPanel-SXYMXFYS.mjs.gz +0 -0
- package/dist/Model3DScene-IECT4RWT.mjs.gz +0 -0
- package/dist/Model3DScene-ZQBWLAMC.js.br +0 -0
- package/dist/Model3DScene-ZQBWLAMC.js.gz +0 -0
- package/dist/SurfaceChart3DScene-4KRMRWW6.js.br +0 -0
- package/dist/SurfaceChart3DScene-4KRMRWW6.js.gz +0 -0
- package/dist/SurfaceChart3DScene-52C3IMPQ.mjs.gz +0 -0
- package/dist/chunk-5GHLRHBR.js.br +0 -0
- package/dist/chunk-5GHLRHBR.js.gz +0 -0
- package/dist/chunk-5TPQJWEO.js.br +0 -0
- package/dist/chunk-5TPQJWEO.js.gz +0 -0
- package/dist/chunk-G6Q3NXRV.mjs.br +0 -0
- package/dist/chunk-G6Q3NXRV.mjs.gz +0 -0
- package/dist/chunk-KK7FWBGO.mjs.br +0 -0
- package/dist/chunk-KK7FWBGO.mjs.gz +0 -0
- package/dist/chunk-LRIXPSVT.mjs.br +0 -0
- package/dist/chunk-LRIXPSVT.mjs.gz +0 -0
- package/dist/chunk-Q6FC2552.mjs.br +0 -0
- package/dist/chunk-Q6FC2552.mjs.gz +0 -0
- package/dist/chunk-QBZA2GMB.mjs.br +0 -0
- package/dist/chunk-QBZA2GMB.mjs.gz +0 -0
- package/dist/chunk-VEZO33T2.js.br +0 -0
- package/dist/chunk-VEZO33T2.js.gz +0 -0
- package/dist/chunk-WK56SFN7.js.br +0 -0
- package/dist/chunk-WK56SFN7.js.gz +0 -0
- package/dist/chunk-XSBFV6TL.js.br +0 -0
- package/dist/chunk-XSBFV6TL.js.gz +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 chunkLTEDT475_js = require('./chunk-LTEDT475.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 chunkLTEDT475_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 chunkLTEDT475_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 = chunkLTEDT475_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 (!chunkLTEDT475_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) => chunkLTEDT475_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) => !chunkLTEDT475_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 (!chunkLTEDT475_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 = chunkLTEDT475_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 = chunkLTEDT475_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 (!chunkLTEDT475_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 = chunkLTEDT475_js.clampCropValue(element.cropLeft);
|
|
324
|
+
const cropTop = chunkLTEDT475_js.clampCropValue(element.cropTop);
|
|
325
|
+
const cropRight = chunkLTEDT475_js.clampCropValue(element.cropRight);
|
|
326
|
+
const cropBottom = chunkLTEDT475_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 = chunkLTEDT475_js.clampCropValue(cropLeft * safeHorizontalScale);
|
|
339
|
+
const normalizedRight = chunkLTEDT475_js.clampCropValue(cropRight * safeHorizontalScale);
|
|
340
|
+
const normalizedTop = chunkLTEDT475_js.clampCropValue(cropTop * safeVerticalScale);
|
|
341
|
+
const normalizedBottom = chunkLTEDT475_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 (!chunkLTEDT475_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 (!chunkLTEDT475_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 (!chunkLTEDT475_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 = chunkLTEDT475_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 (!chunkLTEDT475_js.hasTextProperties(element)) {
|
|
1175
1175
|
return { color: fallbackColor };
|
|
1176
1176
|
}
|
|
1177
1177
|
const textDecorationTokens = [];
|
|
@@ -1185,20 +1185,20 @@ 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 ? chunkLTEDT475_js.normalizeHexColor(element.textStyle?.color, HYPERLINK_COLOR) : chunkLTEDT475_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;
|
|
1192
1192
|
const bodyRight = element.textStyle?.bodyInsetRight ?? DEFAULT_BODY_INSET_LR_PX;
|
|
1193
|
-
const writingMode =
|
|
1194
|
-
const textOrientation =
|
|
1195
|
-
const verticalDirection =
|
|
1193
|
+
const writingMode = chunkLTEDT475_js.toCssWritingMode(element.textStyle?.textDirection);
|
|
1194
|
+
const textOrientation = chunkLTEDT475_js.toCssTextOrientation(element.textStyle?.textDirection);
|
|
1195
|
+
const verticalDirection = chunkLTEDT475_js.toCssVerticalDirection(element.textStyle?.textDirection);
|
|
1196
1196
|
const resolvedDirection = verticalDirection || (isRtl ? "rtl" : "ltr");
|
|
1197
1197
|
const resolvedUnicodeBidi = isRtl ? "plaintext" : void 0;
|
|
1198
1198
|
const hasSegments = (element.textSegments?.length ?? 0) > 0;
|
|
1199
1199
|
return {
|
|
1200
1200
|
color: resolvedTextColor,
|
|
1201
|
-
backgroundColor: !hasSegments && element.textStyle?.highlightColor ?
|
|
1201
|
+
backgroundColor: !hasSegments && element.textStyle?.highlightColor ? chunkLTEDT475_js.normalizeHexColor(element.textStyle.highlightColor, void 0) : void 0,
|
|
1202
1202
|
textAlign: (() => {
|
|
1203
1203
|
const a = element.textStyle?.align;
|
|
1204
1204
|
if (a === "justLow" || a === "dist" || a === "thaiDist") {
|
|
@@ -1214,7 +1214,7 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
1214
1214
|
textDecorationLine: textDecorationTokens.length > 0 ? textDecorationTokens.join(" ") : "none",
|
|
1215
1215
|
textDecorationStyle,
|
|
1216
1216
|
fontFamily: element.textStyle?.fontFamily || DEFAULT_FONT_FAMILY,
|
|
1217
|
-
lineHeight:
|
|
1217
|
+
lineHeight: chunkLTEDT475_js.resolveLineHeight(element.textStyle, hasItalicRuns),
|
|
1218
1218
|
paddingTop: bodyTop + (hasItalicRuns ? 1 : 0),
|
|
1219
1219
|
paddingBottom: bodyBottom + (hasItalicRuns ? 1 : 0),
|
|
1220
1220
|
paddingLeft: bodyLeft + (element.textStyle?.paragraphMarginLeft || 0),
|
|
@@ -1227,7 +1227,7 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
1227
1227
|
// Auto-fit: use OOXML-provided fontScale/lnSpcReduction when available,
|
|
1228
1228
|
// otherwise fall back to heuristic estimation. The pure font-scale maths
|
|
1229
1229
|
// now lives in pptx-viewer-shared (computeAutoFitTextStyle).
|
|
1230
|
-
...
|
|
1230
|
+
...chunkLTEDT475_js.computeAutoFitTextStyle({
|
|
1231
1231
|
textStyle: element.textStyle,
|
|
1232
1232
|
text: element.text ?? "",
|
|
1233
1233
|
width: element.width,
|
|
@@ -1261,13 +1261,13 @@ function computeTabSize(tabStops, defaultTabSize) {
|
|
|
1261
1261
|
return avgGap > 0 ? `${Math.round(avgGap)}px` : fromDefault;
|
|
1262
1262
|
}
|
|
1263
1263
|
function getTextLayoutStyle(element) {
|
|
1264
|
-
if (!
|
|
1264
|
+
if (!chunkLTEDT475_js.hasTextProperties(element)) {
|
|
1265
1265
|
return {};
|
|
1266
1266
|
}
|
|
1267
1267
|
const verticalAlign = element.textStyle?.vAlign || "top";
|
|
1268
|
-
const writingMode =
|
|
1269
|
-
const textOrientation =
|
|
1270
|
-
const verticalDirection =
|
|
1268
|
+
const writingMode = chunkLTEDT475_js.toCssWritingMode(element.textStyle?.textDirection);
|
|
1269
|
+
const textOrientation = chunkLTEDT475_js.toCssTextOrientation(element.textStyle?.textDirection);
|
|
1270
|
+
const verticalDirection = chunkLTEDT475_js.toCssVerticalDirection(element.textStyle?.textDirection);
|
|
1271
1271
|
const parsedColumnCount = Number(element.textStyle?.columnCount);
|
|
1272
1272
|
const columnCount = Number.isFinite(parsedColumnCount) ? Math.max(1, Math.min(16, Math.round(parsedColumnCount))) : 1;
|
|
1273
1273
|
const hasColumns = columnCount > 1;
|
|
@@ -1275,7 +1275,7 @@ function getTextLayoutStyle(element) {
|
|
|
1275
1275
|
const tabStops = element.textStyle?.tabStops;
|
|
1276
1276
|
const tabSize = computeTabSize(tabStops, element.textStyle?.defaultTabSize);
|
|
1277
1277
|
const textWrapNone = element.textStyle?.textWrap === "none";
|
|
1278
|
-
const hasParagraphIndents =
|
|
1278
|
+
const hasParagraphIndents = chunkLTEDT475_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
|
|
1279
1279
|
const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
|
|
1280
1280
|
const paragraphIndent = element.textStyle?.paragraphIndent;
|
|
1281
1281
|
const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
|
|
@@ -1284,7 +1284,7 @@ function getTextLayoutStyle(element) {
|
|
|
1284
1284
|
const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
|
|
1285
1285
|
const parsedColumnSpacing = Number(element.textStyle?.columnSpacing);
|
|
1286
1286
|
const columnGap = Number.isFinite(parsedColumnSpacing) && parsedColumnSpacing > 0 ? `${parsedColumnSpacing}px` : "0.75em";
|
|
1287
|
-
const kinsokuStyles =
|
|
1287
|
+
const kinsokuStyles = chunkLTEDT475_js.getKinsokuLineBreakStyles(element.textStyle);
|
|
1288
1288
|
if (hasColumns) {
|
|
1289
1289
|
return {
|
|
1290
1290
|
display: "block",
|
|
@@ -1331,10 +1331,10 @@ function getTextLayoutStyle(element) {
|
|
|
1331
1331
|
|
|
1332
1332
|
// src/viewer/utils/text-effects.tsx
|
|
1333
1333
|
function buildTextFillCss2(style) {
|
|
1334
|
-
return
|
|
1334
|
+
return chunkLTEDT475_js.buildTextFillCss(style);
|
|
1335
1335
|
}
|
|
1336
1336
|
function buildTextBody3DSceneStyle2(textStyle) {
|
|
1337
|
-
return
|
|
1337
|
+
return chunkLTEDT475_js.buildTextBody3DSceneStyle(textStyle);
|
|
1338
1338
|
}
|
|
1339
1339
|
|
|
1340
1340
|
// src/viewer/utils/text-warp-css.tsx
|
|
@@ -1515,63 +1515,40 @@ function buildAnimStyle(state) {
|
|
|
1515
1515
|
}
|
|
1516
1516
|
return Object.keys(style).length > 0 ? style : void 0;
|
|
1517
1517
|
}
|
|
1518
|
-
function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, paraSegments, subElementAnimStates) {
|
|
1518
|
+
function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, paraSegments, subElementAnimStates, renderPiece) {
|
|
1519
1519
|
if (!subElementAnimStates || subElementAnimStates.size === 0) {
|
|
1520
1520
|
return renderedSegments;
|
|
1521
1521
|
}
|
|
1522
|
-
const paraKey = `${elementId}${
|
|
1522
|
+
const paraKey = `${elementId}${chunkLTEDT475_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
|
|
1523
1523
|
const paraState = subElementAnimStates.get(paraKey);
|
|
1524
1524
|
if (paraState) {
|
|
1525
1525
|
const style = buildAnimStyle(paraState);
|
|
1526
1526
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
|
|
1527
1527
|
}
|
|
1528
|
-
const
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1528
|
+
const spec = chunkLTEDT475_js.buildTextBuildSpec(
|
|
1529
|
+
elementId,
|
|
1530
|
+
paraIndex,
|
|
1531
|
+
paraSegments.map((entry) => ({ text: entry.segment.text, style: entry })),
|
|
1532
|
+
subElementAnimStates
|
|
1533
|
+
);
|
|
1534
|
+
if (!spec?.spans) {
|
|
1535
|
+
return renderedSegments;
|
|
1535
1536
|
}
|
|
1536
|
-
return
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
const words = fullText.split(/(\s+)/);
|
|
1541
|
-
let wordIdx = 0;
|
|
1542
|
-
const nodes = [];
|
|
1543
|
-
for (let i = 0; i < words.length; i++) {
|
|
1544
|
-
const w = words[i];
|
|
1545
|
-
if (!w) {
|
|
1546
|
-
continue;
|
|
1547
|
-
}
|
|
1548
|
-
const isWhitespace = /^\s+$/.test(w);
|
|
1549
|
-
if (isWhitespace) {
|
|
1550
|
-
nodes.push(/* @__PURE__ */ jsxRuntime.jsx(React6__default.default.Fragment, { children: w }, `ws-${i}`));
|
|
1551
|
-
continue;
|
|
1537
|
+
return spec.spans.map((span, index) => {
|
|
1538
|
+
const content = span.style && renderPiece ? renderPiece(span.style, span.text) : span.text;
|
|
1539
|
+
if (!span.animId) {
|
|
1540
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React6__default.default.Fragment, { children: content }, `ws-${index}`);
|
|
1552
1541
|
}
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
return nodes;
|
|
1562
|
-
}
|
|
1563
|
-
function wrapByChar(elementId, paraIndex, paraSegments, states) {
|
|
1564
|
-
const fullText = paraSegments.map((e) => e.segment.text).join("");
|
|
1565
|
-
const nodes = [];
|
|
1566
|
-
for (let i = 0; i < fullText.length; i++) {
|
|
1567
|
-
const key = `${elementId}${chunkWK56SFN7_js.TEXT_BUILD_ID_SEP}c${paraIndex}-${i}`;
|
|
1568
|
-
const state = states.get(key);
|
|
1569
|
-
const style = buildAnimStyle(state);
|
|
1570
|
-
nodes.push(
|
|
1571
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": key, style: { display: "inline", ...style }, children: fullText[i] }, key)
|
|
1542
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1543
|
+
"span",
|
|
1544
|
+
{
|
|
1545
|
+
"data-anim-id": span.animId,
|
|
1546
|
+
style: chunkLTEDT475_js.textBuildSpanStyle(span),
|
|
1547
|
+
children: content
|
|
1548
|
+
},
|
|
1549
|
+
span.animId
|
|
1572
1550
|
);
|
|
1573
|
-
}
|
|
1574
|
-
return nodes;
|
|
1551
|
+
});
|
|
1575
1552
|
}
|
|
1576
1553
|
var EPS = 0.01;
|
|
1577
1554
|
var FALLBACK_STEP_PX = 48;
|
|
@@ -1710,10 +1687,10 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
|
|
|
1710
1687
|
if (!needsScriptFonts || !text) {
|
|
1711
1688
|
return text;
|
|
1712
1689
|
}
|
|
1713
|
-
const runs =
|
|
1690
|
+
const runs = chunkLTEDT475_js.segmentByScript(text);
|
|
1714
1691
|
if (runs.length <= 1) {
|
|
1715
1692
|
if (runs.length === 1) {
|
|
1716
|
-
const font =
|
|
1693
|
+
const font = chunkLTEDT475_js.resolveFontForScript(runs[0].script, scriptFonts);
|
|
1717
1694
|
if (font && font !== baseFontFamily) {
|
|
1718
1695
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontFamily: font }, children: text });
|
|
1719
1696
|
}
|
|
@@ -1721,7 +1698,7 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
|
|
|
1721
1698
|
return text;
|
|
1722
1699
|
}
|
|
1723
1700
|
return runs.map((run, i) => {
|
|
1724
|
-
const font =
|
|
1701
|
+
const font = chunkLTEDT475_js.resolveFontForScript(run.script, scriptFonts);
|
|
1725
1702
|
if (!font || font === baseFontFamily) {
|
|
1726
1703
|
return /* @__PURE__ */ jsxRuntime.jsx(React6__default.default.Fragment, { children: run.text }, `${keyPrefix}-r${i}`);
|
|
1727
1704
|
}
|
|
@@ -1793,8 +1770,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
|
|
|
1793
1770
|
);
|
|
1794
1771
|
}
|
|
1795
1772
|
function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
|
|
1796
|
-
const mathml =
|
|
1797
|
-
const safeMathml = mathml ?
|
|
1773
|
+
const mathml = chunkLTEDT475_js.convertOmmlToMathMl(equationXml);
|
|
1774
|
+
const safeMathml = mathml ? chunkLTEDT475_js.sanitizeMathMl(mathml) : "";
|
|
1798
1775
|
const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1799
1776
|
"span",
|
|
1800
1777
|
{
|
|
@@ -1844,7 +1821,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
|
|
|
1844
1821
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { children: equationContent }, `${elementId}-seg-${segmentIndex}`);
|
|
1845
1822
|
}
|
|
1846
1823
|
function renderPictureBullet(elementId, segmentIndex, bulletInfo, baseFontSize) {
|
|
1847
|
-
const picture =
|
|
1824
|
+
const picture = chunkLTEDT475_js.resolvePictureBullet(bulletInfo, baseFontSize) ?? {
|
|
1848
1825
|
sizePx: baseFontSize,
|
|
1849
1826
|
fallbackMarker: "\u2022",
|
|
1850
1827
|
accessibleLabel: "Bullet"
|
|
@@ -1894,7 +1871,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
1894
1871
|
);
|
|
1895
1872
|
}
|
|
1896
1873
|
const segmentStyle = segment.style || {};
|
|
1897
|
-
const textValue =
|
|
1874
|
+
const textValue = chunkLTEDT475_js.substituteFieldText(segment.text || "", segment.fieldType, fieldContext);
|
|
1898
1875
|
const lines = textValue.split("\n");
|
|
1899
1876
|
const textDecorationTokens = [];
|
|
1900
1877
|
if (segmentStyle.underline || segmentStyle.hyperlink) {
|
|
@@ -1904,8 +1881,8 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
1904
1881
|
textDecorationTokens.push("line-through");
|
|
1905
1882
|
}
|
|
1906
1883
|
const isDoubleStrike = segmentStyle.strikethrough && segmentStyle.strikeType === "dblStrike";
|
|
1907
|
-
const resolvedSegmentColor = segmentStyle.hyperlink ?
|
|
1908
|
-
const underlineDecoration =
|
|
1884
|
+
const resolvedSegmentColor = segmentStyle.hyperlink ? chunkLTEDT475_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, HYPERLINK_COLOR) : chunkLTEDT475_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, fallbackColor);
|
|
1885
|
+
const underlineDecoration = chunkLTEDT475_js.resolveUnderlineDecorationStyle(
|
|
1909
1886
|
Boolean(isDoubleStrike),
|
|
1910
1887
|
segmentStyle.underlineStyle
|
|
1911
1888
|
);
|
|
@@ -1921,14 +1898,14 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
1921
1898
|
const baseFontSizePt = baseFontSize * (72 / 96);
|
|
1922
1899
|
const fontKerning = typeof segmentStyle.kerning === "number" ? segmentStyle.kerning === 0 ? "none" : baseFontSizePt >= segmentStyle.kerning / 100 ? "normal" : "none" : void 0;
|
|
1923
1900
|
const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
|
|
1924
|
-
const baseFontFamily = rawFontFamily ?
|
|
1901
|
+
const baseFontFamily = rawFontFamily ? chunkLTEDT475_js.getSubstituteFontFamily(rawFontFamily) : DEFAULT_FONT_FAMILY;
|
|
1925
1902
|
const scriptFonts = {
|
|
1926
1903
|
latin: baseFontFamily,
|
|
1927
1904
|
eastAsia: segmentStyle.eastAsiaFont || element.textStyle?.eastAsiaFont || baseFontFamily,
|
|
1928
1905
|
complexScript: segmentStyle.complexScriptFont || element.textStyle?.complexScriptFont || baseFontFamily,
|
|
1929
1906
|
symbol: segmentStyle.symbolFont || element.textStyle?.symbolFont || baseFontFamily
|
|
1930
1907
|
};
|
|
1931
|
-
const needsScriptFonts =
|
|
1908
|
+
const needsScriptFonts = chunkLTEDT475_js.hasDistinctScriptFonts(scriptFonts);
|
|
1932
1909
|
const spanStyle = {
|
|
1933
1910
|
color: resolvedSegmentColor,
|
|
1934
1911
|
fontSize: baseFontSize * baselineFontScale,
|
|
@@ -1946,15 +1923,15 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
1946
1923
|
fontVariantCaps: segmentStyle.textCaps === "small" ? "small-caps" : void 0,
|
|
1947
1924
|
letterSpacing,
|
|
1948
1925
|
fontKerning,
|
|
1949
|
-
backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ?
|
|
1926
|
+
backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ? chunkLTEDT475_js.normalizeHexColor(segmentStyle.highlightColor, "transparent") : void 0,
|
|
1950
1927
|
...textFillStyles,
|
|
1951
|
-
textDecorationColor: segmentStyle.underlineColor ?
|
|
1952
|
-
WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${
|
|
1928
|
+
textDecorationColor: segmentStyle.underlineColor ? chunkLTEDT475_js.normalizeHexColor(segmentStyle.underlineColor, void 0) : void 0,
|
|
1929
|
+
WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${chunkLTEDT475_js.normalizeHexColor(segmentStyle.textOutlineColor, "#000000")}` : segmentStyle.textOutlineWidth ? `${segmentStyle.textOutlineWidth}px currentColor` : void 0,
|
|
1953
1930
|
paintOrder: segmentStyle.textOutlineWidth ? "stroke fill" : void 0,
|
|
1954
|
-
textShadow:
|
|
1955
|
-
filter:
|
|
1956
|
-
opacity:
|
|
1957
|
-
WebkitBoxReflect:
|
|
1931
|
+
textShadow: chunkLTEDT475_js.buildTextShadowCss(segmentStyle),
|
|
1932
|
+
filter: chunkLTEDT475_js.buildTextRunFilterChain(segmentStyle),
|
|
1933
|
+
opacity: chunkLTEDT475_js.getTextAlphaOpacity(segmentStyle),
|
|
1934
|
+
WebkitBoxReflect: chunkLTEDT475_js.buildTextReflectionCss(segmentStyle)
|
|
1958
1935
|
};
|
|
1959
1936
|
const runRtl = segmentStyle.rtl;
|
|
1960
1937
|
if (runRtl !== void 0 && runRtl !== paragraphRtl) {
|
|
@@ -1974,7 +1951,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
1974
1951
|
spanStyle.fontSize = baseFontSize * (bulletInfo.sizePercent / 100) * baselineFontScale;
|
|
1975
1952
|
}
|
|
1976
1953
|
if (bulletInfo.color) {
|
|
1977
|
-
spanStyle.color =
|
|
1954
|
+
spanStyle.color = chunkLTEDT475_js.normalizeHexColor(bulletInfo.color, resolvedSegmentColor);
|
|
1978
1955
|
}
|
|
1979
1956
|
}
|
|
1980
1957
|
if (bulletInfo?.imageDataUrl || bulletInfo?.imageRelId) {
|
|
@@ -2014,7 +1991,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
2014
1991
|
textAlign: segment.rubyAlignment === "l" ? "left" : segment.rubyAlignment === "r" ? "right" : segment.rubyAlignment === "dist" || segment.rubyAlignment === "distCat" || segment.rubyAlignment === "distLetter" ? "justify" : "center"
|
|
2015
1992
|
};
|
|
2016
1993
|
if (segment.rubyStyle?.color) {
|
|
2017
|
-
rubyStyle.color =
|
|
1994
|
+
rubyStyle.color = chunkLTEDT475_js.normalizeHexColor(segment.rubyStyle.color, resolvedSegmentColor);
|
|
2018
1995
|
}
|
|
2019
1996
|
innerContent = /* @__PURE__ */ jsxRuntime.jsxs("ruby", { children: [
|
|
2020
1997
|
baseContent,
|
|
@@ -2109,7 +2086,7 @@ function groupSegmentsIntoParagraphs(segments) {
|
|
|
2109
2086
|
return paragraphs;
|
|
2110
2087
|
}
|
|
2111
2088
|
function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick) {
|
|
2112
|
-
if (!
|
|
2089
|
+
if (!chunkLTEDT475_js.hasTextProperties(element)) {
|
|
2113
2090
|
return emptyFallback || null;
|
|
2114
2091
|
}
|
|
2115
2092
|
const effectiveSegments = segmentOverrides ?? element.textSegments;
|
|
@@ -2130,10 +2107,10 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
2130
2107
|
return element.text || emptyFallback || "";
|
|
2131
2108
|
}
|
|
2132
2109
|
const paragraphs = groupSegmentsIntoParagraphs(effectiveSegments);
|
|
2133
|
-
const paragraphIndents =
|
|
2134
|
-
const elementRtl =
|
|
2135
|
-
const elementAlign =
|
|
2136
|
-
const bodyStyle =
|
|
2110
|
+
const paragraphIndents = chunkLTEDT475_js.hasTextProperties(element) ? element.paragraphIndents : void 0;
|
|
2111
|
+
const elementRtl = chunkLTEDT475_js.hasTextProperties(element) ? element.textStyle?.rtl : void 0;
|
|
2112
|
+
const elementAlign = chunkLTEDT475_js.hasTextProperties(element) ? element.textStyle?.align : void 0;
|
|
2113
|
+
const bodyStyle = chunkLTEDT475_js.hasTextProperties(element) ? element.textStyle : void 0;
|
|
2137
2114
|
const spaceFirstLast = bodyStyle?.spaceFirstLastParagraph !== false;
|
|
2138
2115
|
return paragraphs.map((paraSegments, paraIndex) => {
|
|
2139
2116
|
const paraIndent = paragraphIndents?.[paraIndex];
|
|
@@ -2148,14 +2125,14 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
2148
2125
|
return Boolean(segment.text) && segment.text.trim().length > 0;
|
|
2149
2126
|
});
|
|
2150
2127
|
const hasBullet = bulletInfo && !bulletInfo.none && hasVisibleTextContent;
|
|
2151
|
-
const paraRtl =
|
|
2128
|
+
const paraRtl = chunkLTEDT475_js.resolveParagraphRtl(paraSegments, elementRtl);
|
|
2152
2129
|
const isRtlParagraph = paraRtl === true;
|
|
2153
|
-
const paraAlign =
|
|
2154
|
-
const cssTextAlign =
|
|
2130
|
+
const paraAlign = chunkLTEDT475_js.resolveParagraphAlign(paraSegments, elementAlign);
|
|
2131
|
+
const cssTextAlign = chunkLTEDT475_js.resolveCssTextAlign(paraAlign, isRtlParagraph);
|
|
2155
2132
|
const paraMarginLeft = isRtlParagraph ? void 0 : rawMarginLeft;
|
|
2156
2133
|
const paraMarginRight = isRtlParagraph ? rawMarginLeft : void 0;
|
|
2157
2134
|
const paraTextIndent = rawTextIndent;
|
|
2158
|
-
const paraKinsokuStyle =
|
|
2135
|
+
const paraKinsokuStyle = chunkLTEDT475_js.getKinsokuLineBreakStyles(firstSeg?.segment.style);
|
|
2159
2136
|
const hasParaKinsoku = Object.keys(paraKinsokuStyle).length > 0;
|
|
2160
2137
|
const paraProps = effectiveSegments[firstSeg?.globalIndex ?? -1]?.paragraphProperties;
|
|
2161
2138
|
const spacing = resolveParagraphSpacing({
|
|
@@ -2219,7 +2196,22 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
2219
2196
|
paraIndex,
|
|
2220
2197
|
renderedSegments,
|
|
2221
2198
|
paraSegments,
|
|
2222
|
-
subElementAnimStates
|
|
2199
|
+
subElementAnimStates,
|
|
2200
|
+
// A staged build splits the paragraph but must not flatten it: each
|
|
2201
|
+
// piece is re-rendered through the SAME segment renderer, so it keeps
|
|
2202
|
+
// its run's font, size, colour and decoration while it animates.
|
|
2203
|
+
({ segment, globalIndex }, text) => renderSingleSegment(
|
|
2204
|
+
element,
|
|
2205
|
+
{ ...segment, text },
|
|
2206
|
+
globalIndex,
|
|
2207
|
+
fallbackColor,
|
|
2208
|
+
findHighlights,
|
|
2209
|
+
void 0,
|
|
2210
|
+
onHyperlinkClick,
|
|
2211
|
+
fieldContext,
|
|
2212
|
+
paraRtl,
|
|
2213
|
+
requireCtrlClick
|
|
2214
|
+
)
|
|
2223
2215
|
);
|
|
2224
2216
|
if (!needsWrapper) {
|
|
2225
2217
|
return /* @__PURE__ */ jsxRuntime.jsxs(React6__default.default.Fragment, { children: [
|
|
@@ -2242,13 +2234,13 @@ function hexToRgbUnit(hex) {
|
|
|
2242
2234
|
};
|
|
2243
2235
|
}
|
|
2244
2236
|
function getDuotoneColors(element) {
|
|
2245
|
-
if (!
|
|
2237
|
+
if (!chunkLTEDT475_js.isImageLikeElement(element)) {
|
|
2246
2238
|
return void 0;
|
|
2247
2239
|
}
|
|
2248
2240
|
return element.imageEffects?.duotone;
|
|
2249
2241
|
}
|
|
2250
2242
|
function buildLineShadowCss(element) {
|
|
2251
|
-
if (!
|
|
2243
|
+
if (!chunkLTEDT475_js.hasShapeProperties(element)) {
|
|
2252
2244
|
return void 0;
|
|
2253
2245
|
}
|
|
2254
2246
|
const ss = element.shapeStyle;
|
|
@@ -2259,13 +2251,13 @@ function buildLineShadowCss(element) {
|
|
|
2259
2251
|
const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
|
|
2260
2252
|
const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
|
|
2261
2253
|
const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
|
|
2262
|
-
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${
|
|
2263
|
-
|
|
2254
|
+
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkLTEDT475_js.colorWithOpacity(
|
|
2255
|
+
chunkLTEDT475_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
|
|
2264
2256
|
opacity
|
|
2265
2257
|
)}`;
|
|
2266
2258
|
}
|
|
2267
2259
|
function buildLineGlowFilter(element) {
|
|
2268
|
-
if (!
|
|
2260
|
+
if (!chunkLTEDT475_js.hasShapeProperties(element)) {
|
|
2269
2261
|
return void 0;
|
|
2270
2262
|
}
|
|
2271
2263
|
const ss = element.shapeStyle;
|
|
@@ -2274,7 +2266,7 @@ function buildLineGlowFilter(element) {
|
|
|
2274
2266
|
}
|
|
2275
2267
|
const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
|
|
2276
2268
|
const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
|
|
2277
|
-
const glowCol =
|
|
2269
|
+
const glowCol = chunkLTEDT475_js.colorWithOpacity(chunkLTEDT475_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
|
|
2278
2270
|
return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
|
|
2279
2271
|
}
|
|
2280
2272
|
function mapDagBlendModeToCss(blend) {
|
|
@@ -2298,7 +2290,7 @@ function getDagDuotoneFilterId(elementId) {
|
|
|
2298
2290
|
return `dag-duotone-${elementId}`;
|
|
2299
2291
|
}
|
|
2300
2292
|
function hasDagDuotoneEffect(element) {
|
|
2301
|
-
if (!
|
|
2293
|
+
if (!chunkLTEDT475_js.hasShapeProperties(element)) {
|
|
2302
2294
|
return false;
|
|
2303
2295
|
}
|
|
2304
2296
|
return Boolean(element.shapeStyle?.dagDuotone);
|
|
@@ -2361,7 +2353,7 @@ function getRoundRectRadiusPx2(element) {
|
|
|
2361
2353
|
|
|
2362
2354
|
// src/viewer/utils/shape-visual-3d.ts
|
|
2363
2355
|
function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
|
|
2364
|
-
return
|
|
2356
|
+
return chunkLTEDT475_js.build3DExtrusionData(
|
|
2365
2357
|
shape3d,
|
|
2366
2358
|
scene3d,
|
|
2367
2359
|
fillColor,
|
|
@@ -2370,7 +2362,7 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
|
|
|
2370
2362
|
);
|
|
2371
2363
|
}
|
|
2372
2364
|
function apply3dEffects2(base, scene3d, shape3d, fillColorFallback) {
|
|
2373
|
-
|
|
2365
|
+
chunkLTEDT475_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
|
|
2374
2366
|
}
|
|
2375
2367
|
|
|
2376
2368
|
// src/viewer/utils/vector-subpath-paint.ts
|
|
@@ -2379,7 +2371,7 @@ function toHexByte(value) {
|
|
|
2379
2371
|
return clamped.toString(16).padStart(2, "0");
|
|
2380
2372
|
}
|
|
2381
2373
|
function shiftHex(hex, factor, towardsWhite) {
|
|
2382
|
-
const channels =
|
|
2374
|
+
const channels = chunkLTEDT475_js.hexToRgbChannels(hex);
|
|
2383
2375
|
if (!channels) {
|
|
2384
2376
|
return hex;
|
|
2385
2377
|
}
|
|
@@ -2405,13 +2397,13 @@ function buildCustomSubpathPaints(subpaths, hasFill, fillColor, fillOpacity) {
|
|
|
2405
2397
|
const fillOff = subpath.fillMode === "none" || !hasFill;
|
|
2406
2398
|
return {
|
|
2407
2399
|
d: subpath.d,
|
|
2408
|
-
fill: fillOff ? "none" :
|
|
2400
|
+
fill: fillOff ? "none" : chunkLTEDT475_js.colorWithOpacity(adjustFillForMode(fillColor, subpath.fillMode), fillOpacity),
|
|
2409
2401
|
stroked: subpath.stroke !== false
|
|
2410
2402
|
};
|
|
2411
2403
|
});
|
|
2412
2404
|
}
|
|
2413
2405
|
function getStrokeOnlyPresetPaths(element) {
|
|
2414
|
-
if (element.type !== "shape" || !
|
|
2406
|
+
if (element.type !== "shape" || !chunkLTEDT475_js.hasShapeProperties(element)) {
|
|
2415
2407
|
return void 0;
|
|
2416
2408
|
}
|
|
2417
2409
|
const shapeType = element.shapeType;
|
|
@@ -2421,7 +2413,7 @@ function getStrokeOnlyPresetPaths(element) {
|
|
|
2421
2413
|
if (element.pathData) {
|
|
2422
2414
|
return void 0;
|
|
2423
2415
|
}
|
|
2424
|
-
const result =
|
|
2416
|
+
const result = chunkLTEDT475_js.evaluatePresetShape(
|
|
2425
2417
|
shapeType,
|
|
2426
2418
|
Math.max(element.width, 1),
|
|
2427
2419
|
Math.max(element.height, 1),
|
|
@@ -2436,27 +2428,27 @@ function getStrokeOnlyPresetPaths(element) {
|
|
|
2436
2428
|
|
|
2437
2429
|
// src/viewer/utils/shape-visual-style.ts
|
|
2438
2430
|
function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
|
|
2439
|
-
if (!
|
|
2431
|
+
if (!chunkLTEDT475_js.hasShapeProperties(element)) {
|
|
2440
2432
|
return {};
|
|
2441
2433
|
}
|
|
2442
2434
|
const normalizedShapeType = getShapeType(element.shapeType);
|
|
2443
|
-
const clipPath =
|
|
2435
|
+
const clipPath = chunkLTEDT475_js.getResolvedShapeClipPath(element);
|
|
2444
2436
|
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;
|
|
2445
2437
|
const rendersStrokeOnlyPreset = Boolean(getStrokeOnlyPresetPaths(element));
|
|
2446
2438
|
const fillOpacity = element.shapeStyle?.fillOpacity;
|
|
2447
2439
|
const strokeOpacity = element.shapeStyle?.strokeOpacity;
|
|
2448
|
-
const strokeDash =
|
|
2449
|
-
const fillGradient =
|
|
2450
|
-
const shadowCss =
|
|
2451
|
-
const innerShadowCss =
|
|
2452
|
-
const resolvedFillColor =
|
|
2453
|
-
const resolvedStrokeColor =
|
|
2440
|
+
const strokeDash = chunkLTEDT475_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
|
|
2441
|
+
const fillGradient = chunkLTEDT475_js.buildCssGradientFromShapeStyle(element.shapeStyle) || element.shapeStyle?.fillGradient;
|
|
2442
|
+
const shadowCss = chunkLTEDT475_js.buildShadowCssFromShapeStyle(element.shapeStyle);
|
|
2443
|
+
const innerShadowCss = chunkLTEDT475_js.buildInnerShadowCssFromShapeStyle(element.shapeStyle);
|
|
2444
|
+
const resolvedFillColor = chunkLTEDT475_js.colorWithOpacity(fillColor, fillOpacity);
|
|
2445
|
+
const resolvedStrokeColor = chunkLTEDT475_js.colorWithOpacity(strokeColor, strokeOpacity);
|
|
2454
2446
|
const ss = element.shapeStyle;
|
|
2455
2447
|
const hasFillOverlayColor = Boolean(
|
|
2456
2448
|
ss?.dagFillOverlayColor && ss.dagFillOverlayColor !== "transparent"
|
|
2457
2449
|
);
|
|
2458
2450
|
const combinedShadowParts = [];
|
|
2459
|
-
const multiLayerShadow =
|
|
2451
|
+
const multiLayerShadow = chunkLTEDT475_js.buildMultiLayerShadowCss(element.shapeStyle);
|
|
2460
2452
|
if (multiLayerShadow) {
|
|
2461
2453
|
combinedShadowParts.push(multiLayerShadow);
|
|
2462
2454
|
} else if (shadowCss) {
|
|
@@ -2465,7 +2457,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
2465
2457
|
if (innerShadowCss) {
|
|
2466
2458
|
combinedShadowParts.push(innerShadowCss);
|
|
2467
2459
|
}
|
|
2468
|
-
const glowBoxShadow =
|
|
2460
|
+
const glowBoxShadow = chunkLTEDT475_js.buildGlowBoxShadow(ss?.glowColor, ss?.glowRadius, ss?.glowOpacity);
|
|
2469
2461
|
if (glowBoxShadow) {
|
|
2470
2462
|
combinedShadowParts.push(glowBoxShadow);
|
|
2471
2463
|
}
|
|
@@ -2473,7 +2465,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
2473
2465
|
if (lineShadow) {
|
|
2474
2466
|
combinedShadowParts.push(lineShadow);
|
|
2475
2467
|
}
|
|
2476
|
-
const compoundLineShadow =
|
|
2468
|
+
const compoundLineShadow = chunkLTEDT475_js.getCompoundLineBoxShadow(
|
|
2477
2469
|
element.shapeStyle?.compoundLine,
|
|
2478
2470
|
strokeWidth,
|
|
2479
2471
|
resolvedStrokeColor
|
|
@@ -2486,11 +2478,11 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
2486
2478
|
if (ss?.glowColor && ss.glowColor !== "transparent" && ss.glowRadius) {
|
|
2487
2479
|
const glowOpacity = typeof ss.glowOpacity === "number" ? ss.glowOpacity : 0.75;
|
|
2488
2480
|
const glowRad = Math.round(Math.max(0, ss.glowRadius));
|
|
2489
|
-
const glowCol =
|
|
2481
|
+
const glowCol = chunkLTEDT475_js.colorWithOpacity(chunkLTEDT475_js.normalizeHexColor(ss.glowColor, "#ffff00"), glowOpacity);
|
|
2490
2482
|
filterParts.push(`drop-shadow(0 0 ${glowRad}px ${glowCol})`);
|
|
2491
2483
|
}
|
|
2492
2484
|
if (typeof ss?.softEdgeRadius === "number" && ss.softEdgeRadius > 0) {
|
|
2493
|
-
filterParts.push(`url(#${
|
|
2485
|
+
filterParts.push(`url(#${chunkLTEDT475_js.getSoftEdgeFilterId(element.id)})`);
|
|
2494
2486
|
}
|
|
2495
2487
|
if (typeof ss?.blurRadius === "number" && ss.blurRadius > 0) {
|
|
2496
2488
|
filterParts.push(`blur(${Math.round(ss.blurRadius)}px)`);
|
|
@@ -2499,13 +2491,13 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
2499
2491
|
if (lineGlowCss) {
|
|
2500
2492
|
filterParts.push(lineGlowCss);
|
|
2501
2493
|
}
|
|
2502
|
-
const dagFilter =
|
|
2494
|
+
const dagFilter = chunkLTEDT475_js.getEffectDagFilter(ss, element.id);
|
|
2503
2495
|
if (dagFilter) {
|
|
2504
2496
|
filterParts.push(dagFilter);
|
|
2505
2497
|
}
|
|
2506
2498
|
const lineJoinCss = ss?.lineJoin === "round" ? "round" : ss?.lineJoin === "bevel" ? "bevel" : ss?.lineJoin === "miter" ? "miter" : void 0;
|
|
2507
2499
|
const miterLimitCss = ss?.lineJoin === "miter" && typeof ss?.miterLimit === "number" ? Math.max(ss.miterLimit / 1e5, 1) : void 0;
|
|
2508
|
-
const patternFill =
|
|
2500
|
+
const patternFill = chunkLTEDT475_js.buildPatternFillCss(element.shapeStyle);
|
|
2509
2501
|
const imageFillUrl = ss?.fillMode === "image" && ss.fillImageUrl ? ss.fillImageUrl : void 0;
|
|
2510
2502
|
const imageFillMode = ss?.fillImageMode || "stretch";
|
|
2511
2503
|
let reflectCss;
|
|
@@ -2517,7 +2509,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
2517
2509
|
const endOpacity = typeof ss.reflectionEndOpacity === "number" ? ss.reflectionEndOpacity : 0;
|
|
2518
2510
|
const fadeLength = typeof ss.reflectionEndPosition === "number" ? Math.round(ss.reflectionEndPosition * Math.max(element.height, 1)) : 100;
|
|
2519
2511
|
const blurRadius = typeof ss.reflectionBlurRadius === "number" ? ss.reflectionBlurRadius : 0;
|
|
2520
|
-
reflectCss =
|
|
2512
|
+
reflectCss = chunkLTEDT475_js.buildReflectionCss(distance, startOpacity, endOpacity, fadeLength, blurRadius);
|
|
2521
2513
|
}
|
|
2522
2514
|
}
|
|
2523
2515
|
const base = {
|
|
@@ -2551,9 +2543,9 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
2551
2543
|
// is present, `ShapeEffectOverlay` paints a separate blended tint layer so
|
|
2552
2544
|
// the colour is actually rendered (and text/children are not tinted).
|
|
2553
2545
|
mixBlendMode: hasFillOverlayColor ? void 0 : mapDagBlendModeToCss(ss?.dagFillOverlayBlend),
|
|
2554
|
-
borderWidth: strokeWidth > 0 ?
|
|
2546
|
+
borderWidth: strokeWidth > 0 ? chunkLTEDT475_js.getCompoundLineBorderWidth(ss?.compoundLine, strokeWidth) : void 0,
|
|
2555
2547
|
borderColor: strokeWidth > 0 ? resolvedStrokeColor : void 0,
|
|
2556
|
-
borderStyle: strokeWidth > 0 ?
|
|
2548
|
+
borderStyle: strokeWidth > 0 ? chunkLTEDT475_js.getCssBorderDashStyle(strokeDash, ss?.compoundLine) : void 0,
|
|
2557
2549
|
strokeLinejoin: lineJoinCss,
|
|
2558
2550
|
strokeMiterlimit: miterLimitCss,
|
|
2559
2551
|
strokeLinecap: ss?.lineCap === "rnd" ? "round" : ss?.lineCap === "sq" ? "square" : ss?.lineCap === "flat" ? "butt" : void 0
|
|
@@ -2609,7 +2601,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
2609
2601
|
borderWidth: 0,
|
|
2610
2602
|
borderTopWidth: Math.max(strokeWidth, 2),
|
|
2611
2603
|
borderTopColor: resolvedStrokeColor,
|
|
2612
|
-
borderTopStyle:
|
|
2604
|
+
borderTopStyle: chunkLTEDT475_js.getCssBorderDashStyle(strokeDash)
|
|
2613
2605
|
};
|
|
2614
2606
|
}
|
|
2615
2607
|
if (normalizedShapeType === "cylinder") {
|
|
@@ -2623,13 +2615,13 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
2623
2615
|
function getConnectorAdjustment(element, key, fallback) {
|
|
2624
2616
|
const direct = element.shapeAdjustments?.[key];
|
|
2625
2617
|
if (typeof direct === "number" && Number.isFinite(direct)) {
|
|
2626
|
-
return
|
|
2618
|
+
return chunkLTEDT475_js.clampUnitInterval(direct / 1e5);
|
|
2627
2619
|
}
|
|
2628
2620
|
const fallbackKey = element.shapeAdjustments?.adj;
|
|
2629
2621
|
if (typeof fallbackKey === "number" && Number.isFinite(fallbackKey)) {
|
|
2630
|
-
return
|
|
2622
|
+
return chunkLTEDT475_js.clampUnitInterval(fallbackKey / 1e5);
|
|
2631
2623
|
}
|
|
2632
|
-
return
|
|
2624
|
+
return chunkLTEDT475_js.clampUnitInterval(fallback);
|
|
2633
2625
|
}
|
|
2634
2626
|
function getConnectorPathGeometry(element) {
|
|
2635
2627
|
const width = Math.max(element.width, 1);
|
|
@@ -2766,11 +2758,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
|
|
|
2766
2758
|
strokePaint,
|
|
2767
2759
|
strokeWidth,
|
|
2768
2760
|
dashArray,
|
|
2769
|
-
lineCap:
|
|
2761
|
+
lineCap: chunkLTEDT475_js.svgLineCap(shapeStyle?.lineCap),
|
|
2770
2762
|
lineJoin,
|
|
2771
2763
|
miterLimit,
|
|
2772
|
-
offsets:
|
|
2773
|
-
widths:
|
|
2764
|
+
offsets: chunkLTEDT475_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
|
|
2765
|
+
widths: chunkLTEDT475_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
|
|
2774
2766
|
};
|
|
2775
2767
|
}
|
|
2776
2768
|
function strokeStrands(d, keyBase, ctx) {
|
|
@@ -2793,7 +2785,7 @@ function strokeStrands(d, keyBase, ctx) {
|
|
|
2793
2785
|
}
|
|
2794
2786
|
function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false) {
|
|
2795
2787
|
const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
|
|
2796
|
-
const subpaths = structuredPaths && structuredPaths.length > 0 ?
|
|
2788
|
+
const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkLTEDT475_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
|
|
2797
2789
|
const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
|
|
2798
2790
|
const nodes = [];
|
|
2799
2791
|
if (subpaths && needsPerSubpath) {
|
|
@@ -2824,7 +2816,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
|
|
|
2824
2816
|
"path",
|
|
2825
2817
|
{
|
|
2826
2818
|
d: pathData,
|
|
2827
|
-
fill: animatesFill ? "inherit" :
|
|
2819
|
+
fill: animatesFill ? "inherit" : chunkLTEDT475_js.colorWithOpacity(fillColor, fillOpacity),
|
|
2828
2820
|
stroke: "none",
|
|
2829
2821
|
vectorEffect: "non-scaling-stroke"
|
|
2830
2822
|
},
|
|
@@ -2866,14 +2858,14 @@ function renderStrokeOnlyPreset(presetPaths, width, height, shapeStyle, strokePa
|
|
|
2866
2858
|
);
|
|
2867
2859
|
}
|
|
2868
2860
|
function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
|
|
2869
|
-
if (!
|
|
2861
|
+
if (!chunkLTEDT475_js.hasShapeProperties(element)) {
|
|
2870
2862
|
return null;
|
|
2871
2863
|
}
|
|
2872
2864
|
const normalizedType = (element.shapeType || "").toLowerCase();
|
|
2873
|
-
const fillPaint = animatesFill ? "inherit" :
|
|
2874
|
-
const strokePaint = animatesStroke ? "inherit" :
|
|
2875
|
-
const dashType =
|
|
2876
|
-
const dashArray =
|
|
2865
|
+
const fillPaint = animatesFill ? "inherit" : chunkLTEDT475_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
|
|
2866
|
+
const strokePaint = animatesStroke ? "inherit" : chunkLTEDT475_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
|
|
2867
|
+
const dashType = chunkLTEDT475_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
|
|
2868
|
+
const dashArray = chunkLTEDT475_js.getSvgStrokeDasharray(
|
|
2877
2869
|
dashType,
|
|
2878
2870
|
Math.max(strokeWidth, 1),
|
|
2879
2871
|
element.shapeStyle?.customDashSegments
|
|
@@ -2952,18 +2944,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
2952
2944
|
Boolean(animatesFill)
|
|
2953
2945
|
);
|
|
2954
2946
|
}
|
|
2955
|
-
if (
|
|
2947
|
+
if (chunkLTEDT475_js.isCalloutShape(normalizedType)) {
|
|
2956
2948
|
const width = Math.max(element.width, 1);
|
|
2957
2949
|
const height = Math.max(element.height, 1);
|
|
2958
|
-
const geometry =
|
|
2950
|
+
const geometry = chunkLTEDT475_js.getCalloutLeaderLineGeometry(
|
|
2959
2951
|
normalizedType,
|
|
2960
2952
|
width,
|
|
2961
2953
|
height,
|
|
2962
2954
|
element.shapeAdjustments
|
|
2963
2955
|
);
|
|
2964
2956
|
if (geometry && geometry.points.length >= 2) {
|
|
2965
|
-
const leaderPath =
|
|
2966
|
-
const bounds =
|
|
2957
|
+
const leaderPath = chunkLTEDT475_js.buildCalloutLeaderLineSvgPath(geometry);
|
|
2958
|
+
const bounds = chunkLTEDT475_js.getCalloutViewBoxBounds(width, height, geometry);
|
|
2967
2959
|
const lineStroke = Math.max(strokeWidth, 1);
|
|
2968
2960
|
const offsetLeft = bounds.minX;
|
|
2969
2961
|
const offsetTop = bounds.minY;
|
|
@@ -3026,10 +3018,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
3026
3018
|
const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
|
|
3027
3019
|
const endArrowL = element.shapeStyle?.connectorEndArrowLength;
|
|
3028
3020
|
const compoundLine = element.shapeStyle?.compoundLine;
|
|
3029
|
-
const connectorLineCap =
|
|
3021
|
+
const connectorLineCap = chunkLTEDT475_js.svgLineCap(element.shapeStyle?.lineCap);
|
|
3030
3022
|
const hitTargetWidth = Math.max(strokeWidth * 3, 12);
|
|
3031
|
-
const offsets =
|
|
3032
|
-
const widths =
|
|
3023
|
+
const offsets = chunkLTEDT475_js.getCompoundLineOffsets(compoundLine, strokeWidth);
|
|
3024
|
+
const widths = chunkLTEDT475_js.getCompoundLineWidths(compoundLine, strokeWidth);
|
|
3033
3025
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3034
3026
|
"svg",
|
|
3035
3027
|
{
|
|
@@ -3108,15 +3100,15 @@ function parseGradientFillCss(gradFill) {
|
|
|
3108
3100
|
}
|
|
3109
3101
|
const parsed = stops.map((gs) => {
|
|
3110
3102
|
const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
|
|
3111
|
-
const color =
|
|
3112
|
-
const opacity =
|
|
3113
|
-
return { pos, color:
|
|
3103
|
+
const color = chunkLTEDT475_js.parseDrawingColor(gs) ?? "#888888";
|
|
3104
|
+
const opacity = chunkLTEDT475_js.parseDrawingColorOpacity(gs);
|
|
3105
|
+
return { pos, color: chunkLTEDT475_js.colorWithOpacity(color, opacity) };
|
|
3114
3106
|
}).sort((a, b) => a.pos - b.pos);
|
|
3115
3107
|
const stopStrings = parsed.map((s) => `${s.color} ${s.pos.toFixed(1)}%`).join(", ");
|
|
3116
3108
|
const lin = gradFill["a:lin"];
|
|
3117
3109
|
if (lin) {
|
|
3118
3110
|
const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
|
|
3119
|
-
const angleDeg = Math.round(
|
|
3111
|
+
const angleDeg = Math.round(chunkLTEDT475_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
|
|
3120
3112
|
return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
|
|
3121
3113
|
}
|
|
3122
3114
|
const path = gradFill["a:path"];
|
|
@@ -3151,8 +3143,8 @@ function parsePatternFillCss(pattFill) {
|
|
|
3151
3143
|
if (!pattFill) {
|
|
3152
3144
|
return void 0;
|
|
3153
3145
|
}
|
|
3154
|
-
const fgColor =
|
|
3155
|
-
const bgColor =
|
|
3146
|
+
const fgColor = chunkLTEDT475_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
|
|
3147
|
+
const bgColor = chunkLTEDT475_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
|
|
3156
3148
|
const preset = String(pattFill["@_prst"] || "ltDnDiag");
|
|
3157
3149
|
switch (preset) {
|
|
3158
3150
|
case "ltHorz":
|
|
@@ -3263,11 +3255,11 @@ function parseCellBorders(cellProperties) {
|
|
|
3263
3255
|
const prstDash = ln["a:prstDash"];
|
|
3264
3256
|
const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
|
|
3265
3257
|
const cssBorderStyle = ooxmlDashToCss(dashVal);
|
|
3266
|
-
const color =
|
|
3258
|
+
const color = chunkLTEDT475_js.parseDrawingColor(ln["a:solidFill"]);
|
|
3267
3259
|
if (color) {
|
|
3268
|
-
const opacity =
|
|
3260
|
+
const opacity = chunkLTEDT475_js.parseDrawingColorOpacity(ln["a:solidFill"]);
|
|
3269
3261
|
const key = `${edge.prefix}`;
|
|
3270
|
-
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${
|
|
3262
|
+
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkLTEDT475_js.colorWithOpacity(color, opacity)}`;
|
|
3271
3263
|
}
|
|
3272
3264
|
}
|
|
3273
3265
|
return borderStyle;
|
|
@@ -3280,7 +3272,7 @@ function parseCellTextEffects(runProps) {
|
|
|
3280
3272
|
const textShadowParts = [];
|
|
3281
3273
|
const outerShdw = effectLst["a:outerShdw"];
|
|
3282
3274
|
if (outerShdw) {
|
|
3283
|
-
const shdwColor =
|
|
3275
|
+
const shdwColor = chunkLTEDT475_js.parseDrawingColor(outerShdw);
|
|
3284
3276
|
if (shdwColor) {
|
|
3285
3277
|
const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
|
|
3286
3278
|
const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
|
|
@@ -3298,7 +3290,7 @@ function parseCellTextEffects(runProps) {
|
|
|
3298
3290
|
}
|
|
3299
3291
|
const glow = effectLst["a:glow"];
|
|
3300
3292
|
if (glow) {
|
|
3301
|
-
const glowColor =
|
|
3293
|
+
const glowColor = chunkLTEDT475_js.parseDrawingColor(glow);
|
|
3302
3294
|
if (glowColor) {
|
|
3303
3295
|
const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
|
|
3304
3296
|
const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
|
|
@@ -3377,10 +3369,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
3377
3369
|
if (runProps?.["@_u"] !== void 0) {
|
|
3378
3370
|
cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
|
|
3379
3371
|
}
|
|
3380
|
-
const runColor =
|
|
3372
|
+
const runColor = chunkLTEDT475_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkLTEDT475_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
|
|
3381
3373
|
if (runColor) {
|
|
3382
|
-
const opacity =
|
|
3383
|
-
cellStyle.color =
|
|
3374
|
+
const opacity = chunkLTEDT475_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
|
|
3375
|
+
cellStyle.color = chunkLTEDT475_js.colorWithOpacity(runColor, opacity);
|
|
3384
3376
|
}
|
|
3385
3377
|
const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
|
|
3386
3378
|
if (fontFamily) {
|
|
@@ -3390,15 +3382,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
3390
3382
|
cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
|
|
3391
3383
|
}
|
|
3392
3384
|
const cellProperties = cellXml["a:tcPr"];
|
|
3393
|
-
const cellFill =
|
|
3385
|
+
const cellFill = chunkLTEDT475_js.parseDrawingColor(
|
|
3394
3386
|
cellProperties?.["a:solidFill"],
|
|
3395
3387
|
schemeColorOverrides
|
|
3396
3388
|
);
|
|
3397
3389
|
if (cellFill) {
|
|
3398
|
-
const opacity =
|
|
3390
|
+
const opacity = chunkLTEDT475_js.parseDrawingColorOpacity(
|
|
3399
3391
|
cellProperties?.["a:solidFill"]
|
|
3400
3392
|
);
|
|
3401
|
-
cellStyle.backgroundColor =
|
|
3393
|
+
cellStyle.backgroundColor = chunkLTEDT475_js.colorWithOpacity(cellFill, opacity);
|
|
3402
3394
|
} else {
|
|
3403
3395
|
const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
|
|
3404
3396
|
if (gradCss) {
|
|
@@ -3413,16 +3405,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
3413
3405
|
const edgeBorders = parseCellBorders(cellProperties);
|
|
3414
3406
|
Object.assign(cellStyle, edgeBorders);
|
|
3415
3407
|
if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
|
|
3416
|
-
const borderColor =
|
|
3408
|
+
const borderColor = chunkLTEDT475_js.parseDrawingColor(
|
|
3417
3409
|
cellProperties?.["a:lnL"]?.["a:solidFill"],
|
|
3418
3410
|
schemeColorOverrides
|
|
3419
|
-
) ||
|
|
3411
|
+
) || chunkLTEDT475_js.parseDrawingColor(
|
|
3420
3412
|
cellProperties?.["a:lnR"]?.["a:solidFill"],
|
|
3421
3413
|
schemeColorOverrides
|
|
3422
|
-
) ||
|
|
3414
|
+
) || chunkLTEDT475_js.parseDrawingColor(
|
|
3423
3415
|
cellProperties?.["a:lnT"]?.["a:solidFill"],
|
|
3424
3416
|
schemeColorOverrides
|
|
3425
|
-
) ||
|
|
3417
|
+
) || chunkLTEDT475_js.parseDrawingColor(
|
|
3426
3418
|
cellProperties?.["a:lnB"]?.["a:solidFill"],
|
|
3427
3419
|
schemeColorOverrides
|
|
3428
3420
|
);
|
|
@@ -3501,10 +3493,10 @@ function resolveTableStyleFillColor(fill, colorScheme) {
|
|
|
3501
3493
|
}
|
|
3502
3494
|
let color = base;
|
|
3503
3495
|
if (fill.tint !== void 0 && fill.tint > 0) {
|
|
3504
|
-
color =
|
|
3496
|
+
color = chunkLTEDT475_js.tintColor2(color, fill.tint / 1e5);
|
|
3505
3497
|
}
|
|
3506
3498
|
if (fill.shade !== void 0 && fill.shade > 0) {
|
|
3507
|
-
color =
|
|
3499
|
+
color = chunkLTEDT475_js.shadeColor2(color, 1 - fill.shade / 1e5);
|
|
3508
3500
|
}
|
|
3509
3501
|
return color;
|
|
3510
3502
|
}
|
|
@@ -3529,7 +3521,7 @@ function applyTableStyleText(text, colorScheme, style, fontScheme) {
|
|
|
3529
3521
|
style.fontFamily = text.fontFace;
|
|
3530
3522
|
applied = true;
|
|
3531
3523
|
} else {
|
|
3532
|
-
const refFont =
|
|
3524
|
+
const refFont = chunkLTEDT475_js.resolveFontRefIdx(text.fontRefIdx, fontScheme);
|
|
3533
3525
|
if (refFont) {
|
|
3534
3526
|
style.fontFamily = refFont;
|
|
3535
3527
|
applied = true;
|
|
@@ -3540,10 +3532,10 @@ function applyTableStyleText(text, colorScheme, style, fontScheme) {
|
|
|
3540
3532
|
if (base) {
|
|
3541
3533
|
let color = base;
|
|
3542
3534
|
if (text.fontTint !== void 0 && text.fontTint > 0) {
|
|
3543
|
-
color =
|
|
3535
|
+
color = chunkLTEDT475_js.tintColor2(color, text.fontTint / 1e5);
|
|
3544
3536
|
}
|
|
3545
3537
|
if (text.fontShade !== void 0 && text.fontShade > 0) {
|
|
3546
|
-
color =
|
|
3538
|
+
color = chunkLTEDT475_js.shadeColor2(color, 1 - text.fontShade / 1e5);
|
|
3547
3539
|
}
|
|
3548
3540
|
style.color = color;
|
|
3549
3541
|
applied = true;
|
|
@@ -3732,7 +3724,7 @@ function parseTableElementData(element, fallbackTextStyle) {
|
|
|
3732
3724
|
};
|
|
3733
3725
|
}
|
|
3734
3726
|
function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
|
|
3735
|
-
return
|
|
3727
|
+
return chunkLTEDT475_js.getCellDiagonalBorders(style, tableData, pos, {
|
|
3736
3728
|
tableStyleMap: styleCtx?.tableStyleMap,
|
|
3737
3729
|
colorScheme: styleCtx?.theme?.colorScheme,
|
|
3738
3730
|
fontScheme: styleCtx?.theme?.fontScheme
|
|
@@ -3880,9 +3872,9 @@ function cellStyleToCss(style) {
|
|
|
3880
3872
|
if (style.gradientFillCss) {
|
|
3881
3873
|
css.background = style.gradientFillCss;
|
|
3882
3874
|
} else if (style.fillMode === "pattern" && style.patternFillPreset) {
|
|
3883
|
-
const fg =
|
|
3884
|
-
const bg =
|
|
3885
|
-
const svgPattern =
|
|
3875
|
+
const fg = chunkLTEDT475_js.normalizeHexColor(style.patternFillForeground, "#000000");
|
|
3876
|
+
const bg = chunkLTEDT475_js.normalizeHexColor(style.patternFillBackground, "#ffffff");
|
|
3877
|
+
const svgPattern = chunkLTEDT475_js.getPatternSvg(style.patternFillPreset, fg, bg);
|
|
3886
3878
|
if (svgPattern) {
|
|
3887
3879
|
const encoded = encodeURIComponent(svgPattern);
|
|
3888
3880
|
css.backgroundImage = `url("data:image/svg+xml,${encoded}")`;
|
|
@@ -3958,7 +3950,7 @@ function cellStyleToCss(style) {
|
|
|
3958
3950
|
if (edge.width || edge.color) {
|
|
3959
3951
|
const w = edge.width ?? 1;
|
|
3960
3952
|
const c = edge.color ?? style.borderColor ?? "#000000";
|
|
3961
|
-
const s =
|
|
3953
|
+
const s = chunkLTEDT475_js.ooxmlDashToCssBorderStyle(edge.dash);
|
|
3962
3954
|
css[edge.prefix] = `${w}px ${s} ${c}`;
|
|
3963
3955
|
}
|
|
3964
3956
|
}
|
|
@@ -3989,7 +3981,7 @@ function cellStyleToCss(style) {
|
|
|
3989
3981
|
css.textShadow = textShadowParts.join(", ");
|
|
3990
3982
|
}
|
|
3991
3983
|
if (style.cell3D) {
|
|
3992
|
-
Object.assign(css,
|
|
3984
|
+
Object.assign(css, chunkLTEDT475_js.cell3DBevelCss(style.cell3D));
|
|
3993
3985
|
}
|
|
3994
3986
|
return css;
|
|
3995
3987
|
}
|
|
@@ -4003,7 +3995,7 @@ function TableResizeOverlay({
|
|
|
4003
3995
|
const containerRef = React6.useRef(null);
|
|
4004
3996
|
const [rowBounds, setRowBounds] = React6.useState([]);
|
|
4005
3997
|
const dragRef = React6.useRef(null);
|
|
4006
|
-
const colBoundaries = React6.useMemo(() =>
|
|
3998
|
+
const colBoundaries = React6.useMemo(() => chunkLTEDT475_js.computeColumnBoundaries(columnWidths), [columnWidths]);
|
|
4007
3999
|
const measureRows = React6.useCallback(() => {
|
|
4008
4000
|
const container = containerRef.current;
|
|
4009
4001
|
if (!container) {
|
|
@@ -4050,11 +4042,11 @@ function TableResizeOverlay({
|
|
|
4050
4042
|
const rect = containerRef.current.getBoundingClientRect();
|
|
4051
4043
|
if (drag.type === "col" && drag.initialWidths && onResizeColumns) {
|
|
4052
4044
|
const deltaProp = (e.clientX - drag.startPos) / rect.width;
|
|
4053
|
-
onResizeColumns(
|
|
4045
|
+
onResizeColumns(chunkLTEDT475_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
|
|
4054
4046
|
} else if (drag.type === "row" && onResizeRow) {
|
|
4055
4047
|
const deltaY = e.clientY - drag.startPos;
|
|
4056
|
-
const newHeight =
|
|
4057
|
-
drag.initialRowHeight ??
|
|
4048
|
+
const newHeight = chunkLTEDT475_js.computeResizedRowHeight(
|
|
4049
|
+
drag.initialRowHeight ?? chunkLTEDT475_js.DEFAULT_ROW_HEIGHT,
|
|
4058
4050
|
deltaY
|
|
4059
4051
|
);
|
|
4060
4052
|
onResizeRow(drag.index, newHeight);
|
|
@@ -4092,7 +4084,7 @@ function TableResizeOverlay({
|
|
|
4092
4084
|
e.stopPropagation();
|
|
4093
4085
|
const table = containerRef.current?.querySelector("table");
|
|
4094
4086
|
const tr = table?.querySelectorAll("tbody > tr")[index];
|
|
4095
|
-
const actualHeight = tr?.offsetHeight ??
|
|
4087
|
+
const actualHeight = tr?.offsetHeight ?? chunkLTEDT475_js.DEFAULT_ROW_HEIGHT;
|
|
4096
4088
|
document.body.style.cursor = "row-resize";
|
|
4097
4089
|
document.body.style.userSelect = "none";
|
|
4098
4090
|
dragRef.current = {
|
|
@@ -4140,7 +4132,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
4140
4132
|
}
|
|
4141
4133
|
const first = selectedCell.selectedCells[0];
|
|
4142
4134
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
4143
|
-
return
|
|
4135
|
+
return chunkLTEDT475_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
|
|
4144
4136
|
})();
|
|
4145
4137
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4146
4138
|
TableResizeOverlay,
|
|
@@ -4173,7 +4165,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
4173
4165
|
return null;
|
|
4174
4166
|
}
|
|
4175
4167
|
const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
|
|
4176
|
-
const isInMultiSelection =
|
|
4168
|
+
const isInMultiSelection = chunkLTEDT475_js.isCellInRect(rowIndex, cellIndex, selectionRect);
|
|
4177
4169
|
const isCellEditing = isCellSelected && selectedCell?.isEditing;
|
|
4178
4170
|
const diag = getCellDiagonalBorders2(
|
|
4179
4171
|
cell.style,
|
|
@@ -4203,7 +4195,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
4203
4195
|
}
|
|
4204
4196
|
event.stopPropagation();
|
|
4205
4197
|
if (event.shiftKey && selectedCell) {
|
|
4206
|
-
const rect =
|
|
4198
|
+
const rect = chunkLTEDT475_js.computeSelectionRect(
|
|
4207
4199
|
selectedCell.rowIndex,
|
|
4208
4200
|
selectedCell.columnIndex,
|
|
4209
4201
|
rowIndex,
|
|
@@ -4213,7 +4205,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
4213
4205
|
options?.onSelectCell?.({
|
|
4214
4206
|
rowIndex: selectedCell.rowIndex,
|
|
4215
4207
|
columnIndex: selectedCell.columnIndex,
|
|
4216
|
-
selectedCells:
|
|
4208
|
+
selectedCells: chunkLTEDT475_js.rectToCells(rect)
|
|
4217
4209
|
});
|
|
4218
4210
|
} else {
|
|
4219
4211
|
options?.onSelectCell?.({
|
|
@@ -4290,7 +4282,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
4290
4282
|
}
|
|
4291
4283
|
const first = selectedCell.selectedCells[0];
|
|
4292
4284
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
4293
|
-
return
|
|
4285
|
+
return chunkLTEDT475_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
|
|
4294
4286
|
})();
|
|
4295
4287
|
const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
|
|
4296
4288
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4367,7 +4359,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
4367
4359
|
"border px-1 py-0.5 align-top",
|
|
4368
4360
|
isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
|
|
4369
4361
|
selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
|
|
4370
|
-
|
|
4362
|
+
chunkLTEDT475_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
|
|
4371
4363
|
),
|
|
4372
4364
|
colSpan,
|
|
4373
4365
|
rowSpan: rSpan,
|
|
@@ -4378,7 +4370,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
4378
4370
|
}
|
|
4379
4371
|
event.stopPropagation();
|
|
4380
4372
|
if (event.shiftKey && selectedCell && tableEl.tableData) {
|
|
4381
|
-
const rect =
|
|
4373
|
+
const rect = chunkLTEDT475_js.computeSelectionRect(
|
|
4382
4374
|
selectedCell.rowIndex,
|
|
4383
4375
|
selectedCell.columnIndex,
|
|
4384
4376
|
rowIndex,
|
|
@@ -4388,7 +4380,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
4388
4380
|
options?.onSelectCell?.({
|
|
4389
4381
|
rowIndex: selectedCell.rowIndex,
|
|
4390
4382
|
columnIndex: selectedCell.columnIndex,
|
|
4391
|
-
selectedCells:
|
|
4383
|
+
selectedCells: chunkLTEDT475_js.rectToCells(rect)
|
|
4392
4384
|
});
|
|
4393
4385
|
} else {
|
|
4394
4386
|
options?.onSelectCell?.({
|
|
@@ -4443,24 +4435,24 @@ function renderTableElement(element, textStyle, options) {
|
|
|
4443
4435
|
}
|
|
4444
4436
|
var LEGEND_ITEM_WIDTH = 80;
|
|
4445
4437
|
function partAttrs(part) {
|
|
4446
|
-
return part ?
|
|
4438
|
+
return part ? chunkLTEDT475_js.chartPartToAttrs(part) : void 0;
|
|
4447
4439
|
}
|
|
4448
4440
|
function resolveReactPalette(chartData) {
|
|
4449
4441
|
if (chartData.colorPalette && chartData.colorPalette.length > 0) {
|
|
4450
4442
|
return chartData.colorPalette;
|
|
4451
4443
|
}
|
|
4452
|
-
return [...
|
|
4444
|
+
return [...chunkLTEDT475_js.getChartStylePalette(chartData.style?.styleId)];
|
|
4453
4445
|
}
|
|
4454
4446
|
function buildReactChartViewModel(element) {
|
|
4455
4447
|
if (element.type !== "chart" || !element.chartData) {
|
|
4456
|
-
return
|
|
4448
|
+
return chunkLTEDT475_js.buildChartViewModel(element);
|
|
4457
4449
|
}
|
|
4458
4450
|
const palette = resolveReactPalette(element.chartData);
|
|
4459
4451
|
const themedElement = {
|
|
4460
4452
|
...element,
|
|
4461
4453
|
chartData: { ...element.chartData, colorPalette: palette }
|
|
4462
4454
|
};
|
|
4463
|
-
return
|
|
4455
|
+
return chunkLTEDT475_js.buildChartViewModel(themedElement);
|
|
4464
4456
|
}
|
|
4465
4457
|
function renderPrimitive(prim, key) {
|
|
4466
4458
|
switch (prim.kind) {
|
|
@@ -4849,7 +4841,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
4849
4841
|
const unmatchedRows = [];
|
|
4850
4842
|
categories.forEach((cat, i) => {
|
|
4851
4843
|
const value = values[i] ?? 0;
|
|
4852
|
-
const code =
|
|
4844
|
+
const code = chunkLTEDT475_js.resolveRegionCode(cat);
|
|
4853
4845
|
if (code) {
|
|
4854
4846
|
regionValueMap.set(code, { value, label: cat });
|
|
4855
4847
|
} else {
|
|
@@ -4887,8 +4879,8 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
4887
4879
|
let fill = "#e2e8f0";
|
|
4888
4880
|
let dataLabel = null;
|
|
4889
4881
|
if (entry) {
|
|
4890
|
-
const t =
|
|
4891
|
-
fill =
|
|
4882
|
+
const t = chunkLTEDT475_js.normalizeValue(entry.value, minVal, maxVal);
|
|
4883
|
+
fill = chunkLTEDT475_js.sequentialColorScale(t);
|
|
4892
4884
|
dataLabel = /* @__PURE__ */ jsxRuntime.jsx(
|
|
4893
4885
|
"text",
|
|
4894
4886
|
{
|
|
@@ -4899,7 +4891,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
4899
4891
|
fontWeight: 600,
|
|
4900
4892
|
fill: "#1e293b",
|
|
4901
4893
|
style: { pointerEvents: "none" },
|
|
4902
|
-
children:
|
|
4894
|
+
children: chunkLTEDT475_js.formatAxisValue(entry.value)
|
|
4903
4895
|
},
|
|
4904
4896
|
`${element.id}-map-dl-${region.code}`
|
|
4905
4897
|
);
|
|
@@ -4917,7 +4909,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
4917
4909
|
opacity: 0.9,
|
|
4918
4910
|
children: /* @__PURE__ */ jsxRuntime.jsxs("title", { children: [
|
|
4919
4911
|
region.name,
|
|
4920
|
-
entry ? `: ${
|
|
4912
|
+
entry ? `: ${chunkLTEDT475_js.formatAxisValue(entry.value)}` : ""
|
|
4921
4913
|
] })
|
|
4922
4914
|
}
|
|
4923
4915
|
),
|
|
@@ -4955,7 +4947,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
4955
4947
|
fontSize: 7,
|
|
4956
4948
|
fill: "#64748b",
|
|
4957
4949
|
textAnchor: "middle",
|
|
4958
|
-
children:
|
|
4950
|
+
children: chunkLTEDT475_js.formatAxisValue(minVal)
|
|
4959
4951
|
},
|
|
4960
4952
|
`${element.id}-map-legend-min`
|
|
4961
4953
|
),
|
|
@@ -4967,7 +4959,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
4967
4959
|
fontSize: 7,
|
|
4968
4960
|
fill: "#64748b",
|
|
4969
4961
|
textAnchor: "middle",
|
|
4970
|
-
children:
|
|
4962
|
+
children: chunkLTEDT475_js.formatAxisValue(maxVal)
|
|
4971
4963
|
},
|
|
4972
4964
|
`${element.id}-map-legend-max`
|
|
4973
4965
|
)
|
|
@@ -5033,7 +5025,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
5033
5025
|
y,
|
|
5034
5026
|
fontSize,
|
|
5035
5027
|
fill: "#475569",
|
|
5036
|
-
children:
|
|
5028
|
+
children: chunkLTEDT475_js.formatAxisValue(row.value)
|
|
5037
5029
|
},
|
|
5038
5030
|
`${element.id}-map-ft-val-${i}`
|
|
5039
5031
|
)
|
|
@@ -5104,7 +5096,7 @@ function renderStackedBarChart(element, _chartData, _categoryLabels) {
|
|
|
5104
5096
|
|
|
5105
5097
|
// src/viewer/utils/chart-overlay-utils.ts
|
|
5106
5098
|
function sColor(series, idx) {
|
|
5107
|
-
return
|
|
5099
|
+
return chunkLTEDT475_js.seriesColor(series, idx);
|
|
5108
5100
|
}
|
|
5109
5101
|
function valToY(val, range, topY, bottomY) {
|
|
5110
5102
|
const usable = bottomY - topY;
|
|
@@ -5643,7 +5635,7 @@ function renderLegend(id, style, series, layout, colorPalette) {
|
|
|
5643
5635
|
width: 10,
|
|
5644
5636
|
height: 10,
|
|
5645
5637
|
rx: 2,
|
|
5646
|
-
fill:
|
|
5638
|
+
fill: chunkLTEDT475_js.seriesColor(s, i, style?.styleId, colorPalette)
|
|
5647
5639
|
},
|
|
5648
5640
|
`${id}-leg-r-${i}`
|
|
5649
5641
|
)
|
|
@@ -5667,7 +5659,7 @@ function renderLegend(id, style, series, layout, colorPalette) {
|
|
|
5667
5659
|
width: 10,
|
|
5668
5660
|
height: 10,
|
|
5669
5661
|
rx: 2,
|
|
5670
|
-
fill:
|
|
5662
|
+
fill: chunkLTEDT475_js.seriesColor(s, i, style?.styleId, colorPalette)
|
|
5671
5663
|
}
|
|
5672
5664
|
),
|
|
5673
5665
|
/* @__PURE__ */ jsxRuntime.jsx("text", { x: x + 14, y: cy + 8, fontSize: 9, fill: "#475569", children: s.name || `Series ${i + 1}` })
|
|
@@ -5680,9 +5672,9 @@ function renderGridlines(id, style, range, layout) {
|
|
|
5680
5672
|
}
|
|
5681
5673
|
const lines = [];
|
|
5682
5674
|
if (range.logScale && range.logBase) {
|
|
5683
|
-
const ticks =
|
|
5675
|
+
const ticks = chunkLTEDT475_js.generateLogTicks(range);
|
|
5684
5676
|
ticks.forEach((tickVal, i) => {
|
|
5685
|
-
const y =
|
|
5677
|
+
const y = chunkLTEDT475_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
|
|
5686
5678
|
lines.push(
|
|
5687
5679
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5688
5680
|
"line",
|
|
@@ -5703,7 +5695,7 @@ function renderGridlines(id, style, range, layout) {
|
|
|
5703
5695
|
const steps = 4;
|
|
5704
5696
|
for (let i = 0; i <= steps; i++) {
|
|
5705
5697
|
const val = range.min + range.span * i / steps;
|
|
5706
|
-
const y =
|
|
5698
|
+
const y = chunkLTEDT475_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
5707
5699
|
lines.push(
|
|
5708
5700
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5709
5701
|
"line",
|
|
@@ -5727,9 +5719,9 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
5727
5719
|
const labels = [];
|
|
5728
5720
|
const hasDisplayUnits = Boolean(axisFormatting?.displayUnits);
|
|
5729
5721
|
if (range.logScale && range.logBase) {
|
|
5730
|
-
const ticks =
|
|
5722
|
+
const ticks = chunkLTEDT475_js.generateLogTicks(range);
|
|
5731
5723
|
ticks.forEach((tickVal, i) => {
|
|
5732
|
-
const y =
|
|
5724
|
+
const y = chunkLTEDT475_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
|
|
5733
5725
|
labels.push(
|
|
5734
5726
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5735
5727
|
"text",
|
|
@@ -5739,7 +5731,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
5739
5731
|
textAnchor: "end",
|
|
5740
5732
|
fontSize: 8,
|
|
5741
5733
|
fill: "#64748b",
|
|
5742
|
-
children: hasDisplayUnits ?
|
|
5734
|
+
children: hasDisplayUnits ? chunkLTEDT475_js.formatAxisValueWithUnits(tickVal, axisFormatting) : chunkLTEDT475_js.formatAxisValue(tickVal)
|
|
5743
5735
|
},
|
|
5744
5736
|
`${id}-vaxis-log-${i}`
|
|
5745
5737
|
)
|
|
@@ -5749,7 +5741,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
5749
5741
|
const steps = 4;
|
|
5750
5742
|
for (let i = 0; i <= steps; i++) {
|
|
5751
5743
|
const val = range.min + range.span * i / steps;
|
|
5752
|
-
const y =
|
|
5744
|
+
const y = chunkLTEDT475_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
5753
5745
|
labels.push(
|
|
5754
5746
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5755
5747
|
"text",
|
|
@@ -5759,7 +5751,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
5759
5751
|
textAnchor: "end",
|
|
5760
5752
|
fontSize: 8,
|
|
5761
5753
|
fill: "#64748b",
|
|
5762
|
-
children: hasDisplayUnits ?
|
|
5754
|
+
children: hasDisplayUnits ? chunkLTEDT475_js.formatAxisValueWithUnits(val, axisFormatting) : chunkLTEDT475_js.formatAxisValue(val)
|
|
5763
5755
|
},
|
|
5764
5756
|
`${id}-vaxis-${i}`
|
|
5765
5757
|
)
|
|
@@ -5767,7 +5759,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
5767
5759
|
}
|
|
5768
5760
|
}
|
|
5769
5761
|
if (hasDisplayUnits) {
|
|
5770
|
-
const unitLabel =
|
|
5762
|
+
const unitLabel = chunkLTEDT475_js.getDisplayUnitLabel(
|
|
5771
5763
|
axisFormatting.displayUnits,
|
|
5772
5764
|
axisFormatting.displayUnitsLabel
|
|
5773
5765
|
);
|
|
@@ -5842,7 +5834,7 @@ function renderZeroLine(id, range, layout) {
|
|
|
5842
5834
|
if (range.min >= 0) {
|
|
5843
5835
|
return null;
|
|
5844
5836
|
}
|
|
5845
|
-
const y =
|
|
5837
|
+
const y = chunkLTEDT475_js.valueToY(0, range, layout.plotTop, layout.plotBottom);
|
|
5846
5838
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5847
5839
|
"line",
|
|
5848
5840
|
{
|
|
@@ -5866,7 +5858,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
5866
5858
|
const hasDisplayUnits = Boolean(axisFormatting?.displayUnits);
|
|
5867
5859
|
for (let i = 0; i <= steps; i++) {
|
|
5868
5860
|
const val = range.min + range.span * i / steps;
|
|
5869
|
-
const y =
|
|
5861
|
+
const y = chunkLTEDT475_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
5870
5862
|
labels.push(
|
|
5871
5863
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5872
5864
|
"text",
|
|
@@ -5878,7 +5870,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
5878
5870
|
fontFamily,
|
|
5879
5871
|
fontWeight,
|
|
5880
5872
|
fill: fontColor,
|
|
5881
|
-
children: hasDisplayUnits ?
|
|
5873
|
+
children: hasDisplayUnits ? chunkLTEDT475_js.formatAxisValueWithUnits(val, axisFormatting) : chunkLTEDT475_js.formatAxisValue(val)
|
|
5882
5874
|
},
|
|
5883
5875
|
`${id}-sec-vaxis-${i}`
|
|
5884
5876
|
)
|
|
@@ -5902,7 +5894,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
5902
5894
|
);
|
|
5903
5895
|
}
|
|
5904
5896
|
if (hasDisplayUnits) {
|
|
5905
|
-
const unitLabel =
|
|
5897
|
+
const unitLabel = chunkLTEDT475_js.getDisplayUnitLabel(
|
|
5906
5898
|
axisFormatting.displayUnits,
|
|
5907
5899
|
axisFormatting.displayUnitsLabel
|
|
5908
5900
|
);
|
|
@@ -5933,7 +5925,7 @@ function renderSecondaryAxisTicks(id, range, layout) {
|
|
|
5933
5925
|
const ticks = [];
|
|
5934
5926
|
for (let i = 0; i <= steps; i++) {
|
|
5935
5927
|
const val = range.min + range.span * i / steps;
|
|
5936
|
-
const y =
|
|
5928
|
+
const y = chunkLTEDT475_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
5937
5929
|
ticks.push(
|
|
5938
5930
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5939
5931
|
"line",
|
|
@@ -5960,7 +5952,7 @@ function renderSecondaryGridlines(id, range, layout, axisFormatting) {
|
|
|
5960
5952
|
const gridColor = axisFormatting.majorGridlinesSpPr?.strokeColor ?? "#e2e8f0";
|
|
5961
5953
|
for (let i = 0; i <= steps; i++) {
|
|
5962
5954
|
const val = range.min + range.span * i / steps;
|
|
5963
|
-
const y =
|
|
5955
|
+
const y = chunkLTEDT475_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
5964
5956
|
lines.push(
|
|
5965
5957
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5966
5958
|
"line",
|
|
@@ -6122,7 +6114,7 @@ function renderChartDataTable(elementId, chartData, svgWidth) {
|
|
|
6122
6114
|
width: 8,
|
|
6123
6115
|
height: 8,
|
|
6124
6116
|
borderRadius: 2,
|
|
6125
|
-
backgroundColor:
|
|
6117
|
+
backgroundColor: chunkLTEDT475_js.seriesColor(
|
|
6126
6118
|
s,
|
|
6127
6119
|
si,
|
|
6128
6120
|
chartData.style?.styleId,
|
|
@@ -6161,8 +6153,8 @@ function renderChartDataTable(elementId, chartData, svgWidth) {
|
|
|
6161
6153
|
function renderStockChart(element, chartData, categoryLabels) {
|
|
6162
6154
|
const style = chartData.style;
|
|
6163
6155
|
const legendPos = style?.legendPosition || "b";
|
|
6164
|
-
const range =
|
|
6165
|
-
const layout =
|
|
6156
|
+
const range = chunkLTEDT475_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
6157
|
+
const layout = chunkLTEDT475_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
6166
6158
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
6167
6159
|
const barGroupWidth = layout.plotWidth / catCount;
|
|
6168
6160
|
const candleWidth = barGroupWidth * 0.5;
|
|
@@ -6183,10 +6175,10 @@ function renderStockChart(element, chartData, categoryLabels) {
|
|
|
6183
6175
|
const close = closeSeries.values[ci] ?? high;
|
|
6184
6176
|
const isUp = close >= open;
|
|
6185
6177
|
const cx = layout.plotLeft + barGroupWidth * ci + barGroupWidth / 2;
|
|
6186
|
-
const highY =
|
|
6187
|
-
const lowY =
|
|
6188
|
-
const openY =
|
|
6189
|
-
const closeY =
|
|
6178
|
+
const highY = chunkLTEDT475_js.valueToY(high, range, layout.plotTop, layout.plotBottom);
|
|
6179
|
+
const lowY = chunkLTEDT475_js.valueToY(low, range, layout.plotTop, layout.plotBottom);
|
|
6180
|
+
const openY = chunkLTEDT475_js.valueToY(open, range, layout.plotTop, layout.plotBottom);
|
|
6181
|
+
const closeY = chunkLTEDT475_js.valueToY(close, range, layout.plotTop, layout.plotBottom);
|
|
6190
6182
|
elements.push(
|
|
6191
6183
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6192
6184
|
"line",
|
|
@@ -6229,7 +6221,7 @@ function renderStockChart(element, chartData, categoryLabels) {
|
|
|
6229
6221
|
textAnchor: "middle",
|
|
6230
6222
|
fontSize: 7,
|
|
6231
6223
|
fill: "#334155",
|
|
6232
|
-
children:
|
|
6224
|
+
children: chunkLTEDT475_js.formatAxisValue(close)
|
|
6233
6225
|
},
|
|
6234
6226
|
`${element.id}-stock-dl-${ci}`
|
|
6235
6227
|
)
|
|
@@ -6271,7 +6263,7 @@ function FailedToLoad() {
|
|
|
6271
6263
|
var LazySurfaceChart3DScene = React6__default.default.lazy(
|
|
6272
6264
|
async () => {
|
|
6273
6265
|
try {
|
|
6274
|
-
return await import('./SurfaceChart3DScene-
|
|
6266
|
+
return await import('./SurfaceChart3DScene-K7Q5NYZ4.js');
|
|
6275
6267
|
} catch {
|
|
6276
6268
|
return { default: FailedToLoad };
|
|
6277
6269
|
}
|
|
@@ -6295,7 +6287,7 @@ var SurfaceChart3DErrorBoundary = class extends React6__default.default.Componen
|
|
|
6295
6287
|
function buildSurfaceData(chartData, categoryLabels) {
|
|
6296
6288
|
const rows = chartData.series.length;
|
|
6297
6289
|
const cols = Math.max(categoryLabels.length, 1);
|
|
6298
|
-
const range =
|
|
6290
|
+
const range = chunkLTEDT475_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
6299
6291
|
const heightMap = new Float32Array(rows * cols);
|
|
6300
6292
|
const colorMap = new Float32Array(rows * cols * 3);
|
|
6301
6293
|
for (let r = 0; r < rows; r++) {
|
|
@@ -6415,8 +6407,8 @@ function darkenRgb(r, g, b, factor) {
|
|
|
6415
6407
|
function renderIsometricSurfaceChart(element, chartData, categoryLabels) {
|
|
6416
6408
|
const style = chartData.style;
|
|
6417
6409
|
const legendPos = style?.legendPosition || "b";
|
|
6418
|
-
const layout =
|
|
6419
|
-
const range =
|
|
6410
|
+
const layout = chunkLTEDT475_js.computeLayout(element.width, element.height, style, false, legendPos);
|
|
6411
|
+
const range = chunkLTEDT475_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
6420
6412
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
6421
6413
|
const seriesCount = chartData.series.length;
|
|
6422
6414
|
const cols = catCount - 1;
|
|
@@ -6506,8 +6498,8 @@ function renderIsometricSurfaceChart(element, chartData, categoryLabels) {
|
|
|
6506
6498
|
function renderFlatSurfaceChart(element, chartData, categoryLabels) {
|
|
6507
6499
|
const style = chartData.style;
|
|
6508
6500
|
const legendPos = style?.legendPosition || "b";
|
|
6509
|
-
const layout =
|
|
6510
|
-
const range =
|
|
6501
|
+
const layout = chunkLTEDT475_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
6502
|
+
const range = chunkLTEDT475_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
6511
6503
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
6512
6504
|
const seriesCount = chartData.series.length;
|
|
6513
6505
|
const cellW = layout.plotWidth / Math.max(catCount - 1, 1);
|
|
@@ -6570,7 +6562,7 @@ function renderSurfaceChart(element, chartData, categoryLabels) {
|
|
|
6570
6562
|
function renderTreemapChart(element, chartData, categoryLabels) {
|
|
6571
6563
|
const style = chartData.style;
|
|
6572
6564
|
const legendPos = style?.legendPosition || "b";
|
|
6573
|
-
const layout =
|
|
6565
|
+
const layout = chunkLTEDT475_js.computeLayout(element.width, element.height, style, false, legendPos);
|
|
6574
6566
|
const allValues = chartData.series.flatMap((s) => s.values);
|
|
6575
6567
|
const totalAbs = allValues.reduce((sum, v) => sum + Math.abs(v), 0) || 1;
|
|
6576
6568
|
const rects = [];
|
|
@@ -6593,7 +6585,7 @@ function renderTreemapChart(element, chartData, categoryLabels) {
|
|
|
6593
6585
|
y: curY,
|
|
6594
6586
|
width: Math.max(w - 1, 1),
|
|
6595
6587
|
height: Math.max(h - 1, 1),
|
|
6596
|
-
fill:
|
|
6588
|
+
fill: chunkLTEDT475_js.paletteColor(item.index, chartData.style?.styleId, chartData.colorPalette),
|
|
6597
6589
|
rx: 2,
|
|
6598
6590
|
opacity: 0.85
|
|
6599
6591
|
},
|
|
@@ -6646,8 +6638,8 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
6646
6638
|
const style = chartData.style;
|
|
6647
6639
|
const legendPos = style?.legendPosition || "b";
|
|
6648
6640
|
const values = chartData.series[0]?.values ?? [];
|
|
6649
|
-
const range =
|
|
6650
|
-
const layout =
|
|
6641
|
+
const range = chunkLTEDT475_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
6642
|
+
const layout = chunkLTEDT475_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
6651
6643
|
const catCount = Math.max(categoryLabels.length, values.length, 1);
|
|
6652
6644
|
const barWidth = layout.plotWidth / catCount * 0.6;
|
|
6653
6645
|
const gap = layout.plotWidth / catCount * 0.2;
|
|
@@ -6658,8 +6650,8 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
6658
6650
|
const isLast = i === values.length - 1;
|
|
6659
6651
|
const startVal = isLast ? 0 : runningTotal;
|
|
6660
6652
|
const endVal = isLast ? runningTotal + val : runningTotal + val;
|
|
6661
|
-
const barStartY =
|
|
6662
|
-
const barEndY =
|
|
6653
|
+
const barStartY = chunkLTEDT475_js.valueToY(startVal, range, layout.plotTop, layout.plotBottom);
|
|
6654
|
+
const barEndY = chunkLTEDT475_js.valueToY(endVal, range, layout.plotTop, layout.plotBottom);
|
|
6663
6655
|
const x = layout.plotLeft + layout.plotWidth / catCount * i + gap;
|
|
6664
6656
|
const y = Math.min(barStartY, barEndY);
|
|
6665
6657
|
const h = Math.max(Math.abs(barEndY - barStartY), 1);
|
|
@@ -6688,7 +6680,7 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
6688
6680
|
textAnchor: "middle",
|
|
6689
6681
|
fontSize: 7,
|
|
6690
6682
|
fill: "#334155",
|
|
6691
|
-
children:
|
|
6683
|
+
children: chunkLTEDT475_js.formatAxisValue(isLast ? endVal : val)
|
|
6692
6684
|
},
|
|
6693
6685
|
`${element.id}-wf-dl-${i}`
|
|
6694
6686
|
)
|
|
@@ -6736,18 +6728,18 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
6736
6728
|
function renderComboChart(element, chartData, categoryLabels) {
|
|
6737
6729
|
const style = chartData.style;
|
|
6738
6730
|
const legendPos = style?.legendPosition || "b";
|
|
6739
|
-
const layoutOpts =
|
|
6731
|
+
const layoutOpts = chunkLTEDT475_js.computeLayoutOptions(
|
|
6740
6732
|
chartData.axes,
|
|
6741
6733
|
chartData.dataTable,
|
|
6742
6734
|
chartData.series.length
|
|
6743
6735
|
);
|
|
6744
|
-
const layout =
|
|
6745
|
-
const { primary, secondary } =
|
|
6736
|
+
const layout = chunkLTEDT475_js.computeLayout(element.width, element.height, style, true, legendPos, layoutOpts);
|
|
6737
|
+
const { primary, secondary } = chunkLTEDT475_js.splitSeriesByAxis(chartData.series, chartData.axes);
|
|
6746
6738
|
const primarySeries = primary.length > 0 ? primary.map((e) => e.series) : chartData.series;
|
|
6747
6739
|
const secondarySeries = secondary.map((e) => e.series);
|
|
6748
|
-
const range =
|
|
6749
|
-
const secondaryRange = secondarySeries.length > 0 ?
|
|
6750
|
-
const secondaryAxisFmt =
|
|
6740
|
+
const range = chunkLTEDT475_js.computeValueRangeForChart(primarySeries, chartData.axes);
|
|
6741
|
+
const secondaryRange = secondarySeries.length > 0 ? chunkLTEDT475_js.computeValueRange(secondarySeries) : void 0;
|
|
6742
|
+
const secondaryAxisFmt = chunkLTEDT475_js.getSecondaryValueAxis(chartData.axes);
|
|
6751
6743
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
6752
6744
|
const barSeriesCount = 1;
|
|
6753
6745
|
const barGroupWidth = layout.plotWidth / catCount;
|
|
@@ -6763,8 +6755,8 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
6763
6755
|
const barRange = isBarSecondary && secondaryRange ? secondaryRange : range;
|
|
6764
6756
|
barSeries.values.forEach((val, vi) => {
|
|
6765
6757
|
const x = layout.plotLeft + barGroupWidth * vi + barOffset;
|
|
6766
|
-
const zeroY =
|
|
6767
|
-
const valY =
|
|
6758
|
+
const zeroY = chunkLTEDT475_js.valueToY(0, barRange, layout.plotTop, layout.plotBottom);
|
|
6759
|
+
const valY = chunkLTEDT475_js.valueToY(val, barRange, layout.plotTop, layout.plotBottom);
|
|
6768
6760
|
const y = Math.min(zeroY, valY);
|
|
6769
6761
|
const h = Math.max(Math.abs(zeroY - valY), 1);
|
|
6770
6762
|
barElements.push(
|
|
@@ -6775,7 +6767,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
6775
6767
|
y,
|
|
6776
6768
|
width: barWidth,
|
|
6777
6769
|
height: h,
|
|
6778
|
-
fill:
|
|
6770
|
+
fill: chunkLTEDT475_js.seriesColor(barSeries, 0, chartData.style?.styleId, chartData.colorPalette),
|
|
6779
6771
|
rx: 1
|
|
6780
6772
|
},
|
|
6781
6773
|
`${element.id}-combo-bar-${vi}`
|
|
@@ -6791,7 +6783,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
6791
6783
|
textAnchor: "middle",
|
|
6792
6784
|
fontSize: 7,
|
|
6793
6785
|
fill: "#334155",
|
|
6794
|
-
children:
|
|
6786
|
+
children: chunkLTEDT475_js.formatAxisValue(val)
|
|
6795
6787
|
},
|
|
6796
6788
|
`${element.id}-combo-bar-dl-${vi}`
|
|
6797
6789
|
)
|
|
@@ -6808,10 +6800,10 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
6808
6800
|
const activeRange = isSecondary && secondaryRange ? secondaryRange : range;
|
|
6809
6801
|
const points = series.values.map((val, vi) => {
|
|
6810
6802
|
const x = layout.plotLeft + barGroupWidth * vi + barGroupWidth / 2;
|
|
6811
|
-
const y =
|
|
6803
|
+
const y = chunkLTEDT475_js.valueToY(val, activeRange, layout.plotTop, layout.plotBottom);
|
|
6812
6804
|
return { x, y, val };
|
|
6813
6805
|
});
|
|
6814
|
-
const c =
|
|
6806
|
+
const c = chunkLTEDT475_js.seriesColor(series, seriesIdx, chartData.style?.styleId, chartData.colorPalette);
|
|
6815
6807
|
lineElements.push(
|
|
6816
6808
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6817
6809
|
"polyline",
|
|
@@ -6838,7 +6830,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
6838
6830
|
textAnchor: "middle",
|
|
6839
6831
|
fontSize: 7,
|
|
6840
6832
|
fill: "#334155",
|
|
6841
|
-
children:
|
|
6833
|
+
children: chunkLTEDT475_js.formatAxisValue(p.val)
|
|
6842
6834
|
},
|
|
6843
6835
|
`${element.id}-combo-line-dl-${si}-${vi}`
|
|
6844
6836
|
)
|
|
@@ -7984,14 +7976,14 @@ function buildNotesPdf(pages) {
|
|
|
7984
7976
|
notes: page.notes,
|
|
7985
7977
|
slideNumber: page.slideNumber
|
|
7986
7978
|
}));
|
|
7987
|
-
const bytes =
|
|
7979
|
+
const bytes = chunkLTEDT475_js.buildNotesPdfBytes(images, meta);
|
|
7988
7980
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
7989
7981
|
return URL.createObjectURL(blob);
|
|
7990
7982
|
}
|
|
7991
7983
|
|
|
7992
7984
|
// src/viewer/utils/pdf-builder-slides.ts
|
|
7993
7985
|
function buildPdfFromImageData(images) {
|
|
7994
|
-
const bytes =
|
|
7986
|
+
const bytes = chunkLTEDT475_js.buildSlidesPdfBytes(images);
|
|
7995
7987
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
7996
7988
|
return URL.createObjectURL(blob);
|
|
7997
7989
|
}
|
|
@@ -8000,7 +7992,7 @@ function buildPdfFromImageData(images) {
|
|
|
8000
7992
|
var activePreview = null;
|
|
8001
7993
|
function startPreviewAnimation(elementId, preset, options) {
|
|
8002
7994
|
stopPreviewAnimation();
|
|
8003
|
-
const descriptor =
|
|
7995
|
+
const descriptor = chunkLTEDT475_js.buildPreviewAnimation(preset, options);
|
|
8004
7996
|
if (!descriptor) {
|
|
8005
7997
|
return;
|
|
8006
7998
|
}
|