pptx-react-viewer 1.24.1 → 1.25.1
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 +8 -0
- package/dist/{Model3DScene-E7YIHJ2R.mjs → Model3DScene-2QZ7CADN.mjs} +2 -2
- package/dist/Model3DScene-2QZ7CADN.mjs.br +0 -0
- package/dist/Model3DScene-2QZ7CADN.mjs.gz +0 -0
- package/dist/{Model3DScene-RYR4SSOM.js → Model3DScene-AWSM6CYB.js} +3 -3
- package/dist/Model3DScene-AWSM6CYB.js.br +0 -0
- package/dist/Model3DScene-AWSM6CYB.js.gz +0 -0
- package/dist/PowerPointViewer-CnADroqZ.d.ts.map +1 -1
- package/dist/{SurfaceChart3DScene-ZM3J67VQ.mjs → SurfaceChart3DScene-IW4WGZHH.mjs} +2 -2
- package/dist/SurfaceChart3DScene-IW4WGZHH.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-IW4WGZHH.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-PBSZVNAM.js → SurfaceChart3DScene-PJ36HRGC.js} +3 -3
- package/dist/SurfaceChart3DScene-PJ36HRGC.js.br +0 -0
- package/dist/SurfaceChart3DScene-PJ36HRGC.js.gz +0 -0
- package/dist/{chunk-ZISXRMDJ.js → chunk-2EFVXYNA.js} +187 -1
- package/dist/chunk-2EFVXYNA.js.br +0 -0
- package/dist/{chunk-ZISXRMDJ.js.gz → chunk-2EFVXYNA.js.gz} +0 -0
- package/dist/{chunk-KVTSERRP.js → chunk-ASN2DZSP.js} +1743 -1105
- package/dist/chunk-ASN2DZSP.js.br +0 -0
- package/dist/chunk-ASN2DZSP.js.gz +0 -0
- package/dist/{chunk-KV3EOLP3.js → chunk-CYZLRYJV.js} +66 -8
- package/dist/chunk-CYZLRYJV.js.br +0 -0
- package/dist/{chunk-KV3EOLP3.js.gz → chunk-CYZLRYJV.js.gz} +0 -0
- package/dist/{chunk-E3KJKCSV.mjs → chunk-M3SIFXWD.mjs} +187 -1
- package/dist/chunk-M3SIFXWD.mjs.br +0 -0
- package/dist/{chunk-E3KJKCSV.mjs.gz → chunk-M3SIFXWD.mjs.gz} +0 -0
- package/dist/{chunk-LDZQNYWL.mjs → chunk-M7JHZV3P.mjs} +66 -8
- package/dist/chunk-M7JHZV3P.mjs.br +0 -0
- package/dist/{chunk-LDZQNYWL.mjs.gz → chunk-M7JHZV3P.mjs.gz} +0 -0
- package/dist/{chunk-275WERXZ.js → chunk-NIWO2WYI.js} +908 -43
- package/dist/chunk-NIWO2WYI.js.br +0 -0
- package/dist/chunk-NIWO2WYI.js.gz +0 -0
- package/dist/{chunk-DPTDFK2L.js → chunk-NT5FIWWU.js} +590 -511
- package/dist/chunk-NT5FIWWU.js.br +0 -0
- package/dist/chunk-NT5FIWWU.js.gz +0 -0
- package/dist/{chunk-MEVZNYJK.mjs → chunk-PMGLZ7N4.mjs} +860 -10
- package/dist/chunk-PMGLZ7N4.mjs.br +0 -0
- package/dist/chunk-PMGLZ7N4.mjs.gz +0 -0
- package/dist/{chunk-UCFXE6YS.mjs → chunk-QTIJWFJX.mjs} +117 -39
- package/dist/chunk-QTIJWFJX.mjs.br +0 -0
- package/dist/chunk-QTIJWFJX.mjs.gz +0 -0
- package/dist/{chunk-UDM2SYE3.mjs → chunk-RVKPHAK5.mjs} +966 -328
- package/dist/chunk-RVKPHAK5.mjs.br +0 -0
- package/dist/chunk-RVKPHAK5.mjs.gz +0 -0
- package/dist/{dist-XF3QJAEF.js → dist-AFRACFHO.js} +562 -562
- package/dist/dist-AFRACFHO.js.br +0 -0
- package/dist/dist-AFRACFHO.js.gz +0 -0
- package/dist/{dist-A3OATMOE.mjs → dist-RHAXXX2R.mjs} +1 -1
- package/dist/dist-RHAXXX2R.mjs.br +0 -0
- package/dist/dist-RHAXXX2R.mjs.gz +0 -0
- package/dist/hooks-unstable.d.ts +207 -2
- package/dist/hooks-unstable.d.ts.map +1 -1
- package/dist/hooks-unstable.js +82 -78
- package/dist/hooks-unstable.js.br +0 -0
- package/dist/hooks-unstable.js.gz +0 -0
- package/dist/hooks-unstable.mjs +4 -4
- package/dist/hooks-unstable.mjs.br +0 -0
- package/dist/hooks-unstable.mjs.gz +0 -0
- package/dist/i18n.js +4 -4
- package/dist/i18n.js.br +0 -0
- package/dist/i18n.js.gz +0 -0
- package/dist/i18n.mjs +1 -1
- package/dist/i18n.mjs.br +0 -0
- package/dist/i18n.mjs.gz +0 -0
- package/dist/{index-waNAYwmr.d.ts → index-DWvM1PBB.d.ts} +16 -1
- package/dist/index-DWvM1PBB.d.ts.map +1 -0
- package/dist/index.d.ts +146 -26
- package/dist/index.js +35 -35
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/pptx-viewer.css +1 -1
- package/dist/pptx-viewer.css.br +0 -0
- package/dist/pptx-viewer.css.gz +0 -0
- package/dist/viewer/index.js +21 -21
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +5 -5
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +1 -1
- package/dist/Model3DScene-E7YIHJ2R.mjs.br +0 -0
- package/dist/Model3DScene-E7YIHJ2R.mjs.gz +0 -0
- package/dist/Model3DScene-RYR4SSOM.js.br +0 -0
- package/dist/Model3DScene-RYR4SSOM.js.gz +0 -0
- package/dist/SurfaceChart3DScene-PBSZVNAM.js.br +0 -0
- package/dist/SurfaceChart3DScene-PBSZVNAM.js.gz +0 -0
- package/dist/SurfaceChart3DScene-ZM3J67VQ.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-ZM3J67VQ.mjs.gz +0 -0
- package/dist/chunk-275WERXZ.js.br +0 -0
- package/dist/chunk-275WERXZ.js.gz +0 -0
- package/dist/chunk-DPTDFK2L.js.br +0 -0
- package/dist/chunk-DPTDFK2L.js.gz +0 -0
- package/dist/chunk-E3KJKCSV.mjs.br +0 -0
- package/dist/chunk-KV3EOLP3.js.br +0 -0
- package/dist/chunk-KVTSERRP.js.br +0 -0
- package/dist/chunk-KVTSERRP.js.gz +0 -0
- package/dist/chunk-LDZQNYWL.mjs.br +0 -0
- package/dist/chunk-MEVZNYJK.mjs.br +0 -0
- package/dist/chunk-MEVZNYJK.mjs.gz +0 -0
- package/dist/chunk-UCFXE6YS.mjs.br +0 -0
- package/dist/chunk-UCFXE6YS.mjs.gz +0 -0
- package/dist/chunk-UDM2SYE3.mjs.br +0 -0
- package/dist/chunk-UDM2SYE3.mjs.gz +0 -0
- package/dist/chunk-ZISXRMDJ.js.br +0 -0
- package/dist/dist-A3OATMOE.mjs.br +0 -0
- package/dist/dist-A3OATMOE.mjs.gz +0 -0
- package/dist/dist-XF3QJAEF.js.br +0 -0
- package/dist/dist-XF3QJAEF.js.gz +0 -0
- package/dist/index-waNAYwmr.d.ts.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkNIWO2WYI_js = require('./chunk-NIWO2WYI.js');
|
|
4
|
+
var chunk2EFVXYNA_js = require('./chunk-2EFVXYNA.js');
|
|
5
|
+
var chunkCYZLRYJV_js = require('./chunk-CYZLRYJV.js');
|
|
6
6
|
var React3 = require('react');
|
|
7
7
|
var lu = require('react-icons/lu');
|
|
8
8
|
var clsx = require('clsx');
|
|
@@ -18,11 +18,11 @@ var JSZip__default = /*#__PURE__*/_interopDefault(JSZip);
|
|
|
18
18
|
|
|
19
19
|
// src/viewer/utils/clone.ts
|
|
20
20
|
function cloneHistorySnapshot2(snapshot) {
|
|
21
|
-
return
|
|
21
|
+
return chunkNIWO2WYI_js.cloneHistorySnapshot(snapshot);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
// src/viewer/hooks/useEditorHistory.ts
|
|
25
|
-
var
|
|
25
|
+
var DEFAULT_MAX_HISTORY_ENTRIES = 120;
|
|
26
26
|
function useEditorHistory(input) {
|
|
27
27
|
const {
|
|
28
28
|
slides,
|
|
@@ -31,6 +31,7 @@ function useEditorHistory(input) {
|
|
|
31
31
|
templateElementsBySlideId,
|
|
32
32
|
loading,
|
|
33
33
|
error,
|
|
34
|
+
maxHistoryEntries = DEFAULT_MAX_HISTORY_ENTRIES,
|
|
34
35
|
hasActivePointerInteraction,
|
|
35
36
|
pointerCommitNonce,
|
|
36
37
|
setSlides,
|
|
@@ -66,8 +67,8 @@ function useEditorHistory(input) {
|
|
|
66
67
|
width: canvasSize.width,
|
|
67
68
|
height: canvasSize.height,
|
|
68
69
|
activeSlideIndex,
|
|
69
|
-
slides: slides.map(
|
|
70
|
-
templateElementsBySlideId:
|
|
70
|
+
slides: slides.map(chunkNIWO2WYI_js.cloneSlide),
|
|
71
|
+
templateElementsBySlideId: chunkNIWO2WYI_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
|
|
71
72
|
...actionLabel ? { actionLabel } : {}
|
|
72
73
|
};
|
|
73
74
|
},
|
|
@@ -80,9 +81,9 @@ function useEditorHistory(input) {
|
|
|
80
81
|
width: snapshot.width,
|
|
81
82
|
height: snapshot.height
|
|
82
83
|
});
|
|
83
|
-
setSlides(snapshot.slides.map(
|
|
84
|
+
setSlides(snapshot.slides.map(chunkNIWO2WYI_js.cloneSlide));
|
|
84
85
|
setTemplateElementsBySlideId(
|
|
85
|
-
|
|
86
|
+
chunkNIWO2WYI_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
|
|
86
87
|
);
|
|
87
88
|
setActiveSlideIndex(Math.min(snapshot.activeSlideIndex, maxSlideIndex));
|
|
88
89
|
setSelectedElementIds([]);
|
|
@@ -205,7 +206,7 @@ function useEditorHistory(input) {
|
|
|
205
206
|
return;
|
|
206
207
|
}
|
|
207
208
|
historyPastRef.current.push(cloneHistorySnapshot2(previousSnapshot));
|
|
208
|
-
|
|
209
|
+
while (historyPastRef.current.length > Math.max(1, maxHistoryEntries)) {
|
|
209
210
|
historyPastRef.current.shift();
|
|
210
211
|
}
|
|
211
212
|
historyFutureRef.current = [];
|
|
@@ -221,6 +222,7 @@ function useEditorHistory(input) {
|
|
|
221
222
|
error,
|
|
222
223
|
hasActivePointerInteraction,
|
|
223
224
|
loading,
|
|
225
|
+
maxHistoryEntries,
|
|
224
226
|
pointerCommitNonce,
|
|
225
227
|
slides,
|
|
226
228
|
updateHistoryAvailability
|
|
@@ -345,7 +347,7 @@ var GLYPH_COMPONENTS = {
|
|
|
345
347
|
plus: lu.LuPlus,
|
|
346
348
|
triangle: lu.LuTriangle
|
|
347
349
|
};
|
|
348
|
-
var SHAPE_PRESETS =
|
|
350
|
+
var SHAPE_PRESETS = chunkNIWO2WYI_js.SHAPE_PRESET_DEFS.map(
|
|
349
351
|
(def) => ({
|
|
350
352
|
type: def.type,
|
|
351
353
|
label: def.label,
|
|
@@ -661,20 +663,20 @@ function useAnimationPlayback(input) {
|
|
|
661
663
|
for (const anim of nativeAnims) {
|
|
662
664
|
if (anim.buildType && anim.buildType !== "allAtOnce" && anim.targetId) {
|
|
663
665
|
const el = slide.elements.find((e) => e.id === anim.targetId);
|
|
664
|
-
if (el &&
|
|
665
|
-
segmentCounts.set(anim.targetId,
|
|
666
|
+
if (el && chunkCYZLRYJV_js.hasTextProperties(el) && el.textSegments && el.textSegments.length > 0) {
|
|
667
|
+
segmentCounts.set(anim.targetId, chunkNIWO2WYI_js.countTextSegments(el.textSegments));
|
|
666
668
|
}
|
|
667
669
|
}
|
|
668
670
|
}
|
|
669
|
-
const expandedAnims = segmentCounts.size > 0 ?
|
|
670
|
-
const engine =
|
|
671
|
+
const expandedAnims = segmentCounts.size > 0 ? chunkNIWO2WYI_js.expandTextBuildAnimations(nativeAnims, segmentCounts) : nativeAnims;
|
|
672
|
+
const engine = chunkNIWO2WYI_js.TimelineEngine.fromAnimations(expandedAnims);
|
|
671
673
|
timelineEngineRef.current = engine;
|
|
672
674
|
setPresentationKeyframesCss(engine.getTimeline().keyframesCss);
|
|
673
675
|
setInteractiveTriggerShapeIds(engine.getInteractiveTriggerShapeIds());
|
|
674
676
|
setHoverTriggerShapeIds(engine.getHoverTriggerShapeIds());
|
|
675
677
|
const allIds = slide.elements.map((element) => element.id);
|
|
676
678
|
for (const anim of expandedAnims) {
|
|
677
|
-
if (anim.targetId && anim.targetId.includes(
|
|
679
|
+
if (anim.targetId && anim.targetId.includes(chunkNIWO2WYI_js.TEXT_BUILD_ID_SEP)) {
|
|
678
680
|
allIds.push(anim.targetId);
|
|
679
681
|
}
|
|
680
682
|
}
|
|
@@ -806,7 +808,7 @@ function useAnimationPlayback(input) {
|
|
|
806
808
|
}))
|
|
807
809
|
);
|
|
808
810
|
entranceAnimations.forEach((animation, animationIndex) => {
|
|
809
|
-
const delay =
|
|
811
|
+
const delay = chunkNIWO2WYI_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
|
|
810
812
|
const timer = window.setTimeout(() => {
|
|
811
813
|
setPresentationAnimations(
|
|
812
814
|
(previousAnimations) => previousAnimations.map(
|
|
@@ -863,7 +865,7 @@ function openDb() {
|
|
|
863
865
|
}
|
|
864
866
|
async function storeAudienceContent(content, sessionId) {
|
|
865
867
|
if (sessionId) {
|
|
866
|
-
return
|
|
868
|
+
return chunkNIWO2WYI_js.storePresentationDeck(sessionId, content);
|
|
867
869
|
}
|
|
868
870
|
const db = await openDb();
|
|
869
871
|
return new Promise((resolve, reject) => {
|
|
@@ -884,7 +886,7 @@ async function storeAudienceContent(content, sessionId) {
|
|
|
884
886
|
}
|
|
885
887
|
async function loadAudienceContent(sessionId) {
|
|
886
888
|
if (sessionId) {
|
|
887
|
-
return
|
|
889
|
+
return chunkNIWO2WYI_js.loadPresentationDeck(sessionId);
|
|
888
890
|
}
|
|
889
891
|
try {
|
|
890
892
|
const db = await openDb();
|
|
@@ -925,7 +927,7 @@ async function loadAudienceContent(sessionId) {
|
|
|
925
927
|
}
|
|
926
928
|
async function clearAudienceContent(sessionId) {
|
|
927
929
|
if (sessionId) {
|
|
928
|
-
return
|
|
930
|
+
return chunkNIWO2WYI_js.clearPresentationDeck(sessionId);
|
|
929
931
|
}
|
|
930
932
|
try {
|
|
931
933
|
const db = await openDb();
|
|
@@ -945,12 +947,12 @@ async function clearAudienceContent(sessionId) {
|
|
|
945
947
|
} catch {
|
|
946
948
|
}
|
|
947
949
|
}
|
|
948
|
-
var PRESENTER_CHANNEL_NAME =
|
|
949
|
-
var AUDIENCE_HASH =
|
|
950
|
-
var PRESENTER_MSG_ORIGIN =
|
|
951
|
-
var AUDIENCE_NONCE_KEY =
|
|
950
|
+
var PRESENTER_CHANNEL_NAME = chunkNIWO2WYI_js.PRESENTATION_CHANNEL_NAME;
|
|
951
|
+
var AUDIENCE_HASH = chunkNIWO2WYI_js.PRESENTATION_HASH;
|
|
952
|
+
var PRESENTER_MSG_ORIGIN = chunkNIWO2WYI_js.PRESENTATION_MESSAGE_ORIGIN;
|
|
953
|
+
var AUDIENCE_NONCE_KEY = chunkNIWO2WYI_js.PRESENTATION_NONCE_KEY;
|
|
952
954
|
function generateSessionId() {
|
|
953
|
-
return
|
|
955
|
+
return chunkNIWO2WYI_js.createPresentationSessionId();
|
|
954
956
|
}
|
|
955
957
|
function parseAudienceNonce() {
|
|
956
958
|
const hash = window.location.hash;
|
|
@@ -986,7 +988,7 @@ function usePresenterWindow(input) {
|
|
|
986
988
|
}, []);
|
|
987
989
|
const swapDisplays = React3.useCallback(async () => {
|
|
988
990
|
const audience = audienceWindowRef.current;
|
|
989
|
-
return audience && !audience.closed ?
|
|
991
|
+
return audience && !audience.closed ? chunkNIWO2WYI_js.swapPresentationWindows(window, audience) : false;
|
|
990
992
|
}, []);
|
|
991
993
|
const syncSlideToAudience = React3.useCallback(
|
|
992
994
|
(slideIndex) => {
|
|
@@ -1068,10 +1070,10 @@ function usePresenterWindow(input) {
|
|
|
1068
1070
|
audienceWindowRef.current = blankWin;
|
|
1069
1071
|
const sessionId = generateSessionId();
|
|
1070
1072
|
sessionIdRef.current = sessionId;
|
|
1071
|
-
const audienceUrl =
|
|
1072
|
-
void
|
|
1073
|
+
const audienceUrl = chunkNIWO2WYI_js.buildPresentationAudienceUrl(window.location.href, sessionId);
|
|
1074
|
+
void chunkNIWO2WYI_js.resolveAudienceScreenPlacement(window).then((placement) => {
|
|
1073
1075
|
if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
|
|
1074
|
-
|
|
1076
|
+
chunkNIWO2WYI_js.placeAudienceWindow(blankWin, placement);
|
|
1075
1077
|
}
|
|
1076
1078
|
return void 0;
|
|
1077
1079
|
});
|
|
@@ -1127,7 +1129,7 @@ function usePresenterWindow(input) {
|
|
|
1127
1129
|
}
|
|
1128
1130
|
const handleMessage = (event) => {
|
|
1129
1131
|
const message = event.data;
|
|
1130
|
-
if (
|
|
1132
|
+
if (chunkNIWO2WYI_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
|
|
1131
1133
|
syncStateToAudience(snapshotRef.current);
|
|
1132
1134
|
}
|
|
1133
1135
|
};
|
|
@@ -1209,7 +1211,7 @@ function useAudienceMode(input) {
|
|
|
1209
1211
|
}
|
|
1210
1212
|
channel.onmessage = (event) => {
|
|
1211
1213
|
const data = event.data;
|
|
1212
|
-
if (!
|
|
1214
|
+
if (!chunkNIWO2WYI_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
|
|
1213
1215
|
return;
|
|
1214
1216
|
}
|
|
1215
1217
|
if (expectedSessionId && data.sessionId !== expectedSessionId) {
|
|
@@ -1235,7 +1237,7 @@ function useAudienceMode(input) {
|
|
|
1235
1237
|
};
|
|
1236
1238
|
if (expectedSessionId) {
|
|
1237
1239
|
channel.postMessage({
|
|
1238
|
-
origin:
|
|
1240
|
+
origin: chunkNIWO2WYI_js.PRESENTATION_MESSAGE_ORIGIN,
|
|
1239
1241
|
type: "audience-ready",
|
|
1240
1242
|
sessionId: expectedSessionId
|
|
1241
1243
|
});
|
|
@@ -1500,7 +1502,7 @@ function handlePresentationActionImpl(action, deps) {
|
|
|
1500
1502
|
return;
|
|
1501
1503
|
}
|
|
1502
1504
|
if (action.url && !actionStr.includes("hlinksldjump")) {
|
|
1503
|
-
if (
|
|
1505
|
+
if (chunkNIWO2WYI_js.isUrlSafe(action.url)) {
|
|
1504
1506
|
window.open(action.url, "_blank", "noopener,noreferrer");
|
|
1505
1507
|
}
|
|
1506
1508
|
}
|
|
@@ -1510,7 +1512,7 @@ function handlePresentationActionImpl(action, deps) {
|
|
|
1510
1512
|
function executeSlideTransition(nextSlideIndex, deps) {
|
|
1511
1513
|
const incomingSlide = deps.slides[nextSlideIndex];
|
|
1512
1514
|
const transition = incomingSlide?.transition;
|
|
1513
|
-
const durationMs = deps.playTransition ?
|
|
1515
|
+
const durationMs = deps.playTransition ? chunkNIWO2WYI_js.resolveTransitionDurationMs(transition) : 0;
|
|
1514
1516
|
deps.clearPresentationTimers();
|
|
1515
1517
|
deps.setPresentationSlideIndex(nextSlideIndex);
|
|
1516
1518
|
deps.onSetActiveSlideIndex(nextSlideIndex);
|
|
@@ -1551,6 +1553,7 @@ function useSlideNavigation(input) {
|
|
|
1551
1553
|
onPlayActionSound,
|
|
1552
1554
|
loopContinuously,
|
|
1553
1555
|
useTimings,
|
|
1556
|
+
onAdvancePastLastSlide,
|
|
1554
1557
|
playNextAnimationGroup,
|
|
1555
1558
|
clearPresentationTimers,
|
|
1556
1559
|
runPresentationEntranceAnimations,
|
|
@@ -1606,6 +1609,10 @@ function useSlideNavigation(input) {
|
|
|
1606
1609
|
setShowRehearsalSummary(true);
|
|
1607
1610
|
return;
|
|
1608
1611
|
}
|
|
1612
|
+
if (!loopContinuously && !rehearsing && direction === 1 && nextPosition >= availableSlideIndexes.length && onAdvancePastLastSlide) {
|
|
1613
|
+
onAdvancePastLastSlide();
|
|
1614
|
+
return;
|
|
1615
|
+
}
|
|
1609
1616
|
let resolvedPosition;
|
|
1610
1617
|
if (loopContinuously && !rehearsing && direction === 1 && nextPosition >= availableSlideIndexes.length) {
|
|
1611
1618
|
resolvedPosition = 0;
|
|
@@ -1638,6 +1645,7 @@ function useSlideNavigation(input) {
|
|
|
1638
1645
|
[
|
|
1639
1646
|
clearPresentationTimers,
|
|
1640
1647
|
loopContinuously,
|
|
1648
|
+
onAdvancePastLastSlide,
|
|
1641
1649
|
onPlayActionSound,
|
|
1642
1650
|
onSetActiveSlideIndex,
|
|
1643
1651
|
onSetMode,
|
|
@@ -1744,17 +1752,17 @@ function useZoomNavigation(input) {
|
|
|
1744
1752
|
};
|
|
1745
1753
|
}
|
|
1746
1754
|
function usePresenterConsole(slideIndex) {
|
|
1747
|
-
const timerRef = React3.useRef(
|
|
1748
|
-
const [snapshot, setSnapshot] = React3.useState(() =>
|
|
1755
|
+
const timerRef = React3.useRef(chunkNIWO2WYI_js.createPresenterTimer());
|
|
1756
|
+
const [snapshot, setSnapshot] = React3.useState(() => chunkNIWO2WYI_js.createInitialPresentationSnapshot(slideIndex));
|
|
1749
1757
|
const patch = React3.useCallback((value) => {
|
|
1750
|
-
setSnapshot((current) =>
|
|
1758
|
+
setSnapshot((current) => chunkNIWO2WYI_js.mergePresentationSnapshot(current, value));
|
|
1751
1759
|
}, []);
|
|
1752
1760
|
React3.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
|
|
1753
1761
|
React3.useEffect(() => {
|
|
1754
1762
|
const timer = window.setInterval(() => {
|
|
1755
1763
|
patch({
|
|
1756
1764
|
paused: timerRef.current.paused,
|
|
1757
|
-
elapsedMs:
|
|
1765
|
+
elapsedMs: chunkNIWO2WYI_js.presenterElapsed(timerRef.current)
|
|
1758
1766
|
});
|
|
1759
1767
|
}, 1e3);
|
|
1760
1768
|
return () => window.clearInterval(timer);
|
|
@@ -1764,19 +1772,19 @@ function usePresenterConsole(slideIndex) {
|
|
|
1764
1772
|
applyAudienceSnapshot: setSnapshot,
|
|
1765
1773
|
setBlackout: (blackout) => patch({ blackout }),
|
|
1766
1774
|
toggleTimer: () => {
|
|
1767
|
-
timerRef.current =
|
|
1775
|
+
timerRef.current = chunkNIWO2WYI_js.togglePresenterTimer(timerRef.current);
|
|
1768
1776
|
patch({
|
|
1769
1777
|
paused: timerRef.current.paused,
|
|
1770
|
-
elapsedMs:
|
|
1778
|
+
elapsedMs: chunkNIWO2WYI_js.presenterElapsed(timerRef.current)
|
|
1771
1779
|
});
|
|
1772
1780
|
},
|
|
1773
1781
|
resetTimer: () => {
|
|
1774
|
-
timerRef.current =
|
|
1782
|
+
timerRef.current = chunkNIWO2WYI_js.resetPresenterTimer();
|
|
1775
1783
|
patch({ paused: false, elapsedMs: 0 });
|
|
1776
1784
|
},
|
|
1777
1785
|
stepZoom: (direction) => setSnapshot(
|
|
1778
|
-
(current) =>
|
|
1779
|
-
zoom:
|
|
1786
|
+
(current) => chunkNIWO2WYI_js.mergePresentationSnapshot(current, {
|
|
1787
|
+
zoom: chunkNIWO2WYI_js.stepPresenterZoom(
|
|
1780
1788
|
current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
|
|
1781
1789
|
direction
|
|
1782
1790
|
)
|
|
@@ -1808,7 +1816,8 @@ function usePresentationMode(input) {
|
|
|
1808
1816
|
onSaveRehearsalTimings,
|
|
1809
1817
|
loopContinuously,
|
|
1810
1818
|
showWithAnimation,
|
|
1811
|
-
useTimings
|
|
1819
|
+
useTimings,
|
|
1820
|
+
endWithBlackSlide = true
|
|
1812
1821
|
} = input;
|
|
1813
1822
|
const [presentationSlideIndex, setPresentationSlideIndex] = React3.useState(0);
|
|
1814
1823
|
const [presentationSlideVisible, setPresentationSlideVisible] = React3.useState(true);
|
|
@@ -1817,6 +1826,7 @@ function usePresentationMode(input) {
|
|
|
1817
1826
|
setTransitionOverlay(null);
|
|
1818
1827
|
}, []);
|
|
1819
1828
|
const [presenterMode, setPresenterMode] = React3.useState(false);
|
|
1829
|
+
const [endOfShowVisible, setEndOfShowVisible] = React3.useState(false);
|
|
1820
1830
|
const [presentationStartTime, setPresentationStartTime] = React3.useState(null);
|
|
1821
1831
|
const switchingToPresenterRef = React3.useRef(false);
|
|
1822
1832
|
const {
|
|
@@ -1853,8 +1863,15 @@ function usePresentationMode(input) {
|
|
|
1853
1863
|
setPresentationStartTime,
|
|
1854
1864
|
setPresenterMode
|
|
1855
1865
|
});
|
|
1866
|
+
const handleAdvancePastLastSlide = React3.useCallback(() => {
|
|
1867
|
+
if (endWithBlackSlide) {
|
|
1868
|
+
setEndOfShowVisible(true);
|
|
1869
|
+
} else {
|
|
1870
|
+
onSetMode("edit");
|
|
1871
|
+
}
|
|
1872
|
+
}, [endWithBlackSlide, onSetMode]);
|
|
1856
1873
|
const {
|
|
1857
|
-
movePresentationSlide,
|
|
1874
|
+
movePresentationSlide: moveNavigationSlide,
|
|
1858
1875
|
navigateToSlide,
|
|
1859
1876
|
handlePresentationAction,
|
|
1860
1877
|
scheduleAutoAdvanceForSlide
|
|
@@ -1870,6 +1887,7 @@ function usePresentationMode(input) {
|
|
|
1870
1887
|
onPlayActionSound,
|
|
1871
1888
|
loopContinuously,
|
|
1872
1889
|
useTimings,
|
|
1890
|
+
onAdvancePastLastSlide: handleAdvancePastLastSlide,
|
|
1873
1891
|
playNextAnimationGroup,
|
|
1874
1892
|
clearPresentationTimers,
|
|
1875
1893
|
runPresentationEntranceAnimations,
|
|
@@ -1878,6 +1896,19 @@ function usePresentationMode(input) {
|
|
|
1878
1896
|
recordCurrentSlideTime,
|
|
1879
1897
|
setShowRehearsalSummary
|
|
1880
1898
|
});
|
|
1899
|
+
const movePresentationSlide = React3.useCallback(
|
|
1900
|
+
(direction) => {
|
|
1901
|
+
if (endOfShowVisible) {
|
|
1902
|
+
setEndOfShowVisible(false);
|
|
1903
|
+
if (direction === 1) {
|
|
1904
|
+
onSetMode("edit");
|
|
1905
|
+
}
|
|
1906
|
+
return;
|
|
1907
|
+
}
|
|
1908
|
+
moveNavigationSlide(direction);
|
|
1909
|
+
},
|
|
1910
|
+
[endOfShowVisible, moveNavigationSlide, onSetMode]
|
|
1911
|
+
);
|
|
1881
1912
|
const { handleZoomClick, zoomReturnSlideIndex, returnToZoomSlide, clearZoomReturn } = useZoomNavigation({ navigateToSlide });
|
|
1882
1913
|
const presenterConsole = usePresenterConsole(presentationSlideIndex);
|
|
1883
1914
|
const {
|
|
@@ -1983,6 +2014,7 @@ function usePresentationMode(input) {
|
|
|
1983
2014
|
} else {
|
|
1984
2015
|
setTransitionOverlay(null);
|
|
1985
2016
|
}
|
|
2017
|
+
setEndOfShowVisible(false);
|
|
1986
2018
|
}, [mode]);
|
|
1987
2019
|
React3.useEffect(() => {
|
|
1988
2020
|
if (mode !== "present") {
|
|
@@ -2054,6 +2086,7 @@ function usePresentationMode(input) {
|
|
|
2054
2086
|
presentationKeyframesCss,
|
|
2055
2087
|
clearPresentationTimers,
|
|
2056
2088
|
runPresentationEntranceAnimations,
|
|
2089
|
+
endOfShowVisible,
|
|
2057
2090
|
movePresentationSlide,
|
|
2058
2091
|
navigateToSlide,
|
|
2059
2092
|
handlePresentationAction,
|
|
@@ -2107,7 +2140,7 @@ function nextStrokeId() {
|
|
|
2107
2140
|
return `stroke-${strokeIdCounter}`;
|
|
2108
2141
|
}
|
|
2109
2142
|
function usePresentationAnnotations(input) {
|
|
2110
|
-
const { isActive, activeSlideIndex } = input;
|
|
2143
|
+
const { isActive, activeSlideIndex, popupToolbarEnabled = true } = input;
|
|
2111
2144
|
const [presentationTool, setPresentationToolState] = React3.useState("none");
|
|
2112
2145
|
const [penColor, setPenColor] = React3.useState("#ff0000");
|
|
2113
2146
|
const [highlighterColor, setHighlighterColor] = React3.useState("#ffff00");
|
|
@@ -2260,6 +2293,9 @@ function usePresentationAnnotations(input) {
|
|
|
2260
2293
|
setLaserPosition(null);
|
|
2261
2294
|
return;
|
|
2262
2295
|
}
|
|
2296
|
+
if (!popupToolbarEnabled) {
|
|
2297
|
+
return;
|
|
2298
|
+
}
|
|
2263
2299
|
const handleMouseMove = () => {
|
|
2264
2300
|
setToolbarVisible(true);
|
|
2265
2301
|
window.clearTimeout(toolbarTimerRef.current);
|
|
@@ -2272,7 +2308,7 @@ function usePresentationAnnotations(input) {
|
|
|
2272
2308
|
window.removeEventListener("mousemove", handleMouseMove);
|
|
2273
2309
|
window.clearTimeout(toolbarTimerRef.current);
|
|
2274
2310
|
};
|
|
2275
|
-
}, [isActive]);
|
|
2311
|
+
}, [isActive, popupToolbarEnabled]);
|
|
2276
2312
|
const getAllSlideAnnotations = React3.useCallback(() => {
|
|
2277
2313
|
const map = new Map(slideAnnotationsRef.current);
|
|
2278
2314
|
if (annotationStrokes.length > 0) {
|
|
@@ -2316,7 +2352,7 @@ function findInSlides(slides, findQuery, findMatchCase) {
|
|
|
2316
2352
|
const normalised = findMatchCase ? findQuery : findQuery.toLowerCase();
|
|
2317
2353
|
slides.forEach((slide, slideIndex) => {
|
|
2318
2354
|
for (const element of slide.elements || []) {
|
|
2319
|
-
if (!
|
|
2355
|
+
if (!chunkCYZLRYJV_js.hasTextProperties(element)) {
|
|
2320
2356
|
continue;
|
|
2321
2357
|
}
|
|
2322
2358
|
const segments = element.textSegments ?? [];
|
|
@@ -2367,7 +2403,7 @@ function applyFindReplacements(slides, toReplace, replaceQuery) {
|
|
|
2367
2403
|
continue;
|
|
2368
2404
|
}
|
|
2369
2405
|
const element = slide.elements[elIdx];
|
|
2370
|
-
if (!
|
|
2406
|
+
if (!chunkCYZLRYJV_js.hasTextProperties(element)) {
|
|
2371
2407
|
continue;
|
|
2372
2408
|
}
|
|
2373
2409
|
const segments = [...element.textSegments ?? []];
|
|
@@ -3292,12 +3328,12 @@ function useViewerState(input) {
|
|
|
3292
3328
|
function partitionTemplateElements(slides) {
|
|
3293
3329
|
const templateElementsBySlideId = {};
|
|
3294
3330
|
const nextSlides = slides.map((slide) => {
|
|
3295
|
-
const template = slide.elements.filter((el) =>
|
|
3331
|
+
const template = slide.elements.filter((el) => chunkNIWO2WYI_js.isTemplateElement(el));
|
|
3296
3332
|
if (template.length === 0) {
|
|
3297
3333
|
return slide;
|
|
3298
3334
|
}
|
|
3299
3335
|
templateElementsBySlideId[slide.id] = template;
|
|
3300
|
-
return { ...slide, elements: slide.elements.filter((el) => !
|
|
3336
|
+
return { ...slide, elements: slide.elements.filter((el) => !chunkNIWO2WYI_js.isTemplateElement(el)) };
|
|
3301
3337
|
});
|
|
3302
3338
|
return { slides: nextSlides, templateElementsBySlideId };
|
|
3303
3339
|
}
|
|
@@ -3371,7 +3407,7 @@ function useLoadContent({
|
|
|
3371
3407
|
);
|
|
3372
3408
|
}
|
|
3373
3409
|
const previousHandler = handlerRef.current;
|
|
3374
|
-
const handler = new
|
|
3410
|
+
const handler = new chunkCYZLRYJV_js.PptxHandler();
|
|
3375
3411
|
const parsed = await handler.load(buffer);
|
|
3376
3412
|
if (cancelled || token !== renderTokenRef.current) {
|
|
3377
3413
|
handler.dispose();
|
|
@@ -3383,7 +3419,7 @@ function useLoadContent({
|
|
|
3383
3419
|
handlerRef.current = null;
|
|
3384
3420
|
const mediaElements = [];
|
|
3385
3421
|
for (const slide of parsed.slides) {
|
|
3386
|
-
|
|
3422
|
+
chunkNIWO2WYI_js.collectMediaElements(slide.elements, mediaElements);
|
|
3387
3423
|
}
|
|
3388
3424
|
for (const url of mediaDataUrls.values()) {
|
|
3389
3425
|
if (url.startsWith("blob:")) {
|
|
@@ -3424,7 +3460,7 @@ function useLoadContent({
|
|
|
3424
3460
|
}
|
|
3425
3461
|
})
|
|
3426
3462
|
);
|
|
3427
|
-
const { paths: imagePaths, refs: imageRefs } =
|
|
3463
|
+
const { paths: imagePaths, refs: imageRefs } = chunkNIWO2WYI_js.collectImagePaths(parsed.slides);
|
|
3428
3464
|
let nextSlides = parsed.slides;
|
|
3429
3465
|
if (imagePaths.size > 0) {
|
|
3430
3466
|
const resolvedMap = /* @__PURE__ */ new Map();
|
|
@@ -3513,7 +3549,7 @@ function useLoadContent({
|
|
|
3513
3549
|
setHasMacros(parsed.hasMacros === true);
|
|
3514
3550
|
setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
|
|
3515
3551
|
setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
|
|
3516
|
-
setGuides(
|
|
3552
|
+
setGuides(chunkNIWO2WYI_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
|
|
3517
3553
|
setActiveSlideIndex(0);
|
|
3518
3554
|
clearSelection();
|
|
3519
3555
|
setIsDirty(false);
|
|
@@ -3521,7 +3557,7 @@ function useLoadContent({
|
|
|
3521
3557
|
onContentApplied?.();
|
|
3522
3558
|
} catch (err) {
|
|
3523
3559
|
if (!cancelled && token === renderTokenRef.current) {
|
|
3524
|
-
if (err instanceof
|
|
3560
|
+
if (err instanceof chunkCYZLRYJV_js.EncryptedFileError) {
|
|
3525
3561
|
setIsEncrypted(true);
|
|
3526
3562
|
} else {
|
|
3527
3563
|
setError(err instanceof Error ? err.message : String(err));
|
|
@@ -3598,7 +3634,7 @@ function useAutosave(input) {
|
|
|
3598
3634
|
isSavingRef.current = false;
|
|
3599
3635
|
return;
|
|
3600
3636
|
}
|
|
3601
|
-
await
|
|
3637
|
+
await chunkNIWO2WYI_js.saveAutosaveSnapshot(filePathRef.current, data);
|
|
3602
3638
|
setAutosaveStatus({ state: "saved", timestamp: Date.now() });
|
|
3603
3639
|
} catch (err) {
|
|
3604
3640
|
setAutosaveStatus({
|
|
@@ -3636,7 +3672,7 @@ function useAutosave(input) {
|
|
|
3636
3672
|
|
|
3637
3673
|
// src/viewer/utils/animation-effects.ts
|
|
3638
3674
|
function getAnimationInitialStyle2(preset, nativeAnimation) {
|
|
3639
|
-
return
|
|
3675
|
+
return chunkNIWO2WYI_js.getAnimationInitialStyle(preset, nativeAnimation);
|
|
3640
3676
|
}
|
|
3641
3677
|
function cn(...inputs) {
|
|
3642
3678
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
@@ -3644,7 +3680,7 @@ function cn(...inputs) {
|
|
|
3644
3680
|
|
|
3645
3681
|
// src/viewer/utils/text-utils.tsx
|
|
3646
3682
|
function getTextStyleForElement(element, fallbackColor) {
|
|
3647
|
-
if (!
|
|
3683
|
+
if (!chunkCYZLRYJV_js.hasTextProperties(element)) {
|
|
3648
3684
|
return { color: fallbackColor };
|
|
3649
3685
|
}
|
|
3650
3686
|
const textDecorationTokens = [];
|
|
@@ -3658,20 +3694,20 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
3658
3694
|
const textDecorationStyle = isDoubleStrike ? "double" : void 0;
|
|
3659
3695
|
const hasItalicRuns = element.textStyle?.italic || Boolean(element.textSegments?.some((segment) => segment.style?.italic));
|
|
3660
3696
|
const isRtl = element.textStyle?.rtl === true;
|
|
3661
|
-
const resolvedTextColor = element.textStyle?.hyperlink ?
|
|
3697
|
+
const resolvedTextColor = element.textStyle?.hyperlink ? chunkNIWO2WYI_js.normalizeHexColor(element.textStyle?.color, HYPERLINK_COLOR) : chunkNIWO2WYI_js.normalizeHexColor(element.textStyle?.color, fallbackColor);
|
|
3662
3698
|
const bodyTop = element.textStyle?.bodyInsetTop ?? DEFAULT_BODY_INSET_TB_PX;
|
|
3663
3699
|
const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
|
|
3664
3700
|
const bodyLeft = element.textStyle?.bodyInsetLeft ?? DEFAULT_BODY_INSET_LR_PX;
|
|
3665
3701
|
const bodyRight = element.textStyle?.bodyInsetRight ?? DEFAULT_BODY_INSET_LR_PX;
|
|
3666
|
-
const writingMode =
|
|
3667
|
-
const textOrientation =
|
|
3668
|
-
const verticalDirection =
|
|
3702
|
+
const writingMode = chunkNIWO2WYI_js.toCssWritingMode(element.textStyle?.textDirection);
|
|
3703
|
+
const textOrientation = chunkNIWO2WYI_js.toCssTextOrientation(element.textStyle?.textDirection);
|
|
3704
|
+
const verticalDirection = chunkNIWO2WYI_js.toCssVerticalDirection(element.textStyle?.textDirection);
|
|
3669
3705
|
const resolvedDirection = verticalDirection || (isRtl ? "rtl" : "ltr");
|
|
3670
3706
|
const resolvedUnicodeBidi = isRtl ? "plaintext" : void 0;
|
|
3671
3707
|
const hasSegments = (element.textSegments?.length ?? 0) > 0;
|
|
3672
3708
|
return {
|
|
3673
3709
|
color: resolvedTextColor,
|
|
3674
|
-
backgroundColor: !hasSegments && element.textStyle?.highlightColor ?
|
|
3710
|
+
backgroundColor: !hasSegments && element.textStyle?.highlightColor ? chunkNIWO2WYI_js.normalizeHexColor(element.textStyle.highlightColor, void 0) : void 0,
|
|
3675
3711
|
textAlign: (() => {
|
|
3676
3712
|
const a = element.textStyle?.align;
|
|
3677
3713
|
if (a === "justLow" || a === "dist" || a === "thaiDist") {
|
|
@@ -3687,7 +3723,7 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
3687
3723
|
textDecorationLine: textDecorationTokens.length > 0 ? textDecorationTokens.join(" ") : "none",
|
|
3688
3724
|
textDecorationStyle,
|
|
3689
3725
|
fontFamily: element.textStyle?.fontFamily || DEFAULT_FONT_FAMILY,
|
|
3690
|
-
lineHeight:
|
|
3726
|
+
lineHeight: chunkNIWO2WYI_js.resolveLineHeight(element.textStyle, hasItalicRuns),
|
|
3691
3727
|
paddingTop: bodyTop + (hasItalicRuns ? 1 : 0),
|
|
3692
3728
|
paddingBottom: bodyBottom + (hasItalicRuns ? 1 : 0),
|
|
3693
3729
|
paddingLeft: bodyLeft + (element.textStyle?.paragraphMarginLeft || 0),
|
|
@@ -3700,7 +3736,7 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
3700
3736
|
// Auto-fit: use OOXML-provided fontScale/lnSpcReduction when available,
|
|
3701
3737
|
// otherwise fall back to heuristic estimation. The pure font-scale maths
|
|
3702
3738
|
// now lives in pptx-viewer-shared (computeAutoFitTextStyle).
|
|
3703
|
-
...
|
|
3739
|
+
...chunkNIWO2WYI_js.computeAutoFitTextStyle({
|
|
3704
3740
|
textStyle: element.textStyle,
|
|
3705
3741
|
text: element.text ?? "",
|
|
3706
3742
|
width: element.width,
|
|
@@ -3733,13 +3769,13 @@ function computeTabSize(tabStops) {
|
|
|
3733
3769
|
return avgGap > 0 ? `${Math.round(avgGap)}px` : void 0;
|
|
3734
3770
|
}
|
|
3735
3771
|
function getTextLayoutStyle(element) {
|
|
3736
|
-
if (!
|
|
3772
|
+
if (!chunkCYZLRYJV_js.hasTextProperties(element)) {
|
|
3737
3773
|
return {};
|
|
3738
3774
|
}
|
|
3739
3775
|
const verticalAlign = element.textStyle?.vAlign || "top";
|
|
3740
|
-
const writingMode =
|
|
3741
|
-
const textOrientation =
|
|
3742
|
-
const verticalDirection =
|
|
3776
|
+
const writingMode = chunkNIWO2WYI_js.toCssWritingMode(element.textStyle?.textDirection);
|
|
3777
|
+
const textOrientation = chunkNIWO2WYI_js.toCssTextOrientation(element.textStyle?.textDirection);
|
|
3778
|
+
const verticalDirection = chunkNIWO2WYI_js.toCssVerticalDirection(element.textStyle?.textDirection);
|
|
3743
3779
|
const parsedColumnCount = Number(element.textStyle?.columnCount);
|
|
3744
3780
|
const columnCount = Number.isFinite(parsedColumnCount) ? Math.max(1, Math.min(16, Math.round(parsedColumnCount))) : 1;
|
|
3745
3781
|
const hasColumns = columnCount > 1;
|
|
@@ -3747,7 +3783,7 @@ function getTextLayoutStyle(element) {
|
|
|
3747
3783
|
const tabStops = element.textStyle?.tabStops;
|
|
3748
3784
|
const tabSize = computeTabSize(tabStops);
|
|
3749
3785
|
const textWrapNone = element.textStyle?.textWrap === "none";
|
|
3750
|
-
const hasParagraphIndents =
|
|
3786
|
+
const hasParagraphIndents = chunkCYZLRYJV_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
|
|
3751
3787
|
const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
|
|
3752
3788
|
const paragraphIndent = element.textStyle?.paragraphIndent;
|
|
3753
3789
|
const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
|
|
@@ -3756,7 +3792,7 @@ function getTextLayoutStyle(element) {
|
|
|
3756
3792
|
const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
|
|
3757
3793
|
const parsedColumnSpacing = Number(element.textStyle?.columnSpacing);
|
|
3758
3794
|
const columnGap = Number.isFinite(parsedColumnSpacing) && parsedColumnSpacing > 0 ? `${parsedColumnSpacing}px` : "0.75em";
|
|
3759
|
-
const kinsokuStyles =
|
|
3795
|
+
const kinsokuStyles = chunkNIWO2WYI_js.getKinsokuLineBreakStyles(element.textStyle);
|
|
3760
3796
|
if (hasColumns) {
|
|
3761
3797
|
return {
|
|
3762
3798
|
display: "block",
|
|
@@ -3799,10 +3835,10 @@ function getTextLayoutStyle(element) {
|
|
|
3799
3835
|
|
|
3800
3836
|
// src/viewer/utils/text-effects.tsx
|
|
3801
3837
|
function buildTextFillCss2(style) {
|
|
3802
|
-
return
|
|
3838
|
+
return chunkNIWO2WYI_js.buildTextFillCss(style);
|
|
3803
3839
|
}
|
|
3804
3840
|
function buildTextBody3DSceneStyle2(textStyle) {
|
|
3805
|
-
return
|
|
3841
|
+
return chunkNIWO2WYI_js.buildTextBody3DSceneStyle(textStyle);
|
|
3806
3842
|
}
|
|
3807
3843
|
|
|
3808
3844
|
// src/viewer/utils/text-warp-css.tsx
|
|
@@ -3987,17 +4023,17 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
|
|
|
3987
4023
|
if (!subElementAnimStates || subElementAnimStates.size === 0) {
|
|
3988
4024
|
return renderedSegments;
|
|
3989
4025
|
}
|
|
3990
|
-
const paraKey = `${elementId}${
|
|
4026
|
+
const paraKey = `${elementId}${chunkNIWO2WYI_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
|
|
3991
4027
|
const paraState = subElementAnimStates.get(paraKey);
|
|
3992
4028
|
if (paraState) {
|
|
3993
4029
|
const style = buildAnimStyle(paraState);
|
|
3994
4030
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
|
|
3995
4031
|
}
|
|
3996
|
-
const firstWordKey = `${elementId}${
|
|
4032
|
+
const firstWordKey = `${elementId}${chunkNIWO2WYI_js.TEXT_BUILD_ID_SEP}w${paraIndex}-0`;
|
|
3997
4033
|
if (subElementAnimStates.has(firstWordKey)) {
|
|
3998
4034
|
return wrapByWord(elementId, paraIndex, paraSegments, subElementAnimStates);
|
|
3999
4035
|
}
|
|
4000
|
-
const firstCharKey = `${elementId}${
|
|
4036
|
+
const firstCharKey = `${elementId}${chunkNIWO2WYI_js.TEXT_BUILD_ID_SEP}c${paraIndex}-0`;
|
|
4001
4037
|
if (subElementAnimStates.has(firstCharKey)) {
|
|
4002
4038
|
return wrapByChar(elementId, paraIndex, paraSegments, subElementAnimStates);
|
|
4003
4039
|
}
|
|
@@ -4018,7 +4054,7 @@ function wrapByWord(elementId, paraIndex, paraSegments, states) {
|
|
|
4018
4054
|
nodes.push(/* @__PURE__ */ jsxRuntime.jsx(React3__default.default.Fragment, { children: w }, `ws-${i}`));
|
|
4019
4055
|
continue;
|
|
4020
4056
|
}
|
|
4021
|
-
const key = `${elementId}${
|
|
4057
|
+
const key = `${elementId}${chunkNIWO2WYI_js.TEXT_BUILD_ID_SEP}w${paraIndex}-${wordIdx}`;
|
|
4022
4058
|
const state = states.get(key);
|
|
4023
4059
|
const style = buildAnimStyle(state);
|
|
4024
4060
|
nodes.push(
|
|
@@ -4032,7 +4068,7 @@ function wrapByChar(elementId, paraIndex, paraSegments, states) {
|
|
|
4032
4068
|
const fullText = paraSegments.map((e) => e.segment.text).join("");
|
|
4033
4069
|
const nodes = [];
|
|
4034
4070
|
for (let i = 0; i < fullText.length; i++) {
|
|
4035
|
-
const key = `${elementId}${
|
|
4071
|
+
const key = `${elementId}${chunkNIWO2WYI_js.TEXT_BUILD_ID_SEP}c${paraIndex}-${i}`;
|
|
4036
4072
|
const state = states.get(key);
|
|
4037
4073
|
const style = buildAnimStyle(state);
|
|
4038
4074
|
nodes.push(
|
|
@@ -4045,10 +4081,10 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
|
|
|
4045
4081
|
if (!needsScriptFonts || !text) {
|
|
4046
4082
|
return text;
|
|
4047
4083
|
}
|
|
4048
|
-
const runs =
|
|
4084
|
+
const runs = chunkNIWO2WYI_js.segmentByScript(text);
|
|
4049
4085
|
if (runs.length <= 1) {
|
|
4050
4086
|
if (runs.length === 1) {
|
|
4051
|
-
const font =
|
|
4087
|
+
const font = chunkNIWO2WYI_js.resolveFontForScript(runs[0].script, scriptFonts);
|
|
4052
4088
|
if (font && font !== baseFontFamily) {
|
|
4053
4089
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontFamily: font }, children: text });
|
|
4054
4090
|
}
|
|
@@ -4056,7 +4092,7 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
|
|
|
4056
4092
|
return text;
|
|
4057
4093
|
}
|
|
4058
4094
|
return runs.map((run, i) => {
|
|
4059
|
-
const font =
|
|
4095
|
+
const font = chunkNIWO2WYI_js.resolveFontForScript(run.script, scriptFonts);
|
|
4060
4096
|
if (!font || font === baseFontFamily) {
|
|
4061
4097
|
return /* @__PURE__ */ jsxRuntime.jsx(React3__default.default.Fragment, { children: run.text }, `${keyPrefix}-r${i}`);
|
|
4062
4098
|
}
|
|
@@ -4130,8 +4166,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
|
|
|
4130
4166
|
);
|
|
4131
4167
|
}
|
|
4132
4168
|
function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
|
|
4133
|
-
const mathml =
|
|
4134
|
-
const safeMathml = mathml ?
|
|
4169
|
+
const mathml = chunkNIWO2WYI_js.convertOmmlToMathMl(equationXml);
|
|
4170
|
+
const safeMathml = mathml ? chunkNIWO2WYI_js.sanitizeMathMl(mathml) : "";
|
|
4135
4171
|
const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4136
4172
|
"span",
|
|
4137
4173
|
{
|
|
@@ -4141,7 +4177,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
|
|
|
4141
4177
|
},
|
|
4142
4178
|
dangerouslySetInnerHTML: { __html: safeMathml }
|
|
4143
4179
|
}
|
|
4144
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-1 py-0.5 rounded text-xs bg-gray-200/20 text-gray-400 italic", children:
|
|
4180
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-1 py-0.5 rounded text-xs bg-gray-200/20 text-gray-400 italic", children: chunk2EFVXYNA_js.translationsEn["pptx.textSegment.equationFallback"] });
|
|
4145
4181
|
if (equationNumber) {
|
|
4146
4182
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4147
4183
|
"span",
|
|
@@ -4181,7 +4217,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
|
|
|
4181
4217
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { children: equationContent }, `${elementId}-seg-${segmentIndex}`);
|
|
4182
4218
|
}
|
|
4183
4219
|
function renderPictureBullet(elementId, segmentIndex, bulletInfo, baseFontSize) {
|
|
4184
|
-
const picture =
|
|
4220
|
+
const picture = chunkNIWO2WYI_js.resolvePictureBullet(bulletInfo, baseFontSize) ?? {
|
|
4185
4221
|
sizePx: baseFontSize,
|
|
4186
4222
|
fallbackMarker: "\u2022",
|
|
4187
4223
|
accessibleLabel: "Bullet"
|
|
@@ -4231,7 +4267,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4231
4267
|
);
|
|
4232
4268
|
}
|
|
4233
4269
|
const segmentStyle = segment.style || {};
|
|
4234
|
-
const textValue =
|
|
4270
|
+
const textValue = chunkNIWO2WYI_js.substituteFieldText(segment.text || "", segment.fieldType, fieldContext);
|
|
4235
4271
|
const lines = textValue.split("\n");
|
|
4236
4272
|
const textDecorationTokens = [];
|
|
4237
4273
|
if (segmentStyle.underline || segmentStyle.hyperlink) {
|
|
@@ -4241,8 +4277,8 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4241
4277
|
textDecorationTokens.push("line-through");
|
|
4242
4278
|
}
|
|
4243
4279
|
const isDoubleStrike = segmentStyle.strikethrough && segmentStyle.strikeType === "dblStrike";
|
|
4244
|
-
const resolvedSegmentColor = segmentStyle.hyperlink ?
|
|
4245
|
-
const underlineDecoration =
|
|
4280
|
+
const resolvedSegmentColor = segmentStyle.hyperlink ? chunkNIWO2WYI_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, HYPERLINK_COLOR) : chunkNIWO2WYI_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, fallbackColor);
|
|
4281
|
+
const underlineDecoration = chunkNIWO2WYI_js.resolveUnderlineDecorationStyle(
|
|
4246
4282
|
Boolean(isDoubleStrike),
|
|
4247
4283
|
segmentStyle.underlineStyle
|
|
4248
4284
|
);
|
|
@@ -4255,14 +4291,14 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4255
4291
|
const autoFitScale = element.textStyle?.autoFitFontScale !== void 0 && element.textStyle.autoFitFontScale > 0 && element.textStyle.autoFitFontScale < 1 ? element.textStyle.autoFitFontScale : 1;
|
|
4256
4292
|
const baseFontSize = rawFontSize * autoFitScale;
|
|
4257
4293
|
const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
|
|
4258
|
-
const baseFontFamily = rawFontFamily ?
|
|
4294
|
+
const baseFontFamily = rawFontFamily ? chunkCYZLRYJV_js.getSubstituteFontFamily(rawFontFamily) : DEFAULT_FONT_FAMILY;
|
|
4259
4295
|
const scriptFonts = {
|
|
4260
4296
|
latin: baseFontFamily,
|
|
4261
4297
|
eastAsia: segmentStyle.eastAsiaFont || element.textStyle?.eastAsiaFont || baseFontFamily,
|
|
4262
4298
|
complexScript: segmentStyle.complexScriptFont || element.textStyle?.complexScriptFont || baseFontFamily,
|
|
4263
4299
|
symbol: segmentStyle.symbolFont || element.textStyle?.symbolFont || baseFontFamily
|
|
4264
4300
|
};
|
|
4265
|
-
const needsScriptFonts =
|
|
4301
|
+
const needsScriptFonts = chunkNIWO2WYI_js.hasDistinctScriptFonts(scriptFonts);
|
|
4266
4302
|
const spanStyle = {
|
|
4267
4303
|
color: resolvedSegmentColor,
|
|
4268
4304
|
fontSize: baseFontSize * baselineFontScale,
|
|
@@ -4276,15 +4312,15 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4276
4312
|
verticalAlign: baselineShift,
|
|
4277
4313
|
letterSpacing,
|
|
4278
4314
|
fontKerning,
|
|
4279
|
-
backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ?
|
|
4315
|
+
backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ? chunkNIWO2WYI_js.normalizeHexColor(segmentStyle.highlightColor, "transparent") : void 0,
|
|
4280
4316
|
...textFillStyles,
|
|
4281
|
-
textDecorationColor: segmentStyle.underlineColor ?
|
|
4282
|
-
WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${
|
|
4317
|
+
textDecorationColor: segmentStyle.underlineColor ? chunkNIWO2WYI_js.normalizeHexColor(segmentStyle.underlineColor, void 0) : void 0,
|
|
4318
|
+
WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${chunkNIWO2WYI_js.normalizeHexColor(segmentStyle.textOutlineColor, "#000000")}` : segmentStyle.textOutlineWidth ? `${segmentStyle.textOutlineWidth}px currentColor` : void 0,
|
|
4283
4319
|
paintOrder: segmentStyle.textOutlineWidth ? "stroke fill" : void 0,
|
|
4284
|
-
textShadow:
|
|
4285
|
-
filter:
|
|
4286
|
-
opacity:
|
|
4287
|
-
WebkitBoxReflect:
|
|
4320
|
+
textShadow: chunkNIWO2WYI_js.buildTextShadowCss(segmentStyle),
|
|
4321
|
+
filter: chunkNIWO2WYI_js.buildTextRunFilterChain(segmentStyle),
|
|
4322
|
+
opacity: chunkNIWO2WYI_js.getTextAlphaOpacity(segmentStyle),
|
|
4323
|
+
WebkitBoxReflect: chunkNIWO2WYI_js.buildTextReflectionCss(segmentStyle)
|
|
4288
4324
|
};
|
|
4289
4325
|
const runRtl = segmentStyle.rtl;
|
|
4290
4326
|
if (runRtl !== void 0 && runRtl !== paragraphRtl) {
|
|
@@ -4304,7 +4340,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4304
4340
|
spanStyle.fontSize = baseFontSize * (bulletInfo.sizePercent / 100) * baselineFontScale;
|
|
4305
4341
|
}
|
|
4306
4342
|
if (bulletInfo.color) {
|
|
4307
|
-
spanStyle.color =
|
|
4343
|
+
spanStyle.color = chunkNIWO2WYI_js.normalizeHexColor(bulletInfo.color, resolvedSegmentColor);
|
|
4308
4344
|
}
|
|
4309
4345
|
}
|
|
4310
4346
|
if (bulletInfo?.imageDataUrl || bulletInfo?.imageRelId) {
|
|
@@ -4336,7 +4372,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4336
4372
|
textAlign: segment.rubyAlignment === "l" ? "left" : segment.rubyAlignment === "r" ? "right" : segment.rubyAlignment === "dist" || segment.rubyAlignment === "distCat" || segment.rubyAlignment === "distLetter" ? "justify" : "center"
|
|
4337
4373
|
};
|
|
4338
4374
|
if (segment.rubyStyle?.color) {
|
|
4339
|
-
rubyStyle.color =
|
|
4375
|
+
rubyStyle.color = chunkNIWO2WYI_js.normalizeHexColor(segment.rubyStyle.color, resolvedSegmentColor);
|
|
4340
4376
|
}
|
|
4341
4377
|
innerContent = /* @__PURE__ */ jsxRuntime.jsxs("ruby", { children: [
|
|
4342
4378
|
baseContent,
|
|
@@ -4406,7 +4442,7 @@ function groupSegmentsIntoParagraphs(segments) {
|
|
|
4406
4442
|
return paragraphs;
|
|
4407
4443
|
}
|
|
4408
4444
|
function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick) {
|
|
4409
|
-
if (!
|
|
4445
|
+
if (!chunkCYZLRYJV_js.hasTextProperties(element)) {
|
|
4410
4446
|
return emptyFallback || null;
|
|
4411
4447
|
}
|
|
4412
4448
|
const effectiveSegments = segmentOverrides ?? element.textSegments;
|
|
@@ -4427,9 +4463,9 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
4427
4463
|
return element.text || emptyFallback || "";
|
|
4428
4464
|
}
|
|
4429
4465
|
const paragraphs = groupSegmentsIntoParagraphs(effectiveSegments);
|
|
4430
|
-
const paragraphIndents =
|
|
4431
|
-
const elementRtl =
|
|
4432
|
-
const elementAlign =
|
|
4466
|
+
const paragraphIndents = chunkCYZLRYJV_js.hasTextProperties(element) ? element.paragraphIndents : void 0;
|
|
4467
|
+
const elementRtl = chunkCYZLRYJV_js.hasTextProperties(element) ? element.textStyle?.rtl : void 0;
|
|
4468
|
+
const elementAlign = chunkCYZLRYJV_js.hasTextProperties(element) ? element.textStyle?.align : void 0;
|
|
4433
4469
|
return paragraphs.map((paraSegments, paraIndex) => {
|
|
4434
4470
|
const paraIndent = paragraphIndents?.[paraIndex];
|
|
4435
4471
|
const rawMarginLeft = typeof paraIndent?.marginLeft === "number" && paraIndent.marginLeft !== 0 ? paraIndent.marginLeft : void 0;
|
|
@@ -4443,14 +4479,14 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
4443
4479
|
return Boolean(segment.text) && segment.text.trim().length > 0;
|
|
4444
4480
|
});
|
|
4445
4481
|
const hasBullet = bulletInfo && !bulletInfo.none && hasVisibleTextContent;
|
|
4446
|
-
const paraRtl =
|
|
4482
|
+
const paraRtl = chunkNIWO2WYI_js.resolveParagraphRtl(paraSegments, elementRtl);
|
|
4447
4483
|
const isRtlParagraph = paraRtl === true;
|
|
4448
|
-
const paraAlign =
|
|
4449
|
-
const cssTextAlign =
|
|
4484
|
+
const paraAlign = chunkNIWO2WYI_js.resolveParagraphAlign(paraSegments, elementAlign);
|
|
4485
|
+
const cssTextAlign = chunkNIWO2WYI_js.resolveCssTextAlign(paraAlign, isRtlParagraph);
|
|
4450
4486
|
const paraMarginLeft = isRtlParagraph ? void 0 : rawMarginLeft;
|
|
4451
4487
|
const paraMarginRight = isRtlParagraph ? rawMarginLeft : void 0;
|
|
4452
4488
|
const paraTextIndent = rawTextIndent;
|
|
4453
|
-
const paraKinsokuStyle =
|
|
4489
|
+
const paraKinsokuStyle = chunkNIWO2WYI_js.getKinsokuLineBreakStyles(firstSeg?.segment.style);
|
|
4454
4490
|
const hasParaKinsoku = Object.keys(paraKinsokuStyle).length > 0;
|
|
4455
4491
|
const paraStyle = {
|
|
4456
4492
|
...paraKinsokuStyle
|
|
@@ -4615,7 +4651,7 @@ function isConnectorOrLineElement(element) {
|
|
|
4615
4651
|
if (element.type === "connector") {
|
|
4616
4652
|
return true;
|
|
4617
4653
|
}
|
|
4618
|
-
if (!
|
|
4654
|
+
if (!chunkCYZLRYJV_js.hasShapeProperties(element)) {
|
|
4619
4655
|
return false;
|
|
4620
4656
|
}
|
|
4621
4657
|
const st = getShapeType(element.shapeType);
|
|
@@ -4633,13 +4669,13 @@ function hexToRgbUnit(hex) {
|
|
|
4633
4669
|
};
|
|
4634
4670
|
}
|
|
4635
4671
|
function getDuotoneColors(element) {
|
|
4636
|
-
if (!
|
|
4672
|
+
if (!chunkCYZLRYJV_js.isImageLikeElement(element)) {
|
|
4637
4673
|
return void 0;
|
|
4638
4674
|
}
|
|
4639
4675
|
return element.imageEffects?.duotone;
|
|
4640
4676
|
}
|
|
4641
4677
|
function buildLineShadowCss(element) {
|
|
4642
|
-
if (!
|
|
4678
|
+
if (!chunkCYZLRYJV_js.hasShapeProperties(element)) {
|
|
4643
4679
|
return void 0;
|
|
4644
4680
|
}
|
|
4645
4681
|
const ss = element.shapeStyle;
|
|
@@ -4650,13 +4686,13 @@ function buildLineShadowCss(element) {
|
|
|
4650
4686
|
const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
|
|
4651
4687
|
const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
|
|
4652
4688
|
const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
|
|
4653
|
-
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${
|
|
4654
|
-
|
|
4689
|
+
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkNIWO2WYI_js.colorWithOpacity(
|
|
4690
|
+
chunkNIWO2WYI_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
|
|
4655
4691
|
opacity
|
|
4656
4692
|
)}`;
|
|
4657
4693
|
}
|
|
4658
4694
|
function buildLineGlowFilter(element) {
|
|
4659
|
-
if (!
|
|
4695
|
+
if (!chunkCYZLRYJV_js.hasShapeProperties(element)) {
|
|
4660
4696
|
return void 0;
|
|
4661
4697
|
}
|
|
4662
4698
|
const ss = element.shapeStyle;
|
|
@@ -4665,7 +4701,7 @@ function buildLineGlowFilter(element) {
|
|
|
4665
4701
|
}
|
|
4666
4702
|
const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
|
|
4667
4703
|
const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
|
|
4668
|
-
const glowCol =
|
|
4704
|
+
const glowCol = chunkNIWO2WYI_js.colorWithOpacity(chunkNIWO2WYI_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
|
|
4669
4705
|
return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
|
|
4670
4706
|
}
|
|
4671
4707
|
function mapDagBlendModeToCss(blend) {
|
|
@@ -4689,7 +4725,7 @@ function getDagDuotoneFilterId(elementId) {
|
|
|
4689
4725
|
return `dag-duotone-${elementId}`;
|
|
4690
4726
|
}
|
|
4691
4727
|
function hasDagDuotoneEffect(element) {
|
|
4692
|
-
if (!
|
|
4728
|
+
if (!chunkCYZLRYJV_js.hasShapeProperties(element)) {
|
|
4693
4729
|
return false;
|
|
4694
4730
|
}
|
|
4695
4731
|
return Boolean(element.shapeStyle?.dagDuotone);
|
|
@@ -4752,7 +4788,7 @@ function getRoundRectRadiusPx2(element) {
|
|
|
4752
4788
|
|
|
4753
4789
|
// src/viewer/utils/shape-visual-3d.ts
|
|
4754
4790
|
function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
|
|
4755
|
-
return
|
|
4791
|
+
return chunkNIWO2WYI_js.build3DExtrusionData(
|
|
4756
4792
|
shape3d,
|
|
4757
4793
|
scene3d,
|
|
4758
4794
|
fillColor,
|
|
@@ -4761,27 +4797,27 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
|
|
|
4761
4797
|
);
|
|
4762
4798
|
}
|
|
4763
4799
|
function apply3dEffects2(base, scene3d, shape3d) {
|
|
4764
|
-
|
|
4800
|
+
chunkNIWO2WYI_js.apply3dEffects(base, scene3d, shape3d);
|
|
4765
4801
|
}
|
|
4766
4802
|
|
|
4767
4803
|
// src/viewer/utils/shape-visual-style.ts
|
|
4768
4804
|
function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeColor) {
|
|
4769
|
-
if (!
|
|
4805
|
+
if (!chunkCYZLRYJV_js.hasShapeProperties(element)) {
|
|
4770
4806
|
return {};
|
|
4771
4807
|
}
|
|
4772
4808
|
const normalizedShapeType = getShapeType(element.shapeType);
|
|
4773
|
-
const clipPath =
|
|
4809
|
+
const clipPath = chunkNIWO2WYI_js.getResolvedShapeClipPath(element);
|
|
4774
4810
|
const fillOpacity = element.shapeStyle?.fillOpacity;
|
|
4775
4811
|
const strokeOpacity = element.shapeStyle?.strokeOpacity;
|
|
4776
|
-
const strokeDash =
|
|
4777
|
-
const fillGradient =
|
|
4778
|
-
const shadowCss =
|
|
4779
|
-
const innerShadowCss =
|
|
4780
|
-
const resolvedFillColor =
|
|
4781
|
-
const resolvedStrokeColor =
|
|
4812
|
+
const strokeDash = chunkNIWO2WYI_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
|
|
4813
|
+
const fillGradient = chunkNIWO2WYI_js.buildCssGradientFromShapeStyle(element.shapeStyle) || element.shapeStyle?.fillGradient;
|
|
4814
|
+
const shadowCss = chunkNIWO2WYI_js.buildShadowCssFromShapeStyle(element.shapeStyle);
|
|
4815
|
+
const innerShadowCss = chunkNIWO2WYI_js.buildInnerShadowCssFromShapeStyle(element.shapeStyle);
|
|
4816
|
+
const resolvedFillColor = chunkNIWO2WYI_js.colorWithOpacity(fillColor, fillOpacity);
|
|
4817
|
+
const resolvedStrokeColor = chunkNIWO2WYI_js.colorWithOpacity(strokeColor, strokeOpacity);
|
|
4782
4818
|
const ss = element.shapeStyle;
|
|
4783
4819
|
const combinedShadowParts = [];
|
|
4784
|
-
const multiLayerShadow =
|
|
4820
|
+
const multiLayerShadow = chunkNIWO2WYI_js.buildMultiLayerShadowCss(element.shapeStyle);
|
|
4785
4821
|
if (multiLayerShadow) {
|
|
4786
4822
|
combinedShadowParts.push(multiLayerShadow);
|
|
4787
4823
|
} else if (shadowCss) {
|
|
@@ -4790,7 +4826,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4790
4826
|
if (innerShadowCss) {
|
|
4791
4827
|
combinedShadowParts.push(innerShadowCss);
|
|
4792
4828
|
}
|
|
4793
|
-
const glowBoxShadow =
|
|
4829
|
+
const glowBoxShadow = chunkNIWO2WYI_js.buildGlowBoxShadow(ss?.glowColor, ss?.glowRadius, ss?.glowOpacity);
|
|
4794
4830
|
if (glowBoxShadow) {
|
|
4795
4831
|
combinedShadowParts.push(glowBoxShadow);
|
|
4796
4832
|
}
|
|
@@ -4798,7 +4834,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4798
4834
|
if (lineShadow) {
|
|
4799
4835
|
combinedShadowParts.push(lineShadow);
|
|
4800
4836
|
}
|
|
4801
|
-
const compoundLineShadow =
|
|
4837
|
+
const compoundLineShadow = chunkNIWO2WYI_js.getCompoundLineBoxShadow(
|
|
4802
4838
|
element.shapeStyle?.compoundLine,
|
|
4803
4839
|
strokeWidth,
|
|
4804
4840
|
resolvedStrokeColor
|
|
@@ -4811,7 +4847,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4811
4847
|
if (ss?.glowColor && ss.glowColor !== "transparent" && ss.glowRadius) {
|
|
4812
4848
|
const glowOpacity = typeof ss.glowOpacity === "number" ? ss.glowOpacity : 0.75;
|
|
4813
4849
|
const glowRad = Math.round(Math.max(0, ss.glowRadius));
|
|
4814
|
-
const glowCol =
|
|
4850
|
+
const glowCol = chunkNIWO2WYI_js.colorWithOpacity(chunkNIWO2WYI_js.normalizeHexColor(ss.glowColor, "#ffff00"), glowOpacity);
|
|
4815
4851
|
filterParts.push(`drop-shadow(0 0 ${glowRad}px ${glowCol})`);
|
|
4816
4852
|
}
|
|
4817
4853
|
if (typeof ss?.softEdgeRadius === "number" && ss.softEdgeRadius > 0) {
|
|
@@ -4824,12 +4860,12 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4824
4860
|
if (lineGlowCss) {
|
|
4825
4861
|
filterParts.push(lineGlowCss);
|
|
4826
4862
|
}
|
|
4827
|
-
const dagFilter =
|
|
4863
|
+
const dagFilter = chunkNIWO2WYI_js.getEffectDagFilter(ss, element.id);
|
|
4828
4864
|
if (dagFilter) {
|
|
4829
4865
|
filterParts.push(dagFilter);
|
|
4830
4866
|
}
|
|
4831
4867
|
const lineJoinCss = ss?.lineJoin === "round" ? "round" : ss?.lineJoin === "bevel" ? "bevel" : void 0;
|
|
4832
|
-
const patternFill =
|
|
4868
|
+
const patternFill = chunkNIWO2WYI_js.buildPatternFillCss(element.shapeStyle);
|
|
4833
4869
|
const imageFillUrl = ss?.fillMode === "image" && ss.fillImageUrl ? ss.fillImageUrl : void 0;
|
|
4834
4870
|
const imageFillMode = ss?.fillImageMode || "stretch";
|
|
4835
4871
|
let reflectCss;
|
|
@@ -4841,7 +4877,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4841
4877
|
const endOpacity = typeof ss.reflectionEndOpacity === "number" ? ss.reflectionEndOpacity : 0;
|
|
4842
4878
|
const fadeLength = typeof ss.reflectionEndPosition === "number" ? Math.round(ss.reflectionEndPosition * Math.max(element.height, 1)) : 100;
|
|
4843
4879
|
const blurRadius = typeof ss.reflectionBlurRadius === "number" ? ss.reflectionBlurRadius : 0;
|
|
4844
|
-
reflectCss =
|
|
4880
|
+
reflectCss = chunkNIWO2WYI_js.buildReflectionCss(distance, startOpacity, endOpacity, fadeLength, blurRadius);
|
|
4845
4881
|
}
|
|
4846
4882
|
}
|
|
4847
4883
|
const base = {
|
|
@@ -4855,9 +4891,9 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4855
4891
|
filter: filterParts.length > 0 ? filterParts.join(" ") : void 0,
|
|
4856
4892
|
opacity: typeof ss?.dagAlphaModFix === "number" ? Math.max(0, Math.min(1, ss.dagAlphaModFix / 100)) : void 0,
|
|
4857
4893
|
mixBlendMode: mapDagBlendModeToCss(ss?.dagFillOverlayBlend),
|
|
4858
|
-
borderWidth: strokeWidth > 0 ?
|
|
4894
|
+
borderWidth: strokeWidth > 0 ? chunkNIWO2WYI_js.getCompoundLineBorderWidth(ss?.compoundLine, strokeWidth) : void 0,
|
|
4859
4895
|
borderColor: strokeWidth > 0 ? resolvedStrokeColor : void 0,
|
|
4860
|
-
borderStyle: strokeWidth > 0 ?
|
|
4896
|
+
borderStyle: strokeWidth > 0 ? chunkNIWO2WYI_js.getCssBorderDashStyle(strokeDash, ss?.compoundLine) : void 0,
|
|
4861
4897
|
strokeLinejoin: lineJoinCss,
|
|
4862
4898
|
strokeLinecap: ss?.lineCap === "rnd" ? "round" : ss?.lineCap === "sq" ? "square" : void 0
|
|
4863
4899
|
};
|
|
@@ -4898,7 +4934,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4898
4934
|
borderWidth: 0,
|
|
4899
4935
|
borderTopWidth: Math.max(strokeWidth, 2),
|
|
4900
4936
|
borderTopColor: resolvedStrokeColor,
|
|
4901
|
-
borderTopStyle:
|
|
4937
|
+
borderTopStyle: chunkNIWO2WYI_js.getCssBorderDashStyle(strokeDash)
|
|
4902
4938
|
};
|
|
4903
4939
|
}
|
|
4904
4940
|
if (normalizedShapeType === "cylinder") {
|
|
@@ -4912,13 +4948,13 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
4912
4948
|
function getConnectorAdjustment(element, key, fallback) {
|
|
4913
4949
|
const direct = element.shapeAdjustments?.[key];
|
|
4914
4950
|
if (typeof direct === "number" && Number.isFinite(direct)) {
|
|
4915
|
-
return
|
|
4951
|
+
return chunkNIWO2WYI_js.clampUnitInterval(direct / 1e5);
|
|
4916
4952
|
}
|
|
4917
4953
|
const fallbackKey = element.shapeAdjustments?.adj;
|
|
4918
4954
|
if (typeof fallbackKey === "number" && Number.isFinite(fallbackKey)) {
|
|
4919
|
-
return
|
|
4955
|
+
return chunkNIWO2WYI_js.clampUnitInterval(fallbackKey / 1e5);
|
|
4920
4956
|
}
|
|
4921
|
-
return
|
|
4957
|
+
return chunkNIWO2WYI_js.clampUnitInterval(fallback);
|
|
4922
4958
|
}
|
|
4923
4959
|
function getConnectorPathGeometry(element) {
|
|
4924
4960
|
const width = Math.max(element.width, 1);
|
|
@@ -5045,14 +5081,14 @@ function renderConnectorMarker(markerId, arrowType, color, arrowWidth, arrowLeng
|
|
|
5045
5081
|
);
|
|
5046
5082
|
}
|
|
5047
5083
|
function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor) {
|
|
5048
|
-
if (!
|
|
5084
|
+
if (!chunkCYZLRYJV_js.hasShapeProperties(element)) {
|
|
5049
5085
|
return null;
|
|
5050
5086
|
}
|
|
5051
5087
|
const normalizedType = (element.shapeType || "").toLowerCase();
|
|
5052
|
-
const fillPaint =
|
|
5053
|
-
const strokePaint =
|
|
5054
|
-
const dashType =
|
|
5055
|
-
const dashArray =
|
|
5088
|
+
const fillPaint = chunkNIWO2WYI_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
|
|
5089
|
+
const strokePaint = chunkNIWO2WYI_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
|
|
5090
|
+
const dashType = chunkNIWO2WYI_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
|
|
5091
|
+
const dashArray = chunkNIWO2WYI_js.getSvgStrokeDasharray(
|
|
5056
5092
|
dashType,
|
|
5057
5093
|
Math.max(strokeWidth, 1),
|
|
5058
5094
|
element.shapeStyle?.customDashSegments
|
|
@@ -5136,18 +5172,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
5136
5172
|
}
|
|
5137
5173
|
);
|
|
5138
5174
|
}
|
|
5139
|
-
if (
|
|
5175
|
+
if (chunkCYZLRYJV_js.isCalloutShape(normalizedType)) {
|
|
5140
5176
|
const width = Math.max(element.width, 1);
|
|
5141
5177
|
const height = Math.max(element.height, 1);
|
|
5142
|
-
const geometry =
|
|
5178
|
+
const geometry = chunkCYZLRYJV_js.getCalloutLeaderLineGeometry(
|
|
5143
5179
|
normalizedType,
|
|
5144
5180
|
width,
|
|
5145
5181
|
height,
|
|
5146
5182
|
element.shapeAdjustments
|
|
5147
5183
|
);
|
|
5148
5184
|
if (geometry && geometry.points.length >= 2) {
|
|
5149
|
-
const leaderPath =
|
|
5150
|
-
const bounds =
|
|
5185
|
+
const leaderPath = chunkCYZLRYJV_js.buildCalloutLeaderLineSvgPath(geometry);
|
|
5186
|
+
const bounds = chunkCYZLRYJV_js.getCalloutViewBoxBounds(width, height, geometry);
|
|
5151
5187
|
const lineStroke = Math.max(strokeWidth, 1);
|
|
5152
5188
|
const offsetLeft = bounds.minX;
|
|
5153
5189
|
const offsetTop = bounds.minY;
|
|
@@ -5211,8 +5247,8 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
5211
5247
|
const endArrowL = element.shapeStyle?.connectorEndArrowLength;
|
|
5212
5248
|
const compoundLine = element.shapeStyle?.compoundLine;
|
|
5213
5249
|
const hitTargetWidth = Math.max(strokeWidth * 3, 12);
|
|
5214
|
-
const offsets =
|
|
5215
|
-
const widths =
|
|
5250
|
+
const offsets = chunkNIWO2WYI_js.getCompoundLineOffsets(compoundLine, strokeWidth);
|
|
5251
|
+
const widths = chunkNIWO2WYI_js.getCompoundLineWidths(compoundLine, strokeWidth);
|
|
5216
5252
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5217
5253
|
"svg",
|
|
5218
5254
|
{
|
|
@@ -5266,7 +5302,7 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
5266
5302
|
|
|
5267
5303
|
// src/viewer/utils/image-style.ts
|
|
5268
5304
|
function getImageMaskStyle(element) {
|
|
5269
|
-
if (!
|
|
5305
|
+
if (!chunkCYZLRYJV_js.hasShapeProperties(element)) {
|
|
5270
5306
|
return void 0;
|
|
5271
5307
|
}
|
|
5272
5308
|
const shapeType = element.shapeType;
|
|
@@ -5275,7 +5311,7 @@ function getImageMaskStyle(element) {
|
|
|
5275
5311
|
}
|
|
5276
5312
|
const normalized = shapeType.toLowerCase();
|
|
5277
5313
|
if (normalized === "roundrect" || normalized === "round1rect" || normalized === "round2samerect" || normalized === "round2diagrect" || normalized === "sniproundrect" || normalized === "snip1rect" || normalized === "snip2diagrect") {
|
|
5278
|
-
const radiusPx =
|
|
5314
|
+
const radiusPx = chunkNIWO2WYI_js.getRoundRectRadiusPx(element);
|
|
5279
5315
|
if (radiusPx <= 0.01) {
|
|
5280
5316
|
return void 0;
|
|
5281
5317
|
}
|
|
@@ -5287,7 +5323,7 @@ function getImageMaskStyle(element) {
|
|
|
5287
5323
|
if (normalized === "can" || normalized === "cylinder") {
|
|
5288
5324
|
return { borderRadius: "48% / 12%" };
|
|
5289
5325
|
}
|
|
5290
|
-
const clipPath =
|
|
5326
|
+
const clipPath = chunkNIWO2WYI_js.getResolvedShapeClipPath(element);
|
|
5291
5327
|
if (!clipPath) {
|
|
5292
5328
|
return void 0;
|
|
5293
5329
|
}
|
|
@@ -5295,7 +5331,7 @@ function getImageMaskStyle(element) {
|
|
|
5295
5331
|
}
|
|
5296
5332
|
function getImageRenderStyle(element) {
|
|
5297
5333
|
const maskStyle = getImageMaskStyle(element) || {};
|
|
5298
|
-
if (!
|
|
5334
|
+
if (!chunkCYZLRYJV_js.isImageLikeElement(element)) {
|
|
5299
5335
|
return {
|
|
5300
5336
|
...maskStyle,
|
|
5301
5337
|
width: "100%",
|
|
@@ -5303,10 +5339,10 @@ function getImageRenderStyle(element) {
|
|
|
5303
5339
|
objectFit: "cover"
|
|
5304
5340
|
};
|
|
5305
5341
|
}
|
|
5306
|
-
const cropLeft =
|
|
5307
|
-
const cropTop =
|
|
5308
|
-
const cropRight =
|
|
5309
|
-
const cropBottom =
|
|
5342
|
+
const cropLeft = chunkNIWO2WYI_js.clampCropValue(element.cropLeft);
|
|
5343
|
+
const cropTop = chunkNIWO2WYI_js.clampCropValue(element.cropTop);
|
|
5344
|
+
const cropRight = chunkNIWO2WYI_js.clampCropValue(element.cropRight);
|
|
5345
|
+
const cropBottom = chunkNIWO2WYI_js.clampCropValue(element.cropBottom);
|
|
5310
5346
|
const hasCrop = cropLeft + cropRight > 1e-4 || cropTop + cropBottom > 1e-4;
|
|
5311
5347
|
if (!hasCrop) {
|
|
5312
5348
|
return {
|
|
@@ -5318,10 +5354,10 @@ function getImageRenderStyle(element) {
|
|
|
5318
5354
|
}
|
|
5319
5355
|
const safeHorizontalScale = cropLeft + cropRight >= 0.99 ? 0.99 / (cropLeft + cropRight) : 1;
|
|
5320
5356
|
const safeVerticalScale = cropTop + cropBottom >= 0.99 ? 0.99 / (cropTop + cropBottom) : 1;
|
|
5321
|
-
const normalizedLeft =
|
|
5322
|
-
const normalizedRight =
|
|
5323
|
-
const normalizedTop =
|
|
5324
|
-
const normalizedBottom =
|
|
5357
|
+
const normalizedLeft = chunkNIWO2WYI_js.clampCropValue(cropLeft * safeHorizontalScale);
|
|
5358
|
+
const normalizedRight = chunkNIWO2WYI_js.clampCropValue(cropRight * safeHorizontalScale);
|
|
5359
|
+
const normalizedTop = chunkNIWO2WYI_js.clampCropValue(cropTop * safeVerticalScale);
|
|
5360
|
+
const normalizedBottom = chunkNIWO2WYI_js.clampCropValue(cropBottom * safeVerticalScale);
|
|
5325
5361
|
const remainingWidth = Math.max(0.01, 1 - normalizedLeft - normalizedRight);
|
|
5326
5362
|
const remainingHeight = Math.max(0.01, 1 - normalizedTop - normalizedBottom);
|
|
5327
5363
|
const tx = Math.round(-normalizedLeft / remainingWidth * 1e4) / 100;
|
|
@@ -5350,7 +5386,7 @@ var CROP_SHAPE_CLIP_PATHS = {
|
|
|
5350
5386
|
star: "polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)"
|
|
5351
5387
|
};
|
|
5352
5388
|
function getCropShapeClipPath(element) {
|
|
5353
|
-
if (!
|
|
5389
|
+
if (!chunkCYZLRYJV_js.isImageLikeElement(element)) {
|
|
5354
5390
|
return void 0;
|
|
5355
5391
|
}
|
|
5356
5392
|
const shape = element.cropShape;
|
|
@@ -5360,7 +5396,7 @@ function getCropShapeClipPath(element) {
|
|
|
5360
5396
|
return CROP_SHAPE_CLIP_PATHS[shape];
|
|
5361
5397
|
}
|
|
5362
5398
|
function isImageTiled(element) {
|
|
5363
|
-
if (!
|
|
5399
|
+
if (!chunkCYZLRYJV_js.isImageLikeElement(element)) {
|
|
5364
5400
|
return false;
|
|
5365
5401
|
}
|
|
5366
5402
|
return typeof element.tileScaleX === "number" || typeof element.tileScaleY === "number";
|
|
@@ -5390,7 +5426,7 @@ function tileAlignmentToCssPosition(alignment) {
|
|
|
5390
5426
|
}
|
|
5391
5427
|
}
|
|
5392
5428
|
function getImageTilingStyle(element) {
|
|
5393
|
-
if (!
|
|
5429
|
+
if (!chunkCYZLRYJV_js.isImageLikeElement(element) || !isImageTiled(element)) {
|
|
5394
5430
|
return void 0;
|
|
5395
5431
|
}
|
|
5396
5432
|
const scaleX = typeof element.tileScaleX === "number" ? element.tileScaleX * 100 : 100;
|
|
@@ -5461,9 +5497,9 @@ function parseGradientFillCss(gradFill) {
|
|
|
5461
5497
|
}
|
|
5462
5498
|
const parsed = stops.map((gs) => {
|
|
5463
5499
|
const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
|
|
5464
|
-
const color =
|
|
5465
|
-
const opacity =
|
|
5466
|
-
return { pos, color:
|
|
5500
|
+
const color = chunkNIWO2WYI_js.parseDrawingColor(gs) ?? "#888888";
|
|
5501
|
+
const opacity = chunkNIWO2WYI_js.parseDrawingColorOpacity(gs);
|
|
5502
|
+
return { pos, color: chunkNIWO2WYI_js.colorWithOpacity(color, opacity) };
|
|
5467
5503
|
}).sort((a, b) => a.pos - b.pos);
|
|
5468
5504
|
const stopStrings = parsed.map((s) => `${s.color} ${s.pos.toFixed(1)}%`).join(", ");
|
|
5469
5505
|
const lin = gradFill["a:lin"];
|
|
@@ -5504,8 +5540,8 @@ function parsePatternFillCss(pattFill) {
|
|
|
5504
5540
|
if (!pattFill) {
|
|
5505
5541
|
return void 0;
|
|
5506
5542
|
}
|
|
5507
|
-
const fgColor =
|
|
5508
|
-
const bgColor =
|
|
5543
|
+
const fgColor = chunkNIWO2WYI_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
|
|
5544
|
+
const bgColor = chunkNIWO2WYI_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
|
|
5509
5545
|
const preset = String(pattFill["@_prst"] || "ltDnDiag");
|
|
5510
5546
|
switch (preset) {
|
|
5511
5547
|
case "ltHorz":
|
|
@@ -5616,11 +5652,11 @@ function parseCellBorders(cellProperties) {
|
|
|
5616
5652
|
const prstDash = ln["a:prstDash"];
|
|
5617
5653
|
const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
|
|
5618
5654
|
const cssBorderStyle = ooxmlDashToCss(dashVal);
|
|
5619
|
-
const color =
|
|
5655
|
+
const color = chunkNIWO2WYI_js.parseDrawingColor(ln["a:solidFill"]);
|
|
5620
5656
|
if (color) {
|
|
5621
|
-
const opacity =
|
|
5657
|
+
const opacity = chunkNIWO2WYI_js.parseDrawingColorOpacity(ln["a:solidFill"]);
|
|
5622
5658
|
const key = `${edge.prefix}`;
|
|
5623
|
-
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${
|
|
5659
|
+
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkNIWO2WYI_js.colorWithOpacity(color, opacity)}`;
|
|
5624
5660
|
}
|
|
5625
5661
|
}
|
|
5626
5662
|
return borderStyle;
|
|
@@ -5633,7 +5669,7 @@ function parseCellTextEffects(runProps) {
|
|
|
5633
5669
|
const textShadowParts = [];
|
|
5634
5670
|
const outerShdw = effectLst["a:outerShdw"];
|
|
5635
5671
|
if (outerShdw) {
|
|
5636
|
-
const shdwColor =
|
|
5672
|
+
const shdwColor = chunkNIWO2WYI_js.parseDrawingColor(outerShdw);
|
|
5637
5673
|
if (shdwColor) {
|
|
5638
5674
|
const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
|
|
5639
5675
|
const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
|
|
@@ -5651,7 +5687,7 @@ function parseCellTextEffects(runProps) {
|
|
|
5651
5687
|
}
|
|
5652
5688
|
const glow = effectLst["a:glow"];
|
|
5653
5689
|
if (glow) {
|
|
5654
|
-
const glowColor =
|
|
5690
|
+
const glowColor = chunkNIWO2WYI_js.parseDrawingColor(glow);
|
|
5655
5691
|
if (glowColor) {
|
|
5656
5692
|
const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
|
|
5657
5693
|
const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
|
|
@@ -5730,10 +5766,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
5730
5766
|
if (runProps?.["@_u"] !== void 0) {
|
|
5731
5767
|
cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
|
|
5732
5768
|
}
|
|
5733
|
-
const runColor =
|
|
5769
|
+
const runColor = chunkNIWO2WYI_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkNIWO2WYI_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
|
|
5734
5770
|
if (runColor) {
|
|
5735
|
-
const opacity =
|
|
5736
|
-
cellStyle.color =
|
|
5771
|
+
const opacity = chunkNIWO2WYI_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
|
|
5772
|
+
cellStyle.color = chunkNIWO2WYI_js.colorWithOpacity(runColor, opacity);
|
|
5737
5773
|
}
|
|
5738
5774
|
const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
|
|
5739
5775
|
if (fontFamily) {
|
|
@@ -5743,15 +5779,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
5743
5779
|
cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
|
|
5744
5780
|
}
|
|
5745
5781
|
const cellProperties = cellXml["a:tcPr"];
|
|
5746
|
-
const cellFill =
|
|
5782
|
+
const cellFill = chunkNIWO2WYI_js.parseDrawingColor(
|
|
5747
5783
|
cellProperties?.["a:solidFill"],
|
|
5748
5784
|
schemeColorOverrides
|
|
5749
5785
|
);
|
|
5750
5786
|
if (cellFill) {
|
|
5751
|
-
const opacity =
|
|
5787
|
+
const opacity = chunkNIWO2WYI_js.parseDrawingColorOpacity(
|
|
5752
5788
|
cellProperties?.["a:solidFill"]
|
|
5753
5789
|
);
|
|
5754
|
-
cellStyle.backgroundColor =
|
|
5790
|
+
cellStyle.backgroundColor = chunkNIWO2WYI_js.colorWithOpacity(cellFill, opacity);
|
|
5755
5791
|
} else {
|
|
5756
5792
|
const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
|
|
5757
5793
|
if (gradCss) {
|
|
@@ -5766,16 +5802,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
5766
5802
|
const edgeBorders = parseCellBorders(cellProperties);
|
|
5767
5803
|
Object.assign(cellStyle, edgeBorders);
|
|
5768
5804
|
if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
|
|
5769
|
-
const borderColor =
|
|
5805
|
+
const borderColor = chunkNIWO2WYI_js.parseDrawingColor(
|
|
5770
5806
|
cellProperties?.["a:lnL"]?.["a:solidFill"],
|
|
5771
5807
|
schemeColorOverrides
|
|
5772
|
-
) ||
|
|
5808
|
+
) || chunkNIWO2WYI_js.parseDrawingColor(
|
|
5773
5809
|
cellProperties?.["a:lnR"]?.["a:solidFill"],
|
|
5774
5810
|
schemeColorOverrides
|
|
5775
|
-
) ||
|
|
5811
|
+
) || chunkNIWO2WYI_js.parseDrawingColor(
|
|
5776
5812
|
cellProperties?.["a:lnT"]?.["a:solidFill"],
|
|
5777
5813
|
schemeColorOverrides
|
|
5778
|
-
) ||
|
|
5814
|
+
) || chunkNIWO2WYI_js.parseDrawingColor(
|
|
5779
5815
|
cellProperties?.["a:lnB"]?.["a:solidFill"],
|
|
5780
5816
|
schemeColorOverrides
|
|
5781
5817
|
);
|
|
@@ -5854,10 +5890,10 @@ function resolveTableStyleFillColor(fill, colorScheme) {
|
|
|
5854
5890
|
}
|
|
5855
5891
|
let color = base;
|
|
5856
5892
|
if (fill.tint !== void 0 && fill.tint > 0) {
|
|
5857
|
-
color =
|
|
5893
|
+
color = chunkNIWO2WYI_js.tintColor2(color, fill.tint / 1e5);
|
|
5858
5894
|
}
|
|
5859
5895
|
if (fill.shade !== void 0 && fill.shade > 0) {
|
|
5860
|
-
color =
|
|
5896
|
+
color = chunkNIWO2WYI_js.shadeColor2(color, 1 - fill.shade / 1e5);
|
|
5861
5897
|
}
|
|
5862
5898
|
return color;
|
|
5863
5899
|
}
|
|
@@ -5879,10 +5915,10 @@ function applyTableStyleText(text, colorScheme, style) {
|
|
|
5879
5915
|
if (base) {
|
|
5880
5916
|
let color = base;
|
|
5881
5917
|
if (text.fontTint !== void 0 && text.fontTint > 0) {
|
|
5882
|
-
color =
|
|
5918
|
+
color = chunkNIWO2WYI_js.tintColor2(color, text.fontTint / 1e5);
|
|
5883
5919
|
}
|
|
5884
5920
|
if (text.fontShade !== void 0 && text.fontShade > 0) {
|
|
5885
|
-
color =
|
|
5921
|
+
color = chunkNIWO2WYI_js.shadeColor2(color, 1 - text.fontShade / 1e5);
|
|
5886
5922
|
}
|
|
5887
5923
|
style.color = color;
|
|
5888
5924
|
applied = true;
|
|
@@ -6164,9 +6200,9 @@ function cellStyleToCss(style) {
|
|
|
6164
6200
|
if (style.gradientFillCss) {
|
|
6165
6201
|
css.background = style.gradientFillCss;
|
|
6166
6202
|
} else if (style.fillMode === "pattern" && style.patternFillPreset) {
|
|
6167
|
-
const fg =
|
|
6168
|
-
const bg =
|
|
6169
|
-
const svgPattern =
|
|
6203
|
+
const fg = chunkNIWO2WYI_js.normalizeHexColor(style.patternFillForeground, "#000000");
|
|
6204
|
+
const bg = chunkNIWO2WYI_js.normalizeHexColor(style.patternFillBackground, "#ffffff");
|
|
6205
|
+
const svgPattern = chunkNIWO2WYI_js.getPatternSvg(style.patternFillPreset, fg, bg);
|
|
6170
6206
|
if (svgPattern) {
|
|
6171
6207
|
const encoded = encodeURIComponent(svgPattern);
|
|
6172
6208
|
css.backgroundImage = `url("data:image/svg+xml,${encoded}")`;
|
|
@@ -6235,7 +6271,7 @@ function cellStyleToCss(style) {
|
|
|
6235
6271
|
if (edge.width || edge.color) {
|
|
6236
6272
|
const w = edge.width ?? 1;
|
|
6237
6273
|
const c = edge.color ?? style.borderColor ?? "#000000";
|
|
6238
|
-
const s =
|
|
6274
|
+
const s = chunkNIWO2WYI_js.ooxmlDashToCssBorderStyle(edge.dash);
|
|
6239
6275
|
css[edge.prefix] = `${w}px ${s} ${c}`;
|
|
6240
6276
|
}
|
|
6241
6277
|
}
|
|
@@ -6277,7 +6313,7 @@ function TableResizeOverlay({
|
|
|
6277
6313
|
const containerRef = React3.useRef(null);
|
|
6278
6314
|
const [rowBounds, setRowBounds] = React3.useState([]);
|
|
6279
6315
|
const dragRef = React3.useRef(null);
|
|
6280
|
-
const colBoundaries = React3.useMemo(() =>
|
|
6316
|
+
const colBoundaries = React3.useMemo(() => chunkNIWO2WYI_js.computeColumnBoundaries(columnWidths), [columnWidths]);
|
|
6281
6317
|
const measureRows = React3.useCallback(() => {
|
|
6282
6318
|
const container = containerRef.current;
|
|
6283
6319
|
if (!container) {
|
|
@@ -6324,11 +6360,11 @@ function TableResizeOverlay({
|
|
|
6324
6360
|
const rect = containerRef.current.getBoundingClientRect();
|
|
6325
6361
|
if (drag.type === "col" && drag.initialWidths && onResizeColumns) {
|
|
6326
6362
|
const deltaProp = (e.clientX - drag.startPos) / rect.width;
|
|
6327
|
-
onResizeColumns(
|
|
6363
|
+
onResizeColumns(chunkNIWO2WYI_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
|
|
6328
6364
|
} else if (drag.type === "row" && onResizeRow) {
|
|
6329
6365
|
const deltaY = e.clientY - drag.startPos;
|
|
6330
|
-
const newHeight =
|
|
6331
|
-
drag.initialRowHeight ??
|
|
6366
|
+
const newHeight = chunkNIWO2WYI_js.computeResizedRowHeight(
|
|
6367
|
+
drag.initialRowHeight ?? chunkNIWO2WYI_js.DEFAULT_ROW_HEIGHT,
|
|
6332
6368
|
deltaY
|
|
6333
6369
|
);
|
|
6334
6370
|
onResizeRow(drag.index, newHeight);
|
|
@@ -6366,7 +6402,7 @@ function TableResizeOverlay({
|
|
|
6366
6402
|
e.stopPropagation();
|
|
6367
6403
|
const table = containerRef.current?.querySelector("table");
|
|
6368
6404
|
const tr = table?.querySelectorAll("tbody > tr")[index];
|
|
6369
|
-
const actualHeight = tr?.offsetHeight ??
|
|
6405
|
+
const actualHeight = tr?.offsetHeight ?? chunkNIWO2WYI_js.DEFAULT_ROW_HEIGHT;
|
|
6370
6406
|
document.body.style.cursor = "row-resize";
|
|
6371
6407
|
document.body.style.userSelect = "none";
|
|
6372
6408
|
dragRef.current = {
|
|
@@ -6412,7 +6448,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
6412
6448
|
}
|
|
6413
6449
|
const first = selectedCell.selectedCells[0];
|
|
6414
6450
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
6415
|
-
return
|
|
6451
|
+
return chunkNIWO2WYI_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
|
|
6416
6452
|
})();
|
|
6417
6453
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6418
6454
|
TableResizeOverlay,
|
|
@@ -6445,7 +6481,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
6445
6481
|
return null;
|
|
6446
6482
|
}
|
|
6447
6483
|
const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
|
|
6448
|
-
const isInMultiSelection =
|
|
6484
|
+
const isInMultiSelection = chunkNIWO2WYI_js.isCellInRect(rowIndex, cellIndex, selectionRect);
|
|
6449
6485
|
const isCellEditing = isCellSelected && selectedCell?.isEditing;
|
|
6450
6486
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6451
6487
|
"td",
|
|
@@ -6468,7 +6504,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
6468
6504
|
}
|
|
6469
6505
|
event.stopPropagation();
|
|
6470
6506
|
if (event.shiftKey && selectedCell) {
|
|
6471
|
-
const rect =
|
|
6507
|
+
const rect = chunkNIWO2WYI_js.computeSelectionRect(
|
|
6472
6508
|
selectedCell.rowIndex,
|
|
6473
6509
|
selectedCell.columnIndex,
|
|
6474
6510
|
rowIndex,
|
|
@@ -6478,7 +6514,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
6478
6514
|
options?.onSelectCell?.({
|
|
6479
6515
|
rowIndex: selectedCell.rowIndex,
|
|
6480
6516
|
columnIndex: selectedCell.columnIndex,
|
|
6481
|
-
selectedCells:
|
|
6517
|
+
selectedCells: chunkNIWO2WYI_js.rectToCells(rect)
|
|
6482
6518
|
});
|
|
6483
6519
|
} else {
|
|
6484
6520
|
options?.onSelectCell?.({
|
|
@@ -6537,7 +6573,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
6537
6573
|
if (tableEl2.tableData && tableEl2.tableData.rows.length > 0) {
|
|
6538
6574
|
return renderTableFromTableData(tableEl2, textStyle, options);
|
|
6539
6575
|
}
|
|
6540
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children:
|
|
6576
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunk2EFVXYNA_js.translationsEn["pptx.table.title"] });
|
|
6541
6577
|
}
|
|
6542
6578
|
const selectedCell = options?.selectedCell || null;
|
|
6543
6579
|
const isEditable2 = Boolean(options?.editable);
|
|
@@ -6552,7 +6588,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
6552
6588
|
}
|
|
6553
6589
|
const first = selectedCell.selectedCells[0];
|
|
6554
6590
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
6555
|
-
return
|
|
6591
|
+
return chunkNIWO2WYI_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
|
|
6556
6592
|
})();
|
|
6557
6593
|
const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
|
|
6558
6594
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -6617,7 +6653,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
6617
6653
|
"border px-1 py-0.5 align-top",
|
|
6618
6654
|
isEditable2 && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
|
|
6619
6655
|
selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
|
|
6620
|
-
|
|
6656
|
+
chunkNIWO2WYI_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
|
|
6621
6657
|
),
|
|
6622
6658
|
colSpan,
|
|
6623
6659
|
rowSpan: rSpan,
|
|
@@ -6628,7 +6664,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
6628
6664
|
}
|
|
6629
6665
|
event.stopPropagation();
|
|
6630
6666
|
if (event.shiftKey && selectedCell && tableEl.tableData) {
|
|
6631
|
-
const rect =
|
|
6667
|
+
const rect = chunkNIWO2WYI_js.computeSelectionRect(
|
|
6632
6668
|
selectedCell.rowIndex,
|
|
6633
6669
|
selectedCell.columnIndex,
|
|
6634
6670
|
rowIndex,
|
|
@@ -6638,7 +6674,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
6638
6674
|
options?.onSelectCell?.({
|
|
6639
6675
|
rowIndex: selectedCell.rowIndex,
|
|
6640
6676
|
columnIndex: selectedCell.columnIndex,
|
|
6641
|
-
selectedCells:
|
|
6677
|
+
selectedCells: chunkNIWO2WYI_js.rectToCells(rect)
|
|
6642
6678
|
});
|
|
6643
6679
|
} else {
|
|
6644
6680
|
options?.onSelectCell?.({
|
|
@@ -6690,24 +6726,24 @@ function renderTableElement(element, textStyle, options) {
|
|
|
6690
6726
|
}
|
|
6691
6727
|
var LEGEND_ITEM_WIDTH = 80;
|
|
6692
6728
|
function partAttrs(part) {
|
|
6693
|
-
return part ?
|
|
6729
|
+
return part ? chunkNIWO2WYI_js.chartPartToAttrs(part) : void 0;
|
|
6694
6730
|
}
|
|
6695
6731
|
function resolveReactPalette(chartData) {
|
|
6696
6732
|
if (chartData.colorPalette && chartData.colorPalette.length > 0) {
|
|
6697
6733
|
return chartData.colorPalette;
|
|
6698
6734
|
}
|
|
6699
|
-
return [...
|
|
6735
|
+
return [...chunkNIWO2WYI_js.getChartStylePalette(chartData.style?.styleId)];
|
|
6700
6736
|
}
|
|
6701
6737
|
function buildReactChartViewModel(element) {
|
|
6702
6738
|
if (element.type !== "chart" || !element.chartData) {
|
|
6703
|
-
return
|
|
6739
|
+
return chunkNIWO2WYI_js.buildChartViewModel(element);
|
|
6704
6740
|
}
|
|
6705
6741
|
const palette = resolveReactPalette(element.chartData);
|
|
6706
6742
|
const themedElement = {
|
|
6707
6743
|
...element,
|
|
6708
6744
|
chartData: { ...element.chartData, colorPalette: palette }
|
|
6709
6745
|
};
|
|
6710
|
-
return
|
|
6746
|
+
return chunkNIWO2WYI_js.buildChartViewModel(themedElement);
|
|
6711
6747
|
}
|
|
6712
6748
|
function renderPrimitive(prim, key) {
|
|
6713
6749
|
switch (prim.kind) {
|
|
@@ -7096,7 +7132,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7096
7132
|
const unmatchedRows = [];
|
|
7097
7133
|
categories.forEach((cat, i) => {
|
|
7098
7134
|
const value = values[i] ?? 0;
|
|
7099
|
-
const code =
|
|
7135
|
+
const code = chunkNIWO2WYI_js.resolveRegionCode(cat);
|
|
7100
7136
|
if (code) {
|
|
7101
7137
|
regionValueMap.set(code, { value, label: cat });
|
|
7102
7138
|
} else {
|
|
@@ -7134,8 +7170,8 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7134
7170
|
let fill = "#e2e8f0";
|
|
7135
7171
|
let dataLabel = null;
|
|
7136
7172
|
if (entry) {
|
|
7137
|
-
const t =
|
|
7138
|
-
fill =
|
|
7173
|
+
const t = chunkNIWO2WYI_js.normalizeValue(entry.value, minVal, maxVal);
|
|
7174
|
+
fill = chunkNIWO2WYI_js.sequentialColorScale(t);
|
|
7139
7175
|
dataLabel = /* @__PURE__ */ jsxRuntime.jsx(
|
|
7140
7176
|
"text",
|
|
7141
7177
|
{
|
|
@@ -7146,7 +7182,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7146
7182
|
fontWeight: 600,
|
|
7147
7183
|
fill: "#1e293b",
|
|
7148
7184
|
style: { pointerEvents: "none" },
|
|
7149
|
-
children:
|
|
7185
|
+
children: chunkNIWO2WYI_js.formatAxisValue(entry.value)
|
|
7150
7186
|
},
|
|
7151
7187
|
`${element.id}-map-dl-${region.code}`
|
|
7152
7188
|
);
|
|
@@ -7164,7 +7200,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7164
7200
|
opacity: 0.9,
|
|
7165
7201
|
children: /* @__PURE__ */ jsxRuntime.jsxs("title", { children: [
|
|
7166
7202
|
region.name,
|
|
7167
|
-
entry ? `: ${
|
|
7203
|
+
entry ? `: ${chunkNIWO2WYI_js.formatAxisValue(entry.value)}` : ""
|
|
7168
7204
|
] })
|
|
7169
7205
|
}
|
|
7170
7206
|
),
|
|
@@ -7202,7 +7238,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7202
7238
|
fontSize: 7,
|
|
7203
7239
|
fill: "#64748b",
|
|
7204
7240
|
textAnchor: "middle",
|
|
7205
|
-
children:
|
|
7241
|
+
children: chunkNIWO2WYI_js.formatAxisValue(minVal)
|
|
7206
7242
|
},
|
|
7207
7243
|
`${element.id}-map-legend-min`
|
|
7208
7244
|
),
|
|
@@ -7214,7 +7250,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7214
7250
|
fontSize: 7,
|
|
7215
7251
|
fill: "#64748b",
|
|
7216
7252
|
textAnchor: "middle",
|
|
7217
|
-
children:
|
|
7253
|
+
children: chunkNIWO2WYI_js.formatAxisValue(maxVal)
|
|
7218
7254
|
},
|
|
7219
7255
|
`${element.id}-map-legend-max`
|
|
7220
7256
|
)
|
|
@@ -7233,7 +7269,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7233
7269
|
textAnchor: "middle",
|
|
7234
7270
|
fontSize: 7,
|
|
7235
7271
|
fill: "#94a3b8",
|
|
7236
|
-
children:
|
|
7272
|
+
children: chunk2EFVXYNA_js.translationsEn["pptx.chart.additionalRegionsFallback"]
|
|
7237
7273
|
},
|
|
7238
7274
|
`${element.id}-map-ft-hdr`
|
|
7239
7275
|
)
|
|
@@ -7280,7 +7316,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
7280
7316
|
y,
|
|
7281
7317
|
fontSize,
|
|
7282
7318
|
fill: "#475569",
|
|
7283
|
-
children:
|
|
7319
|
+
children: chunkNIWO2WYI_js.formatAxisValue(row.value)
|
|
7284
7320
|
},
|
|
7285
7321
|
`${element.id}-map-ft-val-${i}`
|
|
7286
7322
|
)
|
|
@@ -7351,7 +7387,7 @@ function renderStackedBarChart(element, _chartData, _categoryLabels) {
|
|
|
7351
7387
|
|
|
7352
7388
|
// src/viewer/utils/chart-overlay-utils.ts
|
|
7353
7389
|
function sColor(series, idx) {
|
|
7354
|
-
return
|
|
7390
|
+
return chunkNIWO2WYI_js.seriesColor(series, idx);
|
|
7355
7391
|
}
|
|
7356
7392
|
function valToY(val, range, topY, bottomY) {
|
|
7357
7393
|
const usable = bottomY - topY;
|
|
@@ -7846,7 +7882,7 @@ function renderLegend(id, style, series, layout, colorPalette) {
|
|
|
7846
7882
|
width: 10,
|
|
7847
7883
|
height: 10,
|
|
7848
7884
|
rx: 2,
|
|
7849
|
-
fill:
|
|
7885
|
+
fill: chunkNIWO2WYI_js.seriesColor(s, i, style?.styleId, colorPalette)
|
|
7850
7886
|
},
|
|
7851
7887
|
`${id}-leg-r-${i}`
|
|
7852
7888
|
)
|
|
@@ -7870,7 +7906,7 @@ function renderLegend(id, style, series, layout, colorPalette) {
|
|
|
7870
7906
|
width: 10,
|
|
7871
7907
|
height: 10,
|
|
7872
7908
|
rx: 2,
|
|
7873
|
-
fill:
|
|
7909
|
+
fill: chunkNIWO2WYI_js.seriesColor(s, i, style?.styleId, colorPalette)
|
|
7874
7910
|
}
|
|
7875
7911
|
),
|
|
7876
7912
|
/* @__PURE__ */ jsxRuntime.jsx("text", { x: x + 14, y: cy + 8, fontSize: 9, fill: "#475569", children: s.name || `Series ${i + 1}` })
|
|
@@ -7883,9 +7919,9 @@ function renderGridlines(id, style, range, layout) {
|
|
|
7883
7919
|
}
|
|
7884
7920
|
const lines = [];
|
|
7885
7921
|
if (range.logScale && range.logBase) {
|
|
7886
|
-
const ticks =
|
|
7922
|
+
const ticks = chunkNIWO2WYI_js.generateLogTicks(range);
|
|
7887
7923
|
ticks.forEach((tickVal, i) => {
|
|
7888
|
-
const y =
|
|
7924
|
+
const y = chunkNIWO2WYI_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
|
|
7889
7925
|
lines.push(
|
|
7890
7926
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7891
7927
|
"line",
|
|
@@ -7906,7 +7942,7 @@ function renderGridlines(id, style, range, layout) {
|
|
|
7906
7942
|
const steps = 4;
|
|
7907
7943
|
for (let i = 0; i <= steps; i++) {
|
|
7908
7944
|
const val = range.min + range.span * i / steps;
|
|
7909
|
-
const y =
|
|
7945
|
+
const y = chunkNIWO2WYI_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
7910
7946
|
lines.push(
|
|
7911
7947
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7912
7948
|
"line",
|
|
@@ -7930,9 +7966,9 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
7930
7966
|
const labels = [];
|
|
7931
7967
|
const hasDisplayUnits = Boolean(axisFormatting?.displayUnits);
|
|
7932
7968
|
if (range.logScale && range.logBase) {
|
|
7933
|
-
const ticks =
|
|
7969
|
+
const ticks = chunkNIWO2WYI_js.generateLogTicks(range);
|
|
7934
7970
|
ticks.forEach((tickVal, i) => {
|
|
7935
|
-
const y =
|
|
7971
|
+
const y = chunkNIWO2WYI_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
|
|
7936
7972
|
labels.push(
|
|
7937
7973
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7938
7974
|
"text",
|
|
@@ -7942,7 +7978,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
7942
7978
|
textAnchor: "end",
|
|
7943
7979
|
fontSize: 8,
|
|
7944
7980
|
fill: "#64748b",
|
|
7945
|
-
children: hasDisplayUnits ?
|
|
7981
|
+
children: hasDisplayUnits ? chunkNIWO2WYI_js.formatAxisValueWithUnits(tickVal, axisFormatting) : chunkNIWO2WYI_js.formatAxisValue(tickVal)
|
|
7946
7982
|
},
|
|
7947
7983
|
`${id}-vaxis-log-${i}`
|
|
7948
7984
|
)
|
|
@@ -7952,7 +7988,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
7952
7988
|
const steps = 4;
|
|
7953
7989
|
for (let i = 0; i <= steps; i++) {
|
|
7954
7990
|
const val = range.min + range.span * i / steps;
|
|
7955
|
-
const y =
|
|
7991
|
+
const y = chunkNIWO2WYI_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
7956
7992
|
labels.push(
|
|
7957
7993
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7958
7994
|
"text",
|
|
@@ -7962,7 +7998,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
7962
7998
|
textAnchor: "end",
|
|
7963
7999
|
fontSize: 8,
|
|
7964
8000
|
fill: "#64748b",
|
|
7965
|
-
children: hasDisplayUnits ?
|
|
8001
|
+
children: hasDisplayUnits ? chunkNIWO2WYI_js.formatAxisValueWithUnits(val, axisFormatting) : chunkNIWO2WYI_js.formatAxisValue(val)
|
|
7966
8002
|
},
|
|
7967
8003
|
`${id}-vaxis-${i}`
|
|
7968
8004
|
)
|
|
@@ -7970,7 +8006,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
7970
8006
|
}
|
|
7971
8007
|
}
|
|
7972
8008
|
if (hasDisplayUnits) {
|
|
7973
|
-
const unitLabel =
|
|
8009
|
+
const unitLabel = chunkNIWO2WYI_js.getDisplayUnitLabel(
|
|
7974
8010
|
axisFormatting.displayUnits,
|
|
7975
8011
|
axisFormatting.displayUnitsLabel
|
|
7976
8012
|
);
|
|
@@ -8045,7 +8081,7 @@ function renderZeroLine(id, range, layout) {
|
|
|
8045
8081
|
if (range.min >= 0) {
|
|
8046
8082
|
return null;
|
|
8047
8083
|
}
|
|
8048
|
-
const y =
|
|
8084
|
+
const y = chunkNIWO2WYI_js.valueToY(0, range, layout.plotTop, layout.plotBottom);
|
|
8049
8085
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
8050
8086
|
"line",
|
|
8051
8087
|
{
|
|
@@ -8069,7 +8105,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
8069
8105
|
const hasDisplayUnits = Boolean(axisFormatting?.displayUnits);
|
|
8070
8106
|
for (let i = 0; i <= steps; i++) {
|
|
8071
8107
|
const val = range.min + range.span * i / steps;
|
|
8072
|
-
const y =
|
|
8108
|
+
const y = chunkNIWO2WYI_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
8073
8109
|
labels.push(
|
|
8074
8110
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8075
8111
|
"text",
|
|
@@ -8081,7 +8117,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
8081
8117
|
fontFamily,
|
|
8082
8118
|
fontWeight,
|
|
8083
8119
|
fill: fontColor,
|
|
8084
|
-
children: hasDisplayUnits ?
|
|
8120
|
+
children: hasDisplayUnits ? chunkNIWO2WYI_js.formatAxisValueWithUnits(val, axisFormatting) : chunkNIWO2WYI_js.formatAxisValue(val)
|
|
8085
8121
|
},
|
|
8086
8122
|
`${id}-sec-vaxis-${i}`
|
|
8087
8123
|
)
|
|
@@ -8105,7 +8141,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
8105
8141
|
);
|
|
8106
8142
|
}
|
|
8107
8143
|
if (hasDisplayUnits) {
|
|
8108
|
-
const unitLabel =
|
|
8144
|
+
const unitLabel = chunkNIWO2WYI_js.getDisplayUnitLabel(
|
|
8109
8145
|
axisFormatting.displayUnits,
|
|
8110
8146
|
axisFormatting.displayUnitsLabel
|
|
8111
8147
|
);
|
|
@@ -8136,7 +8172,7 @@ function renderSecondaryAxisTicks(id, range, layout) {
|
|
|
8136
8172
|
const ticks = [];
|
|
8137
8173
|
for (let i = 0; i <= steps; i++) {
|
|
8138
8174
|
const val = range.min + range.span * i / steps;
|
|
8139
|
-
const y =
|
|
8175
|
+
const y = chunkNIWO2WYI_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
8140
8176
|
ticks.push(
|
|
8141
8177
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8142
8178
|
"line",
|
|
@@ -8163,7 +8199,7 @@ function renderSecondaryGridlines(id, range, layout, axisFormatting) {
|
|
|
8163
8199
|
const gridColor = axisFormatting.majorGridlinesSpPr?.strokeColor ?? "#e2e8f0";
|
|
8164
8200
|
for (let i = 0; i <= steps; i++) {
|
|
8165
8201
|
const val = range.min + range.span * i / steps;
|
|
8166
|
-
const y =
|
|
8202
|
+
const y = chunkNIWO2WYI_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
8167
8203
|
lines.push(
|
|
8168
8204
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8169
8205
|
"line",
|
|
@@ -8280,7 +8316,7 @@ function renderChartDataTable(elementId, chartData, svgWidth) {
|
|
|
8280
8316
|
showK && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8281
8317
|
"th",
|
|
8282
8318
|
{
|
|
8283
|
-
"aria-label":
|
|
8319
|
+
"aria-label": chunk2EFVXYNA_js.translationsEn["pptx.chart.rowLabelsAria"],
|
|
8284
8320
|
style: {
|
|
8285
8321
|
padding: "1px 4px",
|
|
8286
8322
|
fontWeight: 400,
|
|
@@ -8324,7 +8360,7 @@ function renderChartDataTable(elementId, chartData, svgWidth) {
|
|
|
8324
8360
|
width: 8,
|
|
8325
8361
|
height: 8,
|
|
8326
8362
|
borderRadius: 2,
|
|
8327
|
-
backgroundColor:
|
|
8363
|
+
backgroundColor: chunkNIWO2WYI_js.seriesColor(
|
|
8328
8364
|
s,
|
|
8329
8365
|
si,
|
|
8330
8366
|
chartData.style?.styleId,
|
|
@@ -8363,8 +8399,8 @@ function renderChartDataTable(elementId, chartData, svgWidth) {
|
|
|
8363
8399
|
function renderStockChart(element, chartData, categoryLabels) {
|
|
8364
8400
|
const style = chartData.style;
|
|
8365
8401
|
const legendPos = style?.legendPosition || "b";
|
|
8366
|
-
const range =
|
|
8367
|
-
const layout =
|
|
8402
|
+
const range = chunkNIWO2WYI_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
8403
|
+
const layout = chunkNIWO2WYI_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
8368
8404
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
8369
8405
|
const barGroupWidth = layout.plotWidth / catCount;
|
|
8370
8406
|
const candleWidth = barGroupWidth * 0.5;
|
|
@@ -8385,10 +8421,10 @@ function renderStockChart(element, chartData, categoryLabels) {
|
|
|
8385
8421
|
const close = closeSeries.values[ci] ?? high;
|
|
8386
8422
|
const isUp = close >= open;
|
|
8387
8423
|
const cx = layout.plotLeft + barGroupWidth * ci + barGroupWidth / 2;
|
|
8388
|
-
const highY =
|
|
8389
|
-
const lowY =
|
|
8390
|
-
const openY =
|
|
8391
|
-
const closeY =
|
|
8424
|
+
const highY = chunkNIWO2WYI_js.valueToY(high, range, layout.plotTop, layout.plotBottom);
|
|
8425
|
+
const lowY = chunkNIWO2WYI_js.valueToY(low, range, layout.plotTop, layout.plotBottom);
|
|
8426
|
+
const openY = chunkNIWO2WYI_js.valueToY(open, range, layout.plotTop, layout.plotBottom);
|
|
8427
|
+
const closeY = chunkNIWO2WYI_js.valueToY(close, range, layout.plotTop, layout.plotBottom);
|
|
8392
8428
|
elements.push(
|
|
8393
8429
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8394
8430
|
"line",
|
|
@@ -8431,7 +8467,7 @@ function renderStockChart(element, chartData, categoryLabels) {
|
|
|
8431
8467
|
textAnchor: "middle",
|
|
8432
8468
|
fontSize: 7,
|
|
8433
8469
|
fill: "#334155",
|
|
8434
|
-
children:
|
|
8470
|
+
children: chunkNIWO2WYI_js.formatAxisValue(close)
|
|
8435
8471
|
},
|
|
8436
8472
|
`${element.id}-stock-dl-${ci}`
|
|
8437
8473
|
)
|
|
@@ -8473,7 +8509,7 @@ function FailedToLoad() {
|
|
|
8473
8509
|
var LazySurfaceChart3DScene = React3__default.default.lazy(
|
|
8474
8510
|
async () => {
|
|
8475
8511
|
try {
|
|
8476
|
-
return await import('./SurfaceChart3DScene-
|
|
8512
|
+
return await import('./SurfaceChart3DScene-PJ36HRGC.js');
|
|
8477
8513
|
} catch {
|
|
8478
8514
|
return { default: FailedToLoad };
|
|
8479
8515
|
}
|
|
@@ -8497,7 +8533,7 @@ var SurfaceChart3DErrorBoundary = class extends React3__default.default.Componen
|
|
|
8497
8533
|
function buildSurfaceData(chartData, categoryLabels) {
|
|
8498
8534
|
const rows = chartData.series.length;
|
|
8499
8535
|
const cols = Math.max(categoryLabels.length, 1);
|
|
8500
|
-
const range =
|
|
8536
|
+
const range = chunkNIWO2WYI_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
8501
8537
|
const heightMap = new Float32Array(rows * cols);
|
|
8502
8538
|
const colorMap = new Float32Array(rows * cols * 3);
|
|
8503
8539
|
for (let r = 0; r < rows; r++) {
|
|
@@ -8617,8 +8653,8 @@ function darkenRgb(r, g, b, factor) {
|
|
|
8617
8653
|
function renderIsometricSurfaceChart(element, chartData, categoryLabels) {
|
|
8618
8654
|
const style = chartData.style;
|
|
8619
8655
|
const legendPos = style?.legendPosition || "b";
|
|
8620
|
-
const layout =
|
|
8621
|
-
const range =
|
|
8656
|
+
const layout = chunkNIWO2WYI_js.computeLayout(element.width, element.height, style, false, legendPos);
|
|
8657
|
+
const range = chunkNIWO2WYI_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
8622
8658
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
8623
8659
|
const seriesCount = chartData.series.length;
|
|
8624
8660
|
const cols = catCount - 1;
|
|
@@ -8708,8 +8744,8 @@ function renderIsometricSurfaceChart(element, chartData, categoryLabels) {
|
|
|
8708
8744
|
function renderFlatSurfaceChart(element, chartData, categoryLabels) {
|
|
8709
8745
|
const style = chartData.style;
|
|
8710
8746
|
const legendPos = style?.legendPosition || "b";
|
|
8711
|
-
const layout =
|
|
8712
|
-
const range =
|
|
8747
|
+
const layout = chunkNIWO2WYI_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
8748
|
+
const range = chunkNIWO2WYI_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
8713
8749
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
8714
8750
|
const seriesCount = chartData.series.length;
|
|
8715
8751
|
const cellW = layout.plotWidth / Math.max(catCount - 1, 1);
|
|
@@ -8772,7 +8808,7 @@ function renderSurfaceChart(element, chartData, categoryLabels) {
|
|
|
8772
8808
|
function renderTreemapChart(element, chartData, categoryLabels) {
|
|
8773
8809
|
const style = chartData.style;
|
|
8774
8810
|
const legendPos = style?.legendPosition || "b";
|
|
8775
|
-
const layout =
|
|
8811
|
+
const layout = chunkNIWO2WYI_js.computeLayout(element.width, element.height, style, false, legendPos);
|
|
8776
8812
|
const allValues = chartData.series.flatMap((s) => s.values);
|
|
8777
8813
|
const totalAbs = allValues.reduce((sum, v) => sum + Math.abs(v), 0) || 1;
|
|
8778
8814
|
const rects = [];
|
|
@@ -8795,7 +8831,7 @@ function renderTreemapChart(element, chartData, categoryLabels) {
|
|
|
8795
8831
|
y: curY,
|
|
8796
8832
|
width: Math.max(w - 1, 1),
|
|
8797
8833
|
height: Math.max(h - 1, 1),
|
|
8798
|
-
fill:
|
|
8834
|
+
fill: chunkNIWO2WYI_js.paletteColor(item.index, chartData.style?.styleId, chartData.colorPalette),
|
|
8799
8835
|
rx: 2,
|
|
8800
8836
|
opacity: 0.85
|
|
8801
8837
|
},
|
|
@@ -8848,8 +8884,8 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
8848
8884
|
const style = chartData.style;
|
|
8849
8885
|
const legendPos = style?.legendPosition || "b";
|
|
8850
8886
|
const values = chartData.series[0]?.values ?? [];
|
|
8851
|
-
const range =
|
|
8852
|
-
const layout =
|
|
8887
|
+
const range = chunkNIWO2WYI_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
8888
|
+
const layout = chunkNIWO2WYI_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
8853
8889
|
const catCount = Math.max(categoryLabels.length, values.length, 1);
|
|
8854
8890
|
const barWidth = layout.plotWidth / catCount * 0.6;
|
|
8855
8891
|
const gap = layout.plotWidth / catCount * 0.2;
|
|
@@ -8860,8 +8896,8 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
8860
8896
|
const isLast = i === values.length - 1;
|
|
8861
8897
|
const startVal = isLast ? 0 : runningTotal;
|
|
8862
8898
|
const endVal = isLast ? runningTotal + val : runningTotal + val;
|
|
8863
|
-
const barStartY =
|
|
8864
|
-
const barEndY =
|
|
8899
|
+
const barStartY = chunkNIWO2WYI_js.valueToY(startVal, range, layout.plotTop, layout.plotBottom);
|
|
8900
|
+
const barEndY = chunkNIWO2WYI_js.valueToY(endVal, range, layout.plotTop, layout.plotBottom);
|
|
8865
8901
|
const x = layout.plotLeft + layout.plotWidth / catCount * i + gap;
|
|
8866
8902
|
const y = Math.min(barStartY, barEndY);
|
|
8867
8903
|
const h = Math.max(Math.abs(barEndY - barStartY), 1);
|
|
@@ -8890,7 +8926,7 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
8890
8926
|
textAnchor: "middle",
|
|
8891
8927
|
fontSize: 7,
|
|
8892
8928
|
fill: "#334155",
|
|
8893
|
-
children:
|
|
8929
|
+
children: chunkNIWO2WYI_js.formatAxisValue(isLast ? endVal : val)
|
|
8894
8930
|
},
|
|
8895
8931
|
`${element.id}-wf-dl-${i}`
|
|
8896
8932
|
)
|
|
@@ -8938,18 +8974,18 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
8938
8974
|
function renderComboChart(element, chartData, categoryLabels) {
|
|
8939
8975
|
const style = chartData.style;
|
|
8940
8976
|
const legendPos = style?.legendPosition || "b";
|
|
8941
|
-
const layoutOpts =
|
|
8977
|
+
const layoutOpts = chunkNIWO2WYI_js.computeLayoutOptions(
|
|
8942
8978
|
chartData.axes,
|
|
8943
8979
|
chartData.dataTable,
|
|
8944
8980
|
chartData.series.length
|
|
8945
8981
|
);
|
|
8946
|
-
const layout =
|
|
8947
|
-
const { primary, secondary } =
|
|
8982
|
+
const layout = chunkNIWO2WYI_js.computeLayout(element.width, element.height, style, true, legendPos, layoutOpts);
|
|
8983
|
+
const { primary, secondary } = chunkNIWO2WYI_js.splitSeriesByAxis(chartData.series, chartData.axes);
|
|
8948
8984
|
const primarySeries = primary.length > 0 ? primary.map((e) => e.series) : chartData.series;
|
|
8949
8985
|
const secondarySeries = secondary.map((e) => e.series);
|
|
8950
|
-
const range =
|
|
8951
|
-
const secondaryRange = secondarySeries.length > 0 ?
|
|
8952
|
-
const secondaryAxisFmt =
|
|
8986
|
+
const range = chunkNIWO2WYI_js.computeValueRangeForChart(primarySeries, chartData.axes);
|
|
8987
|
+
const secondaryRange = secondarySeries.length > 0 ? chunkNIWO2WYI_js.computeValueRange(secondarySeries) : void 0;
|
|
8988
|
+
const secondaryAxisFmt = chunkNIWO2WYI_js.getSecondaryValueAxis(chartData.axes);
|
|
8953
8989
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
8954
8990
|
const barSeriesCount = 1;
|
|
8955
8991
|
const barGroupWidth = layout.plotWidth / catCount;
|
|
@@ -8965,8 +9001,8 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
8965
9001
|
const barRange = isBarSecondary && secondaryRange ? secondaryRange : range;
|
|
8966
9002
|
barSeries.values.forEach((val, vi) => {
|
|
8967
9003
|
const x = layout.plotLeft + barGroupWidth * vi + barOffset;
|
|
8968
|
-
const zeroY =
|
|
8969
|
-
const valY =
|
|
9004
|
+
const zeroY = chunkNIWO2WYI_js.valueToY(0, barRange, layout.plotTop, layout.plotBottom);
|
|
9005
|
+
const valY = chunkNIWO2WYI_js.valueToY(val, barRange, layout.plotTop, layout.plotBottom);
|
|
8970
9006
|
const y = Math.min(zeroY, valY);
|
|
8971
9007
|
const h = Math.max(Math.abs(zeroY - valY), 1);
|
|
8972
9008
|
barElements.push(
|
|
@@ -8977,7 +9013,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
8977
9013
|
y,
|
|
8978
9014
|
width: barWidth,
|
|
8979
9015
|
height: h,
|
|
8980
|
-
fill:
|
|
9016
|
+
fill: chunkNIWO2WYI_js.seriesColor(barSeries, 0, chartData.style?.styleId, chartData.colorPalette),
|
|
8981
9017
|
rx: 1
|
|
8982
9018
|
},
|
|
8983
9019
|
`${element.id}-combo-bar-${vi}`
|
|
@@ -8993,7 +9029,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
8993
9029
|
textAnchor: "middle",
|
|
8994
9030
|
fontSize: 7,
|
|
8995
9031
|
fill: "#334155",
|
|
8996
|
-
children:
|
|
9032
|
+
children: chunkNIWO2WYI_js.formatAxisValue(val)
|
|
8997
9033
|
},
|
|
8998
9034
|
`${element.id}-combo-bar-dl-${vi}`
|
|
8999
9035
|
)
|
|
@@ -9010,10 +9046,10 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
9010
9046
|
const activeRange = isSecondary && secondaryRange ? secondaryRange : range;
|
|
9011
9047
|
const points = series.values.map((val, vi) => {
|
|
9012
9048
|
const x = layout.plotLeft + barGroupWidth * vi + barGroupWidth / 2;
|
|
9013
|
-
const y =
|
|
9049
|
+
const y = chunkNIWO2WYI_js.valueToY(val, activeRange, layout.plotTop, layout.plotBottom);
|
|
9014
9050
|
return { x, y, val };
|
|
9015
9051
|
});
|
|
9016
|
-
const c =
|
|
9052
|
+
const c = chunkNIWO2WYI_js.seriesColor(series, seriesIdx, chartData.style?.styleId, chartData.colorPalette);
|
|
9017
9053
|
lineElements.push(
|
|
9018
9054
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9019
9055
|
"polyline",
|
|
@@ -9040,7 +9076,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
9040
9076
|
textAnchor: "middle",
|
|
9041
9077
|
fontSize: 7,
|
|
9042
9078
|
fill: "#334155",
|
|
9043
|
-
children:
|
|
9079
|
+
children: chunkNIWO2WYI_js.formatAxisValue(p.val)
|
|
9044
9080
|
},
|
|
9045
9081
|
`${element.id}-combo-line-dl-${si}-${vi}`
|
|
9046
9082
|
)
|
|
@@ -9078,11 +9114,11 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
9078
9114
|
}
|
|
9079
9115
|
function renderChartElement(element) {
|
|
9080
9116
|
if (element.type !== "chart") {
|
|
9081
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children:
|
|
9117
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunk2EFVXYNA_js.translationsEn["pptx.chart.heading"] });
|
|
9082
9118
|
}
|
|
9083
9119
|
const chartData = element.chartData;
|
|
9084
9120
|
if (!chartData || chartData.series.length === 0) {
|
|
9085
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children:
|
|
9121
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunk2EFVXYNA_js.translationsEn["pptx.chart.heading"] });
|
|
9086
9122
|
}
|
|
9087
9123
|
const longestSeriesLength = chartData.series.reduce(
|
|
9088
9124
|
(maxLength, series) => Math.max(maxLength, series.values.length),
|
|
@@ -10599,7 +10635,7 @@ function PresentationMediaController({
|
|
|
10599
10635
|
}
|
|
10600
10636
|
function renderMediaElement(element, mediaDataUrls, options) {
|
|
10601
10637
|
if (element.type !== "media") {
|
|
10602
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children:
|
|
10638
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunk2EFVXYNA_js.translationsEn["pptx.media.title"] });
|
|
10603
10639
|
}
|
|
10604
10640
|
const mediaType = element.mediaType;
|
|
10605
10641
|
const mediaPath = element.mediaPath;
|
|
@@ -10629,7 +10665,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
|
|
|
10629
10665
|
"img",
|
|
10630
10666
|
{
|
|
10631
10667
|
src: posterUrl,
|
|
10632
|
-
alt:
|
|
10668
|
+
alt: chunk2EFVXYNA_js.translationsEn["pptx.media.posterAlt"],
|
|
10633
10669
|
className: "w-full h-full object-contain opacity-50"
|
|
10634
10670
|
}
|
|
10635
10671
|
),
|
|
@@ -10650,7 +10686,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
|
|
|
10650
10686
|
]
|
|
10651
10687
|
}
|
|
10652
10688
|
),
|
|
10653
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children:
|
|
10689
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: chunk2EFVXYNA_js.translationsEn["pptx.media.notFound"] })
|
|
10654
10690
|
] })
|
|
10655
10691
|
] });
|
|
10656
10692
|
}
|
|
@@ -10691,7 +10727,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
|
|
|
10691
10727
|
"img",
|
|
10692
10728
|
{
|
|
10693
10729
|
src: posterUrl,
|
|
10694
|
-
alt:
|
|
10730
|
+
alt: chunk2EFVXYNA_js.translationsEn["pptx.media.videoPosterAlt"],
|
|
10695
10731
|
className: "w-full h-full object-contain"
|
|
10696
10732
|
}
|
|
10697
10733
|
),
|
|
@@ -10794,14 +10830,14 @@ function buildNotesPdf(pages) {
|
|
|
10794
10830
|
notes: page.notes,
|
|
10795
10831
|
slideNumber: page.slideNumber
|
|
10796
10832
|
}));
|
|
10797
|
-
const bytes =
|
|
10833
|
+
const bytes = chunkNIWO2WYI_js.buildNotesPdfBytes(images, meta);
|
|
10798
10834
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
10799
10835
|
return URL.createObjectURL(blob);
|
|
10800
10836
|
}
|
|
10801
10837
|
|
|
10802
10838
|
// src/viewer/utils/pdf-builder-slides.ts
|
|
10803
10839
|
function buildPdfFromImageData(images) {
|
|
10804
|
-
const bytes =
|
|
10840
|
+
const bytes = chunkNIWO2WYI_js.buildSlidesPdfBytes(images);
|
|
10805
10841
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
10806
10842
|
return URL.createObjectURL(blob);
|
|
10807
10843
|
}
|
|
@@ -10810,7 +10846,7 @@ function buildPdfFromImageData(images) {
|
|
|
10810
10846
|
var activePreview = null;
|
|
10811
10847
|
function startPreviewAnimation(elementId, preset, options) {
|
|
10812
10848
|
stopPreviewAnimation();
|
|
10813
|
-
const descriptor =
|
|
10849
|
+
const descriptor = chunkNIWO2WYI_js.buildPreviewAnimation(preset, options);
|
|
10814
10850
|
if (!descriptor) {
|
|
10815
10851
|
return;
|
|
10816
10852
|
}
|
|
@@ -10888,7 +10924,7 @@ function useElementOperations(input) {
|
|
|
10888
10924
|
}, [applySelection, setInlineEditingElementId, setContextMenuState]);
|
|
10889
10925
|
const updateElementById = React3.useCallback(
|
|
10890
10926
|
(elementId, updates) => {
|
|
10891
|
-
if (
|
|
10927
|
+
if (chunkNIWO2WYI_js.isTemplateElementId(elementId)) {
|
|
10892
10928
|
const slideId = activeSlide?.id;
|
|
10893
10929
|
if (slideId) {
|
|
10894
10930
|
setTemplateElementsBySlideId((prev) => ({
|
|
@@ -10928,7 +10964,7 @@ function useElementOperations(input) {
|
|
|
10928
10964
|
);
|
|
10929
10965
|
const updateSelectedShapeStyle = React3.useCallback(
|
|
10930
10966
|
(updates) => {
|
|
10931
|
-
if (!selectedElement || !
|
|
10967
|
+
if (!selectedElement || !chunkCYZLRYJV_js.hasShapeProperties(selectedElement)) {
|
|
10932
10968
|
return;
|
|
10933
10969
|
}
|
|
10934
10970
|
updateSelectedElement({
|
|
@@ -10939,17 +10975,17 @@ function useElementOperations(input) {
|
|
|
10939
10975
|
);
|
|
10940
10976
|
const updateSelectedTextStyle = React3.useCallback(
|
|
10941
10977
|
(updates) => {
|
|
10942
|
-
if (!selectedElement || !
|
|
10978
|
+
if (!selectedElement || !chunkCYZLRYJV_js.hasTextProperties(selectedElement)) {
|
|
10943
10979
|
return;
|
|
10944
10980
|
}
|
|
10945
|
-
const inlineSel =
|
|
10981
|
+
const inlineSel = chunkNIWO2WYI_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
10946
10982
|
if (inlineSel && selectedElement.textSegments) {
|
|
10947
|
-
const { newSegments: newSegments2, newSelection } =
|
|
10983
|
+
const { newSegments: newSegments2, newSelection } = chunkNIWO2WYI_js.applyStyleToSelectedSegments(
|
|
10948
10984
|
selectedElement.textSegments,
|
|
10949
10985
|
inlineSel,
|
|
10950
10986
|
updates
|
|
10951
10987
|
);
|
|
10952
|
-
|
|
10988
|
+
chunkNIWO2WYI_js.setPendingSelectionRestore(newSelection);
|
|
10953
10989
|
updateSelectedElement({
|
|
10954
10990
|
textSegments: newSegments2
|
|
10955
10991
|
});
|
|
@@ -10969,12 +11005,12 @@ function useElementOperations(input) {
|
|
|
10969
11005
|
);
|
|
10970
11006
|
const updateSelectedTextCase = React3.useCallback(
|
|
10971
11007
|
(mode) => {
|
|
10972
|
-
if (!selectedElement || !
|
|
11008
|
+
if (!selectedElement || !chunkCYZLRYJV_js.hasTextProperties(selectedElement)) {
|
|
10973
11009
|
return;
|
|
10974
11010
|
}
|
|
10975
|
-
const inlineSel =
|
|
11011
|
+
const inlineSel = chunkNIWO2WYI_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
10976
11012
|
if (inlineSel && selectedElement.textSegments) {
|
|
10977
|
-
const newSegments =
|
|
11013
|
+
const newSegments = chunkNIWO2WYI_js.applyCaseTransformToSegments(
|
|
10978
11014
|
selectedElement.textSegments,
|
|
10979
11015
|
inlineSel,
|
|
10980
11016
|
mode
|
|
@@ -10984,14 +11020,14 @@ function useElementOperations(input) {
|
|
|
10984
11020
|
}
|
|
10985
11021
|
const updates = {};
|
|
10986
11022
|
if (selectedElement.textSegments && selectedElement.textSegments.length > 0) {
|
|
10987
|
-
updates.textSegments =
|
|
11023
|
+
updates.textSegments = chunkNIWO2WYI_js.applyCaseTransformToSegments(
|
|
10988
11024
|
selectedElement.textSegments,
|
|
10989
11025
|
null,
|
|
10990
11026
|
mode
|
|
10991
11027
|
);
|
|
10992
11028
|
}
|
|
10993
11029
|
if (typeof selectedElement.text === "string") {
|
|
10994
|
-
updates.text =
|
|
11030
|
+
updates.text = chunkNIWO2WYI_js.transformTextCase(selectedElement.text, mode);
|
|
10995
11031
|
}
|
|
10996
11032
|
updateSelectedElement(updates);
|
|
10997
11033
|
},
|
|
@@ -11046,7 +11082,7 @@ function useSectionOperations(input) {
|
|
|
11046
11082
|
const { sections, setSections, slides, setSlides, markDirty } = input;
|
|
11047
11083
|
const addSection2 = React3.useCallback(
|
|
11048
11084
|
(name, afterSlideIndex) => {
|
|
11049
|
-
const result =
|
|
11085
|
+
const result = chunkNIWO2WYI_js.addSection(sections, slides, name, afterSlideIndex);
|
|
11050
11086
|
setSlides(result.slides);
|
|
11051
11087
|
setSections(result.sections);
|
|
11052
11088
|
markDirty();
|
|
@@ -11055,7 +11091,7 @@ function useSectionOperations(input) {
|
|
|
11055
11091
|
);
|
|
11056
11092
|
const renameSection2 = React3.useCallback(
|
|
11057
11093
|
(sectionId, newName) => {
|
|
11058
|
-
const result =
|
|
11094
|
+
const result = chunkNIWO2WYI_js.renameSection(sections, slides, sectionId, newName);
|
|
11059
11095
|
setSections(result.sections);
|
|
11060
11096
|
setSlides(result.slides);
|
|
11061
11097
|
markDirty();
|
|
@@ -11064,7 +11100,7 @@ function useSectionOperations(input) {
|
|
|
11064
11100
|
);
|
|
11065
11101
|
const deleteSection2 = React3.useCallback(
|
|
11066
11102
|
(sectionId) => {
|
|
11067
|
-
const result =
|
|
11103
|
+
const result = chunkNIWO2WYI_js.deleteSection(sections, slides, sectionId);
|
|
11068
11104
|
setSections(result.sections);
|
|
11069
11105
|
setSlides(result.slides);
|
|
11070
11106
|
markDirty();
|
|
@@ -11073,21 +11109,21 @@ function useSectionOperations(input) {
|
|
|
11073
11109
|
);
|
|
11074
11110
|
const moveSectionUp2 = React3.useCallback(
|
|
11075
11111
|
(sectionId) => {
|
|
11076
|
-
setSections(
|
|
11112
|
+
setSections(chunkNIWO2WYI_js.moveSectionUp(sections, sectionId));
|
|
11077
11113
|
markDirty();
|
|
11078
11114
|
},
|
|
11079
11115
|
[sections, setSections, markDirty]
|
|
11080
11116
|
);
|
|
11081
11117
|
const moveSectionDown2 = React3.useCallback(
|
|
11082
11118
|
(sectionId) => {
|
|
11083
|
-
setSections(
|
|
11119
|
+
setSections(chunkNIWO2WYI_js.moveSectionDown(sections, sectionId));
|
|
11084
11120
|
markDirty();
|
|
11085
11121
|
},
|
|
11086
11122
|
[sections, setSections, markDirty]
|
|
11087
11123
|
);
|
|
11088
11124
|
const moveSlidesToSection2 = React3.useCallback(
|
|
11089
11125
|
(slideIndexes, targetSectionId) => {
|
|
11090
|
-
const result =
|
|
11126
|
+
const result = chunkNIWO2WYI_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
|
|
11091
11127
|
setSlides(result.slides);
|
|
11092
11128
|
setSections(result.sections);
|
|
11093
11129
|
markDirty();
|
|
@@ -11106,7 +11142,7 @@ function useSectionOperations(input) {
|
|
|
11106
11142
|
|
|
11107
11143
|
// src/viewer/hooks/pointer-move-handlers.ts
|
|
11108
11144
|
function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
|
|
11109
|
-
const resized =
|
|
11145
|
+
const resized = chunkNIWO2WYI_js.applyResize(
|
|
11110
11146
|
{ x: startX, y: startY, width: startWidth, height: startHeight },
|
|
11111
11147
|
handle,
|
|
11112
11148
|
dx,
|
|
@@ -11118,7 +11154,7 @@ function computeResizeGeometry(handle, startX, startY, startWidth, startHeight,
|
|
|
11118
11154
|
if (!snapToGrid) {
|
|
11119
11155
|
return box;
|
|
11120
11156
|
}
|
|
11121
|
-
return
|
|
11157
|
+
return chunkNIWO2WYI_js.snapBoxToGrid(box, handle, gridSpacingPx, MIN_ELEMENT_SIZE);
|
|
11122
11158
|
}
|
|
11123
11159
|
function computeAdjustmentValue(startAdjustment, dx, startWidth) {
|
|
11124
11160
|
const range = startWidth || 200;
|
|
@@ -11228,7 +11264,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
11228
11264
|
width: el.width,
|
|
11229
11265
|
height: el.height
|
|
11230
11266
|
}));
|
|
11231
|
-
const snapResult =
|
|
11267
|
+
const snapResult = chunkNIWO2WYI_js.computeSnapToShape(
|
|
11232
11268
|
targetX,
|
|
11233
11269
|
targetY,
|
|
11234
11270
|
primaryEl.width,
|
|
@@ -11371,13 +11407,13 @@ function processPointerUp(input) {
|
|
|
11371
11407
|
if (i !== activeSlideIndex) {
|
|
11372
11408
|
return s;
|
|
11373
11409
|
}
|
|
11374
|
-
const rerouted =
|
|
11410
|
+
const rerouted = chunkNIWO2WYI_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
|
|
11375
11411
|
if (rerouted.length === 0) {
|
|
11376
11412
|
return s;
|
|
11377
11413
|
}
|
|
11378
11414
|
return {
|
|
11379
11415
|
...s,
|
|
11380
|
-
elements:
|
|
11416
|
+
elements: chunkNIWO2WYI_js.applyReroutedConnectors(s.elements, rerouted)
|
|
11381
11417
|
};
|
|
11382
11418
|
})
|
|
11383
11419
|
);
|
|
@@ -11396,9 +11432,9 @@ function processPointerUp(input) {
|
|
|
11396
11432
|
}
|
|
11397
11433
|
function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
|
|
11398
11434
|
const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
|
|
11399
|
-
const hitIds =
|
|
11435
|
+
const hitIds = chunkNIWO2WYI_js.computeMarqueeHitIds(marquee, sourceElements);
|
|
11400
11436
|
if (marquee.additive) {
|
|
11401
|
-
const merged =
|
|
11437
|
+
const merged = chunkNIWO2WYI_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
|
|
11402
11438
|
if (merged.length > 0) {
|
|
11403
11439
|
applySelection(merged[0], merged);
|
|
11404
11440
|
} else {
|
|
@@ -11421,8 +11457,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
|
|
|
11421
11457
|
}
|
|
11422
11458
|
return { ...el, x: start.x + dx, y: start.y + dy };
|
|
11423
11459
|
});
|
|
11424
|
-
const rerouted =
|
|
11425
|
-
return
|
|
11460
|
+
const rerouted = chunkNIWO2WYI_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
|
|
11461
|
+
return chunkNIWO2WYI_js.applyReroutedConnectors(movedElements, rerouted);
|
|
11426
11462
|
};
|
|
11427
11463
|
if (editTemplateMode) {
|
|
11428
11464
|
const slideId = activeSlide?.id;
|
|
@@ -11563,7 +11599,8 @@ function useCanvasInteractions(input) {
|
|
|
11563
11599
|
presentationHandleAction,
|
|
11564
11600
|
setEditingEquationOmml,
|
|
11565
11601
|
setIsEquationDialogOpen,
|
|
11566
|
-
setPointerCommitNonce
|
|
11602
|
+
setPointerCommitNonce,
|
|
11603
|
+
transformCommittedText
|
|
11567
11604
|
} = input;
|
|
11568
11605
|
const justSelectedRef = React3.useRef(false);
|
|
11569
11606
|
const handleInlineEditCommit = () => {
|
|
@@ -11572,10 +11609,11 @@ function useCanvasInteractions(input) {
|
|
|
11572
11609
|
return;
|
|
11573
11610
|
}
|
|
11574
11611
|
const el = elementLookup.get(editId);
|
|
11575
|
-
if (el &&
|
|
11576
|
-
const
|
|
11612
|
+
if (el && chunkCYZLRYJV_js.hasTextProperties(el)) {
|
|
11613
|
+
const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
|
|
11614
|
+
const newSegments = chunkNIWO2WYI_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
|
|
11577
11615
|
ops.updateElementById(editId, {
|
|
11578
|
-
text:
|
|
11616
|
+
text: committedText,
|
|
11579
11617
|
textSegments: newSegments
|
|
11580
11618
|
});
|
|
11581
11619
|
history.markDirty();
|
|
@@ -11584,7 +11622,7 @@ function useCanvasInteractions(input) {
|
|
|
11584
11622
|
setInlineEditingText("");
|
|
11585
11623
|
};
|
|
11586
11624
|
const openEquationEditorForElement = (el) => {
|
|
11587
|
-
if (!
|
|
11625
|
+
if (!chunkCYZLRYJV_js.hasTextProperties(el)) {
|
|
11588
11626
|
return false;
|
|
11589
11627
|
}
|
|
11590
11628
|
const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
|
|
@@ -11613,7 +11651,7 @@ function useCanvasInteractions(input) {
|
|
|
11613
11651
|
justSelectedRef.current = false;
|
|
11614
11652
|
} else {
|
|
11615
11653
|
const el = elementLookup.get(elementId);
|
|
11616
|
-
if (el &&
|
|
11654
|
+
if (el && chunkCYZLRYJV_js.hasTextProperties(el) && !el.locks?.noTextEdit) {
|
|
11617
11655
|
if (!openEquationEditorForElement(el)) {
|
|
11618
11656
|
setInlineEditingElementId(elementId);
|
|
11619
11657
|
setInlineEditingText(el.text ?? "");
|
|
@@ -11632,7 +11670,7 @@ function useCanvasInteractions(input) {
|
|
|
11632
11670
|
if (openEquationEditorForElement(el)) {
|
|
11633
11671
|
return;
|
|
11634
11672
|
}
|
|
11635
|
-
if (
|
|
11673
|
+
if (chunkCYZLRYJV_js.hasTextProperties(el)) {
|
|
11636
11674
|
setInlineEditingElementId(elementId);
|
|
11637
11675
|
setInlineEditingText(el.text ?? "");
|
|
11638
11676
|
}
|
|
@@ -11677,6 +11715,9 @@ function useCanvasInteractions(input) {
|
|
|
11677
11715
|
setSnapLines([]);
|
|
11678
11716
|
};
|
|
11679
11717
|
const handleElementContextMenu = (elementId, e) => {
|
|
11718
|
+
if (mode === "present") {
|
|
11719
|
+
return;
|
|
11720
|
+
}
|
|
11680
11721
|
e.preventDefault();
|
|
11681
11722
|
e.stopPropagation();
|
|
11682
11723
|
if (!selectedElementIdSet.has(elementId)) {
|
|
@@ -11819,7 +11860,7 @@ function createFileHandlers(deps) {
|
|
|
11819
11860
|
h = Math.round(h * scale);
|
|
11820
11861
|
}
|
|
11821
11862
|
addElement({
|
|
11822
|
-
id:
|
|
11863
|
+
id: chunkNIWO2WYI_js.generateElementId(),
|
|
11823
11864
|
type: "image",
|
|
11824
11865
|
x: Math.round((canvasSize.width - w) / 2),
|
|
11825
11866
|
y: Math.round((canvasSize.height - h) / 2),
|
|
@@ -11830,7 +11871,7 @@ function createFileHandlers(deps) {
|
|
|
11830
11871
|
};
|
|
11831
11872
|
img.onerror = () => {
|
|
11832
11873
|
addElement({
|
|
11833
|
-
id:
|
|
11874
|
+
id: chunkNIWO2WYI_js.generateElementId(),
|
|
11834
11875
|
type: "image",
|
|
11835
11876
|
x: 100,
|
|
11836
11877
|
y: 100,
|
|
@@ -11856,7 +11897,7 @@ function createFileHandlers(deps) {
|
|
|
11856
11897
|
const elFilePath = file.path;
|
|
11857
11898
|
const insertMediaElement = (mediaSourceUrl, width, height) => {
|
|
11858
11899
|
addElement({
|
|
11859
|
-
id:
|
|
11900
|
+
id: chunkNIWO2WYI_js.generateElementId(),
|
|
11860
11901
|
type: "media",
|
|
11861
11902
|
mediaType,
|
|
11862
11903
|
mediaMimeType: file.type || void 0,
|
|
@@ -12031,13 +12072,13 @@ function createStructuredElementHandlers(deps) {
|
|
|
12031
12072
|
return;
|
|
12032
12073
|
}
|
|
12033
12074
|
addElement({
|
|
12034
|
-
id:
|
|
12075
|
+
id: chunkNIWO2WYI_js.generateElementId(),
|
|
12035
12076
|
type: "smartArt",
|
|
12036
12077
|
x: 100,
|
|
12037
12078
|
y: 120,
|
|
12038
12079
|
width: 600,
|
|
12039
12080
|
height: 340,
|
|
12040
|
-
smartArtData:
|
|
12081
|
+
smartArtData: chunkNIWO2WYI_js.buildSmartArtPresetData(
|
|
12041
12082
|
layout,
|
|
12042
12083
|
defaultItems,
|
|
12043
12084
|
(i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
|
|
@@ -12049,7 +12090,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
12049
12090
|
return;
|
|
12050
12091
|
}
|
|
12051
12092
|
addElement({
|
|
12052
|
-
id:
|
|
12093
|
+
id: chunkNIWO2WYI_js.generateElementId(),
|
|
12053
12094
|
type: "shape",
|
|
12054
12095
|
x: 120,
|
|
12055
12096
|
y: 200,
|
|
@@ -12108,7 +12149,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
12108
12149
|
const displayText = value || fieldTexts[fieldType] || fieldType;
|
|
12109
12150
|
const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
|
|
12110
12151
|
addElement({
|
|
12111
|
-
id:
|
|
12152
|
+
id: chunkNIWO2WYI_js.generateElementId(),
|
|
12112
12153
|
type: "shape",
|
|
12113
12154
|
x: 120,
|
|
12114
12155
|
y: 200,
|
|
@@ -12130,11 +12171,11 @@ function createStructuredElementHandlers(deps) {
|
|
|
12130
12171
|
if (!activeSlide) {
|
|
12131
12172
|
return;
|
|
12132
12173
|
}
|
|
12133
|
-
const preset =
|
|
12174
|
+
const preset = chunkNIWO2WYI_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
|
|
12134
12175
|
if (!preset) {
|
|
12135
12176
|
return;
|
|
12136
12177
|
}
|
|
12137
|
-
const defaultPptxAction =
|
|
12178
|
+
const defaultPptxAction = chunkCYZLRYJV_js.elementActionToPptxAction({
|
|
12138
12179
|
trigger: "click",
|
|
12139
12180
|
type: preset.defaultAction
|
|
12140
12181
|
});
|
|
@@ -12143,7 +12184,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
12143
12184
|
defaultPptxAction.highlightClick = true;
|
|
12144
12185
|
}
|
|
12145
12186
|
addElement({
|
|
12146
|
-
id:
|
|
12187
|
+
id: chunkNIWO2WYI_js.generateElementId(),
|
|
12147
12188
|
type: "shape",
|
|
12148
12189
|
x: 150,
|
|
12149
12190
|
y: 150,
|
|
@@ -12210,7 +12251,7 @@ function useInsertElements(input) {
|
|
|
12210
12251
|
return;
|
|
12211
12252
|
}
|
|
12212
12253
|
addElement({
|
|
12213
|
-
id:
|
|
12254
|
+
id: chunkNIWO2WYI_js.generateElementId(),
|
|
12214
12255
|
type: "text",
|
|
12215
12256
|
x: 100,
|
|
12216
12257
|
y: 100,
|
|
@@ -12225,7 +12266,7 @@ function useInsertElements(input) {
|
|
|
12225
12266
|
return;
|
|
12226
12267
|
}
|
|
12227
12268
|
addElement({
|
|
12228
|
-
id:
|
|
12269
|
+
id: chunkNIWO2WYI_js.generateElementId(),
|
|
12229
12270
|
type: "shape",
|
|
12230
12271
|
x: 150,
|
|
12231
12272
|
y: 150,
|
|
@@ -12244,15 +12285,15 @@ function useInsertElements(input) {
|
|
|
12244
12285
|
return;
|
|
12245
12286
|
}
|
|
12246
12287
|
addElement({
|
|
12247
|
-
...
|
|
12248
|
-
id:
|
|
12288
|
+
...chunkNIWO2WYI_js.newTableElement(DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, 100, 200),
|
|
12289
|
+
id: chunkNIWO2WYI_js.generateElementId()
|
|
12249
12290
|
});
|
|
12250
12291
|
};
|
|
12251
12292
|
const handleAddChart = (chartType) => {
|
|
12252
12293
|
if (!activeSlide) {
|
|
12253
12294
|
return;
|
|
12254
12295
|
}
|
|
12255
|
-
addElement(
|
|
12296
|
+
addElement(chunkNIWO2WYI_js.createDefaultChartElement(chartType));
|
|
12256
12297
|
};
|
|
12257
12298
|
const structured = createStructuredElementHandlers({
|
|
12258
12299
|
activeSlide,
|
|
@@ -12322,7 +12363,7 @@ function useClipboardHandlers(input) {
|
|
|
12322
12363
|
if (!selectedElement) {
|
|
12323
12364
|
return;
|
|
12324
12365
|
}
|
|
12325
|
-
setClipboardPayload(
|
|
12366
|
+
setClipboardPayload(chunkNIWO2WYI_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
|
|
12326
12367
|
};
|
|
12327
12368
|
const handleDelete = () => {
|
|
12328
12369
|
const idsToDelete = effectiveSelectedIds;
|
|
@@ -12339,7 +12380,7 @@ function useClipboardHandlers(input) {
|
|
|
12339
12380
|
handleDelete();
|
|
12340
12381
|
};
|
|
12341
12382
|
const insertClone = (source) => {
|
|
12342
|
-
const clone =
|
|
12383
|
+
const clone = chunkNIWO2WYI_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
|
|
12343
12384
|
ops.updateActiveElements((els) => [...els, clone]);
|
|
12344
12385
|
ops.applySelection(clone.id);
|
|
12345
12386
|
history.markDirty();
|
|
@@ -12374,7 +12415,7 @@ function resolveShapePath(el) {
|
|
|
12374
12415
|
return el.pathData;
|
|
12375
12416
|
}
|
|
12376
12417
|
if ("shapeType" in el && typeof el.shapeType === "string") {
|
|
12377
|
-
const clipPath =
|
|
12418
|
+
const clipPath = chunkCYZLRYJV_js.getPresetShapeClipPath(el.shapeType);
|
|
12378
12419
|
if (clipPath) {
|
|
12379
12420
|
const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
|
|
12380
12421
|
if (svgPath) {
|
|
@@ -12425,7 +12466,7 @@ function clipPathToSvgPath(clipPath, width, height) {
|
|
|
12425
12466
|
return parts.join(" ");
|
|
12426
12467
|
}
|
|
12427
12468
|
function transformPathToGlobal(pathData, el) {
|
|
12428
|
-
const polys =
|
|
12469
|
+
const polys = chunkCYZLRYJV_js.svgPathToPolygons(pathData);
|
|
12429
12470
|
if (polys.length === 0) {
|
|
12430
12471
|
return pathData;
|
|
12431
12472
|
}
|
|
@@ -12445,10 +12486,10 @@ function transformPathToGlobal(pathData, el) {
|
|
|
12445
12486
|
y: pt.y * scaleY + el.y
|
|
12446
12487
|
}))
|
|
12447
12488
|
);
|
|
12448
|
-
return
|
|
12489
|
+
return chunkCYZLRYJV_js.polygonsToSvgPath(transformed);
|
|
12449
12490
|
}
|
|
12450
12491
|
function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
12451
|
-
const polys =
|
|
12492
|
+
const polys = chunkCYZLRYJV_js.svgPathToPolygons(pathData);
|
|
12452
12493
|
if (polys.length === 0) {
|
|
12453
12494
|
return pathData;
|
|
12454
12495
|
}
|
|
@@ -12458,10 +12499,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
|
12458
12499
|
y: pt.y - y
|
|
12459
12500
|
}))
|
|
12460
12501
|
);
|
|
12461
|
-
return
|
|
12502
|
+
return chunkCYZLRYJV_js.polygonsToSvgPath(transformed);
|
|
12462
12503
|
}
|
|
12463
12504
|
function pathBounds(pathData) {
|
|
12464
|
-
const polys =
|
|
12505
|
+
const polys = chunkCYZLRYJV_js.svgPathToPolygons(pathData);
|
|
12465
12506
|
let minX = Infinity;
|
|
12466
12507
|
let minY = Infinity;
|
|
12467
12508
|
let maxX = -Infinity;
|
|
@@ -12520,7 +12561,7 @@ function useMergeShapesHandler(input) {
|
|
|
12520
12561
|
let allFragments = [];
|
|
12521
12562
|
let remaining = globalPaths[0];
|
|
12522
12563
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
12523
|
-
const frags =
|
|
12564
|
+
const frags = chunkCYZLRYJV_js.mergeShapes("fragment", remaining, globalPaths[i]);
|
|
12524
12565
|
if (Array.isArray(frags)) {
|
|
12525
12566
|
allFragments = frags;
|
|
12526
12567
|
}
|
|
@@ -12549,7 +12590,7 @@ function useMergeShapesHandler(input) {
|
|
|
12549
12590
|
bounds.height
|
|
12550
12591
|
);
|
|
12551
12592
|
const newEl = {
|
|
12552
|
-
id:
|
|
12593
|
+
id: chunkNIWO2WYI_js.generateElementId(),
|
|
12553
12594
|
type: "shape",
|
|
12554
12595
|
x: bounds.x,
|
|
12555
12596
|
y: bounds.y,
|
|
@@ -12587,7 +12628,7 @@ function useMergeShapesHandler(input) {
|
|
|
12587
12628
|
} else {
|
|
12588
12629
|
let resultPath = globalPaths[0];
|
|
12589
12630
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
12590
|
-
const result =
|
|
12631
|
+
const result = chunkCYZLRYJV_js.mergeShapes(operation, resultPath, globalPaths[i]);
|
|
12591
12632
|
if (typeof result === "string") {
|
|
12592
12633
|
resultPath = result;
|
|
12593
12634
|
}
|
|
@@ -12608,7 +12649,7 @@ function useMergeShapesHandler(input) {
|
|
|
12608
12649
|
);
|
|
12609
12650
|
const primary = targets[0];
|
|
12610
12651
|
const newEl = {
|
|
12611
|
-
id:
|
|
12652
|
+
id: chunkNIWO2WYI_js.generateElementId(),
|
|
12612
12653
|
type: "shape",
|
|
12613
12654
|
x: bounds.x,
|
|
12614
12655
|
y: bounds.y,
|
|
@@ -12671,7 +12712,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12671
12712
|
if (ids.length < 2 || !activeSlide) {
|
|
12672
12713
|
return;
|
|
12673
12714
|
}
|
|
12674
|
-
const { elements, groupId } =
|
|
12715
|
+
const { elements, groupId } = chunkNIWO2WYI_js.groupElements(ops.activeElements, ids, chunkNIWO2WYI_js.generateElementId());
|
|
12675
12716
|
if (groupId === null) {
|
|
12676
12717
|
return;
|
|
12677
12718
|
}
|
|
@@ -12684,12 +12725,12 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12684
12725
|
return;
|
|
12685
12726
|
}
|
|
12686
12727
|
const group = selectedElement;
|
|
12687
|
-
const intoTemplate =
|
|
12728
|
+
const intoTemplate = chunkNIWO2WYI_js.isTemplateElementId(group.id);
|
|
12688
12729
|
const ungrouped = group.children.map((child) => ({
|
|
12689
12730
|
...structuredClone(child),
|
|
12690
12731
|
// Keep child ids in the same store as the group so later edits route
|
|
12691
12732
|
// correctly: template groups yield template-prefixed child ids.
|
|
12692
|
-
id: intoTemplate ?
|
|
12733
|
+
id: intoTemplate ? chunkNIWO2WYI_js.makeCloneId(true, child.id || group.id) : child.id || chunkNIWO2WYI_js.generateElementId(),
|
|
12693
12734
|
x: child.x + group.x,
|
|
12694
12735
|
y: child.y + group.y
|
|
12695
12736
|
}));
|
|
@@ -12713,7 +12754,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12713
12754
|
if (!edge) {
|
|
12714
12755
|
return;
|
|
12715
12756
|
}
|
|
12716
|
-
const positions =
|
|
12757
|
+
const positions = chunkNIWO2WYI_js.alignElements(selectedElements, edge);
|
|
12717
12758
|
for (const [id, pos] of positions) {
|
|
12718
12759
|
const el = elementLookup.get(id);
|
|
12719
12760
|
if (!el) {
|
|
@@ -12731,7 +12772,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12731
12772
|
if (!distAxis) {
|
|
12732
12773
|
return;
|
|
12733
12774
|
}
|
|
12734
|
-
const positions =
|
|
12775
|
+
const positions = chunkNIWO2WYI_js.distributeElements(selectedElements, distAxis);
|
|
12735
12776
|
for (const [id, pos] of positions) {
|
|
12736
12777
|
const el = elementLookup.get(id);
|
|
12737
12778
|
if (!el) {
|
|
@@ -12748,7 +12789,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12748
12789
|
}
|
|
12749
12790
|
const id = selectedElement.id;
|
|
12750
12791
|
ops.updateActiveElements(
|
|
12751
|
-
(els) => direction === "forward" ?
|
|
12792
|
+
(els) => direction === "forward" ? chunkNIWO2WYI_js.bringForward(els, id) : direction === "backward" ? chunkNIWO2WYI_js.sendBackward(els, id) : els
|
|
12752
12793
|
);
|
|
12753
12794
|
history.markDirty();
|
|
12754
12795
|
};
|
|
@@ -12758,7 +12799,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
12758
12799
|
}
|
|
12759
12800
|
const id = selectedElement.id;
|
|
12760
12801
|
ops.updateActiveElements(
|
|
12761
|
-
(els) => direction === "front" ?
|
|
12802
|
+
(els) => direction === "front" ? chunkNIWO2WYI_js.bringToFront(els, id) : chunkNIWO2WYI_js.sendToBack(els, id)
|
|
12762
12803
|
);
|
|
12763
12804
|
history.markDirty();
|
|
12764
12805
|
};
|
|
@@ -12880,7 +12921,7 @@ function insertSlideFromLayoutUpdater(slides, activeIndex, draft) {
|
|
|
12880
12921
|
function useSlideManagement(input) {
|
|
12881
12922
|
const { slides, activeSlideIndex, setActiveSlideIndex, ops, history, handlerRef } = input;
|
|
12882
12923
|
const handleAddSlide = () => {
|
|
12883
|
-
const newSlide =
|
|
12924
|
+
const newSlide = chunkNIWO2WYI_js.createBlankSlide(slides.length + 1);
|
|
12884
12925
|
ops.updateSlides((prev) => {
|
|
12885
12926
|
const next = [...prev];
|
|
12886
12927
|
next.splice(activeSlideIndex + 1, 0, newSlide);
|
|
@@ -12943,7 +12984,7 @@ function useSlideManagement(input) {
|
|
|
12943
12984
|
}
|
|
12944
12985
|
const clone = {
|
|
12945
12986
|
...src,
|
|
12946
|
-
id:
|
|
12987
|
+
id: chunkNIWO2WYI_js.makeSlideId(),
|
|
12947
12988
|
elements: src.elements.map((el) => ({
|
|
12948
12989
|
...el,
|
|
12949
12990
|
id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
|
|
@@ -12975,7 +13016,7 @@ function useSlideManagement(input) {
|
|
|
12975
13016
|
const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
|
|
12976
13017
|
const insertAt = activeSlideIndex + 1;
|
|
12977
13018
|
const draft = {
|
|
12978
|
-
...
|
|
13019
|
+
...chunkNIWO2WYI_js.createBlankSlide(slides.length + 1),
|
|
12979
13020
|
layoutPath,
|
|
12980
13021
|
...layoutName ? { layoutName } : {}
|
|
12981
13022
|
};
|
|
@@ -13036,7 +13077,7 @@ function createTableMergeHandlers(input) {
|
|
|
13036
13077
|
if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
|
|
13037
13078
|
return;
|
|
13038
13079
|
}
|
|
13039
|
-
const newTableData =
|
|
13080
|
+
const newTableData = chunkNIWO2WYI_js.mergeCells(
|
|
13040
13081
|
[
|
|
13041
13082
|
{ row: rowIndex, col: columnIndex },
|
|
13042
13083
|
{ row: rowIndex, col: nextColIdx }
|
|
@@ -13044,7 +13085,7 @@ function createTableMergeHandlers(input) {
|
|
|
13044
13085
|
td
|
|
13045
13086
|
);
|
|
13046
13087
|
const updates = { tableData: newTableData };
|
|
13047
|
-
const newRawXml =
|
|
13088
|
+
const newRawXml = chunkCYZLRYJV_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
13048
13089
|
if (newRawXml) {
|
|
13049
13090
|
updates.rawXml = newRawXml;
|
|
13050
13091
|
}
|
|
@@ -13070,7 +13111,7 @@ function createTableMergeHandlers(input) {
|
|
|
13070
13111
|
if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
|
|
13071
13112
|
return;
|
|
13072
13113
|
}
|
|
13073
|
-
const newTableData =
|
|
13114
|
+
const newTableData = chunkNIWO2WYI_js.mergeCells(
|
|
13074
13115
|
[
|
|
13075
13116
|
{ row: rowIndex, col: columnIndex },
|
|
13076
13117
|
{ row: targetNextRowIdx, col: columnIndex }
|
|
@@ -13078,7 +13119,7 @@ function createTableMergeHandlers(input) {
|
|
|
13078
13119
|
td
|
|
13079
13120
|
);
|
|
13080
13121
|
const updates = { tableData: newTableData };
|
|
13081
|
-
const newRawXml =
|
|
13122
|
+
const newRawXml = chunkCYZLRYJV_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
13082
13123
|
if (newRawXml) {
|
|
13083
13124
|
updates.rawXml = newRawXml;
|
|
13084
13125
|
}
|
|
@@ -13093,9 +13134,9 @@ function createTableMergeHandlers(input) {
|
|
|
13093
13134
|
return;
|
|
13094
13135
|
}
|
|
13095
13136
|
const td = selectedElement.tableData;
|
|
13096
|
-
const newTableData =
|
|
13137
|
+
const newTableData = chunkNIWO2WYI_js.mergeCells(ts.selectedCells, td);
|
|
13097
13138
|
const updates = { tableData: newTableData };
|
|
13098
|
-
const newRawXml =
|
|
13139
|
+
const newRawXml = chunkCYZLRYJV_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
13099
13140
|
if (newRawXml) {
|
|
13100
13141
|
updates.rawXml = newRawXml;
|
|
13101
13142
|
}
|
|
@@ -13112,9 +13153,9 @@ function createTableMergeHandlers(input) {
|
|
|
13112
13153
|
}
|
|
13113
13154
|
const { rowIndex, columnIndex } = ts;
|
|
13114
13155
|
const td = selectedElement.tableData;
|
|
13115
|
-
const newTableData =
|
|
13156
|
+
const newTableData = chunkNIWO2WYI_js.splitCell(rowIndex, columnIndex, td);
|
|
13116
13157
|
const updates = { tableData: newTableData };
|
|
13117
|
-
const newRawXml =
|
|
13158
|
+
const newRawXml = chunkCYZLRYJV_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
13118
13159
|
if (newRawXml) {
|
|
13119
13160
|
updates.rawXml = newRawXml;
|
|
13120
13161
|
}
|
|
@@ -13158,7 +13199,7 @@ function createTableStructHandlers(input) {
|
|
|
13158
13199
|
updates.tableData = { ...el.tableData, rows: newRows };
|
|
13159
13200
|
}
|
|
13160
13201
|
if (el.rawXml) {
|
|
13161
|
-
const newRawXml =
|
|
13202
|
+
const newRawXml = chunkCYZLRYJV_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
|
|
13162
13203
|
if (newRawXml) {
|
|
13163
13204
|
updates.rawXml = newRawXml;
|
|
13164
13205
|
}
|
|
@@ -13182,7 +13223,7 @@ function createTableStructHandlers(input) {
|
|
|
13182
13223
|
const { rowIndex, columnIndex: colIndex } = ts;
|
|
13183
13224
|
const updates = {};
|
|
13184
13225
|
if (selectedElement.rawXml) {
|
|
13185
|
-
const newRawXml =
|
|
13226
|
+
const newRawXml = chunkCYZLRYJV_js.updateCellTextStyleInRawXml(
|
|
13186
13227
|
selectedElement,
|
|
13187
13228
|
rowIndex,
|
|
13188
13229
|
colIndex,
|
|
@@ -13246,9 +13287,9 @@ function createTableStructHandlers(input) {
|
|
|
13246
13287
|
return;
|
|
13247
13288
|
}
|
|
13248
13289
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
13249
|
-
const newTableData =
|
|
13290
|
+
const newTableData = chunkNIWO2WYI_js.insertTableRow(selectedElement.tableData, rowIdx, position);
|
|
13250
13291
|
const updates = { tableData: newTableData };
|
|
13251
|
-
const newRawXml =
|
|
13292
|
+
const newRawXml = chunkCYZLRYJV_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
13252
13293
|
if (newRawXml) {
|
|
13253
13294
|
updates.rawXml = newRawXml;
|
|
13254
13295
|
}
|
|
@@ -13261,12 +13302,12 @@ function createTableStructHandlers(input) {
|
|
|
13261
13302
|
}
|
|
13262
13303
|
const td = selectedElement.tableData;
|
|
13263
13304
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
13264
|
-
const newTableData =
|
|
13305
|
+
const newTableData = chunkNIWO2WYI_js.deleteTableRow(td, rowIdx);
|
|
13265
13306
|
if (newTableData === td) {
|
|
13266
13307
|
return;
|
|
13267
13308
|
}
|
|
13268
13309
|
const updates = { tableData: newTableData };
|
|
13269
|
-
const newRawXml =
|
|
13310
|
+
const newRawXml = chunkCYZLRYJV_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
13270
13311
|
if (newRawXml) {
|
|
13271
13312
|
updates.rawXml = newRawXml;
|
|
13272
13313
|
}
|
|
@@ -13278,9 +13319,9 @@ function createTableStructHandlers(input) {
|
|
|
13278
13319
|
return;
|
|
13279
13320
|
}
|
|
13280
13321
|
const colIdx = ts?.columnIndex ?? 0;
|
|
13281
|
-
const newTableData =
|
|
13322
|
+
const newTableData = chunkNIWO2WYI_js.insertTableColumn(selectedElement.tableData, colIdx, position);
|
|
13282
13323
|
const updates = { tableData: newTableData };
|
|
13283
|
-
const newRawXml =
|
|
13324
|
+
const newRawXml = chunkCYZLRYJV_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
13284
13325
|
if (newRawXml) {
|
|
13285
13326
|
updates.rawXml = newRawXml;
|
|
13286
13327
|
}
|
|
@@ -13293,12 +13334,12 @@ function createTableStructHandlers(input) {
|
|
|
13293
13334
|
}
|
|
13294
13335
|
const td = selectedElement.tableData;
|
|
13295
13336
|
const colIdx = ts?.columnIndex ?? 0;
|
|
13296
|
-
const newTableData =
|
|
13337
|
+
const newTableData = chunkNIWO2WYI_js.deleteTableColumn(td, colIdx);
|
|
13297
13338
|
if (newTableData === td) {
|
|
13298
13339
|
return;
|
|
13299
13340
|
}
|
|
13300
13341
|
const updates = { tableData: newTableData };
|
|
13301
|
-
const newRawXml =
|
|
13342
|
+
const newRawXml = chunkCYZLRYJV_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
13302
13343
|
if (newRawXml) {
|
|
13303
13344
|
updates.rawXml = newRawXml;
|
|
13304
13345
|
}
|
|
@@ -13334,8 +13375,8 @@ async function renderToCanvas(element, options = {}) {
|
|
|
13334
13375
|
return html2canvasPro(element, {
|
|
13335
13376
|
...options,
|
|
13336
13377
|
onclone: async (doc, clonedEl) => {
|
|
13337
|
-
await
|
|
13338
|
-
|
|
13378
|
+
await chunkNIWO2WYI_js.normalizeColorsForCapture(doc, clonedEl);
|
|
13379
|
+
chunkNIWO2WYI_js.preprocessCssForCapture(clonedEl);
|
|
13339
13380
|
if (typeof userOnClone === "function") {
|
|
13340
13381
|
userOnClone(doc, clonedEl);
|
|
13341
13382
|
}
|
|
@@ -13391,7 +13432,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
|
|
|
13391
13432
|
}
|
|
13392
13433
|
async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
|
|
13393
13434
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
13394
|
-
|
|
13435
|
+
chunkNIWO2WYI_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
|
|
13395
13436
|
}
|
|
13396
13437
|
async function copySlideToClipboard(slideElement, options = {}) {
|
|
13397
13438
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
@@ -13413,15 +13454,15 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
|
|
|
13413
13454
|
continue;
|
|
13414
13455
|
}
|
|
13415
13456
|
const canvas = await renderElementToCanvas(stageEl, scale);
|
|
13416
|
-
images.push(
|
|
13457
|
+
images.push(chunkNIWO2WYI_js.canvasToJpegData(canvas));
|
|
13417
13458
|
}
|
|
13418
13459
|
onProgress?.(totalSlides, totalSlides);
|
|
13419
13460
|
setActiveSlide(currentSlideIndex);
|
|
13420
13461
|
if (images.length === 0) {
|
|
13421
|
-
throw new Error(
|
|
13462
|
+
throw new Error(chunk2EFVXYNA_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
|
|
13422
13463
|
}
|
|
13423
13464
|
const pdfBlobUrl = buildPdfFromImageData(images);
|
|
13424
|
-
|
|
13465
|
+
chunkNIWO2WYI_js.downloadDataUrl(pdfBlobUrl, filename);
|
|
13425
13466
|
}
|
|
13426
13467
|
async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
|
|
13427
13468
|
const { scale = 2, onProgress } = options;
|
|
@@ -13467,10 +13508,10 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
|
|
|
13467
13508
|
onProgress?.(totalSlides, totalSlides);
|
|
13468
13509
|
setActiveSlide(currentSlideIndex);
|
|
13469
13510
|
if (pages.length === 0) {
|
|
13470
|
-
throw new Error(
|
|
13511
|
+
throw new Error(chunk2EFVXYNA_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
|
|
13471
13512
|
}
|
|
13472
13513
|
const pdfDataUrl = buildNotesPdf(pages);
|
|
13473
|
-
|
|
13514
|
+
chunkNIWO2WYI_js.downloadDataUrl(pdfDataUrl, filename);
|
|
13474
13515
|
}
|
|
13475
13516
|
|
|
13476
13517
|
// src/viewer/utils/export-video.ts
|
|
@@ -13501,7 +13542,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
13501
13542
|
}
|
|
13502
13543
|
setActiveSlide(currentSlideIndex);
|
|
13503
13544
|
if (slideCanvases.length === 0) {
|
|
13504
|
-
throw new Error(
|
|
13545
|
+
throw new Error(chunk2EFVXYNA_js.translationsEn["pptx.export.errorNoSlidesVideo"]);
|
|
13505
13546
|
}
|
|
13506
13547
|
const firstCanvas = slideCanvases[0];
|
|
13507
13548
|
const recordingCanvas = document.createElement("canvas");
|
|
@@ -13509,12 +13550,12 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
13509
13550
|
recordingCanvas.height = firstCanvas.height;
|
|
13510
13551
|
const ctx = recordingCanvas.getContext("2d");
|
|
13511
13552
|
if (!ctx) {
|
|
13512
|
-
throw new Error(
|
|
13553
|
+
throw new Error(chunk2EFVXYNA_js.translationsEn["pptx.export.errorNo2dContext"]);
|
|
13513
13554
|
}
|
|
13514
13555
|
const fps = 30;
|
|
13515
13556
|
const stream = recordingCanvas.captureStream(fps);
|
|
13516
13557
|
const recorder = new MediaRecorder(stream, {
|
|
13517
|
-
mimeType:
|
|
13558
|
+
mimeType: chunkNIWO2WYI_js.pickSupportedMimeType([...chunkNIWO2WYI_js.WEBM_MIME_CANDIDATES]),
|
|
13518
13559
|
videoBitsPerSecond: 5e6
|
|
13519
13560
|
});
|
|
13520
13561
|
const chunks = [];
|
|
@@ -13537,8 +13578,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
13537
13578
|
const duration = slideTimingsMs?.[i] ?? slideDurationMs;
|
|
13538
13579
|
ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
|
|
13539
13580
|
ctx.drawImage(slideCanvases[i], 0, 0);
|
|
13540
|
-
const frameInterval =
|
|
13541
|
-
const framesNeeded =
|
|
13581
|
+
const frameInterval = chunkNIWO2WYI_js.fpsToFrameIntervalMs(fps);
|
|
13582
|
+
const framesNeeded = chunkNIWO2WYI_js.segmentFrameCount(duration, fps);
|
|
13542
13583
|
for (let f = 0; f < framesNeeded; f++) {
|
|
13543
13584
|
if (signal?.aborted) {
|
|
13544
13585
|
recorder.stop();
|
|
@@ -13585,9 +13626,9 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
|
|
|
13585
13626
|
}
|
|
13586
13627
|
setActiveSlide(currentSlideIndex);
|
|
13587
13628
|
if (frames.length === 0) {
|
|
13588
|
-
throw new Error(
|
|
13629
|
+
throw new Error(chunk2EFVXYNA_js.translationsEn["pptx.export.errorNoSlidesGif"]);
|
|
13589
13630
|
}
|
|
13590
|
-
const gifBytes =
|
|
13631
|
+
const gifBytes = chunkNIWO2WYI_js.encodeGif(frames, Math.round(slideDurationMs / 10));
|
|
13591
13632
|
onProgress?.(totalSlides, totalSlides);
|
|
13592
13633
|
const buf = new ArrayBuffer(gifBytes.length);
|
|
13593
13634
|
new Uint8Array(buf).set(gifBytes);
|
|
@@ -13641,7 +13682,7 @@ function exportAllSlidesToSvg(data, options = {}) {
|
|
|
13641
13682
|
continue;
|
|
13642
13683
|
}
|
|
13643
13684
|
onProgress?.(processedCount, data.slides.length);
|
|
13644
|
-
let svg =
|
|
13685
|
+
let svg = chunkCYZLRYJV_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
|
|
13645
13686
|
if (embedFonts && fontFaces?.length) {
|
|
13646
13687
|
svg = injectFontFaces(svg, fontFaces);
|
|
13647
13688
|
}
|
|
@@ -13701,7 +13742,7 @@ function useExportSaveAs(input) {
|
|
|
13701
13742
|
}
|
|
13702
13743
|
setExportProgress(70);
|
|
13703
13744
|
setExportStatusMessage("Writing README...");
|
|
13704
|
-
const readme =
|
|
13745
|
+
const readme = chunkNIWO2WYI_js.generatePackageReadme(pptxFilename);
|
|
13705
13746
|
pkgFolder.file("README.txt", readme);
|
|
13706
13747
|
if (abortCtrl.signal.aborted) {
|
|
13707
13748
|
throw new DOMException("Export cancelled", "AbortError");
|
|
@@ -13712,7 +13753,7 @@ function useExportSaveAs(input) {
|
|
|
13712
13753
|
setExportProgress(95);
|
|
13713
13754
|
setExportStatusMessage("Downloading...");
|
|
13714
13755
|
const baseName = pptxFilename.replace(/\.[^.]+$/u, "");
|
|
13715
|
-
|
|
13756
|
+
chunkNIWO2WYI_js.downloadBlob(zipBlob, `${baseName}-package.zip`);
|
|
13716
13757
|
setExportProgress(100);
|
|
13717
13758
|
} catch (err) {
|
|
13718
13759
|
if (err.name !== "AbortError") {
|
|
@@ -13735,7 +13776,7 @@ function useExportSaveAs(input) {
|
|
|
13735
13776
|
const blob = new Blob([data], {
|
|
13736
13777
|
type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
|
|
13737
13778
|
});
|
|
13738
|
-
|
|
13779
|
+
chunkNIWO2WYI_js.downloadBlob(blob, `${baseName}.${ext}`);
|
|
13739
13780
|
} catch (err) {
|
|
13740
13781
|
console.error(`[PowerPointViewer] Save as .${ext} failed:`, err);
|
|
13741
13782
|
}
|
|
@@ -13748,7 +13789,7 @@ function useExportSaveAs(input) {
|
|
|
13748
13789
|
const pptxGuides = guides.map((g) => ({
|
|
13749
13790
|
id: g.id,
|
|
13750
13791
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
13751
|
-
positionEmu:
|
|
13792
|
+
positionEmu: chunkCYZLRYJV_js.guidePxToEmu(g.position)
|
|
13752
13793
|
}));
|
|
13753
13794
|
return {
|
|
13754
13795
|
...slide,
|
|
@@ -13812,7 +13853,7 @@ function safeConfirm(message) {
|
|
|
13812
13853
|
}
|
|
13813
13854
|
}
|
|
13814
13855
|
function downloadBlob2(blob, filename) {
|
|
13815
|
-
|
|
13856
|
+
chunkNIWO2WYI_js.downloadBlob(blob, chunkNIWO2WYI_js.sanitizeDownloadFilename(filename));
|
|
13816
13857
|
}
|
|
13817
13858
|
|
|
13818
13859
|
// src/viewer/hooks/useExportHandlers.ts
|
|
@@ -13913,21 +13954,21 @@ function useExportHandlers(input) {
|
|
|
13913
13954
|
{
|
|
13914
13955
|
scale: 2,
|
|
13915
13956
|
onProgress: (current, total) => {
|
|
13916
|
-
setExportProgress(
|
|
13917
|
-
setExportStatusMessage(
|
|
13957
|
+
setExportProgress(chunkNIWO2WYI_js.slideProgressPercent(current, total));
|
|
13958
|
+
setExportStatusMessage(chunkNIWO2WYI_js.slideStatusLabel("Rendering", current, total));
|
|
13918
13959
|
},
|
|
13919
13960
|
signal: abortCtrl.signal
|
|
13920
13961
|
}
|
|
13921
13962
|
);
|
|
13922
|
-
setExportProgress(
|
|
13963
|
+
setExportProgress(chunkNIWO2WYI_js.EXPORT_ASSEMBLING_PERCENT);
|
|
13923
13964
|
setExportStatusMessage("Building PDF...");
|
|
13924
13965
|
await new Promise((r) => {
|
|
13925
13966
|
setTimeout(r, 100);
|
|
13926
13967
|
});
|
|
13927
|
-
setExportProgress(
|
|
13968
|
+
setExportProgress(chunkNIWO2WYI_js.EXPORT_DONE_PERCENT);
|
|
13928
13969
|
setExportStatusMessage("Done!");
|
|
13929
13970
|
} catch (err) {
|
|
13930
|
-
if (!
|
|
13971
|
+
if (!chunkNIWO2WYI_js.isExportAbortError(err)) {
|
|
13931
13972
|
console.error("[PowerPointViewer] PDF export failed:", err);
|
|
13932
13973
|
}
|
|
13933
13974
|
} finally {
|
|
@@ -13957,21 +13998,21 @@ function useExportHandlers(input) {
|
|
|
13957
13998
|
{
|
|
13958
13999
|
scale: 2,
|
|
13959
14000
|
onProgress: (current, total) => {
|
|
13960
|
-
setExportProgress(
|
|
13961
|
-
setExportStatusMessage(
|
|
14001
|
+
setExportProgress(chunkNIWO2WYI_js.slideProgressPercent(current, total));
|
|
14002
|
+
setExportStatusMessage(chunkNIWO2WYI_js.slideStatusLabel("Rendering", current, total));
|
|
13962
14003
|
},
|
|
13963
14004
|
signal: abortCtrl.signal
|
|
13964
14005
|
}
|
|
13965
14006
|
);
|
|
13966
|
-
setExportProgress(
|
|
14007
|
+
setExportProgress(chunkNIWO2WYI_js.EXPORT_ASSEMBLING_PERCENT);
|
|
13967
14008
|
setExportStatusMessage("Building PDF...");
|
|
13968
14009
|
await new Promise((r) => {
|
|
13969
14010
|
setTimeout(r, 100);
|
|
13970
14011
|
});
|
|
13971
|
-
setExportProgress(
|
|
14012
|
+
setExportProgress(chunkNIWO2WYI_js.EXPORT_DONE_PERCENT);
|
|
13972
14013
|
setExportStatusMessage("Done!");
|
|
13973
14014
|
} catch (err) {
|
|
13974
|
-
if (!
|
|
14015
|
+
if (!chunkNIWO2WYI_js.isExportAbortError(err)) {
|
|
13975
14016
|
console.error("[PowerPointViewer] Notes PDF export failed:", err);
|
|
13976
14017
|
}
|
|
13977
14018
|
} finally {
|
|
@@ -14012,22 +14053,22 @@ function useExportHandlers(input) {
|
|
|
14012
14053
|
scale: 1,
|
|
14013
14054
|
slideDurationMs: 3e3,
|
|
14014
14055
|
onProgress: (current, total) => {
|
|
14015
|
-
setExportProgress(
|
|
14016
|
-
setExportStatusMessage(
|
|
14056
|
+
setExportProgress(chunkNIWO2WYI_js.slideProgressPercent(current, total, 45));
|
|
14057
|
+
setExportStatusMessage(chunkNIWO2WYI_js.slideStatusLabel("Capturing", current, total));
|
|
14017
14058
|
},
|
|
14018
14059
|
onRecordProgress: (current, total) => {
|
|
14019
|
-
setExportProgress(
|
|
14020
|
-
setExportStatusMessage(
|
|
14060
|
+
setExportProgress(chunkNIWO2WYI_js.recordProgressPercent(current, total));
|
|
14061
|
+
setExportStatusMessage(chunkNIWO2WYI_js.slideStatusLabel("Recording", current, total));
|
|
14021
14062
|
},
|
|
14022
14063
|
signal: abortCtrl.signal
|
|
14023
14064
|
}
|
|
14024
14065
|
);
|
|
14025
|
-
setExportProgress(
|
|
14066
|
+
setExportProgress(chunkNIWO2WYI_js.EXPORT_ASSEMBLING_PERCENT);
|
|
14026
14067
|
setExportStatusMessage("Saving file...");
|
|
14027
14068
|
downloadBlob2(blob, "presentation.webm");
|
|
14028
|
-
setExportProgress(
|
|
14069
|
+
setExportProgress(chunkNIWO2WYI_js.EXPORT_DONE_PERCENT);
|
|
14029
14070
|
} catch (err) {
|
|
14030
|
-
if (!
|
|
14071
|
+
if (!chunkNIWO2WYI_js.isExportAbortError(err)) {
|
|
14031
14072
|
console.error("[PowerPointViewer] Video export failed:", err);
|
|
14032
14073
|
}
|
|
14033
14074
|
} finally {
|
|
@@ -14055,18 +14096,18 @@ function useExportHandlers(input) {
|
|
|
14055
14096
|
scale: 0.5,
|
|
14056
14097
|
slideDurationMs: 2e3,
|
|
14057
14098
|
onProgress: (current, total) => {
|
|
14058
|
-
setExportProgress(
|
|
14059
|
-
setExportStatusMessage(
|
|
14099
|
+
setExportProgress(chunkNIWO2WYI_js.slideProgressPercent(current, total));
|
|
14100
|
+
setExportStatusMessage(chunkNIWO2WYI_js.slideStatusLabel("Encoding", current, total));
|
|
14060
14101
|
},
|
|
14061
14102
|
signal: abortCtrl.signal
|
|
14062
14103
|
}
|
|
14063
14104
|
);
|
|
14064
|
-
setExportProgress(
|
|
14105
|
+
setExportProgress(chunkNIWO2WYI_js.EXPORT_ASSEMBLING_PERCENT);
|
|
14065
14106
|
setExportStatusMessage("Saving file...");
|
|
14066
14107
|
downloadBlob2(blob, "presentation.gif");
|
|
14067
|
-
setExportProgress(
|
|
14108
|
+
setExportProgress(chunkNIWO2WYI_js.EXPORT_DONE_PERCENT);
|
|
14068
14109
|
} catch (err) {
|
|
14069
|
-
if (!
|
|
14110
|
+
if (!chunkNIWO2WYI_js.isExportAbortError(err)) {
|
|
14070
14111
|
console.error("[PowerPointViewer] GIF export failed:", err);
|
|
14071
14112
|
}
|
|
14072
14113
|
} finally {
|
|
@@ -14106,7 +14147,7 @@ function openPrintWindow(title, bodyHtml, orientation, colorFilter, frameSlides)
|
|
|
14106
14147
|
}
|
|
14107
14148
|
printWindow.document.open();
|
|
14108
14149
|
printWindow.document.write(
|
|
14109
|
-
|
|
14150
|
+
chunkNIWO2WYI_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
|
|
14110
14151
|
);
|
|
14111
14152
|
printWindow.document.close();
|
|
14112
14153
|
printWindow.focus();
|
|
@@ -14167,7 +14208,7 @@ function usePrintHandlers(input) {
|
|
|
14167
14208
|
if (svgs.length === 0) {
|
|
14168
14209
|
return;
|
|
14169
14210
|
}
|
|
14170
|
-
const printDoc =
|
|
14211
|
+
const printDoc = chunkNIWO2WYI_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
|
|
14171
14212
|
title: "Slides (Vector)",
|
|
14172
14213
|
orientation: settings.orientation,
|
|
14173
14214
|
colorFilter
|
|
@@ -14203,7 +14244,7 @@ function usePrintHandlers(input) {
|
|
|
14203
14244
|
if (settings.printWhat === "outline") {
|
|
14204
14245
|
openPrintWindow(
|
|
14205
14246
|
"Outline",
|
|
14206
|
-
`<div class="outline-page">${
|
|
14247
|
+
`<div class="outline-page">${chunkNIWO2WYI_js.buildOutlineHtml(slideIndices, slides)}</div>`,
|
|
14207
14248
|
settings.orientation,
|
|
14208
14249
|
colorFilter,
|
|
14209
14250
|
settings.frameSlides
|
|
@@ -14228,7 +14269,7 @@ function usePrintHandlers(input) {
|
|
|
14228
14269
|
if (settings.printWhat === "slides") {
|
|
14229
14270
|
openPrintWindow(
|
|
14230
14271
|
"Slides",
|
|
14231
|
-
|
|
14272
|
+
chunkNIWO2WYI_js.buildSlidesHtml(slideImages, slideIndices),
|
|
14232
14273
|
settings.orientation,
|
|
14233
14274
|
colorFilter,
|
|
14234
14275
|
settings.frameSlides
|
|
@@ -14238,7 +14279,7 @@ function usePrintHandlers(input) {
|
|
|
14238
14279
|
if (settings.printWhat === "notes") {
|
|
14239
14280
|
openPrintWindow(
|
|
14240
14281
|
"Notes Pages",
|
|
14241
|
-
|
|
14282
|
+
chunkNIWO2WYI_js.buildNotesHtml(slideImages, slideIndices, slides),
|
|
14242
14283
|
"portrait",
|
|
14243
14284
|
colorFilter,
|
|
14244
14285
|
settings.frameSlides
|
|
@@ -14249,7 +14290,7 @@ function usePrintHandlers(input) {
|
|
|
14249
14290
|
const spp = settings.slidesPerPage;
|
|
14250
14291
|
openPrintWindow(
|
|
14251
14292
|
`Handout ${spp} per page`,
|
|
14252
|
-
|
|
14293
|
+
chunkNIWO2WYI_js.buildHandoutsHtml(slideImages, slideIndices, spp),
|
|
14253
14294
|
"portrait",
|
|
14254
14295
|
colorFilter,
|
|
14255
14296
|
settings.frameSlides
|
|
@@ -14413,7 +14454,7 @@ function useThemeSwitching(input) {
|
|
|
14413
14454
|
}
|
|
14414
14455
|
try {
|
|
14415
14456
|
await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
|
|
14416
|
-
const newData =
|
|
14457
|
+
const newData = chunkCYZLRYJV_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
|
|
14417
14458
|
onDataChange(newData);
|
|
14418
14459
|
onThemeChanged?.(preset);
|
|
14419
14460
|
} catch (error) {
|
|
@@ -14430,7 +14471,7 @@ function useThemeSwitching(input) {
|
|
|
14430
14471
|
}
|
|
14431
14472
|
try {
|
|
14432
14473
|
await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
|
|
14433
|
-
const newData =
|
|
14474
|
+
const newData = chunkCYZLRYJV_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
|
|
14434
14475
|
onDataChange(newData);
|
|
14435
14476
|
} catch (error) {
|
|
14436
14477
|
console.error("Failed to switch to custom theme:", error);
|
|
@@ -14442,12 +14483,12 @@ function useThemeSwitching(input) {
|
|
|
14442
14483
|
if (!data?.theme?.colorScheme) {
|
|
14443
14484
|
return void 0;
|
|
14444
14485
|
}
|
|
14445
|
-
return
|
|
14446
|
-
(p) =>
|
|
14486
|
+
return chunkCYZLRYJV_js.THEME_PRESETS.find(
|
|
14487
|
+
(p) => chunkCYZLRYJV_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
|
|
14447
14488
|
);
|
|
14448
14489
|
}, [data?.theme?.colorScheme]);
|
|
14449
14490
|
return {
|
|
14450
|
-
presets:
|
|
14491
|
+
presets: chunkCYZLRYJV_js.THEME_PRESETS,
|
|
14451
14492
|
switchToPreset,
|
|
14452
14493
|
switchToCustom,
|
|
14453
14494
|
currentPreset
|
|
@@ -14522,7 +14563,7 @@ function usePropertyHandlers(input) {
|
|
|
14522
14563
|
}
|
|
14523
14564
|
try {
|
|
14524
14565
|
const ab = await file.arrayBuffer();
|
|
14525
|
-
const h = new
|
|
14566
|
+
const h = new chunkCYZLRYJV_js.PptxHandler();
|
|
14526
14567
|
const other = await h.load(ab);
|
|
14527
14568
|
if (!other) {
|
|
14528
14569
|
return;
|
|
@@ -14532,7 +14573,7 @@ function usePropertyHandlers(input) {
|
|
|
14532
14573
|
width: canvasSize.width,
|
|
14533
14574
|
height: canvasSize.height
|
|
14534
14575
|
};
|
|
14535
|
-
setCompareResult(
|
|
14576
|
+
setCompareResult(chunkNIWO2WYI_js.comparePresentation(cur, other));
|
|
14536
14577
|
setIsComparePanelOpen(true);
|
|
14537
14578
|
} catch (err) {
|
|
14538
14579
|
console.warn("Compare failed:", err);
|
|
@@ -14549,7 +14590,7 @@ function usePropertyHandlers(input) {
|
|
|
14549
14590
|
if (!diff || diff.status === "unchanged") {
|
|
14550
14591
|
return;
|
|
14551
14592
|
}
|
|
14552
|
-
setSlides((prev) =>
|
|
14593
|
+
setSlides((prev) => chunkNIWO2WYI_js.applyAcceptSlide(prev, diff));
|
|
14553
14594
|
setIsDirty(true);
|
|
14554
14595
|
},
|
|
14555
14596
|
[compareResult, setSlides, setIsDirty]
|
|
@@ -14560,10 +14601,10 @@ function usePropertyHandlers(input) {
|
|
|
14560
14601
|
if (!compareResult) {
|
|
14561
14602
|
return;
|
|
14562
14603
|
}
|
|
14563
|
-
setSlides((prev) =>
|
|
14604
|
+
setSlides((prev) => chunkNIWO2WYI_js.applyAcceptAllSlides(prev, compareResult));
|
|
14564
14605
|
setIsDirty(true);
|
|
14565
14606
|
}, [compareResult, setSlides, setIsDirty]);
|
|
14566
|
-
const usedFontFamilies = React3.useMemo(() =>
|
|
14607
|
+
const usedFontFamilies = React3.useMemo(() => chunkNIWO2WYI_js.collectUsedFonts(slides), [slides]);
|
|
14567
14608
|
return {
|
|
14568
14609
|
handleUpdateNotes,
|
|
14569
14610
|
handleUpdateSlide,
|
|
@@ -14682,7 +14723,7 @@ function useIsMobile(input) {
|
|
|
14682
14723
|
const containerRef = input?.containerRef;
|
|
14683
14724
|
const isTouchDevice = React3.useSyncExternalStore(
|
|
14684
14725
|
subscribeTouchCapability,
|
|
14685
|
-
|
|
14726
|
+
chunkNIWO2WYI_js.detectTouchDevice,
|
|
14686
14727
|
() => false
|
|
14687
14728
|
// server snapshot
|
|
14688
14729
|
);
|
|
@@ -14698,7 +14739,7 @@ function useIsMobile(input) {
|
|
|
14698
14739
|
}
|
|
14699
14740
|
return containerRef?.current?.clientHeight ?? window.innerHeight;
|
|
14700
14741
|
});
|
|
14701
|
-
const [orientation, setOrientation] = React3.useState(
|
|
14742
|
+
const [orientation, setOrientation] = React3.useState(chunkNIWO2WYI_js.detectOrientation);
|
|
14702
14743
|
const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = React3.useState(false);
|
|
14703
14744
|
const [initialViewportHeight] = React3.useState(
|
|
14704
14745
|
() => typeof window !== "undefined" ? window.innerHeight : 800
|
|
@@ -14742,7 +14783,7 @@ function useIsMobile(input) {
|
|
|
14742
14783
|
return;
|
|
14743
14784
|
}
|
|
14744
14785
|
const handleOrientationChange = () => {
|
|
14745
|
-
setOrientation(
|
|
14786
|
+
setOrientation(chunkNIWO2WYI_js.detectOrientation());
|
|
14746
14787
|
};
|
|
14747
14788
|
if (screen.orientation) {
|
|
14748
14789
|
screen.orientation.addEventListener("change", handleOrientationChange);
|
|
@@ -14772,9 +14813,9 @@ function useIsMobile(input) {
|
|
|
14772
14813
|
window.addEventListener("resize", handleResize);
|
|
14773
14814
|
return () => window.removeEventListener("resize", handleResize);
|
|
14774
14815
|
}, [isTouchDevice, initialViewportHeight]);
|
|
14775
|
-
const isMobile =
|
|
14776
|
-
const isTablet = !isMobile && containerWidth >=
|
|
14777
|
-
const isDesktop = !isMobile && containerWidth >=
|
|
14816
|
+
const isMobile = chunkNIWO2WYI_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
|
|
14817
|
+
const isTablet = !isMobile && containerWidth >= chunkNIWO2WYI_js.MOBILE_BREAKPOINT && containerWidth < chunkNIWO2WYI_js.TABLET_BREAKPOINT;
|
|
14818
|
+
const isDesktop = !isMobile && containerWidth >= chunkNIWO2WYI_js.TABLET_BREAKPOINT;
|
|
14778
14819
|
return {
|
|
14779
14820
|
isMobile,
|
|
14780
14821
|
isTablet,
|
|
@@ -14835,11 +14876,11 @@ function useViewerDialogs(input) {
|
|
|
14835
14876
|
);
|
|
14836
14877
|
const [embedFontsEnabled, setEmbedFontsEnabled] = React3.useState(false);
|
|
14837
14878
|
const [isNarrowViewport, setIsNarrowViewport] = React3.useState(
|
|
14838
|
-
() => typeof window !== "undefined" ?
|
|
14879
|
+
() => typeof window !== "undefined" ? chunkNIWO2WYI_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
|
|
14839
14880
|
);
|
|
14840
14881
|
React3.useEffect(() => {
|
|
14841
14882
|
const handleWindow = () => setIsNarrowViewport(
|
|
14842
|
-
|
|
14883
|
+
chunkNIWO2WYI_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
|
|
14843
14884
|
);
|
|
14844
14885
|
let observer = null;
|
|
14845
14886
|
let raf = 0;
|
|
@@ -14853,12 +14894,12 @@ function useViewerDialogs(input) {
|
|
|
14853
14894
|
const entry = entries[0];
|
|
14854
14895
|
if (entry) {
|
|
14855
14896
|
setIsNarrowViewport(
|
|
14856
|
-
|
|
14897
|
+
chunkNIWO2WYI_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
|
|
14857
14898
|
);
|
|
14858
14899
|
}
|
|
14859
14900
|
});
|
|
14860
14901
|
observer.observe(el);
|
|
14861
|
-
setIsNarrowViewport(
|
|
14902
|
+
setIsNarrowViewport(chunkNIWO2WYI_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
|
|
14862
14903
|
};
|
|
14863
14904
|
attach();
|
|
14864
14905
|
window.addEventListener("resize", handleWindow);
|
|
@@ -15035,7 +15076,7 @@ function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
|
|
|
15035
15076
|
return slides.map((_, i) => i).filter((i) => !slides[i]?.hidden);
|
|
15036
15077
|
}
|
|
15037
15078
|
function computeSlideSectionGroups(slides, sections) {
|
|
15038
|
-
return
|
|
15079
|
+
return chunkNIWO2WYI_js.groupSlidesBySection(sections, slides).map((group) => ({
|
|
15039
15080
|
id: group.section?.id ?? (sections.length > 0 ? UNGROUPED_SECTION_ID : "default"),
|
|
15040
15081
|
label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
|
|
15041
15082
|
slideIndexes: group.slideIndexes,
|
|
@@ -15113,26 +15154,17 @@ function useDerivedSlideState(input) {
|
|
|
15113
15154
|
};
|
|
15114
15155
|
}
|
|
15115
15156
|
function useAnnotationHandlers(input) {
|
|
15116
|
-
const {
|
|
15157
|
+
const {
|
|
15158
|
+
mode,
|
|
15159
|
+
presentation,
|
|
15160
|
+
annotations,
|
|
15161
|
+
history,
|
|
15162
|
+
setMode,
|
|
15163
|
+
setSlides,
|
|
15164
|
+
promptKeepInkAnnotations = true
|
|
15165
|
+
} = input;
|
|
15117
15166
|
const [showKeepAnnotationsDialog, setShowKeepAnnotationsDialog] = React3.useState(false);
|
|
15118
15167
|
const pendingModeAfterAnnotationsRef = React3.useRef("edit");
|
|
15119
|
-
const handleSetMode = React3.useCallback(
|
|
15120
|
-
(nextMode) => {
|
|
15121
|
-
if (nextMode === "present") {
|
|
15122
|
-
presentation.enterPresentMode();
|
|
15123
|
-
} else if (mode === "present" && annotations.hasAnyAnnotations) {
|
|
15124
|
-
stopAllPersistentAudio();
|
|
15125
|
-
pendingModeAfterAnnotationsRef.current = nextMode;
|
|
15126
|
-
setShowKeepAnnotationsDialog(true);
|
|
15127
|
-
} else {
|
|
15128
|
-
if (mode === "present") {
|
|
15129
|
-
stopAllPersistentAudio();
|
|
15130
|
-
}
|
|
15131
|
-
setMode(nextMode);
|
|
15132
|
-
}
|
|
15133
|
-
},
|
|
15134
|
-
[presentation, mode, annotations.hasAnyAnnotations, setMode]
|
|
15135
|
-
);
|
|
15136
15168
|
const handleKeepAnnotations = React3.useCallback(() => {
|
|
15137
15169
|
const annotationMap = annotations.allSlideAnnotations;
|
|
15138
15170
|
if (annotationMap.size === 0) {
|
|
@@ -15201,6 +15233,34 @@ function useAnnotationHandlers(input) {
|
|
|
15201
15233
|
setShowKeepAnnotationsDialog(false);
|
|
15202
15234
|
setMode(pendingModeAfterAnnotationsRef.current);
|
|
15203
15235
|
}, [annotations, setMode, setSlides, history]);
|
|
15236
|
+
const handleSetMode = React3.useCallback(
|
|
15237
|
+
(nextMode) => {
|
|
15238
|
+
if (nextMode === "present") {
|
|
15239
|
+
presentation.enterPresentMode();
|
|
15240
|
+
} else if (mode === "present" && annotations.hasAnyAnnotations) {
|
|
15241
|
+
stopAllPersistentAudio();
|
|
15242
|
+
pendingModeAfterAnnotationsRef.current = nextMode;
|
|
15243
|
+
if (promptKeepInkAnnotations) {
|
|
15244
|
+
setShowKeepAnnotationsDialog(true);
|
|
15245
|
+
} else {
|
|
15246
|
+
handleKeepAnnotations();
|
|
15247
|
+
}
|
|
15248
|
+
} else {
|
|
15249
|
+
if (mode === "present") {
|
|
15250
|
+
stopAllPersistentAudio();
|
|
15251
|
+
}
|
|
15252
|
+
setMode(nextMode);
|
|
15253
|
+
}
|
|
15254
|
+
},
|
|
15255
|
+
[
|
|
15256
|
+
presentation,
|
|
15257
|
+
mode,
|
|
15258
|
+
annotations.hasAnyAnnotations,
|
|
15259
|
+
promptKeepInkAnnotations,
|
|
15260
|
+
handleKeepAnnotations,
|
|
15261
|
+
setMode
|
|
15262
|
+
]
|
|
15263
|
+
);
|
|
15204
15264
|
const handleDiscardAnnotations = React3.useCallback(() => {
|
|
15205
15265
|
annotations.clearAllAnnotations();
|
|
15206
15266
|
setShowKeepAnnotationsDialog(false);
|
|
@@ -15253,13 +15313,13 @@ function useSerialize(input) {
|
|
|
15253
15313
|
let processedSlide = slide;
|
|
15254
15314
|
if (pendingEditId) {
|
|
15255
15315
|
const updatedElements = slide.elements.map((el) => {
|
|
15256
|
-
if (el.id !== pendingEditId || !
|
|
15316
|
+
if (el.id !== pendingEditId || !chunkCYZLRYJV_js.hasTextProperties(el)) {
|
|
15257
15317
|
return el;
|
|
15258
15318
|
}
|
|
15259
15319
|
return {
|
|
15260
15320
|
...el,
|
|
15261
15321
|
text: pendingEditText,
|
|
15262
|
-
textSegments:
|
|
15322
|
+
textSegments: chunkNIWO2WYI_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
|
|
15263
15323
|
};
|
|
15264
15324
|
});
|
|
15265
15325
|
if (updatedElements.some((el, i) => el !== slide.elements[i])) {
|
|
@@ -15272,7 +15332,7 @@ function useSerialize(input) {
|
|
|
15272
15332
|
const pptxGuides = guides.map((g) => ({
|
|
15273
15333
|
id: g.id,
|
|
15274
15334
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
15275
|
-
positionEmu:
|
|
15335
|
+
positionEmu: chunkCYZLRYJV_js.guidePxToEmu(g.position)
|
|
15276
15336
|
}));
|
|
15277
15337
|
return {
|
|
15278
15338
|
...processedSlide,
|
|
@@ -15427,14 +15487,18 @@ function usePresentationSetup(input) {
|
|
|
15427
15487
|
setMode,
|
|
15428
15488
|
setActiveSlideIndex,
|
|
15429
15489
|
setSlides,
|
|
15430
|
-
history
|
|
15490
|
+
history,
|
|
15491
|
+
endWithBlackSlide = true,
|
|
15492
|
+
promptKeepInkAnnotations = true,
|
|
15493
|
+
popupToolbarEnabled = true
|
|
15431
15494
|
} = input;
|
|
15432
15495
|
const actionSoundHandlerRef = React3.useRef(null);
|
|
15433
15496
|
const [, setShowKeepAnnotationsDialog] = React3.useState(false);
|
|
15434
15497
|
const pendingModeRef = React3.useRef("edit");
|
|
15435
15498
|
const annotations = usePresentationAnnotations({
|
|
15436
15499
|
isActive: mode === "present",
|
|
15437
|
-
activeSlideIndex
|
|
15500
|
+
activeSlideIndex,
|
|
15501
|
+
popupToolbarEnabled
|
|
15438
15502
|
});
|
|
15439
15503
|
const presentation = usePresentationMode({
|
|
15440
15504
|
mode,
|
|
@@ -15444,7 +15508,7 @@ function usePresentationSetup(input) {
|
|
|
15444
15508
|
containerRef,
|
|
15445
15509
|
content,
|
|
15446
15510
|
onSetMode: (nextMode) => {
|
|
15447
|
-
if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations) {
|
|
15511
|
+
if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations && promptKeepInkAnnotations) {
|
|
15448
15512
|
pendingModeRef.current = nextMode;
|
|
15449
15513
|
setShowKeepAnnotationsDialog(true);
|
|
15450
15514
|
} else {
|
|
@@ -15492,12 +15556,13 @@ function usePresentationSetup(input) {
|
|
|
15492
15556
|
onToggleEraser: () => annotations.setPresentationTool("eraser"),
|
|
15493
15557
|
onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
|
|
15494
15558
|
onSaveRehearsalTimings: (timings) => {
|
|
15495
|
-
setSlides((prev) =>
|
|
15559
|
+
setSlides((prev) => chunkNIWO2WYI_js.applyRehearsalTimings(prev, timings));
|
|
15496
15560
|
history.markDirty();
|
|
15497
15561
|
},
|
|
15498
|
-
loopContinuously:
|
|
15562
|
+
loopContinuously: chunkNIWO2WYI_js.shouldLoopContinuously(presentationProperties),
|
|
15499
15563
|
showWithAnimation: presentationProperties.showWithAnimation,
|
|
15500
|
-
useTimings: presentationProperties.advanceMode !== "manual"
|
|
15564
|
+
useTimings: presentationProperties.advanceMode !== "manual",
|
|
15565
|
+
endWithBlackSlide
|
|
15501
15566
|
});
|
|
15502
15567
|
return { presentation, annotations, actionSoundHandlerRef };
|
|
15503
15568
|
}
|
|
@@ -15518,7 +15583,8 @@ function useEditorOperations(input) {
|
|
|
15518
15583
|
dialogs,
|
|
15519
15584
|
presentation,
|
|
15520
15585
|
userName,
|
|
15521
|
-
handlerRef
|
|
15586
|
+
handlerRef,
|
|
15587
|
+
transformCommittedText
|
|
15522
15588
|
} = input;
|
|
15523
15589
|
const ops = useElementOperations({
|
|
15524
15590
|
activeSlide,
|
|
@@ -15587,7 +15653,8 @@ function useEditorOperations(input) {
|
|
|
15587
15653
|
presentationHandleAction: presentation.handlePresentationAction,
|
|
15588
15654
|
setEditingEquationOmml: dialogs.setEditingEquationOmml,
|
|
15589
15655
|
setIsEquationDialogOpen: dialogs.setIsEquationDialogOpen,
|
|
15590
|
-
setPointerCommitNonce: state.setPointerCommitNonce
|
|
15656
|
+
setPointerCommitNonce: state.setPointerCommitNonce,
|
|
15657
|
+
transformCommittedText
|
|
15591
15658
|
});
|
|
15592
15659
|
const insertHandlers = useInsertElements({
|
|
15593
15660
|
activeSlide,
|
|
@@ -15654,7 +15721,7 @@ function useEditorOperations(input) {
|
|
|
15654
15721
|
const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
|
|
15655
15722
|
React3.useEffect(() => {
|
|
15656
15723
|
if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
|
|
15657
|
-
copiedFormatRef.current =
|
|
15724
|
+
copiedFormatRef.current = chunkNIWO2WYI_js.copyFormatFromElement(selectedElement);
|
|
15658
15725
|
} else if (!formatPainterActive) {
|
|
15659
15726
|
copiedFormatRef.current = null;
|
|
15660
15727
|
}
|
|
@@ -15680,12 +15747,12 @@ function useEditorOperations(input) {
|
|
|
15680
15747
|
e.stopPropagation();
|
|
15681
15748
|
const element = elementLookup.get(elementId);
|
|
15682
15749
|
if (element) {
|
|
15683
|
-
const updated =
|
|
15750
|
+
const updated = chunkNIWO2WYI_js.applyFormatToElement(element, copiedFormatRef.current);
|
|
15684
15751
|
const updates = {};
|
|
15685
|
-
if (
|
|
15752
|
+
if (chunkCYZLRYJV_js.hasShapeProperties(updated)) {
|
|
15686
15753
|
updates.shapeStyle = updated.shapeStyle;
|
|
15687
15754
|
}
|
|
15688
|
-
if (
|
|
15755
|
+
if (chunkCYZLRYJV_js.hasTextProperties(updated)) {
|
|
15689
15756
|
updates.textStyle = updated.textStyle;
|
|
15690
15757
|
}
|
|
15691
15758
|
ops.updateElementById(elementId, updates);
|
|
@@ -15829,7 +15896,7 @@ function collectReferencedFontFamilies(slides) {
|
|
|
15829
15896
|
const families = /* @__PURE__ */ new Set();
|
|
15830
15897
|
for (const slide of slides) {
|
|
15831
15898
|
for (const el of slide.elements) {
|
|
15832
|
-
if (
|
|
15899
|
+
if (chunkCYZLRYJV_js.hasTextProperties(el) && el.textSegments) {
|
|
15833
15900
|
for (const seg of el.textSegments) {
|
|
15834
15901
|
if (seg.style.fontFamily) {
|
|
15835
15902
|
families.add(seg.style.fontFamily);
|
|
@@ -16609,9 +16676,20 @@ function useReducedMotion() {
|
|
|
16609
16676
|
setManualReducedMotion
|
|
16610
16677
|
};
|
|
16611
16678
|
}
|
|
16612
|
-
|
|
16679
|
+
function useViewerOptions() {
|
|
16680
|
+
const storeRef = React3.useRef(null);
|
|
16681
|
+
storeRef.current ??= chunkNIWO2WYI_js.createViewerOptionsStore();
|
|
16682
|
+
const store = storeRef.current;
|
|
16683
|
+
const options = React3.useSyncExternalStore(
|
|
16684
|
+
(onStoreChange) => store.subscribe(onStoreChange),
|
|
16685
|
+
() => store.getOptions(),
|
|
16686
|
+
() => store.getOptions()
|
|
16687
|
+
);
|
|
16688
|
+
return { optionsStore: store, options };
|
|
16689
|
+
}
|
|
16690
|
+
var KNOWN_TAB_IDS = new Set(chunkNIWO2WYI_js.TOOLBAR_TABS.map((tab) => tab.id));
|
|
16613
16691
|
function computeToolbarVisibility(hiddenActions) {
|
|
16614
|
-
const isHidden = (id) =>
|
|
16692
|
+
const isHidden = (id) => chunkNIWO2WYI_js.isActionHidden(id, hiddenActions);
|
|
16615
16693
|
const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id);
|
|
16616
16694
|
return { isHidden, isTabVisible };
|
|
16617
16695
|
}
|
|
@@ -16628,7 +16706,7 @@ function useYjsProvider({ config }) {
|
|
|
16628
16706
|
const timeoutRef = React3.useRef(null);
|
|
16629
16707
|
const gateRef = React3.useRef(null);
|
|
16630
16708
|
if (!gateRef.current) {
|
|
16631
|
-
gateRef.current =
|
|
16709
|
+
gateRef.current = chunkNIWO2WYI_js.createSyncGate(() => setSynced(true));
|
|
16632
16710
|
}
|
|
16633
16711
|
const teardown = React3.useCallback(() => {
|
|
16634
16712
|
if (timeoutRef.current) {
|
|
@@ -16666,7 +16744,7 @@ function useYjsProvider({ config }) {
|
|
|
16666
16744
|
if (config.authToken) {
|
|
16667
16745
|
opts.password = config.authToken;
|
|
16668
16746
|
}
|
|
16669
|
-
const provider = new WebrtcProvider(
|
|
16747
|
+
const provider = new WebrtcProvider(chunkNIWO2WYI_js.validateRoomId(config.roomId), yDoc, opts);
|
|
16670
16748
|
setDoc(yDoc);
|
|
16671
16749
|
setAwareness(provider.awareness);
|
|
16672
16750
|
setClientId(provider.awareness.clientID);
|
|
@@ -16708,13 +16786,13 @@ function useYjsProvider({ config }) {
|
|
|
16708
16786
|
if (!config) {
|
|
16709
16787
|
return;
|
|
16710
16788
|
}
|
|
16711
|
-
const roomId =
|
|
16712
|
-
const transport = config.transport ??
|
|
16789
|
+
const roomId = chunkNIWO2WYI_js.validateRoomId(config.roomId);
|
|
16790
|
+
const transport = config.transport ?? chunkNIWO2WYI_js.resolveTransportForServerUrl(config.serverUrl);
|
|
16713
16791
|
if (transport === "webrtc") {
|
|
16714
16792
|
await initWebrtc();
|
|
16715
16793
|
return;
|
|
16716
16794
|
}
|
|
16717
|
-
if (
|
|
16795
|
+
if (chunkNIWO2WYI_js.isMixedContentBlocked(config.serverUrl)) {
|
|
16718
16796
|
console.warn(
|
|
16719
16797
|
`[pptx-viewer] Refusing to connect: insecure ws:// server "${config.serverUrl}" is blocked from a secure (https) page. Use a wss:// URL.`
|
|
16720
16798
|
);
|
|
@@ -16774,7 +16852,7 @@ function useYjsProvider({ config }) {
|
|
|
16774
16852
|
cleanupRef.current = null;
|
|
16775
16853
|
setStatus("error");
|
|
16776
16854
|
}
|
|
16777
|
-
},
|
|
16855
|
+
}, chunkNIWO2WYI_js.CONNECTION_TIMEOUT_MS);
|
|
16778
16856
|
}
|
|
16779
16857
|
setDoc(yDoc);
|
|
16780
16858
|
setAwareness(provider.awareness);
|
|
@@ -16847,7 +16925,7 @@ function usePresenceTracking({
|
|
|
16847
16925
|
awareness.setLocalStateField("presence", state);
|
|
16848
16926
|
lastBroadcastRef.current = Date.now();
|
|
16849
16927
|
};
|
|
16850
|
-
if (elapsed >=
|
|
16928
|
+
if (elapsed >= chunkNIWO2WYI_js.BROADCAST_THROTTLE_MS) {
|
|
16851
16929
|
if (pendingBroadcastRef.current) {
|
|
16852
16930
|
clearTimeout(pendingBroadcastRef.current);
|
|
16853
16931
|
pendingBroadcastRef.current = null;
|
|
@@ -16857,7 +16935,7 @@ function usePresenceTracking({
|
|
|
16857
16935
|
pendingBroadcastRef.current = setTimeout(() => {
|
|
16858
16936
|
pendingBroadcastRef.current = null;
|
|
16859
16937
|
flush();
|
|
16860
|
-
},
|
|
16938
|
+
}, chunkNIWO2WYI_js.BROADCAST_THROTTLE_MS - elapsed);
|
|
16861
16939
|
}
|
|
16862
16940
|
},
|
|
16863
16941
|
[awareness, userName, userColor, userAvatar, role]
|
|
@@ -16882,7 +16960,7 @@ function usePresenceTracking({
|
|
|
16882
16960
|
return;
|
|
16883
16961
|
}
|
|
16884
16962
|
const handleChange = () => {
|
|
16885
|
-
const users =
|
|
16963
|
+
const users = chunkNIWO2WYI_js.derivePresenceList(
|
|
16886
16964
|
awareness.getStates(),
|
|
16887
16965
|
localClientId,
|
|
16888
16966
|
canvasWidth,
|
|
@@ -16930,7 +17008,7 @@ function useCollaborativeState({
|
|
|
16930
17008
|
canvasWidth,
|
|
16931
17009
|
canvasHeight
|
|
16932
17010
|
}) {
|
|
16933
|
-
const userColor =
|
|
17011
|
+
const userColor = chunkNIWO2WYI_js.sanitizeColor(config?.userColor, "#6366f1");
|
|
16934
17012
|
const { status, awareness, doc, clientId, synced, retry } = useYjsProvider({ config });
|
|
16935
17013
|
const { remoteUsers, broadcastPresence } = usePresenceTracking({
|
|
16936
17014
|
awareness,
|
|
@@ -17035,10 +17113,10 @@ function useYjsDocumentSync({
|
|
|
17035
17113
|
return;
|
|
17036
17114
|
}
|
|
17037
17115
|
try {
|
|
17038
|
-
const { PptxHandler: PptxHandler2 } = await import('./dist-
|
|
17116
|
+
const { PptxHandler: PptxHandler2 } = await import('./dist-AFRACFHO.js');
|
|
17039
17117
|
const handler = new PptxHandler2();
|
|
17040
17118
|
await handler.load(sourceBytes.buffer);
|
|
17041
|
-
const currentSlides =
|
|
17119
|
+
const currentSlides = chunkNIWO2WYI_js.readSlidesFromYDoc(
|
|
17042
17120
|
doc
|
|
17043
17121
|
);
|
|
17044
17122
|
const slidesToSave = buildSaveSlides(currentSlides, templateElementsBySlideId);
|
|
@@ -17056,7 +17134,7 @@ function useYjsDocumentSync({
|
|
|
17056
17134
|
if (!doc || !isConnected) {
|
|
17057
17135
|
return;
|
|
17058
17136
|
}
|
|
17059
|
-
const docSlides =
|
|
17137
|
+
const docSlides = chunkNIWO2WYI_js.readSlidesFromYDoc(
|
|
17060
17138
|
doc
|
|
17061
17139
|
);
|
|
17062
17140
|
if (docSlides.length === 0) {
|
|
@@ -17080,11 +17158,11 @@ function useYjsDocumentSync({
|
|
|
17080
17158
|
lastSyncedRef.current = serialized;
|
|
17081
17159
|
void (async () => {
|
|
17082
17160
|
const factories = await getFactories();
|
|
17083
|
-
|
|
17161
|
+
chunkNIWO2WYI_js.reconcileSlidesInYDoc(
|
|
17084
17162
|
slides,
|
|
17085
17163
|
doc,
|
|
17086
17164
|
factories,
|
|
17087
|
-
|
|
17165
|
+
chunkNIWO2WYI_js.LOCAL_SYNC_ORIGIN
|
|
17088
17166
|
);
|
|
17089
17167
|
scheduleWriteBack();
|
|
17090
17168
|
})();
|
|
@@ -17094,10 +17172,10 @@ function useYjsDocumentSync({
|
|
|
17094
17172
|
return;
|
|
17095
17173
|
}
|
|
17096
17174
|
const handleChange = (_events, transaction) => {
|
|
17097
|
-
if (transaction?.origin ===
|
|
17175
|
+
if (transaction?.origin === chunkNIWO2WYI_js.LOCAL_SYNC_ORIGIN) {
|
|
17098
17176
|
return;
|
|
17099
17177
|
}
|
|
17100
|
-
const remoteSlides =
|
|
17178
|
+
const remoteSlides = chunkNIWO2WYI_js.readSlidesFromYDoc(
|
|
17101
17179
|
doc
|
|
17102
17180
|
);
|
|
17103
17181
|
if (remoteSlides.length === 0) {
|
|
@@ -17115,7 +17193,7 @@ function useYjsDocumentSync({
|
|
|
17115
17193
|
});
|
|
17116
17194
|
scheduleWriteBack();
|
|
17117
17195
|
};
|
|
17118
|
-
const unobserve =
|
|
17196
|
+
const unobserve = chunkNIWO2WYI_js.observeYDocSlides(
|
|
17119
17197
|
doc,
|
|
17120
17198
|
handleChange
|
|
17121
17199
|
);
|
|
@@ -17266,7 +17344,7 @@ function useLayoutSwitching(input) {
|
|
|
17266
17344
|
function useVirtualizedSlides({
|
|
17267
17345
|
totalItems,
|
|
17268
17346
|
itemHeight,
|
|
17269
|
-
overscan =
|
|
17347
|
+
overscan = chunkNIWO2WYI_js.DEFAULT_VIRTUAL_OVERSCAN
|
|
17270
17348
|
}) {
|
|
17271
17349
|
const scrollContainerRef = React3.useRef(null);
|
|
17272
17350
|
const [scrollTop, setScrollTop] = React3.useState(0);
|
|
@@ -17296,7 +17374,7 @@ function useVirtualizedSlides({
|
|
|
17296
17374
|
resizeObserver?.disconnect();
|
|
17297
17375
|
};
|
|
17298
17376
|
}, []);
|
|
17299
|
-
const range =
|
|
17377
|
+
const range = chunkNIWO2WYI_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
|
|
17300
17378
|
const safeItemHeight = Math.max(itemHeight, 1);
|
|
17301
17379
|
const scrollToIndex = React3.useCallback(
|
|
17302
17380
|
(index, behavior = "smooth") => {
|
|
@@ -17342,7 +17420,7 @@ function useTouchGestures(input) {
|
|
|
17342
17420
|
if (!el || !enabled) {
|
|
17343
17421
|
return;
|
|
17344
17422
|
}
|
|
17345
|
-
const recognizer =
|
|
17423
|
+
const recognizer = chunkNIWO2WYI_js.createTouchGestureRecognizer({
|
|
17346
17424
|
getScale: () => scaleRef.current,
|
|
17347
17425
|
minScale: MIN_ZOOM_SCALE,
|
|
17348
17426
|
maxScale: MAX_ZOOM_SCALE,
|
|
@@ -17385,7 +17463,7 @@ function scrollFocusedIntoView(keyboardInset) {
|
|
|
17385
17463
|
return;
|
|
17386
17464
|
}
|
|
17387
17465
|
const rect = active.getBoundingClientRect();
|
|
17388
|
-
const delta =
|
|
17466
|
+
const delta = chunkNIWO2WYI_js.computeScrollDelta(
|
|
17389
17467
|
{ top: rect.top, bottom: rect.bottom },
|
|
17390
17468
|
window.innerHeight,
|
|
17391
17469
|
keyboardInset
|
|
@@ -17405,8 +17483,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
17405
17483
|
return;
|
|
17406
17484
|
}
|
|
17407
17485
|
const update = () => {
|
|
17408
|
-
const metrics =
|
|
17409
|
-
const inset = metrics ?
|
|
17486
|
+
const metrics = chunkNIWO2WYI_js.readViewportMetrics(window);
|
|
17487
|
+
const inset = metrics ? chunkNIWO2WYI_js.computeKeyboardInset(metrics) : 0;
|
|
17410
17488
|
setKeyboardInset(inset);
|
|
17411
17489
|
if (inset > 0) {
|
|
17412
17490
|
window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
|
|
@@ -17417,8 +17495,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
17417
17495
|
vv.addEventListener("scroll", update);
|
|
17418
17496
|
const onFocusIn = () => {
|
|
17419
17497
|
window.requestAnimationFrame(() => {
|
|
17420
|
-
const metrics =
|
|
17421
|
-
const inset = metrics ?
|
|
17498
|
+
const metrics = chunkNIWO2WYI_js.readViewportMetrics(window);
|
|
17499
|
+
const inset = metrics ? chunkNIWO2WYI_js.computeKeyboardInset(metrics) : 0;
|
|
17422
17500
|
if (inset > 0) {
|
|
17423
17501
|
scrollFocusedIntoView(inset);
|
|
17424
17502
|
}
|
|
@@ -17431,7 +17509,7 @@ function useKeyboardInsets(enabled = true) {
|
|
|
17431
17509
|
document.removeEventListener("focusin", onFocusIn);
|
|
17432
17510
|
};
|
|
17433
17511
|
}, [enabled]);
|
|
17434
|
-
return { keyboardInset, isKeyboardOpen:
|
|
17512
|
+
return { keyboardInset, isKeyboardOpen: chunkNIWO2WYI_js.isKeyboardOpen(keyboardInset) };
|
|
17435
17513
|
}
|
|
17436
17514
|
|
|
17437
17515
|
// src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
|
|
@@ -17486,13 +17564,13 @@ function buildCanvasProps(input) {
|
|
|
17486
17564
|
if (mode === "present") {
|
|
17487
17565
|
presentation.handlePresentationAction(action);
|
|
17488
17566
|
} else if (action.url) {
|
|
17489
|
-
|
|
17567
|
+
chunkNIWO2WYI_js.safeOpenUrl(action.url);
|
|
17490
17568
|
}
|
|
17491
17569
|
};
|
|
17492
17570
|
const handleHyperlinkClick = (url) => {
|
|
17493
|
-
if (
|
|
17571
|
+
if (chunkNIWO2WYI_js.isPpactionUrl(url)) {
|
|
17494
17572
|
if (mode === "present") {
|
|
17495
|
-
const parsed =
|
|
17573
|
+
const parsed = chunkNIWO2WYI_js.parsePpactionUrl(url);
|
|
17496
17574
|
if (parsed) {
|
|
17497
17575
|
presentation.handlePresentationAction({
|
|
17498
17576
|
action: parsed.action,
|
|
@@ -17502,7 +17580,7 @@ function buildCanvasProps(input) {
|
|
|
17502
17580
|
}
|
|
17503
17581
|
return;
|
|
17504
17582
|
}
|
|
17505
|
-
|
|
17583
|
+
chunkNIWO2WYI_js.safeOpenUrl(url);
|
|
17506
17584
|
};
|
|
17507
17585
|
return {
|
|
17508
17586
|
activeSlide: effectiveSlide,
|
|
@@ -17822,7 +17900,7 @@ function buildToolbarProps(input) {
|
|
|
17822
17900
|
onOpenFile,
|
|
17823
17901
|
onOpenRecentFile,
|
|
17824
17902
|
onCreatePresentation: (templateId) => {
|
|
17825
|
-
s.setSlides(
|
|
17903
|
+
s.setSlides(chunkNIWO2WYI_js.createBackstagePresentation(templateId));
|
|
17826
17904
|
s.setActiveSlideIndex(0);
|
|
17827
17905
|
s.setSelectedElementId(null);
|
|
17828
17906
|
s.setSelectedElementIds([]);
|
|
@@ -17877,7 +17955,7 @@ function buildToolbarProps(input) {
|
|
|
17877
17955
|
isCommentsPanelOpen: s.isInspectorPaneOpen,
|
|
17878
17956
|
slideCommentCount: activeSlide?.comments?.length ?? 0,
|
|
17879
17957
|
formatPainterActive: s.formatPainterActive,
|
|
17880
|
-
canActivateFormatPainter:
|
|
17958
|
+
canActivateFormatPainter: chunkNIWO2WYI_js.hasCopyableFormat(selectedElement),
|
|
17881
17959
|
onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
|
|
17882
17960
|
isSelectionPaneOpen: s.isSelectionPaneOpen,
|
|
17883
17961
|
onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
|
|
@@ -18140,7 +18218,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
18140
18218
|
}, [incomingContent]);
|
|
18141
18219
|
const onOpenFile = React3.useCallback(() => {
|
|
18142
18220
|
void (async () => {
|
|
18143
|
-
const picked = await
|
|
18221
|
+
const picked = await chunkNIWO2WYI_js.openPptxFile();
|
|
18144
18222
|
if (picked) {
|
|
18145
18223
|
setContent(picked.buffer);
|
|
18146
18224
|
}
|
|
@@ -18148,7 +18226,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
18148
18226
|
}, []);
|
|
18149
18227
|
const onOpenRecentFile = React3.useCallback((key) => {
|
|
18150
18228
|
void (async () => {
|
|
18151
|
-
const bytes = await
|
|
18229
|
+
const bytes = await chunkNIWO2WYI_js.readBackstageRecentFile(key);
|
|
18152
18230
|
if (bytes) {
|
|
18153
18231
|
setContent(bytes);
|
|
18154
18232
|
}
|
|
@@ -18462,6 +18540,7 @@ exports.useViewerBuildingBlocks = useViewerBuildingBlocks;
|
|
|
18462
18540
|
exports.useViewerCoreState = useViewerCoreState;
|
|
18463
18541
|
exports.useViewerDialogs = useViewerDialogs;
|
|
18464
18542
|
exports.useViewerIntegration = useViewerIntegration;
|
|
18543
|
+
exports.useViewerOptions = useViewerOptions;
|
|
18465
18544
|
exports.useViewerState = useViewerState;
|
|
18466
18545
|
exports.useViewerUIState = useViewerUIState;
|
|
18467
18546
|
exports.useVirtualizedSlides = useVirtualizedSlides;
|