pptx-react-viewer 2.22.0 → 3.0.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 +16 -0
- package/dist/{AiChatPanel-KDHDYBMP.mjs → AiChatPanel-DMBQPAGB.mjs} +3 -3
- package/dist/AiChatPanel-DMBQPAGB.mjs.br +0 -0
- package/dist/AiChatPanel-DMBQPAGB.mjs.gz +0 -0
- package/dist/{AiChatPanel-WVRT4OLF.js → AiChatPanel-NLIUZ5RI.js} +23 -23
- package/dist/AiChatPanel-NLIUZ5RI.js.br +0 -0
- package/dist/AiChatPanel-NLIUZ5RI.js.gz +0 -0
- package/dist/{Model3DScene-COI2CG35.js → Model3DScene-JNZN42TU.js} +2 -2
- package/dist/Model3DScene-JNZN42TU.js.br +0 -0
- package/dist/Model3DScene-JNZN42TU.js.gz +0 -0
- package/dist/{Model3DScene-I5SQKIZC.mjs → Model3DScene-ZO6U7YVU.mjs} +1 -1
- package/dist/Model3DScene-ZO6U7YVU.mjs.br +0 -0
- package/dist/Model3DScene-ZO6U7YVU.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-6LTF5QPW.mjs → SurfaceChart3DScene-P6CVRWDQ.mjs} +1 -1
- package/dist/SurfaceChart3DScene-P6CVRWDQ.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-P6CVRWDQ.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-2N4TPYPU.js → SurfaceChart3DScene-PGD4ZCLI.js} +2 -2
- package/dist/SurfaceChart3DScene-PGD4ZCLI.js.br +0 -0
- package/dist/SurfaceChart3DScene-PGD4ZCLI.js.gz +0 -0
- package/dist/{chunk-YNHWNFE3.js → chunk-3MW6F3K7.js} +451 -399
- package/dist/chunk-3MW6F3K7.js.br +0 -0
- package/dist/chunk-3MW6F3K7.js.gz +0 -0
- package/dist/{chunk-TWU72BY4.mjs → chunk-BGAJLL4N.mjs} +70 -18
- package/dist/chunk-BGAJLL4N.mjs.br +0 -0
- package/dist/chunk-BGAJLL4N.mjs.gz +0 -0
- package/dist/{chunk-XIBTR7KJ.mjs → chunk-H2ONCGFZ.mjs} +101 -100
- package/dist/chunk-H2ONCGFZ.mjs.br +0 -0
- package/dist/chunk-H2ONCGFZ.mjs.gz +0 -0
- package/dist/{chunk-RJFKXPMU.mjs → chunk-OB4PKKIN.mjs} +1 -1
- package/dist/chunk-OB4PKKIN.mjs.br +0 -0
- package/dist/chunk-OB4PKKIN.mjs.gz +0 -0
- package/dist/{chunk-57TM4MV4.mjs → chunk-OXPD2UYI.mjs} +13085 -6709
- package/dist/chunk-OXPD2UYI.mjs.br +0 -0
- package/dist/chunk-OXPD2UYI.mjs.gz +0 -0
- package/dist/{chunk-KK6DOUES.js → chunk-RSEZYBKT.js} +1131 -1130
- package/dist/chunk-RSEZYBKT.js.br +0 -0
- package/dist/chunk-RSEZYBKT.js.gz +0 -0
- package/dist/{chunk-7BZYDUNM.mjs → chunk-S6PFSR7I.mjs} +108 -255
- package/dist/chunk-S6PFSR7I.mjs.br +0 -0
- package/dist/chunk-S6PFSR7I.mjs.gz +0 -0
- package/dist/{chunk-34UAGEJM.js → chunk-SDOQKSKI.js} +13103 -6715
- package/dist/chunk-SDOQKSKI.js.br +0 -0
- package/dist/chunk-SDOQKSKI.js.gz +0 -0
- package/dist/{chunk-POP5IWYB.js → chunk-WFMSDYVQ.js} +3 -3
- package/dist/chunk-WFMSDYVQ.js.br +0 -0
- package/dist/chunk-WFMSDYVQ.js.gz +0 -0
- package/dist/{chunk-K7TFZ5MW.js → chunk-XMLPTDPM.js} +248 -396
- package/dist/chunk-XMLPTDPM.js.br +0 -0
- package/dist/chunk-XMLPTDPM.js.gz +0 -0
- package/dist/index.d.ts +475 -19
- package/dist/index.js +45 -45
- 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 +492 -21
- 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/pptx-viewer.css +1 -1
- package/dist/pptx-viewer.css.br +0 -0
- package/dist/pptx-viewer.css.gz +0 -0
- package/dist/viewer/index.d.ts +472 -17
- 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-KDHDYBMP.mjs.br +0 -0
- package/dist/AiChatPanel-KDHDYBMP.mjs.gz +0 -0
- package/dist/AiChatPanel-WVRT4OLF.js.br +0 -0
- package/dist/AiChatPanel-WVRT4OLF.js.gz +0 -0
- package/dist/Model3DScene-COI2CG35.js.br +0 -0
- package/dist/Model3DScene-COI2CG35.js.gz +0 -0
- package/dist/Model3DScene-I5SQKIZC.mjs.br +0 -0
- package/dist/Model3DScene-I5SQKIZC.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-2N4TPYPU.js.br +0 -0
- package/dist/SurfaceChart3DScene-2N4TPYPU.js.gz +0 -0
- package/dist/SurfaceChart3DScene-6LTF5QPW.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-6LTF5QPW.mjs.gz +0 -0
- package/dist/chunk-34UAGEJM.js.br +0 -0
- package/dist/chunk-34UAGEJM.js.gz +0 -0
- package/dist/chunk-57TM4MV4.mjs.br +0 -0
- package/dist/chunk-57TM4MV4.mjs.gz +0 -0
- package/dist/chunk-7BZYDUNM.mjs.br +0 -0
- package/dist/chunk-7BZYDUNM.mjs.gz +0 -0
- package/dist/chunk-K7TFZ5MW.js.br +0 -0
- package/dist/chunk-K7TFZ5MW.js.gz +0 -0
- package/dist/chunk-KK6DOUES.js.br +0 -0
- package/dist/chunk-KK6DOUES.js.gz +0 -0
- package/dist/chunk-POP5IWYB.js.br +0 -0
- package/dist/chunk-POP5IWYB.js.gz +0 -0
- package/dist/chunk-RJFKXPMU.mjs.br +0 -0
- package/dist/chunk-RJFKXPMU.mjs.gz +0 -0
- package/dist/chunk-TWU72BY4.mjs.br +0 -0
- package/dist/chunk-TWU72BY4.mjs.gz +0 -0
- package/dist/chunk-XIBTR7KJ.mjs.br +0 -0
- package/dist/chunk-XIBTR7KJ.mjs.gz +0 -0
- package/dist/chunk-YNHWNFE3.js.br +0 -0
- package/dist/chunk-YNHWNFE3.js.gz +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunkU6A5FWWE_js = require('./chunk-U6A5FWWE.js');
|
|
4
|
-
var
|
|
4
|
+
var chunkSDOQKSKI_js = require('./chunk-SDOQKSKI.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 chunkSDOQKSKI_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 chunkSDOQKSKI_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 = chunkSDOQKSKI_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 = chunkSDOQKSKI_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 (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
|
|
268
268
|
return false;
|
|
269
269
|
}
|
|
270
270
|
const st = getShapeType(element.shapeType);
|
|
@@ -273,7 +273,7 @@ function isConnectorOrLineElement(element) {
|
|
|
273
273
|
|
|
274
274
|
// src/viewer/utils/image-style.ts
|
|
275
275
|
function getImageMaskStyle(element) {
|
|
276
|
-
if (!
|
|
276
|
+
if (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
|
|
277
277
|
return void 0;
|
|
278
278
|
}
|
|
279
279
|
const shapeType = element.shapeType;
|
|
@@ -282,7 +282,7 @@ function getImageMaskStyle(element) {
|
|
|
282
282
|
}
|
|
283
283
|
const normalized = shapeType.toLowerCase();
|
|
284
284
|
if (normalized === "roundrect" || normalized === "round1rect" || normalized === "round2samerect" || normalized === "round2diagrect" || normalized === "sniproundrect" || normalized === "snip1rect" || normalized === "snip2diagrect") {
|
|
285
|
-
const radiusPx =
|
|
285
|
+
const radiusPx = chunkSDOQKSKI_js.getRoundRectRadiusPx2(element);
|
|
286
286
|
if (radiusPx <= 0.01) {
|
|
287
287
|
return void 0;
|
|
288
288
|
}
|
|
@@ -294,7 +294,7 @@ function getImageMaskStyle(element) {
|
|
|
294
294
|
if (normalized === "can" || normalized === "cylinder") {
|
|
295
295
|
return { borderRadius: "48% / 12%" };
|
|
296
296
|
}
|
|
297
|
-
const clipPath =
|
|
297
|
+
const clipPath = chunkSDOQKSKI_js.getResolvedShapeClipPath(element);
|
|
298
298
|
if (!clipPath) {
|
|
299
299
|
return void 0;
|
|
300
300
|
}
|
|
@@ -303,7 +303,7 @@ function getImageMaskStyle(element) {
|
|
|
303
303
|
function getImageRenderStyle(element) {
|
|
304
304
|
return {
|
|
305
305
|
...getImageMaskStyle(element) || {},
|
|
306
|
-
...
|
|
306
|
+
...chunkSDOQKSKI_js.getImageFitStyle(element)
|
|
307
307
|
};
|
|
308
308
|
}
|
|
309
309
|
var CROP_SHAPE_CLIP_PATHS = {
|
|
@@ -316,7 +316,7 @@ var CROP_SHAPE_CLIP_PATHS = {
|
|
|
316
316
|
star: "polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)"
|
|
317
317
|
};
|
|
318
318
|
function getCropShapeClipPath(element) {
|
|
319
|
-
if (!
|
|
319
|
+
if (!chunkSDOQKSKI_js.isImageLikeElement(element)) {
|
|
320
320
|
return void 0;
|
|
321
321
|
}
|
|
322
322
|
const shape = element.cropShape;
|
|
@@ -326,7 +326,7 @@ function getCropShapeClipPath(element) {
|
|
|
326
326
|
return CROP_SHAPE_CLIP_PATHS[shape];
|
|
327
327
|
}
|
|
328
328
|
function getImageTilingStyle2(element) {
|
|
329
|
-
return
|
|
329
|
+
return chunkSDOQKSKI_js.getImageTilingStyle(element);
|
|
330
330
|
}
|
|
331
331
|
|
|
332
332
|
// src/viewer/utils/geometry-image.ts
|
|
@@ -526,9 +526,9 @@ function registerMediaElement(elementId, el) {
|
|
|
526
526
|
};
|
|
527
527
|
}
|
|
528
528
|
function executeMediaCommand(command, frameRoot) {
|
|
529
|
-
return
|
|
529
|
+
return chunkSDOQKSKI_js.runMediaCommand(
|
|
530
530
|
command,
|
|
531
|
-
(targetId) => registry.get(targetId) ??
|
|
531
|
+
(targetId) => registry.get(targetId) ?? chunkSDOQKSKI_js.findMediaElementByElementId(targetId, frameRoot?.())
|
|
532
532
|
);
|
|
533
533
|
}
|
|
534
534
|
function PresentationMediaController({
|
|
@@ -572,7 +572,7 @@ function PresentationMediaController({
|
|
|
572
572
|
loop: shouldLoop,
|
|
573
573
|
volume: playbackVolume,
|
|
574
574
|
playbackRate
|
|
575
|
-
} =
|
|
575
|
+
} = chunkSDOQKSKI_js.mediaPlaybackAttributes({
|
|
576
576
|
loop: element.loop,
|
|
577
577
|
volume: element.volume,
|
|
578
578
|
playbackSpeed: element.playbackSpeed
|
|
@@ -708,7 +708,7 @@ function PresentationMediaController({
|
|
|
708
708
|
if (element.playAcrossSlides && element.mediaType === "audio") {
|
|
709
709
|
const dataUrl = element.mediaData ?? resolvedDataUrl;
|
|
710
710
|
if (dataUrl) {
|
|
711
|
-
|
|
711
|
+
chunkSDOQKSKI_js.registerPersistentAudio(
|
|
712
712
|
element.id,
|
|
713
713
|
dataUrl,
|
|
714
714
|
element.mediaMimeType,
|
|
@@ -806,17 +806,17 @@ function Badge({
|
|
|
806
806
|
"div",
|
|
807
807
|
{
|
|
808
808
|
className: `absolute inset-0 flex flex-col items-center justify-center ${isMissing ? "gap-1" : ""}`,
|
|
809
|
-
...{ [
|
|
809
|
+
...{ [chunkSDOQKSKI_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
|
|
810
810
|
children: [
|
|
811
811
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
812
812
|
FallbackIcon,
|
|
813
813
|
{
|
|
814
|
-
paths:
|
|
814
|
+
paths: chunkSDOQKSKI_js.mediaFallbackIcon(visual, element.mediaType),
|
|
815
815
|
size: isMissing ? 32 : 48,
|
|
816
816
|
className: isMissing ? "text-white/60" : "text-white/80 drop-shadow-md"
|
|
817
817
|
}
|
|
818
818
|
),
|
|
819
|
-
isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(
|
|
819
|
+
isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkSDOQKSKI_js.mediaFallbackLabelKey(visual, element.mediaType)) })
|
|
820
820
|
]
|
|
821
821
|
}
|
|
822
822
|
);
|
|
@@ -833,17 +833,17 @@ function Placeholder({
|
|
|
833
833
|
"div",
|
|
834
834
|
{
|
|
835
835
|
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
|
-
...{ [
|
|
836
|
+
...{ [chunkSDOQKSKI_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
|
|
837
837
|
children: [
|
|
838
838
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
839
839
|
FallbackIcon,
|
|
840
840
|
{
|
|
841
|
-
paths:
|
|
841
|
+
paths: chunkSDOQKSKI_js.mediaFallbackIcon(visual, element.mediaType),
|
|
842
842
|
size: isMissing ? 36 : element.mediaType === "audio" ? 24 : 32,
|
|
843
843
|
className: isMissing ? "text-white/50" : "text-white/70"
|
|
844
844
|
}
|
|
845
845
|
),
|
|
846
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(
|
|
846
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkSDOQKSKI_js.mediaFallbackLabelKey(visual, element.mediaType)) })
|
|
847
847
|
]
|
|
848
848
|
}
|
|
849
849
|
);
|
|
@@ -853,7 +853,7 @@ function renderMediaFallback({
|
|
|
853
853
|
posterUrl,
|
|
854
854
|
surface
|
|
855
855
|
}) {
|
|
856
|
-
const visual =
|
|
856
|
+
const visual = chunkSDOQKSKI_js.mediaFallbackVisual(surface, {
|
|
857
857
|
hasPoster: Boolean(posterUrl),
|
|
858
858
|
missing: element.mediaMissing === true
|
|
859
859
|
});
|
|
@@ -882,7 +882,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
|
|
|
882
882
|
const dataUrl = element.mediaData ?? (mediaPath ? mediaDataUrls.get(mediaPath) : void 0);
|
|
883
883
|
const trimFragment = buildTrimFragment(element);
|
|
884
884
|
const posterUrl = element.posterFrameData ?? void 0;
|
|
885
|
-
const shouldLoop =
|
|
885
|
+
const shouldLoop = chunkSDOQKSKI_js.mediaPlaybackAttributes(element).loop;
|
|
886
886
|
const shouldAutoPlay = options?.autoPlay === true || element.autoPlay === true;
|
|
887
887
|
const isFullScreen = options?.fullScreen === true;
|
|
888
888
|
const isPresentationMode = options?.isPresentationMode === true;
|
|
@@ -965,19 +965,19 @@ function renderMediaElement(element, mediaDataUrls, options) {
|
|
|
965
965
|
|
|
966
966
|
// src/viewer/utils/text-utils.tsx
|
|
967
967
|
function getTextStyleForElement(element, fallbackColor) {
|
|
968
|
-
return
|
|
968
|
+
return chunkSDOQKSKI_js.buildTextBlockStyle(element, { fallbackColor });
|
|
969
969
|
}
|
|
970
970
|
|
|
971
971
|
// src/viewer/utils/text-layout.tsx
|
|
972
972
|
function getTextLayoutStyle(element) {
|
|
973
|
-
if (!
|
|
973
|
+
if (!chunkSDOQKSKI_js.hasTextProperties(element)) {
|
|
974
974
|
return {};
|
|
975
975
|
}
|
|
976
|
-
const writingMode =
|
|
977
|
-
const textOrientation =
|
|
978
|
-
const verticalDirection =
|
|
976
|
+
const writingMode = chunkSDOQKSKI_js.toCssWritingMode(element.textStyle?.textDirection);
|
|
977
|
+
const textOrientation = chunkSDOQKSKI_js.toCssTextOrientation(element.textStyle?.textDirection);
|
|
978
|
+
const verticalDirection = chunkSDOQKSKI_js.toCssVerticalDirection(element.textStyle?.textDirection);
|
|
979
979
|
const textWrapNone = element.textStyle?.textWrap === "none";
|
|
980
|
-
const hasParagraphIndents =
|
|
980
|
+
const hasParagraphIndents = chunkSDOQKSKI_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
|
|
981
981
|
const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
|
|
982
982
|
const paragraphIndent = element.textStyle?.paragraphIndent;
|
|
983
983
|
const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
|
|
@@ -986,7 +986,7 @@ function getTextLayoutStyle(element) {
|
|
|
986
986
|
const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
|
|
987
987
|
return {
|
|
988
988
|
// Columns / flex anchoring / anchorCtr / tab-size / kinsoku, from shared.
|
|
989
|
-
...
|
|
989
|
+
...chunkSDOQKSKI_js.buildTextBodyLayoutStyle(element),
|
|
990
990
|
// Body inset only. Paragraph spacing (spcBef/spcAft) is applied
|
|
991
991
|
// per-paragraph by the paragraph renderer, not collapsed here.
|
|
992
992
|
paddingTop: bodyTop,
|
|
@@ -1005,7 +1005,7 @@ function getTextLayoutStyle(element) {
|
|
|
1005
1005
|
|
|
1006
1006
|
// src/viewer/utils/text-effects.tsx
|
|
1007
1007
|
function buildTextBody3DSceneStyle2(textStyle) {
|
|
1008
|
-
return
|
|
1008
|
+
return chunkSDOQKSKI_js.buildTextBody3DSceneStyle(textStyle);
|
|
1009
1009
|
}
|
|
1010
1010
|
|
|
1011
1011
|
// src/viewer/utils/text-warp-css.tsx
|
|
@@ -1190,13 +1190,13 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
|
|
|
1190
1190
|
if (!subElementAnimStates || subElementAnimStates.size === 0) {
|
|
1191
1191
|
return renderedSegments;
|
|
1192
1192
|
}
|
|
1193
|
-
const paraKey = `${elementId}${
|
|
1193
|
+
const paraKey = `${elementId}${chunkSDOQKSKI_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
|
|
1194
1194
|
const paraState = subElementAnimStates.get(paraKey);
|
|
1195
1195
|
if (paraState) {
|
|
1196
1196
|
const style = buildAnimStyle(paraState);
|
|
1197
1197
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
|
|
1198
1198
|
}
|
|
1199
|
-
const spec =
|
|
1199
|
+
const spec = chunkSDOQKSKI_js.buildTextBuildSpec(
|
|
1200
1200
|
elementId,
|
|
1201
1201
|
paraIndex,
|
|
1202
1202
|
paraRuns.map((run) => ({ text: run.text, style: run })),
|
|
@@ -1214,143 +1214,20 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
|
|
|
1214
1214
|
"span",
|
|
1215
1215
|
{
|
|
1216
1216
|
"data-anim-id": span.animId,
|
|
1217
|
-
style:
|
|
1217
|
+
style: chunkSDOQKSKI_js.textBuildSpanStyle(span),
|
|
1218
1218
|
children: content
|
|
1219
1219
|
},
|
|
1220
1220
|
span.animId
|
|
1221
1221
|
);
|
|
1222
1222
|
});
|
|
1223
1223
|
}
|
|
1224
|
-
var EPS = 0.01;
|
|
1225
|
-
var FALLBACK_STEP_PX = 48;
|
|
1226
|
-
function buildTabContext(tabStops, defaultTabSize, fontSizePx, fontFamily, bold, italic) {
|
|
1227
|
-
if (!tabStops || tabStops.length === 0) {
|
|
1228
|
-
return void 0;
|
|
1229
|
-
}
|
|
1230
|
-
const font = `${italic ? "italic " : ""}${bold ? "700" : "400"} ${fontSizePx}px ${fontFamily}`;
|
|
1231
|
-
return {
|
|
1232
|
-
tabStops,
|
|
1233
|
-
defaultTabSize: typeof defaultTabSize === "number" && defaultTabSize > 0 ? defaultTabSize : 0,
|
|
1234
|
-
font
|
|
1235
|
-
};
|
|
1236
|
-
}
|
|
1237
|
-
function leaderGlyph(leader) {
|
|
1238
|
-
switch (leader) {
|
|
1239
|
-
case "dot":
|
|
1240
|
-
return ".";
|
|
1241
|
-
case "hyphen":
|
|
1242
|
-
return "-";
|
|
1243
|
-
case "underscore":
|
|
1244
|
-
return "_";
|
|
1245
|
-
default:
|
|
1246
|
-
return "";
|
|
1247
|
-
}
|
|
1248
|
-
}
|
|
1249
|
-
function decimalIndex(text) {
|
|
1250
|
-
return text.indexOf(".");
|
|
1251
|
-
}
|
|
1252
|
-
function computeTabbedLayout(segments, tabStops, measure, defaultTabSize) {
|
|
1253
|
-
const stops = tabStops.filter((s) => Number.isFinite(s.position) && s.position > 0).sort((a, b) => a.position - b.position);
|
|
1254
|
-
const step = Number.isFinite(defaultTabSize) && defaultTabSize > 0 ? defaultTabSize : FALLBACK_STEP_PX;
|
|
1255
|
-
const pieces = [];
|
|
1256
|
-
let cursor = 0;
|
|
1257
|
-
segments.forEach((text, i) => {
|
|
1258
|
-
if (i === 0) {
|
|
1259
|
-
pieces.push({ text, left: 0, leaderWidth: 0, leaderChar: "" });
|
|
1260
|
-
cursor = measure(text);
|
|
1261
|
-
return;
|
|
1262
|
-
}
|
|
1263
|
-
const stop = stops.find((s) => s.position > cursor + EPS);
|
|
1264
|
-
const width = measure(text);
|
|
1265
|
-
let tabX;
|
|
1266
|
-
let align;
|
|
1267
|
-
let leader;
|
|
1268
|
-
if (stop) {
|
|
1269
|
-
tabX = stop.position;
|
|
1270
|
-
align = stop.align;
|
|
1271
|
-
leader = stop.leader;
|
|
1272
|
-
} else {
|
|
1273
|
-
tabX = Math.floor(cursor / step + 1 + EPS) * step;
|
|
1274
|
-
align = "l";
|
|
1275
|
-
leader = void 0;
|
|
1276
|
-
}
|
|
1277
|
-
let left;
|
|
1278
|
-
if (align === "ctr") {
|
|
1279
|
-
left = tabX - width / 2;
|
|
1280
|
-
} else if (align === "r") {
|
|
1281
|
-
left = tabX - width;
|
|
1282
|
-
} else if (align === "dec") {
|
|
1283
|
-
const decIdx = decimalIndex(text);
|
|
1284
|
-
const beforeWidth = decIdx >= 0 ? measure(text.slice(0, decIdx)) : width;
|
|
1285
|
-
left = tabX - beforeWidth;
|
|
1286
|
-
} else {
|
|
1287
|
-
left = tabX;
|
|
1288
|
-
}
|
|
1289
|
-
if (left < cursor) {
|
|
1290
|
-
left = cursor;
|
|
1291
|
-
}
|
|
1292
|
-
const leaderWidth = left - cursor;
|
|
1293
|
-
const leaderChar = leaderWidth > 0.5 ? leaderGlyph(leader) : "";
|
|
1294
|
-
pieces.push({ text, left, leaderWidth, leaderChar });
|
|
1295
|
-
cursor = left + width;
|
|
1296
|
-
});
|
|
1297
|
-
return pieces;
|
|
1298
|
-
}
|
|
1299
|
-
var cachedCtx;
|
|
1300
|
-
function getMeasureCtx() {
|
|
1301
|
-
if (cachedCtx !== void 0) {
|
|
1302
|
-
return cachedCtx;
|
|
1303
|
-
}
|
|
1304
|
-
if (typeof document === "undefined") {
|
|
1305
|
-
cachedCtx = null;
|
|
1306
|
-
return null;
|
|
1307
|
-
}
|
|
1308
|
-
cachedCtx = document.createElement("canvas").getContext("2d");
|
|
1309
|
-
return cachedCtx;
|
|
1310
|
-
}
|
|
1311
|
-
function estimateWidth(text) {
|
|
1312
|
-
return text.length * 8;
|
|
1313
|
-
}
|
|
1314
|
-
function measureTextWidth(text, font) {
|
|
1315
|
-
const ctx = getMeasureCtx();
|
|
1316
|
-
if (!ctx) {
|
|
1317
|
-
return estimateWidth(text);
|
|
1318
|
-
}
|
|
1319
|
-
ctx.font = font;
|
|
1320
|
-
return ctx.measureText(text).width;
|
|
1321
|
-
}
|
|
1322
|
-
function fillLeader(glyph, width, font) {
|
|
1323
|
-
const glyphWidth = Math.max(1, measureTextWidth(glyph, font));
|
|
1324
|
-
const count = Math.ceil(width / glyphWidth) + 1;
|
|
1325
|
-
return glyph.repeat(count);
|
|
1326
|
-
}
|
|
1327
1224
|
function renderTabbedLine(line, ctx, keyPrefix, renderPiece, nestedStyle) {
|
|
1328
|
-
const
|
|
1329
|
-
|
|
1330
|
-
segments,
|
|
1331
|
-
ctx.tabStops,
|
|
1332
|
-
(t) => measureTextWidth(t, ctx.font),
|
|
1333
|
-
ctx.defaultTabSize
|
|
1334
|
-
);
|
|
1335
|
-
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block", whiteSpace: "nowrap" }, children: pieces.map((piece, i) => {
|
|
1225
|
+
const [lineLayout] = chunkSDOQKSKI_js.buildRunTabLines(line, ctx, nestedStyle);
|
|
1226
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block", whiteSpace: "nowrap" }, children: lineLayout.pieces.map((piece, i) => {
|
|
1336
1227
|
const key = `${keyPrefix}-tab-${i}`;
|
|
1337
1228
|
return /* @__PURE__ */ jsxRuntime.jsxs(React6__default.default.Fragment, { children: [
|
|
1338
|
-
piece.
|
|
1339
|
-
|
|
1340
|
-
{
|
|
1341
|
-
"aria-hidden": "true",
|
|
1342
|
-
style: {
|
|
1343
|
-
display: "inline-block",
|
|
1344
|
-
width: piece.leaderWidth,
|
|
1345
|
-
overflow: "hidden",
|
|
1346
|
-
whiteSpace: "nowrap",
|
|
1347
|
-
textAlign: "right",
|
|
1348
|
-
verticalAlign: "baseline"
|
|
1349
|
-
},
|
|
1350
|
-
children: piece.leaderChar ? fillLeader(piece.leaderChar, piece.leaderWidth, ctx.font) : ""
|
|
1351
|
-
}
|
|
1352
|
-
) : null,
|
|
1353
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { style: { ...nestedStyle, display: "inline-block", whiteSpace: "pre" }, children: renderPiece(piece.text, key) })
|
|
1229
|
+
piece.leaderStyle ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", style: piece.leaderStyle, children: piece.leaderText }) : null,
|
|
1230
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { style: piece.style, children: renderPiece(piece.text, key) })
|
|
1354
1231
|
] }, key);
|
|
1355
1232
|
}) });
|
|
1356
1233
|
}
|
|
@@ -1358,29 +1235,24 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
|
|
|
1358
1235
|
if (!needsScriptFonts || !text) {
|
|
1359
1236
|
return text;
|
|
1360
1237
|
}
|
|
1361
|
-
const
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
}
|
|
1238
|
+
const pieces = chunkSDOQKSKI_js.splitRunByScriptFont(
|
|
1239
|
+
text,
|
|
1240
|
+
scriptFonts,
|
|
1241
|
+
baseFontFamily,
|
|
1242
|
+
nestedStyle
|
|
1243
|
+
);
|
|
1244
|
+
if (!pieces) {
|
|
1369
1245
|
return text;
|
|
1370
1246
|
}
|
|
1371
|
-
return
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
return /* @__PURE__ */ jsxRuntime.jsx(React6__default.default.Fragment, { children: run.text }, `${keyPrefix}-r${i}`);
|
|
1375
|
-
}
|
|
1376
|
-
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { ...nestedStyle, fontFamily: font }, children: run.text }, `${keyPrefix}-r${i}`);
|
|
1377
|
-
});
|
|
1247
|
+
return pieces.map(
|
|
1248
|
+
(piece, i) => piece.style ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: piece.style, children: piece.text }, `${keyPrefix}-r${i}`) : /* @__PURE__ */ jsxRuntime.jsx(React6__default.default.Fragment, { children: piece.text }, `${keyPrefix}-r${i}`)
|
|
1249
|
+
);
|
|
1378
1250
|
}
|
|
1379
1251
|
function renderMetricPieces(text, metric, keyPrefix, inner) {
|
|
1380
1252
|
if (!metric || !text) {
|
|
1381
1253
|
return inner(text, keyPrefix);
|
|
1382
1254
|
}
|
|
1383
|
-
const pieces =
|
|
1255
|
+
const pieces = chunkSDOQKSKI_js.splitRunForMetrics(text, metric.font);
|
|
1384
1256
|
if (pieces.length <= 1) {
|
|
1385
1257
|
return inner(text, keyPrefix);
|
|
1386
1258
|
}
|
|
@@ -1389,7 +1261,7 @@ function renderMetricPieces(text, metric, keyPrefix, inner) {
|
|
|
1389
1261
|
{
|
|
1390
1262
|
style: {
|
|
1391
1263
|
...metric.nestedStyle,
|
|
1392
|
-
letterSpacing:
|
|
1264
|
+
letterSpacing: chunkSDOQKSKI_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
|
|
1393
1265
|
},
|
|
1394
1266
|
children: inner(piece.text, `${keyPrefix}-w${i}`)
|
|
1395
1267
|
},
|
|
@@ -1476,8 +1348,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
|
|
|
1476
1348
|
});
|
|
1477
1349
|
}
|
|
1478
1350
|
function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
|
|
1479
|
-
const mathml =
|
|
1480
|
-
const safeMathml = mathml ?
|
|
1351
|
+
const mathml = chunkSDOQKSKI_js.convertOmmlToMathMl(equationXml);
|
|
1352
|
+
const safeMathml = mathml ? chunkSDOQKSKI_js.sanitizeMathMl(mathml) : "";
|
|
1481
1353
|
const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1482
1354
|
"span",
|
|
1483
1355
|
{
|
|
@@ -1526,6 +1398,74 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
|
|
|
1526
1398
|
}
|
|
1527
1399
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { children: equationContent }, `${elementId}-seg-${segmentIndex}`);
|
|
1528
1400
|
}
|
|
1401
|
+
function renderHyperlink(run, spanNode, key, ctx) {
|
|
1402
|
+
const url = run.hyperlink?.url;
|
|
1403
|
+
const onHyperlinkClick = ctx.onHyperlinkClick;
|
|
1404
|
+
if (!url || !onHyperlinkClick) {
|
|
1405
|
+
return spanNode;
|
|
1406
|
+
}
|
|
1407
|
+
const requireCtrlClick = ctx.requireCtrlClick;
|
|
1408
|
+
const displayUrl = url.startsWith("ppaction://") ? url.replace(/^ppaction:\/\//u, "").split("?")[0] : url;
|
|
1409
|
+
const follow = (modified) => {
|
|
1410
|
+
if (requireCtrlClick && !modified) {
|
|
1411
|
+
return false;
|
|
1412
|
+
}
|
|
1413
|
+
onHyperlinkClick(url);
|
|
1414
|
+
return true;
|
|
1415
|
+
};
|
|
1416
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1417
|
+
"span",
|
|
1418
|
+
{
|
|
1419
|
+
role: "link",
|
|
1420
|
+
tabIndex: 0,
|
|
1421
|
+
className: requireCtrlClick ? "group/link relative" : void 0,
|
|
1422
|
+
style: { cursor: requireCtrlClick ? void 0 : "pointer", pointerEvents: "auto" },
|
|
1423
|
+
title: run.hyperlink?.tooltip,
|
|
1424
|
+
onClick: (e) => {
|
|
1425
|
+
if (!follow(e.ctrlKey || e.metaKey)) {
|
|
1426
|
+
return;
|
|
1427
|
+
}
|
|
1428
|
+
e.stopPropagation();
|
|
1429
|
+
e.preventDefault();
|
|
1430
|
+
},
|
|
1431
|
+
onKeyDown: (e) => {
|
|
1432
|
+
if (e.key !== "Enter" && e.key !== " ") {
|
|
1433
|
+
return;
|
|
1434
|
+
}
|
|
1435
|
+
if (!follow(e.ctrlKey || e.metaKey)) {
|
|
1436
|
+
return;
|
|
1437
|
+
}
|
|
1438
|
+
e.preventDefault();
|
|
1439
|
+
e.stopPropagation();
|
|
1440
|
+
},
|
|
1441
|
+
children: [
|
|
1442
|
+
spanNode,
|
|
1443
|
+
requireCtrlClick && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pointer-events-none absolute left-0 top-full z-[9999] mt-1 max-w-64 opacity-0 transition-opacity duration-150 group-hover/link:opacity-100", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-col rounded border border-border bg-popover px-2.5 py-1.5 shadow-lg", children: [
|
|
1444
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs text-foreground", children: displayUrl }),
|
|
1445
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-0.5 text-[10px] text-muted-foreground", children: "Ctrl+Click to follow link" })
|
|
1446
|
+
] }) })
|
|
1447
|
+
]
|
|
1448
|
+
},
|
|
1449
|
+
`${key}-link`
|
|
1450
|
+
);
|
|
1451
|
+
}
|
|
1452
|
+
function wrapWithTextReflection(run, key, spanNode, spanStyle, baseContent) {
|
|
1453
|
+
if (!run.reflection) {
|
|
1454
|
+
return spanNode;
|
|
1455
|
+
}
|
|
1456
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { position: "relative", display: "inline-block" }, children: [
|
|
1457
|
+
spanNode,
|
|
1458
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1459
|
+
"span",
|
|
1460
|
+
{
|
|
1461
|
+
"aria-hidden": "true",
|
|
1462
|
+
className: "pptx-react-text-reflection",
|
|
1463
|
+
style: run.reflection,
|
|
1464
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: spanStyle, children: baseContent })
|
|
1465
|
+
}
|
|
1466
|
+
)
|
|
1467
|
+
] }, `${key}-reflwrap`);
|
|
1468
|
+
}
|
|
1529
1469
|
var BASELINE_FONT_SCALE = 0.65;
|
|
1530
1470
|
function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
1531
1471
|
const { element, fallbackColor, findHighlights, onHyperlinkClick } = ctx;
|
|
@@ -1537,7 +1477,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1537
1477
|
const segmentStyle = segment?.style ?? {};
|
|
1538
1478
|
const textValue = run.text;
|
|
1539
1479
|
const lines = textValue.split("\n");
|
|
1540
|
-
const resolvedSegmentColor =
|
|
1480
|
+
const resolvedSegmentColor = chunkSDOQKSKI_js.normalizeHexColor(
|
|
1541
1481
|
segmentStyle.color || element.textStyle?.color,
|
|
1542
1482
|
run.hyperlink ? HYPERLINK_COLOR : fallbackColor
|
|
1543
1483
|
);
|
|
@@ -1545,32 +1485,16 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1545
1485
|
const baselineFraction = rawBaseline === 0 ? 0 : Math.abs(rawBaseline) >= 1e3 ? rawBaseline / 1e5 : rawBaseline / 100;
|
|
1546
1486
|
const baselineFontScale = baselineFraction !== 0 ? BASELINE_FONT_SCALE : 1;
|
|
1547
1487
|
const rawFontSize = segmentStyle.fontSize || element.textStyle?.fontSize || DEFAULT_TEXT_FONT_SIZE;
|
|
1548
|
-
const baseFontSize = rawFontSize *
|
|
1488
|
+
const baseFontSize = rawFontSize * chunkSDOQKSKI_js.resolveAutoFitFontScale(element.textStyle);
|
|
1549
1489
|
const baselineShift = baselineFraction !== 0 ? `${baselineFraction * baseFontSize}px` : void 0;
|
|
1550
|
-
const
|
|
1551
|
-
const fontKerning = typeof segmentStyle.kerning === "number" ? segmentStyle.kerning === 0 ? "none" : baseFontSizePt >= segmentStyle.kerning / 100 ? "normal" : "none" : void 0;
|
|
1490
|
+
const fontKerning = chunkSDOQKSKI_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
|
|
1552
1491
|
const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
|
|
1553
|
-
const baseFontFamily = rawFontFamily ?
|
|
1492
|
+
const baseFontFamily = rawFontFamily ? chunkSDOQKSKI_js.getSubstituteFontFamily(
|
|
1554
1493
|
rawFontFamily,
|
|
1555
|
-
|
|
1494
|
+
chunkSDOQKSKI_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
|
|
1556
1495
|
) : DEFAULT_FONT_FAMILY2;
|
|
1557
|
-
const
|
|
1558
|
-
const
|
|
1559
|
-
latin: baseFontFamily,
|
|
1560
|
-
eastAsia: scriptFont(
|
|
1561
|
-
segmentStyle.eastAsiaFont || element.textStyle?.eastAsiaFont,
|
|
1562
|
-
segmentStyle.eastAsiaFontPanose ?? element.textStyle?.eastAsiaFontPanose
|
|
1563
|
-
),
|
|
1564
|
-
complexScript: scriptFont(
|
|
1565
|
-
segmentStyle.complexScriptFont || element.textStyle?.complexScriptFont,
|
|
1566
|
-
segmentStyle.complexScriptFontPanose ?? element.textStyle?.complexScriptFontPanose
|
|
1567
|
-
),
|
|
1568
|
-
symbol: scriptFont(
|
|
1569
|
-
segmentStyle.symbolFont || element.textStyle?.symbolFont,
|
|
1570
|
-
segmentStyle.symbolFontPanose ?? element.textStyle?.symbolFontPanose
|
|
1571
|
-
)
|
|
1572
|
-
};
|
|
1573
|
-
const needsScriptFonts = chunk34UAGEJM_js.hasDistinctScriptFonts(scriptFonts);
|
|
1496
|
+
const scriptFonts = chunkSDOQKSKI_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
|
|
1497
|
+
const needsScriptFonts = chunkSDOQKSKI_js.hasDistinctScriptFonts(scriptFonts);
|
|
1574
1498
|
const authoredLetterSpacing = typeof segmentStyle.characterSpacing === "number" && segmentStyle.characterSpacing !== 0 ? segmentStyle.characterSpacing / 100 * (96 / 72) : 0;
|
|
1575
1499
|
const metricFont = {
|
|
1576
1500
|
fontFamily: baseFontFamily,
|
|
@@ -1578,7 +1502,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1578
1502
|
bold: Boolean(segmentStyle.bold),
|
|
1579
1503
|
italic: Boolean(segmentStyle.italic)
|
|
1580
1504
|
};
|
|
1581
|
-
const nestedStyle =
|
|
1505
|
+
const nestedStyle = chunkSDOQKSKI_js.nestedTextDecorationStyle(run.style);
|
|
1582
1506
|
const metricContext = { font: metricFont, authoredPx: authoredLetterSpacing, nestedStyle };
|
|
1583
1507
|
const spanStyle = { ...run.style };
|
|
1584
1508
|
spanStyle.color = resolvedSegmentColor;
|
|
@@ -1586,11 +1510,11 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1586
1510
|
spanStyle.fontFamily = baseFontFamily;
|
|
1587
1511
|
spanStyle.verticalAlign = baselineShift;
|
|
1588
1512
|
spanStyle.fontKerning = fontKerning;
|
|
1589
|
-
spanStyle.letterSpacing =
|
|
1513
|
+
spanStyle.letterSpacing = chunkSDOQKSKI_js.pieceLetterSpacing(
|
|
1590
1514
|
authoredLetterSpacing,
|
|
1591
|
-
|
|
1515
|
+
chunkSDOQKSKI_js.resolveMetricTrackingPx(textValue, metricFont)
|
|
1592
1516
|
);
|
|
1593
|
-
const hollow =
|
|
1517
|
+
const hollow = chunkSDOQKSKI_js.hollowTextFillStyle(segmentStyle, {
|
|
1594
1518
|
color: resolvedSegmentColor,
|
|
1595
1519
|
textStroke: typeof spanStyle.WebkitTextStroke === "string" ? spanStyle.WebkitTextStroke : void 0
|
|
1596
1520
|
});
|
|
@@ -1611,7 +1535,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1611
1535
|
scriptFonts,
|
|
1612
1536
|
baseFontFamily,
|
|
1613
1537
|
findHighlights,
|
|
1614
|
-
buildTabContext(
|
|
1538
|
+
chunkSDOQKSKI_js.buildTabContext(
|
|
1615
1539
|
element.textStyle?.tabStops,
|
|
1616
1540
|
element.textStyle?.defaultTabSize,
|
|
1617
1541
|
baseFontSize,
|
|
@@ -1622,7 +1546,8 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1622
1546
|
metricContext
|
|
1623
1547
|
);
|
|
1624
1548
|
const spanNode = /* @__PURE__ */ jsxRuntime.jsx("span", { "data-seg-idx": segmentIndex, style: spanStyle, children: renderRubyOrText(run, baseContent) }, key);
|
|
1625
|
-
|
|
1549
|
+
const reflectedNode = wrapWithTextReflection(run, key, spanNode, spanStyle, baseContent);
|
|
1550
|
+
return run.hyperlink && onHyperlinkClick ? renderHyperlink(run, reflectedNode, key, ctx) : reflectedNode;
|
|
1626
1551
|
}
|
|
1627
1552
|
function renderRubyOrText(run, baseContent) {
|
|
1628
1553
|
if (!run.ruby) {
|
|
@@ -1635,59 +1560,8 @@ function renderRubyOrText(run, baseContent) {
|
|
|
1635
1560
|
/* @__PURE__ */ jsxRuntime.jsx("rp", { children: ")" })
|
|
1636
1561
|
] });
|
|
1637
1562
|
}
|
|
1638
|
-
function renderHyperlink(run, spanNode, key, ctx) {
|
|
1639
|
-
const url = run.hyperlink?.url;
|
|
1640
|
-
const onHyperlinkClick = ctx.onHyperlinkClick;
|
|
1641
|
-
if (!url || !onHyperlinkClick) {
|
|
1642
|
-
return spanNode;
|
|
1643
|
-
}
|
|
1644
|
-
const requireCtrlClick = ctx.requireCtrlClick;
|
|
1645
|
-
const displayUrl = url.startsWith("ppaction://") ? url.replace(/^ppaction:\/\//u, "").split("?")[0] : url;
|
|
1646
|
-
const follow = (modified) => {
|
|
1647
|
-
if (requireCtrlClick && !modified) {
|
|
1648
|
-
return false;
|
|
1649
|
-
}
|
|
1650
|
-
onHyperlinkClick(url);
|
|
1651
|
-
return true;
|
|
1652
|
-
};
|
|
1653
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1654
|
-
"span",
|
|
1655
|
-
{
|
|
1656
|
-
role: "link",
|
|
1657
|
-
tabIndex: 0,
|
|
1658
|
-
className: requireCtrlClick ? "group/link relative" : void 0,
|
|
1659
|
-
style: { cursor: requireCtrlClick ? void 0 : "pointer", pointerEvents: "auto" },
|
|
1660
|
-
title: run.hyperlink?.tooltip,
|
|
1661
|
-
onClick: (e) => {
|
|
1662
|
-
if (!follow(e.ctrlKey || e.metaKey)) {
|
|
1663
|
-
return;
|
|
1664
|
-
}
|
|
1665
|
-
e.stopPropagation();
|
|
1666
|
-
e.preventDefault();
|
|
1667
|
-
},
|
|
1668
|
-
onKeyDown: (e) => {
|
|
1669
|
-
if (e.key !== "Enter" && e.key !== " ") {
|
|
1670
|
-
return;
|
|
1671
|
-
}
|
|
1672
|
-
if (!follow(e.ctrlKey || e.metaKey)) {
|
|
1673
|
-
return;
|
|
1674
|
-
}
|
|
1675
|
-
e.preventDefault();
|
|
1676
|
-
e.stopPropagation();
|
|
1677
|
-
},
|
|
1678
|
-
children: [
|
|
1679
|
-
spanNode,
|
|
1680
|
-
requireCtrlClick && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pointer-events-none absolute left-0 top-full z-[9999] mt-1 max-w-64 opacity-0 transition-opacity duration-150 group-hover/link:opacity-100", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-col rounded border border-border bg-popover px-2.5 py-1.5 shadow-lg", children: [
|
|
1681
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs text-foreground", children: displayUrl }),
|
|
1682
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-0.5 text-[10px] text-muted-foreground", children: "Ctrl+Click to follow link" })
|
|
1683
|
-
] }) })
|
|
1684
|
-
]
|
|
1685
|
-
},
|
|
1686
|
-
`${key}-link`
|
|
1687
|
-
);
|
|
1688
|
-
}
|
|
1689
1563
|
function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick) {
|
|
1690
|
-
if (!
|
|
1564
|
+
if (!chunkSDOQKSKI_js.hasTextProperties(element)) {
|
|
1691
1565
|
return emptyFallback || null;
|
|
1692
1566
|
}
|
|
1693
1567
|
const segments = segmentOverrides ?? element.textSegments;
|
|
@@ -1697,7 +1571,7 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
1697
1571
|
}
|
|
1698
1572
|
return element.text || emptyFallback || "";
|
|
1699
1573
|
}
|
|
1700
|
-
const paragraphs =
|
|
1574
|
+
const paragraphs = chunkSDOQKSKI_js.buildParagraphs(element, fieldContext, segmentOverrides);
|
|
1701
1575
|
const ctx = {
|
|
1702
1576
|
element,
|
|
1703
1577
|
fallbackColor,
|
|
@@ -1830,13 +1704,13 @@ function hexToRgbUnit(hex) {
|
|
|
1830
1704
|
};
|
|
1831
1705
|
}
|
|
1832
1706
|
function getDuotoneColors(element) {
|
|
1833
|
-
if (!
|
|
1707
|
+
if (!chunkSDOQKSKI_js.isImageLikeElement(element)) {
|
|
1834
1708
|
return void 0;
|
|
1835
1709
|
}
|
|
1836
1710
|
return element.imageEffects?.duotone;
|
|
1837
1711
|
}
|
|
1838
1712
|
function buildLineShadowCss(element) {
|
|
1839
|
-
if (!
|
|
1713
|
+
if (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
|
|
1840
1714
|
return void 0;
|
|
1841
1715
|
}
|
|
1842
1716
|
const ss = element.shapeStyle;
|
|
@@ -1847,13 +1721,13 @@ function buildLineShadowCss(element) {
|
|
|
1847
1721
|
const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
|
|
1848
1722
|
const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
|
|
1849
1723
|
const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
|
|
1850
|
-
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${
|
|
1851
|
-
|
|
1724
|
+
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkSDOQKSKI_js.colorWithOpacity(
|
|
1725
|
+
chunkSDOQKSKI_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
|
|
1852
1726
|
opacity
|
|
1853
1727
|
)}`;
|
|
1854
1728
|
}
|
|
1855
1729
|
function buildLineGlowFilter(element) {
|
|
1856
|
-
if (!
|
|
1730
|
+
if (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
|
|
1857
1731
|
return void 0;
|
|
1858
1732
|
}
|
|
1859
1733
|
const ss = element.shapeStyle;
|
|
@@ -1862,14 +1736,14 @@ function buildLineGlowFilter(element) {
|
|
|
1862
1736
|
}
|
|
1863
1737
|
const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
|
|
1864
1738
|
const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
|
|
1865
|
-
const glowCol =
|
|
1739
|
+
const glowCol = chunkSDOQKSKI_js.colorWithOpacity(chunkSDOQKSKI_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
|
|
1866
1740
|
return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
|
|
1867
1741
|
}
|
|
1868
1742
|
function getDagDuotoneFilterId(elementId) {
|
|
1869
1743
|
return `dag-duotone-${elementId}`;
|
|
1870
1744
|
}
|
|
1871
1745
|
function hasDagDuotoneEffect(element) {
|
|
1872
|
-
if (!
|
|
1746
|
+
if (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
|
|
1873
1747
|
return false;
|
|
1874
1748
|
}
|
|
1875
1749
|
return Boolean(element.shapeStyle?.dagDuotone);
|
|
@@ -1921,7 +1795,7 @@ function renderDagDuotoneSvgFilter(elementId, color1, color2) {
|
|
|
1921
1795
|
|
|
1922
1796
|
// src/viewer/utils/shape-visual-3d.ts
|
|
1923
1797
|
function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
|
|
1924
|
-
return
|
|
1798
|
+
return chunkSDOQKSKI_js.build3DExtrusionData(
|
|
1925
1799
|
shape3d,
|
|
1926
1800
|
scene3d,
|
|
1927
1801
|
fillColor,
|
|
@@ -1930,7 +1804,7 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
|
|
|
1930
1804
|
);
|
|
1931
1805
|
}
|
|
1932
1806
|
function apply3dEffects2(base, scene3d, shape3d, fillColorFallback) {
|
|
1933
|
-
|
|
1807
|
+
chunkSDOQKSKI_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
|
|
1934
1808
|
}
|
|
1935
1809
|
|
|
1936
1810
|
// src/viewer/utils/shape-visual-style.ts
|
|
@@ -1938,13 +1812,13 @@ function rendersCustomVectorPath(element) {
|
|
|
1938
1812
|
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;
|
|
1939
1813
|
}
|
|
1940
1814
|
function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _strokeColor, animatesFill, animatesStroke, parentGroupFill) {
|
|
1941
|
-
if (!
|
|
1815
|
+
if (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
|
|
1942
1816
|
return {};
|
|
1943
1817
|
}
|
|
1944
1818
|
const ss = element.shapeStyle;
|
|
1945
|
-
const fill = animatesFill ? void 0 :
|
|
1946
|
-
const fx =
|
|
1947
|
-
const stroke =
|
|
1819
|
+
const fill = animatesFill ? void 0 : chunkSDOQKSKI_js.getComputedFillStyle(element, parentGroupFill);
|
|
1820
|
+
const fx = chunkSDOQKSKI_js.getComputedEffectStyle(element);
|
|
1821
|
+
const stroke = chunkSDOQKSKI_js.getComputedStrokeStyle(element);
|
|
1948
1822
|
const base = {
|
|
1949
1823
|
// A gradient fill REPLACES the solid fill, it does not sit on top of it;
|
|
1950
1824
|
// the whole precedence lives in shared's `getComputedFillStyle`.
|
|
@@ -1959,7 +1833,10 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
1959
1833
|
// opposite end along the edge. Paint from the border box instead.
|
|
1960
1834
|
backgroundOrigin: "border-box",
|
|
1961
1835
|
boxShadow: fx.boxShadow,
|
|
1962
|
-
|
|
1836
|
+
// Reflection is no longer a single CSS property (`-webkit-box-reflect`
|
|
1837
|
+
// never worked in Firefox): `ElementRenderer` renders a mirrored sibling
|
|
1838
|
+
// node instead, using shared's `getReflectionWrapperStyle` directly (see
|
|
1839
|
+
// `ReflectionOverlay`).
|
|
1963
1840
|
filter: fx.filter,
|
|
1964
1841
|
opacity: fx.opacity,
|
|
1965
1842
|
// Only proxy the DAG blend onto the whole element for the blend-only case:
|
|
@@ -1979,7 +1856,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
1979
1856
|
strokeLinecap: stroke.strokeLinecap
|
|
1980
1857
|
};
|
|
1981
1858
|
apply3dEffects2(base, ss?.scene3d, ss?.shape3d, ss?.fillColor ?? fillColor);
|
|
1982
|
-
if (rendersCustomVectorPath(element) ||
|
|
1859
|
+
if (rendersCustomVectorPath(element) || chunkSDOQKSKI_js.isStrokeOnlyPresetElement(element)) {
|
|
1983
1860
|
base.backgroundColor = "transparent";
|
|
1984
1861
|
base.backgroundImage = void 0;
|
|
1985
1862
|
base.borderWidth = void 0;
|
|
@@ -1990,7 +1867,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
1990
1867
|
base.backgroundColor = void 0;
|
|
1991
1868
|
base.backgroundImage = void 0;
|
|
1992
1869
|
}
|
|
1993
|
-
const geometry =
|
|
1870
|
+
const geometry = chunkSDOQKSKI_js.resolveShapeGeometry(element);
|
|
1994
1871
|
switch (geometry.kind) {
|
|
1995
1872
|
case "bare":
|
|
1996
1873
|
return { backgroundColor: "transparent", borderWidth: 0, borderStyle: "none" };
|
|
@@ -2016,13 +1893,13 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
2016
1893
|
function getConnectorAdjustment(element, key, fallback) {
|
|
2017
1894
|
const direct = element.shapeAdjustments?.[key];
|
|
2018
1895
|
if (typeof direct === "number" && Number.isFinite(direct)) {
|
|
2019
|
-
return
|
|
1896
|
+
return chunkSDOQKSKI_js.clampUnitInterval(direct / 1e5);
|
|
2020
1897
|
}
|
|
2021
1898
|
const fallbackKey = element.shapeAdjustments?.adj;
|
|
2022
1899
|
if (typeof fallbackKey === "number" && Number.isFinite(fallbackKey)) {
|
|
2023
|
-
return
|
|
1900
|
+
return chunkSDOQKSKI_js.clampUnitInterval(fallbackKey / 1e5);
|
|
2024
1901
|
}
|
|
2025
|
-
return
|
|
1902
|
+
return chunkSDOQKSKI_js.clampUnitInterval(fallback);
|
|
2026
1903
|
}
|
|
2027
1904
|
function getConnectorPathGeometry(element) {
|
|
2028
1905
|
const width = Math.max(element.width, 0);
|
|
@@ -2148,44 +2025,6 @@ function renderConnectorMarker(markerId, arrowType, color, arrowWidth, arrowLeng
|
|
|
2148
2025
|
}
|
|
2149
2026
|
);
|
|
2150
2027
|
}
|
|
2151
|
-
|
|
2152
|
-
// src/viewer/utils/vector-subpath-paint.ts
|
|
2153
|
-
function toHexByte(value) {
|
|
2154
|
-
const clamped = Math.max(0, Math.min(255, Math.round(value)));
|
|
2155
|
-
return clamped.toString(16).padStart(2, "0");
|
|
2156
|
-
}
|
|
2157
|
-
function shiftHex(hex, factor, towardsWhite) {
|
|
2158
|
-
const channels = chunk34UAGEJM_js.hexToRgbChannels(hex);
|
|
2159
|
-
if (!channels) {
|
|
2160
|
-
return hex;
|
|
2161
|
-
}
|
|
2162
|
-
const shift = (c) => towardsWhite ? c + (255 - c) * factor : c * (1 - factor);
|
|
2163
|
-
return `#${toHexByte(shift(channels.r))}${toHexByte(shift(channels.g))}${toHexByte(shift(channels.b))}`;
|
|
2164
|
-
}
|
|
2165
|
-
function adjustFillForMode(fillHex, mode) {
|
|
2166
|
-
switch (mode) {
|
|
2167
|
-
case "lighten":
|
|
2168
|
-
return shiftHex(fillHex, 0.4, true);
|
|
2169
|
-
case "lightenLess":
|
|
2170
|
-
return shiftHex(fillHex, 0.2, true);
|
|
2171
|
-
case "darken":
|
|
2172
|
-
return shiftHex(fillHex, 0.4, false);
|
|
2173
|
-
case "darkenLess":
|
|
2174
|
-
return shiftHex(fillHex, 0.2, false);
|
|
2175
|
-
default:
|
|
2176
|
-
return fillHex;
|
|
2177
|
-
}
|
|
2178
|
-
}
|
|
2179
|
-
function buildCustomSubpathPaints(subpaths, hasFill, fillColor, fillOpacity) {
|
|
2180
|
-
return subpaths.map((subpath) => {
|
|
2181
|
-
const fillOff = subpath.fillMode === "none" || !hasFill;
|
|
2182
|
-
return {
|
|
2183
|
-
d: subpath.d,
|
|
2184
|
-
fill: fillOff ? "none" : chunk34UAGEJM_js.colorWithOpacity(adjustFillForMode(fillColor, subpath.fillMode), fillOpacity),
|
|
2185
|
-
stroked: subpath.stroke !== false
|
|
2186
|
-
};
|
|
2187
|
-
});
|
|
2188
|
-
}
|
|
2189
2028
|
function joinStyle(shapeStyle) {
|
|
2190
2029
|
const lineJoin = shapeStyle?.lineJoin === "bevel" ? "bevel" : shapeStyle?.lineJoin === "miter" ? "miter" : "round";
|
|
2191
2030
|
const miterLimit = lineJoin === "miter" && typeof shapeStyle?.miterLimit === "number" ? Math.max(shapeStyle.miterLimit / 1e5, 1) : void 0;
|
|
@@ -2197,11 +2036,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
|
|
|
2197
2036
|
strokePaint,
|
|
2198
2037
|
strokeWidth,
|
|
2199
2038
|
dashArray,
|
|
2200
|
-
lineCap:
|
|
2039
|
+
lineCap: chunkSDOQKSKI_js.svgLineCap(shapeStyle?.lineCap),
|
|
2201
2040
|
lineJoin,
|
|
2202
2041
|
miterLimit,
|
|
2203
|
-
offsets:
|
|
2204
|
-
widths:
|
|
2042
|
+
offsets: chunkSDOQKSKI_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
|
|
2043
|
+
widths: chunkSDOQKSKI_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
|
|
2205
2044
|
};
|
|
2206
2045
|
}
|
|
2207
2046
|
function strokeStrands(d, keyBase, ctx) {
|
|
@@ -2249,12 +2088,12 @@ function gradientDefs(gradient) {
|
|
|
2249
2088
|
}
|
|
2250
2089
|
function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false, gradient) {
|
|
2251
2090
|
const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
|
|
2252
|
-
const subpaths = structuredPaths && structuredPaths.length > 0 ?
|
|
2091
|
+
const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkSDOQKSKI_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
|
|
2253
2092
|
const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
|
|
2254
|
-
const gradientPaint = gradient ?
|
|
2093
|
+
const gradientPaint = gradient ? chunkSDOQKSKI_js.svgGradientFillRef(gradient) : void 0;
|
|
2255
2094
|
const nodes = [];
|
|
2256
2095
|
if (subpaths && needsPerSubpath) {
|
|
2257
|
-
const paints =
|
|
2096
|
+
const paints = chunkSDOQKSKI_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
|
|
2258
2097
|
paints.forEach((paint, idx) => {
|
|
2259
2098
|
if (paint.fill !== "none") {
|
|
2260
2099
|
const mode = subpaths[idx]?.fillMode;
|
|
@@ -2283,7 +2122,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
|
|
|
2283
2122
|
"path",
|
|
2284
2123
|
{
|
|
2285
2124
|
d: pathData,
|
|
2286
|
-
fill: animatesFill ? "inherit" : gradientPaint ??
|
|
2125
|
+
fill: animatesFill ? "inherit" : gradientPaint ?? chunkSDOQKSKI_js.colorWithOpacity(fillColor, fillOpacity),
|
|
2287
2126
|
stroke: "none",
|
|
2288
2127
|
vectorEffect: "non-scaling-stroke"
|
|
2289
2128
|
},
|
|
@@ -2309,14 +2148,14 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
|
|
|
2309
2148
|
);
|
|
2310
2149
|
}
|
|
2311
2150
|
function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
|
|
2312
|
-
if (!
|
|
2151
|
+
if (!chunkSDOQKSKI_js.hasShapeProperties(element)) {
|
|
2313
2152
|
return null;
|
|
2314
2153
|
}
|
|
2315
2154
|
const normalizedType = (element.shapeType || "").toLowerCase();
|
|
2316
|
-
const fillPaint = animatesFill ? "inherit" :
|
|
2317
|
-
const strokePaint = animatesStroke ? "inherit" :
|
|
2318
|
-
const dashType =
|
|
2319
|
-
const dashArray =
|
|
2155
|
+
const fillPaint = animatesFill ? "inherit" : chunkSDOQKSKI_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
|
|
2156
|
+
const strokePaint = animatesStroke ? "inherit" : chunkSDOQKSKI_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
|
|
2157
|
+
const dashType = chunkSDOQKSKI_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
|
|
2158
|
+
const dashArray = chunkSDOQKSKI_js.getSvgStrokeDasharray(
|
|
2320
2159
|
dashType,
|
|
2321
2160
|
Math.max(strokeWidth, 1),
|
|
2322
2161
|
element.shapeStyle?.customDashSegments
|
|
@@ -2397,21 +2236,21 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
2397
2236
|
// container's `background-image` is suppressed for custom geometry, so
|
|
2398
2237
|
// without this the shape fell back to the parser's representative solid
|
|
2399
2238
|
// and lost every fade (issue #132).
|
|
2400
|
-
|
|
2239
|
+
chunkSDOQKSKI_js.buildSvgGradientDef(element.shapeStyle, element.id)
|
|
2401
2240
|
);
|
|
2402
2241
|
}
|
|
2403
|
-
if (
|
|
2242
|
+
if (chunkSDOQKSKI_js.isCalloutShape(normalizedType)) {
|
|
2404
2243
|
const width = Math.max(element.width, 1);
|
|
2405
2244
|
const height = Math.max(element.height, 1);
|
|
2406
|
-
const geometry =
|
|
2245
|
+
const geometry = chunkSDOQKSKI_js.getCalloutLeaderLineGeometry(
|
|
2407
2246
|
normalizedType,
|
|
2408
2247
|
width,
|
|
2409
2248
|
height,
|
|
2410
2249
|
element.shapeAdjustments
|
|
2411
2250
|
);
|
|
2412
2251
|
if (geometry && geometry.points.length >= 2) {
|
|
2413
|
-
const leaderPath =
|
|
2414
|
-
const bounds =
|
|
2252
|
+
const leaderPath = chunkSDOQKSKI_js.buildCalloutLeaderLineSvgPath(geometry);
|
|
2253
|
+
const bounds = chunkSDOQKSKI_js.getCalloutViewBoxBounds(width, height, geometry);
|
|
2415
2254
|
const lineStroke = Math.max(strokeWidth, 1);
|
|
2416
2255
|
const offsetLeft = bounds.minX;
|
|
2417
2256
|
const offsetTop = bounds.minY;
|
|
@@ -2474,10 +2313,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
2474
2313
|
const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
|
|
2475
2314
|
const endArrowL = element.shapeStyle?.connectorEndArrowLength;
|
|
2476
2315
|
const compoundLine = element.shapeStyle?.compoundLine;
|
|
2477
|
-
const connectorLineCap =
|
|
2316
|
+
const connectorLineCap = chunkSDOQKSKI_js.svgLineCap(element.shapeStyle?.lineCap);
|
|
2478
2317
|
const hitTargetWidth = Math.max(strokeWidth * 3, 12);
|
|
2479
|
-
const offsets =
|
|
2480
|
-
const widths =
|
|
2318
|
+
const offsets = chunkSDOQKSKI_js.getCompoundLineOffsets(compoundLine, strokeWidth);
|
|
2319
|
+
const widths = chunkSDOQKSKI_js.getCompoundLineWidths(compoundLine, strokeWidth);
|
|
2481
2320
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2482
2321
|
"svg",
|
|
2483
2322
|
{
|
|
@@ -2544,15 +2383,15 @@ function parseGradientFillCss(gradFill) {
|
|
|
2544
2383
|
}
|
|
2545
2384
|
const parsed = stops.map((gs) => {
|
|
2546
2385
|
const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
|
|
2547
|
-
const color =
|
|
2548
|
-
const opacity =
|
|
2549
|
-
return { pos, color:
|
|
2386
|
+
const color = chunkSDOQKSKI_js.parseDrawingColor(gs) ?? "#888888";
|
|
2387
|
+
const opacity = chunkSDOQKSKI_js.parseDrawingColorOpacity(gs);
|
|
2388
|
+
return { pos, color: chunkSDOQKSKI_js.colorWithOpacity(color, opacity) };
|
|
2550
2389
|
}).sort((a, b) => a.pos - b.pos);
|
|
2551
2390
|
const stopStrings = parsed.map((s) => `${s.color} ${s.pos.toFixed(1)}%`).join(", ");
|
|
2552
2391
|
const lin = gradFill["a:lin"];
|
|
2553
2392
|
if (lin) {
|
|
2554
2393
|
const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
|
|
2555
|
-
const angleDeg = Math.round(
|
|
2394
|
+
const angleDeg = Math.round(chunkSDOQKSKI_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
|
|
2556
2395
|
return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
|
|
2557
2396
|
}
|
|
2558
2397
|
const path = gradFill["a:path"];
|
|
@@ -2587,8 +2426,8 @@ function parsePatternFillCss(pattFill) {
|
|
|
2587
2426
|
if (!pattFill) {
|
|
2588
2427
|
return void 0;
|
|
2589
2428
|
}
|
|
2590
|
-
const fgColor =
|
|
2591
|
-
const bgColor =
|
|
2429
|
+
const fgColor = chunkSDOQKSKI_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
|
|
2430
|
+
const bgColor = chunkSDOQKSKI_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
|
|
2592
2431
|
const preset = String(pattFill["@_prst"] || "ltDnDiag");
|
|
2593
2432
|
switch (preset) {
|
|
2594
2433
|
case "ltHorz":
|
|
@@ -2699,11 +2538,11 @@ function parseCellBorders(cellProperties) {
|
|
|
2699
2538
|
const prstDash = ln["a:prstDash"];
|
|
2700
2539
|
const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
|
|
2701
2540
|
const cssBorderStyle = ooxmlDashToCss(dashVal);
|
|
2702
|
-
const color =
|
|
2541
|
+
const color = chunkSDOQKSKI_js.parseDrawingColor(ln["a:solidFill"]);
|
|
2703
2542
|
if (color) {
|
|
2704
|
-
const opacity =
|
|
2543
|
+
const opacity = chunkSDOQKSKI_js.parseDrawingColorOpacity(ln["a:solidFill"]);
|
|
2705
2544
|
const key = `${edge.prefix}`;
|
|
2706
|
-
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${
|
|
2545
|
+
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkSDOQKSKI_js.colorWithOpacity(color, opacity)}`;
|
|
2707
2546
|
}
|
|
2708
2547
|
}
|
|
2709
2548
|
return borderStyle;
|
|
@@ -2716,7 +2555,7 @@ function parseCellTextEffects(runProps) {
|
|
|
2716
2555
|
const textShadowParts = [];
|
|
2717
2556
|
const outerShdw = effectLst["a:outerShdw"];
|
|
2718
2557
|
if (outerShdw) {
|
|
2719
|
-
const shdwColor =
|
|
2558
|
+
const shdwColor = chunkSDOQKSKI_js.parseDrawingColor(outerShdw);
|
|
2720
2559
|
if (shdwColor) {
|
|
2721
2560
|
const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
|
|
2722
2561
|
const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
|
|
@@ -2734,7 +2573,7 @@ function parseCellTextEffects(runProps) {
|
|
|
2734
2573
|
}
|
|
2735
2574
|
const glow = effectLst["a:glow"];
|
|
2736
2575
|
if (glow) {
|
|
2737
|
-
const glowColor =
|
|
2576
|
+
const glowColor = chunkSDOQKSKI_js.parseDrawingColor(glow);
|
|
2738
2577
|
if (glowColor) {
|
|
2739
2578
|
const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
|
|
2740
2579
|
const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
|
|
@@ -2814,10 +2653,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
2814
2653
|
if (runProps?.["@_u"] !== void 0) {
|
|
2815
2654
|
cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
|
|
2816
2655
|
}
|
|
2817
|
-
const runColor =
|
|
2656
|
+
const runColor = chunkSDOQKSKI_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkSDOQKSKI_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
|
|
2818
2657
|
if (runColor) {
|
|
2819
|
-
const opacity =
|
|
2820
|
-
cellStyle.color =
|
|
2658
|
+
const opacity = chunkSDOQKSKI_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
|
|
2659
|
+
cellStyle.color = chunkSDOQKSKI_js.colorWithOpacity(runColor, opacity);
|
|
2821
2660
|
}
|
|
2822
2661
|
const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
|
|
2823
2662
|
if (fontFamily) {
|
|
@@ -2827,15 +2666,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
2827
2666
|
cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
|
|
2828
2667
|
}
|
|
2829
2668
|
const cellProperties = cellXml["a:tcPr"];
|
|
2830
|
-
const cellFill =
|
|
2669
|
+
const cellFill = chunkSDOQKSKI_js.parseDrawingColor(
|
|
2831
2670
|
cellProperties?.["a:solidFill"],
|
|
2832
2671
|
schemeColorOverrides
|
|
2833
2672
|
);
|
|
2834
2673
|
if (cellFill) {
|
|
2835
|
-
const opacity =
|
|
2674
|
+
const opacity = chunkSDOQKSKI_js.parseDrawingColorOpacity(
|
|
2836
2675
|
cellProperties?.["a:solidFill"]
|
|
2837
2676
|
);
|
|
2838
|
-
cellStyle.backgroundColor =
|
|
2677
|
+
cellStyle.backgroundColor = chunkSDOQKSKI_js.colorWithOpacity(cellFill, opacity);
|
|
2839
2678
|
} else {
|
|
2840
2679
|
const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
|
|
2841
2680
|
if (gradCss) {
|
|
@@ -2850,16 +2689,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
2850
2689
|
const edgeBorders = parseCellBorders(cellProperties);
|
|
2851
2690
|
Object.assign(cellStyle, edgeBorders);
|
|
2852
2691
|
if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
|
|
2853
|
-
const borderColor =
|
|
2692
|
+
const borderColor = chunkSDOQKSKI_js.parseDrawingColor(
|
|
2854
2693
|
cellProperties?.["a:lnL"]?.["a:solidFill"],
|
|
2855
2694
|
schemeColorOverrides
|
|
2856
|
-
) ||
|
|
2695
|
+
) || chunkSDOQKSKI_js.parseDrawingColor(
|
|
2857
2696
|
cellProperties?.["a:lnR"]?.["a:solidFill"],
|
|
2858
2697
|
schemeColorOverrides
|
|
2859
|
-
) ||
|
|
2698
|
+
) || chunkSDOQKSKI_js.parseDrawingColor(
|
|
2860
2699
|
cellProperties?.["a:lnT"]?.["a:solidFill"],
|
|
2861
2700
|
schemeColorOverrides
|
|
2862
|
-
) ||
|
|
2701
|
+
) || chunkSDOQKSKI_js.parseDrawingColor(
|
|
2863
2702
|
cellProperties?.["a:lnB"]?.["a:solidFill"],
|
|
2864
2703
|
schemeColorOverrides
|
|
2865
2704
|
);
|
|
@@ -2931,7 +2770,7 @@ function getTableCellBandStyle2(element, rowIndex, cellIndex, rowCount, columnCo
|
|
|
2931
2770
|
if (element.type !== "table") {
|
|
2932
2771
|
return void 0;
|
|
2933
2772
|
}
|
|
2934
|
-
return
|
|
2773
|
+
return chunkSDOQKSKI_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
|
|
2935
2774
|
tableStyleMap: styleCtx?.tableStyleMap,
|
|
2936
2775
|
colorScheme: styleCtx?.theme?.colorScheme,
|
|
2937
2776
|
fontScheme: styleCtx?.theme?.fontScheme
|
|
@@ -3007,7 +2846,7 @@ function renderTableCellContent(cell, fallbackText) {
|
|
|
3007
2846
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3008
2847
|
"span",
|
|
3009
2848
|
{
|
|
3010
|
-
style: { position: "relative", ...
|
|
2849
|
+
style: { position: "relative", ...chunkSDOQKSKI_js.cellRunStyle(run) },
|
|
3011
2850
|
children: run.text
|
|
3012
2851
|
},
|
|
3013
2852
|
`r-${index}`
|
|
@@ -3015,7 +2854,7 @@ function renderTableCellContent(cell, fallbackText) {
|
|
|
3015
2854
|
});
|
|
3016
2855
|
}
|
|
3017
2856
|
function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
|
|
3018
|
-
return
|
|
2857
|
+
return chunkSDOQKSKI_js.getCellDiagonalBorders(style, tableData, pos, {
|
|
3019
2858
|
tableStyleMap: styleCtx?.tableStyleMap,
|
|
3020
2859
|
colorScheme: styleCtx?.theme?.colorScheme,
|
|
3021
2860
|
fontScheme: styleCtx?.theme?.fontScheme
|
|
@@ -3148,7 +2987,7 @@ function TableResizeOverlay({
|
|
|
3148
2987
|
const containerRef = React6.useRef(null);
|
|
3149
2988
|
const [rowBounds, setRowBounds] = React6.useState([]);
|
|
3150
2989
|
const dragRef = React6.useRef(null);
|
|
3151
|
-
const colBoundaries = React6.useMemo(() =>
|
|
2990
|
+
const colBoundaries = React6.useMemo(() => chunkSDOQKSKI_js.computeColumnBoundaries(columnWidths), [columnWidths]);
|
|
3152
2991
|
const measureRows = React6.useCallback(() => {
|
|
3153
2992
|
const container = containerRef.current;
|
|
3154
2993
|
if (!container) {
|
|
@@ -3195,11 +3034,11 @@ function TableResizeOverlay({
|
|
|
3195
3034
|
const rect = containerRef.current.getBoundingClientRect();
|
|
3196
3035
|
if (drag.type === "col" && drag.initialWidths && onResizeColumns) {
|
|
3197
3036
|
const deltaProp = (e.clientX - drag.startPos) / rect.width;
|
|
3198
|
-
onResizeColumns(
|
|
3037
|
+
onResizeColumns(chunkSDOQKSKI_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
|
|
3199
3038
|
} else if (drag.type === "row" && onResizeRow) {
|
|
3200
3039
|
const deltaY = e.clientY - drag.startPos;
|
|
3201
|
-
const newHeight =
|
|
3202
|
-
drag.initialRowHeight ??
|
|
3040
|
+
const newHeight = chunkSDOQKSKI_js.computeResizedRowHeight(
|
|
3041
|
+
drag.initialRowHeight ?? chunkSDOQKSKI_js.DEFAULT_ROW_HEIGHT,
|
|
3203
3042
|
deltaY
|
|
3204
3043
|
);
|
|
3205
3044
|
onResizeRow(drag.index, newHeight);
|
|
@@ -3237,7 +3076,7 @@ function TableResizeOverlay({
|
|
|
3237
3076
|
e.stopPropagation();
|
|
3238
3077
|
const table = containerRef.current?.querySelector("table");
|
|
3239
3078
|
const tr = table?.querySelectorAll("tbody > tr")[index];
|
|
3240
|
-
const actualHeight = tr?.offsetHeight ??
|
|
3079
|
+
const actualHeight = tr?.offsetHeight ?? chunkSDOQKSKI_js.DEFAULT_ROW_HEIGHT;
|
|
3241
3080
|
document.body.style.cursor = "row-resize";
|
|
3242
3081
|
document.body.style.userSelect = "none";
|
|
3243
3082
|
dragRef.current = {
|
|
@@ -3284,7 +3123,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3284
3123
|
colorScheme: options?.styleCtx?.theme?.colorScheme,
|
|
3285
3124
|
fontScheme: options?.styleCtx?.theme?.fontScheme
|
|
3286
3125
|
};
|
|
3287
|
-
const cellCss = (cell, rowIndex, cellIndex) =>
|
|
3126
|
+
const cellCss = (cell, rowIndex, cellIndex) => chunkSDOQKSKI_js.tableCellCss(
|
|
3288
3127
|
tableData,
|
|
3289
3128
|
cell,
|
|
3290
3129
|
{ rowIndex, cellIndex, rowCount, columnCount },
|
|
@@ -3297,7 +3136,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3297
3136
|
}
|
|
3298
3137
|
const first = selectedCell.selectedCells[0];
|
|
3299
3138
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
3300
|
-
return
|
|
3139
|
+
return chunkSDOQKSKI_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
|
|
3301
3140
|
})();
|
|
3302
3141
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3303
3142
|
TableResizeOverlay,
|
|
@@ -3318,9 +3157,9 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3318
3157
|
{
|
|
3319
3158
|
className: "w-full h-full border-collapse table-fixed",
|
|
3320
3159
|
style: {
|
|
3321
|
-
fontFamily:
|
|
3160
|
+
fontFamily: chunkSDOQKSKI_js.DEFAULT_FONT_FAMILY,
|
|
3322
3161
|
// `a:tblPr@rtl` mirrors the column order for RTL decks.
|
|
3323
|
-
...
|
|
3162
|
+
...chunkSDOQKSKI_js.tableContainerCss(tableData)
|
|
3324
3163
|
},
|
|
3325
3164
|
children: [
|
|
3326
3165
|
tableData.columnWidths.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: tableData.columnWidths.map((w, ci) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3339,7 +3178,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3339
3178
|
return null;
|
|
3340
3179
|
}
|
|
3341
3180
|
const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
|
|
3342
|
-
const isInMultiSelection =
|
|
3181
|
+
const isInMultiSelection = chunkSDOQKSKI_js.isCellInRect(rowIndex, cellIndex, selectionRect);
|
|
3343
3182
|
const isCellEditing = isCellSelected && selectedCell?.isEditing;
|
|
3344
3183
|
const diag = getCellDiagonalBorders2(
|
|
3345
3184
|
cell.style,
|
|
@@ -3368,7 +3207,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3368
3207
|
}
|
|
3369
3208
|
event.stopPropagation();
|
|
3370
3209
|
if (event.shiftKey && selectedCell) {
|
|
3371
|
-
const rect =
|
|
3210
|
+
const rect = chunkSDOQKSKI_js.computeSelectionRect(
|
|
3372
3211
|
selectedCell.rowIndex,
|
|
3373
3212
|
selectedCell.columnIndex,
|
|
3374
3213
|
rowIndex,
|
|
@@ -3378,7 +3217,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3378
3217
|
options?.onSelectCell?.({
|
|
3379
3218
|
rowIndex: selectedCell.rowIndex,
|
|
3380
3219
|
columnIndex: selectedCell.columnIndex,
|
|
3381
|
-
selectedCells:
|
|
3220
|
+
selectedCells: chunkSDOQKSKI_js.rectToCells(rect)
|
|
3382
3221
|
});
|
|
3383
3222
|
} else {
|
|
3384
3223
|
options?.onSelectCell?.({
|
|
@@ -3454,7 +3293,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3454
3293
|
}
|
|
3455
3294
|
const first = selectedCell.selectedCells[0];
|
|
3456
3295
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
3457
|
-
return
|
|
3296
|
+
return chunkSDOQKSKI_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
|
|
3458
3297
|
})();
|
|
3459
3298
|
const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
|
|
3460
3299
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3476,9 +3315,9 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3476
3315
|
{
|
|
3477
3316
|
className: "w-full h-full border-collapse table-fixed",
|
|
3478
3317
|
style: {
|
|
3479
|
-
fontFamily:
|
|
3318
|
+
fontFamily: chunkSDOQKSKI_js.DEFAULT_FONT_FAMILY,
|
|
3480
3319
|
// `a:tblPr@rtl` mirrors the column order for RTL decks.
|
|
3481
|
-
...
|
|
3320
|
+
...chunkSDOQKSKI_js.tableContainerCss(tableEl.tableData)
|
|
3482
3321
|
},
|
|
3483
3322
|
children: [
|
|
3484
3323
|
parsedTable.columnPercentages.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((percentage, columnIndex) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3535,7 +3374,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3535
3374
|
color: textStyle.color,
|
|
3536
3375
|
...bandStyle,
|
|
3537
3376
|
...xmlCellStyle,
|
|
3538
|
-
...tdCellOverride ?
|
|
3377
|
+
...tdCellOverride ? chunkSDOQKSKI_js.cellStyleToCss(tdCellOverride) : void 0,
|
|
3539
3378
|
...diag ? { position: "relative" } : void 0
|
|
3540
3379
|
};
|
|
3541
3380
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -3545,7 +3384,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3545
3384
|
"border px-1 py-0.5 align-top",
|
|
3546
3385
|
isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
|
|
3547
3386
|
selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
|
|
3548
|
-
|
|
3387
|
+
chunkSDOQKSKI_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
|
|
3549
3388
|
),
|
|
3550
3389
|
colSpan,
|
|
3551
3390
|
rowSpan: rSpan,
|
|
@@ -3556,7 +3395,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3556
3395
|
}
|
|
3557
3396
|
event.stopPropagation();
|
|
3558
3397
|
if (event.shiftKey && selectedCell && tableEl.tableData) {
|
|
3559
|
-
const rect =
|
|
3398
|
+
const rect = chunkSDOQKSKI_js.computeSelectionRect(
|
|
3560
3399
|
selectedCell.rowIndex,
|
|
3561
3400
|
selectedCell.columnIndex,
|
|
3562
3401
|
rowIndex,
|
|
@@ -3566,7 +3405,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3566
3405
|
options?.onSelectCell?.({
|
|
3567
3406
|
rowIndex: selectedCell.rowIndex,
|
|
3568
3407
|
columnIndex: selectedCell.columnIndex,
|
|
3569
|
-
selectedCells:
|
|
3408
|
+
selectedCells: chunkSDOQKSKI_js.rectToCells(rect)
|
|
3570
3409
|
});
|
|
3571
3410
|
} else {
|
|
3572
3411
|
options?.onSelectCell?.({
|
|
@@ -3625,23 +3464,23 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3625
3464
|
);
|
|
3626
3465
|
}
|
|
3627
3466
|
function partAttrs(part) {
|
|
3628
|
-
return part ?
|
|
3467
|
+
return part ? chunkSDOQKSKI_js.chartPartToAttrs(part) : void 0;
|
|
3629
3468
|
}
|
|
3630
3469
|
function resolveReactPalette(chartData) {
|
|
3631
3470
|
if (chartData.colorPalette && chartData.colorPalette.length > 0) {
|
|
3632
3471
|
return chartData.colorPalette;
|
|
3633
3472
|
}
|
|
3634
|
-
return [...
|
|
3473
|
+
return [...chunkSDOQKSKI_js.getChartStylePalette(chartData.style?.styleId)];
|
|
3635
3474
|
}
|
|
3636
3475
|
function buildReactChartViewModel(element) {
|
|
3637
3476
|
if (element.type !== "chart" || !element.chartData) {
|
|
3638
|
-
return
|
|
3477
|
+
return chunkSDOQKSKI_js.buildChartViewModel(element);
|
|
3639
3478
|
}
|
|
3640
3479
|
const palette = resolveReactPalette(element.chartData), themedElement = {
|
|
3641
3480
|
...element,
|
|
3642
3481
|
chartData: { ...element.chartData, colorPalette: palette }
|
|
3643
3482
|
};
|
|
3644
|
-
return
|
|
3483
|
+
return chunkSDOQKSKI_js.buildChartViewModel(themedElement);
|
|
3645
3484
|
}
|
|
3646
3485
|
function renderPrimitive(prim, key) {
|
|
3647
3486
|
switch (prim.kind) {
|
|
@@ -3779,6 +3618,8 @@ function renderText(t, key) {
|
|
|
3779
3618
|
fontSize: t.fontSize,
|
|
3780
3619
|
fill: t.fill,
|
|
3781
3620
|
fontWeight: t.fontWeight ?? "normal",
|
|
3621
|
+
fontStyle: t.fontStyle ?? "normal",
|
|
3622
|
+
fontFamily: t.fontFamily,
|
|
3782
3623
|
dominantBaseline: t.dominantBaseline,
|
|
3783
3624
|
opacity: t.opacity ?? 1,
|
|
3784
3625
|
transform: t.transform,
|
|
@@ -3788,7 +3629,7 @@ function renderText(t, key) {
|
|
|
3788
3629
|
);
|
|
3789
3630
|
}
|
|
3790
3631
|
function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
|
|
3791
|
-
const legendItems =
|
|
3632
|
+
const legendItems = chunkSDOQKSKI_js.computeChartLegendLayout(vm);
|
|
3792
3633
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3793
3634
|
"svg",
|
|
3794
3635
|
{
|
|
@@ -3858,7 +3699,19 @@ function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
|
|
|
3858
3699
|
transform: `translate(${item.x.toFixed(1)},${item.y.toFixed(1)})`,
|
|
3859
3700
|
children: [
|
|
3860
3701
|
/* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: -7, width: 10, height: 10, rx: 2, fill: item.color }),
|
|
3861
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3702
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3703
|
+
"text",
|
|
3704
|
+
{
|
|
3705
|
+
x: 13,
|
|
3706
|
+
y: 3,
|
|
3707
|
+
fontSize: item.fontSize,
|
|
3708
|
+
fill: item.fill,
|
|
3709
|
+
fontWeight: item.fontWeight,
|
|
3710
|
+
fontStyle: item.fontStyle,
|
|
3711
|
+
fontFamily: item.fontFamily,
|
|
3712
|
+
children: item.label
|
|
3713
|
+
}
|
|
3714
|
+
)
|
|
3862
3715
|
]
|
|
3863
3716
|
},
|
|
3864
3717
|
`${elementId}-lg-${i}`
|
|
@@ -3875,11 +3728,11 @@ function renderChartElement(element) {
|
|
|
3875
3728
|
if (!chartData || chartData.series.length === 0) {
|
|
3876
3729
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkU6A5FWWE_js.translationsEn["pptx.chart.heading"] });
|
|
3877
3730
|
}
|
|
3878
|
-
const kind =
|
|
3731
|
+
const kind = chunkSDOQKSKI_js.resolveChartKind(chartData.chartType ?? "bar");
|
|
3879
3732
|
return renderChartViewModel(
|
|
3880
3733
|
element.id,
|
|
3881
3734
|
buildReactChartViewModel(element),
|
|
3882
|
-
|
|
3735
|
+
chunkSDOQKSKI_js.chartPreserveAspectRatio(kind)
|
|
3883
3736
|
);
|
|
3884
3737
|
}
|
|
3885
3738
|
|
|
@@ -3899,14 +3752,14 @@ function buildNotesPdf(pages) {
|
|
|
3899
3752
|
notes: page.notes,
|
|
3900
3753
|
slideNumber: page.slideNumber
|
|
3901
3754
|
}));
|
|
3902
|
-
const bytes =
|
|
3755
|
+
const bytes = chunkSDOQKSKI_js.buildNotesPdfBytes(images, meta);
|
|
3903
3756
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
3904
3757
|
return URL.createObjectURL(blob);
|
|
3905
3758
|
}
|
|
3906
3759
|
|
|
3907
3760
|
// src/viewer/utils/pdf-builder-slides.ts
|
|
3908
3761
|
function buildPdfFromImageData(images) {
|
|
3909
|
-
const bytes =
|
|
3762
|
+
const bytes = chunkSDOQKSKI_js.buildSlidesPdfBytes(images);
|
|
3910
3763
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
3911
3764
|
return URL.createObjectURL(blob);
|
|
3912
3765
|
}
|
|
@@ -3915,7 +3768,7 @@ function buildPdfFromImageData(images) {
|
|
|
3915
3768
|
var activePreview = null;
|
|
3916
3769
|
function startPreviewAnimation(elementId, preset, options) {
|
|
3917
3770
|
stopPreviewAnimation();
|
|
3918
|
-
const descriptor =
|
|
3771
|
+
const descriptor = chunkSDOQKSKI_js.buildPreviewAnimation(preset, options);
|
|
3919
3772
|
if (!descriptor) {
|
|
3920
3773
|
return;
|
|
3921
3774
|
}
|
|
@@ -3928,7 +3781,7 @@ function startMotionPathPreview(elementId, path, options) {
|
|
|
3928
3781
|
return;
|
|
3929
3782
|
}
|
|
3930
3783
|
const stage = domEl.offsetParent;
|
|
3931
|
-
const descriptor =
|
|
3784
|
+
const descriptor = chunkSDOQKSKI_js.buildMotionPathPreview({
|
|
3932
3785
|
path,
|
|
3933
3786
|
slideWidth: stage?.offsetWidth || DEFAULT_PREVIEW_SLIDE_WIDTH,
|
|
3934
3787
|
slideHeight: stage?.offsetHeight || DEFAULT_PREVIEW_SLIDE_HEIGHT,
|
|
@@ -4000,7 +3853,6 @@ exports.DEFAULT_TABLE_COLUMNS = DEFAULT_TABLE_COLUMNS;
|
|
|
4000
3853
|
exports.DEFAULT_TABLE_ROWS = DEFAULT_TABLE_ROWS;
|
|
4001
3854
|
exports.DEFAULT_TEXT_COLOR = DEFAULT_TEXT_COLOR;
|
|
4002
3855
|
exports.DEFAULT_TEXT_FONT_SIZE = DEFAULT_TEXT_FONT_SIZE;
|
|
4003
|
-
exports.EMU_PER_PX = EMU_PER_PX;
|
|
4004
3856
|
exports.GRID_SIZE = GRID_SIZE;
|
|
4005
3857
|
exports.HYPERLINK_COLOR = HYPERLINK_COLOR;
|
|
4006
3858
|
exports.MIN_ELEMENT_SIZE = MIN_ELEMENT_SIZE;
|