pptx-react-viewer 1.25.2 → 1.25.3
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 +2 -0
- package/dist/{Model3DScene-PPHEUVGE.js → Model3DScene-F2GUSTZI.js} +3 -3
- package/dist/{Model3DScene-PPHEUVGE.js.br → Model3DScene-F2GUSTZI.js.br} +0 -0
- package/dist/Model3DScene-F2GUSTZI.js.gz +0 -0
- package/dist/{Model3DScene-VEL3LWME.mjs → Model3DScene-IQLE5JLL.mjs} +2 -2
- package/dist/Model3DScene-IQLE5JLL.mjs.br +0 -0
- package/dist/Model3DScene-IQLE5JLL.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-TGSDRCUC.js → SurfaceChart3DScene-4OMD7LWR.js} +3 -3
- package/dist/SurfaceChart3DScene-4OMD7LWR.js.br +0 -0
- package/dist/SurfaceChart3DScene-4OMD7LWR.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-ZBBY6LVV.mjs → SurfaceChart3DScene-JG26PJ7O.mjs} +2 -2
- package/dist/SurfaceChart3DScene-JG26PJ7O.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-JG26PJ7O.mjs.gz +0 -0
- package/dist/{chunk-RPWTP6QP.js → chunk-2V6BD4JQ.js} +44 -19
- package/dist/chunk-2V6BD4JQ.js.br +0 -0
- package/dist/chunk-2V6BD4JQ.js.gz +0 -0
- package/dist/{chunk-VHKA4C7G.js → chunk-5G3SPYQE.js} +809 -809
- package/dist/chunk-5G3SPYQE.js.br +0 -0
- package/dist/chunk-5G3SPYQE.js.gz +0 -0
- package/dist/{chunk-Q2WHYUNV.mjs → chunk-DAI4KM5W.mjs} +44 -19
- package/dist/chunk-DAI4KM5W.mjs.br +0 -0
- package/dist/chunk-DAI4KM5W.mjs.gz +0 -0
- package/dist/{chunk-UR4R3CH4.mjs → chunk-DVM75RMN.mjs} +63 -6
- package/dist/chunk-DVM75RMN.mjs.br +0 -0
- package/dist/chunk-DVM75RMN.mjs.gz +0 -0
- package/dist/{chunk-XUYKQ4DI.mjs → chunk-GNXWU7UG.mjs} +7 -7
- package/dist/chunk-GNXWU7UG.mjs.br +0 -0
- package/dist/chunk-GNXWU7UG.mjs.gz +0 -0
- package/dist/{chunk-WTTSE7SZ.mjs → chunk-NYBERTS7.mjs} +12 -4
- package/dist/chunk-NYBERTS7.mjs.br +0 -0
- package/dist/chunk-NYBERTS7.mjs.gz +0 -0
- package/dist/{chunk-ML36DOIS.js → chunk-UXVFNGJH.js} +96 -39
- package/dist/chunk-UXVFNGJH.js.br +0 -0
- package/dist/chunk-UXVFNGJH.js.gz +0 -0
- package/dist/{chunk-WAG32RWG.js → chunk-ZUJHFLOR.js} +472 -464
- package/dist/chunk-ZUJHFLOR.js.br +0 -0
- package/dist/chunk-ZUJHFLOR.js.gz +0 -0
- package/dist/{dist-JFRKRKOK.mjs → dist-E3IHM3OU.mjs} +1 -1
- package/dist/dist-E3IHM3OU.mjs.br +0 -0
- package/dist/dist-E3IHM3OU.mjs.gz +0 -0
- package/dist/{dist-NR7AZFQW.js → dist-ZA77P2O5.js} +562 -562
- package/dist/dist-ZA77P2O5.js.br +0 -0
- package/dist/dist-ZA77P2O5.js.gz +0 -0
- package/dist/hooks-unstable.js +78 -78
- package/dist/hooks-unstable.js.br +0 -0
- package/dist/hooks-unstable.js.gz +0 -0
- package/dist/hooks-unstable.mjs +3 -3
- package/dist/hooks-unstable.mjs.br +0 -0
- package/dist/hooks-unstable.mjs.gz +0 -0
- package/dist/index.js +33 -33
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/viewer/index.js +20 -20
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +4 -4
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +1 -1
- package/dist/Model3DScene-PPHEUVGE.js.gz +0 -0
- package/dist/Model3DScene-VEL3LWME.mjs.br +0 -0
- package/dist/Model3DScene-VEL3LWME.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-TGSDRCUC.js.br +0 -0
- package/dist/SurfaceChart3DScene-TGSDRCUC.js.gz +0 -0
- package/dist/SurfaceChart3DScene-ZBBY6LVV.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-ZBBY6LVV.mjs.gz +0 -0
- package/dist/chunk-ML36DOIS.js.br +0 -0
- package/dist/chunk-ML36DOIS.js.gz +0 -0
- package/dist/chunk-Q2WHYUNV.mjs.br +0 -0
- package/dist/chunk-Q2WHYUNV.mjs.gz +0 -0
- package/dist/chunk-RPWTP6QP.js.br +0 -0
- package/dist/chunk-RPWTP6QP.js.gz +0 -0
- package/dist/chunk-UR4R3CH4.mjs.br +0 -0
- package/dist/chunk-UR4R3CH4.mjs.gz +0 -0
- package/dist/chunk-VHKA4C7G.js.br +0 -0
- package/dist/chunk-VHKA4C7G.js.gz +0 -0
- package/dist/chunk-WAG32RWG.js.br +0 -0
- package/dist/chunk-WAG32RWG.js.gz +0 -0
- package/dist/chunk-WTTSE7SZ.mjs.br +0 -0
- package/dist/chunk-WTTSE7SZ.mjs.gz +0 -0
- package/dist/chunk-XUYKQ4DI.mjs.br +0 -0
- package/dist/chunk-XUYKQ4DI.mjs.gz +0 -0
- package/dist/dist-JFRKRKOK.mjs.br +0 -0
- package/dist/dist-JFRKRKOK.mjs.gz +0 -0
- package/dist/dist-NR7AZFQW.js.br +0 -0
- package/dist/dist-NR7AZFQW.js.gz +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkUXVFNGJH_js = require('./chunk-UXVFNGJH.js');
|
|
4
4
|
var chunk2EFVXYNA_js = require('./chunk-2EFVXYNA.js');
|
|
5
|
-
var
|
|
5
|
+
var chunk2V6BD4JQ_js = require('./chunk-2V6BD4JQ.js');
|
|
6
6
|
var React3 = require('react');
|
|
7
7
|
var lu = require('react-icons/lu');
|
|
8
8
|
var clsx = require('clsx');
|
|
@@ -18,7 +18,7 @@ var JSZip__default = /*#__PURE__*/_interopDefault(JSZip);
|
|
|
18
18
|
|
|
19
19
|
// src/viewer/utils/clone.ts
|
|
20
20
|
function cloneHistorySnapshot2(snapshot) {
|
|
21
|
-
return
|
|
21
|
+
return chunkUXVFNGJH_js.cloneHistorySnapshot(snapshot);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
// src/viewer/hooks/useEditorHistory.ts
|
|
@@ -67,8 +67,8 @@ function useEditorHistory(input) {
|
|
|
67
67
|
width: canvasSize.width,
|
|
68
68
|
height: canvasSize.height,
|
|
69
69
|
activeSlideIndex,
|
|
70
|
-
slides: slides.map(
|
|
71
|
-
templateElementsBySlideId:
|
|
70
|
+
slides: slides.map(chunkUXVFNGJH_js.cloneSlide),
|
|
71
|
+
templateElementsBySlideId: chunkUXVFNGJH_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
|
|
72
72
|
...actionLabel ? { actionLabel } : {}
|
|
73
73
|
};
|
|
74
74
|
},
|
|
@@ -81,9 +81,9 @@ function useEditorHistory(input) {
|
|
|
81
81
|
width: snapshot.width,
|
|
82
82
|
height: snapshot.height
|
|
83
83
|
});
|
|
84
|
-
setSlides(snapshot.slides.map(
|
|
84
|
+
setSlides(snapshot.slides.map(chunkUXVFNGJH_js.cloneSlide));
|
|
85
85
|
setTemplateElementsBySlideId(
|
|
86
|
-
|
|
86
|
+
chunkUXVFNGJH_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
|
|
87
87
|
);
|
|
88
88
|
setActiveSlideIndex(Math.min(snapshot.activeSlideIndex, maxSlideIndex));
|
|
89
89
|
setSelectedElementIds([]);
|
|
@@ -347,7 +347,7 @@ var GLYPH_COMPONENTS = {
|
|
|
347
347
|
plus: lu.LuPlus,
|
|
348
348
|
triangle: lu.LuTriangle
|
|
349
349
|
};
|
|
350
|
-
var SHAPE_PRESETS =
|
|
350
|
+
var SHAPE_PRESETS = chunkUXVFNGJH_js.SHAPE_PRESET_DEFS.map(
|
|
351
351
|
(def) => ({
|
|
352
352
|
type: def.type,
|
|
353
353
|
label: def.label,
|
|
@@ -663,20 +663,20 @@ function useAnimationPlayback(input) {
|
|
|
663
663
|
for (const anim of nativeAnims) {
|
|
664
664
|
if (anim.buildType && anim.buildType !== "allAtOnce" && anim.targetId) {
|
|
665
665
|
const el = slide.elements.find((e) => e.id === anim.targetId);
|
|
666
|
-
if (el &&
|
|
667
|
-
segmentCounts.set(anim.targetId,
|
|
666
|
+
if (el && chunk2V6BD4JQ_js.hasTextProperties(el) && el.textSegments && el.textSegments.length > 0) {
|
|
667
|
+
segmentCounts.set(anim.targetId, chunkUXVFNGJH_js.countTextSegments(el.textSegments));
|
|
668
668
|
}
|
|
669
669
|
}
|
|
670
670
|
}
|
|
671
|
-
const expandedAnims = segmentCounts.size > 0 ?
|
|
672
|
-
const engine =
|
|
671
|
+
const expandedAnims = segmentCounts.size > 0 ? chunkUXVFNGJH_js.expandTextBuildAnimations(nativeAnims, segmentCounts) : nativeAnims;
|
|
672
|
+
const engine = chunkUXVFNGJH_js.TimelineEngine.fromAnimations(expandedAnims);
|
|
673
673
|
timelineEngineRef.current = engine;
|
|
674
674
|
setPresentationKeyframesCss(engine.getTimeline().keyframesCss);
|
|
675
675
|
setInteractiveTriggerShapeIds(engine.getInteractiveTriggerShapeIds());
|
|
676
676
|
setHoverTriggerShapeIds(engine.getHoverTriggerShapeIds());
|
|
677
677
|
const allIds = slide.elements.map((element) => element.id);
|
|
678
678
|
for (const anim of expandedAnims) {
|
|
679
|
-
if (anim.targetId && anim.targetId.includes(
|
|
679
|
+
if (anim.targetId && anim.targetId.includes(chunkUXVFNGJH_js.TEXT_BUILD_ID_SEP)) {
|
|
680
680
|
allIds.push(anim.targetId);
|
|
681
681
|
}
|
|
682
682
|
}
|
|
@@ -808,7 +808,7 @@ function useAnimationPlayback(input) {
|
|
|
808
808
|
}))
|
|
809
809
|
);
|
|
810
810
|
entranceAnimations.forEach((animation, animationIndex) => {
|
|
811
|
-
const delay =
|
|
811
|
+
const delay = chunkUXVFNGJH_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
|
|
812
812
|
const timer = window.setTimeout(() => {
|
|
813
813
|
setPresentationAnimations(
|
|
814
814
|
(previousAnimations) => previousAnimations.map(
|
|
@@ -865,7 +865,7 @@ function openDb() {
|
|
|
865
865
|
}
|
|
866
866
|
async function storeAudienceContent(content, sessionId) {
|
|
867
867
|
if (sessionId) {
|
|
868
|
-
return
|
|
868
|
+
return chunkUXVFNGJH_js.storePresentationDeck(sessionId, content);
|
|
869
869
|
}
|
|
870
870
|
const db = await openDb();
|
|
871
871
|
return new Promise((resolve, reject) => {
|
|
@@ -886,7 +886,7 @@ async function storeAudienceContent(content, sessionId) {
|
|
|
886
886
|
}
|
|
887
887
|
async function loadAudienceContent(sessionId) {
|
|
888
888
|
if (sessionId) {
|
|
889
|
-
return
|
|
889
|
+
return chunkUXVFNGJH_js.loadPresentationDeck(sessionId);
|
|
890
890
|
}
|
|
891
891
|
try {
|
|
892
892
|
const db = await openDb();
|
|
@@ -927,7 +927,7 @@ async function loadAudienceContent(sessionId) {
|
|
|
927
927
|
}
|
|
928
928
|
async function clearAudienceContent(sessionId) {
|
|
929
929
|
if (sessionId) {
|
|
930
|
-
return
|
|
930
|
+
return chunkUXVFNGJH_js.clearPresentationDeck(sessionId);
|
|
931
931
|
}
|
|
932
932
|
try {
|
|
933
933
|
const db = await openDb();
|
|
@@ -947,12 +947,12 @@ async function clearAudienceContent(sessionId) {
|
|
|
947
947
|
} catch {
|
|
948
948
|
}
|
|
949
949
|
}
|
|
950
|
-
var PRESENTER_CHANNEL_NAME =
|
|
951
|
-
var AUDIENCE_HASH =
|
|
952
|
-
var PRESENTER_MSG_ORIGIN =
|
|
953
|
-
var AUDIENCE_NONCE_KEY =
|
|
950
|
+
var PRESENTER_CHANNEL_NAME = chunkUXVFNGJH_js.PRESENTATION_CHANNEL_NAME;
|
|
951
|
+
var AUDIENCE_HASH = chunkUXVFNGJH_js.PRESENTATION_HASH;
|
|
952
|
+
var PRESENTER_MSG_ORIGIN = chunkUXVFNGJH_js.PRESENTATION_MESSAGE_ORIGIN;
|
|
953
|
+
var AUDIENCE_NONCE_KEY = chunkUXVFNGJH_js.PRESENTATION_NONCE_KEY;
|
|
954
954
|
function generateSessionId() {
|
|
955
|
-
return
|
|
955
|
+
return chunkUXVFNGJH_js.createPresentationSessionId();
|
|
956
956
|
}
|
|
957
957
|
function parseAudienceNonce() {
|
|
958
958
|
const hash = window.location.hash;
|
|
@@ -988,7 +988,7 @@ function usePresenterWindow(input) {
|
|
|
988
988
|
}, []);
|
|
989
989
|
const swapDisplays = React3.useCallback(async () => {
|
|
990
990
|
const audience = audienceWindowRef.current;
|
|
991
|
-
return audience && !audience.closed ?
|
|
991
|
+
return audience && !audience.closed ? chunkUXVFNGJH_js.swapPresentationWindows(window, audience) : false;
|
|
992
992
|
}, []);
|
|
993
993
|
const syncSlideToAudience = React3.useCallback(
|
|
994
994
|
(slideIndex) => {
|
|
@@ -1070,10 +1070,10 @@ function usePresenterWindow(input) {
|
|
|
1070
1070
|
audienceWindowRef.current = blankWin;
|
|
1071
1071
|
const sessionId = generateSessionId();
|
|
1072
1072
|
sessionIdRef.current = sessionId;
|
|
1073
|
-
const audienceUrl =
|
|
1074
|
-
void
|
|
1073
|
+
const audienceUrl = chunkUXVFNGJH_js.buildPresentationAudienceUrl(window.location.href, sessionId);
|
|
1074
|
+
void chunkUXVFNGJH_js.resolveAudienceScreenPlacement(window).then((placement) => {
|
|
1075
1075
|
if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
|
|
1076
|
-
|
|
1076
|
+
chunkUXVFNGJH_js.placeAudienceWindow(blankWin, placement);
|
|
1077
1077
|
}
|
|
1078
1078
|
return void 0;
|
|
1079
1079
|
});
|
|
@@ -1129,7 +1129,7 @@ function usePresenterWindow(input) {
|
|
|
1129
1129
|
}
|
|
1130
1130
|
const handleMessage = (event) => {
|
|
1131
1131
|
const message = event.data;
|
|
1132
|
-
if (
|
|
1132
|
+
if (chunkUXVFNGJH_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
|
|
1133
1133
|
syncStateToAudience(snapshotRef.current);
|
|
1134
1134
|
}
|
|
1135
1135
|
};
|
|
@@ -1211,7 +1211,7 @@ function useAudienceMode(input) {
|
|
|
1211
1211
|
}
|
|
1212
1212
|
channel.onmessage = (event) => {
|
|
1213
1213
|
const data = event.data;
|
|
1214
|
-
if (!
|
|
1214
|
+
if (!chunkUXVFNGJH_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
|
|
1215
1215
|
return;
|
|
1216
1216
|
}
|
|
1217
1217
|
if (expectedSessionId && data.sessionId !== expectedSessionId) {
|
|
@@ -1237,7 +1237,7 @@ function useAudienceMode(input) {
|
|
|
1237
1237
|
};
|
|
1238
1238
|
if (expectedSessionId) {
|
|
1239
1239
|
channel.postMessage({
|
|
1240
|
-
origin:
|
|
1240
|
+
origin: chunkUXVFNGJH_js.PRESENTATION_MESSAGE_ORIGIN,
|
|
1241
1241
|
type: "audience-ready",
|
|
1242
1242
|
sessionId: expectedSessionId
|
|
1243
1243
|
});
|
|
@@ -1502,7 +1502,7 @@ function handlePresentationActionImpl(action, deps) {
|
|
|
1502
1502
|
return;
|
|
1503
1503
|
}
|
|
1504
1504
|
if (action.url && !actionStr.includes("hlinksldjump")) {
|
|
1505
|
-
if (
|
|
1505
|
+
if (chunkUXVFNGJH_js.isUrlSafe(action.url)) {
|
|
1506
1506
|
window.open(action.url, "_blank", "noopener,noreferrer");
|
|
1507
1507
|
}
|
|
1508
1508
|
}
|
|
@@ -1512,7 +1512,7 @@ function handlePresentationActionImpl(action, deps) {
|
|
|
1512
1512
|
function executeSlideTransition(nextSlideIndex, deps) {
|
|
1513
1513
|
const incomingSlide = deps.slides[nextSlideIndex];
|
|
1514
1514
|
const transition = incomingSlide?.transition;
|
|
1515
|
-
const durationMs = deps.playTransition ?
|
|
1515
|
+
const durationMs = deps.playTransition ? chunkUXVFNGJH_js.resolveTransitionDurationMs(transition) : 0;
|
|
1516
1516
|
deps.clearPresentationTimers();
|
|
1517
1517
|
deps.setPresentationSlideIndex(nextSlideIndex);
|
|
1518
1518
|
deps.onSetActiveSlideIndex(nextSlideIndex);
|
|
@@ -1752,17 +1752,17 @@ function useZoomNavigation(input) {
|
|
|
1752
1752
|
};
|
|
1753
1753
|
}
|
|
1754
1754
|
function usePresenterConsole(slideIndex) {
|
|
1755
|
-
const timerRef = React3.useRef(
|
|
1756
|
-
const [snapshot, setSnapshot] = React3.useState(() =>
|
|
1755
|
+
const timerRef = React3.useRef(chunkUXVFNGJH_js.createPresenterTimer());
|
|
1756
|
+
const [snapshot, setSnapshot] = React3.useState(() => chunkUXVFNGJH_js.createInitialPresentationSnapshot(slideIndex));
|
|
1757
1757
|
const patch = React3.useCallback((value) => {
|
|
1758
|
-
setSnapshot((current) =>
|
|
1758
|
+
setSnapshot((current) => chunkUXVFNGJH_js.mergePresentationSnapshot(current, value));
|
|
1759
1759
|
}, []);
|
|
1760
1760
|
React3.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
|
|
1761
1761
|
React3.useEffect(() => {
|
|
1762
1762
|
const timer = window.setInterval(() => {
|
|
1763
1763
|
patch({
|
|
1764
1764
|
paused: timerRef.current.paused,
|
|
1765
|
-
elapsedMs:
|
|
1765
|
+
elapsedMs: chunkUXVFNGJH_js.presenterElapsed(timerRef.current)
|
|
1766
1766
|
});
|
|
1767
1767
|
}, 1e3);
|
|
1768
1768
|
return () => window.clearInterval(timer);
|
|
@@ -1772,19 +1772,19 @@ function usePresenterConsole(slideIndex) {
|
|
|
1772
1772
|
applyAudienceSnapshot: setSnapshot,
|
|
1773
1773
|
setBlackout: (blackout) => patch({ blackout }),
|
|
1774
1774
|
toggleTimer: () => {
|
|
1775
|
-
timerRef.current =
|
|
1775
|
+
timerRef.current = chunkUXVFNGJH_js.togglePresenterTimer(timerRef.current);
|
|
1776
1776
|
patch({
|
|
1777
1777
|
paused: timerRef.current.paused,
|
|
1778
|
-
elapsedMs:
|
|
1778
|
+
elapsedMs: chunkUXVFNGJH_js.presenterElapsed(timerRef.current)
|
|
1779
1779
|
});
|
|
1780
1780
|
},
|
|
1781
1781
|
resetTimer: () => {
|
|
1782
|
-
timerRef.current =
|
|
1782
|
+
timerRef.current = chunkUXVFNGJH_js.resetPresenterTimer();
|
|
1783
1783
|
patch({ paused: false, elapsedMs: 0 });
|
|
1784
1784
|
},
|
|
1785
1785
|
stepZoom: (direction) => setSnapshot(
|
|
1786
|
-
(current) =>
|
|
1787
|
-
zoom:
|
|
1786
|
+
(current) => chunkUXVFNGJH_js.mergePresentationSnapshot(current, {
|
|
1787
|
+
zoom: chunkUXVFNGJH_js.stepPresenterZoom(
|
|
1788
1788
|
current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
|
|
1789
1789
|
direction
|
|
1790
1790
|
)
|
|
@@ -2352,7 +2352,7 @@ function findInSlides(slides, findQuery, findMatchCase) {
|
|
|
2352
2352
|
const normalised = findMatchCase ? findQuery : findQuery.toLowerCase();
|
|
2353
2353
|
slides.forEach((slide, slideIndex) => {
|
|
2354
2354
|
for (const element of slide.elements || []) {
|
|
2355
|
-
if (!
|
|
2355
|
+
if (!chunk2V6BD4JQ_js.hasTextProperties(element)) {
|
|
2356
2356
|
continue;
|
|
2357
2357
|
}
|
|
2358
2358
|
const segments = element.textSegments ?? [];
|
|
@@ -2403,7 +2403,7 @@ function applyFindReplacements(slides, toReplace, replaceQuery) {
|
|
|
2403
2403
|
continue;
|
|
2404
2404
|
}
|
|
2405
2405
|
const element = slide.elements[elIdx];
|
|
2406
|
-
if (!
|
|
2406
|
+
if (!chunk2V6BD4JQ_js.hasTextProperties(element)) {
|
|
2407
2407
|
continue;
|
|
2408
2408
|
}
|
|
2409
2409
|
const segments = [...element.textSegments ?? []];
|
|
@@ -3328,12 +3328,12 @@ function useViewerState(input) {
|
|
|
3328
3328
|
function partitionTemplateElements(slides) {
|
|
3329
3329
|
const templateElementsBySlideId = {};
|
|
3330
3330
|
const nextSlides = slides.map((slide) => {
|
|
3331
|
-
const template = slide.elements.filter((el) =>
|
|
3331
|
+
const template = slide.elements.filter((el) => chunkUXVFNGJH_js.isTemplateElement(el));
|
|
3332
3332
|
if (template.length === 0) {
|
|
3333
3333
|
return slide;
|
|
3334
3334
|
}
|
|
3335
3335
|
templateElementsBySlideId[slide.id] = template;
|
|
3336
|
-
return { ...slide, elements: slide.elements.filter((el) => !
|
|
3336
|
+
return { ...slide, elements: slide.elements.filter((el) => !chunkUXVFNGJH_js.isTemplateElement(el)) };
|
|
3337
3337
|
});
|
|
3338
3338
|
return { slides: nextSlides, templateElementsBySlideId };
|
|
3339
3339
|
}
|
|
@@ -3407,7 +3407,7 @@ function useLoadContent({
|
|
|
3407
3407
|
);
|
|
3408
3408
|
}
|
|
3409
3409
|
const previousHandler = handlerRef.current;
|
|
3410
|
-
const handler = new
|
|
3410
|
+
const handler = new chunk2V6BD4JQ_js.PptxHandler();
|
|
3411
3411
|
const parsed = await handler.load(buffer);
|
|
3412
3412
|
if (cancelled || token !== renderTokenRef.current) {
|
|
3413
3413
|
handler.dispose();
|
|
@@ -3419,7 +3419,7 @@ function useLoadContent({
|
|
|
3419
3419
|
handlerRef.current = null;
|
|
3420
3420
|
const mediaElements = [];
|
|
3421
3421
|
for (const slide of parsed.slides) {
|
|
3422
|
-
|
|
3422
|
+
chunkUXVFNGJH_js.collectMediaElements(slide.elements, mediaElements);
|
|
3423
3423
|
}
|
|
3424
3424
|
for (const url of mediaDataUrls.values()) {
|
|
3425
3425
|
if (url.startsWith("blob:")) {
|
|
@@ -3460,7 +3460,7 @@ function useLoadContent({
|
|
|
3460
3460
|
}
|
|
3461
3461
|
})
|
|
3462
3462
|
);
|
|
3463
|
-
const { paths: imagePaths, refs: imageRefs } =
|
|
3463
|
+
const { paths: imagePaths, refs: imageRefs } = chunkUXVFNGJH_js.collectImagePaths(parsed.slides);
|
|
3464
3464
|
let nextSlides = parsed.slides;
|
|
3465
3465
|
if (imagePaths.size > 0) {
|
|
3466
3466
|
const resolvedMap = /* @__PURE__ */ new Map();
|
|
@@ -3549,7 +3549,7 @@ function useLoadContent({
|
|
|
3549
3549
|
setHasMacros(parsed.hasMacros === true);
|
|
3550
3550
|
setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
|
|
3551
3551
|
setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
|
|
3552
|
-
setGuides(
|
|
3552
|
+
setGuides(chunkUXVFNGJH_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
|
|
3553
3553
|
setActiveSlideIndex(0);
|
|
3554
3554
|
clearSelection();
|
|
3555
3555
|
setIsDirty(false);
|
|
@@ -3557,7 +3557,7 @@ function useLoadContent({
|
|
|
3557
3557
|
onContentApplied?.();
|
|
3558
3558
|
} catch (err) {
|
|
3559
3559
|
if (!cancelled && token === renderTokenRef.current) {
|
|
3560
|
-
if (err instanceof
|
|
3560
|
+
if (err instanceof chunk2V6BD4JQ_js.EncryptedFileError) {
|
|
3561
3561
|
setIsEncrypted(true);
|
|
3562
3562
|
} else {
|
|
3563
3563
|
setError(err instanceof Error ? err.message : String(err));
|
|
@@ -3634,7 +3634,7 @@ function useAutosave(input) {
|
|
|
3634
3634
|
isSavingRef.current = false;
|
|
3635
3635
|
return;
|
|
3636
3636
|
}
|
|
3637
|
-
await
|
|
3637
|
+
await chunkUXVFNGJH_js.saveAutosaveSnapshot(filePathRef.current, data);
|
|
3638
3638
|
setAutosaveStatus({ state: "saved", timestamp: Date.now() });
|
|
3639
3639
|
} catch (err) {
|
|
3640
3640
|
setAutosaveStatus({
|
|
@@ -3672,7 +3672,7 @@ function useAutosave(input) {
|
|
|
3672
3672
|
|
|
3673
3673
|
// src/viewer/utils/animation-effects.ts
|
|
3674
3674
|
function getAnimationInitialStyle2(preset, nativeAnimation) {
|
|
3675
|
-
return
|
|
3675
|
+
return chunkUXVFNGJH_js.getAnimationInitialStyle(preset, nativeAnimation);
|
|
3676
3676
|
}
|
|
3677
3677
|
function cn(...inputs) {
|
|
3678
3678
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
@@ -3680,7 +3680,7 @@ function cn(...inputs) {
|
|
|
3680
3680
|
|
|
3681
3681
|
// src/viewer/utils/text-utils.tsx
|
|
3682
3682
|
function getTextStyleForElement(element, fallbackColor) {
|
|
3683
|
-
if (!
|
|
3683
|
+
if (!chunk2V6BD4JQ_js.hasTextProperties(element)) {
|
|
3684
3684
|
return { color: fallbackColor };
|
|
3685
3685
|
}
|
|
3686
3686
|
const textDecorationTokens = [];
|
|
@@ -3694,20 +3694,20 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
3694
3694
|
const textDecorationStyle = isDoubleStrike ? "double" : void 0;
|
|
3695
3695
|
const hasItalicRuns = element.textStyle?.italic || Boolean(element.textSegments?.some((segment) => segment.style?.italic));
|
|
3696
3696
|
const isRtl = element.textStyle?.rtl === true;
|
|
3697
|
-
const resolvedTextColor = element.textStyle?.hyperlink ?
|
|
3697
|
+
const resolvedTextColor = element.textStyle?.hyperlink ? chunkUXVFNGJH_js.normalizeHexColor(element.textStyle?.color, HYPERLINK_COLOR) : chunkUXVFNGJH_js.normalizeHexColor(element.textStyle?.color, fallbackColor);
|
|
3698
3698
|
const bodyTop = element.textStyle?.bodyInsetTop ?? DEFAULT_BODY_INSET_TB_PX;
|
|
3699
3699
|
const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
|
|
3700
3700
|
const bodyLeft = element.textStyle?.bodyInsetLeft ?? DEFAULT_BODY_INSET_LR_PX;
|
|
3701
3701
|
const bodyRight = element.textStyle?.bodyInsetRight ?? DEFAULT_BODY_INSET_LR_PX;
|
|
3702
|
-
const writingMode =
|
|
3703
|
-
const textOrientation =
|
|
3704
|
-
const verticalDirection =
|
|
3702
|
+
const writingMode = chunkUXVFNGJH_js.toCssWritingMode(element.textStyle?.textDirection);
|
|
3703
|
+
const textOrientation = chunkUXVFNGJH_js.toCssTextOrientation(element.textStyle?.textDirection);
|
|
3704
|
+
const verticalDirection = chunkUXVFNGJH_js.toCssVerticalDirection(element.textStyle?.textDirection);
|
|
3705
3705
|
const resolvedDirection = verticalDirection || (isRtl ? "rtl" : "ltr");
|
|
3706
3706
|
const resolvedUnicodeBidi = isRtl ? "plaintext" : void 0;
|
|
3707
3707
|
const hasSegments = (element.textSegments?.length ?? 0) > 0;
|
|
3708
3708
|
return {
|
|
3709
3709
|
color: resolvedTextColor,
|
|
3710
|
-
backgroundColor: !hasSegments && element.textStyle?.highlightColor ?
|
|
3710
|
+
backgroundColor: !hasSegments && element.textStyle?.highlightColor ? chunkUXVFNGJH_js.normalizeHexColor(element.textStyle.highlightColor, void 0) : void 0,
|
|
3711
3711
|
textAlign: (() => {
|
|
3712
3712
|
const a = element.textStyle?.align;
|
|
3713
3713
|
if (a === "justLow" || a === "dist" || a === "thaiDist") {
|
|
@@ -3723,7 +3723,7 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
3723
3723
|
textDecorationLine: textDecorationTokens.length > 0 ? textDecorationTokens.join(" ") : "none",
|
|
3724
3724
|
textDecorationStyle,
|
|
3725
3725
|
fontFamily: element.textStyle?.fontFamily || DEFAULT_FONT_FAMILY,
|
|
3726
|
-
lineHeight:
|
|
3726
|
+
lineHeight: chunkUXVFNGJH_js.resolveLineHeight(element.textStyle, hasItalicRuns),
|
|
3727
3727
|
paddingTop: bodyTop + (hasItalicRuns ? 1 : 0),
|
|
3728
3728
|
paddingBottom: bodyBottom + (hasItalicRuns ? 1 : 0),
|
|
3729
3729
|
paddingLeft: bodyLeft + (element.textStyle?.paragraphMarginLeft || 0),
|
|
@@ -3736,7 +3736,7 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
3736
3736
|
// Auto-fit: use OOXML-provided fontScale/lnSpcReduction when available,
|
|
3737
3737
|
// otherwise fall back to heuristic estimation. The pure font-scale maths
|
|
3738
3738
|
// now lives in pptx-viewer-shared (computeAutoFitTextStyle).
|
|
3739
|
-
...
|
|
3739
|
+
...chunkUXVFNGJH_js.computeAutoFitTextStyle({
|
|
3740
3740
|
textStyle: element.textStyle,
|
|
3741
3741
|
text: element.text ?? "",
|
|
3742
3742
|
width: element.width,
|
|
@@ -3769,13 +3769,13 @@ function computeTabSize(tabStops) {
|
|
|
3769
3769
|
return avgGap > 0 ? `${Math.round(avgGap)}px` : void 0;
|
|
3770
3770
|
}
|
|
3771
3771
|
function getTextLayoutStyle(element) {
|
|
3772
|
-
if (!
|
|
3772
|
+
if (!chunk2V6BD4JQ_js.hasTextProperties(element)) {
|
|
3773
3773
|
return {};
|
|
3774
3774
|
}
|
|
3775
3775
|
const verticalAlign = element.textStyle?.vAlign || "top";
|
|
3776
|
-
const writingMode =
|
|
3777
|
-
const textOrientation =
|
|
3778
|
-
const verticalDirection =
|
|
3776
|
+
const writingMode = chunkUXVFNGJH_js.toCssWritingMode(element.textStyle?.textDirection);
|
|
3777
|
+
const textOrientation = chunkUXVFNGJH_js.toCssTextOrientation(element.textStyle?.textDirection);
|
|
3778
|
+
const verticalDirection = chunkUXVFNGJH_js.toCssVerticalDirection(element.textStyle?.textDirection);
|
|
3779
3779
|
const parsedColumnCount = Number(element.textStyle?.columnCount);
|
|
3780
3780
|
const columnCount = Number.isFinite(parsedColumnCount) ? Math.max(1, Math.min(16, Math.round(parsedColumnCount))) : 1;
|
|
3781
3781
|
const hasColumns = columnCount > 1;
|
|
@@ -3783,7 +3783,7 @@ function getTextLayoutStyle(element) {
|
|
|
3783
3783
|
const tabStops = element.textStyle?.tabStops;
|
|
3784
3784
|
const tabSize = computeTabSize(tabStops);
|
|
3785
3785
|
const textWrapNone = element.textStyle?.textWrap === "none";
|
|
3786
|
-
const hasParagraphIndents =
|
|
3786
|
+
const hasParagraphIndents = chunk2V6BD4JQ_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
|
|
3787
3787
|
const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
|
|
3788
3788
|
const paragraphIndent = element.textStyle?.paragraphIndent;
|
|
3789
3789
|
const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
|
|
@@ -3792,7 +3792,7 @@ function getTextLayoutStyle(element) {
|
|
|
3792
3792
|
const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
|
|
3793
3793
|
const parsedColumnSpacing = Number(element.textStyle?.columnSpacing);
|
|
3794
3794
|
const columnGap = Number.isFinite(parsedColumnSpacing) && parsedColumnSpacing > 0 ? `${parsedColumnSpacing}px` : "0.75em";
|
|
3795
|
-
const kinsokuStyles =
|
|
3795
|
+
const kinsokuStyles = chunkUXVFNGJH_js.getKinsokuLineBreakStyles(element.textStyle);
|
|
3796
3796
|
if (hasColumns) {
|
|
3797
3797
|
return {
|
|
3798
3798
|
display: "block",
|
|
@@ -3835,10 +3835,10 @@ function getTextLayoutStyle(element) {
|
|
|
3835
3835
|
|
|
3836
3836
|
// src/viewer/utils/text-effects.tsx
|
|
3837
3837
|
function buildTextFillCss2(style) {
|
|
3838
|
-
return
|
|
3838
|
+
return chunkUXVFNGJH_js.buildTextFillCss(style);
|
|
3839
3839
|
}
|
|
3840
3840
|
function buildTextBody3DSceneStyle2(textStyle) {
|
|
3841
|
-
return
|
|
3841
|
+
return chunkUXVFNGJH_js.buildTextBody3DSceneStyle(textStyle);
|
|
3842
3842
|
}
|
|
3843
3843
|
|
|
3844
3844
|
// src/viewer/utils/text-warp-css.tsx
|
|
@@ -4023,17 +4023,17 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
|
|
|
4023
4023
|
if (!subElementAnimStates || subElementAnimStates.size === 0) {
|
|
4024
4024
|
return renderedSegments;
|
|
4025
4025
|
}
|
|
4026
|
-
const paraKey = `${elementId}${
|
|
4026
|
+
const paraKey = `${elementId}${chunkUXVFNGJH_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
|
|
4027
4027
|
const paraState = subElementAnimStates.get(paraKey);
|
|
4028
4028
|
if (paraState) {
|
|
4029
4029
|
const style = buildAnimStyle(paraState);
|
|
4030
4030
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
|
|
4031
4031
|
}
|
|
4032
|
-
const firstWordKey = `${elementId}${
|
|
4032
|
+
const firstWordKey = `${elementId}${chunkUXVFNGJH_js.TEXT_BUILD_ID_SEP}w${paraIndex}-0`;
|
|
4033
4033
|
if (subElementAnimStates.has(firstWordKey)) {
|
|
4034
4034
|
return wrapByWord(elementId, paraIndex, paraSegments, subElementAnimStates);
|
|
4035
4035
|
}
|
|
4036
|
-
const firstCharKey = `${elementId}${
|
|
4036
|
+
const firstCharKey = `${elementId}${chunkUXVFNGJH_js.TEXT_BUILD_ID_SEP}c${paraIndex}-0`;
|
|
4037
4037
|
if (subElementAnimStates.has(firstCharKey)) {
|
|
4038
4038
|
return wrapByChar(elementId, paraIndex, paraSegments, subElementAnimStates);
|
|
4039
4039
|
}
|
|
@@ -4054,7 +4054,7 @@ function wrapByWord(elementId, paraIndex, paraSegments, states) {
|
|
|
4054
4054
|
nodes.push(/* @__PURE__ */ jsxRuntime.jsx(React3__default.default.Fragment, { children: w }, `ws-${i}`));
|
|
4055
4055
|
continue;
|
|
4056
4056
|
}
|
|
4057
|
-
const key = `${elementId}${
|
|
4057
|
+
const key = `${elementId}${chunkUXVFNGJH_js.TEXT_BUILD_ID_SEP}w${paraIndex}-${wordIdx}`;
|
|
4058
4058
|
const state = states.get(key);
|
|
4059
4059
|
const style = buildAnimStyle(state);
|
|
4060
4060
|
nodes.push(
|
|
@@ -4068,7 +4068,7 @@ function wrapByChar(elementId, paraIndex, paraSegments, states) {
|
|
|
4068
4068
|
const fullText = paraSegments.map((e) => e.segment.text).join("");
|
|
4069
4069
|
const nodes = [];
|
|
4070
4070
|
for (let i = 0; i < fullText.length; i++) {
|
|
4071
|
-
const key = `${elementId}${
|
|
4071
|
+
const key = `${elementId}${chunkUXVFNGJH_js.TEXT_BUILD_ID_SEP}c${paraIndex}-${i}`;
|
|
4072
4072
|
const state = states.get(key);
|
|
4073
4073
|
const style = buildAnimStyle(state);
|
|
4074
4074
|
nodes.push(
|
|
@@ -4081,10 +4081,10 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
|
|
|
4081
4081
|
if (!needsScriptFonts || !text) {
|
|
4082
4082
|
return text;
|
|
4083
4083
|
}
|
|
4084
|
-
const runs =
|
|
4084
|
+
const runs = chunkUXVFNGJH_js.segmentByScript(text);
|
|
4085
4085
|
if (runs.length <= 1) {
|
|
4086
4086
|
if (runs.length === 1) {
|
|
4087
|
-
const font =
|
|
4087
|
+
const font = chunkUXVFNGJH_js.resolveFontForScript(runs[0].script, scriptFonts);
|
|
4088
4088
|
if (font && font !== baseFontFamily) {
|
|
4089
4089
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontFamily: font }, children: text });
|
|
4090
4090
|
}
|
|
@@ -4092,7 +4092,7 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
|
|
|
4092
4092
|
return text;
|
|
4093
4093
|
}
|
|
4094
4094
|
return runs.map((run, i) => {
|
|
4095
|
-
const font =
|
|
4095
|
+
const font = chunkUXVFNGJH_js.resolveFontForScript(run.script, scriptFonts);
|
|
4096
4096
|
if (!font || font === baseFontFamily) {
|
|
4097
4097
|
return /* @__PURE__ */ jsxRuntime.jsx(React3__default.default.Fragment, { children: run.text }, `${keyPrefix}-r${i}`);
|
|
4098
4098
|
}
|
|
@@ -4166,8 +4166,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
|
|
|
4166
4166
|
);
|
|
4167
4167
|
}
|
|
4168
4168
|
function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
|
|
4169
|
-
const mathml =
|
|
4170
|
-
const safeMathml = mathml ?
|
|
4169
|
+
const mathml = chunkUXVFNGJH_js.convertOmmlToMathMl(equationXml);
|
|
4170
|
+
const safeMathml = mathml ? chunkUXVFNGJH_js.sanitizeMathMl(mathml) : "";
|
|
4171
4171
|
const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4172
4172
|
"span",
|
|
4173
4173
|
{
|
|
@@ -4217,7 +4217,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
|
|
|
4217
4217
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { children: equationContent }, `${elementId}-seg-${segmentIndex}`);
|
|
4218
4218
|
}
|
|
4219
4219
|
function renderPictureBullet(elementId, segmentIndex, bulletInfo, baseFontSize) {
|
|
4220
|
-
const picture =
|
|
4220
|
+
const picture = chunkUXVFNGJH_js.resolvePictureBullet(bulletInfo, baseFontSize) ?? {
|
|
4221
4221
|
sizePx: baseFontSize,
|
|
4222
4222
|
fallbackMarker: "\u2022",
|
|
4223
4223
|
accessibleLabel: "Bullet"
|
|
@@ -4267,7 +4267,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4267
4267
|
);
|
|
4268
4268
|
}
|
|
4269
4269
|
const segmentStyle = segment.style || {};
|
|
4270
|
-
const textValue =
|
|
4270
|
+
const textValue = chunkUXVFNGJH_js.substituteFieldText(segment.text || "", segment.fieldType, fieldContext);
|
|
4271
4271
|
const lines = textValue.split("\n");
|
|
4272
4272
|
const textDecorationTokens = [];
|
|
4273
4273
|
if (segmentStyle.underline || segmentStyle.hyperlink) {
|
|
@@ -4277,8 +4277,8 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4277
4277
|
textDecorationTokens.push("line-through");
|
|
4278
4278
|
}
|
|
4279
4279
|
const isDoubleStrike = segmentStyle.strikethrough && segmentStyle.strikeType === "dblStrike";
|
|
4280
|
-
const resolvedSegmentColor = segmentStyle.hyperlink ?
|
|
4281
|
-
const underlineDecoration =
|
|
4280
|
+
const resolvedSegmentColor = segmentStyle.hyperlink ? chunkUXVFNGJH_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, HYPERLINK_COLOR) : chunkUXVFNGJH_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, fallbackColor);
|
|
4281
|
+
const underlineDecoration = chunkUXVFNGJH_js.resolveUnderlineDecorationStyle(
|
|
4282
4282
|
Boolean(isDoubleStrike),
|
|
4283
4283
|
segmentStyle.underlineStyle
|
|
4284
4284
|
);
|
|
@@ -4291,14 +4291,14 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4291
4291
|
const autoFitScale = element.textStyle?.autoFitFontScale !== void 0 && element.textStyle.autoFitFontScale > 0 && element.textStyle.autoFitFontScale < 1 ? element.textStyle.autoFitFontScale : 1;
|
|
4292
4292
|
const baseFontSize = rawFontSize * autoFitScale;
|
|
4293
4293
|
const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
|
|
4294
|
-
const baseFontFamily = rawFontFamily ?
|
|
4294
|
+
const baseFontFamily = rawFontFamily ? chunk2V6BD4JQ_js.getSubstituteFontFamily(rawFontFamily) : DEFAULT_FONT_FAMILY;
|
|
4295
4295
|
const scriptFonts = {
|
|
4296
4296
|
latin: baseFontFamily,
|
|
4297
4297
|
eastAsia: segmentStyle.eastAsiaFont || element.textStyle?.eastAsiaFont || baseFontFamily,
|
|
4298
4298
|
complexScript: segmentStyle.complexScriptFont || element.textStyle?.complexScriptFont || baseFontFamily,
|
|
4299
4299
|
symbol: segmentStyle.symbolFont || element.textStyle?.symbolFont || baseFontFamily
|
|
4300
4300
|
};
|
|
4301
|
-
const needsScriptFonts =
|
|
4301
|
+
const needsScriptFonts = chunkUXVFNGJH_js.hasDistinctScriptFonts(scriptFonts);
|
|
4302
4302
|
const spanStyle = {
|
|
4303
4303
|
color: resolvedSegmentColor,
|
|
4304
4304
|
fontSize: baseFontSize * baselineFontScale,
|
|
@@ -4312,15 +4312,15 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4312
4312
|
verticalAlign: baselineShift,
|
|
4313
4313
|
letterSpacing,
|
|
4314
4314
|
fontKerning,
|
|
4315
|
-
backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ?
|
|
4315
|
+
backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ? chunkUXVFNGJH_js.normalizeHexColor(segmentStyle.highlightColor, "transparent") : void 0,
|
|
4316
4316
|
...textFillStyles,
|
|
4317
|
-
textDecorationColor: segmentStyle.underlineColor ?
|
|
4318
|
-
WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${
|
|
4317
|
+
textDecorationColor: segmentStyle.underlineColor ? chunkUXVFNGJH_js.normalizeHexColor(segmentStyle.underlineColor, void 0) : void 0,
|
|
4318
|
+
WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${chunkUXVFNGJH_js.normalizeHexColor(segmentStyle.textOutlineColor, "#000000")}` : segmentStyle.textOutlineWidth ? `${segmentStyle.textOutlineWidth}px currentColor` : void 0,
|
|
4319
4319
|
paintOrder: segmentStyle.textOutlineWidth ? "stroke fill" : void 0,
|
|
4320
|
-
textShadow:
|
|
4321
|
-
filter:
|
|
4322
|
-
opacity:
|
|
4323
|
-
WebkitBoxReflect:
|
|
4320
|
+
textShadow: chunkUXVFNGJH_js.buildTextShadowCss(segmentStyle),
|
|
4321
|
+
filter: chunkUXVFNGJH_js.buildTextRunFilterChain(segmentStyle),
|
|
4322
|
+
opacity: chunkUXVFNGJH_js.getTextAlphaOpacity(segmentStyle),
|
|
4323
|
+
WebkitBoxReflect: chunkUXVFNGJH_js.buildTextReflectionCss(segmentStyle)
|
|
4324
4324
|
};
|
|
4325
4325
|
const runRtl = segmentStyle.rtl;
|
|
4326
4326
|
if (runRtl !== void 0 && runRtl !== paragraphRtl) {
|
|
@@ -4340,7 +4340,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4340
4340
|
spanStyle.fontSize = baseFontSize * (bulletInfo.sizePercent / 100) * baselineFontScale;
|
|
4341
4341
|
}
|
|
4342
4342
|
if (bulletInfo.color) {
|
|
4343
|
-
spanStyle.color =
|
|
4343
|
+
spanStyle.color = chunkUXVFNGJH_js.normalizeHexColor(bulletInfo.color, resolvedSegmentColor);
|
|
4344
4344
|
}
|
|
4345
4345
|
}
|
|
4346
4346
|
if (bulletInfo?.imageDataUrl || bulletInfo?.imageRelId) {
|
|
@@ -4372,7 +4372,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4372
4372
|
textAlign: segment.rubyAlignment === "l" ? "left" : segment.rubyAlignment === "r" ? "right" : segment.rubyAlignment === "dist" || segment.rubyAlignment === "distCat" || segment.rubyAlignment === "distLetter" ? "justify" : "center"
|
|
4373
4373
|
};
|
|
4374
4374
|
if (segment.rubyStyle?.color) {
|
|
4375
|
-
rubyStyle.color =
|
|
4375
|
+
rubyStyle.color = chunkUXVFNGJH_js.normalizeHexColor(segment.rubyStyle.color, resolvedSegmentColor);
|
|
4376
4376
|
}
|
|
4377
4377
|
innerContent = /* @__PURE__ */ jsxRuntime.jsxs("ruby", { children: [
|
|
4378
4378
|
baseContent,
|
|
@@ -4442,7 +4442,7 @@ function groupSegmentsIntoParagraphs(segments) {
|
|
|
4442
4442
|
return paragraphs;
|
|
4443
4443
|
}
|
|
4444
4444
|
function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick) {
|
|
4445
|
-
if (!
|
|
4445
|
+
if (!chunk2V6BD4JQ_js.hasTextProperties(element)) {
|
|
4446
4446
|
return emptyFallback || null;
|
|
4447
4447
|
}
|
|
4448
4448
|
const effectiveSegments = segmentOverrides ?? element.textSegments;
|
|
@@ -4463,9 +4463,9 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
4463
4463
|
return element.text || emptyFallback || "";
|
|
4464
4464
|
}
|
|
4465
4465
|
const paragraphs = groupSegmentsIntoParagraphs(effectiveSegments);
|
|
4466
|
-
const paragraphIndents =
|
|
4467
|
-
const elementRtl =
|
|
4468
|
-
const elementAlign =
|
|
4466
|
+
const paragraphIndents = chunk2V6BD4JQ_js.hasTextProperties(element) ? element.paragraphIndents : void 0;
|
|
4467
|
+
const elementRtl = chunk2V6BD4JQ_js.hasTextProperties(element) ? element.textStyle?.rtl : void 0;
|
|
4468
|
+
const elementAlign = chunk2V6BD4JQ_js.hasTextProperties(element) ? element.textStyle?.align : void 0;
|
|
4469
4469
|
return paragraphs.map((paraSegments, paraIndex) => {
|
|
4470
4470
|
const paraIndent = paragraphIndents?.[paraIndex];
|
|
4471
4471
|
const rawMarginLeft = typeof paraIndent?.marginLeft === "number" && paraIndent.marginLeft !== 0 ? paraIndent.marginLeft : void 0;
|
|
@@ -4479,14 +4479,14 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
4479
4479
|
return Boolean(segment.text) && segment.text.trim().length > 0;
|
|
4480
4480
|
});
|
|
4481
4481
|
const hasBullet = bulletInfo && !bulletInfo.none && hasVisibleTextContent;
|
|
4482
|
-
const paraRtl =
|
|
4482
|
+
const paraRtl = chunkUXVFNGJH_js.resolveParagraphRtl(paraSegments, elementRtl);
|
|
4483
4483
|
const isRtlParagraph = paraRtl === true;
|
|
4484
|
-
const paraAlign =
|
|
4485
|
-
const cssTextAlign =
|
|
4484
|
+
const paraAlign = chunkUXVFNGJH_js.resolveParagraphAlign(paraSegments, elementAlign);
|
|
4485
|
+
const cssTextAlign = chunkUXVFNGJH_js.resolveCssTextAlign(paraAlign, isRtlParagraph);
|
|
4486
4486
|
const paraMarginLeft = isRtlParagraph ? void 0 : rawMarginLeft;
|
|
4487
4487
|
const paraMarginRight = isRtlParagraph ? rawMarginLeft : void 0;
|
|
4488
4488
|
const paraTextIndent = rawTextIndent;
|
|
4489
|
-
const paraKinsokuStyle =
|
|
4489
|
+
const paraKinsokuStyle = chunkUXVFNGJH_js.getKinsokuLineBreakStyles(firstSeg?.segment.style);
|
|
4490
4490
|
const hasParaKinsoku = Object.keys(paraKinsokuStyle).length > 0;
|
|
4491
4491
|
const paraStyle = {
|
|
4492
4492
|
...paraKinsokuStyle
|
|
@@ -4651,7 +4651,7 @@ function isConnectorOrLineElement(element) {
|
|
|
4651
4651
|
if (element.type === "connector") {
|
|
4652
4652
|
return true;
|
|
4653
4653
|
}
|
|
4654
|
-
if (!
|
|
4654
|
+
if (!chunk2V6BD4JQ_js.hasShapeProperties(element)) {
|
|
4655
4655
|
return false;
|
|
4656
4656
|
}
|
|
4657
4657
|
const st = getShapeType(element.shapeType);
|
|
@@ -4669,13 +4669,13 @@ function hexToRgbUnit(hex) {
|
|
|
4669
4669
|
};
|
|
4670
4670
|
}
|
|
4671
4671
|
function getDuotoneColors(element) {
|
|
4672
|
-
if (!
|
|
4672
|
+
if (!chunk2V6BD4JQ_js.isImageLikeElement(element)) {
|
|
4673
4673
|
return void 0;
|
|
4674
4674
|
}
|
|
4675
4675
|
return element.imageEffects?.duotone;
|
|
4676
4676
|
}
|
|
4677
4677
|
function buildLineShadowCss(element) {
|
|
4678
|
-
if (!
|
|
4678
|
+
if (!chunk2V6BD4JQ_js.hasShapeProperties(element)) {
|
|
4679
4679
|
return void 0;
|
|
4680
4680
|
}
|
|
4681
4681
|
const ss = element.shapeStyle;
|
|
@@ -4686,13 +4686,13 @@ function buildLineShadowCss(element) {
|
|
|
4686
4686
|
const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
|
|
4687
4687
|
const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
|
|
4688
4688
|
const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
|
|
4689
|
-
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${
|
|
4690
|
-
|
|
4689
|
+
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkUXVFNGJH_js.colorWithOpacity(
|
|
4690
|
+
chunkUXVFNGJH_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
|
|
4691
4691
|
opacity
|
|
4692
4692
|
)}`;
|
|
4693
4693
|
}
|
|
4694
4694
|
function buildLineGlowFilter(element) {
|
|
4695
|
-
if (!
|
|
4695
|
+
if (!chunk2V6BD4JQ_js.hasShapeProperties(element)) {
|
|
4696
4696
|
return void 0;
|
|
4697
4697
|
}
|
|
4698
4698
|
const ss = element.shapeStyle;
|
|
@@ -4701,7 +4701,7 @@ function buildLineGlowFilter(element) {
|
|
|
4701
4701
|
}
|
|
4702
4702
|
const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
|
|
4703
4703
|
const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
|
|
4704
|
-
const glowCol =
|
|
4704
|
+
const glowCol = chunkUXVFNGJH_js.colorWithOpacity(chunkUXVFNGJH_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
|
|
4705
4705
|
return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
|
|
4706
4706
|
}
|
|
4707
4707
|
function mapDagBlendModeToCss(blend) {
|
|
@@ -4725,7 +4725,7 @@ function getDagDuotoneFilterId(elementId) {
|
|
|
4725
4725
|
return `dag-duotone-${elementId}`;
|
|
4726
4726
|
}
|
|
4727
4727
|
function hasDagDuotoneEffect(element) {
|
|
4728
|
-
if (!
|
|
4728
|
+
if (!chunk2V6BD4JQ_js.hasShapeProperties(element)) {
|
|
4729
4729
|
return false;
|
|
4730
4730
|
}
|
|
4731
4731
|
return Boolean(element.shapeStyle?.dagDuotone);
|
|
@@ -4788,7 +4788,7 @@ function getRoundRectRadiusPx2(element) {
|
|
|
4788
4788
|
|
|
4789
4789
|
// src/viewer/utils/shape-visual-3d.ts
|
|
4790
4790
|
function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
|
|
4791
|
-
return
|
|
4791
|
+
return chunkUXVFNGJH_js.build3DExtrusionData(
|
|
4792
4792
|
shape3d,
|
|
4793
4793
|
scene3d,
|
|
4794
4794
|
fillColor,
|
|
@@ -4797,27 +4797,28 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
|
|
|
4797
4797
|
);
|
|
4798
4798
|
}
|
|
4799
4799
|
function apply3dEffects2(base, scene3d, shape3d) {
|
|
4800
|
-
|
|
4800
|
+
chunkUXVFNGJH_js.apply3dEffects(base, scene3d, shape3d);
|
|
4801
4801
|
}
|
|
4802
4802
|
|
|
4803
4803
|
// src/viewer/utils/shape-visual-style.ts
|
|
4804
4804
|
function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeColor) {
|
|
4805
|
-
if (!
|
|
4805
|
+
if (!chunk2V6BD4JQ_js.hasShapeProperties(element)) {
|
|
4806
4806
|
return {};
|
|
4807
4807
|
}
|
|
4808
4808
|
const normalizedShapeType = getShapeType(element.shapeType);
|
|
4809
|
-
const clipPath =
|
|
4809
|
+
const clipPath = chunkUXVFNGJH_js.getResolvedShapeClipPath(element);
|
|
4810
|
+
const rendersCustomVectorPath = (element.type === "shape" || element.type === "image" || element.type === "picture") && Boolean(element.pathData) && typeof element.pathWidth === "number" && element.pathWidth > 0 && typeof element.pathHeight === "number" && element.pathHeight > 0;
|
|
4810
4811
|
const fillOpacity = element.shapeStyle?.fillOpacity;
|
|
4811
4812
|
const strokeOpacity = element.shapeStyle?.strokeOpacity;
|
|
4812
|
-
const strokeDash =
|
|
4813
|
-
const fillGradient =
|
|
4814
|
-
const shadowCss =
|
|
4815
|
-
const innerShadowCss =
|
|
4816
|
-
const resolvedFillColor =
|
|
4817
|
-
const resolvedStrokeColor =
|
|
4813
|
+
const strokeDash = chunkUXVFNGJH_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
|
|
4814
|
+
const fillGradient = chunkUXVFNGJH_js.buildCssGradientFromShapeStyle(element.shapeStyle) || element.shapeStyle?.fillGradient;
|
|
4815
|
+
const shadowCss = chunkUXVFNGJH_js.buildShadowCssFromShapeStyle(element.shapeStyle);
|
|
4816
|
+
const innerShadowCss = chunkUXVFNGJH_js.buildInnerShadowCssFromShapeStyle(element.shapeStyle);
|
|
4817
|
+
const resolvedFillColor = chunkUXVFNGJH_js.colorWithOpacity(fillColor, fillOpacity);
|
|
4818
|
+
const resolvedStrokeColor = chunkUXVFNGJH_js.colorWithOpacity(strokeColor, strokeOpacity);
|
|
4818
4819
|
const ss = element.shapeStyle;
|
|
4819
4820
|
const combinedShadowParts = [];
|
|
4820
|
-
const multiLayerShadow =
|
|
4821
|
+
const multiLayerShadow = chunkUXVFNGJH_js.buildMultiLayerShadowCss(element.shapeStyle);
|
|
4821
4822
|
if (multiLayerShadow) {
|
|
4822
4823
|
combinedShadowParts.push(multiLayerShadow);
|
|
4823
4824
|
} else if (shadowCss) {
|
|
@@ -4826,7 +4827,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4826
4827
|
if (innerShadowCss) {
|
|
4827
4828
|
combinedShadowParts.push(innerShadowCss);
|
|
4828
4829
|
}
|
|
4829
|
-
const glowBoxShadow =
|
|
4830
|
+
const glowBoxShadow = chunkUXVFNGJH_js.buildGlowBoxShadow(ss?.glowColor, ss?.glowRadius, ss?.glowOpacity);
|
|
4830
4831
|
if (glowBoxShadow) {
|
|
4831
4832
|
combinedShadowParts.push(glowBoxShadow);
|
|
4832
4833
|
}
|
|
@@ -4834,7 +4835,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4834
4835
|
if (lineShadow) {
|
|
4835
4836
|
combinedShadowParts.push(lineShadow);
|
|
4836
4837
|
}
|
|
4837
|
-
const compoundLineShadow =
|
|
4838
|
+
const compoundLineShadow = chunkUXVFNGJH_js.getCompoundLineBoxShadow(
|
|
4838
4839
|
element.shapeStyle?.compoundLine,
|
|
4839
4840
|
strokeWidth,
|
|
4840
4841
|
resolvedStrokeColor
|
|
@@ -4847,7 +4848,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4847
4848
|
if (ss?.glowColor && ss.glowColor !== "transparent" && ss.glowRadius) {
|
|
4848
4849
|
const glowOpacity = typeof ss.glowOpacity === "number" ? ss.glowOpacity : 0.75;
|
|
4849
4850
|
const glowRad = Math.round(Math.max(0, ss.glowRadius));
|
|
4850
|
-
const glowCol =
|
|
4851
|
+
const glowCol = chunkUXVFNGJH_js.colorWithOpacity(chunkUXVFNGJH_js.normalizeHexColor(ss.glowColor, "#ffff00"), glowOpacity);
|
|
4851
4852
|
filterParts.push(`drop-shadow(0 0 ${glowRad}px ${glowCol})`);
|
|
4852
4853
|
}
|
|
4853
4854
|
if (typeof ss?.softEdgeRadius === "number" && ss.softEdgeRadius > 0) {
|
|
@@ -4860,12 +4861,12 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4860
4861
|
if (lineGlowCss) {
|
|
4861
4862
|
filterParts.push(lineGlowCss);
|
|
4862
4863
|
}
|
|
4863
|
-
const dagFilter =
|
|
4864
|
+
const dagFilter = chunkUXVFNGJH_js.getEffectDagFilter(ss, element.id);
|
|
4864
4865
|
if (dagFilter) {
|
|
4865
4866
|
filterParts.push(dagFilter);
|
|
4866
4867
|
}
|
|
4867
4868
|
const lineJoinCss = ss?.lineJoin === "round" ? "round" : ss?.lineJoin === "bevel" ? "bevel" : void 0;
|
|
4868
|
-
const patternFill =
|
|
4869
|
+
const patternFill = chunkUXVFNGJH_js.buildPatternFillCss(element.shapeStyle);
|
|
4869
4870
|
const imageFillUrl = ss?.fillMode === "image" && ss.fillImageUrl ? ss.fillImageUrl : void 0;
|
|
4870
4871
|
const imageFillMode = ss?.fillImageMode || "stretch";
|
|
4871
4872
|
let reflectCss;
|
|
@@ -4877,7 +4878,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4877
4878
|
const endOpacity = typeof ss.reflectionEndOpacity === "number" ? ss.reflectionEndOpacity : 0;
|
|
4878
4879
|
const fadeLength = typeof ss.reflectionEndPosition === "number" ? Math.round(ss.reflectionEndPosition * Math.max(element.height, 1)) : 100;
|
|
4879
4880
|
const blurRadius = typeof ss.reflectionBlurRadius === "number" ? ss.reflectionBlurRadius : 0;
|
|
4880
|
-
reflectCss =
|
|
4881
|
+
reflectCss = chunkUXVFNGJH_js.buildReflectionCss(distance, startOpacity, endOpacity, fadeLength, blurRadius);
|
|
4881
4882
|
}
|
|
4882
4883
|
}
|
|
4883
4884
|
const base = {
|
|
@@ -4891,13 +4892,20 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4891
4892
|
filter: filterParts.length > 0 ? filterParts.join(" ") : void 0,
|
|
4892
4893
|
opacity: typeof ss?.dagAlphaModFix === "number" ? Math.max(0, Math.min(1, ss.dagAlphaModFix / 100)) : void 0,
|
|
4893
4894
|
mixBlendMode: mapDagBlendModeToCss(ss?.dagFillOverlayBlend),
|
|
4894
|
-
borderWidth: strokeWidth > 0 ?
|
|
4895
|
+
borderWidth: strokeWidth > 0 ? chunkUXVFNGJH_js.getCompoundLineBorderWidth(ss?.compoundLine, strokeWidth) : void 0,
|
|
4895
4896
|
borderColor: strokeWidth > 0 ? resolvedStrokeColor : void 0,
|
|
4896
|
-
borderStyle: strokeWidth > 0 ?
|
|
4897
|
+
borderStyle: strokeWidth > 0 ? chunkUXVFNGJH_js.getCssBorderDashStyle(strokeDash, ss?.compoundLine) : void 0,
|
|
4897
4898
|
strokeLinejoin: lineJoinCss,
|
|
4898
4899
|
strokeLinecap: ss?.lineCap === "rnd" ? "round" : ss?.lineCap === "sq" ? "square" : void 0
|
|
4899
4900
|
};
|
|
4900
4901
|
apply3dEffects2(base, ss?.scene3d, ss?.shape3d);
|
|
4902
|
+
if (rendersCustomVectorPath) {
|
|
4903
|
+
base.backgroundColor = "transparent";
|
|
4904
|
+
base.backgroundImage = void 0;
|
|
4905
|
+
base.borderWidth = void 0;
|
|
4906
|
+
base.borderColor = void 0;
|
|
4907
|
+
base.borderStyle = void 0;
|
|
4908
|
+
}
|
|
4901
4909
|
if (element.type === "connector" || normalizedShapeType === "connector") {
|
|
4902
4910
|
return {
|
|
4903
4911
|
backgroundColor: "transparent",
|
|
@@ -4934,7 +4942,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4934
4942
|
borderWidth: 0,
|
|
4935
4943
|
borderTopWidth: Math.max(strokeWidth, 2),
|
|
4936
4944
|
borderTopColor: resolvedStrokeColor,
|
|
4937
|
-
borderTopStyle:
|
|
4945
|
+
borderTopStyle: chunkUXVFNGJH_js.getCssBorderDashStyle(strokeDash)
|
|
4938
4946
|
};
|
|
4939
4947
|
}
|
|
4940
4948
|
if (normalizedShapeType === "cylinder") {
|
|
@@ -4948,13 +4956,13 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4948
4956
|
function getConnectorAdjustment(element, key, fallback) {
|
|
4949
4957
|
const direct = element.shapeAdjustments?.[key];
|
|
4950
4958
|
if (typeof direct === "number" && Number.isFinite(direct)) {
|
|
4951
|
-
return
|
|
4959
|
+
return chunkUXVFNGJH_js.clampUnitInterval(direct / 1e5);
|
|
4952
4960
|
}
|
|
4953
4961
|
const fallbackKey = element.shapeAdjustments?.adj;
|
|
4954
4962
|
if (typeof fallbackKey === "number" && Number.isFinite(fallbackKey)) {
|
|
4955
|
-
return
|
|
4963
|
+
return chunkUXVFNGJH_js.clampUnitInterval(fallbackKey / 1e5);
|
|
4956
4964
|
}
|
|
4957
|
-
return
|
|
4965
|
+
return chunkUXVFNGJH_js.clampUnitInterval(fallback);
|
|
4958
4966
|
}
|
|
4959
4967
|
function getConnectorPathGeometry(element) {
|
|
4960
4968
|
const width = Math.max(element.width, 1);
|
|
@@ -5081,14 +5089,14 @@ function renderConnectorMarker(markerId, arrowType, color, arrowWidth, arrowLeng
|
|
|
5081
5089
|
);
|
|
5082
5090
|
}
|
|
5083
5091
|
function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor) {
|
|
5084
|
-
if (!
|
|
5092
|
+
if (!chunk2V6BD4JQ_js.hasShapeProperties(element)) {
|
|
5085
5093
|
return null;
|
|
5086
5094
|
}
|
|
5087
5095
|
const normalizedType = (element.shapeType || "").toLowerCase();
|
|
5088
|
-
const fillPaint =
|
|
5089
|
-
const strokePaint =
|
|
5090
|
-
const dashType =
|
|
5091
|
-
const dashArray =
|
|
5096
|
+
const fillPaint = chunkUXVFNGJH_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
|
|
5097
|
+
const strokePaint = chunkUXVFNGJH_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
|
|
5098
|
+
const dashType = chunkUXVFNGJH_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
|
|
5099
|
+
const dashArray = chunkUXVFNGJH_js.getSvgStrokeDasharray(
|
|
5092
5100
|
dashType,
|
|
5093
5101
|
Math.max(strokeWidth, 1),
|
|
5094
5102
|
element.shapeStyle?.customDashSegments
|
|
@@ -5172,18 +5180,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
5172
5180
|
}
|
|
5173
5181
|
);
|
|
5174
5182
|
}
|
|
5175
|
-
if (
|
|
5183
|
+
if (chunk2V6BD4JQ_js.isCalloutShape(normalizedType)) {
|
|
5176
5184
|
const width = Math.max(element.width, 1);
|
|
5177
5185
|
const height = Math.max(element.height, 1);
|
|
5178
|
-
const geometry =
|
|
5186
|
+
const geometry = chunk2V6BD4JQ_js.getCalloutLeaderLineGeometry(
|
|
5179
5187
|
normalizedType,
|
|
5180
5188
|
width,
|
|
5181
5189
|
height,
|
|
5182
5190
|
element.shapeAdjustments
|
|
5183
5191
|
);
|
|
5184
5192
|
if (geometry && geometry.points.length >= 2) {
|
|
5185
|
-
const leaderPath =
|
|
5186
|
-
const bounds =
|
|
5193
|
+
const leaderPath = chunk2V6BD4JQ_js.buildCalloutLeaderLineSvgPath(geometry);
|
|
5194
|
+
const bounds = chunk2V6BD4JQ_js.getCalloutViewBoxBounds(width, height, geometry);
|
|
5187
5195
|
const lineStroke = Math.max(strokeWidth, 1);
|
|
5188
5196
|
const offsetLeft = bounds.minX;
|
|
5189
5197
|
const offsetTop = bounds.minY;
|
|
@@ -5247,8 +5255,8 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
5247
5255
|
const endArrowL = element.shapeStyle?.connectorEndArrowLength;
|
|
5248
5256
|
const compoundLine = element.shapeStyle?.compoundLine;
|
|
5249
5257
|
const hitTargetWidth = Math.max(strokeWidth * 3, 12);
|
|
5250
|
-
const offsets =
|
|
5251
|
-
const widths =
|
|
5258
|
+
const offsets = chunkUXVFNGJH_js.getCompoundLineOffsets(compoundLine, strokeWidth);
|
|
5259
|
+
const widths = chunkUXVFNGJH_js.getCompoundLineWidths(compoundLine, strokeWidth);
|
|
5252
5260
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5253
5261
|
"svg",
|
|
5254
5262
|
{
|
|
@@ -5302,7 +5310,7 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
5302
5310
|
|
|
5303
5311
|
// src/viewer/utils/image-style.ts
|
|
5304
5312
|
function getImageMaskStyle(element) {
|
|
5305
|
-
if (!
|
|
5313
|
+
if (!chunk2V6BD4JQ_js.hasShapeProperties(element)) {
|
|
5306
5314
|
return void 0;
|
|
5307
5315
|
}
|
|
5308
5316
|
const shapeType = element.shapeType;
|
|
@@ -5311,7 +5319,7 @@ function getImageMaskStyle(element) {
|
|
|
5311
5319
|
}
|
|
5312
5320
|
const normalized = shapeType.toLowerCase();
|
|
5313
5321
|
if (normalized === "roundrect" || normalized === "round1rect" || normalized === "round2samerect" || normalized === "round2diagrect" || normalized === "sniproundrect" || normalized === "snip1rect" || normalized === "snip2diagrect") {
|
|
5314
|
-
const radiusPx =
|
|
5322
|
+
const radiusPx = chunkUXVFNGJH_js.getRoundRectRadiusPx(element);
|
|
5315
5323
|
if (radiusPx <= 0.01) {
|
|
5316
5324
|
return void 0;
|
|
5317
5325
|
}
|
|
@@ -5323,7 +5331,7 @@ function getImageMaskStyle(element) {
|
|
|
5323
5331
|
if (normalized === "can" || normalized === "cylinder") {
|
|
5324
5332
|
return { borderRadius: "48% / 12%" };
|
|
5325
5333
|
}
|
|
5326
|
-
const clipPath =
|
|
5334
|
+
const clipPath = chunkUXVFNGJH_js.getResolvedShapeClipPath(element);
|
|
5327
5335
|
if (!clipPath) {
|
|
5328
5336
|
return void 0;
|
|
5329
5337
|
}
|
|
@@ -5331,7 +5339,7 @@ function getImageMaskStyle(element) {
|
|
|
5331
5339
|
}
|
|
5332
5340
|
function getImageRenderStyle(element) {
|
|
5333
5341
|
const maskStyle = getImageMaskStyle(element) || {};
|
|
5334
|
-
if (!
|
|
5342
|
+
if (!chunk2V6BD4JQ_js.isImageLikeElement(element)) {
|
|
5335
5343
|
return {
|
|
5336
5344
|
...maskStyle,
|
|
5337
5345
|
width: "100%",
|
|
@@ -5339,10 +5347,10 @@ function getImageRenderStyle(element) {
|
|
|
5339
5347
|
objectFit: "cover"
|
|
5340
5348
|
};
|
|
5341
5349
|
}
|
|
5342
|
-
const cropLeft =
|
|
5343
|
-
const cropTop =
|
|
5344
|
-
const cropRight =
|
|
5345
|
-
const cropBottom =
|
|
5350
|
+
const cropLeft = chunkUXVFNGJH_js.clampCropValue(element.cropLeft);
|
|
5351
|
+
const cropTop = chunkUXVFNGJH_js.clampCropValue(element.cropTop);
|
|
5352
|
+
const cropRight = chunkUXVFNGJH_js.clampCropValue(element.cropRight);
|
|
5353
|
+
const cropBottom = chunkUXVFNGJH_js.clampCropValue(element.cropBottom);
|
|
5346
5354
|
const hasCrop = cropLeft + cropRight > 1e-4 || cropTop + cropBottom > 1e-4;
|
|
5347
5355
|
if (!hasCrop) {
|
|
5348
5356
|
return {
|
|
@@ -5354,10 +5362,10 @@ function getImageRenderStyle(element) {
|
|
|
5354
5362
|
}
|
|
5355
5363
|
const safeHorizontalScale = cropLeft + cropRight >= 0.99 ? 0.99 / (cropLeft + cropRight) : 1;
|
|
5356
5364
|
const safeVerticalScale = cropTop + cropBottom >= 0.99 ? 0.99 / (cropTop + cropBottom) : 1;
|
|
5357
|
-
const normalizedLeft =
|
|
5358
|
-
const normalizedRight =
|
|
5359
|
-
const normalizedTop =
|
|
5360
|
-
const normalizedBottom =
|
|
5365
|
+
const normalizedLeft = chunkUXVFNGJH_js.clampCropValue(cropLeft * safeHorizontalScale);
|
|
5366
|
+
const normalizedRight = chunkUXVFNGJH_js.clampCropValue(cropRight * safeHorizontalScale);
|
|
5367
|
+
const normalizedTop = chunkUXVFNGJH_js.clampCropValue(cropTop * safeVerticalScale);
|
|
5368
|
+
const normalizedBottom = chunkUXVFNGJH_js.clampCropValue(cropBottom * safeVerticalScale);
|
|
5361
5369
|
const remainingWidth = Math.max(0.01, 1 - normalizedLeft - normalizedRight);
|
|
5362
5370
|
const remainingHeight = Math.max(0.01, 1 - normalizedTop - normalizedBottom);
|
|
5363
5371
|
const tx = Math.round(-normalizedLeft / remainingWidth * 1e4) / 100;
|
|
@@ -5386,7 +5394,7 @@ var CROP_SHAPE_CLIP_PATHS = {
|
|
|
5386
5394
|
star: "polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)"
|
|
5387
5395
|
};
|
|
5388
5396
|
function getCropShapeClipPath(element) {
|
|
5389
|
-
if (!
|
|
5397
|
+
if (!chunk2V6BD4JQ_js.isImageLikeElement(element)) {
|
|
5390
5398
|
return void 0;
|
|
5391
5399
|
}
|
|
5392
5400
|
const shape = element.cropShape;
|
|
@@ -5396,7 +5404,7 @@ function getCropShapeClipPath(element) {
|
|
|
5396
5404
|
return CROP_SHAPE_CLIP_PATHS[shape];
|
|
5397
5405
|
}
|
|
5398
5406
|
function isImageTiled(element) {
|
|
5399
|
-
if (!
|
|
5407
|
+
if (!chunk2V6BD4JQ_js.isImageLikeElement(element)) {
|
|
5400
5408
|
return false;
|
|
5401
5409
|
}
|
|
5402
5410
|
return typeof element.tileScaleX === "number" || typeof element.tileScaleY === "number";
|
|
@@ -5426,7 +5434,7 @@ function tileAlignmentToCssPosition(alignment) {
|
|
|
5426
5434
|
}
|
|
5427
5435
|
}
|
|
5428
5436
|
function getImageTilingStyle(element) {
|
|
5429
|
-
if (!
|
|
5437
|
+
if (!chunk2V6BD4JQ_js.isImageLikeElement(element) || !isImageTiled(element)) {
|
|
5430
5438
|
return void 0;
|
|
5431
5439
|
}
|
|
5432
5440
|
const scaleX = typeof element.tileScaleX === "number" ? element.tileScaleX * 100 : 100;
|
|
@@ -5497,9 +5505,9 @@ function parseGradientFillCss(gradFill) {
|
|
|
5497
5505
|
}
|
|
5498
5506
|
const parsed = stops.map((gs) => {
|
|
5499
5507
|
const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
|
|
5500
|
-
const color =
|
|
5501
|
-
const opacity =
|
|
5502
|
-
return { pos, color:
|
|
5508
|
+
const color = chunkUXVFNGJH_js.parseDrawingColor(gs) ?? "#888888";
|
|
5509
|
+
const opacity = chunkUXVFNGJH_js.parseDrawingColorOpacity(gs);
|
|
5510
|
+
return { pos, color: chunkUXVFNGJH_js.colorWithOpacity(color, opacity) };
|
|
5503
5511
|
}).sort((a, b) => a.pos - b.pos);
|
|
5504
5512
|
const stopStrings = parsed.map((s) => `${s.color} ${s.pos.toFixed(1)}%`).join(", ");
|
|
5505
5513
|
const lin = gradFill["a:lin"];
|
|
@@ -5540,8 +5548,8 @@ function parsePatternFillCss(pattFill) {
|
|
|
5540
5548
|
if (!pattFill) {
|
|
5541
5549
|
return void 0;
|
|
5542
5550
|
}
|
|
5543
|
-
const fgColor =
|
|
5544
|
-
const bgColor =
|
|
5551
|
+
const fgColor = chunkUXVFNGJH_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
|
|
5552
|
+
const bgColor = chunkUXVFNGJH_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
|
|
5545
5553
|
const preset = String(pattFill["@_prst"] || "ltDnDiag");
|
|
5546
5554
|
switch (preset) {
|
|
5547
5555
|
case "ltHorz":
|
|
@@ -5652,11 +5660,11 @@ function parseCellBorders(cellProperties) {
|
|
|
5652
5660
|
const prstDash = ln["a:prstDash"];
|
|
5653
5661
|
const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
|
|
5654
5662
|
const cssBorderStyle = ooxmlDashToCss(dashVal);
|
|
5655
|
-
const color =
|
|
5663
|
+
const color = chunkUXVFNGJH_js.parseDrawingColor(ln["a:solidFill"]);
|
|
5656
5664
|
if (color) {
|
|
5657
|
-
const opacity =
|
|
5665
|
+
const opacity = chunkUXVFNGJH_js.parseDrawingColorOpacity(ln["a:solidFill"]);
|
|
5658
5666
|
const key = `${edge.prefix}`;
|
|
5659
|
-
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${
|
|
5667
|
+
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkUXVFNGJH_js.colorWithOpacity(color, opacity)}`;
|
|
5660
5668
|
}
|
|
5661
5669
|
}
|
|
5662
5670
|
return borderStyle;
|
|
@@ -5669,7 +5677,7 @@ function parseCellTextEffects(runProps) {
|
|
|
5669
5677
|
const textShadowParts = [];
|
|
5670
5678
|
const outerShdw = effectLst["a:outerShdw"];
|
|
5671
5679
|
if (outerShdw) {
|
|
5672
|
-
const shdwColor =
|
|
5680
|
+
const shdwColor = chunkUXVFNGJH_js.parseDrawingColor(outerShdw);
|
|
5673
5681
|
if (shdwColor) {
|
|
5674
5682
|
const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
|
|
5675
5683
|
const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
|
|
@@ -5687,7 +5695,7 @@ function parseCellTextEffects(runProps) {
|
|
|
5687
5695
|
}
|
|
5688
5696
|
const glow = effectLst["a:glow"];
|
|
5689
5697
|
if (glow) {
|
|
5690
|
-
const glowColor =
|
|
5698
|
+
const glowColor = chunkUXVFNGJH_js.parseDrawingColor(glow);
|
|
5691
5699
|
if (glowColor) {
|
|
5692
5700
|
const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
|
|
5693
5701
|
const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
|
|
@@ -5766,10 +5774,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
5766
5774
|
if (runProps?.["@_u"] !== void 0) {
|
|
5767
5775
|
cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
|
|
5768
5776
|
}
|
|
5769
|
-
const runColor =
|
|
5777
|
+
const runColor = chunkUXVFNGJH_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkUXVFNGJH_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
|
|
5770
5778
|
if (runColor) {
|
|
5771
|
-
const opacity =
|
|
5772
|
-
cellStyle.color =
|
|
5779
|
+
const opacity = chunkUXVFNGJH_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
|
|
5780
|
+
cellStyle.color = chunkUXVFNGJH_js.colorWithOpacity(runColor, opacity);
|
|
5773
5781
|
}
|
|
5774
5782
|
const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
|
|
5775
5783
|
if (fontFamily) {
|
|
@@ -5779,15 +5787,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
5779
5787
|
cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
|
|
5780
5788
|
}
|
|
5781
5789
|
const cellProperties = cellXml["a:tcPr"];
|
|
5782
|
-
const cellFill =
|
|
5790
|
+
const cellFill = chunkUXVFNGJH_js.parseDrawingColor(
|
|
5783
5791
|
cellProperties?.["a:solidFill"],
|
|
5784
5792
|
schemeColorOverrides
|
|
5785
5793
|
);
|
|
5786
5794
|
if (cellFill) {
|
|
5787
|
-
const opacity =
|
|
5795
|
+
const opacity = chunkUXVFNGJH_js.parseDrawingColorOpacity(
|
|
5788
5796
|
cellProperties?.["a:solidFill"]
|
|
5789
5797
|
);
|
|
5790
|
-
cellStyle.backgroundColor =
|
|
5798
|
+
cellStyle.backgroundColor = chunkUXVFNGJH_js.colorWithOpacity(cellFill, opacity);
|
|
5791
5799
|
} else {
|
|
5792
5800
|
const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
|
|
5793
5801
|
if (gradCss) {
|
|
@@ -5802,16 +5810,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
5802
5810
|
const edgeBorders = parseCellBorders(cellProperties);
|
|
5803
5811
|
Object.assign(cellStyle, edgeBorders);
|
|
5804
5812
|
if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
|
|
5805
|
-
const borderColor =
|
|
5813
|
+
const borderColor = chunkUXVFNGJH_js.parseDrawingColor(
|
|
5806
5814
|
cellProperties?.["a:lnL"]?.["a:solidFill"],
|
|
5807
5815
|
schemeColorOverrides
|
|
5808
|
-
) ||
|
|
5816
|
+
) || chunkUXVFNGJH_js.parseDrawingColor(
|
|
5809
5817
|
cellProperties?.["a:lnR"]?.["a:solidFill"],
|
|
5810
5818
|
schemeColorOverrides
|
|
5811
|
-
) ||
|
|
5819
|
+
) || chunkUXVFNGJH_js.parseDrawingColor(
|
|
5812
5820
|
cellProperties?.["a:lnT"]?.["a:solidFill"],
|
|
5813
5821
|
schemeColorOverrides
|
|
5814
|
-
) ||
|
|
5822
|
+
) || chunkUXVFNGJH_js.parseDrawingColor(
|
|
5815
5823
|
cellProperties?.["a:lnB"]?.["a:solidFill"],
|
|
5816
5824
|
schemeColorOverrides
|
|
5817
5825
|
);
|
|
@@ -5890,10 +5898,10 @@ function resolveTableStyleFillColor(fill, colorScheme) {
|
|
|
5890
5898
|
}
|
|
5891
5899
|
let color = base;
|
|
5892
5900
|
if (fill.tint !== void 0 && fill.tint > 0) {
|
|
5893
|
-
color =
|
|
5901
|
+
color = chunkUXVFNGJH_js.tintColor2(color, fill.tint / 1e5);
|
|
5894
5902
|
}
|
|
5895
5903
|
if (fill.shade !== void 0 && fill.shade > 0) {
|
|
5896
|
-
color =
|
|
5904
|
+
color = chunkUXVFNGJH_js.shadeColor2(color, 1 - fill.shade / 1e5);
|
|
5897
5905
|
}
|
|
5898
5906
|
return color;
|
|
5899
5907
|
}
|
|
@@ -5915,10 +5923,10 @@ function applyTableStyleText(text, colorScheme, style) {
|
|
|
5915
5923
|
if (base) {
|
|
5916
5924
|
let color = base;
|
|
5917
5925
|
if (text.fontTint !== void 0 && text.fontTint > 0) {
|
|
5918
|
-
color =
|
|
5926
|
+
color = chunkUXVFNGJH_js.tintColor2(color, text.fontTint / 1e5);
|
|
5919
5927
|
}
|
|
5920
5928
|
if (text.fontShade !== void 0 && text.fontShade > 0) {
|
|
5921
|
-
color =
|
|
5929
|
+
color = chunkUXVFNGJH_js.shadeColor2(color, 1 - text.fontShade / 1e5);
|
|
5922
5930
|
}
|
|
5923
5931
|
style.color = color;
|
|
5924
5932
|
applied = true;
|
|
@@ -6200,9 +6208,9 @@ function cellStyleToCss(style) {
|
|
|
6200
6208
|
if (style.gradientFillCss) {
|
|
6201
6209
|
css.background = style.gradientFillCss;
|
|
6202
6210
|
} else if (style.fillMode === "pattern" && style.patternFillPreset) {
|
|
6203
|
-
const fg =
|
|
6204
|
-
const bg =
|
|
6205
|
-
const svgPattern =
|
|
6211
|
+
const fg = chunkUXVFNGJH_js.normalizeHexColor(style.patternFillForeground, "#000000");
|
|
6212
|
+
const bg = chunkUXVFNGJH_js.normalizeHexColor(style.patternFillBackground, "#ffffff");
|
|
6213
|
+
const svgPattern = chunkUXVFNGJH_js.getPatternSvg(style.patternFillPreset, fg, bg);
|
|
6206
6214
|
if (svgPattern) {
|
|
6207
6215
|
const encoded = encodeURIComponent(svgPattern);
|
|
6208
6216
|
css.backgroundImage = `url("data:image/svg+xml,${encoded}")`;
|
|
@@ -6271,7 +6279,7 @@ function cellStyleToCss(style) {
|
|
|
6271
6279
|
if (edge.width || edge.color) {
|
|
6272
6280
|
const w = edge.width ?? 1;
|
|
6273
6281
|
const c = edge.color ?? style.borderColor ?? "#000000";
|
|
6274
|
-
const s =
|
|
6282
|
+
const s = chunkUXVFNGJH_js.ooxmlDashToCssBorderStyle(edge.dash);
|
|
6275
6283
|
css[edge.prefix] = `${w}px ${s} ${c}`;
|
|
6276
6284
|
}
|
|
6277
6285
|
}
|
|
@@ -6313,7 +6321,7 @@ function TableResizeOverlay({
|
|
|
6313
6321
|
const containerRef = React3.useRef(null);
|
|
6314
6322
|
const [rowBounds, setRowBounds] = React3.useState([]);
|
|
6315
6323
|
const dragRef = React3.useRef(null);
|
|
6316
|
-
const colBoundaries = React3.useMemo(() =>
|
|
6324
|
+
const colBoundaries = React3.useMemo(() => chunkUXVFNGJH_js.computeColumnBoundaries(columnWidths), [columnWidths]);
|
|
6317
6325
|
const measureRows = React3.useCallback(() => {
|
|
6318
6326
|
const container = containerRef.current;
|
|
6319
6327
|
if (!container) {
|
|
@@ -6360,11 +6368,11 @@ function TableResizeOverlay({
|
|
|
6360
6368
|
const rect = containerRef.current.getBoundingClientRect();
|
|
6361
6369
|
if (drag.type === "col" && drag.initialWidths && onResizeColumns) {
|
|
6362
6370
|
const deltaProp = (e.clientX - drag.startPos) / rect.width;
|
|
6363
|
-
onResizeColumns(
|
|
6371
|
+
onResizeColumns(chunkUXVFNGJH_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
|
|
6364
6372
|
} else if (drag.type === "row" && onResizeRow) {
|
|
6365
6373
|
const deltaY = e.clientY - drag.startPos;
|
|
6366
|
-
const newHeight =
|
|
6367
|
-
drag.initialRowHeight ??
|
|
6374
|
+
const newHeight = chunkUXVFNGJH_js.computeResizedRowHeight(
|
|
6375
|
+
drag.initialRowHeight ?? chunkUXVFNGJH_js.DEFAULT_ROW_HEIGHT,
|
|
6368
6376
|
deltaY
|
|
6369
6377
|
);
|
|
6370
6378
|
onResizeRow(drag.index, newHeight);
|
|
@@ -6402,7 +6410,7 @@ function TableResizeOverlay({
|
|
|
6402
6410
|
e.stopPropagation();
|
|
6403
6411
|
const table = containerRef.current?.querySelector("table");
|
|
6404
6412
|
const tr = table?.querySelectorAll("tbody > tr")[index];
|
|
6405
|
-
const actualHeight = tr?.offsetHeight ??
|
|
6413
|
+
const actualHeight = tr?.offsetHeight ?? chunkUXVFNGJH_js.DEFAULT_ROW_HEIGHT;
|
|
6406
6414
|
document.body.style.cursor = "row-resize";
|
|
6407
6415
|
document.body.style.userSelect = "none";
|
|
6408
6416
|
dragRef.current = {
|
|
@@ -6448,7 +6456,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
6448
6456
|
}
|
|
6449
6457
|
const first = selectedCell.selectedCells[0];
|
|
6450
6458
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
6451
|
-
return
|
|
6459
|
+
return chunkUXVFNGJH_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
|
|
6452
6460
|
})();
|
|
6453
6461
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6454
6462
|
TableResizeOverlay,
|
|
@@ -6481,7 +6489,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
6481
6489
|
return null;
|
|
6482
6490
|
}
|
|
6483
6491
|
const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
|
|
6484
|
-
const isInMultiSelection =
|
|
6492
|
+
const isInMultiSelection = chunkUXVFNGJH_js.isCellInRect(rowIndex, cellIndex, selectionRect);
|
|
6485
6493
|
const isCellEditing = isCellSelected && selectedCell?.isEditing;
|
|
6486
6494
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6487
6495
|
"td",
|
|
@@ -6504,7 +6512,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
6504
6512
|
}
|
|
6505
6513
|
event.stopPropagation();
|
|
6506
6514
|
if (event.shiftKey && selectedCell) {
|
|
6507
|
-
const rect =
|
|
6515
|
+
const rect = chunkUXVFNGJH_js.computeSelectionRect(
|
|
6508
6516
|
selectedCell.rowIndex,
|
|
6509
6517
|
selectedCell.columnIndex,
|
|
6510
6518
|
rowIndex,
|
|
@@ -6514,7 +6522,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
6514
6522
|
options?.onSelectCell?.({
|
|
6515
6523
|
rowIndex: selectedCell.rowIndex,
|
|
6516
6524
|
columnIndex: selectedCell.columnIndex,
|
|
6517
|
-
selectedCells:
|
|
6525
|
+
selectedCells: chunkUXVFNGJH_js.rectToCells(rect)
|
|
6518
6526
|
});
|
|
6519
6527
|
} else {
|
|
6520
6528
|
options?.onSelectCell?.({
|
|
@@ -6588,7 +6596,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
6588
6596
|
}
|
|
6589
6597
|
const first = selectedCell.selectedCells[0];
|
|
6590
6598
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
6591
|
-
return
|
|
6599
|
+
return chunkUXVFNGJH_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
|
|
6592
6600
|
})();
|
|
6593
6601
|
const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
|
|
6594
6602
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -6653,7 +6661,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
6653
6661
|
"border px-1 py-0.5 align-top",
|
|
6654
6662
|
isEditable2 && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
|
|
6655
6663
|
selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
|
|
6656
|
-
|
|
6664
|
+
chunkUXVFNGJH_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
|
|
6657
6665
|
),
|
|
6658
6666
|
colSpan,
|
|
6659
6667
|
rowSpan: rSpan,
|
|
@@ -6664,7 +6672,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
6664
6672
|
}
|
|
6665
6673
|
event.stopPropagation();
|
|
6666
6674
|
if (event.shiftKey && selectedCell && tableEl.tableData) {
|
|
6667
|
-
const rect =
|
|
6675
|
+
const rect = chunkUXVFNGJH_js.computeSelectionRect(
|
|
6668
6676
|
selectedCell.rowIndex,
|
|
6669
6677
|
selectedCell.columnIndex,
|
|
6670
6678
|
rowIndex,
|
|
@@ -6674,7 +6682,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
6674
6682
|
options?.onSelectCell?.({
|
|
6675
6683
|
rowIndex: selectedCell.rowIndex,
|
|
6676
6684
|
columnIndex: selectedCell.columnIndex,
|
|
6677
|
-
selectedCells:
|
|
6685
|
+
selectedCells: chunkUXVFNGJH_js.rectToCells(rect)
|
|
6678
6686
|
});
|
|
6679
6687
|
} else {
|
|
6680
6688
|
options?.onSelectCell?.({
|
|
@@ -6726,24 +6734,24 @@ function renderTableElement(element, textStyle, options) {
|
|
|
6726
6734
|
}
|
|
6727
6735
|
var LEGEND_ITEM_WIDTH = 80;
|
|
6728
6736
|
function partAttrs(part) {
|
|
6729
|
-
return part ?
|
|
6737
|
+
return part ? chunkUXVFNGJH_js.chartPartToAttrs(part) : void 0;
|
|
6730
6738
|
}
|
|
6731
6739
|
function resolveReactPalette(chartData) {
|
|
6732
6740
|
if (chartData.colorPalette && chartData.colorPalette.length > 0) {
|
|
6733
6741
|
return chartData.colorPalette;
|
|
6734
6742
|
}
|
|
6735
|
-
return [...
|
|
6743
|
+
return [...chunkUXVFNGJH_js.getChartStylePalette(chartData.style?.styleId)];
|
|
6736
6744
|
}
|
|
6737
6745
|
function buildReactChartViewModel(element) {
|
|
6738
6746
|
if (element.type !== "chart" || !element.chartData) {
|
|
6739
|
-
return
|
|
6747
|
+
return chunkUXVFNGJH_js.buildChartViewModel(element);
|
|
6740
6748
|
}
|
|
6741
6749
|
const palette = resolveReactPalette(element.chartData);
|
|
6742
6750
|
const themedElement = {
|
|
6743
6751
|
...element,
|
|
6744
6752
|
chartData: { ...element.chartData, colorPalette: palette }
|
|
6745
6753
|
};
|
|
6746
|
-
return
|
|
6754
|
+
return chunkUXVFNGJH_js.buildChartViewModel(themedElement);
|
|
6747
6755
|
}
|
|
6748
6756
|
function renderPrimitive(prim, key) {
|
|
6749
6757
|
switch (prim.kind) {
|
|
@@ -7132,7 +7140,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7132
7140
|
const unmatchedRows = [];
|
|
7133
7141
|
categories.forEach((cat, i) => {
|
|
7134
7142
|
const value = values[i] ?? 0;
|
|
7135
|
-
const code =
|
|
7143
|
+
const code = chunkUXVFNGJH_js.resolveRegionCode(cat);
|
|
7136
7144
|
if (code) {
|
|
7137
7145
|
regionValueMap.set(code, { value, label: cat });
|
|
7138
7146
|
} else {
|
|
@@ -7170,8 +7178,8 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7170
7178
|
let fill = "#e2e8f0";
|
|
7171
7179
|
let dataLabel = null;
|
|
7172
7180
|
if (entry) {
|
|
7173
|
-
const t =
|
|
7174
|
-
fill =
|
|
7181
|
+
const t = chunkUXVFNGJH_js.normalizeValue(entry.value, minVal, maxVal);
|
|
7182
|
+
fill = chunkUXVFNGJH_js.sequentialColorScale(t);
|
|
7175
7183
|
dataLabel = /* @__PURE__ */ jsxRuntime.jsx(
|
|
7176
7184
|
"text",
|
|
7177
7185
|
{
|
|
@@ -7182,7 +7190,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7182
7190
|
fontWeight: 600,
|
|
7183
7191
|
fill: "#1e293b",
|
|
7184
7192
|
style: { pointerEvents: "none" },
|
|
7185
|
-
children:
|
|
7193
|
+
children: chunkUXVFNGJH_js.formatAxisValue(entry.value)
|
|
7186
7194
|
},
|
|
7187
7195
|
`${element.id}-map-dl-${region.code}`
|
|
7188
7196
|
);
|
|
@@ -7200,7 +7208,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7200
7208
|
opacity: 0.9,
|
|
7201
7209
|
children: /* @__PURE__ */ jsxRuntime.jsxs("title", { children: [
|
|
7202
7210
|
region.name,
|
|
7203
|
-
entry ? `: ${
|
|
7211
|
+
entry ? `: ${chunkUXVFNGJH_js.formatAxisValue(entry.value)}` : ""
|
|
7204
7212
|
] })
|
|
7205
7213
|
}
|
|
7206
7214
|
),
|
|
@@ -7238,7 +7246,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7238
7246
|
fontSize: 7,
|
|
7239
7247
|
fill: "#64748b",
|
|
7240
7248
|
textAnchor: "middle",
|
|
7241
|
-
children:
|
|
7249
|
+
children: chunkUXVFNGJH_js.formatAxisValue(minVal)
|
|
7242
7250
|
},
|
|
7243
7251
|
`${element.id}-map-legend-min`
|
|
7244
7252
|
),
|
|
@@ -7250,7 +7258,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7250
7258
|
fontSize: 7,
|
|
7251
7259
|
fill: "#64748b",
|
|
7252
7260
|
textAnchor: "middle",
|
|
7253
|
-
children:
|
|
7261
|
+
children: chunkUXVFNGJH_js.formatAxisValue(maxVal)
|
|
7254
7262
|
},
|
|
7255
7263
|
`${element.id}-map-legend-max`
|
|
7256
7264
|
)
|
|
@@ -7316,7 +7324,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7316
7324
|
y,
|
|
7317
7325
|
fontSize,
|
|
7318
7326
|
fill: "#475569",
|
|
7319
|
-
children:
|
|
7327
|
+
children: chunkUXVFNGJH_js.formatAxisValue(row.value)
|
|
7320
7328
|
},
|
|
7321
7329
|
`${element.id}-map-ft-val-${i}`
|
|
7322
7330
|
)
|
|
@@ -7387,7 +7395,7 @@ function renderStackedBarChart(element, _chartData, _categoryLabels) {
|
|
|
7387
7395
|
|
|
7388
7396
|
// src/viewer/utils/chart-overlay-utils.ts
|
|
7389
7397
|
function sColor(series, idx) {
|
|
7390
|
-
return
|
|
7398
|
+
return chunkUXVFNGJH_js.seriesColor(series, idx);
|
|
7391
7399
|
}
|
|
7392
7400
|
function valToY(val, range, topY, bottomY) {
|
|
7393
7401
|
const usable = bottomY - topY;
|
|
@@ -7882,7 +7890,7 @@ function renderLegend(id, style, series, layout, colorPalette) {
|
|
|
7882
7890
|
width: 10,
|
|
7883
7891
|
height: 10,
|
|
7884
7892
|
rx: 2,
|
|
7885
|
-
fill:
|
|
7893
|
+
fill: chunkUXVFNGJH_js.seriesColor(s, i, style?.styleId, colorPalette)
|
|
7886
7894
|
},
|
|
7887
7895
|
`${id}-leg-r-${i}`
|
|
7888
7896
|
)
|
|
@@ -7906,7 +7914,7 @@ function renderLegend(id, style, series, layout, colorPalette) {
|
|
|
7906
7914
|
width: 10,
|
|
7907
7915
|
height: 10,
|
|
7908
7916
|
rx: 2,
|
|
7909
|
-
fill:
|
|
7917
|
+
fill: chunkUXVFNGJH_js.seriesColor(s, i, style?.styleId, colorPalette)
|
|
7910
7918
|
}
|
|
7911
7919
|
),
|
|
7912
7920
|
/* @__PURE__ */ jsxRuntime.jsx("text", { x: x + 14, y: cy + 8, fontSize: 9, fill: "#475569", children: s.name || `Series ${i + 1}` })
|
|
@@ -7919,9 +7927,9 @@ function renderGridlines(id, style, range, layout) {
|
|
|
7919
7927
|
}
|
|
7920
7928
|
const lines = [];
|
|
7921
7929
|
if (range.logScale && range.logBase) {
|
|
7922
|
-
const ticks =
|
|
7930
|
+
const ticks = chunkUXVFNGJH_js.generateLogTicks(range);
|
|
7923
7931
|
ticks.forEach((tickVal, i) => {
|
|
7924
|
-
const y =
|
|
7932
|
+
const y = chunkUXVFNGJH_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
|
|
7925
7933
|
lines.push(
|
|
7926
7934
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7927
7935
|
"line",
|
|
@@ -7942,7 +7950,7 @@ function renderGridlines(id, style, range, layout) {
|
|
|
7942
7950
|
const steps = 4;
|
|
7943
7951
|
for (let i = 0; i <= steps; i++) {
|
|
7944
7952
|
const val = range.min + range.span * i / steps;
|
|
7945
|
-
const y =
|
|
7953
|
+
const y = chunkUXVFNGJH_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
7946
7954
|
lines.push(
|
|
7947
7955
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7948
7956
|
"line",
|
|
@@ -7966,9 +7974,9 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
7966
7974
|
const labels = [];
|
|
7967
7975
|
const hasDisplayUnits = Boolean(axisFormatting?.displayUnits);
|
|
7968
7976
|
if (range.logScale && range.logBase) {
|
|
7969
|
-
const ticks =
|
|
7977
|
+
const ticks = chunkUXVFNGJH_js.generateLogTicks(range);
|
|
7970
7978
|
ticks.forEach((tickVal, i) => {
|
|
7971
|
-
const y =
|
|
7979
|
+
const y = chunkUXVFNGJH_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
|
|
7972
7980
|
labels.push(
|
|
7973
7981
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7974
7982
|
"text",
|
|
@@ -7978,7 +7986,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
7978
7986
|
textAnchor: "end",
|
|
7979
7987
|
fontSize: 8,
|
|
7980
7988
|
fill: "#64748b",
|
|
7981
|
-
children: hasDisplayUnits ?
|
|
7989
|
+
children: hasDisplayUnits ? chunkUXVFNGJH_js.formatAxisValueWithUnits(tickVal, axisFormatting) : chunkUXVFNGJH_js.formatAxisValue(tickVal)
|
|
7982
7990
|
},
|
|
7983
7991
|
`${id}-vaxis-log-${i}`
|
|
7984
7992
|
)
|
|
@@ -7988,7 +7996,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
7988
7996
|
const steps = 4;
|
|
7989
7997
|
for (let i = 0; i <= steps; i++) {
|
|
7990
7998
|
const val = range.min + range.span * i / steps;
|
|
7991
|
-
const y =
|
|
7999
|
+
const y = chunkUXVFNGJH_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
7992
8000
|
labels.push(
|
|
7993
8001
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7994
8002
|
"text",
|
|
@@ -7998,7 +8006,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
7998
8006
|
textAnchor: "end",
|
|
7999
8007
|
fontSize: 8,
|
|
8000
8008
|
fill: "#64748b",
|
|
8001
|
-
children: hasDisplayUnits ?
|
|
8009
|
+
children: hasDisplayUnits ? chunkUXVFNGJH_js.formatAxisValueWithUnits(val, axisFormatting) : chunkUXVFNGJH_js.formatAxisValue(val)
|
|
8002
8010
|
},
|
|
8003
8011
|
`${id}-vaxis-${i}`
|
|
8004
8012
|
)
|
|
@@ -8006,7 +8014,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
8006
8014
|
}
|
|
8007
8015
|
}
|
|
8008
8016
|
if (hasDisplayUnits) {
|
|
8009
|
-
const unitLabel =
|
|
8017
|
+
const unitLabel = chunkUXVFNGJH_js.getDisplayUnitLabel(
|
|
8010
8018
|
axisFormatting.displayUnits,
|
|
8011
8019
|
axisFormatting.displayUnitsLabel
|
|
8012
8020
|
);
|
|
@@ -8081,7 +8089,7 @@ function renderZeroLine(id, range, layout) {
|
|
|
8081
8089
|
if (range.min >= 0) {
|
|
8082
8090
|
return null;
|
|
8083
8091
|
}
|
|
8084
|
-
const y =
|
|
8092
|
+
const y = chunkUXVFNGJH_js.valueToY(0, range, layout.plotTop, layout.plotBottom);
|
|
8085
8093
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
8086
8094
|
"line",
|
|
8087
8095
|
{
|
|
@@ -8105,7 +8113,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
8105
8113
|
const hasDisplayUnits = Boolean(axisFormatting?.displayUnits);
|
|
8106
8114
|
for (let i = 0; i <= steps; i++) {
|
|
8107
8115
|
const val = range.min + range.span * i / steps;
|
|
8108
|
-
const y =
|
|
8116
|
+
const y = chunkUXVFNGJH_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
8109
8117
|
labels.push(
|
|
8110
8118
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8111
8119
|
"text",
|
|
@@ -8117,7 +8125,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
8117
8125
|
fontFamily,
|
|
8118
8126
|
fontWeight,
|
|
8119
8127
|
fill: fontColor,
|
|
8120
|
-
children: hasDisplayUnits ?
|
|
8128
|
+
children: hasDisplayUnits ? chunkUXVFNGJH_js.formatAxisValueWithUnits(val, axisFormatting) : chunkUXVFNGJH_js.formatAxisValue(val)
|
|
8121
8129
|
},
|
|
8122
8130
|
`${id}-sec-vaxis-${i}`
|
|
8123
8131
|
)
|
|
@@ -8141,7 +8149,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
8141
8149
|
);
|
|
8142
8150
|
}
|
|
8143
8151
|
if (hasDisplayUnits) {
|
|
8144
|
-
const unitLabel =
|
|
8152
|
+
const unitLabel = chunkUXVFNGJH_js.getDisplayUnitLabel(
|
|
8145
8153
|
axisFormatting.displayUnits,
|
|
8146
8154
|
axisFormatting.displayUnitsLabel
|
|
8147
8155
|
);
|
|
@@ -8172,7 +8180,7 @@ function renderSecondaryAxisTicks(id, range, layout) {
|
|
|
8172
8180
|
const ticks = [];
|
|
8173
8181
|
for (let i = 0; i <= steps; i++) {
|
|
8174
8182
|
const val = range.min + range.span * i / steps;
|
|
8175
|
-
const y =
|
|
8183
|
+
const y = chunkUXVFNGJH_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
8176
8184
|
ticks.push(
|
|
8177
8185
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8178
8186
|
"line",
|
|
@@ -8199,7 +8207,7 @@ function renderSecondaryGridlines(id, range, layout, axisFormatting) {
|
|
|
8199
8207
|
const gridColor = axisFormatting.majorGridlinesSpPr?.strokeColor ?? "#e2e8f0";
|
|
8200
8208
|
for (let i = 0; i <= steps; i++) {
|
|
8201
8209
|
const val = range.min + range.span * i / steps;
|
|
8202
|
-
const y =
|
|
8210
|
+
const y = chunkUXVFNGJH_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
8203
8211
|
lines.push(
|
|
8204
8212
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8205
8213
|
"line",
|
|
@@ -8360,7 +8368,7 @@ function renderChartDataTable(elementId, chartData, svgWidth) {
|
|
|
8360
8368
|
width: 8,
|
|
8361
8369
|
height: 8,
|
|
8362
8370
|
borderRadius: 2,
|
|
8363
|
-
backgroundColor:
|
|
8371
|
+
backgroundColor: chunkUXVFNGJH_js.seriesColor(
|
|
8364
8372
|
s,
|
|
8365
8373
|
si,
|
|
8366
8374
|
chartData.style?.styleId,
|
|
@@ -8399,8 +8407,8 @@ function renderChartDataTable(elementId, chartData, svgWidth) {
|
|
|
8399
8407
|
function renderStockChart(element, chartData, categoryLabels) {
|
|
8400
8408
|
const style = chartData.style;
|
|
8401
8409
|
const legendPos = style?.legendPosition || "b";
|
|
8402
|
-
const range =
|
|
8403
|
-
const layout =
|
|
8410
|
+
const range = chunkUXVFNGJH_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
8411
|
+
const layout = chunkUXVFNGJH_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
8404
8412
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
8405
8413
|
const barGroupWidth = layout.plotWidth / catCount;
|
|
8406
8414
|
const candleWidth = barGroupWidth * 0.5;
|
|
@@ -8421,10 +8429,10 @@ function renderStockChart(element, chartData, categoryLabels) {
|
|
|
8421
8429
|
const close = closeSeries.values[ci] ?? high;
|
|
8422
8430
|
const isUp = close >= open;
|
|
8423
8431
|
const cx = layout.plotLeft + barGroupWidth * ci + barGroupWidth / 2;
|
|
8424
|
-
const highY =
|
|
8425
|
-
const lowY =
|
|
8426
|
-
const openY =
|
|
8427
|
-
const closeY =
|
|
8432
|
+
const highY = chunkUXVFNGJH_js.valueToY(high, range, layout.plotTop, layout.plotBottom);
|
|
8433
|
+
const lowY = chunkUXVFNGJH_js.valueToY(low, range, layout.plotTop, layout.plotBottom);
|
|
8434
|
+
const openY = chunkUXVFNGJH_js.valueToY(open, range, layout.plotTop, layout.plotBottom);
|
|
8435
|
+
const closeY = chunkUXVFNGJH_js.valueToY(close, range, layout.plotTop, layout.plotBottom);
|
|
8428
8436
|
elements.push(
|
|
8429
8437
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8430
8438
|
"line",
|
|
@@ -8467,7 +8475,7 @@ function renderStockChart(element, chartData, categoryLabels) {
|
|
|
8467
8475
|
textAnchor: "middle",
|
|
8468
8476
|
fontSize: 7,
|
|
8469
8477
|
fill: "#334155",
|
|
8470
|
-
children:
|
|
8478
|
+
children: chunkUXVFNGJH_js.formatAxisValue(close)
|
|
8471
8479
|
},
|
|
8472
8480
|
`${element.id}-stock-dl-${ci}`
|
|
8473
8481
|
)
|
|
@@ -8509,7 +8517,7 @@ function FailedToLoad() {
|
|
|
8509
8517
|
var LazySurfaceChart3DScene = React3__default.default.lazy(
|
|
8510
8518
|
async () => {
|
|
8511
8519
|
try {
|
|
8512
|
-
return await import('./SurfaceChart3DScene-
|
|
8520
|
+
return await import('./SurfaceChart3DScene-4OMD7LWR.js');
|
|
8513
8521
|
} catch {
|
|
8514
8522
|
return { default: FailedToLoad };
|
|
8515
8523
|
}
|
|
@@ -8533,7 +8541,7 @@ var SurfaceChart3DErrorBoundary = class extends React3__default.default.Componen
|
|
|
8533
8541
|
function buildSurfaceData(chartData, categoryLabels) {
|
|
8534
8542
|
const rows = chartData.series.length;
|
|
8535
8543
|
const cols = Math.max(categoryLabels.length, 1);
|
|
8536
|
-
const range =
|
|
8544
|
+
const range = chunkUXVFNGJH_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
8537
8545
|
const heightMap = new Float32Array(rows * cols);
|
|
8538
8546
|
const colorMap = new Float32Array(rows * cols * 3);
|
|
8539
8547
|
for (let r = 0; r < rows; r++) {
|
|
@@ -8653,8 +8661,8 @@ function darkenRgb(r, g, b, factor) {
|
|
|
8653
8661
|
function renderIsometricSurfaceChart(element, chartData, categoryLabels) {
|
|
8654
8662
|
const style = chartData.style;
|
|
8655
8663
|
const legendPos = style?.legendPosition || "b";
|
|
8656
|
-
const layout =
|
|
8657
|
-
const range =
|
|
8664
|
+
const layout = chunkUXVFNGJH_js.computeLayout(element.width, element.height, style, false, legendPos);
|
|
8665
|
+
const range = chunkUXVFNGJH_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
8658
8666
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
8659
8667
|
const seriesCount = chartData.series.length;
|
|
8660
8668
|
const cols = catCount - 1;
|
|
@@ -8744,8 +8752,8 @@ function renderIsometricSurfaceChart(element, chartData, categoryLabels) {
|
|
|
8744
8752
|
function renderFlatSurfaceChart(element, chartData, categoryLabels) {
|
|
8745
8753
|
const style = chartData.style;
|
|
8746
8754
|
const legendPos = style?.legendPosition || "b";
|
|
8747
|
-
const layout =
|
|
8748
|
-
const range =
|
|
8755
|
+
const layout = chunkUXVFNGJH_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
8756
|
+
const range = chunkUXVFNGJH_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
8749
8757
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
8750
8758
|
const seriesCount = chartData.series.length;
|
|
8751
8759
|
const cellW = layout.plotWidth / Math.max(catCount - 1, 1);
|
|
@@ -8808,7 +8816,7 @@ function renderSurfaceChart(element, chartData, categoryLabels) {
|
|
|
8808
8816
|
function renderTreemapChart(element, chartData, categoryLabels) {
|
|
8809
8817
|
const style = chartData.style;
|
|
8810
8818
|
const legendPos = style?.legendPosition || "b";
|
|
8811
|
-
const layout =
|
|
8819
|
+
const layout = chunkUXVFNGJH_js.computeLayout(element.width, element.height, style, false, legendPos);
|
|
8812
8820
|
const allValues = chartData.series.flatMap((s) => s.values);
|
|
8813
8821
|
const totalAbs = allValues.reduce((sum, v) => sum + Math.abs(v), 0) || 1;
|
|
8814
8822
|
const rects = [];
|
|
@@ -8831,7 +8839,7 @@ function renderTreemapChart(element, chartData, categoryLabels) {
|
|
|
8831
8839
|
y: curY,
|
|
8832
8840
|
width: Math.max(w - 1, 1),
|
|
8833
8841
|
height: Math.max(h - 1, 1),
|
|
8834
|
-
fill:
|
|
8842
|
+
fill: chunkUXVFNGJH_js.paletteColor(item.index, chartData.style?.styleId, chartData.colorPalette),
|
|
8835
8843
|
rx: 2,
|
|
8836
8844
|
opacity: 0.85
|
|
8837
8845
|
},
|
|
@@ -8884,8 +8892,8 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
8884
8892
|
const style = chartData.style;
|
|
8885
8893
|
const legendPos = style?.legendPosition || "b";
|
|
8886
8894
|
const values = chartData.series[0]?.values ?? [];
|
|
8887
|
-
const range =
|
|
8888
|
-
const layout =
|
|
8895
|
+
const range = chunkUXVFNGJH_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
8896
|
+
const layout = chunkUXVFNGJH_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
8889
8897
|
const catCount = Math.max(categoryLabels.length, values.length, 1);
|
|
8890
8898
|
const barWidth = layout.plotWidth / catCount * 0.6;
|
|
8891
8899
|
const gap = layout.plotWidth / catCount * 0.2;
|
|
@@ -8896,8 +8904,8 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
8896
8904
|
const isLast = i === values.length - 1;
|
|
8897
8905
|
const startVal = isLast ? 0 : runningTotal;
|
|
8898
8906
|
const endVal = isLast ? runningTotal + val : runningTotal + val;
|
|
8899
|
-
const barStartY =
|
|
8900
|
-
const barEndY =
|
|
8907
|
+
const barStartY = chunkUXVFNGJH_js.valueToY(startVal, range, layout.plotTop, layout.plotBottom);
|
|
8908
|
+
const barEndY = chunkUXVFNGJH_js.valueToY(endVal, range, layout.plotTop, layout.plotBottom);
|
|
8901
8909
|
const x = layout.plotLeft + layout.plotWidth / catCount * i + gap;
|
|
8902
8910
|
const y = Math.min(barStartY, barEndY);
|
|
8903
8911
|
const h = Math.max(Math.abs(barEndY - barStartY), 1);
|
|
@@ -8926,7 +8934,7 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
8926
8934
|
textAnchor: "middle",
|
|
8927
8935
|
fontSize: 7,
|
|
8928
8936
|
fill: "#334155",
|
|
8929
|
-
children:
|
|
8937
|
+
children: chunkUXVFNGJH_js.formatAxisValue(isLast ? endVal : val)
|
|
8930
8938
|
},
|
|
8931
8939
|
`${element.id}-wf-dl-${i}`
|
|
8932
8940
|
)
|
|
@@ -8974,18 +8982,18 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
8974
8982
|
function renderComboChart(element, chartData, categoryLabels) {
|
|
8975
8983
|
const style = chartData.style;
|
|
8976
8984
|
const legendPos = style?.legendPosition || "b";
|
|
8977
|
-
const layoutOpts =
|
|
8985
|
+
const layoutOpts = chunkUXVFNGJH_js.computeLayoutOptions(
|
|
8978
8986
|
chartData.axes,
|
|
8979
8987
|
chartData.dataTable,
|
|
8980
8988
|
chartData.series.length
|
|
8981
8989
|
);
|
|
8982
|
-
const layout =
|
|
8983
|
-
const { primary, secondary } =
|
|
8990
|
+
const layout = chunkUXVFNGJH_js.computeLayout(element.width, element.height, style, true, legendPos, layoutOpts);
|
|
8991
|
+
const { primary, secondary } = chunkUXVFNGJH_js.splitSeriesByAxis(chartData.series, chartData.axes);
|
|
8984
8992
|
const primarySeries = primary.length > 0 ? primary.map((e) => e.series) : chartData.series;
|
|
8985
8993
|
const secondarySeries = secondary.map((e) => e.series);
|
|
8986
|
-
const range =
|
|
8987
|
-
const secondaryRange = secondarySeries.length > 0 ?
|
|
8988
|
-
const secondaryAxisFmt =
|
|
8994
|
+
const range = chunkUXVFNGJH_js.computeValueRangeForChart(primarySeries, chartData.axes);
|
|
8995
|
+
const secondaryRange = secondarySeries.length > 0 ? chunkUXVFNGJH_js.computeValueRange(secondarySeries) : void 0;
|
|
8996
|
+
const secondaryAxisFmt = chunkUXVFNGJH_js.getSecondaryValueAxis(chartData.axes);
|
|
8989
8997
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
8990
8998
|
const barSeriesCount = 1;
|
|
8991
8999
|
const barGroupWidth = layout.plotWidth / catCount;
|
|
@@ -9001,8 +9009,8 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
9001
9009
|
const barRange = isBarSecondary && secondaryRange ? secondaryRange : range;
|
|
9002
9010
|
barSeries.values.forEach((val, vi) => {
|
|
9003
9011
|
const x = layout.plotLeft + barGroupWidth * vi + barOffset;
|
|
9004
|
-
const zeroY =
|
|
9005
|
-
const valY =
|
|
9012
|
+
const zeroY = chunkUXVFNGJH_js.valueToY(0, barRange, layout.plotTop, layout.plotBottom);
|
|
9013
|
+
const valY = chunkUXVFNGJH_js.valueToY(val, barRange, layout.plotTop, layout.plotBottom);
|
|
9006
9014
|
const y = Math.min(zeroY, valY);
|
|
9007
9015
|
const h = Math.max(Math.abs(zeroY - valY), 1);
|
|
9008
9016
|
barElements.push(
|
|
@@ -9013,7 +9021,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
9013
9021
|
y,
|
|
9014
9022
|
width: barWidth,
|
|
9015
9023
|
height: h,
|
|
9016
|
-
fill:
|
|
9024
|
+
fill: chunkUXVFNGJH_js.seriesColor(barSeries, 0, chartData.style?.styleId, chartData.colorPalette),
|
|
9017
9025
|
rx: 1
|
|
9018
9026
|
},
|
|
9019
9027
|
`${element.id}-combo-bar-${vi}`
|
|
@@ -9029,7 +9037,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
9029
9037
|
textAnchor: "middle",
|
|
9030
9038
|
fontSize: 7,
|
|
9031
9039
|
fill: "#334155",
|
|
9032
|
-
children:
|
|
9040
|
+
children: chunkUXVFNGJH_js.formatAxisValue(val)
|
|
9033
9041
|
},
|
|
9034
9042
|
`${element.id}-combo-bar-dl-${vi}`
|
|
9035
9043
|
)
|
|
@@ -9046,10 +9054,10 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
9046
9054
|
const activeRange = isSecondary && secondaryRange ? secondaryRange : range;
|
|
9047
9055
|
const points = series.values.map((val, vi) => {
|
|
9048
9056
|
const x = layout.plotLeft + barGroupWidth * vi + barGroupWidth / 2;
|
|
9049
|
-
const y =
|
|
9057
|
+
const y = chunkUXVFNGJH_js.valueToY(val, activeRange, layout.plotTop, layout.plotBottom);
|
|
9050
9058
|
return { x, y, val };
|
|
9051
9059
|
});
|
|
9052
|
-
const c =
|
|
9060
|
+
const c = chunkUXVFNGJH_js.seriesColor(series, seriesIdx, chartData.style?.styleId, chartData.colorPalette);
|
|
9053
9061
|
lineElements.push(
|
|
9054
9062
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9055
9063
|
"polyline",
|
|
@@ -9076,7 +9084,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
9076
9084
|
textAnchor: "middle",
|
|
9077
9085
|
fontSize: 7,
|
|
9078
9086
|
fill: "#334155",
|
|
9079
|
-
children:
|
|
9087
|
+
children: chunkUXVFNGJH_js.formatAxisValue(p.val)
|
|
9080
9088
|
},
|
|
9081
9089
|
`${element.id}-combo-line-dl-${si}-${vi}`
|
|
9082
9090
|
)
|
|
@@ -10830,14 +10838,14 @@ function buildNotesPdf(pages) {
|
|
|
10830
10838
|
notes: page.notes,
|
|
10831
10839
|
slideNumber: page.slideNumber
|
|
10832
10840
|
}));
|
|
10833
|
-
const bytes =
|
|
10841
|
+
const bytes = chunkUXVFNGJH_js.buildNotesPdfBytes(images, meta);
|
|
10834
10842
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
10835
10843
|
return URL.createObjectURL(blob);
|
|
10836
10844
|
}
|
|
10837
10845
|
|
|
10838
10846
|
// src/viewer/utils/pdf-builder-slides.ts
|
|
10839
10847
|
function buildPdfFromImageData(images) {
|
|
10840
|
-
const bytes =
|
|
10848
|
+
const bytes = chunkUXVFNGJH_js.buildSlidesPdfBytes(images);
|
|
10841
10849
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
10842
10850
|
return URL.createObjectURL(blob);
|
|
10843
10851
|
}
|
|
@@ -10846,7 +10854,7 @@ function buildPdfFromImageData(images) {
|
|
|
10846
10854
|
var activePreview = null;
|
|
10847
10855
|
function startPreviewAnimation(elementId, preset, options) {
|
|
10848
10856
|
stopPreviewAnimation();
|
|
10849
|
-
const descriptor =
|
|
10857
|
+
const descriptor = chunkUXVFNGJH_js.buildPreviewAnimation(preset, options);
|
|
10850
10858
|
if (!descriptor) {
|
|
10851
10859
|
return;
|
|
10852
10860
|
}
|
|
@@ -10924,7 +10932,7 @@ function useElementOperations(input) {
|
|
|
10924
10932
|
}, [applySelection, setInlineEditingElementId, setContextMenuState]);
|
|
10925
10933
|
const updateElementById = React3.useCallback(
|
|
10926
10934
|
(elementId, updates) => {
|
|
10927
|
-
if (
|
|
10935
|
+
if (chunkUXVFNGJH_js.isTemplateElementId(elementId)) {
|
|
10928
10936
|
const slideId = activeSlide?.id;
|
|
10929
10937
|
if (slideId) {
|
|
10930
10938
|
setTemplateElementsBySlideId((prev) => ({
|
|
@@ -10964,7 +10972,7 @@ function useElementOperations(input) {
|
|
|
10964
10972
|
);
|
|
10965
10973
|
const updateSelectedShapeStyle = React3.useCallback(
|
|
10966
10974
|
(updates) => {
|
|
10967
|
-
if (!selectedElement || !
|
|
10975
|
+
if (!selectedElement || !chunk2V6BD4JQ_js.hasShapeProperties(selectedElement)) {
|
|
10968
10976
|
return;
|
|
10969
10977
|
}
|
|
10970
10978
|
updateSelectedElement({
|
|
@@ -10975,17 +10983,17 @@ function useElementOperations(input) {
|
|
|
10975
10983
|
);
|
|
10976
10984
|
const updateSelectedTextStyle = React3.useCallback(
|
|
10977
10985
|
(updates) => {
|
|
10978
|
-
if (!selectedElement || !
|
|
10986
|
+
if (!selectedElement || !chunk2V6BD4JQ_js.hasTextProperties(selectedElement)) {
|
|
10979
10987
|
return;
|
|
10980
10988
|
}
|
|
10981
|
-
const inlineSel =
|
|
10989
|
+
const inlineSel = chunkUXVFNGJH_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
10982
10990
|
if (inlineSel && selectedElement.textSegments) {
|
|
10983
|
-
const { newSegments: newSegments2, newSelection } =
|
|
10991
|
+
const { newSegments: newSegments2, newSelection } = chunkUXVFNGJH_js.applyStyleToSelectedSegments(
|
|
10984
10992
|
selectedElement.textSegments,
|
|
10985
10993
|
inlineSel,
|
|
10986
10994
|
updates
|
|
10987
10995
|
);
|
|
10988
|
-
|
|
10996
|
+
chunkUXVFNGJH_js.setPendingSelectionRestore(newSelection);
|
|
10989
10997
|
updateSelectedElement({
|
|
10990
10998
|
textSegments: newSegments2
|
|
10991
10999
|
});
|
|
@@ -11005,12 +11013,12 @@ function useElementOperations(input) {
|
|
|
11005
11013
|
);
|
|
11006
11014
|
const updateSelectedTextCase = React3.useCallback(
|
|
11007
11015
|
(mode) => {
|
|
11008
|
-
if (!selectedElement || !
|
|
11016
|
+
if (!selectedElement || !chunk2V6BD4JQ_js.hasTextProperties(selectedElement)) {
|
|
11009
11017
|
return;
|
|
11010
11018
|
}
|
|
11011
|
-
const inlineSel =
|
|
11019
|
+
const inlineSel = chunkUXVFNGJH_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
11012
11020
|
if (inlineSel && selectedElement.textSegments) {
|
|
11013
|
-
const newSegments =
|
|
11021
|
+
const newSegments = chunkUXVFNGJH_js.applyCaseTransformToSegments(
|
|
11014
11022
|
selectedElement.textSegments,
|
|
11015
11023
|
inlineSel,
|
|
11016
11024
|
mode
|
|
@@ -11020,14 +11028,14 @@ function useElementOperations(input) {
|
|
|
11020
11028
|
}
|
|
11021
11029
|
const updates = {};
|
|
11022
11030
|
if (selectedElement.textSegments && selectedElement.textSegments.length > 0) {
|
|
11023
|
-
updates.textSegments =
|
|
11031
|
+
updates.textSegments = chunkUXVFNGJH_js.applyCaseTransformToSegments(
|
|
11024
11032
|
selectedElement.textSegments,
|
|
11025
11033
|
null,
|
|
11026
11034
|
mode
|
|
11027
11035
|
);
|
|
11028
11036
|
}
|
|
11029
11037
|
if (typeof selectedElement.text === "string") {
|
|
11030
|
-
updates.text =
|
|
11038
|
+
updates.text = chunkUXVFNGJH_js.transformTextCase(selectedElement.text, mode);
|
|
11031
11039
|
}
|
|
11032
11040
|
updateSelectedElement(updates);
|
|
11033
11041
|
},
|
|
@@ -11082,7 +11090,7 @@ function useSectionOperations(input) {
|
|
|
11082
11090
|
const { sections, setSections, slides, setSlides, markDirty } = input;
|
|
11083
11091
|
const addSection2 = React3.useCallback(
|
|
11084
11092
|
(name, afterSlideIndex) => {
|
|
11085
|
-
const result =
|
|
11093
|
+
const result = chunkUXVFNGJH_js.addSection(sections, slides, name, afterSlideIndex);
|
|
11086
11094
|
setSlides(result.slides);
|
|
11087
11095
|
setSections(result.sections);
|
|
11088
11096
|
markDirty();
|
|
@@ -11091,7 +11099,7 @@ function useSectionOperations(input) {
|
|
|
11091
11099
|
);
|
|
11092
11100
|
const renameSection2 = React3.useCallback(
|
|
11093
11101
|
(sectionId, newName) => {
|
|
11094
|
-
const result =
|
|
11102
|
+
const result = chunkUXVFNGJH_js.renameSection(sections, slides, sectionId, newName);
|
|
11095
11103
|
setSections(result.sections);
|
|
11096
11104
|
setSlides(result.slides);
|
|
11097
11105
|
markDirty();
|
|
@@ -11100,7 +11108,7 @@ function useSectionOperations(input) {
|
|
|
11100
11108
|
);
|
|
11101
11109
|
const deleteSection2 = React3.useCallback(
|
|
11102
11110
|
(sectionId) => {
|
|
11103
|
-
const result =
|
|
11111
|
+
const result = chunkUXVFNGJH_js.deleteSection(sections, slides, sectionId);
|
|
11104
11112
|
setSections(result.sections);
|
|
11105
11113
|
setSlides(result.slides);
|
|
11106
11114
|
markDirty();
|
|
@@ -11109,21 +11117,21 @@ function useSectionOperations(input) {
|
|
|
11109
11117
|
);
|
|
11110
11118
|
const moveSectionUp2 = React3.useCallback(
|
|
11111
11119
|
(sectionId) => {
|
|
11112
|
-
setSections(
|
|
11120
|
+
setSections(chunkUXVFNGJH_js.moveSectionUp(sections, sectionId));
|
|
11113
11121
|
markDirty();
|
|
11114
11122
|
},
|
|
11115
11123
|
[sections, setSections, markDirty]
|
|
11116
11124
|
);
|
|
11117
11125
|
const moveSectionDown2 = React3.useCallback(
|
|
11118
11126
|
(sectionId) => {
|
|
11119
|
-
setSections(
|
|
11127
|
+
setSections(chunkUXVFNGJH_js.moveSectionDown(sections, sectionId));
|
|
11120
11128
|
markDirty();
|
|
11121
11129
|
},
|
|
11122
11130
|
[sections, setSections, markDirty]
|
|
11123
11131
|
);
|
|
11124
11132
|
const moveSlidesToSection2 = React3.useCallback(
|
|
11125
11133
|
(slideIndexes, targetSectionId) => {
|
|
11126
|
-
const result =
|
|
11134
|
+
const result = chunkUXVFNGJH_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
|
|
11127
11135
|
setSlides(result.slides);
|
|
11128
11136
|
setSections(result.sections);
|
|
11129
11137
|
markDirty();
|
|
@@ -11142,7 +11150,7 @@ function useSectionOperations(input) {
|
|
|
11142
11150
|
|
|
11143
11151
|
// src/viewer/hooks/pointer-move-handlers.ts
|
|
11144
11152
|
function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
|
|
11145
|
-
const resized =
|
|
11153
|
+
const resized = chunkUXVFNGJH_js.applyResize(
|
|
11146
11154
|
{ x: startX, y: startY, width: startWidth, height: startHeight },
|
|
11147
11155
|
handle,
|
|
11148
11156
|
dx,
|
|
@@ -11154,7 +11162,7 @@ function computeResizeGeometry(handle, startX, startY, startWidth, startHeight,
|
|
|
11154
11162
|
if (!snapToGrid) {
|
|
11155
11163
|
return box;
|
|
11156
11164
|
}
|
|
11157
|
-
return
|
|
11165
|
+
return chunkUXVFNGJH_js.snapBoxToGrid(box, handle, gridSpacingPx, MIN_ELEMENT_SIZE);
|
|
11158
11166
|
}
|
|
11159
11167
|
function computeAdjustmentValue(startAdjustment, dx, startWidth) {
|
|
11160
11168
|
const range = startWidth || 200;
|
|
@@ -11264,7 +11272,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
11264
11272
|
width: el.width,
|
|
11265
11273
|
height: el.height
|
|
11266
11274
|
}));
|
|
11267
|
-
const snapResult =
|
|
11275
|
+
const snapResult = chunkUXVFNGJH_js.computeSnapToShape(
|
|
11268
11276
|
targetX,
|
|
11269
11277
|
targetY,
|
|
11270
11278
|
primaryEl.width,
|
|
@@ -11407,13 +11415,13 @@ function processPointerUp(input) {
|
|
|
11407
11415
|
if (i !== activeSlideIndex) {
|
|
11408
11416
|
return s;
|
|
11409
11417
|
}
|
|
11410
|
-
const rerouted =
|
|
11418
|
+
const rerouted = chunkUXVFNGJH_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
|
|
11411
11419
|
if (rerouted.length === 0) {
|
|
11412
11420
|
return s;
|
|
11413
11421
|
}
|
|
11414
11422
|
return {
|
|
11415
11423
|
...s,
|
|
11416
|
-
elements:
|
|
11424
|
+
elements: chunkUXVFNGJH_js.applyReroutedConnectors(s.elements, rerouted)
|
|
11417
11425
|
};
|
|
11418
11426
|
})
|
|
11419
11427
|
);
|
|
@@ -11432,9 +11440,9 @@ function processPointerUp(input) {
|
|
|
11432
11440
|
}
|
|
11433
11441
|
function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
|
|
11434
11442
|
const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
|
|
11435
|
-
const hitIds =
|
|
11443
|
+
const hitIds = chunkUXVFNGJH_js.computeMarqueeHitIds(marquee, sourceElements);
|
|
11436
11444
|
if (marquee.additive) {
|
|
11437
|
-
const merged =
|
|
11445
|
+
const merged = chunkUXVFNGJH_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
|
|
11438
11446
|
if (merged.length > 0) {
|
|
11439
11447
|
applySelection(merged[0], merged);
|
|
11440
11448
|
} else {
|
|
@@ -11457,8 +11465,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
|
|
|
11457
11465
|
}
|
|
11458
11466
|
return { ...el, x: start.x + dx, y: start.y + dy };
|
|
11459
11467
|
});
|
|
11460
|
-
const rerouted =
|
|
11461
|
-
return
|
|
11468
|
+
const rerouted = chunkUXVFNGJH_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
|
|
11469
|
+
return chunkUXVFNGJH_js.applyReroutedConnectors(movedElements, rerouted);
|
|
11462
11470
|
};
|
|
11463
11471
|
if (editTemplateMode) {
|
|
11464
11472
|
const slideId = activeSlide?.id;
|
|
@@ -11609,9 +11617,9 @@ function useCanvasInteractions(input) {
|
|
|
11609
11617
|
return;
|
|
11610
11618
|
}
|
|
11611
11619
|
const el = elementLookup.get(editId);
|
|
11612
|
-
if (el &&
|
|
11620
|
+
if (el && chunk2V6BD4JQ_js.hasTextProperties(el)) {
|
|
11613
11621
|
const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
|
|
11614
|
-
const newSegments =
|
|
11622
|
+
const newSegments = chunkUXVFNGJH_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
|
|
11615
11623
|
ops.updateElementById(editId, {
|
|
11616
11624
|
text: committedText,
|
|
11617
11625
|
textSegments: newSegments
|
|
@@ -11622,7 +11630,7 @@ function useCanvasInteractions(input) {
|
|
|
11622
11630
|
setInlineEditingText("");
|
|
11623
11631
|
};
|
|
11624
11632
|
const openEquationEditorForElement = (el) => {
|
|
11625
|
-
if (!
|
|
11633
|
+
if (!chunk2V6BD4JQ_js.hasTextProperties(el)) {
|
|
11626
11634
|
return false;
|
|
11627
11635
|
}
|
|
11628
11636
|
const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
|
|
@@ -11651,7 +11659,7 @@ function useCanvasInteractions(input) {
|
|
|
11651
11659
|
justSelectedRef.current = false;
|
|
11652
11660
|
} else {
|
|
11653
11661
|
const el = elementLookup.get(elementId);
|
|
11654
|
-
if (el &&
|
|
11662
|
+
if (el && chunk2V6BD4JQ_js.hasTextProperties(el) && !el.locks?.noTextEdit) {
|
|
11655
11663
|
if (!openEquationEditorForElement(el)) {
|
|
11656
11664
|
setInlineEditingElementId(elementId);
|
|
11657
11665
|
setInlineEditingText(el.text ?? "");
|
|
@@ -11670,7 +11678,7 @@ function useCanvasInteractions(input) {
|
|
|
11670
11678
|
if (openEquationEditorForElement(el)) {
|
|
11671
11679
|
return;
|
|
11672
11680
|
}
|
|
11673
|
-
if (
|
|
11681
|
+
if (chunk2V6BD4JQ_js.hasTextProperties(el)) {
|
|
11674
11682
|
setInlineEditingElementId(elementId);
|
|
11675
11683
|
setInlineEditingText(el.text ?? "");
|
|
11676
11684
|
}
|
|
@@ -11860,7 +11868,7 @@ function createFileHandlers(deps) {
|
|
|
11860
11868
|
h = Math.round(h * scale);
|
|
11861
11869
|
}
|
|
11862
11870
|
addElement({
|
|
11863
|
-
id:
|
|
11871
|
+
id: chunkUXVFNGJH_js.generateElementId(),
|
|
11864
11872
|
type: "image",
|
|
11865
11873
|
x: Math.round((canvasSize.width - w) / 2),
|
|
11866
11874
|
y: Math.round((canvasSize.height - h) / 2),
|
|
@@ -11871,7 +11879,7 @@ function createFileHandlers(deps) {
|
|
|
11871
11879
|
};
|
|
11872
11880
|
img.onerror = () => {
|
|
11873
11881
|
addElement({
|
|
11874
|
-
id:
|
|
11882
|
+
id: chunkUXVFNGJH_js.generateElementId(),
|
|
11875
11883
|
type: "image",
|
|
11876
11884
|
x: 100,
|
|
11877
11885
|
y: 100,
|
|
@@ -11897,7 +11905,7 @@ function createFileHandlers(deps) {
|
|
|
11897
11905
|
const elFilePath = file.path;
|
|
11898
11906
|
const insertMediaElement = (mediaSourceUrl, width, height) => {
|
|
11899
11907
|
addElement({
|
|
11900
|
-
id:
|
|
11908
|
+
id: chunkUXVFNGJH_js.generateElementId(),
|
|
11901
11909
|
type: "media",
|
|
11902
11910
|
mediaType,
|
|
11903
11911
|
mediaMimeType: file.type || void 0,
|
|
@@ -12072,13 +12080,13 @@ function createStructuredElementHandlers(deps) {
|
|
|
12072
12080
|
return;
|
|
12073
12081
|
}
|
|
12074
12082
|
addElement({
|
|
12075
|
-
id:
|
|
12083
|
+
id: chunkUXVFNGJH_js.generateElementId(),
|
|
12076
12084
|
type: "smartArt",
|
|
12077
12085
|
x: 100,
|
|
12078
12086
|
y: 120,
|
|
12079
12087
|
width: 600,
|
|
12080
12088
|
height: 340,
|
|
12081
|
-
smartArtData:
|
|
12089
|
+
smartArtData: chunkUXVFNGJH_js.buildSmartArtPresetData(
|
|
12082
12090
|
layout,
|
|
12083
12091
|
defaultItems,
|
|
12084
12092
|
(i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
|
|
@@ -12090,7 +12098,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
12090
12098
|
return;
|
|
12091
12099
|
}
|
|
12092
12100
|
addElement({
|
|
12093
|
-
id:
|
|
12101
|
+
id: chunkUXVFNGJH_js.generateElementId(),
|
|
12094
12102
|
type: "shape",
|
|
12095
12103
|
x: 120,
|
|
12096
12104
|
y: 200,
|
|
@@ -12149,7 +12157,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
12149
12157
|
const displayText = value || fieldTexts[fieldType] || fieldType;
|
|
12150
12158
|
const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
|
|
12151
12159
|
addElement({
|
|
12152
|
-
id:
|
|
12160
|
+
id: chunkUXVFNGJH_js.generateElementId(),
|
|
12153
12161
|
type: "shape",
|
|
12154
12162
|
x: 120,
|
|
12155
12163
|
y: 200,
|
|
@@ -12171,11 +12179,11 @@ function createStructuredElementHandlers(deps) {
|
|
|
12171
12179
|
if (!activeSlide) {
|
|
12172
12180
|
return;
|
|
12173
12181
|
}
|
|
12174
|
-
const preset =
|
|
12182
|
+
const preset = chunkUXVFNGJH_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
|
|
12175
12183
|
if (!preset) {
|
|
12176
12184
|
return;
|
|
12177
12185
|
}
|
|
12178
|
-
const defaultPptxAction =
|
|
12186
|
+
const defaultPptxAction = chunk2V6BD4JQ_js.elementActionToPptxAction({
|
|
12179
12187
|
trigger: "click",
|
|
12180
12188
|
type: preset.defaultAction
|
|
12181
12189
|
});
|
|
@@ -12184,7 +12192,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
12184
12192
|
defaultPptxAction.highlightClick = true;
|
|
12185
12193
|
}
|
|
12186
12194
|
addElement({
|
|
12187
|
-
id:
|
|
12195
|
+
id: chunkUXVFNGJH_js.generateElementId(),
|
|
12188
12196
|
type: "shape",
|
|
12189
12197
|
x: 150,
|
|
12190
12198
|
y: 150,
|
|
@@ -12251,7 +12259,7 @@ function useInsertElements(input) {
|
|
|
12251
12259
|
return;
|
|
12252
12260
|
}
|
|
12253
12261
|
addElement({
|
|
12254
|
-
id:
|
|
12262
|
+
id: chunkUXVFNGJH_js.generateElementId(),
|
|
12255
12263
|
type: "text",
|
|
12256
12264
|
x: 100,
|
|
12257
12265
|
y: 100,
|
|
@@ -12266,7 +12274,7 @@ function useInsertElements(input) {
|
|
|
12266
12274
|
return;
|
|
12267
12275
|
}
|
|
12268
12276
|
addElement({
|
|
12269
|
-
id:
|
|
12277
|
+
id: chunkUXVFNGJH_js.generateElementId(),
|
|
12270
12278
|
type: "shape",
|
|
12271
12279
|
x: 150,
|
|
12272
12280
|
y: 150,
|
|
@@ -12285,15 +12293,15 @@ function useInsertElements(input) {
|
|
|
12285
12293
|
return;
|
|
12286
12294
|
}
|
|
12287
12295
|
addElement({
|
|
12288
|
-
...
|
|
12289
|
-
id:
|
|
12296
|
+
...chunkUXVFNGJH_js.newTableElement(DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, 100, 200),
|
|
12297
|
+
id: chunkUXVFNGJH_js.generateElementId()
|
|
12290
12298
|
});
|
|
12291
12299
|
};
|
|
12292
12300
|
const handleAddChart = (chartType) => {
|
|
12293
12301
|
if (!activeSlide) {
|
|
12294
12302
|
return;
|
|
12295
12303
|
}
|
|
12296
|
-
addElement(
|
|
12304
|
+
addElement(chunkUXVFNGJH_js.createDefaultChartElement(chartType));
|
|
12297
12305
|
};
|
|
12298
12306
|
const structured = createStructuredElementHandlers({
|
|
12299
12307
|
activeSlide,
|
|
@@ -12363,7 +12371,7 @@ function useClipboardHandlers(input) {
|
|
|
12363
12371
|
if (!selectedElement) {
|
|
12364
12372
|
return;
|
|
12365
12373
|
}
|
|
12366
|
-
setClipboardPayload(
|
|
12374
|
+
setClipboardPayload(chunkUXVFNGJH_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
|
|
12367
12375
|
};
|
|
12368
12376
|
const handleDelete = () => {
|
|
12369
12377
|
const idsToDelete = effectiveSelectedIds;
|
|
@@ -12380,7 +12388,7 @@ function useClipboardHandlers(input) {
|
|
|
12380
12388
|
handleDelete();
|
|
12381
12389
|
};
|
|
12382
12390
|
const insertClone = (source) => {
|
|
12383
|
-
const clone =
|
|
12391
|
+
const clone = chunkUXVFNGJH_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
|
|
12384
12392
|
ops.updateActiveElements((els) => [...els, clone]);
|
|
12385
12393
|
ops.applySelection(clone.id);
|
|
12386
12394
|
history.markDirty();
|
|
@@ -12415,7 +12423,7 @@ function resolveShapePath(el) {
|
|
|
12415
12423
|
return el.pathData;
|
|
12416
12424
|
}
|
|
12417
12425
|
if ("shapeType" in el && typeof el.shapeType === "string") {
|
|
12418
|
-
const clipPath =
|
|
12426
|
+
const clipPath = chunk2V6BD4JQ_js.getPresetShapeClipPath(el.shapeType);
|
|
12419
12427
|
if (clipPath) {
|
|
12420
12428
|
const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
|
|
12421
12429
|
if (svgPath) {
|
|
@@ -12466,7 +12474,7 @@ function clipPathToSvgPath(clipPath, width, height) {
|
|
|
12466
12474
|
return parts.join(" ");
|
|
12467
12475
|
}
|
|
12468
12476
|
function transformPathToGlobal(pathData, el) {
|
|
12469
|
-
const polys =
|
|
12477
|
+
const polys = chunk2V6BD4JQ_js.svgPathToPolygons(pathData);
|
|
12470
12478
|
if (polys.length === 0) {
|
|
12471
12479
|
return pathData;
|
|
12472
12480
|
}
|
|
@@ -12486,10 +12494,10 @@ function transformPathToGlobal(pathData, el) {
|
|
|
12486
12494
|
y: pt.y * scaleY + el.y
|
|
12487
12495
|
}))
|
|
12488
12496
|
);
|
|
12489
|
-
return
|
|
12497
|
+
return chunk2V6BD4JQ_js.polygonsToSvgPath(transformed);
|
|
12490
12498
|
}
|
|
12491
12499
|
function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
12492
|
-
const polys =
|
|
12500
|
+
const polys = chunk2V6BD4JQ_js.svgPathToPolygons(pathData);
|
|
12493
12501
|
if (polys.length === 0) {
|
|
12494
12502
|
return pathData;
|
|
12495
12503
|
}
|
|
@@ -12499,10 +12507,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
|
12499
12507
|
y: pt.y - y
|
|
12500
12508
|
}))
|
|
12501
12509
|
);
|
|
12502
|
-
return
|
|
12510
|
+
return chunk2V6BD4JQ_js.polygonsToSvgPath(transformed);
|
|
12503
12511
|
}
|
|
12504
12512
|
function pathBounds(pathData) {
|
|
12505
|
-
const polys =
|
|
12513
|
+
const polys = chunk2V6BD4JQ_js.svgPathToPolygons(pathData);
|
|
12506
12514
|
let minX = Infinity;
|
|
12507
12515
|
let minY = Infinity;
|
|
12508
12516
|
let maxX = -Infinity;
|
|
@@ -12561,7 +12569,7 @@ function useMergeShapesHandler(input) {
|
|
|
12561
12569
|
let allFragments = [];
|
|
12562
12570
|
let remaining = globalPaths[0];
|
|
12563
12571
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
12564
|
-
const frags =
|
|
12572
|
+
const frags = chunk2V6BD4JQ_js.mergeShapes("fragment", remaining, globalPaths[i]);
|
|
12565
12573
|
if (Array.isArray(frags)) {
|
|
12566
12574
|
allFragments = frags;
|
|
12567
12575
|
}
|
|
@@ -12590,7 +12598,7 @@ function useMergeShapesHandler(input) {
|
|
|
12590
12598
|
bounds.height
|
|
12591
12599
|
);
|
|
12592
12600
|
const newEl = {
|
|
12593
|
-
id:
|
|
12601
|
+
id: chunkUXVFNGJH_js.generateElementId(),
|
|
12594
12602
|
type: "shape",
|
|
12595
12603
|
x: bounds.x,
|
|
12596
12604
|
y: bounds.y,
|
|
@@ -12628,7 +12636,7 @@ function useMergeShapesHandler(input) {
|
|
|
12628
12636
|
} else {
|
|
12629
12637
|
let resultPath = globalPaths[0];
|
|
12630
12638
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
12631
|
-
const result =
|
|
12639
|
+
const result = chunk2V6BD4JQ_js.mergeShapes(operation, resultPath, globalPaths[i]);
|
|
12632
12640
|
if (typeof result === "string") {
|
|
12633
12641
|
resultPath = result;
|
|
12634
12642
|
}
|
|
@@ -12649,7 +12657,7 @@ function useMergeShapesHandler(input) {
|
|
|
12649
12657
|
);
|
|
12650
12658
|
const primary = targets[0];
|
|
12651
12659
|
const newEl = {
|
|
12652
|
-
id:
|
|
12660
|
+
id: chunkUXVFNGJH_js.generateElementId(),
|
|
12653
12661
|
type: "shape",
|
|
12654
12662
|
x: bounds.x,
|
|
12655
12663
|
y: bounds.y,
|
|
@@ -12712,7 +12720,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12712
12720
|
if (ids.length < 2 || !activeSlide) {
|
|
12713
12721
|
return;
|
|
12714
12722
|
}
|
|
12715
|
-
const { elements, groupId } =
|
|
12723
|
+
const { elements, groupId } = chunkUXVFNGJH_js.groupElements(ops.activeElements, ids, chunkUXVFNGJH_js.generateElementId());
|
|
12716
12724
|
if (groupId === null) {
|
|
12717
12725
|
return;
|
|
12718
12726
|
}
|
|
@@ -12725,12 +12733,12 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12725
12733
|
return;
|
|
12726
12734
|
}
|
|
12727
12735
|
const group = selectedElement;
|
|
12728
|
-
const intoTemplate =
|
|
12736
|
+
const intoTemplate = chunkUXVFNGJH_js.isTemplateElementId(group.id);
|
|
12729
12737
|
const ungrouped = group.children.map((child) => ({
|
|
12730
12738
|
...structuredClone(child),
|
|
12731
12739
|
// Keep child ids in the same store as the group so later edits route
|
|
12732
12740
|
// correctly: template groups yield template-prefixed child ids.
|
|
12733
|
-
id: intoTemplate ?
|
|
12741
|
+
id: intoTemplate ? chunkUXVFNGJH_js.makeCloneId(true, child.id || group.id) : child.id || chunkUXVFNGJH_js.generateElementId(),
|
|
12734
12742
|
x: child.x + group.x,
|
|
12735
12743
|
y: child.y + group.y
|
|
12736
12744
|
}));
|
|
@@ -12754,7 +12762,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12754
12762
|
if (!edge) {
|
|
12755
12763
|
return;
|
|
12756
12764
|
}
|
|
12757
|
-
const positions =
|
|
12765
|
+
const positions = chunkUXVFNGJH_js.alignElements(selectedElements, edge);
|
|
12758
12766
|
for (const [id, pos] of positions) {
|
|
12759
12767
|
const el = elementLookup.get(id);
|
|
12760
12768
|
if (!el) {
|
|
@@ -12772,7 +12780,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12772
12780
|
if (!distAxis) {
|
|
12773
12781
|
return;
|
|
12774
12782
|
}
|
|
12775
|
-
const positions =
|
|
12783
|
+
const positions = chunkUXVFNGJH_js.distributeElements(selectedElements, distAxis);
|
|
12776
12784
|
for (const [id, pos] of positions) {
|
|
12777
12785
|
const el = elementLookup.get(id);
|
|
12778
12786
|
if (!el) {
|
|
@@ -12789,7 +12797,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12789
12797
|
}
|
|
12790
12798
|
const id = selectedElement.id;
|
|
12791
12799
|
ops.updateActiveElements(
|
|
12792
|
-
(els) => direction === "forward" ?
|
|
12800
|
+
(els) => direction === "forward" ? chunkUXVFNGJH_js.bringForward(els, id) : direction === "backward" ? chunkUXVFNGJH_js.sendBackward(els, id) : els
|
|
12793
12801
|
);
|
|
12794
12802
|
history.markDirty();
|
|
12795
12803
|
};
|
|
@@ -12799,7 +12807,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12799
12807
|
}
|
|
12800
12808
|
const id = selectedElement.id;
|
|
12801
12809
|
ops.updateActiveElements(
|
|
12802
|
-
(els) => direction === "front" ?
|
|
12810
|
+
(els) => direction === "front" ? chunkUXVFNGJH_js.bringToFront(els, id) : chunkUXVFNGJH_js.sendToBack(els, id)
|
|
12803
12811
|
);
|
|
12804
12812
|
history.markDirty();
|
|
12805
12813
|
};
|
|
@@ -12921,7 +12929,7 @@ function insertSlideFromLayoutUpdater(slides, activeIndex, draft) {
|
|
|
12921
12929
|
function useSlideManagement(input) {
|
|
12922
12930
|
const { slides, activeSlideIndex, setActiveSlideIndex, ops, history, handlerRef } = input;
|
|
12923
12931
|
const handleAddSlide = () => {
|
|
12924
|
-
const newSlide =
|
|
12932
|
+
const newSlide = chunkUXVFNGJH_js.createBlankSlide(slides.length + 1);
|
|
12925
12933
|
ops.updateSlides((prev) => {
|
|
12926
12934
|
const next = [...prev];
|
|
12927
12935
|
next.splice(activeSlideIndex + 1, 0, newSlide);
|
|
@@ -12984,7 +12992,7 @@ function useSlideManagement(input) {
|
|
|
12984
12992
|
}
|
|
12985
12993
|
const clone = {
|
|
12986
12994
|
...src,
|
|
12987
|
-
id:
|
|
12995
|
+
id: chunkUXVFNGJH_js.makeSlideId(),
|
|
12988
12996
|
elements: src.elements.map((el) => ({
|
|
12989
12997
|
...el,
|
|
12990
12998
|
id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
|
|
@@ -13016,7 +13024,7 @@ function useSlideManagement(input) {
|
|
|
13016
13024
|
const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
|
|
13017
13025
|
const insertAt = activeSlideIndex + 1;
|
|
13018
13026
|
const draft = {
|
|
13019
|
-
...
|
|
13027
|
+
...chunkUXVFNGJH_js.createBlankSlide(slides.length + 1),
|
|
13020
13028
|
layoutPath,
|
|
13021
13029
|
...layoutName ? { layoutName } : {}
|
|
13022
13030
|
};
|
|
@@ -13077,7 +13085,7 @@ function createTableMergeHandlers(input) {
|
|
|
13077
13085
|
if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
|
|
13078
13086
|
return;
|
|
13079
13087
|
}
|
|
13080
|
-
const newTableData =
|
|
13088
|
+
const newTableData = chunkUXVFNGJH_js.mergeCells(
|
|
13081
13089
|
[
|
|
13082
13090
|
{ row: rowIndex, col: columnIndex },
|
|
13083
13091
|
{ row: rowIndex, col: nextColIdx }
|
|
@@ -13085,7 +13093,7 @@ function createTableMergeHandlers(input) {
|
|
|
13085
13093
|
td
|
|
13086
13094
|
);
|
|
13087
13095
|
const updates = { tableData: newTableData };
|
|
13088
|
-
const newRawXml =
|
|
13096
|
+
const newRawXml = chunk2V6BD4JQ_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
13089
13097
|
if (newRawXml) {
|
|
13090
13098
|
updates.rawXml = newRawXml;
|
|
13091
13099
|
}
|
|
@@ -13111,7 +13119,7 @@ function createTableMergeHandlers(input) {
|
|
|
13111
13119
|
if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
|
|
13112
13120
|
return;
|
|
13113
13121
|
}
|
|
13114
|
-
const newTableData =
|
|
13122
|
+
const newTableData = chunkUXVFNGJH_js.mergeCells(
|
|
13115
13123
|
[
|
|
13116
13124
|
{ row: rowIndex, col: columnIndex },
|
|
13117
13125
|
{ row: targetNextRowIdx, col: columnIndex }
|
|
@@ -13119,7 +13127,7 @@ function createTableMergeHandlers(input) {
|
|
|
13119
13127
|
td
|
|
13120
13128
|
);
|
|
13121
13129
|
const updates = { tableData: newTableData };
|
|
13122
|
-
const newRawXml =
|
|
13130
|
+
const newRawXml = chunk2V6BD4JQ_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
13123
13131
|
if (newRawXml) {
|
|
13124
13132
|
updates.rawXml = newRawXml;
|
|
13125
13133
|
}
|
|
@@ -13134,9 +13142,9 @@ function createTableMergeHandlers(input) {
|
|
|
13134
13142
|
return;
|
|
13135
13143
|
}
|
|
13136
13144
|
const td = selectedElement.tableData;
|
|
13137
|
-
const newTableData =
|
|
13145
|
+
const newTableData = chunkUXVFNGJH_js.mergeCells(ts.selectedCells, td);
|
|
13138
13146
|
const updates = { tableData: newTableData };
|
|
13139
|
-
const newRawXml =
|
|
13147
|
+
const newRawXml = chunk2V6BD4JQ_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
13140
13148
|
if (newRawXml) {
|
|
13141
13149
|
updates.rawXml = newRawXml;
|
|
13142
13150
|
}
|
|
@@ -13153,9 +13161,9 @@ function createTableMergeHandlers(input) {
|
|
|
13153
13161
|
}
|
|
13154
13162
|
const { rowIndex, columnIndex } = ts;
|
|
13155
13163
|
const td = selectedElement.tableData;
|
|
13156
|
-
const newTableData =
|
|
13164
|
+
const newTableData = chunkUXVFNGJH_js.splitCell(rowIndex, columnIndex, td);
|
|
13157
13165
|
const updates = { tableData: newTableData };
|
|
13158
|
-
const newRawXml =
|
|
13166
|
+
const newRawXml = chunk2V6BD4JQ_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
13159
13167
|
if (newRawXml) {
|
|
13160
13168
|
updates.rawXml = newRawXml;
|
|
13161
13169
|
}
|
|
@@ -13199,7 +13207,7 @@ function createTableStructHandlers(input) {
|
|
|
13199
13207
|
updates.tableData = { ...el.tableData, rows: newRows };
|
|
13200
13208
|
}
|
|
13201
13209
|
if (el.rawXml) {
|
|
13202
|
-
const newRawXml =
|
|
13210
|
+
const newRawXml = chunk2V6BD4JQ_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
|
|
13203
13211
|
if (newRawXml) {
|
|
13204
13212
|
updates.rawXml = newRawXml;
|
|
13205
13213
|
}
|
|
@@ -13223,7 +13231,7 @@ function createTableStructHandlers(input) {
|
|
|
13223
13231
|
const { rowIndex, columnIndex: colIndex } = ts;
|
|
13224
13232
|
const updates = {};
|
|
13225
13233
|
if (selectedElement.rawXml) {
|
|
13226
|
-
const newRawXml =
|
|
13234
|
+
const newRawXml = chunk2V6BD4JQ_js.updateCellTextStyleInRawXml(
|
|
13227
13235
|
selectedElement,
|
|
13228
13236
|
rowIndex,
|
|
13229
13237
|
colIndex,
|
|
@@ -13287,9 +13295,9 @@ function createTableStructHandlers(input) {
|
|
|
13287
13295
|
return;
|
|
13288
13296
|
}
|
|
13289
13297
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
13290
|
-
const newTableData =
|
|
13298
|
+
const newTableData = chunkUXVFNGJH_js.insertTableRow(selectedElement.tableData, rowIdx, position);
|
|
13291
13299
|
const updates = { tableData: newTableData };
|
|
13292
|
-
const newRawXml =
|
|
13300
|
+
const newRawXml = chunk2V6BD4JQ_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
13293
13301
|
if (newRawXml) {
|
|
13294
13302
|
updates.rawXml = newRawXml;
|
|
13295
13303
|
}
|
|
@@ -13302,12 +13310,12 @@ function createTableStructHandlers(input) {
|
|
|
13302
13310
|
}
|
|
13303
13311
|
const td = selectedElement.tableData;
|
|
13304
13312
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
13305
|
-
const newTableData =
|
|
13313
|
+
const newTableData = chunkUXVFNGJH_js.deleteTableRow(td, rowIdx);
|
|
13306
13314
|
if (newTableData === td) {
|
|
13307
13315
|
return;
|
|
13308
13316
|
}
|
|
13309
13317
|
const updates = { tableData: newTableData };
|
|
13310
|
-
const newRawXml =
|
|
13318
|
+
const newRawXml = chunk2V6BD4JQ_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
13311
13319
|
if (newRawXml) {
|
|
13312
13320
|
updates.rawXml = newRawXml;
|
|
13313
13321
|
}
|
|
@@ -13319,9 +13327,9 @@ function createTableStructHandlers(input) {
|
|
|
13319
13327
|
return;
|
|
13320
13328
|
}
|
|
13321
13329
|
const colIdx = ts?.columnIndex ?? 0;
|
|
13322
|
-
const newTableData =
|
|
13330
|
+
const newTableData = chunkUXVFNGJH_js.insertTableColumn(selectedElement.tableData, colIdx, position);
|
|
13323
13331
|
const updates = { tableData: newTableData };
|
|
13324
|
-
const newRawXml =
|
|
13332
|
+
const newRawXml = chunk2V6BD4JQ_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
13325
13333
|
if (newRawXml) {
|
|
13326
13334
|
updates.rawXml = newRawXml;
|
|
13327
13335
|
}
|
|
@@ -13334,12 +13342,12 @@ function createTableStructHandlers(input) {
|
|
|
13334
13342
|
}
|
|
13335
13343
|
const td = selectedElement.tableData;
|
|
13336
13344
|
const colIdx = ts?.columnIndex ?? 0;
|
|
13337
|
-
const newTableData =
|
|
13345
|
+
const newTableData = chunkUXVFNGJH_js.deleteTableColumn(td, colIdx);
|
|
13338
13346
|
if (newTableData === td) {
|
|
13339
13347
|
return;
|
|
13340
13348
|
}
|
|
13341
13349
|
const updates = { tableData: newTableData };
|
|
13342
|
-
const newRawXml =
|
|
13350
|
+
const newRawXml = chunk2V6BD4JQ_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
13343
13351
|
if (newRawXml) {
|
|
13344
13352
|
updates.rawXml = newRawXml;
|
|
13345
13353
|
}
|
|
@@ -13375,8 +13383,8 @@ async function renderToCanvas(element, options = {}) {
|
|
|
13375
13383
|
return html2canvasPro(element, {
|
|
13376
13384
|
...options,
|
|
13377
13385
|
onclone: async (doc, clonedEl) => {
|
|
13378
|
-
await
|
|
13379
|
-
|
|
13386
|
+
await chunkUXVFNGJH_js.normalizeColorsForCapture(doc, clonedEl);
|
|
13387
|
+
chunkUXVFNGJH_js.preprocessCssForCapture(clonedEl);
|
|
13380
13388
|
if (typeof userOnClone === "function") {
|
|
13381
13389
|
userOnClone(doc, clonedEl);
|
|
13382
13390
|
}
|
|
@@ -13432,7 +13440,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
|
|
|
13432
13440
|
}
|
|
13433
13441
|
async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
|
|
13434
13442
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
13435
|
-
|
|
13443
|
+
chunkUXVFNGJH_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
|
|
13436
13444
|
}
|
|
13437
13445
|
async function copySlideToClipboard(slideElement, options = {}) {
|
|
13438
13446
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
@@ -13454,7 +13462,7 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
|
|
|
13454
13462
|
continue;
|
|
13455
13463
|
}
|
|
13456
13464
|
const canvas = await renderElementToCanvas(stageEl, scale);
|
|
13457
|
-
images.push(
|
|
13465
|
+
images.push(chunkUXVFNGJH_js.canvasToJpegData(canvas));
|
|
13458
13466
|
}
|
|
13459
13467
|
onProgress?.(totalSlides, totalSlides);
|
|
13460
13468
|
setActiveSlide(currentSlideIndex);
|
|
@@ -13462,7 +13470,7 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
|
|
|
13462
13470
|
throw new Error(chunk2EFVXYNA_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
|
|
13463
13471
|
}
|
|
13464
13472
|
const pdfBlobUrl = buildPdfFromImageData(images);
|
|
13465
|
-
|
|
13473
|
+
chunkUXVFNGJH_js.downloadDataUrl(pdfBlobUrl, filename);
|
|
13466
13474
|
}
|
|
13467
13475
|
async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
|
|
13468
13476
|
const { scale = 2, onProgress } = options;
|
|
@@ -13511,7 +13519,7 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
|
|
|
13511
13519
|
throw new Error(chunk2EFVXYNA_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
|
|
13512
13520
|
}
|
|
13513
13521
|
const pdfDataUrl = buildNotesPdf(pages);
|
|
13514
|
-
|
|
13522
|
+
chunkUXVFNGJH_js.downloadDataUrl(pdfDataUrl, filename);
|
|
13515
13523
|
}
|
|
13516
13524
|
|
|
13517
13525
|
// src/viewer/utils/export-video.ts
|
|
@@ -13555,7 +13563,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
13555
13563
|
const fps = 30;
|
|
13556
13564
|
const stream = recordingCanvas.captureStream(fps);
|
|
13557
13565
|
const recorder = new MediaRecorder(stream, {
|
|
13558
|
-
mimeType:
|
|
13566
|
+
mimeType: chunkUXVFNGJH_js.pickSupportedMimeType([...chunkUXVFNGJH_js.WEBM_MIME_CANDIDATES]),
|
|
13559
13567
|
videoBitsPerSecond: 5e6
|
|
13560
13568
|
});
|
|
13561
13569
|
const chunks = [];
|
|
@@ -13578,8 +13586,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
13578
13586
|
const duration = slideTimingsMs?.[i] ?? slideDurationMs;
|
|
13579
13587
|
ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
|
|
13580
13588
|
ctx.drawImage(slideCanvases[i], 0, 0);
|
|
13581
|
-
const frameInterval =
|
|
13582
|
-
const framesNeeded =
|
|
13589
|
+
const frameInterval = chunkUXVFNGJH_js.fpsToFrameIntervalMs(fps);
|
|
13590
|
+
const framesNeeded = chunkUXVFNGJH_js.segmentFrameCount(duration, fps);
|
|
13583
13591
|
for (let f = 0; f < framesNeeded; f++) {
|
|
13584
13592
|
if (signal?.aborted) {
|
|
13585
13593
|
recorder.stop();
|
|
@@ -13628,7 +13636,7 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
|
|
|
13628
13636
|
if (frames.length === 0) {
|
|
13629
13637
|
throw new Error(chunk2EFVXYNA_js.translationsEn["pptx.export.errorNoSlidesGif"]);
|
|
13630
13638
|
}
|
|
13631
|
-
const gifBytes =
|
|
13639
|
+
const gifBytes = chunkUXVFNGJH_js.encodeGif(frames, Math.round(slideDurationMs / 10));
|
|
13632
13640
|
onProgress?.(totalSlides, totalSlides);
|
|
13633
13641
|
const buf = new ArrayBuffer(gifBytes.length);
|
|
13634
13642
|
new Uint8Array(buf).set(gifBytes);
|
|
@@ -13682,7 +13690,7 @@ function exportAllSlidesToSvg(data, options = {}) {
|
|
|
13682
13690
|
continue;
|
|
13683
13691
|
}
|
|
13684
13692
|
onProgress?.(processedCount, data.slides.length);
|
|
13685
|
-
let svg =
|
|
13693
|
+
let svg = chunk2V6BD4JQ_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
|
|
13686
13694
|
if (embedFonts && fontFaces?.length) {
|
|
13687
13695
|
svg = injectFontFaces(svg, fontFaces);
|
|
13688
13696
|
}
|
|
@@ -13742,7 +13750,7 @@ function useExportSaveAs(input) {
|
|
|
13742
13750
|
}
|
|
13743
13751
|
setExportProgress(70);
|
|
13744
13752
|
setExportStatusMessage("Writing README...");
|
|
13745
|
-
const readme =
|
|
13753
|
+
const readme = chunkUXVFNGJH_js.generatePackageReadme(pptxFilename);
|
|
13746
13754
|
pkgFolder.file("README.txt", readme);
|
|
13747
13755
|
if (abortCtrl.signal.aborted) {
|
|
13748
13756
|
throw new DOMException("Export cancelled", "AbortError");
|
|
@@ -13753,7 +13761,7 @@ function useExportSaveAs(input) {
|
|
|
13753
13761
|
setExportProgress(95);
|
|
13754
13762
|
setExportStatusMessage("Downloading...");
|
|
13755
13763
|
const baseName = pptxFilename.replace(/\.[^.]+$/u, "");
|
|
13756
|
-
|
|
13764
|
+
chunkUXVFNGJH_js.downloadBlob(zipBlob, `${baseName}-package.zip`);
|
|
13757
13765
|
setExportProgress(100);
|
|
13758
13766
|
} catch (err) {
|
|
13759
13767
|
if (err.name !== "AbortError") {
|
|
@@ -13776,7 +13784,7 @@ function useExportSaveAs(input) {
|
|
|
13776
13784
|
const blob = new Blob([data], {
|
|
13777
13785
|
type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
|
|
13778
13786
|
});
|
|
13779
|
-
|
|
13787
|
+
chunkUXVFNGJH_js.downloadBlob(blob, `${baseName}.${ext}`);
|
|
13780
13788
|
} catch (err) {
|
|
13781
13789
|
console.error(`[PowerPointViewer] Save as .${ext} failed:`, err);
|
|
13782
13790
|
}
|
|
@@ -13789,7 +13797,7 @@ function useExportSaveAs(input) {
|
|
|
13789
13797
|
const pptxGuides = guides.map((g) => ({
|
|
13790
13798
|
id: g.id,
|
|
13791
13799
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
13792
|
-
positionEmu:
|
|
13800
|
+
positionEmu: chunk2V6BD4JQ_js.guidePxToEmu(g.position)
|
|
13793
13801
|
}));
|
|
13794
13802
|
return {
|
|
13795
13803
|
...slide,
|
|
@@ -13853,7 +13861,7 @@ function safeConfirm(message) {
|
|
|
13853
13861
|
}
|
|
13854
13862
|
}
|
|
13855
13863
|
function downloadBlob2(blob, filename) {
|
|
13856
|
-
|
|
13864
|
+
chunkUXVFNGJH_js.downloadBlob(blob, chunkUXVFNGJH_js.sanitizeDownloadFilename(filename));
|
|
13857
13865
|
}
|
|
13858
13866
|
|
|
13859
13867
|
// src/viewer/hooks/useExportHandlers.ts
|
|
@@ -13954,21 +13962,21 @@ function useExportHandlers(input) {
|
|
|
13954
13962
|
{
|
|
13955
13963
|
scale: 2,
|
|
13956
13964
|
onProgress: (current, total) => {
|
|
13957
|
-
setExportProgress(
|
|
13958
|
-
setExportStatusMessage(
|
|
13965
|
+
setExportProgress(chunkUXVFNGJH_js.slideProgressPercent(current, total));
|
|
13966
|
+
setExportStatusMessage(chunkUXVFNGJH_js.slideStatusLabel("Rendering", current, total));
|
|
13959
13967
|
},
|
|
13960
13968
|
signal: abortCtrl.signal
|
|
13961
13969
|
}
|
|
13962
13970
|
);
|
|
13963
|
-
setExportProgress(
|
|
13971
|
+
setExportProgress(chunkUXVFNGJH_js.EXPORT_ASSEMBLING_PERCENT);
|
|
13964
13972
|
setExportStatusMessage("Building PDF...");
|
|
13965
13973
|
await new Promise((r) => {
|
|
13966
13974
|
setTimeout(r, 100);
|
|
13967
13975
|
});
|
|
13968
|
-
setExportProgress(
|
|
13976
|
+
setExportProgress(chunkUXVFNGJH_js.EXPORT_DONE_PERCENT);
|
|
13969
13977
|
setExportStatusMessage("Done!");
|
|
13970
13978
|
} catch (err) {
|
|
13971
|
-
if (!
|
|
13979
|
+
if (!chunkUXVFNGJH_js.isExportAbortError(err)) {
|
|
13972
13980
|
console.error("[PowerPointViewer] PDF export failed:", err);
|
|
13973
13981
|
}
|
|
13974
13982
|
} finally {
|
|
@@ -13998,21 +14006,21 @@ function useExportHandlers(input) {
|
|
|
13998
14006
|
{
|
|
13999
14007
|
scale: 2,
|
|
14000
14008
|
onProgress: (current, total) => {
|
|
14001
|
-
setExportProgress(
|
|
14002
|
-
setExportStatusMessage(
|
|
14009
|
+
setExportProgress(chunkUXVFNGJH_js.slideProgressPercent(current, total));
|
|
14010
|
+
setExportStatusMessage(chunkUXVFNGJH_js.slideStatusLabel("Rendering", current, total));
|
|
14003
14011
|
},
|
|
14004
14012
|
signal: abortCtrl.signal
|
|
14005
14013
|
}
|
|
14006
14014
|
);
|
|
14007
|
-
setExportProgress(
|
|
14015
|
+
setExportProgress(chunkUXVFNGJH_js.EXPORT_ASSEMBLING_PERCENT);
|
|
14008
14016
|
setExportStatusMessage("Building PDF...");
|
|
14009
14017
|
await new Promise((r) => {
|
|
14010
14018
|
setTimeout(r, 100);
|
|
14011
14019
|
});
|
|
14012
|
-
setExportProgress(
|
|
14020
|
+
setExportProgress(chunkUXVFNGJH_js.EXPORT_DONE_PERCENT);
|
|
14013
14021
|
setExportStatusMessage("Done!");
|
|
14014
14022
|
} catch (err) {
|
|
14015
|
-
if (!
|
|
14023
|
+
if (!chunkUXVFNGJH_js.isExportAbortError(err)) {
|
|
14016
14024
|
console.error("[PowerPointViewer] Notes PDF export failed:", err);
|
|
14017
14025
|
}
|
|
14018
14026
|
} finally {
|
|
@@ -14053,22 +14061,22 @@ function useExportHandlers(input) {
|
|
|
14053
14061
|
scale: 1,
|
|
14054
14062
|
slideDurationMs: 3e3,
|
|
14055
14063
|
onProgress: (current, total) => {
|
|
14056
|
-
setExportProgress(
|
|
14057
|
-
setExportStatusMessage(
|
|
14064
|
+
setExportProgress(chunkUXVFNGJH_js.slideProgressPercent(current, total, 45));
|
|
14065
|
+
setExportStatusMessage(chunkUXVFNGJH_js.slideStatusLabel("Capturing", current, total));
|
|
14058
14066
|
},
|
|
14059
14067
|
onRecordProgress: (current, total) => {
|
|
14060
|
-
setExportProgress(
|
|
14061
|
-
setExportStatusMessage(
|
|
14068
|
+
setExportProgress(chunkUXVFNGJH_js.recordProgressPercent(current, total));
|
|
14069
|
+
setExportStatusMessage(chunkUXVFNGJH_js.slideStatusLabel("Recording", current, total));
|
|
14062
14070
|
},
|
|
14063
14071
|
signal: abortCtrl.signal
|
|
14064
14072
|
}
|
|
14065
14073
|
);
|
|
14066
|
-
setExportProgress(
|
|
14074
|
+
setExportProgress(chunkUXVFNGJH_js.EXPORT_ASSEMBLING_PERCENT);
|
|
14067
14075
|
setExportStatusMessage("Saving file...");
|
|
14068
14076
|
downloadBlob2(blob, "presentation.webm");
|
|
14069
|
-
setExportProgress(
|
|
14077
|
+
setExportProgress(chunkUXVFNGJH_js.EXPORT_DONE_PERCENT);
|
|
14070
14078
|
} catch (err) {
|
|
14071
|
-
if (!
|
|
14079
|
+
if (!chunkUXVFNGJH_js.isExportAbortError(err)) {
|
|
14072
14080
|
console.error("[PowerPointViewer] Video export failed:", err);
|
|
14073
14081
|
}
|
|
14074
14082
|
} finally {
|
|
@@ -14096,18 +14104,18 @@ function useExportHandlers(input) {
|
|
|
14096
14104
|
scale: 0.5,
|
|
14097
14105
|
slideDurationMs: 2e3,
|
|
14098
14106
|
onProgress: (current, total) => {
|
|
14099
|
-
setExportProgress(
|
|
14100
|
-
setExportStatusMessage(
|
|
14107
|
+
setExportProgress(chunkUXVFNGJH_js.slideProgressPercent(current, total));
|
|
14108
|
+
setExportStatusMessage(chunkUXVFNGJH_js.slideStatusLabel("Encoding", current, total));
|
|
14101
14109
|
},
|
|
14102
14110
|
signal: abortCtrl.signal
|
|
14103
14111
|
}
|
|
14104
14112
|
);
|
|
14105
|
-
setExportProgress(
|
|
14113
|
+
setExportProgress(chunkUXVFNGJH_js.EXPORT_ASSEMBLING_PERCENT);
|
|
14106
14114
|
setExportStatusMessage("Saving file...");
|
|
14107
14115
|
downloadBlob2(blob, "presentation.gif");
|
|
14108
|
-
setExportProgress(
|
|
14116
|
+
setExportProgress(chunkUXVFNGJH_js.EXPORT_DONE_PERCENT);
|
|
14109
14117
|
} catch (err) {
|
|
14110
|
-
if (!
|
|
14118
|
+
if (!chunkUXVFNGJH_js.isExportAbortError(err)) {
|
|
14111
14119
|
console.error("[PowerPointViewer] GIF export failed:", err);
|
|
14112
14120
|
}
|
|
14113
14121
|
} finally {
|
|
@@ -14147,7 +14155,7 @@ function openPrintWindow(title, bodyHtml, orientation, colorFilter, frameSlides)
|
|
|
14147
14155
|
}
|
|
14148
14156
|
printWindow.document.open();
|
|
14149
14157
|
printWindow.document.write(
|
|
14150
|
-
|
|
14158
|
+
chunkUXVFNGJH_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
|
|
14151
14159
|
);
|
|
14152
14160
|
printWindow.document.close();
|
|
14153
14161
|
printWindow.focus();
|
|
@@ -14208,7 +14216,7 @@ function usePrintHandlers(input) {
|
|
|
14208
14216
|
if (svgs.length === 0) {
|
|
14209
14217
|
return;
|
|
14210
14218
|
}
|
|
14211
|
-
const printDoc =
|
|
14219
|
+
const printDoc = chunkUXVFNGJH_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
|
|
14212
14220
|
title: "Slides (Vector)",
|
|
14213
14221
|
orientation: settings.orientation,
|
|
14214
14222
|
colorFilter
|
|
@@ -14244,7 +14252,7 @@ function usePrintHandlers(input) {
|
|
|
14244
14252
|
if (settings.printWhat === "outline") {
|
|
14245
14253
|
openPrintWindow(
|
|
14246
14254
|
"Outline",
|
|
14247
|
-
`<div class="outline-page">${
|
|
14255
|
+
`<div class="outline-page">${chunkUXVFNGJH_js.buildOutlineHtml(slideIndices, slides)}</div>`,
|
|
14248
14256
|
settings.orientation,
|
|
14249
14257
|
colorFilter,
|
|
14250
14258
|
settings.frameSlides
|
|
@@ -14269,7 +14277,7 @@ function usePrintHandlers(input) {
|
|
|
14269
14277
|
if (settings.printWhat === "slides") {
|
|
14270
14278
|
openPrintWindow(
|
|
14271
14279
|
"Slides",
|
|
14272
|
-
|
|
14280
|
+
chunkUXVFNGJH_js.buildSlidesHtml(slideImages, slideIndices),
|
|
14273
14281
|
settings.orientation,
|
|
14274
14282
|
colorFilter,
|
|
14275
14283
|
settings.frameSlides
|
|
@@ -14279,7 +14287,7 @@ function usePrintHandlers(input) {
|
|
|
14279
14287
|
if (settings.printWhat === "notes") {
|
|
14280
14288
|
openPrintWindow(
|
|
14281
14289
|
"Notes Pages",
|
|
14282
|
-
|
|
14290
|
+
chunkUXVFNGJH_js.buildNotesHtml(slideImages, slideIndices, slides),
|
|
14283
14291
|
"portrait",
|
|
14284
14292
|
colorFilter,
|
|
14285
14293
|
settings.frameSlides
|
|
@@ -14290,7 +14298,7 @@ function usePrintHandlers(input) {
|
|
|
14290
14298
|
const spp = settings.slidesPerPage;
|
|
14291
14299
|
openPrintWindow(
|
|
14292
14300
|
`Handout ${spp} per page`,
|
|
14293
|
-
|
|
14301
|
+
chunkUXVFNGJH_js.buildHandoutsHtml(slideImages, slideIndices, spp),
|
|
14294
14302
|
"portrait",
|
|
14295
14303
|
colorFilter,
|
|
14296
14304
|
settings.frameSlides
|
|
@@ -14454,7 +14462,7 @@ function useThemeSwitching(input) {
|
|
|
14454
14462
|
}
|
|
14455
14463
|
try {
|
|
14456
14464
|
await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
|
|
14457
|
-
const newData =
|
|
14465
|
+
const newData = chunk2V6BD4JQ_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
|
|
14458
14466
|
onDataChange(newData);
|
|
14459
14467
|
onThemeChanged?.(preset);
|
|
14460
14468
|
} catch (error) {
|
|
@@ -14471,7 +14479,7 @@ function useThemeSwitching(input) {
|
|
|
14471
14479
|
}
|
|
14472
14480
|
try {
|
|
14473
14481
|
await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
|
|
14474
|
-
const newData =
|
|
14482
|
+
const newData = chunk2V6BD4JQ_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
|
|
14475
14483
|
onDataChange(newData);
|
|
14476
14484
|
} catch (error) {
|
|
14477
14485
|
console.error("Failed to switch to custom theme:", error);
|
|
@@ -14483,12 +14491,12 @@ function useThemeSwitching(input) {
|
|
|
14483
14491
|
if (!data?.theme?.colorScheme) {
|
|
14484
14492
|
return void 0;
|
|
14485
14493
|
}
|
|
14486
|
-
return
|
|
14487
|
-
(p) =>
|
|
14494
|
+
return chunk2V6BD4JQ_js.THEME_PRESETS.find(
|
|
14495
|
+
(p) => chunk2V6BD4JQ_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
|
|
14488
14496
|
);
|
|
14489
14497
|
}, [data?.theme?.colorScheme]);
|
|
14490
14498
|
return {
|
|
14491
|
-
presets:
|
|
14499
|
+
presets: chunk2V6BD4JQ_js.THEME_PRESETS,
|
|
14492
14500
|
switchToPreset,
|
|
14493
14501
|
switchToCustom,
|
|
14494
14502
|
currentPreset
|
|
@@ -14563,7 +14571,7 @@ function usePropertyHandlers(input) {
|
|
|
14563
14571
|
}
|
|
14564
14572
|
try {
|
|
14565
14573
|
const ab = await file.arrayBuffer();
|
|
14566
|
-
const h = new
|
|
14574
|
+
const h = new chunk2V6BD4JQ_js.PptxHandler();
|
|
14567
14575
|
const other = await h.load(ab);
|
|
14568
14576
|
if (!other) {
|
|
14569
14577
|
return;
|
|
@@ -14573,7 +14581,7 @@ function usePropertyHandlers(input) {
|
|
|
14573
14581
|
width: canvasSize.width,
|
|
14574
14582
|
height: canvasSize.height
|
|
14575
14583
|
};
|
|
14576
|
-
setCompareResult(
|
|
14584
|
+
setCompareResult(chunkUXVFNGJH_js.comparePresentation(cur, other));
|
|
14577
14585
|
setIsComparePanelOpen(true);
|
|
14578
14586
|
} catch (err) {
|
|
14579
14587
|
console.warn("Compare failed:", err);
|
|
@@ -14590,7 +14598,7 @@ function usePropertyHandlers(input) {
|
|
|
14590
14598
|
if (!diff || diff.status === "unchanged") {
|
|
14591
14599
|
return;
|
|
14592
14600
|
}
|
|
14593
|
-
setSlides((prev) =>
|
|
14601
|
+
setSlides((prev) => chunkUXVFNGJH_js.applyAcceptSlide(prev, diff));
|
|
14594
14602
|
setIsDirty(true);
|
|
14595
14603
|
},
|
|
14596
14604
|
[compareResult, setSlides, setIsDirty]
|
|
@@ -14601,10 +14609,10 @@ function usePropertyHandlers(input) {
|
|
|
14601
14609
|
if (!compareResult) {
|
|
14602
14610
|
return;
|
|
14603
14611
|
}
|
|
14604
|
-
setSlides((prev) =>
|
|
14612
|
+
setSlides((prev) => chunkUXVFNGJH_js.applyAcceptAllSlides(prev, compareResult));
|
|
14605
14613
|
setIsDirty(true);
|
|
14606
14614
|
}, [compareResult, setSlides, setIsDirty]);
|
|
14607
|
-
const usedFontFamilies = React3.useMemo(() =>
|
|
14615
|
+
const usedFontFamilies = React3.useMemo(() => chunkUXVFNGJH_js.collectUsedFonts(slides), [slides]);
|
|
14608
14616
|
return {
|
|
14609
14617
|
handleUpdateNotes,
|
|
14610
14618
|
handleUpdateSlide,
|
|
@@ -14723,7 +14731,7 @@ function useIsMobile(input) {
|
|
|
14723
14731
|
const containerRef = input?.containerRef;
|
|
14724
14732
|
const isTouchDevice = React3.useSyncExternalStore(
|
|
14725
14733
|
subscribeTouchCapability,
|
|
14726
|
-
|
|
14734
|
+
chunkUXVFNGJH_js.detectTouchDevice,
|
|
14727
14735
|
() => false
|
|
14728
14736
|
// server snapshot
|
|
14729
14737
|
);
|
|
@@ -14739,7 +14747,7 @@ function useIsMobile(input) {
|
|
|
14739
14747
|
}
|
|
14740
14748
|
return containerRef?.current?.clientHeight ?? window.innerHeight;
|
|
14741
14749
|
});
|
|
14742
|
-
const [orientation, setOrientation] = React3.useState(
|
|
14750
|
+
const [orientation, setOrientation] = React3.useState(chunkUXVFNGJH_js.detectOrientation);
|
|
14743
14751
|
const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = React3.useState(false);
|
|
14744
14752
|
const [initialViewportHeight] = React3.useState(
|
|
14745
14753
|
() => typeof window !== "undefined" ? window.innerHeight : 800
|
|
@@ -14783,7 +14791,7 @@ function useIsMobile(input) {
|
|
|
14783
14791
|
return;
|
|
14784
14792
|
}
|
|
14785
14793
|
const handleOrientationChange = () => {
|
|
14786
|
-
setOrientation(
|
|
14794
|
+
setOrientation(chunkUXVFNGJH_js.detectOrientation());
|
|
14787
14795
|
};
|
|
14788
14796
|
if (screen.orientation) {
|
|
14789
14797
|
screen.orientation.addEventListener("change", handleOrientationChange);
|
|
@@ -14813,9 +14821,9 @@ function useIsMobile(input) {
|
|
|
14813
14821
|
window.addEventListener("resize", handleResize);
|
|
14814
14822
|
return () => window.removeEventListener("resize", handleResize);
|
|
14815
14823
|
}, [isTouchDevice, initialViewportHeight]);
|
|
14816
|
-
const isMobile =
|
|
14817
|
-
const isTablet = !isMobile && containerWidth >=
|
|
14818
|
-
const isDesktop = !isMobile && containerWidth >=
|
|
14824
|
+
const isMobile = chunkUXVFNGJH_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
|
|
14825
|
+
const isTablet = !isMobile && containerWidth >= chunkUXVFNGJH_js.MOBILE_BREAKPOINT && containerWidth < chunkUXVFNGJH_js.TABLET_BREAKPOINT;
|
|
14826
|
+
const isDesktop = !isMobile && containerWidth >= chunkUXVFNGJH_js.TABLET_BREAKPOINT;
|
|
14819
14827
|
return {
|
|
14820
14828
|
isMobile,
|
|
14821
14829
|
isTablet,
|
|
@@ -14876,11 +14884,11 @@ function useViewerDialogs(input) {
|
|
|
14876
14884
|
);
|
|
14877
14885
|
const [embedFontsEnabled, setEmbedFontsEnabled] = React3.useState(false);
|
|
14878
14886
|
const [isNarrowViewport, setIsNarrowViewport] = React3.useState(
|
|
14879
|
-
() => typeof window !== "undefined" ?
|
|
14887
|
+
() => typeof window !== "undefined" ? chunkUXVFNGJH_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
|
|
14880
14888
|
);
|
|
14881
14889
|
React3.useEffect(() => {
|
|
14882
14890
|
const handleWindow = () => setIsNarrowViewport(
|
|
14883
|
-
|
|
14891
|
+
chunkUXVFNGJH_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
|
|
14884
14892
|
);
|
|
14885
14893
|
let observer = null;
|
|
14886
14894
|
let raf = 0;
|
|
@@ -14894,12 +14902,12 @@ function useViewerDialogs(input) {
|
|
|
14894
14902
|
const entry = entries[0];
|
|
14895
14903
|
if (entry) {
|
|
14896
14904
|
setIsNarrowViewport(
|
|
14897
|
-
|
|
14905
|
+
chunkUXVFNGJH_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
|
|
14898
14906
|
);
|
|
14899
14907
|
}
|
|
14900
14908
|
});
|
|
14901
14909
|
observer.observe(el);
|
|
14902
|
-
setIsNarrowViewport(
|
|
14910
|
+
setIsNarrowViewport(chunkUXVFNGJH_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
|
|
14903
14911
|
};
|
|
14904
14912
|
attach();
|
|
14905
14913
|
window.addEventListener("resize", handleWindow);
|
|
@@ -15076,7 +15084,7 @@ function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
|
|
|
15076
15084
|
return slides.map((_, i) => i).filter((i) => !slides[i]?.hidden);
|
|
15077
15085
|
}
|
|
15078
15086
|
function computeSlideSectionGroups(slides, sections) {
|
|
15079
|
-
return
|
|
15087
|
+
return chunkUXVFNGJH_js.groupSlidesBySection(sections, slides).map((group) => ({
|
|
15080
15088
|
id: group.section?.id ?? (sections.length > 0 ? UNGROUPED_SECTION_ID : "default"),
|
|
15081
15089
|
label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
|
|
15082
15090
|
slideIndexes: group.slideIndexes,
|
|
@@ -15313,13 +15321,13 @@ function useSerialize(input) {
|
|
|
15313
15321
|
let processedSlide = slide;
|
|
15314
15322
|
if (pendingEditId) {
|
|
15315
15323
|
const updatedElements = slide.elements.map((el) => {
|
|
15316
|
-
if (el.id !== pendingEditId || !
|
|
15324
|
+
if (el.id !== pendingEditId || !chunk2V6BD4JQ_js.hasTextProperties(el)) {
|
|
15317
15325
|
return el;
|
|
15318
15326
|
}
|
|
15319
15327
|
return {
|
|
15320
15328
|
...el,
|
|
15321
15329
|
text: pendingEditText,
|
|
15322
|
-
textSegments:
|
|
15330
|
+
textSegments: chunkUXVFNGJH_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
|
|
15323
15331
|
};
|
|
15324
15332
|
});
|
|
15325
15333
|
if (updatedElements.some((el, i) => el !== slide.elements[i])) {
|
|
@@ -15332,7 +15340,7 @@ function useSerialize(input) {
|
|
|
15332
15340
|
const pptxGuides = guides.map((g) => ({
|
|
15333
15341
|
id: g.id,
|
|
15334
15342
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
15335
|
-
positionEmu:
|
|
15343
|
+
positionEmu: chunk2V6BD4JQ_js.guidePxToEmu(g.position)
|
|
15336
15344
|
}));
|
|
15337
15345
|
return {
|
|
15338
15346
|
...processedSlide,
|
|
@@ -15556,10 +15564,10 @@ function usePresentationSetup(input) {
|
|
|
15556
15564
|
onToggleEraser: () => annotations.setPresentationTool("eraser"),
|
|
15557
15565
|
onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
|
|
15558
15566
|
onSaveRehearsalTimings: (timings) => {
|
|
15559
|
-
setSlides((prev) =>
|
|
15567
|
+
setSlides((prev) => chunkUXVFNGJH_js.applyRehearsalTimings(prev, timings));
|
|
15560
15568
|
history.markDirty();
|
|
15561
15569
|
},
|
|
15562
|
-
loopContinuously:
|
|
15570
|
+
loopContinuously: chunkUXVFNGJH_js.shouldLoopContinuously(presentationProperties),
|
|
15563
15571
|
showWithAnimation: presentationProperties.showWithAnimation,
|
|
15564
15572
|
useTimings: presentationProperties.advanceMode !== "manual",
|
|
15565
15573
|
endWithBlackSlide
|
|
@@ -15721,7 +15729,7 @@ function useEditorOperations(input) {
|
|
|
15721
15729
|
const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
|
|
15722
15730
|
React3.useEffect(() => {
|
|
15723
15731
|
if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
|
|
15724
|
-
copiedFormatRef.current =
|
|
15732
|
+
copiedFormatRef.current = chunkUXVFNGJH_js.copyFormatFromElement(selectedElement);
|
|
15725
15733
|
} else if (!formatPainterActive) {
|
|
15726
15734
|
copiedFormatRef.current = null;
|
|
15727
15735
|
}
|
|
@@ -15747,12 +15755,12 @@ function useEditorOperations(input) {
|
|
|
15747
15755
|
e.stopPropagation();
|
|
15748
15756
|
const element = elementLookup.get(elementId);
|
|
15749
15757
|
if (element) {
|
|
15750
|
-
const updated =
|
|
15758
|
+
const updated = chunkUXVFNGJH_js.applyFormatToElement(element, copiedFormatRef.current);
|
|
15751
15759
|
const updates = {};
|
|
15752
|
-
if (
|
|
15760
|
+
if (chunk2V6BD4JQ_js.hasShapeProperties(updated)) {
|
|
15753
15761
|
updates.shapeStyle = updated.shapeStyle;
|
|
15754
15762
|
}
|
|
15755
|
-
if (
|
|
15763
|
+
if (chunk2V6BD4JQ_js.hasTextProperties(updated)) {
|
|
15756
15764
|
updates.textStyle = updated.textStyle;
|
|
15757
15765
|
}
|
|
15758
15766
|
ops.updateElementById(elementId, updates);
|
|
@@ -15896,7 +15904,7 @@ function collectReferencedFontFamilies(slides) {
|
|
|
15896
15904
|
const families = /* @__PURE__ */ new Set();
|
|
15897
15905
|
for (const slide of slides) {
|
|
15898
15906
|
for (const el of slide.elements) {
|
|
15899
|
-
if (
|
|
15907
|
+
if (chunk2V6BD4JQ_js.hasTextProperties(el) && el.textSegments) {
|
|
15900
15908
|
for (const seg of el.textSegments) {
|
|
15901
15909
|
if (seg.style.fontFamily) {
|
|
15902
15910
|
families.add(seg.style.fontFamily);
|
|
@@ -16678,7 +16686,7 @@ function useReducedMotion() {
|
|
|
16678
16686
|
}
|
|
16679
16687
|
function useViewerOptions() {
|
|
16680
16688
|
const storeRef = React3.useRef(null);
|
|
16681
|
-
storeRef.current ??=
|
|
16689
|
+
storeRef.current ??= chunkUXVFNGJH_js.createViewerOptionsStore();
|
|
16682
16690
|
const store = storeRef.current;
|
|
16683
16691
|
const options = React3.useSyncExternalStore(
|
|
16684
16692
|
(onStoreChange) => store.subscribe(onStoreChange),
|
|
@@ -16687,9 +16695,9 @@ function useViewerOptions() {
|
|
|
16687
16695
|
);
|
|
16688
16696
|
return { optionsStore: store, options };
|
|
16689
16697
|
}
|
|
16690
|
-
var KNOWN_TAB_IDS = new Set(
|
|
16698
|
+
var KNOWN_TAB_IDS = new Set(chunkUXVFNGJH_js.TOOLBAR_TABS.map((tab) => tab.id));
|
|
16691
16699
|
function computeToolbarVisibility(hiddenActions) {
|
|
16692
|
-
const isHidden = (id) =>
|
|
16700
|
+
const isHidden = (id) => chunkUXVFNGJH_js.isActionHidden(id, hiddenActions);
|
|
16693
16701
|
const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id);
|
|
16694
16702
|
return { isHidden, isTabVisible };
|
|
16695
16703
|
}
|
|
@@ -16706,7 +16714,7 @@ function useYjsProvider({ config }) {
|
|
|
16706
16714
|
const timeoutRef = React3.useRef(null);
|
|
16707
16715
|
const gateRef = React3.useRef(null);
|
|
16708
16716
|
if (!gateRef.current) {
|
|
16709
|
-
gateRef.current =
|
|
16717
|
+
gateRef.current = chunkUXVFNGJH_js.createSyncGate(() => setSynced(true));
|
|
16710
16718
|
}
|
|
16711
16719
|
const teardown = React3.useCallback(() => {
|
|
16712
16720
|
if (timeoutRef.current) {
|
|
@@ -16744,7 +16752,7 @@ function useYjsProvider({ config }) {
|
|
|
16744
16752
|
if (config.authToken) {
|
|
16745
16753
|
opts.password = config.authToken;
|
|
16746
16754
|
}
|
|
16747
|
-
const provider = new WebrtcProvider(
|
|
16755
|
+
const provider = new WebrtcProvider(chunkUXVFNGJH_js.validateRoomId(config.roomId), yDoc, opts);
|
|
16748
16756
|
setDoc(yDoc);
|
|
16749
16757
|
setAwareness(provider.awareness);
|
|
16750
16758
|
setClientId(provider.awareness.clientID);
|
|
@@ -16786,13 +16794,13 @@ function useYjsProvider({ config }) {
|
|
|
16786
16794
|
if (!config) {
|
|
16787
16795
|
return;
|
|
16788
16796
|
}
|
|
16789
|
-
const roomId =
|
|
16790
|
-
const transport = config.transport ??
|
|
16797
|
+
const roomId = chunkUXVFNGJH_js.validateRoomId(config.roomId);
|
|
16798
|
+
const transport = config.transport ?? chunkUXVFNGJH_js.resolveTransportForServerUrl(config.serverUrl);
|
|
16791
16799
|
if (transport === "webrtc") {
|
|
16792
16800
|
await initWebrtc();
|
|
16793
16801
|
return;
|
|
16794
16802
|
}
|
|
16795
|
-
if (
|
|
16803
|
+
if (chunkUXVFNGJH_js.isMixedContentBlocked(config.serverUrl)) {
|
|
16796
16804
|
console.warn(
|
|
16797
16805
|
`[pptx-viewer] Refusing to connect: insecure ws:// server "${config.serverUrl}" is blocked from a secure (https) page. Use a wss:// URL.`
|
|
16798
16806
|
);
|
|
@@ -16852,7 +16860,7 @@ function useYjsProvider({ config }) {
|
|
|
16852
16860
|
cleanupRef.current = null;
|
|
16853
16861
|
setStatus("error");
|
|
16854
16862
|
}
|
|
16855
|
-
},
|
|
16863
|
+
}, chunkUXVFNGJH_js.CONNECTION_TIMEOUT_MS);
|
|
16856
16864
|
}
|
|
16857
16865
|
setDoc(yDoc);
|
|
16858
16866
|
setAwareness(provider.awareness);
|
|
@@ -16925,7 +16933,7 @@ function usePresenceTracking({
|
|
|
16925
16933
|
awareness.setLocalStateField("presence", state);
|
|
16926
16934
|
lastBroadcastRef.current = Date.now();
|
|
16927
16935
|
};
|
|
16928
|
-
if (elapsed >=
|
|
16936
|
+
if (elapsed >= chunkUXVFNGJH_js.BROADCAST_THROTTLE_MS) {
|
|
16929
16937
|
if (pendingBroadcastRef.current) {
|
|
16930
16938
|
clearTimeout(pendingBroadcastRef.current);
|
|
16931
16939
|
pendingBroadcastRef.current = null;
|
|
@@ -16935,7 +16943,7 @@ function usePresenceTracking({
|
|
|
16935
16943
|
pendingBroadcastRef.current = setTimeout(() => {
|
|
16936
16944
|
pendingBroadcastRef.current = null;
|
|
16937
16945
|
flush();
|
|
16938
|
-
},
|
|
16946
|
+
}, chunkUXVFNGJH_js.BROADCAST_THROTTLE_MS - elapsed);
|
|
16939
16947
|
}
|
|
16940
16948
|
},
|
|
16941
16949
|
[awareness, userName, userColor, userAvatar, role]
|
|
@@ -16960,7 +16968,7 @@ function usePresenceTracking({
|
|
|
16960
16968
|
return;
|
|
16961
16969
|
}
|
|
16962
16970
|
const handleChange = () => {
|
|
16963
|
-
const users =
|
|
16971
|
+
const users = chunkUXVFNGJH_js.derivePresenceList(
|
|
16964
16972
|
awareness.getStates(),
|
|
16965
16973
|
localClientId,
|
|
16966
16974
|
canvasWidth,
|
|
@@ -17008,7 +17016,7 @@ function useCollaborativeState({
|
|
|
17008
17016
|
canvasWidth,
|
|
17009
17017
|
canvasHeight
|
|
17010
17018
|
}) {
|
|
17011
|
-
const userColor =
|
|
17019
|
+
const userColor = chunkUXVFNGJH_js.sanitizeColor(config?.userColor, "#6366f1");
|
|
17012
17020
|
const { status, awareness, doc, clientId, synced, retry } = useYjsProvider({ config });
|
|
17013
17021
|
const { remoteUsers, broadcastPresence } = usePresenceTracking({
|
|
17014
17022
|
awareness,
|
|
@@ -17113,10 +17121,10 @@ function useYjsDocumentSync({
|
|
|
17113
17121
|
return;
|
|
17114
17122
|
}
|
|
17115
17123
|
try {
|
|
17116
|
-
const { PptxHandler: PptxHandler2 } = await import('./dist-
|
|
17124
|
+
const { PptxHandler: PptxHandler2 } = await import('./dist-ZA77P2O5.js');
|
|
17117
17125
|
const handler = new PptxHandler2();
|
|
17118
17126
|
await handler.load(sourceBytes.buffer);
|
|
17119
|
-
const currentSlides =
|
|
17127
|
+
const currentSlides = chunkUXVFNGJH_js.readSlidesFromYDoc(
|
|
17120
17128
|
doc
|
|
17121
17129
|
);
|
|
17122
17130
|
const slidesToSave = buildSaveSlides(currentSlides, templateElementsBySlideId);
|
|
@@ -17134,7 +17142,7 @@ function useYjsDocumentSync({
|
|
|
17134
17142
|
if (!doc || !isConnected) {
|
|
17135
17143
|
return;
|
|
17136
17144
|
}
|
|
17137
|
-
const docSlides =
|
|
17145
|
+
const docSlides = chunkUXVFNGJH_js.readSlidesFromYDoc(
|
|
17138
17146
|
doc
|
|
17139
17147
|
);
|
|
17140
17148
|
if (docSlides.length === 0) {
|
|
@@ -17158,11 +17166,11 @@ function useYjsDocumentSync({
|
|
|
17158
17166
|
lastSyncedRef.current = serialized;
|
|
17159
17167
|
void (async () => {
|
|
17160
17168
|
const factories = await getFactories();
|
|
17161
|
-
|
|
17169
|
+
chunkUXVFNGJH_js.reconcileSlidesInYDoc(
|
|
17162
17170
|
slides,
|
|
17163
17171
|
doc,
|
|
17164
17172
|
factories,
|
|
17165
|
-
|
|
17173
|
+
chunkUXVFNGJH_js.LOCAL_SYNC_ORIGIN
|
|
17166
17174
|
);
|
|
17167
17175
|
scheduleWriteBack();
|
|
17168
17176
|
})();
|
|
@@ -17172,10 +17180,10 @@ function useYjsDocumentSync({
|
|
|
17172
17180
|
return;
|
|
17173
17181
|
}
|
|
17174
17182
|
const handleChange = (_events, transaction) => {
|
|
17175
|
-
if (transaction?.origin ===
|
|
17183
|
+
if (transaction?.origin === chunkUXVFNGJH_js.LOCAL_SYNC_ORIGIN) {
|
|
17176
17184
|
return;
|
|
17177
17185
|
}
|
|
17178
|
-
const remoteSlides =
|
|
17186
|
+
const remoteSlides = chunkUXVFNGJH_js.readSlidesFromYDoc(
|
|
17179
17187
|
doc
|
|
17180
17188
|
);
|
|
17181
17189
|
if (remoteSlides.length === 0) {
|
|
@@ -17193,7 +17201,7 @@ function useYjsDocumentSync({
|
|
|
17193
17201
|
});
|
|
17194
17202
|
scheduleWriteBack();
|
|
17195
17203
|
};
|
|
17196
|
-
const unobserve =
|
|
17204
|
+
const unobserve = chunkUXVFNGJH_js.observeYDocSlides(
|
|
17197
17205
|
doc,
|
|
17198
17206
|
handleChange
|
|
17199
17207
|
);
|
|
@@ -17344,7 +17352,7 @@ function useLayoutSwitching(input) {
|
|
|
17344
17352
|
function useVirtualizedSlides({
|
|
17345
17353
|
totalItems,
|
|
17346
17354
|
itemHeight,
|
|
17347
|
-
overscan =
|
|
17355
|
+
overscan = chunkUXVFNGJH_js.DEFAULT_VIRTUAL_OVERSCAN
|
|
17348
17356
|
}) {
|
|
17349
17357
|
const scrollContainerRef = React3.useRef(null);
|
|
17350
17358
|
const [scrollTop, setScrollTop] = React3.useState(0);
|
|
@@ -17374,7 +17382,7 @@ function useVirtualizedSlides({
|
|
|
17374
17382
|
resizeObserver?.disconnect();
|
|
17375
17383
|
};
|
|
17376
17384
|
}, []);
|
|
17377
|
-
const range =
|
|
17385
|
+
const range = chunkUXVFNGJH_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
|
|
17378
17386
|
const safeItemHeight = Math.max(itemHeight, 1);
|
|
17379
17387
|
const scrollToIndex = React3.useCallback(
|
|
17380
17388
|
(index, behavior = "smooth") => {
|
|
@@ -17420,7 +17428,7 @@ function useTouchGestures(input) {
|
|
|
17420
17428
|
if (!el || !enabled) {
|
|
17421
17429
|
return;
|
|
17422
17430
|
}
|
|
17423
|
-
const recognizer =
|
|
17431
|
+
const recognizer = chunkUXVFNGJH_js.createTouchGestureRecognizer({
|
|
17424
17432
|
getScale: () => scaleRef.current,
|
|
17425
17433
|
minScale: MIN_ZOOM_SCALE,
|
|
17426
17434
|
maxScale: MAX_ZOOM_SCALE,
|
|
@@ -17463,7 +17471,7 @@ function scrollFocusedIntoView(keyboardInset) {
|
|
|
17463
17471
|
return;
|
|
17464
17472
|
}
|
|
17465
17473
|
const rect = active.getBoundingClientRect();
|
|
17466
|
-
const delta =
|
|
17474
|
+
const delta = chunkUXVFNGJH_js.computeScrollDelta(
|
|
17467
17475
|
{ top: rect.top, bottom: rect.bottom },
|
|
17468
17476
|
window.innerHeight,
|
|
17469
17477
|
keyboardInset
|
|
@@ -17483,8 +17491,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
17483
17491
|
return;
|
|
17484
17492
|
}
|
|
17485
17493
|
const update = () => {
|
|
17486
|
-
const metrics =
|
|
17487
|
-
const inset = metrics ?
|
|
17494
|
+
const metrics = chunkUXVFNGJH_js.readViewportMetrics(window);
|
|
17495
|
+
const inset = metrics ? chunkUXVFNGJH_js.computeKeyboardInset(metrics) : 0;
|
|
17488
17496
|
setKeyboardInset(inset);
|
|
17489
17497
|
if (inset > 0) {
|
|
17490
17498
|
window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
|
|
@@ -17495,8 +17503,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
17495
17503
|
vv.addEventListener("scroll", update);
|
|
17496
17504
|
const onFocusIn = () => {
|
|
17497
17505
|
window.requestAnimationFrame(() => {
|
|
17498
|
-
const metrics =
|
|
17499
|
-
const inset = metrics ?
|
|
17506
|
+
const metrics = chunkUXVFNGJH_js.readViewportMetrics(window);
|
|
17507
|
+
const inset = metrics ? chunkUXVFNGJH_js.computeKeyboardInset(metrics) : 0;
|
|
17500
17508
|
if (inset > 0) {
|
|
17501
17509
|
scrollFocusedIntoView(inset);
|
|
17502
17510
|
}
|
|
@@ -17509,7 +17517,7 @@ function useKeyboardInsets(enabled = true) {
|
|
|
17509
17517
|
document.removeEventListener("focusin", onFocusIn);
|
|
17510
17518
|
};
|
|
17511
17519
|
}, [enabled]);
|
|
17512
|
-
return { keyboardInset, isKeyboardOpen:
|
|
17520
|
+
return { keyboardInset, isKeyboardOpen: chunkUXVFNGJH_js.isKeyboardOpen(keyboardInset) };
|
|
17513
17521
|
}
|
|
17514
17522
|
|
|
17515
17523
|
// src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
|
|
@@ -17564,13 +17572,13 @@ function buildCanvasProps(input) {
|
|
|
17564
17572
|
if (mode === "present") {
|
|
17565
17573
|
presentation.handlePresentationAction(action);
|
|
17566
17574
|
} else if (action.url) {
|
|
17567
|
-
|
|
17575
|
+
chunkUXVFNGJH_js.safeOpenUrl(action.url);
|
|
17568
17576
|
}
|
|
17569
17577
|
};
|
|
17570
17578
|
const handleHyperlinkClick = (url) => {
|
|
17571
|
-
if (
|
|
17579
|
+
if (chunkUXVFNGJH_js.isPpactionUrl(url)) {
|
|
17572
17580
|
if (mode === "present") {
|
|
17573
|
-
const parsed =
|
|
17581
|
+
const parsed = chunkUXVFNGJH_js.parsePpactionUrl(url);
|
|
17574
17582
|
if (parsed) {
|
|
17575
17583
|
presentation.handlePresentationAction({
|
|
17576
17584
|
action: parsed.action,
|
|
@@ -17580,7 +17588,7 @@ function buildCanvasProps(input) {
|
|
|
17580
17588
|
}
|
|
17581
17589
|
return;
|
|
17582
17590
|
}
|
|
17583
|
-
|
|
17591
|
+
chunkUXVFNGJH_js.safeOpenUrl(url);
|
|
17584
17592
|
};
|
|
17585
17593
|
return {
|
|
17586
17594
|
activeSlide: effectiveSlide,
|
|
@@ -17900,7 +17908,7 @@ function buildToolbarProps(input) {
|
|
|
17900
17908
|
onOpenFile,
|
|
17901
17909
|
onOpenRecentFile,
|
|
17902
17910
|
onCreatePresentation: (templateId) => {
|
|
17903
|
-
s.setSlides(
|
|
17911
|
+
s.setSlides(chunkUXVFNGJH_js.createBackstagePresentation(templateId));
|
|
17904
17912
|
s.setActiveSlideIndex(0);
|
|
17905
17913
|
s.setSelectedElementId(null);
|
|
17906
17914
|
s.setSelectedElementIds([]);
|
|
@@ -17955,7 +17963,7 @@ function buildToolbarProps(input) {
|
|
|
17955
17963
|
isCommentsPanelOpen: s.isInspectorPaneOpen,
|
|
17956
17964
|
slideCommentCount: activeSlide?.comments?.length ?? 0,
|
|
17957
17965
|
formatPainterActive: s.formatPainterActive,
|
|
17958
|
-
canActivateFormatPainter:
|
|
17966
|
+
canActivateFormatPainter: chunkUXVFNGJH_js.hasCopyableFormat(selectedElement),
|
|
17959
17967
|
onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
|
|
17960
17968
|
isSelectionPaneOpen: s.isSelectionPaneOpen,
|
|
17961
17969
|
onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
|
|
@@ -18218,7 +18226,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
18218
18226
|
}, [incomingContent]);
|
|
18219
18227
|
const onOpenFile = React3.useCallback(() => {
|
|
18220
18228
|
void (async () => {
|
|
18221
|
-
const picked = await
|
|
18229
|
+
const picked = await chunkUXVFNGJH_js.openPptxFile();
|
|
18222
18230
|
if (picked) {
|
|
18223
18231
|
setContent(picked.buffer);
|
|
18224
18232
|
}
|
|
@@ -18226,7 +18234,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
18226
18234
|
}, []);
|
|
18227
18235
|
const onOpenRecentFile = React3.useCallback((key) => {
|
|
18228
18236
|
void (async () => {
|
|
18229
|
-
const bytes = await
|
|
18237
|
+
const bytes = await chunkUXVFNGJH_js.readBackstageRecentFile(key);
|
|
18230
18238
|
if (bytes) {
|
|
18231
18239
|
setContent(bytes);
|
|
18232
18240
|
}
|