pptx-react-viewer 2.7.0 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/{AiChatPanel-G6DKXSM3.js → AiChatPanel-GTCK35EI.js} +22 -22
- package/dist/AiChatPanel-GTCK35EI.js.br +0 -0
- package/dist/AiChatPanel-GTCK35EI.js.gz +0 -0
- package/dist/{AiChatPanel-J5IGSCYA.mjs → AiChatPanel-UXPHPUQV.mjs} +3 -3
- package/dist/AiChatPanel-UXPHPUQV.mjs.br +0 -0
- package/dist/AiChatPanel-UXPHPUQV.mjs.gz +0 -0
- package/dist/{Model3DScene-ID6CQKEJ.mjs → Model3DScene-HDUHTKPF.mjs} +1 -1
- package/dist/Model3DScene-HDUHTKPF.mjs.br +0 -0
- package/dist/Model3DScene-HDUHTKPF.mjs.gz +0 -0
- package/dist/{Model3DScene-S7LKZ6IA.js → Model3DScene-USPBP3KE.js} +2 -2
- package/dist/Model3DScene-USPBP3KE.js.br +0 -0
- package/dist/Model3DScene-USPBP3KE.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-V5H6MXYW.mjs → SurfaceChart3DScene-7SLM73XC.mjs} +1 -1
- package/dist/{SurfaceChart3DScene-V5H6MXYW.mjs.br → SurfaceChart3DScene-7SLM73XC.mjs.br} +0 -0
- package/dist/SurfaceChart3DScene-7SLM73XC.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-XSJXJM6H.js → SurfaceChart3DScene-NZ3K5CC6.js} +2 -2
- package/dist/SurfaceChart3DScene-NZ3K5CC6.js.br +0 -0
- package/dist/SurfaceChart3DScene-NZ3K5CC6.js.gz +0 -0
- package/dist/{chunk-IGKLB7NQ.mjs → chunk-AHPZGUL7.mjs} +2 -2
- package/dist/chunk-AHPZGUL7.mjs.br +0 -0
- package/dist/chunk-AHPZGUL7.mjs.gz +0 -0
- package/dist/{chunk-4KMTZLNS.js → chunk-KGXDCDA5.js} +320 -327
- package/dist/chunk-KGXDCDA5.js.br +0 -0
- package/dist/chunk-KGXDCDA5.js.gz +0 -0
- package/dist/{chunk-2LOBDOTK.js → chunk-MZJMOEEX.js} +155 -66
- package/dist/chunk-MZJMOEEX.js.br +0 -0
- package/dist/chunk-MZJMOEEX.js.gz +0 -0
- package/dist/{chunk-YUHEJWUN.mjs → chunk-OIH753PJ.mjs} +7 -14
- package/dist/chunk-OIH753PJ.mjs.br +0 -0
- package/dist/chunk-OIH753PJ.mjs.gz +0 -0
- package/dist/{chunk-SOLHDKNK.mjs → chunk-PVCUYPU7.mjs} +1 -1
- package/dist/chunk-PVCUYPU7.mjs.br +0 -0
- package/dist/chunk-PVCUYPU7.mjs.gz +0 -0
- package/dist/{chunk-B4XJTZR4.js → chunk-SMW4QYGK.js} +236 -236
- package/dist/chunk-SMW4QYGK.js.br +0 -0
- package/dist/chunk-SMW4QYGK.js.gz +0 -0
- package/dist/{chunk-GLQFRVAN.js → chunk-SOBKYMMR.js} +988 -961
- package/dist/chunk-SOBKYMMR.js.br +0 -0
- package/dist/chunk-SOBKYMMR.js.gz +0 -0
- package/dist/{chunk-Y4EB65WB.mjs → chunk-TJ5QMUUJ.mjs} +152 -125
- package/dist/chunk-TJ5QMUUJ.mjs.br +0 -0
- package/dist/chunk-TJ5QMUUJ.mjs.gz +0 -0
- package/dist/{chunk-6C4UY7GX.js → chunk-VFLBLJ4G.js} +3 -3
- package/dist/chunk-VFLBLJ4G.js.br +0 -0
- package/dist/chunk-VFLBLJ4G.js.gz +0 -0
- package/dist/{chunk-WH46JCNF.mjs → chunk-VH2QF5CT.mjs} +154 -67
- package/dist/chunk-VH2QF5CT.mjs.br +0 -0
- package/dist/chunk-VH2QF5CT.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.d.ts.map +1 -1
- package/dist/internals.js +78 -78
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +3 -3
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/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-G6DKXSM3.js.br +0 -0
- package/dist/AiChatPanel-G6DKXSM3.js.gz +0 -0
- package/dist/AiChatPanel-J5IGSCYA.mjs.br +0 -0
- package/dist/AiChatPanel-J5IGSCYA.mjs.gz +0 -0
- package/dist/Model3DScene-ID6CQKEJ.mjs.br +0 -0
- package/dist/Model3DScene-ID6CQKEJ.mjs.gz +0 -0
- package/dist/Model3DScene-S7LKZ6IA.js.br +0 -0
- package/dist/Model3DScene-S7LKZ6IA.js.gz +0 -0
- package/dist/SurfaceChart3DScene-V5H6MXYW.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-XSJXJM6H.js.br +0 -0
- package/dist/SurfaceChart3DScene-XSJXJM6H.js.gz +0 -0
- package/dist/chunk-2LOBDOTK.js.br +0 -0
- package/dist/chunk-2LOBDOTK.js.gz +0 -0
- package/dist/chunk-4KMTZLNS.js.br +0 -0
- package/dist/chunk-4KMTZLNS.js.gz +0 -0
- package/dist/chunk-6C4UY7GX.js.br +0 -0
- package/dist/chunk-6C4UY7GX.js.gz +0 -0
- package/dist/chunk-B4XJTZR4.js.br +0 -0
- package/dist/chunk-B4XJTZR4.js.gz +0 -0
- package/dist/chunk-GLQFRVAN.js.br +0 -0
- package/dist/chunk-GLQFRVAN.js.gz +0 -0
- package/dist/chunk-IGKLB7NQ.mjs.br +0 -0
- package/dist/chunk-IGKLB7NQ.mjs.gz +0 -0
- package/dist/chunk-SOLHDKNK.mjs.br +0 -0
- package/dist/chunk-SOLHDKNK.mjs.gz +0 -0
- package/dist/chunk-WH46JCNF.mjs.br +0 -0
- package/dist/chunk-WH46JCNF.mjs.gz +0 -0
- package/dist/chunk-Y4EB65WB.mjs.br +0 -0
- package/dist/chunk-Y4EB65WB.mjs.gz +0 -0
- package/dist/chunk-YUHEJWUN.mjs.br +0 -0
- package/dist/chunk-YUHEJWUN.mjs.gz +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkSMW4QYGK_js = require('./chunk-SMW4QYGK.js');
|
|
4
4
|
var chunk25VSL2BB_js = require('./chunk-25VSL2BB.js');
|
|
5
|
-
var
|
|
5
|
+
var chunkMZJMOEEX_js = require('./chunk-MZJMOEEX.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 = chunkMZJMOEEX_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 = chunkMZJMOEEX_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 >= chunkMZJMOEEX_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
|
+
}, chunkMZJMOEEX_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 = chunkMZJMOEEX_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 = chunkMZJMOEEX_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
|
+
chunkMZJMOEEX_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 = chunkMZJMOEEX_js.validateRoomId(config.roomId);
|
|
243
243
|
const provider = new WebrtcProvider(roomId, yDoc, opts);
|
|
244
|
-
departureRef.current =
|
|
244
|
+
departureRef.current = chunkMZJMOEEX_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 = chunkMZJMOEEX_js.validateRoomId(config.roomId);
|
|
287
|
+
const transport = config.transport ?? chunkMZJMOEEX_js.resolveTransportForServerUrl(config.serverUrl);
|
|
288
288
|
if (transport === "webrtc") {
|
|
289
289
|
await initWebrtc();
|
|
290
290
|
return;
|
|
291
291
|
}
|
|
292
|
-
if (
|
|
292
|
+
if (chunkMZJMOEEX_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 = chunkMZJMOEEX_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
|
+
chunkMZJMOEEX_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
|
+
}, chunkMZJMOEEX_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
|
+
chunkMZJMOEEX_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 = chunkMZJMOEEX_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 = chunkMZJMOEEX_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(chunkMZJMOEEX_js.cloneSlide),
|
|
521
|
+
templateElementsBySlideId: chunkMZJMOEEX_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(chunkMZJMOEEX_js.cloneSlide));
|
|
535
535
|
setTemplateElementsBySlideId(
|
|
536
|
-
|
|
536
|
+
chunkMZJMOEEX_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 = chunkSMW4QYGK_js.cloneHistorySnapshot(previousSnapshot);
|
|
571
|
+
lastHistorySnapshotRef.current = chunkSMW4QYGK_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 = chunkSMW4QYGK_js.cloneHistorySnapshot(nextSnapshot);
|
|
593
|
+
lastHistorySnapshotRef.current = chunkSMW4QYGK_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 = chunkSMW4QYGK_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 = chunkSMW4QYGK_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(chunkSMW4QYGK_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 = chunkSMW4QYGK_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, chunkSMW4QYGK_js.MIN_ZOOM_SCALE), chunkSMW4QYGK_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, chunkSMW4QYGK_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, chunkSMW4QYGK_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, chunkSMW4QYGK_js.MIN_ELEMENT_SIZE));
|
|
790
|
+
maxY = Math.max(maxY, element.y + Math.max(element.height, chunkSMW4QYGK_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, chunkSMW4QYGK_js.MIN_ELEMENT_SIZE);
|
|
797
|
+
const boundsHeight = Math.max(selectionBounds.maxY - selectionBounds.minY, chunkSMW4QYGK_js.MIN_ELEMENT_SIZE);
|
|
798
798
|
const availableWidth = Math.max(
|
|
799
|
-
effectiveEditorDimensions.width -
|
|
800
|
-
|
|
799
|
+
effectiveEditorDimensions.width - chunkSMW4QYGK_js.ZOOM_TO_SELECTION_PADDING,
|
|
800
|
+
chunkSMW4QYGK_js.MIN_ELEMENT_SIZE
|
|
801
801
|
);
|
|
802
802
|
const availableHeight = Math.max(
|
|
803
|
-
effectiveEditorDimensions.height -
|
|
804
|
-
|
|
803
|
+
effectiveEditorDimensions.height - chunkSMW4QYGK_js.ZOOM_TO_SELECTION_PADDING,
|
|
804
|
+
chunkSMW4QYGK_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, chunkSMW4QYGK_js.MIN_ZOOM_SCALE),
|
|
813
|
+
chunkSMW4QYGK_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, chunkSMW4QYGK_js.MIN_ZOOM_SCALE), chunkSMW4QYGK_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
|
+
chunkSMW4QYGK_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
|
+
chunkMZJMOEEX_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 = chunkMZJMOEEX_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 = chunkMZJMOEEX_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 = chunkMZJMOEEX_js.PRESENTATION_CHANNEL_NAME;
|
|
1278
|
+
var AUDIENCE_HASH = chunkMZJMOEEX_js.PRESENTATION_HASH;
|
|
1279
|
+
var PRESENTER_MSG_ORIGIN = chunkMZJMOEEX_js.PRESENTATION_MESSAGE_ORIGIN;
|
|
1280
|
+
var AUDIENCE_NONCE_KEY = chunkMZJMOEEX_js.PRESENTATION_NONCE_KEY;
|
|
1281
1281
|
function generateSessionId() {
|
|
1282
|
-
return
|
|
1282
|
+
return chunkMZJMOEEX_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 ? chunkMZJMOEEX_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 chunkMZJMOEEX_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 = chunkMZJMOEEX_js.buildPresentationAudienceUrl(window.location.href, sessionId);
|
|
1401
|
+
void chunkMZJMOEEX_js.resolveAudienceScreenPlacement(window).then((placement) => {
|
|
1402
1402
|
if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
|
|
1403
|
-
|
|
1403
|
+
chunkMZJMOEEX_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 chunkMZJMOEEX_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 (chunkMZJMOEEX_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 chunkMZJMOEEX_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 (!chunkMZJMOEEX_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 chunkMZJMOEEX_js.clearAudienceContent(expectedSessionId);
|
|
1567
1567
|
}
|
|
1568
|
-
if (
|
|
1568
|
+
if (chunkMZJMOEEX_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: chunkMZJMOEEX_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(chunkMZJMOEEX_js.createPresentationKeyBuffer());
|
|
1608
1608
|
react.useEffect(() => {
|
|
1609
|
-
if (mode !== "present" || !
|
|
1610
|
-
keyBufferRef.current =
|
|
1609
|
+
if (mode !== "present" || !chunkMZJMOEEX_js.acceptsPresentationInput()) {
|
|
1610
|
+
keyBufferRef.current = chunkMZJMOEEX_js.createPresentationKeyBuffer();
|
|
1611
1611
|
return;
|
|
1612
1612
|
}
|
|
1613
1613
|
const handleKeyDown = (event) => {
|
|
1614
|
-
const mapped =
|
|
1614
|
+
const mapped = chunkMZJMOEEX_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 (chunkMZJMOEEX_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 ? chunkMZJMOEEX_js.resolveTransitionDurationMs(transition) : 0;
|
|
1833
1833
|
deps.clearPresentationTimers();
|
|
1834
1834
|
deps.setPresentationSlideIndex(nextSlideIndex);
|
|
1835
1835
|
deps.onSetActiveSlideIndex(nextSlideIndex);
|
|
@@ -1888,20 +1888,13 @@ function useSlideNavigation(input) {
|
|
|
1888
1888
|
});
|
|
1889
1889
|
const scheduleAutoAdvanceForSlide = react.useCallback(
|
|
1890
1890
|
(slideIndex) => {
|
|
1891
|
-
|
|
1891
|
+
const delayMs = chunkMZJMOEEX_js.resolveAutoAdvanceDelayMs(slides[slideIndex], { useTimings });
|
|
1892
|
+
if (delayMs === void 0) {
|
|
1892
1893
|
return;
|
|
1893
1894
|
}
|
|
1894
|
-
const
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
return;
|
|
1898
|
-
}
|
|
1899
|
-
const timer = window.setTimeout(
|
|
1900
|
-
() => {
|
|
1901
|
-
movePresentationSlideRef.current(1);
|
|
1902
|
-
},
|
|
1903
|
-
Math.max(0, advanceAfterMs)
|
|
1904
|
-
);
|
|
1895
|
+
const timer = window.setTimeout(() => {
|
|
1896
|
+
movePresentationSlideRef.current(1);
|
|
1897
|
+
}, delayMs);
|
|
1905
1898
|
presentationTimersRef.current.push(timer);
|
|
1906
1899
|
},
|
|
1907
1900
|
[slides, presentationTimersRef, useTimings]
|
|
@@ -2085,17 +2078,17 @@ function useZoomNavigation(input) {
|
|
|
2085
2078
|
};
|
|
2086
2079
|
}
|
|
2087
2080
|
function usePresenterConsole(slideIndex) {
|
|
2088
|
-
const timerRef = react.useRef(
|
|
2089
|
-
const [snapshot, setSnapshot] = react.useState(() =>
|
|
2081
|
+
const timerRef = react.useRef(chunkMZJMOEEX_js.createPresenterTimer());
|
|
2082
|
+
const [snapshot, setSnapshot] = react.useState(() => chunkMZJMOEEX_js.createInitialPresentationSnapshot(slideIndex));
|
|
2090
2083
|
const patch = react.useCallback((value) => {
|
|
2091
|
-
setSnapshot((current) =>
|
|
2084
|
+
setSnapshot((current) => chunkMZJMOEEX_js.mergePresentationSnapshot(current, value));
|
|
2092
2085
|
}, []);
|
|
2093
2086
|
react.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
|
|
2094
2087
|
react.useEffect(() => {
|
|
2095
2088
|
const timer = window.setInterval(() => {
|
|
2096
2089
|
patch({
|
|
2097
2090
|
paused: timerRef.current.paused,
|
|
2098
|
-
elapsedMs:
|
|
2091
|
+
elapsedMs: chunkMZJMOEEX_js.presenterElapsed(timerRef.current)
|
|
2099
2092
|
});
|
|
2100
2093
|
}, 1e3);
|
|
2101
2094
|
return () => window.clearInterval(timer);
|
|
@@ -2105,19 +2098,19 @@ function usePresenterConsole(slideIndex) {
|
|
|
2105
2098
|
applyAudienceSnapshot: setSnapshot,
|
|
2106
2099
|
setBlackout: (blackout) => patch({ blackout }),
|
|
2107
2100
|
toggleTimer: () => {
|
|
2108
|
-
timerRef.current =
|
|
2101
|
+
timerRef.current = chunkMZJMOEEX_js.togglePresenterTimer(timerRef.current);
|
|
2109
2102
|
patch({
|
|
2110
2103
|
paused: timerRef.current.paused,
|
|
2111
|
-
elapsedMs:
|
|
2104
|
+
elapsedMs: chunkMZJMOEEX_js.presenterElapsed(timerRef.current)
|
|
2112
2105
|
});
|
|
2113
2106
|
},
|
|
2114
2107
|
resetTimer: () => {
|
|
2115
|
-
timerRef.current =
|
|
2108
|
+
timerRef.current = chunkMZJMOEEX_js.resetPresenterTimer();
|
|
2116
2109
|
patch({ paused: false, elapsedMs: 0 });
|
|
2117
2110
|
},
|
|
2118
2111
|
stepZoom: (direction) => setSnapshot(
|
|
2119
|
-
(current) =>
|
|
2120
|
-
zoom:
|
|
2112
|
+
(current) => chunkMZJMOEEX_js.mergePresentationSnapshot(current, {
|
|
2113
|
+
zoom: chunkMZJMOEEX_js.stepPresenterZoom(
|
|
2121
2114
|
current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
|
|
2122
2115
|
direction
|
|
2123
2116
|
)
|
|
@@ -2238,7 +2231,7 @@ function usePresentationMode(input) {
|
|
|
2238
2231
|
});
|
|
2239
2232
|
const movePresentationSlide = react.useCallback(
|
|
2240
2233
|
(direction, trigger = "explicit") => {
|
|
2241
|
-
if (!
|
|
2234
|
+
if (!chunkMZJMOEEX_js.acceptsPresentationInput()) {
|
|
2242
2235
|
return;
|
|
2243
2236
|
}
|
|
2244
2237
|
if (endOfShowVisible) {
|
|
@@ -2440,11 +2433,11 @@ function usePresentationMode(input) {
|
|
|
2440
2433
|
if (!transitionOverlay || transitionOverlay.transition.type !== "morph") {
|
|
2441
2434
|
return void 0;
|
|
2442
2435
|
}
|
|
2443
|
-
return
|
|
2436
|
+
return chunkMZJMOEEX_js.buildMorphTransitionPlan(
|
|
2444
2437
|
slides[transitionOverlay.outgoingSlideIndex],
|
|
2445
2438
|
slides[transitionOverlay.incomingSlideIndex],
|
|
2446
2439
|
transitionOverlay.durationMs,
|
|
2447
|
-
|
|
2440
|
+
chunkMZJMOEEX_js.morphOptionToMode(transitionOverlay.transition.morphOption)
|
|
2448
2441
|
);
|
|
2449
2442
|
}, [transitionOverlay, slides]);
|
|
2450
2443
|
const morphedElementStates = react.useMemo(() => {
|
|
@@ -2750,7 +2743,7 @@ function findInSlides(slides, findQuery, findMatchCase) {
|
|
|
2750
2743
|
const normalised = findMatchCase ? findQuery : findQuery.toLowerCase();
|
|
2751
2744
|
slides.forEach((slide, slideIndex) => {
|
|
2752
2745
|
for (const element of slide.elements || []) {
|
|
2753
|
-
if (!
|
|
2746
|
+
if (!chunkMZJMOEEX_js.hasTextProperties(element)) {
|
|
2754
2747
|
continue;
|
|
2755
2748
|
}
|
|
2756
2749
|
const segments = element.textSegments ?? [];
|
|
@@ -2801,7 +2794,7 @@ function applyFindReplacements(slides, toReplace, replaceQuery) {
|
|
|
2801
2794
|
continue;
|
|
2802
2795
|
}
|
|
2803
2796
|
const element = slide.elements[elIdx];
|
|
2804
|
-
if (!
|
|
2797
|
+
if (!chunkMZJMOEEX_js.hasTextProperties(element)) {
|
|
2805
2798
|
continue;
|
|
2806
2799
|
}
|
|
2807
2800
|
const segments = [...element.textSegments ?? []];
|
|
@@ -3399,7 +3392,7 @@ function useViewerCoreState(_input) {
|
|
|
3399
3392
|
const shapeAdjustmentDragStateRef = react.useRef(null);
|
|
3400
3393
|
const marqueeStateRef = react.useRef(null);
|
|
3401
3394
|
const isDrawingRef = react.useRef(false);
|
|
3402
|
-
const livePatcher = react.useMemo(() =>
|
|
3395
|
+
const livePatcher = react.useMemo(() => chunkMZJMOEEX_js.createCollaborationLivePatcher(), []);
|
|
3403
3396
|
react.useEffect(() => () => livePatcher.dispose(), [livePatcher]);
|
|
3404
3397
|
const slidesRef = react.useRef([]);
|
|
3405
3398
|
const [mode, setMode] = react.useState("edit");
|
|
@@ -3408,8 +3401,8 @@ function useViewerCoreState(_input) {
|
|
|
3408
3401
|
const [slides, setSlides] = react.useState([]);
|
|
3409
3402
|
const [templateElementsBySlideId, setTemplateElementsBySlideId] = react.useState({});
|
|
3410
3403
|
const [canvasSize, setCanvasSize] = react.useState({
|
|
3411
|
-
width:
|
|
3412
|
-
height:
|
|
3404
|
+
width: chunkSMW4QYGK_js.DEFAULT_CANVAS_WIDTH,
|
|
3405
|
+
height: chunkSMW4QYGK_js.DEFAULT_CANVAS_HEIGHT
|
|
3413
3406
|
});
|
|
3414
3407
|
const [activeSlideIndex, setActiveSlideIndex] = react.useState(0);
|
|
3415
3408
|
const [selectedElementId, setSelectedElementId] = react.useState(null);
|
|
@@ -3429,7 +3422,7 @@ function useViewerCoreState(_input) {
|
|
|
3429
3422
|
const resolved = typeof value === "function" ? value(inlineEditingTextRef.current) : value;
|
|
3430
3423
|
inlineEditingTextRef.current = resolved;
|
|
3431
3424
|
setInlineEditingTextBase(value);
|
|
3432
|
-
|
|
3425
|
+
chunkMZJMOEEX_js.publishLiveInlineText(
|
|
3433
3426
|
livePatcher,
|
|
3434
3427
|
slidesRef.current[activeSlideIndexRef.current],
|
|
3435
3428
|
inlineEditingElementIdRef.current,
|
|
@@ -3754,7 +3747,7 @@ function useLoadContent({
|
|
|
3754
3747
|
);
|
|
3755
3748
|
}
|
|
3756
3749
|
const previousHandler = handlerRef.current;
|
|
3757
|
-
const handler = new
|
|
3750
|
+
const handler = new chunkMZJMOEEX_js.PptxHandler();
|
|
3758
3751
|
const parsed = await handler.load(buffer);
|
|
3759
3752
|
if (cancelled || token !== renderTokenRef.current) {
|
|
3760
3753
|
handler.dispose();
|
|
@@ -3766,7 +3759,7 @@ function useLoadContent({
|
|
|
3766
3759
|
handlerRef.current = null;
|
|
3767
3760
|
const mediaElements = [];
|
|
3768
3761
|
for (const slide of parsed.slides) {
|
|
3769
|
-
|
|
3762
|
+
chunkMZJMOEEX_js.collectMediaElements(slide.elements, mediaElements);
|
|
3770
3763
|
}
|
|
3771
3764
|
for (const url of mediaDataUrls.values()) {
|
|
3772
3765
|
if (url.startsWith("blob:")) {
|
|
@@ -3807,7 +3800,7 @@ function useLoadContent({
|
|
|
3807
3800
|
}
|
|
3808
3801
|
})
|
|
3809
3802
|
);
|
|
3810
|
-
const { paths: imagePaths, refs: imageRefs } =
|
|
3803
|
+
const { paths: imagePaths, refs: imageRefs } = chunkMZJMOEEX_js.collectImagePaths(parsed.slides);
|
|
3811
3804
|
let nextSlides = parsed.slides;
|
|
3812
3805
|
if (imagePaths.size > 0) {
|
|
3813
3806
|
const resolvedMap = /* @__PURE__ */ new Map();
|
|
@@ -3862,12 +3855,12 @@ function useLoadContent({
|
|
|
3862
3855
|
}
|
|
3863
3856
|
}
|
|
3864
3857
|
handlerRef.current = handler;
|
|
3865
|
-
const partition =
|
|
3858
|
+
const partition = chunkSMW4QYGK_js.partitionTemplateElements(nextSlides);
|
|
3866
3859
|
setSlides(partition.slides);
|
|
3867
3860
|
setTemplateElementsBySlideId(partition.templateElementsBySlideId);
|
|
3868
3861
|
setCanvasSize({
|
|
3869
|
-
width: parsed.width ??
|
|
3870
|
-
height: parsed.height ??
|
|
3862
|
+
width: parsed.width ?? chunkSMW4QYGK_js.DEFAULT_CANVAS_WIDTH,
|
|
3863
|
+
height: parsed.height ?? chunkSMW4QYGK_js.DEFAULT_CANVAS_HEIGHT
|
|
3871
3864
|
});
|
|
3872
3865
|
setHeaderFooter(parsed.headerFooter ?? {});
|
|
3873
3866
|
setLayoutOptions(parsed.layoutOptions ?? []);
|
|
@@ -3896,7 +3889,7 @@ function useLoadContent({
|
|
|
3896
3889
|
setHasMacros(parsed.hasMacros === true);
|
|
3897
3890
|
setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
|
|
3898
3891
|
setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
|
|
3899
|
-
setGuides(
|
|
3892
|
+
setGuides(chunkMZJMOEEX_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
|
|
3900
3893
|
setActiveSlideIndex(0);
|
|
3901
3894
|
clearSelection();
|
|
3902
3895
|
setIsDirty(false);
|
|
@@ -3904,7 +3897,7 @@ function useLoadContent({
|
|
|
3904
3897
|
onContentApplied?.();
|
|
3905
3898
|
} catch (err) {
|
|
3906
3899
|
if (!cancelled && token === renderTokenRef.current) {
|
|
3907
|
-
if (err instanceof
|
|
3900
|
+
if (err instanceof chunkMZJMOEEX_js.EncryptedFileError) {
|
|
3908
3901
|
setIsEncrypted(true);
|
|
3909
3902
|
} else {
|
|
3910
3903
|
setError(err instanceof Error ? err.message : String(err));
|
|
@@ -3981,7 +3974,7 @@ function useAutosave(input) {
|
|
|
3981
3974
|
isSavingRef.current = false;
|
|
3982
3975
|
return;
|
|
3983
3976
|
}
|
|
3984
|
-
await
|
|
3977
|
+
await chunkMZJMOEEX_js.saveAutosaveSnapshot(filePathRef.current, data);
|
|
3985
3978
|
setAutosaveStatus({ state: "saved", timestamp: Date.now() });
|
|
3986
3979
|
} catch (err) {
|
|
3987
3980
|
setAutosaveStatus({
|
|
@@ -4046,7 +4039,7 @@ function useElementOperations(input) {
|
|
|
4046
4039
|
}, [applySelection, setInlineEditingElementId, setContextMenuState]);
|
|
4047
4040
|
const updateElementById = react.useCallback(
|
|
4048
4041
|
(elementId, updates) => {
|
|
4049
|
-
if (
|
|
4042
|
+
if (chunkMZJMOEEX_js.isTemplateElementId(elementId)) {
|
|
4050
4043
|
const slideId = activeSlide?.id;
|
|
4051
4044
|
if (slideId) {
|
|
4052
4045
|
setTemplateElementsBySlideId((prev) => ({
|
|
@@ -4086,7 +4079,7 @@ function useElementOperations(input) {
|
|
|
4086
4079
|
);
|
|
4087
4080
|
const updateSelectedShapeStyle = react.useCallback(
|
|
4088
4081
|
(updates) => {
|
|
4089
|
-
if (!selectedElement || !
|
|
4082
|
+
if (!selectedElement || !chunkMZJMOEEX_js.hasShapeProperties(selectedElement)) {
|
|
4090
4083
|
return;
|
|
4091
4084
|
}
|
|
4092
4085
|
updateSelectedElement({
|
|
@@ -4097,17 +4090,17 @@ function useElementOperations(input) {
|
|
|
4097
4090
|
);
|
|
4098
4091
|
const updateSelectedTextStyle = react.useCallback(
|
|
4099
4092
|
(updates) => {
|
|
4100
|
-
if (!selectedElement || !
|
|
4093
|
+
if (!selectedElement || !chunkMZJMOEEX_js.hasTextProperties(selectedElement)) {
|
|
4101
4094
|
return;
|
|
4102
4095
|
}
|
|
4103
|
-
const inlineSel =
|
|
4096
|
+
const inlineSel = chunkMZJMOEEX_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
4104
4097
|
if (inlineSel && selectedElement.textSegments) {
|
|
4105
|
-
const { newSegments: newSegments2, newSelection } =
|
|
4098
|
+
const { newSegments: newSegments2, newSelection } = chunkMZJMOEEX_js.applyStyleToSelectedSegments(
|
|
4106
4099
|
selectedElement.textSegments,
|
|
4107
4100
|
inlineSel,
|
|
4108
4101
|
updates
|
|
4109
4102
|
);
|
|
4110
|
-
|
|
4103
|
+
chunkMZJMOEEX_js.setPendingSelectionRestore(newSelection);
|
|
4111
4104
|
updateSelectedElement({
|
|
4112
4105
|
textSegments: newSegments2
|
|
4113
4106
|
});
|
|
@@ -4127,12 +4120,12 @@ function useElementOperations(input) {
|
|
|
4127
4120
|
);
|
|
4128
4121
|
const updateSelectedTextCase = react.useCallback(
|
|
4129
4122
|
(mode) => {
|
|
4130
|
-
if (!selectedElement || !
|
|
4123
|
+
if (!selectedElement || !chunkMZJMOEEX_js.hasTextProperties(selectedElement)) {
|
|
4131
4124
|
return;
|
|
4132
4125
|
}
|
|
4133
|
-
const inlineSel =
|
|
4126
|
+
const inlineSel = chunkMZJMOEEX_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
4134
4127
|
if (inlineSel && selectedElement.textSegments) {
|
|
4135
|
-
const newSegments =
|
|
4128
|
+
const newSegments = chunkMZJMOEEX_js.applyCaseTransformToSegments(
|
|
4136
4129
|
selectedElement.textSegments,
|
|
4137
4130
|
inlineSel,
|
|
4138
4131
|
mode
|
|
@@ -4142,14 +4135,14 @@ function useElementOperations(input) {
|
|
|
4142
4135
|
}
|
|
4143
4136
|
const updates = {};
|
|
4144
4137
|
if (selectedElement.textSegments && selectedElement.textSegments.length > 0) {
|
|
4145
|
-
updates.textSegments =
|
|
4138
|
+
updates.textSegments = chunkMZJMOEEX_js.applyCaseTransformToSegments(
|
|
4146
4139
|
selectedElement.textSegments,
|
|
4147
4140
|
null,
|
|
4148
4141
|
mode
|
|
4149
4142
|
);
|
|
4150
4143
|
}
|
|
4151
4144
|
if (typeof selectedElement.text === "string") {
|
|
4152
|
-
updates.text =
|
|
4145
|
+
updates.text = chunkMZJMOEEX_js.transformTextCase(selectedElement.text, mode);
|
|
4153
4146
|
}
|
|
4154
4147
|
updateSelectedElement(updates);
|
|
4155
4148
|
},
|
|
@@ -4204,7 +4197,7 @@ function useSectionOperations(input) {
|
|
|
4204
4197
|
const { sections, setSections, slides, setSlides, markDirty } = input;
|
|
4205
4198
|
const addSection2 = react.useCallback(
|
|
4206
4199
|
(name, afterSlideIndex) => {
|
|
4207
|
-
const result =
|
|
4200
|
+
const result = chunkMZJMOEEX_js.addSection(sections, slides, name, afterSlideIndex);
|
|
4208
4201
|
setSlides(result.slides);
|
|
4209
4202
|
setSections(result.sections);
|
|
4210
4203
|
markDirty();
|
|
@@ -4213,7 +4206,7 @@ function useSectionOperations(input) {
|
|
|
4213
4206
|
);
|
|
4214
4207
|
const renameSection2 = react.useCallback(
|
|
4215
4208
|
(sectionId, newName) => {
|
|
4216
|
-
const result =
|
|
4209
|
+
const result = chunkMZJMOEEX_js.renameSection(sections, slides, sectionId, newName);
|
|
4217
4210
|
setSections(result.sections);
|
|
4218
4211
|
setSlides(result.slides);
|
|
4219
4212
|
markDirty();
|
|
@@ -4222,7 +4215,7 @@ function useSectionOperations(input) {
|
|
|
4222
4215
|
);
|
|
4223
4216
|
const deleteSection2 = react.useCallback(
|
|
4224
4217
|
(sectionId) => {
|
|
4225
|
-
const result =
|
|
4218
|
+
const result = chunkMZJMOEEX_js.deleteSection(sections, slides, sectionId);
|
|
4226
4219
|
setSections(result.sections);
|
|
4227
4220
|
setSlides(result.slides);
|
|
4228
4221
|
markDirty();
|
|
@@ -4231,21 +4224,21 @@ function useSectionOperations(input) {
|
|
|
4231
4224
|
);
|
|
4232
4225
|
const moveSectionUp2 = react.useCallback(
|
|
4233
4226
|
(sectionId) => {
|
|
4234
|
-
setSections(
|
|
4227
|
+
setSections(chunkMZJMOEEX_js.moveSectionUp(sections, sectionId));
|
|
4235
4228
|
markDirty();
|
|
4236
4229
|
},
|
|
4237
4230
|
[sections, setSections, markDirty]
|
|
4238
4231
|
);
|
|
4239
4232
|
const moveSectionDown2 = react.useCallback(
|
|
4240
4233
|
(sectionId) => {
|
|
4241
|
-
setSections(
|
|
4234
|
+
setSections(chunkMZJMOEEX_js.moveSectionDown(sections, sectionId));
|
|
4242
4235
|
markDirty();
|
|
4243
4236
|
},
|
|
4244
4237
|
[sections, setSections, markDirty]
|
|
4245
4238
|
);
|
|
4246
4239
|
const moveSlidesToSection2 = react.useCallback(
|
|
4247
4240
|
(slideIndexes, targetSectionId) => {
|
|
4248
|
-
const result =
|
|
4241
|
+
const result = chunkMZJMOEEX_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
|
|
4249
4242
|
setSlides(result.slides);
|
|
4250
4243
|
setSections(result.sections);
|
|
4251
4244
|
markDirty();
|
|
@@ -4264,19 +4257,19 @@ function useSectionOperations(input) {
|
|
|
4264
4257
|
|
|
4265
4258
|
// src/viewer/hooks/pointer-move-handlers.ts
|
|
4266
4259
|
function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
|
|
4267
|
-
const resized =
|
|
4260
|
+
const resized = chunkMZJMOEEX_js.applyResize(
|
|
4268
4261
|
{ x: startX, y: startY, width: startWidth, height: startHeight },
|
|
4269
4262
|
handle,
|
|
4270
4263
|
dx,
|
|
4271
4264
|
dy,
|
|
4272
4265
|
1,
|
|
4273
|
-
{ minSize:
|
|
4266
|
+
{ minSize: chunkSMW4QYGK_js.MIN_ELEMENT_SIZE }
|
|
4274
4267
|
);
|
|
4275
4268
|
const box = { x: resized.x, y: resized.y, width: resized.width, height: resized.height };
|
|
4276
4269
|
if (!snapToGrid) {
|
|
4277
4270
|
return box;
|
|
4278
4271
|
}
|
|
4279
|
-
return
|
|
4272
|
+
return chunkMZJMOEEX_js.snapBoxToGrid(box, handle, gridSpacingPx, chunkSMW4QYGK_js.MIN_ELEMENT_SIZE);
|
|
4280
4273
|
}
|
|
4281
4274
|
function computeAdjustmentValue(startAdjustment, dx, startWidth) {
|
|
4282
4275
|
const range = startWidth || 200;
|
|
@@ -4394,7 +4387,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
4394
4387
|
width: el.width,
|
|
4395
4388
|
height: el.height
|
|
4396
4389
|
}));
|
|
4397
|
-
const snapResult =
|
|
4390
|
+
const snapResult = chunkMZJMOEEX_js.computeSnapToShape(
|
|
4398
4391
|
targetX,
|
|
4399
4392
|
targetY,
|
|
4400
4393
|
primaryEl.width,
|
|
@@ -4433,7 +4426,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
4433
4426
|
if (live) {
|
|
4434
4427
|
for (const id of Object.keys(drag.startPositionsById)) {
|
|
4435
4428
|
const start = drag.startPositionsById[id];
|
|
4436
|
-
|
|
4429
|
+
chunkMZJMOEEX_js.publishLiveGeometry(live.patcher, live.slideId, id, {
|
|
4437
4430
|
x: start.x + appliedDx,
|
|
4438
4431
|
y: start.y + appliedDy
|
|
4439
4432
|
});
|
|
@@ -4467,15 +4460,15 @@ function processResizeMove(e, rs, editorScale, snapToGrid, gridSpacingPx, live)
|
|
|
4467
4460
|
if (rs.domEl) {
|
|
4468
4461
|
rs.domEl.style.left = `${geo.x}px`;
|
|
4469
4462
|
rs.domEl.style.top = `${geo.y}px`;
|
|
4470
|
-
rs.domEl.style.width = `${Math.max(geo.width,
|
|
4471
|
-
rs.domEl.style.height = `${Math.max(geo.height,
|
|
4463
|
+
rs.domEl.style.width = `${Math.max(geo.width, chunkSMW4QYGK_js.MIN_ELEMENT_SIZE)}px`;
|
|
4464
|
+
rs.domEl.style.height = `${Math.max(geo.height, chunkSMW4QYGK_js.MIN_ELEMENT_SIZE)}px`;
|
|
4472
4465
|
}
|
|
4473
4466
|
if (live) {
|
|
4474
|
-
|
|
4467
|
+
chunkMZJMOEEX_js.publishLiveGeometry(live.patcher, live.slideId, rs.elementId, {
|
|
4475
4468
|
x: geo.x,
|
|
4476
4469
|
y: geo.y,
|
|
4477
|
-
width: Math.max(geo.width,
|
|
4478
|
-
height: Math.max(geo.height,
|
|
4470
|
+
width: Math.max(geo.width, chunkSMW4QYGK_js.MIN_ELEMENT_SIZE),
|
|
4471
|
+
height: Math.max(geo.height, chunkSMW4QYGK_js.MIN_ELEMENT_SIZE)
|
|
4479
4472
|
});
|
|
4480
4473
|
}
|
|
4481
4474
|
}
|
|
@@ -4555,13 +4548,13 @@ function processPointerUp(input) {
|
|
|
4555
4548
|
if (i !== activeSlideIndex) {
|
|
4556
4549
|
return s;
|
|
4557
4550
|
}
|
|
4558
|
-
const rerouted =
|
|
4551
|
+
const rerouted = chunkMZJMOEEX_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
|
|
4559
4552
|
if (rerouted.length === 0) {
|
|
4560
4553
|
return s;
|
|
4561
4554
|
}
|
|
4562
4555
|
return {
|
|
4563
4556
|
...s,
|
|
4564
|
-
elements:
|
|
4557
|
+
elements: chunkMZJMOEEX_js.applyReroutedConnectors(s.elements, rerouted)
|
|
4565
4558
|
};
|
|
4566
4559
|
})
|
|
4567
4560
|
);
|
|
@@ -4583,9 +4576,9 @@ function processPointerUp(input) {
|
|
|
4583
4576
|
}
|
|
4584
4577
|
function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
|
|
4585
4578
|
const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
|
|
4586
|
-
const hitIds =
|
|
4579
|
+
const hitIds = chunkMZJMOEEX_js.computeMarqueeHitIds(marquee, sourceElements);
|
|
4587
4580
|
if (marquee.additive) {
|
|
4588
|
-
const merged =
|
|
4581
|
+
const merged = chunkMZJMOEEX_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
|
|
4589
4582
|
if (merged.length > 0) {
|
|
4590
4583
|
applySelection(merged[0], merged);
|
|
4591
4584
|
} else {
|
|
@@ -4608,8 +4601,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
|
|
|
4608
4601
|
}
|
|
4609
4602
|
return { ...el, x: start.x + dx, y: start.y + dy };
|
|
4610
4603
|
});
|
|
4611
|
-
const rerouted =
|
|
4612
|
-
return
|
|
4604
|
+
const rerouted = chunkMZJMOEEX_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
|
|
4605
|
+
return chunkMZJMOEEX_js.applyReroutedConnectors(movedElements, rerouted);
|
|
4613
4606
|
};
|
|
4614
4607
|
if (editTemplateMode) {
|
|
4615
4608
|
const slideId = activeSlide?.id;
|
|
@@ -4762,9 +4755,9 @@ function useCanvasInteractions(input) {
|
|
|
4762
4755
|
return;
|
|
4763
4756
|
}
|
|
4764
4757
|
const el = elementLookup.get(editId);
|
|
4765
|
-
if (el &&
|
|
4758
|
+
if (el && chunkMZJMOEEX_js.hasTextProperties(el)) {
|
|
4766
4759
|
const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
|
|
4767
|
-
const newSegments =
|
|
4760
|
+
const newSegments = chunkMZJMOEEX_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
|
|
4768
4761
|
ops.updateElementById(editId, {
|
|
4769
4762
|
text: committedText,
|
|
4770
4763
|
textSegments: newSegments
|
|
@@ -4775,7 +4768,7 @@ function useCanvasInteractions(input) {
|
|
|
4775
4768
|
setInlineEditingText("");
|
|
4776
4769
|
};
|
|
4777
4770
|
const openEquationEditorForElement = (el) => {
|
|
4778
|
-
if (!
|
|
4771
|
+
if (!chunkMZJMOEEX_js.hasTextProperties(el)) {
|
|
4779
4772
|
return false;
|
|
4780
4773
|
}
|
|
4781
4774
|
const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
|
|
@@ -4804,7 +4797,7 @@ function useCanvasInteractions(input) {
|
|
|
4804
4797
|
justSelectedRef.current = false;
|
|
4805
4798
|
} else {
|
|
4806
4799
|
const el = elementLookup.get(elementId);
|
|
4807
|
-
if (el &&
|
|
4800
|
+
if (el && chunkMZJMOEEX_js.hasTextProperties(el) && !el.locks?.noTextEdit) {
|
|
4808
4801
|
if (!openEquationEditorForElement(el)) {
|
|
4809
4802
|
setInlineEditingElementId(elementId);
|
|
4810
4803
|
setInlineEditingText(el.text ?? "");
|
|
@@ -4823,7 +4816,7 @@ function useCanvasInteractions(input) {
|
|
|
4823
4816
|
if (openEquationEditorForElement(el)) {
|
|
4824
4817
|
return;
|
|
4825
4818
|
}
|
|
4826
|
-
if (
|
|
4819
|
+
if (chunkMZJMOEEX_js.hasTextProperties(el)) {
|
|
4827
4820
|
setInlineEditingElementId(elementId);
|
|
4828
4821
|
setInlineEditingText(el.text ?? "");
|
|
4829
4822
|
}
|
|
@@ -5013,7 +5006,7 @@ function createFileHandlers(deps) {
|
|
|
5013
5006
|
h = Math.round(h * scale);
|
|
5014
5007
|
}
|
|
5015
5008
|
addElement({
|
|
5016
|
-
id:
|
|
5009
|
+
id: chunkMZJMOEEX_js.generateElementId(),
|
|
5017
5010
|
type: "image",
|
|
5018
5011
|
x: Math.round((canvasSize.width - w) / 2),
|
|
5019
5012
|
y: Math.round((canvasSize.height - h) / 2),
|
|
@@ -5024,7 +5017,7 @@ function createFileHandlers(deps) {
|
|
|
5024
5017
|
};
|
|
5025
5018
|
img.onerror = () => {
|
|
5026
5019
|
addElement({
|
|
5027
|
-
id:
|
|
5020
|
+
id: chunkMZJMOEEX_js.generateElementId(),
|
|
5028
5021
|
type: "image",
|
|
5029
5022
|
x: 100,
|
|
5030
5023
|
y: 100,
|
|
@@ -5050,7 +5043,7 @@ function createFileHandlers(deps) {
|
|
|
5050
5043
|
const elFilePath = file.path;
|
|
5051
5044
|
const insertMediaElement = (mediaSourceUrl, width, height) => {
|
|
5052
5045
|
addElement({
|
|
5053
|
-
id:
|
|
5046
|
+
id: chunkMZJMOEEX_js.generateElementId(),
|
|
5054
5047
|
type: "media",
|
|
5055
5048
|
mediaType,
|
|
5056
5049
|
mediaMimeType: file.type || void 0,
|
|
@@ -5225,13 +5218,13 @@ function createStructuredElementHandlers(deps) {
|
|
|
5225
5218
|
return;
|
|
5226
5219
|
}
|
|
5227
5220
|
addElement({
|
|
5228
|
-
id:
|
|
5221
|
+
id: chunkMZJMOEEX_js.generateElementId(),
|
|
5229
5222
|
type: "smartArt",
|
|
5230
5223
|
x: 100,
|
|
5231
5224
|
y: 120,
|
|
5232
5225
|
width: 600,
|
|
5233
5226
|
height: 340,
|
|
5234
|
-
smartArtData:
|
|
5227
|
+
smartArtData: chunkMZJMOEEX_js.buildSmartArtPresetData(
|
|
5235
5228
|
layout,
|
|
5236
5229
|
defaultItems,
|
|
5237
5230
|
(i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
|
|
@@ -5243,7 +5236,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5243
5236
|
return;
|
|
5244
5237
|
}
|
|
5245
5238
|
addElement({
|
|
5246
|
-
id:
|
|
5239
|
+
id: chunkMZJMOEEX_js.generateElementId(),
|
|
5247
5240
|
type: "shape",
|
|
5248
5241
|
x: 120,
|
|
5249
5242
|
y: 200,
|
|
@@ -5302,7 +5295,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5302
5295
|
const displayText = value || fieldTexts[fieldType] || fieldType;
|
|
5303
5296
|
const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
|
|
5304
5297
|
addElement({
|
|
5305
|
-
id:
|
|
5298
|
+
id: chunkMZJMOEEX_js.generateElementId(),
|
|
5306
5299
|
type: "shape",
|
|
5307
5300
|
x: 120,
|
|
5308
5301
|
y: 200,
|
|
@@ -5324,11 +5317,11 @@ function createStructuredElementHandlers(deps) {
|
|
|
5324
5317
|
if (!activeSlide) {
|
|
5325
5318
|
return;
|
|
5326
5319
|
}
|
|
5327
|
-
const preset =
|
|
5320
|
+
const preset = chunkMZJMOEEX_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
|
|
5328
5321
|
if (!preset) {
|
|
5329
5322
|
return;
|
|
5330
5323
|
}
|
|
5331
|
-
const defaultPptxAction =
|
|
5324
|
+
const defaultPptxAction = chunkMZJMOEEX_js.elementActionToPptxAction({
|
|
5332
5325
|
trigger: "click",
|
|
5333
5326
|
type: preset.defaultAction
|
|
5334
5327
|
});
|
|
@@ -5337,7 +5330,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
5337
5330
|
defaultPptxAction.highlightClick = true;
|
|
5338
5331
|
}
|
|
5339
5332
|
addElement({
|
|
5340
|
-
id:
|
|
5333
|
+
id: chunkMZJMOEEX_js.generateElementId(),
|
|
5341
5334
|
type: "shape",
|
|
5342
5335
|
x: 150,
|
|
5343
5336
|
y: 150,
|
|
@@ -5404,14 +5397,14 @@ function useInsertElements(input) {
|
|
|
5404
5397
|
return;
|
|
5405
5398
|
}
|
|
5406
5399
|
addElement({
|
|
5407
|
-
id:
|
|
5400
|
+
id: chunkMZJMOEEX_js.generateElementId(),
|
|
5408
5401
|
type: "text",
|
|
5409
5402
|
x: 100,
|
|
5410
5403
|
y: 100,
|
|
5411
5404
|
width: 300,
|
|
5412
5405
|
height: 60,
|
|
5413
5406
|
text: "",
|
|
5414
|
-
textStyle: { fontSize:
|
|
5407
|
+
textStyle: { fontSize: chunkSMW4QYGK_js.DEFAULT_TEXT_FONT_SIZE }
|
|
5415
5408
|
});
|
|
5416
5409
|
};
|
|
5417
5410
|
const handleAddShape = () => {
|
|
@@ -5419,7 +5412,7 @@ function useInsertElements(input) {
|
|
|
5419
5412
|
return;
|
|
5420
5413
|
}
|
|
5421
5414
|
addElement({
|
|
5422
|
-
id:
|
|
5415
|
+
id: chunkMZJMOEEX_js.generateElementId(),
|
|
5423
5416
|
type: "shape",
|
|
5424
5417
|
x: 150,
|
|
5425
5418
|
y: 150,
|
|
@@ -5438,15 +5431,15 @@ function useInsertElements(input) {
|
|
|
5438
5431
|
return;
|
|
5439
5432
|
}
|
|
5440
5433
|
addElement({
|
|
5441
|
-
...
|
|
5442
|
-
id:
|
|
5434
|
+
...chunkMZJMOEEX_js.newTableElement(chunkSMW4QYGK_js.DEFAULT_TABLE_ROWS, chunkSMW4QYGK_js.DEFAULT_TABLE_COLUMNS, 100, 200),
|
|
5435
|
+
id: chunkMZJMOEEX_js.generateElementId()
|
|
5443
5436
|
});
|
|
5444
5437
|
};
|
|
5445
5438
|
const handleAddChart = (chartType) => {
|
|
5446
5439
|
if (!activeSlide) {
|
|
5447
5440
|
return;
|
|
5448
5441
|
}
|
|
5449
|
-
addElement(
|
|
5442
|
+
addElement(chunkMZJMOEEX_js.createDefaultChartElement(chartType));
|
|
5450
5443
|
};
|
|
5451
5444
|
const structured = createStructuredElementHandlers({
|
|
5452
5445
|
activeSlide,
|
|
@@ -5516,7 +5509,7 @@ function useClipboardHandlers(input) {
|
|
|
5516
5509
|
if (!selectedElement) {
|
|
5517
5510
|
return;
|
|
5518
5511
|
}
|
|
5519
|
-
setClipboardPayload(
|
|
5512
|
+
setClipboardPayload(chunkMZJMOEEX_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
|
|
5520
5513
|
};
|
|
5521
5514
|
const handleDelete = () => {
|
|
5522
5515
|
const idsToDelete = effectiveSelectedIds;
|
|
@@ -5533,7 +5526,7 @@ function useClipboardHandlers(input) {
|
|
|
5533
5526
|
handleDelete();
|
|
5534
5527
|
};
|
|
5535
5528
|
const insertClone = (source) => {
|
|
5536
|
-
const clone =
|
|
5529
|
+
const clone = chunkMZJMOEEX_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
|
|
5537
5530
|
ops.updateActiveElements((els) => [...els, clone]);
|
|
5538
5531
|
ops.applySelection(clone.id);
|
|
5539
5532
|
history.markDirty();
|
|
@@ -5568,7 +5561,7 @@ function resolveShapePath(el) {
|
|
|
5568
5561
|
return el.pathData;
|
|
5569
5562
|
}
|
|
5570
5563
|
if ("shapeType" in el && typeof el.shapeType === "string") {
|
|
5571
|
-
const clipPath =
|
|
5564
|
+
const clipPath = chunkMZJMOEEX_js.getPresetShapeClipPath(el.shapeType);
|
|
5572
5565
|
if (clipPath) {
|
|
5573
5566
|
const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
|
|
5574
5567
|
if (svgPath) {
|
|
@@ -5619,7 +5612,7 @@ function clipPathToSvgPath(clipPath, width, height) {
|
|
|
5619
5612
|
return parts.join(" ");
|
|
5620
5613
|
}
|
|
5621
5614
|
function transformPathToGlobal(pathData, el) {
|
|
5622
|
-
const polys =
|
|
5615
|
+
const polys = chunkMZJMOEEX_js.svgPathToPolygons(pathData);
|
|
5623
5616
|
if (polys.length === 0) {
|
|
5624
5617
|
return pathData;
|
|
5625
5618
|
}
|
|
@@ -5639,10 +5632,10 @@ function transformPathToGlobal(pathData, el) {
|
|
|
5639
5632
|
y: pt.y * scaleY + el.y
|
|
5640
5633
|
}))
|
|
5641
5634
|
);
|
|
5642
|
-
return
|
|
5635
|
+
return chunkMZJMOEEX_js.polygonsToSvgPath(transformed);
|
|
5643
5636
|
}
|
|
5644
5637
|
function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
5645
|
-
const polys =
|
|
5638
|
+
const polys = chunkMZJMOEEX_js.svgPathToPolygons(pathData);
|
|
5646
5639
|
if (polys.length === 0) {
|
|
5647
5640
|
return pathData;
|
|
5648
5641
|
}
|
|
@@ -5652,10 +5645,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
|
5652
5645
|
y: pt.y - y
|
|
5653
5646
|
}))
|
|
5654
5647
|
);
|
|
5655
|
-
return
|
|
5648
|
+
return chunkMZJMOEEX_js.polygonsToSvgPath(transformed);
|
|
5656
5649
|
}
|
|
5657
5650
|
function pathBounds(pathData) {
|
|
5658
|
-
const polys =
|
|
5651
|
+
const polys = chunkMZJMOEEX_js.svgPathToPolygons(pathData);
|
|
5659
5652
|
let minX = Infinity;
|
|
5660
5653
|
let minY = Infinity;
|
|
5661
5654
|
let maxX = -Infinity;
|
|
@@ -5714,7 +5707,7 @@ function useMergeShapesHandler(input) {
|
|
|
5714
5707
|
let allFragments = [];
|
|
5715
5708
|
let remaining = globalPaths[0];
|
|
5716
5709
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
5717
|
-
const frags =
|
|
5710
|
+
const frags = chunkMZJMOEEX_js.mergeShapes("fragment", remaining, globalPaths[i]);
|
|
5718
5711
|
if (Array.isArray(frags)) {
|
|
5719
5712
|
allFragments = frags;
|
|
5720
5713
|
}
|
|
@@ -5743,7 +5736,7 @@ function useMergeShapesHandler(input) {
|
|
|
5743
5736
|
bounds.height
|
|
5744
5737
|
);
|
|
5745
5738
|
const newEl = {
|
|
5746
|
-
id:
|
|
5739
|
+
id: chunkMZJMOEEX_js.generateElementId(),
|
|
5747
5740
|
type: "shape",
|
|
5748
5741
|
x: bounds.x,
|
|
5749
5742
|
y: bounds.y,
|
|
@@ -5781,7 +5774,7 @@ function useMergeShapesHandler(input) {
|
|
|
5781
5774
|
} else {
|
|
5782
5775
|
let resultPath = globalPaths[0];
|
|
5783
5776
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
5784
|
-
const result =
|
|
5777
|
+
const result = chunkMZJMOEEX_js.mergeShapes(operation, resultPath, globalPaths[i]);
|
|
5785
5778
|
if (typeof result === "string") {
|
|
5786
5779
|
resultPath = result;
|
|
5787
5780
|
}
|
|
@@ -5802,7 +5795,7 @@ function useMergeShapesHandler(input) {
|
|
|
5802
5795
|
);
|
|
5803
5796
|
const primary = targets[0];
|
|
5804
5797
|
const newEl = {
|
|
5805
|
-
id:
|
|
5798
|
+
id: chunkMZJMOEEX_js.generateElementId(),
|
|
5806
5799
|
type: "shape",
|
|
5807
5800
|
x: bounds.x,
|
|
5808
5801
|
y: bounds.y,
|
|
@@ -5865,7 +5858,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5865
5858
|
if (ids.length < 2 || !activeSlide) {
|
|
5866
5859
|
return;
|
|
5867
5860
|
}
|
|
5868
|
-
const { elements, groupId } =
|
|
5861
|
+
const { elements, groupId } = chunkMZJMOEEX_js.groupElements(ops.activeElements, ids, chunkMZJMOEEX_js.generateElementId());
|
|
5869
5862
|
if (groupId === null) {
|
|
5870
5863
|
return;
|
|
5871
5864
|
}
|
|
@@ -5878,12 +5871,12 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5878
5871
|
return;
|
|
5879
5872
|
}
|
|
5880
5873
|
const group = selectedElement;
|
|
5881
|
-
const intoTemplate =
|
|
5874
|
+
const intoTemplate = chunkMZJMOEEX_js.isTemplateElementId(group.id);
|
|
5882
5875
|
const ungrouped = group.children.map((child) => ({
|
|
5883
5876
|
...structuredClone(child),
|
|
5884
5877
|
// Keep child ids in the same store as the group so later edits route
|
|
5885
5878
|
// correctly: template groups yield template-prefixed child ids.
|
|
5886
|
-
id: intoTemplate ?
|
|
5879
|
+
id: intoTemplate ? chunkMZJMOEEX_js.makeCloneId(true, child.id || group.id) : child.id || chunkMZJMOEEX_js.generateElementId(),
|
|
5887
5880
|
x: child.x + group.x,
|
|
5888
5881
|
y: child.y + group.y
|
|
5889
5882
|
}));
|
|
@@ -5907,7 +5900,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5907
5900
|
if (!edge) {
|
|
5908
5901
|
return;
|
|
5909
5902
|
}
|
|
5910
|
-
const positions =
|
|
5903
|
+
const positions = chunkMZJMOEEX_js.alignElements(selectedElements, edge);
|
|
5911
5904
|
for (const [id, pos] of positions) {
|
|
5912
5905
|
const el = elementLookup.get(id);
|
|
5913
5906
|
if (!el) {
|
|
@@ -5925,7 +5918,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5925
5918
|
if (!distAxis) {
|
|
5926
5919
|
return;
|
|
5927
5920
|
}
|
|
5928
|
-
const positions =
|
|
5921
|
+
const positions = chunkMZJMOEEX_js.distributeElements(selectedElements, distAxis);
|
|
5929
5922
|
for (const [id, pos] of positions) {
|
|
5930
5923
|
const el = elementLookup.get(id);
|
|
5931
5924
|
if (!el) {
|
|
@@ -5942,7 +5935,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5942
5935
|
}
|
|
5943
5936
|
const id = selectedElement.id;
|
|
5944
5937
|
ops.updateActiveElements(
|
|
5945
|
-
(els) => direction === "forward" ?
|
|
5938
|
+
(els) => direction === "forward" ? chunkMZJMOEEX_js.bringForward(els, id) : direction === "backward" ? chunkMZJMOEEX_js.sendBackward(els, id) : els
|
|
5946
5939
|
);
|
|
5947
5940
|
history.markDirty();
|
|
5948
5941
|
};
|
|
@@ -5952,7 +5945,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
5952
5945
|
}
|
|
5953
5946
|
const id = selectedElement.id;
|
|
5954
5947
|
ops.updateActiveElements(
|
|
5955
|
-
(els) => direction === "front" ?
|
|
5948
|
+
(els) => direction === "front" ? chunkMZJMOEEX_js.bringToFront(els, id) : chunkMZJMOEEX_js.sendToBack(els, id)
|
|
5956
5949
|
);
|
|
5957
5950
|
history.markDirty();
|
|
5958
5951
|
};
|
|
@@ -6074,7 +6067,7 @@ function insertSlideFromLayoutUpdater(slides, activeIndex, draft) {
|
|
|
6074
6067
|
function useSlideManagement(input) {
|
|
6075
6068
|
const { slides, activeSlideIndex, setActiveSlideIndex, ops, history, handlerRef } = input;
|
|
6076
6069
|
const handleAddSlide = () => {
|
|
6077
|
-
const newSlide =
|
|
6070
|
+
const newSlide = chunkMZJMOEEX_js.createBlankSlide(slides.length + 1);
|
|
6078
6071
|
ops.updateSlides((prev) => {
|
|
6079
6072
|
const next = [...prev];
|
|
6080
6073
|
next.splice(activeSlideIndex + 1, 0, newSlide);
|
|
@@ -6137,7 +6130,7 @@ function useSlideManagement(input) {
|
|
|
6137
6130
|
}
|
|
6138
6131
|
const clone = {
|
|
6139
6132
|
...src,
|
|
6140
|
-
id:
|
|
6133
|
+
id: chunkMZJMOEEX_js.makeSlideId(),
|
|
6141
6134
|
elements: src.elements.map((el) => ({
|
|
6142
6135
|
...el,
|
|
6143
6136
|
id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
|
|
@@ -6169,7 +6162,7 @@ function useSlideManagement(input) {
|
|
|
6169
6162
|
const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
|
|
6170
6163
|
const insertAt = activeSlideIndex + 1;
|
|
6171
6164
|
const draft = {
|
|
6172
|
-
...
|
|
6165
|
+
...chunkMZJMOEEX_js.createBlankSlide(slides.length + 1),
|
|
6173
6166
|
layoutPath,
|
|
6174
6167
|
...layoutName ? { layoutName } : {}
|
|
6175
6168
|
};
|
|
@@ -6230,7 +6223,7 @@ function createTableMergeHandlers(input) {
|
|
|
6230
6223
|
if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
|
|
6231
6224
|
return;
|
|
6232
6225
|
}
|
|
6233
|
-
const newTableData =
|
|
6226
|
+
const newTableData = chunkMZJMOEEX_js.mergeCells(
|
|
6234
6227
|
[
|
|
6235
6228
|
{ row: rowIndex, col: columnIndex },
|
|
6236
6229
|
{ row: rowIndex, col: nextColIdx }
|
|
@@ -6238,7 +6231,7 @@ function createTableMergeHandlers(input) {
|
|
|
6238
6231
|
td
|
|
6239
6232
|
);
|
|
6240
6233
|
const updates = { tableData: newTableData };
|
|
6241
|
-
const newRawXml =
|
|
6234
|
+
const newRawXml = chunkMZJMOEEX_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6242
6235
|
if (newRawXml) {
|
|
6243
6236
|
updates.rawXml = newRawXml;
|
|
6244
6237
|
}
|
|
@@ -6264,7 +6257,7 @@ function createTableMergeHandlers(input) {
|
|
|
6264
6257
|
if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
|
|
6265
6258
|
return;
|
|
6266
6259
|
}
|
|
6267
|
-
const newTableData =
|
|
6260
|
+
const newTableData = chunkMZJMOEEX_js.mergeCells(
|
|
6268
6261
|
[
|
|
6269
6262
|
{ row: rowIndex, col: columnIndex },
|
|
6270
6263
|
{ row: targetNextRowIdx, col: columnIndex }
|
|
@@ -6272,7 +6265,7 @@ function createTableMergeHandlers(input) {
|
|
|
6272
6265
|
td
|
|
6273
6266
|
);
|
|
6274
6267
|
const updates = { tableData: newTableData };
|
|
6275
|
-
const newRawXml =
|
|
6268
|
+
const newRawXml = chunkMZJMOEEX_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6276
6269
|
if (newRawXml) {
|
|
6277
6270
|
updates.rawXml = newRawXml;
|
|
6278
6271
|
}
|
|
@@ -6287,9 +6280,9 @@ function createTableMergeHandlers(input) {
|
|
|
6287
6280
|
return;
|
|
6288
6281
|
}
|
|
6289
6282
|
const td = selectedElement.tableData;
|
|
6290
|
-
const newTableData =
|
|
6283
|
+
const newTableData = chunkMZJMOEEX_js.mergeCells(ts.selectedCells, td);
|
|
6291
6284
|
const updates = { tableData: newTableData };
|
|
6292
|
-
const newRawXml =
|
|
6285
|
+
const newRawXml = chunkMZJMOEEX_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6293
6286
|
if (newRawXml) {
|
|
6294
6287
|
updates.rawXml = newRawXml;
|
|
6295
6288
|
}
|
|
@@ -6306,9 +6299,9 @@ function createTableMergeHandlers(input) {
|
|
|
6306
6299
|
}
|
|
6307
6300
|
const { rowIndex, columnIndex } = ts;
|
|
6308
6301
|
const td = selectedElement.tableData;
|
|
6309
|
-
const newTableData =
|
|
6302
|
+
const newTableData = chunkMZJMOEEX_js.splitCell(rowIndex, columnIndex, td);
|
|
6310
6303
|
const updates = { tableData: newTableData };
|
|
6311
|
-
const newRawXml =
|
|
6304
|
+
const newRawXml = chunkMZJMOEEX_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
6312
6305
|
if (newRawXml) {
|
|
6313
6306
|
updates.rawXml = newRawXml;
|
|
6314
6307
|
}
|
|
@@ -6352,7 +6345,7 @@ function createTableStructHandlers(input) {
|
|
|
6352
6345
|
updates.tableData = { ...el.tableData, rows: newRows };
|
|
6353
6346
|
}
|
|
6354
6347
|
if (el.rawXml) {
|
|
6355
|
-
const newRawXml =
|
|
6348
|
+
const newRawXml = chunkMZJMOEEX_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
|
|
6356
6349
|
if (newRawXml) {
|
|
6357
6350
|
updates.rawXml = newRawXml;
|
|
6358
6351
|
}
|
|
@@ -6376,7 +6369,7 @@ function createTableStructHandlers(input) {
|
|
|
6376
6369
|
const { rowIndex, columnIndex: colIndex } = ts;
|
|
6377
6370
|
const updates = {};
|
|
6378
6371
|
if (selectedElement.rawXml) {
|
|
6379
|
-
const newRawXml =
|
|
6372
|
+
const newRawXml = chunkMZJMOEEX_js.updateCellTextStyleInRawXml(
|
|
6380
6373
|
selectedElement,
|
|
6381
6374
|
rowIndex,
|
|
6382
6375
|
colIndex,
|
|
@@ -6440,9 +6433,9 @@ function createTableStructHandlers(input) {
|
|
|
6440
6433
|
return;
|
|
6441
6434
|
}
|
|
6442
6435
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
6443
|
-
const newTableData =
|
|
6436
|
+
const newTableData = chunkMZJMOEEX_js.insertTableRow(selectedElement.tableData, rowIdx, position);
|
|
6444
6437
|
const updates = { tableData: newTableData };
|
|
6445
|
-
const newRawXml =
|
|
6438
|
+
const newRawXml = chunkMZJMOEEX_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6446
6439
|
if (newRawXml) {
|
|
6447
6440
|
updates.rawXml = newRawXml;
|
|
6448
6441
|
}
|
|
@@ -6455,12 +6448,12 @@ function createTableStructHandlers(input) {
|
|
|
6455
6448
|
}
|
|
6456
6449
|
const td = selectedElement.tableData;
|
|
6457
6450
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
6458
|
-
const newTableData =
|
|
6451
|
+
const newTableData = chunkMZJMOEEX_js.deleteTableRow(td, rowIdx);
|
|
6459
6452
|
if (newTableData === td) {
|
|
6460
6453
|
return;
|
|
6461
6454
|
}
|
|
6462
6455
|
const updates = { tableData: newTableData };
|
|
6463
|
-
const newRawXml =
|
|
6456
|
+
const newRawXml = chunkMZJMOEEX_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6464
6457
|
if (newRawXml) {
|
|
6465
6458
|
updates.rawXml = newRawXml;
|
|
6466
6459
|
}
|
|
@@ -6472,9 +6465,9 @@ function createTableStructHandlers(input) {
|
|
|
6472
6465
|
return;
|
|
6473
6466
|
}
|
|
6474
6467
|
const colIdx = ts?.columnIndex ?? 0;
|
|
6475
|
-
const newTableData =
|
|
6468
|
+
const newTableData = chunkMZJMOEEX_js.insertTableColumn(selectedElement.tableData, colIdx, position);
|
|
6476
6469
|
const updates = { tableData: newTableData };
|
|
6477
|
-
const newRawXml =
|
|
6470
|
+
const newRawXml = chunkMZJMOEEX_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6478
6471
|
if (newRawXml) {
|
|
6479
6472
|
updates.rawXml = newRawXml;
|
|
6480
6473
|
}
|
|
@@ -6487,12 +6480,12 @@ function createTableStructHandlers(input) {
|
|
|
6487
6480
|
}
|
|
6488
6481
|
const td = selectedElement.tableData;
|
|
6489
6482
|
const colIdx = ts?.columnIndex ?? 0;
|
|
6490
|
-
const newTableData =
|
|
6483
|
+
const newTableData = chunkMZJMOEEX_js.deleteTableColumn(td, colIdx);
|
|
6491
6484
|
if (newTableData === td) {
|
|
6492
6485
|
return;
|
|
6493
6486
|
}
|
|
6494
6487
|
const updates = { tableData: newTableData };
|
|
6495
|
-
const newRawXml =
|
|
6488
|
+
const newRawXml = chunkMZJMOEEX_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
6496
6489
|
if (newRawXml) {
|
|
6497
6490
|
updates.rawXml = newRawXml;
|
|
6498
6491
|
}
|
|
@@ -6528,8 +6521,8 @@ async function renderToCanvas(element, options = {}) {
|
|
|
6528
6521
|
return html2canvasPro(element, {
|
|
6529
6522
|
...options,
|
|
6530
6523
|
onclone: async (doc, clonedEl) => {
|
|
6531
|
-
await
|
|
6532
|
-
|
|
6524
|
+
await chunkMZJMOEEX_js.normalizeColorsForCapture(doc, clonedEl);
|
|
6525
|
+
chunkMZJMOEEX_js.preprocessCssForCapture(clonedEl);
|
|
6533
6526
|
if (typeof userOnClone === "function") {
|
|
6534
6527
|
userOnClone(doc, clonedEl);
|
|
6535
6528
|
}
|
|
@@ -6585,7 +6578,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
|
|
|
6585
6578
|
}
|
|
6586
6579
|
async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
|
|
6587
6580
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
6588
|
-
|
|
6581
|
+
chunkMZJMOEEX_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
|
|
6589
6582
|
}
|
|
6590
6583
|
async function copySlideToClipboard(slideElement, options = {}) {
|
|
6591
6584
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
@@ -6607,15 +6600,15 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
|
|
|
6607
6600
|
continue;
|
|
6608
6601
|
}
|
|
6609
6602
|
const canvas = await renderElementToCanvas(stageEl, scale);
|
|
6610
|
-
images.push(
|
|
6603
|
+
images.push(chunkMZJMOEEX_js.canvasToJpegData(canvas));
|
|
6611
6604
|
}
|
|
6612
6605
|
onProgress?.(totalSlides, totalSlides);
|
|
6613
6606
|
setActiveSlide(currentSlideIndex);
|
|
6614
6607
|
if (images.length === 0) {
|
|
6615
6608
|
throw new Error(chunk25VSL2BB_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
|
|
6616
6609
|
}
|
|
6617
|
-
const pdfBlobUrl =
|
|
6618
|
-
|
|
6610
|
+
const pdfBlobUrl = chunkSMW4QYGK_js.buildPdfFromImageData(images);
|
|
6611
|
+
chunkMZJMOEEX_js.downloadDataUrl(pdfBlobUrl, filename);
|
|
6619
6612
|
}
|
|
6620
6613
|
async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
|
|
6621
6614
|
const { scale = 2, onProgress } = options;
|
|
@@ -6663,8 +6656,8 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
|
|
|
6663
6656
|
if (pages.length === 0) {
|
|
6664
6657
|
throw new Error(chunk25VSL2BB_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
|
|
6665
6658
|
}
|
|
6666
|
-
const pdfDataUrl =
|
|
6667
|
-
|
|
6659
|
+
const pdfDataUrl = chunkSMW4QYGK_js.buildNotesPdf(pages);
|
|
6660
|
+
chunkMZJMOEEX_js.downloadDataUrl(pdfDataUrl, filename);
|
|
6668
6661
|
}
|
|
6669
6662
|
|
|
6670
6663
|
// src/viewer/utils/export-video.ts
|
|
@@ -6708,7 +6701,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
6708
6701
|
const fps = 30;
|
|
6709
6702
|
const stream = recordingCanvas.captureStream(fps);
|
|
6710
6703
|
const recorder = new MediaRecorder(stream, {
|
|
6711
|
-
mimeType:
|
|
6704
|
+
mimeType: chunkMZJMOEEX_js.pickSupportedMimeType([...chunkMZJMOEEX_js.WEBM_MIME_CANDIDATES]),
|
|
6712
6705
|
videoBitsPerSecond: 5e6
|
|
6713
6706
|
});
|
|
6714
6707
|
const chunks = [];
|
|
@@ -6731,8 +6724,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
6731
6724
|
const duration = slideTimingsMs?.[i] ?? slideDurationMs;
|
|
6732
6725
|
ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
|
|
6733
6726
|
ctx.drawImage(slideCanvases[i], 0, 0);
|
|
6734
|
-
const frameInterval =
|
|
6735
|
-
const framesNeeded =
|
|
6727
|
+
const frameInterval = chunkMZJMOEEX_js.fpsToFrameIntervalMs(fps);
|
|
6728
|
+
const framesNeeded = chunkMZJMOEEX_js.segmentFrameCount(duration, fps);
|
|
6736
6729
|
for (let f = 0; f < framesNeeded; f++) {
|
|
6737
6730
|
if (signal?.aborted) {
|
|
6738
6731
|
recorder.stop();
|
|
@@ -6781,7 +6774,7 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
|
|
|
6781
6774
|
if (frames.length === 0) {
|
|
6782
6775
|
throw new Error(chunk25VSL2BB_js.translationsEn["pptx.export.errorNoSlidesGif"]);
|
|
6783
6776
|
}
|
|
6784
|
-
const gifBytes =
|
|
6777
|
+
const gifBytes = chunkMZJMOEEX_js.encodeGif(frames, Math.round(slideDurationMs / 10));
|
|
6785
6778
|
onProgress?.(totalSlides, totalSlides);
|
|
6786
6779
|
const buf = new ArrayBuffer(gifBytes.length);
|
|
6787
6780
|
new Uint8Array(buf).set(gifBytes);
|
|
@@ -6835,7 +6828,7 @@ function exportAllSlidesToSvg(data, options = {}) {
|
|
|
6835
6828
|
continue;
|
|
6836
6829
|
}
|
|
6837
6830
|
onProgress?.(processedCount, data.slides.length);
|
|
6838
|
-
let svg =
|
|
6831
|
+
let svg = chunkMZJMOEEX_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
|
|
6839
6832
|
if (embedFonts && fontFaces?.length) {
|
|
6840
6833
|
svg = injectFontFaces(svg, fontFaces);
|
|
6841
6834
|
}
|
|
@@ -6895,7 +6888,7 @@ function useExportSaveAs(input) {
|
|
|
6895
6888
|
}
|
|
6896
6889
|
setExportProgress(70);
|
|
6897
6890
|
setExportStatusMessage("Writing README...");
|
|
6898
|
-
const readme =
|
|
6891
|
+
const readme = chunkMZJMOEEX_js.generatePackageReadme(pptxFilename);
|
|
6899
6892
|
pkgFolder.file("README.txt", readme);
|
|
6900
6893
|
if (abortCtrl.signal.aborted) {
|
|
6901
6894
|
throw new DOMException("Export cancelled", "AbortError");
|
|
@@ -6906,7 +6899,7 @@ function useExportSaveAs(input) {
|
|
|
6906
6899
|
setExportProgress(95);
|
|
6907
6900
|
setExportStatusMessage("Downloading...");
|
|
6908
6901
|
const baseName = pptxFilename.replace(/\.[^.]+$/u, "");
|
|
6909
|
-
|
|
6902
|
+
chunkMZJMOEEX_js.downloadBlob(zipBlob, `${baseName}-package.zip`);
|
|
6910
6903
|
setExportProgress(100);
|
|
6911
6904
|
} catch (err) {
|
|
6912
6905
|
if (err.name !== "AbortError") {
|
|
@@ -6929,7 +6922,7 @@ function useExportSaveAs(input) {
|
|
|
6929
6922
|
const blob = new Blob([data], {
|
|
6930
6923
|
type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
|
|
6931
6924
|
});
|
|
6932
|
-
|
|
6925
|
+
chunkMZJMOEEX_js.downloadBlob(blob, `${baseName}.${ext}`);
|
|
6933
6926
|
} catch (err) {
|
|
6934
6927
|
console.error(`[PowerPointViewer] Save as .${ext} failed:`, err);
|
|
6935
6928
|
}
|
|
@@ -6942,14 +6935,14 @@ function useExportSaveAs(input) {
|
|
|
6942
6935
|
const pptxGuides = guides.map((g) => ({
|
|
6943
6936
|
id: g.id,
|
|
6944
6937
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
6945
|
-
positionEmu:
|
|
6938
|
+
positionEmu: chunkMZJMOEEX_js.guidePxToEmu(g.position)
|
|
6946
6939
|
}));
|
|
6947
6940
|
return {
|
|
6948
6941
|
...slide,
|
|
6949
6942
|
guides: pptxGuides.length > 0 ? pptxGuides : void 0
|
|
6950
6943
|
};
|
|
6951
6944
|
});
|
|
6952
|
-
const slidesToSave =
|
|
6945
|
+
const slidesToSave = chunkSMW4QYGK_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
|
|
6953
6946
|
const saveOptions = {
|
|
6954
6947
|
headerFooter,
|
|
6955
6948
|
presentationProperties,
|
|
@@ -7006,7 +6999,7 @@ function safeConfirm(message) {
|
|
|
7006
6999
|
}
|
|
7007
7000
|
}
|
|
7008
7001
|
function downloadBlob2(blob, filename) {
|
|
7009
|
-
|
|
7002
|
+
chunkMZJMOEEX_js.downloadBlob(blob, chunkMZJMOEEX_js.sanitizeDownloadFilename(filename));
|
|
7010
7003
|
}
|
|
7011
7004
|
|
|
7012
7005
|
// src/viewer/hooks/useExportHandlers.ts
|
|
@@ -7107,21 +7100,21 @@ function useExportHandlers(input) {
|
|
|
7107
7100
|
{
|
|
7108
7101
|
scale: 2,
|
|
7109
7102
|
onProgress: (current, total) => {
|
|
7110
|
-
setExportProgress(
|
|
7111
|
-
setExportStatusMessage(
|
|
7103
|
+
setExportProgress(chunkMZJMOEEX_js.slideProgressPercent(current, total));
|
|
7104
|
+
setExportStatusMessage(chunkMZJMOEEX_js.slideStatusLabel("Rendering", current, total));
|
|
7112
7105
|
},
|
|
7113
7106
|
signal: abortCtrl.signal
|
|
7114
7107
|
}
|
|
7115
7108
|
);
|
|
7116
|
-
setExportProgress(
|
|
7109
|
+
setExportProgress(chunkMZJMOEEX_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7117
7110
|
setExportStatusMessage("Building PDF...");
|
|
7118
7111
|
await new Promise((r) => {
|
|
7119
7112
|
setTimeout(r, 100);
|
|
7120
7113
|
});
|
|
7121
|
-
setExportProgress(
|
|
7114
|
+
setExportProgress(chunkMZJMOEEX_js.EXPORT_DONE_PERCENT);
|
|
7122
7115
|
setExportStatusMessage("Done!");
|
|
7123
7116
|
} catch (err) {
|
|
7124
|
-
if (!
|
|
7117
|
+
if (!chunkMZJMOEEX_js.isExportAbortError(err)) {
|
|
7125
7118
|
console.error("[PowerPointViewer] PDF export failed:", err);
|
|
7126
7119
|
}
|
|
7127
7120
|
} finally {
|
|
@@ -7151,21 +7144,21 @@ function useExportHandlers(input) {
|
|
|
7151
7144
|
{
|
|
7152
7145
|
scale: 2,
|
|
7153
7146
|
onProgress: (current, total) => {
|
|
7154
|
-
setExportProgress(
|
|
7155
|
-
setExportStatusMessage(
|
|
7147
|
+
setExportProgress(chunkMZJMOEEX_js.slideProgressPercent(current, total));
|
|
7148
|
+
setExportStatusMessage(chunkMZJMOEEX_js.slideStatusLabel("Rendering", current, total));
|
|
7156
7149
|
},
|
|
7157
7150
|
signal: abortCtrl.signal
|
|
7158
7151
|
}
|
|
7159
7152
|
);
|
|
7160
|
-
setExportProgress(
|
|
7153
|
+
setExportProgress(chunkMZJMOEEX_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7161
7154
|
setExportStatusMessage("Building PDF...");
|
|
7162
7155
|
await new Promise((r) => {
|
|
7163
7156
|
setTimeout(r, 100);
|
|
7164
7157
|
});
|
|
7165
|
-
setExportProgress(
|
|
7158
|
+
setExportProgress(chunkMZJMOEEX_js.EXPORT_DONE_PERCENT);
|
|
7166
7159
|
setExportStatusMessage("Done!");
|
|
7167
7160
|
} catch (err) {
|
|
7168
|
-
if (!
|
|
7161
|
+
if (!chunkMZJMOEEX_js.isExportAbortError(err)) {
|
|
7169
7162
|
console.error("[PowerPointViewer] Notes PDF export failed:", err);
|
|
7170
7163
|
}
|
|
7171
7164
|
} finally {
|
|
@@ -7206,22 +7199,22 @@ function useExportHandlers(input) {
|
|
|
7206
7199
|
scale: 1,
|
|
7207
7200
|
slideDurationMs: 3e3,
|
|
7208
7201
|
onProgress: (current, total) => {
|
|
7209
|
-
setExportProgress(
|
|
7210
|
-
setExportStatusMessage(
|
|
7202
|
+
setExportProgress(chunkMZJMOEEX_js.slideProgressPercent(current, total, 45));
|
|
7203
|
+
setExportStatusMessage(chunkMZJMOEEX_js.slideStatusLabel("Capturing", current, total));
|
|
7211
7204
|
},
|
|
7212
7205
|
onRecordProgress: (current, total) => {
|
|
7213
|
-
setExportProgress(
|
|
7214
|
-
setExportStatusMessage(
|
|
7206
|
+
setExportProgress(chunkMZJMOEEX_js.recordProgressPercent(current, total));
|
|
7207
|
+
setExportStatusMessage(chunkMZJMOEEX_js.slideStatusLabel("Recording", current, total));
|
|
7215
7208
|
},
|
|
7216
7209
|
signal: abortCtrl.signal
|
|
7217
7210
|
}
|
|
7218
7211
|
);
|
|
7219
|
-
setExportProgress(
|
|
7212
|
+
setExportProgress(chunkMZJMOEEX_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7220
7213
|
setExportStatusMessage("Saving file...");
|
|
7221
7214
|
downloadBlob2(blob, "presentation.webm");
|
|
7222
|
-
setExportProgress(
|
|
7215
|
+
setExportProgress(chunkMZJMOEEX_js.EXPORT_DONE_PERCENT);
|
|
7223
7216
|
} catch (err) {
|
|
7224
|
-
if (!
|
|
7217
|
+
if (!chunkMZJMOEEX_js.isExportAbortError(err)) {
|
|
7225
7218
|
console.error("[PowerPointViewer] Video export failed:", err);
|
|
7226
7219
|
}
|
|
7227
7220
|
} finally {
|
|
@@ -7249,18 +7242,18 @@ function useExportHandlers(input) {
|
|
|
7249
7242
|
scale: 0.5,
|
|
7250
7243
|
slideDurationMs: 2e3,
|
|
7251
7244
|
onProgress: (current, total) => {
|
|
7252
|
-
setExportProgress(
|
|
7253
|
-
setExportStatusMessage(
|
|
7245
|
+
setExportProgress(chunkMZJMOEEX_js.slideProgressPercent(current, total));
|
|
7246
|
+
setExportStatusMessage(chunkMZJMOEEX_js.slideStatusLabel("Encoding", current, total));
|
|
7254
7247
|
},
|
|
7255
7248
|
signal: abortCtrl.signal
|
|
7256
7249
|
}
|
|
7257
7250
|
);
|
|
7258
|
-
setExportProgress(
|
|
7251
|
+
setExportProgress(chunkMZJMOEEX_js.EXPORT_ASSEMBLING_PERCENT);
|
|
7259
7252
|
setExportStatusMessage("Saving file...");
|
|
7260
7253
|
downloadBlob2(blob, "presentation.gif");
|
|
7261
|
-
setExportProgress(
|
|
7254
|
+
setExportProgress(chunkMZJMOEEX_js.EXPORT_DONE_PERCENT);
|
|
7262
7255
|
} catch (err) {
|
|
7263
|
-
if (!
|
|
7256
|
+
if (!chunkMZJMOEEX_js.isExportAbortError(err)) {
|
|
7264
7257
|
console.error("[PowerPointViewer] GIF export failed:", err);
|
|
7265
7258
|
}
|
|
7266
7259
|
} finally {
|
|
@@ -7300,7 +7293,7 @@ function openPrintWindow(title, bodyHtml, orientation, colorFilter, frameSlides)
|
|
|
7300
7293
|
}
|
|
7301
7294
|
printWindow.document.open();
|
|
7302
7295
|
printWindow.document.write(
|
|
7303
|
-
|
|
7296
|
+
chunkMZJMOEEX_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
|
|
7304
7297
|
);
|
|
7305
7298
|
printWindow.document.close();
|
|
7306
7299
|
printWindow.focus();
|
|
@@ -7361,7 +7354,7 @@ function usePrintHandlers(input) {
|
|
|
7361
7354
|
if (svgs.length === 0) {
|
|
7362
7355
|
return;
|
|
7363
7356
|
}
|
|
7364
|
-
const printDoc =
|
|
7357
|
+
const printDoc = chunkMZJMOEEX_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
|
|
7365
7358
|
title: "Slides (Vector)",
|
|
7366
7359
|
orientation: settings.orientation,
|
|
7367
7360
|
colorFilter
|
|
@@ -7397,7 +7390,7 @@ function usePrintHandlers(input) {
|
|
|
7397
7390
|
if (settings.printWhat === "outline") {
|
|
7398
7391
|
openPrintWindow(
|
|
7399
7392
|
"Outline",
|
|
7400
|
-
`<div class="outline-page">${
|
|
7393
|
+
`<div class="outline-page">${chunkMZJMOEEX_js.buildOutlineHtml(slideIndices, slides)}</div>`,
|
|
7401
7394
|
settings.orientation,
|
|
7402
7395
|
colorFilter,
|
|
7403
7396
|
settings.frameSlides
|
|
@@ -7422,7 +7415,7 @@ function usePrintHandlers(input) {
|
|
|
7422
7415
|
if (settings.printWhat === "slides") {
|
|
7423
7416
|
openPrintWindow(
|
|
7424
7417
|
"Slides",
|
|
7425
|
-
|
|
7418
|
+
chunkMZJMOEEX_js.buildSlidesHtml(slideImages, slideIndices),
|
|
7426
7419
|
settings.orientation,
|
|
7427
7420
|
colorFilter,
|
|
7428
7421
|
settings.frameSlides
|
|
@@ -7432,7 +7425,7 @@ function usePrintHandlers(input) {
|
|
|
7432
7425
|
if (settings.printWhat === "notes") {
|
|
7433
7426
|
openPrintWindow(
|
|
7434
7427
|
"Notes Pages",
|
|
7435
|
-
|
|
7428
|
+
chunkMZJMOEEX_js.buildNotesHtml(slideImages, slideIndices, slides),
|
|
7436
7429
|
"portrait",
|
|
7437
7430
|
colorFilter,
|
|
7438
7431
|
settings.frameSlides
|
|
@@ -7443,7 +7436,7 @@ function usePrintHandlers(input) {
|
|
|
7443
7436
|
const spp = settings.slidesPerPage;
|
|
7444
7437
|
openPrintWindow(
|
|
7445
7438
|
`Handout ${spp} per page`,
|
|
7446
|
-
|
|
7439
|
+
chunkMZJMOEEX_js.buildHandoutsHtml(slideImages, slideIndices, spp),
|
|
7447
7440
|
"portrait",
|
|
7448
7441
|
colorFilter,
|
|
7449
7442
|
settings.frameSlides
|
|
@@ -7507,8 +7500,8 @@ function useThemeHandlers(input) {
|
|
|
7507
7500
|
return;
|
|
7508
7501
|
}
|
|
7509
7502
|
await handler.updateThemeColorScheme(colorScheme);
|
|
7510
|
-
const previousMap = theme?.colorScheme ?
|
|
7511
|
-
setSlides((prev) =>
|
|
7503
|
+
const previousMap = theme?.colorScheme ? chunkMZJMOEEX_js.buildThemeColorMap(theme.colorScheme) : {};
|
|
7504
|
+
setSlides((prev) => chunkMZJMOEEX_js.reResolveSlideColors(prev, previousMap, colorScheme));
|
|
7512
7505
|
setTheme((prev) => prev ? { ...prev, colorScheme } : { colorScheme });
|
|
7513
7506
|
bumpHistory();
|
|
7514
7507
|
history.markDirty();
|
|
@@ -7613,7 +7606,7 @@ function useThemeSwitching(input) {
|
|
|
7613
7606
|
}
|
|
7614
7607
|
try {
|
|
7615
7608
|
await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
|
|
7616
|
-
const newData =
|
|
7609
|
+
const newData = chunkMZJMOEEX_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
|
|
7617
7610
|
onDataChange(newData);
|
|
7618
7611
|
onThemeChanged?.(preset);
|
|
7619
7612
|
} catch (error) {
|
|
@@ -7630,7 +7623,7 @@ function useThemeSwitching(input) {
|
|
|
7630
7623
|
}
|
|
7631
7624
|
try {
|
|
7632
7625
|
await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
|
|
7633
|
-
const newData =
|
|
7626
|
+
const newData = chunkMZJMOEEX_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
|
|
7634
7627
|
onDataChange(newData);
|
|
7635
7628
|
} catch (error) {
|
|
7636
7629
|
console.error("Failed to switch to custom theme:", error);
|
|
@@ -7642,12 +7635,12 @@ function useThemeSwitching(input) {
|
|
|
7642
7635
|
if (!data?.theme?.colorScheme) {
|
|
7643
7636
|
return void 0;
|
|
7644
7637
|
}
|
|
7645
|
-
return
|
|
7646
|
-
(p) =>
|
|
7638
|
+
return chunkMZJMOEEX_js.THEME_PRESETS.find(
|
|
7639
|
+
(p) => chunkMZJMOEEX_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
|
|
7647
7640
|
);
|
|
7648
7641
|
}, [data?.theme?.colorScheme]);
|
|
7649
7642
|
return {
|
|
7650
|
-
presets:
|
|
7643
|
+
presets: chunkMZJMOEEX_js.THEME_PRESETS,
|
|
7651
7644
|
switchToPreset,
|
|
7652
7645
|
switchToCustom,
|
|
7653
7646
|
currentPreset
|
|
@@ -7722,7 +7715,7 @@ function usePropertyHandlers(input) {
|
|
|
7722
7715
|
}
|
|
7723
7716
|
try {
|
|
7724
7717
|
const ab = await file.arrayBuffer();
|
|
7725
|
-
const h = new
|
|
7718
|
+
const h = new chunkMZJMOEEX_js.PptxHandler();
|
|
7726
7719
|
const other = await h.load(ab);
|
|
7727
7720
|
if (!other) {
|
|
7728
7721
|
return;
|
|
@@ -7732,7 +7725,7 @@ function usePropertyHandlers(input) {
|
|
|
7732
7725
|
width: canvasSize.width,
|
|
7733
7726
|
height: canvasSize.height
|
|
7734
7727
|
};
|
|
7735
|
-
setCompareResult(
|
|
7728
|
+
setCompareResult(chunkMZJMOEEX_js.comparePresentation(cur, other));
|
|
7736
7729
|
setIsComparePanelOpen(true);
|
|
7737
7730
|
} catch (err) {
|
|
7738
7731
|
console.warn("Compare failed:", err);
|
|
@@ -7749,7 +7742,7 @@ function usePropertyHandlers(input) {
|
|
|
7749
7742
|
if (!diff || diff.status === "unchanged") {
|
|
7750
7743
|
return;
|
|
7751
7744
|
}
|
|
7752
|
-
setSlides((prev) =>
|
|
7745
|
+
setSlides((prev) => chunkMZJMOEEX_js.applyAcceptSlide(prev, diff));
|
|
7753
7746
|
setIsDirty(true);
|
|
7754
7747
|
},
|
|
7755
7748
|
[compareResult, setSlides, setIsDirty]
|
|
@@ -7760,10 +7753,10 @@ function usePropertyHandlers(input) {
|
|
|
7760
7753
|
if (!compareResult) {
|
|
7761
7754
|
return;
|
|
7762
7755
|
}
|
|
7763
|
-
setSlides((prev) =>
|
|
7756
|
+
setSlides((prev) => chunkMZJMOEEX_js.applyAcceptAllSlides(prev, compareResult));
|
|
7764
7757
|
setIsDirty(true);
|
|
7765
7758
|
}, [compareResult, setSlides, setIsDirty]);
|
|
7766
|
-
const usedFontFamilies = react.useMemo(() =>
|
|
7759
|
+
const usedFontFamilies = react.useMemo(() => chunkMZJMOEEX_js.collectUsedFonts(slides), [slides]);
|
|
7767
7760
|
return {
|
|
7768
7761
|
handleUpdateNotes,
|
|
7769
7762
|
handleUpdateSlide,
|
|
@@ -7882,7 +7875,7 @@ function useIsMobile(input) {
|
|
|
7882
7875
|
const containerRef = input?.containerRef;
|
|
7883
7876
|
const isTouchDevice = react.useSyncExternalStore(
|
|
7884
7877
|
subscribeTouchCapability,
|
|
7885
|
-
|
|
7878
|
+
chunkMZJMOEEX_js.detectTouchDevice,
|
|
7886
7879
|
() => false
|
|
7887
7880
|
// server snapshot
|
|
7888
7881
|
);
|
|
@@ -7898,7 +7891,7 @@ function useIsMobile(input) {
|
|
|
7898
7891
|
}
|
|
7899
7892
|
return containerRef?.current?.clientHeight ?? window.innerHeight;
|
|
7900
7893
|
});
|
|
7901
|
-
const [orientation, setOrientation] = react.useState(
|
|
7894
|
+
const [orientation, setOrientation] = react.useState(chunkMZJMOEEX_js.detectOrientation);
|
|
7902
7895
|
const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = react.useState(false);
|
|
7903
7896
|
const [initialViewportHeight] = react.useState(
|
|
7904
7897
|
() => typeof window !== "undefined" ? window.innerHeight : 800
|
|
@@ -7942,7 +7935,7 @@ function useIsMobile(input) {
|
|
|
7942
7935
|
return;
|
|
7943
7936
|
}
|
|
7944
7937
|
const handleOrientationChange = () => {
|
|
7945
|
-
setOrientation(
|
|
7938
|
+
setOrientation(chunkMZJMOEEX_js.detectOrientation());
|
|
7946
7939
|
};
|
|
7947
7940
|
if (screen.orientation) {
|
|
7948
7941
|
screen.orientation.addEventListener("change", handleOrientationChange);
|
|
@@ -7972,9 +7965,9 @@ function useIsMobile(input) {
|
|
|
7972
7965
|
window.addEventListener("resize", handleResize);
|
|
7973
7966
|
return () => window.removeEventListener("resize", handleResize);
|
|
7974
7967
|
}, [isTouchDevice, initialViewportHeight]);
|
|
7975
|
-
const isMobile =
|
|
7976
|
-
const isTablet = !isMobile && containerWidth >=
|
|
7977
|
-
const isDesktop = !isMobile && containerWidth >=
|
|
7968
|
+
const isMobile = chunkMZJMOEEX_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
|
|
7969
|
+
const isTablet = !isMobile && containerWidth >= chunkMZJMOEEX_js.MOBILE_BREAKPOINT && containerWidth < chunkMZJMOEEX_js.TABLET_BREAKPOINT;
|
|
7970
|
+
const isDesktop = !isMobile && containerWidth >= chunkMZJMOEEX_js.TABLET_BREAKPOINT;
|
|
7978
7971
|
return {
|
|
7979
7972
|
isMobile,
|
|
7980
7973
|
isTablet,
|
|
@@ -8035,11 +8028,11 @@ function useViewerDialogs(input) {
|
|
|
8035
8028
|
);
|
|
8036
8029
|
const [embedFontsEnabled, setEmbedFontsEnabled] = react.useState(false);
|
|
8037
8030
|
const [isNarrowViewport, setIsNarrowViewport] = react.useState(
|
|
8038
|
-
() => typeof window !== "undefined" ?
|
|
8031
|
+
() => typeof window !== "undefined" ? chunkMZJMOEEX_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
|
|
8039
8032
|
);
|
|
8040
8033
|
react.useEffect(() => {
|
|
8041
8034
|
const handleWindow = () => setIsNarrowViewport(
|
|
8042
|
-
|
|
8035
|
+
chunkMZJMOEEX_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
|
|
8043
8036
|
);
|
|
8044
8037
|
let observer = null;
|
|
8045
8038
|
let raf = 0;
|
|
@@ -8053,12 +8046,12 @@ function useViewerDialogs(input) {
|
|
|
8053
8046
|
const entry = entries[0];
|
|
8054
8047
|
if (entry) {
|
|
8055
8048
|
setIsNarrowViewport(
|
|
8056
|
-
|
|
8049
|
+
chunkMZJMOEEX_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
|
|
8057
8050
|
);
|
|
8058
8051
|
}
|
|
8059
8052
|
});
|
|
8060
8053
|
observer.observe(el);
|
|
8061
|
-
setIsNarrowViewport(
|
|
8054
|
+
setIsNarrowViewport(chunkMZJMOEEX_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
|
|
8062
8055
|
};
|
|
8063
8056
|
attach();
|
|
8064
8057
|
window.addEventListener("resize", handleWindow);
|
|
@@ -8216,12 +8209,12 @@ function useViewerDialogs(input) {
|
|
|
8216
8209
|
}
|
|
8217
8210
|
function computeGridSpacingPx(presentationGridSpacing) {
|
|
8218
8211
|
if (presentationGridSpacing) {
|
|
8219
|
-
const px = Math.round(presentationGridSpacing.cx /
|
|
8212
|
+
const px = Math.round(presentationGridSpacing.cx / chunkSMW4QYGK_js.EMU_PER_PX);
|
|
8220
8213
|
if (px > 0) {
|
|
8221
8214
|
return px;
|
|
8222
8215
|
}
|
|
8223
8216
|
}
|
|
8224
|
-
return
|
|
8217
|
+
return chunkSMW4QYGK_js.GRID_SIZE;
|
|
8225
8218
|
}
|
|
8226
8219
|
function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
|
|
8227
8220
|
if (activeCustomShowId) {
|
|
@@ -8235,8 +8228,8 @@ function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
|
|
|
8235
8228
|
return slides.map((_, i) => i).filter((i) => !slides[i]?.hidden);
|
|
8236
8229
|
}
|
|
8237
8230
|
function computeSlideSectionGroups(slides, sections) {
|
|
8238
|
-
return
|
|
8239
|
-
id: group.section?.id ?? (sections.length > 0 ?
|
|
8231
|
+
return chunkMZJMOEEX_js.groupSlidesBySection(sections, slides).map((group) => ({
|
|
8232
|
+
id: group.section?.id ?? (sections.length > 0 ? chunkSMW4QYGK_js.UNGROUPED_SECTION_ID : "default"),
|
|
8240
8233
|
label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
|
|
8241
8234
|
slideIndexes: group.slideIndexes,
|
|
8242
8235
|
...group.section?.color !== void 0 ? { color: group.section.color } : {},
|
|
@@ -8291,7 +8284,7 @@ function useDerivedSlideState(input) {
|
|
|
8291
8284
|
);
|
|
8292
8285
|
const slideSectionGroups = react.useMemo(
|
|
8293
8286
|
() => computeSlideSectionGroups(slides, sections).map((group) => {
|
|
8294
|
-
if (group.id ===
|
|
8287
|
+
if (group.id === chunkSMW4QYGK_js.UNGROUPED_SECTION_ID && group.label === "Ungrouped Slides") {
|
|
8295
8288
|
return { ...group, label: t("pptx.slides.ungroupedSlides") };
|
|
8296
8289
|
}
|
|
8297
8290
|
if (group.id === "default" && group.label === "Slides") {
|
|
@@ -8394,13 +8387,13 @@ function useAnnotationHandlers(input) {
|
|
|
8394
8387
|
}, [annotations, setMode, setSlides, history]);
|
|
8395
8388
|
const handleSetMode = react.useCallback(
|
|
8396
8389
|
(nextMode) => {
|
|
8397
|
-
if (mode === "present" && nextMode !== "present" && !
|
|
8390
|
+
if (mode === "present" && nextMode !== "present" && !chunkMZJMOEEX_js.mayLeaveSlideShow()) {
|
|
8398
8391
|
return;
|
|
8399
8392
|
}
|
|
8400
8393
|
if (nextMode === "present") {
|
|
8401
8394
|
presentation.enterPresentMode();
|
|
8402
8395
|
} else if (mode === "present" && annotations.hasAnyAnnotations) {
|
|
8403
|
-
|
|
8396
|
+
chunkSMW4QYGK_js.stopAllPersistentAudio();
|
|
8404
8397
|
pendingModeAfterAnnotationsRef.current = nextMode;
|
|
8405
8398
|
if (promptKeepInkAnnotations) {
|
|
8406
8399
|
setShowKeepAnnotationsDialog(true);
|
|
@@ -8409,7 +8402,7 @@ function useAnnotationHandlers(input) {
|
|
|
8409
8402
|
}
|
|
8410
8403
|
} else {
|
|
8411
8404
|
if (mode === "present") {
|
|
8412
|
-
|
|
8405
|
+
chunkSMW4QYGK_js.stopAllPersistentAudio();
|
|
8413
8406
|
}
|
|
8414
8407
|
setMode(nextMode);
|
|
8415
8408
|
}
|
|
@@ -8475,13 +8468,13 @@ function useSerialize(input) {
|
|
|
8475
8468
|
let processedSlide = slide;
|
|
8476
8469
|
if (pendingEditId) {
|
|
8477
8470
|
const updatedElements = slide.elements.map((el) => {
|
|
8478
|
-
if (el.id !== pendingEditId || !
|
|
8471
|
+
if (el.id !== pendingEditId || !chunkMZJMOEEX_js.hasTextProperties(el)) {
|
|
8479
8472
|
return el;
|
|
8480
8473
|
}
|
|
8481
8474
|
return {
|
|
8482
8475
|
...el,
|
|
8483
8476
|
text: pendingEditText,
|
|
8484
|
-
textSegments:
|
|
8477
|
+
textSegments: chunkMZJMOEEX_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
|
|
8485
8478
|
};
|
|
8486
8479
|
});
|
|
8487
8480
|
if (updatedElements.some((el, i) => el !== slide.elements[i])) {
|
|
@@ -8494,14 +8487,14 @@ function useSerialize(input) {
|
|
|
8494
8487
|
const pptxGuides = guides.map((g) => ({
|
|
8495
8488
|
id: g.id,
|
|
8496
8489
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
8497
|
-
positionEmu:
|
|
8490
|
+
positionEmu: chunkMZJMOEEX_js.guidePxToEmu(g.position)
|
|
8498
8491
|
}));
|
|
8499
8492
|
return {
|
|
8500
8493
|
...processedSlide,
|
|
8501
8494
|
guides: pptxGuides.length > 0 ? pptxGuides : void 0
|
|
8502
8495
|
};
|
|
8503
8496
|
});
|
|
8504
|
-
const slidesToSave =
|
|
8497
|
+
const slidesToSave = chunkSMW4QYGK_js.buildSaveSlides(slidesWithGuides, templateElementsBySlideId);
|
|
8505
8498
|
const saveOptions = {
|
|
8506
8499
|
headerFooter,
|
|
8507
8500
|
presentationProperties,
|
|
@@ -8670,7 +8663,7 @@ function usePresentationSetup(input) {
|
|
|
8670
8663
|
containerRef,
|
|
8671
8664
|
content,
|
|
8672
8665
|
onSetMode: (nextMode) => {
|
|
8673
|
-
if (mode === "present" && nextMode !== "present" && !
|
|
8666
|
+
if (mode === "present" && nextMode !== "present" && !chunkMZJMOEEX_js.mayLeaveSlideShow()) {
|
|
8674
8667
|
return;
|
|
8675
8668
|
}
|
|
8676
8669
|
if (mode === "present" && nextMode !== "present" && annotations.hasAnyAnnotations && promptKeepInkAnnotations) {
|
|
@@ -8678,7 +8671,7 @@ function usePresentationSetup(input) {
|
|
|
8678
8671
|
setShowKeepAnnotationsDialog(true);
|
|
8679
8672
|
} else {
|
|
8680
8673
|
if (mode === "present" && nextMode !== "present") {
|
|
8681
|
-
|
|
8674
|
+
chunkSMW4QYGK_js.stopAllPersistentAudio();
|
|
8682
8675
|
stopAnimationSound();
|
|
8683
8676
|
}
|
|
8684
8677
|
setMode(nextMode);
|
|
@@ -8732,10 +8725,10 @@ function usePresentationSetup(input) {
|
|
|
8732
8725
|
onToggleInkMarkup: () => annotations.setInkMarkupVisible(!annotations.inkMarkupVisible),
|
|
8733
8726
|
onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
|
|
8734
8727
|
onSaveRehearsalTimings: (timings) => {
|
|
8735
|
-
setSlides((prev) =>
|
|
8728
|
+
setSlides((prev) => chunkMZJMOEEX_js.applyRehearsalTimings(prev, timings));
|
|
8736
8729
|
history.markDirty();
|
|
8737
8730
|
},
|
|
8738
|
-
loopContinuously:
|
|
8731
|
+
loopContinuously: chunkMZJMOEEX_js.shouldLoopContinuously(presentationProperties),
|
|
8739
8732
|
showWithAnimation: presentationProperties.showWithAnimation,
|
|
8740
8733
|
useTimings: presentationProperties.advanceMode !== "manual",
|
|
8741
8734
|
endWithBlackSlide
|
|
@@ -8897,7 +8890,7 @@ function useEditorOperations(input) {
|
|
|
8897
8890
|
const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
|
|
8898
8891
|
react.useEffect(() => {
|
|
8899
8892
|
if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
|
|
8900
|
-
copiedFormatRef.current =
|
|
8893
|
+
copiedFormatRef.current = chunkMZJMOEEX_js.copyFormatFromElement(selectedElement);
|
|
8901
8894
|
} else if (!formatPainterActive) {
|
|
8902
8895
|
copiedFormatRef.current = null;
|
|
8903
8896
|
}
|
|
@@ -8923,12 +8916,12 @@ function useEditorOperations(input) {
|
|
|
8923
8916
|
e.stopPropagation();
|
|
8924
8917
|
const element = elementLookup.get(elementId);
|
|
8925
8918
|
if (element) {
|
|
8926
|
-
const updated =
|
|
8919
|
+
const updated = chunkMZJMOEEX_js.applyFormatToElement(element, copiedFormatRef.current);
|
|
8927
8920
|
const updates = {};
|
|
8928
|
-
if (
|
|
8921
|
+
if (chunkMZJMOEEX_js.hasShapeProperties(updated)) {
|
|
8929
8922
|
updates.shapeStyle = updated.shapeStyle;
|
|
8930
8923
|
}
|
|
8931
|
-
if (
|
|
8924
|
+
if (chunkMZJMOEEX_js.hasTextProperties(updated)) {
|
|
8932
8925
|
updates.textStyle = updated.textStyle;
|
|
8933
8926
|
}
|
|
8934
8927
|
ops.updateElementById(elementId, updates);
|
|
@@ -9075,7 +9068,7 @@ function collectReferencedFontFamilies(slides) {
|
|
|
9075
9068
|
const families = /* @__PURE__ */ new Set();
|
|
9076
9069
|
for (const slide of slides) {
|
|
9077
9070
|
for (const el of slide.elements) {
|
|
9078
|
-
if (
|
|
9071
|
+
if (chunkMZJMOEEX_js.hasTextProperties(el) && el.textSegments) {
|
|
9079
9072
|
for (const seg of el.textSegments) {
|
|
9080
9073
|
if (seg.style.fontFamily) {
|
|
9081
9074
|
families.add(seg.style.fontFamily);
|
|
@@ -9644,7 +9637,7 @@ function useViewerIntegration(input) {
|
|
|
9644
9637
|
return zoom.scale;
|
|
9645
9638
|
},
|
|
9646
9639
|
setZoom(level) {
|
|
9647
|
-
zoom.setScale(Math.min(Math.max(level,
|
|
9640
|
+
zoom.setScale(Math.min(Math.max(level, chunkSMW4QYGK_js.MIN_ZOOM_SCALE), chunkSMW4QYGK_js.MAX_ZOOM_SCALE));
|
|
9648
9641
|
},
|
|
9649
9642
|
zoomIn() {
|
|
9650
9643
|
zoom.handleZoomIn();
|
|
@@ -9859,7 +9852,7 @@ function useReducedMotion() {
|
|
|
9859
9852
|
}
|
|
9860
9853
|
function useViewerOptions() {
|
|
9861
9854
|
const storeRef = react.useRef(null);
|
|
9862
|
-
storeRef.current ??=
|
|
9855
|
+
storeRef.current ??= chunkMZJMOEEX_js.createViewerOptionsStore();
|
|
9863
9856
|
const store = storeRef.current;
|
|
9864
9857
|
const options = react.useSyncExternalStore(
|
|
9865
9858
|
(onStoreChange) => store.subscribe(onStoreChange),
|
|
@@ -9868,9 +9861,9 @@ function useViewerOptions() {
|
|
|
9868
9861
|
);
|
|
9869
9862
|
return { optionsStore: store, options };
|
|
9870
9863
|
}
|
|
9871
|
-
var KNOWN_TAB_IDS = new Set(
|
|
9864
|
+
var KNOWN_TAB_IDS = new Set(chunkMZJMOEEX_js.TOOLBAR_TABS.map((tab) => tab.id));
|
|
9872
9865
|
function computeToolbarVisibility(hiddenActions) {
|
|
9873
|
-
const isHidden = (id) =>
|
|
9866
|
+
const isHidden = (id) => chunkMZJMOEEX_js.isActionHidden(id, hiddenActions);
|
|
9874
9867
|
const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id);
|
|
9875
9868
|
return { isHidden, isTabVisible };
|
|
9876
9869
|
}
|
|
@@ -9955,12 +9948,12 @@ function useYjsDocumentSync({
|
|
|
9955
9948
|
return;
|
|
9956
9949
|
}
|
|
9957
9950
|
try {
|
|
9958
|
-
const handler = new
|
|
9951
|
+
const handler = new chunkMZJMOEEX_js.PptxHandler();
|
|
9959
9952
|
await handler.load(sourceBytes.buffer);
|
|
9960
|
-
const currentSlides =
|
|
9953
|
+
const currentSlides = chunkMZJMOEEX_js.readSlidesFromYDoc(
|
|
9961
9954
|
doc
|
|
9962
9955
|
);
|
|
9963
|
-
const slidesToSave =
|
|
9956
|
+
const slidesToSave = chunkSMW4QYGK_js.buildSaveSlides(currentSlides, templateElementsBySlideId);
|
|
9964
9957
|
const bytes = await handler.save(slidesToSave);
|
|
9965
9958
|
config.onWriteBack(bytes);
|
|
9966
9959
|
} catch {
|
|
@@ -9975,7 +9968,7 @@ function useYjsDocumentSync({
|
|
|
9975
9968
|
if (!doc || !isConnected) {
|
|
9976
9969
|
return;
|
|
9977
9970
|
}
|
|
9978
|
-
const docSlides =
|
|
9971
|
+
const docSlides = chunkMZJMOEEX_js.readSlidesFromYDoc(
|
|
9979
9972
|
doc
|
|
9980
9973
|
);
|
|
9981
9974
|
if (docSlides.length === 0) {
|
|
@@ -9997,11 +9990,11 @@ function useYjsDocumentSync({
|
|
|
9997
9990
|
lastSyncedRef.current = serialized;
|
|
9998
9991
|
void (async () => {
|
|
9999
9992
|
const factories = await getFactories();
|
|
10000
|
-
|
|
9993
|
+
chunkMZJMOEEX_js.reconcileSlidesInYDoc(
|
|
10001
9994
|
slides,
|
|
10002
9995
|
doc,
|
|
10003
9996
|
factories,
|
|
10004
|
-
|
|
9997
|
+
chunkMZJMOEEX_js.LOCAL_SYNC_ORIGIN
|
|
10005
9998
|
);
|
|
10006
9999
|
scheduleWriteBack();
|
|
10007
10000
|
})();
|
|
@@ -10015,10 +10008,10 @@ function useYjsDocumentSync({
|
|
|
10015
10008
|
return;
|
|
10016
10009
|
}
|
|
10017
10010
|
const handleChange = (_events, transaction) => {
|
|
10018
|
-
if (transaction?.origin ===
|
|
10011
|
+
if (transaction?.origin === chunkMZJMOEEX_js.LOCAL_SYNC_ORIGIN) {
|
|
10019
10012
|
return;
|
|
10020
10013
|
}
|
|
10021
|
-
const remoteSlides =
|
|
10014
|
+
const remoteSlides = chunkMZJMOEEX_js.readSlidesFromYDoc(
|
|
10022
10015
|
doc
|
|
10023
10016
|
);
|
|
10024
10017
|
if (remoteSlides.length === 0) {
|
|
@@ -10034,7 +10027,7 @@ function useYjsDocumentSync({
|
|
|
10034
10027
|
isApplyingRemoteRef.current = false;
|
|
10035
10028
|
scheduleWriteBack();
|
|
10036
10029
|
};
|
|
10037
|
-
const unobserve =
|
|
10030
|
+
const unobserve = chunkMZJMOEEX_js.observeYDocSlides(
|
|
10038
10031
|
doc,
|
|
10039
10032
|
handleChange
|
|
10040
10033
|
);
|
|
@@ -10072,7 +10065,7 @@ function useBroadcastFollower({
|
|
|
10072
10065
|
if (!broadcaster) {
|
|
10073
10066
|
return;
|
|
10074
10067
|
}
|
|
10075
|
-
if (!
|
|
10068
|
+
if (!chunkMZJMOEEX_js.shouldAutoFollowBroadcaster({
|
|
10076
10069
|
localRole: collab.config.role,
|
|
10077
10070
|
broadcasterRole: broadcaster.role
|
|
10078
10071
|
})) {
|
|
@@ -10232,10 +10225,10 @@ function useTouchGestures(input) {
|
|
|
10232
10225
|
if (!el || !enabled) {
|
|
10233
10226
|
return;
|
|
10234
10227
|
}
|
|
10235
|
-
const recognizer =
|
|
10228
|
+
const recognizer = chunkMZJMOEEX_js.createTouchGestureRecognizer({
|
|
10236
10229
|
getScale: () => scaleRef.current,
|
|
10237
|
-
minScale:
|
|
10238
|
-
maxScale:
|
|
10230
|
+
minScale: chunkSMW4QYGK_js.MIN_ZOOM_SCALE,
|
|
10231
|
+
maxScale: chunkSMW4QYGK_js.MAX_ZOOM_SCALE,
|
|
10239
10232
|
callbacks: {
|
|
10240
10233
|
onPinchZoom: (newScale) => callbacksRef.current.onPinchZoom?.(newScale),
|
|
10241
10234
|
onSwipe: (direction) => callbacksRef.current.onSwipe?.(direction),
|
|
@@ -10275,7 +10268,7 @@ function scrollFocusedIntoView(keyboardInset) {
|
|
|
10275
10268
|
return;
|
|
10276
10269
|
}
|
|
10277
10270
|
const rect = active.getBoundingClientRect();
|
|
10278
|
-
const delta =
|
|
10271
|
+
const delta = chunkMZJMOEEX_js.computeScrollDelta(
|
|
10279
10272
|
{ top: rect.top, bottom: rect.bottom },
|
|
10280
10273
|
window.innerHeight,
|
|
10281
10274
|
keyboardInset
|
|
@@ -10295,8 +10288,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10295
10288
|
return;
|
|
10296
10289
|
}
|
|
10297
10290
|
const update = () => {
|
|
10298
|
-
const metrics =
|
|
10299
|
-
const inset = metrics ?
|
|
10291
|
+
const metrics = chunkMZJMOEEX_js.readViewportMetrics(window);
|
|
10292
|
+
const inset = metrics ? chunkMZJMOEEX_js.computeKeyboardInset(metrics) : 0;
|
|
10300
10293
|
setKeyboardInset(inset);
|
|
10301
10294
|
if (inset > 0) {
|
|
10302
10295
|
window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
|
|
@@ -10307,8 +10300,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10307
10300
|
vv.addEventListener("scroll", update);
|
|
10308
10301
|
const onFocusIn = () => {
|
|
10309
10302
|
window.requestAnimationFrame(() => {
|
|
10310
|
-
const metrics =
|
|
10311
|
-
const inset = metrics ?
|
|
10303
|
+
const metrics = chunkMZJMOEEX_js.readViewportMetrics(window);
|
|
10304
|
+
const inset = metrics ? chunkMZJMOEEX_js.computeKeyboardInset(metrics) : 0;
|
|
10312
10305
|
if (inset > 0) {
|
|
10313
10306
|
scrollFocusedIntoView(inset);
|
|
10314
10307
|
}
|
|
@@ -10321,7 +10314,7 @@ function useKeyboardInsets(enabled = true) {
|
|
|
10321
10314
|
document.removeEventListener("focusin", onFocusIn);
|
|
10322
10315
|
};
|
|
10323
10316
|
}, [enabled]);
|
|
10324
|
-
return { keyboardInset, isKeyboardOpen:
|
|
10317
|
+
return { keyboardInset, isKeyboardOpen: chunkMZJMOEEX_js.isKeyboardOpen(keyboardInset) };
|
|
10325
10318
|
}
|
|
10326
10319
|
|
|
10327
10320
|
// src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
|
|
@@ -10376,13 +10369,13 @@ function buildCanvasProps(input) {
|
|
|
10376
10369
|
if (mode === "present") {
|
|
10377
10370
|
presentation.handlePresentationAction(action);
|
|
10378
10371
|
} else if (action.url) {
|
|
10379
|
-
|
|
10372
|
+
chunkMZJMOEEX_js.safeOpenUrl(action.url);
|
|
10380
10373
|
}
|
|
10381
10374
|
};
|
|
10382
10375
|
const handleHyperlinkClick = (url) => {
|
|
10383
|
-
if (
|
|
10376
|
+
if (chunkMZJMOEEX_js.isPpactionUrl(url)) {
|
|
10384
10377
|
if (mode === "present") {
|
|
10385
|
-
const parsed =
|
|
10378
|
+
const parsed = chunkMZJMOEEX_js.parsePpactionUrl(url);
|
|
10386
10379
|
if (parsed) {
|
|
10387
10380
|
presentation.handlePresentationAction({
|
|
10388
10381
|
action: parsed.action,
|
|
@@ -10392,7 +10385,7 @@ function buildCanvasProps(input) {
|
|
|
10392
10385
|
}
|
|
10393
10386
|
return;
|
|
10394
10387
|
}
|
|
10395
|
-
|
|
10388
|
+
chunkMZJMOEEX_js.safeOpenUrl(url);
|
|
10396
10389
|
};
|
|
10397
10390
|
return {
|
|
10398
10391
|
activeSlide: effectiveSlide,
|
|
@@ -10712,7 +10705,7 @@ function buildToolbarProps(input) {
|
|
|
10712
10705
|
onOpenFile,
|
|
10713
10706
|
onOpenRecentFile,
|
|
10714
10707
|
onCreatePresentation: (templateId) => {
|
|
10715
|
-
s.setSlides(
|
|
10708
|
+
s.setSlides(chunkMZJMOEEX_js.createBackstagePresentation(templateId));
|
|
10716
10709
|
s.setActiveSlideIndex(0);
|
|
10717
10710
|
s.setSelectedElementId(null);
|
|
10718
10711
|
s.setSelectedElementIds([]);
|
|
@@ -10767,7 +10760,7 @@ function buildToolbarProps(input) {
|
|
|
10767
10760
|
isCommentsPanelOpen: s.isInspectorPaneOpen,
|
|
10768
10761
|
slideCommentCount: activeSlide?.comments?.length ?? 0,
|
|
10769
10762
|
formatPainterActive: s.formatPainterActive,
|
|
10770
|
-
canActivateFormatPainter:
|
|
10763
|
+
canActivateFormatPainter: chunkMZJMOEEX_js.hasCopyableFormat(selectedElement),
|
|
10771
10764
|
onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
|
|
10772
10765
|
isSelectionPaneOpen: s.isSelectionPaneOpen,
|
|
10773
10766
|
onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
|
|
@@ -11030,7 +11023,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
11030
11023
|
}, [incomingContent]);
|
|
11031
11024
|
const onOpenFile = react.useCallback(() => {
|
|
11032
11025
|
void (async () => {
|
|
11033
|
-
const picked = await
|
|
11026
|
+
const picked = await chunkMZJMOEEX_js.openPptxFile();
|
|
11034
11027
|
if (picked) {
|
|
11035
11028
|
setContent(picked.buffer);
|
|
11036
11029
|
}
|
|
@@ -11038,7 +11031,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
11038
11031
|
}, []);
|
|
11039
11032
|
const onOpenRecentFile = react.useCallback((key) => {
|
|
11040
11033
|
void (async () => {
|
|
11041
|
-
const bytes = await
|
|
11034
|
+
const bytes = await chunkMZJMOEEX_js.readBackstageRecentFile(key);
|
|
11042
11035
|
if (bytes) {
|
|
11043
11036
|
setContent(bytes);
|
|
11044
11037
|
}
|