pptx-react-viewer 3.0.1 → 3.0.2
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 +7 -0
- package/dist/{AiChatPanel-NLIUZ5RI.js → AiChatPanel-235ZZA3Y.js} +23 -23
- package/dist/AiChatPanel-235ZZA3Y.js.br +0 -0
- package/dist/AiChatPanel-235ZZA3Y.js.gz +0 -0
- package/dist/{AiChatPanel-DMBQPAGB.mjs → AiChatPanel-DYOBY6OG.mjs} +3 -3
- package/dist/AiChatPanel-DYOBY6OG.mjs.br +0 -0
- package/dist/AiChatPanel-DYOBY6OG.mjs.gz +0 -0
- package/dist/{Model3DScene-JNZN42TU.js → Model3DScene-5QDYQF55.js} +2 -2
- package/dist/Model3DScene-5QDYQF55.js.br +0 -0
- package/dist/Model3DScene-5QDYQF55.js.gz +0 -0
- package/dist/{Model3DScene-ZO6U7YVU.mjs → Model3DScene-A3652H7T.mjs} +1 -1
- package/dist/Model3DScene-A3652H7T.mjs.br +0 -0
- package/dist/Model3DScene-A3652H7T.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-P6CVRWDQ.mjs → SurfaceChart3DScene-N66TY4SW.mjs} +1 -1
- package/dist/SurfaceChart3DScene-N66TY4SW.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-N66TY4SW.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-PGD4ZCLI.js → SurfaceChart3DScene-QHENN3AF.js} +2 -2
- package/dist/SurfaceChart3DScene-QHENN3AF.js.br +0 -0
- package/dist/SurfaceChart3DScene-QHENN3AF.js.gz +0 -0
- package/dist/{chunk-SDOQKSKI.js → chunk-35YJ5RLU.js} +10 -10
- package/dist/chunk-35YJ5RLU.js.br +0 -0
- package/dist/{chunk-SDOQKSKI.js.gz → chunk-35YJ5RLU.js.gz} +0 -0
- package/dist/{chunk-VGHEHM66.mjs → chunk-4LHG6ZL7.mjs} +185 -163
- package/dist/chunk-4LHG6ZL7.mjs.br +0 -0
- package/dist/chunk-4LHG6ZL7.mjs.gz +0 -0
- package/dist/{chunk-3MW6F3K7.js → chunk-7HUYHWQS.js} +389 -389
- package/dist/chunk-7HUYHWQS.js.br +0 -0
- package/dist/chunk-7HUYHWQS.js.gz +0 -0
- package/dist/{chunk-OB4PKKIN.mjs → chunk-EVXT7HLY.mjs} +1 -1
- package/dist/chunk-EVXT7HLY.mjs.br +0 -0
- package/dist/chunk-EVXT7HLY.mjs.gz +0 -0
- package/dist/{chunk-WFMSDYVQ.js → chunk-GJ7E44BG.js} +3 -3
- package/dist/chunk-GJ7E44BG.js.br +0 -0
- package/dist/chunk-GJ7E44BG.js.gz +0 -0
- package/dist/{chunk-OXPD2UYI.mjs → chunk-M2TISD4A.mjs} +10 -10
- package/dist/chunk-M2TISD4A.mjs.br +0 -0
- package/dist/{chunk-OXPD2UYI.mjs.gz → chunk-M2TISD4A.mjs.gz} +0 -0
- package/dist/{chunk-S6PFSR7I.mjs → chunk-QG7TXWXP.mjs} +1 -1
- package/dist/chunk-QG7TXWXP.mjs.br +0 -0
- package/dist/chunk-QG7TXWXP.mjs.gz +0 -0
- package/dist/{chunk-54SDLPJY.js → chunk-RYLLTHFD.js} +1218 -1196
- package/dist/chunk-RYLLTHFD.js.br +0 -0
- package/dist/chunk-RYLLTHFD.js.gz +0 -0
- package/dist/{chunk-XMLPTDPM.js → chunk-UU6NFFRR.js} +147 -147
- package/dist/chunk-UU6NFFRR.js.br +0 -0
- package/dist/chunk-UU6NFFRR.js.gz +0 -0
- package/dist/{chunk-BGAJLL4N.mjs → chunk-YISXETNN.mjs} +2 -2
- package/dist/chunk-YISXETNN.mjs.br +0 -0
- package/dist/chunk-YISXETNN.mjs.gz +0 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -45
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.js +78 -78
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +3 -3
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/viewer/index.js +26 -26
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +5 -5
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +2 -2
- package/dist/AiChatPanel-DMBQPAGB.mjs.br +0 -0
- package/dist/AiChatPanel-DMBQPAGB.mjs.gz +0 -0
- package/dist/AiChatPanel-NLIUZ5RI.js.br +0 -0
- package/dist/AiChatPanel-NLIUZ5RI.js.gz +0 -0
- package/dist/Model3DScene-JNZN42TU.js.br +0 -0
- package/dist/Model3DScene-JNZN42TU.js.gz +0 -0
- package/dist/Model3DScene-ZO6U7YVU.mjs.br +0 -0
- package/dist/Model3DScene-ZO6U7YVU.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-P6CVRWDQ.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-P6CVRWDQ.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-PGD4ZCLI.js.br +0 -0
- package/dist/SurfaceChart3DScene-PGD4ZCLI.js.gz +0 -0
- package/dist/chunk-3MW6F3K7.js.br +0 -0
- package/dist/chunk-3MW6F3K7.js.gz +0 -0
- package/dist/chunk-54SDLPJY.js.br +0 -0
- package/dist/chunk-54SDLPJY.js.gz +0 -0
- package/dist/chunk-BGAJLL4N.mjs.br +0 -0
- package/dist/chunk-BGAJLL4N.mjs.gz +0 -0
- package/dist/chunk-OB4PKKIN.mjs.br +0 -0
- package/dist/chunk-OB4PKKIN.mjs.gz +0 -0
- package/dist/chunk-OXPD2UYI.mjs.br +0 -0
- package/dist/chunk-S6PFSR7I.mjs.br +0 -0
- package/dist/chunk-S6PFSR7I.mjs.gz +0 -0
- package/dist/chunk-SDOQKSKI.js.br +0 -0
- package/dist/chunk-VGHEHM66.mjs.br +0 -0
- package/dist/chunk-VGHEHM66.mjs.gz +0 -0
- package/dist/chunk-WFMSDYVQ.js.br +0 -0
- package/dist/chunk-WFMSDYVQ.js.gz +0 -0
- package/dist/chunk-XMLPTDPM.js.br +0 -0
- package/dist/chunk-XMLPTDPM.js.gz +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkUU6NFFRR_js = require('./chunk-UU6NFFRR.js');
|
|
4
4
|
var chunkU6A5FWWE_js = require('./chunk-U6A5FWWE.js');
|
|
5
|
-
var
|
|
5
|
+
var chunk35YJ5RLU_js = require('./chunk-35YJ5RLU.js');
|
|
6
6
|
var react = require('react');
|
|
7
7
|
var JSZip = require('jszip');
|
|
8
8
|
var reactI18next = require('react-i18next');
|
|
@@ -14,7 +14,7 @@ var JSZip__default = /*#__PURE__*/_interopDefault(JSZip);
|
|
|
14
14
|
function useVirtualizedSlides({
|
|
15
15
|
totalItems,
|
|
16
16
|
itemHeight,
|
|
17
|
-
overscan =
|
|
17
|
+
overscan = chunk35YJ5RLU_js.DEFAULT_VIRTUAL_OVERSCAN
|
|
18
18
|
}) {
|
|
19
19
|
const scrollContainerRef = react.useRef(null);
|
|
20
20
|
const [scrollTop, setScrollTop] = react.useState(0);
|
|
@@ -44,7 +44,7 @@ function useVirtualizedSlides({
|
|
|
44
44
|
resizeObserver?.disconnect();
|
|
45
45
|
};
|
|
46
46
|
}, []);
|
|
47
|
-
const range =
|
|
47
|
+
const range = chunk35YJ5RLU_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
|
|
48
48
|
const safeItemHeight = Math.max(itemHeight, 1);
|
|
49
49
|
const scrollToIndex = react.useCallback(
|
|
50
50
|
(index, behavior = "smooth") => {
|
|
@@ -85,7 +85,7 @@ function usePresenceTracking({
|
|
|
85
85
|
}) {
|
|
86
86
|
const [remoteUsers, setRemoteUsers] = react.useState([]);
|
|
87
87
|
const projectorRef = react.useRef(null);
|
|
88
|
-
projectorRef.current ??=
|
|
88
|
+
projectorRef.current ??= chunk35YJ5RLU_js.createPresenceProjector();
|
|
89
89
|
const projector = projectorRef.current;
|
|
90
90
|
const lastBroadcastRef = react.useRef(0);
|
|
91
91
|
const pendingBroadcastRef = react.useRef(null);
|
|
@@ -110,7 +110,7 @@ function usePresenceTracking({
|
|
|
110
110
|
awareness.setLocalStateField("presence", state);
|
|
111
111
|
lastBroadcastRef.current = Date.now();
|
|
112
112
|
};
|
|
113
|
-
if (elapsed >=
|
|
113
|
+
if (elapsed >= chunk35YJ5RLU_js.BROADCAST_THROTTLE_MS) {
|
|
114
114
|
if (pendingBroadcastRef.current) {
|
|
115
115
|
clearTimeout(pendingBroadcastRef.current);
|
|
116
116
|
pendingBroadcastRef.current = null;
|
|
@@ -120,7 +120,7 @@ function usePresenceTracking({
|
|
|
120
120
|
pendingBroadcastRef.current = setTimeout(() => {
|
|
121
121
|
pendingBroadcastRef.current = null;
|
|
122
122
|
flush();
|
|
123
|
-
},
|
|
123
|
+
}, chunk35YJ5RLU_js.BROADCAST_THROTTLE_MS - elapsed);
|
|
124
124
|
}
|
|
125
125
|
},
|
|
126
126
|
[awareness, userName, userColor, userAvatar, role]
|
|
@@ -200,7 +200,7 @@ function useYjsProvider({ config }) {
|
|
|
200
200
|
const departureRef = react.useRef(null);
|
|
201
201
|
const gateRef = react.useRef(null);
|
|
202
202
|
if (!gateRef.current) {
|
|
203
|
-
gateRef.current =
|
|
203
|
+
gateRef.current = chunk35YJ5RLU_js.createSyncGate(() => setSynced(true));
|
|
204
204
|
}
|
|
205
205
|
const teardown = react.useCallback(() => {
|
|
206
206
|
if (timeoutRef.current) {
|
|
@@ -220,7 +220,7 @@ function useYjsProvider({ config }) {
|
|
|
220
220
|
const buildCleanup = react.useCallback(
|
|
221
221
|
(provider, yDoc) => () => {
|
|
222
222
|
announceDeparture();
|
|
223
|
-
|
|
223
|
+
chunk35YJ5RLU_js.clearLocalAwareness(provider.awareness);
|
|
224
224
|
provider.destroy();
|
|
225
225
|
yDoc.destroy();
|
|
226
226
|
setDoc(null);
|
|
@@ -245,9 +245,9 @@ function useYjsProvider({ config }) {
|
|
|
245
245
|
if (config.authToken) {
|
|
246
246
|
opts.password = config.authToken;
|
|
247
247
|
}
|
|
248
|
-
const roomId =
|
|
248
|
+
const roomId = chunk35YJ5RLU_js.validateRoomId(config.roomId);
|
|
249
249
|
const provider = new WebrtcProvider(roomId, yDoc, opts);
|
|
250
|
-
departureRef.current =
|
|
250
|
+
departureRef.current = chunk35YJ5RLU_js.createDepartureChannel(roomId, provider.awareness);
|
|
251
251
|
setDoc(yDoc);
|
|
252
252
|
setAwareness(provider.awareness);
|
|
253
253
|
setClientId(provider.awareness.clientID);
|
|
@@ -289,13 +289,13 @@ function useYjsProvider({ config }) {
|
|
|
289
289
|
if (!config) {
|
|
290
290
|
return;
|
|
291
291
|
}
|
|
292
|
-
const roomId =
|
|
293
|
-
const transport = config.transport ??
|
|
292
|
+
const roomId = chunk35YJ5RLU_js.validateRoomId(config.roomId);
|
|
293
|
+
const transport = config.transport ?? chunk35YJ5RLU_js.resolveTransportForServerUrl(config.serverUrl);
|
|
294
294
|
if (transport === "webrtc") {
|
|
295
295
|
await initWebrtc();
|
|
296
296
|
return;
|
|
297
297
|
}
|
|
298
|
-
if (
|
|
298
|
+
if (chunk35YJ5RLU_js.isMixedContentBlocked(config.serverUrl)) {
|
|
299
299
|
console.warn(
|
|
300
300
|
`[pptx-viewer] Refusing to connect: insecure ws:// server "${config.serverUrl}" is blocked from a secure (https) page. Use a wss:// URL.`
|
|
301
301
|
);
|
|
@@ -309,7 +309,7 @@ function useYjsProvider({ config }) {
|
|
|
309
309
|
const provider = new WebsocketProvider(config.serverUrl, roomId, yDoc, {
|
|
310
310
|
params: config.authToken ? { token: config.authToken } : void 0
|
|
311
311
|
});
|
|
312
|
-
departureRef.current =
|
|
312
|
+
departureRef.current = chunk35YJ5RLU_js.createDepartureChannel(roomId, provider.awareness);
|
|
313
313
|
let connected = false;
|
|
314
314
|
const handleStatus = (event) => {
|
|
315
315
|
if (event.status === "connected") {
|
|
@@ -349,7 +349,7 @@ function useYjsProvider({ config }) {
|
|
|
349
349
|
provider.off("status", handleStatus);
|
|
350
350
|
provider.off("sync", handleSynced);
|
|
351
351
|
announceDeparture();
|
|
352
|
-
|
|
352
|
+
chunk35YJ5RLU_js.clearLocalAwareness(provider.awareness);
|
|
353
353
|
provider.destroy();
|
|
354
354
|
yDoc.destroy();
|
|
355
355
|
setDoc(null);
|
|
@@ -358,7 +358,7 @@ function useYjsProvider({ config }) {
|
|
|
358
358
|
cleanupRef.current = null;
|
|
359
359
|
setStatus("error");
|
|
360
360
|
}
|
|
361
|
-
},
|
|
361
|
+
}, chunk35YJ5RLU_js.CONNECTION_TIMEOUT_MS);
|
|
362
362
|
}
|
|
363
363
|
setDoc(yDoc);
|
|
364
364
|
setAwareness(provider.awareness);
|
|
@@ -367,7 +367,7 @@ function useYjsProvider({ config }) {
|
|
|
367
367
|
provider.off("status", handleStatus);
|
|
368
368
|
provider.off("sync", handleSynced);
|
|
369
369
|
announceDeparture();
|
|
370
|
-
|
|
370
|
+
chunk35YJ5RLU_js.clearLocalAwareness(provider.awareness);
|
|
371
371
|
provider.destroy();
|
|
372
372
|
yDoc.destroy();
|
|
373
373
|
setDoc(null);
|
|
@@ -393,7 +393,7 @@ function useYjsProvider({ config }) {
|
|
|
393
393
|
]);
|
|
394
394
|
react.useEffect(() => {
|
|
395
395
|
init();
|
|
396
|
-
const disposeTeardown =
|
|
396
|
+
const disposeTeardown = chunk35YJ5RLU_js.registerCollaborationTeardown({
|
|
397
397
|
leave: teardown,
|
|
398
398
|
rejoin: init
|
|
399
399
|
});
|
|
@@ -414,7 +414,7 @@ function useCollaborativeState({
|
|
|
414
414
|
canvasWidth,
|
|
415
415
|
canvasHeight
|
|
416
416
|
}) {
|
|
417
|
-
const userColor =
|
|
417
|
+
const userColor = chunk35YJ5RLU_js.sanitizeColor(config?.userColor, "#6366f1");
|
|
418
418
|
const { status, awareness, doc, clientId, synced, retry } = useYjsProvider({ config });
|
|
419
419
|
const { remoteUsers, broadcastPresence } = usePresenceTracking({
|
|
420
420
|
awareness,
|
|
@@ -532,8 +532,8 @@ function useEditorHistory(input) {
|
|
|
532
532
|
width: canvasSize.width,
|
|
533
533
|
height: canvasSize.height,
|
|
534
534
|
activeSlideIndex,
|
|
535
|
-
slides: slides.map(
|
|
536
|
-
templateElementsBySlideId:
|
|
535
|
+
slides: slides.map(chunk35YJ5RLU_js.cloneSlide),
|
|
536
|
+
templateElementsBySlideId: chunk35YJ5RLU_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
|
|
537
537
|
...actionLabel ? { actionLabel } : {}
|
|
538
538
|
};
|
|
539
539
|
},
|
|
@@ -546,9 +546,9 @@ function useEditorHistory(input) {
|
|
|
546
546
|
width: snapshot.width,
|
|
547
547
|
height: snapshot.height
|
|
548
548
|
});
|
|
549
|
-
setSlides(snapshot.slides.map(
|
|
549
|
+
setSlides(snapshot.slides.map(chunk35YJ5RLU_js.cloneSlide));
|
|
550
550
|
setTemplateElementsBySlideId(
|
|
551
|
-
|
|
551
|
+
chunk35YJ5RLU_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
|
|
552
552
|
);
|
|
553
553
|
setActiveSlideIndex(Math.min(snapshot.activeSlideIndex, maxSlideIndex));
|
|
554
554
|
setSelectedElementIds([]);
|
|
@@ -587,8 +587,8 @@ function useEditorHistory(input) {
|
|
|
587
587
|
const currentSnapshot = buildHistorySnapshot();
|
|
588
588
|
historyFutureRef.current.push(currentSnapshot);
|
|
589
589
|
isApplyingHistoryRef.current = true;
|
|
590
|
-
const nextSnapshot =
|
|
591
|
-
lastHistorySnapshotRef.current =
|
|
590
|
+
const nextSnapshot = chunkUU6NFFRR_js.cloneHistorySnapshot(previousSnapshot);
|
|
591
|
+
lastHistorySnapshotRef.current = chunkUU6NFFRR_js.cloneHistorySnapshot(nextSnapshot);
|
|
592
592
|
lastHistorySerializedRef.current = serializeDocument(nextSnapshot);
|
|
593
593
|
applyHistorySnapshot(nextSnapshot);
|
|
594
594
|
updateHistoryAvailability();
|
|
@@ -609,8 +609,8 @@ function useEditorHistory(input) {
|
|
|
609
609
|
const currentSnapshot = buildHistorySnapshot();
|
|
610
610
|
historyPastRef.current.push(currentSnapshot);
|
|
611
611
|
isApplyingHistoryRef.current = true;
|
|
612
|
-
const targetSnapshot =
|
|
613
|
-
lastHistorySnapshotRef.current =
|
|
612
|
+
const targetSnapshot = chunkUU6NFFRR_js.cloneHistorySnapshot(nextSnapshot);
|
|
613
|
+
lastHistorySnapshotRef.current = chunkUU6NFFRR_js.cloneHistorySnapshot(targetSnapshot);
|
|
614
614
|
lastHistorySerializedRef.current = serializeDocument(targetSnapshot);
|
|
615
615
|
applyHistorySnapshot(targetSnapshot);
|
|
616
616
|
updateHistoryAvailability();
|
|
@@ -628,7 +628,7 @@ function useEditorHistory(input) {
|
|
|
628
628
|
historyPastRef.current = [];
|
|
629
629
|
historyFutureRef.current = [];
|
|
630
630
|
if (initialSnapshot) {
|
|
631
|
-
const clonedInitial =
|
|
631
|
+
const clonedInitial = chunkUU6NFFRR_js.cloneHistorySnapshot(initialSnapshot);
|
|
632
632
|
lastHistorySnapshotRef.current = clonedInitial;
|
|
633
633
|
lastHistorySerializedRef.current = serializeDocument(clonedInitial);
|
|
634
634
|
} else {
|
|
@@ -676,19 +676,19 @@ function useEditorHistory(input) {
|
|
|
676
676
|
}
|
|
677
677
|
const previousSnapshot = lastHistorySnapshotRef.current;
|
|
678
678
|
if (!previousSnapshot) {
|
|
679
|
-
lastHistorySnapshotRef.current =
|
|
679
|
+
lastHistorySnapshotRef.current = chunkUU6NFFRR_js.cloneHistorySnapshot(snapshot);
|
|
680
680
|
lastHistorySerializedRef.current = serialized;
|
|
681
681
|
lastCheapHashRef.current = cheapHash;
|
|
682
682
|
updateHistoryAvailability();
|
|
683
683
|
return;
|
|
684
684
|
}
|
|
685
685
|
onDirtyRef.current?.();
|
|
686
|
-
historyPastRef.current.push(
|
|
686
|
+
historyPastRef.current.push(chunkUU6NFFRR_js.cloneHistorySnapshot(previousSnapshot));
|
|
687
687
|
while (historyPastRef.current.length > Math.max(1, maxHistoryEntries)) {
|
|
688
688
|
historyPastRef.current.shift();
|
|
689
689
|
}
|
|
690
690
|
historyFutureRef.current = [];
|
|
691
|
-
lastHistorySnapshotRef.current =
|
|
691
|
+
lastHistorySnapshotRef.current = chunkUU6NFFRR_js.cloneHistorySnapshot(snapshot);
|
|
692
692
|
lastHistorySerializedRef.current = serialized;
|
|
693
693
|
lastCheapHashRef.current = cheapHash;
|
|
694
694
|
updateHistoryAvailability();
|
|
@@ -748,9 +748,9 @@ function useZoomViewport({
|
|
|
748
748
|
const canvasStageRef = react.useRef(null);
|
|
749
749
|
const canvasViewportRef = react.useRef(null);
|
|
750
750
|
const renderScaleRef = react.useRef(1);
|
|
751
|
-
const wheelBufferRef = react.useRef(
|
|
751
|
+
const wheelBufferRef = react.useRef(chunk35YJ5RLU_js.createWheelStepBuffer());
|
|
752
752
|
const storeRef = react.useRef(null);
|
|
753
|
-
storeRef.current ??=
|
|
753
|
+
storeRef.current ??= chunk35YJ5RLU_js.createViewerZoomStore();
|
|
754
754
|
const store = storeRef.current;
|
|
755
755
|
const scale = useViewerStore(store, selectZoom);
|
|
756
756
|
const setScale = react.useCallback(
|
|
@@ -811,7 +811,7 @@ function useZoomViewport({
|
|
|
811
811
|
if (!wrapper || !canvasViewport) {
|
|
812
812
|
return;
|
|
813
813
|
}
|
|
814
|
-
const boundedScale =
|
|
814
|
+
const boundedScale = chunk35YJ5RLU_js.clampZoomScale(nextScale);
|
|
815
815
|
const nextEditorScale = fitScale * boundedScale;
|
|
816
816
|
const centerX = (bounds.minX + bounds.maxX) / 2;
|
|
817
817
|
const centerY = (bounds.minY + bounds.maxY) / 2;
|
|
@@ -848,29 +848,29 @@ function useZoomViewport({
|
|
|
848
848
|
selectedElements.forEach((element) => {
|
|
849
849
|
minX = Math.min(minX, element.x);
|
|
850
850
|
minY = Math.min(minY, element.y);
|
|
851
|
-
maxX = Math.max(maxX, element.x + Math.max(element.width,
|
|
852
|
-
maxY = Math.max(maxY, element.y + Math.max(element.height,
|
|
851
|
+
maxX = Math.max(maxX, element.x + Math.max(element.width, chunkUU6NFFRR_js.MIN_ELEMENT_SIZE));
|
|
852
|
+
maxY = Math.max(maxY, element.y + Math.max(element.height, chunkUU6NFFRR_js.MIN_ELEMENT_SIZE));
|
|
853
853
|
});
|
|
854
854
|
if (!Number.isFinite(minX) || !Number.isFinite(minY) || !Number.isFinite(maxX) || !Number.isFinite(maxY)) {
|
|
855
855
|
return;
|
|
856
856
|
}
|
|
857
857
|
const selectionBounds = { minX, minY, maxX, maxY };
|
|
858
|
-
const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX,
|
|
859
|
-
const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY,
|
|
858
|
+
const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunkUU6NFFRR_js.MIN_ELEMENT_SIZE);
|
|
859
|
+
const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkUU6NFFRR_js.MIN_ELEMENT_SIZE);
|
|
860
860
|
const availableWidth = Math.max(
|
|
861
|
-
effectiveEditorDimensions.width -
|
|
862
|
-
|
|
861
|
+
effectiveEditorDimensions.width - chunkUU6NFFRR_js.ZOOM_TO_SELECTION_PADDING,
|
|
862
|
+
chunkUU6NFFRR_js.MIN_ELEMENT_SIZE
|
|
863
863
|
);
|
|
864
864
|
const availableHeight = Math.max(
|
|
865
|
-
effectiveEditorDimensions.height -
|
|
866
|
-
|
|
865
|
+
effectiveEditorDimensions.height - chunkUU6NFFRR_js.ZOOM_TO_SELECTION_PADDING,
|
|
866
|
+
chunkUU6NFFRR_js.MIN_ELEMENT_SIZE
|
|
867
867
|
);
|
|
868
868
|
const targetEditorScale = Math.min(
|
|
869
869
|
availableWidth / boundsWidth,
|
|
870
870
|
availableHeight / boundsHeight
|
|
871
871
|
);
|
|
872
872
|
const safeFitScale = fitScale > Number.EPSILON ? fitScale : Number.EPSILON;
|
|
873
|
-
const nextScale =
|
|
873
|
+
const nextScale = chunk35YJ5RLU_js.clampZoomScale(targetEditorScale / safeFitScale);
|
|
874
874
|
setScale(nextScale);
|
|
875
875
|
window.requestAnimationFrame(() => {
|
|
876
876
|
window.requestAnimationFrame(() => {
|
|
@@ -887,14 +887,14 @@ function useZoomViewport({
|
|
|
887
887
|
]);
|
|
888
888
|
const handleWheel = react.useCallback(
|
|
889
889
|
(event) => {
|
|
890
|
-
const mapped =
|
|
890
|
+
const mapped = chunk35YJ5RLU_js.mapEditingWheel(event, wheelBufferRef.current, true);
|
|
891
891
|
if (mapped.intent !== "zoom") {
|
|
892
892
|
return;
|
|
893
893
|
}
|
|
894
894
|
event.preventDefault();
|
|
895
895
|
store.dispatch({
|
|
896
896
|
type: "set-zoom",
|
|
897
|
-
zoom:
|
|
897
|
+
zoom: chunk35YJ5RLU_js.clampZoomScale(store.getState().zoom + mapped.deltaScale)
|
|
898
898
|
});
|
|
899
899
|
},
|
|
900
900
|
[store]
|
|
@@ -982,7 +982,7 @@ function applyAnimationGroupSteps(group, onPlayActionSound, setPresentationEleme
|
|
|
982
982
|
const command = step.command;
|
|
983
983
|
const timer = window.setTimeout(
|
|
984
984
|
() => {
|
|
985
|
-
|
|
985
|
+
chunkUU6NFFRR_js.executeMediaCommand(command);
|
|
986
986
|
},
|
|
987
987
|
Math.max(0, step.delayMs)
|
|
988
988
|
);
|
|
@@ -1119,7 +1119,7 @@ function scheduleEntranceAnimationTimers(slide, setPresentationAnimations, prese
|
|
|
1119
1119
|
}))
|
|
1120
1120
|
);
|
|
1121
1121
|
entranceAnimations.forEach((animation, animationIndex) => {
|
|
1122
|
-
const delay =
|
|
1122
|
+
const delay = chunk35YJ5RLU_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
|
|
1123
1123
|
const timer = window.setTimeout(() => {
|
|
1124
1124
|
setPresentationAnimations(
|
|
1125
1125
|
(previousAnimations) => previousAnimations.map(
|
|
@@ -1151,7 +1151,7 @@ function useAnimationPlayback(input) {
|
|
|
1151
1151
|
(controller, group) => {
|
|
1152
1152
|
driveBuildReveal(
|
|
1153
1153
|
controller,
|
|
1154
|
-
|
|
1154
|
+
chunk35YJ5RLU_js.PresentationAnimationController.collectBuildStepIds(group),
|
|
1155
1155
|
setPresentationElementStates,
|
|
1156
1156
|
buildRafRef
|
|
1157
1157
|
);
|
|
@@ -1220,7 +1220,7 @@ function useAnimationPlayback(input) {
|
|
|
1220
1220
|
setHoverTriggerShapeIds(/* @__PURE__ */ new Set());
|
|
1221
1221
|
return;
|
|
1222
1222
|
}
|
|
1223
|
-
const controller =
|
|
1223
|
+
const controller = chunk35YJ5RLU_js.PresentationAnimationController.fromSlide(slide);
|
|
1224
1224
|
controllerRef.current = controller;
|
|
1225
1225
|
setPresentationKeyframesCss(controller.keyframesCss);
|
|
1226
1226
|
setInteractiveTriggerShapeIds(controller.interactiveTriggerShapeIds);
|
|
@@ -1378,12 +1378,12 @@ function useAnimationPlayback(input) {
|
|
|
1378
1378
|
presentationTimersRef
|
|
1379
1379
|
};
|
|
1380
1380
|
}
|
|
1381
|
-
var PRESENTER_CHANNEL_NAME =
|
|
1382
|
-
var AUDIENCE_HASH =
|
|
1383
|
-
var PRESENTER_MSG_ORIGIN =
|
|
1384
|
-
var AUDIENCE_NONCE_KEY =
|
|
1381
|
+
var PRESENTER_CHANNEL_NAME = chunk35YJ5RLU_js.PRESENTATION_CHANNEL_NAME;
|
|
1382
|
+
var AUDIENCE_HASH = chunk35YJ5RLU_js.PRESENTATION_HASH;
|
|
1383
|
+
var PRESENTER_MSG_ORIGIN = chunk35YJ5RLU_js.PRESENTATION_MESSAGE_ORIGIN;
|
|
1384
|
+
var AUDIENCE_NONCE_KEY = chunk35YJ5RLU_js.PRESENTATION_NONCE_KEY;
|
|
1385
1385
|
function generateSessionId() {
|
|
1386
|
-
return
|
|
1386
|
+
return chunk35YJ5RLU_js.createPresentationSessionId();
|
|
1387
1387
|
}
|
|
1388
1388
|
function parseAudienceNonce() {
|
|
1389
1389
|
const hash = window.location.hash;
|
|
@@ -1419,7 +1419,7 @@ function usePresenterWindow(input) {
|
|
|
1419
1419
|
}, []);
|
|
1420
1420
|
const swapDisplays = react.useCallback(async () => {
|
|
1421
1421
|
const audience = audienceWindowRef.current;
|
|
1422
|
-
return audience && !audience.closed ?
|
|
1422
|
+
return audience && !audience.closed ? chunk35YJ5RLU_js.swapPresentationWindows(window, audience) : false;
|
|
1423
1423
|
}, []);
|
|
1424
1424
|
const syncSlideToAudience = react.useCallback(
|
|
1425
1425
|
(slideIndex) => {
|
|
@@ -1483,7 +1483,7 @@ function usePresenterWindow(input) {
|
|
|
1483
1483
|
pollTimerRef.current = null;
|
|
1484
1484
|
}
|
|
1485
1485
|
if (closingSessionId) {
|
|
1486
|
-
void
|
|
1486
|
+
void chunk35YJ5RLU_js.clearAudienceContent(closingSessionId);
|
|
1487
1487
|
}
|
|
1488
1488
|
}, [getChannel]);
|
|
1489
1489
|
const openAudienceWindow = react.useCallback(() => {
|
|
@@ -1501,10 +1501,10 @@ function usePresenterWindow(input) {
|
|
|
1501
1501
|
audienceWindowRef.current = blankWin;
|
|
1502
1502
|
const sessionId = generateSessionId();
|
|
1503
1503
|
sessionIdRef.current = sessionId;
|
|
1504
|
-
const audienceUrl =
|
|
1505
|
-
void
|
|
1504
|
+
const audienceUrl = chunk35YJ5RLU_js.buildPresentationAudienceUrl(window.location.href, sessionId);
|
|
1505
|
+
void chunk35YJ5RLU_js.resolveAudienceScreenPlacement(window).then((placement) => {
|
|
1506
1506
|
if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
|
|
1507
|
-
|
|
1507
|
+
chunk35YJ5RLU_js.placeAudienceWindow(blankWin, placement);
|
|
1508
1508
|
}
|
|
1509
1509
|
return void 0;
|
|
1510
1510
|
});
|
|
@@ -1534,7 +1534,7 @@ function usePresenterWindow(input) {
|
|
|
1534
1534
|
}
|
|
1535
1535
|
};
|
|
1536
1536
|
if (content) {
|
|
1537
|
-
void
|
|
1537
|
+
void chunk35YJ5RLU_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
|
|
1538
1538
|
} else {
|
|
1539
1539
|
navigateOrClose(true);
|
|
1540
1540
|
}
|
|
@@ -1560,7 +1560,7 @@ function usePresenterWindow(input) {
|
|
|
1560
1560
|
}
|
|
1561
1561
|
const handleMessage = (event) => {
|
|
1562
1562
|
const message = event.data;
|
|
1563
|
-
if (
|
|
1563
|
+
if (chunk35YJ5RLU_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
|
|
1564
1564
|
syncStateToAudience(snapshotRef.current);
|
|
1565
1565
|
}
|
|
1566
1566
|
};
|
|
@@ -1589,7 +1589,7 @@ function usePresenterWindow(input) {
|
|
|
1589
1589
|
react.useEffect(() => {
|
|
1590
1590
|
const handleBeforeUnload = () => {
|
|
1591
1591
|
if (sessionIdRef.current) {
|
|
1592
|
-
void
|
|
1592
|
+
void chunk35YJ5RLU_js.clearAudienceContent(sessionIdRef.current);
|
|
1593
1593
|
}
|
|
1594
1594
|
};
|
|
1595
1595
|
window.addEventListener("beforeunload", handleBeforeUnload);
|
|
@@ -1651,7 +1651,7 @@ function useAudienceMode(input) {
|
|
|
1651
1651
|
}
|
|
1652
1652
|
channel.onmessage = (event) => {
|
|
1653
1653
|
const data = event.data;
|
|
1654
|
-
if (!
|
|
1654
|
+
if (!chunk35YJ5RLU_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
|
|
1655
1655
|
return;
|
|
1656
1656
|
}
|
|
1657
1657
|
if (expectedSessionId && data.sessionId !== expectedSessionId) {
|
|
@@ -1667,16 +1667,16 @@ function useAudienceMode(input) {
|
|
|
1667
1667
|
}
|
|
1668
1668
|
if (data.type === "presenter-exit") {
|
|
1669
1669
|
if (expectedSessionId) {
|
|
1670
|
-
void
|
|
1670
|
+
void chunk35YJ5RLU_js.clearAudienceContent(expectedSessionId);
|
|
1671
1671
|
}
|
|
1672
|
-
if (
|
|
1672
|
+
if (chunk35YJ5RLU_js.endAudienceDisplay(window)) {
|
|
1673
1673
|
handlers.onPresenterEnded?.();
|
|
1674
1674
|
}
|
|
1675
1675
|
}
|
|
1676
1676
|
};
|
|
1677
1677
|
if (expectedSessionId) {
|
|
1678
1678
|
channel.postMessage({
|
|
1679
|
-
origin:
|
|
1679
|
+
origin: chunk35YJ5RLU_js.PRESENTATION_MESSAGE_ORIGIN,
|
|
1680
1680
|
type: "audience-ready",
|
|
1681
1681
|
sessionId: expectedSessionId
|
|
1682
1682
|
});
|
|
@@ -1690,7 +1690,7 @@ function useAudienceMode(input) {
|
|
|
1690
1690
|
}, []);
|
|
1691
1691
|
}
|
|
1692
1692
|
function usePresentationKeyboard(input) {
|
|
1693
|
-
const wheelBufferRef = react.useRef(
|
|
1693
|
+
const wheelBufferRef = react.useRef(chunk35YJ5RLU_js.createWheelStepBuffer());
|
|
1694
1694
|
const {
|
|
1695
1695
|
mode,
|
|
1696
1696
|
movePresentationSlide,
|
|
@@ -1711,14 +1711,14 @@ function usePresentationKeyboard(input) {
|
|
|
1711
1711
|
presentationSlideIndex,
|
|
1712
1712
|
setShowRehearsalSummary
|
|
1713
1713
|
} = input;
|
|
1714
|
-
const keyBufferRef = react.useRef(
|
|
1714
|
+
const keyBufferRef = react.useRef(chunk35YJ5RLU_js.createPresentationKeyBuffer());
|
|
1715
1715
|
react.useEffect(() => {
|
|
1716
|
-
if (mode !== "present" || !
|
|
1717
|
-
keyBufferRef.current =
|
|
1716
|
+
if (mode !== "present" || !chunk35YJ5RLU_js.acceptsPresentationInput()) {
|
|
1717
|
+
keyBufferRef.current = chunk35YJ5RLU_js.createPresentationKeyBuffer();
|
|
1718
1718
|
return;
|
|
1719
1719
|
}
|
|
1720
1720
|
const handleKeyDown = (event) => {
|
|
1721
|
-
const mapped =
|
|
1721
|
+
const mapped = chunk35YJ5RLU_js.mapPresentationKey(event, keyBufferRef.current);
|
|
1722
1722
|
if (mapped.action === "none") {
|
|
1723
1723
|
return;
|
|
1724
1724
|
}
|
|
@@ -1738,12 +1738,12 @@ function usePresentationKeyboard(input) {
|
|
|
1738
1738
|
movePresentationSlide(-1);
|
|
1739
1739
|
return;
|
|
1740
1740
|
case "first": {
|
|
1741
|
-
const first =
|
|
1741
|
+
const first = chunk35YJ5RLU_js.firstShowSlideIndex(showSlideIndexes);
|
|
1742
1742
|
navigateToSlide(first ?? 0);
|
|
1743
1743
|
return;
|
|
1744
1744
|
}
|
|
1745
1745
|
case "last": {
|
|
1746
|
-
const last =
|
|
1746
|
+
const last = chunk35YJ5RLU_js.lastShowSlideIndex(showSlideIndexes);
|
|
1747
1747
|
navigateToSlide(last ?? Math.max(0, slideCount - 1));
|
|
1748
1748
|
return;
|
|
1749
1749
|
}
|
|
@@ -1781,10 +1781,10 @@ function usePresentationKeyboard(input) {
|
|
|
1781
1781
|
}
|
|
1782
1782
|
};
|
|
1783
1783
|
const handleWheel = (event) => {
|
|
1784
|
-
if (mode !== "present" || !
|
|
1784
|
+
if (mode !== "present" || !chunk35YJ5RLU_js.acceptsPresentationInput()) {
|
|
1785
1785
|
return;
|
|
1786
1786
|
}
|
|
1787
|
-
const mapped =
|
|
1787
|
+
const mapped = chunk35YJ5RLU_js.mapPresentationWheel(event, wheelBufferRef.current);
|
|
1788
1788
|
if (mapped.intent === "next-slide") {
|
|
1789
1789
|
event.preventDefault();
|
|
1790
1790
|
movePresentationSlide(1);
|
|
@@ -1917,7 +1917,7 @@ function useRehearsalTimings(input) {
|
|
|
1917
1917
|
|
|
1918
1918
|
// src/viewer/hooks/presentation-mode/presentation-actions.ts
|
|
1919
1919
|
function handlePresentationActionImpl(action, deps) {
|
|
1920
|
-
|
|
1920
|
+
chunk35YJ5RLU_js.runPresentationAction(
|
|
1921
1921
|
action,
|
|
1922
1922
|
{ slideCount: deps.slidesLength },
|
|
1923
1923
|
{
|
|
@@ -1939,7 +1939,7 @@ function handlePresentationActionImpl(action, deps) {
|
|
|
1939
1939
|
function executeSlideTransition(nextSlideIndex, deps) {
|
|
1940
1940
|
const incomingSlide = deps.slides[nextSlideIndex];
|
|
1941
1941
|
const transition = incomingSlide?.transition;
|
|
1942
|
-
const durationMs = deps.playTransition ?
|
|
1942
|
+
const durationMs = deps.playTransition ? chunk35YJ5RLU_js.resolveTransitionDurationMs(transition) : 0;
|
|
1943
1943
|
deps.clearPresentationTimers();
|
|
1944
1944
|
deps.setPresentationSlideIndex(nextSlideIndex);
|
|
1945
1945
|
deps.onSetActiveSlideIndex(nextSlideIndex);
|
|
@@ -1998,7 +1998,7 @@ function useSlideNavigation(input) {
|
|
|
1998
1998
|
});
|
|
1999
1999
|
const scheduleAutoAdvanceForSlide = react.useCallback(
|
|
2000
2000
|
(slideIndex) => {
|
|
2001
|
-
const delayMs =
|
|
2001
|
+
const delayMs = chunk35YJ5RLU_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
|
|
2002
2002
|
if (delayMs === void 0) {
|
|
2003
2003
|
return;
|
|
2004
2004
|
}
|
|
@@ -2021,7 +2021,7 @@ function useSlideNavigation(input) {
|
|
|
2021
2021
|
if (availableSlideIndexes.length === 0) {
|
|
2022
2022
|
return;
|
|
2023
2023
|
}
|
|
2024
|
-
const pastLastSlide = direction === 1 && !
|
|
2024
|
+
const pastLastSlide = direction === 1 && !chunk35YJ5RLU_js.hasShowSlideAfter(presentationSlideIndex, availableSlideIndexes);
|
|
2025
2025
|
if (rehearsing && pastLastSlide) {
|
|
2026
2026
|
recordCurrentSlideTime(presentationSlideIndex);
|
|
2027
2027
|
try {
|
|
@@ -2039,9 +2039,9 @@ function useSlideNavigation(input) {
|
|
|
2039
2039
|
onAdvancePastLastSlide();
|
|
2040
2040
|
return;
|
|
2041
2041
|
}
|
|
2042
|
-
const nextSlideIndex = direction === 1 ?
|
|
2042
|
+
const nextSlideIndex = direction === 1 ? chunk35YJ5RLU_js.nextShowSlideIndex(presentationSlideIndex, availableSlideIndexes, {
|
|
2043
2043
|
loop: Boolean(loopContinuously) && !rehearsing
|
|
2044
|
-
}) :
|
|
2044
|
+
}) : chunk35YJ5RLU_js.previousShowSlideIndex(presentationSlideIndex, availableSlideIndexes);
|
|
2045
2045
|
if (nextSlideIndex === void 0 || nextSlideIndex === presentationSlideIndex) {
|
|
2046
2046
|
return;
|
|
2047
2047
|
}
|
|
@@ -2186,22 +2186,22 @@ function useZoomNavigation(input) {
|
|
|
2186
2186
|
};
|
|
2187
2187
|
}
|
|
2188
2188
|
function usePresenterConsole(slideIndex, active) {
|
|
2189
|
-
const timerRef = react.useRef(
|
|
2190
|
-
const [snapshot, setSnapshot] = react.useState(() =>
|
|
2189
|
+
const timerRef = react.useRef(chunk35YJ5RLU_js.createPresenterTimer());
|
|
2190
|
+
const [snapshot, setSnapshot] = react.useState(() => chunk35YJ5RLU_js.createInitialPresentationSnapshot(slideIndex));
|
|
2191
2191
|
const patch = react.useCallback((value) => {
|
|
2192
|
-
setSnapshot((current) =>
|
|
2192
|
+
setSnapshot((current) => chunk35YJ5RLU_js.mergePresentationSnapshot(current, value));
|
|
2193
2193
|
}, []);
|
|
2194
2194
|
react.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
|
|
2195
2195
|
react.useEffect(() => {
|
|
2196
2196
|
if (!active) {
|
|
2197
2197
|
return;
|
|
2198
2198
|
}
|
|
2199
|
-
timerRef.current =
|
|
2199
|
+
timerRef.current = chunk35YJ5RLU_js.resetPresenterTimer();
|
|
2200
2200
|
patch({ paused: false, elapsedMs: 0 });
|
|
2201
2201
|
const timer = window.setInterval(() => {
|
|
2202
2202
|
patch({
|
|
2203
2203
|
paused: timerRef.current.paused,
|
|
2204
|
-
elapsedMs:
|
|
2204
|
+
elapsedMs: chunk35YJ5RLU_js.presenterElapsed(timerRef.current)
|
|
2205
2205
|
});
|
|
2206
2206
|
}, 1e3);
|
|
2207
2207
|
return () => window.clearInterval(timer);
|
|
@@ -2211,19 +2211,19 @@ function usePresenterConsole(slideIndex, active) {
|
|
|
2211
2211
|
applyAudienceSnapshot: setSnapshot,
|
|
2212
2212
|
setBlackout: (blackout) => patch({ blackout }),
|
|
2213
2213
|
toggleTimer: () => {
|
|
2214
|
-
timerRef.current =
|
|
2214
|
+
timerRef.current = chunk35YJ5RLU_js.togglePresenterTimer(timerRef.current);
|
|
2215
2215
|
patch({
|
|
2216
2216
|
paused: timerRef.current.paused,
|
|
2217
|
-
elapsedMs:
|
|
2217
|
+
elapsedMs: chunk35YJ5RLU_js.presenterElapsed(timerRef.current)
|
|
2218
2218
|
});
|
|
2219
2219
|
},
|
|
2220
2220
|
resetTimer: () => {
|
|
2221
|
-
timerRef.current =
|
|
2221
|
+
timerRef.current = chunk35YJ5RLU_js.resetPresenterTimer();
|
|
2222
2222
|
patch({ paused: false, elapsedMs: 0 });
|
|
2223
2223
|
},
|
|
2224
2224
|
stepZoom: (direction) => setSnapshot(
|
|
2225
|
-
(current) =>
|
|
2226
|
-
zoom:
|
|
2225
|
+
(current) => chunk35YJ5RLU_js.mergePresentationSnapshot(current, {
|
|
2226
|
+
zoom: chunk35YJ5RLU_js.stepPresenterZoom(
|
|
2227
2227
|
current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
|
|
2228
2228
|
direction
|
|
2229
2229
|
)
|
|
@@ -2269,7 +2269,7 @@ function usePresentationMode(input) {
|
|
|
2269
2269
|
const [allSlidesOpen, setAllSlidesOpen] = react.useState(false);
|
|
2270
2270
|
const [endOfShowVisible, setEndOfShowVisible] = react.useState(false);
|
|
2271
2271
|
const [presentationStartTime, setPresentationStartTime] = react.useState(null);
|
|
2272
|
-
const showGuard = react.useMemo(() =>
|
|
2272
|
+
const showGuard = react.useMemo(() => chunk35YJ5RLU_js.createPresenterShowGuard(), []);
|
|
2273
2273
|
const {
|
|
2274
2274
|
presentationAnimations,
|
|
2275
2275
|
presentationElementStates,
|
|
@@ -2348,7 +2348,7 @@ function usePresentationMode(input) {
|
|
|
2348
2348
|
});
|
|
2349
2349
|
const movePresentationSlide = react.useCallback(
|
|
2350
2350
|
(direction, trigger = "explicit") => {
|
|
2351
|
-
if (!
|
|
2351
|
+
if (!chunk35YJ5RLU_js.acceptsPresentationInput()) {
|
|
2352
2352
|
return;
|
|
2353
2353
|
}
|
|
2354
2354
|
if (endOfShowVisible) {
|
|
@@ -2486,7 +2486,7 @@ function usePresentationMode(input) {
|
|
|
2486
2486
|
if (mode !== "present") {
|
|
2487
2487
|
return;
|
|
2488
2488
|
}
|
|
2489
|
-
return
|
|
2489
|
+
return chunk35YJ5RLU_js.attachPresentationVisibilityPause({
|
|
2490
2490
|
root: containerRef.current ?? void 0,
|
|
2491
2491
|
onHidden: () => clearPresentationTimersRef.current(),
|
|
2492
2492
|
onVisible: () => scheduleAutoAdvanceRef.current(presentationSlideIndexRef.current)
|
|
@@ -2566,11 +2566,11 @@ function usePresentationMode(input) {
|
|
|
2566
2566
|
if (!transitionOverlay || transitionOverlay.transition.type !== "morph") {
|
|
2567
2567
|
return void 0;
|
|
2568
2568
|
}
|
|
2569
|
-
return
|
|
2569
|
+
return chunk35YJ5RLU_js.buildMorphTransitionPlan(
|
|
2570
2570
|
slides[transitionOverlay.outgoingSlideIndex],
|
|
2571
2571
|
slides[transitionOverlay.incomingSlideIndex],
|
|
2572
2572
|
transitionOverlay.durationMs,
|
|
2573
|
-
|
|
2573
|
+
chunk35YJ5RLU_js.morphOptionToMode(transitionOverlay.transition.morphOption)
|
|
2574
2574
|
);
|
|
2575
2575
|
}, [transitionOverlay, slides]);
|
|
2576
2576
|
const morphedElementStates = react.useMemo(() => {
|
|
@@ -2591,7 +2591,7 @@ function usePresentationMode(input) {
|
|
|
2591
2591
|
if (!morphPlan) {
|
|
2592
2592
|
return presentationKeyframesCss;
|
|
2593
2593
|
}
|
|
2594
|
-
const imageRules =
|
|
2594
|
+
const imageRules = chunk35YJ5RLU_js.buildMorphAnimationRules(morphPlan, "", "incoming", "image");
|
|
2595
2595
|
return `${presentationKeyframesCss ?? ""}
|
|
2596
2596
|
${morphPlan.keyframesCss}
|
|
2597
2597
|
${imageRules}`;
|
|
@@ -2887,7 +2887,7 @@ function useFindReplace({
|
|
|
2887
2887
|
const [findResults, setFindResults] = react.useState([]);
|
|
2888
2888
|
const [findResultIndex, setFindResultIndex] = react.useState(-1);
|
|
2889
2889
|
const performFind = react.useCallback(() => {
|
|
2890
|
-
const results =
|
|
2890
|
+
const results = chunk35YJ5RLU_js.findInSlides(slides, findQuery, { matchCase: findMatchCase });
|
|
2891
2891
|
if (!findQuery) {
|
|
2892
2892
|
setFindResults([]);
|
|
2893
2893
|
setFindResultIndex(-1);
|
|
@@ -2921,7 +2921,7 @@ function useFindReplace({
|
|
|
2921
2921
|
return;
|
|
2922
2922
|
}
|
|
2923
2923
|
onUpdateSlides(
|
|
2924
|
-
(prevSlides) =>
|
|
2924
|
+
(prevSlides) => chunk35YJ5RLU_js.applyFindReplacements(prevSlides, toReplace, replaceQuery).slides
|
|
2925
2925
|
);
|
|
2926
2926
|
onMarkDirty();
|
|
2927
2927
|
},
|
|
@@ -2943,9 +2943,9 @@ function useFindReplace({
|
|
|
2943
2943
|
}, [findResults, applyReplacements, performFind]);
|
|
2944
2944
|
react.useEffect(() => {
|
|
2945
2945
|
const handler = (event) => {
|
|
2946
|
-
const { action } =
|
|
2946
|
+
const { action } = chunk35YJ5RLU_js.mapEditorKey(event, {
|
|
2947
2947
|
canEdit: mode === "edit",
|
|
2948
|
-
isTextInputTarget:
|
|
2948
|
+
isTextInputTarget: chunk35YJ5RLU_js.isEditorTextInputTarget(event.target)
|
|
2949
2949
|
});
|
|
2950
2950
|
if (action !== "find") {
|
|
2951
2951
|
return;
|
|
@@ -3024,7 +3024,7 @@ function addCommentToSlide(slides, slideIndex, text, authorName, elementId) {
|
|
|
3024
3024
|
if (!slide) {
|
|
3025
3025
|
return { slides, didAdd: false };
|
|
3026
3026
|
}
|
|
3027
|
-
const next =
|
|
3027
|
+
const next = chunk35YJ5RLU_js.addCommentToList(
|
|
3028
3028
|
slide.comments || [],
|
|
3029
3029
|
text,
|
|
3030
3030
|
authorName,
|
|
@@ -3042,7 +3042,7 @@ function removeCommentFromSlide(slides, slideIndex, commentId) {
|
|
|
3042
3042
|
if (!slide) {
|
|
3043
3043
|
return { slides, didDelete: false };
|
|
3044
3044
|
}
|
|
3045
|
-
const next =
|
|
3045
|
+
const next = chunk35YJ5RLU_js.removeCommentFromList(slide.comments || [], commentId);
|
|
3046
3046
|
if (!next) {
|
|
3047
3047
|
return { slides, didDelete: false };
|
|
3048
3048
|
}
|
|
@@ -3053,7 +3053,7 @@ function editCommentInSlide(slides, slideIndex, commentId, newText) {
|
|
|
3053
3053
|
if (!slide) {
|
|
3054
3054
|
return { slides, didUpdate: false };
|
|
3055
3055
|
}
|
|
3056
|
-
const next =
|
|
3056
|
+
const next = chunk35YJ5RLU_js.editCommentInList(slide.comments || [], commentId, newText);
|
|
3057
3057
|
if (!next) {
|
|
3058
3058
|
return { slides, didUpdate: false };
|
|
3059
3059
|
}
|
|
@@ -3064,7 +3064,7 @@ function toggleResolvedInSlide(slides, slideIndex, commentId) {
|
|
|
3064
3064
|
if (!slide) {
|
|
3065
3065
|
return { slides, didUpdate: false };
|
|
3066
3066
|
}
|
|
3067
|
-
const next =
|
|
3067
|
+
const next = chunk35YJ5RLU_js.toggleCommentResolvedInList(slide.comments || [], commentId);
|
|
3068
3068
|
if (!next) {
|
|
3069
3069
|
return { slides, didUpdate: false };
|
|
3070
3070
|
}
|
|
@@ -3075,7 +3075,7 @@ function addReplyToSlide(slides, slideIndex, parentId, text, authorName) {
|
|
|
3075
3075
|
if (!slide) {
|
|
3076
3076
|
return { slides, didAdd: false };
|
|
3077
3077
|
}
|
|
3078
|
-
const next =
|
|
3078
|
+
const next = chunk35YJ5RLU_js.replyToCommentInList(slide.comments || [], parentId, text, authorName);
|
|
3079
3079
|
if (!next) {
|
|
3080
3080
|
return { slides, didAdd: false };
|
|
3081
3081
|
}
|
|
@@ -3449,7 +3449,7 @@ function useViewerCoreState(_input) {
|
|
|
3449
3449
|
const marqueeStateRef = react.useRef(null);
|
|
3450
3450
|
const isDrawingRef = react.useRef(false);
|
|
3451
3451
|
const justInteractedRef = react.useRef(false);
|
|
3452
|
-
const livePatcher = react.useMemo(() =>
|
|
3452
|
+
const livePatcher = react.useMemo(() => chunk35YJ5RLU_js.createCollaborationLivePatcher(), []);
|
|
3453
3453
|
react.useEffect(() => () => livePatcher.dispose(), [livePatcher]);
|
|
3454
3454
|
const slidesRef = react.useRef([]);
|
|
3455
3455
|
const [mode, setMode] = react.useState("edit");
|
|
@@ -3458,8 +3458,8 @@ function useViewerCoreState(_input) {
|
|
|
3458
3458
|
const [slides, setSlides] = react.useState([]);
|
|
3459
3459
|
const [templateElementsBySlideId, setTemplateElementsBySlideId] = react.useState({});
|
|
3460
3460
|
const [canvasSize, setCanvasSize] = react.useState({
|
|
3461
|
-
width:
|
|
3462
|
-
height:
|
|
3461
|
+
width: chunkUU6NFFRR_js.DEFAULT_CANVAS_WIDTH,
|
|
3462
|
+
height: chunkUU6NFFRR_js.DEFAULT_CANVAS_HEIGHT
|
|
3463
3463
|
});
|
|
3464
3464
|
const [slideSizeEmu, setSlideSizeEmu] = react.useState();
|
|
3465
3465
|
const [activeSlideIndex, setActiveSlideIndex] = react.useState(0);
|
|
@@ -3480,7 +3480,7 @@ function useViewerCoreState(_input) {
|
|
|
3480
3480
|
const resolved = typeof value === "function" ? value(inlineEditingTextRef.current) : value;
|
|
3481
3481
|
inlineEditingTextRef.current = resolved;
|
|
3482
3482
|
setInlineEditingTextBase(value);
|
|
3483
|
-
|
|
3483
|
+
chunk35YJ5RLU_js.publishLiveInlineText(
|
|
3484
3484
|
livePatcher,
|
|
3485
3485
|
slidesRef.current[activeSlideIndexRef.current],
|
|
3486
3486
|
inlineEditingElementIdRef.current,
|
|
@@ -3823,7 +3823,7 @@ function useLoadContent({
|
|
|
3823
3823
|
);
|
|
3824
3824
|
}
|
|
3825
3825
|
const previousHandler = handlerRef.current;
|
|
3826
|
-
const handler = new
|
|
3826
|
+
const handler = new chunk35YJ5RLU_js.PptxHandler();
|
|
3827
3827
|
const parsed = await handler.load(buffer);
|
|
3828
3828
|
if (cancelled || token !== renderTokenRef.current) {
|
|
3829
3829
|
handler.dispose();
|
|
@@ -3835,7 +3835,7 @@ function useLoadContent({
|
|
|
3835
3835
|
handlerRef.current = null;
|
|
3836
3836
|
const mediaElements = [];
|
|
3837
3837
|
for (const slide of parsed.slides) {
|
|
3838
|
-
|
|
3838
|
+
chunk35YJ5RLU_js.collectMediaElements(slide.elements, mediaElements);
|
|
3839
3839
|
}
|
|
3840
3840
|
for (const url of mediaDataUrls.values()) {
|
|
3841
3841
|
if (url.startsWith("blob:")) {
|
|
@@ -3876,7 +3876,7 @@ function useLoadContent({
|
|
|
3876
3876
|
}
|
|
3877
3877
|
})
|
|
3878
3878
|
);
|
|
3879
|
-
const { paths: imagePaths, refs: imageRefs } =
|
|
3879
|
+
const { paths: imagePaths, refs: imageRefs } = chunk35YJ5RLU_js.collectImagePaths(parsed.slides);
|
|
3880
3880
|
let nextSlides = parsed.slides;
|
|
3881
3881
|
if (imagePaths.size > 0) {
|
|
3882
3882
|
const resolvedMap = /* @__PURE__ */ new Map();
|
|
@@ -3930,7 +3930,7 @@ function useLoadContent({
|
|
|
3930
3930
|
});
|
|
3931
3931
|
}
|
|
3932
3932
|
}
|
|
3933
|
-
const { paths: tableImagePaths, refs: tableImageRefs } =
|
|
3933
|
+
const { paths: tableImagePaths, refs: tableImageRefs } = chunk35YJ5RLU_js.collectTableCellImagePaths(nextSlides);
|
|
3934
3934
|
if (tableImagePaths.size > 0) {
|
|
3935
3935
|
const resolvedTableMap = /* @__PURE__ */ new Map();
|
|
3936
3936
|
await Promise.all(
|
|
@@ -3946,7 +3946,7 @@ function useLoadContent({
|
|
|
3946
3946
|
);
|
|
3947
3947
|
if (resolvedTableMap.size > 0) {
|
|
3948
3948
|
nextSlides = nextSlides.map((s) => {
|
|
3949
|
-
const newElements =
|
|
3949
|
+
const newElements = chunk35YJ5RLU_js.applyTableCellImagePatches(
|
|
3950
3950
|
s.elements,
|
|
3951
3951
|
resolvedTableMap,
|
|
3952
3952
|
tableImageRefs
|
|
@@ -3956,7 +3956,7 @@ function useLoadContent({
|
|
|
3956
3956
|
}
|
|
3957
3957
|
}
|
|
3958
3958
|
let nextTableStyleMap = parsed.tableStyleMap;
|
|
3959
|
-
const { paths: tableStyleImagePaths, refs: tableStyleImageRefs } =
|
|
3959
|
+
const { paths: tableStyleImagePaths, refs: tableStyleImageRefs } = chunk35YJ5RLU_js.collectTableStyleImagePaths(nextTableStyleMap);
|
|
3960
3960
|
if (tableStyleImagePaths.size > 0) {
|
|
3961
3961
|
const resolvedStyleMap = /* @__PURE__ */ new Map();
|
|
3962
3962
|
await Promise.all(
|
|
@@ -3971,7 +3971,7 @@ function useLoadContent({
|
|
|
3971
3971
|
})
|
|
3972
3972
|
);
|
|
3973
3973
|
if (resolvedStyleMap.size > 0 && nextTableStyleMap) {
|
|
3974
|
-
nextTableStyleMap =
|
|
3974
|
+
nextTableStyleMap = chunk35YJ5RLU_js.applyTableStyleImagePatches(
|
|
3975
3975
|
nextTableStyleMap,
|
|
3976
3976
|
resolvedStyleMap,
|
|
3977
3977
|
tableStyleImageRefs
|
|
@@ -3979,12 +3979,12 @@ function useLoadContent({
|
|
|
3979
3979
|
}
|
|
3980
3980
|
}
|
|
3981
3981
|
handlerRef.current = handler;
|
|
3982
|
-
const partition =
|
|
3982
|
+
const partition = chunk35YJ5RLU_js.partitionTemplateElements(nextSlides);
|
|
3983
3983
|
setSlides(partition.slides);
|
|
3984
3984
|
setTemplateElementsBySlideId(partition.templateElementsBySlideId);
|
|
3985
3985
|
setCanvasSize({
|
|
3986
|
-
width: parsed.width ??
|
|
3987
|
-
height: parsed.height ??
|
|
3986
|
+
width: parsed.width ?? chunkUU6NFFRR_js.DEFAULT_CANVAS_WIDTH,
|
|
3987
|
+
height: parsed.height ?? chunkUU6NFFRR_js.DEFAULT_CANVAS_HEIGHT
|
|
3988
3988
|
});
|
|
3989
3989
|
setSlideSizeEmu(
|
|
3990
3990
|
typeof parsed.widthEmu === "number" && typeof parsed.heightEmu === "number" && parsed.widthEmu > 0 && parsed.heightEmu > 0 ? {
|
|
@@ -4001,7 +4001,7 @@ function useLoadContent({
|
|
|
4001
4001
|
setThemeOptions(parsed.themeOptions ?? []);
|
|
4002
4002
|
setCustomShows(parsed.customShows ?? []);
|
|
4003
4003
|
setActiveCustomShowId(
|
|
4004
|
-
|
|
4004
|
+
chunk35YJ5RLU_js.resolveAuthoredCustomShowId(parsed.presentationProperties, parsed.customShows) ?? null
|
|
4005
4005
|
);
|
|
4006
4006
|
setSections(parsed.sections ?? []);
|
|
4007
4007
|
setPresentationProperties(parsed.presentationProperties ?? {});
|
|
@@ -4024,7 +4024,7 @@ function useLoadContent({
|
|
|
4024
4024
|
setHasMacros(parsed.hasMacros === true);
|
|
4025
4025
|
setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
|
|
4026
4026
|
setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
|
|
4027
|
-
setGuides(
|
|
4027
|
+
setGuides(chunk35YJ5RLU_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
|
|
4028
4028
|
setActiveSlideIndex(0);
|
|
4029
4029
|
clearSelection();
|
|
4030
4030
|
setIsDirty(false);
|
|
@@ -4032,7 +4032,7 @@ function useLoadContent({
|
|
|
4032
4032
|
onContentApplied?.();
|
|
4033
4033
|
} catch (err) {
|
|
4034
4034
|
if (!cancelled && token === renderTokenRef.current) {
|
|
4035
|
-
if (err instanceof
|
|
4035
|
+
if (err instanceof chunk35YJ5RLU_js.EncryptedFileError) {
|
|
4036
4036
|
setIsEncrypted(true);
|
|
4037
4037
|
} else {
|
|
4038
4038
|
console.error("[pptx] Failed to load presentation content:", err);
|
|
@@ -4060,7 +4060,7 @@ function useLoadContent({
|
|
|
4060
4060
|
}
|
|
4061
4061
|
function useAutosave(input) {
|
|
4062
4062
|
const { isDirty, filePath, serializeSlides, enabled = true, getChangeSources } = input;
|
|
4063
|
-
const intervalMs =
|
|
4063
|
+
const intervalMs = chunk35YJ5RLU_js.resolveAutosaveIntervalMs({
|
|
4064
4064
|
hostIntervalMs: input.intervalMs,
|
|
4065
4065
|
optionsIntervalSeconds: input.intervalSeconds
|
|
4066
4066
|
});
|
|
@@ -4091,7 +4091,7 @@ function useAutosave(input) {
|
|
|
4091
4091
|
return;
|
|
4092
4092
|
}
|
|
4093
4093
|
const sources = changeSourcesRef.current?.() ?? [];
|
|
4094
|
-
if (!
|
|
4094
|
+
if (!chunk35YJ5RLU_js.shouldWriteAutosaveSnapshot({
|
|
4095
4095
|
filePath: path,
|
|
4096
4096
|
isDirty: isDirtyRef.current,
|
|
4097
4097
|
saving: isSavingRef.current,
|
|
@@ -4109,8 +4109,8 @@ function useAutosave(input) {
|
|
|
4109
4109
|
isSavingRef.current = false;
|
|
4110
4110
|
return;
|
|
4111
4111
|
}
|
|
4112
|
-
await
|
|
4113
|
-
lastSnapshotRef.current =
|
|
4112
|
+
await chunk35YJ5RLU_js.saveAutosaveSnapshot(path, data);
|
|
4113
|
+
lastSnapshotRef.current = chunk35YJ5RLU_js.autosaveSnapshotMark(path, sources);
|
|
4114
4114
|
setAutosaveStatus({ state: "saved", timestamp: Date.now() });
|
|
4115
4115
|
} catch (err) {
|
|
4116
4116
|
setAutosaveStatus({
|
|
@@ -4196,11 +4196,11 @@ function useElementOperations(input) {
|
|
|
4196
4196
|
(elementId, updates) => {
|
|
4197
4197
|
if (masterView?.target) {
|
|
4198
4198
|
applyMasterViewWrite(
|
|
4199
|
-
|
|
4199
|
+
chunk35YJ5RLU_js.updateMasterViewElement(masterView, masterView.target, elementId, updates)
|
|
4200
4200
|
);
|
|
4201
4201
|
return;
|
|
4202
4202
|
}
|
|
4203
|
-
if (
|
|
4203
|
+
if (chunk35YJ5RLU_js.isTemplateElementId(elementId)) {
|
|
4204
4204
|
const slideId = activeSlide?.id;
|
|
4205
4205
|
if (slideId) {
|
|
4206
4206
|
setTemplateElementsBySlideId((prev) => ({
|
|
@@ -4248,7 +4248,7 @@ function useElementOperations(input) {
|
|
|
4248
4248
|
);
|
|
4249
4249
|
const updateSelectedShapeStyle = react.useCallback(
|
|
4250
4250
|
(updates) => {
|
|
4251
|
-
if (!selectedElement || !
|
|
4251
|
+
if (!selectedElement || !chunk35YJ5RLU_js.hasShapeProperties(selectedElement)) {
|
|
4252
4252
|
return;
|
|
4253
4253
|
}
|
|
4254
4254
|
updateSelectedElement({
|
|
@@ -4259,17 +4259,17 @@ function useElementOperations(input) {
|
|
|
4259
4259
|
);
|
|
4260
4260
|
const updateSelectedTextStyle = react.useCallback(
|
|
4261
4261
|
(updates) => {
|
|
4262
|
-
if (!selectedElement || !
|
|
4262
|
+
if (!selectedElement || !chunk35YJ5RLU_js.hasTextProperties(selectedElement)) {
|
|
4263
4263
|
return;
|
|
4264
4264
|
}
|
|
4265
|
-
const inlineSel =
|
|
4265
|
+
const inlineSel = chunk35YJ5RLU_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
4266
4266
|
if (inlineSel && selectedElement.textSegments) {
|
|
4267
|
-
const { newSegments: newSegments2, newSelection } =
|
|
4267
|
+
const { newSegments: newSegments2, newSelection } = chunk35YJ5RLU_js.applyStyleToSelectedSegments(
|
|
4268
4268
|
selectedElement.textSegments,
|
|
4269
4269
|
inlineSel,
|
|
4270
4270
|
updates
|
|
4271
4271
|
);
|
|
4272
|
-
|
|
4272
|
+
chunk35YJ5RLU_js.setPendingSelectionRestore(newSelection);
|
|
4273
4273
|
updateSelectedElement({
|
|
4274
4274
|
textSegments: newSegments2
|
|
4275
4275
|
});
|
|
@@ -4289,12 +4289,12 @@ function useElementOperations(input) {
|
|
|
4289
4289
|
);
|
|
4290
4290
|
const updateSelectedTextCase = react.useCallback(
|
|
4291
4291
|
(mode) => {
|
|
4292
|
-
if (!selectedElement || !
|
|
4292
|
+
if (!selectedElement || !chunk35YJ5RLU_js.hasTextProperties(selectedElement)) {
|
|
4293
4293
|
return;
|
|
4294
4294
|
}
|
|
4295
|
-
const inlineSel =
|
|
4295
|
+
const inlineSel = chunk35YJ5RLU_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
4296
4296
|
if (inlineSel && selectedElement.textSegments) {
|
|
4297
|
-
const newSegments =
|
|
4297
|
+
const newSegments = chunk35YJ5RLU_js.applyCaseTransformToSegments(
|
|
4298
4298
|
selectedElement.textSegments,
|
|
4299
4299
|
inlineSel,
|
|
4300
4300
|
mode
|
|
@@ -4304,14 +4304,14 @@ function useElementOperations(input) {
|
|
|
4304
4304
|
}
|
|
4305
4305
|
const updates = {};
|
|
4306
4306
|
if (selectedElement.textSegments && selectedElement.textSegments.length > 0) {
|
|
4307
|
-
updates.textSegments =
|
|
4307
|
+
updates.textSegments = chunk35YJ5RLU_js.applyCaseTransformToSegments(
|
|
4308
4308
|
selectedElement.textSegments,
|
|
4309
4309
|
null,
|
|
4310
4310
|
mode
|
|
4311
4311
|
);
|
|
4312
4312
|
}
|
|
4313
4313
|
if (typeof selectedElement.text === "string") {
|
|
4314
|
-
updates.text =
|
|
4314
|
+
updates.text = chunk35YJ5RLU_js.transformTextCase(selectedElement.text, mode);
|
|
4315
4315
|
}
|
|
4316
4316
|
updateSelectedElement(updates);
|
|
4317
4317
|
},
|
|
@@ -4324,15 +4324,15 @@ function useElementOperations(input) {
|
|
|
4324
4324
|
[setSlides]
|
|
4325
4325
|
);
|
|
4326
4326
|
const masterViewTarget = masterView?.target ?? null;
|
|
4327
|
-
const activeElements = masterViewTarget ?
|
|
4327
|
+
const activeElements = masterViewTarget ? chunk35YJ5RLU_js.masterViewElements(masterView, masterViewTarget) : editTemplateMode ? templateElements : activeSlide?.elements ?? [];
|
|
4328
4328
|
const updateActiveElements = react.useCallback(
|
|
4329
4329
|
(updater) => {
|
|
4330
4330
|
if (masterView?.target) {
|
|
4331
4331
|
applyMasterViewWrite(
|
|
4332
|
-
|
|
4332
|
+
chunk35YJ5RLU_js.replaceMasterViewElements(
|
|
4333
4333
|
masterView,
|
|
4334
4334
|
masterView.target,
|
|
4335
|
-
updater(
|
|
4335
|
+
updater(chunk35YJ5RLU_js.masterViewElements(masterView, masterView.target))
|
|
4336
4336
|
)
|
|
4337
4337
|
);
|
|
4338
4338
|
return;
|
|
@@ -4385,7 +4385,7 @@ function useSectionOperations(input) {
|
|
|
4385
4385
|
const { sections, setSections, slides, setSlides, markDirty } = input;
|
|
4386
4386
|
const addSection2 = react.useCallback(
|
|
4387
4387
|
(name, afterSlideIndex) => {
|
|
4388
|
-
const result =
|
|
4388
|
+
const result = chunk35YJ5RLU_js.addSection(sections, slides, name, afterSlideIndex);
|
|
4389
4389
|
setSlides(result.slides);
|
|
4390
4390
|
setSections(result.sections);
|
|
4391
4391
|
markDirty();
|
|
@@ -4394,7 +4394,7 @@ function useSectionOperations(input) {
|
|
|
4394
4394
|
);
|
|
4395
4395
|
const renameSection2 = react.useCallback(
|
|
4396
4396
|
(sectionId, newName) => {
|
|
4397
|
-
const result =
|
|
4397
|
+
const result = chunk35YJ5RLU_js.renameSection(sections, slides, sectionId, newName);
|
|
4398
4398
|
setSections(result.sections);
|
|
4399
4399
|
setSlides(result.slides);
|
|
4400
4400
|
markDirty();
|
|
@@ -4403,7 +4403,7 @@ function useSectionOperations(input) {
|
|
|
4403
4403
|
);
|
|
4404
4404
|
const deleteSection2 = react.useCallback(
|
|
4405
4405
|
(sectionId) => {
|
|
4406
|
-
const result =
|
|
4406
|
+
const result = chunk35YJ5RLU_js.deleteSection(sections, slides, sectionId);
|
|
4407
4407
|
setSections(result.sections);
|
|
4408
4408
|
setSlides(result.slides);
|
|
4409
4409
|
markDirty();
|
|
@@ -4412,21 +4412,21 @@ function useSectionOperations(input) {
|
|
|
4412
4412
|
);
|
|
4413
4413
|
const moveSectionUp2 = react.useCallback(
|
|
4414
4414
|
(sectionId) => {
|
|
4415
|
-
setSections(
|
|
4415
|
+
setSections(chunk35YJ5RLU_js.moveSectionUp(sections, sectionId));
|
|
4416
4416
|
markDirty();
|
|
4417
4417
|
},
|
|
4418
4418
|
[sections, setSections, markDirty]
|
|
4419
4419
|
);
|
|
4420
4420
|
const moveSectionDown2 = react.useCallback(
|
|
4421
4421
|
(sectionId) => {
|
|
4422
|
-
setSections(
|
|
4422
|
+
setSections(chunk35YJ5RLU_js.moveSectionDown(sections, sectionId));
|
|
4423
4423
|
markDirty();
|
|
4424
4424
|
},
|
|
4425
4425
|
[sections, setSections, markDirty]
|
|
4426
4426
|
);
|
|
4427
4427
|
const moveSlidesToSection2 = react.useCallback(
|
|
4428
4428
|
(slideIndexes, targetSectionId) => {
|
|
4429
|
-
const result =
|
|
4429
|
+
const result = chunk35YJ5RLU_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
|
|
4430
4430
|
setSlides(result.slides);
|
|
4431
4431
|
setSections(result.sections);
|
|
4432
4432
|
markDirty();
|
|
@@ -4455,19 +4455,19 @@ function useSectionOperations(input) {
|
|
|
4455
4455
|
|
|
4456
4456
|
// src/viewer/hooks/pointer-move-handlers.ts
|
|
4457
4457
|
function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
|
|
4458
|
-
const resized =
|
|
4458
|
+
const resized = chunk35YJ5RLU_js.applyResize(
|
|
4459
4459
|
{ x: startX, y: startY, width: startWidth, height: startHeight },
|
|
4460
4460
|
handle,
|
|
4461
4461
|
dx,
|
|
4462
4462
|
dy,
|
|
4463
4463
|
1,
|
|
4464
|
-
{ minSize:
|
|
4464
|
+
{ minSize: chunkUU6NFFRR_js.MIN_ELEMENT_SIZE }
|
|
4465
4465
|
);
|
|
4466
4466
|
const box = { x: resized.x, y: resized.y, width: resized.width, height: resized.height };
|
|
4467
4467
|
if (!snapToGrid) {
|
|
4468
4468
|
return box;
|
|
4469
4469
|
}
|
|
4470
|
-
return
|
|
4470
|
+
return chunk35YJ5RLU_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkUU6NFFRR_js.MIN_ELEMENT_SIZE);
|
|
4471
4471
|
}
|
|
4472
4472
|
function resolveLiveTarget(input) {
|
|
4473
4473
|
const { livePatcher, editTemplateMode, activeSlide } = input;
|
|
@@ -4580,7 +4580,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
4580
4580
|
width: el.width,
|
|
4581
4581
|
height: el.height
|
|
4582
4582
|
}));
|
|
4583
|
-
const snapResult =
|
|
4583
|
+
const snapResult = chunk35YJ5RLU_js.computeSnapToShape(
|
|
4584
4584
|
targetX,
|
|
4585
4585
|
targetY,
|
|
4586
4586
|
primaryEl.width,
|
|
@@ -4619,7 +4619,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
4619
4619
|
if (live) {
|
|
4620
4620
|
for (const id of Object.keys(drag.startPositionsById)) {
|
|
4621
4621
|
const start = drag.startPositionsById[id];
|
|
4622
|
-
|
|
4622
|
+
chunk35YJ5RLU_js.publishLiveGeometry(live.patcher, live.slideId, id, {
|
|
4623
4623
|
x: start.x + appliedDx,
|
|
4624
4624
|
y: start.y + appliedDy
|
|
4625
4625
|
});
|
|
@@ -4653,22 +4653,22 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
|
|
|
4653
4653
|
if (rs.domEl) {
|
|
4654
4654
|
rs.domEl.style.left = `${geo.x}px`;
|
|
4655
4655
|
rs.domEl.style.top = `${geo.y}px`;
|
|
4656
|
-
rs.domEl.style.width = `${Math.max(geo.width,
|
|
4657
|
-
rs.domEl.style.height = `${Math.max(geo.height,
|
|
4656
|
+
rs.domEl.style.width = `${Math.max(geo.width, chunkUU6NFFRR_js.MIN_ELEMENT_SIZE)}px`;
|
|
4657
|
+
rs.domEl.style.height = `${Math.max(geo.height, chunkUU6NFFRR_js.MIN_ELEMENT_SIZE)}px`;
|
|
4658
4658
|
}
|
|
4659
4659
|
if (live) {
|
|
4660
|
-
|
|
4660
|
+
chunk35YJ5RLU_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
|
|
4661
4661
|
x: geo.x,
|
|
4662
4662
|
y: geo.y,
|
|
4663
|
-
width: Math.max(geo.width,
|
|
4664
|
-
height: Math.max(geo.height,
|
|
4663
|
+
width: Math.max(geo.width, chunkUU6NFFRR_js.MIN_ELEMENT_SIZE),
|
|
4664
|
+
height: Math.max(geo.height, chunkUU6NFFRR_js.MIN_ELEMENT_SIZE)
|
|
4665
4665
|
});
|
|
4666
4666
|
}
|
|
4667
4667
|
}
|
|
4668
4668
|
function processAdjustmentMove(e, adj, editorScale, updateElementById) {
|
|
4669
4669
|
const dx = (e.clientX - adj.startClientX) / editorScale;
|
|
4670
4670
|
const dy = (e.clientY - adj.startClientY) / editorScale;
|
|
4671
|
-
const adjustments =
|
|
4671
|
+
const adjustments = chunk35YJ5RLU_js.getDraggedShapeAdjustments(adj, dx, dy);
|
|
4672
4672
|
if (!adj.moved && Math.hypot(dx, dy) > 2) {
|
|
4673
4673
|
adj.moved = true;
|
|
4674
4674
|
}
|
|
@@ -4743,13 +4743,13 @@ function processPointerUp(input) {
|
|
|
4743
4743
|
if (i !== activeSlideIndex) {
|
|
4744
4744
|
return s;
|
|
4745
4745
|
}
|
|
4746
|
-
const rerouted =
|
|
4746
|
+
const rerouted = chunk35YJ5RLU_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
|
|
4747
4747
|
if (rerouted.length === 0) {
|
|
4748
4748
|
return s;
|
|
4749
4749
|
}
|
|
4750
4750
|
return {
|
|
4751
4751
|
...s,
|
|
4752
|
-
elements:
|
|
4752
|
+
elements: chunk35YJ5RLU_js.applyReroutedConnectors(s.elements, rerouted)
|
|
4753
4753
|
};
|
|
4754
4754
|
})
|
|
4755
4755
|
);
|
|
@@ -4774,9 +4774,9 @@ function processPointerUp(input) {
|
|
|
4774
4774
|
}
|
|
4775
4775
|
function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
|
|
4776
4776
|
const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
|
|
4777
|
-
const hitIds =
|
|
4777
|
+
const hitIds = chunk35YJ5RLU_js.computeMarqueeHitIds(marquee, sourceElements);
|
|
4778
4778
|
if (marquee.additive) {
|
|
4779
|
-
const merged =
|
|
4779
|
+
const merged = chunk35YJ5RLU_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
|
|
4780
4780
|
if (merged.length > 0) {
|
|
4781
4781
|
applySelection(merged[0], merged);
|
|
4782
4782
|
} else {
|
|
@@ -4799,8 +4799,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
|
|
|
4799
4799
|
}
|
|
4800
4800
|
return { ...el, x: start.x + dx, y: start.y + dy };
|
|
4801
4801
|
});
|
|
4802
|
-
const rerouted =
|
|
4803
|
-
return
|
|
4802
|
+
const rerouted = chunk35YJ5RLU_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
|
|
4803
|
+
return chunk35YJ5RLU_js.applyReroutedConnectors(movedElements, rerouted);
|
|
4804
4804
|
};
|
|
4805
4805
|
if (editTemplateMode) {
|
|
4806
4806
|
const slideId = activeSlide?.id;
|
|
@@ -4957,11 +4957,11 @@ function useCanvasInteractions(input) {
|
|
|
4957
4957
|
return;
|
|
4958
4958
|
}
|
|
4959
4959
|
const el = elementLookup.get(editId);
|
|
4960
|
-
if (el &&
|
|
4960
|
+
if (el && chunk35YJ5RLU_js.hasTextProperties(el)) {
|
|
4961
4961
|
const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
|
|
4962
|
-
const newSegments =
|
|
4962
|
+
const newSegments = chunk35YJ5RLU_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
|
|
4963
4963
|
const editorEl = document.querySelector("[data-inline-editor]");
|
|
4964
|
-
const newHeight =
|
|
4964
|
+
const newHeight = chunk35YJ5RLU_js.resolveInlineEditAutoFitHeight(el.textStyle, el.height, editorEl);
|
|
4965
4965
|
ops.updateElementById(editId, {
|
|
4966
4966
|
text: committedText,
|
|
4967
4967
|
textSegments: newSegments,
|
|
@@ -4973,7 +4973,7 @@ function useCanvasInteractions(input) {
|
|
|
4973
4973
|
setInlineEditingText("");
|
|
4974
4974
|
};
|
|
4975
4975
|
const openEquationEditorForElement = (el) => {
|
|
4976
|
-
if (!
|
|
4976
|
+
if (!chunk35YJ5RLU_js.hasTextProperties(el)) {
|
|
4977
4977
|
return false;
|
|
4978
4978
|
}
|
|
4979
4979
|
const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
|
|
@@ -5003,7 +5003,7 @@ function useCanvasInteractions(input) {
|
|
|
5003
5003
|
justInteractedRef.current = false;
|
|
5004
5004
|
} else {
|
|
5005
5005
|
const el = elementLookup.get(elementId);
|
|
5006
|
-
if (el &&
|
|
5006
|
+
if (el && chunk35YJ5RLU_js.hasTextProperties(el) && chunk35YJ5RLU_js.canInteractWithElement(el, "textEdit")) {
|
|
5007
5007
|
if (!openEquationEditorForElement(el)) {
|
|
5008
5008
|
setInlineEditingElementId(elementId);
|
|
5009
5009
|
setInlineEditingText(el.text ?? "");
|
|
@@ -5022,7 +5022,7 @@ function useCanvasInteractions(input) {
|
|
|
5022
5022
|
if (openEquationEditorForElement(el)) {
|
|
5023
5023
|
return;
|
|
5024
5024
|
}
|
|
5025
|
-
if (
|
|
5025
|
+
if (chunk35YJ5RLU_js.hasTextProperties(el) && chunk35YJ5RLU_js.canInteractWithElement(el, "textEdit")) {
|
|
5026
5026
|
setInlineEditingElementId(elementId);
|
|
5027
5027
|
setInlineEditingText(el.text ?? "");
|
|
5028
5028
|
}
|
|
@@ -5045,7 +5045,7 @@ function useCanvasInteractions(input) {
|
|
|
5045
5045
|
justSelectedRef.current = false;
|
|
5046
5046
|
}
|
|
5047
5047
|
const ids = !wasSelected ? [elementId] : effectiveSelectedIds.length ? effectiveSelectedIds : [elementId];
|
|
5048
|
-
const movableIds =
|
|
5048
|
+
const movableIds = chunk35YJ5RLU_js.filterInteractableIds(ids, (id) => elementLookup.get(id), "move");
|
|
5049
5049
|
if (movableIds.length === 0) {
|
|
5050
5050
|
return;
|
|
5051
5051
|
}
|
|
@@ -5115,7 +5115,7 @@ function useCanvasInteractions(input) {
|
|
|
5115
5115
|
const handleResizePointerDown = (elementId, e, handle) => {
|
|
5116
5116
|
e.stopPropagation();
|
|
5117
5117
|
const el = elementLookup.get(elementId);
|
|
5118
|
-
if (!el || !
|
|
5118
|
+
if (!el || !chunk35YJ5RLU_js.canInteractWithElement(el, "resize")) {
|
|
5119
5119
|
return;
|
|
5120
5120
|
}
|
|
5121
5121
|
resizeStateRef.current = {
|
|
@@ -5137,7 +5137,7 @@ function useCanvasInteractions(input) {
|
|
|
5137
5137
|
};
|
|
5138
5138
|
const handleRotate = (elementId, rotationDeg) => {
|
|
5139
5139
|
const el = elementLookup.get(elementId);
|
|
5140
|
-
if (!el || !
|
|
5140
|
+
if (!el || !chunk35YJ5RLU_js.canInteractWithElement(el, "rotate")) {
|
|
5141
5141
|
return;
|
|
5142
5142
|
}
|
|
5143
5143
|
ops.updateElementById(elementId, { rotation: rotationDeg });
|
|
@@ -5157,10 +5157,10 @@ function useCanvasInteractions(input) {
|
|
|
5157
5157
|
const handleAdjustmentPointerDown = (elementId, e, descriptor) => {
|
|
5158
5158
|
e.stopPropagation();
|
|
5159
5159
|
const el = elementLookup.get(elementId);
|
|
5160
|
-
if (!el || !
|
|
5160
|
+
if (!el || !chunk35YJ5RLU_js.canInteractWithElement(el, "adjustHandle")) {
|
|
5161
5161
|
return;
|
|
5162
5162
|
}
|
|
5163
|
-
shapeAdjustmentDragStateRef.current =
|
|
5163
|
+
shapeAdjustmentDragStateRef.current = chunk35YJ5RLU_js.beginShapeAdjustment(
|
|
5164
5164
|
el,
|
|
5165
5165
|
descriptor,
|
|
5166
5166
|
e.clientX,
|
|
@@ -5207,7 +5207,7 @@ function createFileHandlers(deps) {
|
|
|
5207
5207
|
h = Math.round(h * scale);
|
|
5208
5208
|
}
|
|
5209
5209
|
addElement({
|
|
5210
|
-
id:
|
|
5210
|
+
id: chunk35YJ5RLU_js.generateElementId(),
|
|
5211
5211
|
type: "image",
|
|
5212
5212
|
x: Math.round((canvasSize.width - w) / 2),
|
|
5213
5213
|
y: Math.round((canvasSize.height - h) / 2),
|
|
@@ -5218,7 +5218,7 @@ function createFileHandlers(deps) {
|
|
|
5218
5218
|
};
|
|
5219
5219
|
img.onerror = () => {
|
|
5220
5220
|
addElement({
|
|
5221
|
-
id:
|
|
5221
|
+
id: chunk35YJ5RLU_js.generateElementId(),
|
|
5222
5222
|
type: "image",
|
|
5223
5223
|
x: 100,
|
|
5224
5224
|
y: 100,
|
|
@@ -5237,14 +5237,14 @@ function createFileHandlers(deps) {
|
|
|
5237
5237
|
return;
|
|
5238
5238
|
}
|
|
5239
5239
|
e.target.value = "";
|
|
5240
|
-
const mediaType =
|
|
5240
|
+
const mediaType = chunk35YJ5RLU_js.classifyMediaType(file.type);
|
|
5241
5241
|
if (!mediaType) {
|
|
5242
5242
|
return;
|
|
5243
5243
|
}
|
|
5244
5244
|
const elFilePath = file.path;
|
|
5245
5245
|
const insertMediaElement = (mediaSourceUrl, width, height) => {
|
|
5246
5246
|
addElement({
|
|
5247
|
-
id:
|
|
5247
|
+
id: chunk35YJ5RLU_js.generateElementId(),
|
|
5248
5248
|
type: "media",
|
|
5249
5249
|
mediaType,
|
|
5250
5250
|
mediaMimeType: file.type || void 0,
|
|
@@ -5419,13 +5419,13 @@ function createStructuredElementHandlers(deps) {
|
|
|
5419
5419
|
return;
|
|
5420
5420
|
}
|
|
5421
5421
|
addElement({
|
|
5422
|
-
id:
|
|
5422
|
+
id: chunk35YJ5RLU_js.generateElementId(),
|
|
5423
5423
|
type: "smartArt",
|
|
5424
5424
|
x: 100,
|
|
5425
5425
|
y: 120,
|
|
5426
5426
|
width: 600,
|
|
5427
5427
|
height: 340,
|
|
5428
|
-
smartArtData:
|
|
5428
|
+
smartArtData: chunk35YJ5RLU_js.buildSmartArtPresetData(
|
|
5429
5429
|
layout,
|
|
5430
5430
|
defaultItems,
|
|
5431
5431
|
(i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
|
|
@@ -5437,7 +5437,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5437
5437
|
return;
|
|
5438
5438
|
}
|
|
5439
5439
|
addElement({
|
|
5440
|
-
id:
|
|
5440
|
+
id: chunk35YJ5RLU_js.generateElementId(),
|
|
5441
5441
|
type: "shape",
|
|
5442
5442
|
x: 120,
|
|
5443
5443
|
y: 200,
|
|
@@ -5475,7 +5475,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5475
5475
|
return;
|
|
5476
5476
|
}
|
|
5477
5477
|
const resolved = resolveHyperlinkEditResult(data);
|
|
5478
|
-
if (resolved.url && !
|
|
5478
|
+
if (resolved.url && !chunk35YJ5RLU_js.isUrlSafe(resolved.url)) {
|
|
5479
5479
|
return;
|
|
5480
5480
|
}
|
|
5481
5481
|
const actionClick = {
|
|
@@ -5499,7 +5499,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5499
5499
|
const displayText = value || fieldTexts[fieldType] || fieldType;
|
|
5500
5500
|
const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
|
|
5501
5501
|
addElement({
|
|
5502
|
-
id:
|
|
5502
|
+
id: chunk35YJ5RLU_js.generateElementId(),
|
|
5503
5503
|
type: "shape",
|
|
5504
5504
|
x: 120,
|
|
5505
5505
|
y: 200,
|
|
@@ -5521,11 +5521,11 @@ function createStructuredElementHandlers(deps) {
|
|
|
5521
5521
|
if (!activeSlide) {
|
|
5522
5522
|
return;
|
|
5523
5523
|
}
|
|
5524
|
-
const preset =
|
|
5524
|
+
const preset = chunk35YJ5RLU_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
|
|
5525
5525
|
if (!preset) {
|
|
5526
5526
|
return;
|
|
5527
5527
|
}
|
|
5528
|
-
const defaultPptxAction =
|
|
5528
|
+
const defaultPptxAction = chunk35YJ5RLU_js.elementActionToPptxAction({
|
|
5529
5529
|
trigger: "click",
|
|
5530
5530
|
type: preset.defaultAction
|
|
5531
5531
|
});
|
|
@@ -5534,7 +5534,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5534
5534
|
defaultPptxAction.highlightClick = true;
|
|
5535
5535
|
}
|
|
5536
5536
|
addElement({
|
|
5537
|
-
id:
|
|
5537
|
+
id: chunk35YJ5RLU_js.generateElementId(),
|
|
5538
5538
|
type: "shape",
|
|
5539
5539
|
x: 150,
|
|
5540
5540
|
y: 150,
|
|
@@ -5601,14 +5601,14 @@ function useInsertElements(input) {
|
|
|
5601
5601
|
return;
|
|
5602
5602
|
}
|
|
5603
5603
|
addElement({
|
|
5604
|
-
id:
|
|
5604
|
+
id: chunk35YJ5RLU_js.generateElementId(),
|
|
5605
5605
|
type: "text",
|
|
5606
5606
|
x: 100,
|
|
5607
5607
|
y: 100,
|
|
5608
5608
|
width: 300,
|
|
5609
5609
|
height: 60,
|
|
5610
5610
|
text: "",
|
|
5611
|
-
textStyle: { fontSize:
|
|
5611
|
+
textStyle: { fontSize: chunkUU6NFFRR_js.DEFAULT_TEXT_FONT_SIZE }
|
|
5612
5612
|
});
|
|
5613
5613
|
};
|
|
5614
5614
|
const handleAddShape = () => {
|
|
@@ -5616,7 +5616,7 @@ function useInsertElements(input) {
|
|
|
5616
5616
|
return;
|
|
5617
5617
|
}
|
|
5618
5618
|
addElement({
|
|
5619
|
-
id:
|
|
5619
|
+
id: chunk35YJ5RLU_js.generateElementId(),
|
|
5620
5620
|
type: "shape",
|
|
5621
5621
|
x: 150,
|
|
5622
5622
|
y: 150,
|
|
@@ -5635,15 +5635,15 @@ function useInsertElements(input) {
|
|
|
5635
5635
|
return;
|
|
5636
5636
|
}
|
|
5637
5637
|
addElement({
|
|
5638
|
-
...
|
|
5639
|
-
id:
|
|
5638
|
+
...chunk35YJ5RLU_js.newTableElement(chunkUU6NFFRR_js.DEFAULT_TABLE_ROWS, chunkUU6NFFRR_js.DEFAULT_TABLE_COLUMNS, 100, 200),
|
|
5639
|
+
id: chunk35YJ5RLU_js.generateElementId()
|
|
5640
5640
|
});
|
|
5641
5641
|
};
|
|
5642
5642
|
const handleAddChart = (chartKind) => {
|
|
5643
5643
|
if (!activeSlide) {
|
|
5644
5644
|
return;
|
|
5645
5645
|
}
|
|
5646
|
-
addElement(
|
|
5646
|
+
addElement(chunk35YJ5RLU_js.createDefaultChartElement(chartKind));
|
|
5647
5647
|
};
|
|
5648
5648
|
const structured = createStructuredElementHandlers({
|
|
5649
5649
|
activeSlide,
|
|
@@ -5713,7 +5713,7 @@ function useClipboardHandlers(input) {
|
|
|
5713
5713
|
if (!selectedElement) {
|
|
5714
5714
|
return;
|
|
5715
5715
|
}
|
|
5716
|
-
setClipboardPayload(
|
|
5716
|
+
setClipboardPayload(chunk35YJ5RLU_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
|
|
5717
5717
|
};
|
|
5718
5718
|
const handleDelete = () => {
|
|
5719
5719
|
const idsToDelete = effectiveSelectedIds;
|
|
@@ -5730,7 +5730,7 @@ function useClipboardHandlers(input) {
|
|
|
5730
5730
|
handleDelete();
|
|
5731
5731
|
};
|
|
5732
5732
|
const insertClone = (source) => {
|
|
5733
|
-
const clone =
|
|
5733
|
+
const clone = chunk35YJ5RLU_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
|
|
5734
5734
|
ops.updateActiveElements((els) => [...els, clone]);
|
|
5735
5735
|
ops.applySelection(clone.id);
|
|
5736
5736
|
history.markDirty();
|
|
@@ -5765,7 +5765,7 @@ function resolveShapePath(el) {
|
|
|
5765
5765
|
return el.pathData;
|
|
5766
5766
|
}
|
|
5767
5767
|
if ("shapeType" in el && typeof el.shapeType === "string") {
|
|
5768
|
-
const clipPath =
|
|
5768
|
+
const clipPath = chunk35YJ5RLU_js.getPresetShapeClipPath(el.shapeType);
|
|
5769
5769
|
if (clipPath) {
|
|
5770
5770
|
const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
|
|
5771
5771
|
if (svgPath) {
|
|
@@ -5816,7 +5816,7 @@ function clipPathToSvgPath(clipPath, width, height) {
|
|
|
5816
5816
|
return parts.join(" ");
|
|
5817
5817
|
}
|
|
5818
5818
|
function transformPathToGlobal(pathData, el) {
|
|
5819
|
-
const polys =
|
|
5819
|
+
const polys = chunk35YJ5RLU_js.svgPathToPolygons(pathData);
|
|
5820
5820
|
if (polys.length === 0) {
|
|
5821
5821
|
return pathData;
|
|
5822
5822
|
}
|
|
@@ -5836,10 +5836,10 @@ function transformPathToGlobal(pathData, el) {
|
|
|
5836
5836
|
y: pt.y * scaleY + el.y
|
|
5837
5837
|
}))
|
|
5838
5838
|
);
|
|
5839
|
-
return
|
|
5839
|
+
return chunk35YJ5RLU_js.polygonsToSvgPath(transformed);
|
|
5840
5840
|
}
|
|
5841
5841
|
function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
5842
|
-
const polys =
|
|
5842
|
+
const polys = chunk35YJ5RLU_js.svgPathToPolygons(pathData);
|
|
5843
5843
|
if (polys.length === 0) {
|
|
5844
5844
|
return pathData;
|
|
5845
5845
|
}
|
|
@@ -5849,10 +5849,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
|
5849
5849
|
y: pt.y - y
|
|
5850
5850
|
}))
|
|
5851
5851
|
);
|
|
5852
|
-
return
|
|
5852
|
+
return chunk35YJ5RLU_js.polygonsToSvgPath(transformed);
|
|
5853
5853
|
}
|
|
5854
5854
|
function pathBounds(pathData) {
|
|
5855
|
-
const polys =
|
|
5855
|
+
const polys = chunk35YJ5RLU_js.svgPathToPolygons(pathData);
|
|
5856
5856
|
let minX = Infinity;
|
|
5857
5857
|
let minY = Infinity;
|
|
5858
5858
|
let maxX = -Infinity;
|
|
@@ -5911,7 +5911,7 @@ function useMergeShapesHandler(input) {
|
|
|
5911
5911
|
let allFragments = [];
|
|
5912
5912
|
let remaining = globalPaths[0];
|
|
5913
5913
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
5914
|
-
const frags =
|
|
5914
|
+
const frags = chunk35YJ5RLU_js.mergeShapes("fragment", remaining, globalPaths[i]);
|
|
5915
5915
|
if (Array.isArray(frags)) {
|
|
5916
5916
|
allFragments = frags;
|
|
5917
5917
|
}
|
|
@@ -5940,7 +5940,7 @@ function useMergeShapesHandler(input) {
|
|
|
5940
5940
|
bounds.height
|
|
5941
5941
|
);
|
|
5942
5942
|
const newEl = {
|
|
5943
|
-
id:
|
|
5943
|
+
id: chunk35YJ5RLU_js.generateElementId(),
|
|
5944
5944
|
type: "shape",
|
|
5945
5945
|
x: bounds.x,
|
|
5946
5946
|
y: bounds.y,
|
|
@@ -5978,7 +5978,7 @@ function useMergeShapesHandler(input) {
|
|
|
5978
5978
|
} else {
|
|
5979
5979
|
let resultPath = globalPaths[0];
|
|
5980
5980
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
5981
|
-
const result =
|
|
5981
|
+
const result = chunk35YJ5RLU_js.mergeShapes(operation, resultPath, globalPaths[i]);
|
|
5982
5982
|
if (typeof result === "string") {
|
|
5983
5983
|
resultPath = result;
|
|
5984
5984
|
}
|
|
@@ -5999,7 +5999,7 @@ function useMergeShapesHandler(input) {
|
|
|
5999
5999
|
);
|
|
6000
6000
|
const primary = targets[0];
|
|
6001
6001
|
const newEl = {
|
|
6002
|
-
id:
|
|
6002
|
+
id: chunk35YJ5RLU_js.generateElementId(),
|
|
6003
6003
|
type: "shape",
|
|
6004
6004
|
x: bounds.x,
|
|
6005
6005
|
y: bounds.y,
|
|
@@ -6062,7 +6062,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6062
6062
|
if (ids.length < 2 || !activeSlide) {
|
|
6063
6063
|
return;
|
|
6064
6064
|
}
|
|
6065
|
-
const { elements, groupId } =
|
|
6065
|
+
const { elements, groupId } = chunk35YJ5RLU_js.groupElements(ops.activeElements, ids, chunk35YJ5RLU_js.generateElementId());
|
|
6066
6066
|
if (groupId === null) {
|
|
6067
6067
|
return;
|
|
6068
6068
|
}
|
|
@@ -6075,11 +6075,11 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6075
6075
|
return;
|
|
6076
6076
|
}
|
|
6077
6077
|
const group = selectedElement;
|
|
6078
|
-
const intoTemplate =
|
|
6078
|
+
const intoTemplate = chunk35YJ5RLU_js.isTemplateElementId(group.id);
|
|
6079
6079
|
const childIds = group.children.map(
|
|
6080
|
-
(child) => intoTemplate ?
|
|
6080
|
+
(child) => intoTemplate ? chunk35YJ5RLU_js.makeCloneId(true, child.id || group.id) : child.id || chunk35YJ5RLU_js.generateElementId()
|
|
6081
6081
|
);
|
|
6082
|
-
const { elements, childIds: usedIds } =
|
|
6082
|
+
const { elements, childIds: usedIds } = chunk35YJ5RLU_js.ungroupElements(
|
|
6083
6083
|
ops.activeElements,
|
|
6084
6084
|
group.id,
|
|
6085
6085
|
childIds,
|
|
@@ -6108,7 +6108,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6108
6108
|
if (!edge) {
|
|
6109
6109
|
return;
|
|
6110
6110
|
}
|
|
6111
|
-
const positions =
|
|
6111
|
+
const positions = chunk35YJ5RLU_js.alignElements(selectedElements, edge);
|
|
6112
6112
|
for (const [id, pos] of positions) {
|
|
6113
6113
|
const el = elementLookup.get(id);
|
|
6114
6114
|
if (!el) {
|
|
@@ -6126,7 +6126,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6126
6126
|
if (!distAxis) {
|
|
6127
6127
|
return;
|
|
6128
6128
|
}
|
|
6129
|
-
const positions =
|
|
6129
|
+
const positions = chunk35YJ5RLU_js.distributeElements(selectedElements, distAxis);
|
|
6130
6130
|
for (const [id, pos] of positions) {
|
|
6131
6131
|
const el = elementLookup.get(id);
|
|
6132
6132
|
if (!el) {
|
|
@@ -6143,7 +6143,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6143
6143
|
}
|
|
6144
6144
|
const id = selectedElement.id;
|
|
6145
6145
|
ops.updateActiveElements(
|
|
6146
|
-
(els) => direction === "forward" ?
|
|
6146
|
+
(els) => direction === "forward" ? chunk35YJ5RLU_js.bringForward(els, id) : direction === "backward" ? chunk35YJ5RLU_js.sendBackward(els, id) : els
|
|
6147
6147
|
);
|
|
6148
6148
|
history.markDirty();
|
|
6149
6149
|
};
|
|
@@ -6153,7 +6153,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
6153
6153
|
}
|
|
6154
6154
|
const id = selectedElement.id;
|
|
6155
6155
|
ops.updateActiveElements(
|
|
6156
|
-
(els) => direction === "front" ?
|
|
6156
|
+
(els) => direction === "front" ? chunk35YJ5RLU_js.bringToFront(els, id) : chunk35YJ5RLU_js.sendToBack(els, id)
|
|
6157
6157
|
);
|
|
6158
6158
|
history.markDirty();
|
|
6159
6159
|
};
|
|
@@ -6284,7 +6284,7 @@ function useSlideManagement(input) {
|
|
|
6284
6284
|
theme
|
|
6285
6285
|
} = input;
|
|
6286
6286
|
const handleAddSlide = () => {
|
|
6287
|
-
const newSlide =
|
|
6287
|
+
const newSlide = chunk35YJ5RLU_js.createBlankSlide(slides.length + 1);
|
|
6288
6288
|
ops.updateSlides((prev) => {
|
|
6289
6289
|
const next = [...prev];
|
|
6290
6290
|
next.splice(activeSlideIndex + 1, 0, newSlide);
|
|
@@ -6347,7 +6347,7 @@ function useSlideManagement(input) {
|
|
|
6347
6347
|
}
|
|
6348
6348
|
const clone = {
|
|
6349
6349
|
...src,
|
|
6350
|
-
id:
|
|
6350
|
+
id: chunk35YJ5RLU_js.makeSlideId(),
|
|
6351
6351
|
elements: src.elements.map((el) => ({
|
|
6352
6352
|
...el,
|
|
6353
6353
|
id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
|
|
@@ -6379,7 +6379,7 @@ function useSlideManagement(input) {
|
|
|
6379
6379
|
const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
|
|
6380
6380
|
const insertAt = activeSlideIndex + 1;
|
|
6381
6381
|
const draft = {
|
|
6382
|
-
...
|
|
6382
|
+
...chunk35YJ5RLU_js.createBlankSlide(slides.length + 1),
|
|
6383
6383
|
layoutPath,
|
|
6384
6384
|
...layoutName ? { layoutName } : {}
|
|
6385
6385
|
};
|
|
@@ -6412,9 +6412,9 @@ function useSlideManagement(input) {
|
|
|
6412
6412
|
};
|
|
6413
6413
|
const handleInsertSlideFromTemplate = (templateId) => {
|
|
6414
6414
|
const insertAt = activeSlideIndex + 1;
|
|
6415
|
-
const draft =
|
|
6415
|
+
const draft = chunk35YJ5RLU_js.buildSlideTemplateSlide(templateId, chunk35YJ5RLU_js.makeSlideId(), slides.length + 1, {
|
|
6416
6416
|
...canvasSize ? { slideWidth: canvasSize.width, slideHeight: canvasSize.height } : {},
|
|
6417
|
-
scheme:
|
|
6417
|
+
scheme: chunk35YJ5RLU_js.templateSchemeFromTheme(theme?.colorScheme)
|
|
6418
6418
|
});
|
|
6419
6419
|
ops.updateSlides((prev) => insertSlideFromLayoutUpdater(prev, activeSlideIndex, draft));
|
|
6420
6420
|
setActiveSlideIndex(insertAt);
|
|
@@ -6451,7 +6451,7 @@ function createTableMergeHandlers(input) {
|
|
|
6451
6451
|
if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
|
|
6452
6452
|
return;
|
|
6453
6453
|
}
|
|
6454
|
-
const newTableData =
|
|
6454
|
+
const newTableData = chunk35YJ5RLU_js.mergeCells(
|
|
6455
6455
|
[
|
|
6456
6456
|
{ row: rowIndex, col: columnIndex },
|
|
6457
6457
|
{ row: rowIndex, col: nextColIdx }
|
|
@@ -6459,7 +6459,7 @@ function createTableMergeHandlers(input) {
|
|
|
6459
6459
|
td
|
|
6460
6460
|
);
|
|
6461
6461
|
const updates = { tableData: newTableData };
|
|
6462
|
-
const newRawXml =
|
|
6462
|
+
const newRawXml = chunk35YJ5RLU_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6463
6463
|
if (newRawXml) {
|
|
6464
6464
|
updates.rawXml = newRawXml;
|
|
6465
6465
|
}
|
|
@@ -6485,7 +6485,7 @@ function createTableMergeHandlers(input) {
|
|
|
6485
6485
|
if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
|
|
6486
6486
|
return;
|
|
6487
6487
|
}
|
|
6488
|
-
const newTableData =
|
|
6488
|
+
const newTableData = chunk35YJ5RLU_js.mergeCells(
|
|
6489
6489
|
[
|
|
6490
6490
|
{ row: rowIndex, col: columnIndex },
|
|
6491
6491
|
{ row: targetNextRowIdx, col: columnIndex }
|
|
@@ -6493,7 +6493,7 @@ function createTableMergeHandlers(input) {
|
|
|
6493
6493
|
td
|
|
6494
6494
|
);
|
|
6495
6495
|
const updates = { tableData: newTableData };
|
|
6496
|
-
const newRawXml =
|
|
6496
|
+
const newRawXml = chunk35YJ5RLU_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6497
6497
|
if (newRawXml) {
|
|
6498
6498
|
updates.rawXml = newRawXml;
|
|
6499
6499
|
}
|
|
@@ -6508,9 +6508,9 @@ function createTableMergeHandlers(input) {
|
|
|
6508
6508
|
return;
|
|
6509
6509
|
}
|
|
6510
6510
|
const td = selectedElement.tableData;
|
|
6511
|
-
const newTableData =
|
|
6511
|
+
const newTableData = chunk35YJ5RLU_js.mergeCells(ts.selectedCells, td);
|
|
6512
6512
|
const updates = { tableData: newTableData };
|
|
6513
|
-
const newRawXml =
|
|
6513
|
+
const newRawXml = chunk35YJ5RLU_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6514
6514
|
if (newRawXml) {
|
|
6515
6515
|
updates.rawXml = newRawXml;
|
|
6516
6516
|
}
|
|
@@ -6527,9 +6527,9 @@ function createTableMergeHandlers(input) {
|
|
|
6527
6527
|
}
|
|
6528
6528
|
const { rowIndex, columnIndex } = ts;
|
|
6529
6529
|
const td = selectedElement.tableData;
|
|
6530
|
-
const newTableData =
|
|
6530
|
+
const newTableData = chunk35YJ5RLU_js.splitCell(rowIndex, columnIndex, td);
|
|
6531
6531
|
const updates = { tableData: newTableData };
|
|
6532
|
-
const newRawXml =
|
|
6532
|
+
const newRawXml = chunk35YJ5RLU_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6533
6533
|
if (newRawXml) {
|
|
6534
6534
|
updates.rawXml = newRawXml;
|
|
6535
6535
|
}
|
|
@@ -6561,10 +6561,10 @@ function createTableStructHandlers(input) {
|
|
|
6561
6561
|
}
|
|
6562
6562
|
const updates = {};
|
|
6563
6563
|
if (el.tableData) {
|
|
6564
|
-
updates.tableData =
|
|
6564
|
+
updates.tableData = chunk35YJ5RLU_js.setCellText(el, rowIndex, colIndex, text).tableData;
|
|
6565
6565
|
}
|
|
6566
6566
|
if (el.rawXml) {
|
|
6567
|
-
const newRawXml =
|
|
6567
|
+
const newRawXml = chunk35YJ5RLU_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
|
|
6568
6568
|
if (newRawXml) {
|
|
6569
6569
|
updates.rawXml = newRawXml;
|
|
6570
6570
|
}
|
|
@@ -6588,7 +6588,7 @@ function createTableStructHandlers(input) {
|
|
|
6588
6588
|
const { rowIndex, columnIndex: colIndex } = ts;
|
|
6589
6589
|
const updates = {};
|
|
6590
6590
|
if (selectedElement.rawXml) {
|
|
6591
|
-
const newRawXml =
|
|
6591
|
+
const newRawXml = chunk35YJ5RLU_js.updateCellTextStyleInRawXml(
|
|
6592
6592
|
selectedElement,
|
|
6593
6593
|
rowIndex,
|
|
6594
6594
|
colIndex,
|
|
@@ -6652,9 +6652,9 @@ function createTableStructHandlers(input) {
|
|
|
6652
6652
|
return;
|
|
6653
6653
|
}
|
|
6654
6654
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
6655
|
-
const newTableData =
|
|
6655
|
+
const newTableData = chunk35YJ5RLU_js.insertTableRow(selectedElement.tableData, rowIdx, position);
|
|
6656
6656
|
const updates = { tableData: newTableData };
|
|
6657
|
-
const newRawXml =
|
|
6657
|
+
const newRawXml = chunk35YJ5RLU_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6658
6658
|
if (newRawXml) {
|
|
6659
6659
|
updates.rawXml = newRawXml;
|
|
6660
6660
|
}
|
|
@@ -6667,12 +6667,12 @@ function createTableStructHandlers(input) {
|
|
|
6667
6667
|
}
|
|
6668
6668
|
const td = selectedElement.tableData;
|
|
6669
6669
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
6670
|
-
const newTableData =
|
|
6670
|
+
const newTableData = chunk35YJ5RLU_js.deleteTableRow(td, rowIdx);
|
|
6671
6671
|
if (newTableData === td) {
|
|
6672
6672
|
return;
|
|
6673
6673
|
}
|
|
6674
6674
|
const updates = { tableData: newTableData };
|
|
6675
|
-
const newRawXml =
|
|
6675
|
+
const newRawXml = chunk35YJ5RLU_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6676
6676
|
if (newRawXml) {
|
|
6677
6677
|
updates.rawXml = newRawXml;
|
|
6678
6678
|
}
|
|
@@ -6684,9 +6684,9 @@ function createTableStructHandlers(input) {
|
|
|
6684
6684
|
return;
|
|
6685
6685
|
}
|
|
6686
6686
|
const colIdx = ts?.columnIndex ?? 0;
|
|
6687
|
-
const newTableData =
|
|
6687
|
+
const newTableData = chunk35YJ5RLU_js.insertTableColumn(selectedElement.tableData, colIdx, position);
|
|
6688
6688
|
const updates = { tableData: newTableData };
|
|
6689
|
-
const newRawXml =
|
|
6689
|
+
const newRawXml = chunk35YJ5RLU_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6690
6690
|
if (newRawXml) {
|
|
6691
6691
|
updates.rawXml = newRawXml;
|
|
6692
6692
|
}
|
|
@@ -6699,12 +6699,12 @@ function createTableStructHandlers(input) {
|
|
|
6699
6699
|
}
|
|
6700
6700
|
const td = selectedElement.tableData;
|
|
6701
6701
|
const colIdx = ts?.columnIndex ?? 0;
|
|
6702
|
-
const newTableData =
|
|
6702
|
+
const newTableData = chunk35YJ5RLU_js.deleteTableColumn(td, colIdx);
|
|
6703
6703
|
if (newTableData === td) {
|
|
6704
6704
|
return;
|
|
6705
6705
|
}
|
|
6706
6706
|
const updates = { tableData: newTableData };
|
|
6707
|
-
const newRawXml =
|
|
6707
|
+
const newRawXml = chunk35YJ5RLU_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6708
6708
|
if (newRawXml) {
|
|
6709
6709
|
updates.rawXml = newRawXml;
|
|
6710
6710
|
}
|
|
@@ -6740,8 +6740,8 @@ async function renderToCanvas(element, options = {}) {
|
|
|
6740
6740
|
return html2canvasPro(element, {
|
|
6741
6741
|
...options,
|
|
6742
6742
|
onclone: async (doc, clonedEl) => {
|
|
6743
|
-
await
|
|
6744
|
-
|
|
6743
|
+
await chunk35YJ5RLU_js.normalizeColorsForCapture(doc, clonedEl);
|
|
6744
|
+
chunk35YJ5RLU_js.preprocessCssForCapture(clonedEl);
|
|
6745
6745
|
if (typeof userOnClone === "function") {
|
|
6746
6746
|
userOnClone(doc, clonedEl);
|
|
6747
6747
|
}
|
|
@@ -6797,7 +6797,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
|
|
|
6797
6797
|
}
|
|
6798
6798
|
async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
|
|
6799
6799
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
6800
|
-
|
|
6800
|
+
chunk35YJ5RLU_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
|
|
6801
6801
|
}
|
|
6802
6802
|
async function copySlideToClipboard(slideElement, options = {}) {
|
|
6803
6803
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
@@ -6819,15 +6819,15 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
|
|
|
6819
6819
|
continue;
|
|
6820
6820
|
}
|
|
6821
6821
|
const canvas = await renderElementToCanvas(stageEl, scale);
|
|
6822
|
-
images.push(
|
|
6822
|
+
images.push(chunk35YJ5RLU_js.canvasToJpegData(canvas));
|
|
6823
6823
|
}
|
|
6824
6824
|
onProgress?.(totalSlides, totalSlides);
|
|
6825
6825
|
setActiveSlide(currentSlideIndex);
|
|
6826
6826
|
if (images.length === 0) {
|
|
6827
6827
|
throw new Error(chunkU6A5FWWE_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
|
|
6828
6828
|
}
|
|
6829
|
-
const pdfBlobUrl =
|
|
6830
|
-
|
|
6829
|
+
const pdfBlobUrl = chunkUU6NFFRR_js.buildPdfFromImageData(images);
|
|
6830
|
+
chunk35YJ5RLU_js.downloadDataUrl(pdfBlobUrl, filename);
|
|
6831
6831
|
}
|
|
6832
6832
|
async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
|
|
6833
6833
|
const { scale = 2, onProgress } = options;
|
|
@@ -6875,8 +6875,8 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
|
|
|
6875
6875
|
if (pages.length === 0) {
|
|
6876
6876
|
throw new Error(chunkU6A5FWWE_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
|
|
6877
6877
|
}
|
|
6878
|
-
const pdfDataUrl =
|
|
6879
|
-
|
|
6878
|
+
const pdfDataUrl = chunkUU6NFFRR_js.buildNotesPdf(pages);
|
|
6879
|
+
chunk35YJ5RLU_js.downloadDataUrl(pdfDataUrl, filename);
|
|
6880
6880
|
}
|
|
6881
6881
|
|
|
6882
6882
|
// src/viewer/utils/export-video.ts
|
|
@@ -6920,7 +6920,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
6920
6920
|
const fps = 30;
|
|
6921
6921
|
const stream = recordingCanvas.captureStream(fps);
|
|
6922
6922
|
const recorder = new MediaRecorder(stream, {
|
|
6923
|
-
mimeType:
|
|
6923
|
+
mimeType: chunk35YJ5RLU_js.pickSupportedMimeType([...chunk35YJ5RLU_js.WEBM_MIME_CANDIDATES]),
|
|
6924
6924
|
videoBitsPerSecond: 5e6
|
|
6925
6925
|
});
|
|
6926
6926
|
const chunks = [];
|
|
@@ -6943,8 +6943,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
6943
6943
|
const duration = slideTimingsMs?.[i] ?? slideDurationMs;
|
|
6944
6944
|
ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
|
|
6945
6945
|
ctx.drawImage(slideCanvases[i], 0, 0);
|
|
6946
|
-
const frameInterval =
|
|
6947
|
-
const framesNeeded =
|
|
6946
|
+
const frameInterval = chunk35YJ5RLU_js.fpsToFrameIntervalMs(fps);
|
|
6947
|
+
const framesNeeded = chunk35YJ5RLU_js.segmentFrameCount(duration, fps);
|
|
6948
6948
|
for (let f = 0; f < framesNeeded; f++) {
|
|
6949
6949
|
if (signal?.aborted) {
|
|
6950
6950
|
recorder.stop();
|
|
@@ -6993,7 +6993,7 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
|
|
|
6993
6993
|
if (frames.length === 0) {
|
|
6994
6994
|
throw new Error(chunkU6A5FWWE_js.translationsEn["pptx.export.errorNoSlidesGif"]);
|
|
6995
6995
|
}
|
|
6996
|
-
const gifBytes =
|
|
6996
|
+
const gifBytes = chunk35YJ5RLU_js.encodeGif(frames, Math.round(slideDurationMs / 10));
|
|
6997
6997
|
onProgress?.(totalSlides, totalSlides);
|
|
6998
6998
|
const buf = new ArrayBuffer(gifBytes.length);
|
|
6999
6999
|
new Uint8Array(buf).set(gifBytes);
|
|
@@ -7047,7 +7047,7 @@ function exportAllSlidesToSvg(data, options = {}) {
|
|
|
7047
7047
|
continue;
|
|
7048
7048
|
}
|
|
7049
7049
|
onProgress?.(processedCount, data.slides.length);
|
|
7050
|
-
let svg =
|
|
7050
|
+
let svg = chunk35YJ5RLU_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
|
|
7051
7051
|
if (embedFonts && fontFaces?.length) {
|
|
7052
7052
|
svg = injectFontFaces(svg, fontFaces);
|
|
7053
7053
|
}
|
|
@@ -7105,13 +7105,13 @@ function useExportSaveAs(input) {
|
|
|
7105
7105
|
setExportProgress(10);
|
|
7106
7106
|
setExportStatusMessage("Adding presentation...");
|
|
7107
7107
|
const pptxData = await serializeSlides();
|
|
7108
|
-
const pptxFilename =
|
|
7108
|
+
const pptxFilename = chunk35YJ5RLU_js.savedPresentationFileName(filePath);
|
|
7109
7109
|
if (pptxData) {
|
|
7110
7110
|
pkgFolder.file(pptxFilename, pptxData);
|
|
7111
7111
|
}
|
|
7112
7112
|
setExportProgress(70);
|
|
7113
7113
|
setExportStatusMessage("Writing README...");
|
|
7114
|
-
const readme =
|
|
7114
|
+
const readme = chunk35YJ5RLU_js.generatePackageReadme(pptxFilename);
|
|
7115
7115
|
pkgFolder.file("README.txt", readme);
|
|
7116
7116
|
if (abortCtrl.signal.aborted) {
|
|
7117
7117
|
throw new DOMException("Export cancelled", "AbortError");
|
|
@@ -7121,7 +7121,7 @@ function useExportSaveAs(input) {
|
|
|
7121
7121
|
const zipBlob = await zip.generateAsync({ type: "blob" });
|
|
7122
7122
|
setExportProgress(95);
|
|
7123
7123
|
setExportStatusMessage("Downloading...");
|
|
7124
|
-
|
|
7124
|
+
chunk35YJ5RLU_js.downloadBlob(zipBlob, `${chunk35YJ5RLU_js.presentationBaseName(pptxFilename)}-package.zip`);
|
|
7125
7125
|
setExportProgress(100);
|
|
7126
7126
|
} catch (err) {
|
|
7127
7127
|
if (err.name !== "AbortError") {
|
|
@@ -7137,13 +7137,13 @@ function useExportSaveAs(input) {
|
|
|
7137
7137
|
if (!handler) {
|
|
7138
7138
|
return;
|
|
7139
7139
|
}
|
|
7140
|
-
const downloadName =
|
|
7140
|
+
const downloadName = chunk35YJ5RLU_js.savedPresentationFileName(filePath, format);
|
|
7141
7141
|
try {
|
|
7142
7142
|
const data = await buildSaveAsData(handler, format);
|
|
7143
7143
|
const blob = new Blob([data], {
|
|
7144
7144
|
type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
|
|
7145
7145
|
});
|
|
7146
|
-
|
|
7146
|
+
chunk35YJ5RLU_js.downloadBlob(blob, downloadName);
|
|
7147
7147
|
} catch (err) {
|
|
7148
7148
|
console.error(`[PowerPointViewer] Save as .${format} failed:`, err);
|
|
7149
7149
|
}
|
|
@@ -7156,18 +7156,18 @@ function useExportSaveAs(input) {
|
|
|
7156
7156
|
const pptxGuides = guides.map((g) => ({
|
|
7157
7157
|
id: g.id,
|
|
7158
7158
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
7159
|
-
positionEmu:
|
|
7159
|
+
positionEmu: chunk35YJ5RLU_js.guidePxToEmu(g.position)
|
|
7160
7160
|
}));
|
|
7161
7161
|
return {
|
|
7162
7162
|
...slide,
|
|
7163
7163
|
guides: pptxGuides.length > 0 ? pptxGuides : void 0
|
|
7164
7164
|
};
|
|
7165
7165
|
});
|
|
7166
|
-
const slidesToSave =
|
|
7166
|
+
const slidesToSave = chunk35YJ5RLU_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
|
|
7167
7167
|
const saveOptions = {
|
|
7168
7168
|
// Save As shares Save's slide-size decision; leaving it out here is how
|
|
7169
7169
|
// a preset picked in the inspector reached one save path and not the other.
|
|
7170
|
-
slideSize:
|
|
7170
|
+
slideSize: chunk35YJ5RLU_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
|
|
7171
7171
|
headerFooter,
|
|
7172
7172
|
presentationProperties,
|
|
7173
7173
|
customShows: customShows.length > 0 ? customShows : void 0,
|
|
@@ -7181,13 +7181,13 @@ function useExportSaveAs(input) {
|
|
|
7181
7181
|
handoutMaster,
|
|
7182
7182
|
outputFormat: format
|
|
7183
7183
|
};
|
|
7184
|
-
return
|
|
7184
|
+
return chunk35YJ5RLU_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, password);
|
|
7185
7185
|
};
|
|
7186
7186
|
const handleExportJson = () => {
|
|
7187
7187
|
const sourceName = filePath ? filePath.replace(/\\/gu, "/").split("/").pop() : void 0;
|
|
7188
|
-
const slideSize =
|
|
7188
|
+
const slideSize = chunk35YJ5RLU_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size;
|
|
7189
7189
|
const data = {
|
|
7190
|
-
slides:
|
|
7190
|
+
slides: chunk35YJ5RLU_js.buildSaveSlides(slides, templateElementsBySlideId),
|
|
7191
7191
|
width: canvasSize.width,
|
|
7192
7192
|
height: canvasSize.height,
|
|
7193
7193
|
widthEmu: slideSize.widthEmu,
|
|
@@ -7206,7 +7206,7 @@ function useExportSaveAs(input) {
|
|
|
7206
7206
|
handoutMaster
|
|
7207
7207
|
};
|
|
7208
7208
|
try {
|
|
7209
|
-
|
|
7209
|
+
chunk35YJ5RLU_js.exportDeckJson(data, sourceName);
|
|
7210
7210
|
} catch (err) {
|
|
7211
7211
|
console.error("[PowerPointViewer] JSON export failed:", err);
|
|
7212
7212
|
}
|
|
@@ -7353,21 +7353,21 @@ function useExportHandlers(input) {
|
|
|
7353
7353
|
{
|
|
7354
7354
|
scale: 2,
|
|
7355
7355
|
onProgress: (current, total) => {
|
|
7356
|
-
setExportProgress(
|
|
7357
|
-
setExportStatusMessage(
|
|
7356
|
+
setExportProgress(chunk35YJ5RLU_js.slideProgressPercent(current, total));
|
|
7357
|
+
setExportStatusMessage(chunk35YJ5RLU_js.slideStatusLabel("Rendering", current, total));
|
|
7358
7358
|
},
|
|
7359
7359
|
signal: abortCtrl.signal
|
|
7360
7360
|
}
|
|
7361
7361
|
);
|
|
7362
|
-
setExportProgress(
|
|
7362
|
+
setExportProgress(chunk35YJ5RLU_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7363
7363
|
setExportStatusMessage("Building PDF...");
|
|
7364
7364
|
await new Promise((r) => {
|
|
7365
7365
|
setTimeout(r, 100);
|
|
7366
7366
|
});
|
|
7367
|
-
setExportProgress(
|
|
7367
|
+
setExportProgress(chunk35YJ5RLU_js.EXPORT_DONE_PERCENT);
|
|
7368
7368
|
setExportStatusMessage("Done!");
|
|
7369
7369
|
} catch (err) {
|
|
7370
|
-
if (!
|
|
7370
|
+
if (!chunk35YJ5RLU_js.isExportAbortError(err)) {
|
|
7371
7371
|
console.error("[PowerPointViewer] PDF export failed:", err);
|
|
7372
7372
|
}
|
|
7373
7373
|
} finally {
|
|
@@ -7397,21 +7397,21 @@ function useExportHandlers(input) {
|
|
|
7397
7397
|
{
|
|
7398
7398
|
scale: 2,
|
|
7399
7399
|
onProgress: (current, total) => {
|
|
7400
|
-
setExportProgress(
|
|
7401
|
-
setExportStatusMessage(
|
|
7400
|
+
setExportProgress(chunk35YJ5RLU_js.slideProgressPercent(current, total));
|
|
7401
|
+
setExportStatusMessage(chunk35YJ5RLU_js.slideStatusLabel("Rendering", current, total));
|
|
7402
7402
|
},
|
|
7403
7403
|
signal: abortCtrl.signal
|
|
7404
7404
|
}
|
|
7405
7405
|
);
|
|
7406
|
-
setExportProgress(
|
|
7406
|
+
setExportProgress(chunk35YJ5RLU_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7407
7407
|
setExportStatusMessage("Building PDF...");
|
|
7408
7408
|
await new Promise((r) => {
|
|
7409
7409
|
setTimeout(r, 100);
|
|
7410
7410
|
});
|
|
7411
|
-
setExportProgress(
|
|
7411
|
+
setExportProgress(chunk35YJ5RLU_js.EXPORT_DONE_PERCENT);
|
|
7412
7412
|
setExportStatusMessage("Done!");
|
|
7413
7413
|
} catch (err) {
|
|
7414
|
-
if (!
|
|
7414
|
+
if (!chunk35YJ5RLU_js.isExportAbortError(err)) {
|
|
7415
7415
|
console.error("[PowerPointViewer] Notes PDF export failed:", err);
|
|
7416
7416
|
}
|
|
7417
7417
|
} finally {
|
|
@@ -7452,22 +7452,22 @@ function useExportHandlers(input) {
|
|
|
7452
7452
|
scale: 1,
|
|
7453
7453
|
slideDurationMs: 3e3,
|
|
7454
7454
|
onProgress: (current, total) => {
|
|
7455
|
-
setExportProgress(
|
|
7456
|
-
setExportStatusMessage(
|
|
7455
|
+
setExportProgress(chunk35YJ5RLU_js.slideProgressPercent(current, total, 45));
|
|
7456
|
+
setExportStatusMessage(chunk35YJ5RLU_js.slideStatusLabel("Capturing", current, total));
|
|
7457
7457
|
},
|
|
7458
7458
|
onRecordProgress: (current, total) => {
|
|
7459
|
-
setExportProgress(
|
|
7460
|
-
setExportStatusMessage(
|
|
7459
|
+
setExportProgress(chunk35YJ5RLU_js.recordProgressPercent(current, total));
|
|
7460
|
+
setExportStatusMessage(chunk35YJ5RLU_js.slideStatusLabel("Recording", current, total));
|
|
7461
7461
|
},
|
|
7462
7462
|
signal: abortCtrl.signal
|
|
7463
7463
|
}
|
|
7464
7464
|
);
|
|
7465
|
-
setExportProgress(
|
|
7465
|
+
setExportProgress(chunk35YJ5RLU_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7466
7466
|
setExportStatusMessage("Saving file...");
|
|
7467
|
-
|
|
7468
|
-
setExportProgress(
|
|
7467
|
+
chunk35YJ5RLU_js.downloadBlob(blob, "presentation.webm");
|
|
7468
|
+
setExportProgress(chunk35YJ5RLU_js.EXPORT_DONE_PERCENT);
|
|
7469
7469
|
} catch (err) {
|
|
7470
|
-
if (!
|
|
7470
|
+
if (!chunk35YJ5RLU_js.isExportAbortError(err)) {
|
|
7471
7471
|
console.error("[PowerPointViewer] Video export failed:", err);
|
|
7472
7472
|
}
|
|
7473
7473
|
} finally {
|
|
@@ -7495,18 +7495,18 @@ function useExportHandlers(input) {
|
|
|
7495
7495
|
scale: 0.5,
|
|
7496
7496
|
slideDurationMs: 2e3,
|
|
7497
7497
|
onProgress: (current, total) => {
|
|
7498
|
-
setExportProgress(
|
|
7499
|
-
setExportStatusMessage(
|
|
7498
|
+
setExportProgress(chunk35YJ5RLU_js.slideProgressPercent(current, total));
|
|
7499
|
+
setExportStatusMessage(chunk35YJ5RLU_js.slideStatusLabel("Encoding", current, total));
|
|
7500
7500
|
},
|
|
7501
7501
|
signal: abortCtrl.signal
|
|
7502
7502
|
}
|
|
7503
7503
|
);
|
|
7504
|
-
setExportProgress(
|
|
7504
|
+
setExportProgress(chunk35YJ5RLU_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7505
7505
|
setExportStatusMessage("Saving file...");
|
|
7506
|
-
|
|
7507
|
-
setExportProgress(
|
|
7506
|
+
chunk35YJ5RLU_js.downloadBlob(blob, "presentation.gif");
|
|
7507
|
+
setExportProgress(chunk35YJ5RLU_js.EXPORT_DONE_PERCENT);
|
|
7508
7508
|
} catch (err) {
|
|
7509
|
-
if (!
|
|
7509
|
+
if (!chunk35YJ5RLU_js.isExportAbortError(err)) {
|
|
7510
7510
|
console.error("[PowerPointViewer] GIF export failed:", err);
|
|
7511
7511
|
}
|
|
7512
7512
|
} finally {
|
|
@@ -7547,7 +7547,7 @@ function openPrintWindow(title, bodyHtml, orientation, colorFilter, frameSlides)
|
|
|
7547
7547
|
}
|
|
7548
7548
|
printWindow.document.open();
|
|
7549
7549
|
printWindow.document.write(
|
|
7550
|
-
|
|
7550
|
+
chunk35YJ5RLU_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
|
|
7551
7551
|
);
|
|
7552
7552
|
printWindow.document.close();
|
|
7553
7553
|
printWindow.focus();
|
|
@@ -7581,8 +7581,8 @@ function usePrintHandlers(input) {
|
|
|
7581
7581
|
if (!pptxData || settings.printWhat !== "slides") {
|
|
7582
7582
|
return handlePrintWithSettings(settings);
|
|
7583
7583
|
}
|
|
7584
|
-
const colorFilter =
|
|
7585
|
-
const slideIndices =
|
|
7584
|
+
const colorFilter = chunk35YJ5RLU_js.computeColorFilter(settings.colorMode);
|
|
7585
|
+
const slideIndices = chunk35YJ5RLU_js.computeSlideIndices(
|
|
7586
7586
|
settings.slideRange,
|
|
7587
7587
|
activeSlideIndex,
|
|
7588
7588
|
slides.length,
|
|
@@ -7596,7 +7596,7 @@ function usePrintHandlers(input) {
|
|
|
7596
7596
|
if (svgs.length === 0) {
|
|
7597
7597
|
return;
|
|
7598
7598
|
}
|
|
7599
|
-
const printDoc =
|
|
7599
|
+
const printDoc = chunk35YJ5RLU_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
|
|
7600
7600
|
title: "Slides (Vector)",
|
|
7601
7601
|
orientation: settings.orientation,
|
|
7602
7602
|
colorFilter
|
|
@@ -7609,8 +7609,8 @@ function usePrintHandlers(input) {
|
|
|
7609
7609
|
};
|
|
7610
7610
|
const handlePrintWithSettings = async (settings) => {
|
|
7611
7611
|
setIsPrintDialogOpen(false);
|
|
7612
|
-
const colorFilter =
|
|
7613
|
-
const slideIndices =
|
|
7612
|
+
const colorFilter = chunk35YJ5RLU_js.computeColorFilter(settings.colorMode);
|
|
7613
|
+
const slideIndices = chunk35YJ5RLU_js.computeSlideIndices(
|
|
7614
7614
|
settings.slideRange,
|
|
7615
7615
|
activeSlideIndex,
|
|
7616
7616
|
slides.length,
|
|
@@ -7620,7 +7620,7 @@ function usePrintHandlers(input) {
|
|
|
7620
7620
|
if (settings.printWhat === "outline") {
|
|
7621
7621
|
openPrintWindow(
|
|
7622
7622
|
"Outline",
|
|
7623
|
-
`<div class="outline-page">${
|
|
7623
|
+
`<div class="outline-page">${chunk35YJ5RLU_js.buildOutlineHtml(slideIndices, slides)}</div>`,
|
|
7624
7624
|
settings.orientation,
|
|
7625
7625
|
colorFilter,
|
|
7626
7626
|
settings.frameSlides
|
|
@@ -7645,7 +7645,7 @@ function usePrintHandlers(input) {
|
|
|
7645
7645
|
if (settings.printWhat === "slides") {
|
|
7646
7646
|
openPrintWindow(
|
|
7647
7647
|
"Slides",
|
|
7648
|
-
|
|
7648
|
+
chunk35YJ5RLU_js.buildSlidesHtml(slideImages, slideIndices),
|
|
7649
7649
|
settings.orientation,
|
|
7650
7650
|
colorFilter,
|
|
7651
7651
|
settings.frameSlides
|
|
@@ -7655,7 +7655,7 @@ function usePrintHandlers(input) {
|
|
|
7655
7655
|
if (settings.printWhat === "notes") {
|
|
7656
7656
|
openPrintWindow(
|
|
7657
7657
|
"Notes Pages",
|
|
7658
|
-
|
|
7658
|
+
chunk35YJ5RLU_js.buildNotesHtml(slideImages, slideIndices, slides),
|
|
7659
7659
|
"portrait",
|
|
7660
7660
|
colorFilter,
|
|
7661
7661
|
settings.frameSlides
|
|
@@ -7666,7 +7666,7 @@ function usePrintHandlers(input) {
|
|
|
7666
7666
|
const spp = settings.slidesPerPage;
|
|
7667
7667
|
openPrintWindow(
|
|
7668
7668
|
`Handout ${spp} per page`,
|
|
7669
|
-
|
|
7669
|
+
chunk35YJ5RLU_js.buildHandoutsHtml(slideImages, slideIndices, spp),
|
|
7670
7670
|
"portrait",
|
|
7671
7671
|
colorFilter,
|
|
7672
7672
|
settings.frameSlides
|
|
@@ -7730,8 +7730,8 @@ function useThemeHandlers(input) {
|
|
|
7730
7730
|
return;
|
|
7731
7731
|
}
|
|
7732
7732
|
await handler.updateThemeColorScheme(colorScheme);
|
|
7733
|
-
const previousMap = theme?.colorScheme ?
|
|
7734
|
-
setSlides((prev) =>
|
|
7733
|
+
const previousMap = theme?.colorScheme ? chunk35YJ5RLU_js.buildThemeColorMap(theme.colorScheme) : {};
|
|
7734
|
+
setSlides((prev) => chunk35YJ5RLU_js.reResolveSlideColors(prev, previousMap, colorScheme));
|
|
7735
7735
|
setTheme((prev) => prev ? { ...prev, colorScheme } : { colorScheme });
|
|
7736
7736
|
bumpHistory();
|
|
7737
7737
|
history.markDirty();
|
|
@@ -7836,7 +7836,7 @@ function useThemeSwitching(input) {
|
|
|
7836
7836
|
}
|
|
7837
7837
|
try {
|
|
7838
7838
|
await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
|
|
7839
|
-
const newData =
|
|
7839
|
+
const newData = chunk35YJ5RLU_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
|
|
7840
7840
|
onDataChange(newData);
|
|
7841
7841
|
onThemeChanged?.(preset);
|
|
7842
7842
|
} catch (error) {
|
|
@@ -7853,7 +7853,7 @@ function useThemeSwitching(input) {
|
|
|
7853
7853
|
}
|
|
7854
7854
|
try {
|
|
7855
7855
|
await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
|
|
7856
|
-
const newData =
|
|
7856
|
+
const newData = chunk35YJ5RLU_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
|
|
7857
7857
|
onDataChange(newData);
|
|
7858
7858
|
} catch (error) {
|
|
7859
7859
|
console.error("Failed to switch to custom theme:", error);
|
|
@@ -7865,12 +7865,12 @@ function useThemeSwitching(input) {
|
|
|
7865
7865
|
if (!data?.theme?.colorScheme) {
|
|
7866
7866
|
return void 0;
|
|
7867
7867
|
}
|
|
7868
|
-
return
|
|
7869
|
-
(p) =>
|
|
7868
|
+
return chunk35YJ5RLU_js.THEME_PRESETS.find(
|
|
7869
|
+
(p) => chunk35YJ5RLU_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
|
|
7870
7870
|
);
|
|
7871
7871
|
}, [data?.theme?.colorScheme]);
|
|
7872
7872
|
return {
|
|
7873
|
-
presets:
|
|
7873
|
+
presets: chunk35YJ5RLU_js.THEME_PRESETS,
|
|
7874
7874
|
switchToPreset,
|
|
7875
7875
|
switchToCustom,
|
|
7876
7876
|
currentPreset
|
|
@@ -7945,7 +7945,7 @@ function usePropertyHandlers(input) {
|
|
|
7945
7945
|
}
|
|
7946
7946
|
try {
|
|
7947
7947
|
const ab = await file.arrayBuffer();
|
|
7948
|
-
const h = new
|
|
7948
|
+
const h = new chunk35YJ5RLU_js.PptxHandler();
|
|
7949
7949
|
const other = await h.load(ab);
|
|
7950
7950
|
if (!other) {
|
|
7951
7951
|
return;
|
|
@@ -7955,7 +7955,7 @@ function usePropertyHandlers(input) {
|
|
|
7955
7955
|
width: canvasSize.width,
|
|
7956
7956
|
height: canvasSize.height
|
|
7957
7957
|
};
|
|
7958
|
-
setCompareResult(
|
|
7958
|
+
setCompareResult(chunk35YJ5RLU_js.comparePresentation(cur, other));
|
|
7959
7959
|
setIsComparePanelOpen(true);
|
|
7960
7960
|
} catch (err) {
|
|
7961
7961
|
console.warn("Compare failed:", err);
|
|
@@ -7972,7 +7972,7 @@ function usePropertyHandlers(input) {
|
|
|
7972
7972
|
if (!diff || diff.status === "unchanged") {
|
|
7973
7973
|
return;
|
|
7974
7974
|
}
|
|
7975
|
-
setSlides((prev) =>
|
|
7975
|
+
setSlides((prev) => chunk35YJ5RLU_js.applyAcceptSlide(prev, diff));
|
|
7976
7976
|
setIsDirty(true);
|
|
7977
7977
|
},
|
|
7978
7978
|
[compareResult, setSlides, setIsDirty]
|
|
@@ -7983,10 +7983,10 @@ function usePropertyHandlers(input) {
|
|
|
7983
7983
|
if (!compareResult) {
|
|
7984
7984
|
return;
|
|
7985
7985
|
}
|
|
7986
|
-
setSlides((prev) =>
|
|
7986
|
+
setSlides((prev) => chunk35YJ5RLU_js.applyAcceptAllSlides(prev, compareResult));
|
|
7987
7987
|
setIsDirty(true);
|
|
7988
7988
|
}, [compareResult, setSlides, setIsDirty]);
|
|
7989
|
-
const usedFontFamilies = react.useMemo(() =>
|
|
7989
|
+
const usedFontFamilies = react.useMemo(() => chunk35YJ5RLU_js.collectUsedFonts(slides), [slides]);
|
|
7990
7990
|
return {
|
|
7991
7991
|
handleUpdateNotes,
|
|
7992
7992
|
handleUpdateSlide,
|
|
@@ -8105,7 +8105,7 @@ function useIsMobile(input) {
|
|
|
8105
8105
|
const containerRef = input?.containerRef;
|
|
8106
8106
|
const isTouchDevice = react.useSyncExternalStore(
|
|
8107
8107
|
subscribeTouchCapability,
|
|
8108
|
-
|
|
8108
|
+
chunk35YJ5RLU_js.detectTouchDevice,
|
|
8109
8109
|
() => false
|
|
8110
8110
|
// server snapshot
|
|
8111
8111
|
);
|
|
@@ -8121,7 +8121,7 @@ function useIsMobile(input) {
|
|
|
8121
8121
|
}
|
|
8122
8122
|
return containerRef?.current?.clientHeight ?? window.innerHeight;
|
|
8123
8123
|
});
|
|
8124
|
-
const [orientation, setOrientation] = react.useState(
|
|
8124
|
+
const [orientation, setOrientation] = react.useState(chunk35YJ5RLU_js.detectOrientation);
|
|
8125
8125
|
const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = react.useState(false);
|
|
8126
8126
|
const [initialViewportHeight] = react.useState(
|
|
8127
8127
|
() => typeof window !== "undefined" ? window.innerHeight : 800
|
|
@@ -8165,7 +8165,7 @@ function useIsMobile(input) {
|
|
|
8165
8165
|
return;
|
|
8166
8166
|
}
|
|
8167
8167
|
const handleOrientationChange = () => {
|
|
8168
|
-
setOrientation(
|
|
8168
|
+
setOrientation(chunk35YJ5RLU_js.detectOrientation());
|
|
8169
8169
|
};
|
|
8170
8170
|
if (screen.orientation) {
|
|
8171
8171
|
screen.orientation.addEventListener("change", handleOrientationChange);
|
|
@@ -8195,9 +8195,9 @@ function useIsMobile(input) {
|
|
|
8195
8195
|
window.addEventListener("resize", handleResize);
|
|
8196
8196
|
return () => window.removeEventListener("resize", handleResize);
|
|
8197
8197
|
}, [isTouchDevice, initialViewportHeight]);
|
|
8198
|
-
const isMobile =
|
|
8199
|
-
const isTablet = !isMobile && containerWidth >=
|
|
8200
|
-
const isDesktop = !isMobile && containerWidth >=
|
|
8198
|
+
const isMobile = chunk35YJ5RLU_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
|
|
8199
|
+
const isTablet = !isMobile && containerWidth >= chunk35YJ5RLU_js.MOBILE_BREAKPOINT && containerWidth < chunk35YJ5RLU_js.TABLET_BREAKPOINT;
|
|
8200
|
+
const isDesktop = !isMobile && containerWidth >= chunk35YJ5RLU_js.TABLET_BREAKPOINT;
|
|
8201
8201
|
return {
|
|
8202
8202
|
isMobile,
|
|
8203
8203
|
isTablet,
|
|
@@ -8259,7 +8259,7 @@ function useViewerDialogs(input) {
|
|
|
8259
8259
|
);
|
|
8260
8260
|
const embeddedFontKey = (embeddedFontFamilies ?? []).join("\0");
|
|
8261
8261
|
const fontEmbedding = react.useMemo(
|
|
8262
|
-
() =>
|
|
8262
|
+
() => chunk35YJ5RLU_js.describeFontEmbedding(embeddedFontKey ? embeddedFontKey.split("\0") : []),
|
|
8263
8263
|
[embeddedFontKey]
|
|
8264
8264
|
);
|
|
8265
8265
|
const [embedFontsEnabled, setEmbedFontsEnabled] = react.useState(fontEmbedding.initialEnabled);
|
|
@@ -8267,11 +8267,11 @@ function useViewerDialogs(input) {
|
|
|
8267
8267
|
setEmbedFontsEnabled(fontEmbedding.initialEnabled);
|
|
8268
8268
|
}, [fontEmbedding]);
|
|
8269
8269
|
const [isNarrowViewport, setIsNarrowViewport] = react.useState(
|
|
8270
|
-
() => typeof window !== "undefined" ?
|
|
8270
|
+
() => typeof window !== "undefined" ? chunk35YJ5RLU_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
|
|
8271
8271
|
);
|
|
8272
8272
|
react.useEffect(() => {
|
|
8273
8273
|
const handleWindow = () => setIsNarrowViewport(
|
|
8274
|
-
|
|
8274
|
+
chunk35YJ5RLU_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
|
|
8275
8275
|
);
|
|
8276
8276
|
let observer = null;
|
|
8277
8277
|
let raf = 0;
|
|
@@ -8285,12 +8285,12 @@ function useViewerDialogs(input) {
|
|
|
8285
8285
|
const entry = entries[0];
|
|
8286
8286
|
if (entry) {
|
|
8287
8287
|
setIsNarrowViewport(
|
|
8288
|
-
|
|
8288
|
+
chunk35YJ5RLU_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
|
|
8289
8289
|
);
|
|
8290
8290
|
}
|
|
8291
8291
|
});
|
|
8292
8292
|
observer.observe(el);
|
|
8293
|
-
setIsNarrowViewport(
|
|
8293
|
+
setIsNarrowViewport(chunk35YJ5RLU_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
|
|
8294
8294
|
};
|
|
8295
8295
|
attach();
|
|
8296
8296
|
window.addEventListener("resize", handleWindow);
|
|
@@ -8448,15 +8448,15 @@ function useViewerDialogs(input) {
|
|
|
8448
8448
|
};
|
|
8449
8449
|
}
|
|
8450
8450
|
function computeGridSpacingPx2(documentGridSpacing) {
|
|
8451
|
-
return
|
|
8451
|
+
return chunk35YJ5RLU_js.computeGridSpacingPx(documentGridSpacing, chunkUU6NFFRR_js.GRID_SIZE);
|
|
8452
8452
|
}
|
|
8453
8453
|
function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
|
|
8454
8454
|
const activeShow = activeCustomShowId ? customShows.find((show) => show.id === activeCustomShowId) : void 0;
|
|
8455
|
-
return
|
|
8455
|
+
return chunk35YJ5RLU_js.resolveShowSlideIndexes(slides, activeShow);
|
|
8456
8456
|
}
|
|
8457
8457
|
function computeSlideSectionGroups(slides, sections) {
|
|
8458
|
-
return
|
|
8459
|
-
id: group.section?.id ?? (sections.length > 0 ?
|
|
8458
|
+
return chunk35YJ5RLU_js.groupSlidesBySection(sections, slides).map((group) => ({
|
|
8459
|
+
id: group.section?.id ?? (sections.length > 0 ? chunkUU6NFFRR_js.UNGROUPED_SECTION_ID : chunkUU6NFFRR_js.DEFAULT_SECTION_GROUP_ID),
|
|
8460
8460
|
label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
|
|
8461
8461
|
slideIndexes: group.slideIndexes,
|
|
8462
8462
|
...group.section?.color !== void 0 ? { color: group.section.color } : {},
|
|
@@ -8468,7 +8468,7 @@ function computeMasterPseudoSlide(mode, activeLayout, activeMaster) {
|
|
|
8468
8468
|
return void 0;
|
|
8469
8469
|
}
|
|
8470
8470
|
const document2 = activeLayout ? { slideMasters: [{ ...activeMaster, layouts: [activeLayout] }] } : { slideMasters: [activeMaster] };
|
|
8471
|
-
return
|
|
8471
|
+
return chunk35YJ5RLU_js.masterViewPseudoSlide(document2, {
|
|
8472
8472
|
tab: "slides",
|
|
8473
8473
|
masterIndex: 0,
|
|
8474
8474
|
layoutIndex: activeLayout ? 0 : null
|
|
@@ -8496,10 +8496,10 @@ function useDerivedSlideState(input) {
|
|
|
8496
8496
|
);
|
|
8497
8497
|
const slideSectionGroups = react.useMemo(
|
|
8498
8498
|
() => computeSlideSectionGroups(slides, sections).map((group) => {
|
|
8499
|
-
if (group.id ===
|
|
8499
|
+
if (group.id === chunkUU6NFFRR_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
|
|
8500
8500
|
return { ...group, label: t("pptx.slides.ungroupedSlides") };
|
|
8501
8501
|
}
|
|
8502
|
-
if (group.id ===
|
|
8502
|
+
if (group.id === chunkUU6NFFRR_js.DEFAULT_SECTION_GROUP_ID && group.label === "Slides") {
|
|
8503
8503
|
return { ...group, label: t("pptx.sections.slides") };
|
|
8504
8504
|
}
|
|
8505
8505
|
return group;
|
|
@@ -8599,13 +8599,13 @@ function useAnnotationHandlers(input) {
|
|
|
8599
8599
|
}, [annotations, setMode, setSlides, history]);
|
|
8600
8600
|
const handleSetMode = react.useCallback(
|
|
8601
8601
|
(nextMode) => {
|
|
8602
|
-
if (mode === "present" && nextMode !== "present" && !
|
|
8602
|
+
if (mode === "present" && nextMode !== "present" && !chunk35YJ5RLU_js.mayLeaveSlideShow()) {
|
|
8603
8603
|
return;
|
|
8604
8604
|
}
|
|
8605
8605
|
if (nextMode === "present") {
|
|
8606
8606
|
presentation.enterPresentMode();
|
|
8607
8607
|
} else if (mode === "present" && annotations.hasAnyAnnotations) {
|
|
8608
|
-
|
|
8608
|
+
chunk35YJ5RLU_js.stopAllPersistentAudio();
|
|
8609
8609
|
pendingModeAfterAnnotationsRef.current = nextMode;
|
|
8610
8610
|
if (promptKeepInkAnnotations) {
|
|
8611
8611
|
setShowKeepAnnotationsDialog(true);
|
|
@@ -8614,7 +8614,7 @@ function useAnnotationHandlers(input) {
|
|
|
8614
8614
|
}
|
|
8615
8615
|
} else {
|
|
8616
8616
|
if (mode === "present") {
|
|
8617
|
-
|
|
8617
|
+
chunk35YJ5RLU_js.stopAllPersistentAudio();
|
|
8618
8618
|
}
|
|
8619
8619
|
setMode(nextMode);
|
|
8620
8620
|
}
|
|
@@ -8685,13 +8685,13 @@ function useSerialize(input) {
|
|
|
8685
8685
|
let processedSlide = slide;
|
|
8686
8686
|
if (pendingEditId) {
|
|
8687
8687
|
const updatedElements = slide.elements.map((el) => {
|
|
8688
|
-
if (el.id !== pendingEditId || !
|
|
8688
|
+
if (el.id !== pendingEditId || !chunk35YJ5RLU_js.hasTextProperties(el)) {
|
|
8689
8689
|
return el;
|
|
8690
8690
|
}
|
|
8691
8691
|
return {
|
|
8692
8692
|
...el,
|
|
8693
8693
|
text: pendingEditText,
|
|
8694
|
-
textSegments:
|
|
8694
|
+
textSegments: chunk35YJ5RLU_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
|
|
8695
8695
|
};
|
|
8696
8696
|
});
|
|
8697
8697
|
if (updatedElements.some((el, i) => el !== slide.elements[i])) {
|
|
@@ -8704,19 +8704,19 @@ function useSerialize(input) {
|
|
|
8704
8704
|
const pptxGuides = guides.map((g) => ({
|
|
8705
8705
|
id: g.id,
|
|
8706
8706
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
8707
|
-
positionEmu:
|
|
8707
|
+
positionEmu: chunk35YJ5RLU_js.guidePxToEmu(g.position)
|
|
8708
8708
|
}));
|
|
8709
8709
|
return {
|
|
8710
8710
|
...processedSlide,
|
|
8711
8711
|
guides: pptxGuides.length > 0 ? pptxGuides : void 0
|
|
8712
8712
|
};
|
|
8713
8713
|
});
|
|
8714
|
-
const slidesToSave =
|
|
8714
|
+
const slidesToSave = chunk35YJ5RLU_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
|
|
8715
8715
|
const saveOptions = {
|
|
8716
8716
|
// Without this the Slide Size card edited a viewer-only pixel value and
|
|
8717
8717
|
// the saved `p:sldSz` never moved: passing `slideSize` is the only way a
|
|
8718
8718
|
// slide-size edit reaches the file.
|
|
8719
|
-
slideSize:
|
|
8719
|
+
slideSize: chunk35YJ5RLU_js.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize }).size,
|
|
8720
8720
|
headerFooter,
|
|
8721
8721
|
presentationProperties,
|
|
8722
8722
|
customShows: customShows.length > 0 ? customShows : void 0,
|
|
@@ -8728,9 +8728,9 @@ function useSerialize(input) {
|
|
|
8728
8728
|
slideMasters,
|
|
8729
8729
|
notesMaster,
|
|
8730
8730
|
handoutMaster,
|
|
8731
|
-
...
|
|
8731
|
+
...chunk35YJ5RLU_js.embeddedFontSaveOptions(embedFonts)
|
|
8732
8732
|
};
|
|
8733
|
-
return
|
|
8733
|
+
return chunk35YJ5RLU_js.saveDeckWithPassword(handler, slidesToSave, saveOptions, { password, purpose });
|
|
8734
8734
|
}, [
|
|
8735
8735
|
slides,
|
|
8736
8736
|
templateElementsBySlideId,
|
|
@@ -8765,7 +8765,7 @@ function useRecoveryDetection(input) {
|
|
|
8765
8765
|
const onRestore = input.onRestore;
|
|
8766
8766
|
const openVersionHistory = input.openVersionHistory;
|
|
8767
8767
|
react.useEffect(() => {
|
|
8768
|
-
if (!
|
|
8768
|
+
if (!chunk35YJ5RLU_js.shouldProbeAutosaveRecovery({
|
|
8769
8769
|
alreadyChecked: recoveryCheckedRef.current,
|
|
8770
8770
|
filePath,
|
|
8771
8771
|
loading,
|
|
@@ -8777,7 +8777,7 @@ function useRecoveryDetection(input) {
|
|
|
8777
8777
|
}
|
|
8778
8778
|
recoveryCheckedRef.current = true;
|
|
8779
8779
|
void (async () => {
|
|
8780
|
-
const offer = await
|
|
8780
|
+
const offer = await chunk35YJ5RLU_js.probeAutosaveRecovery(filePath);
|
|
8781
8781
|
if (!offer) {
|
|
8782
8782
|
return;
|
|
8783
8783
|
}
|
|
@@ -8790,7 +8790,7 @@ function useRecoveryDetection(input) {
|
|
|
8790
8790
|
const record = recordRef.current;
|
|
8791
8791
|
setPrompt(null);
|
|
8792
8792
|
if (record && onRestore) {
|
|
8793
|
-
onRestore(
|
|
8793
|
+
onRestore(chunk35YJ5RLU_js.acceptAutosaveRecovery(record));
|
|
8794
8794
|
}
|
|
8795
8795
|
recordRef.current = null;
|
|
8796
8796
|
}, [onRestore]);
|
|
@@ -8799,7 +8799,7 @@ function useRecoveryDetection(input) {
|
|
|
8799
8799
|
setPrompt(null);
|
|
8800
8800
|
recordRef.current = null;
|
|
8801
8801
|
if (record) {
|
|
8802
|
-
void
|
|
8802
|
+
void chunk35YJ5RLU_js.discardAutosaveRecovery(record);
|
|
8803
8803
|
}
|
|
8804
8804
|
}, []);
|
|
8805
8805
|
return { prompt, restore, discard };
|
|
@@ -8839,7 +8839,7 @@ function usePresentationSetup(input) {
|
|
|
8839
8839
|
containerRef,
|
|
8840
8840
|
content,
|
|
8841
8841
|
onSetMode: (nextMode) => {
|
|
8842
|
-
if (mode === "present" && nextMode !== "present" && !
|
|
8842
|
+
if (mode === "present" && nextMode !== "present" && !chunk35YJ5RLU_js.mayLeaveSlideShow()) {
|
|
8843
8843
|
return;
|
|
8844
8844
|
}
|
|
8845
8845
|
if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations && promptKeepInkAnnotations) {
|
|
@@ -8847,7 +8847,7 @@ function usePresentationSetup(input) {
|
|
|
8847
8847
|
setShowKeepAnnotationsDialog(true);
|
|
8848
8848
|
} else {
|
|
8849
8849
|
if (mode === "present" && nextMode !== "present") {
|
|
8850
|
-
|
|
8850
|
+
chunk35YJ5RLU_js.stopAllPersistentAudio();
|
|
8851
8851
|
stopAnimationSound();
|
|
8852
8852
|
}
|
|
8853
8853
|
setMode(nextMode);
|
|
@@ -8902,10 +8902,10 @@ function usePresentationSetup(input) {
|
|
|
8902
8902
|
onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
|
|
8903
8903
|
onToggleSubtitles,
|
|
8904
8904
|
onSaveRehearsalTimings: (timings) => {
|
|
8905
|
-
setSlides((prev) =>
|
|
8905
|
+
setSlides((prev) => chunk35YJ5RLU_js.applyRehearsalTimings(prev, timings));
|
|
8906
8906
|
history.markDirty();
|
|
8907
8907
|
},
|
|
8908
|
-
loopContinuously:
|
|
8908
|
+
loopContinuously: chunk35YJ5RLU_js.shouldLoopContinuously(presentationProperties),
|
|
8909
8909
|
showWithAnimation: presentationProperties.showWithAnimation,
|
|
8910
8910
|
useTimings: presentationProperties.advanceMode !== "manual",
|
|
8911
8911
|
endWithBlackSlide
|
|
@@ -9098,7 +9098,7 @@ function useEditorOperations(input) {
|
|
|
9098
9098
|
const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
|
|
9099
9099
|
react.useEffect(() => {
|
|
9100
9100
|
if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
|
|
9101
|
-
copiedFormatRef.current =
|
|
9101
|
+
copiedFormatRef.current = chunk35YJ5RLU_js.copyFormatFromElement(selectedElement);
|
|
9102
9102
|
} else if (!formatPainterActive) {
|
|
9103
9103
|
copiedFormatRef.current = null;
|
|
9104
9104
|
}
|
|
@@ -9124,12 +9124,12 @@ function useEditorOperations(input) {
|
|
|
9124
9124
|
e.stopPropagation();
|
|
9125
9125
|
const element = elementLookup.get(elementId);
|
|
9126
9126
|
if (element) {
|
|
9127
|
-
const updated =
|
|
9127
|
+
const updated = chunk35YJ5RLU_js.applyFormatToElement(element, copiedFormatRef.current);
|
|
9128
9128
|
const updates = {};
|
|
9129
|
-
if (
|
|
9129
|
+
if (chunk35YJ5RLU_js.hasShapeProperties(updated)) {
|
|
9130
9130
|
updates.shapeStyle = updated.shapeStyle;
|
|
9131
9131
|
}
|
|
9132
|
-
if (
|
|
9132
|
+
if (chunk35YJ5RLU_js.hasTextProperties(updated)) {
|
|
9133
9133
|
updates.textStyle = updated.textStyle;
|
|
9134
9134
|
}
|
|
9135
9135
|
ops.updateElementById(elementId, updates);
|
|
@@ -9283,7 +9283,7 @@ function collectReferencedFontFamilies(slides) {
|
|
|
9283
9283
|
const families = /* @__PURE__ */ new Set();
|
|
9284
9284
|
for (const slide of slides) {
|
|
9285
9285
|
for (const el of slide.elements) {
|
|
9286
|
-
if (
|
|
9286
|
+
if (chunk35YJ5RLU_js.hasTextProperties(el) && el.textSegments) {
|
|
9287
9287
|
for (const seg of el.textSegments) {
|
|
9288
9288
|
if (seg.style.fontFamily) {
|
|
9289
9289
|
families.add(seg.style.fontFamily);
|
|
@@ -9531,7 +9531,7 @@ function useKeyboardShortcuts(input) {
|
|
|
9531
9531
|
inputRef.current = input;
|
|
9532
9532
|
const handleKeyDown = react.useCallback((e) => {
|
|
9533
9533
|
const current = inputRef.current;
|
|
9534
|
-
const { action, dx, dy } =
|
|
9534
|
+
const { action, dx, dy } = chunk35YJ5RLU_js.mapEditorKey(e, {
|
|
9535
9535
|
canEdit: current.canEdit,
|
|
9536
9536
|
// The Slide Master view is an editing surface, not a viewing one.
|
|
9537
9537
|
// Gating on `mode !== 'edit'` alone made `mapEditorKey` return
|
|
@@ -9544,7 +9544,7 @@ function useKeyboardShortcuts(input) {
|
|
|
9544
9544
|
hasSelection: current.hasSelection,
|
|
9545
9545
|
isEditingText: Boolean(current.inlineEditingElementId || current.tableEditorState?.isEditing),
|
|
9546
9546
|
isDrawing: current.activeTool !== "select",
|
|
9547
|
-
isTextInputTarget:
|
|
9547
|
+
isTextInputTarget: chunk35YJ5RLU_js.isEditorTextInputTarget(e.target)
|
|
9548
9548
|
});
|
|
9549
9549
|
if (action === null) {
|
|
9550
9550
|
return;
|
|
@@ -9850,7 +9850,7 @@ function useViewerIntegration(input) {
|
|
|
9850
9850
|
return zoom.scale;
|
|
9851
9851
|
},
|
|
9852
9852
|
setZoom(level) {
|
|
9853
|
-
zoom.setScale(
|
|
9853
|
+
zoom.setScale(chunk35YJ5RLU_js.clampZoomScale(level));
|
|
9854
9854
|
},
|
|
9855
9855
|
zoomIn() {
|
|
9856
9856
|
zoom.handleZoomIn();
|
|
@@ -10066,7 +10066,7 @@ function useReducedMotion() {
|
|
|
10066
10066
|
}
|
|
10067
10067
|
function useViewerOptions() {
|
|
10068
10068
|
const storeRef = react.useRef(null);
|
|
10069
|
-
storeRef.current ??=
|
|
10069
|
+
storeRef.current ??= chunk35YJ5RLU_js.createViewerOptionsStore();
|
|
10070
10070
|
const store = storeRef.current;
|
|
10071
10071
|
const options = react.useSyncExternalStore(
|
|
10072
10072
|
(onStoreChange) => store.subscribe(onStoreChange),
|
|
@@ -10075,9 +10075,9 @@ function useViewerOptions() {
|
|
|
10075
10075
|
);
|
|
10076
10076
|
return { optionsStore: store, options };
|
|
10077
10077
|
}
|
|
10078
|
-
var KNOWN_TAB_IDS = new Set(
|
|
10078
|
+
var KNOWN_TAB_IDS = new Set(chunk35YJ5RLU_js.TOOLBAR_TABS.map((tab) => tab.id));
|
|
10079
10079
|
function computeToolbarVisibility(hiddenActions) {
|
|
10080
|
-
const isHidden = (id) =>
|
|
10080
|
+
const isHidden = (id) => chunk35YJ5RLU_js.isActionHidden(id, hiddenActions);
|
|
10081
10081
|
const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id);
|
|
10082
10082
|
return { isHidden, isTabVisible };
|
|
10083
10083
|
}
|
|
@@ -10163,12 +10163,12 @@ function useYjsDocumentSync({
|
|
|
10163
10163
|
return;
|
|
10164
10164
|
}
|
|
10165
10165
|
try {
|
|
10166
|
-
const handler = new
|
|
10166
|
+
const handler = new chunk35YJ5RLU_js.PptxHandler();
|
|
10167
10167
|
await handler.load(sourceBytes.buffer);
|
|
10168
|
-
const currentSlides =
|
|
10168
|
+
const currentSlides = chunk35YJ5RLU_js.readSlidesFromYDoc(
|
|
10169
10169
|
doc
|
|
10170
10170
|
);
|
|
10171
|
-
const slidesToSave =
|
|
10171
|
+
const slidesToSave = chunk35YJ5RLU_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
|
|
10172
10172
|
const bytes = await handler.save(slidesToSave);
|
|
10173
10173
|
config.onWriteBack(bytes);
|
|
10174
10174
|
} catch {
|
|
@@ -10183,10 +10183,10 @@ function useYjsDocumentSync({
|
|
|
10183
10183
|
if (!doc || !isConnected) {
|
|
10184
10184
|
return;
|
|
10185
10185
|
}
|
|
10186
|
-
const docSlides =
|
|
10186
|
+
const docSlides = chunk35YJ5RLU_js.readSlidesFromYDoc(
|
|
10187
10187
|
doc
|
|
10188
10188
|
);
|
|
10189
|
-
if (!
|
|
10189
|
+
if (!chunk35YJ5RLU_js.shouldRoomSlidesReplaceLoad(loadOrigin, docSlides.length)) {
|
|
10190
10190
|
return;
|
|
10191
10191
|
}
|
|
10192
10192
|
lastSyncedRef.current = JSON.stringify(docSlides);
|
|
@@ -10205,11 +10205,11 @@ function useYjsDocumentSync({
|
|
|
10205
10205
|
lastSyncedRef.current = serialized;
|
|
10206
10206
|
void (async () => {
|
|
10207
10207
|
const factories = await getFactories();
|
|
10208
|
-
|
|
10208
|
+
chunk35YJ5RLU_js.reconcileSlidesInYDoc(
|
|
10209
10209
|
slides,
|
|
10210
10210
|
doc,
|
|
10211
10211
|
factories,
|
|
10212
|
-
|
|
10212
|
+
chunk35YJ5RLU_js.LOCAL_SYNC_ORIGIN
|
|
10213
10213
|
);
|
|
10214
10214
|
scheduleWriteBack();
|
|
10215
10215
|
})();
|
|
@@ -10223,10 +10223,10 @@ function useYjsDocumentSync({
|
|
|
10223
10223
|
return;
|
|
10224
10224
|
}
|
|
10225
10225
|
const handleChange = (_events, transaction) => {
|
|
10226
|
-
if (transaction?.origin ===
|
|
10226
|
+
if (transaction?.origin === chunk35YJ5RLU_js.LOCAL_SYNC_ORIGIN) {
|
|
10227
10227
|
return;
|
|
10228
10228
|
}
|
|
10229
|
-
const remoteSlides =
|
|
10229
|
+
const remoteSlides = chunk35YJ5RLU_js.readSlidesFromYDoc(
|
|
10230
10230
|
doc
|
|
10231
10231
|
);
|
|
10232
10232
|
if (remoteSlides.length === 0) {
|
|
@@ -10242,7 +10242,7 @@ function useYjsDocumentSync({
|
|
|
10242
10242
|
isApplyingRemoteRef.current = false;
|
|
10243
10243
|
scheduleWriteBack();
|
|
10244
10244
|
};
|
|
10245
|
-
const unobserve =
|
|
10245
|
+
const unobserve = chunk35YJ5RLU_js.observeYDocSlides(
|
|
10246
10246
|
doc,
|
|
10247
10247
|
handleChange
|
|
10248
10248
|
);
|
|
@@ -10280,7 +10280,7 @@ function useBroadcastFollower({
|
|
|
10280
10280
|
if (!broadcaster) {
|
|
10281
10281
|
return;
|
|
10282
10282
|
}
|
|
10283
|
-
if (!
|
|
10283
|
+
if (!chunk35YJ5RLU_js.shouldAutoFollowBroadcaster({
|
|
10284
10284
|
localRole: collab.config.role,
|
|
10285
10285
|
broadcasterRole: broadcaster.role
|
|
10286
10286
|
})) {
|
|
@@ -10455,10 +10455,10 @@ function useTouchGestures(input) {
|
|
|
10455
10455
|
if (!el || !enabled) {
|
|
10456
10456
|
return;
|
|
10457
10457
|
}
|
|
10458
|
-
const recognizer =
|
|
10458
|
+
const recognizer = chunk35YJ5RLU_js.createTouchGestureRecognizer({
|
|
10459
10459
|
getScale: () => scaleRef.current,
|
|
10460
|
-
minScale:
|
|
10461
|
-
maxScale:
|
|
10460
|
+
minScale: chunk35YJ5RLU_js.MIN_ZOOM_SCALE,
|
|
10461
|
+
maxScale: chunk35YJ5RLU_js.MAX_ZOOM_SCALE,
|
|
10462
10462
|
callbacks: {
|
|
10463
10463
|
onPinchZoom: (newScale) => callbacksRef.current.onPinchZoom?.(newScale),
|
|
10464
10464
|
onSwipe: (direction) => callbacksRef.current.onSwipe?.(direction),
|
|
@@ -10498,7 +10498,7 @@ function scrollFocusedIntoView(keyboardInset) {
|
|
|
10498
10498
|
return;
|
|
10499
10499
|
}
|
|
10500
10500
|
const rect = active.getBoundingClientRect();
|
|
10501
|
-
const delta =
|
|
10501
|
+
const delta = chunk35YJ5RLU_js.computeScrollDelta(
|
|
10502
10502
|
{ top: rect.top, bottom: rect.bottom },
|
|
10503
10503
|
window.innerHeight,
|
|
10504
10504
|
keyboardInset
|
|
@@ -10518,8 +10518,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10518
10518
|
return;
|
|
10519
10519
|
}
|
|
10520
10520
|
const update = () => {
|
|
10521
|
-
const metrics =
|
|
10522
|
-
const inset = metrics ?
|
|
10521
|
+
const metrics = chunk35YJ5RLU_js.readViewportMetrics(window);
|
|
10522
|
+
const inset = metrics ? chunk35YJ5RLU_js.computeKeyboardInset(metrics) : 0;
|
|
10523
10523
|
setKeyboardInset(inset);
|
|
10524
10524
|
if (inset > 0) {
|
|
10525
10525
|
window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
|
|
@@ -10530,8 +10530,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10530
10530
|
vv.addEventListener("scroll", update);
|
|
10531
10531
|
const onFocusIn = () => {
|
|
10532
10532
|
window.requestAnimationFrame(() => {
|
|
10533
|
-
const metrics =
|
|
10534
|
-
const inset = metrics ?
|
|
10533
|
+
const metrics = chunk35YJ5RLU_js.readViewportMetrics(window);
|
|
10534
|
+
const inset = metrics ? chunk35YJ5RLU_js.computeKeyboardInset(metrics) : 0;
|
|
10535
10535
|
if (inset > 0) {
|
|
10536
10536
|
scrollFocusedIntoView(inset);
|
|
10537
10537
|
}
|
|
@@ -10544,7 +10544,7 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10544
10544
|
document.removeEventListener("focusin", onFocusIn);
|
|
10545
10545
|
};
|
|
10546
10546
|
}, [enabled]);
|
|
10547
|
-
return { keyboardInset, isKeyboardOpen:
|
|
10547
|
+
return { keyboardInset, isKeyboardOpen: chunk35YJ5RLU_js.isKeyboardOpen(keyboardInset) };
|
|
10548
10548
|
}
|
|
10549
10549
|
|
|
10550
10550
|
// src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
|
|
@@ -10571,7 +10571,7 @@ function buildCanvasProps(input) {
|
|
|
10571
10571
|
} = input;
|
|
10572
10572
|
const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
|
|
10573
10573
|
const effectiveTemplateElements = mode === "master" ? s.activeLayout ? s.activeMaster?.elements ?? [] : [] : templateElements;
|
|
10574
|
-
const fieldContext =
|
|
10574
|
+
const fieldContext = chunk35YJ5RLU_js.buildFieldSubstitutionContext({
|
|
10575
10575
|
headerFooter: s.headerFooter,
|
|
10576
10576
|
customProperties: s.customProperties,
|
|
10577
10577
|
slide: activeSlide
|
|
@@ -10581,13 +10581,13 @@ function buildCanvasProps(input) {
|
|
|
10581
10581
|
if (mode === "present") {
|
|
10582
10582
|
presentation.handlePresentationAction(action);
|
|
10583
10583
|
} else if (action.url) {
|
|
10584
|
-
|
|
10584
|
+
chunk35YJ5RLU_js.safeOpenUrl(action.url);
|
|
10585
10585
|
}
|
|
10586
10586
|
};
|
|
10587
10587
|
const handleHyperlinkClick = (url) => {
|
|
10588
|
-
if (
|
|
10588
|
+
if (chunk35YJ5RLU_js.isPpactionUrl(url)) {
|
|
10589
10589
|
if (mode === "present") {
|
|
10590
|
-
const parsed =
|
|
10590
|
+
const parsed = chunk35YJ5RLU_js.parsePpactionUrl(url);
|
|
10591
10591
|
if (parsed) {
|
|
10592
10592
|
presentation.handlePresentationAction({
|
|
10593
10593
|
action: parsed.action,
|
|
@@ -10597,7 +10597,7 @@ function buildCanvasProps(input) {
|
|
|
10597
10597
|
}
|
|
10598
10598
|
return;
|
|
10599
10599
|
}
|
|
10600
|
-
|
|
10600
|
+
chunk35YJ5RLU_js.safeOpenUrl(url);
|
|
10601
10601
|
};
|
|
10602
10602
|
return {
|
|
10603
10603
|
activeSlide: effectiveSlide,
|
|
@@ -10693,7 +10693,7 @@ function buildCanvasProps(input) {
|
|
|
10693
10693
|
|
|
10694
10694
|
// src/viewer/hooks/useScopedLayoutOptions.ts
|
|
10695
10695
|
function scopeLayoutOptionsToActiveSlide(options, activeSlide) {
|
|
10696
|
-
return
|
|
10696
|
+
return chunk35YJ5RLU_js.scopeLayoutOptionsToSlide(options, activeSlide?.layoutPath);
|
|
10697
10697
|
}
|
|
10698
10698
|
|
|
10699
10699
|
// src/viewer/hooks/useViewerBuildingBlocks-toolbar-handlers.ts
|
|
@@ -10706,7 +10706,7 @@ function buildToolbarAnimationHandlers(input) {
|
|
|
10706
10706
|
const current = activeSlide.animations ?? [];
|
|
10707
10707
|
if (group === "motionPath") {
|
|
10708
10708
|
propertyHandlers.handleUpdateSlide({
|
|
10709
|
-
animations:
|
|
10709
|
+
animations: chunk35YJ5RLU_js.applyMotionPathPreset(current, selectedElement.id, preset)
|
|
10710
10710
|
});
|
|
10711
10711
|
return;
|
|
10712
10712
|
}
|
|
@@ -10901,7 +10901,7 @@ function buildToolbarProps(input) {
|
|
|
10901
10901
|
onOpenFile,
|
|
10902
10902
|
onOpenRecentFile,
|
|
10903
10903
|
onCreatePresentation: (templateId) => {
|
|
10904
|
-
s.setSlides(
|
|
10904
|
+
s.setSlides(chunk35YJ5RLU_js.createBackstagePresentation(templateId));
|
|
10905
10905
|
s.setActiveSlideIndex(0);
|
|
10906
10906
|
s.setSelectedElementId(null);
|
|
10907
10907
|
s.setSelectedElementIds([]);
|
|
@@ -10930,7 +10930,7 @@ function buildToolbarProps(input) {
|
|
|
10930
10930
|
loadLayoutPreviews: input.loadLayoutPreviews,
|
|
10931
10931
|
onInsertSlideFromLayout: slideOps.handleInsertSlideFromLayout,
|
|
10932
10932
|
onInsertSlideFromTemplate: slideOps.handleInsertSlideFromTemplate,
|
|
10933
|
-
templateScheme:
|
|
10933
|
+
templateScheme: chunk35YJ5RLU_js.templateSchemeFromTheme(s.theme?.colorScheme),
|
|
10934
10934
|
customShows: s.customShows,
|
|
10935
10935
|
activeCustomShowId: s.activeCustomShowId,
|
|
10936
10936
|
onSetActiveCustomShowId: s.setActiveCustomShowId,
|
|
@@ -10971,7 +10971,7 @@ function buildToolbarProps(input) {
|
|
|
10971
10971
|
isCommentsPanelOpen: s.isInspectorPaneOpen,
|
|
10972
10972
|
slideCommentCount: activeSlide?.comments?.length ?? 0,
|
|
10973
10973
|
formatPainterActive: s.formatPainterActive,
|
|
10974
|
-
canActivateFormatPainter:
|
|
10974
|
+
canActivateFormatPainter: chunk35YJ5RLU_js.hasCopyableFormat(selectedElement),
|
|
10975
10975
|
onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
|
|
10976
10976
|
isSelectionPaneOpen: s.isSelectionPaneOpen,
|
|
10977
10977
|
onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
|
|
@@ -11259,7 +11259,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
11259
11259
|
}, [incomingContent]);
|
|
11260
11260
|
const onOpenFile = react.useCallback(() => {
|
|
11261
11261
|
void (async () => {
|
|
11262
|
-
const picked = await
|
|
11262
|
+
const picked = await chunk35YJ5RLU_js.openPptxFile();
|
|
11263
11263
|
if (picked) {
|
|
11264
11264
|
setContent(picked.buffer);
|
|
11265
11265
|
}
|
|
@@ -11267,7 +11267,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
11267
11267
|
}, []);
|
|
11268
11268
|
const onOpenRecentFile = react.useCallback((key) => {
|
|
11269
11269
|
void (async () => {
|
|
11270
|
-
const bytes = await
|
|
11270
|
+
const bytes = await chunk35YJ5RLU_js.readBackstageRecentFile(key);
|
|
11271
11271
|
if (bytes) {
|
|
11272
11272
|
setContent(bytes);
|
|
11273
11273
|
}
|