pptx-react-viewer 3.1.3 → 3.1.4
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 +11 -0
- package/dist/{AiChatPanel-5JAQBLTU.mjs → AiChatPanel-ITCVRVKP.mjs} +3 -3
- package/dist/AiChatPanel-ITCVRVKP.mjs.br +0 -0
- package/dist/AiChatPanel-ITCVRVKP.mjs.gz +0 -0
- package/dist/{AiChatPanel-C3E7UV7T.js → AiChatPanel-TO5PHBGW.js} +23 -23
- package/dist/AiChatPanel-TO5PHBGW.js.br +0 -0
- package/dist/AiChatPanel-TO5PHBGW.js.gz +0 -0
- package/dist/{Area3DChartScene-XY2PKRMA.js → Area3DChartScene-2UNQ3J3V.js} +2 -2
- package/dist/Area3DChartScene-2UNQ3J3V.js.br +0 -0
- package/dist/Area3DChartScene-2UNQ3J3V.js.gz +0 -0
- package/dist/{Area3DChartScene-KE434ERF.mjs → Area3DChartScene-7PHPDOTG.mjs} +1 -1
- package/dist/Area3DChartScene-7PHPDOTG.mjs.br +0 -0
- package/dist/Area3DChartScene-7PHPDOTG.mjs.gz +0 -0
- package/dist/{Bar3DChartScene-2KQABQZM.mjs → Bar3DChartScene-BLPUHYRZ.mjs} +1 -1
- package/dist/Bar3DChartScene-BLPUHYRZ.mjs.br +0 -0
- package/dist/Bar3DChartScene-BLPUHYRZ.mjs.gz +0 -0
- package/dist/{Bar3DChartScene-YMADUUZN.js → Bar3DChartScene-MC5S3AGT.js} +2 -2
- package/dist/Bar3DChartScene-MC5S3AGT.js.br +0 -0
- package/dist/Bar3DChartScene-MC5S3AGT.js.gz +0 -0
- package/dist/{Line3DChartScene-AB7N6ORX.js → Line3DChartScene-JVVZRIDD.js} +2 -2
- package/dist/Line3DChartScene-JVVZRIDD.js.br +0 -0
- package/dist/Line3DChartScene-JVVZRIDD.js.gz +0 -0
- package/dist/{Line3DChartScene-K3BSK6BB.mjs → Line3DChartScene-L5B4YFG3.mjs} +1 -1
- package/dist/Line3DChartScene-L5B4YFG3.mjs.br +0 -0
- package/dist/Line3DChartScene-L5B4YFG3.mjs.gz +0 -0
- package/dist/{Model3DScene-NT5RRIB5.mjs → Model3DScene-6TNWS5LV.mjs} +1 -1
- package/dist/Model3DScene-6TNWS5LV.mjs.br +0 -0
- package/dist/Model3DScene-6TNWS5LV.mjs.gz +0 -0
- package/dist/{Model3DScene-VSLGUWC7.js → Model3DScene-LRDNQNKJ.js} +2 -2
- package/dist/Model3DScene-LRDNQNKJ.js.br +0 -0
- package/dist/Model3DScene-LRDNQNKJ.js.gz +0 -0
- package/dist/{PieChart3DScene-6MUFRFYJ.js → PieChart3DScene-PZWZCXHX.js} +2 -2
- package/dist/PieChart3DScene-PZWZCXHX.js.br +0 -0
- package/dist/PieChart3DScene-PZWZCXHX.js.gz +0 -0
- package/dist/{PieChart3DScene-NFRBKII7.mjs → PieChart3DScene-XXAIVP4I.mjs} +1 -1
- package/dist/PieChart3DScene-XXAIVP4I.mjs.br +0 -0
- package/dist/PieChart3DScene-XXAIVP4I.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-UKIOTKJC.mjs → SurfaceChart3DScene-CRUGJSCY.mjs} +1 -1
- package/dist/SurfaceChart3DScene-CRUGJSCY.mjs.br +1 -0
- package/dist/SurfaceChart3DScene-CRUGJSCY.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-2UQOKVFB.js → SurfaceChart3DScene-UBQV3ZN2.js} +2 -2
- package/dist/SurfaceChart3DScene-UBQV3ZN2.js.br +0 -0
- package/dist/SurfaceChart3DScene-UBQV3ZN2.js.gz +0 -0
- package/dist/UTIF-LAD5QYGQ.mjs +6400 -0
- package/dist/UTIF-LAD5QYGQ.mjs.br +0 -0
- package/dist/UTIF-LAD5QYGQ.mjs.gz +0 -0
- package/dist/UTIF-POYWAAGO.js +6402 -0
- package/dist/UTIF-POYWAAGO.js.br +0 -0
- package/dist/UTIF-POYWAAGO.js.gz +0 -0
- package/dist/{chunk-5WH6UVWC.mjs → chunk-57MGKBJ4.mjs} +253 -77
- package/dist/chunk-57MGKBJ4.mjs.br +0 -0
- package/dist/chunk-57MGKBJ4.mjs.gz +0 -0
- package/dist/{chunk-BZ6OM3H5.mjs → chunk-A2UAUSJM.mjs} +113 -6
- package/dist/chunk-A2UAUSJM.mjs.br +0 -0
- package/dist/chunk-A2UAUSJM.mjs.gz +0 -0
- package/dist/{chunk-ACVLIDUS.mjs → chunk-BPWSJLLG.mjs} +158 -29
- package/dist/chunk-BPWSJLLG.mjs.br +0 -0
- package/dist/chunk-BPWSJLLG.mjs.gz +0 -0
- package/dist/{chunk-K4DUVYZ7.js → chunk-LGVNUG3G.js} +3 -3
- package/dist/chunk-LGVNUG3G.js.br +0 -0
- package/dist/chunk-LGVNUG3G.js.gz +0 -0
- package/dist/{chunk-XBR7W47W.js → chunk-LXYDXLKZ.js} +510 -403
- package/dist/chunk-LXYDXLKZ.js.br +0 -0
- package/dist/chunk-LXYDXLKZ.js.gz +0 -0
- package/dist/{chunk-Z3DEULRJ.mjs → chunk-QOLYY7E3.mjs} +1 -1
- package/dist/chunk-QOLYY7E3.mjs.br +0 -0
- package/dist/chunk-QOLYY7E3.mjs.gz +0 -0
- package/dist/{chunk-OABOL32L.js → chunk-T2QG2HD5.js} +302 -171
- package/dist/chunk-T2QG2HD5.js.br +0 -0
- package/dist/chunk-T2QG2HD5.js.gz +0 -0
- package/dist/{chunk-GCOGKBK3.js → chunk-T44LBKF6.js} +1342 -1166
- package/dist/chunk-T44LBKF6.js.br +0 -0
- package/dist/chunk-T44LBKF6.js.gz +0 -0
- package/dist/{chunk-SRAXNEJX.mjs → chunk-XIHK52SB.mjs} +1525 -341
- package/dist/chunk-XIHK52SB.mjs.br +0 -0
- package/dist/chunk-XIHK52SB.mjs.gz +0 -0
- package/dist/{chunk-HMZA25W2.js → chunk-YDEEINER.js} +1528 -343
- package/dist/chunk-YDEEINER.js.br +0 -0
- package/dist/chunk-YDEEINER.js.gz +0 -0
- package/dist/index.d.ts +139 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -49
- 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 +139 -3
- 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 +139 -3
- package/dist/viewer/index.js +26 -26
- 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 +2 -2
- package/dist/AiChatPanel-5JAQBLTU.mjs.br +0 -0
- package/dist/AiChatPanel-5JAQBLTU.mjs.gz +0 -0
- package/dist/AiChatPanel-C3E7UV7T.js.br +0 -0
- package/dist/AiChatPanel-C3E7UV7T.js.gz +0 -0
- package/dist/Area3DChartScene-KE434ERF.mjs.br +0 -0
- package/dist/Area3DChartScene-KE434ERF.mjs.gz +0 -0
- package/dist/Area3DChartScene-XY2PKRMA.js.br +0 -0
- package/dist/Area3DChartScene-XY2PKRMA.js.gz +0 -0
- package/dist/Bar3DChartScene-2KQABQZM.mjs.br +0 -0
- package/dist/Bar3DChartScene-2KQABQZM.mjs.gz +0 -0
- package/dist/Bar3DChartScene-YMADUUZN.js.br +0 -0
- package/dist/Bar3DChartScene-YMADUUZN.js.gz +0 -0
- package/dist/Line3DChartScene-AB7N6ORX.js.br +0 -0
- package/dist/Line3DChartScene-AB7N6ORX.js.gz +0 -0
- package/dist/Line3DChartScene-K3BSK6BB.mjs.br +0 -0
- package/dist/Line3DChartScene-K3BSK6BB.mjs.gz +0 -0
- package/dist/Model3DScene-NT5RRIB5.mjs.br +0 -0
- package/dist/Model3DScene-NT5RRIB5.mjs.gz +0 -0
- package/dist/Model3DScene-VSLGUWC7.js.br +0 -0
- package/dist/Model3DScene-VSLGUWC7.js.gz +0 -0
- package/dist/PieChart3DScene-6MUFRFYJ.js.br +0 -0
- package/dist/PieChart3DScene-6MUFRFYJ.js.gz +0 -0
- package/dist/PieChart3DScene-NFRBKII7.mjs.br +0 -0
- package/dist/PieChart3DScene-NFRBKII7.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-2UQOKVFB.js.br +0 -0
- package/dist/SurfaceChart3DScene-2UQOKVFB.js.gz +0 -0
- package/dist/SurfaceChart3DScene-UKIOTKJC.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-UKIOTKJC.mjs.gz +0 -0
- package/dist/chunk-5WH6UVWC.mjs.br +0 -0
- package/dist/chunk-5WH6UVWC.mjs.gz +0 -0
- package/dist/chunk-ACVLIDUS.mjs.br +0 -0
- package/dist/chunk-ACVLIDUS.mjs.gz +0 -0
- package/dist/chunk-BZ6OM3H5.mjs.br +0 -0
- package/dist/chunk-BZ6OM3H5.mjs.gz +0 -0
- package/dist/chunk-GCOGKBK3.js.br +0 -0
- package/dist/chunk-GCOGKBK3.js.gz +0 -0
- package/dist/chunk-HMZA25W2.js.br +0 -0
- package/dist/chunk-HMZA25W2.js.gz +0 -0
- package/dist/chunk-K4DUVYZ7.js.br +0 -0
- package/dist/chunk-K4DUVYZ7.js.gz +0 -0
- package/dist/chunk-OABOL32L.js.br +0 -0
- package/dist/chunk-OABOL32L.js.gz +0 -0
- package/dist/chunk-SRAXNEJX.mjs.br +0 -0
- package/dist/chunk-SRAXNEJX.mjs.gz +0 -0
- package/dist/chunk-XBR7W47W.js.br +0 -0
- package/dist/chunk-XBR7W47W.js.gz +0 -0
- package/dist/chunk-Z3DEULRJ.mjs.br +0 -0
- package/dist/chunk-Z3DEULRJ.mjs.gz +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunkYDEEINER_js = require('./chunk-YDEEINER.js');
|
|
3
4
|
var chunkSWRY3SI5_js = require('./chunk-SWRY3SI5.js');
|
|
4
|
-
var chunkHMZA25W2_js = require('./chunk-HMZA25W2.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 chunkYDEEINER_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 chunkYDEEINER_js.cloneHistorySnapshot(snapshot);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
// src/viewer/constants/scalar.ts
|
|
@@ -61,7 +61,7 @@ var TOOLBAR_SECTIONS = [
|
|
|
61
61
|
{ id: "view", labelKey: "pptx.ribbon.tab.view" },
|
|
62
62
|
{ id: "help", labelKey: "pptx.ribbon.tab.help" }
|
|
63
63
|
];
|
|
64
|
-
var SHORTCUT_REFERENCE_ITEMS =
|
|
64
|
+
var SHORTCUT_REFERENCE_ITEMS = chunkYDEEINER_js.VIEWER_SHORTCUT_REFERENCE;
|
|
65
65
|
|
|
66
66
|
// src/viewer/constants/theme.ts
|
|
67
67
|
var THEME_COLOR_SWATCHES = [
|
|
@@ -105,7 +105,7 @@ var GLYPH_COMPONENTS = {
|
|
|
105
105
|
plus: lu.LuPlus,
|
|
106
106
|
triangle: lu.LuTriangle
|
|
107
107
|
};
|
|
108
|
-
var SHAPE_PRESETS =
|
|
108
|
+
var SHAPE_PRESETS = chunkYDEEINER_js.SHAPE_PRESET_DEFS.map(
|
|
109
109
|
(def) => ({
|
|
110
110
|
type: def.type,
|
|
111
111
|
label: def.label,
|
|
@@ -264,7 +264,7 @@ function isConnectorOrLineElement(element) {
|
|
|
264
264
|
if (element.type === "connector") {
|
|
265
265
|
return true;
|
|
266
266
|
}
|
|
267
|
-
if (!
|
|
267
|
+
if (!chunkYDEEINER_js.hasShapeProperties(element)) {
|
|
268
268
|
return false;
|
|
269
269
|
}
|
|
270
270
|
const st = getShapeType(element.shapeType);
|
|
@@ -273,37 +273,43 @@ function isConnectorOrLineElement(element) {
|
|
|
273
273
|
|
|
274
274
|
// src/viewer/utils/image-style.ts
|
|
275
275
|
function getImageMaskStyle(element) {
|
|
276
|
-
if (!
|
|
276
|
+
if (!chunkYDEEINER_js.hasShapeProperties(element)) {
|
|
277
277
|
return void 0;
|
|
278
278
|
}
|
|
279
|
-
const
|
|
280
|
-
if (
|
|
281
|
-
return
|
|
282
|
-
}
|
|
283
|
-
const normalized = shapeType.toLowerCase();
|
|
284
|
-
if (normalized === "roundrect" || normalized === "round1rect" || normalized === "round2samerect" || normalized === "round2diagrect" || normalized === "sniproundrect" || normalized === "snip1rect" || normalized === "snip2diagrect") {
|
|
285
|
-
const radiusPx = chunkHMZA25W2_js.getRoundRectRadiusPx2(element);
|
|
286
|
-
if (radiusPx <= 0.01) {
|
|
287
|
-
return void 0;
|
|
288
|
-
}
|
|
289
|
-
return { borderRadius: radiusPx };
|
|
279
|
+
const geometry = chunkYDEEINER_js.resolveShapeGeometry(element);
|
|
280
|
+
if (geometry.kind === "borderRadius") {
|
|
281
|
+
return { borderRadius: geometry.radius };
|
|
290
282
|
}
|
|
291
|
-
|
|
292
|
-
return { borderRadius: "50%" };
|
|
293
|
-
}
|
|
294
|
-
if (normalized === "can" || normalized === "cylinder") {
|
|
295
|
-
return { borderRadius: "48% / 12%" };
|
|
296
|
-
}
|
|
297
|
-
const clipPath = chunkHMZA25W2_js.getResolvedShapeClipPath(element);
|
|
298
|
-
if (!clipPath) {
|
|
299
|
-
return void 0;
|
|
300
|
-
}
|
|
301
|
-
return { clipPath };
|
|
283
|
+
return geometry.kind === "clipPath" ? { clipPath: geometry.clipPath } : void 0;
|
|
302
284
|
}
|
|
303
285
|
function getImageRenderStyle(element) {
|
|
286
|
+
const fit = chunkYDEEINER_js.getImageFitStyle(element);
|
|
287
|
+
return {
|
|
288
|
+
// A translated/scaled crop must be masked by its stationary wrapper, not
|
|
289
|
+
// by the moving bitmap itself.
|
|
290
|
+
...fit.transform ? {} : getImageMaskStyle(element) || {},
|
|
291
|
+
...fit
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
function getImageSurfaceMaskStyle(element) {
|
|
295
|
+
const mask = getImageMaskStyle(element);
|
|
296
|
+
return {
|
|
297
|
+
overflow: "hidden",
|
|
298
|
+
borderRadius: mask?.borderRadius,
|
|
299
|
+
clipPath: mask?.clipPath ?? getCropShapeClipPath(element)
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
function getImageSurfaceStyle(element) {
|
|
303
|
+
const fill = chunkYDEEINER_js.hasShapeProperties(element) ? chunkYDEEINER_js.getComputedFillStyle(element) : void 0;
|
|
304
304
|
return {
|
|
305
|
-
|
|
306
|
-
|
|
305
|
+
position: "absolute",
|
|
306
|
+
inset: 0,
|
|
307
|
+
...getImageSurfaceMaskStyle(element),
|
|
308
|
+
backgroundColor: fill?.backgroundColor ?? "transparent",
|
|
309
|
+
backgroundImage: fill?.backgroundImage,
|
|
310
|
+
backgroundRepeat: fill?.backgroundRepeat,
|
|
311
|
+
backgroundSize: fill?.backgroundSize,
|
|
312
|
+
backgroundPosition: fill?.backgroundPosition
|
|
307
313
|
};
|
|
308
314
|
}
|
|
309
315
|
var CROP_SHAPE_CLIP_PATHS = {
|
|
@@ -316,7 +322,7 @@ var CROP_SHAPE_CLIP_PATHS = {
|
|
|
316
322
|
star: "polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)"
|
|
317
323
|
};
|
|
318
324
|
function getCropShapeClipPath(element) {
|
|
319
|
-
if (!
|
|
325
|
+
if (!chunkYDEEINER_js.isImageLikeElement(element)) {
|
|
320
326
|
return void 0;
|
|
321
327
|
}
|
|
322
328
|
const shape = element.cropShape;
|
|
@@ -326,7 +332,7 @@ function getCropShapeClipPath(element) {
|
|
|
326
332
|
return CROP_SHAPE_CLIP_PATHS[shape];
|
|
327
333
|
}
|
|
328
334
|
function getImageTilingStyle2(element) {
|
|
329
|
-
return
|
|
335
|
+
return chunkYDEEINER_js.getImageTilingStyle(element);
|
|
330
336
|
}
|
|
331
337
|
|
|
332
338
|
// src/viewer/utils/geometry-image.ts
|
|
@@ -467,7 +473,8 @@ function VideoWithMetadata({
|
|
|
467
473
|
"video",
|
|
468
474
|
{
|
|
469
475
|
ref: mediaRef,
|
|
470
|
-
className:
|
|
476
|
+
className: "w-full h-full pointer-events-auto",
|
|
477
|
+
style: isFullScreen ? { objectFit: "cover" } : chunkYDEEINER_js.getImageFitStyle(element),
|
|
471
478
|
controls: showTransport,
|
|
472
479
|
preload: "metadata",
|
|
473
480
|
playsInline: true,
|
|
@@ -526,9 +533,9 @@ function registerMediaElement(elementId, el) {
|
|
|
526
533
|
};
|
|
527
534
|
}
|
|
528
535
|
function executeMediaCommand(command, frameRoot) {
|
|
529
|
-
return
|
|
536
|
+
return chunkYDEEINER_js.runMediaCommand(
|
|
530
537
|
command,
|
|
531
|
-
(targetId) => registry.get(targetId) ??
|
|
538
|
+
(targetId) => registry.get(targetId) ?? chunkYDEEINER_js.findMediaElementByElementId(targetId, frameRoot?.())
|
|
532
539
|
);
|
|
533
540
|
}
|
|
534
541
|
function PresentationMediaController({
|
|
@@ -572,7 +579,7 @@ function PresentationMediaController({
|
|
|
572
579
|
loop: shouldLoop,
|
|
573
580
|
volume: playbackVolume,
|
|
574
581
|
playbackRate
|
|
575
|
-
} =
|
|
582
|
+
} = chunkYDEEINER_js.mediaPlaybackAttributes({
|
|
576
583
|
loop: element.loop,
|
|
577
584
|
volume: element.volume,
|
|
578
585
|
playbackSpeed: element.playbackSpeed
|
|
@@ -708,7 +715,7 @@ function PresentationMediaController({
|
|
|
708
715
|
if (element.playAcrossSlides && element.mediaType === "audio") {
|
|
709
716
|
const dataUrl = element.mediaData ?? resolvedDataUrl;
|
|
710
717
|
if (dataUrl) {
|
|
711
|
-
|
|
718
|
+
chunkYDEEINER_js.registerPersistentAudio(
|
|
712
719
|
element.id,
|
|
713
720
|
dataUrl,
|
|
714
721
|
element.mediaMimeType,
|
|
@@ -806,17 +813,17 @@ function Badge({
|
|
|
806
813
|
"div",
|
|
807
814
|
{
|
|
808
815
|
className: `absolute inset-0 flex flex-col items-center justify-center ${isMissing ? "gap-1" : ""}`,
|
|
809
|
-
...{ [
|
|
816
|
+
...{ [chunkYDEEINER_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
|
|
810
817
|
children: [
|
|
811
818
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
812
819
|
FallbackIcon,
|
|
813
820
|
{
|
|
814
|
-
paths:
|
|
821
|
+
paths: chunkYDEEINER_js.mediaFallbackIcon(visual, element.mediaType),
|
|
815
822
|
size: isMissing ? 32 : 48,
|
|
816
823
|
className: isMissing ? "text-white/60" : "text-white/80 drop-shadow-md"
|
|
817
824
|
}
|
|
818
825
|
),
|
|
819
|
-
isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(
|
|
826
|
+
isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkYDEEINER_js.mediaFallbackLabelKey(visual, element.mediaType)) })
|
|
820
827
|
]
|
|
821
828
|
}
|
|
822
829
|
);
|
|
@@ -833,17 +840,17 @@ function Placeholder({
|
|
|
833
840
|
"div",
|
|
834
841
|
{
|
|
835
842
|
className: `w-full h-full flex flex-col items-center justify-center gap-1 pointer-events-none rounded ${isMissing ? "bg-black/30 border border-dashed border-white/20" : element.mediaType === "audio" ? "bg-black/10" : "bg-black/20"}`,
|
|
836
|
-
...{ [
|
|
843
|
+
...{ [chunkYDEEINER_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
|
|
837
844
|
children: [
|
|
838
845
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
839
846
|
FallbackIcon,
|
|
840
847
|
{
|
|
841
|
-
paths:
|
|
848
|
+
paths: chunkYDEEINER_js.mediaFallbackIcon(visual, element.mediaType),
|
|
842
849
|
size: isMissing ? 36 : element.mediaType === "audio" ? 24 : 32,
|
|
843
850
|
className: isMissing ? "text-white/50" : "text-white/70"
|
|
844
851
|
}
|
|
845
852
|
),
|
|
846
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(
|
|
853
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkYDEEINER_js.mediaFallbackLabelKey(visual, element.mediaType)) })
|
|
847
854
|
]
|
|
848
855
|
}
|
|
849
856
|
);
|
|
@@ -853,7 +860,7 @@ function renderMediaFallback({
|
|
|
853
860
|
posterUrl,
|
|
854
861
|
surface
|
|
855
862
|
}) {
|
|
856
|
-
const visual =
|
|
863
|
+
const visual = chunkYDEEINER_js.mediaFallbackVisual(surface, {
|
|
857
864
|
hasPoster: Boolean(posterUrl),
|
|
858
865
|
missing: element.mediaMissing === true
|
|
859
866
|
});
|
|
@@ -864,7 +871,8 @@ function renderMediaFallback({
|
|
|
864
871
|
{
|
|
865
872
|
src: posterUrl,
|
|
866
873
|
alt: visual.dimPoster ? chunkSWRY3SI5_js.translationsEn["pptx.media.posterAlt"] : chunkSWRY3SI5_js.translationsEn["pptx.media.videoPosterAlt"],
|
|
867
|
-
className: `w-full h-full
|
|
874
|
+
className: `w-full h-full${visual.dimPoster ? " opacity-50" : ""}`,
|
|
875
|
+
style: chunkYDEEINER_js.getImageFitStyle(element)
|
|
868
876
|
}
|
|
869
877
|
),
|
|
870
878
|
/* @__PURE__ */ jsxRuntime.jsx(Badge, { visual, element })
|
|
@@ -882,7 +890,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
|
|
|
882
890
|
const dataUrl = element.mediaData ?? (mediaPath ? mediaDataUrls.get(mediaPath) : void 0);
|
|
883
891
|
const trimFragment = buildTrimFragment(element);
|
|
884
892
|
const posterUrl = element.posterFrameData ?? void 0;
|
|
885
|
-
const shouldLoop =
|
|
893
|
+
const shouldLoop = chunkYDEEINER_js.mediaPlaybackAttributes(element).loop;
|
|
886
894
|
const shouldAutoPlay = options?.autoPlay === true || element.autoPlay === true;
|
|
887
895
|
const isFullScreen = options?.fullScreen === true;
|
|
888
896
|
const isPresentationMode = options?.isPresentationMode === true;
|
|
@@ -965,19 +973,20 @@ function renderMediaElement(element, mediaDataUrls, options) {
|
|
|
965
973
|
|
|
966
974
|
// src/viewer/utils/text-utils.tsx
|
|
967
975
|
function getTextStyleForElement(element, fallbackColor) {
|
|
968
|
-
return
|
|
976
|
+
return chunkYDEEINER_js.buildTextBlockStyle(element, { fallbackColor });
|
|
969
977
|
}
|
|
970
978
|
|
|
971
979
|
// src/viewer/utils/text-layout.tsx
|
|
972
980
|
function getTextLayoutStyle(element) {
|
|
973
|
-
if (!
|
|
981
|
+
if (!chunkYDEEINER_js.hasTextProperties(element)) {
|
|
974
982
|
return {};
|
|
975
983
|
}
|
|
976
|
-
const writingMode =
|
|
977
|
-
const textOrientation =
|
|
978
|
-
const verticalDirection =
|
|
984
|
+
const writingMode = chunkYDEEINER_js.toCssWritingMode(element.textStyle?.textDirection);
|
|
985
|
+
const textOrientation = chunkYDEEINER_js.toCssTextOrientation(element.textStyle?.textDirection);
|
|
986
|
+
const verticalDirection = chunkYDEEINER_js.toCssVerticalDirection(element.textStyle?.textDirection);
|
|
979
987
|
const textWrapNone = element.textStyle?.textWrap === "none";
|
|
980
|
-
const
|
|
988
|
+
const shapeAutoFitTextBox = element.textStyle?.autoFitMode === "shrink" && (element.type === "text" || element.locks?.txBox === true);
|
|
989
|
+
const hasParagraphIndents = chunkYDEEINER_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
|
|
981
990
|
const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
|
|
982
991
|
const paragraphIndent = element.textStyle?.paragraphIndent;
|
|
983
992
|
const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
|
|
@@ -986,7 +995,7 @@ function getTextLayoutStyle(element) {
|
|
|
986
995
|
const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
|
|
987
996
|
return {
|
|
988
997
|
// Columns / flex anchoring / anchorCtr / tab-size / kinsoku, from shared.
|
|
989
|
-
...
|
|
998
|
+
...chunkYDEEINER_js.buildTextBodyLayoutStyle(element),
|
|
990
999
|
// Body inset only. Paragraph spacing (spcBef/spcAft) is applied
|
|
991
1000
|
// per-paragraph by the paragraph renderer, not collapsed here.
|
|
992
1001
|
paddingTop: bodyTop,
|
|
@@ -996,6 +1005,15 @@ function getTextLayoutStyle(element) {
|
|
|
996
1005
|
direction: verticalDirection,
|
|
997
1006
|
marginLeft,
|
|
998
1007
|
textIndent,
|
|
1008
|
+
...shapeAutoFitTextBox ? {
|
|
1009
|
+
width: textWrapNone ? "max-content" : "100%",
|
|
1010
|
+
minWidth: "100%",
|
|
1011
|
+
height: "max-content",
|
|
1012
|
+
minHeight: "100%",
|
|
1013
|
+
whiteSpace: "pre-wrap",
|
|
1014
|
+
wordBreak: textWrapNone ? "normal" : "break-word",
|
|
1015
|
+
overflow: "visible"
|
|
1016
|
+
} : {},
|
|
999
1017
|
...textWrapNone ? {
|
|
1000
1018
|
whiteSpace: "nowrap",
|
|
1001
1019
|
overflow: "visible"
|
|
@@ -1005,7 +1023,7 @@ function getTextLayoutStyle(element) {
|
|
|
1005
1023
|
|
|
1006
1024
|
// src/viewer/utils/text-effects.tsx
|
|
1007
1025
|
function buildTextBody3DSceneStyle2(textStyle) {
|
|
1008
|
-
return
|
|
1026
|
+
return chunkYDEEINER_js.buildTextBody3DSceneStyle(textStyle);
|
|
1009
1027
|
}
|
|
1010
1028
|
|
|
1011
1029
|
// src/viewer/utils/text-warp-css.tsx
|
|
@@ -1190,13 +1208,13 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
|
|
|
1190
1208
|
if (!subElementAnimStates || subElementAnimStates.size === 0) {
|
|
1191
1209
|
return renderedSegments;
|
|
1192
1210
|
}
|
|
1193
|
-
const paraKey = `${elementId}${
|
|
1211
|
+
const paraKey = `${elementId}${chunkYDEEINER_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
|
|
1194
1212
|
const paraState = subElementAnimStates.get(paraKey);
|
|
1195
1213
|
if (paraState) {
|
|
1196
1214
|
const style = buildAnimStyle(paraState);
|
|
1197
1215
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
|
|
1198
1216
|
}
|
|
1199
|
-
const spec =
|
|
1217
|
+
const spec = chunkYDEEINER_js.buildTextBuildSpec(
|
|
1200
1218
|
elementId,
|
|
1201
1219
|
paraIndex,
|
|
1202
1220
|
paraRuns.map((run) => ({ text: run.text, style: run })),
|
|
@@ -1214,7 +1232,7 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
|
|
|
1214
1232
|
"span",
|
|
1215
1233
|
{
|
|
1216
1234
|
"data-anim-id": span.animId,
|
|
1217
|
-
style:
|
|
1235
|
+
style: chunkYDEEINER_js.textBuildSpanStyle(span),
|
|
1218
1236
|
children: content
|
|
1219
1237
|
},
|
|
1220
1238
|
span.animId
|
|
@@ -1222,7 +1240,7 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
|
|
|
1222
1240
|
});
|
|
1223
1241
|
}
|
|
1224
1242
|
function renderTabbedLine(line, ctx, keyPrefix, renderPiece, nestedStyle) {
|
|
1225
|
-
const [lineLayout] =
|
|
1243
|
+
const [lineLayout] = chunkYDEEINER_js.buildRunTabLines(line, ctx, nestedStyle);
|
|
1226
1244
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block", whiteSpace: "nowrap" }, children: lineLayout.pieces.map((piece, i) => {
|
|
1227
1245
|
const key = `${keyPrefix}-tab-${i}`;
|
|
1228
1246
|
return /* @__PURE__ */ jsxRuntime.jsxs(React6__default.default.Fragment, { children: [
|
|
@@ -1235,7 +1253,7 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
|
|
|
1235
1253
|
if (!needsScriptFonts || !text) {
|
|
1236
1254
|
return text;
|
|
1237
1255
|
}
|
|
1238
|
-
const pieces =
|
|
1256
|
+
const pieces = chunkYDEEINER_js.splitRunByScriptFont(
|
|
1239
1257
|
text,
|
|
1240
1258
|
scriptFonts,
|
|
1241
1259
|
baseFontFamily,
|
|
@@ -1252,7 +1270,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
|
|
|
1252
1270
|
if (!metric || !text) {
|
|
1253
1271
|
return inner(text, keyPrefix);
|
|
1254
1272
|
}
|
|
1255
|
-
const pieces =
|
|
1273
|
+
const pieces = chunkYDEEINER_js.splitRunForMetrics(text, metric.font);
|
|
1256
1274
|
if (pieces.length <= 1) {
|
|
1257
1275
|
return inner(text, keyPrefix);
|
|
1258
1276
|
}
|
|
@@ -1261,7 +1279,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
|
|
|
1261
1279
|
{
|
|
1262
1280
|
style: {
|
|
1263
1281
|
...metric.nestedStyle,
|
|
1264
|
-
letterSpacing:
|
|
1282
|
+
letterSpacing: chunkYDEEINER_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
|
|
1265
1283
|
},
|
|
1266
1284
|
children: inner(piece.text, `${keyPrefix}-w${i}`)
|
|
1267
1285
|
},
|
|
@@ -1348,8 +1366,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
|
|
|
1348
1366
|
});
|
|
1349
1367
|
}
|
|
1350
1368
|
function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
|
|
1351
|
-
const mathml =
|
|
1352
|
-
const safeMathml = mathml ?
|
|
1369
|
+
const mathml = chunkYDEEINER_js.convertOmmlToMathMl(equationXml);
|
|
1370
|
+
const safeMathml = mathml ? chunkYDEEINER_js.sanitizeMathMl(mathml) : "";
|
|
1353
1371
|
const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1354
1372
|
"span",
|
|
1355
1373
|
{
|
|
@@ -1477,7 +1495,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1477
1495
|
const segmentStyle = segment?.style ?? {};
|
|
1478
1496
|
const textValue = run.text;
|
|
1479
1497
|
const lines = textValue.split("\n");
|
|
1480
|
-
const resolvedSegmentColor =
|
|
1498
|
+
const resolvedSegmentColor = chunkYDEEINER_js.normalizeHexColor(
|
|
1481
1499
|
segmentStyle.color || element.textStyle?.color,
|
|
1482
1500
|
run.hyperlink ? HYPERLINK_COLOR : fallbackColor
|
|
1483
1501
|
);
|
|
@@ -1485,16 +1503,16 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1485
1503
|
const baselineFraction = rawBaseline === 0 ? 0 : Math.abs(rawBaseline) >= 1e3 ? rawBaseline / 1e5 : rawBaseline / 100;
|
|
1486
1504
|
const baselineFontScale = baselineFraction !== 0 ? BASELINE_FONT_SCALE : 1;
|
|
1487
1505
|
const rawFontSize = segmentStyle.fontSize || element.textStyle?.fontSize || DEFAULT_TEXT_FONT_SIZE;
|
|
1488
|
-
const baseFontSize = rawFontSize *
|
|
1506
|
+
const baseFontSize = rawFontSize * chunkYDEEINER_js.resolveAutoFitFontScale(element.textStyle);
|
|
1489
1507
|
const baselineShift = baselineFraction !== 0 ? `${baselineFraction * baseFontSize}px` : void 0;
|
|
1490
|
-
const fontKerning =
|
|
1508
|
+
const fontKerning = chunkYDEEINER_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
|
|
1491
1509
|
const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
|
|
1492
|
-
const baseFontFamily = rawFontFamily ?
|
|
1510
|
+
const baseFontFamily = rawFontFamily ? chunkYDEEINER_js.getSubstituteFontFamily(
|
|
1493
1511
|
rawFontFamily,
|
|
1494
|
-
|
|
1512
|
+
chunkYDEEINER_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
|
|
1495
1513
|
) : DEFAULT_FONT_FAMILY2;
|
|
1496
|
-
const scriptFonts =
|
|
1497
|
-
const needsScriptFonts =
|
|
1514
|
+
const scriptFonts = chunkYDEEINER_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
|
|
1515
|
+
const needsScriptFonts = chunkYDEEINER_js.hasDistinctScriptFonts(scriptFonts);
|
|
1498
1516
|
const authoredLetterSpacing = typeof segmentStyle.characterSpacing === "number" && segmentStyle.characterSpacing !== 0 ? segmentStyle.characterSpacing / 100 * (96 / 72) : 0;
|
|
1499
1517
|
const metricFont = {
|
|
1500
1518
|
fontFamily: baseFontFamily,
|
|
@@ -1502,7 +1520,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1502
1520
|
bold: Boolean(segmentStyle.bold),
|
|
1503
1521
|
italic: Boolean(segmentStyle.italic)
|
|
1504
1522
|
};
|
|
1505
|
-
const nestedStyle =
|
|
1523
|
+
const nestedStyle = chunkYDEEINER_js.nestedTextDecorationStyle(run.style);
|
|
1506
1524
|
const metricContext = { font: metricFont, authoredPx: authoredLetterSpacing, nestedStyle };
|
|
1507
1525
|
const spanStyle = { ...run.style };
|
|
1508
1526
|
spanStyle.color = resolvedSegmentColor;
|
|
@@ -1510,11 +1528,11 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1510
1528
|
spanStyle.fontFamily = baseFontFamily;
|
|
1511
1529
|
spanStyle.verticalAlign = baselineShift;
|
|
1512
1530
|
spanStyle.fontKerning = fontKerning;
|
|
1513
|
-
spanStyle.letterSpacing =
|
|
1531
|
+
spanStyle.letterSpacing = chunkYDEEINER_js.pieceLetterSpacing(
|
|
1514
1532
|
authoredLetterSpacing,
|
|
1515
|
-
|
|
1533
|
+
chunkYDEEINER_js.resolveMetricTrackingPx(textValue, metricFont)
|
|
1516
1534
|
);
|
|
1517
|
-
const hollow =
|
|
1535
|
+
const hollow = chunkYDEEINER_js.hollowTextFillStyle(segmentStyle, {
|
|
1518
1536
|
color: resolvedSegmentColor,
|
|
1519
1537
|
textStroke: typeof spanStyle.WebkitTextStroke === "string" ? spanStyle.WebkitTextStroke : void 0
|
|
1520
1538
|
});
|
|
@@ -1535,7 +1553,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1535
1553
|
scriptFonts,
|
|
1536
1554
|
baseFontFamily,
|
|
1537
1555
|
findHighlights,
|
|
1538
|
-
|
|
1556
|
+
chunkYDEEINER_js.buildTabContext(
|
|
1539
1557
|
element.textStyle?.tabStops,
|
|
1540
1558
|
element.textStyle?.defaultTabSize,
|
|
1541
1559
|
baseFontSize,
|
|
@@ -1561,7 +1579,7 @@ function renderRubyOrText(run, baseContent) {
|
|
|
1561
1579
|
] });
|
|
1562
1580
|
}
|
|
1563
1581
|
function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick) {
|
|
1564
|
-
if (!
|
|
1582
|
+
if (!chunkYDEEINER_js.hasTextProperties(element)) {
|
|
1565
1583
|
return emptyFallback || null;
|
|
1566
1584
|
}
|
|
1567
1585
|
const segments = segmentOverrides ?? element.textSegments;
|
|
@@ -1571,7 +1589,7 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
1571
1589
|
}
|
|
1572
1590
|
return element.text || emptyFallback || "";
|
|
1573
1591
|
}
|
|
1574
|
-
const paragraphs =
|
|
1592
|
+
const paragraphs = chunkYDEEINER_js.buildParagraphs(element, fieldContext, segmentOverrides);
|
|
1575
1593
|
const ctx = {
|
|
1576
1594
|
element,
|
|
1577
1595
|
fallbackColor,
|
|
@@ -1704,13 +1722,13 @@ function hexToRgbUnit(hex) {
|
|
|
1704
1722
|
};
|
|
1705
1723
|
}
|
|
1706
1724
|
function getDuotoneColors(element) {
|
|
1707
|
-
if (!
|
|
1725
|
+
if (!chunkYDEEINER_js.isImageLikeElement(element)) {
|
|
1708
1726
|
return void 0;
|
|
1709
1727
|
}
|
|
1710
1728
|
return element.imageEffects?.duotone;
|
|
1711
1729
|
}
|
|
1712
1730
|
function buildLineShadowCss(element) {
|
|
1713
|
-
if (!
|
|
1731
|
+
if (!chunkYDEEINER_js.hasShapeProperties(element)) {
|
|
1714
1732
|
return void 0;
|
|
1715
1733
|
}
|
|
1716
1734
|
const ss = element.shapeStyle;
|
|
@@ -1721,13 +1739,13 @@ function buildLineShadowCss(element) {
|
|
|
1721
1739
|
const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
|
|
1722
1740
|
const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
|
|
1723
1741
|
const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
|
|
1724
|
-
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${
|
|
1725
|
-
|
|
1742
|
+
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkYDEEINER_js.colorWithOpacity(
|
|
1743
|
+
chunkYDEEINER_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
|
|
1726
1744
|
opacity
|
|
1727
1745
|
)}`;
|
|
1728
1746
|
}
|
|
1729
1747
|
function buildLineGlowFilter(element) {
|
|
1730
|
-
if (!
|
|
1748
|
+
if (!chunkYDEEINER_js.hasShapeProperties(element)) {
|
|
1731
1749
|
return void 0;
|
|
1732
1750
|
}
|
|
1733
1751
|
const ss = element.shapeStyle;
|
|
@@ -1736,14 +1754,14 @@ function buildLineGlowFilter(element) {
|
|
|
1736
1754
|
}
|
|
1737
1755
|
const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
|
|
1738
1756
|
const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
|
|
1739
|
-
const glowCol =
|
|
1757
|
+
const glowCol = chunkYDEEINER_js.colorWithOpacity(chunkYDEEINER_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
|
|
1740
1758
|
return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
|
|
1741
1759
|
}
|
|
1742
1760
|
function getDagDuotoneFilterId(elementId) {
|
|
1743
1761
|
return `dag-duotone-${elementId}`;
|
|
1744
1762
|
}
|
|
1745
1763
|
function hasDagDuotoneEffect(element) {
|
|
1746
|
-
if (!
|
|
1764
|
+
if (!chunkYDEEINER_js.hasShapeProperties(element)) {
|
|
1747
1765
|
return false;
|
|
1748
1766
|
}
|
|
1749
1767
|
return Boolean(element.shapeStyle?.dagDuotone);
|
|
@@ -1795,7 +1813,7 @@ function renderDagDuotoneSvgFilter(elementId, color1, color2) {
|
|
|
1795
1813
|
|
|
1796
1814
|
// src/viewer/utils/shape-visual-3d.ts
|
|
1797
1815
|
function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
|
|
1798
|
-
return
|
|
1816
|
+
return chunkYDEEINER_js.build3DExtrusionData(
|
|
1799
1817
|
shape3d,
|
|
1800
1818
|
scene3d,
|
|
1801
1819
|
fillColor,
|
|
@@ -1804,21 +1822,24 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
|
|
|
1804
1822
|
);
|
|
1805
1823
|
}
|
|
1806
1824
|
function apply3dEffects2(base, scene3d, shape3d, fillColorFallback) {
|
|
1807
|
-
|
|
1825
|
+
chunkYDEEINER_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
|
|
1808
1826
|
}
|
|
1809
1827
|
|
|
1810
1828
|
// src/viewer/utils/shape-visual-style.ts
|
|
1811
1829
|
function rendersCustomVectorPath(element) {
|
|
1812
1830
|
return (element.type === "shape" || element.type === "image" || element.type === "picture") && Boolean(element.pathData) && typeof element.pathWidth === "number" && element.pathWidth > 0 && typeof element.pathHeight === "number" && element.pathHeight > 0;
|
|
1813
1831
|
}
|
|
1832
|
+
function rendersWedgeCalloutVector(element) {
|
|
1833
|
+
return element.type === "shape" && chunkYDEEINER_js.isWedgeCalloutPresetShape(element.shapeType);
|
|
1834
|
+
}
|
|
1814
1835
|
function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _strokeColor, animatesFill, animatesStroke, parentGroupFill) {
|
|
1815
|
-
if (!
|
|
1836
|
+
if (!chunkYDEEINER_js.hasShapeProperties(element)) {
|
|
1816
1837
|
return {};
|
|
1817
1838
|
}
|
|
1818
1839
|
const ss = element.shapeStyle;
|
|
1819
|
-
const fill = animatesFill ? void 0 :
|
|
1820
|
-
const fx =
|
|
1821
|
-
const stroke =
|
|
1840
|
+
const fill = animatesFill ? void 0 : chunkYDEEINER_js.getComputedFillStyle(element, parentGroupFill);
|
|
1841
|
+
const fx = chunkYDEEINER_js.getComputedEffectStyle(element);
|
|
1842
|
+
const stroke = chunkYDEEINER_js.getComputedStrokeStyle(element);
|
|
1822
1843
|
const base = {
|
|
1823
1844
|
// A gradient fill REPLACES the solid fill, it does not sit on top of it;
|
|
1824
1845
|
// the whole precedence lives in shared's `getComputedFillStyle`.
|
|
@@ -1855,8 +1876,21 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
1855
1876
|
strokeMiterlimit: stroke.strokeMiterlimit,
|
|
1856
1877
|
strokeLinecap: stroke.strokeLinecap
|
|
1857
1878
|
};
|
|
1879
|
+
Object.assign(
|
|
1880
|
+
base,
|
|
1881
|
+
chunkYDEEINER_js.getAnimationColorBaseStyle(element, {
|
|
1882
|
+
animatesFill,
|
|
1883
|
+
animatesStroke,
|
|
1884
|
+
parentGroupFill
|
|
1885
|
+
})
|
|
1886
|
+
);
|
|
1887
|
+
if (element.type === "image" || element.type === "picture") {
|
|
1888
|
+
base.borderWidth = 0;
|
|
1889
|
+
base.borderColor = void 0;
|
|
1890
|
+
base.borderStyle = void 0;
|
|
1891
|
+
}
|
|
1858
1892
|
apply3dEffects2(base, ss?.scene3d, ss?.shape3d, ss?.fillColor ?? fillColor);
|
|
1859
|
-
if (rendersCustomVectorPath(element) ||
|
|
1893
|
+
if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || chunkYDEEINER_js.isStrokeOnlyPresetElement(element)) {
|
|
1860
1894
|
base.backgroundColor = "transparent";
|
|
1861
1895
|
base.backgroundImage = void 0;
|
|
1862
1896
|
base.borderWidth = void 0;
|
|
@@ -1867,7 +1901,10 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
1867
1901
|
base.backgroundColor = void 0;
|
|
1868
1902
|
base.backgroundImage = void 0;
|
|
1869
1903
|
}
|
|
1870
|
-
|
|
1904
|
+
if (rendersWedgeCalloutVector(element)) {
|
|
1905
|
+
return base;
|
|
1906
|
+
}
|
|
1907
|
+
const geometry = chunkYDEEINER_js.resolveShapeGeometry(element);
|
|
1871
1908
|
switch (geometry.kind) {
|
|
1872
1909
|
case "bare":
|
|
1873
1910
|
return { backgroundColor: "transparent", borderWidth: 0, borderStyle: "none" };
|
|
@@ -1893,13 +1930,13 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
1893
1930
|
function getConnectorAdjustment(element, key, fallback) {
|
|
1894
1931
|
const direct = element.shapeAdjustments?.[key];
|
|
1895
1932
|
if (typeof direct === "number" && Number.isFinite(direct)) {
|
|
1896
|
-
return
|
|
1933
|
+
return chunkYDEEINER_js.clampUnitInterval(direct / 1e5);
|
|
1897
1934
|
}
|
|
1898
1935
|
const fallbackKey = element.shapeAdjustments?.adj;
|
|
1899
1936
|
if (typeof fallbackKey === "number" && Number.isFinite(fallbackKey)) {
|
|
1900
|
-
return
|
|
1937
|
+
return chunkYDEEINER_js.clampUnitInterval(fallbackKey / 1e5);
|
|
1901
1938
|
}
|
|
1902
|
-
return
|
|
1939
|
+
return chunkYDEEINER_js.clampUnitInterval(fallback);
|
|
1903
1940
|
}
|
|
1904
1941
|
function getConnectorPathGeometry(element) {
|
|
1905
1942
|
const width = Math.max(element.width, 0);
|
|
@@ -2036,11 +2073,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
|
|
|
2036
2073
|
strokePaint,
|
|
2037
2074
|
strokeWidth,
|
|
2038
2075
|
dashArray,
|
|
2039
|
-
lineCap:
|
|
2076
|
+
lineCap: chunkYDEEINER_js.svgLineCap(shapeStyle?.lineCap),
|
|
2040
2077
|
lineJoin,
|
|
2041
2078
|
miterLimit,
|
|
2042
|
-
offsets:
|
|
2043
|
-
widths:
|
|
2079
|
+
offsets: chunkYDEEINER_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
|
|
2080
|
+
widths: chunkYDEEINER_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
|
|
2044
2081
|
};
|
|
2045
2082
|
}
|
|
2046
2083
|
function strokeStrands(d, keyBase, ctx) {
|
|
@@ -2088,12 +2125,12 @@ function gradientDefs(gradient) {
|
|
|
2088
2125
|
}
|
|
2089
2126
|
function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false, gradient) {
|
|
2090
2127
|
const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
|
|
2091
|
-
const subpaths = structuredPaths && structuredPaths.length > 0 ?
|
|
2128
|
+
const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkYDEEINER_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
|
|
2092
2129
|
const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
|
|
2093
|
-
const gradientPaint = gradient ?
|
|
2130
|
+
const gradientPaint = gradient ? chunkYDEEINER_js.svgGradientFillRef(gradient) : void 0;
|
|
2094
2131
|
const nodes = [];
|
|
2095
2132
|
if (subpaths && needsPerSubpath) {
|
|
2096
|
-
const paints =
|
|
2133
|
+
const paints = chunkYDEEINER_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
|
|
2097
2134
|
paints.forEach((paint, idx) => {
|
|
2098
2135
|
if (paint.fill !== "none") {
|
|
2099
2136
|
const mode = subpaths[idx]?.fillMode;
|
|
@@ -2122,7 +2159,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
|
|
|
2122
2159
|
"path",
|
|
2123
2160
|
{
|
|
2124
2161
|
d: pathData,
|
|
2125
|
-
fill: animatesFill ? "inherit" : gradientPaint ??
|
|
2162
|
+
fill: animatesFill ? "inherit" : gradientPaint ?? chunkYDEEINER_js.colorWithOpacity(fillColor, fillOpacity),
|
|
2126
2163
|
stroke: "none",
|
|
2127
2164
|
vectorEffect: "non-scaling-stroke"
|
|
2128
2165
|
},
|
|
@@ -2147,15 +2184,32 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
|
|
|
2147
2184
|
}
|
|
2148
2185
|
);
|
|
2149
2186
|
}
|
|
2187
|
+
function renderGradientDefs(gradient) {
|
|
2188
|
+
if (!gradient) {
|
|
2189
|
+
return null;
|
|
2190
|
+
}
|
|
2191
|
+
const stops = gradient.stops.map((stop, index) => /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: stop.offset, stopColor: stop.color, stopOpacity: stop.opacity }, index));
|
|
2192
|
+
return /* @__PURE__ */ jsxRuntime.jsx("defs", { children: gradient.kind === "radial" ? /* @__PURE__ */ jsxRuntime.jsx("radialGradient", { id: gradient.id, cx: gradient.cx, cy: gradient.cy, r: gradient.r, children: stops }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
2193
|
+
"linearGradient",
|
|
2194
|
+
{
|
|
2195
|
+
id: gradient.id,
|
|
2196
|
+
x1: gradient.x1,
|
|
2197
|
+
y1: gradient.y1,
|
|
2198
|
+
x2: gradient.x2,
|
|
2199
|
+
y2: gradient.y2,
|
|
2200
|
+
children: stops
|
|
2201
|
+
}
|
|
2202
|
+
) });
|
|
2203
|
+
}
|
|
2150
2204
|
function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
|
|
2151
|
-
if (!
|
|
2205
|
+
if (!chunkYDEEINER_js.hasShapeProperties(element)) {
|
|
2152
2206
|
return null;
|
|
2153
2207
|
}
|
|
2154
2208
|
const normalizedType = (element.shapeType || "").toLowerCase();
|
|
2155
|
-
const fillPaint = animatesFill ? "inherit" :
|
|
2156
|
-
const strokePaint = animatesStroke ? "inherit" :
|
|
2157
|
-
const dashType =
|
|
2158
|
-
const dashArray =
|
|
2209
|
+
const fillPaint = animatesFill ? "inherit" : chunkYDEEINER_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
|
|
2210
|
+
const strokePaint = animatesStroke ? "inherit" : chunkYDEEINER_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
|
|
2211
|
+
const dashType = chunkYDEEINER_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
|
|
2212
|
+
const dashArray = chunkYDEEINER_js.getSvgStrokeDasharray(
|
|
2159
2213
|
dashType,
|
|
2160
2214
|
Math.max(strokeWidth, 1),
|
|
2161
2215
|
element.shapeStyle?.customDashSegments
|
|
@@ -2236,21 +2290,96 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
2236
2290
|
// container's `background-image` is suppressed for custom geometry, so
|
|
2237
2291
|
// without this the shape fell back to the parser's representative solid
|
|
2238
2292
|
// and lost every fade (issue #132).
|
|
2239
|
-
|
|
2293
|
+
chunkYDEEINER_js.buildSvgGradientDef(element.shapeStyle, element.id)
|
|
2294
|
+
);
|
|
2295
|
+
}
|
|
2296
|
+
if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !chunkYDEEINER_js.buildStrokeOutline(element)) {
|
|
2297
|
+
const width = Math.max(element.width, 1);
|
|
2298
|
+
const height = Math.max(element.height, 1);
|
|
2299
|
+
const geometry = chunkYDEEINER_js.getPresetShapeVectorGeometry(
|
|
2300
|
+
element.shapeType || "rect",
|
|
2301
|
+
width,
|
|
2302
|
+
height,
|
|
2303
|
+
element.shapeAdjustments
|
|
2240
2304
|
);
|
|
2305
|
+
if (geometry) {
|
|
2306
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2307
|
+
"svg",
|
|
2308
|
+
{
|
|
2309
|
+
viewBox: `${geometry.minX} ${geometry.minY} ${geometry.viewWidth} ${geometry.viewHeight}`,
|
|
2310
|
+
className: "w-full h-full pointer-events-none",
|
|
2311
|
+
preserveAspectRatio: "none",
|
|
2312
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2313
|
+
"path",
|
|
2314
|
+
{
|
|
2315
|
+
d: geometry.d,
|
|
2316
|
+
fill: "none",
|
|
2317
|
+
stroke: strokePaint,
|
|
2318
|
+
strokeWidth: strokeWidth * 2,
|
|
2319
|
+
strokeDasharray: dashArray,
|
|
2320
|
+
vectorEffect: "non-scaling-stroke"
|
|
2321
|
+
}
|
|
2322
|
+
)
|
|
2323
|
+
}
|
|
2324
|
+
);
|
|
2325
|
+
}
|
|
2326
|
+
}
|
|
2327
|
+
if (element.type === "shape" && chunkYDEEINER_js.isWedgeCalloutPresetShape(element.shapeType)) {
|
|
2328
|
+
const width = Math.max(element.width, 1);
|
|
2329
|
+
const height = Math.max(element.height, 1);
|
|
2330
|
+
const geometry = chunkYDEEINER_js.getPresetShapeVectorGeometry(
|
|
2331
|
+
element.shapeType,
|
|
2332
|
+
width,
|
|
2333
|
+
height,
|
|
2334
|
+
element.shapeAdjustments
|
|
2335
|
+
);
|
|
2336
|
+
if (geometry) {
|
|
2337
|
+
const gradient = chunkYDEEINER_js.buildSvgGradientDef(element.shapeStyle, element.id);
|
|
2338
|
+
const gradientPaint = gradient ? chunkYDEEINER_js.svgGradientFillRef(gradient) : void 0;
|
|
2339
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2340
|
+
"svg",
|
|
2341
|
+
{
|
|
2342
|
+
viewBox: `${geometry.minX} ${geometry.minY} ${geometry.viewWidth} ${geometry.viewHeight}`,
|
|
2343
|
+
className: "pointer-events-none",
|
|
2344
|
+
preserveAspectRatio: "none",
|
|
2345
|
+
style: {
|
|
2346
|
+
position: "absolute",
|
|
2347
|
+
left: geometry.minX,
|
|
2348
|
+
top: geometry.minY,
|
|
2349
|
+
width: geometry.viewWidth,
|
|
2350
|
+
height: geometry.viewHeight,
|
|
2351
|
+
overflow: "visible"
|
|
2352
|
+
},
|
|
2353
|
+
children: [
|
|
2354
|
+
animatesFill ? null : renderGradientDefs(gradient),
|
|
2355
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2356
|
+
"path",
|
|
2357
|
+
{
|
|
2358
|
+
d: geometry.d,
|
|
2359
|
+
fill: hasFill ? animatesFill ? "inherit" : gradientPaint ?? fillPaint : "none",
|
|
2360
|
+
stroke: strokeWidth > 0 ? strokePaint : "none",
|
|
2361
|
+
strokeWidth,
|
|
2362
|
+
strokeDasharray: dashArray,
|
|
2363
|
+
vectorEffect: "non-scaling-stroke"
|
|
2364
|
+
}
|
|
2365
|
+
)
|
|
2366
|
+
]
|
|
2367
|
+
}
|
|
2368
|
+
);
|
|
2369
|
+
}
|
|
2241
2370
|
}
|
|
2242
|
-
if (
|
|
2371
|
+
if (chunkYDEEINER_js.isCalloutShape(normalizedType)) {
|
|
2243
2372
|
const width = Math.max(element.width, 1);
|
|
2244
2373
|
const height = Math.max(element.height, 1);
|
|
2245
|
-
const geometry =
|
|
2374
|
+
const geometry = chunkYDEEINER_js.getCalloutLeaderLineGeometry(
|
|
2246
2375
|
normalizedType,
|
|
2247
2376
|
width,
|
|
2248
2377
|
height,
|
|
2249
2378
|
element.shapeAdjustments
|
|
2250
2379
|
);
|
|
2251
2380
|
if (geometry && geometry.points.length >= 2) {
|
|
2252
|
-
const leaderPath =
|
|
2253
|
-
const bounds =
|
|
2381
|
+
const leaderPath = chunkYDEEINER_js.buildCalloutLeaderLineSvgPath(geometry);
|
|
2382
|
+
const bounds = chunkYDEEINER_js.getCalloutViewBoxBounds(width, height, geometry);
|
|
2254
2383
|
const lineStroke = Math.max(strokeWidth, 1);
|
|
2255
2384
|
const offsetLeft = bounds.minX;
|
|
2256
2385
|
const offsetTop = bounds.minY;
|
|
@@ -2313,10 +2442,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
2313
2442
|
const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
|
|
2314
2443
|
const endArrowL = element.shapeStyle?.connectorEndArrowLength;
|
|
2315
2444
|
const compoundLine = element.shapeStyle?.compoundLine;
|
|
2316
|
-
const connectorLineCap =
|
|
2445
|
+
const connectorLineCap = chunkYDEEINER_js.svgLineCap(element.shapeStyle?.lineCap);
|
|
2317
2446
|
const hitTargetWidth = Math.max(strokeWidth * 3, 12);
|
|
2318
|
-
const offsets =
|
|
2319
|
-
const widths =
|
|
2447
|
+
const offsets = chunkYDEEINER_js.getCompoundLineOffsets(compoundLine, strokeWidth);
|
|
2448
|
+
const widths = chunkYDEEINER_js.getCompoundLineWidths(compoundLine, strokeWidth);
|
|
2320
2449
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2321
2450
|
"svg",
|
|
2322
2451
|
{
|
|
@@ -2383,15 +2512,15 @@ function parseGradientFillCss(gradFill) {
|
|
|
2383
2512
|
}
|
|
2384
2513
|
const rawStops = stops.map((gs) => {
|
|
2385
2514
|
const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
|
|
2386
|
-
const color =
|
|
2387
|
-
const opacity =
|
|
2515
|
+
const color = chunkYDEEINER_js.parseDrawingColor(gs) ?? "#888888";
|
|
2516
|
+
const opacity = chunkYDEEINER_js.parseDrawingColorOpacity(gs);
|
|
2388
2517
|
return { position: pos, color, opacity };
|
|
2389
2518
|
}).sort((a, b) => a.position - b.position);
|
|
2390
|
-
const stopStrings = rawStops.map((s) => `${
|
|
2519
|
+
const stopStrings = rawStops.map((s) => `${chunkYDEEINER_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
|
|
2391
2520
|
const lin = gradFill["a:lin"];
|
|
2392
2521
|
if (lin) {
|
|
2393
2522
|
const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
|
|
2394
|
-
const angleDeg = Math.round(
|
|
2523
|
+
const angleDeg = Math.round(chunkYDEEINER_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
|
|
2395
2524
|
return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
|
|
2396
2525
|
}
|
|
2397
2526
|
const path = gradFill["a:path"];
|
|
@@ -2405,7 +2534,7 @@ function parseGradientFillCss(gradFill) {
|
|
|
2405
2534
|
b: Number.parseInt(String(fillToRectXml["@_b"] || "0"), 10) / 1e5
|
|
2406
2535
|
} : void 0;
|
|
2407
2536
|
if (pathType === "rect") {
|
|
2408
|
-
return
|
|
2537
|
+
return chunkYDEEINER_js.buildRectPathGradient(rawStops, void 0, fillToRect);
|
|
2409
2538
|
}
|
|
2410
2539
|
let cx = 50;
|
|
2411
2540
|
let cy = 50;
|
|
@@ -2427,8 +2556,8 @@ function parsePatternFillCss(pattFill) {
|
|
|
2427
2556
|
if (!pattFill) {
|
|
2428
2557
|
return void 0;
|
|
2429
2558
|
}
|
|
2430
|
-
const fgColor =
|
|
2431
|
-
const bgColor =
|
|
2559
|
+
const fgColor = chunkYDEEINER_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
|
|
2560
|
+
const bgColor = chunkYDEEINER_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
|
|
2432
2561
|
const preset = String(pattFill["@_prst"] || "ltDnDiag");
|
|
2433
2562
|
switch (preset) {
|
|
2434
2563
|
case "ltHorz":
|
|
@@ -2539,11 +2668,11 @@ function parseCellBorders(cellProperties) {
|
|
|
2539
2668
|
const prstDash = ln["a:prstDash"];
|
|
2540
2669
|
const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
|
|
2541
2670
|
const cssBorderStyle = ooxmlDashToCss(dashVal);
|
|
2542
|
-
const color =
|
|
2671
|
+
const color = chunkYDEEINER_js.parseDrawingColor(ln["a:solidFill"]);
|
|
2543
2672
|
if (color) {
|
|
2544
|
-
const opacity =
|
|
2673
|
+
const opacity = chunkYDEEINER_js.parseDrawingColorOpacity(ln["a:solidFill"]);
|
|
2545
2674
|
const key = `${edge.prefix}`;
|
|
2546
|
-
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${
|
|
2675
|
+
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkYDEEINER_js.colorWithOpacity(color, opacity)}`;
|
|
2547
2676
|
}
|
|
2548
2677
|
}
|
|
2549
2678
|
return borderStyle;
|
|
@@ -2556,7 +2685,7 @@ function parseCellTextEffects(runProps) {
|
|
|
2556
2685
|
const textShadowParts = [];
|
|
2557
2686
|
const outerShdw = effectLst["a:outerShdw"];
|
|
2558
2687
|
if (outerShdw) {
|
|
2559
|
-
const shdwColor =
|
|
2688
|
+
const shdwColor = chunkYDEEINER_js.parseDrawingColor(outerShdw);
|
|
2560
2689
|
if (shdwColor) {
|
|
2561
2690
|
const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
|
|
2562
2691
|
const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
|
|
@@ -2574,7 +2703,7 @@ function parseCellTextEffects(runProps) {
|
|
|
2574
2703
|
}
|
|
2575
2704
|
const glow = effectLst["a:glow"];
|
|
2576
2705
|
if (glow) {
|
|
2577
|
-
const glowColor =
|
|
2706
|
+
const glowColor = chunkYDEEINER_js.parseDrawingColor(glow);
|
|
2578
2707
|
if (glowColor) {
|
|
2579
2708
|
const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
|
|
2580
2709
|
const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
|
|
@@ -2654,10 +2783,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
2654
2783
|
if (runProps?.["@_u"] !== void 0) {
|
|
2655
2784
|
cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
|
|
2656
2785
|
}
|
|
2657
|
-
const runColor =
|
|
2786
|
+
const runColor = chunkYDEEINER_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkYDEEINER_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
|
|
2658
2787
|
if (runColor) {
|
|
2659
|
-
const opacity =
|
|
2660
|
-
cellStyle.color =
|
|
2788
|
+
const opacity = chunkYDEEINER_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
|
|
2789
|
+
cellStyle.color = chunkYDEEINER_js.colorWithOpacity(runColor, opacity);
|
|
2661
2790
|
}
|
|
2662
2791
|
const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
|
|
2663
2792
|
if (fontFamily) {
|
|
@@ -2667,15 +2796,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
2667
2796
|
cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
|
|
2668
2797
|
}
|
|
2669
2798
|
const cellProperties = cellXml["a:tcPr"];
|
|
2670
|
-
const cellFill =
|
|
2799
|
+
const cellFill = chunkYDEEINER_js.parseDrawingColor(
|
|
2671
2800
|
cellProperties?.["a:solidFill"],
|
|
2672
2801
|
schemeColorOverrides
|
|
2673
2802
|
);
|
|
2674
2803
|
if (cellFill) {
|
|
2675
|
-
const opacity =
|
|
2804
|
+
const opacity = chunkYDEEINER_js.parseDrawingColorOpacity(
|
|
2676
2805
|
cellProperties?.["a:solidFill"]
|
|
2677
2806
|
);
|
|
2678
|
-
cellStyle.backgroundColor =
|
|
2807
|
+
cellStyle.backgroundColor = chunkYDEEINER_js.colorWithOpacity(cellFill, opacity);
|
|
2679
2808
|
} else {
|
|
2680
2809
|
const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
|
|
2681
2810
|
if (gradCss) {
|
|
@@ -2690,16 +2819,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
2690
2819
|
const edgeBorders = parseCellBorders(cellProperties);
|
|
2691
2820
|
Object.assign(cellStyle, edgeBorders);
|
|
2692
2821
|
if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
|
|
2693
|
-
const borderColor =
|
|
2822
|
+
const borderColor = chunkYDEEINER_js.parseDrawingColor(
|
|
2694
2823
|
cellProperties?.["a:lnL"]?.["a:solidFill"],
|
|
2695
2824
|
schemeColorOverrides
|
|
2696
|
-
) ||
|
|
2825
|
+
) || chunkYDEEINER_js.parseDrawingColor(
|
|
2697
2826
|
cellProperties?.["a:lnR"]?.["a:solidFill"],
|
|
2698
2827
|
schemeColorOverrides
|
|
2699
|
-
) ||
|
|
2828
|
+
) || chunkYDEEINER_js.parseDrawingColor(
|
|
2700
2829
|
cellProperties?.["a:lnT"]?.["a:solidFill"],
|
|
2701
2830
|
schemeColorOverrides
|
|
2702
|
-
) ||
|
|
2831
|
+
) || chunkYDEEINER_js.parseDrawingColor(
|
|
2703
2832
|
cellProperties?.["a:lnB"]?.["a:solidFill"],
|
|
2704
2833
|
schemeColorOverrides
|
|
2705
2834
|
);
|
|
@@ -2771,7 +2900,7 @@ function getTableCellBandStyle2(element, rowIndex, cellIndex, rowCount, columnCo
|
|
|
2771
2900
|
if (element.type !== "table") {
|
|
2772
2901
|
return void 0;
|
|
2773
2902
|
}
|
|
2774
|
-
return
|
|
2903
|
+
return chunkYDEEINER_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
|
|
2775
2904
|
tableStyleMap: styleCtx?.tableStyleMap,
|
|
2776
2905
|
colorScheme: styleCtx?.theme?.colorScheme,
|
|
2777
2906
|
fontScheme: styleCtx?.theme?.fontScheme
|
|
@@ -2847,7 +2976,7 @@ function renderTableCellContent(cell, fallbackText) {
|
|
|
2847
2976
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2848
2977
|
"span",
|
|
2849
2978
|
{
|
|
2850
|
-
style: { position: "relative", ...
|
|
2979
|
+
style: { position: "relative", ...chunkYDEEINER_js.cellRunStyle(run) },
|
|
2851
2980
|
children: run.text
|
|
2852
2981
|
},
|
|
2853
2982
|
`r-${index}`
|
|
@@ -2855,7 +2984,7 @@ function renderTableCellContent(cell, fallbackText) {
|
|
|
2855
2984
|
});
|
|
2856
2985
|
}
|
|
2857
2986
|
function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
|
|
2858
|
-
return
|
|
2987
|
+
return chunkYDEEINER_js.getCellDiagonalBorders(style, tableData, pos, {
|
|
2859
2988
|
tableStyleMap: styleCtx?.tableStyleMap,
|
|
2860
2989
|
colorScheme: styleCtx?.theme?.colorScheme,
|
|
2861
2990
|
fontScheme: styleCtx?.theme?.fontScheme
|
|
@@ -2988,7 +3117,7 @@ function TableResizeOverlay({
|
|
|
2988
3117
|
const containerRef = React6.useRef(null);
|
|
2989
3118
|
const [rowBounds, setRowBounds] = React6.useState([]);
|
|
2990
3119
|
const dragRef = React6.useRef(null);
|
|
2991
|
-
const colBoundaries = React6.useMemo(() =>
|
|
3120
|
+
const colBoundaries = React6.useMemo(() => chunkYDEEINER_js.computeColumnBoundaries(columnWidths), [columnWidths]);
|
|
2992
3121
|
const measureRows = React6.useCallback(() => {
|
|
2993
3122
|
const container = containerRef.current;
|
|
2994
3123
|
if (!container) {
|
|
@@ -3035,11 +3164,11 @@ function TableResizeOverlay({
|
|
|
3035
3164
|
const rect = containerRef.current.getBoundingClientRect();
|
|
3036
3165
|
if (drag.type === "col" && drag.initialWidths && onResizeColumns) {
|
|
3037
3166
|
const deltaProp = (e.clientX - drag.startPos) / rect.width;
|
|
3038
|
-
onResizeColumns(
|
|
3167
|
+
onResizeColumns(chunkYDEEINER_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
|
|
3039
3168
|
} else if (drag.type === "row" && onResizeRow) {
|
|
3040
3169
|
const deltaY = e.clientY - drag.startPos;
|
|
3041
|
-
const newHeight =
|
|
3042
|
-
drag.initialRowHeight ??
|
|
3170
|
+
const newHeight = chunkYDEEINER_js.computeResizedRowHeight(
|
|
3171
|
+
drag.initialRowHeight ?? chunkYDEEINER_js.DEFAULT_ROW_HEIGHT,
|
|
3043
3172
|
deltaY
|
|
3044
3173
|
);
|
|
3045
3174
|
onResizeRow(drag.index, newHeight);
|
|
@@ -3077,7 +3206,7 @@ function TableResizeOverlay({
|
|
|
3077
3206
|
e.stopPropagation();
|
|
3078
3207
|
const table = containerRef.current?.querySelector("table");
|
|
3079
3208
|
const tr = table?.querySelectorAll("tbody > tr")[index];
|
|
3080
|
-
const actualHeight = tr?.offsetHeight ??
|
|
3209
|
+
const actualHeight = tr?.offsetHeight ?? chunkYDEEINER_js.DEFAULT_ROW_HEIGHT;
|
|
3081
3210
|
document.body.style.cursor = "row-resize";
|
|
3082
3211
|
document.body.style.userSelect = "none";
|
|
3083
3212
|
dragRef.current = {
|
|
@@ -3124,7 +3253,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3124
3253
|
colorScheme: options?.styleCtx?.theme?.colorScheme,
|
|
3125
3254
|
fontScheme: options?.styleCtx?.theme?.fontScheme
|
|
3126
3255
|
};
|
|
3127
|
-
const cellCss = (cell, rowIndex, cellIndex) =>
|
|
3256
|
+
const cellCss = (cell, rowIndex, cellIndex) => chunkYDEEINER_js.tableCellCss(
|
|
3128
3257
|
tableData,
|
|
3129
3258
|
cell,
|
|
3130
3259
|
{ rowIndex, cellIndex, rowCount, columnCount },
|
|
@@ -3137,7 +3266,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3137
3266
|
}
|
|
3138
3267
|
const first = selectedCell.selectedCells[0];
|
|
3139
3268
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
3140
|
-
return
|
|
3269
|
+
return chunkYDEEINER_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
|
|
3141
3270
|
})();
|
|
3142
3271
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3143
3272
|
TableResizeOverlay,
|
|
@@ -3158,9 +3287,9 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3158
3287
|
{
|
|
3159
3288
|
className: "w-full h-full border-collapse table-fixed",
|
|
3160
3289
|
style: {
|
|
3161
|
-
fontFamily:
|
|
3290
|
+
fontFamily: chunkYDEEINER_js.DEFAULT_FONT_FAMILY,
|
|
3162
3291
|
// `a:tblPr@rtl` mirrors the column order for RTL decks.
|
|
3163
|
-
...
|
|
3292
|
+
...chunkYDEEINER_js.tableContainerCss(tableData)
|
|
3164
3293
|
},
|
|
3165
3294
|
children: [
|
|
3166
3295
|
tableData.columnWidths.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: tableData.columnWidths.map((w, ci) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3179,7 +3308,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3179
3308
|
return null;
|
|
3180
3309
|
}
|
|
3181
3310
|
const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
|
|
3182
|
-
const isInMultiSelection =
|
|
3311
|
+
const isInMultiSelection = chunkYDEEINER_js.isCellInRect(rowIndex, cellIndex, selectionRect);
|
|
3183
3312
|
const isCellEditing = isCellSelected && selectedCell?.isEditing;
|
|
3184
3313
|
const diag = getCellDiagonalBorders2(
|
|
3185
3314
|
cell.style,
|
|
@@ -3208,7 +3337,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3208
3337
|
}
|
|
3209
3338
|
event.stopPropagation();
|
|
3210
3339
|
if (event.shiftKey && selectedCell) {
|
|
3211
|
-
const rect =
|
|
3340
|
+
const rect = chunkYDEEINER_js.computeSelectionRect(
|
|
3212
3341
|
selectedCell.rowIndex,
|
|
3213
3342
|
selectedCell.columnIndex,
|
|
3214
3343
|
rowIndex,
|
|
@@ -3218,7 +3347,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3218
3347
|
options?.onSelectCell?.({
|
|
3219
3348
|
rowIndex: selectedCell.rowIndex,
|
|
3220
3349
|
columnIndex: selectedCell.columnIndex,
|
|
3221
|
-
selectedCells:
|
|
3350
|
+
selectedCells: chunkYDEEINER_js.rectToCells(rect)
|
|
3222
3351
|
});
|
|
3223
3352
|
} else {
|
|
3224
3353
|
options?.onSelectCell?.({
|
|
@@ -3294,7 +3423,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3294
3423
|
}
|
|
3295
3424
|
const first = selectedCell.selectedCells[0];
|
|
3296
3425
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
3297
|
-
return
|
|
3426
|
+
return chunkYDEEINER_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
|
|
3298
3427
|
})();
|
|
3299
3428
|
const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
|
|
3300
3429
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3316,9 +3445,9 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3316
3445
|
{
|
|
3317
3446
|
className: "w-full h-full border-collapse table-fixed",
|
|
3318
3447
|
style: {
|
|
3319
|
-
fontFamily:
|
|
3448
|
+
fontFamily: chunkYDEEINER_js.DEFAULT_FONT_FAMILY,
|
|
3320
3449
|
// `a:tblPr@rtl` mirrors the column order for RTL decks.
|
|
3321
|
-
...
|
|
3450
|
+
...chunkYDEEINER_js.tableContainerCss(tableEl.tableData)
|
|
3322
3451
|
},
|
|
3323
3452
|
children: [
|
|
3324
3453
|
parsedTable.columnPercentages.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((percentage, columnIndex) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3375,7 +3504,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3375
3504
|
color: textStyle.color,
|
|
3376
3505
|
...bandStyle,
|
|
3377
3506
|
...xmlCellStyle,
|
|
3378
|
-
...tdCellOverride ?
|
|
3507
|
+
...tdCellOverride ? chunkYDEEINER_js.cellStyleToCss(tdCellOverride) : void 0,
|
|
3379
3508
|
...diag ? { position: "relative" } : void 0
|
|
3380
3509
|
};
|
|
3381
3510
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -3385,7 +3514,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3385
3514
|
"border px-1 py-0.5 align-top",
|
|
3386
3515
|
isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
|
|
3387
3516
|
selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
|
|
3388
|
-
|
|
3517
|
+
chunkYDEEINER_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
|
|
3389
3518
|
),
|
|
3390
3519
|
colSpan,
|
|
3391
3520
|
rowSpan: rSpan,
|
|
@@ -3396,7 +3525,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3396
3525
|
}
|
|
3397
3526
|
event.stopPropagation();
|
|
3398
3527
|
if (event.shiftKey && selectedCell && tableEl.tableData) {
|
|
3399
|
-
const rect =
|
|
3528
|
+
const rect = chunkYDEEINER_js.computeSelectionRect(
|
|
3400
3529
|
selectedCell.rowIndex,
|
|
3401
3530
|
selectedCell.columnIndex,
|
|
3402
3531
|
rowIndex,
|
|
@@ -3406,7 +3535,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3406
3535
|
options?.onSelectCell?.({
|
|
3407
3536
|
rowIndex: selectedCell.rowIndex,
|
|
3408
3537
|
columnIndex: selectedCell.columnIndex,
|
|
3409
|
-
selectedCells:
|
|
3538
|
+
selectedCells: chunkYDEEINER_js.rectToCells(rect)
|
|
3410
3539
|
});
|
|
3411
3540
|
} else {
|
|
3412
3541
|
options?.onSelectCell?.({
|
|
@@ -3465,23 +3594,23 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3465
3594
|
);
|
|
3466
3595
|
}
|
|
3467
3596
|
function partAttrs(part) {
|
|
3468
|
-
return part ?
|
|
3597
|
+
return part ? chunkYDEEINER_js.chartPartToAttrs(part) : void 0;
|
|
3469
3598
|
}
|
|
3470
3599
|
function resolveReactPalette(chartData) {
|
|
3471
3600
|
if (chartData.colorPalette && chartData.colorPalette.length > 0) {
|
|
3472
3601
|
return chartData.colorPalette;
|
|
3473
3602
|
}
|
|
3474
|
-
return [...
|
|
3603
|
+
return [...chunkYDEEINER_js.getChartStylePalette(chartData.style?.styleId)];
|
|
3475
3604
|
}
|
|
3476
3605
|
function buildReactChartViewModel(element) {
|
|
3477
3606
|
if (element.type !== "chart" || !element.chartData) {
|
|
3478
|
-
return
|
|
3607
|
+
return chunkYDEEINER_js.buildChartViewModel(element);
|
|
3479
3608
|
}
|
|
3480
3609
|
const palette = resolveReactPalette(element.chartData), themedElement = {
|
|
3481
3610
|
...element,
|
|
3482
3611
|
chartData: { ...element.chartData, colorPalette: palette }
|
|
3483
3612
|
};
|
|
3484
|
-
return
|
|
3613
|
+
return chunkYDEEINER_js.buildChartViewModel(themedElement);
|
|
3485
3614
|
}
|
|
3486
3615
|
function renderPrimitive(prim, key) {
|
|
3487
3616
|
switch (prim.kind) {
|
|
@@ -3630,7 +3759,7 @@ function renderText(t, key) {
|
|
|
3630
3759
|
);
|
|
3631
3760
|
}
|
|
3632
3761
|
function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
|
|
3633
|
-
const legendItems =
|
|
3762
|
+
const legendItems = chunkYDEEINER_js.computeChartLegendLayout(vm);
|
|
3634
3763
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3635
3764
|
"svg",
|
|
3636
3765
|
{
|
|
@@ -3729,11 +3858,11 @@ function renderChartElement(element) {
|
|
|
3729
3858
|
if (!chartData || chartData.series.length === 0) {
|
|
3730
3859
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkSWRY3SI5_js.translationsEn["pptx.chart.heading"] });
|
|
3731
3860
|
}
|
|
3732
|
-
const kind =
|
|
3861
|
+
const kind = chunkYDEEINER_js.resolveChartKind(chartData.chartType ?? "bar");
|
|
3733
3862
|
return renderChartViewModel(
|
|
3734
3863
|
element.id,
|
|
3735
3864
|
buildReactChartViewModel(element),
|
|
3736
|
-
|
|
3865
|
+
chunkYDEEINER_js.chartPreserveAspectRatio(kind)
|
|
3737
3866
|
);
|
|
3738
3867
|
}
|
|
3739
3868
|
|
|
@@ -3753,14 +3882,14 @@ function buildNotesPdf(pages) {
|
|
|
3753
3882
|
notes: page.notes,
|
|
3754
3883
|
slideNumber: page.slideNumber
|
|
3755
3884
|
}));
|
|
3756
|
-
const bytes =
|
|
3885
|
+
const bytes = chunkYDEEINER_js.buildNotesPdfBytes(images, meta);
|
|
3757
3886
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
3758
3887
|
return URL.createObjectURL(blob);
|
|
3759
3888
|
}
|
|
3760
3889
|
|
|
3761
3890
|
// src/viewer/utils/pdf-builder-slides.ts
|
|
3762
3891
|
function buildPdfFromImageData(images) {
|
|
3763
|
-
const bytes =
|
|
3892
|
+
const bytes = chunkYDEEINER_js.buildSlidesPdfBytes(images);
|
|
3764
3893
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
3765
3894
|
return URL.createObjectURL(blob);
|
|
3766
3895
|
}
|
|
@@ -3769,7 +3898,7 @@ function buildPdfFromImageData(images) {
|
|
|
3769
3898
|
var activePreview = null;
|
|
3770
3899
|
function startPreviewAnimation(elementId, preset, options) {
|
|
3771
3900
|
stopPreviewAnimation();
|
|
3772
|
-
const descriptor =
|
|
3901
|
+
const descriptor = chunkYDEEINER_js.buildPreviewAnimation(preset, options);
|
|
3773
3902
|
if (!descriptor) {
|
|
3774
3903
|
return;
|
|
3775
3904
|
}
|
|
@@ -3782,7 +3911,7 @@ function startMotionPathPreview(elementId, path, options) {
|
|
|
3782
3911
|
return;
|
|
3783
3912
|
}
|
|
3784
3913
|
const stage = domEl.offsetParent;
|
|
3785
|
-
const descriptor =
|
|
3914
|
+
const descriptor = chunkYDEEINER_js.buildMotionPathPreview({
|
|
3786
3915
|
path,
|
|
3787
3916
|
slideWidth: stage?.offsetWidth || DEFAULT_PREVIEW_SLIDE_WIDTH,
|
|
3788
3917
|
slideHeight: stage?.offsetHeight || DEFAULT_PREVIEW_SLIDE_HEIGHT,
|
|
@@ -3880,6 +4009,8 @@ exports.getConnectorPathGeometry = getConnectorPathGeometry;
|
|
|
3880
4009
|
exports.getCropShapeClipPath = getCropShapeClipPath;
|
|
3881
4010
|
exports.getDuotoneColors = getDuotoneColors;
|
|
3882
4011
|
exports.getImageRenderStyle = getImageRenderStyle;
|
|
4012
|
+
exports.getImageSurfaceMaskStyle = getImageSurfaceMaskStyle;
|
|
4013
|
+
exports.getImageSurfaceStyle = getImageSurfaceStyle;
|
|
3883
4014
|
exports.getImageTilingStyle = getImageTilingStyle2;
|
|
3884
4015
|
exports.getShapeVisualStyle = getShapeVisualStyle;
|
|
3885
4016
|
exports.getTextLayoutStyle = getTextLayoutStyle;
|