pptx-react-viewer 2.6.1 → 2.6.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 +2 -0
- package/dist/{AiChatPanel-RVZOGGFK.mjs → AiChatPanel-5IAXQYGH.mjs} +3 -3
- package/dist/AiChatPanel-5IAXQYGH.mjs.br +0 -0
- package/dist/AiChatPanel-5IAXQYGH.mjs.gz +0 -0
- package/dist/{AiChatPanel-LBK6YRKH.js → AiChatPanel-IC2Q3H3N.js} +22 -22
- package/dist/AiChatPanel-IC2Q3H3N.js.br +0 -0
- package/dist/AiChatPanel-IC2Q3H3N.js.gz +0 -0
- package/dist/{Model3DScene-L46RNRU5.js → Model3DScene-GOFY2PQS.js} +2 -2
- package/dist/Model3DScene-GOFY2PQS.js.br +0 -0
- package/dist/Model3DScene-GOFY2PQS.js.gz +0 -0
- package/dist/{Model3DScene-WBUZ74G3.mjs → Model3DScene-UEU7L4QY.mjs} +1 -1
- package/dist/Model3DScene-UEU7L4QY.mjs.br +0 -0
- package/dist/Model3DScene-UEU7L4QY.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-RWMGMREC.js → SurfaceChart3DScene-5TILKZMY.js} +2 -2
- package/dist/SurfaceChart3DScene-5TILKZMY.js.br +0 -0
- package/dist/SurfaceChart3DScene-5TILKZMY.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-CB32AJS4.mjs → SurfaceChart3DScene-KCJUDJUK.mjs} +1 -1
- package/dist/{SurfaceChart3DScene-CB32AJS4.mjs.br → SurfaceChart3DScene-KCJUDJUK.mjs.br} +0 -0
- package/dist/SurfaceChart3DScene-KCJUDJUK.mjs.gz +0 -0
- package/dist/{chunk-T7AMP24E.js → chunk-G7PJSVUS.js} +8 -1
- package/dist/chunk-G7PJSVUS.js.br +0 -0
- package/dist/{chunk-T7AMP24E.js.gz → chunk-G7PJSVUS.js.gz} +0 -0
- package/dist/{chunk-AX4Q5JWN.js → chunk-IGYK3NK5.js} +3 -3
- package/dist/chunk-IGYK3NK5.js.br +0 -0
- package/dist/chunk-IGYK3NK5.js.gz +0 -0
- package/dist/{chunk-BL3WW2BS.mjs → chunk-LJPRMPNA.mjs} +7 -7
- package/dist/chunk-LJPRMPNA.mjs.br +0 -0
- package/dist/chunk-LJPRMPNA.mjs.gz +0 -0
- package/dist/{chunk-54FSVX3O.mjs → chunk-MQYNBEOY.mjs} +2 -2
- package/dist/chunk-MQYNBEOY.mjs.br +0 -0
- package/dist/chunk-MQYNBEOY.mjs.gz +0 -0
- package/dist/{chunk-IEFH47TF.js → chunk-TMU7Z3CU.js} +843 -843
- package/dist/chunk-TMU7Z3CU.js.br +0 -0
- package/dist/chunk-TMU7Z3CU.js.gz +0 -0
- package/dist/{chunk-ZUNDIOGD.mjs → chunk-UV5R7IQY.mjs} +2 -2
- package/dist/chunk-UV5R7IQY.mjs.br +0 -0
- package/dist/chunk-UV5R7IQY.mjs.gz +0 -0
- package/dist/{chunk-2VE3LVKZ.js → chunk-W27U3GQS.js} +315 -315
- package/dist/chunk-W27U3GQS.js.br +0 -0
- package/dist/chunk-W27U3GQS.js.gz +0 -0
- package/dist/{chunk-4O7PPQ2V.js → chunk-XROVGBFQ.js} +236 -236
- package/dist/chunk-XROVGBFQ.js.br +0 -0
- package/dist/chunk-XROVGBFQ.js.gz +0 -0
- package/dist/{chunk-GC6HQMVG.mjs → chunk-Y4TIW2MM.mjs} +1 -1
- package/dist/chunk-Y4TIW2MM.mjs.br +0 -0
- package/dist/chunk-Y4TIW2MM.mjs.gz +0 -0
- package/dist/{chunk-EI456HZK.mjs → chunk-Y6H2RSLB.mjs} +8 -1
- package/dist/chunk-Y6H2RSLB.mjs.br +0 -0
- package/dist/{chunk-EI456HZK.mjs.gz → chunk-Y6H2RSLB.mjs.gz} +0 -0
- package/dist/index.js +34 -34
- 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 +21 -21
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +5 -5
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +1 -1
- package/dist/AiChatPanel-LBK6YRKH.js.br +0 -0
- package/dist/AiChatPanel-LBK6YRKH.js.gz +0 -0
- package/dist/AiChatPanel-RVZOGGFK.mjs.br +0 -0
- package/dist/AiChatPanel-RVZOGGFK.mjs.gz +0 -0
- package/dist/Model3DScene-L46RNRU5.js.br +0 -0
- package/dist/Model3DScene-L46RNRU5.js.gz +0 -0
- package/dist/Model3DScene-WBUZ74G3.mjs.br +0 -0
- package/dist/Model3DScene-WBUZ74G3.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-CB32AJS4.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-RWMGMREC.js.br +0 -0
- package/dist/SurfaceChart3DScene-RWMGMREC.js.gz +0 -0
- package/dist/chunk-2VE3LVKZ.js.br +0 -0
- package/dist/chunk-2VE3LVKZ.js.gz +0 -0
- package/dist/chunk-4O7PPQ2V.js.br +0 -0
- package/dist/chunk-4O7PPQ2V.js.gz +0 -0
- package/dist/chunk-54FSVX3O.mjs.br +0 -0
- package/dist/chunk-54FSVX3O.mjs.gz +0 -0
- package/dist/chunk-AX4Q5JWN.js.br +0 -0
- package/dist/chunk-AX4Q5JWN.js.gz +0 -0
- package/dist/chunk-BL3WW2BS.mjs.br +0 -0
- package/dist/chunk-BL3WW2BS.mjs.gz +0 -0
- package/dist/chunk-EI456HZK.mjs.br +0 -0
- package/dist/chunk-GC6HQMVG.mjs.br +0 -0
- package/dist/chunk-GC6HQMVG.mjs.gz +0 -0
- package/dist/chunk-IEFH47TF.js.br +0 -0
- package/dist/chunk-IEFH47TF.js.gz +0 -0
- package/dist/chunk-T7AMP24E.js.br +0 -0
- package/dist/chunk-ZUNDIOGD.mjs.br +0 -0
- package/dist/chunk-ZUNDIOGD.mjs.gz +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkXROVGBFQ_js = require('./chunk-XROVGBFQ.js');
|
|
4
4
|
var chunk25VSL2BB_js = require('./chunk-25VSL2BB.js');
|
|
5
|
-
var
|
|
5
|
+
var chunkG7PJSVUS_js = require('./chunk-G7PJSVUS.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 = chunkG7PJSVUS_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 = chunkG7PJSVUS_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") => {
|
|
@@ -107,7 +107,7 @@ function usePresenceTracking({
|
|
|
107
107
|
awareness.setLocalStateField("presence", state);
|
|
108
108
|
lastBroadcastRef.current = Date.now();
|
|
109
109
|
};
|
|
110
|
-
if (elapsed >=
|
|
110
|
+
if (elapsed >= chunkG7PJSVUS_js.BROADCAST_THROTTLE_MS) {
|
|
111
111
|
if (pendingBroadcastRef.current) {
|
|
112
112
|
clearTimeout(pendingBroadcastRef.current);
|
|
113
113
|
pendingBroadcastRef.current = null;
|
|
@@ -117,7 +117,7 @@ function usePresenceTracking({
|
|
|
117
117
|
pendingBroadcastRef.current = setTimeout(() => {
|
|
118
118
|
pendingBroadcastRef.current = null;
|
|
119
119
|
flush();
|
|
120
|
-
},
|
|
120
|
+
}, chunkG7PJSVUS_js.BROADCAST_THROTTLE_MS - elapsed);
|
|
121
121
|
}
|
|
122
122
|
},
|
|
123
123
|
[awareness, userName, userColor, userAvatar, role]
|
|
@@ -142,7 +142,7 @@ function usePresenceTracking({
|
|
|
142
142
|
return;
|
|
143
143
|
}
|
|
144
144
|
const handleChange = () => {
|
|
145
|
-
const users =
|
|
145
|
+
const users = chunkG7PJSVUS_js.derivePresenceList(
|
|
146
146
|
awareness.getStates(),
|
|
147
147
|
localClientId,
|
|
148
148
|
canvasWidth,
|
|
@@ -194,7 +194,7 @@ function useYjsProvider({ config }) {
|
|
|
194
194
|
const departureRef = react.useRef(null);
|
|
195
195
|
const gateRef = react.useRef(null);
|
|
196
196
|
if (!gateRef.current) {
|
|
197
|
-
gateRef.current =
|
|
197
|
+
gateRef.current = chunkG7PJSVUS_js.createSyncGate(() => setSynced(true));
|
|
198
198
|
}
|
|
199
199
|
const teardown = react.useCallback(() => {
|
|
200
200
|
if (timeoutRef.current) {
|
|
@@ -214,7 +214,7 @@ function useYjsProvider({ config }) {
|
|
|
214
214
|
const buildCleanup = react.useCallback(
|
|
215
215
|
(provider, yDoc) => () => {
|
|
216
216
|
announceDeparture();
|
|
217
|
-
|
|
217
|
+
chunkG7PJSVUS_js.clearLocalAwareness(provider.awareness);
|
|
218
218
|
provider.destroy();
|
|
219
219
|
yDoc.destroy();
|
|
220
220
|
setDoc(null);
|
|
@@ -239,9 +239,9 @@ function useYjsProvider({ config }) {
|
|
|
239
239
|
if (config.authToken) {
|
|
240
240
|
opts.password = config.authToken;
|
|
241
241
|
}
|
|
242
|
-
const roomId =
|
|
242
|
+
const roomId = chunkG7PJSVUS_js.validateRoomId(config.roomId);
|
|
243
243
|
const provider = new WebrtcProvider(roomId, yDoc, opts);
|
|
244
|
-
departureRef.current =
|
|
244
|
+
departureRef.current = chunkG7PJSVUS_js.createDepartureChannel(roomId, provider.awareness);
|
|
245
245
|
setDoc(yDoc);
|
|
246
246
|
setAwareness(provider.awareness);
|
|
247
247
|
setClientId(provider.awareness.clientID);
|
|
@@ -283,13 +283,13 @@ function useYjsProvider({ config }) {
|
|
|
283
283
|
if (!config) {
|
|
284
284
|
return;
|
|
285
285
|
}
|
|
286
|
-
const roomId =
|
|
287
|
-
const transport = config.transport ??
|
|
286
|
+
const roomId = chunkG7PJSVUS_js.validateRoomId(config.roomId);
|
|
287
|
+
const transport = config.transport ?? chunkG7PJSVUS_js.resolveTransportForServerUrl(config.serverUrl);
|
|
288
288
|
if (transport === "webrtc") {
|
|
289
289
|
await initWebrtc();
|
|
290
290
|
return;
|
|
291
291
|
}
|
|
292
|
-
if (
|
|
292
|
+
if (chunkG7PJSVUS_js.isMixedContentBlocked(config.serverUrl)) {
|
|
293
293
|
console.warn(
|
|
294
294
|
`[pptx-viewer] Refusing to connect: insecure ws:// server "${config.serverUrl}" is blocked from a secure (https) page. Use a wss:// URL.`
|
|
295
295
|
);
|
|
@@ -303,7 +303,7 @@ function useYjsProvider({ config }) {
|
|
|
303
303
|
const provider = new WebsocketProvider(config.serverUrl, roomId, yDoc, {
|
|
304
304
|
params: config.authToken ? { token: config.authToken } : void 0
|
|
305
305
|
});
|
|
306
|
-
departureRef.current =
|
|
306
|
+
departureRef.current = chunkG7PJSVUS_js.createDepartureChannel(roomId, provider.awareness);
|
|
307
307
|
let connected = false;
|
|
308
308
|
const handleStatus = (event) => {
|
|
309
309
|
if (event.status === "connected") {
|
|
@@ -343,7 +343,7 @@ function useYjsProvider({ config }) {
|
|
|
343
343
|
provider.off("status", handleStatus);
|
|
344
344
|
provider.off("sync", handleSynced);
|
|
345
345
|
announceDeparture();
|
|
346
|
-
|
|
346
|
+
chunkG7PJSVUS_js.clearLocalAwareness(provider.awareness);
|
|
347
347
|
provider.destroy();
|
|
348
348
|
yDoc.destroy();
|
|
349
349
|
setDoc(null);
|
|
@@ -352,7 +352,7 @@ function useYjsProvider({ config }) {
|
|
|
352
352
|
cleanupRef.current = null;
|
|
353
353
|
setStatus("error");
|
|
354
354
|
}
|
|
355
|
-
},
|
|
355
|
+
}, chunkG7PJSVUS_js.CONNECTION_TIMEOUT_MS);
|
|
356
356
|
}
|
|
357
357
|
setDoc(yDoc);
|
|
358
358
|
setAwareness(provider.awareness);
|
|
@@ -361,7 +361,7 @@ function useYjsProvider({ config }) {
|
|
|
361
361
|
provider.off("status", handleStatus);
|
|
362
362
|
provider.off("sync", handleSynced);
|
|
363
363
|
announceDeparture();
|
|
364
|
-
|
|
364
|
+
chunkG7PJSVUS_js.clearLocalAwareness(provider.awareness);
|
|
365
365
|
provider.destroy();
|
|
366
366
|
yDoc.destroy();
|
|
367
367
|
setDoc(null);
|
|
@@ -387,7 +387,7 @@ function useYjsProvider({ config }) {
|
|
|
387
387
|
]);
|
|
388
388
|
react.useEffect(() => {
|
|
389
389
|
init();
|
|
390
|
-
const disposeTeardown =
|
|
390
|
+
const disposeTeardown = chunkG7PJSVUS_js.registerCollaborationTeardown({
|
|
391
391
|
leave: teardown,
|
|
392
392
|
rejoin: init
|
|
393
393
|
});
|
|
@@ -408,7 +408,7 @@ function useCollaborativeState({
|
|
|
408
408
|
canvasWidth,
|
|
409
409
|
canvasHeight
|
|
410
410
|
}) {
|
|
411
|
-
const userColor =
|
|
411
|
+
const userColor = chunkG7PJSVUS_js.sanitizeColor(config?.userColor, "#6366f1");
|
|
412
412
|
const { status, awareness, doc, clientId, synced, retry } = useYjsProvider({ config });
|
|
413
413
|
const { remoteUsers, broadcastPresence } = usePresenceTracking({
|
|
414
414
|
awareness,
|
|
@@ -517,8 +517,8 @@ function useEditorHistory(input) {
|
|
|
517
517
|
width: canvasSize.width,
|
|
518
518
|
height: canvasSize.height,
|
|
519
519
|
activeSlideIndex,
|
|
520
|
-
slides: slides.map(
|
|
521
|
-
templateElementsBySlideId:
|
|
520
|
+
slides: slides.map(chunkG7PJSVUS_js.cloneSlide),
|
|
521
|
+
templateElementsBySlideId: chunkG7PJSVUS_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
|
|
522
522
|
...actionLabel ? { actionLabel } : {}
|
|
523
523
|
};
|
|
524
524
|
},
|
|
@@ -531,9 +531,9 @@ function useEditorHistory(input) {
|
|
|
531
531
|
width: snapshot.width,
|
|
532
532
|
height: snapshot.height
|
|
533
533
|
});
|
|
534
|
-
setSlides(snapshot.slides.map(
|
|
534
|
+
setSlides(snapshot.slides.map(chunkG7PJSVUS_js.cloneSlide));
|
|
535
535
|
setTemplateElementsBySlideId(
|
|
536
|
-
|
|
536
|
+
chunkG7PJSVUS_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
|
|
537
537
|
);
|
|
538
538
|
setActiveSlideIndex(Math.min(snapshot.activeSlideIndex, maxSlideIndex));
|
|
539
539
|
setSelectedElementIds([]);
|
|
@@ -567,8 +567,8 @@ function useEditorHistory(input) {
|
|
|
567
567
|
const currentSnapshot = buildHistorySnapshot();
|
|
568
568
|
historyFutureRef.current.push(currentSnapshot);
|
|
569
569
|
isApplyingHistoryRef.current = true;
|
|
570
|
-
const nextSnapshot =
|
|
571
|
-
lastHistorySnapshotRef.current =
|
|
570
|
+
const nextSnapshot = chunkXROVGBFQ_js.cloneHistorySnapshot(previousSnapshot);
|
|
571
|
+
lastHistorySnapshotRef.current = chunkXROVGBFQ_js.cloneHistorySnapshot(nextSnapshot);
|
|
572
572
|
lastHistorySerializedRef.current = JSON.stringify(nextSnapshot);
|
|
573
573
|
applyHistorySnapshot(nextSnapshot);
|
|
574
574
|
updateHistoryAvailability();
|
|
@@ -589,8 +589,8 @@ function useEditorHistory(input) {
|
|
|
589
589
|
const currentSnapshot = buildHistorySnapshot();
|
|
590
590
|
historyPastRef.current.push(currentSnapshot);
|
|
591
591
|
isApplyingHistoryRef.current = true;
|
|
592
|
-
const targetSnapshot =
|
|
593
|
-
lastHistorySnapshotRef.current =
|
|
592
|
+
const targetSnapshot = chunkXROVGBFQ_js.cloneHistorySnapshot(nextSnapshot);
|
|
593
|
+
lastHistorySnapshotRef.current = chunkXROVGBFQ_js.cloneHistorySnapshot(targetSnapshot);
|
|
594
594
|
lastHistorySerializedRef.current = JSON.stringify(targetSnapshot);
|
|
595
595
|
applyHistorySnapshot(targetSnapshot);
|
|
596
596
|
updateHistoryAvailability();
|
|
@@ -608,7 +608,7 @@ function useEditorHistory(input) {
|
|
|
608
608
|
historyPastRef.current = [];
|
|
609
609
|
historyFutureRef.current = [];
|
|
610
610
|
if (initialSnapshot) {
|
|
611
|
-
const clonedInitial =
|
|
611
|
+
const clonedInitial = chunkXROVGBFQ_js.cloneHistorySnapshot(initialSnapshot);
|
|
612
612
|
lastHistorySnapshotRef.current = clonedInitial;
|
|
613
613
|
lastHistorySerializedRef.current = JSON.stringify(clonedInitial);
|
|
614
614
|
} else {
|
|
@@ -649,18 +649,18 @@ function useEditorHistory(input) {
|
|
|
649
649
|
}
|
|
650
650
|
const previousSnapshot = lastHistorySnapshotRef.current;
|
|
651
651
|
if (!previousSnapshot) {
|
|
652
|
-
lastHistorySnapshotRef.current =
|
|
652
|
+
lastHistorySnapshotRef.current = chunkXROVGBFQ_js.cloneHistorySnapshot(snapshot);
|
|
653
653
|
lastHistorySerializedRef.current = serialized;
|
|
654
654
|
lastCheapHashRef.current = cheapHash;
|
|
655
655
|
updateHistoryAvailability();
|
|
656
656
|
return;
|
|
657
657
|
}
|
|
658
|
-
historyPastRef.current.push(
|
|
658
|
+
historyPastRef.current.push(chunkXROVGBFQ_js.cloneHistorySnapshot(previousSnapshot));
|
|
659
659
|
while (historyPastRef.current.length > Math.max(1, maxHistoryEntries)) {
|
|
660
660
|
historyPastRef.current.shift();
|
|
661
661
|
}
|
|
662
662
|
historyFutureRef.current = [];
|
|
663
|
-
lastHistorySnapshotRef.current =
|
|
663
|
+
lastHistorySnapshotRef.current = chunkXROVGBFQ_js.cloneHistorySnapshot(snapshot);
|
|
664
664
|
lastHistorySerializedRef.current = serialized;
|
|
665
665
|
lastCheapHashRef.current = cheapHash;
|
|
666
666
|
updateHistoryAvailability();
|
|
@@ -749,7 +749,7 @@ function useZoomViewport({
|
|
|
749
749
|
if (!wrapper || !canvasViewport) {
|
|
750
750
|
return;
|
|
751
751
|
}
|
|
752
|
-
const boundedScale = Math.min(Math.max(nextScale,
|
|
752
|
+
const boundedScale = Math.min(Math.max(nextScale, chunkXROVGBFQ_js.MIN_ZOOM_SCALE), chunkXROVGBFQ_js.MAX_ZOOM_SCALE);
|
|
753
753
|
const nextEditorScale = fitScale * boundedScale;
|
|
754
754
|
const centerX = (bounds.minX + bounds.maxX) / 2;
|
|
755
755
|
const centerY = (bounds.minY + bounds.maxY) / 2;
|
|
@@ -764,10 +764,10 @@ function useZoomViewport({
|
|
|
764
764
|
[fitScale]
|
|
765
765
|
);
|
|
766
766
|
const handleZoomIn = react.useCallback(() => {
|
|
767
|
-
setScale((currentScale) => Math.min(currentScale + 0.1,
|
|
767
|
+
setScale((currentScale) => Math.min(currentScale + 0.1, chunkXROVGBFQ_js.MAX_ZOOM_SCALE));
|
|
768
768
|
}, []);
|
|
769
769
|
const handleZoomOut = react.useCallback(() => {
|
|
770
|
-
setScale((currentScale) => Math.max(currentScale - 0.1,
|
|
770
|
+
setScale((currentScale) => Math.max(currentScale - 0.1, chunkXROVGBFQ_js.MIN_ZOOM_SCALE));
|
|
771
771
|
}, []);
|
|
772
772
|
const handleResetZoom = react.useCallback(() => {
|
|
773
773
|
setScale(1);
|
|
@@ -786,22 +786,22 @@ function useZoomViewport({
|
|
|
786
786
|
selectedElements.forEach((element) => {
|
|
787
787
|
minX = Math.min(minX, element.x);
|
|
788
788
|
minY = Math.min(minY, element.y);
|
|
789
|
-
maxX = Math.max(maxX, element.x + Math.max(element.width,
|
|
790
|
-
maxY = Math.max(maxY, element.y + Math.max(element.height,
|
|
789
|
+
maxX = Math.max(maxX, element.x + Math.max(element.width, chunkXROVGBFQ_js.MIN_ELEMENT_SIZE));
|
|
790
|
+
maxY = Math.max(maxY, element.y + Math.max(element.height, chunkXROVGBFQ_js.MIN_ELEMENT_SIZE));
|
|
791
791
|
});
|
|
792
792
|
if (!Number.isFinite(minX) || !Number.isFinite(minY) || !Number.isFinite(maxX) || !Number.isFinite(maxY)) {
|
|
793
793
|
return;
|
|
794
794
|
}
|
|
795
795
|
const selectionBounds = { minX, minY, maxX, maxY };
|
|
796
|
-
const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX,
|
|
797
|
-
const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY,
|
|
796
|
+
const boundsWidth = Math.max(selectionBounds.maxX - selectionBounds.minX, chunkXROVGBFQ_js.MIN_ELEMENT_SIZE);
|
|
797
|
+
const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkXROVGBFQ_js.MIN_ELEMENT_SIZE);
|
|
798
798
|
const availableWidth = Math.max(
|
|
799
|
-
effectiveEditorDimensions.width -
|
|
800
|
-
|
|
799
|
+
effectiveEditorDimensions.width - chunkXROVGBFQ_js.ZOOM_TO_SELECTION_PADDING,
|
|
800
|
+
chunkXROVGBFQ_js.MIN_ELEMENT_SIZE
|
|
801
801
|
);
|
|
802
802
|
const availableHeight = Math.max(
|
|
803
|
-
effectiveEditorDimensions.height -
|
|
804
|
-
|
|
803
|
+
effectiveEditorDimensions.height - chunkXROVGBFQ_js.ZOOM_TO_SELECTION_PADDING,
|
|
804
|
+
chunkXROVGBFQ_js.MIN_ELEMENT_SIZE
|
|
805
805
|
);
|
|
806
806
|
const targetEditorScale = Math.min(
|
|
807
807
|
availableWidth / boundsWidth,
|
|
@@ -809,8 +809,8 @@ function useZoomViewport({
|
|
|
809
809
|
);
|
|
810
810
|
const safeFitScale = fitScale > Number.EPSILON ? fitScale : Number.EPSILON;
|
|
811
811
|
const nextScale = Math.min(
|
|
812
|
-
Math.max(targetEditorScale / safeFitScale,
|
|
813
|
-
|
|
812
|
+
Math.max(targetEditorScale / safeFitScale, chunkXROVGBFQ_js.MIN_ZOOM_SCALE),
|
|
813
|
+
chunkXROVGBFQ_js.MAX_ZOOM_SCALE
|
|
814
814
|
);
|
|
815
815
|
setScale(nextScale);
|
|
816
816
|
window.requestAnimationFrame(() => {
|
|
@@ -832,7 +832,7 @@ function useZoomViewport({
|
|
|
832
832
|
event.preventDefault();
|
|
833
833
|
const delta = event.deltaY * -1e-3;
|
|
834
834
|
setScale(
|
|
835
|
-
(currentScale) => Math.min(Math.max(currentScale + delta,
|
|
835
|
+
(currentScale) => Math.min(Math.max(currentScale + delta, chunkXROVGBFQ_js.MIN_ZOOM_SCALE), chunkXROVGBFQ_js.MAX_ZOOM_SCALE)
|
|
836
836
|
);
|
|
837
837
|
}, []);
|
|
838
838
|
react.useEffect(() => {
|
|
@@ -910,7 +910,7 @@ function applyAnimationGroupSteps(group, onPlayActionSound, setPresentationEleme
|
|
|
910
910
|
const command = step.command;
|
|
911
911
|
const timer = window.setTimeout(
|
|
912
912
|
() => {
|
|
913
|
-
|
|
913
|
+
chunkXROVGBFQ_js.executeMediaCommand(command);
|
|
914
914
|
},
|
|
915
915
|
Math.max(0, step.delayMs)
|
|
916
916
|
);
|
|
@@ -1026,7 +1026,7 @@ function useAnimationPlayback(input) {
|
|
|
1026
1026
|
(controller, group) => {
|
|
1027
1027
|
driveBuildReveal(
|
|
1028
1028
|
controller,
|
|
1029
|
-
|
|
1029
|
+
chunkG7PJSVUS_js.PresentationAnimationController.collectBuildStepIds(group),
|
|
1030
1030
|
setPresentationElementStates,
|
|
1031
1031
|
buildRafRef
|
|
1032
1032
|
);
|
|
@@ -1089,7 +1089,7 @@ function useAnimationPlayback(input) {
|
|
|
1089
1089
|
setHoverTriggerShapeIds(/* @__PURE__ */ new Set());
|
|
1090
1090
|
return;
|
|
1091
1091
|
}
|
|
1092
|
-
const controller =
|
|
1092
|
+
const controller = chunkG7PJSVUS_js.PresentationAnimationController.fromSlide(slide);
|
|
1093
1093
|
controllerRef.current = controller;
|
|
1094
1094
|
setPresentationKeyframesCss(controller.keyframesCss);
|
|
1095
1095
|
setInteractiveTriggerShapeIds(controller.interactiveTriggerShapeIds);
|
|
@@ -1237,7 +1237,7 @@ function useAnimationPlayback(input) {
|
|
|
1237
1237
|
}))
|
|
1238
1238
|
);
|
|
1239
1239
|
entranceAnimations.forEach((animation, animationIndex) => {
|
|
1240
|
-
const delay =
|
|
1240
|
+
const delay = chunkG7PJSVUS_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
|
|
1241
1241
|
const timer = window.setTimeout(() => {
|
|
1242
1242
|
setPresentationAnimations(
|
|
1243
1243
|
(previousAnimations) => previousAnimations.map(
|
|
@@ -1274,12 +1274,12 @@ function useAnimationPlayback(input) {
|
|
|
1274
1274
|
presentationTimersRef
|
|
1275
1275
|
};
|
|
1276
1276
|
}
|
|
1277
|
-
var PRESENTER_CHANNEL_NAME =
|
|
1278
|
-
var AUDIENCE_HASH =
|
|
1279
|
-
var PRESENTER_MSG_ORIGIN =
|
|
1280
|
-
var AUDIENCE_NONCE_KEY =
|
|
1277
|
+
var PRESENTER_CHANNEL_NAME = chunkG7PJSVUS_js.PRESENTATION_CHANNEL_NAME;
|
|
1278
|
+
var AUDIENCE_HASH = chunkG7PJSVUS_js.PRESENTATION_HASH;
|
|
1279
|
+
var PRESENTER_MSG_ORIGIN = chunkG7PJSVUS_js.PRESENTATION_MESSAGE_ORIGIN;
|
|
1280
|
+
var AUDIENCE_NONCE_KEY = chunkG7PJSVUS_js.PRESENTATION_NONCE_KEY;
|
|
1281
1281
|
function generateSessionId() {
|
|
1282
|
-
return
|
|
1282
|
+
return chunkG7PJSVUS_js.createPresentationSessionId();
|
|
1283
1283
|
}
|
|
1284
1284
|
function parseAudienceNonce() {
|
|
1285
1285
|
const hash = window.location.hash;
|
|
@@ -1315,7 +1315,7 @@ function usePresenterWindow(input) {
|
|
|
1315
1315
|
}, []);
|
|
1316
1316
|
const swapDisplays = react.useCallback(async () => {
|
|
1317
1317
|
const audience = audienceWindowRef.current;
|
|
1318
|
-
return audience && !audience.closed ?
|
|
1318
|
+
return audience && !audience.closed ? chunkG7PJSVUS_js.swapPresentationWindows(window, audience) : false;
|
|
1319
1319
|
}, []);
|
|
1320
1320
|
const syncSlideToAudience = react.useCallback(
|
|
1321
1321
|
(slideIndex) => {
|
|
@@ -1379,7 +1379,7 @@ function usePresenterWindow(input) {
|
|
|
1379
1379
|
pollTimerRef.current = null;
|
|
1380
1380
|
}
|
|
1381
1381
|
if (closingSessionId) {
|
|
1382
|
-
void
|
|
1382
|
+
void chunkG7PJSVUS_js.clearAudienceContent(closingSessionId);
|
|
1383
1383
|
}
|
|
1384
1384
|
}, [getChannel]);
|
|
1385
1385
|
const openAudienceWindow = react.useCallback(() => {
|
|
@@ -1397,10 +1397,10 @@ function usePresenterWindow(input) {
|
|
|
1397
1397
|
audienceWindowRef.current = blankWin;
|
|
1398
1398
|
const sessionId = generateSessionId();
|
|
1399
1399
|
sessionIdRef.current = sessionId;
|
|
1400
|
-
const audienceUrl =
|
|
1401
|
-
void
|
|
1400
|
+
const audienceUrl = chunkG7PJSVUS_js.buildPresentationAudienceUrl(window.location.href, sessionId);
|
|
1401
|
+
void chunkG7PJSVUS_js.resolveAudienceScreenPlacement(window).then((placement) => {
|
|
1402
1402
|
if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
|
|
1403
|
-
|
|
1403
|
+
chunkG7PJSVUS_js.placeAudienceWindow(blankWin, placement);
|
|
1404
1404
|
}
|
|
1405
1405
|
return void 0;
|
|
1406
1406
|
});
|
|
@@ -1430,7 +1430,7 @@ function usePresenterWindow(input) {
|
|
|
1430
1430
|
}
|
|
1431
1431
|
};
|
|
1432
1432
|
if (content) {
|
|
1433
|
-
void
|
|
1433
|
+
void chunkG7PJSVUS_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
|
|
1434
1434
|
} else {
|
|
1435
1435
|
navigateOrClose(true);
|
|
1436
1436
|
}
|
|
@@ -1456,7 +1456,7 @@ function usePresenterWindow(input) {
|
|
|
1456
1456
|
}
|
|
1457
1457
|
const handleMessage = (event) => {
|
|
1458
1458
|
const message = event.data;
|
|
1459
|
-
if (
|
|
1459
|
+
if (chunkG7PJSVUS_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
|
|
1460
1460
|
syncStateToAudience(snapshotRef.current);
|
|
1461
1461
|
}
|
|
1462
1462
|
};
|
|
@@ -1485,7 +1485,7 @@ function usePresenterWindow(input) {
|
|
|
1485
1485
|
react.useEffect(() => {
|
|
1486
1486
|
const handleBeforeUnload = () => {
|
|
1487
1487
|
if (sessionIdRef.current) {
|
|
1488
|
-
void
|
|
1488
|
+
void chunkG7PJSVUS_js.clearAudienceContent(sessionIdRef.current);
|
|
1489
1489
|
}
|
|
1490
1490
|
};
|
|
1491
1491
|
window.addEventListener("beforeunload", handleBeforeUnload);
|
|
@@ -1547,7 +1547,7 @@ function useAudienceMode(input) {
|
|
|
1547
1547
|
}
|
|
1548
1548
|
channel.onmessage = (event) => {
|
|
1549
1549
|
const data = event.data;
|
|
1550
|
-
if (!
|
|
1550
|
+
if (!chunkG7PJSVUS_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
|
|
1551
1551
|
return;
|
|
1552
1552
|
}
|
|
1553
1553
|
if (expectedSessionId && data.sessionId !== expectedSessionId) {
|
|
@@ -1563,16 +1563,16 @@ function useAudienceMode(input) {
|
|
|
1563
1563
|
}
|
|
1564
1564
|
if (data.type === "presenter-exit") {
|
|
1565
1565
|
if (expectedSessionId) {
|
|
1566
|
-
void
|
|
1566
|
+
void chunkG7PJSVUS_js.clearAudienceContent(expectedSessionId);
|
|
1567
1567
|
}
|
|
1568
|
-
if (
|
|
1568
|
+
if (chunkG7PJSVUS_js.endAudienceDisplay(window)) {
|
|
1569
1569
|
handlers.onPresenterEnded?.();
|
|
1570
1570
|
}
|
|
1571
1571
|
}
|
|
1572
1572
|
};
|
|
1573
1573
|
if (expectedSessionId) {
|
|
1574
1574
|
channel.postMessage({
|
|
1575
|
-
origin:
|
|
1575
|
+
origin: chunkG7PJSVUS_js.PRESENTATION_MESSAGE_ORIGIN,
|
|
1576
1576
|
type: "audience-ready",
|
|
1577
1577
|
sessionId: expectedSessionId
|
|
1578
1578
|
});
|
|
@@ -1604,14 +1604,14 @@ function usePresentationKeyboard(input) {
|
|
|
1604
1604
|
presentationSlideIndex,
|
|
1605
1605
|
setShowRehearsalSummary
|
|
1606
1606
|
} = input;
|
|
1607
|
-
const keyBufferRef = react.useRef(
|
|
1607
|
+
const keyBufferRef = react.useRef(chunkG7PJSVUS_js.createPresentationKeyBuffer());
|
|
1608
1608
|
react.useEffect(() => {
|
|
1609
|
-
if (mode !== "present" || !
|
|
1610
|
-
keyBufferRef.current =
|
|
1609
|
+
if (mode !== "present" || !chunkG7PJSVUS_js.acceptsPresentationInput()) {
|
|
1610
|
+
keyBufferRef.current = chunkG7PJSVUS_js.createPresentationKeyBuffer();
|
|
1611
1611
|
return;
|
|
1612
1612
|
}
|
|
1613
1613
|
const handleKeyDown = (event) => {
|
|
1614
|
-
const mapped =
|
|
1614
|
+
const mapped = chunkG7PJSVUS_js.mapPresentationKey(event, keyBufferRef.current);
|
|
1615
1615
|
if (mapped.action === "none") {
|
|
1616
1616
|
return;
|
|
1617
1617
|
}
|
|
@@ -1819,7 +1819,7 @@ function handlePresentationActionImpl(action, deps) {
|
|
|
1819
1819
|
return;
|
|
1820
1820
|
}
|
|
1821
1821
|
if (action.url && !actionStr.includes("hlinksldjump")) {
|
|
1822
|
-
if (
|
|
1822
|
+
if (chunkG7PJSVUS_js.isUrlSafe(action.url)) {
|
|
1823
1823
|
window.open(action.url, "_blank", "noopener,noreferrer");
|
|
1824
1824
|
}
|
|
1825
1825
|
}
|
|
@@ -1829,7 +1829,7 @@ function handlePresentationActionImpl(action, deps) {
|
|
|
1829
1829
|
function executeSlideTransition(nextSlideIndex, deps) {
|
|
1830
1830
|
const incomingSlide = deps.slides[nextSlideIndex];
|
|
1831
1831
|
const transition = incomingSlide?.transition;
|
|
1832
|
-
const durationMs = deps.playTransition ?
|
|
1832
|
+
const durationMs = deps.playTransition ? chunkG7PJSVUS_js.resolveTransitionDurationMs(transition) : 0;
|
|
1833
1833
|
deps.clearPresentationTimers();
|
|
1834
1834
|
deps.setPresentationSlideIndex(nextSlideIndex);
|
|
1835
1835
|
deps.onSetActiveSlideIndex(nextSlideIndex);
|
|
@@ -2079,17 +2079,17 @@ function useZoomNavigation(input) {
|
|
|
2079
2079
|
};
|
|
2080
2080
|
}
|
|
2081
2081
|
function usePresenterConsole(slideIndex) {
|
|
2082
|
-
const timerRef = react.useRef(
|
|
2083
|
-
const [snapshot, setSnapshot] = react.useState(() =>
|
|
2082
|
+
const timerRef = react.useRef(chunkG7PJSVUS_js.createPresenterTimer());
|
|
2083
|
+
const [snapshot, setSnapshot] = react.useState(() => chunkG7PJSVUS_js.createInitialPresentationSnapshot(slideIndex));
|
|
2084
2084
|
const patch = react.useCallback((value) => {
|
|
2085
|
-
setSnapshot((current) =>
|
|
2085
|
+
setSnapshot((current) => chunkG7PJSVUS_js.mergePresentationSnapshot(current, value));
|
|
2086
2086
|
}, []);
|
|
2087
2087
|
react.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
|
|
2088
2088
|
react.useEffect(() => {
|
|
2089
2089
|
const timer = window.setInterval(() => {
|
|
2090
2090
|
patch({
|
|
2091
2091
|
paused: timerRef.current.paused,
|
|
2092
|
-
elapsedMs:
|
|
2092
|
+
elapsedMs: chunkG7PJSVUS_js.presenterElapsed(timerRef.current)
|
|
2093
2093
|
});
|
|
2094
2094
|
}, 1e3);
|
|
2095
2095
|
return () => window.clearInterval(timer);
|
|
@@ -2099,19 +2099,19 @@ function usePresenterConsole(slideIndex) {
|
|
|
2099
2099
|
applyAudienceSnapshot: setSnapshot,
|
|
2100
2100
|
setBlackout: (blackout) => patch({ blackout }),
|
|
2101
2101
|
toggleTimer: () => {
|
|
2102
|
-
timerRef.current =
|
|
2102
|
+
timerRef.current = chunkG7PJSVUS_js.togglePresenterTimer(timerRef.current);
|
|
2103
2103
|
patch({
|
|
2104
2104
|
paused: timerRef.current.paused,
|
|
2105
|
-
elapsedMs:
|
|
2105
|
+
elapsedMs: chunkG7PJSVUS_js.presenterElapsed(timerRef.current)
|
|
2106
2106
|
});
|
|
2107
2107
|
},
|
|
2108
2108
|
resetTimer: () => {
|
|
2109
|
-
timerRef.current =
|
|
2109
|
+
timerRef.current = chunkG7PJSVUS_js.resetPresenterTimer();
|
|
2110
2110
|
patch({ paused: false, elapsedMs: 0 });
|
|
2111
2111
|
},
|
|
2112
2112
|
stepZoom: (direction) => setSnapshot(
|
|
2113
|
-
(current) =>
|
|
2114
|
-
zoom:
|
|
2113
|
+
(current) => chunkG7PJSVUS_js.mergePresentationSnapshot(current, {
|
|
2114
|
+
zoom: chunkG7PJSVUS_js.stepPresenterZoom(
|
|
2115
2115
|
current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
|
|
2116
2116
|
direction
|
|
2117
2117
|
)
|
|
@@ -2232,7 +2232,7 @@ function usePresentationMode(input) {
|
|
|
2232
2232
|
});
|
|
2233
2233
|
const movePresentationSlide = react.useCallback(
|
|
2234
2234
|
(direction, trigger = "explicit") => {
|
|
2235
|
-
if (!
|
|
2235
|
+
if (!chunkG7PJSVUS_js.acceptsPresentationInput()) {
|
|
2236
2236
|
return;
|
|
2237
2237
|
}
|
|
2238
2238
|
if (endOfShowVisible) {
|
|
@@ -2434,11 +2434,11 @@ function usePresentationMode(input) {
|
|
|
2434
2434
|
if (!transitionOverlay || transitionOverlay.transition.type !== "morph") {
|
|
2435
2435
|
return void 0;
|
|
2436
2436
|
}
|
|
2437
|
-
return
|
|
2437
|
+
return chunkG7PJSVUS_js.buildMorphTransitionPlan(
|
|
2438
2438
|
slides[transitionOverlay.outgoingSlideIndex],
|
|
2439
2439
|
slides[transitionOverlay.incomingSlideIndex],
|
|
2440
2440
|
transitionOverlay.durationMs,
|
|
2441
|
-
|
|
2441
|
+
chunkG7PJSVUS_js.morphOptionToMode(transitionOverlay.transition.morphOption)
|
|
2442
2442
|
);
|
|
2443
2443
|
}, [transitionOverlay, slides]);
|
|
2444
2444
|
const morphedElementStates = react.useMemo(() => {
|
|
@@ -2744,7 +2744,7 @@ function findInSlides(slides, findQuery, findMatchCase) {
|
|
|
2744
2744
|
const normalised = findMatchCase ? findQuery : findQuery.toLowerCase();
|
|
2745
2745
|
slides.forEach((slide, slideIndex) => {
|
|
2746
2746
|
for (const element of slide.elements || []) {
|
|
2747
|
-
if (!
|
|
2747
|
+
if (!chunkG7PJSVUS_js.hasTextProperties(element)) {
|
|
2748
2748
|
continue;
|
|
2749
2749
|
}
|
|
2750
2750
|
const segments = element.textSegments ?? [];
|
|
@@ -2795,7 +2795,7 @@ function applyFindReplacements(slides, toReplace, replaceQuery) {
|
|
|
2795
2795
|
continue;
|
|
2796
2796
|
}
|
|
2797
2797
|
const element = slide.elements[elIdx];
|
|
2798
|
-
if (!
|
|
2798
|
+
if (!chunkG7PJSVUS_js.hasTextProperties(element)) {
|
|
2799
2799
|
continue;
|
|
2800
2800
|
}
|
|
2801
2801
|
const segments = [...element.textSegments ?? []];
|
|
@@ -3393,7 +3393,7 @@ function useViewerCoreState(_input) {
|
|
|
3393
3393
|
const shapeAdjustmentDragStateRef = react.useRef(null);
|
|
3394
3394
|
const marqueeStateRef = react.useRef(null);
|
|
3395
3395
|
const isDrawingRef = react.useRef(false);
|
|
3396
|
-
const livePatcher = react.useMemo(() =>
|
|
3396
|
+
const livePatcher = react.useMemo(() => chunkG7PJSVUS_js.createCollaborationLivePatcher(), []);
|
|
3397
3397
|
react.useEffect(() => () => livePatcher.dispose(), [livePatcher]);
|
|
3398
3398
|
const slidesRef = react.useRef([]);
|
|
3399
3399
|
const [mode, setMode] = react.useState("edit");
|
|
@@ -3402,8 +3402,8 @@ function useViewerCoreState(_input) {
|
|
|
3402
3402
|
const [slides, setSlides] = react.useState([]);
|
|
3403
3403
|
const [templateElementsBySlideId, setTemplateElementsBySlideId] = react.useState({});
|
|
3404
3404
|
const [canvasSize, setCanvasSize] = react.useState({
|
|
3405
|
-
width:
|
|
3406
|
-
height:
|
|
3405
|
+
width: chunkXROVGBFQ_js.DEFAULT_CANVAS_WIDTH,
|
|
3406
|
+
height: chunkXROVGBFQ_js.DEFAULT_CANVAS_HEIGHT
|
|
3407
3407
|
});
|
|
3408
3408
|
const [activeSlideIndex, setActiveSlideIndex] = react.useState(0);
|
|
3409
3409
|
const [selectedElementId, setSelectedElementId] = react.useState(null);
|
|
@@ -3423,7 +3423,7 @@ function useViewerCoreState(_input) {
|
|
|
3423
3423
|
const resolved = typeof value === "function" ? value(inlineEditingTextRef.current) : value;
|
|
3424
3424
|
inlineEditingTextRef.current = resolved;
|
|
3425
3425
|
setInlineEditingTextBase(value);
|
|
3426
|
-
|
|
3426
|
+
chunkG7PJSVUS_js.publishLiveInlineText(
|
|
3427
3427
|
livePatcher,
|
|
3428
3428
|
slidesRef.current[activeSlideIndexRef.current],
|
|
3429
3429
|
inlineEditingElementIdRef.current,
|
|
@@ -3748,7 +3748,7 @@ function useLoadContent({
|
|
|
3748
3748
|
);
|
|
3749
3749
|
}
|
|
3750
3750
|
const previousHandler = handlerRef.current;
|
|
3751
|
-
const handler = new
|
|
3751
|
+
const handler = new chunkG7PJSVUS_js.PptxHandler();
|
|
3752
3752
|
const parsed = await handler.load(buffer);
|
|
3753
3753
|
if (cancelled || token !== renderTokenRef.current) {
|
|
3754
3754
|
handler.dispose();
|
|
@@ -3760,7 +3760,7 @@ function useLoadContent({
|
|
|
3760
3760
|
handlerRef.current = null;
|
|
3761
3761
|
const mediaElements = [];
|
|
3762
3762
|
for (const slide of parsed.slides) {
|
|
3763
|
-
|
|
3763
|
+
chunkG7PJSVUS_js.collectMediaElements(slide.elements, mediaElements);
|
|
3764
3764
|
}
|
|
3765
3765
|
for (const url of mediaDataUrls.values()) {
|
|
3766
3766
|
if (url.startsWith("blob:")) {
|
|
@@ -3801,7 +3801,7 @@ function useLoadContent({
|
|
|
3801
3801
|
}
|
|
3802
3802
|
})
|
|
3803
3803
|
);
|
|
3804
|
-
const { paths: imagePaths, refs: imageRefs } =
|
|
3804
|
+
const { paths: imagePaths, refs: imageRefs } = chunkG7PJSVUS_js.collectImagePaths(parsed.slides);
|
|
3805
3805
|
let nextSlides = parsed.slides;
|
|
3806
3806
|
if (imagePaths.size > 0) {
|
|
3807
3807
|
const resolvedMap = /* @__PURE__ */ new Map();
|
|
@@ -3856,12 +3856,12 @@ function useLoadContent({
|
|
|
3856
3856
|
}
|
|
3857
3857
|
}
|
|
3858
3858
|
handlerRef.current = handler;
|
|
3859
|
-
const partition =
|
|
3859
|
+
const partition = chunkXROVGBFQ_js.partitionTemplateElements(nextSlides);
|
|
3860
3860
|
setSlides(partition.slides);
|
|
3861
3861
|
setTemplateElementsBySlideId(partition.templateElementsBySlideId);
|
|
3862
3862
|
setCanvasSize({
|
|
3863
|
-
width: parsed.width ??
|
|
3864
|
-
height: parsed.height ??
|
|
3863
|
+
width: parsed.width ?? chunkXROVGBFQ_js.DEFAULT_CANVAS_WIDTH,
|
|
3864
|
+
height: parsed.height ?? chunkXROVGBFQ_js.DEFAULT_CANVAS_HEIGHT
|
|
3865
3865
|
});
|
|
3866
3866
|
setHeaderFooter(parsed.headerFooter ?? {});
|
|
3867
3867
|
setLayoutOptions(parsed.layoutOptions ?? []);
|
|
@@ -3890,7 +3890,7 @@ function useLoadContent({
|
|
|
3890
3890
|
setHasMacros(parsed.hasMacros === true);
|
|
3891
3891
|
setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
|
|
3892
3892
|
setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
|
|
3893
|
-
setGuides(
|
|
3893
|
+
setGuides(chunkG7PJSVUS_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
|
|
3894
3894
|
setActiveSlideIndex(0);
|
|
3895
3895
|
clearSelection();
|
|
3896
3896
|
setIsDirty(false);
|
|
@@ -3898,7 +3898,7 @@ function useLoadContent({
|
|
|
3898
3898
|
onContentApplied?.();
|
|
3899
3899
|
} catch (err) {
|
|
3900
3900
|
if (!cancelled && token === renderTokenRef.current) {
|
|
3901
|
-
if (err instanceof
|
|
3901
|
+
if (err instanceof chunkG7PJSVUS_js.EncryptedFileError) {
|
|
3902
3902
|
setIsEncrypted(true);
|
|
3903
3903
|
} else {
|
|
3904
3904
|
setError(err instanceof Error ? err.message : String(err));
|
|
@@ -3975,7 +3975,7 @@ function useAutosave(input) {
|
|
|
3975
3975
|
isSavingRef.current = false;
|
|
3976
3976
|
return;
|
|
3977
3977
|
}
|
|
3978
|
-
await
|
|
3978
|
+
await chunkG7PJSVUS_js.saveAutosaveSnapshot(filePathRef.current, data);
|
|
3979
3979
|
setAutosaveStatus({ state: "saved", timestamp: Date.now() });
|
|
3980
3980
|
} catch (err) {
|
|
3981
3981
|
setAutosaveStatus({
|
|
@@ -4040,7 +4040,7 @@ function useElementOperations(input) {
|
|
|
4040
4040
|
}, [applySelection, setInlineEditingElementId, setContextMenuState]);
|
|
4041
4041
|
const updateElementById = react.useCallback(
|
|
4042
4042
|
(elementId, updates) => {
|
|
4043
|
-
if (
|
|
4043
|
+
if (chunkG7PJSVUS_js.isTemplateElementId(elementId)) {
|
|
4044
4044
|
const slideId = activeSlide?.id;
|
|
4045
4045
|
if (slideId) {
|
|
4046
4046
|
setTemplateElementsBySlideId((prev) => ({
|
|
@@ -4080,7 +4080,7 @@ function useElementOperations(input) {
|
|
|
4080
4080
|
);
|
|
4081
4081
|
const updateSelectedShapeStyle = react.useCallback(
|
|
4082
4082
|
(updates) => {
|
|
4083
|
-
if (!selectedElement || !
|
|
4083
|
+
if (!selectedElement || !chunkG7PJSVUS_js.hasShapeProperties(selectedElement)) {
|
|
4084
4084
|
return;
|
|
4085
4085
|
}
|
|
4086
4086
|
updateSelectedElement({
|
|
@@ -4091,17 +4091,17 @@ function useElementOperations(input) {
|
|
|
4091
4091
|
);
|
|
4092
4092
|
const updateSelectedTextStyle = react.useCallback(
|
|
4093
4093
|
(updates) => {
|
|
4094
|
-
if (!selectedElement || !
|
|
4094
|
+
if (!selectedElement || !chunkG7PJSVUS_js.hasTextProperties(selectedElement)) {
|
|
4095
4095
|
return;
|
|
4096
4096
|
}
|
|
4097
|
-
const inlineSel =
|
|
4097
|
+
const inlineSel = chunkG7PJSVUS_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
4098
4098
|
if (inlineSel && selectedElement.textSegments) {
|
|
4099
|
-
const { newSegments: newSegments2, newSelection } =
|
|
4099
|
+
const { newSegments: newSegments2, newSelection } = chunkG7PJSVUS_js.applyStyleToSelectedSegments(
|
|
4100
4100
|
selectedElement.textSegments,
|
|
4101
4101
|
inlineSel,
|
|
4102
4102
|
updates
|
|
4103
4103
|
);
|
|
4104
|
-
|
|
4104
|
+
chunkG7PJSVUS_js.setPendingSelectionRestore(newSelection);
|
|
4105
4105
|
updateSelectedElement({
|
|
4106
4106
|
textSegments: newSegments2
|
|
4107
4107
|
});
|
|
@@ -4121,12 +4121,12 @@ function useElementOperations(input) {
|
|
|
4121
4121
|
);
|
|
4122
4122
|
const updateSelectedTextCase = react.useCallback(
|
|
4123
4123
|
(mode) => {
|
|
4124
|
-
if (!selectedElement || !
|
|
4124
|
+
if (!selectedElement || !chunkG7PJSVUS_js.hasTextProperties(selectedElement)) {
|
|
4125
4125
|
return;
|
|
4126
4126
|
}
|
|
4127
|
-
const inlineSel =
|
|
4127
|
+
const inlineSel = chunkG7PJSVUS_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
4128
4128
|
if (inlineSel && selectedElement.textSegments) {
|
|
4129
|
-
const newSegments =
|
|
4129
|
+
const newSegments = chunkG7PJSVUS_js.applyCaseTransformToSegments(
|
|
4130
4130
|
selectedElement.textSegments,
|
|
4131
4131
|
inlineSel,
|
|
4132
4132
|
mode
|
|
@@ -4136,14 +4136,14 @@ function useElementOperations(input) {
|
|
|
4136
4136
|
}
|
|
4137
4137
|
const updates = {};
|
|
4138
4138
|
if (selectedElement.textSegments && selectedElement.textSegments.length > 0) {
|
|
4139
|
-
updates.textSegments =
|
|
4139
|
+
updates.textSegments = chunkG7PJSVUS_js.applyCaseTransformToSegments(
|
|
4140
4140
|
selectedElement.textSegments,
|
|
4141
4141
|
null,
|
|
4142
4142
|
mode
|
|
4143
4143
|
);
|
|
4144
4144
|
}
|
|
4145
4145
|
if (typeof selectedElement.text === "string") {
|
|
4146
|
-
updates.text =
|
|
4146
|
+
updates.text = chunkG7PJSVUS_js.transformTextCase(selectedElement.text, mode);
|
|
4147
4147
|
}
|
|
4148
4148
|
updateSelectedElement(updates);
|
|
4149
4149
|
},
|
|
@@ -4198,7 +4198,7 @@ function useSectionOperations(input) {
|
|
|
4198
4198
|
const { sections, setSections, slides, setSlides, markDirty } = input;
|
|
4199
4199
|
const addSection2 = react.useCallback(
|
|
4200
4200
|
(name, afterSlideIndex) => {
|
|
4201
|
-
const result =
|
|
4201
|
+
const result = chunkG7PJSVUS_js.addSection(sections, slides, name, afterSlideIndex);
|
|
4202
4202
|
setSlides(result.slides);
|
|
4203
4203
|
setSections(result.sections);
|
|
4204
4204
|
markDirty();
|
|
@@ -4207,7 +4207,7 @@ function useSectionOperations(input) {
|
|
|
4207
4207
|
);
|
|
4208
4208
|
const renameSection2 = react.useCallback(
|
|
4209
4209
|
(sectionId, newName) => {
|
|
4210
|
-
const result =
|
|
4210
|
+
const result = chunkG7PJSVUS_js.renameSection(sections, slides, sectionId, newName);
|
|
4211
4211
|
setSections(result.sections);
|
|
4212
4212
|
setSlides(result.slides);
|
|
4213
4213
|
markDirty();
|
|
@@ -4216,7 +4216,7 @@ function useSectionOperations(input) {
|
|
|
4216
4216
|
);
|
|
4217
4217
|
const deleteSection2 = react.useCallback(
|
|
4218
4218
|
(sectionId) => {
|
|
4219
|
-
const result =
|
|
4219
|
+
const result = chunkG7PJSVUS_js.deleteSection(sections, slides, sectionId);
|
|
4220
4220
|
setSections(result.sections);
|
|
4221
4221
|
setSlides(result.slides);
|
|
4222
4222
|
markDirty();
|
|
@@ -4225,21 +4225,21 @@ function useSectionOperations(input) {
|
|
|
4225
4225
|
);
|
|
4226
4226
|
const moveSectionUp2 = react.useCallback(
|
|
4227
4227
|
(sectionId) => {
|
|
4228
|
-
setSections(
|
|
4228
|
+
setSections(chunkG7PJSVUS_js.moveSectionUp(sections, sectionId));
|
|
4229
4229
|
markDirty();
|
|
4230
4230
|
},
|
|
4231
4231
|
[sections, setSections, markDirty]
|
|
4232
4232
|
);
|
|
4233
4233
|
const moveSectionDown2 = react.useCallback(
|
|
4234
4234
|
(sectionId) => {
|
|
4235
|
-
setSections(
|
|
4235
|
+
setSections(chunkG7PJSVUS_js.moveSectionDown(sections, sectionId));
|
|
4236
4236
|
markDirty();
|
|
4237
4237
|
},
|
|
4238
4238
|
[sections, setSections, markDirty]
|
|
4239
4239
|
);
|
|
4240
4240
|
const moveSlidesToSection2 = react.useCallback(
|
|
4241
4241
|
(slideIndexes, targetSectionId) => {
|
|
4242
|
-
const result =
|
|
4242
|
+
const result = chunkG7PJSVUS_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
|
|
4243
4243
|
setSlides(result.slides);
|
|
4244
4244
|
setSections(result.sections);
|
|
4245
4245
|
markDirty();
|
|
@@ -4258,19 +4258,19 @@ function useSectionOperations(input) {
|
|
|
4258
4258
|
|
|
4259
4259
|
// src/viewer/hooks/pointer-move-handlers.ts
|
|
4260
4260
|
function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
|
|
4261
|
-
const resized =
|
|
4261
|
+
const resized = chunkG7PJSVUS_js.applyResize(
|
|
4262
4262
|
{ x: startX, y: startY, width: startWidth, height: startHeight },
|
|
4263
4263
|
handle,
|
|
4264
4264
|
dx,
|
|
4265
4265
|
dy,
|
|
4266
4266
|
1,
|
|
4267
|
-
{ minSize:
|
|
4267
|
+
{ minSize: chunkXROVGBFQ_js.MIN_ELEMENT_SIZE }
|
|
4268
4268
|
);
|
|
4269
4269
|
const box = { x: resized.x, y: resized.y, width: resized.width, height: resized.height };
|
|
4270
4270
|
if (!snapToGrid) {
|
|
4271
4271
|
return box;
|
|
4272
4272
|
}
|
|
4273
|
-
return
|
|
4273
|
+
return chunkG7PJSVUS_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkXROVGBFQ_js.MIN_ELEMENT_SIZE);
|
|
4274
4274
|
}
|
|
4275
4275
|
function computeAdjustmentValue(startAdjustment, dx, startWidth) {
|
|
4276
4276
|
const range = startWidth || 200;
|
|
@@ -4388,7 +4388,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
4388
4388
|
width: el.width,
|
|
4389
4389
|
height: el.height
|
|
4390
4390
|
}));
|
|
4391
|
-
const snapResult =
|
|
4391
|
+
const snapResult = chunkG7PJSVUS_js.computeSnapToShape(
|
|
4392
4392
|
targetX,
|
|
4393
4393
|
targetY,
|
|
4394
4394
|
primaryEl.width,
|
|
@@ -4427,7 +4427,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
4427
4427
|
if (live) {
|
|
4428
4428
|
for (const id of Object.keys(drag.startPositionsById)) {
|
|
4429
4429
|
const start = drag.startPositionsById[id];
|
|
4430
|
-
|
|
4430
|
+
chunkG7PJSVUS_js.publishLiveGeometry(live.patcher, live.slideId, id, {
|
|
4431
4431
|
x: start.x + appliedDx,
|
|
4432
4432
|
y: start.y + appliedDy
|
|
4433
4433
|
});
|
|
@@ -4461,15 +4461,15 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
|
|
|
4461
4461
|
if (rs.domEl) {
|
|
4462
4462
|
rs.domEl.style.left = `${geo.x}px`;
|
|
4463
4463
|
rs.domEl.style.top = `${geo.y}px`;
|
|
4464
|
-
rs.domEl.style.width = `${Math.max(geo.width,
|
|
4465
|
-
rs.domEl.style.height = `${Math.max(geo.height,
|
|
4464
|
+
rs.domEl.style.width = `${Math.max(geo.width, chunkXROVGBFQ_js.MIN_ELEMENT_SIZE)}px`;
|
|
4465
|
+
rs.domEl.style.height = `${Math.max(geo.height, chunkXROVGBFQ_js.MIN_ELEMENT_SIZE)}px`;
|
|
4466
4466
|
}
|
|
4467
4467
|
if (live) {
|
|
4468
|
-
|
|
4468
|
+
chunkG7PJSVUS_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
|
|
4469
4469
|
x: geo.x,
|
|
4470
4470
|
y: geo.y,
|
|
4471
|
-
width: Math.max(geo.width,
|
|
4472
|
-
height: Math.max(geo.height,
|
|
4471
|
+
width: Math.max(geo.width, chunkXROVGBFQ_js.MIN_ELEMENT_SIZE),
|
|
4472
|
+
height: Math.max(geo.height, chunkXROVGBFQ_js.MIN_ELEMENT_SIZE)
|
|
4473
4473
|
});
|
|
4474
4474
|
}
|
|
4475
4475
|
}
|
|
@@ -4549,13 +4549,13 @@ function processPointerUp(input) {
|
|
|
4549
4549
|
if (i !== activeSlideIndex) {
|
|
4550
4550
|
return s;
|
|
4551
4551
|
}
|
|
4552
|
-
const rerouted =
|
|
4552
|
+
const rerouted = chunkG7PJSVUS_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
|
|
4553
4553
|
if (rerouted.length === 0) {
|
|
4554
4554
|
return s;
|
|
4555
4555
|
}
|
|
4556
4556
|
return {
|
|
4557
4557
|
...s,
|
|
4558
|
-
elements:
|
|
4558
|
+
elements: chunkG7PJSVUS_js.applyReroutedConnectors(s.elements, rerouted)
|
|
4559
4559
|
};
|
|
4560
4560
|
})
|
|
4561
4561
|
);
|
|
@@ -4577,9 +4577,9 @@ function processPointerUp(input) {
|
|
|
4577
4577
|
}
|
|
4578
4578
|
function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
|
|
4579
4579
|
const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
|
|
4580
|
-
const hitIds =
|
|
4580
|
+
const hitIds = chunkG7PJSVUS_js.computeMarqueeHitIds(marquee, sourceElements);
|
|
4581
4581
|
if (marquee.additive) {
|
|
4582
|
-
const merged =
|
|
4582
|
+
const merged = chunkG7PJSVUS_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
|
|
4583
4583
|
if (merged.length > 0) {
|
|
4584
4584
|
applySelection(merged[0], merged);
|
|
4585
4585
|
} else {
|
|
@@ -4602,8 +4602,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
|
|
|
4602
4602
|
}
|
|
4603
4603
|
return { ...el, x: start.x + dx, y: start.y + dy };
|
|
4604
4604
|
});
|
|
4605
|
-
const rerouted =
|
|
4606
|
-
return
|
|
4605
|
+
const rerouted = chunkG7PJSVUS_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
|
|
4606
|
+
return chunkG7PJSVUS_js.applyReroutedConnectors(movedElements, rerouted);
|
|
4607
4607
|
};
|
|
4608
4608
|
if (editTemplateMode) {
|
|
4609
4609
|
const slideId = activeSlide?.id;
|
|
@@ -4756,9 +4756,9 @@ function useCanvasInteractions(input) {
|
|
|
4756
4756
|
return;
|
|
4757
4757
|
}
|
|
4758
4758
|
const el = elementLookup.get(editId);
|
|
4759
|
-
if (el &&
|
|
4759
|
+
if (el && chunkG7PJSVUS_js.hasTextProperties(el)) {
|
|
4760
4760
|
const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
|
|
4761
|
-
const newSegments =
|
|
4761
|
+
const newSegments = chunkG7PJSVUS_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
|
|
4762
4762
|
ops.updateElementById(editId, {
|
|
4763
4763
|
text: committedText,
|
|
4764
4764
|
textSegments: newSegments
|
|
@@ -4769,7 +4769,7 @@ function useCanvasInteractions(input) {
|
|
|
4769
4769
|
setInlineEditingText("");
|
|
4770
4770
|
};
|
|
4771
4771
|
const openEquationEditorForElement = (el) => {
|
|
4772
|
-
if (!
|
|
4772
|
+
if (!chunkG7PJSVUS_js.hasTextProperties(el)) {
|
|
4773
4773
|
return false;
|
|
4774
4774
|
}
|
|
4775
4775
|
const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
|
|
@@ -4798,7 +4798,7 @@ function useCanvasInteractions(input) {
|
|
|
4798
4798
|
justSelectedRef.current = false;
|
|
4799
4799
|
} else {
|
|
4800
4800
|
const el = elementLookup.get(elementId);
|
|
4801
|
-
if (el &&
|
|
4801
|
+
if (el && chunkG7PJSVUS_js.hasTextProperties(el) && !el.locks?.noTextEdit) {
|
|
4802
4802
|
if (!openEquationEditorForElement(el)) {
|
|
4803
4803
|
setInlineEditingElementId(elementId);
|
|
4804
4804
|
setInlineEditingText(el.text ?? "");
|
|
@@ -4817,7 +4817,7 @@ function useCanvasInteractions(input) {
|
|
|
4817
4817
|
if (openEquationEditorForElement(el)) {
|
|
4818
4818
|
return;
|
|
4819
4819
|
}
|
|
4820
|
-
if (
|
|
4820
|
+
if (chunkG7PJSVUS_js.hasTextProperties(el)) {
|
|
4821
4821
|
setInlineEditingElementId(elementId);
|
|
4822
4822
|
setInlineEditingText(el.text ?? "");
|
|
4823
4823
|
}
|
|
@@ -5007,7 +5007,7 @@ function createFileHandlers(deps) {
|
|
|
5007
5007
|
h = Math.round(h * scale);
|
|
5008
5008
|
}
|
|
5009
5009
|
addElement({
|
|
5010
|
-
id:
|
|
5010
|
+
id: chunkG7PJSVUS_js.generateElementId(),
|
|
5011
5011
|
type: "image",
|
|
5012
5012
|
x: Math.round((canvasSize.width - w) / 2),
|
|
5013
5013
|
y: Math.round((canvasSize.height - h) / 2),
|
|
@@ -5018,7 +5018,7 @@ function createFileHandlers(deps) {
|
|
|
5018
5018
|
};
|
|
5019
5019
|
img.onerror = () => {
|
|
5020
5020
|
addElement({
|
|
5021
|
-
id:
|
|
5021
|
+
id: chunkG7PJSVUS_js.generateElementId(),
|
|
5022
5022
|
type: "image",
|
|
5023
5023
|
x: 100,
|
|
5024
5024
|
y: 100,
|
|
@@ -5044,7 +5044,7 @@ function createFileHandlers(deps) {
|
|
|
5044
5044
|
const elFilePath = file.path;
|
|
5045
5045
|
const insertMediaElement = (mediaSourceUrl, width, height) => {
|
|
5046
5046
|
addElement({
|
|
5047
|
-
id:
|
|
5047
|
+
id: chunkG7PJSVUS_js.generateElementId(),
|
|
5048
5048
|
type: "media",
|
|
5049
5049
|
mediaType,
|
|
5050
5050
|
mediaMimeType: file.type || void 0,
|
|
@@ -5219,13 +5219,13 @@ function createStructuredElementHandlers(deps) {
|
|
|
5219
5219
|
return;
|
|
5220
5220
|
}
|
|
5221
5221
|
addElement({
|
|
5222
|
-
id:
|
|
5222
|
+
id: chunkG7PJSVUS_js.generateElementId(),
|
|
5223
5223
|
type: "smartArt",
|
|
5224
5224
|
x: 100,
|
|
5225
5225
|
y: 120,
|
|
5226
5226
|
width: 600,
|
|
5227
5227
|
height: 340,
|
|
5228
|
-
smartArtData:
|
|
5228
|
+
smartArtData: chunkG7PJSVUS_js.buildSmartArtPresetData(
|
|
5229
5229
|
layout,
|
|
5230
5230
|
defaultItems,
|
|
5231
5231
|
(i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
|
|
@@ -5237,7 +5237,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5237
5237
|
return;
|
|
5238
5238
|
}
|
|
5239
5239
|
addElement({
|
|
5240
|
-
id:
|
|
5240
|
+
id: chunkG7PJSVUS_js.generateElementId(),
|
|
5241
5241
|
type: "shape",
|
|
5242
5242
|
x: 120,
|
|
5243
5243
|
y: 200,
|
|
@@ -5296,7 +5296,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5296
5296
|
const displayText = value || fieldTexts[fieldType] || fieldType;
|
|
5297
5297
|
const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
|
|
5298
5298
|
addElement({
|
|
5299
|
-
id:
|
|
5299
|
+
id: chunkG7PJSVUS_js.generateElementId(),
|
|
5300
5300
|
type: "shape",
|
|
5301
5301
|
x: 120,
|
|
5302
5302
|
y: 200,
|
|
@@ -5318,11 +5318,11 @@ function createStructuredElementHandlers(deps) {
|
|
|
5318
5318
|
if (!activeSlide) {
|
|
5319
5319
|
return;
|
|
5320
5320
|
}
|
|
5321
|
-
const preset =
|
|
5321
|
+
const preset = chunkG7PJSVUS_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
|
|
5322
5322
|
if (!preset) {
|
|
5323
5323
|
return;
|
|
5324
5324
|
}
|
|
5325
|
-
const defaultPptxAction =
|
|
5325
|
+
const defaultPptxAction = chunkG7PJSVUS_js.elementActionToPptxAction({
|
|
5326
5326
|
trigger: "click",
|
|
5327
5327
|
type: preset.defaultAction
|
|
5328
5328
|
});
|
|
@@ -5331,7 +5331,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5331
5331
|
defaultPptxAction.highlightClick = true;
|
|
5332
5332
|
}
|
|
5333
5333
|
addElement({
|
|
5334
|
-
id:
|
|
5334
|
+
id: chunkG7PJSVUS_js.generateElementId(),
|
|
5335
5335
|
type: "shape",
|
|
5336
5336
|
x: 150,
|
|
5337
5337
|
y: 150,
|
|
@@ -5398,14 +5398,14 @@ function useInsertElements(input) {
|
|
|
5398
5398
|
return;
|
|
5399
5399
|
}
|
|
5400
5400
|
addElement({
|
|
5401
|
-
id:
|
|
5401
|
+
id: chunkG7PJSVUS_js.generateElementId(),
|
|
5402
5402
|
type: "text",
|
|
5403
5403
|
x: 100,
|
|
5404
5404
|
y: 100,
|
|
5405
5405
|
width: 300,
|
|
5406
5406
|
height: 60,
|
|
5407
5407
|
text: "",
|
|
5408
|
-
textStyle: { fontSize:
|
|
5408
|
+
textStyle: { fontSize: chunkXROVGBFQ_js.DEFAULT_TEXT_FONT_SIZE }
|
|
5409
5409
|
});
|
|
5410
5410
|
};
|
|
5411
5411
|
const handleAddShape = () => {
|
|
@@ -5413,7 +5413,7 @@ function useInsertElements(input) {
|
|
|
5413
5413
|
return;
|
|
5414
5414
|
}
|
|
5415
5415
|
addElement({
|
|
5416
|
-
id:
|
|
5416
|
+
id: chunkG7PJSVUS_js.generateElementId(),
|
|
5417
5417
|
type: "shape",
|
|
5418
5418
|
x: 150,
|
|
5419
5419
|
y: 150,
|
|
@@ -5432,15 +5432,15 @@ function useInsertElements(input) {
|
|
|
5432
5432
|
return;
|
|
5433
5433
|
}
|
|
5434
5434
|
addElement({
|
|
5435
|
-
...
|
|
5436
|
-
id:
|
|
5435
|
+
...chunkG7PJSVUS_js.newTableElement(chunkXROVGBFQ_js.DEFAULT_TABLE_ROWS, chunkXROVGBFQ_js.DEFAULT_TABLE_COLUMNS, 100, 200),
|
|
5436
|
+
id: chunkG7PJSVUS_js.generateElementId()
|
|
5437
5437
|
});
|
|
5438
5438
|
};
|
|
5439
5439
|
const handleAddChart = (chartType) => {
|
|
5440
5440
|
if (!activeSlide) {
|
|
5441
5441
|
return;
|
|
5442
5442
|
}
|
|
5443
|
-
addElement(
|
|
5443
|
+
addElement(chunkG7PJSVUS_js.createDefaultChartElement(chartType));
|
|
5444
5444
|
};
|
|
5445
5445
|
const structured = createStructuredElementHandlers({
|
|
5446
5446
|
activeSlide,
|
|
@@ -5510,7 +5510,7 @@ function useClipboardHandlers(input) {
|
|
|
5510
5510
|
if (!selectedElement) {
|
|
5511
5511
|
return;
|
|
5512
5512
|
}
|
|
5513
|
-
setClipboardPayload(
|
|
5513
|
+
setClipboardPayload(chunkG7PJSVUS_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
|
|
5514
5514
|
};
|
|
5515
5515
|
const handleDelete = () => {
|
|
5516
5516
|
const idsToDelete = effectiveSelectedIds;
|
|
@@ -5527,7 +5527,7 @@ function useClipboardHandlers(input) {
|
|
|
5527
5527
|
handleDelete();
|
|
5528
5528
|
};
|
|
5529
5529
|
const insertClone = (source) => {
|
|
5530
|
-
const clone =
|
|
5530
|
+
const clone = chunkG7PJSVUS_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
|
|
5531
5531
|
ops.updateActiveElements((els) => [...els, clone]);
|
|
5532
5532
|
ops.applySelection(clone.id);
|
|
5533
5533
|
history.markDirty();
|
|
@@ -5562,7 +5562,7 @@ function resolveShapePath(el) {
|
|
|
5562
5562
|
return el.pathData;
|
|
5563
5563
|
}
|
|
5564
5564
|
if ("shapeType" in el && typeof el.shapeType === "string") {
|
|
5565
|
-
const clipPath =
|
|
5565
|
+
const clipPath = chunkG7PJSVUS_js.getPresetShapeClipPath(el.shapeType);
|
|
5566
5566
|
if (clipPath) {
|
|
5567
5567
|
const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
|
|
5568
5568
|
if (svgPath) {
|
|
@@ -5613,7 +5613,7 @@ function clipPathToSvgPath(clipPath, width, height) {
|
|
|
5613
5613
|
return parts.join(" ");
|
|
5614
5614
|
}
|
|
5615
5615
|
function transformPathToGlobal(pathData, el) {
|
|
5616
|
-
const polys =
|
|
5616
|
+
const polys = chunkG7PJSVUS_js.svgPathToPolygons(pathData);
|
|
5617
5617
|
if (polys.length === 0) {
|
|
5618
5618
|
return pathData;
|
|
5619
5619
|
}
|
|
@@ -5633,10 +5633,10 @@ function transformPathToGlobal(pathData, el) {
|
|
|
5633
5633
|
y: pt.y * scaleY + el.y
|
|
5634
5634
|
}))
|
|
5635
5635
|
);
|
|
5636
|
-
return
|
|
5636
|
+
return chunkG7PJSVUS_js.polygonsToSvgPath(transformed);
|
|
5637
5637
|
}
|
|
5638
5638
|
function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
5639
|
-
const polys =
|
|
5639
|
+
const polys = chunkG7PJSVUS_js.svgPathToPolygons(pathData);
|
|
5640
5640
|
if (polys.length === 0) {
|
|
5641
5641
|
return pathData;
|
|
5642
5642
|
}
|
|
@@ -5646,10 +5646,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
|
5646
5646
|
y: pt.y - y
|
|
5647
5647
|
}))
|
|
5648
5648
|
);
|
|
5649
|
-
return
|
|
5649
|
+
return chunkG7PJSVUS_js.polygonsToSvgPath(transformed);
|
|
5650
5650
|
}
|
|
5651
5651
|
function pathBounds(pathData) {
|
|
5652
|
-
const polys =
|
|
5652
|
+
const polys = chunkG7PJSVUS_js.svgPathToPolygons(pathData);
|
|
5653
5653
|
let minX = Infinity;
|
|
5654
5654
|
let minY = Infinity;
|
|
5655
5655
|
let maxX = -Infinity;
|
|
@@ -5708,7 +5708,7 @@ function useMergeShapesHandler(input) {
|
|
|
5708
5708
|
let allFragments = [];
|
|
5709
5709
|
let remaining = globalPaths[0];
|
|
5710
5710
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
5711
|
-
const frags =
|
|
5711
|
+
const frags = chunkG7PJSVUS_js.mergeShapes("fragment", remaining, globalPaths[i]);
|
|
5712
5712
|
if (Array.isArray(frags)) {
|
|
5713
5713
|
allFragments = frags;
|
|
5714
5714
|
}
|
|
@@ -5737,7 +5737,7 @@ function useMergeShapesHandler(input) {
|
|
|
5737
5737
|
bounds.height
|
|
5738
5738
|
);
|
|
5739
5739
|
const newEl = {
|
|
5740
|
-
id:
|
|
5740
|
+
id: chunkG7PJSVUS_js.generateElementId(),
|
|
5741
5741
|
type: "shape",
|
|
5742
5742
|
x: bounds.x,
|
|
5743
5743
|
y: bounds.y,
|
|
@@ -5775,7 +5775,7 @@ function useMergeShapesHandler(input) {
|
|
|
5775
5775
|
} else {
|
|
5776
5776
|
let resultPath = globalPaths[0];
|
|
5777
5777
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
5778
|
-
const result =
|
|
5778
|
+
const result = chunkG7PJSVUS_js.mergeShapes(operation, resultPath, globalPaths[i]);
|
|
5779
5779
|
if (typeof result === "string") {
|
|
5780
5780
|
resultPath = result;
|
|
5781
5781
|
}
|
|
@@ -5796,7 +5796,7 @@ function useMergeShapesHandler(input) {
|
|
|
5796
5796
|
);
|
|
5797
5797
|
const primary = targets[0];
|
|
5798
5798
|
const newEl = {
|
|
5799
|
-
id:
|
|
5799
|
+
id: chunkG7PJSVUS_js.generateElementId(),
|
|
5800
5800
|
type: "shape",
|
|
5801
5801
|
x: bounds.x,
|
|
5802
5802
|
y: bounds.y,
|
|
@@ -5859,7 +5859,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5859
5859
|
if (ids.length < 2 || !activeSlide) {
|
|
5860
5860
|
return;
|
|
5861
5861
|
}
|
|
5862
|
-
const { elements, groupId } =
|
|
5862
|
+
const { elements, groupId } = chunkG7PJSVUS_js.groupElements(ops.activeElements, ids, chunkG7PJSVUS_js.generateElementId());
|
|
5863
5863
|
if (groupId === null) {
|
|
5864
5864
|
return;
|
|
5865
5865
|
}
|
|
@@ -5872,12 +5872,12 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5872
5872
|
return;
|
|
5873
5873
|
}
|
|
5874
5874
|
const group = selectedElement;
|
|
5875
|
-
const intoTemplate =
|
|
5875
|
+
const intoTemplate = chunkG7PJSVUS_js.isTemplateElementId(group.id);
|
|
5876
5876
|
const ungrouped = group.children.map((child) => ({
|
|
5877
5877
|
...structuredClone(child),
|
|
5878
5878
|
// Keep child ids in the same store as the group so later edits route
|
|
5879
5879
|
// correctly: template groups yield template-prefixed child ids.
|
|
5880
|
-
id: intoTemplate ?
|
|
5880
|
+
id: intoTemplate ? chunkG7PJSVUS_js.makeCloneId(true, child.id || group.id) : child.id || chunkG7PJSVUS_js.generateElementId(),
|
|
5881
5881
|
x: child.x + group.x,
|
|
5882
5882
|
y: child.y + group.y
|
|
5883
5883
|
}));
|
|
@@ -5901,7 +5901,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5901
5901
|
if (!edge) {
|
|
5902
5902
|
return;
|
|
5903
5903
|
}
|
|
5904
|
-
const positions =
|
|
5904
|
+
const positions = chunkG7PJSVUS_js.alignElements(selectedElements, edge);
|
|
5905
5905
|
for (const [id, pos] of positions) {
|
|
5906
5906
|
const el = elementLookup.get(id);
|
|
5907
5907
|
if (!el) {
|
|
@@ -5919,7 +5919,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5919
5919
|
if (!distAxis) {
|
|
5920
5920
|
return;
|
|
5921
5921
|
}
|
|
5922
|
-
const positions =
|
|
5922
|
+
const positions = chunkG7PJSVUS_js.distributeElements(selectedElements, distAxis);
|
|
5923
5923
|
for (const [id, pos] of positions) {
|
|
5924
5924
|
const el = elementLookup.get(id);
|
|
5925
5925
|
if (!el) {
|
|
@@ -5936,7 +5936,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5936
5936
|
}
|
|
5937
5937
|
const id = selectedElement.id;
|
|
5938
5938
|
ops.updateActiveElements(
|
|
5939
|
-
(els) => direction === "forward" ?
|
|
5939
|
+
(els) => direction === "forward" ? chunkG7PJSVUS_js.bringForward(els, id) : direction === "backward" ? chunkG7PJSVUS_js.sendBackward(els, id) : els
|
|
5940
5940
|
);
|
|
5941
5941
|
history.markDirty();
|
|
5942
5942
|
};
|
|
@@ -5946,7 +5946,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5946
5946
|
}
|
|
5947
5947
|
const id = selectedElement.id;
|
|
5948
5948
|
ops.updateActiveElements(
|
|
5949
|
-
(els) => direction === "front" ?
|
|
5949
|
+
(els) => direction === "front" ? chunkG7PJSVUS_js.bringToFront(els, id) : chunkG7PJSVUS_js.sendToBack(els, id)
|
|
5950
5950
|
);
|
|
5951
5951
|
history.markDirty();
|
|
5952
5952
|
};
|
|
@@ -6068,7 +6068,7 @@ function insertSlideFromLayoutUpdater(slides, activeIndex, draft) {
|
|
|
6068
6068
|
function useSlideManagement(input) {
|
|
6069
6069
|
const { slides, activeSlideIndex, setActiveSlideIndex, ops, history, handlerRef } = input;
|
|
6070
6070
|
const handleAddSlide = () => {
|
|
6071
|
-
const newSlide =
|
|
6071
|
+
const newSlide = chunkG7PJSVUS_js.createBlankSlide(slides.length + 1);
|
|
6072
6072
|
ops.updateSlides((prev) => {
|
|
6073
6073
|
const next = [...prev];
|
|
6074
6074
|
next.splice(activeSlideIndex + 1, 0, newSlide);
|
|
@@ -6131,7 +6131,7 @@ function useSlideManagement(input) {
|
|
|
6131
6131
|
}
|
|
6132
6132
|
const clone = {
|
|
6133
6133
|
...src,
|
|
6134
|
-
id:
|
|
6134
|
+
id: chunkG7PJSVUS_js.makeSlideId(),
|
|
6135
6135
|
elements: src.elements.map((el) => ({
|
|
6136
6136
|
...el,
|
|
6137
6137
|
id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
|
|
@@ -6163,7 +6163,7 @@ function useSlideManagement(input) {
|
|
|
6163
6163
|
const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
|
|
6164
6164
|
const insertAt = activeSlideIndex + 1;
|
|
6165
6165
|
const draft = {
|
|
6166
|
-
...
|
|
6166
|
+
...chunkG7PJSVUS_js.createBlankSlide(slides.length + 1),
|
|
6167
6167
|
layoutPath,
|
|
6168
6168
|
...layoutName ? { layoutName } : {}
|
|
6169
6169
|
};
|
|
@@ -6224,7 +6224,7 @@ function createTableMergeHandlers(input) {
|
|
|
6224
6224
|
if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
|
|
6225
6225
|
return;
|
|
6226
6226
|
}
|
|
6227
|
-
const newTableData =
|
|
6227
|
+
const newTableData = chunkG7PJSVUS_js.mergeCells(
|
|
6228
6228
|
[
|
|
6229
6229
|
{ row: rowIndex, col: columnIndex },
|
|
6230
6230
|
{ row: rowIndex, col: nextColIdx }
|
|
@@ -6232,7 +6232,7 @@ function createTableMergeHandlers(input) {
|
|
|
6232
6232
|
td
|
|
6233
6233
|
);
|
|
6234
6234
|
const updates = { tableData: newTableData };
|
|
6235
|
-
const newRawXml =
|
|
6235
|
+
const newRawXml = chunkG7PJSVUS_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6236
6236
|
if (newRawXml) {
|
|
6237
6237
|
updates.rawXml = newRawXml;
|
|
6238
6238
|
}
|
|
@@ -6258,7 +6258,7 @@ function createTableMergeHandlers(input) {
|
|
|
6258
6258
|
if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
|
|
6259
6259
|
return;
|
|
6260
6260
|
}
|
|
6261
|
-
const newTableData =
|
|
6261
|
+
const newTableData = chunkG7PJSVUS_js.mergeCells(
|
|
6262
6262
|
[
|
|
6263
6263
|
{ row: rowIndex, col: columnIndex },
|
|
6264
6264
|
{ row: targetNextRowIdx, col: columnIndex }
|
|
@@ -6266,7 +6266,7 @@ function createTableMergeHandlers(input) {
|
|
|
6266
6266
|
td
|
|
6267
6267
|
);
|
|
6268
6268
|
const updates = { tableData: newTableData };
|
|
6269
|
-
const newRawXml =
|
|
6269
|
+
const newRawXml = chunkG7PJSVUS_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6270
6270
|
if (newRawXml) {
|
|
6271
6271
|
updates.rawXml = newRawXml;
|
|
6272
6272
|
}
|
|
@@ -6281,9 +6281,9 @@ function createTableMergeHandlers(input) {
|
|
|
6281
6281
|
return;
|
|
6282
6282
|
}
|
|
6283
6283
|
const td = selectedElement.tableData;
|
|
6284
|
-
const newTableData =
|
|
6284
|
+
const newTableData = chunkG7PJSVUS_js.mergeCells(ts.selectedCells, td);
|
|
6285
6285
|
const updates = { tableData: newTableData };
|
|
6286
|
-
const newRawXml =
|
|
6286
|
+
const newRawXml = chunkG7PJSVUS_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6287
6287
|
if (newRawXml) {
|
|
6288
6288
|
updates.rawXml = newRawXml;
|
|
6289
6289
|
}
|
|
@@ -6300,9 +6300,9 @@ function createTableMergeHandlers(input) {
|
|
|
6300
6300
|
}
|
|
6301
6301
|
const { rowIndex, columnIndex } = ts;
|
|
6302
6302
|
const td = selectedElement.tableData;
|
|
6303
|
-
const newTableData =
|
|
6303
|
+
const newTableData = chunkG7PJSVUS_js.splitCell(rowIndex, columnIndex, td);
|
|
6304
6304
|
const updates = { tableData: newTableData };
|
|
6305
|
-
const newRawXml =
|
|
6305
|
+
const newRawXml = chunkG7PJSVUS_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6306
6306
|
if (newRawXml) {
|
|
6307
6307
|
updates.rawXml = newRawXml;
|
|
6308
6308
|
}
|
|
@@ -6346,7 +6346,7 @@ function createTableStructHandlers(input) {
|
|
|
6346
6346
|
updates.tableData = { ...el.tableData, rows: newRows };
|
|
6347
6347
|
}
|
|
6348
6348
|
if (el.rawXml) {
|
|
6349
|
-
const newRawXml =
|
|
6349
|
+
const newRawXml = chunkG7PJSVUS_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
|
|
6350
6350
|
if (newRawXml) {
|
|
6351
6351
|
updates.rawXml = newRawXml;
|
|
6352
6352
|
}
|
|
@@ -6370,7 +6370,7 @@ function createTableStructHandlers(input) {
|
|
|
6370
6370
|
const { rowIndex, columnIndex: colIndex } = ts;
|
|
6371
6371
|
const updates = {};
|
|
6372
6372
|
if (selectedElement.rawXml) {
|
|
6373
|
-
const newRawXml =
|
|
6373
|
+
const newRawXml = chunkG7PJSVUS_js.updateCellTextStyleInRawXml(
|
|
6374
6374
|
selectedElement,
|
|
6375
6375
|
rowIndex,
|
|
6376
6376
|
colIndex,
|
|
@@ -6434,9 +6434,9 @@ function createTableStructHandlers(input) {
|
|
|
6434
6434
|
return;
|
|
6435
6435
|
}
|
|
6436
6436
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
6437
|
-
const newTableData =
|
|
6437
|
+
const newTableData = chunkG7PJSVUS_js.insertTableRow(selectedElement.tableData, rowIdx, position);
|
|
6438
6438
|
const updates = { tableData: newTableData };
|
|
6439
|
-
const newRawXml =
|
|
6439
|
+
const newRawXml = chunkG7PJSVUS_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6440
6440
|
if (newRawXml) {
|
|
6441
6441
|
updates.rawXml = newRawXml;
|
|
6442
6442
|
}
|
|
@@ -6449,12 +6449,12 @@ function createTableStructHandlers(input) {
|
|
|
6449
6449
|
}
|
|
6450
6450
|
const td = selectedElement.tableData;
|
|
6451
6451
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
6452
|
-
const newTableData =
|
|
6452
|
+
const newTableData = chunkG7PJSVUS_js.deleteTableRow(td, rowIdx);
|
|
6453
6453
|
if (newTableData === td) {
|
|
6454
6454
|
return;
|
|
6455
6455
|
}
|
|
6456
6456
|
const updates = { tableData: newTableData };
|
|
6457
|
-
const newRawXml =
|
|
6457
|
+
const newRawXml = chunkG7PJSVUS_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6458
6458
|
if (newRawXml) {
|
|
6459
6459
|
updates.rawXml = newRawXml;
|
|
6460
6460
|
}
|
|
@@ -6466,9 +6466,9 @@ function createTableStructHandlers(input) {
|
|
|
6466
6466
|
return;
|
|
6467
6467
|
}
|
|
6468
6468
|
const colIdx = ts?.columnIndex ?? 0;
|
|
6469
|
-
const newTableData =
|
|
6469
|
+
const newTableData = chunkG7PJSVUS_js.insertTableColumn(selectedElement.tableData, colIdx, position);
|
|
6470
6470
|
const updates = { tableData: newTableData };
|
|
6471
|
-
const newRawXml =
|
|
6471
|
+
const newRawXml = chunkG7PJSVUS_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6472
6472
|
if (newRawXml) {
|
|
6473
6473
|
updates.rawXml = newRawXml;
|
|
6474
6474
|
}
|
|
@@ -6481,12 +6481,12 @@ function createTableStructHandlers(input) {
|
|
|
6481
6481
|
}
|
|
6482
6482
|
const td = selectedElement.tableData;
|
|
6483
6483
|
const colIdx = ts?.columnIndex ?? 0;
|
|
6484
|
-
const newTableData =
|
|
6484
|
+
const newTableData = chunkG7PJSVUS_js.deleteTableColumn(td, colIdx);
|
|
6485
6485
|
if (newTableData === td) {
|
|
6486
6486
|
return;
|
|
6487
6487
|
}
|
|
6488
6488
|
const updates = { tableData: newTableData };
|
|
6489
|
-
const newRawXml =
|
|
6489
|
+
const newRawXml = chunkG7PJSVUS_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6490
6490
|
if (newRawXml) {
|
|
6491
6491
|
updates.rawXml = newRawXml;
|
|
6492
6492
|
}
|
|
@@ -6522,8 +6522,8 @@ async function renderToCanvas(element, options = {}) {
|
|
|
6522
6522
|
return html2canvasPro(element, {
|
|
6523
6523
|
...options,
|
|
6524
6524
|
onclone: async (doc, clonedEl) => {
|
|
6525
|
-
await
|
|
6526
|
-
|
|
6525
|
+
await chunkG7PJSVUS_js.normalizeColorsForCapture(doc, clonedEl);
|
|
6526
|
+
chunkG7PJSVUS_js.preprocessCssForCapture(clonedEl);
|
|
6527
6527
|
if (typeof userOnClone === "function") {
|
|
6528
6528
|
userOnClone(doc, clonedEl);
|
|
6529
6529
|
}
|
|
@@ -6579,7 +6579,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
|
|
|
6579
6579
|
}
|
|
6580
6580
|
async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
|
|
6581
6581
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
6582
|
-
|
|
6582
|
+
chunkG7PJSVUS_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
|
|
6583
6583
|
}
|
|
6584
6584
|
async function copySlideToClipboard(slideElement, options = {}) {
|
|
6585
6585
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
@@ -6601,15 +6601,15 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
|
|
|
6601
6601
|
continue;
|
|
6602
6602
|
}
|
|
6603
6603
|
const canvas = await renderElementToCanvas(stageEl, scale);
|
|
6604
|
-
images.push(
|
|
6604
|
+
images.push(chunkG7PJSVUS_js.canvasToJpegData(canvas));
|
|
6605
6605
|
}
|
|
6606
6606
|
onProgress?.(totalSlides, totalSlides);
|
|
6607
6607
|
setActiveSlide(currentSlideIndex);
|
|
6608
6608
|
if (images.length === 0) {
|
|
6609
6609
|
throw new Error(chunk25VSL2BB_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
|
|
6610
6610
|
}
|
|
6611
|
-
const pdfBlobUrl =
|
|
6612
|
-
|
|
6611
|
+
const pdfBlobUrl = chunkXROVGBFQ_js.buildPdfFromImageData(images);
|
|
6612
|
+
chunkG7PJSVUS_js.downloadDataUrl(pdfBlobUrl, filename);
|
|
6613
6613
|
}
|
|
6614
6614
|
async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
|
|
6615
6615
|
const { scale = 2, onProgress } = options;
|
|
@@ -6657,8 +6657,8 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
|
|
|
6657
6657
|
if (pages.length === 0) {
|
|
6658
6658
|
throw new Error(chunk25VSL2BB_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
|
|
6659
6659
|
}
|
|
6660
|
-
const pdfDataUrl =
|
|
6661
|
-
|
|
6660
|
+
const pdfDataUrl = chunkXROVGBFQ_js.buildNotesPdf(pages);
|
|
6661
|
+
chunkG7PJSVUS_js.downloadDataUrl(pdfDataUrl, filename);
|
|
6662
6662
|
}
|
|
6663
6663
|
|
|
6664
6664
|
// src/viewer/utils/export-video.ts
|
|
@@ -6702,7 +6702,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
6702
6702
|
const fps = 30;
|
|
6703
6703
|
const stream = recordingCanvas.captureStream(fps);
|
|
6704
6704
|
const recorder = new MediaRecorder(stream, {
|
|
6705
|
-
mimeType:
|
|
6705
|
+
mimeType: chunkG7PJSVUS_js.pickSupportedMimeType([...chunkG7PJSVUS_js.WEBM_MIME_CANDIDATES]),
|
|
6706
6706
|
videoBitsPerSecond: 5e6
|
|
6707
6707
|
});
|
|
6708
6708
|
const chunks = [];
|
|
@@ -6725,8 +6725,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
6725
6725
|
const duration = slideTimingsMs?.[i] ?? slideDurationMs;
|
|
6726
6726
|
ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
|
|
6727
6727
|
ctx.drawImage(slideCanvases[i], 0, 0);
|
|
6728
|
-
const frameInterval =
|
|
6729
|
-
const framesNeeded =
|
|
6728
|
+
const frameInterval = chunkG7PJSVUS_js.fpsToFrameIntervalMs(fps);
|
|
6729
|
+
const framesNeeded = chunkG7PJSVUS_js.segmentFrameCount(duration, fps);
|
|
6730
6730
|
for (let f = 0; f < framesNeeded; f++) {
|
|
6731
6731
|
if (signal?.aborted) {
|
|
6732
6732
|
recorder.stop();
|
|
@@ -6775,7 +6775,7 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
|
|
|
6775
6775
|
if (frames.length === 0) {
|
|
6776
6776
|
throw new Error(chunk25VSL2BB_js.translationsEn["pptx.export.errorNoSlidesGif"]);
|
|
6777
6777
|
}
|
|
6778
|
-
const gifBytes =
|
|
6778
|
+
const gifBytes = chunkG7PJSVUS_js.encodeGif(frames, Math.round(slideDurationMs / 10));
|
|
6779
6779
|
onProgress?.(totalSlides, totalSlides);
|
|
6780
6780
|
const buf = new ArrayBuffer(gifBytes.length);
|
|
6781
6781
|
new Uint8Array(buf).set(gifBytes);
|
|
@@ -6829,7 +6829,7 @@ function exportAllSlidesToSvg(data, options = {}) {
|
|
|
6829
6829
|
continue;
|
|
6830
6830
|
}
|
|
6831
6831
|
onProgress?.(processedCount, data.slides.length);
|
|
6832
|
-
let svg =
|
|
6832
|
+
let svg = chunkG7PJSVUS_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
|
|
6833
6833
|
if (embedFonts && fontFaces?.length) {
|
|
6834
6834
|
svg = injectFontFaces(svg, fontFaces);
|
|
6835
6835
|
}
|
|
@@ -6889,7 +6889,7 @@ function useExportSaveAs(input) {
|
|
|
6889
6889
|
}
|
|
6890
6890
|
setExportProgress(70);
|
|
6891
6891
|
setExportStatusMessage("Writing README...");
|
|
6892
|
-
const readme =
|
|
6892
|
+
const readme = chunkG7PJSVUS_js.generatePackageReadme(pptxFilename);
|
|
6893
6893
|
pkgFolder.file("README.txt", readme);
|
|
6894
6894
|
if (abortCtrl.signal.aborted) {
|
|
6895
6895
|
throw new DOMException("Export cancelled", "AbortError");
|
|
@@ -6900,7 +6900,7 @@ function useExportSaveAs(input) {
|
|
|
6900
6900
|
setExportProgress(95);
|
|
6901
6901
|
setExportStatusMessage("Downloading...");
|
|
6902
6902
|
const baseName = pptxFilename.replace(/\.[^.]+$/u, "");
|
|
6903
|
-
|
|
6903
|
+
chunkG7PJSVUS_js.downloadBlob(zipBlob, `${baseName}-package.zip`);
|
|
6904
6904
|
setExportProgress(100);
|
|
6905
6905
|
} catch (err) {
|
|
6906
6906
|
if (err.name !== "AbortError") {
|
|
@@ -6923,7 +6923,7 @@ function useExportSaveAs(input) {
|
|
|
6923
6923
|
const blob = new Blob([data], {
|
|
6924
6924
|
type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
|
|
6925
6925
|
});
|
|
6926
|
-
|
|
6926
|
+
chunkG7PJSVUS_js.downloadBlob(blob, `${baseName}.${ext}`);
|
|
6927
6927
|
} catch (err) {
|
|
6928
6928
|
console.error(`[PowerPointViewer] Save as .${ext} failed:`, err);
|
|
6929
6929
|
}
|
|
@@ -6936,14 +6936,14 @@ function useExportSaveAs(input) {
|
|
|
6936
6936
|
const pptxGuides = guides.map((g) => ({
|
|
6937
6937
|
id: g.id,
|
|
6938
6938
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
6939
|
-
positionEmu:
|
|
6939
|
+
positionEmu: chunkG7PJSVUS_js.guidePxToEmu(g.position)
|
|
6940
6940
|
}));
|
|
6941
6941
|
return {
|
|
6942
6942
|
...slide,
|
|
6943
6943
|
guides: pptxGuides.length > 0 ? pptxGuides : void 0
|
|
6944
6944
|
};
|
|
6945
6945
|
});
|
|
6946
|
-
const slidesToSave =
|
|
6946
|
+
const slidesToSave = chunkXROVGBFQ_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
|
|
6947
6947
|
const saveOptions = {
|
|
6948
6948
|
headerFooter,
|
|
6949
6949
|
presentationProperties,
|
|
@@ -7000,7 +7000,7 @@ function safeConfirm(message) {
|
|
|
7000
7000
|
}
|
|
7001
7001
|
}
|
|
7002
7002
|
function downloadBlob2(blob, filename) {
|
|
7003
|
-
|
|
7003
|
+
chunkG7PJSVUS_js.downloadBlob(blob, chunkG7PJSVUS_js.sanitizeDownloadFilename(filename));
|
|
7004
7004
|
}
|
|
7005
7005
|
|
|
7006
7006
|
// src/viewer/hooks/useExportHandlers.ts
|
|
@@ -7101,21 +7101,21 @@ function useExportHandlers(input) {
|
|
|
7101
7101
|
{
|
|
7102
7102
|
scale: 2,
|
|
7103
7103
|
onProgress: (current, total) => {
|
|
7104
|
-
setExportProgress(
|
|
7105
|
-
setExportStatusMessage(
|
|
7104
|
+
setExportProgress(chunkG7PJSVUS_js.slideProgressPercent(current, total));
|
|
7105
|
+
setExportStatusMessage(chunkG7PJSVUS_js.slideStatusLabel("Rendering", current, total));
|
|
7106
7106
|
},
|
|
7107
7107
|
signal: abortCtrl.signal
|
|
7108
7108
|
}
|
|
7109
7109
|
);
|
|
7110
|
-
setExportProgress(
|
|
7110
|
+
setExportProgress(chunkG7PJSVUS_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7111
7111
|
setExportStatusMessage("Building PDF...");
|
|
7112
7112
|
await new Promise((r) => {
|
|
7113
7113
|
setTimeout(r, 100);
|
|
7114
7114
|
});
|
|
7115
|
-
setExportProgress(
|
|
7115
|
+
setExportProgress(chunkG7PJSVUS_js.EXPORT_DONE_PERCENT);
|
|
7116
7116
|
setExportStatusMessage("Done!");
|
|
7117
7117
|
} catch (err) {
|
|
7118
|
-
if (!
|
|
7118
|
+
if (!chunkG7PJSVUS_js.isExportAbortError(err)) {
|
|
7119
7119
|
console.error("[PowerPointViewer] PDF export failed:", err);
|
|
7120
7120
|
}
|
|
7121
7121
|
} finally {
|
|
@@ -7145,21 +7145,21 @@ function useExportHandlers(input) {
|
|
|
7145
7145
|
{
|
|
7146
7146
|
scale: 2,
|
|
7147
7147
|
onProgress: (current, total) => {
|
|
7148
|
-
setExportProgress(
|
|
7149
|
-
setExportStatusMessage(
|
|
7148
|
+
setExportProgress(chunkG7PJSVUS_js.slideProgressPercent(current, total));
|
|
7149
|
+
setExportStatusMessage(chunkG7PJSVUS_js.slideStatusLabel("Rendering", current, total));
|
|
7150
7150
|
},
|
|
7151
7151
|
signal: abortCtrl.signal
|
|
7152
7152
|
}
|
|
7153
7153
|
);
|
|
7154
|
-
setExportProgress(
|
|
7154
|
+
setExportProgress(chunkG7PJSVUS_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7155
7155
|
setExportStatusMessage("Building PDF...");
|
|
7156
7156
|
await new Promise((r) => {
|
|
7157
7157
|
setTimeout(r, 100);
|
|
7158
7158
|
});
|
|
7159
|
-
setExportProgress(
|
|
7159
|
+
setExportProgress(chunkG7PJSVUS_js.EXPORT_DONE_PERCENT);
|
|
7160
7160
|
setExportStatusMessage("Done!");
|
|
7161
7161
|
} catch (err) {
|
|
7162
|
-
if (!
|
|
7162
|
+
if (!chunkG7PJSVUS_js.isExportAbortError(err)) {
|
|
7163
7163
|
console.error("[PowerPointViewer] Notes PDF export failed:", err);
|
|
7164
7164
|
}
|
|
7165
7165
|
} finally {
|
|
@@ -7200,22 +7200,22 @@ function useExportHandlers(input) {
|
|
|
7200
7200
|
scale: 1,
|
|
7201
7201
|
slideDurationMs: 3e3,
|
|
7202
7202
|
onProgress: (current, total) => {
|
|
7203
|
-
setExportProgress(
|
|
7204
|
-
setExportStatusMessage(
|
|
7203
|
+
setExportProgress(chunkG7PJSVUS_js.slideProgressPercent(current, total, 45));
|
|
7204
|
+
setExportStatusMessage(chunkG7PJSVUS_js.slideStatusLabel("Capturing", current, total));
|
|
7205
7205
|
},
|
|
7206
7206
|
onRecordProgress: (current, total) => {
|
|
7207
|
-
setExportProgress(
|
|
7208
|
-
setExportStatusMessage(
|
|
7207
|
+
setExportProgress(chunkG7PJSVUS_js.recordProgressPercent(current, total));
|
|
7208
|
+
setExportStatusMessage(chunkG7PJSVUS_js.slideStatusLabel("Recording", current, total));
|
|
7209
7209
|
},
|
|
7210
7210
|
signal: abortCtrl.signal
|
|
7211
7211
|
}
|
|
7212
7212
|
);
|
|
7213
|
-
setExportProgress(
|
|
7213
|
+
setExportProgress(chunkG7PJSVUS_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7214
7214
|
setExportStatusMessage("Saving file...");
|
|
7215
7215
|
downloadBlob2(blob, "presentation.webm");
|
|
7216
|
-
setExportProgress(
|
|
7216
|
+
setExportProgress(chunkG7PJSVUS_js.EXPORT_DONE_PERCENT);
|
|
7217
7217
|
} catch (err) {
|
|
7218
|
-
if (!
|
|
7218
|
+
if (!chunkG7PJSVUS_js.isExportAbortError(err)) {
|
|
7219
7219
|
console.error("[PowerPointViewer] Video export failed:", err);
|
|
7220
7220
|
}
|
|
7221
7221
|
} finally {
|
|
@@ -7243,18 +7243,18 @@ function useExportHandlers(input) {
|
|
|
7243
7243
|
scale: 0.5,
|
|
7244
7244
|
slideDurationMs: 2e3,
|
|
7245
7245
|
onProgress: (current, total) => {
|
|
7246
|
-
setExportProgress(
|
|
7247
|
-
setExportStatusMessage(
|
|
7246
|
+
setExportProgress(chunkG7PJSVUS_js.slideProgressPercent(current, total));
|
|
7247
|
+
setExportStatusMessage(chunkG7PJSVUS_js.slideStatusLabel("Encoding", current, total));
|
|
7248
7248
|
},
|
|
7249
7249
|
signal: abortCtrl.signal
|
|
7250
7250
|
}
|
|
7251
7251
|
);
|
|
7252
|
-
setExportProgress(
|
|
7252
|
+
setExportProgress(chunkG7PJSVUS_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7253
7253
|
setExportStatusMessage("Saving file...");
|
|
7254
7254
|
downloadBlob2(blob, "presentation.gif");
|
|
7255
|
-
setExportProgress(
|
|
7255
|
+
setExportProgress(chunkG7PJSVUS_js.EXPORT_DONE_PERCENT);
|
|
7256
7256
|
} catch (err) {
|
|
7257
|
-
if (!
|
|
7257
|
+
if (!chunkG7PJSVUS_js.isExportAbortError(err)) {
|
|
7258
7258
|
console.error("[PowerPointViewer] GIF export failed:", err);
|
|
7259
7259
|
}
|
|
7260
7260
|
} finally {
|
|
@@ -7294,7 +7294,7 @@ function openPrintWindow(title, bodyHtml, orientation, colorFilter, frameSlides)
|
|
|
7294
7294
|
}
|
|
7295
7295
|
printWindow.document.open();
|
|
7296
7296
|
printWindow.document.write(
|
|
7297
|
-
|
|
7297
|
+
chunkG7PJSVUS_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
|
|
7298
7298
|
);
|
|
7299
7299
|
printWindow.document.close();
|
|
7300
7300
|
printWindow.focus();
|
|
@@ -7355,7 +7355,7 @@ function usePrintHandlers(input) {
|
|
|
7355
7355
|
if (svgs.length === 0) {
|
|
7356
7356
|
return;
|
|
7357
7357
|
}
|
|
7358
|
-
const printDoc =
|
|
7358
|
+
const printDoc = chunkG7PJSVUS_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
|
|
7359
7359
|
title: "Slides (Vector)",
|
|
7360
7360
|
orientation: settings.orientation,
|
|
7361
7361
|
colorFilter
|
|
@@ -7391,7 +7391,7 @@ function usePrintHandlers(input) {
|
|
|
7391
7391
|
if (settings.printWhat === "outline") {
|
|
7392
7392
|
openPrintWindow(
|
|
7393
7393
|
"Outline",
|
|
7394
|
-
`<div class="outline-page">${
|
|
7394
|
+
`<div class="outline-page">${chunkG7PJSVUS_js.buildOutlineHtml(slideIndices, slides)}</div>`,
|
|
7395
7395
|
settings.orientation,
|
|
7396
7396
|
colorFilter,
|
|
7397
7397
|
settings.frameSlides
|
|
@@ -7416,7 +7416,7 @@ function usePrintHandlers(input) {
|
|
|
7416
7416
|
if (settings.printWhat === "slides") {
|
|
7417
7417
|
openPrintWindow(
|
|
7418
7418
|
"Slides",
|
|
7419
|
-
|
|
7419
|
+
chunkG7PJSVUS_js.buildSlidesHtml(slideImages, slideIndices),
|
|
7420
7420
|
settings.orientation,
|
|
7421
7421
|
colorFilter,
|
|
7422
7422
|
settings.frameSlides
|
|
@@ -7426,7 +7426,7 @@ function usePrintHandlers(input) {
|
|
|
7426
7426
|
if (settings.printWhat === "notes") {
|
|
7427
7427
|
openPrintWindow(
|
|
7428
7428
|
"Notes Pages",
|
|
7429
|
-
|
|
7429
|
+
chunkG7PJSVUS_js.buildNotesHtml(slideImages, slideIndices, slides),
|
|
7430
7430
|
"portrait",
|
|
7431
7431
|
colorFilter,
|
|
7432
7432
|
settings.frameSlides
|
|
@@ -7437,7 +7437,7 @@ function usePrintHandlers(input) {
|
|
|
7437
7437
|
const spp = settings.slidesPerPage;
|
|
7438
7438
|
openPrintWindow(
|
|
7439
7439
|
`Handout ${spp} per page`,
|
|
7440
|
-
|
|
7440
|
+
chunkG7PJSVUS_js.buildHandoutsHtml(slideImages, slideIndices, spp),
|
|
7441
7441
|
"portrait",
|
|
7442
7442
|
colorFilter,
|
|
7443
7443
|
settings.frameSlides
|
|
@@ -7501,8 +7501,8 @@ function useThemeHandlers(input) {
|
|
|
7501
7501
|
return;
|
|
7502
7502
|
}
|
|
7503
7503
|
await handler.updateThemeColorScheme(colorScheme);
|
|
7504
|
-
const previousMap = theme?.colorScheme ?
|
|
7505
|
-
setSlides((prev) =>
|
|
7504
|
+
const previousMap = theme?.colorScheme ? chunkG7PJSVUS_js.buildThemeColorMap(theme.colorScheme) : {};
|
|
7505
|
+
setSlides((prev) => chunkG7PJSVUS_js.reResolveSlideColors(prev, previousMap, colorScheme));
|
|
7506
7506
|
setTheme((prev) => prev ? { ...prev, colorScheme } : { colorScheme });
|
|
7507
7507
|
bumpHistory();
|
|
7508
7508
|
history.markDirty();
|
|
@@ -7607,7 +7607,7 @@ function useThemeSwitching(input) {
|
|
|
7607
7607
|
}
|
|
7608
7608
|
try {
|
|
7609
7609
|
await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
|
|
7610
|
-
const newData =
|
|
7610
|
+
const newData = chunkG7PJSVUS_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
|
|
7611
7611
|
onDataChange(newData);
|
|
7612
7612
|
onThemeChanged?.(preset);
|
|
7613
7613
|
} catch (error) {
|
|
@@ -7624,7 +7624,7 @@ function useThemeSwitching(input) {
|
|
|
7624
7624
|
}
|
|
7625
7625
|
try {
|
|
7626
7626
|
await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
|
|
7627
|
-
const newData =
|
|
7627
|
+
const newData = chunkG7PJSVUS_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
|
|
7628
7628
|
onDataChange(newData);
|
|
7629
7629
|
} catch (error) {
|
|
7630
7630
|
console.error("Failed to switch to custom theme:", error);
|
|
@@ -7636,12 +7636,12 @@ function useThemeSwitching(input) {
|
|
|
7636
7636
|
if (!data?.theme?.colorScheme) {
|
|
7637
7637
|
return void 0;
|
|
7638
7638
|
}
|
|
7639
|
-
return
|
|
7640
|
-
(p) =>
|
|
7639
|
+
return chunkG7PJSVUS_js.THEME_PRESETS.find(
|
|
7640
|
+
(p) => chunkG7PJSVUS_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
|
|
7641
7641
|
);
|
|
7642
7642
|
}, [data?.theme?.colorScheme]);
|
|
7643
7643
|
return {
|
|
7644
|
-
presets:
|
|
7644
|
+
presets: chunkG7PJSVUS_js.THEME_PRESETS,
|
|
7645
7645
|
switchToPreset,
|
|
7646
7646
|
switchToCustom,
|
|
7647
7647
|
currentPreset
|
|
@@ -7716,7 +7716,7 @@ function usePropertyHandlers(input) {
|
|
|
7716
7716
|
}
|
|
7717
7717
|
try {
|
|
7718
7718
|
const ab = await file.arrayBuffer();
|
|
7719
|
-
const h = new
|
|
7719
|
+
const h = new chunkG7PJSVUS_js.PptxHandler();
|
|
7720
7720
|
const other = await h.load(ab);
|
|
7721
7721
|
if (!other) {
|
|
7722
7722
|
return;
|
|
@@ -7726,7 +7726,7 @@ function usePropertyHandlers(input) {
|
|
|
7726
7726
|
width: canvasSize.width,
|
|
7727
7727
|
height: canvasSize.height
|
|
7728
7728
|
};
|
|
7729
|
-
setCompareResult(
|
|
7729
|
+
setCompareResult(chunkG7PJSVUS_js.comparePresentation(cur, other));
|
|
7730
7730
|
setIsComparePanelOpen(true);
|
|
7731
7731
|
} catch (err) {
|
|
7732
7732
|
console.warn("Compare failed:", err);
|
|
@@ -7743,7 +7743,7 @@ function usePropertyHandlers(input) {
|
|
|
7743
7743
|
if (!diff || diff.status === "unchanged") {
|
|
7744
7744
|
return;
|
|
7745
7745
|
}
|
|
7746
|
-
setSlides((prev) =>
|
|
7746
|
+
setSlides((prev) => chunkG7PJSVUS_js.applyAcceptSlide(prev, diff));
|
|
7747
7747
|
setIsDirty(true);
|
|
7748
7748
|
},
|
|
7749
7749
|
[compareResult, setSlides, setIsDirty]
|
|
@@ -7754,10 +7754,10 @@ function usePropertyHandlers(input) {
|
|
|
7754
7754
|
if (!compareResult) {
|
|
7755
7755
|
return;
|
|
7756
7756
|
}
|
|
7757
|
-
setSlides((prev) =>
|
|
7757
|
+
setSlides((prev) => chunkG7PJSVUS_js.applyAcceptAllSlides(prev, compareResult));
|
|
7758
7758
|
setIsDirty(true);
|
|
7759
7759
|
}, [compareResult, setSlides, setIsDirty]);
|
|
7760
|
-
const usedFontFamilies = react.useMemo(() =>
|
|
7760
|
+
const usedFontFamilies = react.useMemo(() => chunkG7PJSVUS_js.collectUsedFonts(slides), [slides]);
|
|
7761
7761
|
return {
|
|
7762
7762
|
handleUpdateNotes,
|
|
7763
7763
|
handleUpdateSlide,
|
|
@@ -7876,7 +7876,7 @@ function useIsMobile(input) {
|
|
|
7876
7876
|
const containerRef = input?.containerRef;
|
|
7877
7877
|
const isTouchDevice = react.useSyncExternalStore(
|
|
7878
7878
|
subscribeTouchCapability,
|
|
7879
|
-
|
|
7879
|
+
chunkG7PJSVUS_js.detectTouchDevice,
|
|
7880
7880
|
() => false
|
|
7881
7881
|
// server snapshot
|
|
7882
7882
|
);
|
|
@@ -7892,7 +7892,7 @@ function useIsMobile(input) {
|
|
|
7892
7892
|
}
|
|
7893
7893
|
return containerRef?.current?.clientHeight ?? window.innerHeight;
|
|
7894
7894
|
});
|
|
7895
|
-
const [orientation, setOrientation] = react.useState(
|
|
7895
|
+
const [orientation, setOrientation] = react.useState(chunkG7PJSVUS_js.detectOrientation);
|
|
7896
7896
|
const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = react.useState(false);
|
|
7897
7897
|
const [initialViewportHeight] = react.useState(
|
|
7898
7898
|
() => typeof window !== "undefined" ? window.innerHeight : 800
|
|
@@ -7936,7 +7936,7 @@ function useIsMobile(input) {
|
|
|
7936
7936
|
return;
|
|
7937
7937
|
}
|
|
7938
7938
|
const handleOrientationChange = () => {
|
|
7939
|
-
setOrientation(
|
|
7939
|
+
setOrientation(chunkG7PJSVUS_js.detectOrientation());
|
|
7940
7940
|
};
|
|
7941
7941
|
if (screen.orientation) {
|
|
7942
7942
|
screen.orientation.addEventListener("change", handleOrientationChange);
|
|
@@ -7966,9 +7966,9 @@ function useIsMobile(input) {
|
|
|
7966
7966
|
window.addEventListener("resize", handleResize);
|
|
7967
7967
|
return () => window.removeEventListener("resize", handleResize);
|
|
7968
7968
|
}, [isTouchDevice, initialViewportHeight]);
|
|
7969
|
-
const isMobile =
|
|
7970
|
-
const isTablet = !isMobile && containerWidth >=
|
|
7971
|
-
const isDesktop = !isMobile && containerWidth >=
|
|
7969
|
+
const isMobile = chunkG7PJSVUS_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
|
|
7970
|
+
const isTablet = !isMobile && containerWidth >= chunkG7PJSVUS_js.MOBILE_BREAKPOINT && containerWidth < chunkG7PJSVUS_js.TABLET_BREAKPOINT;
|
|
7971
|
+
const isDesktop = !isMobile && containerWidth >= chunkG7PJSVUS_js.TABLET_BREAKPOINT;
|
|
7972
7972
|
return {
|
|
7973
7973
|
isMobile,
|
|
7974
7974
|
isTablet,
|
|
@@ -8029,11 +8029,11 @@ function useViewerDialogs(input) {
|
|
|
8029
8029
|
);
|
|
8030
8030
|
const [embedFontsEnabled, setEmbedFontsEnabled] = react.useState(false);
|
|
8031
8031
|
const [isNarrowViewport, setIsNarrowViewport] = react.useState(
|
|
8032
|
-
() => typeof window !== "undefined" ?
|
|
8032
|
+
() => typeof window !== "undefined" ? chunkG7PJSVUS_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
|
|
8033
8033
|
);
|
|
8034
8034
|
react.useEffect(() => {
|
|
8035
8035
|
const handleWindow = () => setIsNarrowViewport(
|
|
8036
|
-
|
|
8036
|
+
chunkG7PJSVUS_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
|
|
8037
8037
|
);
|
|
8038
8038
|
let observer = null;
|
|
8039
8039
|
let raf = 0;
|
|
@@ -8047,12 +8047,12 @@ function useViewerDialogs(input) {
|
|
|
8047
8047
|
const entry = entries[0];
|
|
8048
8048
|
if (entry) {
|
|
8049
8049
|
setIsNarrowViewport(
|
|
8050
|
-
|
|
8050
|
+
chunkG7PJSVUS_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
|
|
8051
8051
|
);
|
|
8052
8052
|
}
|
|
8053
8053
|
});
|
|
8054
8054
|
observer.observe(el);
|
|
8055
|
-
setIsNarrowViewport(
|
|
8055
|
+
setIsNarrowViewport(chunkG7PJSVUS_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
|
|
8056
8056
|
};
|
|
8057
8057
|
attach();
|
|
8058
8058
|
window.addEventListener("resize", handleWindow);
|
|
@@ -8210,12 +8210,12 @@ function useViewerDialogs(input) {
|
|
|
8210
8210
|
}
|
|
8211
8211
|
function computeGridSpacingPx(presentationGridSpacing) {
|
|
8212
8212
|
if (presentationGridSpacing) {
|
|
8213
|
-
const px = Math.round(presentationGridSpacing.cx /
|
|
8213
|
+
const px = Math.round(presentationGridSpacing.cx / chunkXROVGBFQ_js.EMU_PER_PX);
|
|
8214
8214
|
if (px > 0) {
|
|
8215
8215
|
return px;
|
|
8216
8216
|
}
|
|
8217
8217
|
}
|
|
8218
|
-
return
|
|
8218
|
+
return chunkXROVGBFQ_js.GRID_SIZE;
|
|
8219
8219
|
}
|
|
8220
8220
|
function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
|
|
8221
8221
|
if (activeCustomShowId) {
|
|
@@ -8229,8 +8229,8 @@ function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
|
|
|
8229
8229
|
return slides.map((_, i) => i).filter((i) => !slides[i]?.hidden);
|
|
8230
8230
|
}
|
|
8231
8231
|
function computeSlideSectionGroups(slides, sections) {
|
|
8232
|
-
return
|
|
8233
|
-
id: group.section?.id ?? (sections.length > 0 ?
|
|
8232
|
+
return chunkG7PJSVUS_js.groupSlidesBySection(sections, slides).map((group) => ({
|
|
8233
|
+
id: group.section?.id ?? (sections.length > 0 ? chunkXROVGBFQ_js.UNGROUPED_SECTION_ID : "default"),
|
|
8234
8234
|
label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
|
|
8235
8235
|
slideIndexes: group.slideIndexes,
|
|
8236
8236
|
...group.section?.color !== void 0 ? { color: group.section.color } : {},
|
|
@@ -8285,7 +8285,7 @@ function useDerivedSlideState(input) {
|
|
|
8285
8285
|
);
|
|
8286
8286
|
const slideSectionGroups = react.useMemo(
|
|
8287
8287
|
() => computeSlideSectionGroups(slides, sections).map((group) => {
|
|
8288
|
-
if (group.id ===
|
|
8288
|
+
if (group.id === chunkXROVGBFQ_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
|
|
8289
8289
|
return { ...group, label: t("pptx.slides.ungroupedSlides") };
|
|
8290
8290
|
}
|
|
8291
8291
|
if (group.id === "default" && group.label === "Slides") {
|
|
@@ -8388,13 +8388,13 @@ function useAnnotationHandlers(input) {
|
|
|
8388
8388
|
}, [annotations, setMode, setSlides, history]);
|
|
8389
8389
|
const handleSetMode = react.useCallback(
|
|
8390
8390
|
(nextMode) => {
|
|
8391
|
-
if (mode === "present" && nextMode !== "present" && !
|
|
8391
|
+
if (mode === "present" && nextMode !== "present" && !chunkG7PJSVUS_js.mayLeaveSlideShow()) {
|
|
8392
8392
|
return;
|
|
8393
8393
|
}
|
|
8394
8394
|
if (nextMode === "present") {
|
|
8395
8395
|
presentation.enterPresentMode();
|
|
8396
8396
|
} else if (mode === "present" && annotations.hasAnyAnnotations) {
|
|
8397
|
-
|
|
8397
|
+
chunkXROVGBFQ_js.stopAllPersistentAudio();
|
|
8398
8398
|
pendingModeAfterAnnotationsRef.current = nextMode;
|
|
8399
8399
|
if (promptKeepInkAnnotations) {
|
|
8400
8400
|
setShowKeepAnnotationsDialog(true);
|
|
@@ -8403,7 +8403,7 @@ function useAnnotationHandlers(input) {
|
|
|
8403
8403
|
}
|
|
8404
8404
|
} else {
|
|
8405
8405
|
if (mode === "present") {
|
|
8406
|
-
|
|
8406
|
+
chunkXROVGBFQ_js.stopAllPersistentAudio();
|
|
8407
8407
|
}
|
|
8408
8408
|
setMode(nextMode);
|
|
8409
8409
|
}
|
|
@@ -8469,13 +8469,13 @@ function useSerialize(input) {
|
|
|
8469
8469
|
let processedSlide = slide;
|
|
8470
8470
|
if (pendingEditId) {
|
|
8471
8471
|
const updatedElements = slide.elements.map((el) => {
|
|
8472
|
-
if (el.id !== pendingEditId || !
|
|
8472
|
+
if (el.id !== pendingEditId || !chunkG7PJSVUS_js.hasTextProperties(el)) {
|
|
8473
8473
|
return el;
|
|
8474
8474
|
}
|
|
8475
8475
|
return {
|
|
8476
8476
|
...el,
|
|
8477
8477
|
text: pendingEditText,
|
|
8478
|
-
textSegments:
|
|
8478
|
+
textSegments: chunkG7PJSVUS_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
|
|
8479
8479
|
};
|
|
8480
8480
|
});
|
|
8481
8481
|
if (updatedElements.some((el, i) => el !== slide.elements[i])) {
|
|
@@ -8488,14 +8488,14 @@ function useSerialize(input) {
|
|
|
8488
8488
|
const pptxGuides = guides.map((g) => ({
|
|
8489
8489
|
id: g.id,
|
|
8490
8490
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
8491
|
-
positionEmu:
|
|
8491
|
+
positionEmu: chunkG7PJSVUS_js.guidePxToEmu(g.position)
|
|
8492
8492
|
}));
|
|
8493
8493
|
return {
|
|
8494
8494
|
...processedSlide,
|
|
8495
8495
|
guides: pptxGuides.length > 0 ? pptxGuides : void 0
|
|
8496
8496
|
};
|
|
8497
8497
|
});
|
|
8498
|
-
const slidesToSave =
|
|
8498
|
+
const slidesToSave = chunkXROVGBFQ_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
|
|
8499
8499
|
const saveOptions = {
|
|
8500
8500
|
headerFooter,
|
|
8501
8501
|
presentationProperties,
|
|
@@ -8664,7 +8664,7 @@ function usePresentationSetup(input) {
|
|
|
8664
8664
|
containerRef,
|
|
8665
8665
|
content,
|
|
8666
8666
|
onSetMode: (nextMode) => {
|
|
8667
|
-
if (mode === "present" && nextMode !== "present" && !
|
|
8667
|
+
if (mode === "present" && nextMode !== "present" && !chunkG7PJSVUS_js.mayLeaveSlideShow()) {
|
|
8668
8668
|
return;
|
|
8669
8669
|
}
|
|
8670
8670
|
if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations && promptKeepInkAnnotations) {
|
|
@@ -8672,7 +8672,7 @@ function usePresentationSetup(input) {
|
|
|
8672
8672
|
setShowKeepAnnotationsDialog(true);
|
|
8673
8673
|
} else {
|
|
8674
8674
|
if (mode === "present" && nextMode !== "present") {
|
|
8675
|
-
|
|
8675
|
+
chunkXROVGBFQ_js.stopAllPersistentAudio();
|
|
8676
8676
|
stopAnimationSound();
|
|
8677
8677
|
}
|
|
8678
8678
|
setMode(nextMode);
|
|
@@ -8726,10 +8726,10 @@ function usePresentationSetup(input) {
|
|
|
8726
8726
|
onToggleInkMarkup: () => annotations.setInkMarkupVisible(!annotations.inkMarkupVisible),
|
|
8727
8727
|
onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
|
|
8728
8728
|
onSaveRehearsalTimings: (timings) => {
|
|
8729
|
-
setSlides((prev) =>
|
|
8729
|
+
setSlides((prev) => chunkG7PJSVUS_js.applyRehearsalTimings(prev, timings));
|
|
8730
8730
|
history.markDirty();
|
|
8731
8731
|
},
|
|
8732
|
-
loopContinuously:
|
|
8732
|
+
loopContinuously: chunkG7PJSVUS_js.shouldLoopContinuously(presentationProperties),
|
|
8733
8733
|
showWithAnimation: presentationProperties.showWithAnimation,
|
|
8734
8734
|
useTimings: presentationProperties.advanceMode !== "manual",
|
|
8735
8735
|
endWithBlackSlide
|
|
@@ -8891,7 +8891,7 @@ function useEditorOperations(input) {
|
|
|
8891
8891
|
const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
|
|
8892
8892
|
react.useEffect(() => {
|
|
8893
8893
|
if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
|
|
8894
|
-
copiedFormatRef.current =
|
|
8894
|
+
copiedFormatRef.current = chunkG7PJSVUS_js.copyFormatFromElement(selectedElement);
|
|
8895
8895
|
} else if (!formatPainterActive) {
|
|
8896
8896
|
copiedFormatRef.current = null;
|
|
8897
8897
|
}
|
|
@@ -8917,12 +8917,12 @@ function useEditorOperations(input) {
|
|
|
8917
8917
|
e.stopPropagation();
|
|
8918
8918
|
const element = elementLookup.get(elementId);
|
|
8919
8919
|
if (element) {
|
|
8920
|
-
const updated =
|
|
8920
|
+
const updated = chunkG7PJSVUS_js.applyFormatToElement(element, copiedFormatRef.current);
|
|
8921
8921
|
const updates = {};
|
|
8922
|
-
if (
|
|
8922
|
+
if (chunkG7PJSVUS_js.hasShapeProperties(updated)) {
|
|
8923
8923
|
updates.shapeStyle = updated.shapeStyle;
|
|
8924
8924
|
}
|
|
8925
|
-
if (
|
|
8925
|
+
if (chunkG7PJSVUS_js.hasTextProperties(updated)) {
|
|
8926
8926
|
updates.textStyle = updated.textStyle;
|
|
8927
8927
|
}
|
|
8928
8928
|
ops.updateElementById(elementId, updates);
|
|
@@ -9069,7 +9069,7 @@ function collectReferencedFontFamilies(slides) {
|
|
|
9069
9069
|
const families = /* @__PURE__ */ new Set();
|
|
9070
9070
|
for (const slide of slides) {
|
|
9071
9071
|
for (const el of slide.elements) {
|
|
9072
|
-
if (
|
|
9072
|
+
if (chunkG7PJSVUS_js.hasTextProperties(el) && el.textSegments) {
|
|
9073
9073
|
for (const seg of el.textSegments) {
|
|
9074
9074
|
if (seg.style.fontFamily) {
|
|
9075
9075
|
families.add(seg.style.fontFamily);
|
|
@@ -9638,7 +9638,7 @@ function useViewerIntegration(input) {
|
|
|
9638
9638
|
return zoom.scale;
|
|
9639
9639
|
},
|
|
9640
9640
|
setZoom(level) {
|
|
9641
|
-
zoom.setScale(Math.min(Math.max(level,
|
|
9641
|
+
zoom.setScale(Math.min(Math.max(level, chunkXROVGBFQ_js.MIN_ZOOM_SCALE), chunkXROVGBFQ_js.MAX_ZOOM_SCALE));
|
|
9642
9642
|
},
|
|
9643
9643
|
zoomIn() {
|
|
9644
9644
|
zoom.handleZoomIn();
|
|
@@ -9853,7 +9853,7 @@ function useReducedMotion() {
|
|
|
9853
9853
|
}
|
|
9854
9854
|
function useViewerOptions() {
|
|
9855
9855
|
const storeRef = react.useRef(null);
|
|
9856
|
-
storeRef.current ??=
|
|
9856
|
+
storeRef.current ??= chunkG7PJSVUS_js.createViewerOptionsStore();
|
|
9857
9857
|
const store = storeRef.current;
|
|
9858
9858
|
const options = react.useSyncExternalStore(
|
|
9859
9859
|
(onStoreChange) => store.subscribe(onStoreChange),
|
|
@@ -9862,9 +9862,9 @@ function useViewerOptions() {
|
|
|
9862
9862
|
);
|
|
9863
9863
|
return { optionsStore: store, options };
|
|
9864
9864
|
}
|
|
9865
|
-
var KNOWN_TAB_IDS = new Set(
|
|
9865
|
+
var KNOWN_TAB_IDS = new Set(chunkG7PJSVUS_js.TOOLBAR_TABS.map((tab) => tab.id));
|
|
9866
9866
|
function computeToolbarVisibility(hiddenActions) {
|
|
9867
|
-
const isHidden = (id) =>
|
|
9867
|
+
const isHidden = (id) => chunkG7PJSVUS_js.isActionHidden(id, hiddenActions);
|
|
9868
9868
|
const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id);
|
|
9869
9869
|
return { isHidden, isTabVisible };
|
|
9870
9870
|
}
|
|
@@ -9949,12 +9949,12 @@ function useYjsDocumentSync({
|
|
|
9949
9949
|
return;
|
|
9950
9950
|
}
|
|
9951
9951
|
try {
|
|
9952
|
-
const handler = new
|
|
9952
|
+
const handler = new chunkG7PJSVUS_js.PptxHandler();
|
|
9953
9953
|
await handler.load(sourceBytes.buffer);
|
|
9954
|
-
const currentSlides =
|
|
9954
|
+
const currentSlides = chunkG7PJSVUS_js.readSlidesFromYDoc(
|
|
9955
9955
|
doc
|
|
9956
9956
|
);
|
|
9957
|
-
const slidesToSave =
|
|
9957
|
+
const slidesToSave = chunkXROVGBFQ_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
|
|
9958
9958
|
const bytes = await handler.save(slidesToSave);
|
|
9959
9959
|
config.onWriteBack(bytes);
|
|
9960
9960
|
} catch {
|
|
@@ -9969,7 +9969,7 @@ function useYjsDocumentSync({
|
|
|
9969
9969
|
if (!doc || !isConnected) {
|
|
9970
9970
|
return;
|
|
9971
9971
|
}
|
|
9972
|
-
const docSlides =
|
|
9972
|
+
const docSlides = chunkG7PJSVUS_js.readSlidesFromYDoc(
|
|
9973
9973
|
doc
|
|
9974
9974
|
);
|
|
9975
9975
|
if (docSlides.length === 0) {
|
|
@@ -9991,11 +9991,11 @@ function useYjsDocumentSync({
|
|
|
9991
9991
|
lastSyncedRef.current = serialized;
|
|
9992
9992
|
void (async () => {
|
|
9993
9993
|
const factories = await getFactories();
|
|
9994
|
-
|
|
9994
|
+
chunkG7PJSVUS_js.reconcileSlidesInYDoc(
|
|
9995
9995
|
slides,
|
|
9996
9996
|
doc,
|
|
9997
9997
|
factories,
|
|
9998
|
-
|
|
9998
|
+
chunkG7PJSVUS_js.LOCAL_SYNC_ORIGIN
|
|
9999
9999
|
);
|
|
10000
10000
|
scheduleWriteBack();
|
|
10001
10001
|
})();
|
|
@@ -10009,10 +10009,10 @@ function useYjsDocumentSync({
|
|
|
10009
10009
|
return;
|
|
10010
10010
|
}
|
|
10011
10011
|
const handleChange = (_events, transaction) => {
|
|
10012
|
-
if (transaction?.origin ===
|
|
10012
|
+
if (transaction?.origin === chunkG7PJSVUS_js.LOCAL_SYNC_ORIGIN) {
|
|
10013
10013
|
return;
|
|
10014
10014
|
}
|
|
10015
|
-
const remoteSlides =
|
|
10015
|
+
const remoteSlides = chunkG7PJSVUS_js.readSlidesFromYDoc(
|
|
10016
10016
|
doc
|
|
10017
10017
|
);
|
|
10018
10018
|
if (remoteSlides.length === 0) {
|
|
@@ -10028,7 +10028,7 @@ function useYjsDocumentSync({
|
|
|
10028
10028
|
isApplyingRemoteRef.current = false;
|
|
10029
10029
|
scheduleWriteBack();
|
|
10030
10030
|
};
|
|
10031
|
-
const unobserve =
|
|
10031
|
+
const unobserve = chunkG7PJSVUS_js.observeYDocSlides(
|
|
10032
10032
|
doc,
|
|
10033
10033
|
handleChange
|
|
10034
10034
|
);
|
|
@@ -10066,7 +10066,7 @@ function useBroadcastFollower({
|
|
|
10066
10066
|
if (!broadcaster) {
|
|
10067
10067
|
return;
|
|
10068
10068
|
}
|
|
10069
|
-
if (!
|
|
10069
|
+
if (!chunkG7PJSVUS_js.shouldAutoFollowBroadcaster({
|
|
10070
10070
|
localRole: collab.config.role,
|
|
10071
10071
|
broadcasterRole: broadcaster.role
|
|
10072
10072
|
})) {
|
|
@@ -10226,10 +10226,10 @@ function useTouchGestures(input) {
|
|
|
10226
10226
|
if (!el || !enabled) {
|
|
10227
10227
|
return;
|
|
10228
10228
|
}
|
|
10229
|
-
const recognizer =
|
|
10229
|
+
const recognizer = chunkG7PJSVUS_js.createTouchGestureRecognizer({
|
|
10230
10230
|
getScale: () => scaleRef.current,
|
|
10231
|
-
minScale:
|
|
10232
|
-
maxScale:
|
|
10231
|
+
minScale: chunkXROVGBFQ_js.MIN_ZOOM_SCALE,
|
|
10232
|
+
maxScale: chunkXROVGBFQ_js.MAX_ZOOM_SCALE,
|
|
10233
10233
|
callbacks: {
|
|
10234
10234
|
onPinchZoom: (newScale) => callbacksRef.current.onPinchZoom?.(newScale),
|
|
10235
10235
|
onSwipe: (direction) => callbacksRef.current.onSwipe?.(direction),
|
|
@@ -10269,7 +10269,7 @@ function scrollFocusedIntoView(keyboardInset) {
|
|
|
10269
10269
|
return;
|
|
10270
10270
|
}
|
|
10271
10271
|
const rect = active.getBoundingClientRect();
|
|
10272
|
-
const delta =
|
|
10272
|
+
const delta = chunkG7PJSVUS_js.computeScrollDelta(
|
|
10273
10273
|
{ top: rect.top, bottom: rect.bottom },
|
|
10274
10274
|
window.innerHeight,
|
|
10275
10275
|
keyboardInset
|
|
@@ -10289,8 +10289,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10289
10289
|
return;
|
|
10290
10290
|
}
|
|
10291
10291
|
const update = () => {
|
|
10292
|
-
const metrics =
|
|
10293
|
-
const inset = metrics ?
|
|
10292
|
+
const metrics = chunkG7PJSVUS_js.readViewportMetrics(window);
|
|
10293
|
+
const inset = metrics ? chunkG7PJSVUS_js.computeKeyboardInset(metrics) : 0;
|
|
10294
10294
|
setKeyboardInset(inset);
|
|
10295
10295
|
if (inset > 0) {
|
|
10296
10296
|
window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
|
|
@@ -10301,8 +10301,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10301
10301
|
vv.addEventListener("scroll", update);
|
|
10302
10302
|
const onFocusIn = () => {
|
|
10303
10303
|
window.requestAnimationFrame(() => {
|
|
10304
|
-
const metrics =
|
|
10305
|
-
const inset = metrics ?
|
|
10304
|
+
const metrics = chunkG7PJSVUS_js.readViewportMetrics(window);
|
|
10305
|
+
const inset = metrics ? chunkG7PJSVUS_js.computeKeyboardInset(metrics) : 0;
|
|
10306
10306
|
if (inset > 0) {
|
|
10307
10307
|
scrollFocusedIntoView(inset);
|
|
10308
10308
|
}
|
|
@@ -10315,7 +10315,7 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10315
10315
|
document.removeEventListener("focusin", onFocusIn);
|
|
10316
10316
|
};
|
|
10317
10317
|
}, [enabled]);
|
|
10318
|
-
return { keyboardInset, isKeyboardOpen:
|
|
10318
|
+
return { keyboardInset, isKeyboardOpen: chunkG7PJSVUS_js.isKeyboardOpen(keyboardInset) };
|
|
10319
10319
|
}
|
|
10320
10320
|
|
|
10321
10321
|
// src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
|
|
@@ -10370,13 +10370,13 @@ function buildCanvasProps(input) {
|
|
|
10370
10370
|
if (mode === "present") {
|
|
10371
10371
|
presentation.handlePresentationAction(action);
|
|
10372
10372
|
} else if (action.url) {
|
|
10373
|
-
|
|
10373
|
+
chunkG7PJSVUS_js.safeOpenUrl(action.url);
|
|
10374
10374
|
}
|
|
10375
10375
|
};
|
|
10376
10376
|
const handleHyperlinkClick = (url) => {
|
|
10377
|
-
if (
|
|
10377
|
+
if (chunkG7PJSVUS_js.isPpactionUrl(url)) {
|
|
10378
10378
|
if (mode === "present") {
|
|
10379
|
-
const parsed =
|
|
10379
|
+
const parsed = chunkG7PJSVUS_js.parsePpactionUrl(url);
|
|
10380
10380
|
if (parsed) {
|
|
10381
10381
|
presentation.handlePresentationAction({
|
|
10382
10382
|
action: parsed.action,
|
|
@@ -10386,7 +10386,7 @@ function buildCanvasProps(input) {
|
|
|
10386
10386
|
}
|
|
10387
10387
|
return;
|
|
10388
10388
|
}
|
|
10389
|
-
|
|
10389
|
+
chunkG7PJSVUS_js.safeOpenUrl(url);
|
|
10390
10390
|
};
|
|
10391
10391
|
return {
|
|
10392
10392
|
activeSlide: effectiveSlide,
|
|
@@ -10706,7 +10706,7 @@ function buildToolbarProps(input) {
|
|
|
10706
10706
|
onOpenFile,
|
|
10707
10707
|
onOpenRecentFile,
|
|
10708
10708
|
onCreatePresentation: (templateId) => {
|
|
10709
|
-
s.setSlides(
|
|
10709
|
+
s.setSlides(chunkG7PJSVUS_js.createBackstagePresentation(templateId));
|
|
10710
10710
|
s.setActiveSlideIndex(0);
|
|
10711
10711
|
s.setSelectedElementId(null);
|
|
10712
10712
|
s.setSelectedElementIds([]);
|
|
@@ -10761,7 +10761,7 @@ function buildToolbarProps(input) {
|
|
|
10761
10761
|
isCommentsPanelOpen: s.isInspectorPaneOpen,
|
|
10762
10762
|
slideCommentCount: activeSlide?.comments?.length ?? 0,
|
|
10763
10763
|
formatPainterActive: s.formatPainterActive,
|
|
10764
|
-
canActivateFormatPainter:
|
|
10764
|
+
canActivateFormatPainter: chunkG7PJSVUS_js.hasCopyableFormat(selectedElement),
|
|
10765
10765
|
onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
|
|
10766
10766
|
isSelectionPaneOpen: s.isSelectionPaneOpen,
|
|
10767
10767
|
onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
|
|
@@ -11024,7 +11024,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
11024
11024
|
}, [incomingContent]);
|
|
11025
11025
|
const onOpenFile = react.useCallback(() => {
|
|
11026
11026
|
void (async () => {
|
|
11027
|
-
const picked = await
|
|
11027
|
+
const picked = await chunkG7PJSVUS_js.openPptxFile();
|
|
11028
11028
|
if (picked) {
|
|
11029
11029
|
setContent(picked.buffer);
|
|
11030
11030
|
}
|
|
@@ -11032,7 +11032,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
11032
11032
|
}, []);
|
|
11033
11033
|
const onOpenRecentFile = react.useCallback((key) => {
|
|
11034
11034
|
void (async () => {
|
|
11035
|
-
const bytes = await
|
|
11035
|
+
const bytes = await chunkG7PJSVUS_js.readBackstageRecentFile(key);
|
|
11036
11036
|
if (bytes) {
|
|
11037
11037
|
setContent(bytes);
|
|
11038
11038
|
}
|